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