1 dnl Initialize autoconf and automake
3 AC_CONFIG_SRCDIR(src/main.c)
5 AM_INIT_AUTOMAKE(adesklets,0.5.1)
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)
89 AC_PATH_PROG(HELP2MAN, help2man)
90 AM_CONDITIONAL(HELP2MAN_SUPPORT, test "x$HELP2MAN" != "x")
93 AC_PATH_PROG(TIDY,tidy)
96 AC_PATH_PROG(DOXYGEN,doxygen)
97 AM_CONDITIONAL(DOXYGEN_SUPPORT, test "x$DOXYGEN" != "x")
100 dnl Also test the presence of the full documentation package
101 AM_CONDITIONAL(MAKEINFO_SUPPORT,
102 test "x$MAKEINFO:" != "x" && test -f doc/Makefile.am)
104 dnl Try to enforce ISO C (iso9899 1999)
105 dnl This will more likely work
106 dnl only with gcc. In fact,
107 dnl expect for variadic macros, this program
108 dnl should be ansi C (ISO C90).
110 CFLAGS="$CFLAGS -std=c99 -pedantic -Wall"
111 AC_MSG_CHECKING([for ISO C99 warnings generation])
119 AC_MSG_RESULT([yes]),
124 dnl Define source to be BSD compliant (ISO C, POSIX, and 4.3BSD)
125 AC_DEFINE(_BSD_SOURCE,1,[Source is BSD compliant (ISO C, POSIX and 4.3BSD)])
126 if test "x`uname`" = xNetBSD; then
127 dnl NetBSD (at least version 1.6.1) is following the standard less closely than
128 dnl the other... Hence, we declare the source specifically as _POSIX_SOURCE
129 dnl instead of the newer _POSIX_C_SOURCE 199309
130 AC_DEFINE(_POSIX_SOURCE,1,[Source is POSIX 1 compliant (IEEE Std 1003.1)])
132 dnl For some unspecified reason, it as been reported than FreeBSD [5|6|7].x
133 dnl doesn't like those POSIX keywords either
134 UNAME_REDUX=`uname -r -s | sed 's/\..*//' 2> /dev/null`
135 if test "$UNAME_REDUX" != 'FreeBSD 5' && \
136 test "$UNAME_REDUX" != 'FreeBSD 6' && \
137 test "$UNAME_REDUX" != 'FreeBSD 7'
139 AC_DEFINE(_POSIX_C_SOURCE,199309,[Source is POSIX 4 compliant (IEEE Std 1003.1b)])
143 dnl Check for system header files
145 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)
148 dnl This will filter out optimisation switch (-O[s0-9])
151 debug, [ --enable-debug enable debugging symbols and supplementary
152 messages generation in final binary])
155 AC_MSG_CHECKING([for debugging symbols generation])
156 if test x$enableval = "xyes"; then
158 AC_DEFINE(DEBUG, 1, [Debug mode is on if defined.])
163 CFLAGS=`echo "$CFLAGS" | sed 's/^-g$//; s/^-g@<:@@<:@:space:@:>@@:>@\+// ; s/@<:@@<:@:space:@:>@@:>@\+-g$//; s/@<:@@<:@:space:@:>@@:>@\+-g@<:@@<:@:space:@:>@@:>@\+/ /'`
166 dnl SIGKILL timeout setting
168 AC_MSG_CHECKING([for sigkill timeout])
169 AC_ARG_ENABLE(sigkill-timeout,
170 [ --enable-sigkill-timeout=SEC
171 timeout (in seconds) before sending `kill'
172 signal to parent process in case of restart
173 if `term' has no effect [default=5]])
175 test $enableval -gt 0 2> /dev/null || {
177 AC_MSG_ERROR([Given sigkill timeout was not understood])
180 AC_DEFINE_UNQUOTED(SIGKILL_TIMEOUT,$enableval,
181 [Delay between SIGTERM ans SIGKILL to parent process in case of restart.])
183 dnl X polling frequency setting
186 AC_MSG_CHECKING([for polling frequency])
187 AC_ARG_ENABLE(x-polling-frequency,
188 [ --enable-x-polling-frequency=FREQ
189 frequency (in hertz) for polling the X server
190 for events. Lower values leads to less responsive,
191 but less CPU hungry desklets [default=50]])
193 test $enableval -gt 0 2> /dev/null || {
195 AC_MSG_ERROR([Positive, integer value is required as x-polling-frequency])
198 AC_CHECK_PROG(EXISTS,bc,yes,no)
199 if test $enableval -ne 50; then
200 if test x$EXISTS = "xyes"; then
201 period=`echo "1000000 / $enableval" | bc`
203 AC_MSG_WARN([Could not find the `bc' calculator to perform arithmetic
204 computation of X server polling period value. Default 50 Hz is assumed.])
208 AC_DEFINE_UNQUOTED(X_POLLING_PERIOD,$period,
209 [Polling period (in 10e-6 seconds) of stdin between two cycles of events loop.])
211 dnl Lock files directory setting
213 AC_MSG_CHECKING([for lock files directory setting])
214 AC_ARG_ENABLE(lockfiles-dir,
215 [ --enable-lockfiles-dir=DIR
216 directory to put lock files in [default=/tmp]])
218 test -d $enableval || {
220 AC_MSG_ERROR([Given lock files directory does not exist on your system])
223 AC_DEFINE_UNQUOTED(LOCKFILES_DIR,"$enableval",
224 [Directory to put lock files in.])
225 LOCKFILES_DIR=$enableval
226 AC_SUBST(LOCKFILES_DIR)
228 dnl Control modifier on context menu
230 AC_MSG_CHECKING([for control modifier on context menu])
231 AC_ARG_ENABLE(control-on-context-menu,
232 [ --enable-control-on-context-menu
233 force CTRL to be pressed to fire context menu
236 if test x$enableval != "xno" ; then
238 AC_DEFINE(CONTROL_ON_CONTEXT_MENU, 1,
239 [Force CTRL to be pressed to fire context menu])
244 dnl Legacy Window Manager detection code
246 AC_MSG_CHECKING([for legacy fake root window detection code])
247 AC_ARG_ENABLE(legacy-fake-root-window-detection,
248 [ --enable-legacy-fake-root-window-detection
249 Use the old code to detect fake root windows
252 if test x$enableval != "xno" ; then
254 AC_DEFINE(WM_DETECTION_OLD_STYLE, 1,
255 [Use former fake root window detection code])
260 dnl New frontend driver
262 AC_MSG_CHECKING([for frontend shell driver])
263 AC_ARG_ENABLE(frontend-shell-driver,
264 [ --disable-frontend-shell-driver
265 Do not invoke the frontend shell-based driver
266 for adesklets [default=no]])
268 if test x$enableval != "xyes" ; then
269 AM_CONDITIONAL(FRONTEND_SHELL_SUPPORT, test 1 -eq 0)
272 AC_DEFINE(FRONTEND_SHELL_DRIVER, 1,
273 [Enable the frontend shell driver mecanism])
274 AM_CONDITIONAL(FRONTEND_SHELL_SUPPORT, test 1 -eq 1)
278 dnl Collect various system informations strings,
279 dnl for embedding into final executable
281 WELCOME1="\"$PACKAGE $VERSION"
282 AC_CHECK_PROG(EXISTS,date,yes)
283 if test x$EXISTS = "xyes"; then
284 WELCOME1="$WELCOME1 ("`date | sed 's/@<:@@<:@:space:@:>@@:>@\+/ /g'`")"
286 WELCOME1="$WELCOME1 (unknown time)"
289 AC_CHECK_PROG(EXISTS,uname,yes)
290 if test x$EXISTS = "xyes"; then
291 if uname -rs &> /dev/null; then
292 WELCOME1="$WELCOME1, on "`uname -rs`"\""
294 WELCOME1="$WELCOME1, on an unknown OS\""
297 WELCOME1="$WELCOME1, on an unknown OS\""
299 AC_DEFINE_UNQUOTED(WELCOME_LINE_1, $WELCOME1, [Welcome message, first line.])
300 dnl Note: @<:@ and @:>@ are respective quadrigraphs for `[' and `]'
301 ${CC} --version &> /dev/null && \
302 WELCOME2="\"${CC} "`${CC} --version | sed -n '1 s/^@<:@^0-9@:>@*//p'`"\""
303 : ${WELCOME2:=\"${CC} unknown version\"}
304 AC_DEFINE_UNQUOTED(WELCOME_LINE_2, $WELCOME2, [Welcome message, second line.])
306 dnl Variables save: all changes to CFLAGS, LIBS and LDFLAGS beyond
307 dnl this point will be wiped
310 TMP_LDFLAGS="$LDFLAGS"
312 dnl Check for readline
313 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=yes; LibTermcap=ncurses,
314 AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=yes; LibTermcap=termcap,
315 AC_CHECK_LIB(curses, tputs, HaveLibTermcap=yes; LibTermcap=curses,
317 if test $HaveLibTermcap = "yes" ; then
318 LIBS="$LIBS -l$LibTermcap"
320 AC_MSG_ERROR([Could not find terminal management library for readline
321 (either ncurses, termcap or curses).])
323 AC_CHECK_LIB(readline,readline,
324 READLINE_LIBS="-l$LibTermcap -lreadline",
325 AC_MSG_ERROR([Could not find the readline library]),
329 dnl Check for libhistory support
332 [ --without-history remove history support in interactive use
335 if test x$withval = "xyes"; then
336 AC_CHECK_LIB(history,add_history,
337 READLINE_LIBS="$READLINE_LIBS -lhistory";
338 HaveLibHistory=history,
339 AC_CHECK_LIB(readline,add_history,
340 HaveLibHistory=readline,
345 if test $HaveLibHistory = "no"; then
346 AC_MSG_WARN([Could not find GNU history library in the system])
348 AC_DEFINE(HAVE_READLINE_HISTORY_H,1,
349 [Define to 1 if you have the <readline/history.h> header file.])
350 AC_CHECK_LIB($HaveLibHistory,free_history_entry,
351 AC_DEFINE(HAVE_FREE_HISTORY_ENTRY,1,
352 [Define to 1 if you have the `free_history_entry' function.]),,
356 AC_MSG_CHECKING([for history max command lenght])
358 AC_ARG_ENABLE(history-max-command-lenght,
359 [ --enable-history-max-command-lenght=LEN
360 maximum string lenght (in characters) that a single
361 command can have and still be kept in history
362 (a lenght of zero meaning no limits) [default=256]])
365 if test $enableval -ge 0 ; then
367 AC_DEFINE_UNQUOTED(HISTORY_MAX_COMMAND_LENGHT,$enableval,
368 [maximum history string lenght.])
371 AC_MSG_ERROR([history max command lenght must be positive or null])
375 AC_SUBST(READLINE_LIBS)
377 dnl Check for 8 bit characters support forcing
379 AC_ARG_ENABLE(force-extended-characters-input,
380 [ --enable-force-extended-characters-input
381 force input and ouput of unescaped
382 height bits characters through GNU readline,
383 regardless of the inputrc settings [default=no]])
385 if ! test x$enableval = "xno" ; then
386 AC_DEFINE(FORCE_EXTENDED_CHARACTERS_INPUT,1,
387 [force 8 bit characters support in GNU readline])
390 dnl Check for fontconfig
392 AC_ARG_WITH(fontconfig,
393 [ --without-fontconfig remove fontconfig support enabling automatic
394 detection of all truetype fonts already available
397 if test x$withval = "xyes"; then
398 AC_PATH_PROG(PKG_CONFIG, pkg-config)
399 if ! test x$PKG_CONFIG = "x" ; then
400 if $PKG_CONFIG --exists fontconfig 2> /dev/null; then
401 FONTCONFIG_LIBS=`pkg-config --libs fontconfig`
402 FONTCONFIG_CFLAGS=`pkg-config --cflags fontconfig`
405 if test x$FONTCONFIG_LIBS = "x"; then
406 FONTCONFIG_LIBS=-lfontconfig
408 LIBS="$LIBS $FONTCONFIG_LIBS"
409 CFLAGS="$CFLAGS $FONTCONFIG_CFLAGS"
410 AC_MSG_CHECKING([for fontconfig])
412 #include <fontconfig/fontconfig.h>
415 AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.]),
420 -----------------------------------------------------
421 `fontconfig' was not found on your system.
422 Although `adesklets' will work anyway system-wide
423 automatic font detection will not occur:
424 it is therefore quite possible that only the
425 default font provided with the package will display.
426 -----------------------------------------------------]))
427 AC_SUBST(FONTCONFIG_LIBS)
428 AC_SUBST(FONTCONFIG_CFLAGS)
433 dnl Check for fork() system call
434 AC_CHECK_FUNCS(fork,,
435 AC_MSG_ERROR([Could not find the fork() system call]))
437 dnl Check for X headers and libraries
440 if test x$no_x != "xyes"; then
442 test x$x_includes = "x" && x_includes="/usr/include"
443 test x$x_libraries = "x" && x_libraries="/usr/lib"
445 CFLAGS="$CFLAGS -I$x_includes"
446 LDFLAGS="$LDFLAGS -L$x_libraries"
447 dnl Check for required functions in -lX11
448 AC_CHECK_LIB(X11, XOpenDisplay,
449 X_LIBS="-L$x_libraries -lX11"
451 AC_MSG_ERROR([Could not find XOpenDisplay in -lX11.])
453 AC_DEFINE(X_DISPLAY_SUPPORT,1,[Define to 1 if the X Window System is supported, 0 otherwise.])
455 AC_DEFINE(X_DISPLAY_SUPPORT,0,[Define to 1 if the X Window System is supported, 0 otherwise.])
457 AC_DEFINE(X_DISPLAY_MISSING,,[Defined if the X headers were not found])
464 [ --with-imlib2=DIR use imlib2 in <DIR>],
465 [CFLAGS="$CFLAGS -I$withval/include"
466 LIBS="-L$withval/lib $LIBS"])
468 AC_PATH_GENERIC_MODIFIED(imlib2, 1.1.2,,
469 AC_MSG_ERROR([Cannot find imlib2: Is imlib2-config in the path?]),
472 -----------------------------------------------------
473 $PACKAGE should work with your version of imlib2...
474 But for better results you are _warmly_ encouraged
475 to try out version 1.2.0 or above;
476 known bugs are still lurking in dark corners
477 with what you have installed: beware strange problems
478 with dynamic image filters for instance!
479 -----------------------------------------------------]))
481 LIBS="$LIBS -lImlib2"
482 dnl CFLAGS="$CFLAGS $IMLIB2_CFLAGS"
484 AC_MSG_CHECKING([for imlib2 program linking with ad-hoc flags])
486 #ifndef X_DISPLAY_MISSING
487 #include <X11/Xlib.h>
488 #include <X11/Xutil.h>
490 #include <X11/Xatom.h>
494 image = imlib_load_image("toto.png");
495 #ifndef X_DISPLAY_MISSING
496 imlib_context_set_display(NULL);
501 IMLIB2_LIBS="-lImlib2",
503 CFLAGS="$TMP_CFLAGS $IMLIB2_CFLAGS"
504 LIBS="$TMP_LIBS $IMLIB2_LIBS"
505 AC_MSG_CHECKING([for imlib2 program linking])
507 #ifndef X_DISPLAY_MISSING
508 #include <X11/Xlib.h>
509 #include <X11/Xutil.h>
511 #include <X11/Xatom.h>
515 image = imlib_load_image("toto.png");
516 #ifndef X_DISPLAY_MISSING
517 imlib_context_set_display(NULL);
520 AC_MSG_RESULT([yes]),
522 AC_MSG_ERROR([Cannot link Imlib2 program.
523 If you specified you did not want X support this can be caused
524 by your Imlib2 installment being configured so it needs it
525 or conversely. In that case reinstall Imlib2 with proper
526 --enable-x11-support parameter (as from enlightement CVS)
527 before retrying to configure this package.])))
529 AC_SUBST(IMLIB2_CFLAGS)
530 AC_SUBST(IMLIB2_LIBS)
533 dnl Test for uint typedef
534 AC_MSG_CHECKING([for uint typedef in standard library])
536 #ifdef HAVE_SYS_TYPES_H
537 #include <sys/types.h>
543 AC_MSG_RESULT([yes]),
545 AC_DEFINE(UINT_NOT_DEFINED,1,
546 [Define to 1 if compability type uint is not detected.])
549 dnl Important variables reset
552 LDFLAGS="$TMP_LDFLAGS"
554 dnl PKGDATADIR definition
555 dnl PKGDATADIR is only well constructed in make context,
556 dnl so let's put this AFTER all tests.
557 CFLAGS="$CFLAGS"' -DPKGDATADIR=\"$(pkgdatadir)\"'
560 AM_CONFIG_HEADER(src/config.h)
566 doc/adesklets_checkin.1
567 doc/adesklets_submit.1
571 scripting/protoize.sh
572 scripting/python/Makefile
573 scripting/python/config.h
574 scripting/python/setup.py
575 utils/adesklets_frontend.sh
578 dnl Change script(s) permissions
579 chmod +x scripting/protoize.sh doc/htmldoc.sh utils/adesklets_frontend.sh
581 dnl Final warning, if needed
582 if test x$DEBUG = "xyes"; then
584 -----------------------------------------------------
585 you choosed to make a `debug' compilation: this will
586 generate a significantly bigger executable
587 that produces on stderr (by default) a lot of outputs
588 unwanted during normal use; set up the ADESKLETS_LOG
589 environment variable to a filename the interpreter
590 can safely suffix with a pid related extension
591 than truncate to collect all debug outputs
592 there instead. Be also aware that all optimisation
593 settings (-O flags in CFLAGS) are discarded when
595 -----------------------------------------------------])
597 if test x$no_x = "xyes"; then
599 -----------------------------------------------------
600 you choosed to perform an `X Window less' build -
601 which means you will eventually end up with
602 a strictly command line program free of all
603 dependencies on xlib. If it is not what you intended
604 please reconfigure. For this to work you do need first
605 to configure your Imlib2 incantation for not using
607 -----------------------------------------------------
611 if test x$PYTHON != "x" ; then
612 if test x$SIGPROC != "xyes" ; then
614 -----------------------------------------------------
615 your system does not seem to support reliable POSIX
616 signal calls such as `sigprocmask', `sigpending' or
617 `sigsuspend'. Although this does not affect $PACKAGE
618 directly, it seriously impedes python ability
619 to handle things well through its package.
620 To our knowledge, no modern UNIX platforms lack
621 those system calls...
622 -----------------------------------------------------