diff --git a/client/Makefile b/client/Makefile index a71d9efb8..4f04367a3 100644 --- a/client/Makefile +++ b/client/Makefile @@ -555,10 +555,16 @@ else ifeq ($(QT6_FOUND),1) $(info GUI support: QT6 found, enabled ($(shell QT_SELECT=6 $(QMAKE) -v 2>/dev/null|grep -o 'Qt version.*'))) else + ifeq ($(FORCEQT6),1) + $(error FORCEQT6 not satisfied, aborting) + endif $(info GUI support: QT5 found, enabled ($(shell QT_SELECT=5 $(QMAKE) -v 2>/dev/null|grep -o 'Qt version.*'))) endif else $(info GUI support: QT not found, disabled) + ifeq ($(FORCEQT),1) + $(error FORCEQT not satisfied, aborting) + endif endif endif @@ -569,6 +575,9 @@ else $(info native BT support: Bluez found, enabled) else $(info native BT support: Bluez not found, disabled) + ifeq ($(FORCEBT),1) + $(error FORCEBT not satisfied, aborting) + endif endif endif @@ -578,6 +587,9 @@ else ifeq ($(JANSSON_FOUND),1) $(info Jansson library: system library found) else $(info Jansson library: system library not found, using local library) + ifeq ($(FORCEJANSSONSYSTEM),1) + $(error FORCEJANSSONSYSTEM not satisfied, aborting) + endif endif ifeq ($(SKIPLUASYSTEM),1) @@ -587,6 +599,9 @@ else $(info Lua library: system library found) else $(info Lua library: system library not found, using local library) + ifeq ($(FORCELUASYSTEM),1) + $(error FORCELUASYSTEM not satisfied, aborting) + endif endif endif @@ -597,6 +612,9 @@ else $(info Python3 library: Python3 v$(shell $(PKG_CONFIG_ENV) pkg-config --modversion $(PYTHON3_PKGCONFIG)) found, enabled) else $(info Python3 library: Python3 not found, disabled) + ifeq ($(FORCEPYTHON),1) + $(error FORCEPYTHON not satisfied, aborting) + endif endif endif @@ -607,13 +625,23 @@ else $(info GD library: GD v$(shell $(PKG_CONFIG_ENV) pkg-config --modversion gdlib) found, enabled) else $(info GD library: GD not found, disabled) + ifeq ($(FORCEGD),1) + $(error FORCEGD not satisfied, aborting) + endif endif endif -ifeq ($(ZLIB_FOUND),1) - $(info Zlib library: system library found, enabled) +ifeq ($(SKIPZLIB),1) + $(info Zlib library: skipped) else - $(info Zlib library: not found, disabled) + ifeq ($(ZLIB_FOUND),1) + $(info Zlib library: system library found, enabled) + else + $(info Zlib library: not found, disabled) + ifeq ($(FORCEZLIB),1) + $(error FORCEZLIB not satisfied, aborting) + endif + endif endif ifeq ($(SKIPREADLINE),1) @@ -623,6 +651,9 @@ else $(info Readline library: enabled) else $(info Readline library: Readline not found, disabled) + ifeq ($(FORCEREADLINE),1) + $(error FORCEREADLINE not satisfied, aborting) + endif endif endif @@ -634,6 +665,9 @@ ifneq ($(READLINE_FOUND),1) $(info Linenoise library: enabled) else $(info Linenoise library: Linenoise not found, disabled) + ifeq ($(FORCELINENOISE),1) + $(error FORCELINENOISE not satisfied, aborting) + endif endif endif endif @@ -645,6 +679,9 @@ else $(info Whereami library: system library found) else $(info Whereami library: system library not found, using local library) + ifeq ($(FORCEWHEREAMISYSTEM),1) + $(error FORCEWHEREAMISYSTEM not satisfied, aborting) + endif endif endif diff --git a/doc/md/Development/Maintainers.md b/doc/md/Development/Maintainers.md index b6010967f..78fa4aa7c 100644 --- a/doc/md/Development/Maintainers.md +++ b/doc/md/Development/Maintainers.md @@ -62,6 +62,8 @@ It's also possible to skip parts even if libraries are present in the compilatio * `make client SKIPQT=1` to skip GUI even if Qt is present * `make client SKIPQT6=1` to skip Qt6 even if Qt6 is present, anf fallback on Qt5 * `make client SKIPBT=1` to skip native Bluetooth support even if libbluetooth is present +* `make client SKIPGD=1` to skip NFC ePaper support even if libgd is present +* `make client SKIPZPIB=1` to skip decompressing compressed Google Smart Tap payloads support even if libzlib is present * `make client SKIPPYTHON=1` to skip embedded Python 3 interpreter even if libpython3 is present * `make client SKIPLUASYSTEM=1` to skip system Lua lib even if liblua5.2 is present, use embedded Lua lib instead * `make client SKIPJANSSONSYSTEM=1` to skip system Jansson lib even if libjansson is present, use embedded Jansson lib instead @@ -89,6 +91,19 @@ Some unittests are available via `make check`, which is actually triggering indi * `SKIPUV=1 tools/pm3_tests.sh` to skip usage of `uv` even if `uv` is present, and force usage of `python3` (in which case you must take care of installing the script dependencies yourself) +Inversely, it's possible to mandate parts and make sure the compilation will fail if libraries are not present in the compilation environment: + +* `make client FORCEQT=1` to make sure Qt is present +* `make client FORCEQT6=1` to make sure Qt6 is present +* `make client FORCEBT=1` to make sure libbluetooth is present +* `make client FORCEGD=1` to make sure libgd is present +* `make client FORCEZPIB=1` to make sure libzlib is present +* `make client FORCEPYTHON=1` to make sure libpython3 is present +* `make client FORCELUASYSTEM=1` to make sure liblua5.2 is present in the system +* `make client FORCEJANSSONSYSTEM=1` to make sure libjansson is present in the system +* `make client FORCEWHEREAMISYSTEM=1` to make sure libwhereami is present in the system +* `make client FORCEREADLINE=1` to make sure libreadline is present + Host binaries are compiled with hardening flags (only with Makefile, not with cmake). Exact level of hardening depends on the OS. * `make host NOHARDENING=1` to disable hardening flags.