1 # 2 # Copyright (c) 2011, 2012, 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. Oracle designates this 8 # particular file as subject to the "Classpath" exception as provided 9 # by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 # or visit www.oracle.com if you need additional information or have any 23 # questions. 24 # 25 26 # Prepare the find cache. This is only used on windows. 27 $(eval $(call FillCacheFind,$(JDK_TOPDIR)/src/share/classes $(JDK_TOPDIR)/src/windows/classes)) 28 29 # All .properties files to be compiled are appended to this variable. 30 ALL_COMPILED_PROPSOURCES:= 31 # All generated .java files from compilation are appended to this variable. 32 ALL_COMPILED_PROPJAVAS:= 33 # The (very long) command line for compilation, stored in a file, prior to use. 34 COMPILE_PROPCMDLINE:= 35 36 # All .properties files to be cleaned are appended to this variable. 37 ALL_CLEANED_PROPSOURCES:= 38 # All generated cleaned .properties files from cleaning are appended to this variable. 39 ALL_CLEANED_PROPOUTPUT:= 40 # The (very long) command line for cleaning, stored in a file, prior to use. 41 CLEAN_PROPCMDLINE:= 42 43 define add_properties_to_compile 44 # $1 is the name of the properties group 45 # $2 is the files belonging to this group 46 # $3 is the super class for the generated java file. 47 # $4 is a from pattern for translating stripped name from source to target 48 # $5 is the to pattern replacing $3 in the target 49 50 # Strip away prefix and suffix, 51 # leaving for example: sun/util/resources/CurrencyNames_sv 52 $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/windows/classes/%.properties,%,\ 53 $$(patsubst $(JDK_TOPDIR)/src/macosx/classes/%.properties,%,\ 54 $$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties,%,$2))) 55 56 # Apply optional name transformation, example: hz_TW -> hz_HK 57 $(if $4,$1_PROPPATHS:=$$(patsubst $4,$5,$$($1_PROPPATHS))) 58 59 # Accumulate all found properties files. 60 ALL_COMPILED_PROPSOURCES+=$2 61 62 # Generate the list of to be created java files. 63 ALL_COMPILED_PROPJAVAS+=$$(patsubst %,$(JDK_OUTPUTDIR)/gensrc/%.java,$$($1_PROPPATHS)) 64 65 # Now generate a sequence of "-compile ...CurrencyNames_sv.properties ...CurrencyNames_sv.java ListResourceBundle" 66 # suitable to be fed into the CompileProperties command. 67 COMPILE_PROPCMDLINE+=$$(subst _SPACE_,$(SPACE),$$(join $$(addprefix -compile_SPACE_,$2), \ 68 $$(addsuffix _SPACE_$(strip $3),\ 69 $$(addprefix _SPACE_$(JDK_OUTPUTDIR)/gensrc/,\ 70 $$(addsuffix .java,$$($1_PROPPATHS)))))) 71 endef 72 73 define add_properties_to_clean 74 # $1 is the name of the properties group 75 # $2 is the files belonging to this group 76 # $3 is a from pattern for translating stripped name from source to target 77 # $4 is the to pattern replacing $3 in the target 78 # $5 optional name of extra directory to put properties files in (ex: resources) 79 80 # Strip away prefix and suffix, 81 # leaving for example: sun/util/resources/CurrencyNames_sv 82 $1_PROPPATHS:=$$(patsubst $(JDK_TOPDIR)/src/$(OPENJDK_TARGET_OS_API_DIR)/classes/%.properties,%,\ 83 $$(patsubst $(JDK_TOPDIR)/src/share/classes/%.properties,%,$2)) 84 85 # Apply optional name transformation, example: hz_TW -> hz_HK 86 $(if $3,$1_PROPPATHS:=$$(patsubst $3,$4,$$($1_PROPPATHS))) 87 88 # Accumulate all found properties files. 89 ALL_CLEANED_PROPSOURCES+=$2 90 91 # Generate the list of to be created java files. 92 $1_PROPOUTPUT:=$$(patsubst %,$(JDK_OUTPUTDIR)/classes/%.properties,$$($1_PROPPATHS)) 93 # If the properties target file isn't in a "resources" dir, add one. 94 ifneq ($5,) 95 $1_PROPOUTPUT:=$$(foreach p,$$($1_PROPOUTPUT), $$(dir $$p)$5/$$(notdir $$p)) 96 endif 97 98 ALL_CLEANED_PROPOUTPUT+=$$($1_PROPOUTPUT) 99 100 # Now generate a sequence of "-clean ...[src]...CurrencyNames_sv.properties ...[build]...CurrencyNames_sv.properties" 101 # suitable to be fed into the StripProperties command. 102 CLEAN_PROPCMDLINE+=$$(subst _SPACE_,$(SPACE),$$(join $$(addprefix -clean_SPACE_,$2), \ 103 $$(addprefix _SPACE_,$$($1_PROPOUTPUT)))) 104 endef 105 106 # Some packages contain pregenerated java files instead of properties files. 107 # But unfortunately not all properties should be converted, some should be 108 # copied....argggghhh. 109 110 # For example: 111 # sun/applet/resources 112 # sun/misc/resources 113 # sun/text/resources 114 # sun/tools/jconsole/resources 115 # sun/tools/native2ascii/resources 116 # sun/util/resources 117 118 # Some packages have properties that need to be converted to java source files. 119 120 #com/apple/laf/resources 121 ifeq ($(OPENJDK_TARGET_OS),macosx) 122 $(eval $(call add_properties_to_compile,COM_APPLE_LAF,\ 123 $(filter %.properties,\ 124 $(call CacheFind,$(JDK_TOPDIR)/src/macosx/classes/com/apple/laf/resources)),\ 125 ListResourceBundle)) 126 endif 127 128 #com/sun/accessibility/internal/resources 129 $(eval $(call add_properties_to_compile,COM_SUN_ACCESSIBILITY,\ 130 $(filter %.properties,\ 131 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/accessibility/internal/resources)),\ 132 ListResourceBundle)) 133 $(eval $(call add_properties_to_compile,COM_SUN_ACCESSIBILITY_HK,\ 134 $(filter %.properties,\ 135 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/accessibility/internal/resources)),\ 136 ListResourceBundle,%zh_TW,%zh_HK)) 137 #com/sun/imageio/plugins/common 138 $(eval $(call add_properties_to_clean,COM_SUN_IMAGEIO,\ 139 $(filter %.properties,\ 140 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/imageio)))) 141 #com/sun/java/swing/plaf/gtk/resources 142 ifneq ($(OPENJDK_TARGET_OS), windows) 143 # Only compile GTK resource bundles on Solaris/Linux 144 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_GTK,\ 145 $(filter %.properties,\ 146 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk/resources)),\ 147 ListResourceBundle)) 148 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_GTK_HK,\ 149 $(filter %.properties,\ 150 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/gtk/resources)),\ 151 ListResourceBundle,%zh_TW,%zh_HK)) 152 endif 153 #com/sun/java/swing/plaf/motif/resources 154 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_MOTIF,\ 155 $(filter %.properties,\ 156 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif/resources)),\ 157 ListResourceBundle)) 158 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_MOTIF_HK,\ 159 $(filter %.properties,\ 160 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/motif/resources)),\ 161 ListResourceBundle,%zh_TW,%zh_HK)) 162 #com/sun/java/swing/plaf/windows/resources 163 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_WINDOWS,\ 164 $(filter %.properties,\ 165 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows/resources)),\ 166 ListResourceBundle)) 167 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_WINDOWS_HK,\ 168 $(filter %.properties,\ 169 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/java/swing/plaf/windows/resources)),\ 170 ListResourceBundle,%zh_TW,%zh_HK)) 171 #com/sun/java/util/jar/pack 172 $(eval $(call add_properties_to_clean,JNDI_COSNAMING,\ 173 $(JDK_TOPDIR)/src/share/classes/com/sun/java/util/jar/pack/intrinsic.properties)) 174 #com/sun/jndi/cosnaming 175 $(eval $(call add_properties_to_clean,JNDI_COSNAMING,\ 176 $(JDK_TOPDIR)/src/share/classes/com/sun/jndi/cosnaming/jndiprovider.properties)) 177 #com/sun/jndi/ldap 178 $(eval $(call add_properties_to_clean,JNDI_COSNAMING,\ 179 $(JDK_TOPDIR)/src/share/classes/com/sun/jndi/ldap/jndiprovider.properties)) 180 181 #com/sun/org/apache/xml/internal/security/resource 182 #FIXME: The "xmlsecurity*.properties" pattern is not ideal; we might want to find 183 #a better way to select the properties files that are needed. 184 $(eval $(call add_properties_to_clean,XML_SECURITY,\ 185 $(filter $(JDK_TOPDIR)/src/share/classes/com/sun/org/apache/xml/internal/security/resource/xmlsecurity%.properties,\ 186 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/org/apache/xml/internal/security/resource)))) 187 188 #com/sun/rowset 189 $(eval $(call add_properties_to_clean,COM_SUN_ROWSET,\ 190 $(filter %.properties,\ 191 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/rowset)))) 192 $(eval $(call add_properties_to_clean,COM_SUN_ROWSET_HK,\ 193 $(filter %zh_TW.properties,\ 194 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/rowset)),\ 195 %zh_TW,%zh_HK)) 196 197 #com/sun/swing/internal/plaf/basic/resources 198 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_BASIC,\ 199 $(filter %.properties,\ 200 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/basic/resources)),\ 201 ListResourceBundle)) 202 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_BASIC_HK,\ 203 $(filter %.properties,\ 204 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/basic/resources)),\ 205 ListResourceBundle,%zh_TW,%zh_HK)) 206 #com/sun/swing/internal/plaf/metal/resources 207 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_METAL,\ 208 $(filter %.properties,\ 209 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/metal/resources)),\ 210 ListResourceBundle)) 211 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_METAL_HK,\ 212 $(filter %.properties,$(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/metal/resources)),\ 213 ListResourceBundle,%zh_TW,%zh_HK)) 214 #com/sun/swing/internal/plaf/synth/resources 215 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_SYNTH,\ 216 $(filter %.properties,\ 217 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/synth/resources)),\ 218 ListResourceBundle)) 219 $(eval $(call add_properties_to_compile,COM_SUN_SWING_PLAF_SYNTH_HK,\ 220 $(filter %.properties,\ 221 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/swing/internal/plaf/synth/resources)),\ 222 ListResourceBundle,%zh_TW,%zh_HK)) 223 224 #com/sun/tools/jdi/resources 225 $(eval $(call add_properties_to_compile,COM_SUN_TOOLS_JDI,\ 226 $(filter %.properties,\ 227 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/com/sun/tools/jdi/resources)),\ 228 ListResourceBundle)) 229 230 #com/sun/tools/script/shell 231 #java/util 232 #javax/sql/rowset 233 $(eval $(call add_properties_to_clean,JAVAX_SQL_ROWSET,\ 234 $(filter %.properties,\ 235 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/javax/sql/rowset)))) 236 #sun/awt/resources 237 $(eval $(call add_properties_to_compile,SUN_AWT,\ 238 $(filter %.properties,\ 239 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/awt/resources)),\ 240 ListResourceBundle)) 241 $(eval $(call add_properties_to_compile,SUN_AWT_HK,\ 242 $(filter %.properties,\ 243 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/awt/resources)),\ 244 ListResourceBundle,%zh_TW,%zh_HK)) 245 #sun/awt/windows/ 246 ifeq ($(OPENJDK_TARGET_OS),windows) 247 $(eval $(call add_properties_to_compile,SUN_AWT,\ 248 $(filter $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows/awtLocalization%.properties,\ 249 $(call CacheFind,$(JDK_TOPDIR)/src/windows/classes/sun/awt/windows)),\ 250 ListResourceBundle)) 251 $(eval $(call add_properties_to_compile,SUN_AWT_HK,\ 252 $(filter $(JDK_TOPDIR)/src/windows/classes/sun/awt/windows/awtLocalization%.properties,\ 253 $(call CacheFind,$(JDK_TOPDIR)/src/windows/classes/sun/awt/windows)),\ 254 ListResourceBundle,%zh_TW,%zh_HK)) 255 endif 256 257 #sun/launcher/resources 258 $(eval $(call add_properties_to_compile,SUN_LAUNCHER,\ 259 $(filter %.properties,\ 260 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/launcher/resources)),\ 261 ListResourceBundle)) 262 $(eval $(call add_properties_to_compile,SUN_LAUNCHER_HK,\ 263 $(filter %.properties,\ 264 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/launcher/resources)),\ 265 ListResourceBundle,%zh_TW,%zh_HK)) 266 #sun/management/resources 267 $(eval $(call add_properties_to_compile,SUN_MANAGEMENT,\ 268 $(filter %.properties,\ 269 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/management/resources)),\ 270 ListResourceBundle)) 271 $(eval $(call add_properties_to_compile,SUN_MANAGEMENT_KH,\ 272 $(filter %.properties,\ 273 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/management/resources)),\ 274 ListResourceBundle,%zh_TW,%zh_HK)) 275 #sun/print 276 #sun/print/resources 277 $(eval $(call add_properties_to_compile,SUN_PRINT,\ 278 $(filter %.properties,\ 279 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/print/resources)),\ 280 ListResourceBundle)) 281 $(eval $(call add_properties_to_compile,SUN_PRINT_HK,\ 282 $(filter %.properties,\ 283 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/print/resources)),\ 284 ListResourceBundle,%zh_TW,%zh_HK)) 285 #sun/rmi/registry/resources 286 $(eval $(call add_properties_to_clean,SUN_RMI_REGISTRY,\ 287 $(filter %.properties,\ 288 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/rmi/registry/resources)))) 289 $(eval $(call add_properties_to_clean,SUN_RMI_REGISTRY_HK,\ 290 $(filter %zh_TW.properties,\ 291 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/rmi/registry/resources)),\ 292 %zh_TW,%zh_HK)) 293 294 #sun/rmi/rmic/resources 295 $(eval $(call add_properties_to_clean,SUN_RMI_RMIC,\ 296 $(filter %.properties,\ 297 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/rmi/rmic/resources)))) 298 299 #sun/rmi/server/resources 300 $(eval $(call add_properties_to_clean,SUN_RMI_SERVER,\ 301 $(filter %.properties,\ 302 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/rmi/server/resources)))) 303 $(eval $(call add_properties_to_clean,SUN_RMI_SERVER_HK,\ 304 $(filter %zh_TW.properties,\ 305 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/rmi/server/resources)),\ 306 %zh_TW,%zh_HK)) 307 308 # sun/tools/jar/resources 309 $(eval $(call add_properties_to_compile,SUN_TOOLS_JAR,\ 310 $(filter %.properties,\ 311 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/tools/jar/resources)),\ 312 ListResourceBundle)) 313 $(eval $(call add_properties_to_compile,SUN_TOOLS_JAR_HK,\ 314 $(filter %.properties,\ 315 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/tools/jar/resources)),\ 316 ListResourceBundle,%zh_TW,%zh_HK)) 317 318 #sun/tools/javac/resources 319 # It's unclear if the other localized property files here are supposed to be copied or not 320 # but the old build system didn't copy them. 321 $(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER,\ 322 $(filter %javac.properties,\ 323 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/tools/javac/resources)))) 324 325 #sun/tools/jconsole/resources 326 $(eval $(call add_properties_to_clean,SUN_TOOLS_JCONSOLE,\ 327 $(filter %.properties,\ 328 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/tools/jconsole/resources)))) 329 330 #sun/tools/serialver 331 $(eval $(call add_properties_to_clean,SUN_TOOLS_SERIALVER,\ 332 $(filter %.properties,\ 333 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/tools/serialver)),,,resources)) 334 335 #sun/util/logging/resources 336 $(eval $(call add_properties_to_compile,SUN_UTIL_LOGGING,\ 337 $(filter %.properties,\ 338 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/util/logging/resources)),\ 339 ListResourceBundle)) 340 $(eval $(call add_properties_to_compile,SUN_UTIL_LOGGING_HK,\ 341 $(filter %.properties,\ 342 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/util/logging/resources)),\ 343 ListResourceBundle,%zh_TW,%zh_HK)) 344 # sun/util/resources 345 $(eval $(call add_properties_to_compile,SUN_UTIL,\ 346 $(filter %.properties,\ 347 $(call CacheFind,$(JDK_TOPDIR)/src/share/classes/sun/util/resources)),\ 348 sun.util.resources.LocaleNamesBundle)) 349 350 # Now setup the rule for the generation of the resource bundles. 351 $(JDK_OUTPUTDIR)/gensrc/_the.compiled_properties : $(ALL_COMPILED_PROPSOURCES) $(BUILD_TOOLS) 352 # Generate all output directories in advance since the build tool does not do that... 353 $(MKDIR) -p $(sort $(dir $(ALL_COMPILED_PROPJAVAS))) 354 $(ECHO) Compiling $(words $(ALL_COMPILED_PROPSOURCES)) properties into resource bundles 355 $(call ListPathsSafely,COMPILE_PROPCMDLINE,\n, >> $(JDK_OUTPUTDIR)/gensrc/_the.cmdline) 356 $(TOOL_COMPILEPROPERTIES) -quiet @$(JDK_OUTPUTDIR)/gensrc/_the.cmdline 357 $(TOUCH) $@ 358 359 # Now setup the rule for the generation of the cleaned properties. 360 # FIXME: We currently don't handle removed properties incrementally. 361 $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties : $(ALL_CLEANED_PROPSOURCES) $(BUILD_TOOLS) 362 $(RM) $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties.cmdline 363 # Generate all output directories in advance since the build tool does not do that... 364 $(MKDIR) -p $(sort $(dir $(ALL_CLEANED_PROPOUTPUT))) 365 $(ECHO) Copying and cleaning $(words $(ALL_CLEANED_PROPSOURCES)) properties 366 $(call ListPathsSafely,CLEAN_PROPCMDLINE,\n, >> $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties.cmdline) 367 $(TOOL_STRIPPROPERTIES) @$(JDK_OUTPUTDIR)/classes/_the.cleaned_properties.cmdline 368 $(TOUCH) $@ 369 370 $(ALL_COMPILED_PROPJAVAS) : $(JDK_OUTPUTDIR)/gensrc/_the.compiled_properties 371 372 $(ALL_CLEANED_PROPOUTPUT) : $(JDK_OUTPUTDIR)/classes/_the.cleaned_properties 373 374 375 # Some zh_HK resources are just copied of zh_TW 376 $(JDK_OUTPUTDIR)/gensrc/%_zh_HK.java: $(JDK_TOPDIR)/src/share/classes/%_zh_TW.java 377 $(MKDIR) -p $(@D) 378 $(CAT) $< | $(SED) -e '/class/s/_zh_TW/_zh_HK/' > $@ 379 380 ZH_HK_JAVA:= sun/applet/resources/MsgAppletViewer_zh_HK.java \ 381 sun/misc/resources/Messages_zh_HK.java \ 382 sun/security/util/AuthResources_zh_HK.java \ 383 sun/security/util/Resources_zh_HK.java 384 385 ZH_HK_JAVA_FILES:=$(addprefix $(JDK_OUTPUTDIR)/gensrc/,$(ZH_HK_JAVA)) 386 387 388 GENSRC_PROPERTIES:=$(ALL_COMPILED_PROPJAVAS) $(ALL_CLEANED_PROPOUTPUT) $(ZH_HK_JAVA_FILES)