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

M
Mark Adler 已提交
38 39
while test $# -ge 1
do
M
Mark Adler 已提交
40
case "$1" in
M
Mark Adler 已提交
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
    -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;;
    esac
done
M
Mark Adler 已提交
57

M
Mark Adler 已提交
58 59 60 61
if [ $shared -eq 1 ]; then
  LDFLAGS="-L. ${SHAREDLIB}"
fi

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

test -z "$CC" && echo Checking for gcc...
cc=${CC-gcc}
cflags=${CFLAGS-"-O3"}
M
Mark Adler 已提交
71
# to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
M
Mark Adler 已提交
72 73 74 75 76 77
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 已提交
78
  SFLAGS=${CFLAGS-"-fPIC -O3"}
M
Mark Adler 已提交
79
  CFLAGS="$cflags"
M
Mark Adler 已提交
80
  case `(uname -s || echo unknown) 2>/dev/null` in
M
Mark Adler 已提交
81
  Linux | linux) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1"};;
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 88
  HP-UX*)        LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"}
                 shared_ext='.sl'
                 SHAREDLIB='libz.sl';;
  *)             LDSHARED=${LDSHARED-"$cc -shared"};;
M
Mark Adler 已提交
89
  esac
M
Mark Adler 已提交
90 91 92 93
else
  # find system name and corresponding cc options
  CC=${CC-cc}
  case `(uname -sr || echo unknown) 2>/dev/null` in
M
Mark Adler 已提交
94
  HP-UX*)    SFLAGS=${CFLAGS-"-O +z"}
M
Mark Adler 已提交
95 96 97 98 99
             CFLAGS=${CFLAGS-"-O"}
#            LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"}
             LDSHARED=${LDSHARED-"ld -b"}
             shared_ext='.sl'
             SHAREDLIB='libz.sl';;
M
Mark Adler 已提交
100
  IRIX*)     SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."}
M
Mark Adler 已提交
101 102
             CFLAGS=${CFLAGS-"-ansi -O2"}
             LDSHARED=${LDSHARED-"cc -shared"};;
M
Mark Adler 已提交
103
  OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
104 105
             CFLAGS=${CFLAGS-"-O -std1"}
             LDSHARED=${LDSHARED-"cc -shared  -Wl,-soname,$SHAREDLIB -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"};;
M
Mark Adler 已提交
106
  OSF1*)     SFLAGS=${CFLAGS-"-O -std1"}
M
Mark Adler 已提交
107 108
             CFLAGS=${CFLAGS-"-O -std1"}
             LDSHARED=${LDSHARED-"cc -shared"};;
M
Mark Adler 已提交
109 110
  QNX*)      SFLAGS=${CFLAGS-"-4 -O"}
             CFLAGS=${CFLAGS-"-4 -O"}
M
Mark Adler 已提交
111
             LDSHARED=${LDSHARED-"cc"}
M
Mark Adler 已提交
112 113 114
             RANLIB=${RANLIB-"true"}
             AR="cc -A";;
  SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "}
M
Mark Adler 已提交
115 116
             CFLAGS=${CFLAGS-"-O3"}
             LDSHARED=${LDSHARED-"cc -dy -KPIC -G"};;
M
Mark Adler 已提交
117 118
  SunOS\ 5*) SFLAGS=${CFLAGS-"-fast -xcg89 -KPIC -R."}
             CFLAGS=${CFLAGS-"-fast -xcg89"}
M
Mark Adler 已提交
119
             LDSHARED=${LDSHARED-"cc -G"};;
M
Mark Adler 已提交
120
  SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"}
M
Mark Adler 已提交
121 122 123 124 125 126
             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 已提交
127
  UNIX_SV\ 4.2MP)
M
Mark Adler 已提交
128 129 130 131 132 133 134
             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 已提交
135
  AIX*)  # Courtesy of dbakker@arrayasolutions.com
M
Mark Adler 已提交
136 137 138
             SFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
             CFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
             LDSHARED=${LDSHARED-"xlc -G"};;
M
Mark Adler 已提交
139
  # send working options for other systems to support@gzip.org
M
Mark Adler 已提交
140
  *)         SFLAGS=${CFLAGS-"-O"}
M
Mark Adler 已提交
141 142
             CFLAGS=${CFLAGS-"-O"}
             LDSHARED=${LDSHARED-"cc -shared"};;
M
Mark Adler 已提交
143 144 145
  esac
fi

M
Mark Adler 已提交
146 147 148 149 150 151 152 153
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"
    LIBS="$SHAREDLIB.$VER"
    echo Building shared library $SHAREDLIB.$VER with $CC.
M
Mark Adler 已提交
154
  elif test -z "$old_cc" -a -z "$old_cflags"; then
