xref: /freebsd/contrib/bmake/mk/java.mk (revision c03c5b1c80914ec656fbee84539355d1fad68bf9)
1#
2# RCSid:
3#	$Id: java.mk,v 1.16 2021/12/08 05:56:50 sjg Exp $
4
5#	@(#) Copyright (c) 1998-2001, Simon J. Gerraty
6#
7#	This file is provided in the hope that it will
8#	be of use.  There is absolutely NO WARRANTY.
9#	Permission to copy, redistribute or otherwise
10#	use this file is hereby granted provided that
11#	the above copyright notice and this notice are
12#	left intact.
13#
14#	Please send copies of changes and bug-fixes to:
15#	sjg@crufty.net
16#
17
18.if !target(__${.PARSEFILE}__)
19__${.PARSEFILE}__: .NOTMAIN
20
21.include <init.mk>
22
23CLASSPATH?=.
24
25.if defined(PROG)
26SRCS?=	${PROG:.class=.java}
27.endif
28.if !defined(SRCS) || empty(SRCS)
29SRCS!=cd ${.CURDIR} && echo *.java
30.endif
31.SUFFIXES:	.class .java
32
33CLEANFILES+= *.class
34
35JAVAC?=   javac
36JAVADOC?= javadoc
37
38.if !target(docs)
39docs:
40	${JAVADOC} ${JAVADOC_FLAGS} ${SRCS}
41.endif
42
43.if defined(JAVADESTDIR) && !empty(JAVADESTDIR)
44JAVASRCDIR?=${JAVADESTDIR:H}/src
45__classdest:=${JAVADESTDIR}${.CURDIR:S,${JAVASRCDIR},,}/
46CLASSPATH:=${CLASSPATH}:${JAVADESTDIR}
47JAVAC_FLAGS+= -d ${JAVADESTDIR}
48.else
49__classdest=
50.endif
51
52JAVAC_FLAGS+= ${JAVAC_DBG}
53
54.if defined(MAKE_VERSION) && !defined(NO_CLASSES_COOKIE)
55# java works best by compiling a bunch of classes at once.
56# this lot does that but needs a recent netbsd make or
57# or its portable cousin bmake.
58.for __s in ${SRCS}
59__c:= ${__classdest}${__s:.java=.class}
60.if !target(${__c})
61# We need to do something to force __c's parent to be made.
62${__c}:	${__s}
63	@rm -f ${.TARGET}
64.endif
65SRCS_${__c}=${__s}
66__classes:= ${__classes} ${__c}
67.endfor
68__classes_cookie=${__classdest}.classes.done
69CLEANFILES+= ${__classes} ${__classes_cookie}
70
71${__classes_cookie}:	${__classes}
72	CLASSPATH=${CLASSPATH} ${JAVAC} ${JAVAC_FLAGS} ${.OODATE:@c@${SRCS_$c}@}
73	@touch ${.TARGET}
74
75all:	${__classes_cookie}
76
77.else
78# this will work with other BSD make's
79.for __s in ${SRCS}
80__c:= ${__classdest}${__s:.java=.class}
81${__c}:	${__s}
82	CLASSPATH=${CLASSPATH} ${JAVAC} ${JAVAC_FLAGS} ${.OODATE}
83.endfor
84
85all:	${SRCS:%.java=${__classdest}%.class}
86
87.endif
88
89.if !target(cleanjava)
90cleanjava:
91	rm -f [Ee]rrs mklog core *.core ${PROG} ${CLEANFILES}
92
93clean: cleanjava
94cleandir: cleanjava
95.endif
96
97.endif
98