mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-20 22:23:16 +00:00
515854a19f
The semantic of .NOPARALLEL has changed in GNU Make 4.4 Quote: New feature: .NOTPARALLEL accepts prerequisites If the .NOTPARALLEL special target has prerequisites then all prerequisites of those targets will be run serially (as if .WAIT was specified between each prerequisite). This means that only prerequisites are made sequential. Before everything within a Makefile would be done in sequential order. Therefore, we had to add the *.hash target (appears multiple times) to the .NOPARALLEL prerequisites. issue #4725
93 lines
2.6 KiB
Makefile
Executable File
93 lines
2.6 KiB
Makefile
Executable File
#!/usr/bin/make -f
|
|
|
|
#
|
|
# \brief Tool for assembling a package archive
|
|
# \author Norman Feske
|
|
# \date 2017-03-17
|
|
#
|
|
|
|
define HELP_MESSAGE
|
|
|
|
Tool for assembling a package archive
|
|
|
|
usage:
|
|
|
|
$(firstword $(MAKEFILE_LIST)) <pkg-name> USER=<user>
|
|
|
|
<pkg-name> name of the package
|
|
<user> identity of the archive creator
|
|
|
|
endef
|
|
|
|
export GENODE_DIR := $(realpath $(dir $(MAKEFILE_LIST))/../../..)
|
|
|
|
include $(GENODE_DIR)/tool/depot/mk/front_end.inc
|
|
|
|
#
|
|
# The target is the name of the archive
|
|
#
|
|
ARCHIVE := $(TARGET)
|
|
TAG_FILE := README
|
|
|
|
#
|
|
# Define location of recipe and the exported archive
|
|
#
|
|
RECIPE_DIR := $(call recipe_dir,pkg/$(ARCHIVE))
|
|
DEPOT_SUB_DIR := $(DEPOT_DIR)/$(USER)/pkg
|
|
|
|
#
|
|
# Include common archive-creation steps
|
|
#
|
|
include $(GENODE_DIR)/tool/depot/mk/extract.inc
|
|
|
|
#
|
|
# Generate 'archives' list with version information
|
|
#
|
|
_version = $(call recipe_version,$(call archive_type,$1)/$(call archive_recipe,$1))
|
|
|
|
_versioned_entry = _/$(call archive_type,$1)/$(call archive_recipe,$1)/$(call _version,$1)
|
|
|
|
VERSIONED_ARCHIVES := $(foreach A,$(call file_content,$(RECIPE_DIR)/archives),\
|
|
$(if $(call archive_has_user,$A,_),$(call _versioned_entry,$A),$A))
|
|
|
|
$(DEPOT_ARCHIVE_DIR).hash: $(DEPOT_ARCHIVE_DIR)/_archives
|
|
|
|
$(DEPOT_ARCHIVE_DIR)/_archives: checked_recipe_hash_value_exists
|
|
$(VERBOSE)( $(foreach A,$(VERSIONED_ARCHIVES),echo "$A";) ) > $@
|
|
|
|
#
|
|
# Copy remaining recipe content to archive as is, except for files with a
|
|
# special meaning or backup files.
|
|
#
|
|
RECIPE_FILES := $(notdir $(wildcard $(RECIPE_DIR)/*))
|
|
RECIPE_FILES := $(patsubst %~,,$(RECIPE_FILES))
|
|
RECIPE_FILES := $(patsubst %.rej,,$(RECIPE_FILES))
|
|
RECIPE_FILES := $(patsubst %.orig,,$(RECIPE_FILES))
|
|
RECIPE_FILES := $(patsubst %.swp,,$(RECIPE_FILES))
|
|
RECIPE_FILES := $(filter-out archives hash,$(RECIPE_FILES))
|
|
|
|
checked_readme_exists:
|
|
ifneq ($(filter-out $(RECIPE_FILES),README),)
|
|
@$(ECHO) "Error: missing README in package recipe, expected:\n" \
|
|
" $(RECIPE_DIR)/README"; false
|
|
endif
|
|
|
|
checked_runtime_valid:
|
|
ifeq ($(filter $(RECIPE_FILES),runtime),runtime)
|
|
$(VERBOSE)xmllint --noout $(addprefix $(RECIPE_DIR)/,runtime)
|
|
endif
|
|
|
|
.NOTPARALLEL: $(DEPOT_ARCHIVE_DIR)/$(TAG_FILE) $(DEPOT_ARCHIVE_DIR).hash
|
|
|
|
$(DEPOT_ARCHIVE_DIR)/$(TAG_FILE): checked_readme_exists checked_runtime_valid
|
|
$(VERBOSE)cp $(addprefix $(RECIPE_DIR)/,$(RECIPE_FILES)) $(DEPOT_ARCHIVE_DIR)/
|
|
|
|
#
|
|
# Replace the '_' marker in the 'archives' list with the actual user name
|
|
#
|
|
$(DEPOT_ARCHIVE_DIR)/archives: $(DEPOT_ARCHIVE_DIR).hash
|
|
$(VERBOSE)sed "s/^_/$(USER)/" $(DEPOT_ARCHIVE_DIR)/_archives > $@
|
|
$(VERBOSE)rm -f $(DEPOT_ARCHIVE_DIR)/_archives
|
|
|
|
_rename_to_final_archive: $(DEPOT_ARCHIVE_DIR)/archives
|