Instead of using relative paths directly, use paths relative to
top_srcdir and top_builddir to refer to source files and built files,
respectively.
Note that the toplevel zlib configure script still does not have any
special support for out-of-tree builds. But now you can do
(cd contrib/minizip && autoreconf -fis)
mkdir -p BUILD/test
cp *.c *.h *.in zlib.map configure zlib.3 BUILD
cp test/*.c BUILD/test
(cd BUILD && ./configure --shared)
(cd BUILD && make)
mkdir -p BUILD/contrib/minizip
cd BUILD/contrib/minizip
../../../contrib/minizip/configure
make
While at it, move the include path and library path settings to
CPPFLAGS and LDFLAGS respectively instead of setting both in CFLAGS.
Thanks to Mike Frysinger for advice.
Trying to build the minizip utility from contrib/minizip after an
autoreconf -f:
libtool: link: gcc -g -O2 -o minizip minizip.o
minizip.o: In function `getFileCrc':
/tmp/zlib/contrib/minizip/minizip.c:211: undefined reference to `crc32'
minizip.o: In function `main':
/tmp/zlib/contrib/minizip/minizip.c:378: undefined reference to `zipOpen64'
/tmp/zlib/contrib/minizip/minizip.c:451: undefined reference to `zipOpenNewFileInZip3_64'
/tmp/zlib/contrib/minizip/minizip.c:502: undefined reference to `zipCloseFileInZip'
/tmp/zlib/contrib/minizip/minizip.c:509: undefined reference to `zipClose'
/tmp/zlib/contrib/minizip/minizip.c:485: undefined reference to `zipWriteInFileInZip'
collect2: error: ld returned 1 exit status
The cause: contrib/minizip/Makefile.am does not specify that minizip
needs to be linked to libminizip. With some linkers (e.g., GNU
binutils without --copy-dt-needed-entries), an indirect dependency
cannot be used to resolve symbols, so link to libz for crc32(), too.
Trying to build miniunzip utility from contrib/minizip after an
autoreconf -f produces
[...]
In file included from minizip.c:61:0:
zip.h:50:18: fatal error: zlib.h: No such file or directory
unless zlib is already installed. Use AM_CFLAGS to set the include
path and library path to point to the just-build copy of zlib to
fix this. (This was already done for libminizip but not the binaries
that use it before this patch.)