1 #!/bin/sh 2 # configure script for zlib. 3 # 4 # Normally configure builds both a static and a shared library. 5 # If you want to build just a static library, use: ./configure --static 6 # 7 # To impose specific compiler or flags or install directory, use for example: 8 # prefix=$HOME CC=cc CFLAGS="-O4" ./configure 9 # or for csh/tcsh users: 10 # (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure) 11 12 # Incorrect settings of CC or CFLAGS may prevent creating a shared library. 13 # If you have problems, try without defining CC and CFLAGS before reporting 14 # an error. 15 16 # start off configure.log 17 echo -------------------- >> configure.log 18 echo $0 $* >> configure.log 19 date >> configure.log 20 21 # get source directory 22 SRCDIR=`dirname $0` 23 if test $SRCDIR = "."; then 24 ZINC="" 25 ZINCOUT="-I." 26 SRCDIR="" 27 else 28 ZINC='-I. -include zconf.h' 29 ZINCOUT='-I. -I$(SRCDIR)' 30 SRCDIR="$SRCDIR/" 31 fi 32 33 # set command prefix for cross-compilation 34 if [ -n "${CHOST}" ]; then 35 uname=${CHOST} 36 mname=${CHOST} 37 CROSS_PREFIX="${CHOST}-" 38 else 39 mname=`(uname -a || echo unknown) 2>/dev/null` 40 fi 41 42 # destination name for static library 43 STATICLIB=libz.a 44 45 # extract zlib version numbers from zlib.h 46 VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < ${SRCDIR}zlib.h` 47 VER3=`echo ${VER}|sed -n -e 's/\([0-9]\{1,\}\(\\.[0-9]\{1,\}\)\{1,2\}\).*/\1/p'` 48 VER1=`echo ${VER}|sed -n -e 's/\([0-9]\{1,\}\)\\..*/\1/p'` 49 50 # establish commands for library building 51 if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then 52 AR=${AR-"${CROSS_PREFIX}ar"} 53 test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log 54 else 55 AR=${AR-"ar"} 56 test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log 57 fi 58 ARFLAGS=${ARFLAGS-"rc"} 59 if "${CROSS_PREFIX}ranlib" --version >/dev/null 2>/dev/null || test $? -lt 126; then 60 RANLIB=${RANLIB-"${CROSS_PREFIX}ranlib"} 61 test -n "${CROSS_PREFIX}" && echo Using ${RANLIB} | tee -a configure.log 62 else 63 RANLIB=${RANLIB-"ranlib"} 64 fi 65 if "${CROSS_PREFIX}nm" --version >/dev/null 2>/dev/null || test $? -lt 126; then 66 NM=${NM-"${CROSS_PREFIX}nm"} 67 test -n "${CROSS_PREFIX}" && echo Using ${NM} | tee -a configure.log 68 else 69 NM=${NM-"nm"} 70 fi 71 72 # set defaults before processing command line options 73 LDCONFIG=${LDCONFIG-"ldconfig"} 74 LDSHAREDLIBC="${LDSHAREDLIBC--lc}" 75 ARCHS= 76 prefix=${prefix-/usr/local} 77 exec_prefix=${exec_prefix-'${prefix}'} 78 libdir=${libdir-'${exec_prefix}/lib'} 79 sharedlibdir=${sharedlibdir-'${libdir}'} 80 includedir=${includedir-'${prefix}/include'} 81 mandir=${mandir-'${prefix}/share/man'} 82 shared_ext='.so' 83 shared=1 84 solo=0 85 cover=0 86 zprefix=0 87 zconst=0 88 build64=0 89 gcc=0 90 clang=0 91 warn=0 92 debug=0 93 address=0 94 memory=0 95 undefined=0 96 insecure=0 97 unknown=0 98 enable_crcvx=1 99 old_cc="$CC" 100 old_cflags="$CFLAGS" 101 OBJC='$(OBJZ) $(OBJG)' 102 PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)' 103 104 # leave this script, optionally in a bad way 105 leave() 106 { 107 if test "$*" != "0"; then 108 echo "** $0 aborting." | tee -a configure.log 109 fi 110 rm -rf $test.[co] $test $test$shared_ext $test.gcno $test.dSYM ./--version 111 echo -------------------- >> configure.log 112 echo >> configure.log 113 echo >> configure.log 114 exit $1 115 } 116 117 # process command line options 118 while test $# -ge 1 119 do 120 case "$1" in 121 -h* | --help) 122 echo 'usage:' | tee -a configure.log 123 echo ' configure [--const] [--zprefix] [--prefix=PREFIX] [--eprefix=EXPREFIX]' | tee -a configure.log 124 echo ' [--insecure] [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log 125 echo ' [--includedir=INCLUDEDIR] [--mandir=MANDIR]' | tee -a configure.log 126 echo ' [--archs="-arch i386 -arch x86_64"] [--disable-crcvx]' | tee -a configure.log 127 exit 0 ;; 128 -p*=* | --prefix=*) prefix=`echo $1 | sed 's/[^=]*=//'`; shift ;; 129 -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/[^=]*=//'`; shift ;; 130 -l*=* | --libdir=*) libdir=`echo $1 | sed 's/[^=]*=//'`; shift ;; 131 --sharedlibdir=*) sharedlibdir=`echo $1 | sed 's/[^=]*=//'`; shift ;; 132 -i*=* | --includedir=*) includedir=`echo $1 | sed 's/[^=]*=//'`;shift ;; 133 -m*=* | --mandir=*) mandir=`echo $1 | sed 's/[^=]*=//'`;shift ;; 134 -u*=* | --uname=*) uname=`echo $1 | sed 's/[^=]*=//'`;shift ;; 135 -p* | --prefix) prefix="$2"; shift; shift ;; 136 -e* | --eprefix) exec_prefix="$2"; shift; shift ;; 137 -l* | --libdir) libdir="$2"; shift; shift ;; 138 --sharedlibdir) sharedlibdir="$2"; shift; shift ;; 139 -i* | --includedir) includedir="$2"; shift; shift ;; 140 -m* | --mandir) mandir="$2"; shift; shift ;; 141 -u* | --uname) uname="$2"; shift; shift ;; 142 -s* | --shared | --enable-shared) shared=1; shift ;; 143 -t | --static | --disable-shared) shared=0; shift ;; 144 --solo) solo=1; shift ;; 145 --cover) cover=1; shift ;; 146 -z* | --zprefix) zprefix=1; shift ;; 147 -6* | --64) build64=1; shift ;; 148 -a*=* | --archs=*) ARCHS=`echo $1 | sed 's/[^=]*=//'`; shift ;; 149 -a* | --archs) ARCHS="$2"; shift; shift ;; 150 --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;; 151 --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;; 152 -c* | --const) zconst=1; shift ;; 153 -w* | --warn) warn=$((warn + 1)); shift ;; 154 -d* | --debug) debug=1; shift ;; 155 --sanitize) address=1; shift ;; 156 --address) address=1; shift ;; 157 --memory) memory=1; shift ;; 158 --undefined) undefined=1; shift ;; 159 --insecure) insecure=1; shift ;; 160 --disable-crcvx) enable_crcvx=0; shift ;; 161 *) unknown=1; echo "unknown option ignored: $1" | tee -a configure.log; shift;; 162 esac 163 done 164 if test $unknown -eq 1; then 165 echo "$0 --help for help" | tee -a configure.log 166 fi 167 168 # temporary file name 169 test=ztest$$ 170 171 # put arguments in log, also put test file in log if used in arguments 172 show() 173 { 174 case "$*" in 175 *$test.c*) 176 echo === $test.c === >> configure.log 177 cat $test.c >> configure.log 178 echo === >> configure.log;; 179 esac 180 echo $* >> configure.log 181 } 182 183 # check for gcc vs. cc and set compile and link flags based on the system identified by uname 184 cat > $test.c <<EOF 185 extern int getchar(); 186 int hello() {return getchar();} 187 EOF 188 189 if test -z "$CC"; then 190 echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log 191 if ${CROSS_PREFIX}gcc -v >/dev/null 2>&1; then 192 cc=${CROSS_PREFIX}gcc 193 else 194 cc=${CROSS_PREFIX}cc 195 fi 196 else 197 cc=${CC} 198 fi 199 200 case "$cc" in 201 *gcc*) gcc=1 202 GCOV="gcov" ;; 203 *clang*) gcc=1 204 clang=1 ;; 205 esac 206 case `$cc -v 2>&1` in 207 *gcc*) gcc=1 208 GCOV="gcov" ;; 209 *clang*) gcc=1 210 clang=1 ;; 211 esac 212 213 if test $cover -eq 1; then 214 if test "$clang" -eq 1; then 215 if test "$cc" = "clang"; then 216 if command -v llvm-cov >/dev/null 2>&1; then 217 GCOV="llvm-cov" 218 LLVM_GCOV_FLAG="gcov" 219 GCOV="llvm-cov" 220 LLVM_GCOV_FLAG="gcov" 221 echo "Using ${GCOV} for coverage" 222 else 223 cover=0 224 GCOV="" 225 LLVM_GCOV_FLAG="" 226 echo "Deactivating cover as no suitable gcov can be found" 227 fi 228 else 229 clangV=`echo "$cc" | sed -e 's/^.*-//'` 230 if command -v llvm-cov-${clangV} >/dev/null 2>&1; then 231 GCOV="llvm-cov-${clangV}" 232 LLVM_GCOV_FLAG="gcov" 233 echo "Using ${GCOV} for coverage" 234 else 235 cover=0 236 GCOV="" 237 LLVM_GCOV_FLAG="" 238 echo "Deactivating cover as no suitable gcov can be found" 239 fi 240 fi 241 fi 242 fi 243 244 show $cc -c $test.c 245 if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then 246 echo ... using gcc >> configure.log 247 CC="$cc" 248 CFLAGS="${CFLAGS--O3} -fPIC" 249 SFLAGS="${CFLAGS--O3}" 250 if test "$ARCHS"; then 251 CFLAGS="${CFLAGS} ${ARCHS}" 252 SFLAGS="${SFLAGS} ${ARCHS}" 253 LDFLAGS="${LDFLAGS} ${ARCHS}" 254 fi 255 if test $build64 -eq 1; then 256 CFLAGS="${CFLAGS} -m64" 257 SFLAGS="${SFLAGS} -m64" 258 fi 259 if test "$warn" -ge 1; then 260 CFLAGS="${CFLAGS} -Wall -Wextra" 261 if test "$warn" -ge 2; then 262 CFLAGS="${CFLAGS} -Wconversion -Wshadow -Wundef" 263 fi 264 fi 265 if test "$zconst" -eq 1; then 266 if test "$warn" -ge 1; then 267 CFLAGS="${CFLAGS} -Wcast-qual" 268 fi 269 CFLAGS="${CFLAGS} -DZLIB_CONST" 270 fi 271 if test $address -eq 1; then 272 CFLAGS="${CFLAGS} -g -fsanitize=address -fno-omit-frame-pointer" 273 fi 274 if test $memory -eq 1; then 275 CFLAGS="${CFLAGS} -g -fsanitize=memory -fno-omit-frame-pointer" 276 fi 277 if test $undefined -eq 1; then 278 CFLAGS="${CFLAGS} -g -fsanitize=undefined -fno-omit-frame-pointer" 279 fi 280 if test $insecure -eq 1; then 281 CFLAGS="${CFLAGS} -DZLIB_INSECURE" 282 SFLAGS="${SFLAGS} -DZLIB_INSECURE" 283 fi 284 if test $debug -eq 1; then 285 CFLAGS="${CFLAGS} -DZLIB_DEBUG" 286 SFLAGS="${SFLAGS} -DZLIB_DEBUG" 287 fi 288 if test -z "$uname"; then 289 uname=`(uname -s || echo unknown) 2>/dev/null` 290 fi 291 case "$uname" in 292 Linux* | linux* | *-linux* | GNU | GNU/* | solaris* | Haiku) 293 case "$mname" in 294 *sparc*) 295 LDFLAGS="${LDFLAGS} -Wl,--no-warn-rwx-segments" ;; 296 esac 297 LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"} ;; 298 *BSD | *bsd* | DragonFly) 299 LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"} 300 LDCONFIG="ldconfig -m" ;; 301 CYGWIN* | Cygwin* | cygwin* | *-cygwin* | OS/2*) 302 EXE='.exe' ;; 303 MINGW* | mingw* | *-mingw*) 304 rm -f $test.[co] $test $test$shared_ext 305 echo "If this doesn't work for you, try win32/Makefile.gcc." | tee -a configure.log 306 LDSHARED=${LDSHARED-"$cc -shared"} 307 LDSHAREDLIBC="" 308 EXE='.exe' ;; 309 QNX*) # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4 310 # (alain.bonnefoy (at] icbt.com) 311 LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"} ;; 312 HP-UX*) 313 LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"} 314 case `(uname -m || echo unknown) 2>/dev/null` in 315 ia64) 316 shared_ext='.so' 317 SHAREDLIB='libz.so' ;; 318 *) 319 shared_ext='.sl' 320 SHAREDLIB='libz.sl' ;; 321 esac ;; 322 AIX*) 323 LDSHARED=${LDSHARED-"$cc -shared"} 324 LDFLAGS="${LDFLAGS} -Wl,-brtl" ;; 325 Darwin* | darwin* | *-darwin*) 326 shared_ext='.dylib' 327 SHAREDLIB=libz$shared_ext 328 SHAREDLIBV=libz.$VER$shared_ext 329 SHAREDLIBM=libz.$VER1$shared_ext 330 LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"} 331 if "${CROSS_PREFIX}libtool" -V 2>&1 | grep Apple > /dev/null; then 332 AR="${CROSS_PREFIX}libtool" 333 elif libtool -V 2>&1 | grep Apple > /dev/null; then 334 AR="libtool" 335 else 336 AR="/usr/bin/libtool" 337 fi 338 ARFLAGS="-o" ;; 339 *) 340 LDSHARED=${LDSHARED-"$cc -shared"} ;; 341 esac 342 else 343 # find system name and corresponding cc options 344 CC=${CC-cc} 345 gcc=0 346 echo ... using $CC >> configure.log 347 if test -z "$uname"; then 348 uname=`(uname -sr || echo unknown) 2>/dev/null` 349 fi 350 case "$uname" in 351 HP-UX*) SFLAGS=${CFLAGS-"-O +z"} 352 CFLAGS=${CFLAGS-"-O"} 353 # LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"} 354 LDSHARED=${LDSHARED-"ld -b"} 355 case `(uname -m || echo unknown) 2>/dev/null` in 356 ia64) 357 shared_ext='.so' 358 SHAREDLIB='libz.so' ;; 359 *) 360 shared_ext='.sl' 361 SHAREDLIB='libz.sl' ;; 362 esac ;; 363 IRIX*) SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."} 364 CFLAGS=${CFLAGS-"-ansi -O2"} 365 LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; 366 OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"} 367 CFLAGS=${CFLAGS-"-O -std1"} 368 LDFLAGS="${LDFLAGS} -Wl,-rpath,." 369 LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"} ;; 370 OSF1*) SFLAGS=${CFLAGS-"-O -std1"} 371 CFLAGS=${CFLAGS-"-O -std1"} 372 LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; 373 QNX*) SFLAGS=${CFLAGS-"-4 -O"} 374 CFLAGS=${CFLAGS-"-4 -O"} 375 LDSHARED=${LDSHARED-"cc"} 376 RANLIB=${RANLIB-"true"} 377 AR="cc" 378 ARFLAGS="-A" ;; 379 SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "} 380 CFLAGS=${CFLAGS-"-O3"} 381 LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;; 382 SunOS\ 5* | solaris*) 383 LDSHARED=${LDSHARED-"cc -G -h libz$shared_ext.$VER1"} 384 SFLAGS=${CFLAGS-"-fast -KPIC"} 385 CFLAGS=${CFLAGS-"-fast"} 386 if test $build64 -eq 1; then 387 # old versions of SunPRO/Workshop/Studio don't support -m64, 388 # but newer ones do. Check for it. 389 flag64=`$CC -flags | egrep -- '^-m64'` 390 if test x"$flag64" != x"" ; then 391 CFLAGS="${CFLAGS} -m64" 392 SFLAGS="${SFLAGS} -m64" 393 else 394 case `(uname -m || echo unknown) 2>/dev/null` in 395 i86*) 396 SFLAGS="$SFLAGS -xarch=amd64" 397 CFLAGS="$CFLAGS -xarch=amd64" ;; 398 *) 399 SFLAGS="$SFLAGS -xarch=v9" 400 CFLAGS="$CFLAGS -xarch=v9" ;; 401 esac 402 fi 403 fi 404 if test -n "$ZINC"; then 405 ZINC='-I- -I. -I$(SRCDIR)' 406 fi 407 ;; 408 SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"} 409 CFLAGS=${CFLAGS-"-O2"} 410 LDSHARED=${LDSHARED-"ld"} ;; 411 SunStudio\ 9*) SFLAGS=${CFLAGS-"-fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"} 412 CFLAGS=${CFLAGS-"-fast -xtarget=ultra3 -xarch=v9b"} 413 LDSHARED=${LDSHARED-"cc -xarch=v9b"} ;; 414 UNIX_System_V\ 4.2.0) 415 SFLAGS=${CFLAGS-"-KPIC -O"} 416 CFLAGS=${CFLAGS-"-O"} 417 LDSHARED=${LDSHARED-"cc -G"} ;; 418 UNIX_SV\ 4.2MP) 419 SFLAGS=${CFLAGS-"-Kconform_pic -O"} 420 CFLAGS=${CFLAGS-"-O"} 421 LDSHARED=${LDSHARED-"cc -G"} ;; 422 OpenUNIX\ 5) 423 SFLAGS=${CFLAGS-"-KPIC -O"} 424 CFLAGS=${CFLAGS-"-O"} 425 LDSHARED=${LDSHARED-"cc -G"} ;; 426 AIX*) # Courtesy of dbakker (at] arrayasolutions.com 427 SFLAGS=${CFLAGS-"-O -qmaxmem=8192"} 428 CFLAGS=${CFLAGS-"-O -qmaxmem=8192"} 429 LDSHARED=${LDSHARED-"xlc -G"} 430 if test $build64 -eq 1; then 431 CFLAGS="${CFLAGS} -q64" 432 SFLAGS="${SFLAGS} -q64" 433 ARFLAGS="-X64 ${ARFLAGS}" 434 fi ;; 435 # send working options for other systems to zlib (at] gzip.org 436 *) SFLAGS=${CFLAGS-"-O"} 437 CFLAGS=${CFLAGS-"-O"} 438 LDSHARED=${LDSHARED-"cc -shared"} ;; 439 esac 440 fi 441 442 # destination names for shared library if not defined above 443 SHAREDLIB=${SHAREDLIB-"libz$shared_ext"} 444 SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"} 445 SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"} 446 447 echo >> configure.log 448 449 # define functions for testing compiler and library characteristics and logging the results 450 451 cat > $test.c <<EOF 452 #error error 453 EOF 454 if ($CC -c $CFLAGS $test.c) 2>/dev/null; then 455 try() 456 { 457 show $* 458 test "`( $* ) 2>&1 | tee -a configure.log`" = "" 459 } 460 echo - using any output from compiler to indicate an error >> configure.log 461 else 462 try() 463 { 464 show $* 465 got=`( $* ) 2>&1` 466 ret=$? 467 if test "$got" != ""; then 468 printf "%s\n" "$got" >> configure.log 469 fi 470 if test $ret -ne 0; then 471 echo "(exit code "$ret")" >> configure.log 472 fi 473 return $ret 474 } 475 fi 476 477 tryboth() 478 { 479 show $* 480 got=`( $* ) 2>&1` 481 ret=$? 482 if test "$got" != ""; then 483 printf "%s\n" "$got" >> configure.log 484 fi 485 if test $ret -ne 0; then 486 echo "(exit code "$ret")" >> configure.log 487 return $ret 488 fi 489 test "$got" = "" 490 } 491 492 cat > $test.c << EOF 493 int foo() { return 0; } 494 EOF 495 echo "Checking for compiler..." >> configure.log 496 if try $CC -c $test.c; then 497 : 498 else 499 echo "Missing or broken C compiler." | tee -a configure.log 500 leave 1 501 fi 502 echo "Checking for obsessive-compulsive compiler options..." >> configure.log 503 if try $CC -c $CFLAGS $test.c; then 504 : 505 else 506 echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log 507 leave 1 508 fi 509 510 echo >> configure.log 511 512 # see if shared library build supported 513 cat > $test.c <<EOF 514 extern int getchar(); 515 int hello() {return getchar();} 516 EOF 517 if test $shared -eq 1; then 518 echo Checking for shared library support... | tee -a configure.log 519 # we must test in two steps (cc then ld), required at least on SunOS 4.x 520 if try $CC -c $SFLAGS $test.c && 521 try $LDSHARED $SFLAGS $LDFLAGS -o $test$shared_ext $test.o; then 522 echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log 523 elif test -z "$old_cc" -a -z "$old_cflags"; then 524 echo No shared library support. | tee -a configure.log 525 shared=0; 526 else 527 echo 'No shared library support; try without defining CC and CFLAGS' | tee -a configure.log 528 shared=0; 529 fi 530 fi 531 if test $shared -eq 0; then 532 LDSHARED="$CC" 533 ALL="static" 534 TEST="all teststatic" 535 SHAREDLIB="" 536 SHAREDLIBV="" 537 SHAREDLIBM="" 538 echo Building static library $STATICLIB version $VER with $CC. | tee -a configure.log 539 else 540 ALL="static shared" 541 TEST="all teststatic testshared" 542 fi 543 544 echo >> configure.log 545 546 # check for size_t 547 cat > $test.c <<EOF 548 #include <stdio.h> 549 #include <stdlib.h> 550 size_t dummy = 0; 551 EOF 552 if try $CC -c $CFLAGS $test.c; then 553 echo "Checking for size_t... Yes." | tee -a configure.log 554 else 555 echo "Checking for size_t... No." | tee -a configure.log 556 # find a size_t integer type 557 # check for long long 558 cat > $test.c << EOF 559 long long dummy = 0; 560 EOF 561 if try $CC -c $CFLAGS $test.c; then 562 echo "Checking for long long... Yes." | tee -a configure.log 563 cat > $test.c <<EOF 564 #include <stdio.h> 565 int main(void) { 566 if (sizeof(void *) <= sizeof(int)) puts("int"); 567 else if (sizeof(void *) <= sizeof(long)) puts("long"); 568 else puts("z_longlong"); 569 return 0; 570 } 571 EOF 572 else 573 echo "Checking for long long... No." | tee -a configure.log 574 cat > $test.c <<EOF 575 #include <stdio.h> 576 int main(void) { 577 if (sizeof(void *) <= sizeof(int)) puts("int"); 578 else puts("long"); 579 return 0; 580 } 581 EOF 582 fi 583 if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then 584 sizet=`./$test` 585 echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log 586 CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}" 587 SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}" 588 else 589 echo "Checking for a pointer-size integer type... not found." | tee -a configure.log 590 fi 591 fi 592 593 echo >> configure.log 594 595 # check for large file support, and if none, check for fseeko() 596 cat > $test.c <<EOF 597 #include <sys/types.h> 598 off64_t dummy = 0; 599 EOF 600 if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then 601 CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1" 602 SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1" 603 ALL="${ALL} all64" 604 TEST="${TEST} test64" 605 echo "Checking for off64_t... Yes." | tee -a configure.log 606 echo "Checking for fseeko... Yes." | tee -a configure.log 607 else 608 echo "Checking for off64_t... No." | tee -a configure.log 609 echo >> configure.log 610 cat > $test.c <<EOF 611 #include <stdio.h> 612 int main(void) { 613 fseeko(NULL, 0, 0); 614 return 0; 615 } 616 EOF 617 if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then 618 echo "Checking for fseeko... Yes." | tee -a configure.log 619 else 620 CFLAGS="${CFLAGS} -DNO_FSEEKO" 621 SFLAGS="${SFLAGS} -DNO_FSEEKO" 622 echo "Checking for fseeko... No." | tee -a configure.log 623 fi 624 fi 625 626 echo >> configure.log 627 628 # check for strerror() for use by gz* functions 629 cat > $test.c <<EOF 630 #include <string.h> 631 #include <errno.h> 632 int main() { return strlen(strerror(errno)); } 633 EOF 634 if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then 635 echo "Checking for strerror... Yes." | tee -a configure.log 636 else 637 CFLAGS="${CFLAGS} -DNO_STRERROR" 638 SFLAGS="${SFLAGS} -DNO_STRERROR" 639 echo "Checking for strerror... No." | tee -a configure.log 640 fi 641 642 # copy clean zconf.h for subsequent edits 643 cp -p ${SRCDIR}zconf.h.in zconf.h 644 645 echo >> configure.log 646 647 # check for unistd.h and save result in zconf.h 648 cat > $test.c <<EOF 649 #include <unistd.h> 650 int main() { return 0; } 651 EOF 652 if try $CC -c $CFLAGS $test.c; then 653 sed < zconf.h "/^#if HAVE_UNISTD_H-0.* may be/s/ HAVE_UNISTD_H-0\(.*\) may be/ 1\1 was/" > zconf.temp.h 654 mv zconf.temp.h zconf.h 655 echo "Checking for unistd.h... Yes." | tee -a configure.log 656 else 657 echo "Checking for unistd.h... No." | tee -a configure.log 658 fi 659 660 echo >> configure.log 661 662 # check for stdarg.h and save result in zconf.h 663 cat > $test.c <<EOF 664 #include <stdarg.h> 665 int main() { return 0; } 666 EOF 667 if try $CC -c $CFLAGS $test.c; then 668 sed < zconf.h "/^#if HAVE_STDARG_H-0.* may be/s/ HAVE_STDARG_H-0\(.*\) may be/ 1\1 was/" > zconf.temp.h 669 mv zconf.temp.h zconf.h 670 echo "Checking for stdarg.h... Yes." | tee -a configure.log 671 else 672 echo "Checking for stdarg.h... No." | tee -a configure.log 673 fi 674 675 # if the z_ prefix was requested, save that in zconf.h 676 if test $zprefix -eq 1; then 677 sed < zconf.h "/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\(.*\) may be/ 1\1 was/" > zconf.temp.h 678 mv zconf.temp.h zconf.h 679 echo >> configure.log 680 echo "Using z_ prefix on all symbols." | tee -a configure.log 681 fi 682 683 # if --solo compilation was requested, save that in zconf.h and remove gz stuff from object lists 684 if test $solo -eq 1; then 685 sed '/#define ZCONF_H/a\ 686 #define Z_SOLO 687 688 ' < zconf.h > zconf.temp.h 689 mv zconf.temp.h zconf.h 690 OBJC='$(OBJZ)' 691 PIC_OBJC='$(PIC_OBJZ)' 692 fi 693 694 # if code coverage testing was requested, use older gcc if defined, e.g. "gcc-4.2" on Mac OS X 695 if test $cover -eq 1; then 696 if test -n "$GCC_CLASSIC"; then 697 CC=$GCC_CLASSIC 698 fi 699 fi 700 701 echo >> configure.log 702 703 # conduct a series of tests to resolve eight possible cases of using "vs" or "s" printf functions 704 # (using stdarg or not), with or without "n" (proving size of buffer), and with or without a 705 # return value. The most secure result is vsnprintf() with a return value. snprintf() with a 706 # return value is secure as well, but then gzprintf() will be limited to 20 arguments. 707 cat > $test.c <<EOF 708 #include <stdio.h> 709 #include <stdarg.h> 710 #include "zconf.h" 711 int main() 712 { 713 #ifndef STDC 714 choke me 715 #endif 716 return 0; 717 } 718 EOF 719 if try $CC -c $CFLAGS $test.c; then 720 echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | tee -a configure.log 721 722 echo >> configure.log 723 cat > $test.c <<EOF 724 #include <stdio.h> 725 #include <stdarg.h> 726 int mytest(const char *fmt, ...) 727 { 728 char buf[20]; 729 va_list ap; 730 va_start(ap, fmt); 731 vsnprintf(buf, sizeof(buf), fmt, ap); 732 va_end(ap); 733 return 0; 734 } 735 int main() 736 { 737 return (mytest("Hello%d\n", 1)); 738 } 739 EOF 740 if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then 741 echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log 742 743 echo >> configure.log 744 cat >$test.c <<EOF 745 #include <stdio.h> 746 #include <stdarg.h> 747 int mytest(const char *fmt, ...) 748 { 749 int n; 750 char buf[20]; 751 va_list ap; 752 va_start(ap, fmt); 753 n = vsnprintf(buf, sizeof(buf), fmt, ap); 754 va_end(ap); 755 return n; 756 } 757 int main() 758 { 759 return (mytest("Hello%d\n", 1)); 760 } 761 EOF 762 763 if try $CC -c $CFLAGS $test.c; then 764 echo "Checking for return value of vsnprintf()... Yes." | tee -a configure.log 765 else 766 CFLAGS="$CFLAGS -DHAS_vsnprintf_void" 767 SFLAGS="$SFLAGS -DHAS_vsnprintf_void" 768 echo "Checking for return value of vsnprintf()... No." | tee -a configure.log 769 echo " WARNING: apparently vsnprintf() does not return a value. zlib" | tee -a configure.log 770 echo " can build but will be open to possible string-format security" | tee -a configure.log 771 echo " vulnerabilities." | tee -a configure.log 772 fi 773 else 774 CFLAGS="$CFLAGS -DNO_vsnprintf" 775 SFLAGS="$SFLAGS -DNO_vsnprintf" 776 echo "Checking for vsnprintf() in stdio.h... No." | tee -a configure.log 777 echo " WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | tee -a configure.log 778 echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log 779 echo " vulnerabilities." | tee -a configure.log 780 if test $insecure -ne 1; then 781 echo " The --insecure option must be provided to ./configure in order to" | tee -a configure.log 782 echo " compile using the insecure vsprintf() function." | tee -a configure.log 783 fi 784 echo >> configure.log 785 cat >$test.c <<EOF 786 #include <stdio.h> 787 #include <stdarg.h> 788 int mytest(const char *fmt, ...) 789 { 790 int n; 791 char buf[20]; 792 va_list ap; 793 va_start(ap, fmt); 794 n = vsprintf(buf, fmt, ap); 795 va_end(ap); 796 return n; 797 } 798 int main() 799 { 800 return (mytest("Hello%d\n", 1)); 801 } 802 EOF 803 804 if try $CC -c $CFLAGS $test.c; then 805 echo "Checking for return value of vsprintf()... Yes." | tee -a configure.log 806 else 807 CFLAGS="$CFLAGS -DHAS_vsprintf_void" 808 SFLAGS="$SFLAGS -DHAS_vsprintf_void" 809 echo "Checking for return value of vsprintf()... No." | tee -a configure.log 810 echo " WARNING: apparently vsprintf() does not return a value. zlib" | tee -a configure.log 811 echo " can build but will be open to possible string-format security" | tee -a configure.log 812 echo " vulnerabilities." | tee -a configure.log 813 fi 814 fi 815 else 816 echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()." | tee -a configure.log 817 818 echo >> configure.log 819 cat >$test.c <<EOF 820 #include <stdio.h> 821 int mytest() 822 { 823 char buf[20]; 824 snprintf(buf, sizeof(buf), "%s", "foo"); 825 return 0; 826 } 827 int main() 828 { 829 return (mytest()); 830 } 831 EOF 832 833 if try $CC $CFLAGS $LDFLAGS -o $test $test.c; then 834 echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log 835 836 echo >> configure.log 837 cat >$test.c <<EOF 838 #include <stdio.h> 839 int mytest() 840 { 841 char buf[20]; 842 return snprintf(buf, sizeof(buf), "%s", "foo"); 843 } 844 int main() 845 { 846 return (mytest()); 847 } 848 EOF 849 850 if try $CC -c $CFLAGS $test.c; then 851 echo "Checking for return value of snprintf()... Yes." | tee -a configure.log 852 else 853 CFLAGS="$CFLAGS -DHAS_snprintf_void" 854 SFLAGS="$SFLAGS -DHAS_snprintf_void" 855 echo "Checking for return value of snprintf()... No." | tee -a configure.log 856 echo " WARNING: apparently snprintf() does not return a value. zlib" | tee -a configure.log 857 echo " can build but will be open to possible string-format security" | tee -a configure.log 858 echo " vulnerabilities." | tee -a configure.log 859 fi 860 else 861 CFLAGS="$CFLAGS -DNO_snprintf" 862 SFLAGS="$SFLAGS -DNO_snprintf" 863 echo "Checking for snprintf() in stdio.h... No." | tee -a configure.log 864 echo " WARNING: snprintf() not found, falling back to sprintf(). zlib" | tee -a configure.log 865 echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log 866 echo " vulnerabilities." | tee -a configure.log 867 if test $insecure -ne 1; then 868 echo " The --insecure option must be provided to ./configure in order to" | tee -a configure.log 869 echo " compile using the insecure sprintf() function." | tee -a configure.log 870 fi 871 echo >> configure.log 872 cat >$test.c <<EOF 873 #include <stdio.h> 874 int mytest() 875 { 876 char buf[20]; 877 return sprintf(buf, "%s", "foo"); 878 } 879 int main() 880 { 881 return (mytest()); 882 } 883 EOF 884 885 if try $CC -c $CFLAGS $test.c; then 886 echo "Checking for return value of sprintf()... Yes." | tee -a configure.log 887 else 888 CFLAGS="$CFLAGS -DHAS_sprintf_void" 889 SFLAGS="$SFLAGS -DHAS_sprintf_void" 890 echo "Checking for return value of sprintf()... No." | tee -a configure.log 891 echo " WARNING: apparently sprintf() does not return a value. zlib" | tee -a configure.log 892 echo " can build but will be open to possible string-format security" | tee -a configure.log 893 echo " vulnerabilities." | tee -a configure.log 894 fi 895 fi 896 fi 897 898 # see if we can hide zlib internal symbols that are linked between separate source files 899 if test "$gcc" -eq 1; then 900 echo >> configure.log 901 cat > $test.c <<EOF 902 #define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) 903 int ZLIB_INTERNAL foo; 904 int main() 905 { 906 return 0; 907 } 908 EOF 909 if tryboth $CC -c $CFLAGS $test.c; then 910 CFLAGS="$CFLAGS -DHAVE_HIDDEN" 911 SFLAGS="$SFLAGS -DHAVE_HIDDEN" 912 echo "Checking for attribute(visibility) support... Yes." | tee -a configure.log 913 else 914 echo "Checking for attribute(visibility) support... No." | tee -a configure.log 915 fi 916 fi 917 918 # check for ibm s390x build 919 HAVE_S390X=0 920 cat > $test.c << EOF 921 #ifndef __s390x__ 922 #error 923 #endif 924 EOF 925 if try $CC -c $CFLAGS $test.c; then 926 echo "Checking for s390x build ... Yes." | tee -a configure.log 927 HAVE_S390X=1 928 else 929 echo "Checking for s390x build ... No." | tee -a configure.log 930 fi 931 932 # check for ibm s390x vx vector extensions 933 HAVE_S390X_VX=0 934 if test $HAVE_S390X -eq 1 && test $enable_crcvx -eq 1 ; then 935 # preset the compiler specific flags 936 if test $clang -eq 1; then 937 VGFMAFLAG=-fzvector 938 else 939 VGFMAFLAG=-mzarch 940 fi 941 942 cat > $test.c <<EOF 943 #ifndef __s390x__ 944 #error 945 #endif 946 #include <vecintrin.h> 947 int main(void) { 948 unsigned long long a __attribute__((vector_size(16))) = { 0 }; 949 unsigned long long b __attribute__((vector_size(16))) = { 0 }; 950 unsigned char c __attribute__((vector_size(16))) = { 0 }; 951 c = vec_gfmsum_accum_128(a, b, c); 952 return c[0]; 953 } 954 EOF 955 956 # cflags already contains a valid march 957 if try $CC -c $CFLAGS $VGFMAFLAG $test.c; then 958 echo "Checking for s390x vx vector extension ... Yes." | tee -a configure.log 959 HAVE_S390X_VX=1 960 # or set march for our compile units 961 elif try $CC -c $CFLAGS $VGFMAFLAG -march=z13 $test.c; then 962 echo "Checking for s390x vx vector extension (march=z13) ... Yes." | tee -a configure.log 963 HAVE_S390X_VX=1 964 VGFMAFLAG="$VGFMAFLAG -march=z13" 965 # else we are not on s390x 966 else 967 echo "Checking for s390x vx vector extension ... No." | tee -a configure.log 968 fi 969 970 # prepare compiling for s390x 971 if test $HAVE_S390X_VX -eq 1; then 972 CFLAGS="$CFLAGS -DHAVE_S390X_VX" 973 SFLAGS="$SFLAGS -DHAVE_S390X_VX" 974 OBJC="$OBJC crc32_vx.o" 975 PIC_OBJC="$PIC_OBJC crc32_vx.lo" 976 else 977 # target has no vx extension 978 VGFMAFLAG="" 979 fi 980 fi 981 982 # show the results in the log 983 echo >> configure.log 984 echo ALL = $ALL >> configure.log 985 echo AR = $AR >> configure.log 986 echo ARFLAGS = $ARFLAGS >> configure.log 987 echo CC = $CC >> configure.log 988 echo CFLAGS = $CFLAGS >> configure.log 989 echo CPP = $CPP >> configure.log 990 echo EXE = $EXE >> configure.log 991 echo LDCONFIG = $LDCONFIG >> configure.log 992 echo LDFLAGS = $LDFLAGS >> configure.log 993 echo LDSHARED = $LDSHARED >> configure.log 994 echo LDSHAREDLIBC = $LDSHAREDLIBC >> configure.log 995 echo OBJC = $OBJC >> configure.log 996 echo PIC_OBJC = $PIC_OBJC >> configure.log 997 echo RANLIB = $RANLIB >> configure.log 998 echo SFLAGS = $SFLAGS >> configure.log 999 echo SHAREDLIB = $SHAREDLIB >> configure.log 1000 echo SHAREDLIBM = $SHAREDLIBM >> configure.log 1001 echo SHAREDLIBV = $SHAREDLIBV >> configure.log 1002 echo STATICLIB = $STATICLIB >> configure.log 1003 echo TEST = $TEST >> configure.log 1004 echo VER = $VER >> configure.log 1005 echo SRCDIR = $SRCDIR >> configure.log 1006 echo exec_prefix = $exec_prefix >> configure.log 1007 echo includedir = $includedir >> configure.log 1008 echo libdir = $libdir >> configure.log 1009 echo mandir = $mandir >> configure.log 1010 echo prefix = $prefix >> configure.log 1011 echo sharedlibdir = $sharedlibdir >> configure.log 1012 echo uname = $uname >> configure.log 1013 echo HAVE_S390X = $HAVE_S390X >> configure.log 1014 echo HAVE_S390X_VX = $HAVE_S390X_VX >> configure.log 1015 echo VGFMAFLAG = $VGFMAFLAG >> configure.log 1016 1017 # update Makefile with the configure results 1018 sed < ${SRCDIR}Makefile.in " 1019 /^CC *=/s#=.*#=$CC# 1020 /^GCOV *=/s#=.*#=$GCOV# 1021 /^LLVM_GCOV_FLAG *=/s#=.*#=$LLVM_GCOV_FLAG# 1022 /^CFLAGS *=/s#=.*#=$CFLAGS# 1023 /^SFLAGS *=/s#=.*#=$SFLAGS# 1024 /^LDFLAGS *=/s#=.*#=$LDFLAGS# 1025 /^LDSHARED *=/s#=.*#=$LDSHARED# 1026 /^CPP *=/s#=.*#=$CPP# 1027 /^STATICLIB *=/s#=.*#=$STATICLIB# 1028 /^SHAREDLIB *=/s#=.*#=$SHAREDLIB# 1029 /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# 1030 /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# 1031 /^AR *=/s#=.*#=$AR# 1032 /^ARFLAGS *=/s#=.*#=$ARFLAGS# 1033 /^RANLIB *=/s#=.*#=$RANLIB# 1034 /^LDCONFIG *=/s#=.*#=$LDCONFIG# 1035 /^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC# 1036 /^EXE *=/s#=.*#=$EXE# 1037 /^SRCDIR *=/s#=.*#=$SRCDIR# 1038 /^ZINC *=/s#=.*#=$ZINC# 1039 /^ZINCOUT *=/s#=.*#=$ZINCOUT# 1040 /^prefix *=/s#=.*#=$prefix# 1041 /^exec_prefix *=/s#=.*#=$exec_prefix# 1042 /^libdir *=/s#=.*#=$libdir# 1043 /^sharedlibdir *=/s#=.*#=$sharedlibdir# 1044 /^includedir *=/s#=.*#=$includedir# 1045 /^mandir *=/s#=.*#=$mandir# 1046 /^OBJC *=/s#=.*#= $OBJC# 1047 /^PIC_OBJC *=/s#=.*#= $PIC_OBJC# 1048 /^all: */s#:.*#: $ALL# 1049 /^test: */s#:.*#: $TEST# 1050 " > Makefile 1051 1052 # create zlib.pc with the configure results 1053 sed < ${SRCDIR}zlib.pc.in " 1054 /^CC *=/s#=.*#=$CC# 1055 /^CFLAGS *=/s#=.*#=$CFLAGS# 1056 /^CPP *=/s#=.*#=$CPP# 1057 /^LDSHARED *=/s#=.*#=$LDSHARED# 1058 /^STATICLIB *=/s#=.*#=$STATICLIB# 1059 /^SHAREDLIB *=/s#=.*#=$SHAREDLIB# 1060 /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# 1061 /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# 1062 /^AR *=/s#=.*#=$AR# 1063 /^ARFLAGS *=/s#=.*#=$ARFLAGS# 1064 /^RANLIB *=/s#=.*#=$RANLIB# 1065 /^EXE *=/s#=.*#=$EXE# 1066 /^prefix *=/s#=.*#=$prefix# 1067 /^exec_prefix *=/s#=.*#=$exec_prefix# 1068 /^libdir *=/s#=.*#=$libdir# 1069 /^sharedlibdir *=/s#=.*#=$sharedlibdir# 1070 /^includedir *=/s#=.*#=$includedir# 1071 /^mandir *=/s#=.*#=$mandir# 1072 /^LDFLAGS *=/s#=.*#=$LDFLAGS# 1073 " | sed -e " 1074 s/\@VERSION\@/$VER/g; 1075 " > zlib.pc 1076 1077 # done 1078 leave 0 1079