1#
2# CDDL HEADER START
3#
4# The contents of this file are subject to the terms of the
5# Common Development and Distribution License (the "License").
6# You may not use this file except in compliance with the License.
7#
8# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9# or http://www.opensolaris.org/os/licensing.
10# See the License for the specific language governing permissions
11# and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24# Use is subject to license terms.
25#
26# ident	"%Z%%M%	%I%	%E% SMI"
27#
28
29include $(SRC)/Makefile.master
30
31# The Java DTrace API package
32
33PKGPATH=org/opensolaris/os/dtrace
34PKGNAME=org.opensolaris.os.dtrace
35
36# The Java DTrace API directories
37
38APIDIR=$(SRC)/lib/libdtrace_jni/java
39CLASSES=$(APIDIR)/classes
40JNI=$(APIDIR)/native
41JARS=$(APIDIR)/lib
42DOCS=$(APIDIR)/docs
43DOCAPI=$(DOCS)/api
44DOCEXAMPLES=$(DOCS)/examples
45DOCHTML=$(DOCS)/html
46DOCIMAGES=$(DOCS)/images
47MANIFEST=$(APIDIR)/manifest
48APIJAVASRC=$(APIDIR)/src
49
50# Java DTrace API jar file, its ultimate destination, and packaging details
51APIJAR=dtrace.jar
52JARDESTDIR=$(ROOT)/usr/share/lib/java
53INSJARS=$(JARDESTDIR)/$(APIJAR)
54# javadoc
55DOCDESTDIR=$(ROOT)/usr/share/lib/java/javadoc/dtrace
56DOCAPIDESTDIR=$(DOCDESTDIR)/api
57DOCEXAMPLESDESTDIR=$(DOCDESTDIR)/examples
58DOCHTMLDESTDIR=$(DOCDESTDIR)/html
59DOCIMAGESDESTDIR=$(DOCDESTDIR)/images
60
61$(JARDESTDIR)/%: $(JARS)/%
62	$(INS.file)
63
64$(DOCEXAMPLESDESTDIR)/%: $(DOCEXAMPLES)/%
65	$(INS.file)
66
67$(DOCHTMLDESTDIR)/%: $(DOCHTML)/%
68	$(INS.file)
69
70$(DOCIMAGESDESTDIR)/%: $(DOCIMAGES)/%
71	$(INS.file)
72
73# Manifest files
74APIMANI= $(MANIFEST)/dtrace.mf
75MANIFESTS= $(APIMANI)
76
77# Controlled CLASSPATH for making
78APICLASSPATH=$(CLASSES):$(APIJAVASRC)
79
80# javac flags
81JFLAGS= -g -d $(CLASSES) -sourcepath $(APICLASSPATH) -deprecation
82JFLAGS += -target 1.5
83JFLAGS += -Xlint
84
85# The default make rule for Java files
86COMPILE.java=$(JAVAC) $(JFLAGS)
87
88$(CLASSES)/$(PKGPATH)/%.class:	$(APIJAVASRC)/$(PKGPATH)/%.java
89				$(COMPILE.java) $<
90
91# javah generated headers
92APIHDR= LocalConsumer.h
93JNIHDRS=$(JNI)/$(APIHDRS)
94
95# API classes with native methods
96JNI_CLASSNAMES=\
97    LocalConsumer
98
99JNI_CLASSES=${JNI_CLASSNAMES:%=%.class}
100DTRACE_JNI_CLASSES=${JNI_CLASSES:%=$(CLASSES)/$(PKGPATH)/%}
101JNI_FULL_CLASSNAMES=${JNI_CLASSNAMES:%=$(PKGNAME).%}
102
103# All API classes
104API_CLASSNAMES=\
105	AbstractAggregationValue \
106	Aggregate \
107	AggregateSpec \
108	Aggregation \
109	AggregationRecord \
110	AggregationValue \
111	AvgValue \
112	Consumer \
113	ConsumerAdapter \
114	ConsumerEvent \
115	ConsumerException \
116	ConsumerListener \
117	CountValue \
118	DTraceException \
119	DataEvent \
120	Distribution \
121	Drop \
122	DropEvent \
123	Error \
124	ErrorEvent \
125	ExceptionHandler \
126	ExitRecord \
127	Flow \
128	InterfaceAttributes \
129	KernelStackRecord \
130	KernelSymbolRecord \
131	LinearDistribution \
132	LocalConsumer \
133	LogDistribution \
134	MaxValue \
135	MinValue \
136	NativeException \
137	Option \
138	PrintaRecord \
139	PrintfRecord \
140	Probe \
141	ProbeData \
142	ProbeDescription \
143	ProbeInfo \
144	ProcessEvent \
145	ProcessState \
146	Program \
147	ProgramInfo \
148	Record \
149	ResourceLimitException \
150	ScalarRecord \
151	StackFrame \
152	StackValueRecord \
153	StddevValue \
154	SumValue \
155	SymbolValueRecord \
156	Tuple \
157	UserStackRecord \
158	UserSymbolRecord \
159	Utility \
160	ValueRecord
161
162API_CLASSES=${API_CLASSNAMES:%=%.class}
163DTRACE_API_CLASSES=${API_CLASSES:%=$(CLASSES)/$(PKGPATH)/%}
164
165
166all:            $(CLASSES) $(DTRACE_API_CLASSES) $(JNI)/$(APIHDR)
167
168clean:
169		-$(RM) $(CLASSES)/$(PKGPATH)/*.class
170		-$(RM) $(JNI)/*.h
171		-$(RM) -r $(DOCAPI)
172
173clobber:	clean
174		-$(RM) $(JARS)/*.jar
175
176# Make the class dir, if it doesn't exist
177$(CLASSES):
178		-@mkdir -p $@
179
180# Make the directory for javah-generated headers, if it doesn't exist
181$(JNI):
182		-@mkdir -p $@
183
184$(JNI)/$(APIHDR): $(JNI) $(DTRACE_JNI_CLASSES)
185		$(JAVAH) -o $@ -classpath $(CLASSES) $(JNI_FULL_CLASSNAMES)
186		-@touch $@
187
188# Rule for installing API javadoc.
189$(DOCAPIDESTDIR)/index.html: $(DTRACE_API_CLASSES)
190		-@mkdir -p $(DOCAPIDESTDIR)
191		-$(RM) -r $(DOCAPIDESTDIR)/*
192		cd $(APIJAVASRC); umask 022; \
193		$(JAVADOC) -protected -use -notimestamp \
194		-classpath $(APICLASSPATH) -d $(DOCAPIDESTDIR) \
195		$(PKGNAME)
196
197$(CLASSES)/$(PKGPATH):
198		$(INS.dir)
199
200$(JARS)/$(APIJAR): $(DTRACE_API_CLASSES) $(APIMANI)
201		-@mkdir -p $(JARS)
202		$(JAR) cfm $@ $(APIMANI) -C $(CLASSES) .
203
204$(JARDESTDIR):
205		$(INS.dir)
206
207$(DOCDESTDIR):
208		$(INS.dir)
209
210$(DOCAPIDESTDIR):
211		$(INS.dir)
212
213$(DOCEXAMPLESDESTDIR):
214		$(INS.dir)
215
216$(DOCHTMLDESTDIR):
217		$(INS.dir)
218
219$(DOCIMAGESDESTDIR):
220		$(INS.dir)
221
222install:	all $(JARDESTDIR) $(INSJARS) $(DOCDESTDIR) \
223	$(DOCAPIDESTDIR) \
224	$(DOCAPIDESTDIR)/index.html \
225	$(DOCEXAMPLESDESTDIR) \
226	$(DOCEXAMPLESDESTDIR)/TestAPI.java \
227	$(DOCEXAMPLESDESTDIR)/TestAPI2.java \
228	$(DOCEXAMPLESDESTDIR)/TestTarget.java \
229	$(DOCEXAMPLESDESTDIR)/hello.d \
230	$(DOCEXAMPLESDESTDIR)/intrstat.d \
231	$(DOCEXAMPLESDESTDIR)/syscall.d \
232	$(DOCEXAMPLESDESTDIR)/target.d \
233	$(DOCHTMLDESTDIR) \
234	$(DOCHTMLDESTDIR)/JavaDTraceAPI.html \
235	$(DOCHTMLDESTDIR)/fast.html \
236	$(DOCIMAGESDESTDIR) \
237	$(DOCIMAGESDESTDIR)/JavaDTraceAPI.gif
238
239# empty targets for top-level building compatability
240
241install_h lint:
242
243# create API javadoc
244
245doc:
246		-@mkdir -p $(DOCAPI)
247		cd $(APIJAVASRC); umask 022; \
248		$(JAVADOC) -protected -use -notimestamp \
249		-classpath $(APICLASSPATH) -d $(DOCAPI) \
250		$(PKGNAME)
251