configure 24.6 KB
Newer Older
M
Mark Adler 已提交
1
#!/bin/sh
M
Mark Adler 已提交
2
# configure script for zlib.
M
Mark Adler 已提交
3
#
M
Mark Adler 已提交
4 5
# Normally configure builds both a static and a shared library.
# If you want to build just a static library, use: ./configure --static
M
Mark Adler 已提交
6
#
M
Mark Adler 已提交
7 8 9 10 11
# To impose specific compiler or flags or install directory, use for example:
#    prefix=$HOME CC=cc CFLAGS="-O4" ./configure
# or for csh/tcsh users:
#    (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure)

M
Mark Adler 已提交
12 13 14 15
# Incorrect settings of CC or CFLAGS may prevent creating a shared library.
# If you have problems, try without defining CC and CFLAGS before reporting
# an error.

M
Mark Adler 已提交
16
# start off configure.log
17 18 19 20
echo -------------------- >> configure.log
echo $0 $* >> configure.log
date >> configure.log

M
Mark Adler 已提交
21
# set command prefix for cross-compilation
M
Mark Adler 已提交
22
if [ -n "${CHOST}" ]; then
M
Mark Adler 已提交
23
    uname="`echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/'`"
M
Mark Adler 已提交
24 25 26
    CROSS_PREFIX="${CHOST}-"
fi

M
Mark Adler 已提交
27
# destination name for static library
M
Mark Adler 已提交
28
STATICLIB=libz.a
M
Mark Adler 已提交
29 30

