From 33380938770a9bbc2ef4e7b4afad49f26c097829 Mon Sep 17 00:00:00 2001 From: nosamad Date: Mon, 15 Apr 2019 06:52:52 +0200 Subject: [PATCH] adds support to force offline build fixes shell escaping changes paths to relative where possible --- Makefile | 65 +++++++++++++++++++++------------------ build/cmake.mk | 6 ++-- build/defaults.mk | 6 ++-- build/docker.mk | 20 ++++++------ build/md5sum.txt.template | 1 + build/standardrules.mk | 14 ++++----- 6 files changed, 59 insertions(+), 53 deletions(-) create mode 100644 build/md5sum.txt.template diff --git a/Makefile b/Makefile index 8c50cd0..b9750d2 100644 --- a/Makefile +++ b/Makefile @@ -18,13 +18,16 @@ regex_march_distro = '$1-$2-.*' # Overridable project defaults PROJECTNAME ?= webfuse -PROJECTDIR ?= $(realpath $(dir $(MAKEFILE))) +PROJECTDIR ?= $(patsubst %/,%,$(dir $(MAKEFILE))) SCRIPTDIR ?= $(PROJECTDIR)/build OUTDIR ?= $(PROJECTDIR)/.build +FETCHDIR ?= $(PROJECTDIR)/.deps BUILDTYPE ?= Debug -DISABLE_DEFAULT_BUILDTARGET := $(or $(MARCH),$(DISTRO)) -$(DISABLE_DEFAULT_BUILDTARGET)BUILDTARGET ?= amd64-ubuntu-builder +SKIP_FETCH ?= + +SKIP_DEFAULT_BUILDTARGET ?= $(or $(MARCH),$(DISTRO)) +$(SKIP_DEFAULT_BUILDTARGET)BUILDTARGET ?= amd64-ubuntu-builder MARCH ?= '.*' DISTRO ?= '.*' FILTER ?= $(call regex_march_distro,$(MARCH),$(DISTRO)) @@ -35,47 +38,47 @@ CONTAINER_GROUP ?= user UBUNTU_CODENAME ?= bionic DEBIAN_CODENAME ?= testing-slim -DISABLE_MD5SUM ?= $(call filter_out_command,md5sum) -DISABLE_MD5SUM := $(DISABLE_MD5SUM) +SKIP_MD5SUM ?= $(call filter_out_command,md5sum) +SKIP_MD5SUM := $(SKIP_MD5SUM) ####################################################################################################################### # Project dependencies DUMB_INIT_VERSION ?= 1.2.2 DOCKER_BUILDARGS += DUMB_INIT_VERSION=$(DUMB_INIT_VERSION) -FETCH_TARGETS += $(OUTDIR)/dumb-init-$(DUMB_INIT_VERSION).tar.gz -$(OUTDIR)/dumb-init-$(DUMB_INIT_VERSION).tar.gz: URL := https://github.com/Yelp/dumb-init/archive/v${DUMB_INIT_VERSION}.tar.gz -$(DISABLE_MD5SUM)$(OUTDIR)/dumb-init-$(DUMB_INIT_VERSION).tar.gz: MD5 := 6166084b05772cdcf615a762c6f3b32e +FETCH_TARGETS += $(FETCHDIR)/dumb-init-$(DUMB_INIT_VERSION).tar.gz +$(FETCHDIR)/dumb-init-$(DUMB_INIT_VERSION).tar.gz: URL := https://github.com/Yelp/dumb-init/archive/v${DUMB_INIT_VERSION}.tar.gz +$(SKIP_MD5SUM)$(FETCHDIR)/dumb-init-$(DUMB_INIT_VERSION).tar.gz: MD5 := 6166084b05772cdcf615a762c6f3b32e GTEST_VERSION ?= 1.8.1 DOCKER_BUILDARGS += GTEST_VERSION=$(GTEST_VERSION) -FETCH_TARGETS += $(OUTDIR)/googletest-release-$(GTEST_VERSION).tar.gz -$(OUTDIR)/googletest-release-$(GTEST_VERSION).tar.gz: URL := https://github.com/google/googletest/archive/release-$(GTEST_VERSION).tar.gz -$(DISABLE_MD5SUM)$(OUTDIR)/googletest-release-$(GTEST_VERSION).tar.gz: MD5 := 2e6fbeb6a91310a16efe181886c59596 +FETCH_TARGETS += $(FETCHDIR)/googletest-release-$(GTEST_VERSION).tar.gz +$(FETCHDIR)/googletest-release-$(GTEST_VERSION).tar.gz: URL := https://github.com/google/googletest/archive/release-$(GTEST_VERSION).tar.gz +$(SKIP_MD5SUM)$(FETCHDIR)/googletest-release-$(GTEST_VERSION).tar.gz: MD5 := 2e6fbeb6a91310a16efe181886c59596 FUSE_VERSION ?= 3.1.1 DOCKER_BUILDARGS += FUSE_VERSION=$(FUSE_VERSION) -FETCH_TARGETS += $(OUTDIR)/libfuse-fuse-$(FUSE_VERSION).tar.gz -$(OUTDIR)/libfuse-fuse-$(FUSE_VERSION).tar.gz: URL := https://github.com/libfuse/libfuse/archive/fuse-$(FUSE_VERSION).tar.gz -$(DISABLE_MD5SUM)$(OUTDIR)/libfuse-fuse-$(FUSE_VERSION).tar.gz: MD5 := 097f194856938afdd98bea1a5c046edd +FETCH_TARGETS += $(FETCHDIR)/libfuse-fuse-$(FUSE_VERSION).tar.gz +$(FETCHDIR)/libfuse-fuse-$(FUSE_VERSION).tar.gz: URL := https://github.com/libfuse/libfuse/archive/fuse-$(FUSE_VERSION).tar.gz +$(SKIP_MD5SUM)$(FETCHDIR)/libfuse-fuse-$(FUSE_VERSION).tar.gz: MD5 := 097f194856938afdd98bea1a5c046edd WEBSOCKETS_VERSION ?= 3.1.0 DOCKER_BUILDARGS += WEBSOCKETS_VERSION=$(WEBSOCKETS_VERSION) -FETCH_TARGETS += $(OUTDIR)/libwebsockets-$(WEBSOCKETS_VERSION).tar.gz -$(OUTDIR)/libwebsockets-$(WEBSOCKETS_VERSION).tar.gz: URL := https://github.com/warmcat/libwebsockets/archive/v$(WEBSOCKETS_VERSION).tar.gz -$(DISABLE_MD5SUM)$(OUTDIR)/libwebsockets-$(WEBSOCKETS_VERSION).tar.gz: MD5 := 325359a25d5f6d22725ff5d086db1c76 +FETCH_TARGETS += $(FETCHDIR)/libwebsockets-$(WEBSOCKETS_VERSION).tar.gz +$(FETCHDIR)/libwebsockets-$(WEBSOCKETS_VERSION).tar.gz: URL := https://github.com/warmcat/libwebsockets/archive/v$(WEBSOCKETS_VERSION).tar.gz +$(SKIP_MD5SUM)$(FETCHDIR)/libwebsockets-$(WEBSOCKETS_VERSION).tar.gz: MD5 := 325359a25d5f6d22725ff5d086db1c76 JANSSON_VERSION ?= 2.12 DOCKER_BUILDARGS += JANSSON_VERSION=$(JANSSON_VERSION) -FETCH_TARGETS += $(OUTDIR)/jansson-$(JANSSON_VERSION).tar.gz -$(OUTDIR)/jansson-$(JANSSON_VERSION).tar.gz: URL := https://github.com/akheron/jansson/archive/v$(JANSSON_VERSION).tar.gz -$(DISABLE_MD5SUM)$(OUTDIR)/jansson-$(JANSSON_VERSION).tar.gz: MD5 := c4b106528d5ffb521178565de1ba950d +FETCH_TARGETS += $(FETCHDIR)/jansson-$(JANSSON_VERSION).tar.gz +$(FETCHDIR)/jansson-$(JANSSON_VERSION).tar.gz: URL := https://github.com/akheron/jansson/archive/v$(JANSSON_VERSION).tar.gz +$(SKIP_MD5SUM)$(FETCHDIR)/jansson-$(JANSSON_VERSION).tar.gz: MD5 := c4b106528d5ffb521178565de1ba950d QEMU_VERSION ?= v3.1.0-2 DOCKER_BUILDARGS += QEMU_VERSION_=$(QEMU_VERSION) FETCH_TARGETS += $(OUTDIR)/docker/qemu-arm-static-$(QEMU_VERSION) -$(OUTDIR)/docker/qemu-arm-static-$(QEMU_VERSION): URL := https://github.com/multiarch/qemu-user-static/releases/download/$(QEMU_VERSION)/qemu-arm-static -$(DISABLE_MD5SUM)$(OUTDIR)/docker/qemu-arm-static-$(QEMU_VERSION): MD5 := 8ebd24e63fdfa07c557d45373bd831b1 +$(FETCHDIR)/qemu-arm-static-$(QEMU_VERSION): URL := https://github.com/multiarch/qemu-user-static/releases/download/$(QEMU_VERSION)/qemu-arm-static +$(SKIP_MD5SUM)$(FETCHDIR)/qemu-arm-static-$(QEMU_VERSION): MD5 := 8ebd24e63fdfa07c557d45373bd831b1 ####################################################################################################################### # Architecture-specific rule target configuration @@ -103,6 +106,8 @@ DEBIAN_TARGETS = $(addprefix $(OUTDIR)/docker/,$(call filter_targets,$(DEBIAN_FI ####################################################################################################################### # Common rule target configuration +VPATH = $(SCRIPTDIR) + CURLFLAGS += -s DOCKER_RUNFLAGS += --device /dev/fuse @@ -116,12 +121,12 @@ DOCKER_BUILDARGS += CODENAME=$(CODENAME) OUTDIRS += $(OUTDIR)/src -EXTRACT_TARGETS += $(patsubst $(OUTDIR)/%.tar.gz,$(OUTDIR)/src/%,$(FETCH_TARGETS)) +EXTRACT_TARGETS += $(patsubst $(FETCHDIR)/%.tar.gz,$(OUTDIR)/src/%,$(FETCH_TARGETS)) ####################################################################################################################### # Makefile dependencies -MAKEFILE_DEPS += curl +$(SKIP_FETCH)MAKEFILE_DEPS += curl MAKEFILE_DEPS += gunzip MAKEFILE_DEPS += tar MAKEFILE_DEPS += chmod @@ -143,16 +148,16 @@ $(UBUNTU_TARGETS): CODENAME := $(UBUNTU_CODENAME) $(DEBIAN_TARGETS): CODENAME := $(DEBIAN_CODENAME) -$(OUTDIR)/docker/qemu-arm-static-$(QEMU_VERSION): $(MAKEFILE) +$(FETCHDIR)/qemu-arm-static-$(QEMU_VERSION): $(SILENT)$(call curl,$@,$(URL),$(MD5)) && chmod +x $@ -$(OUTDIR)/docker/% : $(SCRIPTDIR)/% | $(OUTDIRS) - cp $< $@ - -$(OUTDIR)/%.tar.gz: $(MAKEFILE) | $(OUTDIRS) +$(FETCHDIR)/%.tar.gz: | $(OUTDIRS) $(SILENT)$(call curl,$@,$(URL),$(MD5)) -$(OUTDIR)/src/%: $(OUTDIR)/%.tar.gz | $(OUTDIRS) +$(OUTDIR)/docker/% : $(FETCHDIR)/% | $(OUTDIRS) + cp $< $@ + +$(OUTDIR)/src/%: $(FETCHDIR)/%.tar.gz | $(OUTDIRS) $(SILENT) \ $(call echo_if_silent,tar -C $(dir $@) -xf $<) \ && tar -C $(dir $@) -xf $< \ diff --git a/build/cmake.mk b/build/cmake.mk index cbcc98d..a0c215f 100644 --- a/build/cmake.mk +++ b/build/cmake.mk @@ -11,7 +11,7 @@ CMAKE_PROJECTDIR ?= $(CONTAINER_PROJECTDIR) CMAKE_SCRIPTDIR ?= $(CONTAINER_SCRIPTDIR) ifndef _INCLUDE_DEFAULTS -include $(realpath $(dir $(CURRENT_MAKEFILE)))/defaults.mk +include $(patsubst %/,%,$(dir $(CURRENT_MAKEFILE)))/defaults.mk endif ####################################################################################################################### @@ -21,14 +21,14 @@ cmake_configure_rule = \ $$(OUTDIR)/$1/$$(CMAKE_BUILD_TYPE)/CMakeCache.txt: $$(PROJECTDIR)/CMakeLists.txt $$(OUTDIR)/docker/$1 | $$(OUTDIR)/$1/$$(CMAKE_BUILD_TYPE)/gdbserver; \ $$(SILENT)$$(call cmake_configure,$1) cmake_configure = \ - $(call run,$1,sh -c 'cmake $(CMAKEFLAGS) $(CMAKE_PROJECTDIR) && $(CMAKE_SCRIPTDIR)/cmake_discover_cc_settings.sh $(notdir $@) $(realpath $(dir $@))') \ + $(call run,$1,sh -c 'cmake $(CMAKEFLAGS) $(CMAKE_PROJECTDIR) && $(CMAKE_SCRIPTDIR)/cmake_discover_cc_settings.sh $(notdir $@) "$(realpath $(dir $@))"') \ && touch $(addprefix $(dir $@)/,include_dirs.txt) $@ cmake_discover_cc_settings_rule = \ $$(OUTDIR)/$1/$$(CMAKE_BUILD_TYPE)/include_dirs.txt: $$(OUTDIR)/$1/$$(CMAKE_BUILD_TYPE)/CMakeCache.txt; \ $$(SILENT)$$(call cmake_discover_cc_settings,$1) cmake_discover_cc_settings = \ - $(call run,$1,$(CMAKE_SCRIPTDIR)/cmake_discover_cc_settings.sh $(notdir $<) $(realpath $(dir $<))) + $(call run,$1,$(CMAKE_SCRIPTDIR)/cmake_discover_cc_settings.sh $(notdir $<) '$(realpath $(dir $<))') ninja_build_rule = \ build-$1: $$(OUTDIR)/$1/$$(CMAKE_BUILD_TYPE)/CMakeCache.txt; \ diff --git a/build/defaults.mk b/build/defaults.mk index 9802b86..ce598b9 100644 --- a/build/defaults.mk +++ b/build/defaults.mk @@ -8,10 +8,9 @@ _INCLUDE_DEFAULTS := T MAKEFILE ?= $(firstword $(MAKEFILE_LIST)) MAKEFILE := $(MAKEFILE) -PROJECTDIR ?= $(realpath $(dir $(MAKEFILE))) -SCRIPTDIR ?= $(realpath $(dir $(CURRENT_MAKEFILE))) +PROJECTDIR ?= $(patsubst %/,%,$(dir $(MAKEFILE))) +SCRIPTDIR ?= $(patsubst %/,%,$(dir $(CURRENT_MAKEFILE))) OUTDIR ?= $(PROJECTDIR)/.build -OFFLINE_CACHEDIR ?= $(PROJECTDIR)/.deps BUILDTYPE ?= Debug @@ -55,3 +54,4 @@ MAKEFILE_DEPS += cat MAKEFILE_DEPS += id MAKEFILE_DEPS += echo MAKEFILE_DEPS += sed + diff --git a/build/docker.mk b/build/docker.mk index 3ad2224..ebbf31e 100644 --- a/build/docker.mk +++ b/build/docker.mk @@ -11,7 +11,7 @@ CONTAINER_USER ?= $(USERID) CONTAINER_GROUP ?= $(USERID) ifndef _INCLUDE_DEFAULTS -include $(realpath $(dir $(CURRENT_MAKEFILE)))/defaults.mk +include $(patsubst %/,%,$(dir $(CURRENT_MAKEFILE)))/defaults.mk endif ####################################################################################################################### @@ -30,10 +30,10 @@ image_run = $(DOCKER) run --rm --interactive $(DOCKER_RUNFLAGS) \ $2 image_rule = \ - $$(OUTDIR)/docker/$1: $$(OUTDIR)/docker/$1.dockerfile $$(EXTRACT_TARGETS) $$(MAKEFILE_LIST); \ + $$(OUTDIR)/docker/$1: $1.dockerfile $$(EXTRACT_TARGETS) $$(MAKEFILE_LIST); \ $$(SILENT)$$(call image,$1) image = \ - $(call echo_if_silent,TARGET=$1 docker build $(call image_name,$1) $(OUTDIR)) \ + $(call echo_if_silent,TARGET=$1 docker build --file $< --tag $(call image_name,$1) $(OUTDIR)) \ && $(DOCKER) build --rm $(DOCKER_BUILDFLAGS) --iidfile $@ --file $< --tag $(call image_name,$1) $(OUTDIR) run_rule = \ @@ -61,14 +61,14 @@ wrapper = \ DOCKER_RUNFLAGS += --env SOURCE_DATE_EPOCH DOCKER_RUNFLAGS += --env BUILDTIME -DOCKER_RUNFLAGS += --user $(CONTAINER_USER):$(CONTAINER_GROUP) +DOCKER_RUNFLAGS += --user '$(CONTAINER_USER):$(CONTAINER_GROUP)' -DOCKER_BUILDARGS += USERID=$(USERID) -DOCKER_BUILDARGS += PARALLELMFLAGS=$(_PARALLELMFLAGS) -DOCKER_BUILDARGS += PROJECTDIR=$(CONTAINER_PROJECTDIR) -DOCKER_BUILDARGS += SCRIPTDIR=$(CONTAINER_SCRIPTDIR) -DOCKER_BUILDARGS += OUTDIR=$(CONTAINER_OUTDIR) -DOCKER_BUILDARGS += REGISTRY_PREFIX=$(REGISTRY_PREFIX) +DOCKER_BUILDARGS += 'USERID=$(USERID)' +DOCKER_BUILDARGS += 'PARALLELMFLAGS=$(_PARALLELMFLAGS)' +DOCKER_BUILDARGS += 'PROJECTDIR=$(CONTAINER_PROJECTDIR)' +DOCKER_BUILDARGS += 'SCRIPTDIR=$(CONTAINER_SCRIPTDIR)' +DOCKER_BUILDARGS += 'OUTDIR=$(CONTAINER_OUTDIR)' +DOCKER_BUILDARGS += 'REGISTRY_PREFIX=$(REGISTRY_PREFIX)' DOCKER_BUILDFLAGS += $(addprefix --build-arg ,$(DOCKER_BUILDARGS)) diff --git a/build/md5sum.txt.template b/build/md5sum.txt.template new file mode 100644 index 0000000..3a9d605 --- /dev/null +++ b/build/md5sum.txt.template @@ -0,0 +1 @@ +%MD5% %FILE% \ No newline at end of file diff --git a/build/standardrules.mk b/build/standardrules.mk index 13a2cd5..5dfdc36 100644 --- a/build/standardrules.mk +++ b/build/standardrules.mk @@ -3,7 +3,7 @@ # Overridable defaults ifndef _INCLUDE_DEFAULTS -include $(realpath $(dir $(CURRENT_MAKEFILE)))/defaults.mk +include $(patsubst %/,%,$(dir $(CURRENT_MAKEFILE)))/defaults.mk endif ####################################################################################################################### @@ -17,20 +17,18 @@ filter_out_command ?= $(filter $1,$(foreach CMD,$1,$(shell command -v $(CMD) 2>& md5sum = { \ if [ -n "$2" ]; then \ - echo "$2\t$1" > $1.md5; \ + sed -e 's@%MD5%@$2@g' -e 's@%FILE%@$1@g' $(SCRIPTDIR)/md5sum.txt.template > $1.md5; \ md5sum -c $1.md5; \ else \ echo 'warning:$1: no md5 skipping verification' 1>&2; \ fi; \ } -$(DISABLE_FETCH)curl = $(call echo_if_silent,curl -fSL $(CURLFLAGS) -o $1 $2) \ +$(SKIP_FETCH)curl = $(call echo_if_silent,curl -fSL $(CURLFLAGS) -o $1 $2) \ && curl -fSL $(CURLFLAGS) -o $1 $2 \ && $(call md5sum,$1,$3) -curl ?= $(call echo_if_silent,cp $(OFFLINE_CACHEDIR)/$(notdir $1) $1) \ - && cp $(OFFLINE_CACHEDIR)/$(notdir $1) $1 \ - && $(call md5sum,$1,$3) +curl ?= echo 'warning:$1: download skipped (SKIP_FETCH=$(SKIP_FETCH))' check_rule = \ check-$1: build-$1; @@ -76,6 +74,8 @@ MAKEFILE_DEPS := $(sort $(MAKEFILE_DEPS)) UNSATISFIED_MAKEFILE_DEPS := $(call filter_out_command,$(MAKEFILE_DEPS)) +RULE_TARGETS_DEPS := $(filter-out $(RULE_TARGETS) $(addprefix $(PROJECTDIR),$(RULE_TARGETS)),$(MAKEFILE_LIST)) + ####################################################################################################################### # Standard rules @@ -115,7 +115,7 @@ distclean: debug-print-%: @printf '%s\n' '$*:' $($*) -$(RULE_TARGETS): $(filter-out $(RULE_TARGETS),$(MAKEFILE_LIST)) | $(UNSATISFIED_MAKEFILE_DEPS) $(OUTDIRS) +$(RULE_TARGETS): $(RULE_TARGETS_DEPS) | $(UNSATISFIED_MAKEFILE_DEPS) $(OUTDIRS) $(OUTDIRS): $(SILENT)mkdir -p $@