make/common/Rules.gmk

Wed, 11 Mar 2009 14:38:02 -0700

author
ohair
date
Wed, 11 Mar 2009 14:38:02 -0700
changeset 56
53d5b45f73ab
parent 1
55540e827aef
child 98
a12ea7c7b497
permissions
-rw-r--r--

6790292: BOOTDIR of jdk6 u12 will not work with jdk7 builds
Reviewed-by: tbell

     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

mercurial