Mon, 23 Mar 2009 17:58:32 -0700
Merge
1 #
2 # Copyright 1995-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 #
26 #
27 #
28 # Rules shared by all Java makefiles.
29 #
30 # Used to apply to source file $<, checks code conventions, issues warnings.
31 define check-conventions
32 if [ "$(CONVENTION_WATCH)" = "true" ] ; then \
33 if [ "`$(CAT) -n -v -t $< | $(EGREP) -v '\@\(\#\)' | $(EGREP) '\^[MLI]'`" != "" ] ; then \
34 $(ECHO) "WARNING: File contains tabs, ^M, or ^L characters: $<"; \
35 if [ "$(CONVENTION_DETAILS)" = "true" ] ; then \
36 $(CAT) -n -v -t $< | $(EGREP) -v '\@\(\#\)' | $(EGREP) '\^[MLI]' ; \
37 fi; \
38 fi; \
39 fi
40 endef
42 # Make sure the default rule is all
43 rules_default_rule: all
45 #
46 # Directory set up. (Needed by deploy workspace)
47 #
48 $(CLASSDESTDIR) $(CLASSHDRDIR) $(OBJDIR) $(OUTPUTDIR) $(BINDIR) $(LIBDIR) $(LIBDIR)/$(LIBARCH) $(TEMPDIR) $(EXTDIR):
49 $(MKDIR) -p $@
51 #
52 # All source tree areas for java/properties files
53 #
54 ALL_CLASSES_SRC = $(SHARE_SRC)/classes $(PLATFORM_SRC)/classes
56 #
57 # If AUTO_FILES_PROPERTIES_DIRS used, automatically find properties files
58 #
59 ifdef AUTO_FILES_PROPERTIES_DIRS
60 AUTO_FILES_PROPERTIES_FILTERS1 = $(SCM_DIRs) 'X-*' '*-X-*' ',*'
61 AUTO_FILES_PROPERTIES_FILTERS1 += $(AUTO_PROPERTIES_PRUNE)
62 FILES_properties_find_filters1 = $(AUTO_FILES_PROPERTIES_FILTERS1:%=-name % -prune -o)
63 FILES_properties_auto1 := \
64 $(shell \
65 for dir in $(ALL_CLASSES_SRC) ; do \
66 if [ -d $$dir ] ; then \
67 ( $(CD) $$dir; \
68 for sdir in $(AUTO_FILES_PROPERTIES_DIRS); do \
69 if [ -d $$sdir ] ; then \
70 $(FIND) $$sdir $(FILES_properties_find_filters1) \
71 -name '*.properties' -print ; \
72 fi ; \
73 done \
74 ); \
75 fi; \
76 done \
77 )
78 else
79 FILES_properties_auto1 =
80 endif # AUTO_FILES_PROPERTIES_DIRS
82 # Add any automatically found properties files to the properties file list
83 FILES_properties += $(FILES_properties_auto1)
85 #
86 # Get Resources help
87 #
88 include $(TOPDIR)/make/common/internal/Resources.gmk
90 #
91 # Compiling .java files.
92 #
94 #
95 # Automatically add to FILES_java if AUTO_FILES_JAVA_DIRS is defined
96 #
97 # There are two basic types of sources, normal source files and the
98 # generated ones. The Normal sources will be located in:
99 # $(ALL_CLASSES_SRC)
100 # The generated sources, which might show up late to dinner, are at:
101 # $(GENSRCDIR)
102 # and since they could be generated late, we need to be careful that
103 # we look for these sources late and not use the ':=' assignment which
104 # might miss their generation.
106 ifdef AUTO_FILES_JAVA_DIRS
107 # Filter out these files or directories
108 AUTO_FILES_JAVA_SOURCE_FILTERS1 = $(SCM_DIRs) 'X-*' '*-X-*' '*-template.java' ',*'
109 AUTO_FILES_JAVA_SOURCE_FILTERS2 =
110 AUTO_FILES_JAVA_SOURCE_FILTERS1 += $(AUTO_JAVA_PRUNE)
111 AUTO_FILES_JAVA_SOURCE_FILTERS2 += $(AUTO_JAVA_PRUNE)
113 # First list is the normal sources that should always be there,
114 # by using the ':=', which means we do this processing once.
115 FILES_java_find_filters1 = $(AUTO_FILES_JAVA_SOURCE_FILTERS1:%=-name % -prune -o)
116 FILES_java_auto1 := \
117 $(shell \
118 for dir in $(ALL_CLASSES_SRC) ; do \
119 if [ -d $$dir ] ; then \
120 ( $(CD) $$dir; \
121 for sdir in $(AUTO_FILES_JAVA_DIRS); do \
122 if [ -d $$sdir ] ; then \
123 $(FIND) $$sdir $(FILES_java_find_filters1) \
124 -name '*.java' -print ; \
125 fi ; \
126 done \
127 ); \
128 fi; \
129 done \
130 )
131 # Second list is the generated sources that should be rare, but will likely
132 # show up late and we need to look for them at the last minute, so we
133 # cannot use the ':=' assigment here. But if this gets expanded multiple
134 # times, the if tests should make them relatively cheap.
135 FILES_java_find_filters2 = $(AUTO_FILES_JAVA_SOURCE_FILTERS2:%=-name % -prune -o)
136 FILES_java_auto2 = \
137 $(shell \
138 for dir in $(GENSRCDIR); do \
139 if [ -d $$dir ] ; then \
140 ( $(CD) $$dir; \
141 for sdir in $(AUTO_FILES_JAVA_DIRS); do \
142 if [ -d $$sdir ] ; then \
143 $(FIND) $$sdir $(FILES_java_find_filters2) \
144 -name '*.java' -print ; \
145 fi ; \
146 done \
147 ); \
148 fi; \
149 done \
150 )
151 else
152 FILES_java_auto1 =
153 FILES_java_auto2 =
154 endif
156 # Add all found java sources to FILES_java macro (if AUTO_FILES_JAVA_DIRS used)
157 FILES_java += $(FILES_java_auto1) $(FILES_java_auto2)
159 # File that will hold java source names that need compiling
160 JAVA_SOURCE_LIST=$(TEMPDIR)/.classes.list
162 # Add a java source to the list
163 define add-java-file
164 $(ECHO) "$?" >> $(JAVA_SOURCE_LIST)
165 $(check-conventions)
166 endef
168 $(CLASSDESTDIR)/%.class: $(GENSRCDIR)/%.java
169 @$(add-java-file)
170 $(CLASSDESTDIR)/%.class: $(PLATFORM_SRC)/classes/%.java
171 @$(add-java-file)
172 $(CLASSDESTDIR)/%.class: $(SHARE_SRC)/classes/%.java
173 @$(add-java-file)
175 # List of class files needed
176 FILES_class = $(FILES_java:%.java=$(CLASSDESTDIR)/%.class)
178 # Got to include exported files.
179 FILES_class += $(FILES_export:%.java=$(CLASSDESTDIR)/%.class)
181 # Construct list of java sources we need to compile
182 source_list_prime:
183 @$(MKDIR) -p $(TEMPDIR)
184 # Note that we slip resources in so that compiled properties files get created:
185 $(JAVA_SOURCE_LIST) : source_list_prime resources $(FILES_class)
186 @$(TOUCH) $@
188 .delete.classlist:
189 @$(RM) $(JAVA_SOURCE_LIST)
191 # Make sure all newer sources are compiled (in a batch)
192 classes : $(CLASSES_INIT) .delete.classlist .compile.classlist
194 # Use this javac option to force it to favor the sourcepath file classes
195 # rather than any bootclasspath classes.
196 JAVAC_PREFER_SOURCE = -Xprefer:source
198 .compile.classlist : $(JAVA_SOURCE_LIST)
199 @$(MKDIR) -p $(CLASSDESTDIR)
200 @if [ `$(CAT) $(JAVA_SOURCE_LIST) | $(WC) -l` -ge 1 ] ; then \
201 $(ECHO) "# Java sources to be compiled: (listed in file $(JAVA_SOURCE_LIST))"; \
202 $(CAT) $(JAVA_SOURCE_LIST); \
203 $(ECHO) "# Running javac:"; \
204 $(ECHO) $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
205 $(JAVAC_CMD) $(JAVAC_PREFER_SOURCE) -sourcepath "$(SOURCEPATH)" -d $(CLASSDESTDIR) @$(JAVA_SOURCE_LIST); \
206 fi
207 @$(java-vm-cleanup)
209 clobber clean::
210 $(RM) $(JAVA_SOURCE_LIST)
212 ifndef DONT_CLOBBER_CLASSES
213 ifndef PACKAGE
214 DONT_CLOBBER_CLASSES = true
215 else
216 DONT_CLOBBER_CLASSES = false
217 endif
218 endif
220 packages.clean:
221 ifeq ($(DONT_CLOBBER_CLASSES),false)
222 ifdef AUTO_FILES_JAVA_DIRS
223 @for sdir in $(AUTO_FILES_JAVA_DIRS); do \
224 $(ECHO) "$(RM) -r $(CLASSDESTDIR)/$$sdir"; \
225 $(RM) -r $(CLASSDESTDIR)/$$sdir; \
226 done
227 else
228 $(RM) -r $(CLASSDESTDIR)/$(PKGDIR)
229 endif
230 endif
232 classes.clean: packages.clean
233 $(RM) $(JAVA_SOURCE_LIST)
235 #
236 # C and C++ make dependencies
237 #
238 include $(TOPDIR)/make/common/internal/NativeCompileRules.gmk
240 #
241 # Running Javah to generate stuff into CClassHeaders.
242 #
244 ifdef FILES_export
246 CLASSES.export = $(subst /,.,$(FILES_export:%.java=%))
247 CLASSES.export += $(subst /,.,$(FILES_export2:%.java=%))
248 CLASSES.export += $(subst /,.,$(FILES_export3:%.java=%))
249 CLASSES_export = $(FILES_export:%.java=$(CLASSDESTDIR)/%.class)
250 CLASSES_export += $(FILES_export2:%.java=$(CLASSDESTDIR)/%.class)
251 CLASSES_export += $(FILES_export3:%.java=$(CLASSDESTDIR)/%.class)
253 # Fix when deploy workspace makefiles don't depend on this name
254 #CLASSHDR_DOTFILE=$(CLASSHDRDIR)/.classheaders
256 CLASSHDR_DOTFILE=$(OBJDIR)/.class.headers.$(ARCH)
258 classheaders: classes $(CLASSHDR_DOTFILE)
260 $(CLASSHDR_DOTFILE): $(CLASSES_export)
261 $(prep-target)
262 @$(ECHO) "# Running javah:"
263 $(JAVAH_CMD) -d $(CLASSHDRDIR)/ \
264 $(CLASSES.export) $(subst $$,\$$,$(EXPORTED_inner))
265 @$(java-vm-cleanup)
266 @$(TOUCH) $@
268 classheaders.clean:
269 $(RM) $(CLASSHDR_DOTFILE)
270 $(RM) -r $(CLASSHDRDIR)
272 else # FILES_export
274 classheaders: classes
276 classheaders.clean:
278 endif # FILES_export
280 clean clobber:: classheaders.clean classes.clean .delete.classlist
282 #
283 # Default dependencies
284 #
286 all: build
288 build: classheaders
290 default: all
292 .PHONY: all build clean clobber \
293 .delete.classlist classes .compile.classlist classes.clean \
294 classheaders classheaders.clean \
295 batch_compile