configure 12.4 KB
Newer Older
M
Mark Adler 已提交
1 2 3 4 5 6
#!/bin/sh
# configure script for zlib. This script is needed only if
# you wish to build a shared library and your system supports them,
# of if you need special compiler, flags or install directory.
# Otherwise, you can just use directly "make test; make install"
#
M
Mark Adler 已提交
7 8 9 10
# To create a shared library, use "configure --shared"; by default a static
# library is created. If the primitive shared library support provided here
# does not work, use ftp://prep.ai.mit.edu/pub/gnu/libtool-*.tar.gz
#
M
Mark Adler 已提交
11 12 13 14 15 16
# 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)
# LDSHARED is the command to be used to create a shared library

M
Mark Adler 已提交
17 18 19 20
# 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 已提交
21
LIBS=libz.a
M
Mark Adler 已提交
22
LDFLAGS="-L. ${LIBS}"
M
Mark Adler 已提交
23
VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
M
Mark Adler 已提交
24 25
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 已提交
26 27 28
AR=${AR-"ar rc"}
RANLIB=${RANLIB-"ranlib"}
prefix=${prefix-/usr/local}
M
Mark Adler 已提交
29 30 31
exec_prefix=${exec_prefix-'${prefix}'}
libdir=${libdir-'${exec_prefix}/lib'}
includedir=${includedir-'${prefix}/include'}
M
Mark Adler 已提交
32
mandir=${mandir-'${prefix}/share/man'}
M
Mark Adler 已提交
33 34
shared_ext='.so'
shared=0
M
Mark Adler 已提交
35
gcc=0
M
Mark Adler 已提交
36 37
old_cc="$CC"
old_cflags="$CFLAGS"
M
Mark Adler 已提交
38

M
Mark Adler 已提交
39 40
while test $# -ge 1
do
M
Mark Adler 已提交
41
case "$1" in
M
Mark Adler 已提交
42 43 44 45 46 47 48 49 50 51 52 53 54 55
    -h* | --h*)
      echo 'usage:'
      echo '  configure [--shared] [--prefix=PREFIX]  [--exec_prefix=EXPREFIX]'
      echo '     [--libdir=LIBDIR] [--includedir=INCLUDEDIR]'
        exit 0;;
    -p*=* | --p*=*) prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;;
    -e*=* | --e*=*) exec_prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;;
    -l*=* | --libdir=*) libdir=`echo $1 | sed 's/[-a-z_]*=//'`; shift;;
    -i*=* | --includedir=*) includedir=`echo $1 | sed 's/[-a-z_]*=//'`;shift;;
    -p* | --p*) prefix="$2"; shift; shift;;
    -e* | --e*) exec_prefix="$2"; shift; shift;;
    -l* | --l*) libdir="$2"; shift; shift;;
    -i* | --i*) includedir="$2"; shift; shift;;
    -s* | --s*) shared=1; shift;;
M
Mark Adler 已提交
56
    *) echo "unknown option: $1"; echo "$0 --help for help"; exit 1;;
M
Mark Adler 已提交
57 58
    esac
done
M
Mark Adler 已提交
59 60 61

test=ztest$$
cat > $test.c <<EOF
M
Mark Adler 已提交
62 63
extern int getchar();
int hello() {return getchar();}
M
Mark Adler 已提交
64
EOF
M
Mark Adler 已提交
65 66 67 68

test -z "$CC" && echo Checking for gcc...
cc=${CC-gcc}
cflags=${CFLAGS-"-O3"}
M
Mark Adler 已提交
69
# to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
M
Mark Adler 已提交
70 71 72 73 74 75
case "$cc" in
  *gcc*) gcc=1;;
esac

if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then
  CC="$cc"
M
Mark Adler 已提交
76
  SFLAGS=${CFLAGS-"-fPIC -O3"}
M
Mark Adler 已提交
77
  CFLAGS="$cflags"
M
Mark Adler 已提交
78
  case `(uname -s || echo unknown) 2>/dev/null` in
