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

Commit 755bd7b

Browse files
committed
try compiling libxml statically
1 parent acc8bc4 commit 755bd7b

4 files changed

Lines changed: 114 additions & 27 deletions

File tree

.github/workflows/build.yml

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ jobs:
3434
${{ matrix.prefix }}-meson
3535
${{ matrix.prefix }}-pkgconf
3636
${{ matrix.prefix }}-glib2
37-
${{ matrix.prefix }}-libxml2
3837
mingw-w64-ucrt-x86_64-vala
3938
bison
4039
@@ -81,14 +80,13 @@ jobs:
8180
apk add --no-cache \
8281
gcc musl-dev meson vala bison pkgconf file \
8382
glib-dev glib-static \
84-
libxml2-dev libxml2-static \
8583
zlib-dev zlib-static \
8684
pcre2-dev pcre2-static \
8785
libffi-dev \
8886
xz-dev xz-static \
8987
util-linux-dev util-linux-static
9088
echo "=== Verifying static libs ==="
91-
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
89+
ls /usr/lib/libglib-2.0.a /usr/lib/libgio-2.0.a /usr/lib/libgobject-2.0.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
9290
meson setup builddir --default-library=static --prefer-static
9391
meson compile -C builddir
9492
file builddir/wixl
@@ -123,30 +121,13 @@ jobs:
123121

124122
- name: Install dependencies
125123
run: |
126-
brew install meson vala bison glib libxml2 zlib libffi cmake
124+
brew install meson vala bison glib zlib libffi
127125
echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH
128126
129-
- name: Build static libxml2
130-
run: |
131-
brew fetch --force libxml2
132-
TARBALL=$(brew --cache libxml2)
133-
TMPDIR=$(mktemp -d)
134-
tar xf "$TARBALL" -C "$TMPDIR"
135-
cd "$TMPDIR"/libxml2-*
136-
cmake -B build \
137-
-DBUILD_SHARED_LIBS=OFF \
138-
-DLIBXML2_WITH_PYTHON=OFF \
139-
-DLIBXML2_WITH_ICU=OFF \
140-
-DLIBXML2_WITH_LZMA=OFF \
141-
-DZLIB_ROOT=$(brew --prefix zlib)
142-
cmake --build build
143-
cp build/libxml2.a "$(brew --prefix libxml2)/lib/"
144-
145127
- name: Build
146128
run: |
147-
export PKG_CONFIG_PATH="$(brew --prefix libxml2)/lib/pkgconfig:$(brew --prefix zlib)/lib/pkgconfig:$(brew --prefix libffi)/lib/pkgconfig:$PKG_CONFIG_PATH"
148-
export LDFLAGS="-L$(brew --prefix zlib)/lib -L$(brew --prefix libffi)/lib -L$(brew --prefix libxml2)/lib"
149-
export CPPFLAGS="-I$(brew --prefix libxml2)/include"
129+
export PKG_CONFIG_PATH="$(brew --prefix zlib)/lib/pkgconfig:$(brew --prefix libffi)/lib/pkgconfig:$PKG_CONFIG_PATH"
130+
export LDFLAGS="-L$(brew --prefix zlib)/lib -L$(brew --prefix libffi)/lib"
150131
meson setup builddir --default-library=static --prefer-static
151132
meson compile -C builddir
152133

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,6 @@
1010
[submodule "libeconf"]
1111
path = libeconf
1212
url = https://github.com/openSUSE/libeconf.git
13+
[submodule "libxml2"]
14+
path = libxml2
15+
url = https://github.com/GNOME/libxml2.git

libxml2

Submodule libxml2 added at a53503c

meson.build

