blob: dbc11ef832fc4d248e40d88e700ebfe22186d4e9 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001#
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?
70ifdef COMPILED_PROPERTIES_SUPERCLASS
71 # Add all properties files to the compiled properties list (all or nothing)
72 COMPILED_PROPERTIES += $(FILES_compiled_properties) $(FILES_properties)
73else
74 COMPILED_PROPERTIES_SUPERCLASS = ListResourceBundle
75 COMPILED_PROPERTIES += $(FILES_compiled_properties)
76endif
77
78# Determine the locale suffixes needed beyond the base bundle
79
80ifeq ($(LOCALE_SET_DEFINITION), plugin)
81 LOCALE_SUFFIXES += $(PLUGIN_LOCALES)
82endif
83ifeq ($(LOCALE_SET_DEFINITION), jdk)
84 LOCALE_SUFFIXES += $(JDK_LOCALES)
85endif
86ifeq ($(LOCALE_SET_DEFINITION), jre)
87 LOCALE_SUFFIXES += $(JRE_LOCALES)
88endif
89
90# Java files get tacked onto the standard list of files to compile
91RESOURCE_BUNDLE_FILES_java += $(NEW_RESOURCE_BUNDLES_JAVA)
92RESOURCE_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
98FILES_java += $(RESOURCE_BUNDLE_FILES_java)
99
100# Compiled properties files are translated to .java.
101# The .java files are generated into GENSRCDIR.
102COMPILED_PROPERTIES += $(NEW_RESOURCE_BUNDLES_COMPILED_PROPERTIES)
103COMPILED_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
109FILES_java += $(COMPILED_PROPERTIES:%.properties=%.java)
110
111# Non-compiled files
112PROPERTIES_FILES += $(NEW_RESOURCE_BUNDLES_PROPERTIES)
113PROPERTIES_FILES += $(RESOURCE_BUNDLES_PROPERTIES) \
114 $(foreach file,$(RESOURCE_BUNDLES_PROPERTIES), \
115 $(foreach locale,$(LOCALE_SUFFIXES), \
116 $(basename $(file))_$(locale)$(suffix $(file))))
117PROPERTIES_FILES += $(OTHER_PROPERTIES)
118
119#
120# Compile Properties tool
121#
122COMPILEPROPERTIES_JARFILE = $(BUILDTOOLJARDIR)/compileproperties.jar
123
124#
125# Strip Properties tool
126#
127STRIPPROPERTIES_JARFILE = $(BUILDTOOLJARDIR)/stripproperties.jar
128
129#
130# Process and strip all non-compiled properties files (in a batch mode)
131#
132STRIP_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.
135STRIP_PROP_options=$(TEMPDIR)/strip_prop_options
136define install-properties-file
137$(install-file)
138$(CHMOD) a+rw $@
139@$(ECHO) "# Adding to strip properties list: $@"
140$(ECHO) "$@" >> $(STRIP_PROP_options)
141endef
142
143# Constructs command line options file
144$(STRIP_PROP_options): $(STRIP_PROP_FILES)
145 @$(TOUCH) $@
146strip_prop_options_clean:
147 @$(RM) $(STRIP_PROP_options)
148
149# Strip the properties files
150strip_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.
182COMPILE_PROP_options=$(TEMPDIR)/compile_prop_options
183define add-property-java-file
184@$(prep-target)
185@$(ECHO) "# Adding to compile properties list: $? -> $@"
186$(ECHO) "-compile $? $@ $(COMPILED_PROPERTIES_SUPERCLASS)" \
187 >> $(COMPILE_PROP_options)
188endef
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)
196ifndef 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)
201endif
202
203# Create HK java file from zh_TW (explicit resource bundles only)
204define create-hk-java-file
205@$(prep-target)
206$(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@
207endef
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
230COMPILE_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) $@
235compile_prop_options_clean:
236 @$(RM) $(COMPILE_PROP_options)
237
238# Make sure all are compiled, one compiler run
239compile_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
248resources:
249
250ifneq ($(PROPERTIES_FILES),)
251 resources: strip_prop_options_clean strip_all_props
252 clobber clean::
253 $(RM) $(STRIP_PROP_FILES) $(STRIP_PROP_options)
254endif
255
256ifneq ($(COMPILED_PROPERTIES),)
257 resources: compile_prop_options_clean compile_all_props
258 clobber clean::
259 $(RM) $(COMPILE_PROP_JAVA_FILES) $(COMPILE_PROP_options)
260endif
261
262.PHONY: resources \
263 compile_prop_options_clean compile_all_props \
264 strip_prop_options_clean strip_all_props
265