1 dnl Initialize autoconf and automake
3 AC_CONFIG_SRCDIR(src/main.c)
5 AM_INIT_AUTOMAKE(adesklets,0.4.11)
10 dnl Locate required external software
12 if test "x$CPP" != 'x'; then
18 if test "x$LEX" != 'xflex'; then
20 -----------------------------------------------------
21 `flex' was not found on your system. If you encounter
22 problems recompiling a `l' file, please try `flex'
23 first. You can get it from any GNU archive site.
24 You will not need `flex' as long as you do not
26 ----------------------------------------------------])
29 if test "x$YACC" != "xbison -y"; then
31 -----------------------------------------------------
32 Nor `byacc' or `yacc' parsers had been used
33 for developing adesklets. If you encounter problems
34 recompiling a `y' file, please try `bison' instead.
35 You can get it from any GNU archive site. You will
36 not need `bison' as long as you do not modify
38 -----------------------------------------------------])
42 dnl Check for python support
44 AC_ARG_WITH(python-support,
45 [ --without-python-support
46 do not install adesklets python package
47 Do not set this option unless you have
50 if test x$withval = "xyes"; then
52 AC_ARG_WITH(python-force-detection,
53 [ --with-python-force-detection
54 bypass all the python version check mechanism.
55 When using this, make sure you have a version
56 greater or egal to python 2.3 installed
57 as 'python' in your path [default=no]])
59 if test x$withval = "xno"; then
66 AC_ARG_WITH(python-install-submission-scripts,
67 [ --with-python-install-submission-scripts
68 install in the path the submission-related scripts
69 from submit/ in the $PREFIX/bin program path.
70 Useful for desklets author [default=no]])
72 if test x$withval = "xyes"; then
73 AM_CONDITIONAL(PYTHON_INSTALL_SUBMISSION_SCRIPTS, true)
75 AM_CONDITIONAL(PYTHON_INSTALL_SUBMISSION_SCRIPTS, false)
77 AC_CHECK_FUNCS(sigprocmask,
78 [HAVE_SIGPROCMASK="#define HAVE_SIGPROCMASK 1", SIGPROC=yes],
79 [HAVE_SIGPROCMASK="#undef HAVE_SIGPROCMASK"])
81 HAVE_SIGPROCMASK="#undef HAVE_SIGPROCMASK"
83 AC_SUBST(HAVE_SIGPROCMASK)
84 AM_CONDITIONAL(PYTHON_SUPPORT, test "x$PYTHON" != "x")
85 AM_CONDITIONAL(PYTHON_INSTALL_SUBMISSION_SCRIPTS, true)
88 AC_PATH_PROG(HELP2MAN, help2man)
89 AM_CONDITIONAL(HELP2MAN_SUPPORT, test "x$HELP2MAN" != "x")
92 AC_PATH_PROG(TIDY,tidy)
95 AC_PATH_PROG(DOXYGEN,doxygen)
96 AM_CONDITIONAL(DOXYGEN_SUPPORT, test "x$DOXYGEN" != "x")
99 dnl Also test the presence of the full documentation package
100 AM_CONDITIONAL(MAKEINFO_SUPPORT,
101 test "x$MAKEINFO:" != "x" && test -f doc/Makefile.am)
103 dnl Try to enforce ISO C (iso9899 1999)
104 dnl This will more likely work
105 dnl only with gcc. In fact,
106 dnl expect for variadic macros, this program
107 dnl should be ansi C (ISO C90).
109 CFLAGS="$CFLAGS -std=c99 -pedantic -Wall"
110 AC_MSG_CHECKING([for ISO C99 warnings generation])
118 AC_MSG_RESULT([yes]),
123 dnl Define source to be BSD compliant (ISO C, POSIX, and 4.3BSD)
124 AC_DEFINE(_BSD_SOURCE,1,[Source is BSD compliant (ISO C, POSIX and 4.3BSD)])
125 if test "x`uname`" = xNetBSD; then
126 dnl NetBSD (at least version 1.6.1) is following the standard less closely than
127 dnl the other... Hence, we declare the source specifically as _POSIX_SOURCE
128 dnl instead of the newer _POSIX_C_SOURCE 199309
129 AC_DEFINE(_POSIX_SOURCE,1,[Source is POSIX 1 compliant (IEEE Std 1003.1)])
131 dnl For some unspecified reason, it as been reported than FreeBSD [5|6|7].x
132 dnl doesn't like those POSIX keywords either
133 UNAME_REDUX=`uname -r -s | sed 's/\..*//' 2> /dev/null`
134 if test "$UNAME_REDUX" != 'FreeBSD 5' && \
135 test "$UNAME_REDUX" != 'FreeBSD 6' && \
136 test "$UNAME_REDUX" != 'FreeBSD 7'
138 AC_DEFINE(_POSIX_C_SOURCE,199309,[Source is POSIX 4 compliant (IEEE Std 1003.1b)])
142 dnl Check for system header files
144 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)
147 dnl This will filter out optimisation switch (-O[s0-9])
150 debug, [ --enable-debug enable debugging symbols and supplementary
151 messages generation in final binary])
154 AC_MSG_CHECKING([for debugging symbols generation])
155 if test x$enableval = "xyes"; then
157 AC_DEFINE(DEBUG, 1, [Debug mode is on if defined.])
162 CFLAGS=`echo "$CFLAGS" | sed 's/^-g$//; s/^-g@<:@@<:@:space:@:>@@:>@\+// ; s/@<:@@<:@:space:@:>@@:>@\+-g$//; s/@<:@@<:@:space:@:>@@:>@\+-g@<:@@<:@:space:@:>@@:>@\+/ /'`
165 dnl SIGKILL timeout setting
167 AC_MSG_CHECKING([for sigkill timeout])
168 AC_ARG_ENABLE(sigkill-timeout,
169 [ --enable-sigkill-timeout=SEC
170 timeout (in seconds) before sending `kill'
171 signal to parent process in case of restart
172 if `term' has no effect [default=5]])
174 test $enableval -gt 0 2> /dev/null || {
176 AC_MSG_ERROR([Given sigkill timeout was not understood])
179 AC_DEFINE_UNQUOTED(SIGKILL_TIMEOUT,$enableval,
180 [Delay between SIGTERM ans SIGKILL to parent process in case of restart.])
182 dnl X polling frequency setting
185 AC_MSG_CHECKING([for polling frequency])
186 AC_ARG_ENABLE(x-polling-frequency,
187 [ --enable-x-polling-frequency=FREQ
188 frequency (in hertz) for polling the X server
189 for events. Lower values leads to less responsive,
190 but less CPU hungry desklets [default=50]])
192 test $enableval -gt 0 2> /dev/null || {
194 AC_MSG_ERROR([Positive, integer value is required as x-polling-frequency])
197 AC_CHECK_PROG(EXISTS,bc,yes,no)
198 if test $enableval -ne 50; then
199 if test x$EXISTS = "xyes"; then
200 period=`echo "1000000 / $enableval" | bc`
202 AC_MSG_WARN([Could not find the `bc' calculator to perform arithmetic
203 computation of X server polling period value. Default 50 Hz is assumed.])
207 AC_DEFINE_UNQUOTED(X_POLLING_PERIOD,$period,
208 [Polling period (in 10e-6 seconds) of stdin between two cycles of events loop.])
210 dnl Lock files directory setting
212 AC_MSG_CHECKING([for lock files directory setting])
213 AC_ARG_ENABLE(lockfiles-dir,
214 [ --enable-lockfiles-dir=DIR
215 directory to put lock files in [default=/tmp]])
217 test -d $enableval || {
219 AC_MSG_ERROR([Given lock files directory does not exist on your system])
222 AC_DEFINE_UNQUOTED(LOCKFILES_DIR,"$enableval",
223 [Directory to put lock files in.])
224 LOCKFILES_DIR=$enableval
225 AC_SUBST(LOCKFILES_DIR)
227 dnl Control modifier on context menu
229 AC_MSG_CHECKING([for control modifier on context menu])
230 AC_ARG_ENABLE(control-on-context-menu,
231 [ --enable-control-on-context-menu
232 force CTRL to be pressed to fire context menu
235 if test x$enableval != "xno" ; then
237 AC_DEFINE(CONTROL_ON_CONTEXT_MENU, 1,
238 [Force CTRL to be pressed to fire context menu])
243 dnl Legacy Window Manager detection code
245 AC_MSG_CHECKING([for legacy fake root window detection code])
246 AC_ARG_ENABLE(legacy-fake-root-window-detection,
247 [ --enable-legacy-fake-root-window-detection
248 Use the old code to detect fake root windows
251 if test x$enableval != "xno" ; then
253 AC_DEFINE(WM_DETECTION_OLD_STYLE, 1,
254 [Use former fake root window detection code])
259 dnl New frontend driver
261 AC_MSG_CHECKING([for frontend shell driver])
262 AC_ARG_ENABLE(frontend-shell-driver,
263 [ --disable-frontend-shell-driver
264 Do not invoke the frontend shell-based driver
265 for adesklets [default=no]])
267 if test x$enableval != "xyes" ; then
268 AM_CONDITIONAL(FRONTEND_SHELL_SUPPORT, test 1 -eq 0)
271 AC_DEFINE(FRONTEND_SHELL_DRIVER, 1,
272 [Enable the frontend shell driver mecanism])
273 AM_CONDITIONAL(FRONTEND_SHELL_SUPPORT, test 1 -eq 1)
277 dnl Collect various system informations strings,
278 dnl for embedding into final executable
280 WELCOME1="\"$PACKAGE $VERSION"
281 AC_CHECK_PROG(EXISTS,date,yes)
282 if test x$EXISTS = "xyes"; then
283 WELCOME1="$WELCOME1 ("`date | sed 's/@<:@@<:@:space:@:>@@:>@\+/ /g'`")"
285 WELCOME1="$WELCOME1 (unknown time)"
288 AC_CHECK_PROG(EXISTS,uname,yes)
289 if test x$EXISTS = "xyes"; then
290 if uname -rs &> /dev/null; then
291 WELCOME1="$WELCOME1, on "`uname -rs`"\""
293 WELCOME1="$WELCOME1, on an unknown OS\""
296 WELCOME1="$WELCOME1, on an unknown OS\""
298 AC_DEFINE_UNQUOTED(WELCOME_LINE_1, $WELCOME1, [Welcome message, first line.])
299 dnl Note: @<:@ and @:>@ are respective quadrigraphs for `[' and `]'
300 ${CC} --version &> /dev/null && \
301 WELCOME2="\"${CC} "`${CC} --version | sed -n '1 s/^@<:@^0-9@:>@*//p'`"\""
302 : ${WELCOME2:=\"${CC} unknown version\"}
303 AC_DEFINE_UNQUOTED(WELCOME_LINE_2, $WELCOME2, [Welcome message, second line.])
305 dnl Variables save: all changes to CFLAGS, LIBS and LDFLAGS beyond
306 dnl this point will be wiped
309 TMP_LDFLAGS="$LDFLAGS"
311 dnl Check for readline
312 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=yes; LibTermcap=ncurses,
313 AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=yes; LibTermcap=termcap,
314 AC_CHECK_LIB(curses, tputs, HaveLibTermcap=yes; LibTermcap=curses,
316 if test $HaveLibTermcap = "yes" ; then
317 LIBS="$LIBS -l$LibTermcap"
319 AC_MSG_ERROR([Could not find terminal management library for readline
320 (either ncurses, termcap or curses).])
322 AC_CHECK_LIB(readline,readline,
323 READLINE_LIBS="-l$LibTermcap -lreadline",
324 AC_MSG_ERROR([Could not find the readline library]),
328 dnl Check for libhistory support
331 [ --without-history remove history support in interactive use
334 if test x$withval = "xyes"; then
335 AC_CHECK_LIB(history,add_history,
336 READLINE_LIBS="$READLINE_LIBS -lhistory";
337 AC_DEFINE(HAVE_READLINE_HISTORY_H,1,
338 [Define to 1 if you have the <readline/history.h> header file.])
340 AC_CHECK_LIB(history,free_history_entry,
341 AC_DEFINE(HAVE_FREE_HISTORY_ENTRY,1,
342 [Define to 1 if you have the `free_history_entry' function.])),
345 if test $HaveLibHistory = "no"; then
346 AC_MSG_WARN([Could not find GNU history library in the system])
348 AC_MSG_CHECKING([for history max command lenght])
350 AC_ARG_ENABLE(history-max-command-lenght,
351 [ --enable-history-max-command-lenght=LEN
352 maximum string lenght (in characters) that a single
353 command can have and still be kept in history
354 (a lenght of zero meaning no limits) [default=256]])
357 if test $enableval -ge 0 ; then
359 AC_DEFINE_UNQUOTED(HISTORY_MAX_COMMAND_LENGHT,$enableval,
360 [maximum history string lenght.])
363 AC_MSG_ERROR([history max command lenght must be positive or null])
367 AC_SUBST(READLINE_LIBS)
369 dnl Check for 8 bit characters support forcing
371 AC_ARG_ENABLE(force-extended-characters-input,
372 [ --enable-force-extended-characters-input
373 force input and ouput of unescaped
374 height bits characters through GNU readline,
375 regardless of the inputrc settings [default=no]])
377 if ! test x$enableval = "xno" ; then
378 AC_DEFINE(FORCE_EXTENDED_CHARACTERS_INPUT,1,
379 [force 8 bit characters support in GNU readline])
382 dnl Check for fontconfig
384 AC_ARG_WITH(fontconfig,
385 [ --without-fontconfig remove fontconfig support enabling automatic
386 detection of all truetype fonts already available
389 if test x$withval = "xyes"; then
390 AC_PATH_PROG(PKG_CONFIG, pkg-config)
391 if ! test x$PKG_CONFIG = "x" ; then
392 if $PKG_CONFIG --exists fontconfig 2> /dev/null; then
393 FONTCONFIG_LIBS=`pkg-config --libs fontconfig`
394 FONTCONFIG_CFLAGS=`pkg-config --cflags fontconfig`
397 if test x$FONTCONFIG_LIBS = "x"; then
398 FONTCONFIG_LIBS=-lfontconfig
400 LIBS="$LIBS $FONTCONFIG_LIBS"
401 CFLAGS="$CFLAGS $FONTCONFIG_CFLAGS"
402 AC_MSG_CHECKING([for fontconfig])
404 #include <fontconfig/fontconfig.h>
407 AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.]),
412 -----------------------------------------------------
413 `fontconfig' was not found on your system.
414 Although `adesklets' will work anyway system-wide
415 automatic font detection will not occur:
416 it is therefore quite possible that only the
417 default font provided with the package will display.
418 -----------------------------------------------------]))
419 AC_SUBST(FONTCONFIG_LIBS)
420 AC_SUBST(FONTCONFIG_CFLAGS)
425 dnl Check for fork() system call
426 AC_CHECK_FUNCS(fork,,
427 AC_MSG_ERROR([Could not find the fork() system call]))
429 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 X_LIBS="$X_LIBS $X_EXTRA_LIBS"
440 CFLAGS="$CFLAGS $X_CFLAGS"
441 LDFLAGS="$LDFLAGS $LIBS $X_PRE_LIBS"
442 dnl Check for required functions in -lX11
443 AC_CHECK_LIB(X11, XOpenDisplay,
444 X_LIBS="$X_LIBS -lX11"
446 AC_MSG_ERROR([Could not find XOpenDisplay in -lX11.])
448 AC_DEFINE(X_DISPLAY_SUPPORT,1,[Define to 1 if the X Window System is supported, 0 otherwise.])
450 AC_DEFINE(X_DISPLAY_SUPPORT,0,[Define to 1 if the X Window System is supported, 0 otherwise.])
462 [ --with-imlib2=DIR use imlib2 in <DIR>],
463 [CFLAGS="$CFLAGS -I$withval/include"
464 LIBS="-L$withval/lib $LIBS"])
466 AC_PATH_GENERIC_MODIFIED(imlib2, 1.1.2,
467 [ AC_SUBST(IMLIB2_LIBS)
468 AC_SUBST(IMLIB2_CFLAGS) ],
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 -----------------------------------------------------]))
480 LIBS="$LIBS $IMLIB2_LIBS"
481 CFLAGS="$CFLAGS $IMLIB2_CFLAGS"
483 AC_MSG_CHECKING([for imlib2 program linking])
485 #ifndef X_DISPLAY_MISSING
486 #include <X11/Xlib.h>
487 #include <X11/Xutil.h>
489 #include <X11/Xatom.h>
493 image = imlib_load_image("toto.png");
494 #ifndef X_DISPLAY_MISSING
495 imlib_context_set_display(NULL);
498 AC_MSG_RESULT([yes]),
500 AC_MSG_ERROR([Cannot link Imlib2 program.
501 If you specified you did not want X support this can be caused
502 by your Imlib2 installment being configured so it needs it
503 or conversely. In that case reinstall Imlib2 with proper
504 --enable-x11-support parameter (as from enlightement CVS)
505 before retrying to configure this package.]))
507 dnl Test for uint typedef
508 AC_MSG_CHECKING([for uint typedef in standard library])
510 #ifdef HAVE_SYS_TYPES_H
511 #include <sys/types.h>
517 AC_MSG_RESULT([yes]),
519 AC_DEFINE(UINT_NOT_DEFINED,1,
520 [Define to 1 if compability type uint is not detected.])
523 dnl Important variables reset
526 LDFLAGS="$TMP_LDFLAGS"
528 dnl PKGDATADIR definition
529 dnl PKGDATADIR is only well constructed in make context,
530 dnl so let's put this AFTER all tests.
531 CFLAGS="$CFLAGS"' -DPKGDATADIR=\"$(pkgdatadir)\"'
534 AM_CONFIG_HEADER(src/config.h)
540 doc/adesklets_checkin.1
541 doc/adesklets_submit.1
545 scripting/protoize.sh
546 scripting/python/Makefile
547 scripting/python/config.h
548 scripting/python/setup.py
549 utils/adesklets_frontend.sh
552 dnl Change script(s) permissions
553 chmod +x scripting/protoize.sh doc/htmldoc.sh utils/adesklets_frontend.sh
555 dnl Final warning, if needed
556 if test x$DEBUG = "xyes"; then
558 -----------------------------------------------------
559 you choosed to make a `debug' compilation: this will
560 generate a significantly bigger executable
561 that produces on stderr (by default) a lot of outputs
562 unwanted during normal use; set up the ADESKLETS_LOG
563 environment variable to a filename the interpreter
564 can safely suffix with a pid related extension
565 than truncate to collect all debug outputs
566 there instead. Be also aware that all optimisation
567 settings (-O flags in CFLAGS) are discarded when
569 -----------------------------------------------------])
571 if test x$no_x = "xyes"; then
573 -----------------------------------------------------
574 you choosed to perform an `X Window less' build -
575 which means you will eventually end up with
576 a strictly command line program free of all
577 dependencies on xlib. If it is not what you intended
578 please reconfigure. For this to work you do need first
579 to configure your Imlib2 incantation for not using
581 -----------------------------------------------------
585 if test x$PYTHON != "x" ; then
586 if test x$SIGPROC != "xyes" ; then
588 -----------------------------------------------------
589 your system does not seem to support reliable POSIX
590 signal calls such as `sigprocmask', `sigpending' or
591 `sigsuspend'. Although this does not affect $PACKAGE
592 directly, it seriously impedes python ability
593 to handle things well through its package.
594 To our knowledge, no modern UNIX platforms lack
595 those system calls...
596 -----------------------------------------------------