Revert the previous adesklets => adesklets.bin changes. Instead, the wrapper
[adesklets.git] / configure.ac
blobf5e8a78bd2a10b6a561b0a2753ab3490e954ca70
1 dnl Initialize autoconf and automake
2 AC_INIT
3 AC_CONFIG_SRCDIR(src/main.c)
4 AC_PREREQ(2.52)
5 AM_INIT_AUTOMAKE(adesklets,0.4.10)
7 dnl Language selection
8 AC_LANG(C)
10 dnl Locate required external software
11 AC_PROG_CPP
12 if test "x$CPP" != 'x'; then
14 AC_SUBST(CPP)
16 AC_PROG_CC
17 AM_PROG_LEX
18 if test "x$LEX" != 'xflex'; then
19 AC_MSG_WARN([
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 
25 modify `l' files.
26 ----------------------------------------------------])
28 AC_PROG_YACC
29 if test "x$YACC" != "xbison -y"; then
30 AC_MSG_WARN([
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 
37 `y' files.
38 -----------------------------------------------------])
40 AC_PROG_INSTALL
42 dnl Check for python support
43 withval=
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
48                           good reasons])
49 : ${withval:=yes}
50 if test x$withval = "xyes"; then
51 withval=
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]])
58 : ${withval:=no}
59 if test x$withval = "xno"; then
60 AM_PATH_PYTHON([2.3])
61 else
62 AM_PATH_PYTHON()
64 AC_PYTHON_DEVEL
65 withval=
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]])
71 : ${withval:=no}
72 if test x$withval = "xyes"; then
73 AM_CONDITIONAL(PYTHON_INSTALL_SUBMISSION_SCRIPTS, true)
74 else
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"])
80 else
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)
87 dnl help2man presence
88 AC_PATH_PROG(HELP2MAN, help2man)
89 AM_CONDITIONAL(HELP2MAN_SUPPORT, test "x$HELP2MAN" != "x")
91 dnl htmltidy presence
92 AC_PATH_PROG(TIDY,tidy)
94 dnl doxygen presence
95 AC_PATH_PROG(DOXYGEN,doxygen)
96 AM_CONDITIONAL(DOXYGEN_SUPPORT, test "x$DOXYGEN" != "x")
98 dnl makeinfo support
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).
106 TMP_CFLAGS="$CFLAGS"
107 CFLAGS="$CFLAGS -std=c99 -pedantic -Wall"
108 AC_MSG_CHECKING([for ISO C99 warnings generation])
109 AC_TRY_COMPILE(
111 int 
112 main(void) 
114    return 0L;
116 AC_MSG_RESULT([yes]),
117 AC_MSG_RESULT([no])
118 CFLAGS="$TMP_CFLAGS"
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)])
128 else
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'
135 then
136 AC_DEFINE(_POSIX_C_SOURCE,199309,[Source is POSIX 4 compliant (IEEE Std 1003.1b)])
140 dnl Check for system header files
141 AC_HEADER_STDC
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)
144 dnl Enable debugging
145 dnl This will filter out optimisation switch (-O[s0-9]) 
146 dnl for gcc compiler
147 AC_ARG_ENABLE(
148   debug, [  --enable-debug        enable debugging symbols and supplementary 
149                           messages generation in final binary])
151 : ${enableval="no"}
152 AC_MSG_CHECKING([for debugging symbols generation])
153 if test x$enableval = "xyes"; then
154    AC_MSG_RESULT([yes])
155    AC_DEFINE(DEBUG, 1, [Debug mode is on if defined.])
156    CFLAGS="$CFLAGS -g"
157    DEBUG=yes
158 else
159    AC_MSG_RESULT([no])
160    CFLAGS=`echo "$CFLAGS" | sed 's/^-g$//; s/^-g@<:@@<:@:space:@:>@@:>@\+// ; s/@<:@@<:@:space:@:>@@:>@\+-g$//; s/@<:@@<:@:space:@:>@@:>@\+-g@<:@@<:@:space:@:>@@:>@\+/ /'`
163 dnl SIGKILL timeout setting
164 enableval=
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]])
171 : ${enableval:=5}
172 test $enableval -gt 0 2> /dev/null || {
173 AC_MSG_RESULT([no])
174 AC_MSG_ERROR([Given sigkill timeout was not understood])
176 AC_MSG_RESULT([yes])
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
181 enableval=
182 period=
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]])
189 : ${enableval:=50}
190 test $enableval -gt 0 2> /dev/null || {
191 AC_MSG_RESULT([no])
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`
199 else
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.])
204 : ${period:=20000}
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
209 enableval=
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]])
214 : ${enableval:=/tmp}
215 test -d $enableval || {
216 AC_MSG_RESULT([no])
217 AC_MSG_ERROR([Given lock files directory does not exist on your system])
219 AC_MSG_RESULT([yes])
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
226 enableval=
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
231                           [default=no]])
232 : ${enableval:=no}
233 if test x$enableval != "xno" ; then
234 AC_MSG_RESULT([yes])
235 AC_DEFINE(CONTROL_ON_CONTEXT_MENU, 1,
236 [Force CTRL to be pressed to fire context menu])
237 else
238 AC_MSG_RESULT([no])
241 dnl Legacy Window Manager detection code
242 enableval=
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
247                           [default=no]])
248 : ${enableval:=no}
249 if test x$enableval != "xno" ; then
250 AC_MSG_RESULT([yes])
251 AC_DEFINE(WM_DETECTION_OLD_STYLE, 1,
252 [Use former fake root window detection code])
253 else
254 AC_MSG_RESULT([no])
257 dnl Collect various system informations strings,
258 dnl for embedding into final executable
259 EXISTS=
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'`")"
264 else
265    WELCOME1="$WELCOME1 (unknown time)"
267 EXISTS=
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`"\""
272    else
273       WELCOME1="$WELCOME1, on an unknown OS\""
274    fi
275 else
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
287 TMP_CFLAGS="$CFLAGS"
288 TMP_LIBS="$LIBS"
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,
295                    HaveLibTermcap=no)))
296 if test $HaveLibTermcap = "yes" ; then
297    LIBS="$LIBS -l$LibTermcap"
298 else
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]),
305   $LFLAGS)
306 LIBS="$TMP_LIBS"
308 dnl Check for libhistory support
309 withval=
310 AC_ARG_WITH(history,
311 [  --without-history       remove history support in interactive use
312                           of the interpreter])
313 : ${withval:=yes}
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.])
319         HaveLibHistory=yes
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.])),
323         HaveLibHistory=no,
324         $LFLAGS)
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])
329 enableval=
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]])
335 : ${enableval:=256}
337 if test $enableval -ge 0 ; then
338 AC_MSG_RESULT([yes])
339 AC_DEFINE_UNQUOTED(HISTORY_MAX_COMMAND_LENGHT,$enableval,
340 [maximum history string lenght.])
341 else
342 AC_MSG_RESULT([no])
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
350 enableval=
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]])
356 : ${enableval:=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
363 withval=
364 AC_ARG_WITH(fontconfig,
365 [  --without-fontconfig    remove fontconfig support enabling automatic 
366                           detection of all truetype fonts already available
367                           on the machine])
368 : ${withval:=yes}
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`
375    fi
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])
383 AC_TRY_LINK(
384 #include <fontconfig/fontconfig.h>
385 , FcInit(),
386 AC_MSG_RESULT([yes])
387 AC_DEFINE(HAVE_FONTCONFIG_FONTCONFIG_H,1,[Define to 1 if you have the <fontconfig/fontconfig.h> header file.]),
388 AC_MSG_RESULT([no])
389 FONTCONFIG_LIBS=
390 FONTCONFIG_CFLAGS=
391 AC_MSG_WARN([
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)
401 LIBS="$TMP_LIBS"
402 CFLAGS="$TMP_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
410 AC_PATH_X
411 AC_PATH_XTRA
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"
419 LIBS="$LIBS $X_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"
425   LIBS="$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.])
429 else
430 AC_DEFINE(X_DISPLAY_SUPPORT,0,[Define to 1 if the X Window System is supported, 0 otherwise.])
431    X_CFLAGS=
432    X_LIBS=
433    X_PRE_LIBS=
435 AC_SUBST(X_CFLAGS)
436 AC_SUBST(X_LIBS)
437 AC_SUBST(X_PRE_LIBS)
439 dnl Imlib2 detection
440 withval=
441 AC_ARG_WITH(imlib2,
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?]),
450   1.2.0,,
451   AC_MSG_WARN([
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])
464 AC_TRY_LINK(
465 #ifndef X_DISPLAY_MISSING
466         #include <X11/Xlib.h>
467         #include <X11/Xutil.h>
468         #include <X11/Xos.h>
469         #include <X11/Xatom.h>
470 #endif  
471         #include <Imlib2.h>
472 ,       Imlib_Image image;
473         image = imlib_load_image("toto.png");
474 #ifndef X_DISPLAY_MISSING
475         imlib_context_set_display(NULL);
476 #endif
478         AC_MSG_RESULT([yes]),
479         AC_MSG_RESULT([no])
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])
489 AC_TRY_COMPILE(
490 #ifdef HAVE_SYS_TYPES_H
491         #include <sys/types.h>
492 #endif
493 #ifdef HAVE_UNISTD_H
494         #include <unistd.h>
495 #endif
496 ,       uint i,
497         AC_MSG_RESULT([yes]),
498         AC_MSG_RESULT([no])
499         AC_DEFINE(UINT_NOT_DEFINED,1,
500                   [Define to 1 if compability type uint is not detected.])      
503 dnl Important variables reset
504 CFLAGS="$TMP_CFLAGS"
505 LIBS="$TMP_LIBS"
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)\"'
513 dnl Output files
514 AM_CONFIG_HEADER(src/config.h)
515 AC_OUTPUT(Makefile
516 src/Makefile
517 data/Makefile
518 utils/Makefile
519 doc/Makefile
520 doc/htmldoc.sh
521 doc/imlib2/Makefile
522 scripting/Makefile
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
535 AC_MSG_WARN([
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 
546 enabling this.
547 -----------------------------------------------------])
549 if test x$no_x = "xyes"; then
550 AC_MSG_WARN([
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
558 X Window itself.
559 -----------------------------------------------------
563 if test x$PYTHON != "x" ; then
564 if test x$SIGPROC != "xyes" ; then
565 AC_MSG_WARN([
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 -----------------------------------------------------