From 9cfe1f6fc5bccc2ddcf094c13d70e8b60d9e2de8 Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Wed, 7 Nov 2012 17:18:15 +0100
Subject: [PATCH] Submodule init works on Windows.

---
 scripts/cmake/Find.cmake             |  5 ++++
 scripts/cmake/SubmoduleSetup.cmake   |  2 +-
 scripts/cmake/cmake/FindGitHub.cmake | 37 ++++++++++++++++++++++++++++
 3 files changed, 43 insertions(+), 1 deletion(-)
 create mode 100644 scripts/cmake/cmake/FindGitHub.cmake

diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index a01fbef03dc..1dd0fc16339 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -27,6 +27,11 @@ FIND_PACKAGE(cppcheck)
 
 FIND_PACKAGE(PythonInterp)
 
+FIND_PACKAGE(GitHub)
+
+# Find bash itself ...
+FIND_PROGRAM(BASH_TOOL_PATH bash
+	HINTS ${GITHUB_BIN_DIR} DOC "The bash executable")
 ######################
 ### Find libraries ###
 ######################
diff --git a/scripts/cmake/SubmoduleSetup.cmake b/scripts/cmake/SubmoduleSetup.cmake
index 9f1e49a9f5a..9c99899b951 100644
--- a/scripts/cmake/SubmoduleSetup.cmake
+++ b/scripts/cmake/SubmoduleSetup.cmake
@@ -8,7 +8,7 @@ FOREACH(SUBMODULE ${REQUIRED_SUBMODULES})
 	# Check if submodule is already initialized
 	# MESSAGE(STATUS "Checking module ${SUBMODULE}")
 	EXECUTE_PROCESS(
-		COMMAND bash ${CMAKE_SOURCE_DIR}/scripts/cmake/SubmoduleCheck.sh ${SUBMODULE}
+		COMMAND ${BASH_TOOL_PATH} ${CMAKE_SOURCE_DIR}/scripts/cmake/SubmoduleCheck.sh ${SUBMODULE}
 		WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
 		RESULT_VARIABLE SUBMODULE_IS_NOT_INITIALIZED
 	)
diff --git a/scripts/cmake/cmake/FindGitHub.cmake b/scripts/cmake/cmake/FindGitHub.cmake
new file mode 100644
index 00000000000..f45cd21a290
--- /dev/null
+++ b/scripts/cmake/cmake/FindGitHub.cmake
@@ -0,0 +1,37 @@
+# - Find GitHub for Windows
+#
+#   GITHUB_FOUND    - Was GitHub for Windows found
+#   GITHUB_BIN_DIR  - Path to the bin-directory where useful bash tools can be found
+#
+# Example usage:
+#   FIND_PACKAGE(GitHub)
+#   FIND_PROGRAM(BASH_TOOL_PATH bash HINTS ${GITHUB_BIN_DIR} DOC "The bash executable")
+
+IF(WIN32 AND NOT GITHUB_FOUND)
+
+	# Check install Path
+	FIND_PATH(
+		GITHUB_DIR
+		shell.ps1
+		PATHS $ENV{LOCALAPPDATA}/GitHub
+		NO_DEFAULT_PATH
+	)
+
+	IF(GITHUB_DIR)
+
+		FILE(TO_NATIVE_PATH ${GITHUB_DIR} GITHUB_WIN_DIR)
+		EXECUTE_PROCESS (
+			COMMAND cmd /c "cd ${GITHUB_WIN_DIR}/PortableGit* & cd"
+			OUTPUT_VARIABLE PORTABLE_GIT_WIN_DIR
+		)
+
+		IF(PORTABLE_GIT_WIN_DIR)
+			STRING(STRIP ${PORTABLE_GIT_WIN_DIR} PORTABLE_GIT_WIN_DIR)
+			FILE(TO_CMAKE_PATH ${PORTABLE_GIT_WIN_DIR} PORTABLE_GIT_DIR)
+			SET(GITHUB_FOUND ON CACHE BOOL "Was GitHub for Windows found?")
+			SET(GITHUB_BIN_DIR ${PORTABLE_GIT_DIR}/bin CACHE PATH "The path to the GitHub for Windows binaries.")
+			MESSAGE(STATUS "GitHub for Windows found.")
+		ENDIF()
+
+	ENDIF()
+ENDIF()
\ No newline at end of file
-- 
GitLab