Add global mutex / _libmsi_query_fetch fix #67
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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/**/* |