-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
353 lines (309 loc) · 16.3 KB
/
Copy pathMakefile
File metadata and controls
353 lines (309 loc) · 16.3 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
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
BIN_DIR := $(CURDIR)/binary
VENDOR := $(CURDIR)/vendor
STAMPS := $(BIN_DIR)/.stamps
NPROC := $(shell nproc)
export PKG_CONFIG_PATH := $(BIN_DIR)/lib/pkgconfig:$(BIN_DIR)/lib64/pkgconfig
export PKG_CONFIG := pkg-config --static
export CMAKE_PREFIX_PATH := $(BIN_DIR)
export PATH := $(BIN_DIR)/bin:$(PATH)
# Which formats/features end up in libvips. Space-separated, override on the
# command line: `make build FORMATS="jpeg png webp avif"`. Run `make formats`
# to see the full list with notes. Defaults to everything.
FORMATS ?= jpeg png webp tiff gif-save exif jp2k avif heic jxl exr archive icc simd orc fftw
.PHONY: build setup nuke verify formats FORCE
define checkout
git -C $(VENDOR)/$(1) checkout $(2)
endef
define cmake-build
cmake -S $(VENDOR)/$(1) -B $(VENDOR)/$(1)/build \
-DCMAKE_INSTALL_PREFIX=$(BIN_DIR) -DCMAKE_PREFIX_PATH=$(BIN_DIR) \
-DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release $(2)
cmake --build $(VENDOR)/$(1)/build -j$(NPROC)
cmake --install $(VENDOR)/$(1)/build
endef
# Which top-level dependency stamps FORMATS pulls in. Each one's own
# prerequisites (e.g. libjxl needing highway+brotli+lcms2) are handled by
# that target's own rule below - Make's normal recursive dependency
# resolution takes care of the transitive closure, no separate graph-walk
# needed.
OPTIONAL_DEPS := \
$(if $(filter jpeg,$(FORMATS)),$(STAMPS)/libjpeg) \
$(if $(filter png,$(FORMATS)),$(STAMPS)/libpng) \
$(if $(filter webp,$(FORMATS)),$(STAMPS)/libwebp) \
$(if $(filter tiff,$(FORMATS)),$(STAMPS)/libtiff) \
$(if $(filter gif-save,$(FORMATS)),$(STAMPS)/cgif) \
$(if $(filter exif,$(FORMATS)),$(STAMPS)/libexif) \
$(if $(filter jp2k,$(FORMATS)),$(STAMPS)/openjpeg) \
$(if $(filter avif heic,$(FORMATS)),$(STAMPS)/libheif) \
$(if $(filter jxl,$(FORMATS)),$(STAMPS)/libjxl) \
$(if $(filter exr,$(FORMATS)),$(STAMPS)/openexr) \
$(if $(filter archive,$(FORMATS)),$(STAMPS)/libarchive) \
$(if $(filter icc,$(FORMATS)),$(STAMPS)/lcms2) \
$(if $(filter simd,$(FORMATS)),$(STAMPS)/highway) \
$(if $(filter orc,$(FORMATS)),$(STAMPS)/orc) \
$(if $(filter fftw,$(FORMATS)),$(STAMPS)/fftw)
# same mapping, as libvips meson feature flags instead of stamp paths
VIPS_FORMAT_FLAGS := \
-Djpeg=$(if $(filter jpeg,$(FORMATS)),enabled,disabled) \
-Dpng=$(if $(filter png,$(FORMATS)),enabled,disabled) \
-Dwebp=$(if $(filter webp,$(FORMATS)),enabled,disabled) \
-Dtiff=$(if $(filter tiff,$(FORMATS)),enabled,disabled) \
-Dcgif=$(if $(filter gif-save,$(FORMATS)),enabled,disabled) \
-Dexif=$(if $(filter exif,$(FORMATS)),enabled,disabled) \
-Dopenjpeg=$(if $(filter jp2k,$(FORMATS)),enabled,disabled) \
-Dheif=$(if $(filter avif heic,$(FORMATS)),enabled,disabled) \
-Djpeg-xl=$(if $(filter jxl,$(FORMATS)),enabled,disabled) \
-Dopenexr=$(if $(filter exr,$(FORMATS)),enabled,disabled) \
-Darchive=$(if $(filter archive,$(FORMATS)),enabled,disabled) \
-Dlcms=$(if $(filter icc,$(FORMATS)),enabled,disabled) \
-Dhighway=$(if $(filter simd,$(FORMATS)),enabled,disabled) \
-Dorc=$(if $(filter orc,$(FORMATS)),enabled,disabled) \
-Dfftw=$(if $(filter fftw,$(FORMATS)),enabled,disabled)
# Make only rebuilds a target when a prerequisite *file* is newer than it -
# it has no idea the FORMATS variable feeding the recipe changed. This
# sentinel's recipe always runs (FORCE is phony) but only touches the file
# when the value actually differs, so libvips only rebuilds when FORMATS
# genuinely changed between runs - in either direction, growing or shrinking.
FORCE:
$(BIN_DIR)/.formats-used: FORCE
@mkdir -p $(BIN_DIR)
@if [ "$$(cat $(BIN_DIR)/.formats-used 2>/dev/null)" != "$(FORMATS)" ]; then \
echo "$(FORMATS)" > $(BIN_DIR)/.formats-used; \
fi
build: setup $(STAMPS)/libvips
setup:
apk add --no-cache build-base bash coreutils findutils grep sed gawk gettext pkgconf meson ninja cmake autoconf automake libtool nasm python3 linux-headers gperf gettext-dev groff gtk-doc curl
mkdir -p $(STAMPS)
@echo "FORMATS = $(FORMATS)"
nuke:
rm -rf $(BIN_DIR)
git submodule foreach git reset --hard
git submodule foreach git clean -ffdx
git submodule update --init
formats:
@echo "FORMATS values (space-separated, pass via FORMATS=\"...\"):"
@echo " jpeg png webp tiff exif core raster formats"
@echo " gif-save GIF save via cgif - needs a quantizer this build doesn't"
@echo " have (imagequant/quantizr are both Rust now), so this"
@echo " links but can't actually save. GIF load is always on,"
@echo " it's built into libvips (nsgif), no external dep."
@echo " jp2k JPEG2000 via openjpeg"
@echo " avif heic decode only - no x265/aom encoder is built"
@echo " jxl JPEG XL"
@echo " exr OpenEXR, load only (libvips has no EXR save path)"
@echo " archive pyramid save via libarchive"
@echo " icc ICC colour management via lcms2"
@echo " simd SIMD acceleration via highway"
@echo " orc Orc runtime compiler"
@echo " fftw FFT convolution via fftw3"
@echo ""
@echo "Default (FORMATS unset): everything above."
@echo "Example: make build FORMATS=\"jpeg png webp avif\""
# --- existing base deps ---
$(STAMPS)/zlib:
$(call checkout,zlib,v1.3.2)
$(call cmake-build,zlib,-DZLIB_BUILD_SHARED=OFF -DZLIB_BUILD_STATIC=ON -DZLIB_BUILD_TESTING=OFF)
touch $@
$(STAMPS)/pcre2: $(STAMPS)/zlib
$(call checkout,pcre2,pcre2-10.47)
$(call cmake-build,pcre2,-DPCRE2_BUILD_PCRE2GREP=OFF -DPCRE2_BUILD_TESTS=OFF -DPCRE2_SUPPORT_JIT=OFF -DPCRE2_BUILD_PCRE2_16=ON -DPCRE2_BUILD_PCRE2_32=ON)
rm -f $(BIN_DIR)/bin/pcre2-config
touch $@
$(STAMPS)/libffi:
$(call checkout,libffi,v3.5.2)
cd $(VENDOR)/libffi && ./autogen.sh && ./configure --disable-docs --prefix=$(BIN_DIR) --disable-shared --enable-static
$(MAKE) -C $(VENDOR)/libffi -j$(NPROC)
$(MAKE) -C $(VENDOR)/libffi install
touch $@
$(STAMPS)/libiconv:
$(call checkout,libiconv.git,v1.19)
cd $(VENDOR)/libiconv.git && ./gitsub.sh pull && ./autogen.sh && ./configure --disable-shared --enable-static --prefix=$(BIN_DIR)
$(MAKE) -C $(VENDOR)/libiconv.git -j$(NPROC)
$(MAKE) -C $(VENDOR)/libiconv.git install
cp $(VENDOR)/iconv.pc $(BIN_DIR)/lib/pkgconfig
rm -f $(BIN_DIR)/bin/iconv
touch $@
$(STAMPS)/glib2: $(STAMPS)/zlib $(STAMPS)/pcre2 $(STAMPS)/libffi $(STAMPS)/libiconv
$(call checkout,glib2,2.86.5)
meson setup $(VENDOR)/glib2/build $(VENDOR)/glib2 \
--prefix=$(BIN_DIR) --default-library=static --buildtype=release \
-Dtests=false -Doss_fuzz=disabled -Dinstalled_tests=false \
-Ddocumentation=false -Dnls=disabled -Dselinux=disabled -Dxattr=false \
--wrap-mode=nofallback -Dc_link_args="-L$(BIN_DIR)/lib -liconv -lcharset"
meson compile -C $(VENDOR)/glib2/build
meson install -C $(VENDOR)/glib2/build
# glib-mkenums and glib-genmarshal are kept - libvips's own meson configure
# looks them up by name (confirmed in build logs); everything else here is
# an end-user CLI tool nothing in this build chain ever calls.
rm -f $(BIN_DIR)/bin/gapplication $(BIN_DIR)/bin/gdbus $(BIN_DIR)/bin/gdbus-codegen \
$(BIN_DIR)/bin/gio $(BIN_DIR)/bin/gio-querymodules \
$(BIN_DIR)/bin/glib-compile-resources $(BIN_DIR)/bin/glib-compile-schemas \
$(BIN_DIR)/bin/glib-gettextize $(BIN_DIR)/bin/gobject-query \
$(BIN_DIR)/bin/gresource $(BIN_DIR)/bin/gsettings \
$(BIN_DIR)/bin/gtester $(BIN_DIR)/bin/gtester-report \
$(BIN_DIR)/bin/gi-compile-repository $(BIN_DIR)/bin/gi-decompile-typelib $(BIN_DIR)/bin/gi-inspect-typelib \
$(BIN_DIR)/libexec/gio-launch-desktop
touch $@
$(STAMPS)/libpng: $(STAMPS)/zlib
$(call checkout,libpng,v1.6.57)
$(call cmake-build,libpng,-DPNG_SHARED=OFF -DPNG_STATIC=ON -DPNG_TESTS=OFF -DPNG_TOOLS=OFF -DZLIB_ROOT=$(BIN_DIR))
rm -f $(BIN_DIR)/bin/libpng-config $(BIN_DIR)/bin/libpng16-config
touch $@
$(STAMPS)/libjpeg:
$(call checkout,libjpeg-turbo,3.0.3)
$(call cmake-build,libjpeg-turbo,-DENABLE_SHARED=OFF -DENABLE_STATIC=ON -DWITH_TURBOJPEG=OFF -DWITH_TOOLS=OFF -DWITH_TESTS=OFF -DWITH_SYSTEM_ZLIB=ON -DZLIB_ROOT=$(BIN_DIR))
rm -f $(BIN_DIR)/bin/cjpeg $(BIN_DIR)/bin/djpeg $(BIN_DIR)/bin/jpegtran $(BIN_DIR)/bin/rdjpgcom $(BIN_DIR)/bin/wrjpgcom
touch $@
$(STAMPS)/libwebp:
$(call checkout,libwebp,v1.6.0)
$(call cmake-build,libwebp,-DWEBP_BUILD_ANIM_UTILS=OFF -DWEBP_BUILD_CWEBP=OFF -DWEBP_BUILD_DWEBP=OFF -DWEBP_BUILD_GIF2WEBP=OFF -DWEBP_BUILD_IMG2WEBP=OFF -DWEBP_BUILD_VWEBP=OFF -DWEBP_BUILD_WEBPINFO=OFF -DWEBP_BUILD_WEBPMUX=OFF -DWEBP_BUILD_EXTRAS=OFF -DWEBP_BUILD_LIBWEBPMUX=ON)
touch $@
$(STAMPS)/libexif:
$(call checkout,libexif,v0.6.25)
cd $(VENDOR)/libexif && autoreconf -fi && ./configure --disable-shared --enable-static --prefix=$(BIN_DIR) --disable-docs --disable-nls
$(MAKE) -C $(VENDOR)/libexif -j$(NPROC)
$(MAKE) -C $(VENDOR)/libexif install
touch $@
$(STAMPS)/expat:
$(call checkout,expat,R_2_7_5)
$(call cmake-build,expat/expat,-DEXPAT_SHARED_LIBS=OFF -DEXPAT_BUILD_TESTS=OFF -DEXPAT_BUILD_TOOLS=OFF -DEXPAT_BUILD_EXAMPLES=OFF -DEXPAT_BUILD_DOCS=OFF -DEXPAT_BUILD_FUZZERS=OFF)
touch $@
# --- tier 1: trivial format libs ---
$(STAMPS)/cgif:
$(call checkout,cgif,v0.5.3)
meson setup $(VENDOR)/cgif/build $(VENDOR)/cgif \
--prefix=$(BIN_DIR) --default-library=static --buildtype=release --wrap-mode=nofallback \
-Dexamples=false -Dtests=false -Dfuzzer=false
meson compile -C $(VENDOR)/cgif/build
meson install -C $(VENDOR)/cgif/build
touch $@
# libtiff's own source tree has a build/ subdirectory (CPack config), which
# collides with the cmake-build macro's convention of using <name>/build as
# the out-of-source build dir - so this one gets its own dir name.
$(STAMPS)/libtiff: $(STAMPS)/zlib $(STAMPS)/libjpeg
$(call checkout,libtiff,v4.7.2)
cmake -S $(VENDOR)/libtiff -B $(VENDOR)/libtiff/_build \
-DCMAKE_INSTALL_PREFIX=$(BIN_DIR) -DCMAKE_PREFIX_PATH=$(BIN_DIR) \
-DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release \
-Dtiff-tools=OFF -Dtiff-tests=OFF -Dtiff-contrib=OFF -Dtiff-docs=OFF -Dzlib=ON -Djpeg=ON -Dwebp=OFF -Dlibdeflate=OFF -Dlzma=OFF -Dzstd=OFF -Djbig=OFF -Dlerc=OFF
cmake --build $(VENDOR)/libtiff/_build -j$(NPROC)
cmake --install $(VENDOR)/libtiff/_build
touch $@
# --- tier 2: medium format/feature libs ---
$(STAMPS)/lcms2:
$(call checkout,lcms2,lcms2.19.1)
cd $(VENDOR)/lcms2 && ./autogen.sh && ./configure --disable-shared --enable-static --prefix=$(BIN_DIR)
$(MAKE) -C $(VENDOR)/lcms2 -j$(NPROC)
$(MAKE) -C $(VENDOR)/lcms2 install
rm -f $(BIN_DIR)/bin/linkicc $(BIN_DIR)/bin/psicc $(BIN_DIR)/bin/transicc
touch $@
$(STAMPS)/openjpeg: $(STAMPS)/zlib
$(call checkout,openjpeg,v2.5.4)
$(call cmake-build,openjpeg,-DBUILD_CODEC=OFF -DBUILD_TESTING=OFF -DBUILD_DOC=OFF)
touch $@
# libarchive's own source tree has a build/ subdirectory (cmake helper
# modules), which collides with the cmake-build macro's convention - own
# build dir name, same as libtiff.
$(STAMPS)/libarchive: $(STAMPS)/zlib
$(call checkout,libarchive,v3.8.8)
cmake -S $(VENDOR)/libarchive -B $(VENDOR)/libarchive/_build \
-DCMAKE_INSTALL_PREFIX=$(BIN_DIR) -DCMAKE_PREFIX_PATH=$(BIN_DIR) \
-DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release \
-DENABLE_TEST=OFF -DENABLE_TAR=OFF -DENABLE_CPIO=OFF -DENABLE_CAT=OFF \
-DENABLE_BZip2=OFF -DENABLE_LIBB2=OFF -DENABLE_LZ4=OFF -DENABLE_LZO=OFF -DENABLE_LZMA=OFF -DENABLE_ZSTD=OFF \
-DENABLE_OPENSSL=OFF -DENABLE_LIBXML2=OFF -DENABLE_EXPAT=OFF -DENABLE_PCREPOSIX=OFF -DENABLE_ACL=OFF \
-DENABLE_ICONV=ON -DENABLE_ZLIB=ON -DENABLE_MBEDTLS=OFF -DENABLE_NETTLE=OFF
cmake --build $(VENDOR)/libarchive/_build -j$(NPROC)
cmake --install $(VENDOR)/libarchive/_build
rm -f $(BIN_DIR)/bin/bsdunzip
touch $@
$(STAMPS)/highway:
$(call checkout,highway,1.4.0)
$(call cmake-build,highway,-DHWY_ENABLE_TESTS=OFF -DHWY_ENABLE_EXAMPLES=OFF -DHWY_ENABLE_CONTRIB=OFF -DHWY_ENABLE_INSTALL=ON)
touch $@
$(STAMPS)/orc:
$(call checkout,orc,orc-0.4.28)
sed -i 's/shared_library(/library(/' $(VENDOR)/orc/orc/meson.build $(VENDOR)/orc/orc-test/meson.build
meson setup $(VENDOR)/orc/build $(VENDOR)/orc \
--prefix=$(BIN_DIR) --default-library=static --buildtype=release --wrap-mode=nofallback
meson compile -C $(VENDOR)/orc/build
meson install -C $(VENDOR)/orc/build
rm -f $(BIN_DIR)/bin/orc-bugreport $(BIN_DIR)/bin/orcc
touch $@
# fftw's git checkout ships no pre-generated codelets (needs OCaml's genfft to
# regenerate them); the release tarball ships them pre-generated, so fetch
# that instead of the vendor/ submodule for this one dependency.
$(STAMPS)/fftw:
rm -rf $(VENDOR)/fftw-3.3.11
curl -fsSL https://www.fftw.org/fftw-3.3.11.tar.gz | tar xz -C $(VENDOR)
cd $(VENDOR)/fftw-3.3.11 && ./configure --disable-shared --enable-static --prefix=$(BIN_DIR) --disable-doc --enable-threads --with-combined-threads
$(MAKE) -C $(VENDOR)/fftw-3.3.11 -j$(NPROC)
$(MAKE) -C $(VENDOR)/fftw-3.3.11 install
rm -f $(BIN_DIR)/bin/fftw-wisdom $(BIN_DIR)/bin/fftw-wisdom-to-conf
touch $@
$(STAMPS)/Imath:
$(call checkout,Imath,v3.2.2)
$(call cmake-build,Imath,-DBUILD_TESTING=OFF -DIMATH_INSTALL_PKG_CONFIG=ON)
touch $@
$(STAMPS)/openexr: $(STAMPS)/Imath $(STAMPS)/zlib
$(call checkout,openexr,v3.4.13)
$(call cmake-build,openexr,-DBUILD_TESTING=OFF -DOPENEXR_BUILD_TOOLS=OFF -DOPENEXR_INSTALL_EXAMPLES=OFF)
touch $@
$(STAMPS)/libde265:
$(call checkout,libde265,v1.1.1)
$(call cmake-build,libde265,-DENABLE_SDL=OFF)
rm -f $(BIN_DIR)/bin/dec265
touch $@
$(STAMPS)/dav1d:
$(call checkout,dav1d,1.5.4)
meson setup $(VENDOR)/dav1d/build $(VENDOR)/dav1d \
--prefix=$(BIN_DIR) --default-library=static --buildtype=release --wrap-mode=nofallback \
-Denable_tools=false -Denable_tests=false -Denable_examples=false -Denable_docs=false
meson compile -C $(VENDOR)/dav1d/build
meson install -C $(VENDOR)/dav1d/build
touch $@
$(STAMPS)/libheif: $(STAMPS)/libde265 $(STAMPS)/dav1d
$(call checkout,libheif,v1.23.1)
$(call cmake-build,libheif,-DENABLE_PLUGIN_LOADING=OFF -DWITH_EXAMPLES=OFF -DWITH_GDK_PIXBUF=OFF -DBUILD_TESTING=OFF -DBUILD_DOCUMENTATION=OFF \
-DWITH_LIBDE265=ON -DWITH_DAV1D=ON -DWITH_X265=OFF -DWITH_AOM_DECODER=OFF -DWITH_AOM_ENCODER=OFF \
-DWITH_SvtEnc=OFF -DWITH_RAV1E=OFF -DWITH_JPEG_DECODER=OFF -DWITH_JPEG_ENCODER=OFF -DWITH_UNCOMPRESSED_CODEC=OFF)
touch $@
$(STAMPS)/brotli:
$(call checkout,brotli,v1.2.0)
$(call cmake-build,brotli,-DBROTLI_DISABLE_TESTS=ON -DBROTLI_BUILD_TOOLS=OFF)
touch $@
$(STAMPS)/libjxl: $(STAMPS)/highway $(STAMPS)/brotli $(STAMPS)/lcms2
$(call checkout,libjxl,v0.12.0)
$(call cmake-build,libjxl,-DBUILD_TESTING=OFF -DJPEGXL_ENABLE_TOOLS=OFF -DJPEGXL_ENABLE_DEVTOOLS=OFF -DJPEGXL_ENABLE_EXAMPLES=OFF \
-DJPEGXL_ENABLE_DOXYGEN=OFF -DJPEGXL_ENABLE_MANPAGES=OFF -DJPEGXL_ENABLE_BENCHMARK=OFF \
-DJPEGXL_ENABLE_SJPEG=OFF -DJPEGXL_ENABLE_SKCMS=OFF -DJPEGXL_ENABLE_PLUGINS=OFF -DJPEGXL_ENABLE_VIEWERS=OFF \
-DJPEGXL_FORCE_SYSTEM_HWY=ON -DJPEGXL_FORCE_SYSTEM_BROTLI=ON -DJPEGXL_FORCE_SYSTEM_LCMS2=ON \
-DJPEGXL_ENABLE_TCMALLOC=OFF -DJPEGXL_ENABLE_JNI=OFF -DJPEGXL_ENABLE_OPENEXR=OFF)
touch $@
# --- libvips itself ---
# base deps (glib2, expat) are unconditional; everything else comes from
# OPTIONAL_DEPS, computed above from FORMATS. .formats-used forces a rebuild
# whenever FORMATS changes even if that happens to shrink the prerequisite
# list (Make's mtime check alone wouldn't catch that direction).
$(STAMPS)/libvips: $(STAMPS)/glib2 $(STAMPS)/expat $(OPTIONAL_DEPS) $(BIN_DIR)/.formats-used
$(call checkout,libvips,master)
rm -rf $(VENDOR)/libvips/build
meson setup $(VENDOR)/libvips/build $(VENDOR)/libvips \
--prefix=$(BIN_DIR) --default-library=static --buildtype=release --wrap-mode=nofallback \
-Ddeprecated=false -Dexamples=false -Dfuzzing_engine=none -Dfuzz=false \
-Dtools=false -Dman=false -Dtests=false -Dcplusplus=false -Ddocs=false \
-Dmodules=disabled -Dintrospection=disabled -Dvapi=false \
-Dcfitsio=disabled -Dfontconfig=disabled \
-Dimagequant=disabled -Duhdr=disabled -Dmagick=disabled -Dmatio=disabled -Dnifti=disabled \
-Dopenslide=disabled -Dpangocairo=disabled \
-Dpdfium=disabled -Dpoppler=disabled -Dquantizr=disabled -Draw=disabled -Drsvg=disabled \
-Dspng=disabled -Dzlib=enabled \
-Dheif-module=disabled -Djpeg-xl-module=disabled \
$(VIPS_FORMAT_FLAGS) \
-Dc_link_args="-L$(BIN_DIR)/lib -liconv -lcharset -lintl -lsharpyuv"
meson compile -C $(VENDOR)/libvips/build
meson install -C $(VENDOR)/libvips/build
touch $@
verify: $(STAMPS)/libvips
$(CC) -o $(BIN_DIR)/verify verify.c $(shell pkg-config --static --cflags --libs vips) -liconv -lcharset
$(BIN_DIR)/verify