This repository was archived by the owner on May 24, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
310 lines (272 loc) · 10.5 KB
/
Copy pathbuild.yml
File metadata and controls
310 lines (272 loc) · 10.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
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/**/*