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], [0.6.1], [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])])
25 AC_CONFIG_MACRO_DIR([m4])
28 # Must be after AC_PROG_AR
29 LT_INIT([dlopen shared])
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)
44 # Checks for typedefs, structures, and compiler characteristics.
48 # Checks for library functions.
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])
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])
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])
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])
88 AC_MSG_RESULT(humanize_number results: :${HAVE_HUMANIZE_NUMBER}:${ac_cv_header_libutil_h}:)
90 if test "$HAVE_HUMANIZE_NUMBER" = "yes"; then
91 AC_DEFINE([HAVE_HUMANIZE_NUMBER], [1], [humanize_number(3)])
94 AM_CONDITIONAL([HAVE_HUMANIZE_NUMBER], [test "$HAVE_HUMANIZE_NUMBER" = "yes"])
96 AC_ARG_ENABLE([gettext],
97 [ --disable-gettext Turn off support for gettext],
98 [GETTEXT_ENABLE=$enableval],
101 dnl Looking for gettext(), assumably in libintl
103 [ --with-gettext=[PFX] Specify location of gettext installation],
104 [GETTEXT_PREFIX=$withval],
105 [GETTEXT_PREFIX=/usr],
110 if test "$GETTEXT_ENABLE" != "no"; then
112 AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
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; }]])],
120 CFLAGS="$_save_cflags"
122 AC_MSG_RESULT([$HAVE_GETTEXT])
124 if test "$HAVE_GETTEXT" != "yes"; then
125 GETTEXT_PREFIX=/opt/local
126 AC_MSG_CHECKING([gettext in ${GETTEXT_PREFIX}])
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; }]])],
134 CFLAGS="$_save_cflags"
136 AC_MSG_RESULT([$HAVE_GETTEXT])
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"
149 AC_SUBST(GETTEXT_CFLAGS)
150 AC_SUBST(GETTEXT_LIBS)
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
159 AC_MSG_NOTICE("could not find msgfmt tool")
160 # Use a (bad) fall back value
161 GETTEXT_BINDIR=${GETTEXT_PREFIX}/bin
163 AC_SUBST(GETTEXT_BINDIR)
165 AM_CONDITIONAL([HAVE_GETTEXT], [test "$HAVE_GETTEXT" = "yes"])
167 dnl Looking for how to do thread-local variables
169 [ --with-threads=[STYLE] Specify style of thread-local support (none)],
170 [THREAD_LOCAL=$withval],
171 [THREAD_LOCAL=unknown],
174 AC_MSG_CHECKING([thread-locals are ${THREAD_LOCAL}])
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])
182 AC_MSG_RESULT([$THREAD_LOCAL])
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])
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])
201 if test "$THREAD_LOCAL" != "unknown"; then
202 AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL],
203 THREAD_LOCAL_${THREAD_LOCAL}, [thread-local setting])
206 dnl Looking for libcrypto....
207 AC_CHECK_LIB([crypto], [MD5_Init])
208 AM_CONDITIONAL([HAVE_LIBCRYPTO], [test "$HAVE_LIBCRYPTO" != "no"])
210 AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
212 AC_DEFINE([HAVE_SUN_LEN], [1], [Have struct sockaddr_un.sun_len])],
213 [HAS_SUN_LEN=no], [[#include <sys/un.h>]])
215 AC_CHECK_DECLS([__isthreaded], [], [], [#include <stdio.h>])
216 HAVE_ISTHREADED=${ac_cv_have_decl___isthreaded}
219 dnl Some packages need to be checked against version numbers so we
220 dnl define a function here for later use
222 AC_DEFUN([VERSION_TO_NUMBER],
223 [`$1 | sed -e 's/lib.* //' | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'`])
225 LIBSLAX_CONFIG_PREFIX=""
228 AC_ARG_WITH(libslax-prefix,
229 [ --with-libslax-prefix=[PFX] Specify location of libslax config],
230 LIBSLAX_CONFIG_PREFIX=$withval
233 AC_MSG_CHECKING(for libslax)
234 if test "x$LIBSLAX_CONFIG_PREFIX" != "x"
236 SLAX_CONFIG=${LIBSLAX_CONFIG_PREFIX}/bin/slax-config
238 SLAX_CONFIG=slax-config
242 dnl make sure slax-config is executable,
243 dnl test version and init our variables
246 if ${SLAX_CONFIG} --libs > /dev/null 2>&1
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)
260 AM_CONDITIONAL([HAVE_OXTRADOC], [test "$HAVE_OXTRADOC" != "no"])
262 AC_SUBST(SLAX_BINDIR)
263 AC_SUBST(SLAX_OXTRADOCDIR)
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],
270 AC_MSG_RESULT([$LIBXO_WARNINGS])
271 AM_CONDITIONAL([LIBXO_WARNINGS_HIGH], [test "$LIBXO_WARNINGS" != "no"])
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])],
278 AC_MSG_RESULT([$LIBXO_DEBUG])
279 AM_CONDITIONAL([LIBXO_DEBUG], [test "$LIBXO_DEBUG" != "no"])
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"])
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],
294 AC_MSG_RESULT([$LIBXO_WCWIDTH])
295 if test "${LIBXO_WCWIDTH}" != "no"; then
296 AC_DEFINE([LIBXO_WCWIDTH], [1], [Enable local wcwidth implementation])
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]
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])
311 AC_CHECK_LIB([m], [lrint])
312 AM_CONDITIONAL([HAVE_LIBM], [test "$HAVE_LIBM" != "no"])
314 AC_MSG_CHECKING([compiler for gcc])
316 if test "${CC}" != ""; then
317 HAVE_GCC=`${CC} --version 2>&1 | grep GCC`
318 if test "${HAVE_GCC}" != ""; then
324 AC_MSG_RESULT([$HAVE_GCC])
325 AM_CONDITIONAL([HAVE_GCC], [test "$HAVE_GCC" = "yes"])
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" != ""])
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],
341 AC_MSG_RESULT([$LIBXO_OPTS])
342 AM_CONDITIONAL([NO_LIBXO_OPTIONS], [test "$LIBXO_OPTS" != "yes"])
350 CFLAGS="-D_GNU_SOURCE $CFLAGS"
355 LDFLAGS=-no-undefined
370 XO_INCLUDEDIR=${includedir}
371 XO_CFLAGS="${CFLAGS}"
377 AC_SUBST(XO_INCLUDEDIR)
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]
386 AC_SUBST(XO_ENCODERDIR)
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]
393 XO_SHAREDIR=`echo $XO_SHAREDIR | sed "s;\\${prefix};$prefix;"`
394 AC_SUBST(XO_SHAREDIR)
396 dnl for the spec file
397 RELDATE=`date +'%Y-%m-%d%n'`
400 AC_MSG_RESULT(Using configure dir $ac_abs_confdir)
402 if test -d $ac_abs_confdir/.git ; then
403 extra=`git branch | awk '/\*/ { print $2 }'`
404 if test "$extra" != "" -a "$extra" != "master"
406 LIBXO_VERSION_EXTRA="-git-$extra"
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)
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])
425 AC_CONFIG_HEADERS([libxo/xo_config.h])
433 encoder/cbor/Makefile
434 encoder/test/Makefile
443 tests/gettext/Makefile
446 packaging/libxo.rb.base
450 AC_MSG_NOTICE([summary of build options:
452 libxo version: ${VERSION} ${LIBXO_VERSION_EXTRA}
453 host type: ${host} / ${host_os}
454 install prefix: ${prefix}
458 includedir: ${XO_INCLUDEDIR}
459 share dir: ${XO_SHAREDIR}
460 extensions dir: ${XO_ENCODERDIR}
461 oxtradoc dir: ${SLAX_OXTRADOCDIR}
463 compiler: ${CC} (${HAVE_GCC:-no})
464 compiler flags: ${CFLAGS}
465 library types: Shared=${enable_shared}, Static=${enable_static}
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}