1 #!/bin/sh 2 # configure script for zlib. This script is needed only if 3 # you wish to build a shared library and your system supports them, 4 # of if you need special compiler, flags or install directory. 5 # Otherwise, you can just use directly "make test; make install" 6 # 7 # To create a shared library, use "configure --shared"; by default a static 8 # library is created. If the primitive shared library support provided here 9 # does not work, use ftp://prep.ai.mit.edu/pub/gnu/libtool-*.tar.gz 10 # 11 # To impose specific compiler or flags or install directory, use for example: 12 # prefix=$HOME CC=cc CFLAGS="-O4" ./configure 13 # or for csh/tcsh users: 14 # (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure) 15 # LDSHARED is the command to be used to create a shared library 16 17 # Incorrect settings of CC or CFLAGS may prevent creating a shared library. 18 # If you have problems, try without defining CC and CFLAGS before reporting 19 # an error. 20 21 LIBS=libz.a 22 LDFLAGS="-L. ${LIBS}" 23 VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h` 24 VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h` 25 VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h` 26 AR=${AR-"ar rc"} 27 RANLIB=${RANLIB-"ranlib"} 28 prefix=${prefix-/usr/local} 29 exec_prefix=${exec_prefix-'${prefix}'} 30 libdir=${libdir-'${exec_prefix}/lib'} 31 includedir=${includedir-'${prefix}/include'} 32 mandir=${mandir-'${prefix}/share/man'} 33 shared_ext='.so' 34 shared=0 35 gcc=0 36 old_cc="$CC" 37 old_cflags="$CFLAGS" 38 39 while test $# -ge 1 40 do 41 case "$1" in 42 -h* | --h*) 43 echo 'usage:' 44 echo ' configure [--shared] [--prefix=PREFIX] [--exec_prefix=EXPREFIX]' 45 echo ' [--libdir=LIBDIR] [--includedir=INCLUDEDIR]' 46 exit 0;; 47 -p*=* | --p*=*) prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; 48 -e*=* | --e*=*) exec_prefix=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; 49 -l*=* | --libdir=*) libdir=`echo $1 | sed 's/[-a-z_]*=//'`; shift;; 50 -i*=* | --includedir=*) includedir=`echo $1 | sed 's/[-a-z_]*=//'`;shift;; 51 -p* | --p*) prefix="$2"; shift; shift;; 52 -e* | --e*) exec_prefix="$2"; shift; shift;; 53 -l* | --l*) libdir="$2"; shift; shift;; 54 -i* | --i*) includedir="$2"; shift; shift;; 55 -s* | --s*) shared=1; shift;; 56 *) echo "unknown option: $1"; echo "$0 --help for help"; exit 1;; 57 esac 58 done 59 60 test=ztest$$ 61 cat > $test.c <<EOF 62 extern int getchar(); 63 int hello() {return getchar();} 64 EOF 65 66 test -z "$CC" && echo Checking for gcc... 67 cc=${CC-gcc} 68 cflags=${CFLAGS-"-O3"} 69 # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure 70 case "$cc" in 71 *gcc*) gcc=1;; 72 esac 73 74 if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) 2>/dev/null; then 75 CC="$cc" 76 SFLAGS=${CFLAGS-"-fPIC -O3"} 77 CFLAGS="$cflags" 78 case `(uname -s || echo unknown) 2>/dev/null` in 79 Linux | linux | GNU | GNU/*) LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1"};; 80 CYGWIN* | Cygwin* | cygwin* | OS/2* ) 81 EXE='.exe';; 82 QNX*) # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4 83 # (alain.bonnefoy (at] icbt.com) 84 LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"};; 85 HP-UX*) 86 LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"} 87 case `(uname -m || echo unknown) 2>/dev/null` in 88 ia64) 89 shared_ext='.so' 90 SHAREDLIB='libz.so';; 91 *) 92 shared_ext='.sl' 93 SHAREDLIB='libz.sl';; 94 esac;; 95 Darwin*) shared_ext='.dylib' 96 SHAREDLIB=libz$shared_ext 97 SHAREDLIBV=libz.$VER$shared_ext 98 SHAREDLIBM=libz.$VER1$shared_ext 99 LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER"};; 100 *) LDSHARED=${LDSHARED-"$cc -shared"};; 101 esac 102 else 103 # find system name and corresponding cc options 104 CC=${CC-cc} 105 case `(uname -sr || echo unknown) 2>/dev/null` in 106 HP-UX*) SFLAGS=${CFLAGS-"-O +z"} 107 CFLAGS=${CFLAGS-"-O"} 108 # LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"} 109 LDSHARED=${LDSHARED-"ld -b"} 110 case `(uname -m || echo unknown) 2>/dev/null` in 111 ia64) 112 shared_ext='.so' 113 SHAREDLIB='libz.so';; 114 *) 115 shared_ext='.sl' 116 SHAREDLIB='libz.sl';; 117 esac;; 118 IRIX*) SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."} 119 CFLAGS=${CFLAGS-"-ansi -O2"} 120 LDSHARED=${LDSHARED-"cc -shared"};; 121 OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"} 122 CFLAGS=${CFLAGS-"-O -std1"} 123 LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"};; 124 OSF1*) SFLAGS=${CFLAGS-"-O -std1"} 125 CFLAGS=${CFLAGS-"-O -std1"} 126 LDSHARED=${LDSHARED-"cc -shared"};; 127 QNX*) SFLAGS=${CFLAGS-"-4 -O"} 128 CFLAGS=${CFLAGS-"-4 -O"} 129 LDSHARED=${LDSHARED-"cc"} 130 RANLIB=${RANLIB-"true"} 131 AR="cc -A";; 132 SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "} 133 CFLAGS=${CFLAGS-"-O3"} 134 LDSHARED=${LDSHARED-"cc -dy -KPIC -G"};; 135 SunOS\ 5*) SFLAGS=${CFLAGS-"-fast -xcg89 -KPIC -R."} 136 CFLAGS=${CFLAGS-"-fast -xcg89"} 137 LDSHARED=${LDSHARED-"cc -G"};; 138 SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"} 139 CFLAGS=${CFLAGS-"-O2"} 140 LDSHARED=${LDSHARED-"ld"};; 141 SunStudio\ 9*) SFLAGS=${CFLAGS-"-DUSE_MMAP -fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"} 142 CFLAGS=${CFLAGS-"-DUSE_MMAP -fast -xtarget=ultra3 -xarch=v9b"} 143 LDSHARED=${LDSHARED-"cc -xarch=v9b"};; 144 UNIX_System_V\ 4.2.0) 145 SFLAGS=${CFLAGS-"-KPIC -O"} 146 CFLAGS=${CFLAGS-"-O"} 147 LDSHARED=${LDSHARED-"cc -G"};; 148 UNIX_SV\ 4.2MP) 149 SFLAGS=${CFLAGS-"-Kconform_pic -O"} 150 CFLAGS=${CFLAGS-"-O"} 151 LDSHARED=${LDSHARED-"cc -G"};; 152 OpenUNIX\ 5) 153 SFLAGS=${CFLAGS-"-KPIC -O"} 154 CFLAGS=${CFLAGS-"-O"} 155 LDSHARED=${LDSHARED-"cc -G"};; 156 AIX*) # Courtesy of dbakker (at] arrayasolutions.com 157 SFLAGS=${CFLAGS-"-O -qmaxmem=8192"} 158 CFLAGS=${CFLAGS-"-O -qmaxmem=8192"} 159 LDSHARED=${LDSHARED-"xlc -G"};; 160 # send working options for other systems to support (at] gzip.org 161 *) SFLAGS=${CFLAGS-"-O"} 162 CFLAGS=${CFLAGS-"-O"} 163 LDSHARED=${LDSHARED-"cc -shared"};; 164 esac 165 fi 166 167 SHAREDLIB=${SHAREDLIB-"libz$shared_ext"} 168 SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"} 169 SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"} 170 171 if test $shared -eq 1; then 172 echo Checking for shared library support... 173 # we must test in two steps (cc then ld), required at least on SunOS 4.x 174 if test "`($CC -c $SFLAGS $test.c) 2>&1`" = "" && 175 test "`($LDSHARED -o $test$shared_ext $test.o) 2>&1`" = ""; then 176 CFLAGS="$SFLAGS" 177 LIBS="$SHAREDLIBV" 178 echo Building shared library $SHAREDLIBV with $CC. 179 elif test -z "$old_cc" -a -z "$old_cflags"; then 180 echo No shared library support. 181 shared=0; 182 else 183 echo 'No shared library support; try without defining CC and CFLAGS' 184 shared=0; 185 fi 186 fi 187 if test $shared -eq 0; then 188 LDSHARED="$CC" 189 echo Building static library $LIBS version $VER with $CC. 190 else 191 LDFLAGS="-L. ${SHAREDLIBV}" 192 fi 193 194 cat > $test.c <<EOF 195 #include <unistd.h> 196 int main() { return 0; } 197 EOF 198 if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then 199 sed < zconf.in.h "/HAVE_UNISTD_H/s%0%1%" > zconf.h 200 echo "Checking for unistd.h... Yes." 201 else 202 cp -p zconf.in.h zconf.h 203 echo "Checking for unistd.h... No." 204 fi 205 206 cat > $test.c <<EOF 207 #include <stdio.h> 208 #include <stdarg.h> 209 #include "zconf.h" 210 211 int main() 212 { 213 #ifndef STDC 214 choke me 215 #endif 216 217 return 0; 218 } 219 EOF 220 221 if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then 222 echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()" 223 224 cat > $test.c <<EOF 225 #include <stdio.h> 226 #include <stdarg.h> 227 228 int mytest(char *fmt, ...) 229 { 230 char buf[20]; 231 va_list ap; 232 233 va_start(ap, fmt); 234 vsnprintf(buf, sizeof(buf), fmt, ap); 235 va_end(ap); 236 return 0; 237 } 238 239 int main() 240 { 241 return (mytest("Hello%d\n", 1)); 242 } 243 EOF 244 245 if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then 246 echo "Checking for vsnprintf() in stdio.h... Yes." 247 248 cat >$test.c <<EOF 249 #include <stdio.h> 250 #include <stdarg.h> 251 252 int mytest(char *fmt, ...) 253 { 254 int n; 255 char buf[20]; 256 va_list ap; 257 258 va_start(ap, fmt); 259 n = vsnprintf(buf, sizeof(buf), fmt, ap); 260 va_end(ap); 261 return n; 262 } 263 264 int main() 265 { 266 return (mytest("Hello%d\n", 1)); 267 } 268 EOF 269 270 if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then 271 echo "Checking for return value of vsnprintf()... Yes." 272 else 273 CFLAGS="$CFLAGS -DHAS_vsnprintf_void" 274 echo "Checking for return value of vsnprintf()... No." 275 echo " WARNING: apparently vsnprintf() does not return a value. zlib" 276 echo " can build but will be open to possible string-format security" 277 echo " vulnerabilities." 278 fi 279 else 280 CFLAGS="$CFLAGS -DNO_vsnprintf" 281 echo "Checking for vsnprintf() in stdio.h... No." 282 echo " WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" 283 echo " can build but will be open to possible buffer-overflow security" 284 echo " vulnerabilities." 285 286 cat >$test.c <<EOF 287 #include <stdio.h> 288 #include <stdarg.h> 289 290 int mytest(char *fmt, ...) 291 { 292 int n; 293 char buf[20]; 294 va_list ap; 295 296 va_start(ap, fmt); 297 n = vsprintf(buf, fmt, ap); 298 va_end(ap); 299 return n; 300 } 301 302 int main() 303 { 304 return (mytest("Hello%d\n", 1)); 305 } 306 EOF 307 308 if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then 309 echo "Checking for return value of vsprintf()... Yes." 310 else 311 CFLAGS="$CFLAGS -DHAS_vsprintf_void" 312 echo "Checking for return value of vsprintf()... No." 313 echo " WARNING: apparently vsprintf() does not return a value. zlib" 314 echo " can build but will be open to possible string-format security" 315 echo " vulnerabilities." 316 fi 317 fi 318 else 319 echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()" 320 321 cat >$test.c <<EOF 322 #include <stdio.h> 323 324 int mytest() 325 { 326 char buf[20]; 327 328 snprintf(buf, sizeof(buf), "%s", "foo"); 329 return 0; 330 } 331 332 int main() 333 { 334 return (mytest()); 335 } 336 EOF 337 338 if test "`($CC $CFLAGS -o $test $test.c) 2>&1`" = ""; then 339 echo "Checking for snprintf() in stdio.h... Yes." 340 341 cat >$test.c <<EOF 342 #include <stdio.h> 343 344 int mytest() 345 { 346 char buf[20]; 347 348 return snprintf(buf, sizeof(buf), "%s", "foo"); 349 } 350 351 int main() 352 { 353 return (mytest()); 354 } 355 EOF 356 357 if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then 358 echo "Checking for return value of snprintf()... Yes." 359 else 360 CFLAGS="$CFLAGS -DHAS_snprintf_void" 361 echo "Checking for return value of snprintf()... No." 362 echo " WARNING: apparently snprintf() does not return a value. zlib" 363 echo " can build but will be open to possible string-format security" 364 echo " vulnerabilities." 365 fi 366 else 367 CFLAGS="$CFLAGS -DNO_snprintf" 368 echo "Checking for snprintf() in stdio.h... No." 369 echo " WARNING: snprintf() not found, falling back to sprintf(). zlib" 370 echo " can build but will be open to possible buffer-overflow security" 371 echo " vulnerabilities." 372 373 cat >$test.c <<EOF 374 #include <stdio.h> 375 376 int mytest() 377 { 378 char buf[20]; 379 380 return sprintf(buf, "%s", "foo"); 381 } 382 383 int main() 384 { 385 return (mytest()); 386 } 387 EOF 388 389 if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then 390 echo "Checking for return value of sprintf()... Yes." 391 else 392 CFLAGS="$CFLAGS -DHAS_sprintf_void" 393 echo "Checking for return value of sprintf()... No." 394 echo " WARNING: apparently sprintf() does not return a value. zlib" 395 echo " can build but will be open to possible string-format security" 396 echo " vulnerabilities." 397 fi 398 fi 399 fi 400 401 cat >$test.c <<EOF 402 #include <errno.h> 403 int main() { return 0; } 404 EOF 405 if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then 406 echo "Checking for errno.h... Yes." 407 else 408 echo "Checking for errno.h... No." 409 CFLAGS="$CFLAGS -DNO_ERRNO_H" 410 fi 411 412 cat > $test.c <<EOF 413 #include <sys/types.h> 414 #include <sys/mman.h> 415 #include <sys/stat.h> 416 caddr_t hello() { 417 return mmap((caddr_t)0, (off_t)0, PROT_READ, MAP_SHARED, 0, (off_t)0); 418 } 419 EOF 420 if test "`($CC -c $CFLAGS $test.c) 2>&1`" = ""; then 421 CFLAGS="$CFLAGS -DUSE_MMAP" 422 echo Checking for mmap support... Yes. 423 else 424 echo Checking for mmap support... No. 425 fi 426 427 CPP=${CPP-"$CC -E"} 428 case $CFLAGS in 429 *ASMV*) 430 if test "`nm $test.o | grep _hello`" = ""; then 431 CPP="$CPP -DNO_UNDERLINE" 432 echo Checking for underline in external names... No. 433 else 434 echo Checking for underline in external names... Yes. 435 fi;; 436 esac 437 438 rm -f $test.[co] $test $test$shared_ext 439 440 # udpate Makefile 441 sed < Makefile.in " 442 /^CC *=/s#=.*#=$CC# 443 /^CFLAGS *=/s#=.*#=$CFLAGS# 444 /^CPP *=/s#=.*#=$CPP# 445 /^LDSHARED *=/s#=.*#=$LDSHARED# 446 /^LIBS *=/s#=.*#=$LIBS# 447 /^SHAREDLIB *=/s#=.*#=$SHAREDLIB# 448 /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# 449 /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# 450 /^AR *=/s#=.*#=$AR# 451 /^RANLIB *=/s#=.*#=$RANLIB# 452 /^EXE *=/s#=.*#=$EXE# 453 /^prefix *=/s#=.*#=$prefix# 454 /^exec_prefix *=/s#=.*#=$exec_prefix# 455 /^libdir *=/s#=.*#=$libdir# 456 /^includedir *=/s#=.*#=$includedir# 457 /^mandir *=/s#=.*#=$mandir# 458 /^LDFLAGS *=/s#=.*#=$LDFLAGS# 459 " > Makefile 460