# # Copyright (c) 1997, 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. Oracle designates this # particular file as subject to the "Classpath" exception as provided # by Oracle in the LICENSE file that accompanied this code. # # This code is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # version 2 for more details (a copy is included in the LICENSE file that # accompanied this code). # # You should have received a copy of the GNU General Public License version # 2 along with this work; if not, write to the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA # or visit www.oracle.com if you need additional information or have any # questions. # # # Generic mechanism for installing properties files, resource bundles, # and other resource files. # # FILES_properties should be defined. # FILES_compiled_properties should be defined. # # If COMPILED_PROPERTIES_SUPERCLASS is defined, ALL the FILES_properties # files will be compiled into java with this super class. # # You can add locales to LOCALE_SUFFIXES explicitly, or use the # LOCALE_SET_DEFINITION variable to add some pre-defined locale lists. # The LOCALE_SET_DEFINITION can have the value: jre, plugin, or jdk. # # Resource bundles to be installed are identified using the following variables. # Note that only the file name of the base bundle is given; localized versions # are added automatically. For Java files, use a format suitable for inclusion # in the FILES_java list; dito for properties, all relative paths. # # NEW_RESOURCE_BUNDLES_JAVA - new resource bundles implemented in # Java, not localized # RESOURCE_BUNDLES_JAVA - resource bundles implemented in # Java, localized # # The following variable is now used for most .properties files in the JDK. # These properties files are converted into java and compiled with javac. # The resulting .class files are usually smaller and are always faster to load. # The relative path to the properties file becomes a relative path to a # java source file. # # RESOURCE_BUNDLES_COMPILED_PROPERTIES - resource bundles implemented as # properties files, localized # NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES - same as above, not localized # # For non-compiled properties files, use the following variables: # # NEW_RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES - new resource bundles implemented as # properties files, not localized # RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES - resource bundles implemented as # properties files, localized # # Other properties files to be installed are identified using the variable: # # OTHER_PROPERTIES # include $(SPEC) include $(SRC_ROOT)/jdk/makefiles/Tools.gmk # Compile properties files into java source? ifdef COMPILED_PROPERTIES_SUPERCLASS # Add all properties files to the compiled properties list (all or nothing) COMPILED_PROPERTIES += $(FILES_compiled_properties) $(FILES_properties) else COMPILED_PROPERTIES_SUPERCLASS = ListResourceBundle COMPILED_PROPERTIES += $(FILES_compiled_properties) endif # Determine the locale suffixes needed beyond the base bundle ifeq ($(LOCALE_SET_DEFINITION), plugin) LOCALE_SUFFIXES += $(PLUGIN_LOCALES) endif ifeq ($(LOCALE_SET_DEFINITION), jdk) LOCALE_SUFFIXES += $(JDK_LOCALES) endif ifeq ($(LOCALE_SET_DEFINITION), jre) LOCALE_SUFFIXES += $(JRE_LOCALES) endif # Java files get tacked onto the standard list of files to compile RESOURCE_BUNDLE_FILES_java += $(NEW_RESOURCE_BUNDLES_JAVA) RESOURCE_BUNDLE_FILES_java += $(RESOURCE_BUNDLES_JAVA) \ $(foreach file,$(RESOURCE_BUNDLES_JAVA), \ $(foreach locale,$(LOCALE_SUFFIXES), \ $(basename $(file))_$(locale).java)) # Add to java sources list FILES_java += $(RESOURCE_BUNDLE_FILES_java) # Compiled properties files are translated to .java. # The .java files are generated into GENSRCDIR. COMPILED_PROPERTIES += $(NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES) COMPILED_PROPERTIES += $(RESOURCE_BUNDLES_COMPILED_PROPERTIES) \ $(foreach file,$(RESOURCE_BUNDLES_COMPILED_PROPERTIES),\ $(foreach locale,$(LOCALE_SUFFIXES),\ $(basename $(file))_$(locale)$(suffix $(file)))) # Add to java sources list FILES_java += $(COMPILED_PROPERTIES:%.properties=%.java) # Non-compiled files PROPERTIES_FILES += $(NEW_RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES) PROPERTIES_FILES += $(RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES) \ $(foreach file,$(RESOURCE_BUNDLES_UNCOMPILED_PROPERTIES), \ $(foreach locale,$(LOCALE_SUFFIXES), \ $(basename $(file))_$(locale)$(suffix $(file)))) # other properties PROPERTIES_FILES += $(OTHER_PROPERTIES) # # Process and strip all non-compiled properties files (in a batch mode) # STRIP_PROP_FILES = $(PROPERTIES_FILES:%=$(CLASSDESTDIR)/%) # To efficiently strip properties we use one run of StripProperties. # This macro gathers an option for use later. STRIP_PROP_options=$(TEMPDIR)/strip_prop_options define install-properties-file $(install-file) $(call chmod-file, a+rw) @$(ECHO) "# Adding to strip properties list: $@" $(ECHO) "$@" >> $(STRIP_PROP_options) endef # Constructs command line options file $(STRIP_PROP_options): $(STRIP_PROP_FILES) @$(TOUCH) $@ strip_prop_options_clean: @$(RM) $(STRIP_PROP_options) # Strip the properties files strip_all_props: $(BUILD_TOOLS) $(STRIP_PROP_options) @if [ -s $(STRIP_PROP_options) ] ; then \ $(ECHO) "$(TOOL_STRIPPROPERTIES) @$(STRIP_PROP_options)" ; \ $(TOOL_STRIPPROPERTIES) @$(STRIP_PROP_options) ; \ fi @$(java-vm-cleanup) # # Creates files in CLASSDESTDIR # # In some cases, we move files from package to resources subdir $(CLASSDESTDIR)/$(PKGDIR)/resources/%.properties: \ $(SHARE_SRC)/classes/$(PKGDIR)/%.properties $(install-properties-file) $(CLASSDESTDIR)/%.properties: $(SHARE_SRC)/classes/%.properties $(install-properties-file) $(CLASSDESTDIR)/%.res: $(SHARE_SRC)/classes/%.res $(install-file) $(CLASSDESTDIR)/%.dtd: $(SHARE_SRC)/classes/%.dtd $(install-file) $(CLASSDESTDIR)/%.xml: $(SHARE_SRC)/classes/%.xml $(install-file) $(CLASSDESTDIR)/%.prp: $(SHARE_SRC)/classes/%.prp $(install-file) # # To efficiently compile properties into java sources we use one run # of compileproperties. This macro gathers an option for use later. # Note: The properties file and java source name can be different # locales, e.g. zh_TW and zh_HK. The java source filename # determines the name of the class. COMPILE_PROP_options=$(TEMPDIR)/compile_prop_options define add-property-java-file @$(prep-target) @$(ECHO) "# Adding to compile properties list: $? -> $@" $(ECHO) "-compile $? $@ $(COMPILED_PROPERTIES_SUPERCLASS)" \ >> $(COMPILE_PROP_options) endef $(GENSRCDIR)/%.java: $(PLATFORM_SRC)/classes/%.properties $(add-property-java-file) $(GENSRCDIR)/%.java: $(SHARE_SRC)/classes/%.properties $(add-property-java-file) $(GENSRCDIR)/%.java: $(GENSRCDIR)/%.properties $(add-property-java-file) ifndef OPENJDK $(GENSRCDIR)/%.java: $(CLOSED_PLATFORM_SRC)/classes/%.properties $(add-property-java-file) $(GENSRCDIR)/%.java: $(CLOSED_SHARE_SRC)/classes/%.properties $(add-property-java-file) endif # Create HK java file from zh_TW (explicit resource bundles only) define create-hk-java-file @$(prep-target) $(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@ endef # Explicit resource bundles $(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.java $(create-hk-java-file) $(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.java $(create-hk-java-file) # Compile of zh_HK properties just uses the zh_TW properties files $(GENSRCDIR)/%_zh_HK.java: $(PLATFORM_SRC)/classes/%_zh_TW.properties $(add-property-java-file) $(GENSRCDIR)/%_zh_HK.java: $(SHARE_SRC)/classes/%_zh_TW.properties $(add-property-java-file) # Simple delivery of zh_HK properties files just copies zh_TW properties files $(CLASSDESTDIR)/%_zh_HK.properties: \ $(PLATFORM_SRC)/classes/%_zh_TW.properties $(install-properties-file) $(CLASSDESTDIR)/%_zh_HK.properties: \ $(SHARE_SRC)/classes/%_zh_TW.properties $(install-properties-file) # List of java files converted from properties files needed COMPILE_PROP_JAVA_FILES = $(COMPILED_PROPERTIES:%.properties=$(GENSRCDIR)/%.java) # Constructs command line options file $(COMPILE_PROP_options): $(COMPILE_PROP_JAVA_FILES) @$(TOUCH) $@ compile_prop_options_clean: @$(RM) $(COMPILE_PROP_options) # Make sure all are compiled, one compiler run compile_all_props: $(BUILD_TOOLS) $(COMPILE_PROP_options) @if [ `$(CAT) $(COMPILE_PROP_options) | $(WC) -l` -ge 1 ] ; then \ $(MKDIR) -p $(GENSRCDIR); \ $(ECHO) "$(TOOL_COMPILEPROPERTIES) @$(COMPILE_PROP_options)";\ $(TOOL_COMPILEPROPERTIES) @$(COMPILE_PROP_options) ; \ $(java-vm-cleanup); \ fi # Make sure the build rule creates all the properties resources: ifneq ($(strip $(PROPERTIES_FILES)),) resources: strip_prop_options_clean strip_all_props clobber clean:: $(RM) $(STRIP_PROP_FILES) $(STRIP_PROP_options) endif ifneq ($(strip $(COMPILED_PROPERTIES)),) resources: compile_prop_options_clean compile_all_props clobber clean:: $(RM) $(COMPILE_PROP_JAVA_FILES) $(COMPILE_PROP_options) endif .PHONY: resources \ compile_prop_options_clean compile_all_props \ strip_prop_options_clean strip_all_props