From 07a2ae9e40befab82d38a9e99c77169c490ead7b Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Mon, 8 Jan 2018 09:20:23 +0100
Subject: [PATCH] optimize makefiles

---
 makefile-binary  | 48 +-----------------------------------------------
 makefile-library | 48 +-----------------------------------------------
 makefile-rec     | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 48 insertions(+), 94 deletions(-)
 create mode 100644 makefile-rec

diff --git a/makefile-binary b/makefile-binary
index 9a85442684..faece3163f 100644
--- a/makefile-binary
+++ b/makefile-binary
@@ -52,53 +52,7 @@ FORCE:
 	else\
 		mkdir -p $(dir $@);\
 	fi
-	echo "\
-	SHELL:=/bin/bash$${NEW_LINE}\
-	SRCDIR:=$${NEW_LINE}\
-	$${NEW_LINE}\
-	define NEW_LINE$${NEW_LINE}\
-	$${NEW_LINE}\
-	$${NEW_LINE}\
-	endef$${NEW_LINE}\
-	$${NEW_LINE}\
-	export NEW_LINE$${NEW_LINE}\
-	$${NEW_LINE}\
-	CXXFLAGS:= -pipe -std=c++14 \$$(CXX_OTHER_FLAGS) -c -fPIC$${NEW_LINE}\
-	$${NEW_LINE}\
-	SOURCES:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\
-	DEPENDENCIES:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\
-	OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))$${NEW_LINE}\
-	SOURCES_DIRS:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)$${NEW_LINE}\
-	OBJECTS_DIRS:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))$${NEW_LINE}\
-	OBJECTS_DIRS_MAKEFILES:= \$$(patsubst %, %makefile, \$$(OBJECTS_DIRS))$${NEW_LINE}\
-	$${NEW_LINE}\
-	.PHONY: all$${NEW_LINE}\
-	.PRECIOUS: \$$(DEPENDECIES) \$$(OBJECTS_DIRS_MAKEFILES)$${NEW_LINE}\
-	$${NEW_LINE}\
-	all: \$$(OBJECTS_DIRS) \$$(OBJECTS)$${NEW_LINE}\
-	$${NEW_LINE}\
-	%.d: makefile$${NEW_LINE}\
-		@echo \"\\$${NEW_LINE}\
-		\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\$$\$${NEW_LINE}\\$${NEW_LINE}\
-		\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\$$\$${NEW_LINE}\\$${NEW_LINE}\
-			\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\$$\$${NEW_LINE}\\$${NEW_LINE}\
-		\" > \$$@$${NEW_LINE}\
-	$${NEW_LINE}\
-	%/makefile: makefile$${NEW_LINE}\
-		mkdir -p \$$(dir \$$@)$${NEW_LINE}\
-		cp makefile \$$@$${NEW_LINE}\
-	$${NEW_LINE}\
-	%/: FORCE | %/makefile$${NEW_LINE}\
-		@accesstime=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\
-		\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) SOURCES_BASE_DIR=\$$(SOURCES_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\$${NEW_LINE}\
-		accesstime2=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\
-		if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\$${NEW_LINE}\
-			touch .; \\$${NEW_LINE}\
-		fi$${NEW_LINE}\
-	$${NEW_LINE}\
-	FORCE:$${NEW_LINE}\
-	$${NEW_LINE}\
-	-include \$$(DEPENDENCIES)" > $@
+	cp ../makefile-rec $@
 
 # -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 # final lib/bin construction
diff --git a/makefile-library b/makefile-library
index 0ac6e9c920..2628aae668 100644
--- a/makefile-library
+++ b/makefile-library
@@ -69,53 +69,7 @@ FORCE:
 	else\
 		mkdir -p $(dir $@);\
 	fi
