Tue, 23 Oct 2012 10:10:39 -0700
7152336: Enable builds on Windows with MinGW/MSYS
Summary: Minimal makefile changes to enable building OpenJDK using MSYS on Windows7
Reviewed-by: ohair, tbell
Contributed-by: volker.simonis@gmail.com
1.1 --- a/make/common/shared/Defs-utils.gmk Thu Oct 11 16:57:31 2012 -0700 1.2 +++ b/make/common/shared/Defs-utils.gmk Tue Oct 23 10:10:39 2012 -0700 1.3 @@ -151,16 +151,26 @@ 1.4 ifeq ($(PLATFORM),windows) 1.5 ifdef USING_CYGWIN 1.6 # Intrinsic unix command, with backslash-escaped character interpretation 1.7 - ECHO = $(UNIXCOMMAND_PATH)echo -e 1.8 - ZIPEXE = $(UNIXCOMMAND_PATH)zip 1.9 - UNZIP = $(UNIXCOMMAND_PATH)unzip 1.10 + ECHO = $(UNIXCOMMAND_PATH)echo -e 1.11 + ZIPEXE = $(UNIXCOMMAND_PATH)zip 1.12 + UNZIP = $(UNIXCOMMAND_PATH)unzip 1.13 + # Some CYGWIN nawk versions require BINMODE=w for proper '\r' interpretation 1.14 + NAWK = $(UNIXCOMMAND_PATH)awk -v BINMODE=w 1.15 else 1.16 - ZIPEXE = $(UTILS_DEVTOOL_PATH)zip 1.17 - UNZIP = $(UTILS_DEVTOOL_PATH)unzip 1.18 + ifdef USING_MSYS 1.19 + ECHO = $(UTILS_COMMAND_PATH)echo -e 1.20 + ZIPEXE = $(UTILS_DEVTOOL_PATH)zip 1.21 + UNZIP = $(UTILS_DEVTOOL_PATH)unzip 1.22 + NAWK = $(UNIXCOMMAND_PATH)awk 1.23 + else 1.24 + ZIPEXE = $(UTILS_DEVTOOL_PATH)zip 1.25 + UNZIP = $(UTILS_DEVTOOL_PATH)unzip 1.26 + NAWK = $(UNIXCOMMAND_PATH)awk 1.27 + endif 1.28 endif 1.29 # Re-define some utilities 1.30 LEX =# override GNU Make intrinsic: no lex on windows 1.31 - NAWK = $(UNIXCOMMAND_PATH)awk 1.32 + SHA1SUM = $(UNIXCOMMAND_PATH)openssl sha1 1.33 endif 1.34 1.35 # Linux specific
2.1 --- a/make/common/shared/Defs-windows.gmk Thu Oct 11 16:57:31 2012 -0700 2.2 +++ b/make/common/shared/Defs-windows.gmk Tue Oct 23 10:10:39 2012 -0700 2.3 @@ -91,6 +91,15 @@ 2.4 $(shell if [ "$1" != "" -a -d "$1" ]; then $(CYGPATH_CMD) "$1"; else echo "$1"; fi) 2.5 endef 2.6 else 2.7 +ifdef USING_MSYS 2.8 +DOSPATH_CMD:=$(shell cd $(JDK_TOPDIR) 2> $(DEV_NULL) && pwd)/make/tools/msys_build_scripts/dospath.sh 2.9 +define FullPath 2.10 +$(subst \,/,$(shell $(DOSPATH_CMD) $1)) 2.11 +endef 2.12 +define OptFullPath 2.13 +$(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) 2.14 +endef 2.15 +else 2.16 # Temporary until we upgrade to MKS 8.7, MKS pwd returns mixed mode path 2.17 define FullPath 2.18 $(shell cd $1 2> $(DEV_NULL) && pwd) 2.19 @@ -99,6 +108,7 @@ 2.20 $(shell if [ "$1" != "" -a -d "$1" ]; then (cd $1 && pwd); else echo "$1"; fi) 2.21 endef 2.22 endif 2.23 +endif 2.24 2.25 # System drive 2.26 ifdef SYSTEMDRIVE 2.27 @@ -112,14 +122,21 @@ 2.28 2.29 # UNIXCOMMAND_PATH: path to where the most common Unix commands are. 2.30 # NOTE: Must end with / so that it could be empty, allowing PATH usage. 2.31 -ifndef UNIXCOMMAND_PATH 2.32 - ifdef ALT_UNIXCOMMAND_PATH 2.33 +# With cygwin, use this as is; don't use FullPath on it. 2.34 +ifdef ALT_UNIXCOMMAND_PATH 2.35 + ifdef USING_CYGWIN 2.36 + UNIXCOMMAND_PATH :=$(call PrefixPath,$(ALT_UNIXCOMMAND_PATH)) 2.37 + else 2.38 xALT_UNIXCOMMAND_PATH :="$(subst \,/,$(ALT_UNIXCOMMAND_PATH))" 2.39 fxALT_UNIXCOMMAND_PATH :=$(call FullPath,$(xALT_UNIXCOMMAND_PATH)) 2.40 UNIXCOMMAND_PATH :=$(call PrefixPath,$(fxALT_UNIXCOMMAND_PATH)) 2.41 + endif 2.42 +else 2.43 + ifdef USING_CYGWIN 2.44 + UNIXCOMMAND_PATH :=$(call PrefixPath,/usr/bin) 2.45 else 2.46 - ifdef USING_CYGWIN 2.47 - UNIXCOMMAND_PATH :=$(call PrefixPath,/usr/bin) 2.48 + ifdef USING_MSYS 2.49 + UNIXCOMMAND_PATH :=$(call PrefixPath,/bin) 2.50 else 2.51 ifdef ROOTDIR 2.52 xROOTDIR :="$(subst \,/,$(ROOTDIR))" 2.53 @@ -131,41 +148,35 @@ 2.54 ifneq ($(_rootdir),) 2.55 UNIXCOMMAND_PATH :=$(call PrefixPath,$(_rootdir)/mksnt) 2.56 endif 2.57 - endif 2.58 - endif 2.59 - UNIXCOMMAND_PATH:=$(call AltCheckSpaces,UNIXCOMMAND_PATH) 2.60 - export UNIXCOMMAND_PATH 2.61 + endif # USING_MSYS 2.62 + endif # USING_CYGWIN 2.63 endif 2.64 +UNIXCOMMAND_PATH:=$(call AltCheckSpaces,UNIXCOMMAND_PATH) 2.65 +export UNIXCOMMAND_PATH 2.66 2.67 # Get version of MKS or CYGWIN 2.68 -ifdef USING_CYGWIN 2.69 - ifndef CYGWIN_VER 2.70 - _CYGWIN_VER :=$(shell $(UNAME)) 2.71 - CYGWIN_VER :=$(call GetVersion,$(_CYGWIN_VER)) 2.72 - export CYGWIN_VER 2.73 +ifdef USING_MKS 2.74 + _MKS_VER :=$(shell $(MKSINFO) 2>&1 | $(GREP) Release | $(TAIL) -1 | $(SED) -e 's@.*\(Release.*\)@\1@') 2.75 + MKS_VER :=$(call GetVersion,$(_MKS_VER)) 2.76 + # At this point, we can re-define FullPath to use DOSNAME_CMD 2.77 + CHECK_MKS87:=$(call CheckVersions,$(MKS_VER),8.7) 2.78 + TRY_DOSNAME:=false 2.79 + ifeq ($(CHECK_MKS87),same) 2.80 + TRY_DOSNAME:=true 2.81 endif 2.82 -else # MKS 2.83 -_MKS_VER :=$(shell $(MKSINFO) 2>&1 | $(GREP) Release | $(TAIL) -1 | $(SED) -e 's@.*\(Release.*\)@\1@') 2.84 -MKS_VER :=$(call GetVersion,$(_MKS_VER)) 2.85 -# At this point, we can re-define FullPath to use DOSNAME_CMD 2.86 -CHECK_MKS87:=$(call CheckVersions,$(MKS_VER),8.7) 2.87 -TRY_DOSNAME:=false 2.88 -ifeq ($(CHECK_MKS87),same) 2.89 -TRY_DOSNAME:=true 2.90 -endif 2.91 -# Newer should be ok 2.92 -ifeq ($(CHECK_MKS87),newer) 2.93 -TRY_DOSNAME:=true 2.94 -endif 2.95 -ifeq ($(TRY_DOSNAME),true) 2.96 -ifeq ($(shell $(UNIXCOMMAND_PATH)dosname -s $(_system_drive)/ 2> $(DEV_NULL)),$(_system_drive)/) 2.97 -_DOSNAME=$(UNIXCOMMAND_PATH)dosname 2.98 -DOSNAME_CMD:=$(_DOSNAME) -s 2.99 + # Newer should be ok 2.100 + ifeq ($(CHECK_MKS87),newer) 2.101 + TRY_DOSNAME:=true 2.102 + endif 2.103 + ifeq ($(TRY_DOSNAME),true) 2.104 + ifeq ($(shell $(UNIXCOMMAND_PATH)dosname -s $(_system_drive)/ 2> $(DEV_NULL)),$(_system_drive)/) 2.105 + _DOSNAME=$(UNIXCOMMAND_PATH)dosname 2.106 + DOSNAME_CMD:=$(_DOSNAME) -s 2.107 define FullPath 2.108 $(subst //,/,$(shell echo $1 | $(DOSNAME_CMD) 2> $(DEV_NULL))) 2.109 endef 2.110 -endif # test dosname -s 2.111 -endif # TRY_DOSNAME 2.112 + endif # test dosname -s 2.113 + endif # TRY_DOSNAME 2.114 endif # MKS 2.115 2.116 # We try to get references to what we need via the default component 2.117 @@ -240,6 +251,8 @@ 2.118 # DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) 2.119 # NOTE: Must end with / so that it could be empty, allowing PATH usage. 2.120 ifndef DEVTOOLS_PATH 2.121 + # DEVTOOLS_PATH: for other tools required for building (such as zip, etc.) 2.122 + # NOTE: Must end with / so that it could be empty, allowing PATH usage. 2.123 ifdef ALT_DEVTOOLS_PATH 2.124 xALT_DEVTOOLS_PATH :="$(subst \,/,$(ALT_DEVTOOLS_PATH))" 2.125 fxALT_DEVTOOLS_PATH :=$(call FullPath,$(xALT_DEVTOOLS_PATH)) 2.126 @@ -248,10 +261,14 @@ 2.127 ifdef USING_CYGWIN 2.128 DEVTOOLS_PATH :=$(UNIXCOMMAND_PATH) 2.129 else 2.130 - xDEVTOOLS_PATH :="$(_system_drive)/utils" 2.131 - fxDEVTOOLS_PATH :=$(call FullPath,$(xDEVTOOLS_PATH)) 2.132 - DEVTOOLS_PATH :=$(call PrefixPath,$(fxDEVTOOLS_PATH)) 2.133 - endif 2.134 + ifdef USING_MSYS 2.135 + DEVTOOLS_PATH :=$(UNIXCOMMAND_PATH) 2.136 + else 2.137 + xDEVTOOLS_PATH :="$(_system_drive)/utils" 2.138 + fxDEVTOOLS_PATH :=$(call FullPath,$(xDEVTOOLS_PATH)) 2.139 + DEVTOOLS_PATH :=$(call PrefixPath,$(fxDEVTOOLS_PATH)) 2.140 + endif # USING_MSYS 2.141 + endif # USING_CYGWIN 2.142 endif 2.143 DEVTOOLS_PATH:=$(call AltCheckSpaces,DEVTOOLS_PATH) 2.144 export DEVTOOLS_PATH
3.1 --- a/make/common/shared/Platform.gmk Thu Oct 11 16:57:31 2012 -0700 3.2 +++ b/make/common/shared/Platform.gmk Tue Oct 23 10:10:39 2012 -0700 3.3 @@ -65,6 +65,8 @@ 3.4 # REQUIRED_WINDOWS_NAME windows only: basic name of windows 3.5 # REQUIRED_WINDOWS_VERSION windows only: specific version of windows 3.6 # USING_CYGWIN windows only: true or false 3.7 +# USING_MSYS windows only: true or false 3.8 +# USING_MKS windows only: true or false 3.9 # WINDOWS_NT_VERSION_STRING windows only: long version name 3.10 # REQUIRED_OS_VERSION required OS version, e.g. 5.10, 2.4 3.11 # REQUIRED_FREE_SPACE minimum disk space needed for outputdir 3.12 @@ -327,6 +329,8 @@ 3.13 # Windows with and without CYGWIN will be slightly different 3.14 ifeq ($(SYSTEM_UNAME), Windows_NT) 3.15 PLATFORM = windows 3.16 + USING_MKS = true 3.17 + export USING_MKS 3.18 OS_VERSION := $(shell uname -r) 3.19 WINDOWS_NT_VERSION_STRING=Windows_NT 3.20 REQUIRED_MKS_VER=6.1 3.21 @@ -339,6 +343,11 @@ 3.22 WINDOWS_NT_VERSION_STRING=CYGWIN_NT 3.23 REQUIRED_CYGWIN_VER=4.0 3.24 endif 3.25 +ifneq (,$(findstring MINGW,$(SYSTEM_UNAME))) 3.26 + PLATFORM = windows 3.27 + USING_MSYS = true 3.28 + export USING_MSYS 3.29 +endif 3.30 3.31 # Platform settings specific to Windows 3.32 ifeq ($(PLATFORM), windows)