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 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
270 AC_DEFINE(FRONTEND_SHELL_DRIVER, 1,
271 [Enable the frontend shell driver mecanism])
275 dnl Collect various system informations strings,
276 dnl for embedding into final executable
278 WELCOME1="\"$PACKAGE $VERSION"
279 AC_CHECK_PROG(EXISTS,date,yes)
280 if test x$EXISTS = "xyes"; then
281 WELCOME1="$WELCOME1 ("`date | sed 's/@<:@@<:@:space:@:>@@:>@\+/ /g'`")"
283 WELCOME1="$WELCOME1 (unknown time)"
286 AC_CHECK_PROG(EXISTS,uname,yes)
287 if test x$EXISTS = "xyes"; then
288 if uname -rs &> /dev/null; then
289 WELCOME1="$WELCOME1, on "`uname -rs`"\""
291 WELCOME1="$WELCOME1, on an unknown OS\""
294 WELCOME1="$WELCOME1, on an unknown OS\""
296 AC_DEFINE_UNQUOTED(WELCOME_LINE_1, $WELCOME1, [Welcome message, first line.])
297 dnl Note: @<:@ and @:>@ are respective quadrigraphs for `[' and `]'
298 ${CC} --version &> /dev/null && \
299 WELCOME2="\"${CC} "`${CC} --version | sed -n '1 s/^@<:@^0-9@:>@*//p'`"\""
300 : ${WELCOME2:=\"${CC} unknown version\"}
301 AC_DEFINE_UNQUOTED(WELCOME_LINE_2, $WELCOME2, [Welcome message, second line.])
303 dnl Variables save: all changes to CFLAGS, LIBS and LDFLAGS beyond
304 dnl this point will be wiped
307 TMP_LDFLAGS="$LDFLAGS"
309 dnl Check for readline
310 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=yes; LibTermcap=ncurses,
311 AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=yes; LibTermcap=termcap,
312 AC_CHECK_LIB(curses, tputs, HaveLibTermcap=yes; LibTermcap=curses,
314 if test $HaveLibTermcap = "yes" ; then
315 LIBS="$LIBS -l$LibTermcap"
317 AC_MSG_ERROR([Could not find terminal management library for readline
318 (either ncurses, termcap or curses).])
320 AC_CHECK_LIB(readline,readline,
321 READLINE_LIBS="-l$LibTermcap -lreadline",
322 AC_MSG_ERROR([Could not find the readline library]),
326 dnl Check for libhistory support
329 [ --without-history remove history support in interactive use
332 if test x$withval = "xyes"; then
333 AC_CHECK_LIB(history,add_history,
334 READLINE_LIBS="$READLINE_LIBS -lhistory";
335 AC_DEFINE(HAVE_READLINE_HISTORY_H,1,
336 [Define to 1 if you have the <readline/history.h> header file.])
338 AC_CHECK_LIB(history,free_history_entry,
339 AC_DEFINE(HAVE_FREE_HISTORY_ENTRY,1,
340 [Define to 1 if you have the `free_history_entry' function.])),
343 if test $HaveLibHistory = "no"; then
344 AC_MSG_WARN([Could not find GNU history library in the system])
346 AC_MSG_CHECKING([for history max command lenght])
348 AC_ARG_ENABLE(history-max-command-lenght,
349 [ --enable-history-max-command-lenght=LEN
350 maximum string lenght (in characters) that a single
351 command can have and still be kept in history
352 (a lenght of zero meaning no limits) [default=256]])
355 if test $enableval -ge 0 ; then
357 AC_DEFINE_UNQUOTED(HISTORY_MAX_COMMAND_LENGHT,$enableval,
358 [maximum history string lenght.])
361 AC_MSG_ERROR([history max command lenght must be positive or null])
365 AC_SUBST(READLINE_LIBS)
367 dnl Check for 8 bit characters support forcing
369 AC_ARG_ENABLE(force-extended-characters-input,
370 [ --enable-force-extended-characters-input
371 force input and ouput of unescaped
372 height bits characters through GNU readline,
373 regardless of the inputrc settings [default=no]])
375 if ! test x$enableval = "xno" ; then
376 AC_DEFINE(FORCE_EXTENDED_CHARACTERS_INPUT,1,
377 [force 8 bit characters support in GNU readline])
380 dnl Check for fontconfig
382 AC_ARG_WITH(fontconfig,
383 [ --without-fontconfig remove fontconfig support enabling automatic
384 detection of all truetype fonts already available
387 if test x$withval = "xyes"; then
388 AC_PATH_PROG(PKG_CONFIG, pkg-config)
389 if ! test x$PKG_CONFIG = "x" ; then
390 if $PKG_CONFIG --exists fontconfig 2> /dev/null; then
391 FONTCONFIG_LIBS=`pkg-config --libs fontconfig`
392 FONTCONFIG_CFLAGS=`pkg-config --cflags fontconfig`
395 if test x$FONTCONFIG_LIBS = "x"; then
396 FONTCONFIG_LIBS=-lfontconfig
398 LIBS="$LIBS $FONTCONFIG_LIBS"
399 CFLAGS="$CFLAGS $FONTCONFIG_CFLAGS"
400 AC_MSG_CHECKING([for fontconfig])
402 #include <fontconfig/fontconfig.h>
405 AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.]),
410 -----------------------------------------------------
411 `fontconfig' was not found on your system.
412 Although `adesklets' will work anyway system-wide
413 automatic font detection will not occur:
414 it is therefore quite possible that only the
415 default font provided with the package will display.
416 -----------------------------------------------------]))
417 AC_SUBST(FONTCONFIG_LIBS)
418 AC_SUBST(FONTCONFIG_CFLAGS)
423 dnl Check for fork() system call
424 AC_CHECK_FUNCS(fork,,
425 AC_MSG_ERROR([Could not find the fork() system call]))
427 dnl Check for X headers and libraries
431 if test x$no_x != "xyes"; then
433 test x$x_includes = "x" && x_includes="/usr/include"
434 test x$x_libraries = "x" && x_libraries="/usr/lib"
436 X_LIBS="$X_LIBS $X_EXTRA_LIBS"
438 CFLAGS="$CFLAGS $X_CFLAGS"
439 LDFLAGS="$LDFLAGS $LIBS $X_PRE_LIBS"
440 dnl Check for required functions in -lX11
441 AC_CHECK_LIB(X11, XOpenDisplay,
442 X_LIBS="$X_LIBS -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.])
460 [ --with-imlib2=DIR use imlib2 in <DIR>],
461 [CFLAGS="$CFLAGS -I$withval/include"
462 LIBS="-L$withval/lib $LIBS"])
464 AC_PATH_GENERIC_MODIFIED(imlib2, 1.1.2,
465 [ AC_SUBST(IMLIB2_LIBS)
466 AC_SUBST(IMLIB2_CFLAGS) ],
467 AC_MSG_ERROR([Cannot find imlib2: Is imlib2-config in the path?]),
470 -----------------------------------------------------
471 $PACKAGE should work with your version of imlib2...
472 But for better results you are _warmly_ encouraged
473 to try out version 1.2.0 or above;
474 known bugs are still lurking in dark corners
475 with what you have installed: beware strange problems
476 with dynamic image filters for instance!
477 -----------------------------------------------------]))
478 LIBS="$LIBS $IMLIB2_LIBS"
479 CFLAGS="$CFLAGS $IMLIB2_CFLAGS"
481 AC_MSG_CHECKING([for imlib2 program linking])
483 #ifndef X_DISPLAY_MISSING
484 #include <X11/Xlib.h>
485 #include <X11/Xutil.h>
487 #include <X11/Xatom.h>
491 image = imlib_load_image("toto.png");
492 #ifndef X_DISPLAY_MISSING
493 imlib_context_set_display(NULL);
496 AC_MSG_RESULT([yes]),
498 AC_MSG_ERROR([Cannot link Imlib2 program.
499 If you specified you did not want X support this can be caused
500 by your Imlib2 installment being configured so it needs it
501 or conversely. In that case reinstall Imlib2 with proper
502 --enable-x11-support parameter (as from enlightement CVS)
503 before retrying to configure this package.]))
505 dnl Test for uint typedef
506 AC_MSG_CHECKING([for uint typedef in standard library])
508 #ifdef HAVE_SYS_TYPES_H
509 #include <sys/types.h>
515 AC_MSG_RESULT([yes]),
517 AC_DEFINE(UINT_NOT_DEFINED,1,
518 [Define to 1 if compability type uint is not detected.])
521 dnl Important variables reset
524 LDFLAGS="$TMP_LDFLAGS"
526 dnl PKGDATADIR definition
527 dnl PKGDATADIR is only well constructed in make context,
528 dnl so let's put this AFTER all tests.
529 CFLAGS="$CFLAGS"' -DPKGDATADIR=\"$(pkgdatadir)\"'
532 AM_CONFIG_HEADER(src/config.h)
538 doc/adesklets_checkin.1
539 doc/adesklets_submit.1
543 scripting/protoize.sh
544 scripting/python/Makefile
545 scripting/python/config.h
546 scripting/python/setup.py
547 utils/adesklets_frontend.sh
550 dnl Change script(s) permissions
551 chmod +x scripting/protoize.sh doc/htmldoc.sh utils/adesklets_frontend.sh
553 dnl Final warning, if needed
554 if test x$DEBUG = "xyes"; then
556 -----------------------------------------------------
557 you choosed to make a `debug' compilation: this will
558 generate a significantly bigger executable
559 that produces on stderr (by default) a lot of outputs
560 unwanted during normal use; set up the ADESKLETS_LOG
561 environment variable to a filename the interpreter
562 can safely suffix with a pid related extension
563 than truncate to collect all debug outputs
564 there instead. Be also aware that all optimisation
565 settings (-O flags in CFLAGS) are discarded when
567 -----------------------------------------------------])
569 if test x$no_x = "xyes"; then
571 -----------------------------------------------------
572 you choosed to perform an `X Window less' build -
573 which means you will eventually end up with
574 a strictly command line program free of all
575 dependencies on xlib. If it is not what you intended
576 please reconfigure. For this to work you do need first
577 to configure your Imlib2 incantation for not using
579 -----------------------------------------------------
583 if test x$PYTHON != "x" ; then
584 if test x$SIGPROC != "xyes" ; then
586 -----------------------------------------------------
587 your system does not seem to support reliable POSIX
588 signal calls such as `sigprocmask', `sigpending' or
589 `sigsuspend'. Although this does not affect $PACKAGE
590 directly, it seriously impedes python ability
591 to handle things well through its package.
592 To our knowledge, no modern UNIX platforms lack
593 those system calls...
594 -----------------------------------------------------