8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-24 07:23:03 +01:00
firebird-mirror/.github/workflows/main.yml
Adriano dos Santos Fernandes 9ed0e28b09 Add Travis MacOS build, GitHub Actions MacOS/Windows build and adjust MacOS build to be (almost) relocatable.
While MacOS people seems to be ok with fixed locations for applications and libraries, this complicates a lot the (post)
build process, needing to change each id and rpaths in a very error prone process.

Relocatable binaries makes this a lot easier, but unfortunately "restricted" (chmod +s, like firebird executable)
programs cannot use @loader_path or @executable_path in its rpath.

So the solution has to make internal libraries relocatable and make rpath of firebird fixed. Also, as the ecosystem
seems to use fixed path, the id of fbclient.dylib has set to its fixed path.

Also MacOS post build makefile has adjusted to allow creation of packages for the debug build.

The MacOS build could still be improved with some scripts to build ICU (instead of done directly in the CI scripts,
but I leave that for now) and copies its files to our lib path. However situation seems to be better than before in
relation to ICU and TomMath.

Note: Linux build is not working in GitHub Actions. It segfaults when running (exiting) utilities.
I had this problem lot's of time in the past, maybe it's not completely fixed in v3.
2019-11-26 13:11:55 -03:00

151 lines
5.6 KiB
YAML

name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
# Build is segfaulting in Ubuntu.
#os: [macOS-latest, windows-2016, ubuntu-16.04]
os: [macOS-latest, windows-2016]
platform: [x64, x86]
exclude:
- os: macOS-latest
platform: x86
#- os: ubuntu-16.04
# platform: x86
steps:
- uses: actions/checkout@v1
with:
fetch-depth: 10
- name: Prepare (Linux)
if: matrix.os == 'ubuntu-16.04'
run: |
sudo apt-get install libtool-bin libtommath0 libtommath-dev libicu-dev zlib1g-dev
- name: Build (Linux)
if: matrix.os == 'ubuntu-16.04'
run: |
CC=clang CXX=clang++ ./autogen.sh --enable-binreloc --with-builtin-tomcrypt --prefix=/opt/firebird
make
make dist
tar xzvf gen/Firebird-[0-9]*.tar.gz
(cd Firebird-[0-9]*; sudo ./install.sh -silent)
- name: Prepare (MacOS)
if: matrix.os == 'macOS-latest'
run: |
brew install automake libtool
export LIBTOOLIZE=glibtoolize
export LIBTOOL=glibtool
mkdir extern/icu-macos
pushd extern/icu-macos
wget https://github.com/unicode-org/icu/releases/download/release-59-2/icu4c-59_2-src.tgz
wget https://github.com/unicode-org/icu/commit/24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch
tar xzvf icu4c-59_2-src.tgz
ICU_INSTALL_PATH=`pwd`/install
cd icu/source
patch -p3 < ../../24aeb9a5a5874f4ce5db912e30670ac3ae236971.patch
./runConfigureICU MacOSX --prefix=$ICU_INSTALL_PATH
make -j4
make install
install_name_tool -id @rpath/lib/libicuuc.dylib $ICU_INSTALL_PATH/lib/libicuuc.dylib
install_name_tool -id @rpath/lib/libicui18n.dylib $ICU_INSTALL_PATH/lib/libicui18n.dylib
install_name_tool -id @rpath/lib/libicudata.dylib $ICU_INSTALL_PATH/lib/libicudata.dylib
install_name_tool -change libicudata.59.dylib @loader_path/libicudata.59.dylib $ICU_INSTALL_PATH/lib/libicuuc.59.dylib
install_name_tool -change libicudata.59.dylib @loader_path/libicudata.59.dylib $ICU_INSTALL_PATH/lib/libicui18n.59.dylib
install_name_tool -change libicuuc.59.dylib @loader_path/libicuuc.59.dylib $ICU_INSTALL_PATH/lib/libicui18n.59.dylib
popd
mkdir -p gen/Release/firebird/lib
mkdir -p gen/Debug/firebird/lib
cp $ICU_INSTALL_PATH/lib/*.dylib gen/Release/firebird/lib/
cp $ICU_INSTALL_PATH/lib/*.dylib gen/Debug/firebird/lib/
- name: Build (MacOS)
if: matrix.os == 'macOS-latest'
run: |
export LIBTOOLIZE=glibtoolize
export LIBTOOL=glibtool
ICU_INSTALL_PATH=`pwd`/extern/icu-macos/install
export C_INCLUDE_PATH="$ICU_INSTALL_PATH/include:$C_INCLUDE_PATH"
export CPLUS_INCLUDE_PATH="$ICU_INSTALL_PATH/include:$CPLUS_INCLUDE_PATH"
LIBRARY_PATH="$ICU_INSTALL_PATH/lib:$LIBRARY_PATH" ./autogen.sh --with-builtin-tommath
make -j4
(cd gen; make -B -f make.platform.postfix ICU_LOC="$ICU_INSTALL_PATH/lib/")
(cd gen; make -B -f Makefile.install)
# Rename directory to make sure the build is relocatable.
mv gen gen2
sudo installer -pkg gen2/Release/*.pkg -verbose -target /
export FIREBIRD_LOCK=`pwd`/temp
echo "create database 't.fdb'; select '1' from rdb\$database; select _win1252 '2' from rdb\$database; select _utf8 '3' collate unicode from rdb\$database;" | /Library/Frameworks/Firebird.framework/Resources/bin/isql
echo "create database 'localhost:/tmp/t.fdb' user sysdba password 'masterkey'; select '11' from rdb\$database; select _win1252 '22' from rdb\$database; select _utf8 '33' collate unicode from rdb\$database;" | /Library/Frameworks/Firebird.framework/Resources/bin/isql
mv gen2 gen
mkdir gen/artifacts
mv gen/Release/*.pkg gen/artifacts
- name: Prepare (Windows)
if: matrix.os == 'windows-2016'
shell: cmd
run: |
for /r %%i in (*.bat) do unix2dos "%%i"
- name: Build (Windows)
if: matrix.os == 'windows-2016'
shell: cmd
env:
PLATFORM: ${{ matrix.platform }}
run: |
set
if "%PLATFORM%" == "x64" set FB_PROCESSOR_ARCHITECTURE=AMD64
if "%PLATFORM%" == "x64" set FB_OUTPUT_SUFFIX=x64
if "%PLATFORM%" == "x86" set FB_PROCESSOR_ARCHITECTURE=x86
if "%PLATFORM%" == "x86" set FB_OUTPUT_SUFFIX=win32
set
REM call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=amd64
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=%FB_PROCESSOR_ARCHITECTURE%
cd builds\win32
run_all.bat JUSTBUILD
- name: Upload (Linux)
if: matrix.os == 'ubuntu-16.04'
uses: actions/upload-artifact@master
with:
name: firebird-linux
path: gen/Firebird-[0-9]*.tar.gz
- name: Upload (MacOS)
if: matrix.os == 'macOS-latest'
uses: actions/upload-artifact@master
with:
name: firebird-macos
path: gen/artifacts
- name: Upload (Windows x64)
if: matrix.os == 'windows-2016' && matrix.platform == 'x64'
uses: actions/upload-artifact@master
with:
name: firebird-windows-x64
path: output_x64
- name: Upload (Windows x86)
if: matrix.os == 'windows-2016' && matrix.platform == 'x86'
uses: actions/upload-artifact@master
with:
name: firebird-windows-x86
path: output_win32