Commit 4efdd9f3 authored by Peter Korsgaard's avatar Peter Korsgaard
Browse files

Makefile.package.in: optimize UPPERCASE macro

As noticed by Thomas, we call the UPPERCASE macro a lot, and it slows down
startup quite a bit.

Optimize it by implementing it in make, rather than forking a shell + tr.
The implementation is heavily based on the 'up' macro from gmsl
(http://gmsl.sf.net

)

With this in place, startup time is ~5 times lower.

Signed-off-by: default avatarPeter Korsgaard <jacmet@sunsite.dk>
parent d701a823
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -24,7 +24,21 @@

# UPPERCASE Macro -- transform its argument to uppercase and replace dots and
# hyphens to underscores
UPPERCASE = $(shell echo $(1) | tr "a-z.-" "A-Z__")

# Heavily inspired by the up macro from gmsl (http://gmsl.sf.net)
# This is approx 5 times faster than forking a shell and tr, and
# as this macro is used a lot it matters
# This works by creating translation character pairs (E.G. a:A b:B)
# and then looping though all of them running $(subst from,to,text)
[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 _ _

UPPERCASE = $(strip $(eval __tmp := $1) \
     $(foreach c, $(join $(addsuffix :,$([FROM])),$([TO])), \
	$(eval __tmp :=	\
		$(subst $(word 1,$(subst :, ,$c)),$(word 2,$(subst :, ,$c)),\
			$(__tmp)))) \
     $(__tmp))

# Define extrators for different archive suffixes
INFLATE.bz2 = $(BZCAT)