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.6.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)
41 # Checks for typedefs, structures, and compiler characteristics.
45 # Checks for library functions.
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])
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])
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])
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])
85 AC_MSG_RESULT(humanize_number results: :${HAVE_HUMANIZE_NUMBER}:${ac_cv_header_libutil_h}:)
87 if test "$HAVE_HUMANIZE_NUMBER" = "yes"; then
88 AC_DEFINE([HAVE_HUMANIZE_NUMBER], [1], [humanize_number(3)])
91 AM_CONDITIONAL([HAVE_HUMANIZE_NUMBER], [test "$HAVE_HUMANIZE_NUMBER" = "yes"])
93 AC_ARG_ENABLE([gettext],
94 [ --disable-gettext Turn off support for gettext],
95 [GETTEXT_ENABLE=$enableval],
98 dnl Looking for gettext(), assumably in libintl
100 [ --with-gettext=[PFX] Specify location of gettext installation],
101 [GETTEXT_PREFIX=$withval],
102 [GETTEXT_PREFIX=/usr],
107 if test "$GETTEXT_ENABLE" != "no"; then
109 AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
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; }]])],
117 CFLAGS="$_save_cflags"
119 AC_MSG_RESULT([$HAVE_GETTEXT])
121 if test "$HAVE_GETTEXT" != "yes"; then
122 GETTEXT_PREFIX=/opt/local
123 AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
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; }]])],
131 CFLAGS="$_save_cflags"
133 AC_MSG_RESULT([$HAVE_GETTEXT])
136 if test "$HAVE_GETTEXT" != "yes"; then
137 GETTEXT_PREFIX=/usr/local
138 AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
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; }]])],
146 CFLAGS="$_save_cflags"
148 AC_MSG_RESULT([$HAVE_GETTEXT])
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"
161 AC_SUBST(GETTEXT_CFLAGS)
162 AC_SUBST(GETTEXT_LIBS)
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
171 AC_MSG_NOTICE("could not find msgfmt tool")
172 # Use a (bad) fall back value
173 GETTEXT_BINDIR=${GETTEXT_PREFIX}/bin
175 AC_SUBST(GETTEXT_BINDIR)
177 AM_CONDITIONAL([HAVE_GETTEXT], [test "$HAVE_GETTEXT" = "yes"])
179 dnl Looking for how to do thread-local variables
181 [ --with-threads=[STYLE] Specify style of thread-local support (none)],
182 [THREAD_LOCAL=$withval],
183 [THREAD_LOCAL=unknown],
186 AC_MSG_CHECKING([thread-locals are ${THREAD_LOCAL}])
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])
194 AC_MSG_RESULT([$THREAD_LOCAL])
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])
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])
213 if test "$THREAD_LOCAL" != "unknown"; then
214 AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL],
215 THREAD_LOCAL_${THREAD_LOCAL}, [thread-local setting])
218 dnl Looking for libcrypto....
219 AC_CHECK_LIB([crypto], [MD5_Init])
220 AM_CONDITIONAL([HAVE_LIBCRYPTO], [test "$HAVE_LIBCRYPTO" != "no"])
222 AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
224 AC_DEFINE([HAVE_SUN_LEN], [1], [Have struct sockaddr_un.sun_len])],
225 [HAS_SUN_LEN=no], [[#include <sys/un.h>]])
227 AC_CHECK_DECLS([__isthreaded], [], [], [#include <stdio.h>])
228 HAVE_ISTHREADED=${ac_cv_have_decl___isthreaded}
231 dnl Some packages need to be checked against version numbers so we
232 dnl define a function here for later use
234 AC_DEFUN([VERSION_TO_NUMBER],
235 [`$1 | sed -e 's/lib.* //' | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'`])
237 LIBSLAX_CONFIG_PREFIX=""
240 AC_ARG_WITH(libslax-prefix,
241 [ --with-libslax-prefix=[PFX] Specify location of libslax config],
242 LIBSLAX_CONFIG_PREFIX=$withval
245 AC_MSG_CHECKING(for libslax)
246 if test "x$LIBSLAX_CONFIG_PREFIX" != "x"
248 SLAX_CONFIG=${LIBSLAX_CONFIG_PREFIX}/bin/slax-config
250 SLAX_CONFIG=slax-config
254 dnl make sure slax-config is executable,
255 dnl test version and init our variables
258 if ${SLAX_CONFIG} --libs > /dev/null 2>&1
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)
272 AM_CONDITIONAL([HAVE_OXTRADOC], [test "$HAVE_OXTRADOC" != "no"])
274 AC_SUBST(SLAX_BINDIR)
275 AC_SUBST(SLAX_OXTRADOCDIR)
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],
282 AC_MSG_RESULT([$LIBXO_WARNINGS])
283 AM_CONDITIONAL([LIBXO_WARNINGS_HIGH], [test "$LIBXO_WARNINGS" != "no"])
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])],
290 AC_MSG_RESULT([$LIBXO_DEBUG])
291 AM_CONDITIONAL([LIBXO_DEBUG], [test "$LIBXO_DEBUG" != "no"])
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])
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"])
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],
313 AC_MSG_RESULT([$LIBXO_WCWIDTH])
314 if test "${LIBXO_WCWIDTH}" != "no"; then
315 AC_DEFINE([LIBXO_WCWIDTH], [1], [Enable local wcwidth implementation])
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]
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])
330 AC_CHECK_LIB([m], [lrint])
331 AM_CONDITIONAL([HAVE_LIBM], [test "$HAVE_LIBM" != "no"])
333 AC_MSG_CHECKING([compiler for gcc])
335 if test "${CC}" != ""; then
336 HAVE_GCC=`${CC} --version 2>&1 | grep -i GCC`
337 if test "${HAVE_GCC}" != ""; then
339 AC_DEFINE([HAVE_GCC], [1], [Using real gcc])
344 AC_MSG_RESULT([$HAVE_GCC])
345 AM_CONDITIONAL([HAVE_GCC], [test "$HAVE_GCC" = "yes"])
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" != ""])
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],
361 AC_MSG_RESULT([$LIBXO_OPTS])
362 AM_CONDITIONAL([NO_LIBXO_OPTIONS], [test "$LIBXO_OPTS" != "yes"])
370 CFLAGS="-D_GNU_SOURCE $CFLAGS"
375 LDFLAGS=-no-undefined
390 XO_INCLUDEDIR=${includedir}
391 XO_CFLAGS="${CFLAGS}"
397 AC_SUBST(XO_INCLUDEDIR)
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]
406 AC_SUBST(XO_ENCODERDIR)
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]
413 XO_SHAREDIR=`echo $XO_SHAREDIR | sed "s;\\${prefix};$prefix;"`
414 AC_SUBST(XO_SHAREDIR)
416 dnl for the spec file
417 RELDATE=`date +'%Y-%m-%d%n'`
420 AC_MSG_RESULT(Using configure dir $ac_abs_confdir)
422 if test -d $ac_abs_confdir/.git ; then
423 extra=`git branch | awk '/\*/ { print $2 }'`
424 if test "$extra" != "" -a "$extra" != "master"
426 LIBXO_VERSION_EXTRA="-git-$extra"
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)
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])
445 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}