7152336: Enable builds on Windows with MinGW/MSYS

Tue, 23 Oct 2012 10:10:39 -0700

author
tbell
date
Tue, 23 Oct 2012 10:10:39 -0700
changeset 406
0a5931be9176
parent 404
0e08ba7648fb
child 407
08afb9c6f44f

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

make/common/shared/Defs-utils.gmk file | annotate | diff | comparison | revisions
make/common/shared/Defs-windows.gmk file | annotate | diff | comparison | revisions
make/common/shared/Platform.gmk file | annotate | diff | comparison | revisions
     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)

mercurial