Lines changed: 106 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
project('wixl-standalone', 'c', 'vala',
22
version: '0.103',
3-
meson_version: '>= 0.62',
3+
meson_version: '>= 0.64',
44
default_options: [
55
'default_library=static',
66
'prefer_static=true',
@@ -14,9 +14,112 @@ gnome = import('gnome')
1414
glib = dependency('glib-2.0', version: '>= 2.12', static: true)
1515
gobject = dependency('gobject-2.0', version: '>= 0.9.4', static: true)
1616
gio = dependency('gio-2.0', version: '>= 2.14', static: true)
17-
libxml = dependency('libxml-2.0', version: '>= 2.7', static: true)
1817
zlib = dependency('zlib', static: true)
1918

19+
# --- libxml2 (static, built from source) ---
20+
cc = meson.get_compiler('c')
21+
22+
xml2_version_config = configuration_data()
23+
xml2_version_config.set('VERSION', '2.16.0')
24+
xml2_version_config.set('LIBXML_VERSION_NUMBER', '21600')
25+
xml2_version_config.set('LIBXML_VERSION_EXTRA', '')
26+
xml2_version_config.set('WITH_THREADS', 1)
27+
xml2_version_config.set('WITH_THREAD_ALLOC', 0)
28+
xml2_version_config.set('WITH_OUTPUT', 1)
29+
xml2_version_config.set('WITH_PUSH', 1)
30+
xml2_version_config.set('WITH_READER', 0)
31+
xml2_version_config.set('WITH_PATTERN', 0)
32+
xml2_version_config.set('WITH_WRITER', 0)
33+
xml2_version_config.set('WITH_SAX1', 0)
34+
xml2_version_config.set('WITH_HTTP', 0)
35+
xml2_version_config.set('WITH_VALID', 1)
36+
xml2_version_config.set('WITH_HTML', 0)
37+
xml2_version_config.set('WITH_C14N', 0)
38+
xml2_version_config.set('WITH_CATALOG', 0)
39+
xml2_version_config.set('WITH_WINPATH', host_machine.system() == 'windows' ? 1 : 0)
40+
xml2_version_config.set('WITH_XPATH', 0)
41+
xml2_version_config.set('WITH_XPTR', 0)
42+
xml2_version_config.set('WITH_XINCLUDE', 0)
43+
xml2_version_config.set('WITH_ICONV', 1)
44+
xml2_version_config.set('WITH_ICU', 0)
45+
xml2_version_config.set('WITH_ISO8859X', 1)
46+
xml2_version_config.set('WITH_DEBUG', 0)
47+
xml2_version_config.set('WITH_REGEXPS', 0)
48+
xml2_version_config.set('WITH_RELAXNG', 0)
49+
xml2_version_config.set('WITH_SCHEMAS', 0)
50+
xml2_version_config.set('WITH_SCHEMATRON', 0)
51+
xml2_version_config.set('WITH_MODULES', 0)
52+
xml2_version_config.set('WITH_ZLIB', 1)
53+
xml2_version_config.set('MODULE_EXTENSION', '')
54+
55+
xml2_version_h = configure_file(
56+
input: 'libxml2/include/libxml/xmlversion.h.in',
57+
output: 'libxml/xmlversion.h',
58+
configuration: xml2_version_config,
59+
)
60+
61+
xml2_config = configuration_data()
62+
xml2_config.set('HAVE_STDINT_H', 1)
63+
xml2_config.set01('HAVE_DECL_GETENTROPY', cc.has_function('getentropy', prefix: '#include <sys/random.h>'))
64+
xml2_config.set01('HAVE_DECL_GLOB', cc.has_function('glob', prefix: '#include <glob.h>'))
65+
xml2_config.set01('HAVE_DECL_MMAP', cc.has_function('mmap', prefix: '#include <sys/mman.h>'))
66+
xml2_config.set('HAVE_FUNC_ATTRIBUTE_DESTRUCTOR', cc.compiles('void __attribute__((destructor)) f(void) {} int main(void) { return 0; }') ? 1 : false)
67+
xml2_config.set('HAVE_DLOPEN', cc.has_function('dlopen') ? 1 : false)
68+
xml2_config.set('XML_THREAD_LOCAL', '_Thread_local')
69+
70+
xml2_config_h = configure_file(
71+
output: 'xml2-config.h',
72+
configuration: xml2_config,
73+
)
74+
75+
xml2_inc_dirs = include_directories(
76+
'libxml2',
77+
'libxml2/include',
78+
)
79+
80+
libxml2_sources = files(
81+
'libxml2/buf.c',
82+
'libxml2/chvalid.c',
83+
'libxml2/dict.c',
84+
'libxml2/encoding.c',
85+
'libxml2/entities.c',
86+
'libxml2/error.c',
87+
'libxml2/globals.c',
88+
'libxml2/hash.c',
89+
'libxml2/list.c',
90+
'libxml2/parser.c',
91+
'libxml2/parserInternals.c',
92+
'libxml2/SAX2.c',
93+
'libxml2/threads.c',
94+
'libxml2/tree.c',
95+
'libxml2/uri.c',
96+
'libxml2/valid.c',
97+
'libxml2/xmlIO.c',
98+
'libxml2/xmlmemory.c',
99+
'libxml2/xmlstring.c',
100+
'libxml2/xmlsave.c',
101+
)
102+
103+
libxml2_deps = [zlib]
104+
105+
libxml2 = static_library('xml2',
106+
libxml2_sources,
107+
xml2_config_h,
108+
xml2_version_h,
109+
include_directories: xml2_inc_dirs,
110+
dependencies: libxml2_deps,
111+
c_args: [
112+
'-include', meson.project_build_root() / 'xml2-config.h',
113+
],
114+
)
115+
116+
libxml = declare_dependency(
117+
link_with: libxml2,
118+
include_directories: xml2_inc_dirs,
119+
dependencies: libxml2_deps,
120+
sources: xml2_version_h,
121+
)
122+
20123
add_project_arguments('-w', language: 'c')
21124

22125
if host_machine.system() == 'windows'
@@ -252,7 +355,6 @@ libmsi_dep = declare_dependency(
252355

253356
# --- Platform-specific dependencies and link args ---
254357
platform_link_deps = []
255-
platform_extra_deps = []
256358

257359
if host_machine.system() == 'linux'
258360
libeconf = static_library('econf',
@@ -325,7 +427,7 @@ wixl = executable('wixl',
325427
c_args: ['-include', meson.project_build_root() / 'config.h'],
326428
include_directories: [inc_dirs, gcab_inc_dirs],
327429
link_with: [libcommon] + platform_link_deps,
328-
dependencies: [libmsi_dep, libgcab_dep, glib, gio, libxml] + platform_extra_deps,
430+
dependencies: [libmsi_dep, libgcab_dep, glib, gio, libxml],
329431
link_args: platform_link_args,
330432
install: true,
331433
)

0 commit comments

Comments
 (0)