util/gitconfig: Make gitconfig a bash script

The gitconfig target has a few bashisms and would fail
silently on systems that use a POSIX standard sh (like Ubuntu dash).

Remove the code from the makefile and put it in a bash script that
is called by the gitconfig target.

Change-Id: I3bc8cf688a3ad211b57c8ca0e6b1e86c82dc6a37
Signed-off-by: Marc Jones <marcj303@gmail.com>
Reviewed-on: https://review.coreboot.org/22857
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
diff --git a/Makefile.inc b/Makefile.inc
index f93b4bd..413f7ad 100644
--- a/Makefile.inc
+++ b/Makefile.inc
@@ -570,34 +570,7 @@
 	dongle.py -c /dev/term/1 $(obj)/coreboot.rom EOF
 
 gitconfig:
-	[ -d .git ]
-	mkdir -p .git/hooks
-	for hook in commit-msg pre-commit ; do                       \
-		if [ util/gitconfig/$$hook -nt .git/hooks/$$hook -o  \
-		! -x .git/hooks/$$hook ]; then			     \
-			sed -e "s,%MAKE%,$(MAKE),g" util/gitconfig/$$hook > .git/hooks/$$hook;  \
-			chmod +x .git/hooks/$$hook;		     \
-		fi;						     \
-	done
-	# Now set up thehooks for 3rdparty/
-	for hooks in .git/modules/{3rdparty/blobs,libhwbase,libgfxinit}/hooks; do			\
-		if [ -d $$hooks -a									\
-		\( util/gitconfig/commit-msg -nt $$hooks/commit-msg -o					\
-			! -x $$hooks/commit-msg \) ]; then						\
-			sed -e "s,%MAKE%,$(MAKE),g" util/gitconfig/commit-msg > $$hooks/commit-msg;	\
-			chmod +x $$hooks/commit-msg;							\
-		fi											\
-	done
-	for d in 3rdparty/{blobs,libhwbase,libgfxinit}; do			\
-		if [ -d $$d ]; then						\
-			(cd $$d;						\
-			 git config remote.origin.push HEAD:refs/for/master);	\
-		fi;								\
-	done
-	git config remote.origin.push HEAD:refs/for/master
-	git config alias.sup '!git submodule update --remote --rebase && git submodule update --init --checkout'
-	git config alias.sup-destroy '!git submodule deinit --force "$$(git rev-parse --show-toplevel)"; git submodule init && git submodule update --checkout'
-	(git config --includes user.name >/dev/null && git config --includes user.email >/dev/null) || (printf 'Please configure your name and email in git:\n\n git config --global user.name "Your Name Comes Here"\n git config --global user.email your.email@example.com\n'; exit 1)
+	util/gitconfig/gitconfig.sh
 
 include util/crossgcc/Makefile.inc
 
diff --git a/util/gitconfig/gitconfig.sh b/util/gitconfig/gitconfig.sh
new file mode 100755
index 0000000..116e7fb
--- /dev/null
+++ b/util/gitconfig/gitconfig.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+if [ ! -d .git ]; then
+	echo "Error: Not in a git repository"
+	exit 1
+fi
+mkdir -p .git/hooks
+for hook in commit-msg pre-commit ; do
+	if [ util/gitconfig/$hook -nt .git/hooks/$hook ] || \
+		[ ! -x .git/hooks/$hook ]; then
+		sed -e "s,%MAKE%,remake,g" util/gitconfig/$hook > .git/hooks/$hook
+		chmod +x .git/hooks/$hook
+	fi
+done
+# Now set up the hooks for 3rdparty/
+for hooks in .git/modules/{3rdparty/blobs,libhwbase,libgfxinit}/hooks; do
+	if [ -d $hooks ]; then
+		if [ util/gitconfig/commit-msg -nt $hooks/commit-msg ] || \
+			[ ! -x $hooks/commit-msg ]; then
+			sed -e "s,%MAKE%,remake,g"
+				util/gitconfig/commit-msg > $hooks/commit-msg
+			chmod +x $hooks/commit-msg
+		fi
+	fi
+done
+for d in 3rdparty/{blobs,libhwbase,libgfxinit}; do
+	if [ -d $d ]; then
+		(cd $d || exit 1
+		 git config remote.origin.push HEAD:refs/for/master)
+	fi
+done
+git config remote.origin.push HEAD:refs/for/master
+git config alias.sup '!git submodule update --remote --rebase && git submodule update --init --checkout'
+git config alias.sup-destroy '!git submodule deinit --force "$(git rev-parse --show-toplevel)"; git submodule init && git submodule update --checkout'
+(git config --includes user.name >/dev/null && git config --includes user.email >/dev/null) || (printf 'Please configure your name and email in git:\n\n git config --global user.name "Your Name Comes Here"\n git config --global user.email your.email@example.com\n'; exit 1)