]> rtime.felk.cvut.cz Git - pes-rpp/rpp-lib.git/blobdiff - common.mk
Update/add files for automatic conversion of HalCoGen output to RPP structure
[pes-rpp/rpp-lib.git] / common.mk
index 4e08abedc03fdf52585853b2bf6e63ea0b70780c..21be6551f7cd3d3a624e0998422a56dff090fbe8 100644 (file)
--- a/common.mk
+++ b/common.mk
@@ -29,9 +29,9 @@ cp=cp $1 $2
 endif
 
 # `make release` can ignore files without certain git attribute
-RELEASE_IGNORE_FILES = $(if $(RELEASE_ATTR),\
-       $(shell git ls-files | git check-attr --stdin $(RELEASE_ATTR)|awk -F: '!/$(RELEASE_ATTR): set$$/ {print $$1}'),\
-       $(if $(filter RELEASE_ATTR,$(.VARIABLES)),,$(error Please specify RELEASE_ATTR variable (it can be empty))))
+RELEASE_IGNORE_FILES_CMD = $(strip $(if $(RELEASE_ATTR),\
+       git ls-files | git check-attr --stdin $(RELEASE_ATTR)|awk -F: '!/$(RELEASE_ATTR): set$$/ {print $$1}',\
+       $(if $(filter RELEASE_ATTR,$(.VARIABLES)),,$(error Please specify RELEASE_ATTR variable (it can be empty)))))
 
 # Usage: $(call release_rules,<release_prefix>)
 define release_rules
@@ -51,11 +51,12 @@ RELEASE_BASENAME = $$(RELEASE_PREFIX)-$$(RELEASE_VERSION)
        test ! -e $$A || head -n 1 $$A | grep -F "Automatically generated (yoo9jei6Ee6Teiti)"
        echo "# Automatically generated (yoo9jei6Ee6Teiti)" > $$A
 # Write ignored files there
-       for i in $$(RELEASE_IGNORE_FILES); do echo $$$$i export-ignore >> $$A; echo Not releasing $$$$i; done
+       for i in `$$(RELEASE_IGNORE_FILES_CMD)`; do echo $$$$i export-ignore >> $$A; echo Not releasing $$$$i; done
 
 $$(RELEASE_BASENAME).zip:
        rm -rf $$@ $$(RELEASE_BASENAME)
        $(MAKE) $$(RELEASE_BASENAME)
+       find $$(RELEASE_BASENAME) -type d -empty -print -delete
        zip  -r $$@ $$(RELEASE_BASENAME)
 
 $$(RELEASE_BASENAME):: .git/info/attributes
@@ -64,3 +65,37 @@ $$(RELEASE_BASENAME):: .git/info/attributes
 print-release-basename:
        @echo $$(RELEASE_BASENAME)
 endef
+
+# Case conversion macros. Taken from
+# http://git.buildroot.net/buildroot/tree/package/pkg-utils.mk. This
+# is inspired by the 'up' macro from gmsl (http://gmsl.sf.net). It is
+# optimised very heavily because these macros are used a lot. It is
+# about 5 times faster than forking a shell and tr.
+#
+# The caseconvert-helper creates a definition of the case conversion macro.
+# After expansion by the outer $(eval ), the UPPERCASE macro is defined as:
+# $(strip $(eval __tmp := $(1))  $(eval __tmp := $(subst a,A,$(__tmp))) ... )
+# In other words, every letter is substituted one by one.
+#
+# The caseconvert-helper allows us to create this definition out of the
+# [FROM] and [TO] lists, so we don't need to write down every substition
+# manually. The uses of $ and $$ quoting are chosen in order to do as
+# much expansion as possible up-front.
+#
+# Note that it would be possible to conceive a slightly more optimal
+# implementation that avoids the use of __tmp, but that would be even
+# more unreadable and is not worth the effort.
+
+[FROM] := a b c d e f g h i j k l m n o p q r s t u v w x y z - .
+[TO]   := A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ _
+
+define caseconvert-helper
+$(1) = $$(strip \
+       $$(eval __tmp := $$(1))\
+       $(foreach c, $(2),\
+               $$(eval __tmp := $$(subst $(word 1,$(subst :, ,$c)),$(word 2,$(subst :, ,$c)),$$(__tmp))))\
+       $$(__tmp))
+endef
+
+$(eval $(call caseconvert-helper,UPPERCASE,$(join $(addsuffix :,$([FROM])),$([TO]))))
+$(eval $(call caseconvert-helper,LOWERCASE,$(join $(addsuffix :,$([TO])),$([FROM]))))