M
Mark Adler 已提交
79
  Linux | linux) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1"};;
M
Mark Adler 已提交
80 81
  CYGWIN* | Cygwin* | cygwin* )
             EXE='.exe';;
M
Mark Adler 已提交
82 83 84
  QNX*)  # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4
         # (alain.bonnefoy@icbt.com)
                 LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"};;
M
Mark Adler 已提交
85 86 87
  HP-UX*)        LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"}
                 shared_ext='.sl'
                 SHAREDLIB='libz.sl';;
M
Mark Adler 已提交
88 89 90 91 92 93 94
  Darwin*)   shared_ext='.dylib'
             SHAREDLIB=libz$shared_ext
             SHAREDLIBV=libz.$VER$shared_ext
             SHAREDLIBM=libz.$VER1$shared_ext
             LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name /usr/lib/$SHAREDLIBV -compatibility_version $VER2 -current_version $VER"}
             libdir='/usr/lib'
             includedir='/usr/include';;
M
Mark Adler 已提交
95
  *)             LDSHARED=${LDSHARED-"$cc -shared"};;
M
Mark Adler 已提交
96
  esac
M
Mark Adler 已提交
97 98 99 100
else
  # find system name and corresponding cc options
  CC=${CC-cc}
  case `(uname -sr || echo unknown) 2>/dev/null` in
M
Mark Adler 已提交
101
  HP-UX*)    SFLAGS=${CFLAGS-"-O +z"}
M
Mark Adler 已提交
102 103 104 105 106
             CFLAGS=${CFLAGS-"-O"}
#            LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"}
             LDSHARED=${LDSHARED-"ld -b"}
             shared_ext='.sl'
             SHAREDLIB='libz.sl';;
M
Mark Adler 已提交
107
  IRIX*)     SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."}
M
Mark Adler 已提交
108 109
             CFLAGS=${CFLAGS-"-ansi -O2"}
             LDSHARED=${LDSHARED-"cc -shared"};;
M
Mark Adler 已提交
110
  OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
111
             CFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
112
             LDSHARED=${LDSHARED-"cc -shared  -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"};;
M
Mark Adler 已提交
113
  OSF1*)     SFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
114 115
             CFLAGS=${CFLAGS-"-O -std1"}
             LDSHARED=${LDSHARED-"cc -shared"};;
M
Mark Adler 已提交
116 117
  QNX*)      SFLAGS=${CFLAGS-"-4 -O"}
             CFLAGS=${CFLAGS-"-4 -O"}
M
Mark Adler 已提交
118
             LDSHARED=${LDSHARED-"cc"}
M
Mark Adler 已提交
119 120 121
             RANLIB=${RANLIB-"true"}
             AR="cc -A";;
  SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "}
M
Mark Adler 已提交
122 123
             CFLAGS=${CFLAGS-"-O3"}
             LDSHARED=${LDSHARED-"cc -dy -KPIC -G"};;
M
Mark Adler 已提交
124 125
  SunOS\ 5*) SFLAGS=${CFLAGS-"-fast -xcg89 -KPIC -R."}
             CFLAGS=${CFLAGS-"-fast -xcg89"}
M
Mark Adler 已提交
126
             LDSHARED=${LDSHARED-"cc -G"};;
M
Mark Adler 已提交
127
  SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"}
M
Mark Adler 已提交
128 129 130 131 132 133
             CFLAGS=${CFLAGS-"-O2"}
             LDSHARED=${LDSHARED-"ld"};;
  UNIX_System_V\ 4.2.0)
             SFLAGS=${CFLAGS-"-KPIC -O"}
             CFLAGS=${CFLAGS-"-O"}
             LDSHARED=${LDSHARED-"cc -G"};;
M
Mark Adler 已提交
134
  UNIX_SV\ 4.2MP)