M
Mark Adler 已提交
155
    echo No shared library support.
M
Mark Adler 已提交
156
    shared=0;
M
Mark Adler 已提交
157
  else
M
Mark Adler 已提交
158
    echo 'No shared library support; try without defining CC and CFLAGS'
M
Mark Adler 已提交
159
    shared=0;
M
Mark Adler 已提交
160 161 162
  fi
fi
if test $shared -eq 0; then
M
Mark Adler 已提交
163 164 165
  LDSHARED="$CC"
  echo Building static library $LIBS version $VER with $CC.
fi
M
Mark Adler 已提交
166

M
Mark Adler 已提交
167 168 169 170 171
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 已提交
172
  sed < zconf.in.h "/HAVE_UNISTD_H/s%0%1%" > zconf.h
M
Mark Adler 已提交
173 174
  echo "Checking for unistd.h... Yes."
else
M
Mark Adler 已提交
175
  cp -p zconf.in.h zconf.h
M
Mark Adler 已提交
176
  echo "Checking for unistd.h... No."
M
Mark Adler 已提交
177 178
fi

M
Mark Adler 已提交
179
cat > $test.c <<EOF
M
Mark Adler 已提交
180 181 182 183 184 185 186
#include <stdio.h>
#include <stdlib.h>

#if (defined(__MSDOS__) || defined(_WINDOWS) || defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__STDC__) || defined(__cplusplus) || defined(__OS2__)) && !defined(STDC)
#  define STDC
#endif

M
Mark Adler 已提交
187
int main()
M
Mark Adler 已提交
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219
{
#ifndef STDC
  choke me
#endif

  return 0;
}
EOF

if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
  echo "Checking whether to use vsnprintf() or snprintf()... using vsnprintf()"

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

M
Mark Adler 已提交
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 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
  if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
    echo "Checking for vsnprintf() in stdio.h... Yes."

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

int mytest(char *fmt, ...)
{
  int i;
  char buf[20];
  va_list ap;

  va_start(ap, fmt);
  i = vsnprintf(buf, sizeof(buf), fmt, ap);
  va_end(ap);
  return 0;
}

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, ...)
{
  int i;
  char buf[20];
  va_list ap;

  va_start(ap, fmt);
  i = vsprintf(buf, fmt, ap);
  va_end(ap);
  return 0;
}

M
Mark Adler 已提交
278
int main()
M
Mark Adler 已提交
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
{
  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
  echo "Checking whether to use vsnprintf() or snprintf()... using snprintf()"

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

M
Mark Adler 已提交
301
int mytest()
M
Mark Adler 已提交
302 303 304 305 306 307 308
{
  char buf[20];

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

M
Mark Adler 已提交
309
int main()
M
Mark Adler 已提交
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330
{
  return (mytest());
}
EOF

  if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then
    echo "Checking for snprintf() in stdio.h... Yes."

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

int mytest(char *fmt, ...)
{
  int i;
  char buf[20];

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

M
Mark Adler 已提交
331
int main()
M
Mark Adler 已提交
332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356
{
  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>
#include <stdarg.h>

M
Mark Adler 已提交
357
int mytest(char *fmt, ...)
M
Mark Adler 已提交
358 359 360 361 362 363 364 365
{
  int i;
  char buf[20];

  i = sprintf(buf, "%s", "foo");
  return 0;
}

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

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

M
Mark Adler 已提交
423 424
# udpate Makefile
sed < Makefile.in "
M
Mark Adler 已提交
425 426
/^CC *=/s%=.*%=$CC%
/^CFLAGS *=/s%=.*%=$CFLAGS%
M
Mark Adler 已提交
427
/^CPP *=/s%=.*%=$CPP%
M
Mark Adler 已提交
428
/^LDSHARED *=/s%=.*%=$LDSHARED%
M
Mark Adler 已提交
429 430 431 432 433 434
/^LIBS *=/s%=.*%=$LIBS%
/^SHAREDLIB *=/s%=.*%=$SHAREDLIB%
/^AR *=/s%=.*%=$AR%
/^RANLIB *=/s%=.*%=$RANLIB%
/^VER *=/s%=.*%=$VER%
/^prefix *=/s%=.*%=$prefix%
M
Mark Adler 已提交
435 436 437
/^exec_prefix *=/s%=.*%=$exec_prefix%
/^libdir *=/s%=.*%=$libdir%
/^includedir *=/s%=.*%=$includedir%
M
Mark Adler 已提交
438
/^mandir *=/s%=.*%=$mandir%
M
Mark Adler 已提交
439
/^LDFLAGS *=/s%=.*%=$LDFLAGS%
M
Mark Adler 已提交
440
" > Makefile