4 # See ./INSTALL for more info
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.
15 AC_INIT([libxo], [1.4.0], [phil@juniper.net])
16 AM_INIT_AUTOMAKE([-Wall -Werror foreign -Wno-portability])
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])])
24 AC_CONFIG_MACRO_DIR([m4])
27 # Must be after AC_PROG_AR
28 LT_INIT([dlopen shared])
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)
43 # Checks for typedefs, structures, and compiler characteristics.
47 # Checks for library functions.
51 AC_CHECK_FUNCS([bzero memmove strchr strcspn strerror strspn])
52 AC_CHECK_FUNCS([sranddev srand strlcpy])
53 AC_CHECK_FUNCS([fdopen getrusage])
54 AC_CHECK_FUNCS([gettimeofday ctime])
55 AC_CHECK_FUNCS([getpass])
56 AC_CHECK_FUNCS([getprogname])
57 AC_CHECK_FUNCS([sysctlbyname])
58 AC_CHECK_FUNCS([flock])
59 AC_CHECK_FUNCS([asprintf])
60 AC_CHECK_FUNCS([__flbf])
61 AC_CHECK_FUNCS([sysctlbyname])
64 AC_CHECK_HEADERS([dlfcn.h])
65 AC_CHECK_HEADERS([dlfcn.h])
66 AC_CHECK_HEADERS([stdio_ext.h])
67 AC_CHECK_HEADERS([tzfile.h])
68 AC_CHECK_HEADERS([stdtime/tzfile.h])
69 AC_CHECK_FUNCS([dlfunc])
71 AC_CHECK_HEADERS([sys/time.h])
72 AC_CHECK_HEADERS([ctype.h errno.h stdio.h stdlib.h])
73 AC_CHECK_HEADERS([string.h sys/param.h unistd.h ])
74 AC_CHECK_HEADERS([sys/sysctl.h])
75 AC_CHECK_HEADERS([threads.h])
76 AC_CHECK_HEADERS([monitor.h])
78 dnl humanize_number(3) is a great function, but it's not standard.
79 dnl Note Macosx has the function in libutil.a but doesn't ship the
80 dnl header file, so I'll need to carry my own implementation. See:
81 dnl https://devforums.apple.com/thread/271121
82 AC_CHECK_HEADERS([libutil.h])
83 AC_CHECK_LIB([util], [humanize_number],
84 [HAVE_HUMANIZE_NUMBER=$ac_cv_header_libutil_h],
85 [HAVE_HUMANIZE_NUMBER=no])
87 AC_MSG_RESULT(humanize_number results: :${HAVE_HUMANIZE_NUMBER}:${ac_cv_header_libutil_h}:)
89 if test "$HAVE_HUMANIZE_NUMBER" = "yes"; then
90 AC_DEFINE([HAVE_HUMANIZE_NUMBER], [1], [humanize_number(3)])
93 AM_CONDITIONAL([HAVE_HUMANIZE_NUMBER], [test "$HAVE_HUMANIZE_NUMBER" = "yes"])
95 AC_ARG_ENABLE([gettext],
96 [ --disable-gettext Turn off support for gettext],
97 [GETTEXT_ENABLE=$enableval],
100 dnl Looking for gettext(), assumably in libintl
102 [ --with-gettext=[PFX] Specify location of gettext installation],
103 [GETTEXT_PREFIX=$withval],
104 [GETTEXT_PREFIX=/usr],
109 if test "$GETTEXT_ENABLE" != "no"; then
111 AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
113 _save_cflags="$CFLAGS"
114 CFLAGS="$CFLAGS -I${GETTEXT_PREFIX}/include -L${GETTEXT_PREFIX}/lib -Werror -lintl"
115 AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <libintl.h>]
116 [int main() {char *cp = dgettext(NULL, "xx"); return 0; }]])],
119 CFLAGS="$_save_cflags"
121 AC_MSG_RESULT([$HAVE_GETTEXT])
123 if test "$HAVE_GETTEXT" != "yes"; then
124 GETTEXT_PREFIX=/opt/local
125 AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
127 _save_cflags="$CFLAGS"
128 CFLAGS="$CFLAGS -I${GETTEXT_PREFIX}/include -L${GETTEXT_PREFIX}/lib -Werror -lintl"
129 AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <libintl.h>]
130 [int main() {char *cp = dgettext(NULL, "xx"); return 0; }]])],
133 CFLAGS="$_save_cflags"
135 AC_MSG_RESULT([$HAVE_GETTEXT])
138 if test "$HAVE_GETTEXT" != "yes"; then
139 GETTEXT_PREFIX=/usr/local
140 AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
142 _save_cflags="$CFLAGS"
143 CFLAGS="$CFLAGS -I${GETTEXT_PREFIX}/include -L${GETTEXT_PREFIX}/lib -Werror -lintl"
144 AC_LINK_IFELSE([AC_LANG_SOURCE([[#include <libintl.h>]
145 [int main() {char *cp = dgettext(NULL, "xx"); return 0; }]])],
148 CFLAGS="$_save_cflags"
150 AC_MSG_RESULT([$HAVE_GETTEXT])
154 if test "$HAVE_GETTEXT" = "yes"; then
155 AC_DEFINE([HAVE_GETTEXT], [1], [gettext(3)])
156 GETTEXT_CFLAGS="-I${GETTEXT_PREFIX}/include"
157 GETTEXT_LIBS="-L${GETTEXT_PREFIX}/lib -lintl"
163 AC_SUBST(GETTEXT_CFLAGS)
164 AC_SUBST(GETTEXT_LIBS)
166 GETTEXT_LIBDIR=${GETTEXT_PREFIX}/lib
167 AC_SUBST(GETTEXT_LIBDIR)
168 if test -x ${GETTEXT_PREFIX}/bin/msgfmt ; then
169 GETTEXT_BINDIR=${GETTEXT_PREFIX}/bin
170 elif test -x ${GETTEXT_PREFIX}/local/bin/msgfmt ; then
171 GETTEXT_BINDIR=${GETTEXT_PREFIX}/local/bin
173 AC_MSG_NOTICE("could not find msgfmt tool")
174 # Use a (bad) fall back value
175 GETTEXT_BINDIR=${GETTEXT_PREFIX}/bin
177 AC_SUBST(GETTEXT_BINDIR)
179 AM_CONDITIONAL([HAVE_GETTEXT], [test "$HAVE_GETTEXT" = "yes"])
181 dnl Looking for how to do thread-local variables
183 [ --with-threads=[STYLE] Specify style of thread-local support (none)],
184 [THREAD_LOCAL=$withval],
185 [THREAD_LOCAL=unknown],
188 AC_MSG_CHECKING([thread-locals are ${THREAD_LOCAL}])
190 if test "$THREAD_LOCAL" = "unknown"; then
191 AC_LINK_IFELSE([AC_LANG_SOURCE([[]
192 [__thread int foo; int main() { foo++; return foo; }]])],
193 [THREAD_LOCAL=before],
194 [THREAD_LOCAL=unknown])
196 AC_MSG_RESULT([$THREAD_LOCAL])
199 if test "$THREAD_LOCAL" = "unknown"; then
200 AC_LINK_IFELSE([AC_LANG_SOURCE([[]
201 [int __thread foo; int main() { foo++; return foo; }]])],
202 [THREAD_LOCAL=after],
203 [THREAD_LOCAL=unknown])
204 AC_MSG_RESULT([$THREAD_LOCAL])
207 if test "$THREAD_LOCAL" = "unknown"; then
208 AC_LINK_IFELSE([AC_LANG_SOURCE([[]
209 [__declspec(int) foo; int main() { foo++; return foo; }]])],
210 [THREAD_LOCAL=declspec],
211 [THREAD_LOCAL=unknown])
212 AC_MSG_RESULT([$THREAD_LOCAL])
215 if test "$THREAD_LOCAL" != "unknown"; then
216 AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL],
217 THREAD_LOCAL_${THREAD_LOCAL}, [thread-local setting])
220 dnl Looking for libcrypto....
221 AC_CHECK_LIB([crypto], [MD5_Init])
222 AM_CONDITIONAL([HAVE_LIBCRYPTO], [test "$HAVE_LIBCRYPTO" != "no"])
224 AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
226 AC_DEFINE([HAVE_SUN_LEN], [1], [Have struct sockaddr_un.sun_len])],
227 [HAS_SUN_LEN=no], [[#include <sys/un.h>]])
229 AC_CHECK_DECLS([__isthreaded], [], [], [#include <stdio.h>])
230 HAVE_ISTHREADED=${ac_cv_have_decl___isthreaded}
233 dnl Some packages need to be checked against version numbers so we
234 dnl define a function here for later use
236 AC_DEFUN([VERSION_TO_NUMBER],
237 [`$1 | sed -e 's/lib.* //' | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'`])
239 LIBSLAX_CONFIG_PREFIX=""
242 AC_ARG_WITH(libslax-prefix,
243 [ --with-libslax-prefix=[PFX] Specify location of libslax config],
244 LIBSLAX_CONFIG_PREFIX=$withval
247 AC_MSG_CHECKING(for libslax)
248 if test "x$LIBSLAX_CONFIG_PREFIX" != "x"
250 SLAX_CONFIG=${LIBSLAX_CONFIG_PREFIX}/bin/slax-config
252 SLAX_CONFIG=slax-config
256 dnl make sure slax-config is executable,
257 dnl test version and init our variables
260 if ${SLAX_CONFIG} --libs > /dev/null 2>&1
262 LIBSLAX_VERSION=`$SLAX_CONFIG --version`
263 SLAX_BINDIR="`$SLAX_CONFIG --bindir | head -1`"
264 SLAX_OXTRADOCDIR="`$SLAX_CONFIG --oxtradoc | head -1`"
265 AC_MSG_RESULT($LIBSLAX_VERSION found)
274 AM_CONDITIONAL([HAVE_OXTRADOC], [test "$HAVE_OXTRADOC" != "no"])
276 AC_SUBST(SLAX_BINDIR)
277 AC_SUBST(SLAX_OXTRADOCDIR)
279 AC_MSG_CHECKING([whether to build with warnings])
280 AC_ARG_ENABLE([warnings],
281 [ --enable-warnings Turn on compiler warnings],
282 [LIBXO_WARNINGS=$enableval],
284 AC_MSG_RESULT([$LIBXO_WARNINGS])
285 AM_CONDITIONAL([LIBXO_WARNINGS_HIGH], [test "$LIBXO_WARNINGS" != "no"])
287 AC_MSG_CHECKING([whether to build with debugging])
288 AC_ARG_ENABLE([debug],
289 [ --enable-debug Turn on debugging],
290 [LIBXO_DEBUG=yes; AC_DEFINE([LIBXO_DEBUG], [1], [Enable debugging])],
292 AC_MSG_RESULT([$LIBXO_DEBUG])
293 AM_CONDITIONAL([LIBXO_DEBUG], [test "$LIBXO_DEBUG" != "no"])
295 AC_MSG_CHECKING([whether to use int return codes])
296 AC_ARG_ENABLE([int-return-codes],
297 [ --enable-int-return-codes Use int return codes (instead of ssize_t)],
298 [USE_INT_RETURN_CODES=yes; AC_DEFINE([USE_INT_RETURN_CODES], [1], [Use int return codes])],
299 [USE_INT_RETURN_CODES=no])
300 AC_MSG_RESULT([$USE_INT_RETURN_CODES])
302 AC_MSG_CHECKING([whether to build with text-only rendering])
303 AC_ARG_ENABLE([text-only],
304 [ --enable-text-only Turn on text-only rendering],
305 [LIBXO_TEXT_ONLY=yes; AC_DEFINE([LIBXO_TEXT_ONLY], [1], [Enable text-only rendering])],
306 [LIBXO_TEXT_ONLY=no])
307 AC_MSG_RESULT([$LIBXO_TEXT_ONLY])
308 AM_CONDITIONAL([LIBXO_TEXT_ONLY], [test "$LIBXO_TEXT_ONLY" != "no"])
310 AC_MSG_CHECKING([whether to build with local wcwidth implementation])
311 AC_ARG_ENABLE([wcwidth],
312 [ --disable-wcwidth Disable local wcwidth implementation],
313 [LIBXO_WCWIDTH=$enableval],
315 AC_MSG_RESULT([$LIBXO_WCWIDTH])
316 if test "${LIBXO_WCWIDTH}" != "no"; then
317 AC_DEFINE([LIBXO_WCWIDTH], [1], [Enable local wcwidth implementation])
320 AC_MSG_CHECKING([retain hash bucket size])
321 AC_ARG_WITH(retain-size,
322 [ --with-retain-size=[DIR] Specify retain hash bucket size (in bits)],
323 [XO_RETAIN_SIZE=$withval],
324 [XO_RETAIN_SIZE=default]
327 AC_MSG_RESULT([$XO_RETAIN_SIZE])
328 if test "${XO_RETAIN_SIZE}" != "default"; then
329 AC_DEFINE_UNQUOTED([XO_RETAIN_SIZE], ${XO_RETAIN_SIZE}, [Retain hash bucket size])
332 AC_CHECK_LIB([m], [lrint])
333 AM_CONDITIONAL([HAVE_LIBM], [test "$HAVE_LIBM" != "no"])
335 AC_MSG_CHECKING([compiler for gcc])
337 if test "${CC}" != ""; then
338 HAVE_GCC=`${CC} --version 2>&1 | grep GCC`
339 if test "${HAVE_GCC}" != ""; then
345 AC_MSG_RESULT([$HAVE_GCC])
346 AM_CONDITIONAL([HAVE_GCC], [test "$HAVE_GCC" = "yes"])
348 AC_MSG_CHECKING([whether to build with printflike])
349 AC_ARG_ENABLE([printflike],
350 [ --enable-printflike Enable use of GCC __printflike attribute],
351 [HAVE_PRINTFLIKE=yes;
352 AC_DEFINE([HAVE_PRINTFLIKE], [1], [Support printflike])],
353 [HAVE_PRINTFLIKE=no])
354 AC_MSG_RESULT([$HAVE_PRINTFLIKE])
355 AM_CONDITIONAL([HAVE_PRINTFLIKE], [test "$HAVE_PRINTFLIKE" != ""])
357 AC_MSG_CHECKING([whether to build with LIBXO_OPTIONS])
358 AC_ARG_ENABLE([libxo-options],
359 [ --disable-libxo-options Turn off support for LIBXO_OPTIONS],
360 [LIBXO_OPTS=$enableval],
362 AC_MSG_RESULT([$LIBXO_OPTS])
363 AM_CONDITIONAL([NO_LIBXO_OPTIONS], [test "$LIBXO_OPTS" != "yes"])
371 CFLAGS="-D_GNU_SOURCE $CFLAGS"
376 LDFLAGS=-no-undefined
391 XO_INCLUDEDIR=${includedir}
392 XO_CFLAGS="${CFLAGS}"
398 AC_SUBST(XO_INCLUDEDIR)
402 AC_ARG_WITH(encoder-dir,
403 [ --with-encoder-dir=[DIR] Specify location of encoder libraries],
404 [XO_ENCODERDIR=$withval],
405 [XO_ENCODERDIR=$libdir/libxo/encoder]
407 AC_SUBST(XO_ENCODERDIR)
409 AC_ARG_WITH(share-dir,
410 [ --with-share-dir=[DIR] Specify location of shared files],
411 [XO_SHAREDIR=$withval],
412 [XO_SHAREDIR=$datarootdir/libxo]
414 XO_SHAREDIR=`echo $XO_SHAREDIR | sed "s;\\${prefix};$prefix;"`
415 AC_SUBST(XO_SHAREDIR)
417 dnl for the spec file
418 RELDATE=`date +'%Y-%m-%d%n'`
421 AC_MSG_RESULT(Using configure dir $ac_abs_confdir)
423 if test -d $ac_abs_confdir/.git ; then
424 extra=`git branch | awk '/\*/ { print $2 }'`
425 if test "$extra" != "" -a "$extra" != "master"
427 LIBXO_VERSION_EXTRA="-git-$extra"
431 LIBXO_VERSION=$PACKAGE_VERSION
432 LIBXO_VERSION_NUMBER=VERSION_TO_NUMBER(echo $PACKAGE_VERSION)
433 AC_SUBST(LIBXO_VERSION)
434 AC_SUBST(LIBXO_VERSION_NUMBER)
435 AC_SUBST(LIBXO_VERSION_EXTRA)
437 AC_DEFINE_UNQUOTED(LIBXO_VERSION, ["$LIBXO_VERSION"],
438 [Version number as dotted value])
439 AC_DEFINE_UNQUOTED(LIBXO_VERSION_NUMBER, [$LIBXO_VERSION_NUMBER],
440 [Version number as a number])
441 AC_DEFINE_UNQUOTED(LIBXO_VERSION_STRING, ["$LIBXO_VERSION_NUMBER"],
442 [Version number as string])
443 AC_DEFINE_UNQUOTED(LIBXO_VERSION_EXTRA, ["$LIBXO_VERSION_EXTRA"],
444 [Version number extra information])
446 AC_CONFIG_HEADERS([libxo/xo_config.h])
454 encoder/cbor/Makefile
456 encoder/test/Makefile
466 tests/gettext/Makefile
469 packaging/libxo.rb.base
473 AC_MSG_NOTICE([summary of build options:
475 libxo version: ${VERSION} ${LIBXO_VERSION_EXTRA}
476 host type: ${host} / ${host_os}
477 install prefix: ${prefix}
481 includedir: ${XO_INCLUDEDIR}
482 share dir: ${XO_SHAREDIR}
483 extensions dir: ${XO_ENCODERDIR}
484 oxtradoc dir: ${SLAX_OXTRADOCDIR}
486 compiler: ${CC} (${HAVE_GCC:-no})
487 compiler flags: ${CFLAGS}
488 library types: Shared=${enable_shared}, Static=${enable_static}
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}