src/share/tools/MakeDeps/Platform.java

Thu, 27 May 2010 19:08:38 -0700

author
trims
date
Thu, 27 May 2010 19:08:38 -0700
changeset 1907
c18cbe5936b8
parent 435
a61af66fc99e
permissions
-rw-r--r--

6941466: Oracle rebranding changes for Hotspot repositories
Summary: Change all the Sun copyrights to Oracle copyright
Reviewed-by: ohair

     1 /*
     2  * Copyright (c) 1999, 2005, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  *
    23  */
    25 /** Defines what must be specified for each platform. This class must
    26     have a no-arg constructor. */
    28 import java.io.*;
    30 public abstract class Platform {
    31     /** file name templates capture naming conventions */
    32     protected FileName dummyFileTemplate =
    33         new FileName(this, "", "", "", "", "", "");
    35     // The next three must be instantiated in subclasses' constructors
    37     /** An incl file is produced per .c file and contains all the
    38         includes it needs */
    39     protected FileName inclFileTemplate;
    41     /** A GI (grand-include) file has any file used more than N times
    42         for precompiled headers */
    43     protected FileName giFileTemplate;
    45     /** A GD (grand-dependencies) file that tells Unix make all the
    46         .o's needed for linking and the include dependencies */
    47     protected FileName gdFileTemplate;
    49     // Accessors
    50     public FileName getInclFileTemplate() {
    51         return inclFileTemplate;
    52     }
    54     public FileName getGIFileTemplate() {
    55         return giFileTemplate;
    56     }
    58     public FileName getGDFileTemplate() {
    59         return gdFileTemplate;
    60     }
    62     // an incl file is the file included by each.c file that includes
    63     // all needed header files
    65     public abstract void setupFileTemplates();
    66     public abstract String[] outerSuffixes();
    68     /** empty file name -> no grand include file */
    69     public boolean haveGrandInclude() {
    70         return (giFileTemplate.nameOfList().length() > 0);
    71     }
    73     public boolean writeDeps() {
    74         return (gdFileTemplate.nameOfList().length() > 0);
    75     }
    77     /** <p> A gi file is the grand-include file. It includes in one
    78         file any file that is included more than a certain number of
    79         times. </p>
    81         <p> It is used for precompiled header files. </p>
    83         <p> It has a source name, that is the file that this program
    84         generates, and a compiled name; that is the file that is
    85         included by other files. </p>
    87         <p> Some platforms have this program actually explictly
    88         include the preprocessed gi file-- see includeGIInEachIncl().
    89         </p>
    91         <p> Also, some platforms need a pragma in the GI file. </p> */
    92     public boolean includeGIInEachIncl() {
    93         return false;
    94     }
    96     /** For some platforms, e.g. Solaris, include the grand-include
    97         dependencies in the makefile. For others, e.g. Windows, do
    98         not. */
    99     public boolean includeGIDependencies() {
   100         return false;
   101     }
   103     /** Should C/C++ source file be dependent on a file included
   104         into the grand-include file. */
   105     public boolean writeDependenciesOnHFilesFromGI() {
   106         return false;
   107     }
   109     /** Default implementation does nothing */
   110     public void writeGIPragma(PrintWriter out) {
   111     }
   113     /** A line with a filename and the noGrandInclude string means
   114         that this file cannot use the precompiled header. */
   115     public String noGrandInclude() {
   116         return "no_precompiled_headers";
   117     }
   119     /** A line with a filename and the
   120         generatePlatformDependentInclude means that an include file
   121         for the header file must be generated. This file generated include
   122         file is directly included by the non-platform dependent include file
   123         (e.g os.hpp includes _os_pd.hpp.incl. So while we notice files that
   124         are directly dependent on non-platform dependent files from the database
   125         we must infer the dependence on platform specific files to generate correct
   126         dependences on the platform specific files. */
   127     public String generatePlatformDependentInclude() {
   128         return "generate_platform_dependent_include";
   129     }
   131     /** Prefix and suffix strings for emitting Makefile rules */
   132     public abstract String objFileSuffix();
   133     public abstract String asmFileSuffix();
   134     public abstract String dependentPrefix();
   136     // Exit routines:
   138     /** Abort means an internal error */
   139     public void abort() {
   140         throw new RuntimeException("Internal error");
   141     }
   143     /** fatalError is used by clients to stop the system */
   144     public void fatalError(String msg) {
   145         System.err.println(msg);
   146         System.exit(1);
   147     }
   149     /** Default implementation performs case-sensitive comparison */
   150     public boolean fileNameStringEquality(String s1, String s2) {
   151         return s1.equals(s2);
   152     }
   154     public void fileNamePortabilityCheck(String name) {
   155         if (Character.isUpperCase(name.charAt(0))) {
   156             fatalError("Error: for the sake of portability we have chosen\n" +
   157                        "to avoid files starting with an uppercase letter.\n" +
   158                        "Please rename " + name + ".");
   159         }
   160     }
   162     public void fileNamePortabilityCheck(String name, String matchingName) {
   163         if (!name.equals(matchingName)) {
   164             fatalError("Error: file " + name + " also appears as " +
   165                        matchingName + ".  Case must be consistent for " +
   166                        "portability.");
   167         }
   168     }
   170     /** max is 31 on mac, so warn */
   171     public int fileNameLengthLimit() {
   172         return 45;
   173     }
   175     public int defaultGrandIncludeThreshold() {
   176         return 30;
   177     }
   179     /** Not very general, but this is a way to get platform-specific
   180         files to be written. Default implementation does nothing. */
   181     public void writePlatformSpecificFiles(Database previousDB,
   182                                            Database currentDB, String[] args)
   183         throws IllegalArgumentException, IOException {
   184     }
   185 }

mercurial