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