mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-20 22:23:16 +00:00
71a8dcca08
nullglob is needed to get an empty shell glob in case no matching binary archive (path) exists. Otherwise, the original glob string including the * is returned and used in the for loop.
108 lines
3.0 KiB
Makefile
Executable File
108 lines
3.0 KiB
Makefile
Executable File
#!/usr/bin/make -f
|
|
|
|
#
|
|
# \brief Tool for assembling a source archive
|
|
# \author Norman Feske
|
|
# \date 2016-05-13
|
|
#
|
|
|
|
define HELP_MESSAGE
|
|
|
|
Tool for assembling a source archive
|
|
|
|
usage:
|
|
|
|
$(firstword $(MAKEFILE_LIST)) <src-name> USER=<user>
|
|
|
|
<src-name> name of the source archive
|
|
<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 := LICENSE
|
|
|
|
ifeq ($(USER),)
|
|
$(error USER undefined)
|
|
endif
|
|
|
|
#
|
|
# Define location of recipe and the exported archive
|
|
#
|
|
RECIPE_DIR := $(call recipe_dir,src/$(ARCHIVE))
|
|
REP_DIR := $(RECIPE_DIR:/recipes/src/$(ARCHIVE)=)
|
|
DEPOT_SUB_DIR := $(DEPOT_DIR)/$(USER)/src
|
|
|
|
#
|
|
# Customize command executed whenever an archive version is automatically
|
|
# updated. Whenever the version of a src archive is automatically increased,
|
|
# make sure that the depot is void of any binary archives matching the new
|
|
# version number. Note, nullglob is needed in case no matching binary archive
|
|
# exists.
|
|
#
|
|
VERSION_UPDATED_CMD = ( shopt -s nullglob; \
|
|
cd $(DEPOT_DIR); \
|
|
for stale in $(USER)/bin/*/$(ARCHIVE)/$(RECIPE_VERSION); do \
|
|
echo "removing stale binary archive $$stale"; \
|
|
rm -rf $$stale; \
|
|
done )
|
|
|
|
#
|
|
# Include common archive-creation steps
|
|
#
|
|
include $(GENODE_DIR)/tool/depot/mk/extract.inc
|
|
include $(GENODE_DIR)/tool/depot/mk/extract_content.inc
|
|
|
|
#
|
|
# Add used_apis information, supplemented with the current API hashes
|
|
#
|
|
ifneq ($(wildcard $(RECIPE_DIR)/used_apis),)
|
|
$(DEPOT_ARCHIVE_DIR).hash: $(DEPOT_ARCHIVE_DIR)/used_apis
|
|
endif
|
|
|
|
$(DEPOT_ARCHIVE_DIR)/used_apis: $(DEPOT_ARCHIVE_DIR)
|
|
$(DEPOT_ARCHIVE_DIR)/used_apis: $(RECIPE_DIR)/used_apis
|
|
$(VERBOSE) \
|
|
for api in $(shell cat $<); do \
|
|
hash_file=$(GENODE_DIR)/repos/**/recipes/api/$$api/hash; \
|
|
if [ ! -f $$hash_file ]; then \
|
|
echo "Error: archive $(ARCHIVE) depends on nonexisting API '$$api',"; \
|
|
echo " expected $$hash_file"; \
|
|
rm -r $(DEPOT_ARCHIVE_DIR); \
|
|
result=false; \
|
|
break; \
|
|
fi; \
|
|
hash_file_content=$$(< $$hash_file); \
|
|
version=$${hash_file_content%% *}; \
|
|
echo "$$api/$$version" >> $@; \
|
|
done; $$result
|
|
|
|
#
|
|
# If the archive is a library, add the hash of its implemented API
|
|
#
|
|
ifneq ($(wildcard $(RECIPE_DIR)/api),)
|
|
$(DEPOT_ARCHIVE_DIR).hash: $(DEPOT_ARCHIVE_DIR)/api
|
|
endif
|
|
$(DEPOT_ARCHIVE_DIR)/api: $(DEPOT_ARCHIVE_DIR)
|
|
$(DEPOT_ARCHIVE_DIR)/api: $(RECIPE_DIR)/api
|
|
$(VERBOSE) \
|
|
api=$$(< $<); \
|
|
hash_file=$(GENODE_DIR)/repos/**/recipes/api/$$api/hash; \
|
|
if [ ! -f $$hash_file ]; then \
|
|
echo "Error: library '$(ARCHIVE)' implements unknown API '$$api',"; \
|
|
echo " expected $$hash_file"; \
|
|
rm -r $(DEPOT_ARCHIVE_DIR); \
|
|
exit -1; \
|
|
fi; \
|
|
hash_file_content=$$(< $$hash_file); \
|
|
version=$${hash_file_content%% *}; \
|
|
echo "$$api/$$version" >> $@;
|
|
|