X-Git-Url: https://git.distorted.org.uk/~mdw/distorted-chroot/blobdiff_plain/fd0f20e15d713daf7f0cb2cfe429edbcc50574fb..3e5b03e2c0f0a3ddf3a56136f475e99d44432f18:/Makefile diff --git a/Makefile b/Makefile index dd96989..08906ba 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,8 @@ all:: clean:: -.PHONY: all clean +check:: +.PHONY: all clean check .SECONDEXPANSION: #sorry ###-------------------------------------------------------------------------- @@ -34,14 +35,22 @@ clean:: CONFIG_VARS = +## Level of pickiness to aspire to. +NOTIFY_FATAL = 1 + +## Path to this working tree. +CONFIG_VARS += HERE +HERE = $(abspath .) + ## Volume group from which to allocate chroot volumes and snapshots. CONFIG_VARS += VG LVPREFIX VG = vg-$(shell hostname) LVPREFIX = ## Logical volume size, as an LVM option. -CONFIG_VARS += LVSZ +CONFIG_VARS += LVSZ SNAPOPT LVSZ = -L8G +SNAPOPT = -L8G ## Debian mirror. CONFIG_VARS += DEBMIRROR @@ -88,6 +97,19 @@ FOREIGN_CHROOTS = $(foreach a,$(FOREIGN_ARCHS), \ $(foreach d,$(or $($a_DISTS) $(DISTS)), \ $d-$a)) +## Extra packages to be installed in chroots. +CONFIG_VARS += BASE_PACKAGES NATIVE_BASE_PACKAGES FOREIGN_BASE_PACKAGES +BASE_PACKAGES = ccache +BASE_PACKAGES += eatmydata fakeroot +BASE_PACKAGES += locales tzdata +BASE_PACKAGES += libfile-fcntllock-perl +NATIVE_BASE_PACKAGES = build-essential +FOREIGN_BASE_PACKAGES = + +## Local packages to be compiled and installed in chroots. Archives can be +## found in `pkg/'. +LOCALPKGS = mLib checkpath + ## Which host architecture to use for foreign architectures. It turns out ## that it's best to use a Qemu with the same host bitness as the target ## architecture; otherwise it has to do a difficult job of converting @@ -142,12 +164,51 @@ SCHROOT_NSSDATABASES = passwd shadow group gshadow -include local.mk ## All chroot names. -CONFIG_VARS += ALL_CHROOTS +CONFIG_VARS += ALL_ARCHS ALL_CHROOTS +ALL_ARCHS = $(NATIVE_ARCHS) $(FOREIGN_ARCHS) ALL_CHROOTS = $(NATIVE_CHROOTS) $(FOREIGN_CHROOTS) ###-------------------------------------------------------------------------- ### Utilities. +## Hack to force rebuilding. +_force: +.PHONY: _force + +## Hack to not delimit function arguments. (Ugh!) +comma = , + +## Silent-rules machinery. +V = 0 +V_AT = $(V_AT_$V) +V_AT_0 = @ +v_print = $(call v_print_$V,$1,$2) +v_print_0 = printf " %-8s %s\n" "$1" $(call squote,$2); +v_tag = $(V_AT)$(call v_print,$1,$@) +v_log = $(call v_log_$V,$1,$2) +v_log_ = $(call v_log_1,$1,$2) +v_log_0 = $2 >log/$1.log 2>&1 +v_log_1 = $(call catchrc,$(call throwrc,$2) 2>&1 | tee log/$1.log) +v_echo = $(call v_echo_$V,$1) +v_echo_0 = : +v_echo_1 = printf "%s\n" $1 +CLEANFILES += log/*.log + +## Oh, shut up. +SILENCE_LVM = \ + LVM_SUPPRESS_FD_WARNINGS=1; export LVM_SUPPRESS_FD_WARNINGS + +## $(call catchrc,...$(call throwrc,CMD)...) +## +## Catch the exit status of some subpart of a complicated shell rune. +catchrc = (exec 3>&1; exit $$({ $1; } 4>&1 >&3 3>&-)) +throwrc = { $1; echo $$? >&4; } + +## $(call squote,TXT) +## +## Single-quote TXT. +squote = '$(subst ','\\'',$1)' + ## $(call chroot-dist,D-A) -> D ## $(call chroot-arch,D-A) -> A ## @@ -155,24 +216,42 @@ ALL_CHROOTS = $(NATIVE_CHROOTS) $(FOREIGN_CHROOTS) chroot-dist = $(patsubst %/,%,$(dir $(subst -,/,$1))) chroot-arch = $(notdir $(subst -,/,$1)) +## $(call package-dir-name,P-V) -> P +## $(call package-dir-version,P-V) -> V +## +## Parse (source) package directory names. +package-dir-name = $(sort $(foreach p,$(LOCALPKGS),$(if $(filter $p-$($p_VERSION),$1),$p))) +package-dir-version = $($(call package-dir-name,$1)_VERSION) + +## $(call package-dir,P-V.A) -> P-V +## $(call package-name,P-V.A) -> P +## $(call package-version,P-V.A) -> V +## $(call package-arch,P-V.A) -> A +## +## Parse package stamp names. +package-dir = $(basename $1) +package-name = $(call package-dir-name,$(call package-dir,$1)) +package-version = $(call package-dir-version,$(call package-dir,$1)) +package-arch = $(patsubst .%,%,$(suffix $1)) + ## $(call native-chroot-p,D-A) -> D | ## ## Answer whether D-A is a native chroot. -native-chroot-p = $(filter $(call chroot-arch,$1), $(NATIVE_ARCHS)) +native-chroot-p = $(filter $(call chroot-arch,$1),$(NATIVE_ARCHS)) ## $(call chroot-qemuhost,D-A) -> AA ## ## Answer the apporopriate Qemu host architecture for foreign chroot D-A. chroot-qemuhost = $($(call chroot-arch,$1)_QEMUHOST) -## $(call chroot-deps,PRE,D-A) -> PRE/DD-AA ... | +## $(call chroot-deps,PRE,D-A) -> PREDD-AA ... | ## ## Answer a list of additional dependencies for the chroot D-A: specifically, ## if D-A is foreign then include PRE/DD-AA entries for the tools ## architecture, and Qemu host architecture (if that's different). chroot-deps = $(if $(call native-chroot-p,$2),, \ - $(addprefix $1/$(call chroot-dist,$2)-,\ - $(sort $(call chroot-toolsarch,$2) \ + $(addprefix $1$(call chroot-dist,$2)-,\ + $(sort $(TOOLSARCH) \ $(call chroot-qemuhost,$2)))) ## Substituting placeholders in files. @@ -188,18 +267,73 @@ subst-file = { \ sed "$$substs"; \ } -## Silent-rules machinery. -V = 0 -V_AT = $(V_AT_$V) -V_AT_0 = @ -v_print = $(call v_print_$V,$1,$2) -v_print_0 = printf " %-8s %s\n" "$1" "$2"; -v_tag = $(V_AT)$(call v_print,$1,$@) -v_log = $(call v_log_$V,$1) -v_log_ = $(call v_log_1,$1) -v_log_0 = >$1.log 2>&1 -v_log_1 = 2>&1 | tee $1.log -CLEANFILES += *.log +### $(call symlink-ok-p,LINK,DEST) +### +### Expand to `t' if LINK is a symbolic link to DEST, and empty otherwise. +symlink-ok-p = $(shell \ + case $$(readlink 2>/dev/null $(patsubst %/,%,$1)) in ($2) echo t ;; esac) + +### $(call general-notify,SEV,COLOUR,PREFIX,MSG) +### +### Report a message, highlighted in the right way, and maybe fail +general-notify = { \ + echo "$$(tput bold; tput setaf $2)$3 "$4"$$(tput sgr0; tput op)"; \ + if [ "$1" -le "$(NOTIFY_FATAL)" ]; then exit 2; fi; \ +} + +### $(call report/SEV,MSG) +### +### Report a notification of a particular severity. +notify/INFO = $(call general-notify,3,6,---,$1) +notify/WARN = $(call general-notify,2,5,???,$1) +notify/ERR = $(call general-notify,1,1,!!!,$1) + +## $(call check,SEV,MSG,UNLESS) +## +## If UNLESS completes successfully, all is OK; otherwise print MSG to stderr +## and fail. +check = @{ \ + $(call v_echo,'check: '$(call squote,$3)''); \ + if ! { $3; }; then $(call notify/$1,$2); fi; \ +} + +## $(call check-executable,SEV,PATH) +## +## Verify that PATH is an executable program. +check-executable = $(call check,$1,"\`$2' is not an executable", \ + [ -x "$2" ]) + +## $(call check-mountpoint,SEV,DIR) +## +## Verify that DIR is a mountpoint. +check-mountpoint = $(call check,$1,"\`$2' is not a mount point", \ + mountpoint -q "$2") + +## $(call check-symlink,SEV,LINK,DEST) +## +## Verify that LINK is a symbolic link pointing to DEST. +check-symlink = $(call check,$1,"\`$2' is not a link to \`$3'", \ + [ -L "$2" ] && [ "$$(readlink "$2")" = "$3" ]) + +###-------------------------------------------------------------------------- +### Scripts. + +SCRIPTS += mkbuildchroot +SCRIPTS += mkchrootconf +SCRIPTS += install-cross-tools update-cross-tools + +SUBST_SCRIPTS = $(addprefix $(STATE)/bin/,$(SCRIPTS)) +all:: $(SUBST_SCRIPTS) +$(SUBST_SCRIPTS): $(STATE)/bin/%: bin/% $(STATE)/config.sh + $(V_AT)mkdir -p $(dir $@) + $(call v_tag,SUBST){ \ + sed \ + -e '2i### GENERATED by distorted-chroot: do not edit' \ + -e '/@@@config@@@/ {' \ + -e 'r $(STATE)/config.sh' \ + -e 'd'\ + -e '}' $<; \ + } >$@.new && chmod +x $@.new && mv $@.new $@ ###-------------------------------------------------------------------------- ### APT configuration. @@ -233,6 +367,29 @@ $(APT_CONFIGS): $(LOCAL)/etc/apt/apt.conf.d/%: \ $$(or $$($$*_APTCONFSRC) $$(APTCONF_DIR)/$$*) $(V_AT)mkdir -p $(dir $@) $(call v_tag,COPY)cp $< $@.new && mv $@.new $@ +clean::; rm -f $(APT_CONFIGS) + +###-------------------------------------------------------------------------- +### Build hacks. + +check::; $(call check-executable,ERR,/usr/bin/eatmydata) + +EATMYDATA_HACKS += apt-get aptitude dpkg +SYMLINK_EATMYDATA_HACKS = $(addprefix $(LOCAL)/hacks/,$(EATMYDATA_HACKS)) +all:: $(SYMLINK_EATMYDATA_HACKS) +$(SYMLINK_EATMYDATA_HACKS): $(LOCAL)/hacks/%: \ + $$(if $$(call symlink-ok-p,$$@,/usr/bin/eatmydata),,_force) + $(V_AT)mkdir -p $(dir $@) + $(call v_tag,SYMLINK)ln -sf /usr/bin/eatmydata $@.new && mv $@.new $@ +clean::; rm -f $(SYMLINK_EATMYDATA_HACKS) + +SCRIPT_HACKS += buildwrap +COPY_SCRIPT_HACKS = $(addprefix $(LOCAL)/hacks/,$(SCRIPT_HACKS)) +all:: $(COPY_SCRIPT_HACKS) +$(COPY_SCRIPT_HACKS): $(LOCAL)/hacks/%: bin/% + $(V_AT)mkdir -p $(dir $@) + $(call v_tag,COPY)cp $< $@.new && mv $@.new $@ +clean::; rm -f $(COPY_SCRIPT_HACKS) ###-------------------------------------------------------------------------- ### `schroot' and `sbuild' configuration. @@ -241,6 +398,10 @@ all:: schroot-config schroot-config:: .PHONY: schroot-config +check::; $(call check-mountpoint,WARN,/var/lib/sbuild/build) +check::; $(call check-symlink,WARN,/build,/var/lib/sbuild/build) +check::; $(call check-symlink,ERR,/schroot,/run/schroot/mount) + %print-varlist = { \ echo "\#\#\# -*-sh-*- GENERATED by distorted-chroot: do not edit"; \ $(foreach v,$1, echo $v=\''$(subst ','\'\\\'\'',$($v))'\';) \ @@ -260,9 +421,11 @@ $(STATE)/config.sh: $(schroot-config_FILE) $(call v_tag,SYMLINK)ln -sf $(notdir $<) $@ schroot-config:: $(STATE)/etc/schroot/sbuild.schroot -$(STATE)/etc/schroot/sbuild.schroot: $(STATE)/config.sh bin/mkchrootconf +$(STATE)/etc/schroot/sbuild.schroot: $(STATE)/bin/mkchrootconf $(V_AT)mkdir -p $(dir $@) - $(call v_tag,GEN)bin/mkchrootconf >$@.new && mv $@.new $@ + $(call v_tag,GEN)$(STATE)/bin/mkchrootconf >$@.new && \ + $(ROOTLY) chown root:root $@.new && mv $@.new $@ +check::; $(call check-symlink,WARN,/etc/schroot/chroot.d/sbuild,$(HERE)/$(STATE)/etc/schroot/sbuild.schroot) schroot-config:: $(STATE)/etc/schroot/sbuild.profile/copyfiles $(STATE)/etc/schroot/sbuild.profile/copyfiles: $(schroot-config_STAMP) @@ -287,31 +450,199 @@ $(STATE)/etc/schroot/sbuild.profile/fstab: \ $(call v_tag,SUBST)$(call subst-file,### -*-conf-*-) \ <$< >$@.new && mv $@.new $@ +check::; $(call check-symlink,WARN,/etc/schroot/sbuild,$(HERE)/$(STATE)/etc/schroot/sbuild.profile) + schroot-config:: $(STATE)/etc/sbuild.conf $(STATE)/etc/sbuild.conf: etc/sbuild.conf.in $(schroot-config_STAMP) $(V_AT)mkdir -p $(dir $@) $(call v_tag,SUBST)$(call subst-file,### -*-perl-*-) \ <$< >$@.new && mv $@.new $@ +SCHROOT_SCRIPTS += 11private +SCHROOT_SCRIPTS += 15binfmt +SCHROOT_SCRIPTS += 51chrootenv +COPY_SCHROOT_SCRIPTS = $(addprefix $(STATE)/etc/schroot/setup.d/,$(SCHROOT_SCRIPTS)) +schroot-config:: $(COPY_SCHROOT_SCRIPTS) +$(COPY_SCHROOT_SCRIPTS): \ + $(STATE)/etc/schroot/setup.d/%: etc/schroot-scripts/% + $(V_AT)mkdir -p $(dir $@) + $(call v_tag,COPY)cp $< $@.new && mv $@.new $@ + +CHECK_SCHROOT_SCRIPTS = $(addprefix check-script/,$(SCHROOT_SCRIPTS)) +check:: $(CHECK_SCHROOT_SCRIPTS) +$(CHECK_SCHROOT_SCRIPTS): check-script/%: + $(call check-symlink,WARN,/etc/schroot/setup.d/$*,$(HERE)/$(STATE)/etc/schroot/setup.d/$*) +.PHONY: $(addprefix check-script/,$(SCHROOT_SCRIPTS)) + +###-------------------------------------------------------------------------- +### `/usr/local/' structure. + +LOCAL_COMMON_DIRS = share/ src/ +all:: $(foreach d,$(LOCAL_COMMON_DIRS),$(LOCAL)/$d) +$(foreach d,$(LOCAL_COMMON_DIRS),$(LOCAL)/$d): + $(V_AT)mkdir -p $(dir $(patsubst %/,%,$@)) + $(call v_tag,MKDIR)mkdir $@ + +LOCAL_ARCH_DIRS = bin/ etc/ games/ include/ lib/ libexec/ sbin/ +LOCAL_ARCH_LINKS = man +man_LINKDEST = share/man +all:: $(foreach a,$(ALL_ARCHS),\ + $(LOCAL)/$a/ \ + $(foreach d,$(LOCAL_ARCH_DIRS),$(LOCAL)/$a/$d) \ + $(foreach d,$(LOCAL_ARCH_LINKS),$(LOCAL)/$a/$d) \ + $(foreach d,$(LOCAL_COMMON_DIRS),$(LOCAL)/$a/$d)) + +$(foreach a,$(ALL_ARCHS),$(LOCAL)/$a/): + $(call v_tag,MKDIR)mkdir $@ +$(foreach a,$(ALL_ARCHS),\ + $(foreach d,$(LOCAL_ARCH_DIRS),$(LOCAL)/$a/$d)): + $(V_AT)mkdir -p $(dir $(patsubst %/,%,$@)) + $(call v_tag,MKDIR)mkdir $@ +$(foreach a,$(ALL_ARCHS),\ + $(foreach d,$(LOCAL_ARCH_LINKS),$(LOCAL)/$a/$d)): \ + $$(if $$(call symlink-ok-p,$$@,$$($$(notdir $$@)_LINKDEST)),,_force) + $(V_AT)mkdir -p $(notdir $@) + $(call v_tag,SYMLINK)ln -sf $($(notdir $@)_LINKDEST) $@ +$(foreach a,$(ALL_ARCHS),\ + $(foreach d,$(LOCAL_COMMON_DIRS),$(LOCAL)/$a/$d)): \ + $$(if $$(call symlink-ok-p,$$@,../$$(notdir $$(patsubst %/,%,$$@))),,_force) + $(V_AT)mkdir -p $(dir $(patsubst %/,%,$@)) + $(call v_tag,SYMLINK)ln -sf ../$(notdir $(patsubst %/,%,$@)) $(patsubst %/,%,$@) + ###-------------------------------------------------------------------------- ### Constructing chroots. +chroot-stamp = $(addprefix $(STATE)/stamp/chroot.,$1) BUILD_CHROOTS = $(addprefix chroot/,$(ALL_CHROOTS)) -CHROOT_STAMPS = $(addprefix $(STATE)/stamp/chroot.,$(ALL_CHROOTS)) -all:: setup-chroots +CHROOT_STAMPS = $(call chroot-stamp,$(ALL_CHROOTS)) setup-chroots: $(BUILD_CHROOTS) $(BUILD_CHROOTS): chroot/%: $(STATE)/stamp/chroot.% .PHONY: setup-chroots $(BUILD_CHROOTS) -$(CHROOT_STAMPS): $(STATE)/stamp/chroot.%: $(STATE)/config.sh bin/mkbuildchroot - $(call v_tag,CHROOT)bin/mkbuildchroot \ - $(call chroot-dist,$*) $(call chroot-arch,$*) \ - $(call v_log,setup-chroot.$*) +$(CHROOT_STAMPS): $(STATE)/stamp/chroot.%: \ + $$(call chroot-deps,$(STATE)/stamp/cross-tools.,$$*) + $(V_AT)mkdir -p $(dir $@) log/ + $(MAKE) \ + $(STATE)/bin/mkbuildchroot $(STATE)/bin/install-cross-tools \ + $(STATE)/etc/schroot/sbuild.schroot + $(call v_tag,CHROOT)$(call v_log,setup-chroot.$*, \ + $(SILENCE_LVM); \ + $(ROOTLY) $(STATE)/bin/mkbuildchroot \ + $(call chroot-dist,$*) $(call chroot-arch,$*)) + $(V_AT)touch $@ + +UPDATE_CHROOTS = $(addprefix update/,$(ALL_CHROOTS)) +update-chroots: $(UPDATE_CHROOTS) +$(UPDATE_CHROOTS): update/%: $(STATE)/stamp/chroot.% + $(V_AT)mkdir -p log/ + $(MAKE) $(STATE)/bin/install-cross-tools + $(call v_tag,UPDATE)$(call v_log,update-chroot.$*, { \ + schroot -uroot -csource:$(LVPREFIX)$* -- \ + apt-get update && \ + schroot -uroot -csource:$(LVPREFIX)$* -- \ + apt-get -y dist-upgrade && \ + schroot -uroot -csource:$(LVPREFIX)$* -- \ + apt-get -y autoremove && \ + schroot -uroot -csource:$(LVPREFIX)$* -- \ + apt-get -y clean && \ + $(if $(filter $*,$(FOREIGN_CHROOTS)), \ + $(ROOTLY) $(STATE)/bin/install-cross-tools \ + $(call chroot-dist,$*) \ + $(call chroot-arch,$*), \ + :); \ + }) +.PHONY: update-chroots $(UPDATE_CHROOTS) + +cross-tools-stamp = $(addprefix $(STATE)/stamp/cross-tools.,$1) +CROSS_TOOLS = $(addprefix cross-tools/,$(NATIVE_CHROOTS)) +UPDATE_CROSS_TOOLS = $(addprefix update-cross-tools/,$(NATIVE_CHROOTS)) +cross-tools: $(CROSS_TOOLS) +update-cross-tools: $(UPDATE_CROSS_TOOLS) +$(CROSS_TOOLS): cross-tools/%: $(STATE)/stamp/cross-tools.% +define updcross + $(V_AT)mkdir -p log/ + $(MAKE) $(STATE)/bin/update-cross-tools + $(call v_tag,UPDCROSS)$(call v_log,update-cross-tools.$*, \ + $(STATE)/bin/update-cross-tools \ + $(call chroot-dist,$*) \ + $(call chroot-arch,$*)) + $(V_AT)touch $(call cross-tools-stamp,$*) +endef +$(call cross-tools-stamp,$(NATIVE_CHROOTS)): $(STATE)/stamp/cross-tools.%: \ + $$(call chroot-stamp,$$*) + $(V_AT)mkdir -p $(dir $@) + $(updcross) +$(UPDATE_CROSS_TOOLS): update-cross-tools/%: \ + $$(call chroot-stamp,$$*) _force + $(updcross) +.PHONY: cross-tools update-cross-tools $(CROSS_TOOLS) $(UPDATE_CROSS_TOOLS) ###-------------------------------------------------------------------------- ### Installing basic custom software. - +$(foreach p,$(LOCALPKGS), $(eval $p_VERSION := $(shell \ + set -- pkg/$p-[0-9]*.tar.gz; \ + case $$#,$$1 in \ + (1,*\**) echo "NOT-FOUND"; exit 2 ;; \ + (1,*) v=$${1#pkg/$p-}; v=$${v%.tar.gz}; echo "$$v" ;; \ + (*) echo "AMBIGUOUS"; exit 2 ;; \ + esac))) + +pkg-stamp = \ + $(foreach p,$1,$(STATE)/stamp/package.$p-$($p_VERSION).$2) +unpack-pkg-stamp = \ + $(foreach p,$1,$(STATE)/stamp/unpack.$p-$($p_VERSION)) +PACKAGE_STAMPS = \ + $(foreach a,$(ALL_ARCHS),$(call pkg-stamp,$(LOCALPKGS),$a)) +INSTALL_PACKAGES = $(addprefix install/,$(LOCALPKGS)) +install-packages: $(INSTALL_PACKAGES) +$(INSTALL_PACKAGES): install/%: \ + $$(foreach a,$$(ALL_ARCHS),$$(call pkg-stamp,$$*,$$a)) + +$(foreach p,$(LOCALPKGS),$(call unpack-pkg-stamp,$p)): \ + $(STATE)/stamp/unpack.%: pkg/%.tar.gz + $(V_AT)mkdir -p $(dir $@) $(LOCAL)/src/ + $(call v_tag,UNPACK){ \ + set -e; \ + p=$(call package-dir-name,$*); \ + v=$(call package-dir-version,$*); \ + cd $(LOCAL)/src/; \ + $(ROOTLY) rm -rf $$p-*; \ + mkdir $$p-$$v.unpack; \ + (cd $$p-$$v.unpack && tar xf $(HERE)/$<); \ + mv $$p-$$v.unpack/$$p-$$v $$p-$$v; \ + rmdir $$p-$$v.unpack/; \ + cd $(HERE); \ + touch $@; \ + } + +$(PACKAGE_STAMPS): $(STATE)/stamp/package.%: \ + $$(call unpack-pkg-stamp,$$(call package-name,$$*)) \ + $$(call chroot-stamp,$$(PRIMARY_DIST)-$$(call package-arch,$$*)) + $(V_AT)mkdir -p $(dir $@) log/ + $(call v_tag,BUILD)$(call v_log,install-package.$*, { \ + $(SILENCE_LVM); \ + schroot -uroot -c$(LVPREFIX)$(PRIMARY_DIST)-$(call package-arch,$*) -- \ + sh -exc ' \ + mount -oremount$(comma)rw /usr/local.schroot; \ + eatmydata apt-get update; \ + eatmydata apt-get -y install pkg-config; \ + p=$(call package-name,$*); \ + v=$(call package-version,$*); \ + a=$(call package-arch,$*); \ + cd /usr/local/src/$$p-$$v/; \ + rm -rf build.$$a/; \ + mkdir build.$$a/; \ + cd build.$$a/; \ + ../configure PKG_CONFIG_PATH=/usr/local/lib/pkgconfig.hidden; \ + make -j4; \ + make install; \ + mkdir -p /usr/local/lib/pkgconfig.hidden; \ + mv /usr/local/lib/pkgconfig/*.pc /usr/local/lib/pkgconfig.hidden || :' && \ + schroot -uroot -csource:$(LVPREFIX)$(PRIMARY_DIST)-$(call package-arch,$*) -- \ + ldconfig; \ + }) + $(V_AT)touch $@ ###-------------------------------------------------------------------------- ### Other maintenance targets.