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 AM_CONDITIONAL(MAKEINFO_SUPPORT, test "x$MAKEINFO:" != "x")
101 dnl Try to enforce ISO C (iso9899 1999)
102 dnl This will more likely work
103 dnl only with gcc. In fact,
104 dnl expect for variadic macros, this program
105 dnl should be ansi C (ISO C90).
107 CFLAGS="$CFLAGS -std=c99 -pedantic -Wall"
108 AC_MSG_CHECKING([for ISO C99 warnings generation])
116 AC_MSG_RESULT([yes]),
121 dnl Define source to be BSD compliant (ISO C, POSIX, and 4.3BSD)
122 AC_DEFINE(_BSD_SOURCE,1,[Source is BSD compliant (ISO C, POSIX and 4.3BSD)])
123 if test "x`uname`" = xNetBSD; then
124 dnl NetBSD (at least version 1.6.1) is following the standard less closely than
125 dnl the other... Hence, we declare the source specifically as _POSIX_SOURCE
126 dnl instead of the newer _POSIX_C_SOURCE 199309
127 AC_DEFINE(_POSIX_SOURCE,1,[Source is POSIX 1 compliant (IEEE Std 1003.1)])
129 dnl For some unspecified reason, it as been reported than FreeBSD [5|6|7].x
130 dnl doesn't like those POSIX keywords either
131 UNAME_REDUX=`uname -r -s | sed 's/\..*//' 2> /dev/null`
132 if test "$UNAME_REDUX" != 'FreeBSD 5' && \
133 test "$UNAME_REDUX" != 'FreeBSD 6' && \
134 test "$UNAME_REDUX" != 'FreeBSD 7'
136 AC_DEFINE(_POSIX_C_SOURCE,199309,[Source is POSIX 4 compliant (IEEE Std 1003.1b)])
140 dnl Check for system header files
142 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)
145 dnl This will filter out optimisation switch (-O[s0-9])
148 debug, [ --enable-debug enable debugging symbols and supplementary
149 messages generation in final binary])
152 AC_MSG_CHECKING([for debugging symbols generation])
153 if test x$enableval = "xyes"; then
155 AC_DEFINE(DEBUG, 1, [Debug mode is on if defined.])
160 CFLAGS=`echo "$CFLAGS" | sed 's/^-g$//; s/^-g@<:@@<:@:space:@:>@@:>@\+// ; s/@<:@@<:@:space:@:>@@:>@\+-g$//; s/@<:@@<:@:space:@:>@@:>@\+-g@<:@@<:@:space:@:>@@:>@\+/ /'`
163 dnl SIGKILL timeout setting
165 AC_MSG_CHECKING([for sigkill timeout])
166 AC_ARG_ENABLE(sigkill-timeout,
167 [ --enable-sigkill-timeout=SEC
168 timeout (in seconds) before sending `kill'
169 signal to parent process in case of restart
170 if `term' has no effect [default=5]])
172 test $enableval -gt 0 2> /dev/null || {
174 AC_MSG_ERROR([Given sigkill timeout was not understood])
177 AC_DEFINE_UNQUOTED(SIGKILL_TIMEOUT,$enableval,
178 [Delay between SIGTERM ans SIGKILL to parent process in case of restart.])
180 dnl X polling frequency setting
183 AC_MSG_CHECKING([for polling frequency])
184 AC_ARG_ENABLE(x-polling-frequency,
185 [ --enable-x-polling-frequency=FREQ
186 frequency (in hertz) for polling the X server
187 for events. Lower values leads to less responsive,
188 but less CPU hungry desklets [default=50]])
190 test $enableval -gt 0 2> /dev/null || {
192 AC_MSG_ERROR([Positive, integer value is required as x-polling-frequency])
195 AC_CHECK_PROG(EXISTS,bc,yes,no)
196 if test $enableval -ne 50; then
197 if test x$EXISTS = "xyes"; then
198 period=`echo "1000000 / $enableval" | bc`
200 AC_MSG_WARN([Could not find the `bc' calculator to perform arithmetic
201 computation of X server polling period value. Default 50 Hz is assumed.])
205 AC_DEFINE_UNQUOTED(X_POLLING_PERIOD,$period,
206 [Polling period (in 10e-6 seconds) of stdin between two cycles of events loop.])
208 dnl Lock files directory setting
210 AC_MSG_CHECKING([for lock files directory setting])
211 AC_ARG_ENABLE(lockfiles-dir,
212 [ --enable-lockfiles-dir=DIR
213 directory to put lock files in [default=/tmp]])
215 test -d $enableval || {
217 AC_MSG_ERROR([Given lock files directory does not exist on your system])
220 AC_DEFINE_UNQUOTED(LOCKFILES_DIR,"$enableval",
221 [Directory to put lock files in.])
222 LOCKFILES_DIR=$enableval
223 AC_SUBST(LOCKFILES_DIR)
225 dnl Control modifier on context menu
227 AC_MSG_CHECKING([for control modifier on context menu])
228 AC_ARG_ENABLE(control-on-context-menu,
229 [ --enable-control-on-context-menu
230 force CTRL to be pressed to fire context menu
233 if test x$enableval != "xno" ; then
235 AC_DEFINE(CONTROL_ON_CONTEXT_MENU, 1,
236 [Force CTRL to be pressed to fire context menu])
241 dnl Legacy Window Manager detection code
243 AC_MSG_CHECKING([for legacy fake root window detection code])
244 AC_ARG_ENABLE(legacy-fake-root-window-detection,
245 [ --enable-legacy-fake-root-window-detection
246 Use the old code to detect fake root windows
249 if test x$enableval != "xno" ; then
251 AC_DEFINE(WM_DETECTION_OLD_STYLE, 1,
252 [Use former fake root window detection code])
257 dnl Collect various system informations strings,
258 dnl for embedding into final executable
260 WELCOME1="\"$PACKAGE $VERSION"
261 AC_CHECK_PROG(EXISTS,date,yes)
262 if test x$EXISTS = "xyes"; then
263 WELCOME1="$WELCOME1 ("`date | sed 's/@<:@@<:@:space:@:>@@:>@\+/ /g'`")"
265 WELCOME1="$WELCOME1 (unknown time)"
268 AC_CHECK_PROG(EXISTS,uname,yes)
269 if test x$EXISTS = "xyes"; then
270 if uname -rs &> /dev/null; then
271 WELCOME1="$WELCOME1, on "`uname -rs`"\""
273 WELCOME1="$WELCOME1, on an unknown OS\""
276 WELCOME1="$WELCOME1, on an unknown OS\""
278 AC_DEFINE_UNQUOTED(WELCOME_LINE_1, $WELCOME1, [Welcome message, first line.])
279 dnl Note: @<:@ and @:>@ are respective quadrigraphs for `[' and `]'
280 ${CC} --version &> /dev/null && \
281 WELCOME2="\"${CC} "`${CC} --version | sed -n '1 s/^@<:@^0-9@:>@*//p'`"\""
282 : ${WELCOME2:=\"${CC} unknown version\"}
283 AC_DEFINE_UNQUOTED(WELCOME_LINE_2, $WELCOME2, [Welcome message, second line.])
285 dnl Variables save: all changes to CFLAGS, LIBS and LDFLAGS beyond
286 dnl this point will be wiped
289 TMP_LDFLAGS="$LDFLAGS"
291 dnl Check for readline
292 AC_CHECK_LIB(ncurses, tputs, HaveLibTermcap=yes; LibTermcap=ncurses,
293 AC_CHECK_LIB(termcap, tputs, HaveLibTermcap=yes; LibTermcap=termcap,
294 AC_CHECK_LIB(curses, tputs, HaveLibTermcap=yes; LibTermcap=curses,
296 if test $HaveLibTermcap = "yes" ; then
297 LIBS="$LIBS -l$LibTermcap"
299 AC_MSG_ERROR([Could not find terminal management library for readline
300 (either ncurses, termcap or curses).])
302 AC_CHECK_LIB(readline,readline,
303 READLINE_LIBS="-l$LibTermcap -lreadline",
304 AC_MSG_ERROR([Could not find the readline library]),
308 dnl Check for libhistory support
311 [ --without-history remove history support in interactive use
314 if test x$withval = "xyes"; then
315 AC_CHECK_LIB(history,add_history,
316 READLINE_LIBS="$READLINE_LIBS -lhistory";
317 AC_DEFINE(HAVE_READLINE_HISTORY_H,1,
318 [Define to 1 if you have the <readline/history.h> header file.])
320 AC_CHECK_LIB(history,free_history_entry,
321 AC_DEFINE(HAVE_FREE_HISTORY_ENTRY,1,
322 [Define to 1 if you have the `free_history_entry' function.])),
325 if test $HaveLibHistory = "no"; then
326 AC_MSG_WARN([Could not find GNU history library in the system])
328 AC_MSG_CHECKING([for history max command lenght])
330 AC_ARG_ENABLE(history-max-command-lenght,
331 [ --enable-history-max-command-lenght=LEN
332 maximum string lenght (in characters) that a single
333 command can have and still be kept in history
334 (a lenght of zero meaning no limits) [default=256]])
337 if test $enableval -ge 0 ; then
339 AC_DEFINE_UNQUOTED(HISTORY_MAX_COMMAND_LENGHT,$enableval,
340 [maximum history string lenght.])
343 AC_MSG_ERROR([history max command lenght must be positive or null])
347 AC_SUBST(READLINE_LIBS)
349 dnl Check for 8 bit characters support forcing
351 AC_ARG_ENABLE(force-extended-characters-input,
352 [ --enable-force-extended-characters-input
353 force input and ouput of unescaped
354 height bits characters through GNU readline,
355 regardless of the inputrc settings [default=no]])
357 if ! test x$enableval = "xno" ; then
358 AC_DEFINE(FORCE_EXTENDED_CHARACTERS_INPUT,1,
359 [force 8 bit characters support in GNU readline])
362 dnl Check for fontconfig
364 AC_ARG_WITH(fontconfig,
365 [ --without-fontconfig remove fontconfig support enabling automatic
366 detection of all truetype fonts already available
369 if test x$withval = "xyes"; then
370 AC_PATH_PROG(PKG_CONFIG, pkg-config)
371 if ! test x$PKG_CONFIG = "x" ; then
372 if $PKG_CONFIG --exists fontconfig 2> /dev/null; then
373 FONTCONFIG_LIBS=`pkg-config --libs fontconfig`
374 FONTCONFIG_CFLAGS=`pkg-config --cflags fontconfig`
377 if test x$FONTCONFIG_LIBS = "x"; then
378 FONTCONFIG_LIBS=-lfontconfig
380 LIBS="$LIBS $FONTCONFIG_LIBS"
381 CFLAGS="$CFLAGS $FONTCONFIG_CFLAGS"
382 AC_MSG_CHECKING([for fontconfig])
384 #include <fontconfig/fontconfig.h>
387 AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.]),
392 -----------------------------------------------------
393 `fontconfig' was not found on your system.
394 Although `adesklets' will work anyway system-wide
395 automatic font detection will not occur:
396 it is therefore quite possible that only the
397 default font provided with the package will display.
398 -----------------------------------------------------]))
399 AC_SUBST(FONTCONFIG_LIBS)
400 AC_SUBST(FONTCONFIG_CFLAGS)
405 dnl Check for fork() system call
406 AC_CHECK_FUNCS(fork,,
407 AC_MSG_ERROR([Could not find the fork() system call]))
409 dnl Check for X headers and libraries
413 if test x$no_x != "xyes"; then
415 test x$x_includes = "x" && x_includes="/usr/include"
416 test x$x_libraries = "x" && x_libraries="/usr/lib"
418 X_LIBS="$X_LIBS $X_EXTRA_LIBS"
420 CFLAGS="$CFLAGS $X_CFLAGS"
421 LDFLAGS="$LDFLAGS $LIBS $X_PRE_LIBS"
422 dnl Check for required functions in -lX11
423 AC_CHECK_LIB(X11, XOpenDisplay,
424 X_LIBS="$X_LIBS -lX11"
426 AC_MSG_ERROR([Could not find XOpenDisplay in -lX11.])
428 AC_DEFINE(X_DISPLAY_SUPPORT,1,[Define to 1 if the X Window System is supported, 0 otherwise.])
430 AC_DEFINE(X_DISPLAY_SUPPORT,0,[Define to 1 if the X Window System is supported, 0 otherwise.])
442 [ --with-imlib2=DIR use imlib2 in <DIR>],
443 [CFLAGS="$CFLAGS -I$withval/include"
444 LIBS="-L$withval/lib $LIBS"])
446 AC_PATH_GENERIC_MODIFIED(imlib2, 1.1.2,
447 [ AC_SUBST(IMLIB2_LIBS)
448 AC_SUBST(IMLIB2_CFLAGS) ],
449 AC_MSG_ERROR([Cannot find imlib2: Is imlib2-config in the path?]),
452 -----------------------------------------------------
453 $PACKAGE should work with your version of imlib2...
454 But for better results you are _warmly_ encouraged
455 to try out version 1.2.0 or above;
456 known bugs are still lurking in dark corners
457 with what you have installed: beware strange problems
458 with dynamic image filters for instance!
459 -----------------------------------------------------]))
460 LIBS="$LIBS $IMLIB2_LIBS"
461 CFLAGS="$CFLAGS $IMLIB2_CFLAGS"
463 AC_MSG_CHECKING([for imlib2 program linking])
465 #ifndef X_DISPLAY_MISSING
466 #include <X11/Xlib.h>
467 #include <X11/Xutil.h>
469 #include <X11/Xatom.h>
473 image = imlib_load_image("toto.png");
474 #ifndef X_DISPLAY_MISSING
475 imlib_context_set_display(NULL);
478 AC_MSG_RESULT([yes]),
480 AC_MSG_ERROR([Cannot link Imlib2 program.
481 If you specified you did not want X support this can be caused
482 by your Imlib2 installment being configured so it needs it
483 or conversely. In that case reinstall Imlib2 with proper
484 --enable-x11-support parameter (as from enlightement CVS)
485 before retrying to configure this package.]))
487 dnl Test for uint typedef
488 AC_MSG_CHECKING([for uint typedef in standard library])
490 #ifdef HAVE_SYS_TYPES_H
491 #include <sys/types.h>
497 AC_MSG_RESULT([yes]),
499 AC_DEFINE(UINT_NOT_DEFINED,1,
500 [Define to 1 if compability type uint is not detected.])
503 dnl Important variables reset
506 LDFLAGS="$TMP_LDFLAGS"
508 dnl PKGDATADIR definition
509 dnl PKGDATADIR is only well constructed in make context,
510 dnl so let's put this AFTER all tests.
511 CFLAGS="$CFLAGS"' -DPKGDATADIR=\"$(pkgdatadir)\"'
514 AM_CONFIG_HEADER(src/config.h)
523 scripting/protoize.sh
524 scripting/python/Makefile
525 scripting/python/config.h
526 scripting/python/setup.py
527 utils/adesklets_frontend
530 dnl Change script(s) permissions
531 chmod +x scripting/protoize.sh doc/htmldoc.sh utils/adesklets_frontend
533 dnl Final warning, if needed
534 if test x$DEBUG = "xyes"; then
536 -----------------------------------------------------
537 you choosed to make a `debug' compilation: this will
538 generate a significantly bigger executable
539 that produces on stderr (by default) a lot of outputs
540 unwanted during normal use; set up the ADESKLETS_LOG
541 environment variable to a filename the interpreter
542 can safely suffix with a pid related extension
543 than truncate to collect all debug outputs
544 there instead. Be also aware that all optimisation
545 settings (-O flags in CFLAGS) are discarded when
547 -----------------------------------------------------])
549 if test x$no_x = "xyes"; then
551 -----------------------------------------------------
552 you choosed to perform an `X Window less' build -
553 which means you will eventually end up with
554 a strictly command line program free of all
555 dependencies on xlib. If it is not what you intended
556 please reconfigure. For this to work you do need first
557 to configure your Imlib2 incantation for not using
559 -----------------------------------------------------
563 if test x$PYTHON != "x" ; then
564 if test x$SIGPROC != "xyes" ; then
566 -----------------------------------------------------
567 your system does not seem to support reliable POSIX
568 signal calls such as `sigprocmask', `sigpending' or
569 `sigsuspend'. Although this does not affect $PACKAGE
570 directly, it seriously impedes python ability
571 to handle things well through its package.
572 To our knowledge, no modern UNIX platforms lack
573 those system calls...
574 -----------------------------------------------------