mirror of
https://github.com/FirebirdSQL/firebird.git
synced 2025-01-24 07:23:03 +01:00
9ed0e28b09
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.
151 lines
5.6 KiB
YAML
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
|