Skip to content
This repository was archived by the owner on May 24, 2026. It is now read-only.

Commit 690dd6c

Browse files
authored
Merge pull request #2 from velopack/cs/msilib
Add libmsi build
2 parents ad86318 + 855046a commit 690dd6c

3 files changed

Lines changed: 139 additions & 23 deletions

File tree

.github/workflows/build.yml

Lines changed: 87 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,22 @@ jobs:
6565
- name: Rename binary
6666
run: copy builddir\wixl.exe wixl-win-${{ matrix.arch }}.exe
6767

68+
- name: Collect libmsi artifacts
69+
shell: msys2 {0}
70+
run: |
71+
(cd builddir && ar t libmsi-1.0.a | tr -d '\r' | xargs ar rcs libmsi.a)
72+
cp builddir/libmsi.a libmsi-win-${{ matrix.arch }}.lib
73+
cp builddir/libmsi.dll libmsi-win-${{ matrix.arch }}.dll
74+
cp builddir/libmsi.dll.a libmsi-win-${{ matrix.arch }}.dll.lib
75+
6876
- uses: actions/upload-artifact@v4
6977
with:
7078
name: build-win-${{ matrix.arch }}
71-
path: wixl-win-${{ matrix.arch }}.exe
79+
path: |
80+
wixl-win-${{ matrix.arch }}.exe
81+
libmsi-win-${{ matrix.arch }}.lib
82+
libmsi-win-${{ matrix.arch }}.dll
83+
libmsi-win-${{ matrix.arch }}.dll.lib
7284
retention-days: 1
7385

7486
linux:
@@ -107,15 +119,34 @@ jobs:
107119
file builddir/wixl
108120
ldd builddir/wixl || echo "statically linked"
109121
builddir/wixl --version
122+
echo "=== libmsi shared library ==="
123+
file builddir/libmsi.so
124+
ls -lh builddir/libmsi.so
125+
echo "=== creating non-thin static archive ==="
126+
(cd builddir && ar rcs libmsi.a $(ar t libmsi-1.0.a))
127+
ls -lh builddir/libmsi.a
110128
'
111129
112130
- name: Rename binary
113131
run: cp builddir/wixl wixl-linux-${{ matrix.arch }}
114132

133+
- name: Collect libmsi artifacts
134+
run: |
135+
cp builddir/libmsi.a libmsi-linux-${{ matrix.arch }}.a
136+
cp builddir/libmsi.so libmsi-linux-${{ matrix.arch }}.so
137+
138+
- name: Collect generated header
139+
if: matrix.arch == 'x64'
140+
run: cp builddir/libmsi-enums.h libmsi-enums-generated.h
141+
115142
- uses: actions/upload-artifact@v4
116143
with:
117144
name: build-linux-${{ matrix.arch }}
118-
path: wixl-linux-${{ matrix.arch }}
145+
path: |
146+
wixl-linux-${{ matrix.arch }}
147+
libmsi-linux-${{ matrix.arch }}.a
148+
libmsi-linux-${{ matrix.arch }}.so
149+
libmsi-enums-generated.h
119150
retention-days: 1
120151

121152
macos:
@@ -156,44 +187,85 @@ jobs:
156187
echo "ERROR: Found non-system dynamic dependencies!"
157188
exit 1
158189
fi
190+
echo "=== libmsi shared library ==="
191+
file builddir/libmsi.dylib
192+
otool -L builddir/libmsi.dylib
193+
ls -lh builddir/libmsi.dylib
159194
160195
- name: Rename binary
161196
run: cp builddir/wixl wixl-macos-${{ matrix.arch }}
162197

198+
- name: Collect libmsi artifacts
199+
run: |
200+
cp builddir/libmsi-1.0.a libmsi-macos-${{ matrix.arch }}.a
201+
cp builddir/libmsi.dylib libmsi-macos-${{ matrix.arch }}.dylib
202+
163203
- uses: actions/upload-artifact@v4
164204
with:
165205
name: build-macos-${{ matrix.arch }}
166-
path: wixl-macos-${{ matrix.arch }}
206+
path: |
207+
wixl-macos-${{ matrix.arch }}
208+
libmsi-macos-${{ matrix.arch }}.a
209+
libmsi-macos-${{ matrix.arch }}.dylib
167210
retention-days: 1
168211

169212
package:
170213
runs-on: macos-latest
171214
needs: [windows, linux, macos]
172215
steps:
216+
- uses: actions/checkout@v4
217+
with:
218+
submodules: true
219+
173220
- uses: actions/download-artifact@v4
174221
with:
175222
pattern: build-*
176223
merge-multiple: true
177224

