1AC_INIT([zziplib.spec])
2AC_PREREQ(2.61)
3AC_COPYRIGHT([Guido Draheim <guido@gmx.de> for ZZipLib.SF.net])
4AC_REVISION($Revision: 1.15 $)
5AC_CONFIG_AUX_DIR([uses])
6AC_CONFIG_MACRO_DIR([m4])
7# =======================================================================
8AC_CANONICAL_SYSTEM
9dnl AM_ENABLE_MULTILIB([Makefile],[$host])
10dnl AX_ENABLE_BUILDDIR
11AC_SET_DEFAULT_PATHS_SYSTEM
12# -----------------------------------------------------------------------
13AC_ARG_ENABLE([thread-safe],
14AS_HELP_STRING([--disable-thread-safe],[disable thread-safe libtool option])
15   ,,[ enable_thread_safe="yes"])
16THREAD_SAFE=""
17test "$enable_thread_safe" = "yes" && THREAD_SAFE="-thread-safe"
18test "$enable_thread_safe" = "$host_os" && THREAD_SAFE="-thread-safe"
19AC_SUBST(THREAD_SAFE)
20if test -n "$THREAD_SAFE" ; then
21  AC_MSG_RESULT(...using thread-safe linkage)
22else
23  AC_MSG_RESULT(disabled thread-safe linkage)
24fi
25# ----------------------------------------------------------------
26AC_MSG_CHECKING(zlib install prefix)
27AC_ARG_WITH(zlib,
28AS_HELP_STRING([--with-zlib],[zlib prefix (e.g. '$HOME/software')])
29    ,,[with_zlib="no"])
30if test "${with_zlib}" = yes ; then # choose --prefix paths
31   if test "${prefix}" = NONE ; then
32      AC_MSG_RESULT([oops, but only itself...])
33      AC_MSG_ERROR(--with-zlib requires a path argument or a --prefix path set)
34   fi
35   with_zlib="$prefix"
36fi
37
38case ".$with_zlib" in
39   .no|.no,*)
40      AC_MSG_RESULT(none)
41      with_zlib="no, not configured" ;;
42  ./usr)
43      AC_MSG_RESULT([oops, ignored (may try --with-zlib=/usr/.)])
44      with_zlib="no, /usr ignored" ;;
45  *)  if test ! -d "$with_zlib/include" ; then
46         AC_MSG_RESULT([oops, given but...])
47         AC_MSG_ERROR("$with_zlib/include" is not a directory)
48      fi
49      if test ! -d "$with_zlib/lib" ; then
50         AC_MSG_RESULT([oops, given but...])
51         AC_MSG_ERROR("$with_zlib/lib" is not a directory)
52      fi
53      AC_MSG_RESULT($with_zlib)
54      ZLIB_INCL="-I$with_zlib/include"
55      ZLIB_LDIR="-L$with_zlib/lib"
56      AC_MSG_RESULT(..adding CPPFLAGS $ZLIB_INCL)
57      AC_MSG_RESULT(..adding LDFLAGS  $ZLIB_LDIR)
58      CPPFLAGS="$CPPFLAGS $ZLIB_INCL"
59      LDFLAGS="$LDFLAGS $ZLIB_LDIR"
60  ;;
61esac
62AC_SUBST(ZLIB_INCL)
63AC_SUBST(ZLIB_LDIR)
64# -----------------------------------------------------------------------
65AX_SPEC_DEFAULTS
66AM_INIT_AUTOMAKE($PACKAGE,$VERSION)
67AX_CHECK_ENABLE_DEBUG()
68dnl test ".$CFLAGS" = "." && CFLAGS=""
69AC_PROG_CC
70dnl test ".$CFLAGS" = "." && test "$GCC" = "yes" && CFLAGS="-O3"
71AC_PROG_INSTALL
72AC_LIBTOOL_WIN32_DLL
73AM_PROG_LIBTOOL
74AX_SET_VERSION_INFO
75
76# -----------------------------------------------------------------------
77AC_MSG_RESULT([creating zzip/_msvc.in via zzip/_msvc.sed of config.h.in])
78test -d zzip || mkdir zzip
79sed -f $srcdir/zzip/_msvc.sed $srcdir/config.h.in >zzip/_msvc.in
80AC_CONFIG_HEADERS([config.h])
81AX_PREFIX_CONFIG_H([zzip/_config.h],[zzip],[config.h])
82AX_PREFIX_CONFIG_H([zzip/_msvc.h],[zzip],[zzip/_msvc.in])
83AM_MAINTAINER_MODE
84
85AX_CREATE_PKGCONFIG_INFO(dnl
86[zzip/zziplib.pc], [zzip-zlib-config],[-lzzip],,[ ])
87# -----------------------------------------------------------------------
88AX_PAX_TAR_CREATE
89AX_PAX_TAR_EXTRACT
90AC_PATH_PROGS(PERL, perl5 perl, echo no perl found for)
91AC_PATH_PROGS(PYTHON, python3, echo no python found for)
92AC_PATH_PROGS(MKZIP, zip pkzip, :)
93AC_PATH_PROGS(XMLTO, xmlto, :)
94
95AC_C_INLINE
96AC_C_CONST
97ACX_C_RESTRICT
98AC_STDC_HEADERS
99AC_HEADER_DIRENT
100AC_CHECK_HEADERS(stdint.h unistd.h windows.h winnt.h winbase.h sys/int_types.h)
101AC_CHECK_HEADERS(sys/types.h sys/mman.h sys/stat.h sys/param.h) dnl posix'ish
102AC_CHECK_HEADERS(io.h direct.h zlib.h byteswap.h)
103AC_CHECK_HEADERS(fnmatch.h)
104AC_CHECK_FUNCS( strcasecmp strnlen strndup )
105
106AC_TYPE_OFF_T
107AC_TYPE_SIZE_T
108dnl AC_TYPE_SSIZE_T
109AC_CHECK_TYPE(ssize_t,int)
110AC_CHECK_TYPE(off64_t,_zzip_off_t)
111AC_CHECK_TYPE(__int64,long long)
112if test "xno" = "x$ac_cv_header_stdint_h" ; then
113  AC_COMPILE_CHECK_SIZEOF([short])
114  AC_COMPILE_CHECK_SIZEOF([int])
115  AC_COMPILE_CHECK_SIZEOF([long])
116  AC_COMPILE_CHECK_SIZEOF([int *])
117fi
118AC_C_BIGENDIAN
119AX_CHECK_ALIGNED_ACCESS_REQUIRED
120dnl -------------------------------------------------------------
121# the default is _disabled_!! anyway, result is prefixed in zzip/_config.h!!
122AC_SYS_LARGEFILE_SENSITIVE
123test ".$LARGEFILE_CFLAGS" = "." && LARGEFILE_CFLAGS=""
124AC_ARG_WITH(largefile,AC_HELP_STRING(
125    [--with-largefile],[compile as off64_t instead of 32bit off_t])
126    ,,[with_largefile="no"])
127if test ".$ac_cv_sys_largefile_sensitive" = ".no" ; then
128  AC_MSG_RESULT(compiles library with the only off_t seen)
129elif test ".$with_largefile" != ".no" ; then
130  AC_MSG_RESULT(compiles library as 64bit off_t variant dnl
131- and renaming some function names)
132  LARGEFILE_CFLAGS="$LARGEFILE_CFLAGS -D_LARGEFILE_SOURCE"
133  AC_MSG_RESULT(..adding CFLAGS $LARGEFILE_CFLAGS)
134  CFLAGS="$CFLAGS $LARGEFILE_CFLAGS"
135  AC_MSG_RESULT(..adding 64 into RELEASE_INFO for the libraries)
136  RELEASE_INFO="$RELEASE_INFO-64"
137else
138  AC_MSG_RESULT(compiles library as 32bit off_t variant dnl
139- largefile is not the default here)
140fi
141AC_SUBST(LARGEFILE_CFLAGS)
142dnl -------------------------------------------------------------
143AC_MSG_CHECKING(for zlib being found)
144if test "_$ac_cv_header_zlib_h" != "_yes" ; then
145  AC_MSG_RESULT(dnl
146...oops: zlib.h not found - try adding some CPPFLAGS to configure call)
147         AC_MSG_RESULT(dnl
148...note: and when linkage fails you might also need to set some LDFLAGS)
149  case "$prefix" in
150    NONE|/usr)
151            AC_MSG_RESULT(dnl
152...note: both can be set by specifying the install prefix of the zlib library)
153            AC_MSG_RESULT(dnl
154...note: via --with-zlib=path ... it will test for -Ipath/include -Lpath/lib)
155    ;;
156    *) if test -d $prefix/include ; then
157         AC_MSG_RESULT(dnl
158...note: -I$prefix/include is not added to CPPFLAGS automatically and)
159         AC_MSG_RESULT(dnl
160...note: neither is -L$prefix/lib for LDFLAGS .. both will be if you specify)
161         AC_MSG_RESULT(dnl
162...note: --with-zlib to configure call, or use --with-zlib=installprefix)
163       fi
164     ;;
165  esac
166  AC_MSG_ERROR(zlib.h not found: "zlib" is required to build "$PACKAGE")
167  exit 1
168fi
169cat >conftest.c <<EOF
170#include <zlib.h>
171const char* zlib_VeRsIoN = ZLIB_VERSION "dEtEcT";
172EOF
173ZLIB_VERSION=`(eval "$ac_cpp conftest.c") 2>/dev/null \
174| grep zlib_VeRsIoN | sed -e 's,.*= *.,,' -e 's,. *.dEtEcT.*,,'`
175rm conftest.c
176AC_SUBST(ZLIB_VERSION)
177AC_MSG_RESULT(yes - $ZLIB_VERSION)
178# ----------------------------------------------------------------
179AC_MSG_CHECKING(docdir default)
180AC_ARG_WITH(docdir, AC_HELP_STRING(
181    [--with-docdir],[docdir prefix (prefix/share/doc)])
182    ,,[with_docdir="no"])
183case "${with_docdir}" in
184 prefix/*)  docdir=` echo "$withval" | sed 's/^prefix/${prefix}'` ;;
185 datadir/*) docdir=` echo "$withval" | sed 's/^datadir/${datadir}'` ;;
186 yes) docdir='${prefix}/doc' ;;
187 no)  docdir='${datadir}/doc' ;;
188 /*|\\*|[a-zA-Z]:*) docdir="$with_docdir"  ;;
189 *) AC_MSG_RESULT(oops)
190    AC_MSG_ERROR(bad value ${withval} for --with-docdir)
191 ;;
192esac
193AC_SUBST(docdir)
194AC_MSG_RESULT($docdir)
195# ----------------------------------------------------------------
196AC_MSG_CHECKING(whether using debugging messages in libraries)
197AC_ARG_WITH(debug, AC_HELP_STRING(
198    [--with-debug],[debug messages in library])
199    , [case "${withval}" in
200		yes|no) with_debug="$withval" ;;
201		*) AC_MSG_RESULT(oops)
202                   AC_MSG_ERROR(bad value ${withval} for --with-debug) ;;
203       esac], [with_debug="no"])
204test "$with_debug" != "yes" && with_debug="no" # yes or no
205test "$with_debug" = "yes" && export CFLAGS="$CFLAGS -DDEBUG"
206result="$with_debug" ; test "$result" = "yes" && result="yes, added -DDEBUG"
207AC_MSG_RESULT($result)
208if test "$with_debug" = "yes" ; then if test -n "$RELEASE_INFO" ; then
209   RELEASE_INFO="$RELEASE_INFO-dbg"
210   AC_MSG_RESULT(modified release, $RELEASE_INFO)
211fi fi
212# ----------------------------------------------------------------
213AC_MSG_CHECKING(whether thread stack is too small for bufsiz buffers)
214 # many embedded platforms, superthreaded systems and kernel usage
215 # will severely limit the stackspace for its threads. Use _LOWSTK
216 # compile-define on those platforms.
217AC_ARG_WITH(lowstk, AC_HELP_STRING(
218    [--with-lowstk], [limited thread stack])
219    , [case "${withval}" in
220		yes|no|auto) with_lowstk="$withval" ;;
221		*) AC_MSG_ERROR(bad value ${withval} for --with-lowstk) ;;
222       esac], [with_lowstk="auto"])
223if test "$with_lowstk" = "auto"; then
224  case $target in
225	*-palmos-*) $with_lowstk="yes" ;;
226  esac
227fi
228test "$with_lowstk" != "yes" && with_lowstk="no" # yes or no
229test "$with_lowstk" = "yes" && CFLAGS="$CFLAGS -D_LOWSTK"
230result="$with_lowstk" ; test "$result" = "yes" && result="yes, added -D_LOWSTK"
231AC_MSG_RESULT($with_lowstk)
232# ---------------------------------------------------------------
233AC_MSG_CHECKING(whether can use mmap for file scanning)
234 # system with mmap are probably better performing an searching
235 # and parsing - atleast memory consumption is far better
236AC_ARG_ENABLE(mmap, AC_HELP_STRING(
237   [--disable-mmap],[disable mmap usage])
238   , [case "${enableval}" in
239		yes|no|auto) enable_mmap="${enableval}" ;;
240		*) AC_MSG_RESULT(oops)
241                   AC_MSG_ERROR(bad value ${enableval} for --disable-mmap) ;;
242      esac], [enable_mmap="auto"])
243if test "$enable_mmap" = "auto"
244then
245    test "$ac_cv_header_winbase_h"  && enable_mmap="yes, winbase.h"
246    test "$ac_cv_header_sys_mman_h" && enable_mmap="yes, sys/mman.h"
247fi
248case "$enable_mmap" in
249   yes|yes,*) CFLAGS="$CFLAGS -D_USE_MMAP"
250      AC_MSG_RESULT($enable_mmap, added -D_USE_MMAP) ;;
251   *) enable_mmap="no"
252      AC_MSG_RESULT(no (just a bit slower)) ;;
253esac
254# ---------------------------------------------------------------
255PKG_PROG_PKG_CONFIG
256AC_MSG_CHECKING(whether making SDL parts)
257SDL=""
258SDL_GENERATE=""
259AC_ARG_ENABLE(sdl, AC_HELP_STRING(
260    [--enable-sdl],[enable SDL usage (if present)])
261    ,,[enable_sdl="no"])
262if test "$enable_sdl" = "no" ; then
263   AC_MSG_RESULT([no, disabled])
264else
265   enable_sdl1=`$PKG_CONFIG --modversion sdl 2>/dev/null`
266   if test -z "$enable_sdl1"; then
267      enable_sdl2=`$PKG_CONFIG --modversion sdl2 2>/dev/null`
268      if test -z "$enable_sdl2"; then
269        enable_sdl3=`sdl-config --version 2>/dev/null`
270        SDL_GENERATE="sdl-uninstalled.pc"
271        enable_sdl="$enable_sdl3 (sdl-config)"
272      else
273        enable_sdl="$enable_sdl2 (pkgconfig sdl2)"
274      fi
275   else
276      enable_sdl="$enable_sdl1 (pkgconfig sdl)"
277   fi
278   enable_sdl="$enable_sdl."
279   case ".$enable_sdl" in
280     .1.*) AC_MSG_RESULT([yes, using SDL $enable_sdl])
281           SDL="SDL" ;;
282     .2.*) AC_MSG_RESULT([yes, untested $enable_sdl])
283           SDL="SDL" ;;
284     *)    AC_MSG_RESULT([no, $enable_sdl]) ;;
285   esac
286   if test -n "$SDL_GENERATE"; then
287      AC_MSG_RESULT([enabled SDL generation of... $SDL_GENERATE])
288   fi
289fi
290AC_SUBST([SDL])
291AC_SUBST([SDL_GENERATE])
292
293# ----------------------------------------------------------------
294AC_MSG_CHECKING(whether using address sanitizer)
295AC_ARG_WITH(asan, AC_HELP_STRING(
296    [--with-asan],[compile with adress sanitizer])
297    , [case "${withval}" in
298		yes|no) with_asan="$withval" ;;
299		*) AC_MSG_RESULT(oops)
300                   AC_MSG_ERROR(bad value ${withval} for --with-asan) ;;
301       esac], [with_asan="no"])
302ASAN_LIBS=""
303ASAN_CFLAGS=""
304if test ".$with_asan" = ".yes" ; then
305    ASAN_LIBS="-lasan"
306    ASAN_CFLAGS="-fsanitize=address"
307fi
308AC_MSG_RESULT([$with_asan, $ASAN_CFLAGS])
309AC_SUBST([ASAN_LIBS])
310AC_SUBST([ASAN_CFLAGS])
311# ---------------------------------------------------------------
312AC_MSG_CHECKING(running extra tests on make check)
313if test "MKZIP" != ":" ; then
314  AC_MSG_RESULT(yes)
315  ZIPTESTS=""
316else
317  AC_MSG_RESULT(no)
318  ZIPTESTS="#"
319fi
320AC_SUBST(ZIPTESTS)
321# ---------------------------------------------------------------
322AC_MSG_CHECKING([link options])
323ZZIPLIB_LDFLAGS=""
324case "$host_os" in mingw*)
325    # we may assume that the backend is gnu-ld but DLLs need full resolution
326    ZZIPLIB_LDFLAGS="${wl}-no-undefined ${wl}-export-all-symbols -mconsole"
327    RESOLVES=' '
328;; darwin*)
329    # darwin never uses gnu-ld but the linker can do it anyway
330    ZZIPLIB_LDFLAGS="-export-dynamic"
331    RESOLVES=" # "
332;; *)
333    if test ".$can_build_shared" != ".no" ; then
334      ZZIPLIB_LDFLAGS="-export-dynamic"
335      if test ".$lt_cv_prog_gnu_ld" == ".yes" ; then
336         ZZIPLIB_LDFLAGS="${wl}--export-dynamic"
337         # TODO: that is for backward compatibility only
338      fi
339    fi
340    RESOLVES=" # "
341;; esac
342AC_MSG_RESULT([$ZZIPLIB_LDFLAGS $RESOLVES])
343AC_SUBST([ZZIPLIB_LDFLAGS])
344AC_SUBST([RESOLVES])
345AC_ARG_WITH([defines],
346AS_HELP_STRING([--with-defines],[easy,harden,allow_modulo_entries]),
347    ,[with_defines="normal"])
348
349#
350case ",$with_defines," in *,easy,*)
351  AC_MSG_RESULT([..adding CFLAGS -DZZIP_EASY])
352  CFLAGS="$CFLAGS -DZZIP_EASY"
353;; esac
354case ",$with_defines," in *,harden,*)
355  AC_MSG_RESULT([..adding CFLAGS -DZZIP_HARDEN])
356  CFLAGS="$CFLAGS -DZZIP_HARDEN"
357;; esac
358case ",$with_defines," in *,allow_modulo_entries,*)
359  AC_MSG_RESULT([..adding CFLAGS -DZZIP_ALLOW_MODULO_ENTRIES])
360  CFLAGS="$CFLAGS -DZZIP_ALLOW_MODULO_ENTRIES"
361;; esac
362
363# ---------------------------------------------------------------
364AX_MAINTAINER_MODE_AUTO_SILENT
365AX_NOT_ENABLE_FRAME_POINTER
366AX_CFLAGS_WARN_ALL
367AX_CFLAGS_GCC_OPTION(-Wpointer-arith)
368AX_CFLAGS_GCC_OPTION(-Wsign-compare)
369AX_CFLAGS_GCC_OPTION(-Wmissing-declarations)
370AX_CFLAGS_GCC_OPTION(-Wdeclaration-after-statement)
371AX_CFLAGS_GCC_OPTION(-Werror-implicit-function-declaration)
372AX_CFLAGS_GCC_OPTION(-Wstrict-aliasing)
373AX_CFLAGS_GCC_OPTION(-Warray-bounds)
374AX_CFLAGS_NO_WRITABLE_STRINGS
375AX_CFLAGS_STRICT_PROTOTYPES
376# ---------------------------------------------------------------
377AX_ENABLE_DEFAULT_PKGCONFIGDIR
378AX_ENABLE_DEFAULT_ACLOCALDIR
379AC_SUBST([CONFIG_FILES])
380AC_OUTPUT([Makefile
381           zzip/Makefile zzipwrap/Makefile SDL/Makefile
382           docs/Makefile test/Makefile bins/Makefile])
383dnl -------------------------------------------------------------
384PATCH_LIBTOOL_ON_DARWIN_ZSH_OVERQUOTING
385PATCH_LIBTOOL_SYS_LIB_SEARCH_PATH_SPEC
386PATCH_LIBTOOL_TO_ADD_HOST_CC
387# ---------------------------------------------------------------
388echo '-----' $PACKAGE $VERSION $prefix
389$SHELL libtool --features || true
390echo "CPPFLAGS=$CPPFLAGS"
391echo "CFLAGS=$CFLAGS"
392test "$enable_mmap" != "no" && echo "enable  mmap   ($enable_mmap)"
393test "$enable_mmap"  = "no" && echo "disable mmap   ($enable_mmap)"
394test "$with_lowstk" != "no" && echo "with    lowstk ($with_lowstk)"
395test "$with_lowstk"  = "no" && echo "without lowstk ($with_lowstk)"
396test "$with_debug"  != "no" && echo "with    debug  ($with_debug)"
397test "$with_debug"   = "no" && echo "without debug  ($with_debug)"
398# test -f ./zziplib.spec && echo warning - do not build in the source dirs
399echo '# make  && make check  && make install'
400