-	echo "\
-	SHELL:=/bin/bash$${NEW_LINE}\
-	SRCDIR:=$${NEW_LINE}\
-	$${NEW_LINE}\
-	define NEW_LINE$${NEW_LINE}\
-	$${NEW_LINE}\
-	$${NEW_LINE}\
-	endef$${NEW_LINE}\
-	$${NEW_LINE}\
-	export NEW_LINE$${NEW_LINE}\
-	$${NEW_LINE}\
-	CXXFLAGS:= -pipe -std=c++14 \$$(CXX_OTHER_FLAGS) -c -fPIC$${NEW_LINE}\
-	$${NEW_LINE}\
-	SOURCES:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -type f -name \"*.cpp\")$${NEW_LINE}\
-	DEPENDENCIES:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d, \$$(SOURCES))$${NEW_LINE}\
-	OBJECTS:= \$$(patsubst %.d, %.o, \$$(DEPENDENCIES))$${NEW_LINE}\
-	SOURCES_DIRS:= \$$(shell find \$$(SOURCES_BASE_DIR)/\$$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)$${NEW_LINE}\
-	OBJECTS_DIRS:= \$$(patsubst \$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%, %/, \$$(SOURCES_DIRS))$${NEW_LINE}\
-	OBJECTS_DIRS_MAKEFILES:= \$$(patsubst %, %makefile, \$$(OBJECTS_DIRS))$${NEW_LINE}\
-	$${NEW_LINE}\
-	.PHONY: all$${NEW_LINE}\
-	.PRECIOUS: \$$(DEPENDECIES) \$$(OBJECTS_DIRS_MAKEFILES)$${NEW_LINE}\
-	$${NEW_LINE}\
-	all: \$$(OBJECTS_DIRS) \$$(OBJECTS)$${NEW_LINE}\
-	$${NEW_LINE}\
-	%.d: makefile$${NEW_LINE}\
-		@echo \"\\$${NEW_LINE}\
-		\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\") = \\$$\$$(shell (\\$$\$$(CXX) -MM \\$$\$$(CXXFLAGS) \$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) 2>/dev/null || echo \\\"\$$(patsubst \$$(OBJECTS_BASE_DIR)/\$$(SRCDIR)%.d,\$$(SOURCES_BASE_DIR)/\$$(SRCDIR)%.cpp, \$$@) FORCE\\\") | sed \\\"s/.*://g;s/\\\\\\\\\\\\\\\\//g\\\")\$$\$${NEW_LINE}\\$${NEW_LINE}\
-		\$$(patsubst %.d,%.o, \$$@): \\$$\$$(\$$(shell sha1sum <<< \"\$$@\" | sed \"s/  -//g\")) makefile\$$\$${NEW_LINE}\\$${NEW_LINE}\
-			\\$$\$$(CXX) \\$$\$$(CXXFLAGS) \\$$\$$< -o \$$(patsubst %.d,%.o, \$$@)\$$\$${NEW_LINE}\\$${NEW_LINE}\
-		\" > \$$@$${NEW_LINE}\
-	$${NEW_LINE}\
-	%/makefile: makefile$${NEW_LINE}\
-		mkdir -p \$$(dir \$$@)$${NEW_LINE}\
-		cp makefile \$$@$${NEW_LINE}\
-	$${NEW_LINE}\
-	%/: FORCE | %/makefile$${NEW_LINE}\
-		@accesstime=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\
-		\$$(MAKE) -C \$$@ SRCDIR=\$$(SRCDIR)\$$(notdir \$$(patsubst %/, %, \$$@))/ OBJECTS_BASE_DIR=\$$(OBJECTS_BASE_DIR) SOURCES_BASE_DIR=\$$(SOURCES_BASE_DIR) CXX_OTHER_FLAGS=\"\$$(CXX_OTHER_FLAGS)\" && \\$${NEW_LINE}\
-		accesstime2=\`stat -c %Y \$$@\` && \\$${NEW_LINE}\
-		if [ "\$$\$$accesstime" -ne "\$$\$$accesstime2" ]; then \\$${NEW_LINE}\
-			touch .; \\$${NEW_LINE}\
-		fi$${NEW_LINE}\
-	$${NEW_LINE}\
-	FORCE:$${NEW_LINE}\
-	$${NEW_LINE}\
-	-include \$$(DEPENDENCIES)" > $@
+	cp ../makefile-rec $@
 
 # -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 # final lib/bin construction