M
Mark Adler 已提交
135 136 137 138 139 140 141
             SFLAGS=${CFLAGS-"-Kconform_pic -O"}
             CFLAGS=${CFLAGS-"-O"}
             LDSHARED=${LDSHARED-"cc -G"};;
  OpenUNIX\ 5)
             SFLAGS=${CFLAGS-"-KPIC -O"}
             CFLAGS=${CFLAGS-"-O"}
             LDSHARED=${LDSHARED-"cc -G"};;
M
Mark Adler 已提交
142
  AIX*)  # Courtesy of dbakker@arrayasolutions.com
M
Mark Adler 已提交
143 144 145
             SFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
             CFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
             LDSHARED=${LDSHARED-"xlc -G"};;
M
Mark Adler 已提交
146
  # send working options for other systems to support@gzip.org
M
Mark Adler 已提交
147
  *)         SFLAGS=${CFLAGS-"-O"}
M
Mark Adler 已提交
148 149
             CFLAGS=${CFLAGS-"-O"}
             LDSHARED=${LDSHARED-"cc -shared"};;
M
Mark Adler 已提交
150 151 152
  esac
fi

M
Mark Adler 已提交
153 154 155 156
SHAREDLIB=${SHAREDLIB-"libz$shared_ext"}
SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"}
SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"}

M
Mark Adler 已提交
157 158 159 160 161 162
if test $shared -eq 1; then
  echo Checking for shared library support...
  # we must test in two steps (cc then ld), required at least on SunOS 4.x
  if test "`($CC -c $SFLAGS $test.c) 2>&1`" = "" &&
     test "`($LDSHARED -o $test$shared_ext $test.o) 2>&1`" = ""; then
    CFLAGS="$SFLAGS"
M
Mark Adler 已提交
163 164
    LIBS="$SHAREDLIBV"
    echo Building shared library $SHAREDLIBV with $CC.
M
Mark Adler 已提交
165
  elif test -z "$old_cc" -a -z "$old_cflags"; then
M
Mark Adler 已提交
166
    echo No shared library support.
M
Mark Adler 已提交
167
    shared=0;
M
Mark Adler 已提交
168
  else
M
Mark Adler 已提交
169
    echo 'No shared library support; try without defining CC and CFLAGS'
M
Mark Adler 已提交
170
    shared=0;
M
Mark Adler 已提交
171 172 173
  fi
fi
if test $shared -eq 0; then
M
Mark Adler 已提交
174 175
  LDSHARED="$CC"
  echo Building static library $LIBS version $VER with $CC.
M
Mark Adler 已提交
176 177
else
  LDFLAGS="-L. ${SHAREDLIBV}"
M
Mark Adler 已提交
178
fi
M
Mark Adler 已提交
179

M
Mark Adler 已提交
180 181 182 183 184
cat > $test.c <<EOF
#include <unistd.h>
int main() { return 0; }
EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
M
Mark Adler 已提交
185
  sed < zconf.in.h "/HAVE_UNISTD_H/s%0%1%" > zconf.h
M
Mark Adler 已提交
186 187
  echo "Checking for unistd.h... Yes."
else
M
Mark Adler 已提交
188
  cp -p zconf.in.h zconf.h
M
Mark Adler 已提交
189
  echo "Checking for unistd.h... No."
M
Mark Adler 已提交
190 191
fi

M
Mark Adler 已提交
192
cat > $test.c <<EOF
M
Mark Adler 已提交
193
#include <stdio.h>
M
Mark Adler 已提交
194 195
#include <stdarg.h>
#include "zconf.h"
M
Mark Adler 已提交
196

M
Mark Adler 已提交
197
int main()
M
Mark Adler 已提交
198 199 200 201 202 203 204 205 206 207
{
#ifndef STDC
  choke me
#endif

  return 0;
}
EOF

if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
M
Mark Adler 已提交
208
  echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()"
M
Mark Adler 已提交
209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229

  cat > $test.c <<EOF
#include <stdio.h>
#include <stdarg.h>

