Skip to content

Fix error codes

Fix error codes #62

Workflow file for this run

name: Build
on:
push:
# branches: [master, develop]
pull_request:
# branches: [master, develop]
workflow_dispatch:
workflow_call:
jobs:
windows:
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- arch: x86
msystem: MINGW32
prefix: mingw-w64-i686
runner: windows-latest
compiler_pkg: mingw-w64-i686-gcc
vala_pkg: mingw-w64-ucrt-x86_64-vala
- arch: x64
msystem: UCRT64
prefix: mingw-w64-ucrt-x86_64
runner: windows-latest
compiler_pkg: mingw-w64-ucrt-x86_64-gcc
vala_pkg: mingw-w64-ucrt-x86_64-vala
- arch: arm64
msystem: CLANGARM64
prefix: mingw-w64-clang-aarch64
runner: windows-11-arm
compiler_pkg: mingw-w64-clang-aarch64-clang
vala_pkg: mingw-w64-clang-aarch64-vala
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: msys2/setup-msys2@v2
with:
msystem: ${{ matrix.msystem }}
install: >-
${{ matrix.compiler_pkg }}
${{ matrix.prefix }}-meson
${{ matrix.prefix }}-pkgconf
${{ matrix.prefix }}-glib2
${{ matrix.prefix }}-libxml2
${{ matrix.vala_pkg }}
bison
- name: Build
shell: msys2 {0}
run: |
export PATH="/${MSYSTEM,,}/bin:/ucrt64/bin:$PATH"
export XDG_DATA_DIRS="/ucrt64/share:/${MSYSTEM,,}/share:/usr/share"
meson setup builddir --default-library=static --prefer-static
meson compile -C builddir
- name: Verify
run: builddir\wixl.exe --version
- name: Rename binary
run: copy builddir\wixl.exe wixl-win-${{ matrix.arch }}.exe
- name: Collect libmsi artifacts
shell: msys2 {0}
run: |
(cd builddir && ar t libmsi-1.0.a | tr -d '\r' | xargs ar rcs libmsi.a)
cp builddir/libmsi.a libmsi-win-${{ matrix.arch }}.lib
cp builddir/libmsi.dll libmsi-win-${{ matrix.arch }}.dll
cp builddir/libmsi.dll.a libmsi-win-${{ matrix.arch }}.dll.lib
- name: Collect msi-interop artifacts
shell: msys2 {0}
run: |
cp builddir/libmsi-interop.dll msi-interop-win-${{ matrix.arch }}.dll
cp builddir/libmsi-interop.dll.a msi-interop-win-${{ matrix.arch }}.dll.lib || true
- uses: actions/upload-artifact@v4
with:
name: build-win-${{ matrix.arch }}
path: |
wixl-win-${{ matrix.arch }}.exe
libmsi-win-${{ matrix.arch }}.lib
libmsi-win-${{ matrix.arch }}.dll
libmsi-win-${{ matrix.arch }}.dll.lib
msi-interop-win-${{ matrix.arch }}.dll
msi-interop-win-${{ matrix.arch }}.dll.lib
retention-days: 1
linux:
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- arch: x64
runner: ubuntu-latest
- arch: arm64
runner: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Build in Alpine
run: |
docker run --rm -v "$PWD":/src -w /src alpine:latest sh -c '
set -e
apk add --no-cache \
gcc musl-dev meson vala bison pkgconf file \
glib-dev glib-static \
libxml2-dev libxml2-static \
zlib-dev zlib-static \
pcre2-dev pcre2-static \
libffi-dev \
xz-dev xz-static \
util-linux-dev util-linux-static
echo "=== Verifying static libs ==="
ls /usr/lib/libglib-2.0.a /usr/lib/libgio-2.0.a /usr/lib/libgobject-2.0.a /usr/lib/libxml2.a /usr/lib/libz.a /usr/lib/libpcre2-8.a /usr/lib/libffi.a /usr/lib/liblzma.a /usr/lib/libmount.a /usr/lib/libblkid.a
meson setup builddir --default-library=static --prefer-static
meson compile -C builddir
file builddir/wixl
ldd builddir/wixl || echo "statically linked"
builddir/wixl --version
echo "=== libmsi shared library ==="
file builddir/libmsi.so
ls -lh builddir/libmsi.so
echo "=== creating non-thin static archive ==="
(cd builddir && ar rcs libmsi.a $(ar t libmsi-1.0.a))
ls -lh builddir/libmsi.a
'
- name: Rename binary
run: cp builddir/wixl wixl-linux-${{ matrix.arch }}
- name: Collect libmsi artifacts
run: |
cp builddir/libmsi.a libmsi-linux-${{ matrix.arch }}.a
cp builddir/libmsi.so libmsi-linux-${{ matrix.arch }}.so
- name: Collect msi-interop artifacts
run: |
cp builddir/libmsi-interop.so msi-interop-linux-${{ matrix.arch }}.so
- name: Collect generated header
if: matrix.arch == 'x64'
run: cp builddir/libmsi-enums.h libmsi-enums-generated.h
- uses: actions/upload-artifact@v4
with:
name: build-linux-${{ matrix.arch }}
path: |
wixl-linux-${{ matrix.arch }}
libmsi-linux-${{ matrix.arch }}.a
libmsi-linux-${{ matrix.arch }}.so
msi-interop-linux-${{ matrix.arch }}.so
libmsi-enums-generated.h
retention-days: 1
macos:
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- arch: arm64
runner: macos-latest
- arch: x64
runner: macos-15-intel
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Install dependencies
run: |
brew install meson vala bison glib zlib libffi
echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH
- name: Build
run: |
export PKG_CONFIG_PATH="$(brew --prefix zlib)/lib/pkgconfig:$(brew --prefix libffi)/lib/pkgconfig:$PKG_CONFIG_PATH"
export LDFLAGS="-L$(brew --prefix zlib)/lib -L$(brew --prefix libffi)/lib"
meson setup builddir --default-library=static --prefer-static
meson compile -C builddir
- name: Verify
run: |
file builddir/wixl
otool -L builddir/wixl
ls -lh builddir/wixl
builddir/wixl --version
if otool -L builddir/wixl | grep -E '\.(dylib|so)' | grep -v '/usr/lib/\|/System/Library/'; then
echo "ERROR: Found non-system dynamic dependencies!"
exit 1
fi
echo "=== libmsi shared library ==="
file builddir/libmsi.dylib
otool -L builddir/libmsi.dylib
ls -lh builddir/libmsi.dylib
- name: Rename binary
run: cp builddir/wixl wixl-macos-${{ matrix.arch }}
- name: Collect libmsi artifacts
run: |
cp builddir/libmsi-1.0.a libmsi-macos-${{ matrix.arch }}.a
cp builddir/libmsi.dylib libmsi-macos-${{ matrix.arch }}.dylib
- name: Collect msi-interop artifacts
run: |
cp builddir/libmsi-interop.dylib msi-interop-macos-${{ matrix.arch }}.dylib
- uses: actions/upload-artifact@v4
with:
name: build-macos-${{ matrix.arch }}
path: |
wixl-macos-${{ matrix.arch }}
libmsi-macos-${{ matrix.arch }}.a
libmsi-macos-${{ matrix.arch }}.dylib
msi-interop-macos-${{ matrix.arch }}.dylib
retention-days: 1
package:
runs-on: macos-latest
needs: [windows, linux, macos]
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: actions/download-artifact@v4
with:
pattern: build-*
merge-multiple: true
- name: Create macOS universal wixl binary
run: |
lipo -create wixl-macos-arm64 wixl-macos-x64 -output wixl-osx-universal
chmod +x wixl-osx-universal
file wixl-osx-universal
rm wixl-macos-arm64 wixl-macos-x64
- name: Create macOS universal dylib
run: |
lipo -create libmsi-macos-arm64.dylib libmsi-macos-x64.dylib -output libmsi-osx-universal.dylib
file libmsi-osx-universal.dylib
rm libmsi-macos-arm64.dylib libmsi-macos-x64.dylib
- name: Create macOS universal msi-interop dylib
run: |
lipo -create msi-interop-macos-arm64.dylib msi-interop-macos-x64.dylib -output msi-interop-osx-universal.dylib
file msi-interop-osx-universal.dylib
rm msi-interop-macos-arm64.dylib msi-interop-macos-x64.dylib
- name: Package wixl
run: |
mkdir -p build-wixl
mv wixl-win-x86.exe wixl-win-x64.exe wixl-win-arm64.exe build-wixl/
mv wixl-linux-x64 wixl-linux-arm64 build-wixl/
mv wixl-osx-universal build-wixl/
ls -la build-wixl/
- name: Package libmsi
run: |
mkdir -p build-libmsi/include build-libmsi/shared build-libmsi/static
cp msitools/include/libmsi.h msitools/include/libmsi-database.h \
msitools/include/libmsi-query.h msitools/include/libmsi-record.h \
msitools/include/libmsi-summary-info.h msitools/include/libmsi-types.h \
build-libmsi/include/
cp libmsi-enums-generated.h build-libmsi/include/libmsi-enums.h
mv libmsi-win-*.dll build-libmsi/shared/
mv libmsi-win-*.dll.lib build-libmsi/shared/
mv libmsi-linux-*.so build-libmsi/shared/
mv libmsi-osx-universal.dylib build-libmsi/shared/
mv libmsi-win-*.lib build-libmsi/static/
mv libmsi-linux-*.a build-libmsi/static/
mv libmsi-macos-arm64.a libmsi-macos-x64.a build-libmsi/static/
ls -laR build-libmsi/
- name: Package msi-interop
run: |
mkdir -p build-msi-interop/include build-msi-interop/shared
cp msi-interop/msi_interop.h msi-interop/msi_cab.h build-msi-interop/include/
mv msi-interop-win-*.dll build-msi-interop/shared/
mv msi-interop-win-*.dll.lib build-msi-interop/shared/
mv msi-interop-linux-*.so build-msi-interop/shared/
mv msi-interop-osx-universal.dylib build-msi-interop/shared/
ls -laR build-msi-interop/
- uses: actions/upload-artifact@v4
with:
name: build-wixl
path: build-wixl/*
- uses: actions/upload-artifact@v4
with:
name: build-libmsi
path: build-libmsi/**/*
- uses: actions/upload-artifact@v4
with:
name: build-msi-interop
path: build-msi-interop/**/*