jdk/make/common/internal/Resources.gmk
changeset 2 90ce3da70b43
child 1820 04d22534971a
equal deleted inserted replaced
0:fd16c54261b3 2:90ce3da70b43
       
     1 #
       
     2 # Copyright 1997-2007 Sun Microsystems, Inc.  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.  Sun designates this
       
     8 # particular file as subject to the "Classpath" exception as provided
       
     9 # by Sun in the LICENSE file that accompanied this code.
       
    10 #
       
    11 # This code is distributed in the hope that it will be useful, but WITHOUT
       
    12 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    13 # FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    14 # version 2 for more details (a copy is included in the LICENSE file that
       
    15 # accompanied this code).
       
    16 #
       
    17 # You should have received a copy of the GNU General Public License version
       
    18 # 2 along with this work; if not, write to the Free Software Foundation,
       
    19 # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    20 #
       
    21 # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
       
    22 # CA 95054 USA or visit www.sun.com if you need additional information or
       
    23 # have any questions.
       
    24 #
       
    25 
       
    26 # 
       
    27 # Generic mechanism for installing properties files, resource bundles,
       
    28 #   and other resource files.
       
    29 #
       
    30 # FILES_properties should be defined.
       
    31 # FILES_compiled_properties should be defined.
       
    32 # 
       
    33 # If COMPILED_PROPERTIES_SUPERCLASS is defined, ALL the FILES_properties
       
    34 # files will be compiled into java with this super class.
       
    35 #
       
    36 # You can add locales to LOCALE_SUFFIXES explicitly, or use the
       
    37 # LOCALE_SET_DEFINITION variable to add some pre-defined locale lists.
       
    38 # The LOCALE_SET_DEFINITION can have the value: jre, plugin, or jdk.
       
    39 #
       
    40 # Resource bundles to be installed are identified using the following variables.
       
    41 # Note that only the file name of the base bundle is given; localized versions
       
    42 # are added automatically. For Java files, use a format suitable for inclusion
       
    43 # in the FILES_java list; dito for properties, all relative paths.
       
    44 #
       
    45 #   NEW_RESOURCE_BUNDLES_JAVA        - new resource bundles implemented in
       
    46 #                                      Java, not localized
       
    47 #   NEW_RESOURCE_BUNDLES_PROPERTIES  - new resource bundles implemented as
       
    48 #                                      properties files, not localized
       
    49 #   RESOURCE_BUNDLES_JAVA            - resource bundles implemented in
       
    50 #                                      Java, localized
       
    51 #   RESOURCE_BUNDLES_PROPERTIES      - new resource bundles implemented as
       
    52 #                                      properties files, localized
       
    53 #
       
    54 # The following variable is now used for most .properties files in the JDK. 
       
    55 # These properties files are converted into java and compiled with javac.
       
    56 # The resulting .class files are usually smaller and are always faster to load. 
       
    57 # The relative path to the properties file becomes a relative path to a
       
    58 # java source file.
       
    59 #
       
    60 #   RESOURCE_BUNDLES_COMPILED_PROPERTIES - resource bundles implemented as
       
    61 #                                          properties files, localized
       
    62 #   NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES - same as above, not localized
       
    63 #
       
    64 # Other properties files to be installed are identified using the variable:
       
    65 #
       
    66 #   OTHER_PROPERTIES
       
    67 #
       
    68 
       
    69 # Compile properties files into java source?
       
    70 ifdef COMPILED_PROPERTIES_SUPERCLASS
       
    71   # Add all properties files to the compiled properties list (all or nothing)
       
    72   COMPILED_PROPERTIES += $(FILES_compiled_properties) $(FILES_properties)
       
    73 else
       
    74   COMPILED_PROPERTIES_SUPERCLASS = ListResourceBundle
       
    75   COMPILED_PROPERTIES += $(FILES_compiled_properties)
       
    76 endif
       
    77 
       
    78 # Determine the locale suffixes needed beyond the base bundle
       
    79 
       
    80 ifeq ($(LOCALE_SET_DEFINITION), plugin)
       
    81   LOCALE_SUFFIXES += $(PLUGIN_LOCALES)
       
    82 endif
       
    83 ifeq ($(LOCALE_SET_DEFINITION), jdk)
       
    84   LOCALE_SUFFIXES += $(JDK_LOCALES)
       
    85 endif
       
    86 ifeq ($(LOCALE_SET_DEFINITION), jre)
       
    87   LOCALE_SUFFIXES += $(JRE_LOCALES)
       
    88 endif
       
    89 
       
    90 # Java files get tacked onto the standard list of files to compile
       
    91 RESOURCE_BUNDLE_FILES_java += $(NEW_RESOURCE_BUNDLES_JAVA)
       
    92 RESOURCE_BUNDLE_FILES_java += $(RESOURCE_BUNDLES_JAVA) \
       
    93     $(foreach file,$(RESOURCE_BUNDLES_JAVA), \
       
    94        $(foreach locale,$(LOCALE_SUFFIXES), \
       
    95 	  $(basename $(file))_$(locale).java))
       
    96 
       
    97 # Add to java sources list
       
    98 FILES_java += $(RESOURCE_BUNDLE_FILES_java)
       
    99 
       
   100 # Compiled properties files are translated to .java.
       
   101 #   The .java files are generated into GENSRCDIR.
       
   102 COMPILED_PROPERTIES += $(NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES)
       
   103 COMPILED_PROPERTIES += $(RESOURCE_BUNDLES_COMPILED_PROPERTIES) \
       
   104     $(foreach file,$(RESOURCE_BUNDLES_COMPILED_PROPERTIES),\
       
   105       $(foreach locale,$(LOCALE_SUFFIXES),\
       
   106 	 $(basename $(file))_$(locale)$(suffix $(file))))
       
   107 
       
   108 # Add to java sources list
       
   109 FILES_java += $(COMPILED_PROPERTIES:%.properties=%.java)
       
   110 
       
   111 # Non-compiled files
       
   112 PROPERTIES_FILES += $(NEW_RESOURCE_BUNDLES_PROPERTIES)
       
   113 PROPERTIES_FILES += $(RESOURCE_BUNDLES_PROPERTIES) \
       
   114     $(foreach file,$(RESOURCE_BUNDLES_PROPERTIES), \
       
   115        $(foreach locale,$(LOCALE_SUFFIXES), \
       
   116 	  $(basename $(file))_$(locale)$(suffix $(file))))
       
   117 PROPERTIES_FILES += $(OTHER_PROPERTIES)
       
   118 
       
   119 #
       
   120 # Compile Properties tool
       
   121 #
       
   122 COMPILEPROPERTIES_JARFILE = $(BUILDTOOLJARDIR)/compileproperties.jar
       
   123 
       
   124 #
       
   125 # Strip Properties tool
       
   126 #
       
   127 STRIPPROPERTIES_JARFILE = $(BUILDTOOLJARDIR)/stripproperties.jar
       
   128 
       
   129 #
       
   130 # Process and strip all non-compiled properties files (in a batch mode)
       
   131 #
       
   132 STRIP_PROP_FILES = $(PROPERTIES_FILES:%=$(CLASSDESTDIR)/%)
       
   133 # To efficiently strip properties we use one run of StripProperties. 
       
   134 # This macro gathers an option for use later.
       
   135 STRIP_PROP_options=$(TEMPDIR)/strip_prop_options
       
   136 define install-properties-file
       
   137 $(install-file)
       
   138 $(CHMOD) a+rw $@
       
   139 @$(ECHO) "# Adding to strip properties list: $@"
       
   140 $(ECHO) "$@" >> $(STRIP_PROP_options)
       
   141 endef
       
   142 
       
   143 # Constructs command line options file
       
   144 $(STRIP_PROP_options): $(STRIP_PROP_FILES)
       
   145 	@$(TOUCH) $@
       
   146 strip_prop_options_clean:
       
   147 	@$(RM) $(STRIP_PROP_options)
       
   148 
       
   149 # Strip the properties files
       
   150 strip_all_props: $(STRIPPROPERTIES_JARFILE) $(STRIP_PROP_options)
       
   151 	@if [ -s $(STRIP_PROP_options) ] ; then \
       
   152           $(ECHO) "$(BOOT_JAVA_CMD) -jar $(STRIPPROPERTIES_JARFILE) -optionsfile $(STRIP_PROP_options)" ; \
       
   153           $(BOOT_JAVA_CMD) -jar $(STRIPPROPERTIES_JARFILE) -optionsfile $(STRIP_PROP_options) ; \
       
   154         fi
       
   155 	@$(java-vm-cleanup)
       
   156 
       
   157 #
       
   158 # Creates files in CLASSDESTDIR
       
   159 #
       
   160 
       
   161 # In some cases, we move files from package to resources subdir
       
   162 $(CLASSDESTDIR)/$(PKGDIR)/resources/%.properties: \
       
   163 	     $(SHARE_SRC)/classes/$(PKGDIR)/%.properties
       
   164 	$(install-properties-file)
       
   165 $(CLASSDESTDIR)/%.properties: $(SHARE_SRC)/classes/%.properties
       
   166 	$(install-properties-file)
       
   167 $(CLASSDESTDIR)/%.res: $(SHARE_SRC)/classes/%.res
       
   168 	$(install-file)
       
   169 $(CLASSDESTDIR)/%.dtd: $(SHARE_SRC)/classes/%.dtd
       
   170 	$(install-file)
       
   171 $(CLASSDESTDIR)/%.xml: $(SHARE_SRC)/classes/%.xml
       
   172 	$(install-file)
       
   173 $(CLASSDESTDIR)/%.prp: $(SHARE_SRC)/classes/%.prp
       
   174 	$(install-file)
       
   175 
       
   176 #
       
   177 # To efficiently compile properties into java sources we use one run
       
   178 #   of compileproperties. This macro gathers an option for use later.
       
   179 #   Note: The properties file and java source name can be different
       
   180 #         locales, e.g. zh_TW and zh_HK. The java source filename
       
   181 #         determines the name of the class.
       
   182 COMPILE_PROP_options=$(TEMPDIR)/compile_prop_options
       
   183 define add-property-java-file
       
   184 @$(prep-target)
       
   185 @$(ECHO) "# Adding to compile properties list: $? -> $@"
       
   186 $(ECHO) "-compile $? $@ $(COMPILED_PROPERTIES_SUPERCLASS)" \
       
   187    >> $(COMPILE_PROP_options)
       
   188 endef
       
   189 
       
   190 $(GENSRCDIR)/%.java: $(PLATFORM_SRC)/classes/%.properties
       
   191 	$(add-property-java-file)
       
   192 $(GENSRCDIR)/%.java: $(SHARE_SRC)/classes/%.properties
       
   193 	$(add-property-java-file)
       
   194 $(GENSRCDIR)/%.java: $(GENSRCDIR)/%.properties
       
   195 	$(add-property-java-file)
       
   196 ifndef OPENJDK
       
   197 $(GENSRCDIR)/%.java: $(CLOSED_PLATFORM_SRC)/classes/%.properties
       
   198 	$(add-property-java-file)
       
   199 $(GENSRCDIR)/%.java: $(CLOSED_SHARE_SRC)/classes/%.properties
       
   200 	$(add-property-java-file)
       
   201 endif
       
   202 
       
   203 # Create HK java file from zh_TW (explicit resource bundles only)
       
   204 define create-hk-java-file
       
   205 @$(prep-target)
       
   206 $(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@
       
   207 endef
       
   208 
       
   209 # Explicit resource bundles
       
   210 $(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.java
       
   211 	$(create-hk-java-file)
       
   212 $(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.java
       
   213 	$(create-hk-java-file)
       
   214 
       
   215 # Compile of zh_HK properties just uses the zh_TW properties files
       
   216 $(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.properties
       
   217 	$(add-property-java-file)
       
   218 $(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.properties
       
   219 	$(add-property-java-file)
       
   220 
       
   221 # Simple delivery of zh_HK properties files just copies zh_TW properties files
       
   222 $(CLASSDESTDIR)/%_zh_HK.properties: \
       
   223              $(PLATFORM_SRC)/classes/%_zh_TW.properties
       
   224 	$(install-properties-file)
       
   225 $(CLASSDESTDIR)/%_zh_HK.properties: \
       
   226              $(SHARE_SRC)/classes/%_zh_TW.properties
       
   227 	$(install-properties-file)
       
   228 
       
   229 # List of java files converted from properties files needed
       
   230 COMPILE_PROP_JAVA_FILES = $(COMPILED_PROPERTIES:%.properties=$(GENSRCDIR)/%.java)
       
   231 
       
   232 # Constructs command line options file
       
   233 $(COMPILE_PROP_options): $(COMPILE_PROP_JAVA_FILES)
       
   234 	@$(TOUCH) $@
       
   235 compile_prop_options_clean:
       
   236 	@$(RM) $(COMPILE_PROP_options)
       
   237 
       
   238 # Make sure all are compiled, one compiler run
       
   239 compile_all_props: $(COMPILEPROPERTIES_JARFILE) $(COMPILE_PROP_options)
       
   240 	@if [ `$(CAT) $(COMPILE_PROP_options) | $(WC) -l` -ge 1 ] ; then \
       
   241 	  $(MKDIR) -p $(GENSRCDIR); \
       
   242 	  $(ECHO) "$(BOOT_JAVA_CMD) -jar $(COMPILEPROPERTIES_JARFILE) -optionsfile $(COMPILE_PROP_options)";\
       
   243 	  $(BOOT_JAVA_CMD) -jar $(COMPILEPROPERTIES_JARFILE) -optionsfile $(COMPILE_PROP_options) ; \
       
   244 	  $(java-vm-cleanup); \
       
   245 	fi
       
   246 
       
   247 # Make sure the build rule creates all the properties
       
   248 resources:
       
   249 
       
   250 ifneq ($(PROPERTIES_FILES),)
       
   251   resources: strip_prop_options_clean   strip_all_props
       
   252   clobber clean:: 
       
   253 	$(RM) $(STRIP_PROP_FILES) $(STRIP_PROP_options)
       
   254 endif
       
   255 
       
   256 ifneq ($(COMPILED_PROPERTIES),)
       
   257   resources: compile_prop_options_clean compile_all_props
       
   258   clobber clean:: 
       
   259 	$(RM) $(COMPILE_PROP_JAVA_FILES) $(COMPILE_PROP_options)
       
   260 endif
       
   261 
       
   262 .PHONY: resources \
       
   263 	compile_prop_options_clean compile_all_props \
       
   264 	strip_prop_options_clean   strip_all_props
       
   265