diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2020-11-24 11:39:17 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-24 11:39:17 +0100 |
| commit | 28aa4f13095eb69438d47f30663f13bd8780c0c1 (patch) | |
| tree | 90b16efb6be9a8b785eeed526c13831446f7f615 | |
| parent | 2414eb2bb655588b4b7e9fe86bba70592bd7f911 (diff) | |
| parent | 452f1dbb258b573c97ad0083a891b43d0b543cd1 (diff) | |
| download | PROJ-28aa4f13095eb69438d47f30663f13bd8780c0c1.tar.gz PROJ-28aa4f13095eb69438d47f30663f13bd8780c0c1.zip | |
Merge pull request #2448 from rouault/gha_mingw_w64
CI: move mingw job to GitHub actions
| -rw-r--r-- | .github/workflows/mingw_w64.yml | 24 | ||||
| -rwxr-xr-x | .github/workflows/mingw_w64/start.sh | 117 | ||||
| -rw-r--r-- | .travis.yml | 7 | ||||
| -rw-r--r-- | src/mutex.cpp | 18 | ||||
| -rwxr-xr-x | travis/mingw32/after_success.sh | 5 | ||||
| -rwxr-xr-x | travis/mingw32/before_install.sh | 15 | ||||
| -rwxr-xr-x | travis/mingw32/install.sh | 59 |
7 files changed, 150 insertions, 95 deletions
diff --git a/.github/workflows/mingw_w64.yml b/.github/workflows/mingw_w64.yml new file mode 100644 index 00000000..8e323efa --- /dev/null +++ b/.github/workflows/mingw_w64.yml @@ -0,0 +1,24 @@ +name: mingw_w64 build + +on: [push, pull_request] + +jobs: + + mingw_w64_build: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, '[ci skip]') && !contains(github.event.head_commit.message, '[skip ci]')" + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Cache + uses: actions/cache@v2 + id: cache + with: + path: | + ${{ github.workspace }}/ccache.tar.gz + key: ${{ runner.os }}-cache-mingw_w64-${{ github.run_id }} + restore-keys: ${{ runner.os }}-cache-mingw_w64- + + - name: Build + run: docker run -e CI -e TRAVIS_OS_NAME=linux -e BUILD_NAME=mingw_w64 -e WORK_DIR="$PWD" -v $PWD:$PWD ubuntu:18.04 $PWD/.github/workflows/mingw_w64/start.sh diff --git a/.github/workflows/mingw_w64/start.sh b/.github/workflows/mingw_w64/start.sh new file mode 100755 index 00000000..e6d04ff0 --- /dev/null +++ b/.github/workflows/mingw_w64/start.sh @@ -0,0 +1,117 @@ +#!/bin/sh + +set -e + +SCRIPT_DIR=$(dirname "$0") +case $SCRIPT_DIR in + "/"*) + ;; + ".") + SCRIPT_DIR=$(pwd) + ;; + *) + SCRIPT_DIR=$(pwd)/$(dirname "$0") + ;; +esac + +apt-get update -y +DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + sudo wget tzdata + +USER=root +export USER + +cd "$WORK_DIR" + +if test -f "$WORK_DIR/ccache.tar.gz"; then + echo "Restoring ccache..." + (cd $HOME && tar xzf "$WORK_DIR/ccache.tar.gz") +fi + +export PROJ_DB_CACHE_DIR="$HOME/.ccache" + +sudo apt-get install -y --no-install-recommends \ + ccache \ + binutils-mingw-w64-x86-64 \ + gcc-mingw-w64-x86-64 \ + g++-mingw-w64-x86-64 \ + g++-mingw-w64 \ + mingw-w64-tools \ + wine-stable \ + make autoconf automake libtool zip \ + sqlite3 \ + curl ca-certificates + +# Select posix/pthread for std::mutex +update-alternatives --set x86_64-w64-mingw32-gcc /usr/bin/x86_64-w64-mingw32-gcc-posix +update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix + +ccache -M 500M +ccache -s + +MINGW_ARCH=x86_64-w64-mingw32 +MINGW_PREFIX=/usr/lib/gcc/$MINGW_ARCH/7.3-posix + +export CCACHE_CPP2=yes +export CC="ccache $MINGW_ARCH-gcc" +export CXX="ccache $MINGW_ARCH-g++" +export LD=$MINGW_ARCH-ld + +UNAME="$(uname)" || UNAME="" +NPROC=$(nproc); +echo "NPROC=${NPROC}" +export MAKEFLAGS="-j ${NPROC}" + +# prepare wine environment +export WINE_PREFIX="$HOME/.wine" +WINE_SYSDIR=$WINE_PREFIX/drive_c/windows +wine64 cmd /c dir +ln -s $MINGW_PREFIX/libstdc++-6.dll $WINE_SYSDIR +ln -s $MINGW_PREFIX/libgcc_s_seh-1.dll $WINE_SYSDIR +ln -s $MINGW_PREFIX/libgcc_s_sjlj-1.dll $WINE_SYSDIR +ln -s /usr/$MINGW_ARCH/lib/libwinpthread-1.dll $WINE_SYSDIR + +# build zlib +wget https://github.com/madler/zlib/archive/v1.2.11.tar.gz +tar xzf v1.2.11.tar.gz +(cd zlib-1.2.11 && sudo make install -fwin32/Makefile.gcc SHARED_MODE=1 PREFIX=x86_64-w64-mingw32- DESTDIR=/usr/$MINGW_ARCH/) +sudo mkdir -p /usr/$MINGW_ARCH/include +sudo mkdir -p /usr/$MINGW_ARCH/lib +sudo cp /usr/$MINGW_ARCH/*.h /usr/$MINGW_ARCH/include +sudo cp /usr/$MINGW_ARCH/libz.* /usr/$MINGW_ARCH/lib +ln -s /usr/$MINGW_ARCH/zlib1.dll $WINE_SYSDIR + +# build libtiff +wget https://download.osgeo.org/libtiff/tiff-4.1.0.tar.gz +tar xzf tiff-4.1.0.tar.gz +(cd tiff-4.1.0 && ./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH && make && sudo make install) +ln -s /usr/$MINGW_ARCH/bin/libtiff-5.dll $WINE_SYSDIR + +# build sqlite3 +wget https://sqlite.org/2018/sqlite-autoconf-3250100.tar.gz +tar xzf sqlite-autoconf-3250100.tar.gz +(cd sqlite-autoconf-3250100 && +./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH && make && sudo make install) +ln -s /usr/$MINGW_ARCH/bin/libsqlite3-0.dll $WINE_SYSDIR + +# prepare build files +./autogen.sh +# autoconf build +mkdir build_autoconf +cd build_autoconf +CFLAGS="-Werror" CXXFLAGS="-Werror" ../configure --host=$MINGW_ARCH --prefix=/tmp/proj_autoconf_install --without-curl +make +make install +make dist-all +find /tmp/proj_autoconf_install +(cd test; make) +cp -r ../data/tests /tmp/proj_autoconf_install/share/proj +cp ../data/tests/egm96_15_downsampled.gtx /tmp/proj_autoconf_install/share/proj/egm96_15.gtx +cp ../data/tests/ntv2_0_downsampled.gsb /tmp/proj_autoconf_install/share/proj/ntv2_0.gsb +wine64 test/unit/test_cpp_api.exe + +ccache -s + +echo "Saving ccache..." +rm -f "$WORK_DIR/ccache.tar.gz" +(cd $HOME && tar czf "$WORK_DIR/ccache.tar.gz" .ccache) diff --git a/.travis.yml b/.travis.yml index 1053ce1e..c2f2b69d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -83,13 +83,6 @@ matrix: - DETAILS="linux, arm64" - os: linux - dist: xenial - compiler: gcc - env: - - BUILD_NAME=mingw32 - - DETAILS="mingw32" - - - os: linux compiler: gcc dist: xenial env: diff --git a/src/mutex.cpp b/src/mutex.cpp index da415e55..60ed5be1 100644 --- a/src/mutex.cpp +++ b/src/mutex.cpp @@ -184,7 +184,7 @@ void pj_cleanup_lock() #include <windows.h> -static HANDLE mutex_lock = NULL; +static HANDLE mutex_lock = nullptr; #if _WIN32_WINNT >= 0x0600 @@ -199,7 +199,7 @@ static BOOL CALLBACK pj_create_lock(PINIT_ONCE InitOnce, (void)InitOnce; (void)Parameter; (void)Context; - mutex_lock = CreateMutex( NULL, FALSE, NULL ); + mutex_lock = CreateMutex( nullptr, FALSE, nullptr ); return TRUE; } #endif @@ -213,10 +213,10 @@ static void pj_init_lock() { #if _WIN32_WINNT >= 0x0600 static INIT_ONCE sInitOnce = INIT_ONCE_STATIC_INIT; - InitOnceExecuteOnce( &sInitOnce, pj_create_lock, NULL, NULL ); + InitOnceExecuteOnce( &sInitOnce, pj_create_lock, nullptr, nullptr ); #else - if( mutex_lock == NULL ) - mutex_lock = CreateMutex( NULL, FALSE, NULL ); + if( mutex_lock == nullptr ) + mutex_lock = CreateMutex( nullptr, FALSE, nullptr ); #endif } @@ -228,7 +228,7 @@ static void pj_init_lock() void pj_acquire_lock() { - if( mutex_lock == NULL ) + if( mutex_lock == nullptr ) pj_init_lock(); WaitForSingleObject( mutex_lock, INFINITE ); @@ -242,7 +242,7 @@ void pj_acquire_lock() void pj_release_lock() { - if( mutex_lock == NULL ) + if( mutex_lock == nullptr ) pj_init_lock(); else ReleaseMutex( mutex_lock ); @@ -253,10 +253,10 @@ void pj_release_lock() /************************************************************************/ void pj_cleanup_lock() { - if( mutex_lock != NULL ) + if( mutex_lock != nullptr ) { CloseHandle( mutex_lock ); - mutex_lock = NULL; + mutex_lock = nullptr; } } diff --git a/travis/mingw32/after_success.sh b/travis/mingw32/after_success.sh deleted file mode 100755 index 9618f673..00000000 --- a/travis/mingw32/after_success.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -set -e - -# nothing diff --git a/travis/mingw32/before_install.sh b/travis/mingw32/before_install.sh deleted file mode 100755 index f33d18ff..00000000 --- a/travis/mingw32/before_install.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -set -e - -./travis/before_install_apt.sh -./travis/before_install_pip.sh - -sudo apt-get install -qq \ - wget \ - binutils-mingw-w64-x86-64 \ - gcc-mingw-w64-x86-64 \ - g++-mingw-w64-x86-64 \ - mingw-w64-tools \ - wine1.4-amd64 \ - sqlite3 diff --git a/travis/mingw32/install.sh b/travis/mingw32/install.sh deleted file mode 100755 index 67873dd1..00000000 --- a/travis/mingw32/install.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -set -e - -unset CC -unset CXX - -export CCACHE_CPP2=yes -export PROJ_DB_CACHE_DIR="$HOME/.ccache" - -MINGW_ARCH=x86_64-w64-mingw32 -MINGW_PREFIX=/usr/lib/gcc/$MINGW_ARCH/5.3-posix - -# prepare wine environment -WINE_SYSDIR=$HOME/.wine/drive_c/windows -wine64 cmd /c dir -ln -s $MINGW_PREFIX/libstdc++-6.dll $WINE_SYSDIR -ln -s $MINGW_PREFIX/libgcc_s_seh-1.dll $WINE_SYSDIR -ln -s $MINGW_PREFIX/libgcc_s_sjlj-1.dll $WINE_SYSDIR -ln -s /usr/$MINGW_ARCH/lib/libwinpthread-1.dll $WINE_SYSDIR - -# build zlib -wget https://github.com/madler/zlib/archive/v1.2.11.tar.gz -tar xzf v1.2.11.tar.gz -(cd zlib-1.2.11 && sudo make install -fwin32/Makefile.gcc SHARED_MODE=1 PREFIX=x86_64-w64-mingw32- DESTDIR=/usr/$MINGW_ARCH/) -sudo mkdir -p /usr/$MINGW_ARCH/include -sudo mkdir -p /usr/$MINGW_ARCH/lib -sudo cp /usr/$MINGW_ARCH/*.h /usr/$MINGW_ARCH/include -sudo cp /usr/$MINGW_ARCH/libz.* /usr/$MINGW_ARCH/lib -ln -s /usr/$MINGW_ARCH/zlib1.dll $WINE_SYSDIR - -# build libtiff -wget https://download.osgeo.org/libtiff/tiff-4.1.0.tar.gz -tar xzf tiff-4.1.0.tar.gz -(cd tiff-4.1.0 && ./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH && make -j2 && sudo make install) -ln -s /usr/$MINGW_ARCH/bin/libtiff-5.dll $WINE_SYSDIR - -# build sqlite3 -wget https://sqlite.org/2018/sqlite-autoconf-3250100.tar.gz -tar xzf sqlite-autoconf-3250100.tar.gz -(cd sqlite-autoconf-3250100 && CC="ccache $MINGW_ARCH-gcc" CXX="ccache $MINGW_ARCH-g++" LD=$MINGW_ARCH-ld -./configure --host=$MINGW_ARCH --prefix=/usr/$MINGW_ARCH && make -j2 && sudo make install) -ln -s /usr/$MINGW_ARCH/bin/libsqlite3-0.dll $WINE_SYSDIR - -# prepare build files -./autogen.sh -# autoconf build -mkdir build_autoconf -cd build_autoconf -CC="ccache $MINGW_ARCH-gcc" CXX="ccache $MINGW_ARCH-g++" LD=$MINGW_ARCH-ld ../configure --host=$MINGW_ARCH --prefix=/tmp/proj_autoconf_install --without-curl -make -j2 -make install -make dist-all -find /tmp/proj_autoconf_install -(cd test; make -j2) -cp -r ../data/tests /tmp/proj_autoconf_install/share/proj -cp ../data/tests/egm96_15_downsampled.gtx /tmp/proj_autoconf_install/share/proj/egm96_15.gtx -cp ../data/tests/ntv2_0_downsampled.gsb /tmp/proj_autoconf_install/share/proj/ntv2_0.gsb -test/unit/test_cpp_api.exe |