diff --git a/makefile-rec b/makefile-rec
new file mode 100644
index 0000000000..bf5b0a25ca
--- /dev/null
+++ b/makefile-rec
@@ -0,0 +1,46 @@
+SHELL:=/bin/bash
+SRCDIR:=
+
+define NEW_LINE
+
+
+endef
+
+export NEW_LINE
+
+CXXFLAGS:= -pipe -std=c++14 $(CXX_OTHER_FLAGS) -c -fPIC
+
+SOURCES:= $(shell find $(SOURCES_BASE_DIR)/$(SRCDIR) -maxdepth 1 -type f -name "*.cpp")
+DEPENDENCIES:= $(patsubst $(SOURCES_BASE_DIR)/$(SRCDIR)%.cpp, $(OBJECTS_BASE_DIR)/$(SRCDIR)%.d, $(SOURCES))
+OBJECTS:= $(patsubst %.d, %.o, $(DEPENDENCIES))
+SOURCES_DIRS:= $(shell find $(SOURCES_BASE_DIR)/$(SRCDIR) -maxdepth 1 -mindepth 1 -type d)
+OBJECTS_DIRS:= $(patsubst $(SOURCES_BASE_DIR)/$(SRCDIR)%, %/, $(SOURCES_DIRS))
+OBJECTS_DIRS_MAKEFILES:= $(patsubst %, %makefile, $(OBJECTS_DIRS))
+
+.PHONY: all
+.PRECIOUS: $(DEPENDECIES) $(OBJECTS_DIRS_MAKEFILES)
+
+all: $(OBJECTS_DIRS) $(OBJECTS)
+
+%.d: makefile
+	@echo "\
+	$(shell sha1sum <<< "$@" | sed "s/  -//g") = \$$(shell (\$$(CXX) -MM \$$(CXXFLAGS) $(patsubst $(OBJECTS_BASE_DIR)/$(SRCDIR)%.d,$(SOURCES_BASE_DIR)/$(SRCDIR)%.cpp, $@) 2>/dev/null || echo \"$(patsubst $(OBJECTS_BASE_DIR)/$(SRCDIR)%.d,$(SOURCES_BASE_DIR)/$(SRCDIR)%.cpp, $@) FORCE\") | sed \"s/.*://g;s/\\\\\\\\//g\")$${NEW_LINE}\
+	$(patsubst %.d,%.o, $@): \$$($(shell sha1sum <<< "$@" | sed "s/  -//g")) makefile$${NEW_LINE}\
+		\$$(CXX) \$$(CXXFLAGS) \$$< -o $(patsubst %.d,%.o, $@)$${NEW_LINE}\
+	" > $@
+
+%/makefile: makefile
+	mkdir -p $(dir $@)
+	cp makefile $@
+
+%/: FORCE | %/makefile
+	@accesstime=`stat -c %Y $@` && \
+	$(MAKE) -C $@ SRCDIR=$(SRCDIR)$(notdir $(patsubst %/, %, $@))/ OBJECTS_BASE_DIR=$(OBJECTS_BASE_DIR) SOURCES_BASE_DIR=$(SOURCES_BASE_DIR) CXX_OTHER_FLAGS="$(CXX_OTHER_FLAGS)" && \
+	accesstime2=`stat -c %Y $@` && \
+	if [ $$accesstime -ne $$accesstime2 ]; then \
+		touch .; \
+	fi
+
+FORCE:
+
+-include $(DEPENDENCIES)
-- 
GitLab