_ _
| |_ ___| |_ _
| | . | | | |
|_|_|___|_|_ |
|___|
git mirror - github.com/owenewans/holy - branch master
file Makefile
CC ?= cc
CPPFLAGS ?=
CFLAGS ?= -O2
LDFLAGS ?=
LDLIBS ?= -larchive -lcrypto -lelf -lcurl -lplist-2.0 -lz
RPM_CFLAGS ?= $(shell pkg-config --cflags rpm 2>/dev/null)
RPM_LIBS ?= $(shell pkg-config --libs rpm 2>/dev/null)
RPMMD_CFLAGS ?= $(shell pkg-config --cflags libxml-2.0 2>/dev/null)
RPMMD_LIBS ?= $(if $(RPM_LIBS),$(shell pkg-config --libs libxml-2.0 2>/dev/null))
CPPFLAGS += $(if $(RPM_LIBS),-DHOLY_HAVE_RPM $(RPM_CFLAGS))
CPPFLAGS += $(if $(RPMMD_LIBS),-DHOLY_HAVE_RPMMD $(RPMMD_CFLAGS))
LDLIBS += $(RPM_LIBS) $(RPMMD_LIBS)
PREFIX ?= /usr
DESTDIR ?=
MANPAGES = $(wildcard man/*.[578])
SOLV_CFLAGS ?= $(patsubst -I%,-isystem %,$(shell pkg-config --cflags-only-I libsolv 2>/dev/null)) $(shell pkg-config --cflags-only-other libsolv 2>/dev/null)
SOLV_LIBS ?= $(shell pkg-config --libs libsolv 2>/dev/null) -lz
.PHONY: force-build-config
.build-config: force-build-config
$(eval holy_build_config_tmp := $(shell mktemp "$@.tmp.XXXXXX"))
$(file >$(holy_build_config_tmp),CC=$(CC))
$(file >>$(holy_build_config_tmp),CPPFLAGS=$(CPPFLAGS))
$(file >>$(holy_build_config_tmp),CFLAGS=$(CFLAGS))
$(file >>$(holy_build_config_tmp),LDFLAGS=$(LDFLAGS))
$(file >>$(holy_build_config_tmp),LDLIBS=$(LDLIBS))
$(file >>$(holy_build_config_tmp),RPMMD_LIBS=$(RPMMD_LIBS))
$(file >>$(holy_build_config_tmp),SOLV_CFLAGS=$(SOLV_CFLAGS))
$(file >>$(holy_build_config_tmp),SOLV_LIBS=$(SOLV_LIBS))
@cmp -s "$(holy_build_config_tmp)" "$@" || mv "$(holy_build_config_tmp)" "$@"
@rm -f "$(holy_build_config_tmp)"
.DEFAULT_GOAL := all
.PHONY: fetch-sources fetch-bootstrap-sources
fetch-sources:
@test -n "$(INPUTS)" || { echo 'INPUTS directory required' >&2; exit 2; }
sh tools/fetch-sources.sh "$(INPUTS)" profiles/static-sources $(SOURCES)
fetch-bootstrap-sources:
@test -n "$(INPUTS)" || { echo 'INPUTS directory required' >&2; exit 2; }
sh tools/fetch-sources.sh "$(INPUTS)" profiles/bootstrap-sources $(SOURCES)
.PHONY: all check check-fixtures check-root check-qemu check-qemu-gate check-hardware check-https check-solver check-install-payload check-install bootstrap-busybox check-bootstrap-busybox check-static-core man
all: holypkg holy-init holyinstall holygetiso
holygetiso: src/getiso.o src/config.o src/sign.o
$(CC) $(LDFLAGS) -o $@ $^ -lcrypto
holyinstall: src/installer.o src/disk.o src/config.o
$(CC) $(LDFLAGS) -o $@ $^ -lcrypto
holy-init: src/early-init.c .build-config
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic $(LDFLAGS) -o $@ $<
.PHONY: bootstrap-musl check-musl-abi check-libc-abi
bootstrap-musl: holypkg
ARCH="$(or $(ARCH),x86_64)" sh tools/bootstrap-musl.sh ./holypkg "$(INPUTS)" "$(or $(OUTPUT),out/musl-bootstrap)"
check-musl-abi:
python3 tests/libc-abi.py "$(STATIC_HOLYPKG)" "$(MUSL32_PACKAGE)" "$(MUSL32_CC)" "$(MUSL_PACKAGE)" "$(MUSL_CC)"
check-libc-abi:
python3 tests/libc-abi.py "$(STATIC_HOLYPKG)" "$(MUSL32_PACKAGE)" "$(MUSL32_CC)" "$(MUSL_PACKAGE)" "$(MUSL_CC)" "$(GLIBC32_PACKAGE)" "$(GLIBC_PACKAGE)"
.PHONY: bootstrap-glibc check-bootstrap-glibc
bootstrap-glibc: holypkg
ARCH="$(or $(ARCH),x86_64)" sh tools/bootstrap-glibc.sh ./holypkg "$(INPUTS)" "$(or $(OUTPUT),out/glibc-bootstrap)"
check-bootstrap-glibc:
@test "$$(id -u)" != 0 && test -f "$(or $(OUTPUT),out/glibc-bootstrap)/glibc.holy" || { echo 'ordinary user and completed glibc build required' >&2; exit 6; }
$(MAKE) -C "$(or $(OUTPUT),out/glibc-bootstrap)/build" -j"$(or $(JOBS),2)" check
.PHONY: bootstrap-image
bootstrap-image: holypkg llm.txt
ARCH="$(or $(ARCH),x86_64)" ROOT_STORAGE="$(or $(ROOT_STORAGE),ram)" IMAGE_PROFILE="$(or $(IMAGE_PROFILE),dual-libc)" LIBC_BOOT_STATE="$(or $(LIBC_BOOT_STATE),present)" INSTALL_TEST="$(or $(INSTALL_TEST),0)" INSTALL_FIRMWARE="$(or $(INSTALL_FIRMWARE),$(if $(filter i686,$(ARCH)),bios,both))" STORAGE_TOOLS_PACKAGE="$(STORAGE_TOOLS_PACKAGE)" DOAS_PACKAGE="$(DOAS_PACKAGE)" UEFI_CODE="$(UEFI_CODE)" UEFI_VARS="$(UEFI_VARS)" NETWORK_RECOVERY="$(or $(NETWORK_RECOVERY),off)" GLIBC_PACKAGE="$(GLIBC_PACKAGE)" MUSL_PACKAGE="$(MUSL_PACKAGE)" GLIBC_CC="$(or $(GLIBC_CC),gcc)" MUSL_CC="$(MUSL_CC)" STATIC_HOLYINSTALL="$(STATIC_HOLYINSTALL)" sh tools/bootstrap-image.sh ./holypkg "$(STATIC_HOLYPKG)" "$(STATIC_CC)" "$(BUSYBOX_PACKAGE)" "$(DINIT_PACKAGE)" "$(MDEVD_PACKAGE)" "$(KERNEL_IMAGE)" "$(KERNEL_VERSION)" "$(LIMINE_DIR)" "$(OUTPUT)"
.PHONY: bootstrap-kernel
bootstrap-kernel: holypkg
@test -n "$(KERNEL_IMAGE)" && test -n "$(KERNEL_VERSION)" && test -n "$(OUTPUT)" || { echo 'bootstrap-kernel requires KERNEL_IMAGE, KERNEL_VERSION and OUTPUT' >&2; exit 2; }
sh tools/bootstrap-kernel.sh ./holypkg "$(KERNEL_IMAGE)" "$(KERNEL_VERSION)" "$(or $(ARCH),x86_64)" "$(or $(MODULES_DIR),-)" "$(OUTPUT)"
.PHONY: source-ready-core
source-ready-core: holypkg
@test -n "$(OUTPUT)" && test -n "$(SOURCE_ALIAS)" && test -n "$(SOURCE_URL)" && \
test -n "$(BUSYBOX_PACKAGE)" && test -n "$(DINIT_PACKAGE)" && \
test -n "$(MDEVD_PACKAGE)" && test -n "$(GLIBC_PACKAGE)" && \
test -n "$(MUSL_PACKAGE)" || { echo 'source-ready-core requires output, source and five package inputs' >&2; exit 2; }
sh tools/source-ready-core.sh ./holypkg "$(OUTPUT)" "$(SOURCE_ALIAS)" "$(SOURCE_URL)" \
"$(BUSYBOX_PACKAGE)" "$(DINIT_PACKAGE)" "$(MDEVD_PACKAGE)" \
"$(GLIBC_PACKAGE)" "$(MUSL_PACKAGE)"
.PHONY: check-image-source
check-image-source: holypkg holyinstall holygetiso
sh tests/image-source.sh ./holypkg
.PHONY: check-run
check-run: holypkg
sh tests/run.sh ./holypkg
.PHONY: check-repo-sign
check-repo-sign: holypkg
sh tests/repo-sign.sh ./holypkg
.PHONY: check-repo-closure
check-repo-closure: holypkg
sh tests/repo-closure.sh ./holypkg
.PHONY: check-git-source
check-git-source: holypkg holygetiso
sh tests/git-source.sh ./holypkg
sh tests/install-source-stage.sh ./holypkg
.PHONY: bootstrap-storage
bootstrap-storage: holypkg
ARCH="$(or $(ARCH),x86_64)" sh tools/bootstrap-storage.sh ./holypkg "$(UTIL_LINUX_SOURCE)" "$(DOSFSTOOLS_SOURCE)" "$(E2FSPROGS_SOURCE)" "$(LIMINE_BINARY)" "$(STATIC_PREFIX)" "$(or $(OUTPUT),out/storage-bootstrap)"
.PHONY: check-bootstrap-storage
check-bootstrap-storage: holypkg
sh tests/bootstrap-storage.sh ./holypkg "$(or $(STORAGE_TOOLS_PACKAGE),out/storage-bootstrap/holy-storage-tools.holy)"
.PHONY: bootstrap-doas
bootstrap-doas: holypkg
ARCH="$(or $(ARCH),x86_64)" sh tools/bootstrap-doas.sh ./holypkg "$(DOAS_SOURCE)" "$(STATIC_PREFIX)" "$(or $(OUTPUT),out/doas-bootstrap)"
.PHONY: check-bootstrap-doas
check-bootstrap-doas: holypkg
sh tests/bootstrap-doas.sh ./holypkg "$(or $(DOAS_PACKAGE),out/doas-bootstrap/doas.holy)"
.PHONY: bootstrap-dinit check-bootstrap-dinit
.PHONY: bootstrap-mdevd check-bootstrap-mdevd
bootstrap-mdevd: holypkg
ARCH="$(or $(ARCH),x86_64)" STATIC_PREFIX="$(STATIC_PREFIX)" sh tools/bootstrap-mdevd.sh ./holypkg "$(INPUTS)" "$(or $(OUTPUT),out/mdevd-bootstrap)"
check-bootstrap-mdevd: holypkg
sh tests/bootstrap-mdevd.sh ./holypkg "$(or $(MDEVD_PACKAGE),out/mdevd-bootstrap/mdevd.holy)"
bootstrap-dinit: holypkg
ARCH="$(or $(ARCH),x86_64)" sh tools/bootstrap-dinit.sh ./holypkg "$(INPUTS)" "$(or $(OUTPUT),out/dinit-bootstrap)"
check-bootstrap-dinit: holypkg
sh tests/bootstrap-dinit.sh ./holypkg "$(or $(DINIT_PACKAGE),out/dinit-bootstrap/dinit.holy)" "$(or $(BUSYBOX_PACKAGE),out/busybox-bootstrap/busybox.holy)"
bootstrap-busybox: holypkg
ARCH="$(or $(ARCH),x86_64)" KERNEL_HEADERS="$(KERNEL_HEADERS)" sh tools/bootstrap-busybox.sh ./holypkg "$(INPUTS)" "$(or $(OUTPUT),out/busybox-bootstrap)"
check-bootstrap-busybox: holypkg
sh tests/bootstrap-busybox.sh ./holypkg "$(or $(BUSYBOX_PACKAGE),out/busybox-bootstrap/busybox.holy)"
check-static-core:
sh tests/static-core.sh "$(or $(STATIC_HOLYPKG),./holypkg)" "$(or $(BUSYBOX_PACKAGE),out/busybox-bootstrap/busybox.holy)" "$(DINIT_PACKAGE)"
.PHONY: check-libc-recovery
check-libc-recovery:
@test -x "$(STATIC_HOLYPKG)" && test -x "$(MUSL_CC)" && test -f "$(MUSL_PACKAGE)" || { echo 'STATIC_HOLYPKG, MUSL_CC and MUSL_PACKAGE are required' >&2; exit 6; }
HOLY_TEST_DYNAMIC_CHROOT=1 HOLY_TEST_STATIC_RECOVERY=1 GLIBC_PACKAGE="$(GLIBC_PACKAGE)" MUSL_CC="$(MUSL_CC)" MUSL_PACKAGE="$(MUSL_PACKAGE)" sh tests/dynamic.sh "$(STATIC_HOLYPKG)"
.PHONY: check-static-import
check-static-import:
@test -x "$(STATIC_HOLYPKG)" || { echo 'STATIC_HOLYPKG is required' >&2; exit 6; }
python3 tests/static-import.py "$(STATIC_HOLYPKG)"
.PHONY: check-recipe
check-recipe: holypkg
python3 tests/recipe.py ./holypkg
.PHONY: check-pkgbuild
check-pkgbuild: holypkg
python3 tests/pkgbuild.py ./holypkg
.PHONY: check-void
check-void: holypkg
python3 tests/void.py ./holypkg
.PHONY: check-aports
check-aports: holypkg
python3 tests/aports.py ./holypkg
.PHONY: check-slackbuild
check-slackbuild: holypkg
python3 tests/slackbuild.py ./holypkg
.PHONY: check-rpmspec
check-rpmspec: holypkg
python3 tests/rpmspec.py ./holypkg
.PHONY: check-debsrc
check-debsrc: holypkg
python3 tests/debsrc.py ./holypkg
.PHONY: check-gentoo
check-gentoo: holypkg
python3 tests/gentoo.py ./holypkg
.PHONY: check-pacstall
check-pacstall: holypkg
python3 tests/pacstall.py ./holypkg
.PHONY: check-flatpak
check-flatpak: holypkg
python3 tests/flatpak.py ./holypkg
.PHONY: check-scoop
check-scoop: holypkg
python3 tests/scoop.py ./holypkg
.PHONY: check-nix
check-nix: holypkg
python3 tests/nix.py ./holypkg
.PHONY: check-eopkg
check-eopkg: holypkg
python3 tests/eopkg.py ./holypkg
.PHONY: check-conflict
check-conflict: holypkg
python3 tests/conflict.py ./holypkg
.PHONY: check-split
check-split: holypkg
python3 tests/split.py ./holypkg
.PHONY: check-debug
check-debug: holypkg
python3 tests/debug.py ./holypkg
.PHONY: check-closure
check-closure: holypkg
python3 tests/closure.py ./holypkg
.PHONY: check-cc
check-cc:
@for cc in tcc gcc clang; do command -v $$cc >/dev/null || { echo "$$cc required for the compiler fixture" >&2; exit 6; }; done
sh tests/compilers.sh
.PHONY: check-winget
check-winget: holypkg
python3 tests/winget.py ./holypkg
.PHONY: check-rpm
check-rpm: holypkg tests/rpm-version-helper
./tests/rpm-version-helper
python3 tests/rpm-import.py ./holypkg
python3 tests/rpm-md.py ./holypkg
tests/rpm-version-helper: tests/rpm-version.c backends/rpm-version.c backends/rpm-version.h .build-config
$(CC) $(CPPFLAGS) $(CFLAGS) $(SOLV_CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic $(LDFLAGS) -o $@ tests/rpm-version.c backends/rpm-version.c $(SOLV_LIBS)
.PHONY: check-xbps-import
check-xbps-import: holypkg
python3 tests/xbps-import.py ./holypkg
.PHONY: check-xbps-version
check-xbps-version: tests/xbps-version-helper
./tests/xbps-version-helper
.PHONY: check-xbps-index
check-xbps-index: holypkg
@command -v zstd >/dev/null && command -v openssl >/dev/null || { echo 'zstd and openssl required for XBPS fixture' >&2; exit 6; }
python3 tests/xbps-index.py ./holypkg
tests/xbps-version-helper: tests/xbps-version.c backends/xbps-version.c backends/xbps-version.h .build-config
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic $(LDFLAGS) -o $@ tests/xbps-version.c backends/xbps-version.c
.PHONY: check-static-network
check-static-network:
python3 tests/static-network.py "$(or $(STATIC_HOLYPKG),./holypkg)" "$(or $(BUSYBOX_PACKAGE),out/busybox-bootstrap/busybox.holy)" "$(or $(REPORT),out/static-network.json)"
.PHONY: static-deps static check-static-target
check-static-target:
@test -x "$(STATIC_HOLYPKG)" && test -x "$(MUSL_CC)" || { echo 'STATIC_HOLYPKG and MUSL_CC are required' >&2; exit 6; }
python3 tests/target.py "$(STATIC_HOLYPKG)" "$(or $(ARCH),x86_64)" "$(MUSL_CC)"
static-deps:
ARCH="$(or $(ARCH),x86_64)" sh tools/static-deps.sh "$(INPUTS)" "$(or $(OUTPUT),out/static-deps)" "$(KERNEL_HEADERS)"
static:
@test -n "$(STATIC_DEPS)" || { echo 'STATIC_DEPS must name the musl dependency prefix' >&2; exit 6; }
@test -x "$(STATIC_DEPS)/bin/holy-musl-gcc" && grep -qx 'exit 0' "$(STATIC_DEPS)/build.record" || { echo 'static dependency build is incomplete' >&2; exit 6; }
$(MAKE) clean
$(MAKE) CC="$(STATIC_DEPS)/bin/holy-musl-gcc" CPPFLAGS="-isystem $(STATIC_DEPS)/include" RPM_CFLAGS= RPM_LIBS= RPMMD_CFLAGS= RPMMD_LIBS= SOLV_CFLAGS="-isystem $(STATIC_DEPS)/include" SOLV_LIBS="-lsolv -lz" LDFLAGS="-static -L$(STATIC_DEPS)/lib" LDLIBS="-Wl,--start-group -larchive -lelf -lcurl -lplist-2.0 -lssl -lcrypto -llz4 -lzstd -llzma -lbz2 -lz -leu -Wl,--end-group -lpthread -ldl" all
HOLY_OBJECTS = src/main.o src/config.o src/package.o src/verify.o src/fetch.o src/extract.o src/check.o src/script.o src/elf.o src/scan.o src/stage.o src/repo.o src/sign.o src/git.o src/preview.o src/deps.o src/provides.o src/cache.o src/state.o src/solve.o src/resolve.o src/install.o src/pack.o src/docs.o src/graph.o src/source.o src/change.o src/import.o src/appimage.o src/up.o src/version.o src/run.o src/recipe.o src/image.o src/snap.o src/scoop.o src/artifact.o src/winget.o src/nix.o src/split.o src/eopkg.o src/conflict.o backends/pkgbuild.o backends/shrecipe.o backends/voidsrc.o backends/aports.o backends/slackbuild.o backends/rpmspec.o backends/debsrc.o backends/gentoo.o backends/pacstall.o backends/flatpak.o backends/pacman.o backends/pacman-version.o backends/deb-version.o backends/apk-version.o backends/xbps-version.o backends/rpm-version.o backends/rpm-md.o backends/xbps.o backends/apk.o backends/apt.o backends/apt-release.o backends/apt-bind.o
holypkg: $(HOLY_OBJECTS)
$(CC) $(LDFLAGS) -o $@ $^ $(LDLIBS) $(SOLV_LIBS)
src/solve.o: src/solve.c $(wildcard src/*.h) .build-config
$(CC) $(CPPFLAGS) $(CFLAGS) $(SOLV_CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic -c -o $@ $<
backends/rpm-version.o: backends/rpm-version.c backends/rpm-version.h .build-config
$(CC) $(CPPFLAGS) $(CFLAGS) $(SOLV_CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic -c -o $@ $<
backends/%.o: backends/%.c $(wildcard backends/*.h) .build-config
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic -c -o $@ $<
src/%.o: src/%.c $(wildcard src/*.h) $(wildcard backends/*.h) .build-config
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic -c -o $@ $<
.PHONY: check-init
check-init: holy-init
@./holy-init >/dev/null 2>&1; test $$? -eq 2
.PHONY: check-hooks
check-hooks: holypkg
CC="$(CC)" sh tests/hooks.sh ./holypkg
check: check-pacman check-deb check-apt check-slackware check-apk check-xbps-import check-xbps-version check-xbps-index check-appimage check-snap check-run check-recipe check-split check-debug check-pkgbuild check-void check-aports check-slackbuild check-rpmspec check-debsrc check-gentoo check-pacstall check-flatpak check-scoop check-winget check-nix check-eopkg check-conflict check-closure check-cc check-hooks check-apk-version check-apk-index check-apk-fetch check-native-version $(if $(RPM_LIBS),check-rpm) holypkg tests/resolution check-init check-solver check-install-payload check-install check-https check-git-source check-repo-closure
./tests/resolution
sh tests/config.sh ./holypkg
sh tests/source.sh ./holypkg
sh tests/source-instances.sh ./holypkg
sh tests/package.sh ./holypkg
sh tests/installed-scripts.sh ./holypkg
sh tests/docs.sh
sh tests/installed-docs.sh ./holypkg
CC="$(CC)" sh tests/elf.sh ./holypkg
sh tests/repo.sh ./holypkg
sh tests/state.sh ./holypkg
sh tests/sets.sh ./holypkg
sh tests/add.sh ./holypkg
sh tests/update.sh ./holypkg
sh tests/up.sh ./holypkg
sh tests/update-privileged.sh ./holypkg
sh tests/directories.sh ./holypkg
python3 tests/hardlinks.py ./holypkg ./tests/install-helper
python3 tests/hardlink-updates.py ./holypkg
python3 tests/architecture.py ./holypkg
sh tests/orphan.sh ./holypkg
sh tests/dynamic.sh ./holypkg
sh tests/resolve.sh ./holypkg ./tests/resolution
sh tests/elf-resolve.sh ./holypkg ./tests/resolution
sh tests/static.sh ./holypkg
.PHONY: check-pacman
check-pacman: holypkg
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic $(LDFLAGS) -o tests/pacman-helper tests/pacman.c backends/pacman.c backends/pacman-version.c
./tests/pacman-helper
python3 tests/import.py ./holypkg
python3 tests/versions.py ./holypkg
.PHONY: check-deb
check-deb: holypkg
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic $(LDFLAGS) -o tests/deb-version-helper tests/deb-version.c backends/deb-version.c
./tests/deb-version-helper
python3 tests/import-deb.py ./holypkg
.PHONY: check-slackware
check-slackware: holypkg
python3 tests/import-slackware.py ./holypkg
.PHONY: check-apk
check-apk: holypkg
python3 tests/import-apk.py ./holypkg
.PHONY: check-apt
check-apt: holypkg
python3 tests/apt.py ./holypkg
.PHONY: check-appimage
check-appimage: holypkg
python3 tests/appimage.py ./holypkg
.PHONY: check-snap
check-snap: holypkg
python3 tests/snap.py ./holypkg
.PHONY: check-apk-version
check-apk-version: tests/apk-version-helper
python3 tests/apk-version.py ./tests/apk-version-helper
.PHONY: check-apk-index
check-apk-index: holypkg
python3 tests/apk-index.py ./holypkg
.PHONY: check-apk-fetch
check-apk-fetch: holypkg
python3 tests/apk-fetch.py ./holypkg
tests/apk-version-helper: tests/apk-version.c backends/apk-version.c backends/apk-version.h .build-config
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic $(LDFLAGS) -o $@ tests/apk-version.c backends/apk-version.c
.PHONY: check-native-version
check-native-version: tests/native-version-helper
./tests/native-version-helper
tests/native-version-helper: tests/native-version.c src/version.c src/version.h .build-config
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic $(LDFLAGS) -o $@ tests/native-version.c src/version.c
check-fixtures: check
check-root: check-install-payload
sh tests/installed-scripts.sh ./holypkg
python3 tests/hardlinks.py ./holypkg ./tests/install-helper
python3 tests/hardlink-updates.py ./holypkg
python3 tests/architecture.py ./holypkg
sh tests/state.sh ./holypkg
sh tests/sets.sh ./holypkg
sh tests/add.sh ./holypkg
sh tests/update-privileged.sh ./holypkg
sh tests/orphan.sh ./holypkg
sh tests/dynamic.sh ./holypkg
sh tests/static.sh ./holypkg
check-install: holyinstall holypkg
sh tests/installer.sh ./holyinstall ./holypkg
python3 tests/installer-disk.py ./holyinstall
sh tests/install-source-stage.sh ./holypkg
.PHONY: check-install-vm
check-install-vm:
@test -n "$(ISO)" && test -n "$(BOOT_PLAN)" || { echo 'ISO and BOOT_PLAN required' >&2; exit 6; }
ARCH="$(or $(ARCH),x86_64)" ISO="$(ISO)" BOOT_PLAN="$(BOOT_PLAN)" REPORT_DIR="$(or $(REPORT_DIR),/tmp)" INSTALL_FIRMWARE="$(or $(INSTALL_FIRMWARE),$(if $(filter i686,$(ARCH)),bios,both))" UEFI_CODE="$(UEFI_CODE)" UEFI_VARS="$(UEFI_VARS)" python3 tests/install-vm.py
check-qemu:
ARCH="$(ARCH)" ISO="$(or $(ISO),out/holy-$(ARCH).iso)" BOOT_PLAN="$(BOOT_PLAN)" QEMU_TIMEOUT="$(or $(QEMU_TIMEOUT),120)" sh tests/qemu.sh
check-qemu-gate:
sh tests/qemu-gate.sh
check-hardware:
HARDWARE_SCOPE="$(or $(HARDWARE_SCOPE),holy)" REPORT="$(or $(REPORT),out/hardware.json)" python3 tests/hardware.py
.PHONY: check-recovery-matrix
.PHONY: check-image-docs
check-image-docs:
sh tests/image-docs.sh "$(IMAGE_DIRECTORY)"
check-recovery-matrix:
@test -n "$(REPORT)" && test -n "$(REPORTS)" || { echo 'REPORT and eight REPORTS paths are required' >&2; exit 6; }
python3 tests/recovery-matrix.py --output "$(REPORT)" $(REPORTS)
check-https: holypkg
@command -v python3 >/dev/null && command -v openssl >/dev/null || { echo 'python3 and openssl required for HTTPS fixture' >&2; exit 6; }
sh tests/https.sh ./holypkg
check-install-payload: holypkg
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic -Isrc -o tests/install-helper tests/install.c src/install.c src/script.o src/elf.o src/change.c src/verify.c src/package.c src/stage.c src/config.c src/version.c backends/rpm-version.o $(LDFLAGS) -larchive -lcrypto -lelf $(SOLV_LIBS)
sh tests/install.sh ./tests/install-helper ./holypkg
sh tests/symlinks.sh ./holypkg
sh tests/change.sh ./tests/install-helper ./holypkg
check-solver:
@pkg-config --exists libsolv || { echo 'libsolv development files required' >&2; exit 6; }
$(CC) $(CPPFLAGS) $(CFLAGS) $(SOLV_CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic -Isrc -o tests/solver tests/solver.c src/solve.c $(LDFLAGS) $(SOLV_LIBS)
./tests/solver
man:
@for page in $(MANPAGES); do groff -Tascii -man "$$page" > /dev/null || exit; done
llm.txt: $(MANPAGES) tools/docs.sh
sh tools/docs.sh "$@" $(MANPAGES)
install: all llm.txt
install -d "$(DESTDIR)$(PREFIX)/bin" "$(DESTDIR)$(PREFIX)/share/man/man5" "$(DESTDIR)$(PREFIX)/share/man/man7" "$(DESTDIR)$(PREFIX)/share/man/man8" "$(DESTDIR)$(PREFIX)/share/holy"
install -m 755 holypkg holy-init holyinstall "$(DESTDIR)$(PREFIX)/bin/"
@for page in $(MANPAGES); do install -m 644 "$$page" "$(DESTDIR)$(PREFIX)/share/man/man$${page##*.}/" || exit; done
install -m 644 llm.txt "$(DESTDIR)$(PREFIX)/share/holy/llm.txt"
tests/resolution: tests/resolution.c $(filter-out src/main.o,$(HOLY_OBJECTS)) holypkg
$(CC) $(CPPFLAGS) $(CFLAGS) -std=c99 -Wall -Wextra -Werror -pedantic $(LDFLAGS) -o $@ $< $(filter-out src/main.o,$(HOLY_OBJECTS)) $(LDLIBS) $(SOLV_LIBS)
clean:
rm -f holy-init
rm -f holyinstall src/disk.o
rm -f holygetiso src/getiso.o
rm -f .build-config .build-config.tmp .build-config.tmp.*
rm -f holypkg tests/resolution tests/solver tests/install-helper tests/pacman-helper tests/deb-version-helper tests/apk-version-helper tests/xbps-version-helper tests/rpm-version-helper tests/native-version-helper $(HOLY_OBJECTS)