1 dnl Initialize autoconf and automake
3 AC_CONFIG_SRCDIR(src/main.c)
5 AM_INIT_AUTOMAKE(adesklets,0.6.2)
11 dnl Locate required external software
13 if test "x$CPP" != 'x'; then
19 if test "x$LEX" != 'xflex'; then
21 -----------------------------------------------------
22 `flex' was not found on your system. If you encounter
23 problems recompiling a `l' file, please try `flex'
24 first. You can get it from any GNU archive site.
25 You will not need `flex' as long as you do not
27 ----------------------------------------------------])
30 if test "x$YACC" != "xbison -y"; then
32 -----------------------------------------------------
33 Nor `byacc' or `yacc' parsers had been used
34 for developing adesklets. If you encounter problems
35 recompiling a `y' file, please try `bison' instead.
36 You can get it from any GNU archive site. You will
37 not need `bison' as long as you do not modify
39 -----------------------------------------------------])
43 dnl Check for python support
45 AC_ARG_WITH(python-support,
46 [ --without-python-support
47 do not install adesklets python package
48 Do not set this option unless you have
51 if test x$withval = "xyes"; then
53 AC_ARG_WITH(python-force-detection,
54 [ --with-python-force-detection
55 bypass all the python version check mechanism.
56 When using this, make sure you have a version
57 greater or egal to python 2.3 installed
58 as 'python' in your path [default=no]])
60 if test x$withval = "xno"; then
67 AC_ARG_WITH(python-install-submission-scripts,
68 [ --with-python-install-submission-scripts
69 install in the path the submission-related scripts
70 from submit/ in the $PREFIX/bin program path.
71 Useful for desklets author [default=no]])
73 if test x$withval = "xyes"; then
74 AM_CONDITIONAL(PYTHON_INSTALL_SUBMISSION_SCRIPTS, true)
76 AM_CONDITIONAL(PYTHON_INSTALL_SUBMISSION_SCRIPTS, false)
78 AC_CHECK_FUNCS(sigprocmask,
79 [HAVE_SIGPROCMASK="#define HAVE_SIGPROCMASK 1", SIGPROC=yes],
80 [HAVE_SIGPROCMASK="#undef HAVE_SIGPROCMASK"])
82 HAVE_SIGPROCMASK="#undef HAVE_SIGPROCMASK"
84 AC_SUBST(HAVE_SIGPROCMASK)
85 AM_CONDITIONAL(PYTHON_SUPPORT, test "x$PYTHON" != "x")
86 AM_CONDITIONAL(PYTHON_INSTALL_SUBMISSION_SCRIPTS, true)
88 dnl Check for Perl support
90 AC_ARG_WITH(perl-support,
91 [ --without-perl-support do not install adesklets Perl package
92 Do not set this option unless you have
96 if test x$withval = "xyes"; then
97 AC_PATH_PROG(PERL, perl)
98 AC_PROG_PERL_VERSION(5.8.2,
99 AC_PROG_PERL_MODULES(IPC::Open3, perl_ok=true),
100 AC_MSG_WARN(['Perl >= 5.8.2 could not be found']))
102 AM_CONDITIONAL(PERL_SUPPORT,$perl_ok)
104 dnl help2man presence
105 AC_PATH_PROG(HELP2MAN, help2man)
106 AM_CONDITIONAL(HELP2MAN_SUPPORT, test "x$HELP2MAN" != "x")
108 dnl htmltidy presence
109 AC_PATH_PROG(TIDY,tidy)
112 AC_PATH_PROG(DOXYGEN,doxygen)
113 AM_CONDITIONAL(DOXYGEN_SUPPORT, test "x$DOXYGEN" != "x")
115 dnl makeinfo support:
116 dnl Also test the presence of the full documentation package
117 AM_CONDITIONAL(MAKEINFO_SUPPORT,
118 test "x$MAKEINFO:" != "x" && test -f doc/Makefile.am)
120 dnl Try to enforce ISO C (iso9899 1999)
121 dnl This will more likely work
122 dnl only with gcc. In fact,
123 dnl expect for variadic macros, this program
124 dnl should be ansi C (ISO C90).
126 CFLAGS="$CFLAGS -std=c99 -pedantic -Wall"
127 AC_MSG_CHECKING([for ISO C99 warnings generation])
135 AC_MSG_RESULT([yes]),
140 dnl Define source to be BSD compliant (ISO C, POSIX, and 4.3BSD)
141 AC_DEFINE(_BSD_SOURCE,1,[Source is BSD compliant (ISO C, POSIX and 4.3BSD)])
142 if test "x`uname`" = xNetBSD; then
143 dnl NetBSD (at least version 1.6.1) is following the standard less closely than
144 dnl the other... Hence, we declare the source specifically as _POSIX_SOURCE
145 dnl instead of the newer _POSIX_C_SOURCE 199309
146 AC_DEFINE(_POSIX_SOURCE,1,[Source is POSIX 1 compliant (IEEE Std 1003.1)])
148 dnl For some unspecified reason, it as been reported than FreeBSD [5|6|7].x
149 dnl doesn't like those POSIX keywords either
150 UNAME_REDUX=`uname -r -s | sed 's/\..*//' 2> /dev/null`
151 if test "$UNAME_REDUX" != 'FreeBSD 5' && \
152 test "$UNAME_REDUX" != 'FreeBSD 6' && \
153 test "$UNAME_REDUX" != 'FreeBSD 7'
155 AC_DEFINE(_POSIX_C_SOURCE,199309,[Source is POSIX 4 compliant (IEEE Std 1003.1b)])
159 dnl Check for system header files
161 AC_CHECK_HEADERS(stdio.h stdarg.h errno.h fcntl.h signal.h time.h math.h sys/time.h sys/types.h sys/stat.h grp.h pwd.h libgen.h dirent.h iconv.h)
164 dnl This will filter out optimisation switch (-O[s0-9])
167 debug, [ --enable-debug enable debugging symbols and supplementary
168 messages generation in final binary])
171 AC_MSG_CHECKING([for debugging symbols generation])
172 if test x$enableval = "xyes"; then
174 AC_DEFINE(DEBUG, 1, [Debug mode is on if defined.])
179 CFLAGS=`echo "$CFLAGS" | sed 's/^-g$//; s/^-g@<:@@<:@:space:@:>@@:>@\+// ; s/@<:@@<:@:space:@:>@@:>@\+-g$//; s/@<:@@<:@:space:@:>@@:>@\+-g@<:@@<:@:space:@:>@@:>@\+/ /'`
182 dnl SIGKILL timeout setting
184 AC_MSG_CHECKING([for sigkill timeout])
185 AC_ARG_ENABLE(sigkill-timeout,
186 [ --enable-sigkill-timeout=SEC
187 timeout (in seconds) before sending `kill'
188 signal to parent process in case of restart
189 if `term' has no effect [default=5]])
191 test $enableval -gt 0 2> /dev/null || {
193 AC_MSG_ERROR([Given sigkill timeout was not understood])
196 AC_DEFINE_UNQUOTED(SIGKILL_TIMEOUT,$enableval,
197 [Delay between SIGTERM ans SIGKILL to parent process in case of restart.])
199 dnl X polling frequency setting
202 AC_MSG_CHECKING([for polling frequency])
203 AC_ARG_ENABLE(x-polling-frequency,
204 [ --enable-x-polling-frequency=FREQ
205 frequency (in hertz) for polling the X server
206 for events. Lower values leads to less responsive,
207 but less CPU hungry desklets [default=50]])
209 test $enableval -gt 0 2> /dev/null || {
211 AC_MSG_ERROR([Positive, integer value is required as x-polling-frequency])
214 AC_CHECK_PROG(EXISTS,bc,yes,no)
215 if test $enableval -ne 50; then
216 if test x$EXISTS = "xyes"; then
217 period=`echo "1000000 / $enableval" | bc`
219 AC_MSG_WARN([Could not find the `bc' calculator to perform arithmetic
220 computation of X server polling period value. Default 50 Hz is assumed.])
224 AC_DEFINE_UNQUOTED(X_POLLING_PERIOD,$period,
225 [Polling period (in 10e-6 seconds) of stdin between two cycles of events loop.])
227 dnl Lock files directory setting
229 AC_MSG_CHECKING([for lock files directory setting])
230 AC_ARG_ENABLE(lockfiles-dir,
231 [ --enable-lockfiles-dir=DIR
232 directory to put lock files in [default=/tmp]])
234 test -d $enableval || {
236 AC_MSG_ERROR([Given lock files directory does not exist on your system])
239 AC_DEFINE_UNQUOTED(LOCKFILES_DIR,"$enableval",
240 [Directory to put lock files in.])
241 LOCKFILES_DIR=$enableval
242 AC_SUBST(LOCKFILES_DIR)
244 dnl Control modifier on context menu
246 AC_MSG_CHECKING([for control modifier on context menu])
247 AC_ARG_ENABLE(control-on-context-menu,
248 [ --enable-control-on-context-menu
249 force CTRL to be pressed to fire context menu
252 if test x$enableval != "xno" ; then
254 AC_DEFINE(CONTROL_ON_CONTEXT_MENU, 1,
255 [Force CTRL to be pressed to fire context menu])
260 dnl Legacy Window Manager detection code
262 AC_MSG_CHECKING([for legacy fake root window detection code])
263 AC_ARG_ENABLE(legacy-fake-root-window-detection,
264 [ --enable-legacy-fake-root-window-detection
265 Use the old code to detect fake root windows
268 if test x$enableval != "xno" ; then
270 AC_DEFINE(WM_DETECTION_OLD_STYLE, 1,
271 [Use former fake root window detection code])
276 dnl New frontend driver
278 AC_MSG_CHECKING([for frontend shell driver])
279 AC_ARG_ENABLE(frontend-shell-driver,
280 [ --disable-frontend-shell-driver
281 Do not invoke the frontend shell-based driver
282 for adesklets [default=no]])
284 if test x$enableval != "xyes" ; then
285 AM_CONDITIONAL(FRONTEND_SHELL_SUPPORT, test 1 -eq 0)
288 AC_DEFINE(FRONTEND_SHELL_DRIVER, 1,
289 [Enable the frontend shell driver mecanism])
290 AM_CONDITIONAL(FRONTEND_SHELL_SUPPORT, test 1 -eq 1)
294 dnl Collect various system informations strings,
295 dnl for embedding into final executable
297 WELCOME1="\"$PACKAGE $VERSION"
298 AC_CHECK_PROG(EXISTS,date,yes)
299 if test x$EXISTS = "xyes"; then
300 WELCOME1="$WELCOME1 ("`date | sed 's/@<:@@<:@:space:@:>@@:>@\+/ /g'`")"
302 WELCOME1="$WELCOME1 (unknown time)"
305 AC_CHECK_PROG(EXISTS,uname,yes)
306 if test x$EXISTS = "xyes"; then
307 if uname -rs &> /dev/null; then
308 WELCOME1="$WELCOME1, on "`uname -rs`"\""
310 WELCOME1="$WELCOME1, on an unknown OS\""
313 WELCOME1="$WELCOME1, on an unknown OS\""
315 AC_DEFINE_UNQUOTED(WELCOME_LINE_1, $WELCOME1, [Welcome message, first line.])
316 dnl Note: @<:@ and @:>@ are respective quadrigraphs for `[' and `]'
317 ${CC} --version &> /dev/null && \
318 WELCOME2="\"${CC} "`${CC} --version | sed -n '1 s/^@<:@^0-9@:>@*//p'`"\""
319 : ${WELCOME2:=\"${CC} unknown version\"}
320 AC_DEFINE_UNQUOTED(WELCOME_LINE_2, $WELCOME2, [Welcome message, second line.])
322 dnl Variables save: all changes to CFLAGS, LIBS and LDFLAGS beyond
323 dnl this point will be wiped
326 TMP_LDFLAGS="$LDFLAGS"
328 dnl Check for readline
329 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=yes; LibTermcap=ncurses,
330 AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=yes; LibTermcap=termcap,
331 AC_CHECK_LIB(curses, tputs, HaveLibTermcap=yes; LibTermcap=curses,
333 if test $HaveLibTermcap = "yes" ; then
334 LIBS="$LIBS -l$LibTermcap"
336 AC_MSG_ERROR([Could not find terminal management library for readline
337 (either ncurses, termcap or curses).])
339 AC_CHECK_LIB(readline,readline,
340 READLINE_LIBS="-l$LibTermcap -lreadline",
341 AC_MSG_ERROR([Could not find the readline library]),
345 dnl Check for libhistory support
348 [ --without-history remove history support in interactive use
351 if test x$withval = "xyes"; then
352 AC_CHECK_LIB(history,add_history,
353 READLINE_LIBS="$READLINE_LIBS -lhistory";
354 HaveLibHistory=history,
355 AC_CHECK_LIB(readline,add_history,
356 HaveLibHistory=readline,
361 if test $HaveLibHistory = "no"; then
362 AC_MSG_WARN([Could not find GNU history library in the system])
364 AC_DEFINE(HAVE_READLINE_HISTORY_H,1,
365 [Define to 1 if you have the <readline/history.h> header file.])
366 AC_CHECK_LIB($HaveLibHistory,free_history_entry,
367 AC_DEFINE(HAVE_FREE_HISTORY_ENTRY,1,
368 [Define to 1 if you have the `free_history_entry' function.]),,
372 AC_MSG_CHECKING([for history max command lenght])
374 AC_ARG_ENABLE(history-max-command-lenght,
375 [ --enable-history-max-command-lenght=LEN
376 maximum string lenght (in characters) that a single
377 command can have and still be kept in history
378 (a lenght of zero meaning no limits) [default=256]])
381 if test $enableval -ge 0 ; then
383 AC_DEFINE_UNQUOTED(HISTORY_MAX_COMMAND_LENGHT,$enableval,
384 [maximum history string lenght.])
387 AC_MSG_ERROR([history max command lenght must be positive or null])
391 AC_SUBST(READLINE_LIBS)
393 dnl Check for 8 bit characters support forcing
395 AC_ARG_ENABLE(force-extended-characters-input,
396 [ --enable-force-extended-characters-input
397 force input and ouput of unescaped
398 height bits characters through GNU readline,
399 regardless of the inputrc settings [default=no]])
401 if ! test x$enableval = "xno" ; then
402 AC_DEFINE(FORCE_EXTENDED_CHARACTERS_INPUT,1,
403 [force 8 bit characters support in GNU readline])
406 dnl Check for fontconfig
408 AC_ARG_WITH(fontconfig,
409 [ --without-fontconfig remove fontconfig support enabling automatic
410 detection of all truetype fonts already available
413 if test x$withval = "xyes"; then
414 AC_PATH_PROG(PKG_CONFIG, pkg-config)
415 if ! test x$PKG_CONFIG = "x" ; then
416 if $PKG_CONFIG --exists fontconfig 2> /dev/null; then
417 FONTCONFIG_LIBS=`pkg-config --libs fontconfig`
418 FONTCONFIG_CFLAGS=`pkg-config --cflags fontconfig`
421 if test x$FONTCONFIG_LIBS = "x"; then
422 FONTCONFIG_LIBS=-lfontconfig
424 LIBS="$LIBS $FONTCONFIG_LIBS"
425 CFLAGS="$CFLAGS $FONTCONFIG_CFLAGS"
426 AC_MSG_CHECKING([for fontconfig])
428 #include <fontconfig/fontconfig.h>
431 AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.]),
436 -----------------------------------------------------
437 `fontconfig' was not found on your system.
438 Although `adesklets' will work anyway system-wide
439 automatic font detection will not occur:
440 it is therefore quite possible that only the
441 default font provided with the package will display.
442 -----------------------------------------------------]))
443 AC_SUBST(FONTCONFIG_LIBS)
444 AC_SUBST(FONTCONFIG_CFLAGS)
449 dnl Check for fork() system call
450 AC_CHECK_FUNCS(fork,,
451 AC_MSG_ERROR([Could not find the fork() system call]))
453 dnl Check for X headers and libraries
456 if test x$no_x != "xyes"; then
458 if test x$x_includes != "x" ; then
459 X_CFLAGS="-I$x_includes"
460 CFLAGS="$CFLAGS $X_CFLAGS"
463 if test x$x_libraries != "x" ; then
464 X_LIBS="-L$x_libraries"
465 LDFLAGS="$LDFLAGS $X_LIBS"
468 dnl Check for required functions in -lX11
469 AC_CHECK_LIB(X11, XOpenDisplay,
470 X_LIBS="$X_LIBS -lX11"
472 AC_MSG_ERROR([Could not find XOpenDisplay in -lX11.])
474 AC_DEFINE(X_DISPLAY_SUPPORT,1,[Define to 1 if the X Window System is supported, 0 otherwise.])
476 AC_DEFINE(X_DISPLAY_SUPPORT,0,[Define to 1 if the X Window System is supported, 0 otherwise.])
479 AC_DEFINE(X_DISPLAY_MISSING,,[Defined if the X headers were not found])
487 [ --with-imlib2=DIR use imlib2 in <DIR>],
488 [CFLAGS="$CFLAGS -I$withval/include"
489 LIBS="-L$withval/lib $LIBS"])
491 AC_PATH_GENERIC_MODIFIED(imlib2, 1.1.2,,
492 AC_MSG_ERROR([Cannot find imlib2: Is imlib2-config in the path?]),
495 -----------------------------------------------------
496 $PACKAGE should work with your version of imlib2...
497 But for better results you are _warmly_ encouraged
498 to try out version 1.2.0 or above;
499 known bugs are still lurking in dark corners
500 with what you have installed: beware strange problems
501 with dynamic image filters for instance!
502 -----------------------------------------------------]))
504 LIBS="$LIBS -lImlib2"
505 dnl CFLAGS="$CFLAGS $IMLIB2_CFLAGS"
507 AC_MSG_CHECKING([for imlib2 program linking with ad-hoc flags])
509 #ifndef X_DISPLAY_MISSING
510 #include <X11/Xlib.h>
511 #include <X11/Xutil.h>
513 #include <X11/Xatom.h>
517 image = imlib_load_image("toto.png");
518 #ifndef X_DISPLAY_MISSING
519 imlib_context_set_display(NULL);
524 IMLIB2_LIBS="-lImlib2",
526 CFLAGS="$TMP_CFLAGS $IMLIB2_CFLAGS"
527 LIBS="$TMP_LIBS $IMLIB2_LIBS"
528 AC_MSG_CHECKING([for imlib2 program linking])
530 #ifndef X_DISPLAY_MISSING
531 #include <X11/Xlib.h>
532 #include <X11/Xutil.h>
534 #include <X11/Xatom.h>
538 image = imlib_load_image("toto.png");
539 #ifndef X_DISPLAY_MISSING
540 imlib_context_set_display(NULL);
543 AC_MSG_RESULT([yes]),
545 AC_MSG_ERROR([Cannot link Imlib2 program.
546 If you specified you did not want X support this can be caused
547 by your Imlib2 installment being configured so it needs it
548 or conversely. In that case reinstall Imlib2 with proper
549 --enable-x11-support parameter (as from enlightement CVS)
550 before retrying to configure this package.])))
552 AC_SUBST(IMLIB2_CFLAGS)
553 AC_SUBST(IMLIB2_LIBS)
556 dnl Test for uint typedef
557 AC_MSG_CHECKING([for uint typedef in standard library])
559 #ifdef HAVE_SYS_TYPES_H
560 #include <sys/types.h>
566 AC_MSG_RESULT([yes]),
568 AC_DEFINE(UINT_NOT_DEFINED,1,
569 [Define to 1 if compability type uint is not detected.])
572 dnl Important variables reset
575 LDFLAGS="$TMP_LDFLAGS"
577 dnl PKGDATADIR definition
578 dnl PKGDATADIR is only well constructed in make context,
579 dnl so let's put this AFTER all tests.
580 CFLAGS="$CFLAGS"' -DPKGDATADIR=\"$(pkgdatadir)\"'
583 AM_CONFIG_HEADER(src/config.h)
589 doc/adesklets_checkin.1
590 doc/adesklets_submit.1
594 scripting/protoize.sh
595 scripting/python/Makefile
596 scripting/python/config.h
597 scripting/python/setup.py
598 scripting/perl/Makefile
599 scripting/perl/Makefile.PL
600 scripting/perl/updateproto.pl
601 utils/adesklets_frontend.sh
604 dnl Change script(s) permissions
605 chmod +x scripting/protoize.sh scripting/perl/updateproto.pl \
606 doc/htmldoc.sh utils/adesklets_frontend.sh
608 dnl Final warning, if needed
609 if test x$DEBUG = "xyes"; then
611 -----------------------------------------------------
612 you choosed to make a `debug' compilation: this will
613 generate a significantly bigger executable
614 that produces on stderr (by default) a lot of outputs
615 unwanted during normal use; set up the ADESKLETS_LOG
616 environment variable to a filename the interpreter
617 can safely suffix with a pid related extension
618 than truncate to collect all debug outputs
619 there instead. Be also aware that all optimisation
620 settings (-O flags in CFLAGS) are discarded when
622 -----------------------------------------------------])
624 if test x$no_x = "xyes"; then
626 -----------------------------------------------------
627 you choosed to perform an `X Window less' build -
628 which means you will eventually end up with
629 a strictly command line program free of all
630 dependencies on xlib. If it is not what you intended
631 please reconfigure. For this to work you do need first
632 to configure your Imlib2 incantation for not using
634 -----------------------------------------------------
638 if test x$PYTHON != "x" ; then
639 if test x$SIGPROC != "xyes" ; then
641 -----------------------------------------------------
642 your system does not seem to support reliable POSIX
643 signal calls such as `sigprocmask', `sigpending' or
644 `sigsuspend'. Although this does not affect $PACKAGE
645 directly, it seriously impedes python ability
646 to handle things well through its package.
647 To our knowledge, no modern UNIX platforms lack
648 those system calls...
649 -----------------------------------------------------