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 56 57
    -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 已提交
58 59 60

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

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

M
Mark Adler 已提交
150 151 152 153
SHAREDLIB=${SHAREDLIB-"libz$shared_ext"}
SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"}
SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"}

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

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

M
Mark Adler 已提交
189
cat > $test.c <<EOF
M
Mark Adler 已提交
190 191 192 193 194 195 196
#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 已提交
197
int main()
M
Mark Adler 已提交
198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
{
#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 已提交
230

M
Mark Adler 已提交
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 278 279 280 281 282 283 284 285 286 287
  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 已提交
288
int main()
M
Mark Adler 已提交
289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
{
  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 已提交
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 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
{
  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 已提交
341
int main()
M
Mark Adler 已提交
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366
{
  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 已提交
367
int mytest(char *fmt, ...)
M
Mark Adler 已提交
368 369 370 371 372 373 374 375
{
  int i;
  char buf[20];

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

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

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

M
Mark Adler 已提交
433 434
# udpate Makefile
sed < Makefile.in "
M
Mark Adler 已提交
435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450
/^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#
/^prefix *=/s#=.*#=$prefix#
/^exec_prefix *=/s#=.*#=$exec_prefix#
/^libdir *=/s#=.*#=$libdir#
/^includedir *=/s#=.*#=$includedir#
/^mandir *=/s#=.*#=$mandir#
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
M
Mark Adler 已提交
451
" > Makefile