int mytest(char *fmt, ...)
{
  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
M
Mark Adler 已提交
230

M
Mark Adler 已提交
231
  if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
M
Mark Adler 已提交
232 233 234 235 236 237 238 239
    echo "Checking for vsnprintf() in stdio.h... Yes."

    cat >$test.c <<EOF
#include <stdio.h>
#include <stdarg.h>

int mytest(char *fmt, ...)
{
M
Mark Adler 已提交
240
  int n;
M
Mark Adler 已提交
241 242 243 244
  char buf[20];
  va_list ap;

  va_start(ap, fmt);
M
Mark Adler 已提交
245
  n = vsnprintf(buf, sizeof(buf), fmt, ap);
M
Mark Adler 已提交
246
  va_end(ap);
M
Mark Adler 已提交
247
  return n;
M
Mark Adler 已提交
248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
}

int main()
{
  return (mytest("Hello%d\n", 1));
}
EOF

    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
      echo "Checking for return value of vsnprintf()... Yes."
    else
      CFLAGS="$CFLAGS -DHAS_vsnprintf_void"
      echo "Checking for return value of vsnprintf()... No."
      echo "  WARNING: apparently vsnprintf() does not return a value. zlib"
      echo "  can build but will be open to possible string-format security"
      echo "  vulnerabilities."
    fi
  else
    CFLAGS="$CFLAGS -DNO_vsnprintf"
    echo "Checking for vsnprintf() in stdio.h... No."
    echo "  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib"
    echo "  can build but will be open to possible buffer-overflow security"
    echo "  vulnerabilities."

    cat >$test.c <<EOF
#include <stdio.h>
#include <stdarg.h>

int mytest(char *fmt, ...)
{
M
Mark Adler 已提交
278
  int n;
M
Mark Adler 已提交
279 280 281 282
  char buf[20];
  va_list ap;

  va_start(ap, fmt);
M
Mark Adler 已提交
283
  n = vsprintf(buf, fmt, ap);
M
Mark Adler 已提交
284
  va_end(ap);
M
Mark Adler 已提交
285
  return n;
M
Mark Adler 已提交
286 287
}

M
Mark Adler 已提交
288
int main()
M
Mark Adler 已提交
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304
{
  return (mytest("Hello%d\n", 1));
}
EOF

    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
      echo "Checking for return value of vsprintf()... Yes."
    else
      CFLAGS="$CFLAGS -DHAS_vsprintf_void"
      echo "Checking for return value of vsprintf()... No."
      echo "  WARNING: apparently vsprintf() does not return a value. zlib"
      echo "  can build but will be open to possible string-format security"
      echo "  vulnerabilities."
    fi
  fi
else
M
Mark Adler 已提交
305
  echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()"
M
Mark Adler 已提交
306 307 308 309

  cat >$test.c <<EOF
#include <stdio.h>

M
Mark Adler 已提交
310
int mytest()
M
Mark Adler 已提交
311 312 313 314 315 316 317
{
  char buf[20];

  snprintf(buf, sizeof(buf), "%s", "foo");
  return 0;
}

M
Mark Adler 已提交
318
int main()
M
Mark Adler 已提交
319 320 321 322 323
{
  return (mytest());
}
EOF

M
Mark Adler 已提交
324
  if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
M
Mark Adler 已提交
325 326 327 328 329
    echo "Checking for snprintf() in stdio.h... Yes."

    cat >$test.c <<EOF
#include <stdio.h>

M
Mark Adler 已提交
330
int mytest()
M
Mark Adler 已提交
331 332 333
{
  char buf[20];

M
Mark Adler 已提交
334
  return snprintf(buf, sizeof(buf), "%s", "foo");
M
Mark Adler 已提交
335 336
}

M
Mark Adler 已提交
337
int main()
M
Mark Adler 已提交
338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361
{
  return (mytest());
}
EOF

    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
      echo "Checking for return value of snprintf()... Yes."
    else
      CFLAGS="$CFLAGS -DHAS_snprintf_void"
      echo "Checking for return value of snprintf()... No."
      echo "  WARNING: apparently snprintf() does not return a value. zlib"
      echo "  can build but will be open to possible string-format security"
      echo "  vulnerabilities."
    fi
  else
    CFLAGS="$CFLAGS -DNO_snprintf"
    echo "Checking for snprintf() in stdio.h... No."
    echo "  WARNING: snprintf() not found, falling back to sprintf(). zlib"
    echo "  can build but will be open to possible buffer-overflow security"
    echo "  vulnerabilities."

    cat >$test.c <<EOF
#include <stdio.h>

M
Mark Adler 已提交
362
int mytest()
M
Mark Adler 已提交
363 364 365
{
  char buf[20];

M
Mark Adler 已提交
366
  return sprintf(buf, "%s", "foo");
M
Mark Adler 已提交
367 368
}

M
Mark Adler 已提交
369
int main()
M
Mark Adler 已提交
370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387
{
  return (mytest());
}
EOF

    if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
      echo "Checking for return value of sprintf()... Yes."
    else
      CFLAGS="$CFLAGS -DHAS_sprintf_void"
      echo "Checking for return value of sprintf()... No."
      echo "  WARNING: apparently sprintf() does not return a value. zlib"
      echo "  can build but will be open to possible string-format security"
      echo "  vulnerabilities."
    fi
  fi
fi

cat >$test.c <<EOF
M
Mark Adler 已提交
388 389 390 391
#include <errno.h>
int main() { return 0; }
EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
M
Mark Adler 已提交
392
  echo "Checking for errno.h... Yes."
M
Mark Adler 已提交
393
else
M
Mark Adler 已提交
394
  echo "Checking for errno.h... No."
M
Mark Adler 已提交
395 396
  CFLAGS="$CFLAGS -DNO_ERRNO_H"
fi
M
Mark Adler 已提交
397

M
Mark Adler 已提交
398 399 400 401 402
cat > $test.c <<EOF
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
caddr_t hello() {
M
Mark Adler 已提交
403
  return mmap((caddr_t)0, (off_t)0, PROT_READ, MAP_SHARED, 0, (off_t)0);
M
Mark Adler 已提交
404 405 406 407 408 409 410 411 412
}
EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
  CFLAGS="$CFLAGS -DUSE_MMAP"
  echo Checking for mmap support... Yes.
else
  echo Checking for mmap support... No.
fi

M
Mark Adler 已提交
413 414 415 416 417 418 419 420 421 422 423
CPP=${CPP-"$CC -E"}
case $CFLAGS in
  *ASMV*)
    if test "`nm $test.o | grep _hello`" = ""; then
      CPP="$CPP -DNO_UNDERLINE"
      echo Checking for underline in external names... No.
    else
      echo Checking for underline in external names... Yes.
    fi;;
esac

M
Mark Adler 已提交
424
rm -f $test.[co] $test $test$shared_ext
M
Mark Adler 已提交
425

M
Mark Adler 已提交
426 427
# udpate Makefile
sed < Makefile.in "
M
Mark Adler 已提交
428 429 430 431 432 433 434 435 436 437
/^CC *=/s#=.*#=$CC#
/^CFLAGS *=/s#=.*#=$CFLAGS#
/^CPP *=/s#=.*#=$CPP#
/^LDSHARED *=/s#=.*#=$LDSHARED#
/^LIBS *=/s#=.*#=$LIBS#
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
/^AR *=/s#=.*#=$AR#
/^RANLIB *=/s#=.*#=$RANLIB#
M
Mark Adler 已提交
438
/^EXE *=/s#=.*#=$EXE#
M
Mark Adler 已提交
439 440 441 442 443 444
/^prefix *=/s#=.*#=$prefix#
/^exec_prefix *=/s#=.*#=$exec_prefix#
/^libdir *=/s#=.*#=$libdir#
/^includedir *=/s#=.*#=$includedir#
/^mandir *=/s#=.*#=$mandir#
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
M
Mark Adler 已提交
445
" > Makefile