]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/libxo/configure.ac
bsddialog: import version 1.0
[FreeBSD/FreeBSD.git] / contrib / libxo / configure.ac
1 #
2 # $Id$
3 #
4 # See ./INSTALL for more info
5 #
6
7 #
8 # Release numbering: even numbered dot releases are official ones, and
9 # odd numbers are development ones.  The svn version of this file will
10 # only (ONLY!) ever (EVER!) contain odd numbers, so I'll always know if
11 # a particular user has the dist or svn release.
12 #
13
14 AC_PREREQ([2.69])
15 AC_INIT([libxo],[1.6.0],[phil@juniper.net])
16 AM_INIT_AUTOMAKE([-Wall -Werror foreign -Wno-portability])
17
18 # Support silent build rules.  Requires at least automake-1.11.
19 # Disable with "configure --disable-silent-rules" or "make V=1"
20 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
21
22 AC_PROG_CC
23 AC_PROG_INSTALL
24 AC_CONFIG_MACRO_DIR([m4])
25 AC_PROG_LN_S
26
27 # Must be after AC_PROG_AR
28 LT_INIT([dlopen shared])
29
30 AC_PATH_PROG(BASENAME, basename, /usr/bin/basename)
31 AC_PATH_PROG(BISON, bison, /usr/bin/bison)
32 AC_PATH_PROG(CAT, cat, /bin/cat)
33 AC_PATH_PROG(CHMOD, chmod, /bin/chmod)
34 AC_PATH_PROG(CP, cp, /bin/cp)
35 AC_PATH_PROG(DIFF, diff, /usr/bin/diff)
36 AC_PATH_PROG(MKDIR, mkdir, /bin/mkdir)
37 AC_PATH_PROG(MV, mv, /bin/mv)
38 AC_PATH_PROG(RM, rm, /bin/rm)
39 AC_PATH_PROG(SED, sed, /bin/sed)
40
41 # Checks for typedefs, structures, and compiler characteristics.
42 AC_C_INLINE
43 AC_TYPE_SIZE_T
44
45 # Checks for library functions.
46 AC_FUNC_ALLOCA
47 AC_FUNC_MALLOC
48 AC_FUNC_REALLOC
49 AC_CHECK_FUNCS([bzero memmove strchr strcspn strerror strspn])
50 AC_CHECK_FUNCS([sranddev srand strlcpy])
51 AC_CHECK_FUNCS([fdopen getrusage])
52 AC_CHECK_FUNCS([gettimeofday ctime])
53 AC_CHECK_FUNCS([getpass])
54 AC_CHECK_FUNCS([getprogname])
55 AC_CHECK_FUNCS([sysctlbyname])
56 AC_CHECK_FUNCS([flock])
57 AC_CHECK_FUNCS([asprintf])
58 AC_CHECK_FUNCS([__flbf])
59 AC_CHECK_FUNCS([sysctlbyname])
60
61
62 AC_CHECK_HEADERS([dlfcn.h])
63 AC_CHECK_HEADERS([dlfcn.h])
64 AC_CHECK_HEADERS([stdio_ext.h])
65 AC_CHECK_HEADERS([tzfile.h])
66 AC_CHECK_HEADERS([stdtime/tzfile.h])
67 AC_CHECK_FUNCS([dlfunc])
68
69 AC_CHECK_HEADERS([sys/time.h])
70 AC_CHECK_HEADERS([ctype.h errno.h stdio.h stdlib.h])
71 AC_CHECK_HEADERS([string.h sys/param.h unistd.h ])
72 AC_CHECK_HEADERS([sys/sysctl.h])
73 AC_CHECK_HEADERS([threads.h])
74 AC_CHECK_HEADERS([monitor.h])
75
76 dnl humanize_number(3) is a great function, but it's not standard.
77 dnl Note Macosx has the function in libutil.a but doesn't ship the
78 dnl header file, so I'll need to carry my own implementation.  See:
79 dnl    https://devforums.apple.com/thread/271121
80 AC_CHECK_HEADERS([libutil.h])
81 AC_CHECK_LIB([util], [humanize_number],
82      [HAVE_HUMANIZE_NUMBER=$ac_cv_header_libutil_h],
83      [HAVE_HUMANIZE_NUMBER=no])
84
85 AC_MSG_RESULT(humanize_number results: :${HAVE_HUMANIZE_NUMBER}:${ac_cv_header_libutil_h}:)
86
87 if test "$HAVE_HUMANIZE_NUMBER" = "yes"; then
88     AC_DEFINE([HAVE_HUMANIZE_NUMBER], [1], [humanize_number(3)])
89 fi
90
91 AM_CONDITIONAL([HAVE_HUMANIZE_NUMBER], [test "$HAVE_HUMANIZE_NUMBER" = "yes"])
92
93 AC_ARG_ENABLE([gettext],
94     [  --disable-gettext  Turn off support for gettext],
95     [GETTEXT_ENABLE=$enableval],
96     [GETTEXT_ENABLE=yes])
97
98 dnl Looking for gettext(), assumably in libintl
99 AC_ARG_WITH(gettext,
100         [  --with-gettext=[PFX]           Specify location of gettext installation],
101         [GETTEXT_PREFIX=$withval],
102         [GETTEXT_PREFIX=/usr],
103 )
104
105 HAVE_GETTEXT=no
106
107 if test "$GETTEXT_ENABLE" != "no"; then
108
109   AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
110
111   _save_cflags="$CFLAGS"
112   CFLAGS="$CFLAGS -I${GETTEXT_PREFIX}/include -L${GETTEXT_PREFIX}/lib -Werror -lintl"
113   AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <libintl.h>]
114              [int main() {char *cp = dgettext(NULL, "xx"); return 0; }]])],
115              [HAVE_GETTEXT=yes],
116              [HAVE_GETTEXT=no])
117   CFLAGS="$_save_cflags"
118
119   AC_MSG_RESULT([$HAVE_GETTEXT])
120
121   if test "$HAVE_GETTEXT" != "yes"; then
122       GETTEXT_PREFIX=/opt/local
123       AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
124
125       _save_cflags="$CFLAGS"
126       CFLAGS="$CFLAGS -I${GETTEXT_PREFIX}/include -L${GETTEXT_PREFIX}/lib -Werror -lintl"
127       AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <libintl.h>]
128                  [int main() {char *cp = dgettext(NULL, "xx"); return 0; }]])],
129                  [HAVE_GETTEXT=yes],
130                  [HAVE_GETTEXT=no])
131       CFLAGS="$_save_cflags"
132
133       AC_MSG_RESULT([$HAVE_GETTEXT])
134   fi
135
136   if test "$HAVE_GETTEXT" != "yes"; then
137       GETTEXT_PREFIX=/usr/local
138       AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
139
140       _save_cflags="$CFLAGS"
141       CFLAGS="$CFLAGS -I${GETTEXT_PREFIX}/include -L${GETTEXT_PREFIX}/lib -Werror -lintl"
142       AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <libintl.h>]
143                  [int main() {char *cp = dgettext(NULL, "xx"); return 0; }]])],
144                  [HAVE_GETTEXT=yes],
145                  [HAVE_GETTEXT=no])
146       CFLAGS="$_save_cflags"
147
148       AC_MSG_RESULT([$HAVE_GETTEXT])
149   fi
150 fi
151
152 if test "$HAVE_GETTEXT" = "yes"; then
153     AC_DEFINE([HAVE_GETTEXT], [1], [gettext(3)])
154     GETTEXT_CFLAGS="-I${GETTEXT_PREFIX}/include"
155     GETTEXT_LIBS="-L${GETTEXT_PREFIX}/lib -lintl"
156 else
157     GETTEXT_PREFIX=none
158     GETTEXT_CFLAGS=
159     GETTEXT_LIBS=
160 fi
161 AC_SUBST(GETTEXT_CFLAGS)
162 AC_SUBST(GETTEXT_LIBS)
163
164 GETTEXT_LIBDIR=${GETTEXT_PREFIX}/lib
165 AC_SUBST(GETTEXT_LIBDIR)
166 if test -x ${GETTEXT_PREFIX}/bin/msgfmt ; then
167     GETTEXT_BINDIR=${GETTEXT_PREFIX}/bin
168 elif test -x ${GETTEXT_PREFIX}/local/bin/msgfmt ; then
169     GETTEXT_BINDIR=${GETTEXT_PREFIX}/local/bin
170 else
171     AC_MSG_NOTICE("could not find msgfmt tool")
172     # Use a (bad) fall back value
173     GETTEXT_BINDIR=${GETTEXT_PREFIX}/bin
174 fi
175 AC_SUBST(GETTEXT_BINDIR)
176
177 AM_CONDITIONAL([HAVE_GETTEXT], [test "$HAVE_GETTEXT" = "yes"])
178
179 dnl Looking for how to do thread-local variables
180 AC_ARG_WITH(threads,
181         [  --with-threads=[STYLE]           Specify style of thread-local support (none)],
182         [THREAD_LOCAL=$withval],
183         [THREAD_LOCAL=unknown],
184 )
185
186 AC_MSG_CHECKING([thread-locals are ${THREAD_LOCAL}])
187
188 if test "$THREAD_LOCAL" = "unknown"; then
189      AC_LINK_IFELSE([AC_LANG_SOURCE([[]
190            [__thread int foo; int main() { foo++; return foo; }]])],
191            [THREAD_LOCAL=before],
192            [THREAD_LOCAL=unknown])
193
194     AC_MSG_RESULT([$THREAD_LOCAL])
195 fi
196
197 if test "$THREAD_LOCAL" = "unknown"; then
198     AC_LINK_IFELSE([AC_LANG_SOURCE([[]
199            [int __thread foo; int main() { foo++; return foo; }]])],
200            [THREAD_LOCAL=after],
201            [THREAD_LOCAL=unknown])
202     AC_MSG_RESULT([$THREAD_LOCAL])
203 fi
204
205 if test "$THREAD_LOCAL" = "unknown"; then
206     AC_LINK_IFELSE([AC_LANG_SOURCE([[]
207            [__declspec(int) foo; int main() { foo++; return foo; }]])],
208            [THREAD_LOCAL=declspec],
209            [THREAD_LOCAL=unknown])
210     AC_MSG_RESULT([$THREAD_LOCAL])
211 fi
212
213 if test "$THREAD_LOCAL" != "unknown"; then
214     AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL], 
215               THREAD_LOCAL_${THREAD_LOCAL}, [thread-local setting])
216 fi
217
218 dnl Looking for libcrypto....
219 AC_CHECK_LIB([crypto], [MD5_Init])
220 AM_CONDITIONAL([HAVE_LIBCRYPTO], [test "$HAVE_LIBCRYPTO" != "no"])
221
222 AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
223     [HAVE_SUN_LEN=yes ;
224         AC_DEFINE([HAVE_SUN_LEN], [1], [Have struct sockaddr_un.sun_len])],
225     [HAS_SUN_LEN=no], [[#include <sys/un.h>]])
226
227 AC_CHECK_DECLS([__isthreaded], [], [], [#include <stdio.h>])
228 HAVE_ISTHREADED=${ac_cv_have_decl___isthreaded}
229
230 dnl
231 dnl Some packages need to be checked against version numbers so we
232 dnl define a function here for later use
233 dnl
234 AC_DEFUN([VERSION_TO_NUMBER],
235 [`$1 | sed -e 's/lib.* //' | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'`])
236
237 LIBSLAX_CONFIG_PREFIX=""
238 LIBSLAX_SRC=""
239
240 AC_ARG_WITH(libslax-prefix,
241         [  --with-libslax-prefix=[PFX]           Specify location of libslax config],
242         LIBSLAX_CONFIG_PREFIX=$withval
243 )
244
245 AC_MSG_CHECKING(for libslax) 
246 if test "x$LIBSLAX_CONFIG_PREFIX" != "x"
247 then
248         SLAX_CONFIG=${LIBSLAX_CONFIG_PREFIX}/bin/slax-config
249 else
250         SLAX_CONFIG=slax-config
251 fi
252
253 dnl
254 dnl make sure slax-config is executable,
255 dnl test version and init our variables
256 dnl
257
258 if ${SLAX_CONFIG} --libs > /dev/null 2>&1
259 then
260         LIBSLAX_VERSION=`$SLAX_CONFIG --version`
261         SLAX_BINDIR="`$SLAX_CONFIG --bindir | head -1`"
262         SLAX_OXTRADOCDIR="`$SLAX_CONFIG --oxtradoc | head -1`"
263         AC_MSG_RESULT($LIBSLAX_VERSION found)
264         HAVE_OXTRADOC=yes
265 else
266         LIBSLAX_VERSION=
267         SLAX_BINDIR=
268         SLAX_OXTRADOCDIR=
269         AC_MSG_RESULT([no])
270         HAVE_OXTRADOC=no
271 fi
272 AM_CONDITIONAL([HAVE_OXTRADOC], [test "$HAVE_OXTRADOC" != "no"])
273
274 AC_SUBST(SLAX_BINDIR)
275 AC_SUBST(SLAX_OXTRADOCDIR)
276
277 AC_MSG_CHECKING([whether to build with warnings])
278 AC_ARG_ENABLE([warnings],
279     [  --enable-warnings    Turn on compiler warnings],
280     [LIBXO_WARNINGS=$enableval],
281     [LIBXO_WARNINGS=no])
282 AC_MSG_RESULT([$LIBXO_WARNINGS])
283 AM_CONDITIONAL([LIBXO_WARNINGS_HIGH], [test "$LIBXO_WARNINGS" != "no"])
284
285 AC_MSG_CHECKING([whether to build with debugging])
286 AC_ARG_ENABLE([debug],
287     [  --enable-debug    Turn on debugging],
288     [LIBXO_DEBUG=yes; AC_DEFINE([LIBXO_DEBUG], [1], [Enable debugging])],
289     [LIBXO_DEBUG=no])
290 AC_MSG_RESULT([$LIBXO_DEBUG])
291 AM_CONDITIONAL([LIBXO_DEBUG], [test "$LIBXO_DEBUG" != "no"])
292
293 AC_MSG_CHECKING([whether to use int return codes])
294 AC_ARG_ENABLE([int-return-codes],
295     [  --enable-int-return-codes    Use int return codes (instead of ssize_t)],
296     [USE_INT_RETURN_CODES=yes; AC_DEFINE([USE_INT_RETURN_CODES], [1], [Use int return codes])],
297     [USE_INT_RETURN_CODES=no])
298 AC_MSG_RESULT([$USE_INT_RETURN_CODES])
299
300 AC_MSG_CHECKING([whether to build with text-only rendering])
301 AC_ARG_ENABLE([text-only],
302     [  --enable-text-only    Turn on text-only rendering],
303     [LIBXO_TEXT_ONLY=yes; AC_DEFINE([LIBXO_TEXT_ONLY], [1], [Enable text-only rendering])],
304     [LIBXO_TEXT_ONLY=no])
305 AC_MSG_RESULT([$LIBXO_TEXT_ONLY])
306 AM_CONDITIONAL([LIBXO_TEXT_ONLY], [test "$LIBXO_TEXT_ONLY" != "no"])
307
308 AC_MSG_CHECKING([whether to build with local wcwidth implementation])
309 AC_ARG_ENABLE([wcwidth],
310     [  --disable-wcwidth        Disable local wcwidth implementation],
311     [LIBXO_WCWIDTH=$enableval],
312     [LIBXO_WCWIDTH=yes])
313 AC_MSG_RESULT([$LIBXO_WCWIDTH])
314 if test "${LIBXO_WCWIDTH}" != "no"; then
315   AC_DEFINE([LIBXO_WCWIDTH], [1], [Enable local wcwidth implementation])
316 fi
317
318 AC_MSG_CHECKING([retain hash bucket size])
319 AC_ARG_WITH(retain-size,
320         [  --with-retain-size=[DIR]           Specify retain hash bucket size (in bits)],
321         [XO_RETAIN_SIZE=$withval],
322         [XO_RETAIN_SIZE=default]
323 )
324
325 AC_MSG_RESULT([$XO_RETAIN_SIZE])
326 if test "${XO_RETAIN_SIZE}" != "default"; then
327   AC_DEFINE_UNQUOTED([XO_RETAIN_SIZE], ${XO_RETAIN_SIZE}, [Retain hash bucket size])
328 fi
329
330 AC_CHECK_LIB([m], [lrint])
331 AM_CONDITIONAL([HAVE_LIBM], [test "$HAVE_LIBM" != "no"])
332
333 AC_MSG_CHECKING([compiler for gcc])
334 HAVE_GCC=no
335 if test "${CC}" != ""; then
336     HAVE_GCC=`${CC} --version 2>&1 | grep -i GCC`
337     if test "${HAVE_GCC}" != ""; then
338         HAVE_GCC=yes
339         AC_DEFINE([HAVE_GCC], [1], [Using real gcc])
340     else
341         HAVE_GCC=no
342     fi
343 fi
344 AC_MSG_RESULT([$HAVE_GCC])
345 AM_CONDITIONAL([HAVE_GCC], [test "$HAVE_GCC" = "yes"])
346
347 AC_MSG_CHECKING([whether to build with printflike])
348 AC_ARG_ENABLE([printflike],
349     [  --enable-printflike    Enable use of GCC __printflike attribute],
350     [HAVE_PRINTFLIKE=yes;
351            AC_DEFINE([HAVE_PRINTFLIKE], [1], [Support printflike])],
352     [HAVE_PRINTFLIKE=no])
353 AC_MSG_RESULT([$HAVE_PRINTFLIKE])
354 AM_CONDITIONAL([HAVE_PRINTFLIKE], [test "$HAVE_PRINTFLIKE" != ""])
355
356 AC_MSG_CHECKING([whether to build with LIBXO_OPTIONS])
357 AC_ARG_ENABLE([libxo-options],
358     [  --disable-libxo-options  Turn off support for LIBXO_OPTIONS],
359     [LIBXO_OPTS=$enableval],
360     [LIBXO_OPTS=yes])
361 AC_MSG_RESULT([$LIBXO_OPTS])
362 AM_CONDITIONAL([NO_LIBXO_OPTIONS], [test "$LIBXO_OPTS" != "yes"])
363
364 case $host_os in
365      darwin*)
366         LIBTOOL=glibtool
367         XO_LIBEXT=dylib
368         ;;
369      Linux*|linux*)
370         CFLAGS="-D_GNU_SOURCE $CFLAGS"
371         LDFLAGS=-ldl
372         XO_LIBEXT=so
373         ;;
374      cygwin*|CYGWIN*)
375         LDFLAGS=-no-undefined
376         XO_LIBEXT=ddl
377         ;;
378 esac
379
380 case $prefix in
381      NONE)
382         prefix=/usr/local
383         ;;
384 esac
385
386 XO_LIBS=-lxo
387 XO_SRCDIR=${srcdir}
388 XO_LIBDIR=${libdir}
389 XO_BINDIR=${bindir}
390 XO_INCLUDEDIR=${includedir}
391 XO_CFLAGS="${CFLAGS}"
392
393 AC_SUBST(XO_LIBS)
394 AC_SUBST(XO_SRCDIR)
395 AC_SUBST(XO_LIBDIR)
396 AC_SUBST(XO_BINDIR)
397 AC_SUBST(XO_INCLUDEDIR)
398 AC_SUBST(XO_LIBEXT)
399 AC_SUBST(XO_CFLAGS)
400
401 AC_ARG_WITH(encoder-dir,
402         [  --with-encoder-dir=[DIR]           Specify location of encoder libraries],
403         [XO_ENCODERDIR=$withval],
404         [XO_ENCODERDIR=$libdir/libxo/encoder]
405 )
406 AC_SUBST(XO_ENCODERDIR)
407
408 AC_ARG_WITH(share-dir,
409         [  --with-share-dir=[DIR]           Specify location of shared files],
410         [XO_SHAREDIR=$withval],
411         [XO_SHAREDIR=$datarootdir/libxo]
412 )
413 XO_SHAREDIR=`echo $XO_SHAREDIR | sed "s;\\${prefix};$prefix;"`
414 AC_SUBST(XO_SHAREDIR)
415
416 dnl for the spec file
417 RELDATE=`date +'%Y-%m-%d%n'`
418 AC_SUBST(RELDATE)
419
420 AC_MSG_RESULT(Using configure dir $ac_abs_confdir)
421
422 if test -d $ac_abs_confdir/.git ; then
423   extra=`git branch | awk '/\*/ { print $2 }'`
424   if test "$extra" != "" -a "$extra" != "master"
425   then
426       LIBXO_VERSION_EXTRA="-git-$extra"
427   fi
428 fi
429
430 LIBXO_VERSION=$PACKAGE_VERSION
431 LIBXO_VERSION_NUMBER=VERSION_TO_NUMBER(echo $PACKAGE_VERSION)
432 AC_SUBST(LIBXO_VERSION)
433 AC_SUBST(LIBXO_VERSION_NUMBER)
434 AC_SUBST(LIBXO_VERSION_EXTRA)
435
436 AC_DEFINE_UNQUOTED(LIBXO_VERSION, ["$LIBXO_VERSION"],
437     [Version number as dotted value])
438 AC_DEFINE_UNQUOTED(LIBXO_VERSION_NUMBER, [$LIBXO_VERSION_NUMBER],
439     [Version number as a number])
440 AC_DEFINE_UNQUOTED(LIBXO_VERSION_STRING, ["$LIBXO_VERSION_NUMBER"],
441     [Version number as string])
442 AC_DEFINE_UNQUOTED(LIBXO_VERSION_EXTRA, ["$LIBXO_VERSION_EXTRA"],
443     [Version number extra information])
444
445 AC_CONFIG_HEADERS([libxo/xo_config.h])
446 AC_CONFIG_FILES([
447   Makefile
448   libxo-config
449   xohtml/xohtml.sh
450   libxo/Makefile
451   libxo/add.man
452   bin/Makefile
453   encoder/Makefile
454   encoder/cbor/Makefile
455   encoder/csv/Makefile
456   encoder/test/Makefile
457   xo/Makefile
458   xolint/Makefile
459   xohtml/Makefile
460   xopo/Makefile
461   packaging/libxo.pc
462   doc/Makefile
463   doc/top-link.html
464   tests/Makefile
465   tests/core/Makefile
466   tests/gettext/Makefile
467   tests/xo/Makefile
468   packaging/libxo.spec
469   packaging/libxo.rb.base
470 ])
471 AC_OUTPUT
472
473 AC_MSG_NOTICE([summary of build options:
474
475   libxo version:    ${VERSION} ${LIBXO_VERSION_EXTRA}
476   host type:        ${host} / ${host_os}
477   install prefix:   ${prefix}
478   srcdir:           ${XO_SRCDIR}
479   libdir:           ${XO_LIBDIR}
480   bindir:           ${XO_BINDIR}
481   includedir:       ${XO_INCLUDEDIR}
482   share dir:        ${XO_SHAREDIR}
483   extensions dir:   ${XO_ENCODERDIR}
484   oxtradoc dir:     ${SLAX_OXTRADOCDIR}
485
486   compiler:         ${CC} (${HAVE_GCC:-no})
487   compiler flags:   ${CFLAGS}
488   library types:    Shared=${enable_shared}, Static=${enable_static}
489
490   warnings:         ${LIBXO_WARNINGS:-no}
491   debug:            ${LIBXO_DEBUG:-no}
492   printf-like:      ${HAVE_PRINTFLIKE:-no}
493   libxo-options:    ${LIBXO_OPTS:-no}
494   text-only:        ${LIBXO_TEXT_ONLY:-no}
495   gettext:          ${HAVE_GETTEXT:-no} (${GETTEXT_PREFIX})
496   isthreaded:       ${HAVE_ISTHREADED:-no}
497   thread-local:     ${THREAD_LOCAL:-no}
498   local wcwidth:    ${LIBXO_WCWIDTH:-no}
499   retain size:      ${XO_RETAIN_SIZE:-no}
500 ])