1 dnl Initialize autoconf and automake
3 AC_CONFIG_SRCDIR(src/main.c)
5 AM_INIT_AUTOMAKE(adesklets,0.5.0)
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 AC_DEFINE(HAVE_READLINE_HISTORY_H,1,
339 [Define to 1 if you have the <readline/history.h> header file.])
341 AC_CHECK_LIB(history,free_history_entry,
342 AC_DEFINE(HAVE_FREE_HISTORY_ENTRY,1,
343 [Define to 1 if you have the `free_history_entry' function.])),
346 if test $HaveLibHistory = "no"; then
347 AC_MSG_WARN([Could not find GNU history library in the system])
349 AC_MSG_CHECKING([for history max command lenght])
351 AC_ARG_ENABLE(history-max-command-lenght,
352 [ --enable-history-max-command-lenght=LEN
353 maximum string lenght (in characters) that a single
354 command can have and still be kept in history
355 (a lenght of zero meaning no limits) [default=256]])
358 if test $enableval -ge 0 ; then
360 AC_DEFINE_UNQUOTED(HISTORY_MAX_COMMAND_LENGHT,$enableval,
361 [maximum history string lenght.])
364 AC_MSG_ERROR([history max command lenght must be positive or null])
368 AC_SUBST(READLINE_LIBS)
370 dnl Check for 8 bit characters support forcing
372 AC_ARG_ENABLE(force-extended-characters-input,
373 [ --enable-force-extended-characters-input
374 force input and ouput of unescaped
375 height bits characters through GNU readline,
376 regardless of the inputrc settings [default=no]])
378 if ! test x$enableval = "xno" ; then
379 AC_DEFINE(FORCE_EXTENDED_CHARACTERS_INPUT,1,
380 [force 8 bit characters support in GNU readline])
383 dnl Check for fontconfig
385 AC_ARG_WITH(fontconfig,
386 [ --without-fontconfig remove fontconfig support enabling automatic
387 detection of all truetype fonts already available
390 if test x$withval = "xyes"; then
391 AC_PATH_PROG(PKG_CONFIG, pkg-config)
392 if ! test x$PKG_CONFIG = "x" ; then
393 if $PKG_CONFIG --exists fontconfig 2> /dev/null; then
394 FONTCONFIG_LIBS=`pkg-config --libs fontconfig`
395 FONTCONFIG_CFLAGS=`pkg-config --cflags fontconfig`
398 if test x$FONTCONFIG_LIBS = "x"; then
399 FONTCONFIG_LIBS=-lfontconfig
401 LIBS="$LIBS $FONTCONFIG_LIBS"
402 CFLAGS="$CFLAGS $FONTCONFIG_CFLAGS"
403 AC_MSG_CHECKING([for fontconfig])
405 #include <fontconfig/fontconfig.h>
408 AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.]),
413 -----------------------------------------------------
414 `fontconfig' was not found on your system.
415 Although `adesklets' will work anyway system-wide
416 automatic font detection will not occur:
417 it is therefore quite possible that only the
418 default font provided with the package will display.
419 -----------------------------------------------------]))
420 AC_SUBST(FONTCONFIG_LIBS)
421 AC_SUBST(FONTCONFIG_CFLAGS)
426 dnl Check for fork() system call
427 AC_CHECK_FUNCS(fork,,
428 AC_MSG_ERROR([Could not find the fork() system call]))
430 dnl Check for X headers and libraries
433 if test x$no_x != "xyes"; then
435 test x$x_includes = "x" && x_includes="/usr/include"
436 test x$x_libraries = "x" && x_libraries="/usr/lib"
438 CFLAGS="$CFLAGS -I$x_includes"
439 LDFLAGS="$LDFLAGS -L$x_libraries"
440 dnl Check for required functions in -lX11
441 AC_CHECK_LIB(X11, XOpenDisplay,
442 X_LIBS="-L$x_libraries -lX11"
444 AC_MSG_ERROR([Could not find XOpenDisplay in -lX11.])
446 AC_DEFINE(X_DISPLAY_SUPPORT,1,[Define to 1 if the X Window System is supported, 0 otherwise.])
448 AC_DEFINE(X_DISPLAY_SUPPORT,0,[Define to 1 if the X Window System is supported, 0 otherwise.])
456 [ --with-imlib2=DIR use imlib2 in <DIR>],
457 [CFLAGS="$CFLAGS -I$withval/include"
458 LIBS="-L$withval/lib $LIBS"])
460 AC_PATH_GENERIC_MODIFIED(imlib2, 1.1.2,,
461 AC_MSG_ERROR([Cannot find imlib2: Is imlib2-config in the path?]),
464 -----------------------------------------------------
465 $PACKAGE should work with your version of imlib2...
466 But for better results you are _warmly_ encouraged
467 to try out version 1.2.0 or above;
468 known bugs are still lurking in dark corners
469 with what you have installed: beware strange problems
470 with dynamic image filters for instance!
471 -----------------------------------------------------]))
473 LIBS="$LIBS -lImlib2"
474 dnl CFLAGS="$CFLAGS $IMLIB2_CFLAGS"
476 AC_MSG_CHECKING([for imlib2 program linking with ad-hoc flags])
478 #ifndef X_DISPLAY_MISSING
479 #include <X11/Xlib.h>
480 #include <X11/Xutil.h>
482 #include <X11/Xatom.h>
486 image = imlib_load_image("toto.png");
487 #ifndef X_DISPLAY_MISSING
488 imlib_context_set_display(NULL);
493 IMLIB2_LIBS="-lImlib2",
495 CFLAGS="$TMP_CFLAGS $IMLIB2_CFLAGS"
496 LIBS="$TMP_LIBS $IMLIB2_LIBS"
497 AC_MSG_CHECKING([for imlib2 program linking])
499 #ifndef X_DISPLAY_MISSING
500 #include <X11/Xlib.h>
501 #include <X11/Xutil.h>
503 #include <X11/Xatom.h>
507 image = imlib_load_image("toto.png");
508 #ifndef X_DISPLAY_MISSING
509 imlib_context_set_display(NULL);
512 AC_MSG_RESULT([yes]),
514 AC_MSG_ERROR([Cannot link Imlib2 program.
515 If you specified you did not want X support this can be caused
516 by your Imlib2 installment being configured so it needs it
517 or conversely. In that case reinstall Imlib2 with proper
518 --enable-x11-support parameter (as from enlightement CVS)
519 before retrying to configure this package.])))
521 AC_SUBST(IMLIB2_CFLAGS)
522 AC_SUBST(IMLIB2_LIBS)
525 dnl Test for uint typedef
526 AC_MSG_CHECKING([for uint typedef in standard library])
528 #ifdef HAVE_SYS_TYPES_H
529 #include <sys/types.h>
535 AC_MSG_RESULT([yes]),
537 AC_DEFINE(UINT_NOT_DEFINED,1,
538 [Define to 1 if compability type uint is not detected.])
541 dnl Important variables reset
544 LDFLAGS="$TMP_LDFLAGS"
546 dnl PKGDATADIR definition
547 dnl PKGDATADIR is only well constructed in make context,
548 dnl so let's put this AFTER all tests.
549 CFLAGS="$CFLAGS"' -DPKGDATADIR=\"$(pkgdatadir)\"'
552 AM_CONFIG_HEADER(src/config.h)
558 doc/adesklets_checkin.1
559 doc/adesklets_submit.1
563 scripting/protoize.sh
564 scripting/python/Makefile
565 scripting/python/config.h
566 scripting/python/setup.py
567 utils/adesklets_frontend.sh
570 dnl Change script(s) permissions
571 chmod +x scripting/protoize.sh doc/htmldoc.sh utils/adesklets_frontend.sh
573 dnl Final warning, if needed
574 if test x$DEBUG = "xyes"; then
576 -----------------------------------------------------
577 you choosed to make a `debug' compilation: this will
578 generate a significantly bigger executable
579 that produces on stderr (by default) a lot of outputs
580 unwanted during normal use; set up the ADESKLETS_LOG
581 environment variable to a filename the interpreter
582 can safely suffix with a pid related extension
583 than truncate to collect all debug outputs
584 there instead. Be also aware that all optimisation
585 settings (-O flags in CFLAGS) are discarded when
587 -----------------------------------------------------])
589 if test x$no_x = "xyes"; then
591 -----------------------------------------------------
592 you choosed to perform an `X Window less' build -
593 which means you will eventually end up with
594 a strictly command line program free of all
595 dependencies on xlib. If it is not what you intended
596 please reconfigure. For this to work you do need first
597 to configure your Imlib2 incantation for not using
599 -----------------------------------------------------
603 if test x$PYTHON != "x" ; then
604 if test x$SIGPROC != "xyes" ; then
606 -----------------------------------------------------
607 your system does not seem to support reliable POSIX
608 signal calls such as `sigprocmask', `sigpending' or
609 `sigsuspend'. Although this does not affect $PACKAGE
610 directly, it seriously impedes python ability
611 to handle things well through its package.
612 To our knowledge, no modern UNIX platforms lack
613 those system calls...
614 -----------------------------------------------------