8016601: Unable to build hsx24 on Windows using project creator and Visual Studio

Thu, 08 Aug 2013 09:21:30 -0700

author
dcubed
date
Thu, 08 Aug 2013 09:21:30 -0700
changeset 5500
31f3b1e1c5e5
parent 5499
195ff07bc7f6
child 5501
c661fa2e5189
child 5502
57ac7245594c

8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
Summary: ProjectCreator tool is modified to support two new options: '-relativeAltSrcInclude' and '-altRelativeInclude' which prevents IDE linker errors. Also fixed some cmd line build linker warnings. Misc cleanups.
Reviewed-by: rdurbin, coleenp

make/windows/create.bat file | annotate | diff | comparison | revisions
make/windows/create_obj_files.sh file | annotate | diff | comparison | revisions
make/windows/makefiles/projectcreator.make file | annotate | diff | comparison | revisions
make/windows/makefiles/trace.make file | annotate | diff | comparison | revisions
make/windows/makefiles/vm.make file | annotate | diff | comparison | revisions
src/share/tools/ProjectCreator/BuildConfig.java file | annotate | diff | comparison | revisions
src/share/tools/ProjectCreator/FileTreeCreatorVC10.java file | annotate | diff | comparison | revisions
src/share/tools/ProjectCreator/ProjectCreator.java file | annotate | diff | comparison | revisions
src/share/tools/ProjectCreator/WinGammaPlatform.java file | annotate | diff | comparison | revisions
src/share/tools/ProjectCreator/WinGammaPlatformVC10.java file | annotate | diff | comparison | revisions
     1.1 --- a/make/windows/create.bat	Wed Aug 07 19:02:06 2013 +0400
     1.2 +++ b/make/windows/create.bat	Thu Aug 08 09:21:30 2013 -0700
     1.3 @@ -1,6 +1,6 @@
     1.4  @echo off
     1.5  REM
     1.6 -REM Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
     1.7 +REM Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
     1.8  REM DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.9  REM
    1.10  REM This code is free software; you can redistribute it and/or modify it
    1.11 @@ -148,7 +148,7 @@
    1.12  
    1.13  REM This is now safe to do.
    1.14  :copyfiles
    1.15 -for /D %%i in (compiler1, compiler2, tiered, core) do (
    1.16 +for /D %%i in (compiler1, compiler2, tiered ) do (
    1.17  if NOT EXIST %HotSpotBuildSpace%\%%i\generated mkdir %HotSpotBuildSpace%\%%i\generated
    1.18  copy %HotSpotWorkSpace%\make\windows\projectfiles\%%i\* %HotSpotBuildSpace%\%%i\generated > NUL
    1.19  )
    1.20 @@ -156,7 +156,7 @@
    1.21  REM force regneration of ProjectFile
    1.22  if exist %ProjectFile% del %ProjectFile%
    1.23  
    1.24 -for /D %%i in (compiler1, compiler2, tiered, core) do (
    1.25 +for /D %%i in (compiler1, compiler2, tiered ) do (
    1.26  echo -- %%i --
    1.27  echo # Generated file!                                                        >    %HotSpotBuildSpace%\%%i\local.make
    1.28  echo # Changing a variable below and then deleting %ProjectFile% will cause  >>    %HotSpotBuildSpace%\%%i\local.make
     2.1 --- a/make/windows/create_obj_files.sh	Wed Aug 07 19:02:06 2013 +0400
     2.2 +++ b/make/windows/create_obj_files.sh	Thu Aug 08 09:21:30 2013 -0700
     2.3 @@ -73,19 +73,17 @@
     2.4  
     2.5  BASE_PATHS="${BASE_PATHS} ${GENERATED}/jvmtifiles ${GENERATED}/tracefiles"
     2.6  
     2.7 -if [ -d "${ALTSRC}/share/vm/jfr" ]; then
     2.8 -  BASE_PATHS="${BASE_PATHS} ${ALTSRC}/share/vm/jfr"
     2.9 +if [ -d "${ALTSRC}/share/vm/jfr/buffers" ]; then
    2.10    BASE_PATHS="${BASE_PATHS} ${ALTSRC}/share/vm/jfr/buffers"
    2.11  fi
    2.12  
    2.13  BASE_PATHS="${BASE_PATHS} ${COMMONSRC}/share/vm/prims/wbtestmethods"
    2.14  
    2.15 -CORE_PATHS="${BASE_PATHS}"
    2.16  # shared is already in BASE_PATHS. Should add vm/memory but that one is also in BASE_PATHS.
    2.17  if [ -d "${ALTSRC}/share/vm/gc_implementation" ]; then
    2.18 -  CORE_PATHS="${CORE_PATHS} `$FIND ${ALTSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`"
    2.19 +  BASE_PATHS="${BASE_PATHS} `$FIND ${ALTSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`"
    2.20  fi
    2.21 -CORE_PATHS="${CORE_PATHS} `$FIND ${COMMONSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`"
    2.22 +BASE_PATHS="${BASE_PATHS} `$FIND ${COMMONSRC}/share/vm/gc_implementation ! -name gc_implementation -prune -type d \! -name shared`"
    2.23  
    2.24  if [ -d "${ALTSRC}/share/vm/c1" ]; then
    2.25    COMPILER1_PATHS="${ALTSRC}/share/vm/c1"
    2.26 @@ -104,12 +102,11 @@
    2.27  
    2.28  # Include dirs per type.
    2.29  case "${TYPE}" in
    2.30 -    "core")      Src_Dirs="${CORE_PATHS}" ;;
    2.31 -    "compiler1") Src_Dirs="${CORE_PATHS} ${COMPILER1_PATHS}" ;;
    2.32 -    "compiler2") Src_Dirs="${CORE_PATHS} ${COMPILER2_PATHS}" ;;
    2.33 -    "tiered")    Src_Dirs="${CORE_PATHS} ${COMPILER1_PATHS} ${COMPILER2_PATHS}" ;;
    2.34 -    "zero")      Src_Dirs="${CORE_PATHS}" ;;
    2.35 -    "shark")     Src_Dirs="${CORE_PATHS}" ;;
    2.36 +    "compiler1") Src_Dirs="${BASE_PATHS} ${COMPILER1_PATHS}" ;;
    2.37 +    "compiler2") Src_Dirs="${BASE_PATHS} ${COMPILER2_PATHS}" ;;
    2.38 +    "tiered")    Src_Dirs="${BASE_PATHS} ${COMPILER1_PATHS} ${COMPILER2_PATHS}" ;;
    2.39 +    "zero")      Src_Dirs="${BASE_PATHS}" ;;
    2.40 +    "shark")     Src_Dirs="${BASE_PATHS}" ;;
    2.41  esac
    2.42  
    2.43  COMPILER2_SPECIFIC_FILES="opto libadt bcEscapeAnalyzer.cpp c2_* runtime_*"
    2.44 @@ -122,7 +119,6 @@
    2.45  
    2.46  # Exclude per type.
    2.47  case "${TYPE}" in
    2.48 -    "core")      Src_Files_EXCLUDE="${Src_Files_EXCLUDE} ${COMPILER1_SPECIFIC_FILES} ${COMPILER2_SPECIFIC_FILES} ${ZERO_SPECIFIC_FILES} ${SHARK_SPECIFIC_FILES} ciTypeFlow.cpp" ;;
    2.49      "compiler1") Src_Files_EXCLUDE="${Src_Files_EXCLUDE} ${COMPILER2_SPECIFIC_FILES} ${ZERO_SPECIFIC_FILES} ${SHARK_SPECIFIC_FILES} ciTypeFlow.cpp" ;;
    2.50      "compiler2") Src_Files_EXCLUDE="${Src_Files_EXCLUDE} ${COMPILER1_SPECIFIC_FILES} ${ZERO_SPECIFIC_FILES} ${SHARK_SPECIFIC_FILES}" ;;
    2.51      "tiered")    Src_Files_EXCLUDE="${Src_Files_EXCLUDE} ${ZERO_SPECIFIC_FILES} ${SHARK_SPECIFIC_FILES}" ;;
    2.52 @@ -149,9 +145,17 @@
    2.53     Src_Files="${Src_Files}`findsrc ${e}` "
    2.54  done 
    2.55  
    2.56 -Obj_Files=
    2.57 +Obj_Files=" "
    2.58  for e in ${Src_Files}; do
    2.59 -	Obj_Files="${Obj_Files}${e%\.[!.]*}.obj "
    2.60 +        o="${e%\.[!.]*}.obj"
    2.61 +        set +e
    2.62 +        chk=`expr "${Obj_Files}" : ".* $o"`
    2.63 +        set -e
    2.64 +        if [ "$chk" != 0 ]; then
    2.65 +             echo "# INFO: skipping duplicate $o"
    2.66 +             continue
    2.67 +        fi
    2.68 +	Obj_Files="${Obj_Files}$o "
    2.69  done
    2.70  
    2.71  echo Obj_Files=${Obj_Files}
     3.1 --- a/make/windows/makefiles/projectcreator.make	Wed Aug 07 19:02:06 2013 +0400
     3.2 +++ b/make/windows/makefiles/projectcreator.make	Thu Aug 08 09:21:30 2013 -0700
     3.3 @@ -44,10 +44,11 @@
     3.4  
     3.5  # This is only used internally
     3.6  ProjectCreatorIncludesPRIVATE=\
     3.7 -        -relativeInclude src\closed\share\vm \
     3.8 -        -relativeInclude src\closed\os\windows\vm \
     3.9 -        -relativeInclude src\closed\os_cpu\windows_$(Platform_arch)\vm \
    3.10 -        -relativeInclude src\closed\cpu\$(Platform_arch)\vm \
    3.11 +        -relativeAltSrcInclude src\closed \
    3.12 +        -altRelativeInclude share\vm \
    3.13 +        -altRelativeInclude os\windows\vm \
    3.14 +        -altRelativeInclude os_cpu\windows_$(Platform_arch)\vm \
    3.15 +        -altRelativeInclude cpu\$(Platform_arch)\vm \
    3.16          -relativeInclude src\share\vm \
    3.17          -relativeInclude src\share\vm\precompiled \
    3.18          -relativeInclude src\share\vm\prims\wbtestmethods \
    3.19 @@ -91,7 +92,7 @@
    3.20          -disablePch        getThread_windows_$(Platform_arch).cpp \
    3.21          -disablePch_compiler2     opcodes.cpp
    3.22  
    3.23 -# Common options for the IDE builds for core, c1, and c2
    3.24 +# Common options for the IDE builds for c1, and c2
    3.25  ProjectCreatorIDEOptions=\
    3.26          $(ProjectCreatorIDEOptions) \
    3.27          -sourceBase $(HOTSPOTWORKSPACE) \
    3.28 @@ -158,18 +159,10 @@
    3.29   -ignoreFile_TARGET $(Platform_arch_model).ad
    3.30  
    3.31  ##################################################
    3.32 -# Without compiler(core) specific options
    3.33 -##################################################
    3.34 -ProjectCreatorIDEOptions=$(ProjectCreatorIDEOptions) \
    3.35 -$(ProjectCreatorIDEOptionsIgnoreCompiler1:TARGET=core) \
    3.36 -$(ProjectCreatorIDEOptionsIgnoreCompiler2:TARGET=core)
    3.37 -
    3.38 -##################################################
    3.39  # Client(C1) compiler specific options
    3.40  ##################################################
    3.41  ProjectCreatorIDEOptions=$(ProjectCreatorIDEOptions) \
    3.42   -define_compiler1 COMPILER1 \
    3.43 - -ignorePath_compiler1 core \
    3.44  $(ProjectCreatorIDEOptionsIgnoreCompiler2:TARGET=compiler1)
    3.45  
    3.46  ##################################################
    3.47 @@ -178,7 +171,6 @@
    3.48  #NOTE! This list must be kept in sync with GENERATED_NAMES in adlc.make.
    3.49  ProjectCreatorIDEOptions=$(ProjectCreatorIDEOptions) \
    3.50   -define_compiler2 COMPILER2 \
    3.51 - -ignorePath_compiler2 core \
    3.52   -additionalFile_compiler2 $(Platform_arch_model).ad \
    3.53   -additionalFile_compiler2 ad_$(Platform_arch_model).cpp \
    3.54   -additionalFile_compiler2 ad_$(Platform_arch_model).hpp \
     4.1 --- a/make/windows/makefiles/trace.make	Wed Aug 07 19:02:06 2013 +0400
     4.2 +++ b/make/windows/makefiles/trace.make	Thu Aug 08 09:21:30 2013 -0700
     4.3 @@ -90,25 +90,25 @@
     4.4  !if "$(OPENJDK)" == "true"
     4.5  
     4.6  $(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceSrcDir)/traceEventClasses.xsl $(XML_DEPS)
     4.7 -	@echo Generating $@
     4.8 +	@echo Generating OpenJDK $@
     4.9  	@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceSrcDir)/traceEventClasses.xsl -OUT $(TraceOutDir)/traceEventClasses.hpp
    4.10  
    4.11  !else
    4.12  
    4.13  $(TraceOutDir)/traceEventClasses.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventClasses.xsl $(XML_DEPS)
    4.14 -	@echo Generating $@
    4.15 +	@echo Generating AltSrc $@
    4.16  	@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceEventClasses.xsl -OUT $(TraceOutDir)/traceEventClasses.hpp
    4.17  
    4.18  $(TraceOutDir)/traceProducer.cpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceProducer.xsl $(XML_DEPS)
    4.19 -	@echo Generating $@
    4.20 +	@echo Generating AltSrc $@
    4.21  	@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceProducer.xsl -OUT $(TraceOutDir)/traceProducer.cpp
    4.22  
    4.23  $(TraceOutDir)/traceRequestables.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceRequestables.xsl $(XML_DEPS)
    4.24 -	@echo Generating $@
    4.25 +	@echo Generating AltSrc $@
    4.26  	@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceRequestables.xsl -OUT $(TraceOutDir)/traceRequestables.hpp
    4.27  
    4.28  $(TraceOutDir)/traceEventControl.hpp: $(TraceSrcDir)/trace.xml $(TraceAltSrcDir)/traceEventControl.xsl $(XML_DEPS)
    4.29 -	@echo Generating $@
    4.30 +	@echo Generating AltSrc $@
    4.31  	@$(XSLT) -IN $(TraceSrcDir)/trace.xml -XSL $(TraceAltSrcDir)/traceEventControl.xsl -OUT $(TraceOutDir)/traceEventControl.hpp
    4.32  
    4.33  !endif
     5.1 --- a/make/windows/makefiles/vm.make	Wed Aug 07 19:02:06 2013 +0400
     5.2 +++ b/make/windows/makefiles/vm.make	Thu Aug 08 09:21:30 2013 -0700
     5.3 @@ -36,10 +36,6 @@
     5.4  CXX_FLAGS=$(CXX_FLAGS) /D "ASSERT"
     5.5  !endif
     5.6  
     5.7 -!if "$(Variant)" == "core"
     5.8 -# No need to define anything, CORE is defined as !COMPILER1 && !COMPILER2
     5.9 -!endif
    5.10 -
    5.11  !if "$(Variant)" == "compiler1"
    5.12  CXX_FLAGS=$(CXX_FLAGS) /D "COMPILER1"
    5.13  !endif
     6.1 --- a/src/share/tools/ProjectCreator/BuildConfig.java	Wed Aug 07 19:02:06 2013 +0400
     6.2 +++ b/src/share/tools/ProjectCreator/BuildConfig.java	Thu Aug 08 09:21:30 2013 -0700
     6.3 @@ -142,6 +142,69 @@
     6.4          return rv;
     6.5      }
     6.6  
     6.7 +    // Returns true if the specified path refers to a relative alternate
     6.8 +    // source file. RelativeAltSrcInclude is usually "src\closed".
     6.9 +    public static boolean matchesRelativeAltSrcInclude(String path) {
    6.10 +        String relativeAltSrcInclude =
    6.11 +            getFieldString(null, "RelativeAltSrcInclude");
    6.12 +        Vector<String> v = getFieldVector(null, "AltRelativeInclude");
    6.13 +        for (String pathPart : v) {
    6.14 +            if (path.contains(relativeAltSrcInclude + Util.sep + pathPart))  {
    6.15 +                return true;
    6.16 +            }
    6.17 +        }
    6.18 +        return false;
    6.19 +    }
    6.20 +
    6.21 +    // Returns the relative alternate source file for the specified path.
    6.22 +    // Null is returned if the specified path does not have a matching
    6.23 +    // alternate source file.
    6.24 +    public static String getMatchingRelativeAltSrcFile(String path) {
    6.25 +        Vector<String> v = getFieldVector(null, "RelativeAltSrcFileList");
    6.26 +        if (v == null) {
    6.27 +            return null;
    6.28 +        }
    6.29 +        for (String pathPart : v) {
    6.30 +            if (path.endsWith(pathPart)) {
    6.31 +                String relativeAltSrcInclude =
    6.32 +                    getFieldString(null, "RelativeAltSrcInclude");
    6.33 +                return relativeAltSrcInclude + Util.sep + pathPart;
    6.34 +            }
    6.35 +        }
    6.36 +        return null;
    6.37 +    }
    6.38 +
    6.39 +    // Returns true if the specified path has a matching alternate
    6.40 +    // source file.
    6.41 +    public static boolean matchesRelativeAltSrcFile(String path) {
    6.42 +        return getMatchingRelativeAltSrcFile(path) != null;
    6.43 +    }
    6.44 +
    6.45 +    // Track the specified alternate source file. The source file is
    6.46 +    // tracked without the leading .*<sep><RelativeAltSrcFileList><sep>
    6.47 +    // part to make matching regular source files easier.
    6.48 +    public static void trackRelativeAltSrcFile(String path) {
    6.49 +        String pattern = getFieldString(null, "RelativeAltSrcInclude") +
    6.50 +            Util.sep;
    6.51 +        int altSrcInd = path.indexOf(pattern);
    6.52 +        if (altSrcInd == -1) {
    6.53 +            // not an AltSrc path
    6.54 +            return;
    6.55 +        }
    6.56 +
    6.57 +        altSrcInd += pattern.length();
    6.58 +        if (altSrcInd >= path.length()) {
    6.59 +            // not a valid AltSrc path
    6.60 +            return;
    6.61 +        }
    6.62 +
    6.63 +        String altSrcFile = path.substring(altSrcInd);
    6.64 +        Vector v = getFieldVector(null, "RelativeAltSrcFileList");
    6.65 +        if (v == null || !v.contains(altSrcFile)) {
    6.66 +            addFieldVector(null, "RelativeAltSrcFileList", altSrcFile);
    6.67 +        }
    6.68 +    }
    6.69 +
    6.70      void addTo(Hashtable ht, String key, String value) {
    6.71          ht.put(expandFormat(key), expandFormat(value));
    6.72      }
    6.73 @@ -272,8 +335,19 @@
    6.74  
    6.75      private Vector getSourceIncludes() {
    6.76          Vector<String> rv = new Vector<String>();
    6.77 +        String sourceBase = getFieldString(null, "SourceBase");
    6.78 +
    6.79 +        // add relative alternate source include values:
    6.80 +        String relativeAltSrcInclude =
    6.81 +            getFieldString(null, "RelativeAltSrcInclude");
    6.82 +        Vector<String> asri = new Vector<String>();
    6.83 +        collectRelevantVectors(asri, "AltRelativeInclude");
    6.84 +        for (String f : asri) {
    6.85 +            rv.add(sourceBase + Util.sep + relativeAltSrcInclude +
    6.86 +                   Util.sep + f);
    6.87 +        }
    6.88 +
    6.89          Vector<String> ri = new Vector<String>();
    6.90 -        String sourceBase = getFieldString(null, "SourceBase");
    6.91          collectRelevantVectors(ri, "RelativeInclude");
    6.92          for (String f : ri) {
    6.93              rv.add(sourceBase + Util.sep + f);
    6.94 @@ -541,35 +615,6 @@
    6.95      }
    6.96  }
    6.97  
    6.98 -class CoreDebugConfig extends GenericDebugNonKernelConfig {
    6.99 -    String getOptFlag() {
   6.100 -        return getCI().getNoOptFlag();
   6.101 -    }
   6.102 -
   6.103 -    CoreDebugConfig() {
   6.104 -        initNames("core", "debug", "jvm.dll");
   6.105 -        init(getIncludes(), getDefines());
   6.106 -    }
   6.107 -}
   6.108 -
   6.109 -class CoreFastDebugConfig extends GenericDebugNonKernelConfig {
   6.110 -    String getOptFlag() {
   6.111 -        return getCI().getOptFlag();
   6.112 -    }
   6.113 -
   6.114 -    CoreFastDebugConfig() {
   6.115 -        initNames("core", "fastdebug", "jvm.dll");
   6.116 -        init(getIncludes(), getDefines());
   6.117 -    }
   6.118 -}
   6.119 -
   6.120 -class CoreProductConfig extends ProductConfig {
   6.121 -    CoreProductConfig() {
   6.122 -        initNames("core", "product", "jvm.dll");
   6.123 -        init(getIncludes(), getDefines());
   6.124 -    }
   6.125 -}
   6.126 -
   6.127  
   6.128  abstract class CompilerInterface {
   6.129      abstract Vector getBaseCompilerFlags(Vector defines, Vector includes, String outDir);
     7.1 --- a/src/share/tools/ProjectCreator/FileTreeCreatorVC10.java	Wed Aug 07 19:02:06 2013 +0400
     7.2 +++ b/src/share/tools/ProjectCreator/FileTreeCreatorVC10.java	Thu Aug 08 09:21:30 2013 -0700
     7.3 @@ -1,3 +1,27 @@
     7.4 +/*
     7.5 + * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
     7.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     7.7 + *
     7.8 + * This code is free software; you can redistribute it and/or modify it
     7.9 + * under the terms of the GNU General Public License version 2 only, as
    7.10 + * published by the Free Software Foundation.
    7.11 + *
    7.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
    7.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    7.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    7.15 + * version 2 for more details (a copy is included in the LICENSE file that
    7.16 + * accompanied this code).
    7.17 + *
    7.18 + * You should have received a copy of the GNU General Public License version
    7.19 + * 2 along with this work; if not, write to the Free Software Foundation,
    7.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    7.21 + *
    7.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    7.23 + * or visit www.oracle.com if you need additional information or have any
    7.24 + * questions.
    7.25 + *
    7.26 + */
    7.27 +
    7.28  import static java.nio.file.FileVisitResult.CONTINUE;
    7.29  
    7.30  import java.io.IOException;
    7.31 @@ -21,6 +45,8 @@
    7.32           boolean usePch = false;
    7.33           boolean disablePch = false;
    7.34           boolean useIgnore = false;
    7.35 +         boolean isAltSrc = false;  // only needed as a debugging crumb
    7.36 +         boolean isReplacedByAltSrc = false;
    7.37           String fileName = file.getFileName().toString();
    7.38  
    7.39           // TODO hideFile
    7.40 @@ -30,6 +56,26 @@
    7.41              usePch = true;
    7.42           }
    7.43  
    7.44 +         String fileLoc = vcProjLocation.relativize(file).toString();
    7.45 +
    7.46 +         // isAltSrc and isReplacedByAltSrc applies to all configs for a file
    7.47 +         if (BuildConfig.matchesRelativeAltSrcInclude(
    7.48 +               file.toAbsolutePath().toString())) {
    7.49 +            // current file is an alternate source file so track it
    7.50 +            isAltSrc = true;
    7.51 +            BuildConfig.trackRelativeAltSrcFile(
    7.52 +                file.toAbsolutePath().toString());
    7.53 +         } else if (BuildConfig.matchesRelativeAltSrcFile(
    7.54 +                    file.toAbsolutePath().toString())) {
    7.55 +            // current file is a regular file that matches an alternate
    7.56 +            // source file so yack about replacing the regular file
    7.57 +            isReplacedByAltSrc = true;
    7.58 +            System.out.println("INFO: alternate source file '" +
    7.59 +                               BuildConfig.getMatchingRelativeAltSrcFile(
    7.60 +                                   file.toAbsolutePath().toString()) +
    7.61 +                               "' replaces '" + fileLoc + "'");
    7.62 +         }
    7.63 +
    7.64           for (BuildConfig cfg : allConfigs) {
    7.65              if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) {
    7.66                 useIgnore = true;
    7.67 @@ -58,9 +104,8 @@
    7.68           }
    7.69  
    7.70           String tagName = wg.getFileTagFromSuffix(fileName);
    7.71 -         String fileLoc = vcProjLocation.relativize(file).toString();
    7.72  
    7.73 -         if (!useIgnore && !disablePch && !usePch) {
    7.74 +         if (!useIgnore && !disablePch && !usePch && !isReplacedByAltSrc) {
    7.75              wg.tag(tagName, new String[] { "Include", fileLoc});
    7.76           } else {
    7.77              wg.startTag(
    7.78 @@ -78,6 +123,11 @@
    7.79                 if (disablePch) {
    7.80                    wg.tag("PrecompiledHeader", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'");
    7.81                 }
    7.82 +               if (isReplacedByAltSrc) {
    7.83 +                  wg.tagData("ExcludedFromBuild", "true", "Condition",
    7.84 +                             "'$(Configuration)|$(Platform)'=='" +
    7.85 +                             cfg.get("Name") + "'");
    7.86 +               }
    7.87              }
    7.88              wg.endTag();
    7.89           }
    7.90 @@ -137,6 +187,4 @@
    7.91        public void writeFileTree() throws IOException {
    7.92           Files.walkFileTree(this.startDir, this);
    7.93        }
    7.94 -
    7.95 -
    7.96 -   }
    7.97 \ No newline at end of file
    7.98 +}
     8.1 --- a/src/share/tools/ProjectCreator/ProjectCreator.java	Wed Aug 07 19:02:06 2013 +0400
     8.2 +++ b/src/share/tools/ProjectCreator/ProjectCreator.java	Thu Aug 08 09:21:30 2013 -0700
     8.3 @@ -1,5 +1,5 @@
     8.4  /*
     8.5 - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
     8.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
     8.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     8.8   *
     8.9   * This code is free software; you can redistribute it and/or modify it
    8.10 @@ -39,10 +39,15 @@
    8.11              + "jvm.dll; no trailing slash>");
    8.12        System.err.println("  If any of the above are specified, "
    8.13              + "they must all be.");
    8.14 +      System.err.println("  Note: if '-altRelativeInclude' option below is "
    8.15 +            + "used, then the '-relativeAltSrcInclude' option must be used "
    8.16 +            + "to specify the alternate source dir, e.g., 'src\\closed'");
    8.17        System.err.println("  Additional, optional arguments, which can be "
    8.18              + "specified multiple times:");
    8.19        System.err.println("    -absoluteInclude <string containing absolute "
    8.20              + "path to include directory>");
    8.21 +      System.err.println("    -altRelativeInclude <string containing "
    8.22 +            + "alternate include directory relative to -envVar>");
    8.23        System.err.println("    -relativeInclude <string containing include "
    8.24              + "directory relative to -envVar>");
    8.25        System.err.println("    -define <preprocessor flag to be #defined "
     9.1 --- a/src/share/tools/ProjectCreator/WinGammaPlatform.java	Wed Aug 07 19:02:06 2013 +0400
     9.2 +++ b/src/share/tools/ProjectCreator/WinGammaPlatform.java	Thu Aug 08 09:21:30 2013 -0700
     9.3 @@ -1,5 +1,5 @@
     9.4  /*
     9.5 - * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
     9.6 + * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
     9.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     9.8   *
     9.9   * This code is free software; you can redistribute it and/or modify it
    9.10 @@ -140,10 +140,17 @@
    9.11                             "already exist>");
    9.12          System.err.println("  If any of the above are specified, "+
    9.13                             "they must all be.");
    9.14 +        System.err.println("  Note: if '-altRelativeInclude' option below " +
    9.15 +                           "is used, then the '-relativeAltSrcInclude' " +
    9.16 +                           "option must be used to specify the alternate " +
    9.17 +                           "source dir, e.g., 'src\\closed'");
    9.18          System.err.println("  Additional, optional arguments, which can be " +
    9.19                             "specified multiple times:");
    9.20          System.err.println("    -absoluteInclude <string containing absolute " +
    9.21                             "path to include directory>");
    9.22 +        System.err.println("    -altRelativeInclude <string containing " +
    9.23 +                           "alternate include directory relative to " +
    9.24 +                           "-sourceBase>");
    9.25          System.err.println("    -relativeInclude <string containing include " +
    9.26                             "directory relative to -sourceBase>");
    9.27          System.err.println("    -define <preprocessor flag to be #defined " +
    9.28 @@ -343,6 +350,12 @@
    9.29                                HsArgHandler.VECTOR
    9.30                                ),
    9.31  
    9.32 +                new HsArgRule("-altRelativeInclude",
    9.33 +                              "AltRelativeInclude",
    9.34 +                              null,
    9.35 +                              HsArgHandler.VECTOR
    9.36 +                              ),
    9.37 +
    9.38                  new HsArgRule("-relativeInclude",
    9.39                                "RelativeInclude",
    9.40                                null,
    9.41 @@ -355,6 +368,12 @@
    9.42                                HsArgHandler.VECTOR
    9.43                                ),
    9.44  
    9.45 +                new HsArgRule("-relativeAltSrcInclude",
    9.46 +                              "RelativeAltSrcInclude",
    9.47 +                              null,
    9.48 +                              HsArgHandler.STRING
    9.49 +                              ),
    9.50 +
    9.51                  new HsArgRule("-relativeSrcInclude",
    9.52                                "RelativeSrcInclude",
    9.53                                null,
    9.54 @@ -560,10 +579,6 @@
    9.55          allConfigs.add(new TieredFastDebugConfig());
    9.56          allConfigs.add(new TieredProductConfig());
    9.57  
    9.58 -        allConfigs.add(new CoreDebugConfig());
    9.59 -        allConfigs.add(new CoreFastDebugConfig());
    9.60 -        allConfigs.add(new CoreProductConfig());
    9.61 -
    9.62          return allConfigs;
    9.63      }
    9.64  
    10.1 --- a/src/share/tools/ProjectCreator/WinGammaPlatformVC10.java	Wed Aug 07 19:02:06 2013 +0400
    10.2 +++ b/src/share/tools/ProjectCreator/WinGammaPlatformVC10.java	Thu Aug 08 09:21:30 2013 -0700
    10.3 @@ -1,3 +1,27 @@
    10.4 +/*
    10.5 + * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
    10.6 + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
    10.7 + *
    10.8 + * This code is free software; you can redistribute it and/or modify it
    10.9 + * under the terms of the GNU General Public License version 2 only, as
   10.10 + * published by the Free Software Foundation.
   10.11 + *
   10.12 + * This code is distributed in the hope that it will be useful, but WITHOUT
   10.13 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
   10.14 + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   10.15 + * version 2 for more details (a copy is included in the LICENSE file that
   10.16 + * accompanied this code).
   10.17 + *
   10.18 + * You should have received a copy of the GNU General Public License version
   10.19 + * 2 along with this work; if not, write to the Free Software Foundation,
   10.20 + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
   10.21 + *
   10.22 + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
   10.23 + * or visit www.oracle.com if you need additional information or have any
   10.24 + * questions.
   10.25 + *
   10.26 + */
   10.27 +
   10.28  import java.io.File;
   10.29  import java.io.FileNotFoundException;
   10.30  import java.io.IOException;
   10.31 @@ -24,7 +48,7 @@
   10.32      public void writeProjectFile(String projectFileName, String projectName,
   10.33              Vector<BuildConfig> allConfigs) throws IOException {
   10.34          System.out.println();
   10.35 -        System.out.print("    Writing .vcxproj file: " + projectFileName);
   10.36 +        System.out.println("    Writing .vcxproj file: " + projectFileName);
   10.37  
   10.38          String projDir = Util.normalize(new File(projectFileName).getParent());
   10.39  
   10.40 @@ -114,7 +138,7 @@
   10.41  
   10.42          endTag();
   10.43          printWriter.close();
   10.44 -        System.out.println("    Done.");
   10.45 +        System.out.println("    Done writing .vcxproj file.");
   10.46  
   10.47          writeFilterFile(projectFileName, projectName, allConfigs, projDir);
   10.48          writeUserFile(projectFileName, allConfigs);

mercurial