]> git.sesse.net Git - vlc/blob - configure.in
* FreeBSD CSS decryption support.
[vlc] / configure.in
1 dnl Autoconf settings for vlc
2 AC_INIT(src/interface/main.c)
3 AC_CONFIG_HEADER(include/defs.h)
4
5 AC_CANONICAL_HOST
6
7 VLC_VERSION=0.2.73
8 AC_SUBST(VLC_VERSION)
9 VLC_CODENAME=Ourumov
10 AC_SUBST(VLC_CODENAME)
11
12 dnl Save CFLAGS
13 save_CFLAGS="${CFLAGS}"
14
15 dnl Check for tools
16 AC_PROG_MAKE_SET
17 AC_PROG_CC
18 AC_PROG_CPP
19 AC_PROG_RANLIB
20
21 dnl AM_PROG_LIBTOOL
22 AC_PROG_INSTALL
23
24 dnl Check for compiler environment
25 AC_C_CONST
26
27 dnl Check for endianness if not cross-compiling
28 if test x${cross_compiling} != xyes; then
29   AC_C_BIGENDIAN
30 fi
31
32 dnl Check for system libs needed
33 AC_CHECK_FUNCS(gettimeofday select strerror strtod strtol)
34 AC_CHECK_FUNCS(setenv putenv)
35 AC_CHECK_FUNC(connect,,[
36   AC_CHECK_LIB(socket,connect,LIB="${LIB} -lsocket")
37 ])
38 AC_CHECK_FUNC(gethostbyname,,[
39   AC_CHECK_LIB(nsl,gethostbyname,LIB="${LIB} -lnsl")
40 ])
41 AC_CHECK_FUNC(nanosleep,,[
42   AC_CHECK_LIB(rt,nanosleep,LIB="${LIB} -lrt",[
43     AC_CHECK_LIB(posix4,nanosleep,LIB="${LIB} -lposix4")
44   ])
45 ])
46 AC_CHECK_FUNCS(usleep)
47 AC_CHECK_FUNC(inet_aton,,[
48   AC_CHECK_LIB(resolv,inet_aton,LIB="${LIB} -lresolv")
49 ])
50 AC_CHECK_FUNCS(vasprintf)
51 AC_CHECK_FUNCS(swab)
52
53 AC_CHECK_FUNC(getopt_long,[AC_DEFINE(HAVE_GETOPT_LONG,1,long getopt support)],
54 [ # FreeBSD has a gnugetopt library for this:
55   AC_CHECK_LIB([gnugetopt],[getopt_long],
56     [AC_DEFINE(HAVE_GETOPT_LONG,1,getopt support) LIB="${LIB} -lgnugetopt"],
57     [GETOPT=1])])
58 AC_SUBST(GETOPT)
59
60 AC_FUNC_MMAP
61 AC_TYPE_SIGNAL
62 AC_CHECK_LIB(dl,dlopen,LIB="${LIB} -ldl")
63 AC_CHECK_LIB(m,pow,LIB_YUV="${LIB_YUV} -lm")
64 AC_MSG_CHECKING(for old style FreeBSD -pthread flag)
65 AC_EGREP_CPP(yes,
66         [#if defined(__FreeBSD_cc_version) && __FreeBSD_cc_version <= 500001
67           yes
68         #endif
69         ], AC_MSG_RESULT(yes)
70         DEFINE="${DEFINE} -D_THREAD_SAFE" LIB="${LIB} -pthread",
71         AC_MSG_RESULT(no)
72         AC_CHECK_LIB(pthread,pthread_create,LIB="${LIB} -lpthread"))
73 AC_CHECK_LIB(threads,thread_create,LIB="${LIB} -lthreads")
74
75 CPPFLAGS="${CPPFLAGS} -I/usr/local/include"
76
77 dnl Check for headers
78 AC_CHECK_HEADERS(stddef.h getopt.h strings.h)
79 AC_CHECK_HEADERS(sys/sockio.h fcntl.h sys/time.h unistd.h)
80 AC_CHECK_HEADERS(sys/soundcard.h machine/soundcard.h)
81 AC_CHECK_HEADERS(dlfcn.h image.h)
82 AC_CHECK_HEADERS(arpa/inet.h net/if.h netinet/in.h sys/socket.h)
83 AC_CHECK_HEADERS(machine/param.h)
84
85 dnl Check for threads library
86 AC_CHECK_HEADERS(cthreads.h pthread.h kernel/scheduler.h kernel/OS.h)
87
88 dnl Check for misc headers
89 AC_EGREP_HEADER(pthread_cond_t,pthread.h,[
90   AC_DEFINE(PTHREAD_COND_T_IN_PTHREAD_H, 1,
91             Define if <pthread.h> defines pthread_cond_t.)
92 ])
93 AC_EGREP_HEADER(strncasecmp,strings.h,[
94   AC_DEFINE(STRNCASECMP_IN_STRINGS_H, 1,
95             Define if <strings.h> defines strncasecmp.)
96 ])
97
98 dnl Check for ntohl, etc.
99 CFLAGS="${CFLAGS} -Wall -Werror"
100 AC_MSG_CHECKING([for ntohl in sys/param.h])
101 AC_TRY_COMPILE([#include <sys/param.h>
102 void foo() { int meuh; ntohl(meuh); }],,
103  AC_DEFINE(NTOHL_IN_SYS_PARAM_H, 1, Define if <sys/param.h> defines ntohl.)
104  AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
105
106 dnl Check for -rdynamic flag
107 CFLAGS="${CFLAGS} -rdynamic -Wall -Werror"
108 AC_MSG_CHECKING([if \$CC groks -rdynamic without complaining too much])
109 AC_TRY_COMPILE([],,
110  LCFLAGS="${LCFLAGS} -rdynamic"
111  AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
112
113 dnl End of the bizarre compilation tests
114 CFLAGS="${save_CFLAGS}"
115
116 dnl Check for boolean_t
117 AC_MSG_CHECKING([for boolean_t in sys/types.h])
118 AC_TRY_COMPILE([#include <sys/types.h>
119 void quux() { boolean_t foo; }],,
120  AC_DEFINE(BOOLEAN_T_IN_SYS_TYPES_H, 1, Define if <sys/types.h> defines boolean_t.)
121  AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
122 AC_MSG_CHECKING([for boolean_t in pthread.h])
123 AC_TRY_COMPILE([#include <pthread.h>
124 void quux() { boolean_t foo; }],,
125  AC_DEFINE(BOOLEAN_T_IN_PTHREAD_H, 1, Define if <pthread.h> defines boolean_t.)
126  AC_MSG_RESULT(yes), AC_MSG_RESULT(no))
127
128 dnl Checks for typedefs, structures, and compiler characteristics.
129 AC_C_CONST
130 AC_TYPE_SIZE_T
131 AC_HEADER_TIME
132
133 ARCH=${host_cpu}
134
135 dnl
136 dnl  default modules
137 dnl
138 BUILTINS="${BUILTINS} es ps ts yuv idct idctclassic motion"
139 case x$host_os in
140   xbeos|xnto-qnx)
141     ACCEL_PLUGINS="yuvmmx idctmmx motionmmx"
142     ;;
143   xmingw32msvc)
144     ACCEL_PLUGINS="idctmmx idctmmxext motionmmx motionmmxext"
145     ;;
146   *)
147     ACCEL_PLUGINS="yuvmmx idctmmx idctmmxext motionmmx motionmmxext"
148     ;;
149 esac
150
151 dnl
152 dnl  DVD module: check for DVD ioctls
153 dnl
154 AC_CHECK_HEADERS(sys/ioctl.h,[
155   BUILTINS="${BUILTINS} dvd"
156   AC_CHECK_HEADERS(sys/cdio.h sys/dvdio.h linux/cdrom.h)
157   BSD_DVD_STRUCT=0
158   dnl
159   dnl Old FreeBSD: sys/cdio.h
160   dnl
161   AC_EGREP_HEADER(dvd_struct,sys/dvdio.h,[
162     AC_DEFINE(DVD_STRUCT_IN_SYS_DVDIO_H, 1,
163               Define if <sys/dvdio.h> defines dvd_struct.)
164     BSD_DVD_STRUCT=1
165   ])
166   dnl
167   dnl Newer FreeBSD: sys/dvdio.h
168   dnl
169   AC_EGREP_HEADER(dvd_struct,sys/cdio.h,[
170     AC_DEFINE(DVD_STRUCT_IN_SYS_CDIO_H, 1,
171               Define if <sys/cdio.h> defines dvd_struct.)
172     BSD_DVD_STRUCT=1
173   ])
174   if test x$BSD_DVD_STRUCT = x1; then
175     AC_DEFINE(HAVE_BSD_DVD_STRUCT, 1,
176               Define if BSD-like dvd_struct is defined.)
177   fi
178   dnl
179   dnl Linux: linux/cdrom.h
180   dnl
181   AC_EGREP_HEADER(dvd_struct,linux/cdrom.h,[
182     AC_DEFINE(DVD_STRUCT_IN_LINUX_CDROM_H, 1,
183               Define if <linux/cdrom.h> defines DVD_STRUCT.)
184   ])
185 ])
186
187 dnl
188 dnl  dummy plugin
189 dnl
190 AC_ARG_ENABLE(dummy,
191   [  --disable-dummy         dummy module (default enabled)])
192 if test x$enable_dummy != xno; then
193   BUILTINS="${BUILTINS} dummy"; fi
194
195 dnl
196 dnl  null plugin
197 dnl
198 AC_ARG_ENABLE(null,
199   [  --disable-null          Null module (default enabled)])
200 if test x$enable_null != xno; then
201   BUILTINS="${BUILTINS} null"; fi
202
203 dnl
204 dnl  rc plugin
205 dnl
206 AC_ARG_ENABLE(rc,
207   [  --disable-rc            rc module (default enabled)])
208 if test x$enable_rc != xno; then
209   BUILTINS="${BUILTINS} rc"; fi
210
211 dnl
212 dnl  PentiumPro acceleration
213 dnl
214 AC_ARG_ENABLE(ppro,
215 [  --disable-ppro          Disable PentiumPro optimizations (default enabled for x86)],
216 [ if test x$enableval = xyes; then ARCH="${ARCH} ppro"; fi ],
217 [ if test x${host_cpu} = xi686; then ARCH="${ARCH} ppro"; fi ])
218
219 dnl
220 dnl  MMX acceleration
221 dnl
222 AC_ARG_ENABLE(mmx,
223 [  --disable-mmx           Disable MMX optimizations (default enabled for x86)],
224 [ if test x$enableval = xyes; then ARCH="${ARCH} mmx";
225   BUILTINS="${BUILTINS} ${ACCEL_PLUGINS}"; fi ],
226 [ if test x${host_cpu} = xi686 -o x${host_cpu} = xi586 -o x${host_cpu} = xx86 -o x${host_cpu} = xi386; then ARCH="${ARCH} mmx";
227   BUILTINS="${BUILTINS} ${ACCEL_PLUGINS}"; fi ])
228
229 dnl
230 dnl  AltiVec acceleration
231 dnl
232 AC_ARG_ENABLE(altivec,
233 [  --enable-altivec        Enable altivec optimizations (default disabled since it is broken)],
234 [ if test x$enableval = xyes; then ARCH="${ARCH} altivec";
235     BUILTINS="${BUILTINS} idctaltivec"
236     LIB_IDCTALTIVEC="-framework vecLib"
237   fi ])
238 #[ if test -d /System/Library/Frameworks/vecLib.framework; then ARCH="${ARCH} altivec"; PLUGINS="${PLUGINS} idctaltivec"; fi ])
239
240 dnl
241 dnl  CSS DVD decryption
242 dnl
243 AC_ARG_ENABLE(css,
244 [  --disable-css           Disable DVD CSS decryption (default enabled)],
245 [ if test x$enableval = xyes; then CSS=1; else CSS=0; fi ], [ CSS=1; ])
246 if test x${CSS} = x1; then AC_DEFINE(HAVE_CSS, 1, Define if you want DVD CSS decryption.) fi
247
248 dnl
249 dnl  Debugging mode
250 dnl
251 AC_ARG_ENABLE(debug,
252 [  --enable-debug          Enable debug mode (default disabled)],
253 [ if test x$enableval = xyes; then DEBUG=1; fi ])
254
255 dnl
256 dnl  Enable/disable statistics
257 dnl
258 AC_ARG_ENABLE(stats,
259 [  --enable-stats          Enable printing of statistics (default disabled)],
260 [ if test x$enableval = xyes; then STATS=1; fi ])
261
262 dnl
263 dnl  Trace mode
264 dnl
265 AC_ARG_ENABLE(trace,
266 [  --enable-trace          Enable trace mode (default disabled)],
267 [ if test x$enableval = xyes; then TRACE=1; fi ])
268
269 dnl
270 dnl  Enable/disable optimizations
271 dnl
272 AC_ARG_ENABLE(optimizations,
273 [  --disable-optimizations Disable compiler optimizations (default enabled)],
274 [ if test x$enableval = xno; then OPTIMS=0; fi ],
275 [ OPTIMS=1 ])
276
277 SYS=${host_os}
278
279 dnl special case for BeOS
280 if test x$host_os = xbeos; then
281     BUILTINS="${BUILTINS} beos"
282     LIB_BEOS="-lbe -lgame -lroot -ltracker"
283
284 dnl default case
285 else
286
287 dnl
288 dnl  OSS /dev/dsp module
289 dnl
290 AC_ARG_ENABLE(dsp,
291   [  --disable-dsp           Linux /dev/dsp support (default enabled)])
292 if test x$enable_dsp != xno; then
293   if test -c /dev/dsp; then
294     PLUGINS="${PLUGINS} dsp"
295   fi
296 fi
297
298 dnl
299 dnl  Esound module
300 dnl
301 AC_ARG_ENABLE(esd,
302   [  --enable-esd            Esound library support (default disabled)],
303   [if test x$enable_esd = xyes; then
304      AC_PATH_PROG(ESD_CONFIG, esd-config, no)
305      if test x${ESD_CONFIG} != xno; then
306        PLUGINS="${PLUGINS} esd"
307        LIB_ESD="`${ESD_CONFIG} --libs`"
308      fi
309    fi])
310
311 dnl
312 dnl  Darwin module
313 dnl
314 AC_ARG_ENABLE(darwin,
315   [  --enable-darwin         Darwin sound support (default disabled)],
316   [if test x$enable_darwin = xyes; then
317      PLUGINS="${PLUGINS} darwin"
318      LIB_DARWIN="-framework CoreAudio"
319    fi])
320
321 dnl
322 dnl  MacOS X module
323 dnl
324 AC_ARG_ENABLE(macosx,
325   [  --enable-macosx         Mac OS X interface support (default enabled in Mac OS X)],
326   [if test x$enable_macosx = xyes; then
327      BUILTINS="${BUILTINS} macosx"
328      LIB_MACOSX="-framework CoreAudio -framework Carbon -framework AGL"
329      LIB_TS="${LIB_TS} -framework AGL -framework Carbon"
330      LIB_SDL="${LIB_SDL} -framework AGL -framework Carbon"
331    fi],
332   [AC_CHECK_HEADERS(Carbon/Carbon.h,
333      BUILTINS="${BUILTINS} macosx"
334      LIB_MACOSX="-framework CoreAudio -framework Carbon -framework AGL"
335      LIB_TS="${LIB_TS} -framework AGL -framework Carbon"
336      LIB_SDL="${LIB_SDL} -framework AGL -framework Carbon"
337    )])
338
339 dnl
340 dnl  Linux framebuffer module
341 dnl
342 AC_ARG_ENABLE(fb,
343   [  --enable-fb             Linux framebuffer support (default disabled)],
344   [if test x$enable_fb = xyes; then PLUGINS="${PLUGINS} fb"; fi])
345
346 dnl
347 dnl  GGI module
348 dnl
349 AC_ARG_WITH(ggi,
350   [  --with-ggi[=name]       GGI support (default disabled)],
351   [ if test "x$withval" != "xno";
352     then
353       PLUGINS="${PLUGINS} ggi";
354       if test "x$withval" != "xyes";
355       then
356         LIB_GGI="-l"$withval
357       else
358         LIB_GGI="-lggi"
359       fi
360     fi ])
361
362 dnl
363 dnl  SDL module
364 dnl
365 AC_ARG_WITH(sdl,
366   [  --with-sdl[=name]       SDL support (default enabled)],
367   [ if test "x$withval" != "xno";
368     then
369       PLUGINS="${PLUGINS} sdl";
370       if test "x$withval" != "xyes";
371       then
372         LIB_SDL="${LIB_SDL} -L/usr/X11R6/lib -L"$withval"/lib -lSDL"
373         INCLUDE="${INCLUDE} -I"$withval"/include"
374       else
375         AC_CHECK_HEADERS(SDL/SDL.h, , [echo "Cannot find SDL headers !"; exit])
376         LIB_SDL="${LIB_SDL} -L/usr/X11R6/lib -lSDL"
377       fi
378     fi ])
379     if test "x$withval" = "x";
380     then
381       AC_CHECK_HEADERS(SDL/SDL.h,
382       [PLUGINS="${PLUGINS} sdl"
383        LIB_SDL="${LIB_SDL} -L/usr/X11R6/lib -lSDL"])
384     fi
385
386 dnl
387 dnl  Glide module
388 dnl
389 AC_ARG_WITH(glide,
390   [  --with-glide[=name]     Glide (3dfx) support (default disabled)],
391   [ if test "x$withval" != "xno";
392     then
393       PLUGINS="${PLUGINS} glide";
394       if test "x$withval" != "xyes";
395       then
396         LIB_GLIDE="-l"$withval
397       else
398         LIB_GLIDE="-lglide2x"
399       fi
400     fi ])
401
402 dnl
403 dnl  ncurses module
404 dnl
405 AC_ARG_ENABLE(ncurses,
406   [  --enable-ncurses        ncurses interface support (default disabled)],
407   [if test x$enable_ncurses = xyes; then
408      PLUGINS="${PLUGINS} ncurses"
409      LIB_NCURSES="-lncurses"
410    fi])
411
412 dnl
413 dnl  Qt module
414 dnl
415 AC_ARG_ENABLE(qt,
416   [  --enable-qt             Qt interface support (default disabled)],
417   [if test x$enable_qt = xyes; then
418      PLUGINS="${PLUGINS} qt"
419      ALIASES="${ALIASES} qvlc"
420      LIB_QT="-lqt -L${QTDIR}/lib"
421      if test -x ${QTDIR}/bin/moc ;
422      then
423        MOC=${QTDIR}/bin/moc
424      else
425        MOC=moc
426      fi
427    fi])
428
429 dnl 
430 dnl  KDE module
431 dnl
432 AC_ARG_ENABLE(kde,
433   [  --enable-kde            KDE interface support (default disabled)],
434   [if test x$enable_kde = xyes; then PLUGINS="${PLUGINS} kde"; ALIASES="${ALIASES} kvlc"; fi])
435
436 dnl
437 dnl  Gnome module
438 dnl
439 AC_ARG_ENABLE(gnome,
440   [  --enable-gnome          Gnome interface support (default disabled)],
441   [if test x$enable_gnome = xyes; then
442      PLUGINS="${PLUGINS} gnome"
443      ALIASES="${ALIASES} gnome-vlc"
444      LIB_GNOME="`gnome-config --libs gnomeui | sed 's,-rdynamic,,'`"
445    fi])
446
447 dnl
448 dnl  Gtk+ module
449 dnl
450 AC_ARG_ENABLE(gtk,
451   [  --disable-gtk           Gtk+ support (default enabled)])
452 if test x$enable_gtk != xno; then
453   AC_PATH_PROG(GTK_CONFIG, gtk-config, no)
454   if test x${GTK_CONFIG} != xno; then
455     PLUGINS="${PLUGINS} gtk"
456     ALIASES="${ALIASES} gvlc"
457     CFLAGS_GTK="`${GTK_CONFIG} --cflags gtk`"
458     LIB_GTK="`${GTK_CONFIG} --libs gtk | sed 's,-rdynamic,,'`"
459   fi
460 fi
461
462 dnl
463 dnl  X11 module
464 dnl
465 AC_ARG_ENABLE(x11,
466   [  --disable-x11           X11 support (default enabled)])
467 if test x$enable_x11 != xno; then
468   if test x$x_includes = xNONE; then
469     x_includes=/usr/X11R6/include
470   fi
471   if test x$x_libraries = xNONE; then
472     x_libraries=/usr/X11R6/lib
473   fi
474   saved_CPPFLAGS=$CPPFLAGS
475   CPPFLAGS="$CPPFLAGS -I$x_includes"
476   AC_CHECK_HEADERS(X11/Xlib.h, [
477     PLUGINS="${PLUGINS} x11"
478     LIB_X11="-L$x_libraries -lX11 -lXext"
479     CFLAGS_X11="-I$x_includes"
480   ]
481   CPPFLAGS=$saved_CPPFLAGS)
482 fi
483
484 dnl
485 dnl  XVideo module
486 dnl
487 AC_ARG_ENABLE(xvideo,
488   [  --disable-xvideo        XVideo support (default enabled)])
489 if test x$enable_xvideo != xno; then
490   if test x$x_includes = xNONE; then
491     x_includes=/usr/X11R6/include
492   fi
493   if test x$x_libraries = xNONE; then
494     x_libraries=/usr/X11R6/lib
495   fi
496   saved_CPPFLAGS=$CPPFLAGS
497   CPPFLAGS="$CPPFLAGS -I$x_includes"
498   AC_CHECK_HEADERS(X11/extensions/Xv.h, [
499     PLUGINS="${PLUGINS} xvideo"
500     LIB_XVIDEO="-L$x_libraries -lX11 -lXext -lXv"
501     CFLAGS_X11="-I$x_includes"
502   ]
503   CPPFLAGS=$saved_CPPFLAGS)
504 fi
505
506 dnl
507 dnl  ALSA module
508 dnl
509 AC_ARG_ENABLE(alsa,
510   [  --enable-alsa           Alsa sound drivers support (Only for linux) (default disabled)],
511   [if test x$enable_alsa = xyes; then AC_CHECK_HEADER(sys/asoundlib.h, AC_CHECK_LIB(asound, main, have_alsa="true", have_alsa="false"),have_alsa="false") if test x$have_alsa = xtrue; then
512      PLUGINS="${PLUGINS} alsa"
513      LIB_ALSA="-lasound"
514    fi; fi])
515
516 dnl  end of non-BeOS stuff
517 fi
518
519 dnl 
520 dnl  Configuration is finished
521 dnl
522 AC_SUBST(SYS)
523 AC_SUBST(ARCH)
524 AC_SUBST(PLUGINS)
525 AC_SUBST(BUILTINS)
526 AC_SUBST(ALIASES)
527 AC_SUBST(DEFINE)
528 AC_SUBST(INCLUDE)
529 AC_SUBST(DEBUG)
530 AC_SUBST(STATS)
531 AC_SUBST(TRACE)
532 AC_SUBST(OPTIMS)
533 AC_SUBST(CSS)
534 AC_SUBST(MOC)
535
536 AC_SUBST(LCFLAGS)
537 AC_SUBST(LIB)
538
539 AC_SUBST(LIB_ALSA)
540 AC_SUBST(LIB_BEOS)
541 AC_SUBST(LIB_DARWIN)
542 AC_SUBST(LIB_ESD)
543 AC_SUBST(LIB_GGI)
544 AC_SUBST(LIB_GLIDE)
545 AC_SUBST(LIB_GNOME)
546 AC_SUBST(LIB_GTK)
547 AC_SUBST(LIB_IDCTALTIVEC)
548 AC_SUBST(LIB_MACOSX)
549 AC_SUBST(LIB_NCURSES)
550 AC_SUBST(LIB_QT)
551 AC_SUBST(LIB_TS)
552 AC_SUBST(LIB_SDL)
553 AC_SUBST(LIB_X11)
554 AC_SUBST(LIB_XVIDEO)
555 AC_SUBST(LIB_YUV)
556
557 AC_SUBST(CFLAGS_VLC)
558 AC_SUBST(CFLAGS_GTK)
559 AC_SUBST(CFLAGS_X11)
560
561 AC_OUTPUT([Makefile.opts include/config.h])
562
563 echo "
564 vlc configuration
565 -----------------
566 vlc version           : ${VLC_VERSION}
567 system                : ${SYS}
568 architecture          : ${ARCH}
569 debug mode            : ${DEBUG}
570 statistics            : ${STATS}
571 trace mode            : ${TRACE}
572 optimizations         : ${OPTIMS}
573 CSS decryption        : ${CSS}
574 need builtin getopt   : ${GETOPT}
575 built-in modules      :${BUILTINS}
576 plugin modules        :${PLUGINS}
577 vlc aliases           :${ALIASES}
578
579 You may now tune Makefile.opts at your convenience."
580