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.4.5], [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])
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])
139 if test "$HAVE_GETTEXT" = "yes"; then
140 AC_DEFINE([HAVE_GETTEXT], [1], [gettext(3)])
141 GETTEXT_CFLAGS="-I${GETTEXT_PREFIX}/include"
142 GETTEXT_LIBS="-L${GETTEXT_PREFIX}/lib -lintl"
148 AC_SUBST(GETTEXT_CFLAGS)
149 AC_SUBST(GETTEXT_LIBS)
151 GETTEXT_BINDIR=${GETTEXT_PREFIX}/bin
152 AC_SUBST(GETTEXT_BINDIR)
153 GETTEXT_LIBDIR=${GETTEXT_PREFIX}/lib
154 AC_SUBST(GETTEXT_LIBDIR)
156 AM_CONDITIONAL([HAVE_GETTEXT], [test "$HAVE_GETTEXT" = "yes"])
158 dnl Looking for how to do thread-local variables
160 [ --with-threads=[STYLE] Specify style of thread-local support (none)],
161 [THREAD_LOCAL=$withval],
162 [THREAD_LOCAL=unknown],
165 AC_MSG_CHECKING([thread-locals are ${THREAD_LOCAL}])
167 if test "$THREAD_LOCAL" = "unknown"; then
168 AC_LINK_IFELSE([AC_LANG_SOURCE([[]
169 [__thread int foo; int main() { foo++; return foo; }]])],
170 [THREAD_LOCAL=before],
171 [THREAD_LOCAL=unknown])
173 AC_MSG_RESULT([$THREAD_LOCAL])
176 if test "$THREAD_LOCAL" = "unknown"; then
177 AC_LINK_IFELSE([AC_LANG_SOURCE([[]
178 [int __thread foo; int main() { foo++; return foo; }]])],
179 [THREAD_LOCAL=after],
180 [THREAD_LOCAL=unknown])
181 AC_MSG_RESULT([$THREAD_LOCAL])
184 if test "$THREAD_LOCAL" = "unknown"; then
185 AC_LINK_IFELSE([AC_LANG_SOURCE([[]
186 [__declspec(int) foo; int main() { foo++; return foo; }]])],
187 [THREAD_LOCAL=declspec],
188 [THREAD_LOCAL=unknown])
189 AC_MSG_RESULT([$THREAD_LOCAL])
192 if test "$THREAD_LOCAL" != "unknown"; then
193 AC_DEFINE_UNQUOTED([HAVE_THREAD_LOCAL],
194 THREAD_LOCAL_${THREAD_LOCAL}, [thread-local setting])
197 dnl Looking for libcrypto....
198 AC_CHECK_LIB([crypto], [MD5_Init])
199 AM_CONDITIONAL([HAVE_LIBCRYPTO], [test "$HAVE_LIBCRYPTO" != "no"])
201 AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
203 AC_DEFINE([HAVE_SUN_LEN], [1], [Have struct sockaddr_un.sun_len])],
204 [HAS_SUN_LEN=no], [[#include <sys/un.h>]])
206 AC_CHECK_DECLS([__isthreaded], [], [], [#include <stdio.h>])
207 HAVE_ISTHREADED=${ac_cv_have_decl___isthreaded}
210 dnl Some packages need to be checked against version numbers so we
211 dnl define a function here for later use
213 AC_DEFUN([VERSION_TO_NUMBER],
214 [`$1 | sed -e 's/lib.* //' | awk 'BEGIN { FS = "."; } { printf "%d", ([$]1 * 1000 + [$]2) * 1000 + [$]3;}'`])
216 LIBSLAX_CONFIG_PREFIX=""
219 AC_ARG_WITH(libslax-prefix,
220 [ --with-libslax-prefix=[PFX] Specify location of libslax config],
221 LIBSLAX_CONFIG_PREFIX=$withval
224 AC_MSG_CHECKING(for libslax)
225 if test "x$LIBSLAX_CONFIG_PREFIX" != "x"
227 SLAX_CONFIG=${LIBSLAX_CONFIG_PREFIX}/bin/slax-config
229 SLAX_CONFIG=slax-config
233 dnl make sure slax-config is executable,
234 dnl test version and init our variables
237 if ${SLAX_CONFIG} --libs > /dev/null 2>&1
239 LIBSLAX_VERSION=`$SLAX_CONFIG --version`
240 SLAX_BINDIR="`$SLAX_CONFIG --bindir | head -1`"
241 SLAX_OXTRADOCDIR="`$SLAX_CONFIG --oxtradoc | head -1`"
242 AC_MSG_RESULT($LIBSLAX_VERSION found)
251 AM_CONDITIONAL([HAVE_OXTRADOC], [test "$HAVE_OXTRADOC" != "no"])
253 AC_SUBST(SLAX_BINDIR)
254 AC_SUBST(SLAX_OXTRADOCDIR)
256 AC_MSG_CHECKING([whether to build with warnings])
257 AC_ARG_ENABLE([warnings],
258 [ --enable-warnings Turn on compiler warnings],
259 [LIBXO_WARNINGS=$enableval],
261 AC_MSG_RESULT([$LIBXO_WARNINGS])
262 AM_CONDITIONAL([LIBXO_WARNINGS_HIGH], [test "$LIBXO_WARNINGS" != "no"])
264 AC_MSG_CHECKING([whether to build with debugging])
265 AC_ARG_ENABLE([debug],
266 [ --enable-debug Turn on debugging],
267 [LIBXO_DEBUG=yes; AC_DEFINE([LIBXO_DEBUG], [1], [Enable debugging])],
269 AC_MSG_RESULT([$LIBXO_DEBUG])
270 AM_CONDITIONAL([LIBXO_DEBUG], [test "$LIBXO_DEBUG" != "no"])
272 AC_MSG_CHECKING([whether to build with text-only rendering])
273 AC_ARG_ENABLE([text-only],
274 [ --enable-text-only Turn on text-only rendering],
275 [LIBXO_TEXT_ONLY=yes; AC_DEFINE([LIBXO_TEXT_ONLY], [1], [Enable text-only rendering])],
276 [LIBXO_TEXT_ONLY=no])
277 AC_MSG_RESULT([$LIBXO_TEXT_ONLY])
278 AM_CONDITIONAL([LIBXO_TEXT_ONLY], [test "$LIBXO_TEXT_ONLY" != "no"])
280 AC_MSG_CHECKING([whether to build with local wcwidth implementation])
281 AC_ARG_ENABLE([wcwidth],
282 [ --disable-wcwidth Disable local wcwidth implementation],
283 [LIBXO_WCWIDTH=$enableval],
285 AC_MSG_RESULT([$LIBXO_WCWIDTH])
286 if test "${LIBXO_WCWIDTH}" != "no"; then
287 AC_DEFINE([LIBXO_WCWIDTH], [1], [Enable local wcwidth implementation])
290 AC_CHECK_LIB([m], [lrint])
291 AM_CONDITIONAL([HAVE_LIBM], [test "$HAVE_LIBM" != "no"])
293 AC_MSG_CHECKING([compiler for gcc])
295 if test "${CC}" != ""; then
296 HAVE_GCC=`${CC} --version 2>&1 | grep GCC`
297 if test "${HAVE_GCC}" != ""; then
303 AC_MSG_RESULT([$HAVE_GCC])
304 AM_CONDITIONAL([HAVE_GCC], [test "$HAVE_GCC" = "yes"])
306 AC_MSG_CHECKING([whether to build with printflike])
307 AC_ARG_ENABLE([printflike],
308 [ --enable-printflike Enable use of GCC __printflike attribute],
309 [HAVE_PRINTFLIKE=yes;
310 AC_DEFINE([HAVE_PRINTFLIKE], [1], [Support printflike])],
311 [HAVE_PRINTFLIKE=no])
312 AC_MSG_RESULT([$HAVE_PRINTFLIKE])
313 AM_CONDITIONAL([HAVE_PRINTFLIKE], [test "$HAVE_PRINTFLIKE" != ""])
315 AC_MSG_CHECKING([whether to build with LIBXO_OPTIONS])
316 AC_ARG_ENABLE([libxo-options],
317 [ --disable-libxo-options Turn off support for LIBXO_OPTIONS],
318 [LIBXO_OPTS=$enableval],
320 AC_MSG_RESULT([$LIBXO_OPTS])
321 AM_CONDITIONAL([NO_LIBXO_OPTIONS], [test "$LIBXO_OPTS" != "yes"])
329 CFLAGS="-D_GNU_SOURCE $CFLAGS"
334 LDFLAGS=-no-undefined
349 XO_INCLUDEDIR=${includedir}
354 AC_SUBST(XO_INCLUDEDIR)
357 AC_ARG_WITH(encoder-dir,
358 [ --with-encoder-dir=[DIR] Specify location of encoder libraries],
359 [XO_ENCODERDIR=$withval],
360 [XO_ENCODERDIR=$libdir/libxo/encoder]
362 AC_SUBST(XO_ENCODERDIR)
364 AC_ARG_WITH(share-dir,
365 [ --with-share-dir=[DIR] Specify location of shared files],
366 [XO_SHAREDIR=$withval],
367 [XO_SHAREDIR=$datarootdir/libxo]
369 XO_SHAREDIR=`echo $XO_SHAREDIR | sed "s;\\${prefix};$prefix;"`
370 AC_SUBST(XO_SHAREDIR)
372 dnl for the spec file
373 RELDATE=`date +'%Y-%m-%d%n'`
376 AC_MSG_RESULT(Using configure dir $ac_abs_confdir)
378 if test -d $ac_abs_confdir/.git ; then
379 extra=`git branch | awk '/\*/ { print $2 }'`
380 if test "$extra" != "" -a "$extra" != "master"
382 LIBXO_VERSION_EXTRA="-git-$extra"
386 LIBXO_VERSION=$PACKAGE_VERSION
387 LIBXO_VERSION_NUMBER=VERSION_TO_NUMBER(echo $PACKAGE_VERSION)
388 AC_SUBST(LIBXO_VERSION)
389 AC_SUBST(LIBXO_VERSION_NUMBER)
390 AC_SUBST(LIBXO_VERSION_EXTRA)
392 AC_DEFINE_UNQUOTED(LIBXO_VERSION, ["$LIBXO_VERSION"],
393 [Version number as dotted value])
394 AC_DEFINE_UNQUOTED(LIBXO_VERSION_NUMBER, [$LIBXO_VERSION_NUMBER],
395 [Version number as a number])
396 AC_DEFINE_UNQUOTED(LIBXO_VERSION_STRING, ["$LIBXO_VERSION_NUMBER"],
397 [Version number as string])
398 AC_DEFINE_UNQUOTED(LIBXO_VERSION_EXTRA, ["$LIBXO_VERSION_EXTRA"],
399 [Version number extra information])
401 AC_CONFIG_HEADERS([libxo/xo_config.h])
409 encoder/cbor/Makefile
410 encoder/test/Makefile
419 tests/gettext/Makefile
422 packaging/libxo.rb.base
426 AC_MSG_NOTICE([summary of build options:
428 libxo version: ${VERSION} ${LIBXO_VERSION_EXTRA}
429 host type: ${host} / ${host_os}
430 install prefix: ${prefix}
434 includedir: ${XO_INCLUDEDIR}
435 share dir: ${XO_SHAREDIR}
436 extensions dir: ${XO_ENCODERDIR}
437 oxtradoc dir: ${SLAX_OXTRADOCDIR}
439 compiler: ${CC} (${HAVE_GCC:-no})
440 compiler flags: ${CFLAGS}
441 library types: Shared=${enable_shared}, Static=${enable_static}
443 warnings: ${LIBXO_WARNINGS:-no}
444 debug: ${LIBXO_DEBUG:-no}
445 printf-like: ${HAVE_PRINTFLIKE:-no}
446 libxo-options: ${LIBXO_OPTS:-no}
447 text-only: ${LIBXO_TEXT_ONLY:-no}
448 gettext: ${HAVE_GETTEXT:-no} (${GETTEXT_PREFIX})
449 isthreaded: ${HAVE_ISTHREADED:-no}
450 thread-local: ${THREAD_LOCAL:-no}
451 local wcwidth: ${LIBXO_WCWIDTH:-no}