26 # |
26 # |
27 # Makefile for building the classanalyzer tool |
27 # Makefile for building the classanalyzer tool |
28 # |
28 # |
29 |
29 |
30 BUILDDIR = ../.. |
30 BUILDDIR = ../.. |
31 PACKAGE = com.sun.classanalyzer |
|
32 PRODUCT = tools |
|
33 PROGRAM = classanalyzer |
|
34 include $(BUILDDIR)/common/Defs.gmk |
31 include $(BUILDDIR)/common/Defs.gmk |
35 |
32 |
|
33 PKGDIR = com/sun/classanalyzer |
36 BUILDTOOL_SOURCE_ROOT = src |
34 BUILDTOOL_SOURCE_ROOT = src |
37 BUILDTOOL_MAIN = $(PKGDIR)/ClassAnalyzer.java |
35 BUILDTOOL_MAIN = $(PKGDIR)/ClassAnalyzer.java |
38 BUILTTOOL_MAINCLASS = $(subst /,.,$(BUILDTOOL_MAIN:%.java=%)) |
36 BUILTTOOL_MAINCLASS = $(subst /,.,$(BUILDTOOL_MAIN:%.java=%)) |
39 |
37 |
40 BUILDTOOL_MAIN_SOURCE_FILE = $(BUILDTOOL_SOURCE_ROOT)/$(BUILDTOOL_MAIN) |
38 BUILDTOOL_MAIN_SOURCE_FILE = $(BUILDTOOL_SOURCE_ROOT)/$(BUILDTOOL_MAIN) |
41 BUILDTOOL_MANIFEST_FILE = $(BUILDTOOLCLASSDIR)/$(PROGRAM)_manifest.mf |
39 BUILDTOOL_MANIFEST_FILE = $(BUILDTOOLCLASSDIR)/classanalyzer_manifest.mf |
42 BUILDTOOL_JAR_FILE = $(BUILDTOOLJARDIR)/$(PROGRAM).jar |
|
43 |
40 |
44 FILES_java := $(shell $(CD) $(BUILDTOOL_SOURCE_ROOT) \ |
41 FILES_java := $(shell $(CD) $(BUILDTOOL_SOURCE_ROOT) \ |
45 && $(FIND) $(PKGDIR) $(SCM_DIRS_prune) -o -type f -print) |
42 && $(FIND) $(PKGDIR) -type f -print) |
|
43 |
46 FILES_class = $(FILES_java:%.java=$(BUILDTOOLCLASSDIR)/%.class) |
44 FILES_class = $(FILES_java:%.java=$(BUILDTOOLCLASSDIR)/%.class) |
47 |
45 |
48 all build: $(BUILDTOOL_JAR_FILE) tool_info |
46 CLASSANALYZER_JAR_FILE = $(BUILDTOOLJARDIR)/classanalyzer.jar |
|
47 |
|
48 # |
|
49 # ClassAnalyzer depends on the com.sun.tools.classfile API. |
|
50 # The tool is compiled with the latest version of the classfile |
|
51 # library in the langtools repo to make sure that synchronized |
|
52 # change is made if the classfile API is changed. |
|
53 # |
|
54 # If langtools repo exists, build its own copy of the |
|
55 # classfile library and use it for compile time and runtime. |
|
56 # If not exist (the top level repo is not a forest), use |
|
57 # the built jdk tools that imports tools.jar from the latest |
|
58 # promoted build. |
|
59 # |
|
60 # If the classfile API is changed but not yet in a promoted build, |
|
61 # the build might fail and the tool would need the langtools repo |
|
62 # to build in that case. |
|
63 # |
|
64 ifndef LANGTOOLS_TOPDIR |
|
65 LANGTOOLS_TOPDIR=$(JDK_TOPDIR)/../langtools |
|
66 endif |
|
67 |
|
68 LANGTOOLS_TOPDIR_EXISTS := $(shell \ |
|
69 if [ -d $(LANGTOOLS_TOPDIR) ] ; then \ |
|
70 echo true; \ |
|
71 else \ |
|
72 echo false; \ |
|
73 fi) |
|
74 |
|
75 CLASSFILE_SRC = $(LANGTOOLS_TOPDIR)/src/share/classes |
|
76 CLASSFILE_PKGDIR = com/sun/tools/classfile |
|
77 |
|
78 ifeq ($(LANGTOOLS_TOPDIR_EXISTS), true) |
|
79 FILES_classfile_java := $(shell \ |
|
80 $(CD) $(CLASSFILE_SRC) && \ |
|
81 $(FIND) $(CLASSFILE_PKGDIR) -name '*.java' -print) |
|
82 FILES_classfile_class = $(FILES_classfile_java:%.java=$(BUILDTOOLCLASSDIR)/%.class) |
|
83 CLASSFILE_JAR_FILE = $(BUILDTOOLJARDIR)/classfile.jar |
|
84 BUILDTOOL_JAVAC = $(BOOT_JAVAC_CMD) $(JAVAC_JVM_FLAGS) \ |
|
85 $(BOOT_JAVACFLAGS) -classpath $(CLASSFILE_JAR_FILE) |
|
86 BUILDTOOL_JAVA = $(BOOT_JAVA_CMD) $(JAVA_TOOLS_FLAGS) \ |
|
87 -Xbootclasspath/p:$(CLASSFILE_JAR_FILE) |
|
88 else |
|
89 # if langtools doesn't exist, use tools from the built jdk |
|
90 BUILDTOOL_JAVAC = $(BINDIR)/javac $(JAVAC_JVM_FLAGS) \ |
|
91 $(BOOT_JAVACFLAGS) |
|
92 BUILDTOOL_JAVA = $(BINDIR)/java $(JAVA_TOOLS_FLAGS) |
|
93 endif |
|
94 |
|
95 # Location of the output modules.list, <module>.classlist |
|
96 # and other output files generated by the class analyzer tool. |
|
97 # |
|
98 MODULE_CLASSLIST = $(MODULES_TEMPDIR)/classlist |
|
99 |
|
100 all build: classanalyzer gen-classlist |
|
101 |
|
102 classanalyzer: $(CLASSFILE_JAR_FILE) $(CLASSANALYZER_JAR_FILE) |
|
103 |
|
104 gen-classlist: |
|
105 @$(ECHO) ">>>Making "$@" @ `$(DATE)` ..." |
|
106 @$(RM) -rf $(MODULE_CLASSLIST) |
|
107 @$(MKDIR) -p $(MODULE_CLASSLIST) |
|
108 $(BUILDTOOL_JAVA) \ |
|
109 -Dclassanalyzer.debug \ |
|
110 -jar $(CLASSANALYZER_JAR_FILE) \ |
|
111 -jdkhome $(OUTPUTDIR) \ |
|
112 -config ../modules.config \ |
|
113 -config ../modules.group \ |
|
114 -depconfig ../jdk7.depconfig \ |
|
115 -depconfig ../optional.depconfig \ |
|
116 -showdynamic \ |
|
117 -output $(MODULE_CLASSLIST) |
|
118 @$(ECHO) ">>>Finished making "$@" @ `$(DATE)` ..." |
49 |
119 |
50 $(BUILDTOOL_MANIFEST_FILE): $(BUILDTOOL_MAIN_SOURCE_FILE) |
120 $(BUILDTOOL_MANIFEST_FILE): $(BUILDTOOL_MAIN_SOURCE_FILE) |
51 @$(prep-target) |
121 @$(prep-target) |
52 $(ECHO) "Main-Class: $(BUILTTOOL_MAINCLASS)" > $@ |
122 $(ECHO) "Main-Class: $(BUILTTOOL_MAINCLASS)" > $@ |
53 |
123 |
|
124 $(BUILDTOOLCLASSDIR)/$(CLASSFILE_PKGDIR)/%.class : $(CLASSFILE_SRC)/$(CLASSFILE_PKGDIR)/%.java |
|
125 @$(prep-target) |
|
126 @$(BUILDTOOL_JAVAC) \ |
|
127 -sourcepath $(CLASSFILE_SRC) \ |
|
128 -d $(BUILDTOOLCLASSDIR) $< |
|
129 |
54 $(BUILDTOOLCLASSDIR)/%.class : $(BUILDTOOL_SOURCE_ROOT)/%.java |
130 $(BUILDTOOLCLASSDIR)/%.class : $(BUILDTOOL_SOURCE_ROOT)/%.java |
55 @$(prep-target) |
131 @$(prep-target) |
56 $(JAVAC_CMD) \ |
132 $(BUILDTOOL_JAVAC) \ |
57 -sourcepath $(BUILDTOOL_SOURCE_ROOT) \ |
133 -sourcepath $(BUILDTOOL_SOURCE_ROOT) \ |
58 -d $(BUILDTOOLCLASSDIR) $< |
134 -d $(BUILDTOOLCLASSDIR) $< |
59 |
135 |
60 $(BUILDTOOL_JAR_FILE): $(BUILDTOOL_MANIFEST_FILE) $(FILES_class) |
136 $(CLASSANALYZER_JAR_FILE): $(BUILDTOOL_MANIFEST_FILE) $(FILES_class) |
61 @$(prep-target) |
137 @$(prep-target) |
62 $(BOOT_JAR_CMD) cfm $@ $(BUILDTOOL_MANIFEST_FILE) \ |
138 $(CD) $(BUILDTOOLCLASSDIR) && \ |
63 -C $(BUILDTOOLCLASSDIR) $(PKGDIR) \ |
139 $(BOOT_JAR_CMD) cfm $@ $(BUILDTOOL_MANIFEST_FILE) \ |
64 $(BOOT_JAR_JFLAGS) || $(RM) $@ |
140 $(PKGDIR) $(BOOT_JAR_JFLAGS) || $(RM) $@ |
65 $(java-vm-cleanup) |
141 @$(java-vm-cleanup) |
66 |
142 |
67 # Printing out a build tool information line |
143 $(BUILDTOOLJARDIR)/classfile.jar: $(FILES_classfile_class) |
68 define printBuildToolSetting |
144 @$(prep-target) |
69 if [ "$2" != "" ] ; then $(PRINTF) "%-25s %s\n" "$1:" "$2"; fi |
145 $(CD) $(BUILDTOOLCLASSDIR) && \ |
70 endef |
146 $(BOOT_JAR_CMD) cf $@ \ |
71 |
147 $(CLASSFILE_PKGDIR) $(BOOT_JAR_JFLAGS) || $(RM) $@ |
72 # Print out the build tool information |
148 @$(java-vm-cleanup) |
73 tool_info: |
|
74 @$(ECHO) "=========================================================" |
|
75 @$(call printBuildToolSetting,BUILDTOOL,$(PROGRAM)) |
|
76 @$(call printBuildToolSetting,PACKAGE,$(PACKAGE)) |
|
77 @$(call printBuildToolSetting,BUILDTOOL_SOURCE_ROOT,$(BUILDTOOL_SOURCE_ROOT)) |
|
78 @$(call printBuildToolSetting,BUILTTOOL_MAINCLASS,$(BUILTTOOL_MAINCLASS)) |
|
79 @$(call printBuildToolSetting,BUILDTOOL_JAR_FILE,$(BUILDTOOL_JAR_FILE)) |
|
80 @$(ECHO) "=========================================================" |
|
81 |
149 |
82 clean clobber:: |
150 clean clobber:: |
83 @$(RM) -rf $(BUILDTOOLCLASSDIR)/$(PKGDIR) |
151 @$(RM) -rf $(BUILDTOOLCLASSDIR)/$(PKGDIR) |
|
152 @$(RM) -rf $(BUILDTOOLCLASSDIR)/$(CLASSFILE_PKGDIR) |
84 @$(RM) $(BUILDTOOL_MANIFEST_FILE) |
153 @$(RM) $(BUILDTOOL_MANIFEST_FILE) |
85 @$(RM) $(BUILDTOOL_JAR_FILE) |
154 @$(RM) $(CLASSANALYZER_JAR_FILE) |
|
155 @$(RM) $(CLASSFILE_JAR_FILE) |