mirror of
https://github.com/rasterio/rasterio.git
synced 2025-12-08 17:36:12 +00:00
783 lines
23 KiB
Bash
783 lines
23 KiB
Bash
PROJ_VERSION=9.7.1
|
|
GDAL_VERSION=3.10.3
|
|
SQLITE_VERSION=3500400
|
|
OPENSSL_VERSION=3.6.0
|
|
CURL_VERSION=8.16.0
|
|
ZLIB_VERSION=1.3.1
|
|
TIFF_VERSION=4.7.1
|
|
NGHTTP2_VERSION=1.65.0
|
|
LERC_VERSION=4.0.0
|
|
JPEG_VERSION=9f
|
|
LIBWEBP_VERSION=1.6.0
|
|
ZSTD_VERSION=1.5.7
|
|
LIBPNG_VERSION=1.6.50
|
|
OPENJPEG_VERSION=2.5.3
|
|
GIFLIB_VERSION=5.2.2
|
|
JSONC_VERSION=0.18
|
|
XZ_VERSION=5.8.1
|
|
LCMS2_VERSION=2.17
|
|
HDF5_VERSION=1.14.6
|
|
LIBAEC_VERSION=1.1.3
|
|
NETCDF_VERSION=4.9.3
|
|
GEOS_VERSION=3.14.1
|
|
BLOSC_VERSION=1.21.6
|
|
PCRE_VERSION=10.47
|
|
EXPAT_VERSION=2.7.3
|
|
LIBDEFLATE_VERSION=1.24
|
|
|
|
|
|
BUILD_PREFIX="${BUILD_PREFIX:-/usr/local}"
|
|
|
|
export GDAL_CONFIG="$BUILD_PREFIX/bin/gdal-config"
|
|
export PROJ_DATA="$BUILD_PREFIX/share/proj"
|
|
|
|
echo "BUILD_PREFIX:"
|
|
echo "$BUILD_PREFIX"
|
|
echo "GDAL_CONFIG:"
|
|
echo "$GDAL_CONFIG"
|
|
echo "PROJ_DATA:"
|
|
echo "$PROJ_DATA"
|
|
|
|
set -e
|
|
|
|
# 🔍 Detect OS and architecture
|
|
OS="$(uname -s)"
|
|
ARCH="$(uname -m)"
|
|
|
|
# 🧠 Normalize OS
|
|
case "$OS" in
|
|
Darwin)
|
|
OS="macos"
|
|
IS_MACOS=1
|
|
;;
|
|
Linux)
|
|
OS="linux"
|
|
;;
|
|
*)
|
|
echo "❌ Unsupported OS: $OS"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
PLATFORM="${OS}-${ARCH}"
|
|
echo "✅ Detected platform: $PLATFORM"
|
|
|
|
# 📦 Set OpenSSL Configure target
|
|
case "$PLATFORM" in
|
|
macos-arm64) TARGET="darwin64-${CMAKE_OSX_ARCHITECTURES}-cc" ;;
|
|
macos-x86_64) TARGET="darwin64-x86_64-cc" ;;
|
|
linux-aarch64) TARGET="linux-aarch64" ;;
|
|
linux-x86_64) TARGET="linux-x86_64" ;;
|
|
*) echo "❌ Unsupported platform: $PLATFORM"; exit 1 ;;
|
|
esac
|
|
|
|
echo "IS_MACOS: ${IS_MACOS}"
|
|
|
|
# ------------------------------------------------
|
|
# From:
|
|
# https://github.com/rasterio/rasterio-wheels
|
|
# https://github.com/multi-build/multibuild
|
|
#
|
|
# (customized and updated)
|
|
# ------------------------------------------------
|
|
|
|
|
|
if [ -z "$IS_MACOS" ]; then
|
|
# Strip all binaries after compilation.
|
|
STRIP_FLAGS=${STRIP_FLAGS:-"-Wl,-strip-all"}
|
|
export CFLAGS="${CFLAGS:-$STRIP_FLAGS}"
|
|
export CXXFLAGS="${CXXFLAGS:-$STRIP_FLAGS}"
|
|
export FFLAGS="${FFLAGS:-$STRIP_FLAGS}"
|
|
fi
|
|
|
|
if [ -n "$IS_MACOS" ]; then
|
|
export CFLAGS="$CFLAGS -arch $CMAKE_OSX_ARCHITECTURES -g -O2"
|
|
export CXXFLAGS="$CXXFLAGS -arch $CMAKE_OSX_ARCHITECTURES -g -O2"
|
|
lib_ext="dylib"
|
|
else
|
|
export CFLAGS="$CFLAGS -g -O2"
|
|
export CXXFLAGS="$CXXFLAGS -g -O2"
|
|
lib_ext="so"
|
|
fi
|
|
|
|
echo "Flags:"
|
|
echo "$CFLAGS"
|
|
echo "$CXXFLAGS"
|
|
|
|
export CPPFLAGS_BACKUP="$CPPFLAGS"
|
|
export LIBRARY_PATH_BACKUP="$LIBRARY_PATH"
|
|
export PKG_CONFIG_PATH_BACKUP="$PKG_CONFIG_PATH"
|
|
|
|
|
|
|
|
function suppress {
|
|
# Run a command, show output only if return code not 0.
|
|
# Takes into account state of -e option.
|
|
# Compare
|
|
# https://unix.stackexchange.com/questions/256120/how-can-i-suppress-output-only-if-the-command-succeeds#256122
|
|
# Set -e stuff agonized over in
|
|
# https://unix.stackexchange.com/questions/296526/set-e-in-a-subshell
|
|
local tmp=$(mktemp tmp.XXXXXXXXX) || return
|
|
local errexit_set
|
|
echo "Running $@"
|
|
if [[ $- = *e* ]]; then errexit_set=true; fi
|
|
set +e
|
|
( if [[ -n $errexit_set ]]; then set -e; fi; "$@" > "$tmp" 2>&1 ) ; ret=$?
|
|
[ "$ret" -eq 0 ] || cat "$tmp"
|
|
rm -f "$tmp"
|
|
if [[ -n $errexit_set ]]; then set -e; fi
|
|
return "$ret"
|
|
}
|
|
|
|
|
|
function update_env_for_build_prefix {
|
|
# Promote BUILD_PREFIX on search path to any newly built libs
|
|
export CPPFLAGS="-I$BUILD_PREFIX/include $CPPFLAGS_BACKUP"
|
|
export LIBRARY_PATH="$BUILD_PREFIX/lib:$LIBRARY_PATH_BACKUP"
|
|
export PKG_CONFIG_PATH="$BUILD_PREFIX/lib/pkgconfig/:$PKG_CONFIG_PATH_BACKUP"
|
|
# Add binary path for configure utils etc
|
|
export PATH="$BUILD_PREFIX/bin:$PATH"
|
|
}
|
|
|
|
|
|
function build_hdf5 {
|
|
if [ -e hdf5-stamp ]; then return; fi
|
|
build_zlib
|
|
# libaec is a drop-in replacement for szip
|
|
build_libaec
|
|
HDF5_VERSION_UNDERSCORED="${HDF5_VERSION//./_}"
|
|
HDF5_VERSION_SHORT="${HDF5_VERSION_UNDERSCORED%_*}"
|
|
wget https://support.hdfgroup.org/releases/hdf5/v${HDF5_VERSION_SHORT}/v${HDF5_VERSION_UNDERSCORED}/downloads/hdf5-${HDF5_VERSION}.tar.gz
|
|
tar -xzf hdf5-${HDF5_VERSION}.tar.gz
|
|
(cd hdf5-${HDF5_VERSION} \
|
|
&& export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BUILD_PREFIX/lib \
|
|
&& export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$BUILD_PREFIX/lib \
|
|
&& ./configure --with-szlib=$BUILD_PREFIX --prefix=$BUILD_PREFIX \
|
|
--enable-threadsafe --enable-unsupported --with-pthread=yes \
|
|
&& make -j4 \
|
|
&& make install)
|
|
touch hdf5-stamp
|
|
}
|
|
|
|
|
|
function build_blosc {
|
|
if [ -e blosc-stamp ]; then return; fi
|
|
local cmake=cmake
|
|
BLOSC_URL="https://github.com/Blosc/c-blosc/archive/refs/tags/v${BLOSC_VERSION}.tar.gz"
|
|
wget "$BLOSC_URL" -O "c-blosc-${BLOSC_VERSION}.tar.gz"
|
|
tar -xzf "c-blosc-${BLOSC_VERSION}.tar.gz"
|
|
(cd c-blosc-${BLOSC_VERSION} \
|
|
&& $cmake -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX -DCMAKE_POLICY_VERSION_MINIMUM=3.5 . \
|
|
&& make install)
|
|
if [ -n "$IS_MACOS" ]; then
|
|
# Fix blosc library id bug
|
|
for lib in $(ls ${BUILD_PREFIX}/lib/libblosc*.dylib); do
|
|
install_name_tool -id $lib $lib
|
|
done
|
|
fi
|
|
touch blosc-stamp
|
|
}
|
|
|
|
|
|
function build_geos {
|
|
|
|
if [ -e geos-stamp ]; then return; fi
|
|
local cmake=cmake
|
|
wget http://download.osgeo.org/geos/geos-${GEOS_VERSION}.tar.bz2
|
|
tar -xjf geos-${GEOS_VERSION}.tar.bz2
|
|
(cd geos-${GEOS_VERSION} \
|
|
&& mkdir build && cd build \
|
|
&& $cmake .. \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=$BUILD_PREFIX \
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \
|
|
-DCMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES \
|
|
-DBUILD_SHARED_LIBS=ON \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DENABLE_IPO=ON \
|
|
-DBUILD_APPS:BOOL=OFF \
|
|
-DBUILD_TESTING:BOOL=OFF \
|
|
&& $cmake --build . -j4 \
|
|
&& $cmake --install .)
|
|
touch geos-stamp
|
|
}
|
|
|
|
|
|
function build_jsonc {
|
|
if [ -e jsonc-stamp ]; then return; fi
|
|
local cmake=cmake
|
|
wget https://s3.amazonaws.com/json-c_releases/releases/json-c-${JSONC_VERSION}.tar.gz
|
|
tar -xzf json-c-${JSONC_VERSION}.tar.gz
|
|
(cd json-c-${JSONC_VERSION} \
|
|
&& $cmake -DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX -DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET -DCMAKE_POLICY_VERSION_MINIMUM=3.5 . \
|
|
&& make -j4 \
|
|
&& make install)
|
|
if [ -n "$IS_MACOS" ]; then
|
|
for lib in $(ls ${BUILD_PREFIX}/lib/libjson-c.5*.dylib); do
|
|
install_name_tool -id $lib $lib
|
|
done
|
|
for lib in $(ls ${BUILD_PREFIX}/lib/libjson-c.dylib); do
|
|
install_name_tool -id $lib $lib
|
|
done
|
|
fi
|
|
touch jsonc-stamp
|
|
}
|
|
|
|
|
|
function build_proj {
|
|
CFLAGS="$CFLAGS -DPROJ_RENAME_SYMBOLS"
|
|
CXXFLAGS="$CXXFLAGS -DPROJ_RENAME_SYMBOLS -DPROJ_INTERNAL_CPP_NAMESPACE"
|
|
if [ -e proj-stamp ]; then return; fi
|
|
|
|
wget https://download.osgeo.org/proj/proj-${PROJ_VERSION}.tar.gz
|
|
tar -xzf proj-${PROJ_VERSION}.tar.gz
|
|
|
|
local cmake=cmake
|
|
(cd proj-${PROJ_VERSION} \
|
|
&& $cmake . \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=$BUILD_PREFIX \
|
|
-DCMAKE_PREFIX_PATH=${BUILD_PREFIX} \
|
|
-DCMAKE_INCLUDE_PATH=$BUILD_PREFIX/include \
|
|
-DSQLite3_INCLUDE_DIR=$BUILD_PREFIX/include \
|
|
-DSQLite3_LIBRARY=$BUILD_PREFIX/lib/libsqlite3.$lib_ext \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \
|
|
-DCMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES \
|
|
-DBUILD_SHARED_LIBS=ON \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DENABLE_IPO=ON \
|
|
-DBUILD_APPS:BOOL=OFF \
|
|
-DBUILD_TESTING:BOOL=OFF \
|
|
&& $cmake --build . -j$(nproc) \
|
|
&& $cmake --install .)
|
|
touch proj-stamp
|
|
}
|
|
|
|
|
|
function build_sqlite {
|
|
|
|
if [ -z "$IS_MACOS" ]; then
|
|
CFLAGS="$CFLAGS -DHAVE_PREAD64 -DHAVE_PWRITE64"
|
|
fi
|
|
|
|
if [ -e sqlite-stamp ]; then return; fi
|
|
wget https://www.sqlite.org/2025/sqlite-autoconf-${SQLITE_VERSION}.tar.gz
|
|
tar -xzf sqlite-autoconf-${SQLITE_VERSION}.tar.gz
|
|
|
|
(cd sqlite-autoconf-${SQLITE_VERSION} \
|
|
&& ./configure --enable-rtree --enable-threadsafe --prefix=$BUILD_PREFIX \
|
|
&& make \
|
|
&& make install)
|
|
touch sqlite-stamp
|
|
}
|
|
|
|
|
|
function build_expat {
|
|
if [ -e expat-stamp ]; then return; fi
|
|
if [ -n "$IS_MACOS" ]; then
|
|
:
|
|
else
|
|
|
|
EXPAT_VERSION_UNDERSCORED="${EXPAT_VERSION//./_}"
|
|
wget https://github.com/libexpat/libexpat/releases/download/R_${EXPAT_VERSION_UNDERSCORED}/expat-${EXPAT_VERSION}.tar.bz2
|
|
tar -xjf expat-${EXPAT_VERSION}.tar.bz2
|
|
(cd expat-${EXPAT_VERSION} \
|
|
&& ./configure --prefix=$BUILD_PREFIX \
|
|
&& make -j4 \
|
|
&& make install)
|
|
fi
|
|
touch expat-stamp
|
|
}
|
|
|
|
|
|
function build_lerc {
|
|
|
|
if [ -e lerc-stamp ]; then return; fi
|
|
local cmake=cmake
|
|
wget https://github.com/Esri/lerc/archive/refs/tags/v${LERC_VERSION}.tar.gz -O lerc-$LERC_VERSION.tar.gz
|
|
tar -xzf lerc-${LERC_VERSION}.tar.gz
|
|
(cd lerc-${LERC_VERSION} \
|
|
&& mkdir cmake_build && cd cmake_build \
|
|
&& $cmake .. \
|
|
-DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX \
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \
|
|
-DCMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES \
|
|
-DBUILD_SHARED_LIBS=ON \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DENABLE_IPO=ON \
|
|
&& $cmake --build . -j4 \
|
|
&& $cmake --install .)
|
|
touch lerc-stamp
|
|
}
|
|
|
|
function build_tiff {
|
|
|
|
if [ -e tiff-stamp ]; then return; fi
|
|
local cmake=cmake
|
|
build_lerc
|
|
build_jpeg
|
|
build_libwebp
|
|
build_zlib
|
|
build_zstd
|
|
build_xz
|
|
wget https://download.osgeo.org/libtiff/tiff-${TIFF_VERSION}.tar.gz
|
|
tar -xvf tiff-${TIFF_VERSION}.tar.gz
|
|
|
|
(cd tiff-${TIFF_VERSION} \
|
|
&& ./configure --prefix=$BUILD_PREFIX --libdir=$BUILD_PREFIX/lib --enable-zstd --enable-webp --enable-lerc --with-jpeg-include-dir=$BUILD_PREFIX/include --with-jpeg-lib-dir=$BUILD_PREFIX/lib \
|
|
&& make -j4 \
|
|
&& make install)
|
|
touch tiff-stamp
|
|
}
|
|
|
|
function build_openjpeg {
|
|
|
|
if [ -e openjpeg-stamp ]; then return; fi
|
|
|
|
build_zlib
|
|
build_tiff
|
|
build_lcms2
|
|
|
|
wget https://github.com/uclouvain/openjpeg/archive/refs/tags/v${OPENJPEG_VERSION}.tar.gz -O openjpeg-${OPENJPEG_VERSION}.tar.gz
|
|
tar -xvzf openjpeg-${OPENJPEG_VERSION}.tar.gz
|
|
local cmake=cmake
|
|
(cd openjpeg-${OPENJPEG_VERSION} \
|
|
&& mkdir build \
|
|
&& cd build \
|
|
&& $cmake .. \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX \
|
|
-DCMAKE_PREFIX_PATH=${BUILD_PREFIX} \
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \
|
|
-DCMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES \
|
|
&& $cmake --build . -j$(nproc) \
|
|
&& $cmake --install .)
|
|
|
|
touch openjpeg-stamp
|
|
}
|
|
|
|
|
|
function build_libwebp {
|
|
|
|
build_libpng
|
|
build_giflib
|
|
|
|
if [ -e libwebp-stamp ]; then return; fi
|
|
wget https://github.com/webmproject/libwebp/archive/refs/tags/v$LIBWEBP_VERSION.tar.gz -O libwebp-$LIBWEBP_VERSION.tar.gz
|
|
tar -xzf libwebp-$LIBWEBP_VERSION.tar.gz
|
|
|
|
(cd libwebp-$LIBWEBP_VERSION \
|
|
&& ./autogen.sh \
|
|
&& ./configure --prefix=$BUILD_PREFIX \
|
|
--enable-libwebpmux \
|
|
--enable-libwebpdemux \
|
|
&& make \
|
|
&& make install)
|
|
touch libwebp-stamp
|
|
}
|
|
|
|
|
|
function build_nghttp2 {
|
|
if [ -e nghttp2-stamp ]; then return; fi
|
|
wget https://github.com/nghttp2/nghttp2/releases/download/v${NGHTTP2_VERSION}/nghttp2-${NGHTTP2_VERSION}.tar.gz
|
|
tar -xzf nghttp2-${NGHTTP2_VERSION}.tar.gz
|
|
(cd nghttp2-${NGHTTP2_VERSION} \
|
|
&& ./configure --enable-lib-only --prefix=$BUILD_PREFIX \
|
|
&& make -j4 \
|
|
&& make install)
|
|
touch nghttp2-stamp
|
|
}
|
|
|
|
|
|
function build_openssl {
|
|
if [ -e openssl-stamp ]; then return; fi
|
|
|
|
TAR_FILE="openssl-$OPENSSL_VERSION.tar.gz"
|
|
SHA_FILE="openssl-$OPENSSL_VERSION.tar.gz.sha256"
|
|
wget https://github.com/openssl/openssl/releases/download/openssl-$OPENSSL_VERSION/openssl-$OPENSSL_VERSION.tar.gz
|
|
wget https://github.com/openssl/openssl/releases/download/openssl-$OPENSSL_VERSION/openssl-$OPENSSL_VERSION.tar.gz.sha256
|
|
|
|
EXPECTED_HASH=$(cut -d ' ' -f1 "$SHA_FILE")
|
|
ACTUAL_HASH=$(sha256sum "$TAR_FILE" | cut -d ' ' -f1)
|
|
echo "Expected hash: $EXPECTED_HASH"
|
|
echo "Actual hash: $ACTUAL_HASH"
|
|
# Compare hashes
|
|
if [ "$EXPECTED_HASH" == "$ACTUAL_HASH" ]; then
|
|
|
|
echo "SHA256 hash verified. Extracting..."
|
|
tar -xzf "$TAR_FILE"
|
|
else
|
|
echo "Hash mismatch! Aborting."
|
|
exit 1
|
|
fi
|
|
(cd openssl-${OPENSSL_VERSION} \
|
|
&& ./config $TARGET -fPIC --prefix=$BUILD_PREFIX \
|
|
&& make -j4 \
|
|
&& make install)
|
|
touch openssl-stamp
|
|
}
|
|
|
|
|
|
function build_curl {
|
|
if [ -e curl-stamp ]; then return; fi
|
|
|
|
suppress build_openssl
|
|
build_nghttp2
|
|
local flags="--prefix=$BUILD_PREFIX --with-nghttp2=$BUILD_PREFIX --with-zlib=$BUILD_PREFIX --with-ssl=$BUILD_PREFIX --enable-shared --without-libidn2 --without-libpsl"
|
|
wget https://curl.se/download/curl-${CURL_VERSION}.tar.gz
|
|
tar -xzvf curl-${CURL_VERSION}.tar.gz
|
|
(cd curl-${CURL_VERSION} \
|
|
&& LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$BUILD_PREFIX/lib:$BUILD_PREFIX/lib64 \
|
|
&& DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$BUILD_PREFIX/lib ./configure $flags \
|
|
&& make -j4 \
|
|
&& if [ -n "$IS_MACOS" ]; then make install; else make install; fi)
|
|
touch curl-stamp
|
|
}
|
|
|
|
|
|
function build_zstd {
|
|
|
|
if [ -e zstd-stamp ]; then return; fi
|
|
wget https://github.com/facebook/zstd/archive/v${ZSTD_VERSION}.tar.gz -O zstd-$ZSTD_VERSION.tar.gz
|
|
tar -xzf zstd-${ZSTD_VERSION}.tar.gz
|
|
|
|
if [ -n "$IS_MACOS" ]; then
|
|
sed_ere_opt="-E"
|
|
else
|
|
sed_ere_opt="-r"
|
|
fi
|
|
local cmake=cmake
|
|
(cd zstd-${ZSTD_VERSION}/build/cmake \
|
|
&& $cmake . \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=$BUILD_PREFIX \
|
|
-DCMAKE_PREFIX_PATH=${BUILD_PREFIX} \
|
|
-DCMAKE_OSX_ARCHITECTURES="${ARCH}" \
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \
|
|
-DCMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES \
|
|
-DZSTD_LEGACY_SUPPORT=0 \
|
|
-DSED_ERE_OPT=$sed_ere_opt \
|
|
&& $cmake --build . \
|
|
&& $cmake --install .)
|
|
|
|
touch zstd-stamp
|
|
}
|
|
|
|
|
|
function build_pcre2 {
|
|
if [ -e pcre-stamp ]; then return; fi
|
|
wget https://github.com/PCRE2Project/pcre2/releases/download/pcre2-${PCRE_VERSION}/pcre2-${PCRE_VERSION}.tar.bz2
|
|
tar -xjf "pcre2-${PCRE_VERSION}.tar.bz2"
|
|
(cd pcre2-${PCRE_VERSION} \
|
|
&& ./configure --prefix=$BUILD_PREFIX \
|
|
&& make -j4 \
|
|
&& make install)
|
|
touch pcre-stamp
|
|
}
|
|
|
|
|
|
function build_zlib {
|
|
if [ -e zlib-stamp ]; then return; fi
|
|
# Careful, this one may cause yum to segfault
|
|
# Fossils directory should also contain latest
|
|
# build_simple zlib $ZLIB_VERSION https://zlib.net/fossils
|
|
wget https://www.zlib.net/zlib-$ZLIB_VERSION.tar.gz
|
|
tar -xvf zlib-$ZLIB_VERSION.tar.gz
|
|
(cd zlib-${ZLIB_VERSION} \
|
|
&& ./configure --prefix=$BUILD_PREFIX \
|
|
&& make \
|
|
&& make install)
|
|
touch zlib-stamp
|
|
}
|
|
|
|
|
|
function build_jpeg {
|
|
|
|
if [ -e jpeg-stamp ]; then return; fi
|
|
wget http://ijg.org/files/jpegsrc.v${JPEG_VERSION}.tar.gz
|
|
tar -xzf jpegsrc.v${JPEG_VERSION}.tar.gz
|
|
(cd jpeg-${JPEG_VERSION} \
|
|
&& ./configure --prefix=$BUILD_PREFIX \
|
|
&& make \
|
|
&& make install)
|
|
touch jpeg-stamp
|
|
}
|
|
|
|
|
|
function build_giflib {
|
|
if [ -e giflib-stamp ]; then return; fi
|
|
GIFLIB_TAR="giflib-${GIFLIB_VERSION}.tar.gz"
|
|
GIFLIB_URL="https://sourceforge.net/projects/giflib/files/giflib-${GIFLIB_VERSION}.tar.gz/download"
|
|
wget -O "$GIFLIB_TAR" "$GIFLIB_URL"
|
|
tar -xzf "$GIFLIB_TAR"
|
|
(cd "giflib-${GIFLIB_VERSION}" \
|
|
&& make \
|
|
&& make install PREFIX=$BUILD_PREFIX)
|
|
touch giflib-stamp
|
|
}
|
|
|
|
|
|
function build_libpng {
|
|
|
|
if [ -e libpng-stamp ]; then return; fi
|
|
|
|
build_zlib
|
|
|
|
wget https://github.com/pnggroup/libpng/archive/refs/tags/v${LIBPNG_VERSION}.tar.gz -O libpng-${LIBPNG_VERSION}.tar.gz
|
|
tar -xzf libpng-${LIBPNG_VERSION}.tar.gz
|
|
(cd libpng-${LIBPNG_VERSION} \
|
|
&& ./configure --prefix=$BUILD_PREFIX \
|
|
&& make \
|
|
&& make install)
|
|
touch libpng-stamp
|
|
}
|
|
|
|
|
|
function build_xz {
|
|
if [ -e xz-stamp ]; then return; fi
|
|
wget "https://tukaani.org/xz/xz-${XZ_VERSION}.tar.gz"
|
|
tar -xzf "xz-${XZ_VERSION}.tar.gz"
|
|
(cd "xz-${XZ_VERSION}" \
|
|
&& ./configure --prefix=$BUILD_PREFIX \
|
|
&& make \
|
|
&& make install)
|
|
touch xz-stamp
|
|
}
|
|
|
|
|
|
function build_lcms2 {
|
|
|
|
if [ -e lcms2-stamp ]; then return; fi
|
|
|
|
build_tiff
|
|
|
|
wget https://github.com/mm2/Little-CMS/releases/download/lcms${LCMS2_VERSION}/lcms2-${LCMS2_VERSION}.tar.gz
|
|
tar -xzf lcms2-${LCMS2_VERSION}.tar.gz
|
|
(cd lcms2-${LCMS2_VERSION} \
|
|
&& ./configure --prefix=$BUILD_PREFIX \
|
|
&& make -j$(nproc) \
|
|
&& make install)
|
|
touch lcms2-stamp
|
|
|
|
}
|
|
|
|
|
|
function build_libdeflate {
|
|
|
|
if [ -e libdeflate-stamp ]; then return; fi
|
|
|
|
wget https://github.com/ebiggers/libdeflate/archive/refs/tags/v${LIBDEFLATE_VERSION}.tar.gz -O libdeflate-${LIBDEFLATE_VERSION}.tar.gz
|
|
tar -xvzf libdeflate-${LIBDEFLATE_VERSION}.tar.gz
|
|
local cmake=cmake
|
|
(cd libdeflate-${LIBDEFLATE_VERSION} \
|
|
&& mkdir build && cd build \
|
|
&& $cmake .. \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=$BUILD_PREFIX \
|
|
-DCMAKE_PREFIX_PATH=${BUILD_PREFIX} \
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \
|
|
-DCMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES \
|
|
-DBUILD_SHARED_LIBS=ON \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
&& $cmake --build . -j4 \
|
|
&& $cmake --install .)
|
|
|
|
touch libdeflate-stamp
|
|
}
|
|
|
|
|
|
function build_libaec {
|
|
if [ -e libaec-stamp ]; then return; fi
|
|
LIBAEC_URL="https://github.com/MathisRosenhauer/libaec/releases/download/v${LIBAEC_VERSION}/libaec-${LIBAEC_VERSION}.tar.gz"
|
|
wget "$LIBAEC_URL" -O libaec-${LIBAEC_VERSION}.tar.gz
|
|
tar -xzf libaec-${LIBAEC_VERSION}.tar.gz
|
|
(cd libaec-${LIBAEC_VERSION} \
|
|
&& ./configure --prefix=$BUILD_PREFIX \
|
|
&& make \
|
|
&& make install)
|
|
touch libaec-stamp
|
|
}
|
|
|
|
|
|
function build_netcdf {
|
|
|
|
if [ -e netcdf-stamp ]; then return; fi
|
|
local cmake=cmake
|
|
build_hdf5
|
|
NETCDF_URL="https://github.com/Unidata/netcdf-c/archive/refs/tags/v${NETCDF_VERSION}.tar.gz"
|
|
wget "$NETCDF_URL" -O "netcdf-c-${NETCDF_VERSION}.tar.gz"
|
|
tar -xzf netcdf-c-${NETCDF_VERSION}.tar.gz
|
|
(cd netcdf-c-${NETCDF_VERSION} \
|
|
&& mkdir build && cd build \
|
|
&& $cmake .. \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_INSTALL_PREFIX:PATH=$BUILD_PREFIX \
|
|
-DCMAKE_PREFIX_PATH=${BUILD_PREFIX} \
|
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \
|
|
-DCMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES \
|
|
-DENABLE_DAP=ON \
|
|
-DBUILD_SHARED_LIBS=ON \
|
|
&& $cmake --build . -j$(nproc) \
|
|
&& $cmake --install .)
|
|
touch netcdf-stamp
|
|
}
|
|
|
|
|
|
function build_gdal {
|
|
if [ -e gdal-stamp ]; then return; fi
|
|
|
|
CFLAGS="$CFLAGS -DPROJ_RENAME_SYMBOLS"
|
|
CXXFLAGS="$CXXFLAGS -DPROJ_RENAME_SYMBOLS -DPROJ_INTERNAL_CPP_NAMESPACE"
|
|
|
|
build_blosc
|
|
build_curl
|
|
build_lerc
|
|
build_jpeg
|
|
build_libpng
|
|
build_openjpeg
|
|
build_jsonc
|
|
build_sqlite
|
|
build_proj
|
|
build_expat
|
|
build_geos
|
|
build_hdf5
|
|
build_netcdf
|
|
build_zstd
|
|
build_pcre2
|
|
|
|
if [ -n "$IS_MACOS" ]; then
|
|
GEOS_CONFIG="-DGDAL_USE_GEOS=OFF"
|
|
else
|
|
GEOS_CONFIG="-DGDAL_USE_GEOS=ON"
|
|
fi
|
|
|
|
# To use GDAL 3.10.3 with PDF: Fix build against Poppler 2025.05.0
|
|
# wget https://github.com/OSGeo/gdal/archive/refs/heads/release/3.10.zip
|
|
# 7z x 3.10.zip
|
|
# mv gdal-release-3.10 gdal-3.10.3
|
|
|
|
wget https://download.osgeo.org/gdal/${GDAL_VERSION}/gdal-${GDAL_VERSION}.tar.gz
|
|
tar -xzf gdal-${GDAL_VERSION}.tar.gz
|
|
|
|
local cmake=cmake
|
|
(cd gdal-${GDAL_VERSION} \
|
|
&& mkdir build \
|
|
&& cd build \
|
|
&& $cmake .. \
|
|
-DCMAKE_INSTALL_PREFIX=$BUILD_PREFIX \
|
|
-DCMAKE_PREFIX_PATH=${BUILD_PREFIX} \
|
|
-DCMAKE_INCLUDE_PATH=$BUILD_PREFIX/include \
|
|
-DCMAKE_LIBRARY_PATH=$BUILD_PREFIX/lib \
|
|
-DCMAKE_PROGRAM_PATH=$BUILD_PREFIX/bin \
|
|
-DCMAKE_OSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET \
|
|
-DCMAKE_OSX_ARCHITECTURES=$CMAKE_OSX_ARCHITECTURES \
|
|
-DBUILD_SHARED_LIBS=ON \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DGDAL_BUILD_OPTIONAL_DRIVERS=ON \
|
|
-DOGR_BUILD_OPTIONAL_DRIVERS=OFF \
|
|
-DSQLite3_INCLUDE_DIR=$BUILD_PREFIX/include \
|
|
-DSQLite3_LIBRARY=$BUILD_PREFIX/lib/libsqlite3.$lib_ext \
|
|
${GEOS_CONFIG} \
|
|
-DGDAL_USE_CURL=ON \
|
|
-DGDAL_USE_TIFF=ON \
|
|
-DGDAL_USE_TIFF_INTERNAL=OFF \
|
|
-DGDAL_USE_GEOTIFF_INTERNAL=ON \
|
|
-DGDAL_ENABLE_DRIVER_GIF=ON \
|
|
-DGDAL_ENABLE_DRIVER_GRIB=ON \
|
|
-DGDAL_ENABLE_DRIVER_JPEG=ON \
|
|
-DGDAL_USE_JXL=OFF \
|
|
-DGDAL_USE_ICONV=ON \
|
|
-DGDAL_USE_JSONC=ON \
|
|
-DGDAL_USE_JSONC_INTERNAL=OFF \
|
|
-DGDAL_USE_ZLIB=ON \
|
|
-DGDAL_USE_ZLIB_INTERNAL=OFF \
|
|
-DGDAL_ENABLE_DRIVER_HDF5=ON \
|
|
-DGDAL_USE_HDF5=ON \
|
|
-DHDF5_INCLUDE_DIRS=$BUILD_PREFIX/include \
|
|
-DGDAL_ENABLE_DRIVER_NETCDF=ON \
|
|
-DGDAL_USE_NETCDF=ON \
|
|
-DGDAL_ENABLE_DRIVER_OPENJPEG=ON \
|
|
-DGDAL_ENABLE_DRIVER_PNG=ON \
|
|
-DGDAL_ENABLE_DRIVER_OGCAPI=OFF \
|
|
-DGDAL_USE_SQLITE3=ON \
|
|
-DOGR_ENABLE_DRIVER_SQLITE=ON \
|
|
-DOGR_ENABLE_DRIVER_GPKG=ON \
|
|
-DOGR_ENABLE_DRIVER_MVT=ON \
|
|
-DGDAL_ENABLE_DRIVER_MBTILES=ON \
|
|
-DOGR_ENABLE_DRIVER_OSM=ON \
|
|
-DBUILD_PYTHON_BINDINGS=OFF \
|
|
-DBUILD_JAVA_BINDINGS=OFF \
|
|
-DBUILD_CSHARP_BINDINGS=OFF \
|
|
-DGDAL_USE_SFCGAL=OFF \
|
|
-DGDAL_USE_XERCESC=OFF \
|
|
-DGDAL_USE_LIBXML2=OFF \
|
|
-DGDAL_USE_PCRE2=ON \
|
|
-DPCRE2_INCLUDE_DIR=$BUILD_PREFIX/include \
|
|
-DPCRE2-8_LIBRARY=$BUILD_PREFIX/lib/libpcre2-8.$lib_ext \
|
|
-DGDAL_USE_POSTGRESQL=OFF \
|
|
-DGDAL_ENABLE_POSTGISRASTER=OFF \
|
|
-DGDAL_USE_OPENEXR=OFF \
|
|
-DGDAL_ENABLE_EXR=OFF \
|
|
-DGDAL_USE_OPENEXR=OFF \
|
|
-DGDAL_USE_HEIF=OFF \
|
|
-DGDAL_ENABLE_HEIF=OFF \
|
|
-DGDAL_USE_ODBC=OFF \
|
|
-DOGR_ENABLE_DRIVER_AVC=ON \
|
|
-DGDAL_ENABLE_DRIVER_AIGRID=ON \
|
|
-DGDAL_ENABLE_DRIVER_AAIGRID=ON \
|
|
-DGDAL_USE_LERC=ON \
|
|
-DGDAL_USE_LERC_INTERNAL=OFF \
|
|
-DGDAL_USE_POSTGRESQL=OFF \
|
|
-DGDAL_USE_ODBC=OFF \
|
|
&& $cmake --build . -j4 \
|
|
&& $cmake --install .)
|
|
if [ -n "$IS_MACOS" ]; then
|
|
:
|
|
else
|
|
strip -v --strip-unneeded ${BUILD_PREFIX}/lib/libgdal.so.* || true
|
|
strip -v --strip-unneeded ${BUILD_PREFIX}/lib64/libgdal.so.* || true
|
|
fi
|
|
touch gdal-stamp
|
|
}
|
|
|
|
suppress update_env_for_build_prefix
|
|
build_zlib
|
|
suppress build_xz
|
|
suppress build_nghttp2
|
|
# Remove previously installed curl.
|
|
rm -rf $BUILD_PREFIX/lib/libcurl* || true
|
|
suppress build_curl
|
|
build_libwebp
|
|
build_zstd
|
|
build_libdeflate
|
|
build_jpeg
|
|
build_lerc
|
|
build_tiff
|
|
build_openjpeg
|
|
suppress build_jsonc
|
|
build_sqlite
|
|
build_proj
|
|
suppress build_expat
|
|
suppress build_geos
|
|
suppress build_hdf5
|
|
suppress build_netcdf
|
|
build_gdal
|
|
|
|
echo "List contents of $BUILD_PREFIX/lib directory"
|
|
ls "$BUILD_PREFIX/lib"
|
|
|
|
echo " "
|
|
|
|
if [ -d "$BUILD_PREFIX/lib64" ]; then
|
|
echo "List contents of $BUILD_PREFIX/lib64 directory"
|
|
ls "$BUILD_PREFIX/lib64"
|
|
fi
|
|
|
|
echo "Using GDAL_CONFIG at: $GDAL_CONFIG"
|
|
|
|
# Run the gdal-config binary
|
|
"$GDAL_CONFIG" --version
|