# extract zlib version numbers from zlib.h
M
Mark Adler 已提交
31
VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
M
Mark Adler 已提交
32
VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < zlib.h`
M
Mark Adler 已提交
33 34
VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h`
VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h`
M
Mark Adler 已提交
35 36

# establish commands for library building
M
Mark Adler 已提交
37
if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then
M
Mark Adler 已提交
38
    AR=${AR-"${CROSS_PREFIX}ar"}
39
    test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
M
Mark Adler 已提交
40 41
else
    AR=${AR-"ar"}
42
    test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
M
Mark Adler 已提交
43
fi
44
ARFLAGS=${ARFLAGS-"rc"}
M
Mark Adler 已提交
45
if "${CROSS_PREFIX}ranlib" --version >/dev/null 2>/dev/null || test $? -lt 126; then
M
Mark Adler 已提交
46
    RANLIB=${RANLIB-"${CROSS_PREFIX}ranlib"}
47
    test -n "${CROSS_PREFIX}" && echo Using ${RANLIB} | tee -a configure.log
M
Mark Adler 已提交
48 49 50
else
    RANLIB=${RANLIB-"ranlib"}
fi
M
Mark Adler 已提交
51
if "${CROSS_PREFIX}nm" --version >/dev/null 2>/dev/null || test $? -lt 126; then
M
Mark Adler 已提交
52
    NM=${NM-"${CROSS_PREFIX}nm"}
53
    test -n "${CROSS_PREFIX}" && echo Using ${NM} | tee -a configure.log
M
Mark Adler 已提交
54 55 56
else
    NM=${NM-"nm"}
fi
M
Mark Adler 已提交
57 58

# set defaults before processing command line options
M
Mark Adler 已提交
59
LDCONFIG=${LDCONFIG-"ldconfig"}
M
Mark Adler 已提交
60
LDSHAREDLIBC="${LDSHAREDLIBC--lc}"
M
Mark Adler 已提交
61
ARCHS=
M
Mark Adler 已提交
62
prefix=${prefix-/usr/local}
M
Mark Adler 已提交
63 64
exec_prefix=${exec_prefix-'${prefix}'}
libdir=${libdir-'${exec_prefix}/lib'}
M
Mark Adler 已提交
65
sharedlibdir=${sharedlibdir-'${libdir}'}
M
Mark Adler 已提交
66
includedir=${includedir-'${prefix}/include'}
M
Mark Adler 已提交
67
mandir=${mandir-'${prefix}/share/man'}
M
Mark Adler 已提交
68
shared_ext='.so'
M
Mark Adler 已提交
69
shared=1
70
solo=0
71
cover=0
M
Mark Adler 已提交
72
zprefix=0
M
Mark Adler 已提交
73
build64=0
M
Mark Adler 已提交
74
gcc=0
M
Mark Adler 已提交
75 76
old_cc="$CC"
old_cflags="$CFLAGS"
77 78
OBJC='$(OBJZ) $(OBJG)'
PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)'
M
Mark Adler 已提交
79

M
Mark Adler 已提交
80
# process command line options
M
Mark Adler 已提交
81 82
while test $# -ge 1
do
M
Mark Adler 已提交
83
case "$1" in
M
Mark Adler 已提交
84
    -h* | --help)
85 86 87 88
      echo 'usage:' | tee -a configure.log
      echo '  configure [--zprefix] [--prefix=PREFIX]  [--eprefix=EXPREFIX]' | tee -a configure.log
      echo '    [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log
      echo '    [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]' | tee -a configure.log
M
Mark Adler 已提交
89
        exit 0 ;;
M
Mark Adler 已提交
90 91 92
    -p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;;
    -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;;
    -l*=* | --libdir=*) libdir=`echo $1 | sed 's/.*=//'`; shift ;;
M
Mark Adler 已提交
93
    --sharedlibdir=*) sharedlibdir=`echo $1 | sed 's/.*=//'`; shift ;;
M
Mark Adler 已提交
94 95
    -i*=* | --includedir=*) includedir=`echo $1 | sed 's/.*=//'`;shift ;;
    -u*=* | --uname=*) uname=`echo $1 | sed 's/.*=//'`;shift ;;
M
Mark Adler 已提交
96 97 98 99 100 101
    -p* | --prefix) prefix="$2"; shift; shift ;;
    -e* | --eprefix) exec_prefix="$2"; shift; shift ;;
    -l* | --libdir) libdir="$2"; shift; shift ;;
    -i* | --includedir) includedir="$2"; shift; shift ;;
    -s* | --shared | --enable-shared) shared=1; shift ;;
    -t | --static) shared=0; shift ;;
102
    --solo) solo=1; shift ;;
103
    --cover) cover=1; shift ;;
M
Mark Adler 已提交
104
    -z* | --zprefix) zprefix=1; shift ;;
M
Mark Adler 已提交
105
    -6* | --64) build64=1; shift ;;
M
Mark Adler 已提交
106
    -a*=* | --archs=*) ARCHS=`echo $1 | sed 's/.*=//'`; shift ;;
107 108 109
    --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;;
    --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;;
    *) echo "unknown option: $1"; echo "$0 --help for help" | tee -a configure.log; exit 1 ;;
M
Mark Adler 已提交
110 111
    esac
done
M
Mark Adler 已提交
112

M
Mark Adler 已提交
113
# define functions for testing compiler and library characteristics and logging the results
M
Mark Adler 已提交
114
test=ztest$$
115

116 117 118 119 120 121 122 123 124 125 126
show()
{
  case "$*" in
    *$test.c*)
      echo === $test.c === >> configure.log
      cat $test.c >> configure.log
      echo === >> configure.log;;
  esac
  echo $* >> configure.log
}

127 128 129 130 131 132
cat > $test.c <<EOF
#error error
EOF
if ($CC -c $CFLAGS $test.c) 2>/dev/null; then
  try()
  {
133 134
    show $*
    test "`( $* ) 2>&1 | tee -a configure.log`" = ""
135
  }
136
  echo - using any output from compiler to indicate an error >> configure.log
137 138 139
else
  try()
  {
140 141 142 143 144 145 146
    show $*
    ( $* ) >> configure.log 2>&1
    ret=$?
    if test $ret -ne 0; then
      echo "(exit code "$ret")" >> configure.log
    fi
    return $ret
147 148 149
  }
fi

150 151 152 153 154 155 156 157 158 159 160 161
tryboth()
{
  show $*
  got=`( $* ) 2>&1`
  ret=$?
  printf %s "$got" >> configure.log
  if test $ret -ne 0; then
    return $ret
  fi
  test "$got" = ""
}

162 163
echo >> configure.log

M
Mark Adler 已提交
164
# check for gcc vs. cc and set compile and link flags based on the system identified by uname
M
Mark Adler 已提交
165
cat > $test.c <<EOF
M
Mark Adler 已提交
166 167
extern int getchar();
int hello() {return getchar();}
M
Mark Adler 已提交
168
EOF
M
Mark Adler 已提交
169

170
test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
M
Mark Adler 已提交
171
cc=${CC-${CROSS_PREFIX}gcc}
M
Mark Adler 已提交
172
cflags=${CFLAGS-"-O3"}
M
Mark Adler 已提交
173
# to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
M
Mark Adler 已提交
174
case "$cc" in
M
Mark Adler 已提交
175
  *gcc*) gcc=1 ;;
M
Mark Adler 已提交
176
  *clang*) gcc=1 ;;
M
Mark Adler 已提交
177
esac
M
Mark Adler 已提交
178 179 180
case `$cc -v 2>&1` in
  *gcc*) gcc=1 ;;
esac
M
Mark Adler 已提交
181

182 183 184
show $cc -c $cflags $test.c
if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) >> configure.log 2>&1; then
  echo ... using gcc >> configure.log
M
Mark Adler 已提交
185
  CC="$cc"
M
Mark Adler 已提交
186
  CFLAGS="${CFLAGS--O3} ${ARCHS}"
M
Mark Adler 已提交
187
  SFLAGS="${CFLAGS--O3} -fPIC"
M
Mark Adler 已提交
188
  LDFLAGS="${LDFLAGS} ${ARCHS}"
M
Mark Adler 已提交
189 190 191 192
  if test $build64 -eq 1; then
    CFLAGS="${CFLAGS} -m64"
    SFLAGS="${SFLAGS} -m64"
  fi
M
Mark Adler 已提交
193 194 195
  if test "${ZLIBGCCWARN}" = "YES"; then
    CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
  fi
M
Mark Adler 已提交
196
  if test -z "$uname"; then
M
Mark Adler 已提交
197 198 199
    uname=`(uname -s || echo unknown) 2>/dev/null`
  fi
  case "$uname" in
200
  Linux* | linux* | GNU | GNU/* | solaris*)
M
Mark Adler 已提交
201
        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;;
202 203 204
  *BSD | *bsd* | DragonFly)
        LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"}
        LDCONFIG="ldconfig -m" ;;
M
Mark Adler 已提交
205 206
  CYGWIN* | Cygwin* | cygwin* | OS/2*)
        EXE='.exe' ;;
M
Mark Adler 已提交
207
  MINGW* | mingw*)
M
Mark Adler 已提交
208 209
# temporary bypass
        rm -f $test.[co] $test $test$shared_ext
210
        echo "Please use win32/Makefile.gcc instead." | tee -a configure.log
M
Mark Adler 已提交
211
        exit 1
M
Mark Adler 已提交
212
        LDSHARED=${LDSHARED-"$cc -shared"}
M
Mark Adler 已提交
213 214
        LDSHAREDLIBC=""
        EXE='.exe' ;;
M
Mark Adler 已提交
215 216
  QNX*)  # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4
         # (alain.bonnefoy@icbt.com)
M
Mark Adler 已提交
217
                 LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"} ;;
M
Mark Adler 已提交
218 219 220 221 222
  HP-UX*)
         LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"}
         case `(uname -m || echo unknown) 2>/dev/null` in
         ia64)
                 shared_ext='.so'
M
Mark Adler 已提交
223
                 SHAREDLIB='libz.so' ;;
M
Mark Adler 已提交
224
         *)
M
Mark Adler 已提交
225
                 shared_ext='.sl'
M
Mark Adler 已提交
226 227
                 SHAREDLIB='libz.sl' ;;
         esac ;;
M
Mark Adler 已提交
228 229
  Darwin* | darwin*)
             shared_ext='.dylib'
M
Mark Adler 已提交
230 231 232
             SHAREDLIB=libz$shared_ext
             SHAREDLIBV=libz.$VER$shared_ext
             SHAREDLIBM=libz.$VER1$shared_ext
M
Mark Adler 已提交
233 234
             LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"}
             AR="libtool"
235
             ARFLAGS="-o" ;;
M
Mark Adler 已提交
236
  *)             LDSHARED=${LDSHARED-"$cc -shared"} ;;
M
Mark Adler 已提交
237
  esac
M
Mark Adler 已提交
238 239 240
else
  # find system name and corresponding cc options
  CC=${CC-cc}
M
Mark Adler 已提交
241
  gcc=0
242
  echo ... using $CC >> configure.log
M
Mark Adler 已提交
243
  if test -z "$uname"; then
M
Mark Adler 已提交
244 245 246
    uname=`(uname -sr || echo unknown) 2>/dev/null`
  fi
  case "$uname" in
M
Mark Adler 已提交
247
  HP-UX*)    SFLAGS=${CFLAGS-"-O +z"}
M
Mark Adler 已提交
248 249 250
             CFLAGS=${CFLAGS-"-O"}
#            LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"}
             LDSHARED=${LDSHARED-"ld -b"}
M
Mark Adler 已提交
251 252 253
         case `(uname -m || echo unknown) 2>/dev/null` in
         ia64)
             shared_ext='.so'
M
Mark Adler 已提交
254
             SHAREDLIB='libz.so' ;;
M
Mark Adler 已提交
255
         *)
M
Mark Adler 已提交
256
             shared_ext='.sl'
M
Mark Adler 已提交
257 258
             SHAREDLIB='libz.sl' ;;
         esac ;;
M
Mark Adler 已提交
259
  IRIX*)     SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."}
M
Mark Adler 已提交
260
             CFLAGS=${CFLAGS-"-ansi -O2"}
M
Mark Adler 已提交
261
             LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;;
M
Mark Adler 已提交
262
  OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
263
             CFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
264 265
             LDFLAGS="${LDFLAGS} -Wl,-rpath,."
             LDSHARED=${LDSHARED-"cc -shared  -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"} ;;
M
Mark Adler 已提交
266
  OSF1*)     SFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
267
             CFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
268
             LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;;
M
Mark Adler 已提交
269 270
  QNX*)      SFLAGS=${CFLAGS-"-4 -O"}
             CFLAGS=${CFLAGS-"-4 -O"}
M
Mark Adler 已提交
271
             LDSHARED=${LDSHARED-"cc"}
M
Mark Adler 已提交
272
             RANLIB=${RANLIB-"true"}
273 274
             AR="cc"
             ARFLAGS="-A" ;;
M
Mark Adler 已提交
275
  SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "}
M
Mark Adler 已提交
276
             CFLAGS=${CFLAGS-"-O3"}
M
Mark Adler 已提交
277
             LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;;
M
Mark Adler 已提交
278
  SunOS\ 5* | solaris*)
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
         LDSHARED=${LDSHARED-"cc -G -h libz$shared_ext.$VER1"}
         SFLAGS=${CFLAGS-"-fast -KPIC -R."}
         CFLAGS=${CFLAGS-"-fast"}
         if test $build64 -eq 1; then
             # old versions of SunPRO/Workshop/Studio don't support -m64,
             # but newer ones do.  Check for it.
             flag64=`$CC -flags | egrep -- '^-m64'`
             if test x"$flag64" != x"" ; then
                 CFLAGS="${CFLAGS} -m64"
                 SFLAGS="${SFLAGS} -m64"
             else
                 case `(uname -m || echo unknown) 2>/dev/null` in
                   i86*)
                     SFLAGS="$SFLAGS -xarch=amd64"
                     CFLAGS="$CFLAGS -xarch=amd64" ;;
                   *)
                     SFLAGS="$SFLAGS -xarch=v9"
                     CFLAGS="$CFLAGS -xarch=v9" ;;
                 esac
             fi
         fi
         ;;
M
Mark Adler 已提交
301
  SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"}
M
Mark Adler 已提交
302
             CFLAGS=${CFLAGS-"-O2"}
M
Mark Adler 已提交
303
             LDSHARED=${LDSHARED-"ld"} ;;
M
Mark Adler 已提交
304 305
  SunStudio\ 9*) SFLAGS=${CFLAGS-"-fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"}
             CFLAGS=${CFLAGS-"-fast -xtarget=ultra3 -xarch=v9b"}
M
Mark Adler 已提交
306
             LDSHARED=${LDSHARED-"cc -xarch=v9b"} ;;
M
Mark Adler 已提交
307 308 309
  UNIX_System_V\ 4.2.0)
             SFLAGS=${CFLAGS-"-KPIC -O"}
             CFLAGS=${CFLAGS-"-O"}
M
Mark Adler 已提交
310
             LDSHARED=${LDSHARED-"cc -G"} ;;
M
Mark Adler 已提交
311
  UNIX_SV\ 4.2MP)
M
Mark Adler 已提交
312 313
             SFLAGS=${CFLAGS-"-Kconform_pic -O"}
             CFLAGS=${CFLAGS-"-O"}
M
Mark Adler 已提交
314
             LDSHARED=${LDSHARED-"cc -G"} ;;
M
Mark Adler 已提交
315 316 317
  OpenUNIX\ 5)
             SFLAGS=${CFLAGS-"-KPIC -O"}
             CFLAGS=${CFLAGS-"-O"}
M
Mark Adler 已提交
318
             LDSHARED=${LDSHARED-"cc -G"} ;;
M
Mark Adler 已提交
319
  AIX*)  # Courtesy of dbakker@arrayasolutions.com
M
Mark Adler 已提交
320 321
             SFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
             CFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
M
Mark Adler 已提交
322
             LDSHARED=${LDSHARED-"xlc -G"} ;;
M
Mark Adler 已提交
323
  # send working options for other systems to zlib@gzip.org
M
Mark Adler 已提交
324
  *)         SFLAGS=${CFLAGS-"-O"}
M
Mark Adler 已提交
325
             CFLAGS=${CFLAGS-"-O"}
M
Mark Adler 已提交
326
             LDSHARED=${LDSHARED-"cc -shared"} ;;
M
Mark Adler 已提交
327 328 329
  esac
fi

M
Mark Adler 已提交
330
# destination names for shared library if not defined above
M
Mark Adler 已提交
331 332 333 334
SHAREDLIB=${SHAREDLIB-"libz$shared_ext"}
SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"}
SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"}

335 336
echo >> configure.log

M
Mark Adler 已提交
337
# see if shared library build supported
M
Mark Adler 已提交
338
if test $shared -eq 1; then
339
  echo Checking for shared library support... | tee -a configure.log
M
Mark Adler 已提交
340
  # we must test in two steps (cc then ld), required at least on SunOS 4.x
341 342
  if try $CC -w -c $SFLAGS $test.c &&
     try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then
343
    echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log
M
Mark Adler 已提交
344
  elif test -z "$old_cc" -a -z "$old_cflags"; then
345
    echo No shared library support. | tee -a configure.log
M
Mark Adler 已提交
346
    shared=0;
M
Mark Adler 已提交
347
  else
348
    echo 'No shared library support; try without defining CC and CFLAGS' | tee -a configure.log
M
Mark Adler 已提交
349
    shared=0;
M
Mark Adler 已提交
350 351 352
  fi
fi
if test $shared -eq 0; then
M
Mark Adler 已提交
353
  LDSHARED="$CC"
M
Mark Adler 已提交
354 355
  ALL="static"
  TEST="all teststatic"
M
Mark Adler 已提交
356 357 358
  SHAREDLIB=""
  SHAREDLIBV=""
  SHAREDLIBM=""
359
  echo Building static library $STATICLIB version $VER with $CC. | tee -a configure.log
M
Mark Adler 已提交
360
else
M
Mark Adler 已提交
361 362
  ALL="static shared"
  TEST="all teststatic testshared"
M
Mark Adler 已提交
363 364
fi

M
Mark Adler 已提交
365 366 367
echo >> configure.log

# check for underscores in external names for use by assembler code
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382
CPP=${CPP-"$CC -E"}
case $CFLAGS in
  *ASMV*)
    echo >> configure.log
    show "$NM $test.o | grep _hello"
    if test "`$NM $test.o | grep _hello | tee -a configure.log`" = ""; then
      CPP="$CPP -DNO_UNDERLINE"
      echo Checking for underline in external names... No. | tee -a configure.log
    else
      echo Checking for underline in external names... Yes. | tee -a configure.log
    fi ;;
esac

echo >> configure.log

M
Mark Adler 已提交
383
# check for large file support, and if none, check for fseeko()
M
Mark Adler 已提交
384 385 386 387
cat > $test.c <<EOF
#include <sys/types.h>
off64_t dummy = 0;
EOF
388
if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then
M
Mark Adler 已提交
389 390
  CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1"
  SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1"
M
Mark Adler 已提交
391 392
  ALL="${ALL} all64"
  TEST="${TEST} test64"
393 394
  echo "Checking for off64_t... Yes." | tee -a configure.log
  echo "Checking for fseeko... Yes." | tee -a configure.log
M
Mark Adler 已提交
395
else
396 397
  echo "Checking for off64_t... No." | tee -a configure.log
  echo >> configure.log
M
Mark Adler 已提交
398 399 400 401 402 403 404
  cat > $test.c <<EOF
#include <stdio.h>
int main(void) {
  fseeko(NULL, 0, 0);
  return 0;
}
EOF
405
  if try $CC $CFLAGS -o $test $test.c; then
406
    echo "Checking for fseeko... Yes." | tee -a configure.log
M
Mark Adler 已提交
407 408 409
  else
    CFLAGS="${CFLAGS} -DNO_FSEEKO"
    SFLAGS="${SFLAGS} -DNO_FSEEKO"
410
    echo "Checking for fseeko... No." | tee -a configure.log
M
Mark Adler 已提交
411
  fi
M
Mark Adler 已提交
412
fi
M
Mark Adler 已提交
413

M
Mark Adler 已提交
414 415
echo >> configure.log

M
Mark Adler 已提交
416
# check for strerror() for use by gz* functions
M
Mark Adler 已提交
417 418 419 420 421 422 423 424 425 426 427 428 429
cat > $test.c <<EOF
#include <string.h>
#include <errno.h>
int main() { return strlen(strerror(errno)); }
EOF
if try $CC $CFLAGS -o $test $test.c; then
  echo "Checking for strerror... Yes." | tee -a configure.log
else
  CFLAGS="${CFLAGS} -DNO_STRERROR"
  SFLAGS="${SFLAGS} -DNO_STRERROR"
  echo "Checking for strerror... No." | tee -a configure.log
fi

M
Mark Adler 已提交
430
# copy clean zconf.h for subsequent edits
M
Mark Adler 已提交
431
cp -p zconf.h.in zconf.h
M
Mark Adler 已提交
432

433 434
echo >> configure.log

M
Mark Adler 已提交
435
# check for unistd.h and save result in zconf.h
M
Mark Adler 已提交
436 437 438 439
cat > $test.c <<EOF
#include <unistd.h>
int main() { return 0; }
EOF
440
if try $CC -c $CFLAGS $test.c; then
M
Mark Adler 已提交
441
  sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
M
Mark Adler 已提交
442
  mv zconf.temp.h zconf.h
443
  echo "Checking for unistd.h... Yes." | tee -a configure.log
M
Mark Adler 已提交
444
else
445
  echo "Checking for unistd.h... No." | tee -a configure.log
M
Mark Adler 已提交
446 447
fi

448 449
echo >> configure.log

M
Mark Adler 已提交
450
# check for stdarg.h and save result in zconf.h
M
Mark Adler 已提交
451 452 453 454
cat > $test.c <<EOF
#include <stdarg.h>
int main() { return 0; }
EOF
455
if try $CC -c $CFLAGS $test.c; then
M
Mark Adler 已提交
456 457
  sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
  mv zconf.temp.h zconf.h
458
  echo "Checking for stdarg.h... Yes." | tee -a configure.log
M
Mark Adler 已提交
459
else
460
  echo "Checking for stdarg.h... No." | tee -a configure.log
M
Mark Adler 已提交
461 462
fi

M
Mark Adler 已提交
463
# if the z_ prefix was requested, save that in zconf.h
M
Mark Adler 已提交
464
if test $zprefix -eq 1; then
M
Mark Adler 已提交
465
  sed < zconf.h "/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\(.*\) may be/ 1\1 was/" > zconf.temp.h
M
Mark Adler 已提交
466
  mv zconf.temp.h zconf.h
467 468
  echo >> configure.log
  echo "Using z_ prefix on all symbols." | tee -a configure.log
M
Mark Adler 已提交
469 470
fi

M
Mark Adler 已提交
471
# if --solo compilation was requested, save that in zconf.h and remove gz stuff from object lists
472 473 474 475 476 477 478 479 480 481
if test $solo -eq 1; then
  sed '/#define ZCONF_H/a\
#define Z_SOLO

' < zconf.h > zconf.temp.h
  mv zconf.temp.h zconf.h
OBJC='$(OBJZ)'
PIC_OBJC='$(PIC_OBJZ)'
fi

M
Mark Adler 已提交
482
# if code coverage testing was requested, use older gcc if defined, e.g. "gcc-4.2" on Mac OS X
483 484
if test $cover -eq 1; then
  CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage"
485 486 487
  if test -n "$GCC_CLASSIC"; then
    CC=$GCC_CLASSIC
  fi
488 489
fi

490 491
echo >> configure.log

M
Mark Adler 已提交
492 493 494 495
# conduct a series of tests to resolve eight possible cases of using "vs" or "s" printf functions
# (using stdarg or not), with or without "n" (proving size of buffer), and with or without a
# return value.  The most secure result is vsnprintf() with a return value.  snprintf() with a
# return value is secure as well, but then gzprintf() will be limited to 20 arguments.
M
Mark Adler 已提交
496
cat > $test.c <<EOF
M
Mark Adler 已提交
497
#include <stdio.h>
M
Mark Adler 已提交
498 499
#include <stdarg.h>
#include "zconf.h"
M
Mark Adler 已提交
500
int main()
M
Mark Adler 已提交
501 502 503 504 505 506 507
{
#ifndef STDC
  choke me
#endif
  return 0;
}
EOF
508
if try $CC -c $CFLAGS $test.c; then
509
  echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | tee -a configure.log
M
Mark Adler 已提交
510

511
  echo >> configure.log
M
Mark Adler 已提交
512 513 514
  cat > $test.c <<EOF
#include <stdio.h>
#include <stdarg.h>
M
Mark Adler 已提交
515
int mytest(const char *fmt, ...)
M
Mark Adler 已提交
516 517 518 519 520 521 522 523 524 525 526 527 528
{
  char buf[20];
  va_list ap;
  va_start(ap, fmt);
  vsnprintf(buf, sizeof(buf), fmt, ap);
  va_end(ap);
  return 0;
}
int main()
{
  return (mytest("Hello%d\n", 1));
}
EOF
529
  if try $CC $CFLAGS -o $test $test.c; then
530
    echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log
M
Mark Adler 已提交
531

532
    echo >> configure.log
M
Mark Adler 已提交
533 534 535
    cat >$test.c <<EOF
#include <stdio.h>
#include <stdarg.h>
M
Mark Adler 已提交
536
int mytest(const char *fmt, ...)
M
Mark Adler 已提交
537
{
M
Mark Adler 已提交
538
  int n;
M
Mark Adler 已提交
539 540 541
  char buf[20];
  va_list ap;
  va_start(ap, fmt);
M
Mark Adler 已提交
542
  n = vsnprintf(buf, sizeof(buf), fmt, ap);
M
Mark Adler 已提交
543
  va_end(ap);
M
Mark Adler 已提交
544
  return n;
M
Mark Adler 已提交
545 546 547 548 549 550 551
}
int main()
{
  return (mytest("Hello%d\n", 1));
}
EOF

552
    if try $CC -c $CFLAGS $test.c; then
553
      echo "Checking for return value of vsnprintf()... Yes." | tee -a configure.log
M
Mark Adler 已提交
554 555
    else
      CFLAGS="$CFLAGS -DHAS_vsnprintf_void"
M
Mark Adler 已提交
556
      SFLAGS="$SFLAGS -DHAS_vsnprintf_void"
557 558 559 560
      echo "Checking for return value of vsnprintf()... No." | tee -a configure.log
      echo "  WARNING: apparently vsnprintf() does not return a value. zlib" | tee -a configure.log
      echo "  can build but will be open to possible string-format security" | tee -a configure.log
      echo "  vulnerabilities." | tee -a configure.log
M
Mark Adler 已提交
561 562 563
    fi
  else
    CFLAGS="$CFLAGS -DNO_vsnprintf"
M
Mark Adler 已提交
564
    SFLAGS="$SFLAGS -DNO_vsnprintf"
565 566 567 568
    echo "Checking for vsnprintf() in stdio.h... No." | tee -a configure.log
    echo "  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | tee -a configure.log
    echo "  can build but will be open to possible buffer-overflow security" | tee -a configure.log
    echo "  vulnerabilities." | tee -a configure.log
M
Mark Adler 已提交
569

570
    echo >> configure.log
M
Mark Adler 已提交
571 572 573
    cat >$test.c <<EOF
#include <stdio.h>
#include <stdarg.h>
M
Mark Adler 已提交
574
int mytest(const char *fmt, ...)
M
Mark Adler 已提交
575
{
M
Mark Adler 已提交
576
  int n;
M
Mark Adler 已提交
577 578 579
  char buf[20];
  va_list ap;
  va_start(ap, fmt);
M
Mark Adler 已提交
580
  n = vsprintf(buf, fmt, ap);
M
Mark Adler 已提交
581
  va_end(ap);
M
Mark Adler 已提交
582
  return n;
M
Mark Adler 已提交
583
}
M
Mark Adler 已提交
584
int main()
M
Mark Adler 已提交
585 586 587 588 589
{
  return (mytest("Hello%d\n", 1));
}
EOF

590
    if try $CC -c $CFLAGS $test.c; then
591
      echo "Checking for return value of vsprintf()... Yes." | tee -a configure.log
M
Mark Adler 已提交
592 593
    else
      CFLAGS="$CFLAGS -DHAS_vsprintf_void"
M
Mark Adler 已提交
594
      SFLAGS="$SFLAGS -DHAS_vsprintf_void"
595 596 597 598
      echo "Checking for return value of vsprintf()... No." | tee -a configure.log
      echo "  WARNING: apparently vsprintf() does not return a value. zlib" | tee -a configure.log
      echo "  can build but will be open to possible string-format security" | tee -a configure.log
      echo "  vulnerabilities." | tee -a configure.log
M
Mark Adler 已提交
599 600 601
    fi
  fi
else
602
  echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()." | tee -a configure.log
M
Mark Adler 已提交
603

604
  echo >> configure.log
M
Mark Adler 已提交
605 606
  cat >$test.c <<EOF
#include <stdio.h>
M
Mark Adler 已提交
607
int mytest()
M
Mark Adler 已提交
608 609 610 611 612
{
  char buf[20];
  snprintf(buf, sizeof(buf), "%s", "foo");
  return 0;
}
M
Mark Adler 已提交
613
int main()
M
Mark Adler 已提交
614 615 616 617 618
{
  return (mytest());
}
EOF

619
  if try $CC $CFLAGS -o $test $test.c; then
620
    echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log
M
Mark Adler 已提交
621

622
    echo >> configure.log
M
Mark Adler 已提交
623 624
    cat >$test.c <<EOF
#include <stdio.h>
M
Mark Adler 已提交
625
int mytest()
M
Mark Adler 已提交
626 627
{
  char buf[20];
M
Mark Adler 已提交
628
  return snprintf(buf, sizeof(buf), "%s", "foo");
M
Mark Adler 已提交
629
}
M
Mark Adler 已提交
630
int main()
M
Mark Adler 已提交
631 632 633 634 635
{
  return (mytest());
}
EOF

636
    if try $CC -c $CFLAGS $test.c; then
637
      echo "Checking for return value of snprintf()... Yes." | tee -a configure.log
M
Mark Adler 已提交
638 639
    else
      CFLAGS="$CFLAGS -DHAS_snprintf_void"
M
Mark Adler 已提交
640
      SFLAGS="$SFLAGS -DHAS_snprintf_void"
641 642 643 644
      echo "Checking for return value of snprintf()... No." | tee -a configure.log
      echo "  WARNING: apparently snprintf() does not return a value. zlib" | tee -a configure.log
      echo "  can build but will be open to possible string-format security" | tee -a configure.log
      echo "  vulnerabilities." | tee -a configure.log
M
Mark Adler 已提交
645 646 647
    fi
  else
    CFLAGS="$CFLAGS -DNO_snprintf"
M
Mark Adler 已提交
648
    SFLAGS="$SFLAGS -DNO_snprintf"
649 650 651 652
    echo "Checking for snprintf() in stdio.h... No." | tee -a configure.log
    echo "  WARNING: snprintf() not found, falling back to sprintf(). zlib" | tee -a configure.log
    echo "  can build but will be open to possible buffer-overflow security" | tee -a configure.log
    echo "  vulnerabilities." | tee -a configure.log
M
Mark Adler 已提交
653

654
    echo >> configure.log
M
Mark Adler 已提交
655 656
    cat >$test.c <<EOF
#include <stdio.h>
M
Mark Adler 已提交
657
int mytest()
M
Mark Adler 已提交
658 659
{
  char buf[20];
M
Mark Adler 已提交
660
  return sprintf(buf, "%s", "foo");
M
Mark Adler 已提交
661
}
M
Mark Adler 已提交
662
int main()
M
Mark Adler 已提交
663 664 665 666 667
{
  return (mytest());
}
EOF

668
    if try $CC -c $CFLAGS $test.c; then
669
      echo "Checking for return value of sprintf()... Yes." | tee -a configure.log
M
Mark Adler 已提交
670 671
    else
      CFLAGS="$CFLAGS -DHAS_sprintf_void"
M
Mark Adler 已提交
672
      SFLAGS="$SFLAGS -DHAS_sprintf_void"
673 674 675 676
      echo "Checking for return value of sprintf()... No." | tee -a configure.log
      echo "  WARNING: apparently sprintf() does not return a value. zlib" | tee -a configure.log
      echo "  can build but will be open to possible string-format security" | tee -a configure.log
      echo "  vulnerabilities." | tee -a configure.log
M
Mark Adler 已提交
677 678 679 680
    fi
  fi
fi

M
Mark Adler 已提交
681
# see if we can hide zlib internal symbols that are linked between separate source files
M
Mark Adler 已提交
682
if test "$gcc" -eq 1; then
683
  echo >> configure.log
M
Mark Adler 已提交
684
  cat > $test.c <<EOF
685
#define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
M
Mark Adler 已提交
686
int ZLIB_INTERNAL foo;
M
Mark Adler 已提交
687 688 689 690 691
int main()
{
  return 0;
}
EOF
692
  if tryboth $CC -c $CFLAGS $test.c; then
693 694
    CFLAGS="$CFLAGS -DHAVE_HIDDEN"
    SFLAGS="$SFLAGS -DHAVE_HIDDEN"
695
    echo "Checking for attribute(visibility) support... Yes." | tee -a configure.log
M
Mark Adler 已提交
696
  else
697
    echo "Checking for attribute(visibility) support... No." | tee -a configure.log
M
Mark Adler 已提交
698
  fi
M
Mark Adler 已提交
699 700
fi

M
Mark Adler 已提交
701
# clean up files produced by running the compiler and linker
702
rm -f $test.[co] $test $test$shared_ext $test.gcno
M
Mark Adler 已提交
703

704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737
# show the results in the log
echo >> configure.log
echo ALL = $ALL >> configure.log
echo AR = $AR >> configure.log
echo ARFLAGS = $ARFLAGS >> configure.log
echo CC = $CC >> configure.log
echo CFLAGS = $CFLAGS >> configure.log
echo CPP = $CPP >> configure.log
echo EXE = $EXE >> configure.log
echo LDCONFIG = $LDCONFIG >> configure.log
echo LDFLAGS = $LDFLAGS >> configure.log
echo LDSHARED = $LDSHARED >> configure.log
echo LDSHAREDLIBC = $LDSHAREDLIBC >> configure.log
echo OBJC = $OBJC >> configure.log
echo PIC_OBJC = $PIC_OBJC >> configure.log
echo RANLIB = $RANLIB >> configure.log
echo SFLAGS = $SFLAGS >> configure.log
echo SHAREDLIB = $SHAREDLIB >> configure.log
echo SHAREDLIBM = $SHAREDLIBM >> configure.log
echo SHAREDLIBV = $SHAREDLIBV >> configure.log
echo STATICLIB = $STATICLIB >> configure.log
echo TEST = $TEST >> configure.log
echo VER = $VER >> configure.log
echo exec_prefix = $exec_prefix >> configure.log
echo includedir = $includedir >> configure.log
echo libdir = $libdir >> configure.log
echo mandir = $mandir >> configure.log
echo prefix = $prefix >> configure.log
echo sharedlibdir = $sharedlibdir >> configure.log
echo uname = $uname >> configure.log
echo -------------------- >> configure.log
echo >> configure.log
echo >> configure.log

M
Mark Adler 已提交
738
# udpate Makefile with the configure results
M
Mark Adler 已提交
739
sed < Makefile.in "
M
Mark Adler 已提交
740 741
/^CC *=/s#=.*#=$CC#
/^CFLAGS *=/s#=.*#=$CFLAGS#
M
Mark Adler 已提交
742
/^SFLAGS *=/s#=.*#=$SFLAGS#
M
Mark Adler 已提交
743
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
M
Mark Adler 已提交
744
/^LDSHARED *=/s#=.*#=$LDSHARED#
M
Mark Adler 已提交
745
/^CPP *=/s#=.*#=$CPP#
M
Mark Adler 已提交
746
/^STATICLIB *=/s#=.*#=$STATICLIB#
M
Mark Adler 已提交
747 748 749
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
750 751
/^AR *=/s#=.*#=$AR#
/^ARFLAGS *=/s#=.*#=$ARFLAGS#
M
Mark Adler 已提交
752
/^RANLIB *=/s#=.*#=$RANLIB#
M
Mark Adler 已提交
753 754
/^LDCONFIG *=/s#=.*#=$LDCONFIG#
/^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC#
M
Mark Adler 已提交
755
/^EXE *=/s#=.*#=$EXE#
M
Mark Adler 已提交
756 757 758
/^prefix *=/s#=.*#=$prefix#
/^exec_prefix *=/s#=.*#=$exec_prefix#
/^libdir *=/s#=.*#=$libdir#
M
Mark Adler 已提交
759
/^sharedlibdir *=/s#=.*#=$sharedlibdir#
M
Mark Adler 已提交
760 761
/^includedir *=/s#=.*#=$includedir#
/^mandir *=/s#=.*#=$mandir#
762 763
/^OBJC *=/s#=.*#= $OBJC#
/^PIC_OBJC *=/s#=.*#= $PIC_OBJC#
M
Mark Adler 已提交
764 765
/^all: */s#:.*#: $ALL#
/^test: */s#:.*#: $TEST#
M
Mark Adler 已提交
766
" > Makefile
M
Mark Adler 已提交
767

M
Mark Adler 已提交
768
# create zlib.pc with the configure results
M
Mark Adler 已提交
769 770 771 772 773
sed < zlib.pc.in "
/^CC *=/s#=.*#=$CC#
/^CFLAGS *=/s#=.*#=$CFLAGS#
/^CPP *=/s#=.*#=$CPP#
/^LDSHARED *=/s#=.*#=$LDSHARED#
M
Mark Adler 已提交
774
/^STATICLIB *=/s#=.*#=$STATICLIB#
M
Mark Adler 已提交
775 776 777
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
778 779
/^AR *=/s#=.*#=$AR#
/^ARFLAGS *=/s#=.*#=$ARFLAGS#
M
Mark Adler 已提交
780 781 782 783 784
/^RANLIB *=/s#=.*#=$RANLIB#
/^EXE *=/s#=.*#=$EXE#
/^prefix *=/s#=.*#=$prefix#
/^exec_prefix *=/s#=.*#=$exec_prefix#
/^libdir *=/s#=.*#=$libdir#
M
Mark Adler 已提交
785
/^sharedlibdir *=/s#=.*#=$sharedlibdir#
M
Mark Adler 已提交
786 787 788 789 790 791
/^includedir *=/s#=.*#=$includedir#
/^mandir *=/s#=.*#=$mandir#
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
" | sed -e "
s/\@VERSION\@/$VER/g;
" > zlib.pc