]> git.lizzy.rs Git - zlib.git/blob - configure
Recognize clang as gcc.
[zlib.git] / configure
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 echo -------------------- >> configure.log
17 echo $0 $* >> configure.log
18 date >> configure.log
19
20 if [ -n "${CHOST}" ]; then
21     uname="`echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/'`"
22     CROSS_PREFIX="${CHOST}-"
23 fi
24
25 STATICLIB=libz.a
26 VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`
27 VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < zlib.h`
28 VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h`
29 VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < zlib.h`
30 if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then
31     AR=${AR-"${CROSS_PREFIX}ar"}
32     test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
33 else
34     AR=${AR-"ar"}
35     test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
36 fi
37 ARFLAGS=${ARFLAGS-"rc"}
38 if "${CROSS_PREFIX}ranlib" --version >/dev/null 2>/dev/null || test $? -lt 126; then
39     RANLIB=${RANLIB-"${CROSS_PREFIX}ranlib"}
40     test -n "${CROSS_PREFIX}" && echo Using ${RANLIB} | tee -a configure.log
41 else
42     RANLIB=${RANLIB-"ranlib"}
43 fi
44 if "${CROSS_PREFIX}nm" --version >/dev/null 2>/dev/null || test $? -lt 126; then
45     NM=${NM-"${CROSS_PREFIX}nm"}
46     test -n "${CROSS_PREFIX}" && echo Using ${NM} | tee -a configure.log
47 else
48     NM=${NM-"nm"}
49 fi
50 LDCONFIG=${LDCONFIG-"ldconfig"}
51 LDSHAREDLIBC="${LDSHAREDLIBC--lc}"
52 ARCHS=
53 prefix=${prefix-/usr/local}
54 exec_prefix=${exec_prefix-'${prefix}'}
55 libdir=${libdir-'${exec_prefix}/lib'}
56 sharedlibdir=${sharedlibdir-'${libdir}'}
57 includedir=${includedir-'${prefix}/include'}
58 mandir=${mandir-'${prefix}/share/man'}
59 shared_ext='.so'
60 shared=1
61 solo=0
62 cover=0
63 zprefix=0
64 build64=0
65 gcc=0
66 old_cc="$CC"
67 old_cflags="$CFLAGS"
68 OBJC='$(OBJZ) $(OBJG)'
69 PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)'
70
71 while test $# -ge 1
72 do
73 case "$1" in
74     -h* | --help)
75       echo 'usage:' | tee -a configure.log
76       echo '  configure [--zprefix] [--prefix=PREFIX]  [--eprefix=EXPREFIX]' | tee -a configure.log
77       echo '    [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log
78       echo '    [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]' | tee -a configure.log
79         exit 0 ;;
80     -p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;;
81     -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;;
82     -l*=* | --libdir=*) libdir=`echo $1 | sed 's/.*=//'`; shift ;;
83     --sharedlibdir=*) sharedlibdir=`echo $1 | sed 's/.*=//'`; shift ;;
84     -i*=* | --includedir=*) includedir=`echo $1 | sed 's/.*=//'`;shift ;;
85     -u*=* | --uname=*) uname=`echo $1 | sed 's/.*=//'`;shift ;;
86     -p* | --prefix) prefix="$2"; shift; shift ;;
87     -e* | --eprefix) exec_prefix="$2"; shift; shift ;;
88     -l* | --libdir) libdir="$2"; shift; shift ;;
89     -i* | --includedir) includedir="$2"; shift; shift ;;
90     -s* | --shared | --enable-shared) shared=1; shift ;;
91     -t | --static) shared=0; shift ;;
92     --solo) solo=1; shift ;;
93     --cover) cover=1; shift ;;
94     -z* | --zprefix) zprefix=1; shift ;;
95     -6* | --64) build64=1; shift ;;
96     -a*=* | --archs=*) ARCHS=`echo $1 | sed 's/.*=//'`; shift ;;
97     --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;;
98     --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;;
99     *) echo "unknown option: $1"; echo "$0 --help for help" | tee -a configure.log; exit 1 ;;
100     esac
101 done
102
103 test=ztest$$
104
105 show()
106 {
107   case "$*" in
108     *$test.c*)
109       echo === $test.c === >> configure.log
110       cat $test.c >> configure.log
111       echo === >> configure.log;;
112   esac
113   echo $* >> configure.log
114 }
115
116 cat > $test.c <<EOF
117 #error error
118 EOF
119 if ($CC -c $CFLAGS $test.c) 2>/dev/null; then
120   try()
121   {
122     show $*
123     test "`( $* ) 2>&1 | tee -a configure.log`" = ""
124   }
125   echo - using any output from compiler to indicate an error >> configure.log
126 else
127   try()
128   {
129     show $*
130     ( $* ) >> configure.log 2>&1
131     ret=$?
132     if test $ret -ne 0; then
133       echo "(exit code "$ret")" >> configure.log
134     fi
135     return $ret
136   }
137 fi
138
139 tryboth()
140 {
141   show $*
142   got=`( $* ) 2>&1`
143   ret=$?
144   printf %s "$got" >> configure.log
145   if test $ret -ne 0; then
146     return $ret
147   fi
148   test "$got" = ""
149 }
150
151 echo >> configure.log
152
153 cat > $test.c <<EOF
154 extern int getchar();
155 int hello() {return getchar();}
156 EOF
157
158 test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
159 cc=${CC-${CROSS_PREFIX}gcc}
160 cflags=${CFLAGS-"-O3"}
161 # to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
162 case "$cc" in
163   *gcc*) gcc=1 ;;
164   *clang*) gcc=1 ;;
165 esac
166 case `$cc -v 2>&1` in
167   *gcc*) gcc=1 ;;
168 esac
169
170 show $cc -c $cflags $test.c
171 if test "$gcc" -eq 1 && ($cc -c $cflags $test.c) >> configure.log 2>&1; then
172   echo ... using gcc >> configure.log
173   CC="$cc"
174   CFLAGS="${CFLAGS--O3} ${ARCHS}"
175   SFLAGS="${CFLAGS--O3} -fPIC"
176   LDFLAGS="${LDFLAGS} ${ARCHS}"
177   if test $build64 -eq 1; then
178     CFLAGS="${CFLAGS} -m64"
179     SFLAGS="${SFLAGS} -m64"
180   fi
181   if test "${ZLIBGCCWARN}" = "YES"; then
182     CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
183   fi
184   if test -z "$uname"; then
185     uname=`(uname -s || echo unknown) 2>/dev/null`
186   fi
187   case "$uname" in
188   Linux* | linux* | GNU | GNU/* | solaris*)
189         LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"} ;;
190   *BSD | *bsd* | DragonFly)
191         LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map"}
192         LDCONFIG="ldconfig -m" ;;
193   CYGWIN* | Cygwin* | cygwin* | OS/2*)
194         EXE='.exe' ;;
195   MINGW* | mingw*)
196 # temporary bypass
197         rm -f $test.[co] $test $test$shared_ext
198         echo "Please use win32/Makefile.gcc instead." | tee -a configure.log
199         exit 1
200         LDSHARED=${LDSHARED-"$cc -shared"}
201         LDSHAREDLIBC=""
202         EXE='.exe' ;;
203   QNX*)  # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4
204          # (alain.bonnefoy@icbt.com)
205                  LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"} ;;
206   HP-UX*)
207          LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"}
208          case `(uname -m || echo unknown) 2>/dev/null` in
209          ia64)
210                  shared_ext='.so'
211                  SHAREDLIB='libz.so' ;;
212          *)
213                  shared_ext='.sl'
214                  SHAREDLIB='libz.sl' ;;
215          esac ;;
216   Darwin* | darwin*)
217              shared_ext='.dylib'
218              SHAREDLIB=libz$shared_ext
219              SHAREDLIBV=libz.$VER$shared_ext
220              SHAREDLIBM=libz.$VER1$shared_ext
221              LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"}
222              AR="libtool"
223              ARFLAGS="-o" ;;
224   *)             LDSHARED=${LDSHARED-"$cc -shared"} ;;
225   esac
226 else
227   # find system name and corresponding cc options
228   CC=${CC-cc}
229   gcc=0
230   echo ... using $CC >> configure.log
231   if test -z "$uname"; then
232     uname=`(uname -sr || echo unknown) 2>/dev/null`
233   fi
234   case "$uname" in
235   HP-UX*)    SFLAGS=${CFLAGS-"-O +z"}
236              CFLAGS=${CFLAGS-"-O"}
237 #            LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"}
238              LDSHARED=${LDSHARED-"ld -b"}
239          case `(uname -m || echo unknown) 2>/dev/null` in
240          ia64)
241              shared_ext='.so'
242              SHAREDLIB='libz.so' ;;
243          *)
244              shared_ext='.sl'
245              SHAREDLIB='libz.sl' ;;
246          esac ;;
247   IRIX*)     SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."}
248              CFLAGS=${CFLAGS-"-ansi -O2"}
249              LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;;
250   OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"}
251              CFLAGS=${CFLAGS-"-O -std1"}
252              LDFLAGS="${LDFLAGS} -Wl,-rpath,."
253              LDSHARED=${LDSHARED-"cc -shared  -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"} ;;
254   OSF1*)     SFLAGS=${CFLAGS-"-O -std1"}
255              CFLAGS=${CFLAGS-"-O -std1"}
256              LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;;
257   QNX*)      SFLAGS=${CFLAGS-"-4 -O"}
258              CFLAGS=${CFLAGS-"-4 -O"}
259              LDSHARED=${LDSHARED-"cc"}
260              RANLIB=${RANLIB-"true"}
261              AR="cc"
262              ARFLAGS="-A" ;;
263   SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "}
264              CFLAGS=${CFLAGS-"-O3"}
265              LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;;
266   SunOS\ 5* | solaris*)
267          LDSHARED=${LDSHARED-"cc -G"}
268          case `(uname -m || echo unknown) 2>/dev/null` in
269          i86*)
270              SFLAGS=${CFLAGS-"-xpentium -fast -KPIC -R."}
271              CFLAGS=${CFLAGS-"-xpentium -fast"} ;;
272          *)
273              SFLAGS=${CFLAGS-"-fast -xcg92 -KPIC -R."}
274              CFLAGS=${CFLAGS-"-fast -xcg92"} ;;
275          esac ;;
276   SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"}
277              CFLAGS=${CFLAGS-"-O2"}
278              LDSHARED=${LDSHARED-"ld"} ;;
279   SunStudio\ 9*) SFLAGS=${CFLAGS-"-fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"}
280              CFLAGS=${CFLAGS-"-fast -xtarget=ultra3 -xarch=v9b"}
281              LDSHARED=${LDSHARED-"cc -xarch=v9b"} ;;
282   UNIX_System_V\ 4.2.0)
283              SFLAGS=${CFLAGS-"-KPIC -O"}
284              CFLAGS=${CFLAGS-"-O"}
285              LDSHARED=${LDSHARED-"cc -G"} ;;
286   UNIX_SV\ 4.2MP)
287              SFLAGS=${CFLAGS-"-Kconform_pic -O"}
288              CFLAGS=${CFLAGS-"-O"}
289              LDSHARED=${LDSHARED-"cc -G"} ;;
290   OpenUNIX\ 5)
291              SFLAGS=${CFLAGS-"-KPIC -O"}
292              CFLAGS=${CFLAGS-"-O"}
293              LDSHARED=${LDSHARED-"cc -G"} ;;
294   AIX*)  # Courtesy of dbakker@arrayasolutions.com
295              SFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
296              CFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
297              LDSHARED=${LDSHARED-"xlc -G"} ;;
298   # send working options for other systems to zlib@gzip.org
299   *)         SFLAGS=${CFLAGS-"-O"}
300              CFLAGS=${CFLAGS-"-O"}
301              LDSHARED=${LDSHARED-"cc -shared"} ;;
302   esac
303 fi
304
305 SHAREDLIB=${SHAREDLIB-"libz$shared_ext"}
306 SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"}
307 SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"}
308
309 echo >> configure.log
310
311 if test $shared -eq 1; then
312   echo Checking for shared library support... | tee -a configure.log
313   # we must test in two steps (cc then ld), required at least on SunOS 4.x
314   if try $CC -w -c $SFLAGS $test.c &&
315      try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then
316     echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log
317   elif test -z "$old_cc" -a -z "$old_cflags"; then
318     echo No shared library support. | tee -a configure.log
319     shared=0;
320   else
321     echo 'No shared library support; try without defining CC and CFLAGS' | tee -a configure.log
322     shared=0;
323   fi
324 fi
325 if test $shared -eq 0; then
326   LDSHARED="$CC"
327   ALL="static"
328   TEST="all teststatic"
329   SHAREDLIB=""
330   SHAREDLIBV=""
331   SHAREDLIBM=""
332   echo Building static library $STATICLIB version $VER with $CC. | tee -a configure.log
333 else
334   ALL="static shared"
335   TEST="all teststatic testshared"
336 fi
337
338 CPP=${CPP-"$CC -E"}
339 case $CFLAGS in
340   *ASMV*)
341     echo >> configure.log
342     show "$NM $test.o | grep _hello"
343     if test "`$NM $test.o | grep _hello | tee -a configure.log`" = ""; then
344       CPP="$CPP -DNO_UNDERLINE"
345       echo Checking for underline in external names... No. | tee -a configure.log
346     else
347       echo Checking for underline in external names... Yes. | tee -a configure.log
348     fi ;;
349 esac
350
351 echo >> configure.log
352
353 cat > $test.c <<EOF
354 #include <sys/types.h>
355 off64_t dummy = 0;
356 EOF
357 if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then
358   CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1"
359   SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1"
360   ALL="${ALL} all64"
361   TEST="${TEST} test64"
362   echo "Checking for off64_t... Yes." | tee -a configure.log
363   echo "Checking for fseeko... Yes." | tee -a configure.log
364 else
365   echo "Checking for off64_t... No." | tee -a configure.log
366   echo >> configure.log
367   cat > $test.c <<EOF
368 #include <stdio.h>
369 int main(void) {
370   fseeko(NULL, 0, 0);
371   return 0;
372 }
373 EOF
374   if try $CC $CFLAGS -o $test $test.c; then
375     echo "Checking for fseeko... Yes." | tee -a configure.log
376   else
377     CFLAGS="${CFLAGS} -DNO_FSEEKO"
378     SFLAGS="${SFLAGS} -DNO_FSEEKO"
379     echo "Checking for fseeko... No." | tee -a configure.log
380   fi
381 fi
382
383 echo >> configure.log
384
385 cat > $test.c <<EOF
386 #include <string.h>
387 #include <errno.h>
388 int main() { return strlen(strerror(errno)); }
389 EOF
390 if try $CC $CFLAGS -o $test $test.c; then
391   echo "Checking for strerror... Yes." | tee -a configure.log
392 else
393   CFLAGS="${CFLAGS} -DNO_STRERROR"
394   SFLAGS="${SFLAGS} -DNO_STRERROR"
395   echo "Checking for strerror... No." | tee -a configure.log
396 fi
397
398 cp -p zconf.h.in zconf.h
399
400 echo >> configure.log
401
402 cat > $test.c <<EOF
403 #include <unistd.h>
404 int main() { return 0; }
405 EOF
406 if try $CC -c $CFLAGS $test.c; then
407   sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
408   mv zconf.temp.h zconf.h
409   echo "Checking for unistd.h... Yes." | tee -a configure.log
410 else
411   echo "Checking for unistd.h... No." | tee -a configure.log
412 fi
413
414 echo >> configure.log
415
416 cat > $test.c <<EOF
417 #include <stdarg.h>
418 int main() { return 0; }
419 EOF
420 if try $CC -c $CFLAGS $test.c; then
421   sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
422   mv zconf.temp.h zconf.h
423   echo "Checking for stdarg.h... Yes." | tee -a configure.log
424 else
425   echo "Checking for stdarg.h... No." | tee -a configure.log
426 fi
427
428 if test $zprefix -eq 1; then
429   sed < zconf.h "/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\(.*\) may be/ 1\1 was/" > zconf.temp.h
430   mv zconf.temp.h zconf.h
431   echo >> configure.log
432   echo "Using z_ prefix on all symbols." | tee -a configure.log
433 fi
434
435 if test $solo -eq 1; then
436   sed '/#define ZCONF_H/a\
437 #define Z_SOLO
438
439 ' < zconf.h > zconf.temp.h
440   mv zconf.temp.h zconf.h
441 OBJC='$(OBJZ)'
442 PIC_OBJC='$(PIC_OBJZ)'
443 fi
444
445 if test $cover -eq 1; then
446   CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage"
447   if test -n "$GCC_CLASSIC"; then
448     CC=$GCC_CLASSIC
449   fi
450 fi
451
452 echo >> configure.log
453
454 cat > $test.c <<EOF
455 #include <stdio.h>
456 #include <stdarg.h>
457 #include "zconf.h"
458 int main()
459 {
460 #ifndef STDC
461   choke me
462 #endif
463   return 0;
464 }
465 EOF
466 if try $CC -c $CFLAGS $test.c; then
467   echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | tee -a configure.log
468
469   echo >> configure.log
470   cat > $test.c <<EOF
471 #include <stdio.h>
472 #include <stdarg.h>
473 int mytest(const char *fmt, ...)
474 {
475   char buf[20];
476   va_list ap;
477   va_start(ap, fmt);
478   vsnprintf(buf, sizeof(buf), fmt, ap);
479   va_end(ap);
480   return 0;
481 }
482 int main()
483 {
484   return (mytest("Hello%d\n", 1));
485 }
486 EOF
487   if try $CC $CFLAGS -o $test $test.c; then
488     echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log
489
490     echo >> configure.log
491     cat >$test.c <<EOF
492 #include <stdio.h>
493 #include <stdarg.h>
494 int mytest(const char *fmt, ...)
495 {
496   int n;
497   char buf[20];
498   va_list ap;
499   va_start(ap, fmt);
500   n = vsnprintf(buf, sizeof(buf), fmt, ap);
501   va_end(ap);
502   return n;
503 }
504 int main()
505 {
506   return (mytest("Hello%d\n", 1));
507 }
508 EOF
509
510     if try $CC -c $CFLAGS $test.c; then
511       echo "Checking for return value of vsnprintf()... Yes." | tee -a configure.log
512     else
513       CFLAGS="$CFLAGS -DHAS_vsnprintf_void"
514       SFLAGS="$SFLAGS -DHAS_vsnprintf_void"
515       echo "Checking for return value of vsnprintf()... No." | tee -a configure.log
516       echo "  WARNING: apparently vsnprintf() does not return a value. zlib" | tee -a configure.log
517       echo "  can build but will be open to possible string-format security" | tee -a configure.log
518       echo "  vulnerabilities." | tee -a configure.log
519     fi
520   else
521     CFLAGS="$CFLAGS -DNO_vsnprintf"
522     SFLAGS="$SFLAGS -DNO_vsnprintf"
523     echo "Checking for vsnprintf() in stdio.h... No." | tee -a configure.log
524     echo "  WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | tee -a configure.log
525     echo "  can build but will be open to possible buffer-overflow security" | tee -a configure.log
526     echo "  vulnerabilities." | tee -a configure.log
527
528     echo >> configure.log
529     cat >$test.c <<EOF
530 #include <stdio.h>
531 #include <stdarg.h>
532 int mytest(const char *fmt, ...)
533 {
534   int n;
535   char buf[20];
536   va_list ap;
537   va_start(ap, fmt);
538   n = vsprintf(buf, fmt, ap);
539   va_end(ap);
540   return n;
541 }
542 int main()
543 {
544   return (mytest("Hello%d\n", 1));
545 }
546 EOF
547
548     if try $CC -c $CFLAGS $test.c; then
549       echo "Checking for return value of vsprintf()... Yes." | tee -a configure.log
550     else
551       CFLAGS="$CFLAGS -DHAS_vsprintf_void"
552       SFLAGS="$SFLAGS -DHAS_vsprintf_void"
553       echo "Checking for return value of vsprintf()... No." | tee -a configure.log
554       echo "  WARNING: apparently vsprintf() does not return a value. zlib" | tee -a configure.log
555       echo "  can build but will be open to possible string-format security" | tee -a configure.log
556       echo "  vulnerabilities." | tee -a configure.log
557     fi
558   fi
559 else
560   echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()." | tee -a configure.log
561
562   echo >> configure.log
563   cat >$test.c <<EOF
564 #include <stdio.h>
565 int mytest()
566 {
567   char buf[20];
568   snprintf(buf, sizeof(buf), "%s", "foo");
569   return 0;
570 }
571 int main()
572 {
573   return (mytest());
574 }
575 EOF
576
577   if try $CC $CFLAGS -o $test $test.c; then
578     echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log
579
580     echo >> configure.log
581     cat >$test.c <<EOF
582 #include <stdio.h>
583 int mytest()
584 {
585   char buf[20];
586   return snprintf(buf, sizeof(buf), "%s", "foo");
587 }
588 int main()
589 {
590   return (mytest());
591 }
592 EOF
593
594     if try $CC -c $CFLAGS $test.c; then
595       echo "Checking for return value of snprintf()... Yes." | tee -a configure.log
596     else
597       CFLAGS="$CFLAGS -DHAS_snprintf_void"
598       SFLAGS="$SFLAGS -DHAS_snprintf_void"
599       echo "Checking for return value of snprintf()... No." | tee -a configure.log
600       echo "  WARNING: apparently snprintf() does not return a value. zlib" | tee -a configure.log
601       echo "  can build but will be open to possible string-format security" | tee -a configure.log
602       echo "  vulnerabilities." | tee -a configure.log
603     fi
604   else
605     CFLAGS="$CFLAGS -DNO_snprintf"
606     SFLAGS="$SFLAGS -DNO_snprintf"
607     echo "Checking for snprintf() in stdio.h... No." | tee -a configure.log
608     echo "  WARNING: snprintf() not found, falling back to sprintf(). zlib" | tee -a configure.log
609     echo "  can build but will be open to possible buffer-overflow security" | tee -a configure.log
610     echo "  vulnerabilities." | tee -a configure.log
611
612     echo >> configure.log
613     cat >$test.c <<EOF
614 #include <stdio.h>
615 int mytest()
616 {
617   char buf[20];
618   return sprintf(buf, "%s", "foo");
619 }
620 int main()
621 {
622   return (mytest());
623 }
624 EOF
625
626     if try $CC -c $CFLAGS $test.c; then
627       echo "Checking for return value of sprintf()... Yes." | tee -a configure.log
628     else
629       CFLAGS="$CFLAGS -DHAS_sprintf_void"
630       SFLAGS="$SFLAGS -DHAS_sprintf_void"
631       echo "Checking for return value of sprintf()... No." | tee -a configure.log
632       echo "  WARNING: apparently sprintf() does not return a value. zlib" | tee -a configure.log
633       echo "  can build but will be open to possible string-format security" | tee -a configure.log
634       echo "  vulnerabilities." | tee -a configure.log
635     fi
636   fi
637 fi
638
639 if test "$gcc" -eq 1; then
640   echo >> configure.log
641   cat > $test.c <<EOF
642 #define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
643 int ZLIB_INTERNAL foo;
644 int main()
645 {
646   return 0;
647 }
648 EOF
649   if tryboth $CC -c $CFLAGS $test.c; then
650     CFLAGS="$CFLAGS -DHAVE_HIDDEN"
651     SFLAGS="$SFLAGS -DHAVE_HIDDEN"
652     echo "Checking for attribute(visibility) support... Yes." | tee -a configure.log
653   else
654     echo "Checking for attribute(visibility) support... No." | tee -a configure.log
655   fi
656 fi
657
658 rm -f $test.[co] $test $test$shared_ext $test.gcno
659
660 # show the results in the log
661 echo >> configure.log
662 echo ALL = $ALL >> configure.log
663 echo AR = $AR >> configure.log
664 echo ARFLAGS = $ARFLAGS >> configure.log
665 echo CC = $CC >> configure.log
666 echo CFLAGS = $CFLAGS >> configure.log
667 echo CPP = $CPP >> configure.log
668 echo EXE = $EXE >> configure.log
669 echo LDCONFIG = $LDCONFIG >> configure.log
670 echo LDFLAGS = $LDFLAGS >> configure.log
671 echo LDSHARED = $LDSHARED >> configure.log
672 echo LDSHAREDLIBC = $LDSHAREDLIBC >> configure.log
673 echo OBJC = $OBJC >> configure.log
674 echo PIC_OBJC = $PIC_OBJC >> configure.log
675 echo RANLIB = $RANLIB >> configure.log
676 echo SFLAGS = $SFLAGS >> configure.log
677 echo SHAREDLIB = $SHAREDLIB >> configure.log
678 echo SHAREDLIBM = $SHAREDLIBM >> configure.log
679 echo SHAREDLIBV = $SHAREDLIBV >> configure.log
680 echo STATICLIB = $STATICLIB >> configure.log
681 echo TEST = $TEST >> configure.log
682 echo VER = $VER >> configure.log
683 echo exec_prefix = $exec_prefix >> configure.log
684 echo includedir = $includedir >> configure.log
685 echo libdir = $libdir >> configure.log
686 echo mandir = $mandir >> configure.log
687 echo prefix = $prefix >> configure.log
688 echo sharedlibdir = $sharedlibdir >> configure.log
689 echo uname = $uname >> configure.log
690 echo -------------------- >> configure.log
691 echo >> configure.log
692 echo >> configure.log
693
694 # udpate Makefile
695 sed < Makefile.in "
696 /^CC *=/s#=.*#=$CC#
697 /^CFLAGS *=/s#=.*#=$CFLAGS#
698 /^SFLAGS *=/s#=.*#=$SFLAGS#
699 /^LDFLAGS *=/s#=.*#=$LDFLAGS#
700 /^LDSHARED *=/s#=.*#=$LDSHARED#
701 /^CPP *=/s#=.*#=$CPP#
702 /^STATICLIB *=/s#=.*#=$STATICLIB#
703 /^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
704 /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
705 /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
706 /^AR *=/s#=.*#=$AR#
707 /^ARFLAGS *=/s#=.*#=$ARFLAGS#
708 /^RANLIB *=/s#=.*#=$RANLIB#
709 /^LDCONFIG *=/s#=.*#=$LDCONFIG#
710 /^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC#
711 /^EXE *=/s#=.*#=$EXE#
712 /^prefix *=/s#=.*#=$prefix#
713 /^exec_prefix *=/s#=.*#=$exec_prefix#
714 /^libdir *=/s#=.*#=$libdir#
715 /^sharedlibdir *=/s#=.*#=$sharedlibdir#
716 /^includedir *=/s#=.*#=$includedir#
717 /^mandir *=/s#=.*#=$mandir#
718 /^OBJC *=/s#=.*#= $OBJC#
719 /^PIC_OBJC *=/s#=.*#= $PIC_OBJC#
720 /^all: */s#:.*#: $ALL#
721 /^test: */s#:.*#: $TEST#
722 " > Makefile
723
724 sed < zlib.pc.in "
725 /^CC *=/s#=.*#=$CC#
726 /^CFLAGS *=/s#=.*#=$CFLAGS#
727 /^CPP *=/s#=.*#=$CPP#
728 /^LDSHARED *=/s#=.*#=$LDSHARED#
729 /^STATICLIB *=/s#=.*#=$STATICLIB#
730 /^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
731 /^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
732 /^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
733 /^AR *=/s#=.*#=$AR#
734 /^ARFLAGS *=/s#=.*#=$ARFLAGS#
735 /^RANLIB *=/s#=.*#=$RANLIB#
736 /^EXE *=/s#=.*#=$EXE#
737 /^prefix *=/s#=.*#=$prefix#
738 /^exec_prefix *=/s#=.*#=$exec_prefix#
739 /^libdir *=/s#=.*#=$libdir#
740 /^sharedlibdir *=/s#=.*#=$sharedlibdir#
741 /^includedir *=/s#=.*#=$includedir#
742 /^mandir *=/s#=.*#=$mandir#
743 /^LDFLAGS *=/s#=.*#=$LDFLAGS#
744 " | sed -e "
745 s/\@VERSION\@/$VER/g;
746 " > zlib.pc