src/share/tools/ProjectCreator/ProjectCreator.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 20,68 **** * or visit www.oracle.com if you need additional information or have any * questions. * */ ! // This program reads an include file database. ! // The database should cover each self .c and .h file, ! // but not files in /usr/include ! // The database consists of pairs of nonblank words, where the first word is ! // the filename that needs to include the file named by the second word. ! // For each .c file, this program generates a fooIncludes.h file that ! // the .c file may include to include all the needed files in the right order. ! // It also generates a foo.dep file to include in the makefile. ! // Finally it detects cycles, and can work with two files, an old and a new one. ! // To incrementally write out only needed files after a small change. ! // ! // Based on a suggestion by Roland Conybeare, algorithm suggested by Craig ! // Chambers, written by David Ungar, 3/1/89. ! // Added PREFIX, {DEP/INC}_DIR, smaller dep output 10/92 -Urs ! ! // Add something for precompiled headers ! ! // To handle different platforms, I am introducing a platform file. ! // The platform file contains lines like: ! // os = svr4 ! // ! // Then, when processing the includeDB file, a token such as <os> ! // gets replaced by svr4. -- dmu 3/25/97 ! ! // Modified to centralize Dependencies to speed up make -- dmu 5/97 ! ! public class MakeDeps { public static void usage() { ! System.out.println("usage:"); ! System.out.println("\tmakeDeps platform-name platform-file database-file [MakeDeps args] [platform args]"); ! System.out.println("\tmakeDeps diffs platform-name old-platform-file old-database-file new-platform-file new-database-file [MakeDeps args] [platform args]"); ! System.out.println("where platform-name is the name of a platform MakeDeps supports"); ! System.out.println("(currently \"WinGammaPlatform\" or \"UnixPlatform\")"); ! System.out.println("MakeDeps options:"); ! System.out.println(" -firstFile [filename]: Specify the first file in link order (i.e.,"); ! System.out.println(" to have a well-known function at the start of the output file)"); ! System.out.println(" -lastFile [filename]: Specify the last file in link order (i.e.,"); ! System.out.println(" to have a well-known function at the end of the output file)"); System.err.println("WinGammaPlatform platform-specific options:"); System.err.println(" -sourceBase <path to directory (workspace) " + "containing source files; no trailing slash>"); System.err.println(" -dspFileName <full pathname to which .dsp file " + "will be written; all parent directories must " + --- 20,33 ---- * or visit www.oracle.com if you need additional information or have any * questions. * */ ! public class ProjectCreator { public static void usage() { ! System.out.println("ProjectCreator options:"); System.err.println("WinGammaPlatform platform-specific options:"); System.err.println(" -sourceBase <path to directory (workspace) " + "containing source files; no trailing slash>"); System.err.println(" -dspFileName <full pathname to which .dsp file " + "will be written; all parent directories must " +
*** 93,104 **** System.err.println(" -startAt <subdir of sourceBase>"); System.err.println(" -ignoreFile <file which won't be able to be " + "found in the sourceBase because it's generated " + "later>"); System.err.println(" -additionalFile <file not in database but " + ! "which should show up in .dsp file, like " + ! "includeDB_core>"); System.err.println(" -additionalGeneratedFile <environment variable of " + "generated file's location> <relative path to " + "directory containing file; no trailing slash> " + "<name of file generated later in the build process>"); System.err.println(" -prelink <build> <desc> <cmds>:"); --- 58,68 ---- System.err.println(" -startAt <subdir of sourceBase>"); System.err.println(" -ignoreFile <file which won't be able to be " + "found in the sourceBase because it's generated " + "later>"); System.err.println(" -additionalFile <file not in database but " + ! "which should show up in .dsp file>"); System.err.println(" -additionalGeneratedFile <environment variable of " + "generated file's location> <relative path to " + "directory containing file; no trailing slash> " + "<name of file generated later in the build process>"); System.err.println(" -prelink <build> <desc> <cmds>:");
*** 114,234 **** if (args.length < 3) { usage(); System.exit(1); } ! int argc = 0; ! boolean diffMode = false; ! if (args[argc].equals("diffs")) { ! diffMode = true; ! ++argc; ! } ! ! String platformName = args[argc++]; Class platformClass = Class.forName(platformName); ! String plat1 = null; ! String db1 = null; ! String plat2 = null; ! String db2 = null; ! ! String firstFile = null; ! String lastFile = null; ! ! int numOptionalArgs = ! (diffMode ? (args.length - 6) : (args.length - 3)); ! if (numOptionalArgs < 0) { ! usage(); ! System.exit(1); ! } ! ! plat1 = args[argc++]; ! db1 = args[argc++]; ! ! if (diffMode) { ! plat2 = args[argc++]; ! db2 = args[argc++]; ! } ! ! // argc now points at start of optional arguments, if any ! ! try { ! boolean gotOne = true; ! while (gotOne && (argc < args.length - 1)) { ! gotOne = false; ! String arg = args[argc]; ! if (arg.equals("-firstFile")) { ! firstFile = args[argc + 1]; ! argc += 2; ! gotOne = true; ! } else if (arg.equals("-lastFile")) { ! lastFile = args[argc + 1]; ! argc += 2; ! gotOne = true; ! } ! } ! } ! catch (Exception e) { ! e.printStackTrace(); ! usage(); ! System.exit(1); ! } ! ! Platform platform = (Platform) platformClass.newInstance(); ! platform.setupFileTemplates(); ! long t = platform.defaultGrandIncludeThreshold(); ! ! String[] platformArgs = null; ! int numPlatformArgs = args.length - argc; ! if (numPlatformArgs > 0) { ! platformArgs = new String[numPlatformArgs]; ! int offset = argc; ! while (argc < args.length) { ! platformArgs[argc - offset] = args[argc]; ! ++argc; ! } ! } ! ! // If you want to change the threshold, change the default ! // "grand include" threshold in Platform.java, or override ! // it in the platform-specific file like UnixPlatform.java ! ! Database previous = new Database(platform, t); ! Database current = new Database(platform, t); ! ! previous.canBeMissing(); ! ! if (firstFile != null) { ! previous.setFirstFile(firstFile); ! current.setFirstFile(firstFile); ! } ! if (lastFile != null) { ! previous.setLastFile(lastFile); ! current.setLastFile(lastFile); ! } - if (diffMode) { - System.out.println("Old database:"); - previous.get(plat1, db1); - previous.compute(); - System.out.println("New database:"); - current.get(plat2, db2); - current.compute(); - System.out.println("Deltas:"); - current.putDiffs(previous); - } else { - System.out.println("New database:"); - current.get(plat1, db1); - current.compute(); - current.put(); - } - - if (platformArgs != null) { // Allow the platform to write platform-specific files ! platform.writePlatformSpecificFiles(previous, current, ! platformArgs); ! } } catch (Exception e) { e.printStackTrace(); System.exit(1); } --- 78,96 ---- if (args.length < 3) { usage(); System.exit(1); } ! String platformName = args[0]; Class platformClass = Class.forName(platformName); + WinGammaPlatform platform = (WinGammaPlatform) platformClass.newInstance(); ! String[] platformArgs = new String[args.length - 1]; ! System.arraycopy(args, 1, platformArgs, 0, platformArgs.length); // Allow the platform to write platform-specific files ! platform.createVcproj(platformArgs); } catch (Exception e) { e.printStackTrace(); System.exit(1); }