178-
- name: Create macOS universal binary
225+
- name: Create macOS universal wixl binary
179226
run: |
180227
lipo -create wixl-macos-arm64 wixl-macos-x64 -output wixl-osx-universal
181228
chmod +x wixl-osx-universal
182229
file wixl-osx-universal
183230
rm wixl-macos-arm64 wixl-macos-x64
184231
185-
- name: Prepare release directory
232+
- name: Create macOS universal dylib
186233
run: |
187-
mkdir release
188-
mv wixl-win-x86.exe release/
189-
mv wixl-win-x64.exe release/
190-
mv wixl-win-arm64.exe release/
191-
mv wixl-linux-x64 release/
192-
mv wixl-linux-arm64 release/
193-
mv wixl-osx-universal release/
194-
ls -la release/
234+
lipo -create libmsi-macos-arm64.dylib libmsi-macos-x64.dylib -output libmsi-osx-universal.dylib
235+
file libmsi-osx-universal.dylib
236+
rm libmsi-macos-arm64.dylib libmsi-macos-x64.dylib
237+
238+
- name: Package wixl
239+
run: |
240+
mkdir -p build-wixl
241+
mv wixl-win-x86.exe wixl-win-x64.exe wixl-win-arm64.exe build-wixl/
242+
mv wixl-linux-x64 wixl-linux-arm64 build-wixl/
243+
mv wixl-osx-universal build-wixl/
244+
ls -la build-wixl/
245+
246+
- name: Package libmsi
247+
run: |
248+
mkdir -p build-libmsi/include build-libmsi/shared build-libmsi/static
249+
cp msitools/include/libmsi.h msitools/include/libmsi-database.h \
250+
msitools/include/libmsi-query.h msitools/include/libmsi-record.h \
251+
msitools/include/libmsi-summary-info.h msitools/include/libmsi-types.h \
252+
build-libmsi/include/
253+
cp libmsi-enums-generated.h build-libmsi/include/libmsi-enums.h
254+
mv libmsi-win-*.dll build-libmsi/shared/
255+
mv libmsi-win-*.dll.lib build-libmsi/shared/
256+
mv libmsi-linux-*.so build-libmsi/shared/
257+
mv libmsi-osx-universal.dylib build-libmsi/shared/
258+
mv libmsi-win-*.lib build-libmsi/static/
259+
mv libmsi-linux-*.a build-libmsi/static/
260+
mv libmsi-macos-arm64.a libmsi-macos-x64.a build-libmsi/static/
261+
ls -laR build-libmsi/
262+
263+
- uses: actions/upload-artifact@v4
264+
with:
265+
name: build-wixl
266+
path: build-wixl/*
195267

196268
- uses: actions/upload-artifact@v4
197269
with:
198-
name: wixl
199-
path: release/*
270+
name: build-libmsi
271+
path: build-libmsi/**/*

.github/workflows/release.yml

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,18 @@ jobs:
4646
4747
- uses: actions/download-artifact@v4
4848
with:
49-
name: wixl
50-
path: release
49+
name: build-wixl
50+
path: wixl
51+
52+
- uses: actions/download-artifact@v4
53+
with:
54+
name: build-libmsi
55+
path: libmsi
56+
57+
- name: Create release archives
58+
run: |
59+
zip -r wixl.zip wixl/
60+
zip -r libmsi.zip libmsi/
5161
5262
- name: Create GitHub Release
5363
env:
@@ -57,9 +67,5 @@ jobs:
5767
--target "${{ github.sha }}" \
5868
--title "${{ steps.version.outputs.version }}" \
5969
--generate-notes \
60-
release/wixl-win-x86.exe \
61-
release/wixl-win-x64.exe \
62-
release/wixl-win-arm64.exe \
63-
release/wixl-linux-x64 \
64-
release/wixl-linux-arm64 \
65-
release/wixl-osx-universal
70+
wixl.zip \
71+
libmsi.zip

meson.build

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ if host_machine.system() == 'darwin'
120120
dependencies: [zlib],
121121
c_args: ['-include', meson.project_build_root() / 'xml2-config.h',
122122
'-I' + meson.project_build_root()],
123+
pic: true,
123124
)
124125

125126
libxml = declare_dependency(
@@ -237,6 +238,7 @@ libgsf = static_library('gsf-1',
237238
'-DG_LOG_DOMAIN="libgsf"',
238239
'-DGSF_DISABLE_DEPRECATED',
239240
],
241+
pic: true,
240242
)
241243

242244
libgsf_dep = declare_dependency(
@@ -344,6 +346,7 @@ libmsi = static_library('msi-1.0',
344346
include_directories: inc_dirs,
345347
dependencies: libmsi_deps,
346348
c_args: ['-include', meson.project_build_root() / 'config.h'],
349+
pic: true,
347350
)
348351

349352
libmsi_dep = declare_dependency(
@@ -352,6 +355,41 @@ libmsi_dep = declare_dependency(
352355
dependencies: libmsi_deps,
353356
)
354357

358+
# --- libmsi shared library ---
359+
libmsi_shared_link_args = []
360+
if host_machine.system() == 'windows'
361+
libmsi_shared_link_args = [
362+
'-lws2_32', '-lole32', '-lshell32', '-lshlwapi',
363+
'-ladvapi32', '-luserenv', '-liphlpapi', '-ldnsapi',
364+
'-lbcrypt',
365+
]
366+
elif host_machine.system() == 'darwin'
367+
libmsi_shared_link_args = [
368+
'-framework', 'CoreFoundation',
369+
'-framework', 'Foundation',
370+
'-framework', 'AppKit',
371+
'-framework', 'Carbon',
372+
]
373+
endif
374+
375+
if host_machine.system() == 'linux'
376+
libmsi_shared_deps = [
377+
dependency('glib-2.0', static: false),
378+
dependency('gio-2.0', static: false),
379+
dependency('gobject-2.0', static: false),
380+
dependency('libxml-2.0', static: false),
381+
dependency('zlib', static: false),
382+
]
383+
else
384+
libmsi_shared_deps = [glib, gio, gobject, libxml, zlib]
385+
endif
386+
387+
libmsi_shared = shared_library('msi',
388+
objects: [libmsi.extract_all_objects(), libgsf.extract_all_objects()],
389+
dependencies: libmsi_shared_deps,
390+
link_args: libmsi_shared_link_args,
391+
)
392+
355393
# --- Platform-specific dependencies and link args ---
356394
platform_link_deps = []
357395

0 commit comments

Comments
 (0)