You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

241 lines
6.7 KiB

#
# makefile to keep buildsystem helpers
#
# -----------------------------------------------------------------------------
# execute local scripts
define local-script
@if [ -x $(LOCAL_DIR)/scripts/$(1) ]; then \
$(LOCAL_DIR)/scripts/$(1) $(2) $(TARGET_DIR) $(BUILD_DIR); \
fi
endef
# -----------------------------------------------------------------------------
# apply patch sets
define apply_patches
l=$(strip $(2)); test -z $$l && l=1; \
for i in $(1); do \
if [ -e $$i -o -e $(PATCHES)/$$i ]; then \
if [ -d $$i ]; then \
for p in $$i/*; do \
echo -e "$(TERM_YELLOW)Applying $${p#$(PATCHES)/}$(TERM_NORMAL)"; \
if [ $${p:0:1} == "/" ]; then \
patch -p$$l -i $$p; \
else \
patch -p$$l -i $(PATCHES)/$$p; \
fi; \
done; \
else \
echo -e "$(TERM_YELLOW)Applying $${i#$(PATCHES)/}$(TERM_NORMAL)"; \
if [ $${i:0:1} == "/" ]; then \
patch -p$$l -i $$i; \
else \
patch -p$$l -i $(PATCHES)/$$i; \
fi; \
fi; \
fi; \
done
endef
# apply patch sets automatically
APPLY_PATCHES = $(call apply_patches,$(PKG_PATCHES_DIR))
# -----------------------------------------------------------------------------
4 years ago
# github(user,package,version): returns site of GitHub repository
github = https://github.com/$(1)/$(2)/archive/$(3)
# -----------------------------------------------------------------------------
# rewrite libtool libraries
REWRITE_LIBTOOL_RULES = "s,^libdir=.*,libdir='$(1)',; \
s,\(^dependency_libs='\| \|-L\|^dependency_libs='\)/lib,\ $(1),g"
REWRITE_LIBTOOL_TAG = rewritten=1
define REWRITE_LIBTOOL # (libdir)
for la in $$(find $(1) -name "*.la" -type f); do \
if ! grep -q "$(REWRITE_LIBTOOL_TAG)" $${la}; then \
echo -e "$(TERM_YELLOW)Rewriting $${la#$(TARGET_DIR)/}$(TERM_NORMAL)"; \
$(SED) $(REWRITE_LIBTOOL_RULES) $${la}; \
echo -e "\n# Adapted to buildsystem\n$(REWRITE_LIBTOOL_TAG)" >> $${la}; \
fi; \
done
endef
# rewrite libtool libraries automatically
REWRITE_LIBTOOL_LA = $(call REWRITE_LIBTOOL,$(TARGET_base_libdir)); \
$(call REWRITE_LIBTOOL,$(TARGET_libdir))
# -----------------------------------------------------------------------------
# rewrite pkg-config files
REWRITE_CONFIG_RULES = "s,^prefix=.*,prefix='$(TARGET_prefix)',; \
s,^exec_prefix=.*,exec_prefix='$(TARGET_exec_prefix)',; \
s,^libdir=.*,libdir='$(TARGET_libdir)',; \
s,^includedir=.*,includedir='$(TARGET_includedir)',"
REWRITE_CONFIG = $(SED) $(REWRITE_CONFIG_RULES)
# -----------------------------------------------------------------------------
#
# Manipulation of .config files based on the Kconfig infrastructure.
# Used by the BusyBox package, the Linux kernel package, and more.
#
define KCONFIG_ENABLE_OPT # (option, file)
$(SED) "/\\<$(1)\\>/d" $(2)
echo '$(1)=y' >> $(2)
endef
define KCONFIG_SET_OPT # (option, value, file)
$(SED) "/\\<$(1)\\>/d" $(3)
echo '$(1)=$(2)' >> $(3)
endef
define KCONFIG_DISABLE_OPT # (option, file)
$(SED) "/\\<$(1)\\>/d" $(2)
echo '# $(1) is not set' >> $(2)
endef
# -----------------------------------------------------------------------------
#
# $(1) = title
# $(2) = color
# 0 - Black
# 1 - Red
# 2 - Green
# 3 - Yellow
# 4 - Blue
# 5 - Magenta
# 6 - Cyan
# 7 - White
# $(3) = left|center|right
#
define draw_line
@ \
printf '%.0s-' {1..$(shell tput cols)}; \
if test "$(1)"; then \
cols=$(shell tput cols); \
length=$(shell echo $(1) | awk '{print length}'); \
case "$(3)" in \
*right) let indent="length + 1" ;; \
*center) let indent="cols - (cols - length) / 2" ;; \
*left|*) let indent="cols" ;; \
esac; \
tput cub $$indent; \
test "$(2)" && printf $$(tput setaf $(2)); \
printf '$(1)'; \
test "$(2)" && printf $$(tput sgr0); \
fi; \
echo
endef
# -----------------------------------------------------------------------------
archives-list:
@rm -f $(BUILD_DIR)/$(@)
@make -qp | grep --only-matching '^\$(DL_DIR).*:' | sed "s|:||g" > $(BUILD_DIR)/$(@)
DOCLEANUP ?= no
GETMISSING ?= no
archives-info: archives-list
@echo "[ ** ] Unused targets in make/archives.mk"
@grep --only-matching '^\$$(DL_DIR).*:' make/archives.mk | sed "s|:||g" | \
while read target; do \
found=false; \
for makefile in make/*.mk; do \
if [ "$${makefile##*/}" = "archives.mk" ]; then \
continue; \
fi; \
if [ "$${makefile: -9}" = "-extra.mk" ]; then \
continue; \
fi; \
if grep -q "$$target" $$makefile; then \
found=true; \
fi; \
if [ "$$found" = "true" ]; then \
continue; \
fi; \
done; \
if [ "$$found" = "false" ]; then \
echo -e "[$(TERM_RED) !! $(TERM_NORMAL)] $$target"; \
fi; \
done;
@echo "[ ** ] Unused archives"
@find $(DL_DIR)/ -maxdepth 1 -type f | \
while read archive; do \
if ! grep -q $$archive $(BUILD_DIR)/archives-list; then \
echo -e "[$(TERM_YELLOW) rm $(TERM_NORMAL)] $$archive"; \
if [ "$(DOCLEANUP)" = "yes" ]; then \
rm $$archive; \
fi; \
fi; \
done;
@echo "[ ** ] Missing archives"
@cat $(BUILD_DIR)/archives-list | \
while read archive; do \
if [ -e $$archive ]; then \
#echo -e "[$(TERM_GREEN) ok $(TERM_NORMAL)] $$archive"; \
true; \
else \
echo -e "[$(TERM_YELLOW) -- $(TERM_NORMAL)] $$archive"; \
if [ "$(GETMISSING)" = "yes" ]; then \
make $$archive; \
fi; \
fi; \
done;
@$(REMOVE)/archives-list
# -----------------------------------------------------------------------------
# FIXME - how to resolve variables while grepping makefiles?
patches-info:
@echo "[ ** ] Unused patches"
@for patch in $(PATCHES)/*; do \
if [ ! -f $$patch ]; then \
continue; \
fi; \
patch=$${patch##*/}; \
found=false; \
for makefile in make/*.mk; do \
if grep -q "$$patch" $$makefile; then \
found=true; \
fi; \
if [ "$$found" = "true" ]; then \
continue; \
fi; \
done; \
if [ "$$found" = "false" ]; then \
echo -e "[$(TERM_RED) !! $(TERM_NORMAL)] $$patch"; \
fi; \
done;
# -----------------------------------------------------------------------------
# Create reversed changelog using git log --reverse.
# Remove duplicated commits and re-reverse the changelog using awk.
# This keeps the original commit and removes all picked duplicates.
define make-changelog
git log --reverse --pretty=oneline --no-merges --abbrev-commit | \
awk '!seen[substr($$0,12)]++' | \
awk '{a[i++]=$$0} END {for (j=i-1; j>=0;) print a[j--]}'
endef
changelogs:
$(call make-changelog) > $(STAGING_DIR)/changelog-buildsystem
$(CD) $(SOURCE_DIR)/$(NI-NEUTRINO); \
$(call make-changelog) > $(STAGING_DIR)/changelog-neutrino
$(CD) $(SOURCE_DIR)/$(NI-LIBSTB-HAL); \
$(call make-changelog) > $(STAGING_DIR)/changelog-libstb-hal
# -----------------------------------------------------------------------------
PHONY += archives-list
PHONY += archives-info
PHONY += patches-info
PHONY += changelogs