configure 12.5 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 | GNU | GNU/*) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1"};;
M
Mark Adler 已提交
80
  CYGWIN* | Cygwin* | cygwin* | OS/2* )
M
Mark Adler 已提交
81
             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
  Darwin*)   shared_ext='.dylib'
             SHAREDLIB=libz$shared_ext
             SHAREDLIBV=libz.$VER$shared_ext
             SHAREDLIBM=libz.$VER1$shared_ext
M
Mark Adler 已提交
92
             LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER"};;
M
Mark Adler 已提交
93
  *)             LDSHARED=${LDSHARED-"$cc -shared"};;
M
Mark Adler 已提交
94
  esac
M
Mark Adler 已提交
95 96 97 98
else
  # find system name and corresponding cc options
  CC=${CC-cc}
  case `(uname -sr || echo unknown) 2>/dev/null` in
M
Mark Adler 已提交
99
  HP-UX*)    SFLAGS=${CFLAGS-"-O +z"}
M
Mark Adler 已提交
100 101 102 103 104
             CFLAGS=${CFLAGS-"-O"}
#            LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"}
             LDSHARED=${LDSHARED-"ld -b"}
             shared_ext='.sl'
             SHAREDLIB='libz.sl';;
M
Mark Adler 已提交
105
  IRIX*)     SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."}
M
Mark Adler 已提交
106 107
             CFLAGS=${CFLAGS-"-ansi -O2"}
             LDSHARED=${LDSHARED-"cc -shared"};;
M
Mark Adler 已提交
108
  OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
109
             CFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
110
             LDSHARED=${LDSHARED-"cc -shared  -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"};;
M
Mark Adler 已提交
111
  OSF1*)     SFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
112 113
             CFLAGS=${CFLAGS-"-O -std1"}
             LDSHARED=${LDSHARED-"cc -shared"};;
M
Mark Adler 已提交
114 115
  QNX*)      SFLAGS=${CFLAGS-"-4 -O"}
             CFLAGS=${CFLAGS-"-4 -O"}
M
Mark Adler 已提交
116
             LDSHARED=${LDSHARED-"cc"}
M
Mark Adler 已提交
117 118 119
             RANLIB=${RANLIB-"true"}
             AR="cc -A";;
  SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "}
M
Mark Adler 已提交
120 121
             CFLAGS=${CFLAGS-"-O3"}
             LDSHARED=${LDSHARED-"cc -dy -KPIC -G"};;
M
Mark Adler 已提交
122 123
  SunOS\ 5*) SFLAGS=${CFLAGS-"-fast -xcg89 -KPIC -R."}
             CFLAGS=${CFLAGS-"-fast -xcg89"}
M
Mark Adler 已提交
124
             LDSHARED=${LDSHARED-"cc -G"};;
M
Mark Adler 已提交
125
  SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"}
M
Mark Adler 已提交
126 127
             CFLAGS=${CFLAGS-"-O2"}
             LDSHARED=${LDSHARED-"ld"};;
M
Mark Adler 已提交
128 129 130
  SunStudio\ 9*) SFLAGS=${CFLAGS-"-DUSE_MMAP -fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"}
             CFLAGS=${CFLAGS-"-DUSE_MMAP -fast -xtarget=ultra3 -xarch=v9b"}
             LDSHARED=${LDSHARED-"cc -xarch=v9b"};;
M
Mark Adler 已提交
131 132 133 134
  UNIX_System_V\ 4.2.0)
             SFLAGS=${CFLAGS-"-KPIC -O"}
             CFLAGS=${CFLAGS-"-O"}
             LDSHARED=${LDSHARED-"cc -G"};;
M
Mark Adler 已提交
135
  UNIX_SV\ 4.2MP)
M
Mark Adler 已提交
136 137 138 139 140 141 142
             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 已提交
143
  AIX*)  # Courtesy of dbakker@arrayasolutions.com
M
Mark Adler 已提交
144 145 146
             SFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
             CFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
             LDSHARED=${LDSHARED-"xlc -G"};;
M
Mark Adler 已提交
147
  # send working options for other systems to support@gzip.org
M
Mark Adler 已提交
148
  *)         SFLAGS=${CFLAGS-"-O"}
M
Mark Adler 已提交
149 150
             CFLAGS=${CFLAGS-"-O"}
             LDSHARED=${LDSHARED-"cc -shared"};;
M
Mark Adler 已提交
151 152 153
  esac
fi

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

M
Mark Adler 已提交
158 159 160 161 162 163
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 已提交
164 165
    LIBS="$SHAREDLIBV"
    echo Building shared library $SHAREDLIBV with $CC.
M
Mark Adler 已提交
166
  elif test -z "$old_cc" -a -z "$old_cflags"; then
M
Mark Adler 已提交
167
    echo No shared library support.
M
Mark Adler 已提交
168
    shared=0;
M
Mark Adler 已提交
169
  else
M
Mark Adler 已提交
170
    echo 'No shared library support; try without defining CC and CFLAGS'
M
Mark Adler 已提交
171
    shared=0;
M
Mark Adler 已提交
172 173 174
  fi
fi
if test $shared -eq 0; then
M
Mark Adler 已提交
175 176
  LDSHARED="$CC"
  echo Building static library $LIBS version $VER with $CC.
M
Mark Adler 已提交
177 178
else
  LDFLAGS="-L. ${SHAREDLIBV}"
M
Mark Adler 已提交
179
fi
M
Mark Adler 已提交
180

M
Mark Adler 已提交
181 182 183 184 185
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 已提交
186
  sed < zconf.in.h "/HAVE_UNISTD_H/s%0%1%" > zconf.h
M
Mark Adler 已提交
187 188
  echo "Checking for unistd.h... Yes."
else
M
Mark Adler 已提交
189
  cp -p zconf.in.h zconf.h
M
Mark Adler 已提交
190
  echo "Checking for unistd.h... No."
M
Mark Adler 已提交
191 192
fi

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

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

  return 0;
}
EOF

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

  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 已提交
231

M
Mark Adler 已提交
232
  if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then
M
Mark Adler 已提交
233 234 235 236 237 238 239 240
    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 已提交
241
  int n;
M
Mark Adler 已提交
242 243 244 245
  char buf[20];
  va_list ap;

  va_start(ap, fmt);
M
Mark Adler 已提交
246
  n = vsnprintf(buf, sizeof(buf), fmt, ap);
M
Mark Adler 已提交
247
  va_end(ap);
M
Mark Adler 已提交
248
  return n;
M
Mark Adler 已提交
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 278
}

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 已提交
279
  int n;
M
Mark Adler 已提交
280 281 282 283
  char buf[20];
  va_list ap;

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

M
Mark Adler 已提交
289
int main()
M
Mark Adler 已提交
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
{
  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 已提交
306
  echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()"
M
Mark Adler 已提交
307 308 309 310

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

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

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

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

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

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

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

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

M
Mark Adler 已提交
338
int main()
M
Mark Adler 已提交
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362
{
  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 已提交
363
int mytest()
M
Mark Adler 已提交
364 365 366
{
  char buf[20];

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

M
Mark Adler 已提交
370
int main()
M
Mark Adler 已提交
371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388
{
  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 已提交
389 390 391 392
#include <errno.h>
int main() { return 0; }
EOF
if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
M
Mark Adler 已提交
393
  echo "Checking for errno.h... Yes."
M
Mark Adler 已提交
394
else
M
Mark Adler 已提交
395
  echo "Checking for errno.h... No."
M
Mark Adler 已提交
396 397
  CFLAGS="$CFLAGS -DNO_ERRNO_H"
fi
M
Mark Adler 已提交
398

M
Mark Adler 已提交
399 400 401 402 403
cat > $test.c <<EOF
#include <sys/types.h>
#include <sys/mman.h>
#include <sys/stat.h>
caddr_t hello() {
M
Mark Adler 已提交
404
  return mmap((caddr_t)0, (off_t)0, PROT_READ, MAP_SHARED, 0, (off_t)0);
M
Mark Adler 已提交
405 406 407 408 409 410 411 412 413
}
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 已提交
414 415 416 417 418 419 420 421 422 423 424
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 已提交
425
rm -f $test.[co] $test $test$shared_ext
M
Mark Adler 已提交
426

M
Mark Adler 已提交
427 428
# udpate Makefile
sed < Makefile.in "
M
Mark Adler 已提交
429 430 431 432 433 434 435 436 437 438
/^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 已提交
439
/^EXE *=/s#=.*#=$EXE#
M
Mark Adler 已提交
440 441 442 443 444 445
/^prefix *=/s#=.*#=$prefix#
/^exec_prefix *=/s#=.*#=$exec_prefix#
/^libdir *=/s#=.*#=$libdir#
/^includedir *=/s#=.*#=$includedir#
/^mandir *=/s#=.*#=$mandir#
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
M
Mark Adler 已提交
446
" > Makefile