1 dnl Initialize autoconf and automake
3 AC_CONFIG_SRCDIR(src/main.c)
5 AM_INIT_AUTOMAKE(adesklets,0.4.10)
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 Collect various system informations strings,
260 dnl for embedding into final executable
262 WELCOME1="\"$PACKAGE $VERSION"
263 AC_CHECK_PROG(EXISTS,date,yes)
264 if test x$EXISTS = "xyes"; then
265 WELCOME1="$WELCOME1 ("`date | sed 's/@<:@@<:@:space:@:>@@:>@\+/ /g'`")"
267 WELCOME1="$WELCOME1 (unknown time)"
270 AC_CHECK_PROG(EXISTS,uname,yes)
271 if test x$EXISTS = "xyes"; then
272 if uname -rs &> /dev/null; then
273 WELCOME1="$WELCOME1, on "`uname -rs`"\""
275 WELCOME1="$WELCOME1, on an unknown OS\""
278 WELCOME1="$WELCOME1, on an unknown OS\""
280 AC_DEFINE_UNQUOTED(WELCOME_LINE_1, $WELCOME1, [Welcome message, first line.])
281 dnl Note: @<:@ and @:>@ are respective quadrigraphs for `[' and `]'
282 ${CC} --version &> /dev/null && \
283 WELCOME2="\"${CC} "`${CC} --version | sed -n '1 s/^@<:@^0-9@:>@*//p'`"\""
284 : ${WELCOME2:=\"${CC} unknown version\"}
285 AC_DEFINE_UNQUOTED(WELCOME_LINE_2, $WELCOME2, [Welcome message, second line.])
287 dnl Variables save: all changes to CFLAGS, LIBS and LDFLAGS beyond
288 dnl this point will be wiped
291 TMP_LDFLAGS="$LDFLAGS"
293 dnl Check for readline
294 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=yes; LibTermcap=ncurses,
295 AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=yes; LibTermcap=termcap,
296 AC_CHECK_LIB(curses, tputs, HaveLibTermcap=yes; LibTermcap=curses,
298 if test $HaveLibTermcap = "yes" ; then
299 LIBS="$LIBS -l$LibTermcap"
301 AC_MSG_ERROR([Could not find terminal management library for readline
302 (either ncurses, termcap or curses).])
304 AC_CHECK_LIB(readline,readline,
305 READLINE_LIBS="-l$LibTermcap -lreadline",
306 AC_MSG_ERROR([Could not find the readline library]),
310 dnl Check for libhistory support
313 [ --without-history remove history support in interactive use
316 if test x$withval = "xyes"; then
317 AC_CHECK_LIB(history,add_history,
318 READLINE_LIBS="$READLINE_LIBS -lhistory";
319 AC_DEFINE(HAVE_READLINE_HISTORY_H,1,
320 [Define to 1 if you have the <readline/history.h> header file.])
322 AC_CHECK_LIB(history,free_history_entry,
323 AC_DEFINE(HAVE_FREE_HISTORY_ENTRY,1,
324 [Define to 1 if you have the `free_history_entry' function.])),
327 if test $HaveLibHistory = "no"; then
328 AC_MSG_WARN([Could not find GNU history library in the system])
330 AC_MSG_CHECKING([for history max command lenght])
332 AC_ARG_ENABLE(history-max-command-lenght,
333 [ --enable-history-max-command-lenght=LEN
334 maximum string lenght (in characters) that a single
335 command can have and still be kept in history
336 (a lenght of zero meaning no limits) [default=256]])
339 if test $enableval -ge 0 ; then
341 AC_DEFINE_UNQUOTED(HISTORY_MAX_COMMAND_LENGHT,$enableval,
342 [maximum history string lenght.])
345 AC_MSG_ERROR([history max command lenght must be positive or null])
349 AC_SUBST(READLINE_LIBS)
351 dnl Check for 8 bit characters support forcing
353 AC_ARG_ENABLE(force-extended-characters-input,
354 [ --enable-force-extended-characters-input
355 force input and ouput of unescaped
356 height bits characters through GNU readline,
357 regardless of the inputrc settings [default=no]])
359 if ! test x$enableval = "xno" ; then
360 AC_DEFINE(FORCE_EXTENDED_CHARACTERS_INPUT,1,
361 [force 8 bit characters support in GNU readline])
364 dnl Check for fontconfig
366 AC_ARG_WITH(fontconfig,
367 [ --without-fontconfig remove fontconfig support enabling automatic
368 detection of all truetype fonts already available
371 if test x$withval = "xyes"; then
372 AC_PATH_PROG(PKG_CONFIG, pkg-config)
373 if ! test x$PKG_CONFIG = "x" ; then
374 if $PKG_CONFIG --exists fontconfig 2> /dev/null; then
375 FONTCONFIG_LIBS=`pkg-config --libs fontconfig`
376 FONTCONFIG_CFLAGS=`pkg-config --cflags fontconfig`
379 if test x$FONTCONFIG_LIBS = "x"; then
380 FONTCONFIG_LIBS=-lfontconfig
382 LIBS="$LIBS $FONTCONFIG_LIBS"
383 CFLAGS="$CFLAGS $FONTCONFIG_CFLAGS"
384 AC_MSG_CHECKING([for fontconfig])
386 #include <fontconfig/fontconfig.h>
389 AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.]),
394 -----------------------------------------------------
395 `fontconfig' was not found on your system.
396 Although `adesklets' will work anyway system-wide
397 automatic font detection will not occur:
398 it is therefore quite possible that only the
399 default font provided with the package will display.
400 -----------------------------------------------------]))
401 AC_SUBST(FONTCONFIG_LIBS)
402 AC_SUBST(FONTCONFIG_CFLAGS)
407 dnl Check for fork() system call
408 AC_CHECK_FUNCS(fork,,
409 AC_MSG_ERROR([Could not find the fork() system call]))
411 dnl Check for X headers and libraries
415 if test x$no_x != "xyes"; then
417 test x$x_includes = "x" && x_includes="/usr/include"
418 test x$x_libraries = "x" && x_libraries="/usr/lib"
420 X_LIBS="$X_LIBS $X_EXTRA_LIBS"
422 CFLAGS="$CFLAGS $X_CFLAGS"
423 LDFLAGS="$LDFLAGS $LIBS $X_PRE_LIBS"
424 dnl Check for required functions in -lX11
425 AC_CHECK_LIB(X11, XOpenDisplay,
426 X_LIBS="$X_LIBS -lX11"
428 AC_MSG_ERROR([Could not find XOpenDisplay in -lX11.])
430 AC_DEFINE(X_DISPLAY_SUPPORT,1,[Define to 1 if the X Window System is supported, 0 otherwise.])
432 AC_DEFINE(X_DISPLAY_SUPPORT,0,[Define to 1 if the X Window System is supported, 0 otherwise.])
444 [ --with-imlib2=DIR use imlib2 in <DIR>],
445 [CFLAGS="$CFLAGS -I$withval/include"
446 LIBS="-L$withval/lib $LIBS"])
448 AC_PATH_GENERIC_MODIFIED(imlib2, 1.1.2,
449 [ AC_SUBST(IMLIB2_LIBS)
450 AC_SUBST(IMLIB2_CFLAGS) ],
451 AC_MSG_ERROR([Cannot find imlib2: Is imlib2-config in the path?]),
454 -----------------------------------------------------
455 $PACKAGE should work with your version of imlib2...
456 But for better results you are _warmly_ encouraged
457 to try out version 1.2.0 or above;
458 known bugs are still lurking in dark corners
459 with what you have installed: beware strange problems
460 with dynamic image filters for instance!
461 -----------------------------------------------------]))
462 LIBS="$LIBS $IMLIB2_LIBS"
463 CFLAGS="$CFLAGS $IMLIB2_CFLAGS"
465 AC_MSG_CHECKING([for imlib2 program linking])
467 #ifndef X_DISPLAY_MISSING
468 #include <X11/Xlib.h>
469 #include <X11/Xutil.h>
471 #include <X11/Xatom.h>
475 image = imlib_load_image("toto.png");
476 #ifndef X_DISPLAY_MISSING
477 imlib_context_set_display(NULL);
480 AC_MSG_RESULT([yes]),
482 AC_MSG_ERROR([Cannot link Imlib2 program.
483 If you specified you did not want X support this can be caused
484 by your Imlib2 installment being configured so it needs it
485 or conversely. In that case reinstall Imlib2 with proper
486 --enable-x11-support parameter (as from enlightement CVS)
487 before retrying to configure this package.]))
489 dnl Test for uint typedef
490 AC_MSG_CHECKING([for uint typedef in standard library])
492 #ifdef HAVE_SYS_TYPES_H
493 #include <sys/types.h>
499 AC_MSG_RESULT([yes]),
501 AC_DEFINE(UINT_NOT_DEFINED,1,
502 [Define to 1 if compability type uint is not detected.])
505 dnl Important variables reset
508 LDFLAGS="$TMP_LDFLAGS"
510 dnl PKGDATADIR definition
511 dnl PKGDATADIR is only well constructed in make context,
512 dnl so let's put this AFTER all tests.
513 CFLAGS="$CFLAGS"' -DPKGDATADIR=\"$(pkgdatadir)\"'
516 AM_CONFIG_HEADER(src/config.h)
522 doc/adesklets_checkin.1
523 doc/adesklets_submit.1
527 scripting/protoize.sh
528 scripting/python/Makefile
529 scripting/python/config.h
530 scripting/python/setup.py
531 utils/adesklets_frontend.sh
534 dnl Change script(s) permissions
535 chmod +x scripting/protoize.sh doc/htmldoc.sh utils/adesklets_frontend.sh
537 dnl Final warning, if needed
538 if test x$DEBUG = "xyes"; then
540 -----------------------------------------------------
541 you choosed to make a `debug' compilation: this will
542 generate a significantly bigger executable
543 that produces on stderr (by default) a lot of outputs
544 unwanted during normal use; set up the ADESKLETS_LOG
545 environment variable to a filename the interpreter
546 can safely suffix with a pid related extension
547 than truncate to collect all debug outputs
548 there instead. Be also aware that all optimisation
549 settings (-O flags in CFLAGS) are discarded when
551 -----------------------------------------------------])
553 if test x$no_x = "xyes"; then
555 -----------------------------------------------------
556 you choosed to perform an `X Window less' build -
557 which means you will eventually end up with
558 a strictly command line program free of all
559 dependencies on xlib. If it is not what you intended
560 please reconfigure. For this to work you do need first
561 to configure your Imlib2 incantation for not using
563 -----------------------------------------------------
567 if test x$PYTHON != "x" ; then
568 if test x$SIGPROC != "xyes" ; then
570 -----------------------------------------------------
571 your system does not seem to support reliable POSIX
572 signal calls such as `sigprocmask', `sigpending' or
573 `sigsuspend'. Although this does not affect $PACKAGE
574 directly, it seriously impedes python ability
575 to handle things well through its package.
576 To our knowledge, no modern UNIX platforms lack
577 those system calls...
578 -----------------------------------------------------