From d34a64ec75c4505d4fa15423eca1f70587ad2863 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Sun, 4 Feb 2024 21:49:15 +0100 Subject: [PATCH 01/24] Working build for Linux --- CMakeLists.txt | 212 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..57cc978b --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,212 @@ +# Minimum CMake version requirement +cmake_minimum_required(VERSION 3.10) + +# Project name and languages used +project(quaesar LANGUAGES CXX) + +# Set the C++ standard +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(SHARED_DEFINES FSUAE) + +find_package(SDL2 REQUIRED) +find_package(ZLIB REQUIRED) + +# Put this global as all code shareds them +include_directories(include od-cross .) + +# Code generators +# add_executable(genblitter src/genblitter.cpp src/missing.cpp od-cross/unicode.cpp) +add_executable(build68k src/build68k.cpp) +add_executable(gencpu src/cpudefs.cpp src/gencpu.cpp src/missing.cpp src/readcpu.cpp od-cross/unicode.cpp) +add_executable(gencomp src/cpudefs.cpp jit/gencomp.cpp src/missing.cpp src/readcpu.cpp od-cross/unicode.cpp) +add_executable(genblitter src/blitops.cpp src/genblitter.cpp) + +target_compile_definitions(build68k PRIVATE ${SHARED_DEFINES}) +target_compile_definitions(gencomp PRIVATE ${SHARED_DEFINES}) +target_compile_definitions(gencpu PRIVATE ${SHARED_DEFINES}) + +# Set the output path for the generated code +set(BUILD68K_OUTPUT ../src/cpudefs.cpp) +set(GENCPU_OUTPUT ../src/cputbl.h) +set(GENCOMP_OUTPUT ../jit/comptbl.h) + +add_custom_command( + OUTPUT ${BUILD68K_OUTPUT} + COMMAND build68k < table68k > ${BUILD68K_OUTPUT} + WORKING_DIRECTORY ../src + DEPENDS build68k + COMMENT "Generating 68k cpu definitions" +) + +add_custom_command( + OUTPUT ${GENCOMP_OUTPUT} + COMMAND gencomp + WORKING_DIRECTORY ../ + DEPENDS build68k + COMMENT "Generating jit/comptbl.h" +) + +add_custom_command( + OUTPUT ${GENCPU_OUTPUT} + COMMAND gencpu + WORKING_DIRECTORY ../src + DEPENDS gencpu + COMMENT "Generating CPU code" +) + +function(gen_blitter output letter) + add_custom_command( + OUTPUT ${output} + COMMAND genblitter ${letter} > ${output} + DEPENDS genblitter + COMMENT "Generating blitter code for ${letter}" + ) +endfunction() + +gen_blitter(../src/blit.h i) +gen_blitter(../src/blitfunc.cpp f) +gen_blitter(../src/blitfunc.h h) +gen_blitter(../src/blittable.cpp t) + +# Ensure the main executable is recompiled if the generated code changes +# set_source_files_properties(src/dummy_main.cpp PROPERTIES OBJECT_DEPENDS cputbl.h) +# set_source_files_properties(src/dummy_main.cpp PROPERTIES OBJECT_DEPENDS src/cputbl.h) +# set_source_files_properties(src/dummy_main.cpp PROPERTIES OBJECT_DEPENDS ${BUILD68K_OUTPUT}) +# set_source_files_properties(src/dummy_main.cpp PROPERTIES OBJECT_DEPENDS ${GENCOMP_OUTPUT}) + +add_executable(quaesar + src/aros.rom.cpp + src/akiko.cpp + src/amax.cpp + src/ar.cpp + src/audio.cpp + src/autoconf.cpp + src/blitfunc.cpp + src/blittable.cpp + src/blitter.cpp + src/calc.cpp + src/cd32_fmv_genlock.cpp + src/cdrom.cpp + src/cdtvcr.cpp + src/cfgfile.cpp + src/cia.cpp + src/consolehook.cpp + src/cpudefs.cpp + src/cpuemu_0.cpp + src/cpuemu_11.cpp + src/cpuemu_13.cpp + src/cpuemu_20.cpp + src/cpuemu_21.cpp + src/cpuemu_22.cpp + src/cpuemu_23.cpp + src/cpuemu_24.cpp + src/cpuemu_31.cpp + src/cpuemu_32.cpp + src/cpuemu_33.cpp + src/cpuemu_34.cpp + src/cpuemu_35.cpp + src/cpuemu_40.cpp + src/cpuemu_50.cpp + src/cpummu.cpp + src/cpummu30.cpp + src/cpustbl.cpp + src/crc32.cpp + src/custom.cpp + src/debug.cpp + src/debugmem.cpp + src/def_icons.cpp + src/devices.cpp + src/disasm.cpp + src/disk.cpp + src/diskutil.cpp + src/dlopen.cpp + src/dongle.cpp + src/drawing.cpp + src/driveclick.cpp + src/enforcer.cpp + src/ethernet.cpp + src/events.cpp + src/expansion.cpp + src/fdi2raw.cpp + src/filesys.cpp + src/flashrom.cpp + src/fpp.cpp + src/fpp_native.cpp + src/fpp_softfloat.cpp + src/fsdb.cpp + src/gayle.cpp + src/hardfile.cpp + src/hrtmon.rom.cpp + src/ide.cpp + src/idecontrollers.cpp + src/identify.cpp + src/ini.cpp + src/inputdevice.cpp + src/inputrecord.cpp + src/isofs.cpp + src/keybuf.cpp + src/logging.cpp + src/main.cpp + src/memory.cpp + src/missing.cpp + src/native2amiga.cpp + src/newcpu.cpp + src/newcpu_common.cpp + src/readcpu.cpp + src/rommgr.cpp + src/rtc.cpp + src/sana2.cpp + src/savestate.cpp + src/scp.cpp + src/scsi.cpp + src/scsiemul.cpp + src/scsitape.cpp + src/sndboard.cpp + src/statusline.cpp + src/tabletlibrary.cpp + src/test_card.cpp + src/tinyxml2.cpp + src/traps.cpp + src/uaeexe.cpp + src/uaelib.cpp + src/uaenative.cpp + src/uaeresource.cpp + src/uaeserial.cpp + src/quaesar.cpp + src/blkdev.cpp + od-cross/gfx.cpp + od-cross/gui.cpp + od-cross/mman.cpp + od-cross/machdep/m68k.cpp + od-cross/thread.cpp + od-cross/unicode.cpp + od-cross/file_system.cpp + od-cross/hardfile_host.cpp + od-cross/filepaths.cpp + od-cross/sounddep/sound.cpp + od-cross/time.cpp + od-cross/dummy.cpp + od-cross/input.cpp + src/zfile.cpp + src/zfile_archive.cpp + src/vm.cpp + softfloat/softfloat.cpp + softfloat/softfloat_fpsp.cpp + softfloat/softfloat_decimal.cpp + src/cputbl.h + jit/comptbl.h + src/blit.h +) + +target_compile_definitions(quaesar PRIVATE ${SHARED_DEFINES}) +target_compile_options(quaesar PRIVATE -DUAE=1) +target_compile_options(quaesar PRIVATE -D_cdecl= -DFILEFLAG_WRITE=1 -DOS_NAME=\"linux\") +target_compile_options(quaesar PRIVATE -DUSHORT=uint16_t -DHWND=uint32_t -DHRESULT=uint32_t -DWPARAM=uint16_t -DLPARAM=uint32_t) +target_include_directories(quaesar PRIVATE ${SDL2_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS}) +target_link_libraries(quaesar PRIVATE ${SDL2_LIBRARIES} ${ZLIB_LIBRARIES}) +target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -D_ftelli64=ftello64 -D_fseeki64=fseeko64) + + + From 4f50b79b4c393022fcc7813de6fa1051111c35eb Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Sun, 4 Feb 2024 21:50:52 +0100 Subject: [PATCH 02/24] some minor cleanup --- CMakeLists.txt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 57cc978b..a5e00111 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -70,12 +70,6 @@ gen_blitter(../src/blitfunc.cpp f) gen_blitter(../src/blitfunc.h h) gen_blitter(../src/blittable.cpp t) -# Ensure the main executable is recompiled if the generated code changes -# set_source_files_properties(src/dummy_main.cpp PROPERTIES OBJECT_DEPENDS cputbl.h) -# set_source_files_properties(src/dummy_main.cpp PROPERTIES OBJECT_DEPENDS src/cputbl.h) -# set_source_files_properties(src/dummy_main.cpp PROPERTIES OBJECT_DEPENDS ${BUILD68K_OUTPUT}) -# set_source_files_properties(src/dummy_main.cpp PROPERTIES OBJECT_DEPENDS ${GENCOMP_OUTPUT}) - add_executable(quaesar src/aros.rom.cpp src/akiko.cpp From f298d732b0b9a609afd5fa9e5ebb77861d38d3f6 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 13:40:49 +0100 Subject: [PATCH 03/24] Build zlib from source --- CMakeLists.txt | 10 +- external/zlib/configure | 929 ++++++++++++++++++++++++++ external/zlib/gzlib.c | 2 +- external/zlib/gzread.c | 4 +- external/zlib/gzwrite.c | 6 +- external/zlib/libs/x64/zlib.lib | Bin 384538 -> 0 bytes external/zlib/libs/x64/zlib.pdb | Bin 94208 -> 0 bytes external/zlib/treebuild.xml | 116 ++++ external/zlib/win32/DLL_FAQ.txt | 381 +++++++++++ external/zlib/win32/Makefile.bor | 109 +++ external/zlib/win32/Makefile.gcc | 177 +++++ external/zlib/win32/Makefile.msc | 159 +++++ external/zlib/win32/README-WIN32.txt | 103 +++ external/zlib/win32/VisualC.txt | 3 + external/zlib/win32/zlib.def | 97 +++ external/zlib/win32/zlib1.rc | 40 ++ external/zlib/zconf.h.cmakein | 545 +++++++++++++++ external/zlib/{zconf.h => zconf.h.in} | 0 external/zlib/zconf.h.included | 543 +++++++++++++++ external/zlib/zlib.3 | 149 +++++ external/zlib/zlib.h | 2 +- external/zlib/zlib.pc.cmakein | 13 + external/zlib/zlib.pc.in | 13 + 23 files changed, 3391 insertions(+), 10 deletions(-) create mode 100755 external/zlib/configure delete mode 100644 external/zlib/libs/x64/zlib.lib delete mode 100644 external/zlib/libs/x64/zlib.pdb create mode 100644 external/zlib/treebuild.xml create mode 100644 external/zlib/win32/DLL_FAQ.txt create mode 100644 external/zlib/win32/Makefile.bor create mode 100644 external/zlib/win32/Makefile.gcc create mode 100644 external/zlib/win32/Makefile.msc create mode 100644 external/zlib/win32/README-WIN32.txt create mode 100644 external/zlib/win32/VisualC.txt create mode 100644 external/zlib/win32/zlib.def create mode 100644 external/zlib/win32/zlib1.rc create mode 100644 external/zlib/zconf.h.cmakein rename external/zlib/{zconf.h => zconf.h.in} (100%) create mode 100644 external/zlib/zconf.h.included create mode 100644 external/zlib/zlib.3 create mode 100644 external/zlib/zlib.pc.cmakein create mode 100644 external/zlib/zlib.pc.in diff --git a/CMakeLists.txt b/CMakeLists.txt index a5e00111..7388494f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,8 +10,12 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) set(SHARED_DEFINES FSUAE) +# Zlib and disable examples + +set(ZLIB_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) +add_subdirectory(external/zlib) + find_package(SDL2 REQUIRED) -find_package(ZLIB REQUIRED) # Put this global as all code shareds them include_directories(include od-cross .) @@ -198,8 +202,8 @@ target_compile_definitions(quaesar PRIVATE ${SHARED_DEFINES}) target_compile_options(quaesar PRIVATE -DUAE=1) target_compile_options(quaesar PRIVATE -D_cdecl= -DFILEFLAG_WRITE=1 -DOS_NAME=\"linux\") target_compile_options(quaesar PRIVATE -DUSHORT=uint16_t -DHWND=uint32_t -DHRESULT=uint32_t -DWPARAM=uint16_t -DLPARAM=uint32_t) -target_include_directories(quaesar PRIVATE ${SDL2_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS}) -target_link_libraries(quaesar PRIVATE ${SDL2_LIBRARIES} ${ZLIB_LIBRARIES}) +target_include_directories(quaesar PRIVATE ${SDL2_INCLUDE_DIRS} "src/external/zlib") +target_link_libraries(quaesar PRIVATE ${SDL2_LIBRARIES} zlibstatic) target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -D_ftelli64=ftello64 -D_fseeki64=fseeko64) diff --git a/external/zlib/configure b/external/zlib/configure new file mode 100755 index 00000000..c55098af --- /dev/null +++ b/external/zlib/configure @@ -0,0 +1,929 @@ +#!/bin/sh +# configure script for zlib. +# +# Normally configure builds both a static and a shared library. +# If you want to build just a static library, use: ./configure --static +# +# 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) + +# 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. + +# start off configure.log +echo -------------------- >> configure.log +echo $0 $* >> configure.log +date >> configure.log + +# get source directory +SRCDIR=`dirname $0` +if test $SRCDIR = "."; then + ZINC="" + ZINCOUT="-I." + SRCDIR="" +else + ZINC='-I. -include zconf.h' + ZINCOUT='-I. -I$(SRCDIR)' + SRCDIR="$SRCDIR/" +fi + +# set command prefix for cross-compilation +if [ -n "${CHOST}" ]; then + uname=${CHOST} + mname=${CHOST} + CROSS_PREFIX="${CHOST}-" +else + mname=`(uname -a || echo unknown) 2>/dev/null` +fi + +# destination name for static library +STATICLIB=libz.a + +# extract zlib version numbers from zlib.h +VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < ${SRCDIR}zlib.h` +VER3=`echo ${VER}|sed -n -e 's/\([0-9]\{1,\}\(\\.[0-9]\{1,\}\)\{1,2\}\).*/\1/p'` +VER1=`echo ${VER}|sed -n -e 's/\([0-9]\{1,\}\)\\..*/\1/p'` + +# establish commands for library building +if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then + AR=${AR-"${CROSS_PREFIX}ar"} + test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log +else + AR=${AR-"ar"} + test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log +fi +ARFLAGS=${ARFLAGS-"rc"} +if "${CROSS_PREFIX}ranlib" --version >/dev/null 2>/dev/null || test $? -lt 126; then + RANLIB=${RANLIB-"${CROSS_PREFIX}ranlib"} + test -n "${CROSS_PREFIX}" && echo Using ${RANLIB} | tee -a configure.log +else + RANLIB=${RANLIB-"ranlib"} +fi +if "${CROSS_PREFIX}nm" --version >/dev/null 2>/dev/null || test $? -lt 126; then + NM=${NM-"${CROSS_PREFIX}nm"} + test -n "${CROSS_PREFIX}" && echo Using ${NM} | tee -a configure.log +else + NM=${NM-"nm"} +fi + +# set defaults before processing command line options +LDCONFIG=${LDCONFIG-"ldconfig"} +LDSHAREDLIBC="${LDSHAREDLIBC--lc}" +ARCHS= +prefix=${prefix-/usr/local} +exec_prefix=${exec_prefix-'${prefix}'} +libdir=${libdir-'${exec_prefix}/lib'} +sharedlibdir=${sharedlibdir-'${libdir}'} +includedir=${includedir-'${prefix}/include'} +mandir=${mandir-'${prefix}/share/man'} +shared_ext='.so' +shared=1 +solo=0 +cover=0 +zprefix=0 +zconst=0 +build64=0 +gcc=0 +warn=0 +debug=0 +address=0 +memory=0 +old_cc="$CC" +old_cflags="$CFLAGS" +OBJC='$(OBJZ) $(OBJG)' +PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)' + +# leave this script, optionally in a bad way +leave() +{ + if test "$*" != "0"; then + echo "** $0 aborting." | tee -a configure.log + fi + rm -rf $test.[co] $test $test$shared_ext $test.gcno $test.dSYM ./--version + echo -------------------- >> configure.log + echo >> configure.log + echo >> configure.log + exit $1 +} + +# process command line options +while test $# -ge 1 +do +case "$1" in + -h* | --help) + echo 'usage:' | tee -a configure.log + echo ' configure [--const] [--zprefix] [--prefix=PREFIX] [--eprefix=EXPREFIX]' | tee -a configure.log + echo ' [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log + echo ' [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]' | tee -a configure.log + exit 0 ;; + -p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;; + -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;; + -l*=* | --libdir=*) libdir=`echo $1 | sed 's/.*=//'`; shift ;; + --sharedlibdir=*) sharedlibdir=`echo $1 | sed 's/.*=//'`; shift ;; + -i*=* | --includedir=*) includedir=`echo $1 | sed 's/.*=//'`;shift ;; + -u*=* | --uname=*) uname=`echo $1 | sed 's/.*=//'`;shift ;; + -p* | --prefix) prefix="$2"; shift; shift ;; + -e* | --eprefix) exec_prefix="$2"; shift; shift ;; + -l* | --libdir) libdir="$2"; shift; shift ;; + -i* | --includedir) includedir="$2"; shift; shift ;; + -s* | --shared | --enable-shared) shared=1; shift ;; + -t | --static) shared=0; shift ;; + --solo) solo=1; shift ;; + --cover) cover=1; shift ;; + -z* | --zprefix) zprefix=1; shift ;; + -6* | --64) build64=1; shift ;; + -a*=* | --archs=*) ARCHS=`echo $1 | sed 's/.*=//'`; shift ;; + --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;; + --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;; + -c* | --const) zconst=1; shift ;; + -w* | --warn) warn=1; shift ;; + -d* | --debug) debug=1; shift ;; + --sanitize) address=1; shift ;; + --address) address=1; shift ;; + --memory) memory=1; shift ;; + *) + echo "unknown option: $1" | tee -a configure.log + echo "$0 --help for help" | tee -a configure.log + leave 1;; + esac +done + +# temporary file name +test=ztest$$ + +# put arguments in log, also put test file in log if used in arguments +show() +{ + case "$*" in + *$test.c*) + echo === $test.c === >> configure.log + cat $test.c >> configure.log + echo === >> configure.log;; + esac + echo $* >> configure.log +} + +# check for gcc vs. cc and set compile and link flags based on the system identified by uname +cat > $test.c </dev/null 2>&1; then + cc=${CROSS_PREFIX}gcc + else + cc=${CROSS_PREFIX}cc + fi +else + cc=${CC} +fi + +case "$cc" in + *gcc*) gcc=1 ;; + *clang*) gcc=1 ;; +esac +case `$cc -v 2>&1` in + *gcc*) gcc=1 ;; + *clang*) gcc=1 ;; +esac + +show $cc -c $test.c +if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then + echo ... using gcc >> configure.log + CC="$cc" + CFLAGS="${CFLAGS--O3}" + SFLAGS="${CFLAGS--O3} -fPIC" + if test "$ARCHS"; then + CFLAGS="${CFLAGS} ${ARCHS}" + LDFLAGS="${LDFLAGS} ${ARCHS}" + fi + if test $build64 -eq 1; then + CFLAGS="${CFLAGS} -m64" + SFLAGS="${SFLAGS} -m64" + fi + if test "$warn" -eq 1; then + if test "$zconst" -eq 1; then + CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -DZLIB_CONST" + else + CFLAGS="${CFLAGS} -Wall -Wextra" + fi + fi + if test $address -eq 1; then + CFLAGS="${CFLAGS} -g -fsanitize=address -fno-omit-frame-pointer" + fi + if test $memory -eq 1; then + CFLAGS="${CFLAGS} -g -fsanitize=memory -fno-omit-frame-pointer" + fi + if test $debug -eq 1; then + CFLAGS="${CFLAGS} -DZLIB_DEBUG" + SFLAGS="${SFLAGS} -DZLIB_DEBUG" + fi + if test -z "$uname"; then + uname=`(uname -s || echo unknown) 2>/dev/null` + fi + case "$uname" in + Linux* | linux* | *-linux* | GNU | GNU/* | solaris*) + case "$mname" in + *sparc*) + LDFLAGS="${LDFLAGS} -Wl,--no-warn-rwx-segments" ;; + esac + LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"} ;; + *BSD | *bsd* | DragonFly) + LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"} + LDCONFIG="ldconfig -m" ;; + CYGWIN* | Cygwin* | cygwin* | *-cygwin* | OS/2*) + EXE='.exe' ;; + MINGW* | mingw* | *-mingw*) + rm -f $test.[co] $test $test$shared_ext + echo "If this doesn't work for you, try win32/Makefile.gcc." | tee -a configure.log + LDSHARED=${LDSHARED-"$cc -shared"} + LDSHAREDLIBC="" + EXE='.exe' ;; + 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"} ;; + HP-UX*) + LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"} + case `(uname -m || echo unknown) 2>/dev/null` in + ia64) + shared_ext='.so' + SHAREDLIB='libz.so' ;; + *) + shared_ext='.sl' + SHAREDLIB='libz.sl' ;; + esac ;; + AIX*) + LDFLAGS="${LDFLAGS} -Wl,-brtl" ;; + Darwin* | darwin* | *-darwin*) + shared_ext='.dylib' + SHAREDLIB=libz$shared_ext + SHAREDLIBV=libz.$VER$shared_ext + SHAREDLIBM=libz.$VER1$shared_ext + LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"} + if "${CROSS_PREFIX}libtool" -V 2>&1 | grep Apple > /dev/null; then + AR="${CROSS_PREFIX}libtool" + elif libtool -V 2>&1 | grep Apple > /dev/null; then + AR="libtool" + else + AR="/usr/bin/libtool" + fi + ARFLAGS="-o" ;; + *) + LDSHARED=${LDSHARED-"$cc -shared"} ;; + esac +else + # find system name and corresponding cc options + CC=${CC-cc} + gcc=0 + echo ... using $CC >> configure.log + if test -z "$uname"; then + uname=`(uname -sr || echo unknown) 2>/dev/null` + fi + case "$uname" in + HP-UX*) SFLAGS=${CFLAGS-"-O +z"} + CFLAGS=${CFLAGS-"-O"} +# LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"} + LDSHARED=${LDSHARED-"ld -b"} + case `(uname -m || echo unknown) 2>/dev/null` in + ia64) + shared_ext='.so' + SHAREDLIB='libz.so' ;; + *) + shared_ext='.sl' + SHAREDLIB='libz.sl' ;; + esac ;; + IRIX*) SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."} + CFLAGS=${CFLAGS-"-ansi -O2"} + LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; + OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"} + CFLAGS=${CFLAGS-"-O -std1"} + LDFLAGS="${LDFLAGS} -Wl,-rpath,." + LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"} ;; + OSF1*) SFLAGS=${CFLAGS-"-O -std1"} + CFLAGS=${CFLAGS-"-O -std1"} + LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; + QNX*) SFLAGS=${CFLAGS-"-4 -O"} + CFLAGS=${CFLAGS-"-4 -O"} + LDSHARED=${LDSHARED-"cc"} + RANLIB=${RANLIB-"true"} + AR="cc" + ARFLAGS="-A" ;; + SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "} + CFLAGS=${CFLAGS-"-O3"} + LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;; + SunOS\ 5* | solaris*) + LDSHARED=${LDSHARED-"cc -G -h libz$shared_ext.$VER1"} + SFLAGS=${CFLAGS-"-fast -KPIC"} + CFLAGS=${CFLAGS-"-fast"} + if test $build64 -eq 1; then + # old versions of SunPRO/Workshop/Studio don't support -m64, + # but newer ones do. Check for it. + flag64=`$CC -flags | egrep -- '^-m64'` + if test x"$flag64" != x"" ; then + CFLAGS="${CFLAGS} -m64" + SFLAGS="${SFLAGS} -m64" + else + case `(uname -m || echo unknown) 2>/dev/null` in + i86*) + SFLAGS="$SFLAGS -xarch=amd64" + CFLAGS="$CFLAGS -xarch=amd64" ;; + *) + SFLAGS="$SFLAGS -xarch=v9" + CFLAGS="$CFLAGS -xarch=v9" ;; + esac + fi + fi + if test -n "$ZINC"; then + ZINC='-I- -I. -I$(SRCDIR)' + fi + ;; + SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"} + CFLAGS=${CFLAGS-"-O2"} + LDSHARED=${LDSHARED-"ld"} ;; + SunStudio\ 9*) SFLAGS=${CFLAGS-"-fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"} + CFLAGS=${CFLAGS-"-fast -xtarget=ultra3 -xarch=v9b"} + LDSHARED=${LDSHARED-"cc -xarch=v9b"} ;; + UNIX_System_V\ 4.2.0) + SFLAGS=${CFLAGS-"-KPIC -O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -G"} ;; + UNIX_SV\ 4.2MP) + 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"} ;; + AIX*) # Courtesy of dbakker@arrayasolutions.com + SFLAGS=${CFLAGS-"-O -qmaxmem=8192"} + CFLAGS=${CFLAGS-"-O -qmaxmem=8192"} + LDSHARED=${LDSHARED-"xlc -G"} ;; + # send working options for other systems to zlib@gzip.org + *) SFLAGS=${CFLAGS-"-O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -shared"} ;; + esac +fi + +# destination names for shared library if not defined above +SHAREDLIB=${SHAREDLIB-"libz$shared_ext"} +SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"} +SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"} + +echo >> configure.log + +# define functions for testing compiler and library characteristics and logging the results + +cat > $test.c </dev/null; then + try() + { + show $* + test "`( $* ) 2>&1 | tee -a configure.log`" = "" + } + echo - using any output from compiler to indicate an error >> configure.log +else + try() + { + show $* + got=`( $* ) 2>&1` + ret=$? + if test "$got" != ""; then + printf "%s\n" "$got" >> configure.log + fi + if test $ret -ne 0; then + echo "(exit code "$ret")" >> configure.log + fi + return $ret + } +fi + +tryboth() +{ + show $* + got=`( $* ) 2>&1` + ret=$? + if test "$got" != ""; then + printf "%s\n" "$got" >> configure.log + fi + if test $ret -ne 0; then + echo "(exit code "$ret")" >> configure.log + return $ret + fi + test "$got" = "" +} + +cat > $test.c << EOF +int foo() { return 0; } +EOF +echo "Checking for obsessive-compulsive compiler options..." >> configure.log +if try $CC -c $CFLAGS $test.c; then + : +else + echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log + leave 1 +fi + +echo >> configure.log + +# see if shared library build supported +cat > $test.c <> configure.log + +# check for size_t +cat > $test.c < +#include +size_t dummy = 0; +EOF +if try $CC -c $CFLAGS $test.c; then + echo "Checking for size_t... Yes." | tee -a configure.log +else + echo "Checking for size_t... No." | tee -a configure.log + # find a size_t integer type + # check for long long + cat > $test.c << EOF +long long dummy = 0; +EOF + if try $CC -c $CFLAGS $test.c; then + echo "Checking for long long... Yes." | tee -a configure.log + cat > $test.c < +int main(void) { + if (sizeof(void *) <= sizeof(int)) puts("int"); + else if (sizeof(void *) <= sizeof(long)) puts("long"); + else puts("z_longlong"); + return 0; +} +EOF + else + echo "Checking for long long... No." | tee -a configure.log + cat > $test.c < +int main(void) { + if (sizeof(void *) <= sizeof(int)) puts("int"); + else puts("long"); + return 0; +} +EOF + fi + if try $CC $CFLAGS -o $test $test.c; then + sizet=`./$test` + echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log + CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}" + SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}" + else + echo "Checking for a pointer-size integer type... not found." | tee -a configure.log + fi +fi + +echo >> configure.log + +# check for large file support, and if none, check for fseeko() +cat > $test.c < +off64_t dummy = 0; +EOF +if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then + CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1" + SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1" + ALL="${ALL} all64" + TEST="${TEST} test64" + echo "Checking for off64_t... Yes." | tee -a configure.log + echo "Checking for fseeko... Yes." | tee -a configure.log +else + echo "Checking for off64_t... No." | tee -a configure.log + echo >> configure.log + cat > $test.c < +int main(void) { + fseeko(NULL, 0, 0); + return 0; +} +EOF + if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for fseeko... Yes." | tee -a configure.log + else + CFLAGS="${CFLAGS} -DNO_FSEEKO" + SFLAGS="${SFLAGS} -DNO_FSEEKO" + echo "Checking for fseeko... No." | tee -a configure.log + fi +fi + +echo >> configure.log + +# check for strerror() for use by gz* functions +cat > $test.c < +#include +int main() { return strlen(strerror(errno)); } +EOF +if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for strerror... Yes." | tee -a configure.log +else + CFLAGS="${CFLAGS} -DNO_STRERROR" + SFLAGS="${SFLAGS} -DNO_STRERROR" + echo "Checking for strerror... No." | tee -a configure.log +fi + +# copy clean zconf.h for subsequent edits +cp -p ${SRCDIR}zconf.h.in zconf.h + +echo >> configure.log + +# check for unistd.h and save result in zconf.h +cat > $test.c < +int main() { return 0; } +EOF +if try $CC -c $CFLAGS $test.c; then + sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h + mv zconf.temp.h zconf.h + echo "Checking for unistd.h... Yes." | tee -a configure.log +else + echo "Checking for unistd.h... No." | tee -a configure.log +fi + +echo >> configure.log + +# check for stdarg.h and save result in zconf.h +cat > $test.c < +int main() { return 0; } +EOF +if try $CC -c $CFLAGS $test.c; then + sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h + mv zconf.temp.h zconf.h + echo "Checking for stdarg.h... Yes." | tee -a configure.log +else + echo "Checking for stdarg.h... No." | tee -a configure.log +fi + +# if the z_ prefix was requested, save that in zconf.h +if test $zprefix -eq 1; then + sed < zconf.h "/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\(.*\) may be/ 1\1 was/" > zconf.temp.h + mv zconf.temp.h zconf.h + echo >> configure.log + echo "Using z_ prefix on all symbols." | tee -a configure.log +fi + +# if --solo compilation was requested, save that in zconf.h and remove gz stuff from object lists +if test $solo -eq 1; then + sed '/#define ZCONF_H/a\ +#define Z_SOLO + +' < zconf.h > zconf.temp.h + mv zconf.temp.h zconf.h +OBJC='$(OBJZ)' +PIC_OBJC='$(PIC_OBJZ)' +fi + +# if code coverage testing was requested, use older gcc if defined, e.g. "gcc-4.2" on Mac OS X +if test $cover -eq 1; then + CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage" + if test -n "$GCC_CLASSIC"; then + CC=$GCC_CLASSIC + fi +fi + +echo >> configure.log + +# conduct a series of tests to resolve eight possible cases of using "vs" or "s" printf functions +# (using stdarg or not), with or without "n" (proving size of buffer), and with or without a +# return value. The most secure result is vsnprintf() with a return value. snprintf() with a +# return value is secure as well, but then gzprintf() will be limited to 20 arguments. +cat > $test.c < +#include +#include "zconf.h" +int main() +{ +#ifndef STDC + choke me +#endif + return 0; +} +EOF +if try $CC -c $CFLAGS $test.c; then + echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | tee -a configure.log + + echo >> configure.log + cat > $test.c < +#include +int mytest(const 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 + if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +#include +int mytest(const char *fmt, ...) +{ + int n; + char buf[20]; + va_list ap; + va_start(ap, fmt); + n = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return n; +} +int main() +{ + return (mytest("Hello%d\n", 1)); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of vsnprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_vsnprintf_void" + SFLAGS="$SFLAGS -DHAS_vsnprintf_void" + echo "Checking for return value of vsnprintf()... No." | tee -a configure.log + echo " WARNING: apparently vsnprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + else + CFLAGS="$CFLAGS -DNO_vsnprintf" + SFLAGS="$SFLAGS -DNO_vsnprintf" + echo "Checking for vsnprintf() in stdio.h... No." | tee -a configure.log + echo " WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | tee -a configure.log + echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +#include +int mytest(const char *fmt, ...) +{ + int n; + char buf[20]; + va_list ap; + va_start(ap, fmt); + n = vsprintf(buf, fmt, ap); + va_end(ap); + return n; +} +int main() +{ + return (mytest("Hello%d\n", 1)); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of vsprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_vsprintf_void" + SFLAGS="$SFLAGS -DHAS_vsprintf_void" + echo "Checking for return value of vsprintf()... No." | tee -a configure.log + echo " WARNING: apparently vsprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + fi +else + echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +int mytest() +{ + char buf[20]; + snprintf(buf, sizeof(buf), "%s", "foo"); + return 0; +} +int main() +{ + return (mytest()); +} +EOF + + if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +int mytest() +{ + char buf[20]; + return snprintf(buf, sizeof(buf), "%s", "foo"); +} +int main() +{ + return (mytest()); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of snprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_snprintf_void" + SFLAGS="$SFLAGS -DHAS_snprintf_void" + echo "Checking for return value of snprintf()... No." | tee -a configure.log + echo " WARNING: apparently snprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + else + CFLAGS="$CFLAGS -DNO_snprintf" + SFLAGS="$SFLAGS -DNO_snprintf" + echo "Checking for snprintf() in stdio.h... No." | tee -a configure.log + echo " WARNING: snprintf() not found, falling back to sprintf(). zlib" | tee -a configure.log + echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +int mytest() +{ + char buf[20]; + return sprintf(buf, "%s", "foo"); +} +int main() +{ + return (mytest()); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of sprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_sprintf_void" + SFLAGS="$SFLAGS -DHAS_sprintf_void" + echo "Checking for return value of sprintf()... No." | tee -a configure.log + echo " WARNING: apparently sprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + fi +fi + +# see if we can hide zlib internal symbols that are linked between separate source files +if test "$gcc" -eq 1; then + echo >> configure.log + cat > $test.c <> configure.log +echo ALL = $ALL >> configure.log +echo AR = $AR >> configure.log +echo ARFLAGS = $ARFLAGS >> configure.log +echo CC = $CC >> configure.log +echo CFLAGS = $CFLAGS >> configure.log +echo CPP = $CPP >> configure.log +echo EXE = $EXE >> configure.log +echo LDCONFIG = $LDCONFIG >> configure.log +echo LDFLAGS = $LDFLAGS >> configure.log +echo LDSHARED = $LDSHARED >> configure.log +echo LDSHAREDLIBC = $LDSHAREDLIBC >> configure.log +echo OBJC = $OBJC >> configure.log +echo PIC_OBJC = $PIC_OBJC >> configure.log +echo RANLIB = $RANLIB >> configure.log +echo SFLAGS = $SFLAGS >> configure.log +echo SHAREDLIB = $SHAREDLIB >> configure.log +echo SHAREDLIBM = $SHAREDLIBM >> configure.log +echo SHAREDLIBV = $SHAREDLIBV >> configure.log +echo STATICLIB = $STATICLIB >> configure.log +echo TEST = $TEST >> configure.log +echo VER = $VER >> configure.log +echo SRCDIR = $SRCDIR >> configure.log +echo exec_prefix = $exec_prefix >> configure.log +echo includedir = $includedir >> configure.log +echo libdir = $libdir >> configure.log +echo mandir = $mandir >> configure.log +echo prefix = $prefix >> configure.log +echo sharedlibdir = $sharedlibdir >> configure.log +echo uname = $uname >> configure.log + +# update Makefile with the configure results +sed < ${SRCDIR}Makefile.in " +/^CC *=/s#=.*#=$CC# +/^CFLAGS *=/s#=.*#=$CFLAGS# +/^SFLAGS *=/s#=.*#=$SFLAGS# +/^LDFLAGS *=/s#=.*#=$LDFLAGS# +/^LDSHARED *=/s#=.*#=$LDSHARED# +/^CPP *=/s#=.*#=$CPP# +/^STATICLIB *=/s#=.*#=$STATICLIB# +/^SHAREDLIB *=/s#=.*#=$SHAREDLIB# +/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# +/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# +/^AR *=/s#=.*#=$AR# +/^ARFLAGS *=/s#=.*#=$ARFLAGS# +/^RANLIB *=/s#=.*#=$RANLIB# +/^LDCONFIG *=/s#=.*#=$LDCONFIG# +/^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC# +/^EXE *=/s#=.*#=$EXE# +/^SRCDIR *=/s#=.*#=$SRCDIR# +/^ZINC *=/s#=.*#=$ZINC# +/^ZINCOUT *=/s#=.*#=$ZINCOUT# +/^prefix *=/s#=.*#=$prefix# +/^exec_prefix *=/s#=.*#=$exec_prefix# +/^libdir *=/s#=.*#=$libdir# +/^sharedlibdir *=/s#=.*#=$sharedlibdir# +/^includedir *=/s#=.*#=$includedir# +/^mandir *=/s#=.*#=$mandir# +/^OBJC *=/s#=.*#= $OBJC# +/^PIC_OBJC *=/s#=.*#= $PIC_OBJC# +/^all: */s#:.*#: $ALL# +/^test: */s#:.*#: $TEST# +" > Makefile + +# create zlib.pc with the configure results +sed < ${SRCDIR}zlib.pc.in " +/^CC *=/s#=.*#=$CC# +/^CFLAGS *=/s#=.*#=$CFLAGS# +/^CPP *=/s#=.*#=$CPP# +/^LDSHARED *=/s#=.*#=$LDSHARED# +/^STATICLIB *=/s#=.*#=$STATICLIB# +/^SHAREDLIB *=/s#=.*#=$SHAREDLIB# +/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# +/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# +/^AR *=/s#=.*#=$AR# +/^ARFLAGS *=/s#=.*#=$ARFLAGS# +/^RANLIB *=/s#=.*#=$RANLIB# +/^EXE *=/s#=.*#=$EXE# +/^prefix *=/s#=.*#=$prefix# +/^exec_prefix *=/s#=.*#=$exec_prefix# +/^libdir *=/s#=.*#=$libdir# +/^sharedlibdir *=/s#=.*#=$sharedlibdir# +/^includedir *=/s#=.*#=$includedir# +/^mandir *=/s#=.*#=$mandir# +/^LDFLAGS *=/s#=.*#=$LDFLAGS# +" | sed -e " +s/\@VERSION\@/$VER/g; +" > zlib.pc + +# done +leave 0 diff --git a/external/zlib/gzlib.c b/external/zlib/gzlib.c index 31908573..983153cc 100644 --- a/external/zlib/gzlib.c +++ b/external/zlib/gzlib.c @@ -232,7 +232,7 @@ local gzFile gz_open(const void *path, int fd, const char *mode) { #ifdef WIDECHAR fd == -2 ? _wopen(path, oflag, 0666) : #endif - _open((const char *)path, oflag, 0666)); + open((const char *)path, oflag, 0666)); if (state->fd == -1) { free(state->path); free(state); diff --git a/external/zlib/gzread.c b/external/zlib/gzread.c index 53977295..4168cbc8 100644 --- a/external/zlib/gzread.c +++ b/external/zlib/gzread.c @@ -19,7 +19,7 @@ local int gz_load(gz_statep state, unsigned char *buf, unsigned len, get = len - *have; if (get > max) get = max; - ret = _read(state->fd, buf + *have, get); + ret = read(state->fd, buf + *have, get); if (ret <= 0) break; *have += (unsigned)ret; @@ -596,7 +596,7 @@ int ZEXPORT gzclose_r(gzFile file) { err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK; gz_error(state, Z_OK, NULL); free(state->path); - ret = _close(state->fd); + ret = close(state->fd); free(state); return ret ? Z_ERRNO : err; } diff --git a/external/zlib/gzwrite.c b/external/zlib/gzwrite.c index c966149d..435b4621 100644 --- a/external/zlib/gzwrite.c +++ b/external/zlib/gzwrite.c @@ -75,7 +75,7 @@ local int gz_comp(gz_statep state, int flush) { if (state->direct) { while (strm->avail_in) { put = strm->avail_in > max ? max : strm->avail_in; - writ = _write(state->fd, strm->next_in, put); + writ = write(state->fd, strm->next_in, put); if (writ < 0) { gz_error(state, Z_ERRNO, zstrerror()); return -1; @@ -105,7 +105,7 @@ local int gz_comp(gz_statep state, int flush) { while (strm->next_out > state->x.next) { put = strm->next_out - state->x.next > (int)max ? max : (unsigned)(strm->next_out - state->x.next); - writ = _write(state->fd, state->x.next, put); + writ = write(state->fd, state->x.next, put); if (writ < 0) { gz_error(state, Z_ERRNO, zstrerror()); return -1; @@ -624,7 +624,7 @@ int ZEXPORT gzclose_w(gzFile file) { } gz_error(state, Z_OK, NULL); free(state->path); - if (_close(state->fd) == -1) + if (close(state->fd) == -1) ret = Z_ERRNO; free(state); return ret; diff --git a/external/zlib/libs/x64/zlib.lib b/external/zlib/libs/x64/zlib.lib deleted file mode 100644 index 1098a24d0fe0bef599a072561a734c0a7f93887d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 384538 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 + + + zip compression library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/zlib/win32/DLL_FAQ.txt b/external/zlib/win32/DLL_FAQ.txt new file mode 100644 index 00000000..d8cf5f31 --- /dev/null +++ b/external/zlib/win32/DLL_FAQ.txt @@ -0,0 +1,381 @@ + + Frequently Asked Questions about ZLIB1.DLL + + +This document describes the design, the rationale, and the usage +of the common DLL build of zlib, named ZLIB1.DLL. If you have +general questions about zlib, you should see the file "FAQ" found +in the zlib distribution, or at the following location: + http://www.gzip.org/zlib/zlib_faq.html + + + 1. What is ZLIB1.DLL, and how can I get it? + + - ZLIB1.DLL is the common build of zlib as a DLL. + (Please remark the character '1' in the name.) + + Applications that link to ZLIB1.DLL can rely on the following + specification: + + * The exported symbols are exclusively defined in the source + files "zlib.h" and "zlib.def", found in an official zlib + source distribution. + * The symbols are exported by name, not by ordinal. + * The exported names are undecorated. + * The calling convention of functions is "C" (CDECL). + * The ZLIB1.DLL binary is linked to MSVCRT.DLL. + + The archive in which ZLIB1.DLL is bundled contains compiled + test programs that must run with a valid build of ZLIB1.DLL. + It is recommended to download the prebuilt DLL from the zlib + web site, instead of building it yourself, to avoid potential + incompatibilities that could be introduced by your compiler + and build settings. If you do build the DLL yourself, please + make sure that it complies with all the above requirements, + and it runs with the precompiled test programs, bundled with + the original ZLIB1.DLL distribution. + + If, for any reason, you need to build an incompatible DLL, + please use a different file name. + + + 2. Why did you change the name of the DLL to ZLIB1.DLL? + What happened to the old ZLIB.DLL? + + - The old ZLIB.DLL, built from zlib-1.1.4 or earlier, required + compilation settings that were incompatible to those used by + a static build. The DLL settings were supposed to be enabled + by defining the macro ZLIB_DLL, before including "zlib.h". + Incorrect handling of this macro was silently accepted at + build time, resulting in two major problems: + + * ZLIB_DLL was missing from the old makefile. When building + the DLL, not all people added it to the build options. In + consequence, incompatible incarnations of ZLIB.DLL started + to circulate around the net. + + * When switching from using the static library to using the + DLL, applications had to define the ZLIB_DLL macro and + to recompile all the sources that contained calls to zlib + functions. Failure to do so resulted in creating binaries + that were unable to run with the official ZLIB.DLL build. + + The only possible solution that we could foresee was to make + a binary-incompatible change in the DLL interface, in order to + remove the dependency on the ZLIB_DLL macro, and to release + the new DLL under a different name. + + We chose the name ZLIB1.DLL, where '1' indicates the major + zlib version number. We hope that we will not have to break + the binary compatibility again, at least not as long as the + zlib-1.x series will last. + + There is still a ZLIB_DLL macro, that can trigger a more + efficient build and use of the DLL, but compatibility no + longer dependents on it. + + + 3. Can I build ZLIB.DLL from the new zlib sources, and replace + an old ZLIB.DLL, that was built from zlib-1.1.4 or earlier? + + - In principle, you can do it by assigning calling convention + keywords to the macros ZEXPORT and ZEXPORTVA. In practice, + it depends on what you mean by "an old ZLIB.DLL", because the + old DLL exists in several mutually-incompatible versions. + You have to find out first what kind of calling convention is + being used in your particular ZLIB.DLL build, and to use the + same one in the new build. If you don't know what this is all + about, you might be better off if you would just leave the old + DLL intact. + + + 4. Can I compile my application using the new zlib interface, and + link it to an old ZLIB.DLL, that was built from zlib-1.1.4 or + earlier? + + - The official answer is "no"; the real answer depends again on + what kind of ZLIB.DLL you have. Even if you are lucky, this + course of action is unreliable. + + If you rebuild your application and you intend to use a newer + version of zlib (post- 1.1.4), it is strongly recommended to + link it to the new ZLIB1.DLL. + + + 5. Why are the zlib symbols exported by name, and not by ordinal? + + - Although exporting symbols by ordinal is a little faster, it + is risky. Any single glitch in the maintenance or use of the + DEF file that contains the ordinals can result in incompatible + builds and frustrating crashes. Simply put, the benefits of + exporting symbols by ordinal do not justify the risks. + + Technically, it should be possible to maintain ordinals in + the DEF file, and still export the symbols by name. Ordinals + exist in every DLL, and even if the dynamic linking performed + at the DLL startup is searching for names, ordinals serve as + hints, for a faster name lookup. However, if the DEF file + contains ordinals, the Microsoft linker automatically builds + an implib that will cause the executables linked to it to use + those ordinals, and not the names. It is interesting to + notice that the GNU linker for Win32 does not suffer from this + problem. + + It is possible to avoid the DEF file if the exported symbols + are accompanied by a "__declspec(dllexport)" attribute in the + source files. You can do this in zlib by predefining the + ZLIB_DLL macro. + + + 6. I see that the ZLIB1.DLL functions use the "C" (CDECL) calling + convention. Why not use the STDCALL convention? + STDCALL is the standard convention in Win32, and I need it in + my Visual Basic project! + + (For readability, we use CDECL to refer to the convention + triggered by the "__cdecl" keyword, STDCALL to refer to + the convention triggered by "__stdcall", and FASTCALL to + refer to the convention triggered by "__fastcall".) + + - Most of the native Windows API functions (without varargs) use + indeed the WINAPI convention (which translates to STDCALL in + Win32), but the standard C functions use CDECL. If a user + application is intrinsically tied to the Windows API (e.g. + it calls native Windows API functions such as CreateFile()), + sometimes it makes sense to decorate its own functions with + WINAPI. But if ANSI C or POSIX portability is a goal (e.g. + it calls standard C functions such as fopen()), it is not a + sound decision to request the inclusion of , or to + use non-ANSI constructs, for the sole purpose to make the user + functions STDCALL-able. + + The functionality offered by zlib is not in the category of + "Windows functionality", but is more like "C functionality". + + Technically, STDCALL is not bad; in fact, it is slightly + faster than CDECL, and it works with variable-argument + functions, just like CDECL. It is unfortunate that, in spite + of using STDCALL in the Windows API, it is not the default + convention used by the C compilers that run under Windows. + The roots of the problem reside deep inside the unsafety of + the K&R-style function prototypes, where the argument types + are not specified; but that is another story for another day. + + The remaining fact is that CDECL is the default convention. + Even if an explicit convention is hard-coded into the function + prototypes inside C headers, problems may appear. The + necessity to expose the convention in users' callbacks is one + of these problems. + + The calling convention issues are also important when using + zlib in other programming languages. Some of them, like Ada + (GNAT) and Fortran (GNU G77), have C bindings implemented + initially on Unix, and relying on the C calling convention. + On the other hand, the pre- .NET versions of Microsoft Visual + Basic require STDCALL, while Borland Delphi prefers, although + it does not require, FASTCALL. + + In fairness to all possible uses of zlib outside the C + programming language, we choose the default "C" convention. + Anyone interested in different bindings or conventions is + encouraged to maintain specialized projects. The "contrib/" + directory from the zlib distribution already holds a couple + of foreign bindings, such as Ada, C++, and Delphi. + + + 7. I need a DLL for my Visual Basic project. What can I do? + + - Define the ZLIB_WINAPI macro before including "zlib.h", when + building both the DLL and the user application (except that + you don't need to define anything when using the DLL in Visual + Basic). The ZLIB_WINAPI macro will switch on the WINAPI + (STDCALL) convention. The name of this DLL must be different + than the official ZLIB1.DLL. + + Gilles Vollant has contributed a build named ZLIBWAPI.DLL, + with the ZLIB_WINAPI macro turned on, and with the minizip + functionality built in. For more information, please read + the notes inside "contrib/vstudio/readme.txt", found in the + zlib distribution. + + + 8. I need to use zlib in my Microsoft .NET project. What can I + do? + + - Henrik Ravn has contributed a .NET wrapper around zlib. Look + into contrib/dotzlib/, inside the zlib distribution. + + + 9. If my application uses ZLIB1.DLL, should I link it to + MSVCRT.DLL? Why? + + - It is not required, but it is recommended to link your + application to MSVCRT.DLL, if it uses ZLIB1.DLL. + + The executables (.EXE, .DLL, etc.) that are involved in the + same process and are using the C run-time library (i.e. they + are calling standard C functions), must link to the same + library. There are several libraries in the Win32 system: + CRTDLL.DLL, MSVCRT.DLL, the static C libraries, etc. + Since ZLIB1.DLL is linked to MSVCRT.DLL, the executables that + depend on it should also be linked to MSVCRT.DLL. + + +10. Why are you saying that ZLIB1.DLL and my application should + be linked to the same C run-time (CRT) library? I linked my + application and my DLLs to different C libraries (e.g. my + application to a static library, and my DLLs to MSVCRT.DLL), + and everything works fine. + + - If a user library invokes only pure Win32 API (accessible via + and the related headers), its DLL build will work + in any context. But if this library invokes standard C API, + things get more complicated. + + There is a single Win32 library in a Win32 system. Every + function in this library resides in a single DLL module, that + is safe to call from anywhere. On the other hand, there are + multiple versions of the C library, and each of them has its + own separate internal state. Standalone executables and user + DLLs that call standard C functions must link to a C run-time + (CRT) library, be it static or shared (DLL). Intermixing + occurs when an executable (not necessarily standalone) and a + DLL are linked to different CRTs, and both are running in the + same process. + + Intermixing multiple CRTs is possible, as long as their + internal states are kept intact. The Microsoft Knowledge Base + articles KB94248 "HOWTO: Use the C Run-Time" and KB140584 + "HOWTO: Link with the Correct C Run-Time (CRT) Library" + mention the potential problems raised by intermixing. + + If intermixing works for you, it's because your application + and DLLs are avoiding the corruption of each of the CRTs' + internal states, maybe by careful design, or maybe by fortune. + + Also note that linking ZLIB1.DLL to non-Microsoft CRTs, such + as those provided by Borland, raises similar problems. + + +11. Why are you linking ZLIB1.DLL to MSVCRT.DLL? + + - MSVCRT.DLL exists on every Windows 95 with a new service pack + installed, or with Microsoft Internet Explorer 4 or later, and + on all other Windows 4.x or later (Windows 98, Windows NT 4, + or later). It is freely distributable; if not present in the + system, it can be downloaded from Microsoft or from other + software provider for free. + + The fact that MSVCRT.DLL does not exist on a virgin Windows 95 + is not so problematic. Windows 95 is scarcely found nowadays, + Microsoft ended its support a long time ago, and many recent + applications from various vendors, including Microsoft, do not + even run on it. Furthermore, no serious user should run + Windows 95 without a proper update installed. + + +12. Why are you not linking ZLIB1.DLL to + <> ? + + - We considered and abandoned the following alternatives: + + * Linking ZLIB1.DLL to a static C library (LIBC.LIB, or + LIBCMT.LIB) is not a good option. People are using the DLL + mainly to save disk space. If you are linking your program + to a static C library, you may as well consider linking zlib + in statically, too. + + * Linking ZLIB1.DLL to CRTDLL.DLL looks appealing, because + CRTDLL.DLL is present on every Win32 installation. + Unfortunately, it has a series of problems: it does not + work properly with Microsoft's C++ libraries, it does not + provide support for 64-bit file offsets, (and so on...), + and Microsoft discontinued its support a long time ago. + + * Linking ZLIB1.DLL to MSVCR70.DLL or MSVCR71.DLL, supplied + with the Microsoft .NET platform, and Visual C++ 7.0/7.1, + raises problems related to the status of ZLIB1.DLL as a + system component. According to the Microsoft Knowledge Base + article KB326922 "INFO: Redistribution of the Shared C + Runtime Component in Visual C++ .NET", MSVCR70.DLL and + MSVCR71.DLL are not supposed to function as system DLLs, + because they may clash with MSVCRT.DLL. Instead, the + application's installer is supposed to put these DLLs + (if needed) in the application's private directory. + If ZLIB1.DLL depends on a non-system runtime, it cannot + function as a redistributable system component. + + * Linking ZLIB1.DLL to non-Microsoft runtimes, such as + Borland's, or Cygwin's, raises problems related to the + reliable presence of these runtimes on Win32 systems. + It's easier to let the DLL build of zlib up to the people + who distribute these runtimes, and who may proceed as + explained in the answer to Question 14. + + +13. If ZLIB1.DLL cannot be linked to MSVCR70.DLL or MSVCR71.DLL, + how can I build/use ZLIB1.DLL in Microsoft Visual C++ 7.0 + (Visual Studio .NET) or newer? + + - Due to the problems explained in the Microsoft Knowledge Base + article KB326922 (see the previous answer), the C runtime that + comes with the VC7 environment is no longer considered a + system component. That is, it should not be assumed that this + runtime exists, or may be installed in a system directory. + Since ZLIB1.DLL is supposed to be a system component, it may + not depend on a non-system component. + + In order to link ZLIB1.DLL and your application to MSVCRT.DLL + in VC7, you need the library of Visual C++ 6.0 or older. If + you don't have this library at hand, it's probably best not to + use ZLIB1.DLL. + + We are hoping that, in the future, Microsoft will provide a + way to build applications linked to a proper system runtime, + from the Visual C++ environment. Until then, you have a + couple of alternatives, such as linking zlib in statically. + If your application requires dynamic linking, you may proceed + as explained in the answer to Question 14. + + +14. I need to link my own DLL build to a CRT different than + MSVCRT.DLL. What can I do? + + - Feel free to rebuild the DLL from the zlib sources, and link + it the way you want. You should, however, clearly state that + your build is unofficial. You should give it a different file + name, and/or install it in a private directory that can be + accessed by your application only, and is not visible to the + others (i.e. it's neither in the PATH, nor in the SYSTEM or + SYSTEM32 directories). Otherwise, your build may clash with + applications that link to the official build. + + For example, in Cygwin, zlib is linked to the Cygwin runtime + CYGWIN1.DLL, and it is distributed under the name CYGZ.DLL. + + +15. May I include additional pieces of code that I find useful, + link them in ZLIB1.DLL, and export them? + + - No. A legitimate build of ZLIB1.DLL must not include code + that does not originate from the official zlib source code. + But you can make your own private DLL build, under a different + file name, as suggested in the previous answer. + + For example, zlib is a part of the VCL library, distributed + with Borland Delphi and C++ Builder. The DLL build of VCL + is a redistributable file, named VCLxx.DLL. + + +16. May I remove some functionality out of ZLIB1.DLL, by enabling + macros like NO_GZCOMPRESS or NO_GZIP at compile time? + + - No. A legitimate build of ZLIB1.DLL must provide the complete + zlib functionality, as implemented in the official zlib source + code. But you can make your own private DLL build, under a + different file name, as suggested in the previous answer. + +** + +This document is written and maintained by +Cosmin Truta diff --git a/external/zlib/win32/Makefile.bor b/external/zlib/win32/Makefile.bor new file mode 100644 index 00000000..4495353f --- /dev/null +++ b/external/zlib/win32/Makefile.bor @@ -0,0 +1,109 @@ +# Makefile for zlib +# Borland C++ for Win32 +# +# Usage: +# make -f win32/Makefile.bor + +# ------------ Borland C++ ------------ + +# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) +# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or +# added to the declaration of LOC here: +LOC = $(LOCAL_ZLIB) + +CC = bcc32 +AS = bcc32 +LD = bcc32 +AR = tlib +CFLAGS = -a -d -k- -O2 $(LOC) +ASFLAGS = $(LOC) +LDFLAGS = $(LOC) + + +# variables +ZLIB_LIB = zlib.lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +#OBJA = +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj +#OBJPA= + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $< + +.asm.obj: + $(AS) -c $(ASFLAGS) $< + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# For the sake of the old Borland make, +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) $(OBJA) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + $(AR) $(ZLIB_LIB) $(OBJPA) + + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + + +# cleanup +clean: + -del $(ZLIB_LIB) + -del *.obj + -del *.exe + -del *.tds + -del zlib.bak + -del foo.gz diff --git a/external/zlib/win32/Makefile.gcc b/external/zlib/win32/Makefile.gcc new file mode 100644 index 00000000..081e391e --- /dev/null +++ b/external/zlib/win32/Makefile.gcc @@ -0,0 +1,177 @@ +# Makefile for zlib, derived from Makefile.dj2. +# Modified for mingw32 by C. Spieler, 6/16/98. +# Updated for zlib 1.2.x by Christian Spieler and Cosmin Truta, Mar-2003. +# Last updated: Mar 2012. +# Tested under Cygwin and MinGW. + +# Copyright (C) 1995-2003 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type from the top level zlib directory: +# +# make -fwin32/Makefile.gcc; make test testdll -fwin32/Makefile.gcc +# +# To install libz.a, zconf.h and zlib.h in the system directories, type: +# +# make install -fwin32/Makefile.gcc +# +# BINARY_PATH, INCLUDE_PATH and LIBRARY_PATH must be set. +# +# To install the shared lib, append SHARED_MODE=1 to the make command : +# +# make install -fwin32/Makefile.gcc SHARED_MODE=1 + +# Note: +# If the platform is *not* MinGW (e.g. it is Cygwin or UWIN), +# the DLL name should be changed from "zlib1.dll". + +STATICLIB = libz.a +SHAREDLIB = zlib1.dll +IMPLIB = libz.dll.a + +# +# Set to 1 if shared object needs to be installed +# +SHARED_MODE=0 + +#LOC = -DZLIB_DEBUG -g + +PREFIX = +CC = $(PREFIX)gcc +CFLAGS = $(LOC) -O3 -Wall + +AS = $(CC) +ASFLAGS = $(LOC) -Wall + +LD = $(CC) +LDFLAGS = $(LOC) + +AR = $(PREFIX)ar +ARFLAGS = rcs + +RC = $(PREFIX)windres +RCFLAGS = --define GCC_WINDRES + +STRIP = $(PREFIX)strip + +CP = cp -fp +# If GNU install is available, replace $(CP) with install. +INSTALL = $(CP) +RM = rm -f + +prefix ?= /usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \ + gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o +OBJA = + +all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) example.exe minigzip.exe example_d.exe minigzip_d.exe + +test: example.exe minigzip.exe + ./example + echo hello world | ./minigzip | ./minigzip -d + +testdll: example_d.exe minigzip_d.exe + ./example_d + echo hello world | ./minigzip_d | ./minigzip_d -d + +.c.o: + $(CC) $(CFLAGS) -c -o $@ $< + +.S.o: + $(AS) $(ASFLAGS) -c -o $@ $< + +$(STATICLIB): $(OBJS) $(OBJA) + $(AR) $(ARFLAGS) $@ $(OBJS) $(OBJA) + +$(IMPLIB): $(SHAREDLIB) + +$(SHAREDLIB): win32/zlib.def $(OBJS) $(OBJA) zlibrc.o + $(CC) -shared -Wl,--out-implib,$(IMPLIB) $(LDFLAGS) \ + -o $@ win32/zlib.def $(OBJS) $(OBJA) zlibrc.o + $(STRIP) $@ + +example.exe: example.o $(STATICLIB) + $(LD) $(LDFLAGS) -o $@ example.o $(STATICLIB) + $(STRIP) $@ + +minigzip.exe: minigzip.o $(STATICLIB) + $(LD) $(LDFLAGS) -o $@ minigzip.o $(STATICLIB) + $(STRIP) $@ + +example_d.exe: example.o $(IMPLIB) + $(LD) $(LDFLAGS) -o $@ example.o $(IMPLIB) + $(STRIP) $@ + +minigzip_d.exe: minigzip.o $(IMPLIB) + $(LD) $(LDFLAGS) -o $@ minigzip.o $(IMPLIB) + $(STRIP) $@ + +example.o: test/example.c zlib.h zconf.h + $(CC) $(CFLAGS) -I. -c -o $@ test/example.c + +minigzip.o: test/minigzip.c zlib.h zconf.h + $(CC) $(CFLAGS) -I. -c -o $@ test/minigzip.c + +zlibrc.o: win32/zlib1.rc + $(RC) $(RCFLAGS) -o $@ win32/zlib1.rc + +.PHONY: install uninstall clean + +install: zlib.h zconf.h $(STATICLIB) $(IMPLIB) + @if test -z "$(DESTDIR)$(INCLUDE_PATH)" -o -z "$(DESTDIR)$(LIBRARY_PATH)" -o -z "$(DESTDIR)$(BINARY_PATH)"; then \ + echo INCLUDE_PATH, LIBRARY_PATH, and BINARY_PATH must be specified; \ + exit 1; \ + fi + -@mkdir -p '$(DESTDIR)$(INCLUDE_PATH)' + -@mkdir -p '$(DESTDIR)$(LIBRARY_PATH)' '$(DESTDIR)$(LIBRARY_PATH)'/pkgconfig + -if [ "$(SHARED_MODE)" = "1" ]; then \ + mkdir -p '$(DESTDIR)$(BINARY_PATH)'; \ + $(INSTALL) $(SHAREDLIB) '$(DESTDIR)$(BINARY_PATH)'; \ + $(INSTALL) $(IMPLIB) '$(DESTDIR)$(LIBRARY_PATH)'; \ + fi + -$(INSTALL) zlib.h '$(DESTDIR)$(INCLUDE_PATH)' + -$(INSTALL) zconf.h '$(DESTDIR)$(INCLUDE_PATH)' + -$(INSTALL) $(STATICLIB) '$(DESTDIR)$(LIBRARY_PATH)' + sed \ + -e 's|@prefix@|${prefix}|g' \ + -e 's|@exec_prefix@|${exec_prefix}|g' \ + -e 's|@libdir@|$(LIBRARY_PATH)|g' \ + -e 's|@sharedlibdir@|$(LIBRARY_PATH)|g' \ + -e 's|@includedir@|$(INCLUDE_PATH)|g' \ + -e 's|@VERSION@|'`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' zlib.h`'|g' \ + zlib.pc.in > '$(DESTDIR)$(LIBRARY_PATH)'/pkgconfig/zlib.pc + +uninstall: + -if [ "$(SHARED_MODE)" = "1" ]; then \ + $(RM) '$(DESTDIR)$(BINARY_PATH)'/$(SHAREDLIB); \ + $(RM) '$(DESTDIR)$(LIBRARY_PATH)'/$(IMPLIB); \ + fi + -$(RM) '$(DESTDIR)$(INCLUDE_PATH)'/zlib.h + -$(RM) '$(DESTDIR)$(INCLUDE_PATH)'/zconf.h + -$(RM) '$(DESTDIR)$(LIBRARY_PATH)'/$(STATICLIB) + +clean: + -$(RM) $(STATICLIB) + -$(RM) $(SHAREDLIB) + -$(RM) $(IMPLIB) + -$(RM) *.o + -$(RM) *.exe + -$(RM) foo.gz + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: crc32.h zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +gzclose.o: zlib.h zconf.h gzguts.h +gzlib.o: zlib.h zconf.h gzguts.h +gzread.o: zlib.h zconf.h gzguts.h +gzwrite.o: zlib.h zconf.h gzguts.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/external/zlib/win32/Makefile.msc b/external/zlib/win32/Makefile.msc new file mode 100644 index 00000000..9c651536 --- /dev/null +++ b/external/zlib/win32/Makefile.msc @@ -0,0 +1,159 @@ +# Makefile for zlib using Microsoft (Visual) C +# zlib is copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler +# +# Usage: +# nmake -f win32/Makefile.msc (standard build) +# nmake -f win32/Makefile.msc LOC=-DFOO (nonstandard build) + +# The toplevel directory of the source tree. +# +TOP = . + +# optional build flags +LOC = + +# variables +STATICLIB = zlib.lib +SHAREDLIB = zlib1.dll +IMPLIB = zdll.lib + +CC = cl +AS = ml +LD = link +AR = lib +RC = rc +CFLAGS = -nologo -MD -W3 -O2 -Oy- -Zi -Fd"zlib" $(LOC) +WFLAGS = -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE +ASFLAGS = -coff -Zi $(LOC) +LDFLAGS = -nologo -debug -incremental:no -opt:ref +ARFLAGS = -nologo +RCFLAGS = /dWIN32 /r + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj \ + gzwrite.obj infback.obj inflate.obj inftrees.obj inffast.obj trees.obj uncompr.obj zutil.obj +OBJA = + + +# targets +all: $(STATICLIB) $(SHAREDLIB) $(IMPLIB) \ + example.exe minigzip.exe example_d.exe minigzip_d.exe + +$(STATICLIB): $(OBJS) $(OBJA) + $(AR) $(ARFLAGS) -out:$@ $(OBJS) $(OBJA) + +$(IMPLIB): $(SHAREDLIB) + +$(SHAREDLIB): $(TOP)/win32/zlib.def $(OBJS) $(OBJA) zlib1.res + $(LD) $(LDFLAGS) -def:$(TOP)/win32/zlib.def -dll -implib:$(IMPLIB) \ + -out:$@ -base:0x5A4C0000 $(OBJS) $(OBJA) zlib1.res + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;2 + +example.exe: example.obj $(STATICLIB) + $(LD) $(LDFLAGS) example.obj $(STATICLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +minigzip.exe: minigzip.obj $(STATICLIB) + $(LD) $(LDFLAGS) minigzip.obj $(STATICLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +example_d.exe: example.obj $(IMPLIB) + $(LD) $(LDFLAGS) -out:$@ example.obj $(IMPLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +minigzip_d.exe: minigzip.obj $(IMPLIB) + $(LD) $(LDFLAGS) -out:$@ minigzip.obj $(IMPLIB) + if exist $@.manifest \ + mt -nologo -manifest $@.manifest -outputresource:$@;1 + +{$(TOP)}.c.obj: + $(CC) -c $(WFLAGS) $(CFLAGS) $< + +{$(TOP)/test}.c.obj: + $(CC) -c -I$(TOP) $(WFLAGS) $(CFLAGS) $< + +{$(TOP)/contrib/masmx64}.c.obj: + $(CC) -c $(WFLAGS) $(CFLAGS) $< + +{$(TOP)/contrib/masmx64}.asm.obj: + $(AS) -c $(ASFLAGS) $< + +{$(TOP)/contrib/masmx86}.asm.obj: + $(AS) -c $(ASFLAGS) $< + +adler32.obj: $(TOP)/adler32.c $(TOP)/zlib.h $(TOP)/zconf.h + +compress.obj: $(TOP)/compress.c $(TOP)/zlib.h $(TOP)/zconf.h + +crc32.obj: $(TOP)/crc32.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/crc32.h + +deflate.obj: $(TOP)/deflate.c $(TOP)/deflate.h $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h + +gzclose.obj: $(TOP)/gzclose.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h + +gzlib.obj: $(TOP)/gzlib.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h + +gzread.obj: $(TOP)/gzread.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h + +gzwrite.obj: $(TOP)/gzwrite.c $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/gzguts.h + +infback.obj: $(TOP)/infback.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \ + $(TOP)/inffast.h $(TOP)/inffixed.h + +inffast.obj: $(TOP)/inffast.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \ + $(TOP)/inffast.h + +inflate.obj: $(TOP)/inflate.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h $(TOP)/inflate.h \ + $(TOP)/inffast.h $(TOP)/inffixed.h + +inftrees.obj: $(TOP)/inftrees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/inftrees.h + +trees.obj: $(TOP)/trees.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h $(TOP)/deflate.h $(TOP)/trees.h + +uncompr.obj: $(TOP)/uncompr.c $(TOP)/zlib.h $(TOP)/zconf.h + +zutil.obj: $(TOP)/zutil.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h + +gvmat64.obj: $(TOP)/contrib\masmx64\gvmat64.asm + +inffasx64.obj: $(TOP)/contrib\masmx64\inffasx64.asm + +inffas8664.obj: $(TOP)/contrib\masmx64\inffas8664.c $(TOP)/zutil.h $(TOP)/zlib.h $(TOP)/zconf.h \ + $(TOP)/inftrees.h $(TOP)/inflate.h $(TOP)/inffast.h + +inffas32.obj: $(TOP)/contrib\masmx86\inffas32.asm + +match686.obj: $(TOP)/contrib\masmx86\match686.asm + +example.obj: $(TOP)/test/example.c $(TOP)/zlib.h $(TOP)/zconf.h + +minigzip.obj: $(TOP)/test/minigzip.c $(TOP)/zlib.h $(TOP)/zconf.h + +zlib1.res: $(TOP)/win32/zlib1.rc + $(RC) $(RCFLAGS) /fo$@ $(TOP)/win32/zlib1.rc + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +testdll: example_d.exe minigzip_d.exe + example_d + echo hello world | minigzip_d | minigzip_d -d + + +# cleanup +clean: + -del $(STATICLIB) + -del $(SHAREDLIB) + -del $(IMPLIB) + -del *.obj + -del *.res + -del *.exp + -del *.exe + -del *.pdb + -del *.manifest + -del foo.gz diff --git a/external/zlib/win32/README-WIN32.txt b/external/zlib/win32/README-WIN32.txt new file mode 100644 index 00000000..14e6398e --- /dev/null +++ b/external/zlib/win32/README-WIN32.txt @@ -0,0 +1,103 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.3.1 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://www.ietf.org/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) +and rfc1952.txt (gzip format). + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). Two compiled +examples are distributed in this package, example and minigzip. The example_d +and minigzip_d flavors validate that the zlib1.dll file is working correctly. + +Questions about zlib should be sent to . The zlib home page +is http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. + +PLEASE read DLL_FAQ.txt, and the zlib FAQ http://zlib.net/zlib_faq.html before +asking for help. + + +Manifest: + +The package zlib-1.3.1-win32-x86.zip will contain the following files: + + README-WIN32.txt This document + ChangeLog Changes since previous zlib packages + DLL_FAQ.txt Frequently asked questions about zlib1.dll + zlib.3.pdf Documentation of this library in Adobe Acrobat format + + example.exe A statically-bound example (using zlib.lib, not the dll) + example.pdb Symbolic information for debugging example.exe + + example_d.exe A zlib1.dll bound example (using zdll.lib) + example_d.pdb Symbolic information for debugging example_d.exe + + minigzip.exe A statically-bound test program (using zlib.lib, not the dll) + minigzip.pdb Symbolic information for debugging minigzip.exe + + minigzip_d.exe A zlib1.dll bound test program (using zdll.lib) + minigzip_d.pdb Symbolic information for debugging minigzip_d.exe + + zlib.h Install these files into the compilers' INCLUDE path to + zconf.h compile programs which use zlib.lib or zdll.lib + + zdll.lib Install these files into the compilers' LIB path if linking + zdll.exp a compiled program to the zlib1.dll binary + + zlib.lib Install these files into the compilers' LIB path to link zlib + zlib.pdb into compiled programs, without zlib1.dll runtime dependency + (zlib.pdb provides debugging info to the compile time linker) + + zlib1.dll Install this binary shared library into the system PATH, or + the program's runtime directory (where the .exe resides) + zlib1.pdb Install in the same directory as zlib1.dll, in order to debug + an application crash using WinDbg or similar tools. + +All .pdb files above are entirely optional, but are very useful to a developer +attempting to diagnose program misbehavior or a crash. Many additional +important files for developers can be found in the zlib127.zip source package +available from http://zlib.net/ - review that package's README file for details. + + +Acknowledgments: + +The deflate format used by zlib was defined by Phil Katz. The deflate and +zlib specifications were written by L. Peter Deutsch. Thanks to all the +people who reported problems and suggested various improvements in zlib; they +are too numerous to cite here. + + +Copyright notice: + + (C) 1995-2017 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/external/zlib/win32/VisualC.txt b/external/zlib/win32/VisualC.txt new file mode 100644 index 00000000..1005b219 --- /dev/null +++ b/external/zlib/win32/VisualC.txt @@ -0,0 +1,3 @@ + +To build zlib using the Microsoft Visual C++ environment, +use the appropriate project from the contrib/vstudio/ directory. diff --git a/external/zlib/win32/zlib.def b/external/zlib/win32/zlib.def new file mode 100644 index 00000000..53c80115 --- /dev/null +++ b/external/zlib/win32/zlib.def @@ -0,0 +1,97 @@ +; zlib data compression library +EXPORTS +; basic functions + zlibVersion + deflate + deflateEnd + inflate + inflateEnd +; advanced functions + deflateSetDictionary + deflateGetDictionary + deflateCopy + deflateReset + deflateParams + deflateTune + deflateBound + deflatePending + deflatePrime + deflateSetHeader + inflateSetDictionary + inflateGetDictionary + inflateSync + inflateCopy + inflateReset + inflateReset2 + inflatePrime + inflateMark + inflateGetHeader + inflateBack + inflateBackEnd + zlibCompileFlags +; utility functions + compress + compress2 + compressBound + uncompress + uncompress2 + gzopen + gzdopen + gzbuffer + gzsetparams + gzread + gzfread + gzwrite + gzfwrite + gzprintf + gzvprintf + gzputs + gzgets + gzputc + gzgetc + gzungetc + gzflush + gzseek + gzrewind + gztell + gzoffset + gzeof + gzdirect + gzclose + gzclose_r + gzclose_w + gzerror + gzclearerr +; large file functions + gzopen64 + gzseek64 + gztell64 + gzoffset64 + adler32_combine64 + crc32_combine64 + crc32_combine_gen64 +; checksum functions + adler32 + adler32_z + crc32 + crc32_z + adler32_combine + crc32_combine + crc32_combine_gen + crc32_combine_op +; various hacks, don't look :) + deflateInit_ + deflateInit2_ + inflateInit_ + inflateInit2_ + inflateBackInit_ + gzgetc_ + zError + inflateSyncPoint + get_crc_table + inflateUndermine + inflateValidate + inflateCodesUsed + inflateResetKeep + deflateResetKeep + gzopen_w diff --git a/external/zlib/win32/zlib1.rc b/external/zlib/win32/zlib1.rc new file mode 100644 index 00000000..ceb4ee5c --- /dev/null +++ b/external/zlib/win32/zlib1.rc @@ -0,0 +1,40 @@ +#include +#include "../zlib.h" + +#ifdef GCC_WINDRES +VS_VERSION_INFO VERSIONINFO +#else +VS_VERSION_INFO VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE +#endif + FILEVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 + PRODUCTVERSION ZLIB_VER_MAJOR,ZLIB_VER_MINOR,ZLIB_VER_REVISION,0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS 1 +#else + FILEFLAGS 0 +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + BEGIN + VALUE "FileDescription", "zlib data compression library\0" + VALUE "FileVersion", ZLIB_VERSION "\0" + VALUE "InternalName", "zlib1.dll\0" + VALUE "LegalCopyright", "(C) 1995-2022 Jean-loup Gailly & Mark Adler\0" + VALUE "OriginalFilename", "zlib1.dll\0" + VALUE "ProductName", "zlib\0" + VALUE "ProductVersion", ZLIB_VERSION "\0" + VALUE "Comments", "For more information visit http://www.zlib.net/\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/external/zlib/zconf.h.cmakein b/external/zlib/zconf.h.cmakein new file mode 100644 index 00000000..0abe3bc9 --- /dev/null +++ b/external/zlib/zconf.h.cmakein @@ -0,0 +1,545 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H +#cmakedefine Z_PREFIX +#cmakedefine Z_HAVE_UNISTD_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/external/zlib/zconf.h b/external/zlib/zconf.h.in similarity index 100% rename from external/zlib/zconf.h rename to external/zlib/zconf.h.in diff --git a/external/zlib/zconf.h.included b/external/zlib/zconf.h.included new file mode 100644 index 00000000..62adc8d8 --- /dev/null +++ b/external/zlib/zconf.h.included @@ -0,0 +1,543 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/external/zlib/zlib.3 b/external/zlib/zlib.3 new file mode 100644 index 00000000..c716020e --- /dev/null +++ b/external/zlib/zlib.3 @@ -0,0 +1,149 @@ +.TH ZLIB 3 "22 Jan 2024" +.SH NAME +zlib \- compression/decompression library +.SH SYNOPSIS +[see +.I zlib.h +for full description] +.SH DESCRIPTION +The +.I zlib +library is a general purpose data compression library. +The code is thread safe, assuming that the standard library functions +used are thread safe, such as memory allocation routines. +It provides in-memory compression and decompression functions, +including integrity checks of the uncompressed data. +This version of the library supports only one compression method (deflation) +but other algorithms may be added later +with the same stream interface. +.LP +Compression can be done in a single step if the buffers are large enough +or can be done by repeated calls of the compression function. +In the latter case, +the application must provide more input and/or consume the output +(providing more output space) before each call. +.LP +The library also supports reading and writing files in +.IR gzip (1) +(.gz) format +with an interface similar to that of stdio. +.LP +The library does not install any signal handler. +The decoder checks the consistency of the compressed data, +so the library should never crash even in the case of corrupted input. +.LP +All functions of the compression library are documented in the file +.IR zlib.h . +The distribution source includes examples of use of the library +in the files +.I test/example.c +and +.IR test/minigzip.c, +as well as other examples in the +.IR examples/ +directory. +.LP +Changes to this version are documented in the file +.I ChangeLog +that accompanies the source. +.LP +.I zlib +is built in to many languages and operating systems, including but not limited to +Java, Python, .NET, PHP, Perl, Ruby, Swift, and Go. +.LP +An experimental package to read and write files in the .zip format, +written on top of +.I zlib +by Gilles Vollant (info@winimage.com), +is available at: +.IP +http://www.winimage.com/zLibDll/minizip.html +and also in the +.I contrib/minizip +directory of the main +.I zlib +source distribution. +.SH "SEE ALSO" +The +.I zlib +web site can be found at: +.IP +http://zlib.net/ +.LP +The data format used by the +.I zlib +library is described by RFC +(Request for Comments) 1950 to 1952 in the files: +.IP +http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format) +.br +http://tools.ietf.org/html/rfc1951 (for the deflate compressed data format) +.br +http://tools.ietf.org/html/rfc1952 (for the gzip header and trailer format) +.LP +Mark Nelson wrote an article about +.I zlib +for the Jan. 1997 issue of Dr. Dobb's Journal; +a copy of the article is available at: +.IP +http://marknelson.us/1997/01/01/zlib-engine/ +.SH "REPORTING PROBLEMS" +Before reporting a problem, +please check the +.I zlib +web site to verify that you have the latest version of +.IR zlib ; +otherwise, +obtain the latest version and see if the problem still exists. +Please read the +.I zlib +FAQ at: +.IP +http://zlib.net/zlib_faq.html +.LP +before asking for help. +Send questions and/or comments to zlib@gzip.org, +or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). +.SH AUTHORS AND LICENSE +Version 1.3.1 +.LP +Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler +.LP +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. +.LP +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: +.LP +.nr step 1 1 +.IP \n[step]. 3 +The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +.IP \n+[step]. +Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +.IP \n+[step]. +This notice may not be removed or altered from any source distribution. +.LP +Jean-loup Gailly Mark Adler +.br +jloup@gzip.org madler@alumni.caltech.edu +.LP +The deflate format used by +.I zlib +was defined by Phil Katz. +The deflate and +.I zlib +specifications were written by L. Peter Deutsch. +Thanks to all the people who reported problems and suggested various +improvements in +.IR zlib ; +who are too numerous to cite here. +.LP +UNIX manual page by R. P. C. Rodgers, +U.S. National Library of Medicine (rodgers@nlm.nih.gov). +.\" end of man page diff --git a/external/zlib/zlib.h b/external/zlib/zlib.h index 2fa878a5..8d4b932e 100644 --- a/external/zlib/zlib.h +++ b/external/zlib/zlib.h @@ -1727,7 +1727,7 @@ ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, negative, the result has no meaning or utility. */ -//ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); +ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); /* Update a running CRC-32 with the bytes buf[0..len-1] and return the updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. diff --git a/external/zlib/zlib.pc.cmakein b/external/zlib/zlib.pc.cmakein new file mode 100644 index 00000000..a5e64293 --- /dev/null +++ b/external/zlib/zlib.pc.cmakein @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@INSTALL_LIB_DIR@ +sharedlibdir=@INSTALL_LIB_DIR@ +includedir=@INSTALL_INC_DIR@ + +Name: zlib +Description: zlib compression library +Version: @VERSION@ + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} diff --git a/external/zlib/zlib.pc.in b/external/zlib/zlib.pc.in new file mode 100644 index 00000000..7e5acf9c --- /dev/null +++ b/external/zlib/zlib.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +sharedlibdir=@sharedlibdir@ +includedir=@includedir@ + +Name: zlib +Description: zlib compression library +Version: @VERSION@ + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} From ad378cdb1fec9a9b8a418c172527dbe4f9a1ce6c Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 14:51:34 +0100 Subject: [PATCH 04/24] Ignore temp --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6a2a7a52..47ff4194 100644 --- a/.gitignore +++ b/.gitignore @@ -68,3 +68,4 @@ gencomp gencpu genlinetoscr quaesar +temp From 1dbdf1caa57df6dc316b6f92d07e44d89f882d83 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 14:51:55 +0100 Subject: [PATCH 05/24] Setup for macOS support --- CMakeLists.txt | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7388494f..cd99f8c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,20 @@ gen_blitter(../src/blitfunc.cpp f) gen_blitter(../src/blitfunc.h h) gen_blitter(../src/blittable.cpp t) +target_compile_definitions(quaesar PRIVATE ${SHARED_DEFINES}) + +target_compile_options(quaesar PRIVATE -DUAE=1 -D_cdecl= -DFILEFLAG_WRITE=1 -DOS_NAME=\"linux\") +target_compile_options(quaesar PRIVATE -DUSHORT=uint16_t -DHWND=uint32_t -DHRESULT=uint32_t -DWPARAM=uint16_t -DLPARAM=uint32_t) + +if (APPLE) + target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -DFILEFLAG_DIR=1 -D_ftelli64=ftell -D_fseeki64=fseek -D_fseeko64=fseeko -Dfseeko64=fseeko -Dftello64=ftell) +else() + target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -D_ftelli64=ftello64 -D_fseeki64=fseeko64) +endif() + +target_include_directories(quaesar PRIVATE ${SDL2_INCLUDE_DIRS} "src/external/zlib") +target_link_libraries(quaesar PRIVATE ${SDL2_LIBRARIES} zlibstatic) + add_executable(quaesar src/aros.rom.cpp src/akiko.cpp @@ -198,13 +212,6 @@ add_executable(quaesar src/blit.h ) -target_compile_definitions(quaesar PRIVATE ${SHARED_DEFINES}) -target_compile_options(quaesar PRIVATE -DUAE=1) -target_compile_options(quaesar PRIVATE -D_cdecl= -DFILEFLAG_WRITE=1 -DOS_NAME=\"linux\") -target_compile_options(quaesar PRIVATE -DUSHORT=uint16_t -DHWND=uint32_t -DHRESULT=uint32_t -DWPARAM=uint16_t -DLPARAM=uint32_t) -target_include_directories(quaesar PRIVATE ${SDL2_INCLUDE_DIRS} "src/external/zlib") -target_link_libraries(quaesar PRIVATE ${SDL2_LIBRARIES} zlibstatic) -target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -D_ftelli64=ftello64 -D_fseeki64=fseeko64) From 81d71a5d7eb31d405fc5fc190508b96048983e49 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 14:53:52 +0100 Subject: [PATCH 06/24] Moved over parts of CI to Cmake --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 38fdf12e..cd53429c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,10 +25,10 @@ jobs: sudo update-alternatives --set gcc /usr/bin/gcc-${{ matrix.gcc-version }} - name: Install dependencies - run: sudo apt-get update && sudo apt-get install -y libsdl2-dev + run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja - name: Build quaesar - run: make -j$(nproc) + run: mkdir temp && cd temp && cmake .. -G Ninja && ninja linux_clang_ubuntu_20_04: runs-on: ubuntu-20.04 From 578790afd91dced33eafcd493d7252b7f66342ab Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 14:55:54 +0100 Subject: [PATCH 07/24] Correct name for ninja --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cd53429c..ead73aff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja - name: Build quaesar - run: mkdir temp && cd temp && cmake .. -G Ninja && ninja + run: mkdir temp && cd temp && cmake .. -G Ninja && ninja-build linux_clang_ubuntu_20_04: runs-on: ubuntu-20.04 From cd24516e471aaeea4f04b18264a07afd2dd10476 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 14:57:52 +0100 Subject: [PATCH 08/24] Lets change in the correct place --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ead73aff..7a94d00b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,10 +25,10 @@ jobs: sudo update-alternatives --set gcc /usr/bin/gcc-${{ matrix.gcc-version }} - name: Install dependencies - run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja + run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build - name: Build quaesar - run: mkdir temp && cd temp && cmake .. -G Ninja && ninja-build + run: mkdir temp && cd temp && cmake .. -G Ninja && ninja linux_clang_ubuntu_20_04: runs-on: ubuntu-20.04 From a2d90da69266f16c6e211bc6810e32513eca2a19 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 14:59:39 +0100 Subject: [PATCH 09/24] CMake fixes --- CMakeLists.txt | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cd99f8c8..0fd44926 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,20 +74,6 @@ gen_blitter(../src/blitfunc.cpp f) gen_blitter(../src/blitfunc.h h) gen_blitter(../src/blittable.cpp t) -target_compile_definitions(quaesar PRIVATE ${SHARED_DEFINES}) - -target_compile_options(quaesar PRIVATE -DUAE=1 -D_cdecl= -DFILEFLAG_WRITE=1 -DOS_NAME=\"linux\") -target_compile_options(quaesar PRIVATE -DUSHORT=uint16_t -DHWND=uint32_t -DHRESULT=uint32_t -DWPARAM=uint16_t -DLPARAM=uint32_t) - -if (APPLE) - target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -DFILEFLAG_DIR=1 -D_ftelli64=ftell -D_fseeki64=fseek -D_fseeko64=fseeko -Dfseeko64=fseeko -Dftello64=ftell) -else() - target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -D_ftelli64=ftello64 -D_fseeki64=fseeko64) -endif() - -target_include_directories(quaesar PRIVATE ${SDL2_INCLUDE_DIRS} "src/external/zlib") -target_link_libraries(quaesar PRIVATE ${SDL2_LIBRARIES} zlibstatic) - add_executable(quaesar src/aros.rom.cpp src/akiko.cpp @@ -212,6 +198,20 @@ add_executable(quaesar src/blit.h ) +target_compile_definitions(quaesar PRIVATE ${SHARED_DEFINES}) + +target_compile_options(quaesar PRIVATE -DUAE=1 -D_cdecl= -DFILEFLAG_WRITE=1 -DOS_NAME=\"linux\") +target_compile_options(quaesar PRIVATE -DUSHORT=uint16_t -DHWND=uint32_t -DHRESULT=uint32_t -DWPARAM=uint16_t -DLPARAM=uint32_t) + +if (APPLE) + target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -DFILEFLAG_DIR=1 -D_ftelli64=ftell -D_fseeki64=fseek -D_fseeko64=fseeko -Dfseeko64=fseeko -Dftello64=ftell) +else() + target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -D_ftelli64=ftello64 -D_fseeki64=fseeko64) +endif() + +target_include_directories(quaesar PRIVATE ${SDL2_INCLUDE_DIRS} "src/external/zlib") +target_link_libraries(quaesar PRIVATE ${SDL2_LIBRARIES} zlibstatic) + From 5324416153cbdc7ef536e00061bd06b178641685 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 15:01:22 +0100 Subject: [PATCH 10/24] Poke --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a94d00b..ecbe9984 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,6 +27,8 @@ jobs: - name: Install dependencies run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build + # Build with ninja + - name: Build quaesar run: mkdir temp && cd temp && cmake .. -G Ninja && ninja From 3733d887a925a9847a6d6480b8867e393f4f91ea Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 15:08:05 +0100 Subject: [PATCH 11/24] Link with dl on Linux --- .github/workflows/ci.yml | 5 +++-- CMakeLists.txt | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ecbe9984..53e0d298 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,9 +27,10 @@ jobs: - name: Install dependencies run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build - # Build with ninja - - name: Build quaesar + env: + CC: gcc-${{ matrix.gcc-version }} + CXX: gcc++-${{ matrix.gcc-version }} run: mkdir temp && cd temp && cmake .. -G Ninja && ninja linux_clang_ubuntu_20_04: diff --git a/CMakeLists.txt b/CMakeLists.txt index 0fd44926..4a1515d7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,6 +209,10 @@ else() target_compile_options(quaesar PRIVATE -DFILEFLAG_DIR=1 -D_ftelli64=ftello64 -D_fseeki64=fseeko64) endif() +if (LINUX) + target_link_libraries(quaesar PRIVATE dl) +endif() + target_include_directories(quaesar PRIVATE ${SDL2_INCLUDE_DIRS} "src/external/zlib") target_link_libraries(quaesar PRIVATE ${SDL2_LIBRARIES} zlibstatic) From 3f035b454378617053e72039acbf709c38dc7943 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 15:16:59 +0100 Subject: [PATCH 12/24] Set correct compiler --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 53e0d298..607c5488 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: - name: Build quaesar env: CC: gcc-${{ matrix.gcc-version }} - CXX: gcc++-${{ matrix.gcc-version }} + CXX: g++-${{ matrix.gcc-version }} run: mkdir temp && cd temp && cmake .. -G Ninja && ninja linux_clang_ubuntu_20_04: From dc9db0b64d5c2851cf7b45aca5cc171096244612 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 15:27:14 +0100 Subject: [PATCH 13/24] Switch to cmake for everything but windows --- .github/workflows/ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 607c5488..9c15b590 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -58,13 +58,13 @@ jobs: clang++ --version # Display the version of clang for debugging - name: Install dependencies - run: sudo apt-get install -y libsdl2-dev + run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build - name: Build quaesar env: CC: clang-${{ matrix.clang-version }} CXX: clang++-${{ matrix.clang-version }} - run: make -j$(nproc) + run: mkdir temp && cd temp && cmake .. -G Ninja && ninja linux_clang_ubuntu_22_04: runs-on: ubuntu-22.04 @@ -91,13 +91,13 @@ jobs: clang++ --version # Display the version of clang for debugging - name: Install dependencies - run: sudo apt-get install -y libsdl2-dev + run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build - name: Build quaesar env: CC: clang-${{ matrix.clang-version }} CXX: clang++-${{ matrix.clang-version }} - run: make -j$(nproc) + run: mkdir temp && cd temp && cmake .. -G Ninja && ninja macos: runs-on: ${{ matrix.os }} @@ -110,10 +110,10 @@ jobs: uses: actions/checkout@v4 - name: Install dependencies - run: brew install sdl2 + run: brew install sdl2 cmake ninja-build - name: Build quaesar - run: make -j$(nproc) + run: mkdir temp && cd temp && cmake .. -G Ninja && ninja windows: runs-on: ${{ matrix.os }} From 466b63655b6962d3645f73b3b2a36b0947c2794d Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 15:34:37 +0100 Subject: [PATCH 14/24] Correct name for ninja on macOS --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9c15b590..2f7d7f46 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -110,7 +110,7 @@ jobs: uses: actions/checkout@v4 - name: Install dependencies - run: brew install sdl2 cmake ninja-build + run: brew install sdl2 cmake ninja - name: Build quaesar run: mkdir temp && cd temp && cmake .. -G Ninja && ninja From 80180365315ec0b5a16fd9b1179d316a7bbb3022 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 15:44:23 +0100 Subject: [PATCH 15/24] Simplify workflow --- .github/workflows/ci.yml | 64 +++++++++++----------------------------- 1 file changed, 17 insertions(+), 47 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2f7d7f46..d1ec8f97 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,12 +7,12 @@ on: branches: [ "master", "dev" ] jobs: - linux_ubuntu_20_04: - name: (Ubuntu 20.04) GCC ${{ matrix.gcc-version }}.x - runs-on: ubuntu-20.04 + linux_ubuntu_22_04: + name: (Ubuntu 22.04) GCC ${{ matrix.gcc-version }}.x + runs-on: ubuntu-22.04 strategy: matrix: - gcc-version: [9, 10, 11, 13] # 12 doesn't work for some reason + gcc-version: [11, 12, 13, 14, 15] # 12 doesn't work for some reason steps: - uses: actions/checkout@v4 @@ -33,45 +33,16 @@ jobs: CXX: g++-${{ matrix.gcc-version }} run: mkdir temp && cd temp && cmake .. -G Ninja && ninja - linux_clang_ubuntu_20_04: - runs-on: ubuntu-20.04 - name: (Ubuntu 20.04) Clang ${{ matrix.clang-version }}.x - strategy: - matrix: - clang-version: [8, 9, 10, 11] - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Install Clang ${{ matrix.clang-version }} - run: | - sudo apt-get update - sudo apt-get install -y clang-${{ matrix.clang-version }} - sudo apt-get install -y clang++-${{ matrix.clang-version }} - - - name: Select Clang ${{ matrix.clang-version }} - run: | - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ matrix.clang-version }} 100 - sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{ matrix.clang-version }} 100 - clang --version # Display the version of clang for debugging - clang++ --version # Display the version of clang for debugging - - - name: Install dependencies - run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build - - - name: Build quaesar - env: - CC: clang-${{ matrix.clang-version }} - CXX: clang++-${{ matrix.clang-version }} - run: mkdir temp && cd temp && cmake .. -G Ninja && ninja - - linux_clang_ubuntu_22_04: - runs-on: ubuntu-22.04 - name: (Ubuntu 22.04) Clang ${{ matrix.clang-version }}.x + linux_clang: + runs-on: ${{ matrix.os }} + name: (${{ matrix.os }}) Clang ${{ matrix.clang-version }}.x strategy: matrix: - clang-version: [12, 13, 14, 15] + include: + - os: ubuntu-20.04 + clang-version: [8, 9, 10, 11] + - os: ubuntu-22.04 + clang-version: [12, 13, 14, 15] steps: - name: Checkout code @@ -80,24 +51,23 @@ jobs: - name: Install Clang ${{ matrix.clang-version }} run: | sudo apt-get update - sudo apt-get install -y clang-${{ matrix.clang-version }} - sudo apt-get install -y clang++-${{ matrix.clang-version }} + sudo apt-get install -y clang-${{ matrix.clang-version }} clang++-${{ matrix.clang-version }} - name: Select Clang ${{ matrix.clang-version }} run: | sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ matrix.clang-version }} 100 sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{ matrix.clang-version }} 100 - clang --version # Display the version of clang for debugging - clang++ --version # Display the version of clang for debugging + clang --version + clang++ --version - name: Install dependencies run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build - - name: Build quaesar + - name: Build quaesar env: CC: clang-${{ matrix.clang-version }} CXX: clang++-${{ matrix.clang-version }} - run: mkdir temp && cd temp && cmake .. -G Ninja && ninja + run: mkdir temp && cd temp && cmake .. -G Ninja && ninja macos: runs-on: ${{ matrix.os }} From 7d6c7a3e444b2a41a59a4f35847aee600f5428b6 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 16:26:44 +0100 Subject: [PATCH 16/24] Try fixing clang build --- .github/workflows/ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1ec8f97..55abb60d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,7 +35,7 @@ jobs: linux_clang: runs-on: ${{ matrix.os }} - name: (${{ matrix.os }}) Clang ${{ matrix.clang-version }}.x + name: (${{ matrix.os }}) Clang ${{ matrix.os.clang-version }}.x strategy: matrix: include: @@ -48,15 +48,15 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Install Clang ${{ matrix.clang-version }} + - name: Install Clang ${{ matrix.os.clang-version }} run: | sudo apt-get update - sudo apt-get install -y clang-${{ matrix.clang-version }} clang++-${{ matrix.clang-version }} + sudo apt-get install -y clang-${{ matrix.os.clang-version }} clang++-${{ matrix.os.clang-version }} - - name: Select Clang ${{ matrix.clang-version }} + - name: Select Clang ${{ matrix.os.clang-version }} run: | - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ matrix.clang-version }} 100 - sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{ matrix.clang-version }} 100 + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ matrix.os.clang-version }} 100 + sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{ matrix.os.clang-version }} 100 clang --version clang++ --version From 0e932b7b6f6f6c81ddf49cc738de11f5c3424c77 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 16:44:48 +0100 Subject: [PATCH 17/24] try again --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 55abb60d..66176f15 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,9 +35,10 @@ jobs: linux_clang: runs-on: ${{ matrix.os }} - name: (${{ matrix.os }}) Clang ${{ matrix.os.clang-version }}.x + name: (${{ matrix.os }}) Clang ${{ matrix.clang-version }}.x strategy: matrix: + os: [ubuntu-20.04, ubuntu-22.04] include: - os: ubuntu-20.04 clang-version: [8, 9, 10, 11] From 40d91cf3244f2efeb7f8815bcf1d9a80854e6e7a Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 16:49:22 +0100 Subject: [PATCH 18/24] Lets see if this works --- .github/workflows/ci.yml | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 66176f15..a15d2d15 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,15 +35,27 @@ jobs: linux_clang: runs-on: ${{ matrix.os }} - name: (${{ matrix.os }}) Clang ${{ matrix.clang-version }}.x + name: ${{ matrix.os }} Clang ${{ matrix.clang-version }}.x strategy: + fail-fast: false matrix: - os: [ubuntu-20.04, ubuntu-22.04] include: - os: ubuntu-20.04 - clang-version: [8, 9, 10, 11] + clang-version: 8 + - os: ubuntu-20.04 + clang-version: 9 + - os: ubuntu-20.04 + clang-version: 10 + - os: ubuntu-20.04 + clang-version: 11 + - os: ubuntu-22.04 + clang-version: 12 + - os: ubuntu-22.04 + clang-version: 13 + - os: ubuntu-22.04 + clang-version: 14 - os: ubuntu-22.04 - clang-version: [12, 13, 14, 15] + clang-version: 15 steps: - name: Checkout code From 07832bbbf04792d7087f64e599a19ffab63f32a7 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 16:52:02 +0100 Subject: [PATCH 19/24] Try again --- .github/workflows/ci.yml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a15d2d15..110510fa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -61,17 +61,14 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Install Clang ${{ matrix.os.clang-version }} + - name: Install Clang ${{ matrix.clang-version }} run: | - sudo apt-get update - sudo apt-get install -y clang-${{ matrix.os.clang-version }} clang++-${{ matrix.os.clang-version }} + sudo apt-get install -y clang-${{ matrix.clang-version }} clang++-${{ matrix.clang-version }} - - name: Select Clang ${{ matrix.os.clang-version }} + - name: Select Clang ${{ matrix.clang-version }} run: | - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ matrix.os.clang-version }} 100 - sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{ matrix.os.clang-version }} 100 - clang --version - clang++ --version + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-${{ matrix.clang-version }} 100 + sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-${{ matrix.clang-version }} 100 - name: Install dependencies run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build From 9a321a1dde62f7be57cb19c71f012d7d4670608b Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 18:06:56 +0100 Subject: [PATCH 20/24] Hopefully fixes gcc --- .github/workflows/ci.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 110510fa..ac7fe45c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,17 +12,18 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - gcc-version: [11, 12, 13, 14, 15] # 12 doesn't work for some reason + gcc-version: [11, 12, 13, 14, 15] steps: - uses: actions/checkout@v4 - - name: Install GCC ${{ matrix.gcc-version }} + - name: Install GCC ${{ matrix.clang-version }} run: | - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - sudo apt update - sudo apt install -y gcc-${{ matrix.gcc-version }} g++-${{ matrix.gcc-version }} - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ matrix.gcc-version }} 100 --slave /usr/bin/g++ g++ /usr/bin/g++-${{ matrix.gcc-version }} - sudo update-alternatives --set gcc /usr/bin/gcc-${{ matrix.gcc-version }} + sudo apt-get install -y gcc-${{ matrix.clang-version }} g++-${{ matrix.clang-version }} + + - name: Select Clang ${{ matrix.clang-version }} + run: | + sudo update-alternatives --install /usr/bin/clang gcc /usr/bin/clang-${{ matrix.gcc-version }} 100 + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/clang++-${{ matrix.gcc-version }} 100 - name: Install dependencies run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build From bff64e4370ea8834c9a92507526640c97807c029 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 18:07:42 +0100 Subject: [PATCH 21/24] Some more fixes --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ac7fe45c..916402d7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,8 +22,8 @@ jobs: - name: Select Clang ${{ matrix.clang-version }} run: | - sudo update-alternatives --install /usr/bin/clang gcc /usr/bin/clang-${{ matrix.gcc-version }} 100 - sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/clang++-${{ matrix.gcc-version }} 100 + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ matrix.gcc-version }} 100 + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${{ matrix.gcc-version }} 100 - name: Install dependencies run: sudo apt-get update && sudo apt-get install -y libsdl2-dev cmake ninja-build From cfa236510c521def7fa8d82db59cfd299546b4ba Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 18:08:55 +0100 Subject: [PATCH 22/24] More gcc fixes --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 916402d7..f88ae825 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: run: | sudo apt-get install -y gcc-${{ matrix.clang-version }} g++-${{ matrix.clang-version }} - - name: Select Clang ${{ matrix.clang-version }} + - name: Select GCC ${{ matrix.clang-version }} run: | sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ matrix.gcc-version }} 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${{ matrix.gcc-version }} 100 From 6300dcae21e1c27dffade8442d2ea5fac913ff29 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 18:14:04 +0100 Subject: [PATCH 23/24] More gcc fixes --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f88ae825..dd83fd4f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,11 +16,11 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Install GCC ${{ matrix.clang-version }} + - name: Install GCC ${{ matrix.gcc-version }} run: | - sudo apt-get install -y gcc-${{ matrix.clang-version }} g++-${{ matrix.clang-version }} + sudo apt-get install -y gcc-${{ matrix.gcc-version }} g++-${{ matrix.gcc-version }} - - name: Select GCC ${{ matrix.clang-version }} + - name: Select GCC ${{ matrix.gcc-version }} run: | sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ matrix.gcc-version }} 100 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${{ matrix.gcc-version }} 100 From 5b461b1bd8f4dcf62c39125be54630af84c3b756 Mon Sep 17 00:00:00 2001 From: Daniel Collin Date: Mon, 5 Feb 2024 18:16:40 +0100 Subject: [PATCH 24/24] Reduced gcc versions --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dd83fd4f..1c011d2b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - gcc-version: [11, 12, 13, 14, 15] + gcc-version: [11, 12, 13] steps: - uses: actions/checkout@v4