TestJavaCompilation.gmk revision 1855:4b01ea6c12c3
1105464Sphk#
2105464Sphk# Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
3105464Sphk# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4105464Sphk#
5105464Sphk# This code is free software; you can redistribute it and/or modify it
6105464Sphk# under the terms of the GNU General Public License version 2 only, as
7105464Sphk# published by the Free Software Foundation.  Oracle designates this
8105464Sphk# particular file as subject to the "Classpath" exception as provided
9105464Sphk# by Oracle in the LICENSE file that accompanied this code.
10105464Sphk#
11105464Sphk# This code is distributed in the hope that it will be useful, but WITHOUT
12105464Sphk# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13105464Sphk# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14105464Sphk# version 2 for more details (a copy is included in the LICENSE file that
15105464Sphk# accompanied this code).
16105464Sphk#
17105464Sphk# You should have received a copy of the GNU General Public License version
18105464Sphk# 2 along with this work; if not, write to the Free Software Foundation,
19105464Sphk# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20105464Sphk#
21105464Sphk# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22105464Sphk# or visit www.oracle.com if you need additional information or have any
23105464Sphk# questions.
24105464Sphk#
25105464Sphk
26105464Sphkdefault: all
27105464Sphk
28105464Sphkinclude $(SPEC)
29105464Sphkinclude MakeBase.gmk
30105464Sphkinclude JarArchive.gmk
31105464Sphkinclude JavaCompilation.gmk
32105464Sphk
33139778SimpTHIS_FILE := $(SRC_ROOT)/test/make/TestJavaCompilation.gmk
34139778SimpDEPS := $(THIS_FILE) \
35105464Sphk    $(SRC_ROOT)/make/common/MakeBase.gmk \
36105464Sphk    $(SRC_ROOT)/make/common/JavaCompilation.gmk \
37105464Sphk    #
38105464Sphk
39105464SphkOUTPUT_DIR := $(TESTMAKE_OUTPUTDIR)/java-compilation
40105464Sphk
41105464Sphk################################################################################
42105464Sphk# Test: jar1
43113010Sphk# Creates a simple jar file and unzips it to verify that the files have not
44105464Sphk# changed.
45105464Sphk
46105464SphkJAR1_SRC_ROOT := $(OUTPUT_DIR)/jar1src
47105464SphkJAR1_UNZIP := $(OUTPUT_DIR)/jar1unzip
48105464SphkJAR1_FILE := $(OUTPUT_DIR)/jar1.jar
49105464SphkJAR1_MANIFEST := $(OUTPUT_DIR)/jar1_manifest
50106407Sphk
51106407Sphkclean-jar1:
52106407Sphk	$(RM) -r $(OUTPUT_DIR)/_jar1* $(OUTPUT_DIR)/jar1*
53105464Sphk
54105464Sphk$(JAR1_MANIFEST): | $(OUTPUT_DIR)/_jar1_created
55105464Sphk	$(ECHO) "Test-Attribute: value" > $(JAR1_MANIFEST)
56105464Sphk
57105464Sphk$(OUTPUT_DIR)/_jar1_created: $(DEPS)
58105464Sphk	$(RM) -r $(JAR1_SRC_ROOT)
59105464Sphk	$(RM) $(JAR1_FILE)
60143418Sume	$(RM) -r $(JAR1_UNZIP)
61292782Sallanjude	$(MKDIR) -p $(JAR1_SRC_ROOT)
62106407Sphk	$(MKDIR) -p $(JAR1_SRC_ROOT)/dir1
63105464Sphk	$(MKDIR) -p $(JAR1_SRC_ROOT)/dir2
64105464Sphk	$(MKDIR) -p $(JAR1_SRC_ROOT)/META-INF
65105464Sphk	$(TOUCH) $(JAR1_SRC_ROOT)/dir1/file1.class
66105464Sphk	$(TOUCH) $(JAR1_SRC_ROOT)/dir2/file2.class
67106407Sphk	$(TOUCH) $(JAR1_SRC_ROOT)/META-INF/metafile
68105464Sphk	$(TOUCH) $@
69106407Sphk
70106407Sphk$(eval $(call SetupJarArchive, BUILD_JAR1, \
71106407Sphk    DEPENDENCIES := $(OUTPUT_DIR)/_jar1_created, \
72105464Sphk    SRCS := $(JAR1_SRC_ROOT), \
73106407Sphk    MANIFEST := $(JAR1_MANIFEST), \
74105464Sphk    JAR := $(JAR1_FILE), \
75105464Sphk))
76105464Sphk
77106407Sphk$(OUTPUT_DIR)/_jar1_verified: $(BUILD_JAR1)
78105464Sphk	$(RM) -r $(JAR1_UNZIP)
79106407Sphk	$(MKDIR) -p $(JAR1_UNZIP)
80105464Sphk	$(CD) $(JAR1_UNZIP) && $(UNZIP) $(JAR1_FILE) $(LOG_DEBUG)
81106407Sphk	$(DIFF) -r $(JAR1_SRC_ROOT)/dir1 $(JAR1_UNZIP)/dir1
82106407Sphk	$(DIFF) -r $(JAR1_SRC_ROOT)/dir2 $(JAR1_UNZIP)/dir2
83106407Sphk	$(DIFF) -r $(JAR1_SRC_ROOT)/META-INF/metafile $(JAR1_UNZIP)/META-INF/metafile
84105464Sphk	if [ "`$(GREP) 'Test-Attribute: value' $(JAR1_UNZIP)/META-INF/MANIFEST.MF`" = "" ]; then \
85105464Sphk	  $(ECHO) "Could not find Test-Attribute in manifest of $(JAR1_FILE)"; \
86105464Sphk	  exit 1; \
87106407Sphk	fi
88105464Sphk	$(TOUCH) $@
89106407Sphk
90105464Sphkcreate-jar2: $(OUTPUT_DIR)/_jar1_verified
91106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar1_verified
92106407Sphk
93106407Sphk# Change a source file and call this makefile again to force the jar to be 
94106407Sphk# updated. 
95106407Sphk$(OUTPUT_DIR)/_jar1_updated: $(OUTPUT_DIR)/_jar1_verified
96106407Sphk	$(ECHO) updated > $(JAR1_SRC_ROOT)/dir1/file1.class
97106407Sphk	$(ECHO) updated > $(JAR1_SRC_ROOT)/META-INF/metafile
98106407Sphk	$(TOUCH) $(OUTPUT_DIR)/_jar1_created
99106407Sphk	+$(MAKE) -f $(THIS_FILE) $(OUTPUT_DIR)/_jar1_verified
100106407Sphk	$(TOUCH) $@
101106407Sphk
102106407Sphkupdate-jar1: $(OUTPUT_DIR)_jar1_updated
103106407Sphk
104106407Sphk# Change the manifest file and call this makefile again to force the jar
105106407Sphk# to be updated
106106407Sphk$(OUTPUT_DIR)/_jar1_updated_manifest: $(OUTPUT_DIR)/_jar1_updated
107106407Sphk	$(ECHO) "Test-Attribute: foobar" > $(JAR1_MANIFEST)
108106407Sphk	+$(MAKE) -f $(THIS_FILE) $(BUILD_JAR1)
109106407Sphk	$(RM) -r $(JAR1_UNZIP)
110106407Sphk	$(MKDIR) -p $(JAR1_UNZIP)
111106407Sphk	$(CD) $(JAR1_UNZIP) && $(UNZIP) $(JAR1_FILE) $(LOG_DEBUG)
112106407Sphk	if [ "`$(GREP) 'Test-Attribute: foobar' $(JAR1_UNZIP)/META-INF/MANIFEST.MF`" = "" ]; then \
113106407Sphk	  $(ECHO) "Could not find Test-Attribute in manifest of $(JAR1_FILE)"; \
114106407Sphk	  exit 1; \
115106407Sphk	fi
116106407Sphk	$(TOUCH) $@
117106407Sphk
118106407Sphkupdate-jar1-manifest: $(OUTPUT_DIR)/_jar1_updated_manifest
119106407Sphk
120106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar1_updated $(OUTPUT_DIR)/_jar1_updated_manifest
121106407Sphk
122105464Sphk.PHONY: clean-jar1 create-jar1 update-jar1 update-jar1-manifest
123105464Sphk
124106407Sphk################################################################################
125106407Sphk# Test: jar2
126106407Sphk# Creates a jar file based on 2 source roots
127120876Sphk
128105464SphkJAR2_SRC_ROOT1 := $(OUTPUT_DIR)/jar2src1
129107450SphkJAR2_SRC_ROOT2 := $(OUTPUT_DIR)/jar2src2
130107450SphkJAR2_UNZIP := $(OUTPUT_DIR)/jar2unzip
131105464SphkJAR2_FILE := $(OUTPUT_DIR)/jar2.jar
132106407Sphk
133107450Sphkclean-jar2:
134107450Sphk	$(RM) -r $(OUTPUT_DIR)/_jar2* $(OUTPUT_DIR)/jar2*
135106407Sphk
136106407Sphk$(OUTPUT_DIR)/_jar2_created: $(DEPS)
137120876Sphk	$(RM) -r $(JAR2_SRC_ROOT1)
138120876Sphk	$(RM) -r $(JAR2_SRC_ROOT2)
139120876Sphk	$(RM) $(JAR2_FILE)
140106407Sphk	$(RM) -r $(JAR2_UNZIP)
141106407Sphk	$(MKDIR) -p $(JAR2_SRC_ROOT1)/dir1
142106407Sphk	$(MKDIR) -p $(JAR2_SRC_ROOT2)/dir2
143106407Sphk	$(TOUCH) $(JAR2_SRC_ROOT1)/dir1/file1.class
144105464Sphk	$(TOUCH) $(JAR2_SRC_ROOT2)/dir2/file2.class
145105464Sphk	$(TOUCH) $@
146106407Sphk
147120876Sphk$(eval $(call SetupJarArchive, BUILD_JAR2, \
148105464Sphk    DEPENDENCIES := $(OUTPUT_DIR)/_jar2_created, \
149106407Sphk    SRCS := $(JAR2_SRC_ROOT1) $(JAR2_SRC_ROOT2), \
150106407Sphk    JAR := $(JAR2_FILE), \
151106407Sphk))
152106407Sphk
153106407Sphk$(OUTPUT_DIR)/_jar2_verified: $(BUILD_JAR2)
154105464Sphk	$(RM) -r $(JAR2_UNZIP)
155106407Sphk	$(MKDIR) -p $(JAR2_UNZIP)
156120876Sphk	$(CD) $(JAR2_UNZIP) && $(UNZIP) $(JAR2_FILE) $(LOG_DEBUG)
157106407Sphk	$(DIFF) -r $(JAR2_SRC_ROOT1)/dir1 $(JAR2_UNZIP)/dir1
158106407Sphk	$(DIFF) -r $(JAR2_SRC_ROOT2)/dir2 $(JAR2_UNZIP)/dir2
159106407Sphk	$(TOUCH) $@
160113010Sphk
161106407Sphkcreate-jar2: $(OUTPUT_DIR)/_jar2_verified
162106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar2_verified
163106407Sphk
164113010Sphk$(OUTPUT_DIR)/_jar2_updated: $(OUTPUT_DIR)/_jar2_verified
165106407Sphk	$(ECHO) updated > $(JAR2_SRC_ROOT1)/dir1/file1.class
166106407Sphk	$(TOUCH) $(OUTPUT_DIR)/_jar2_created
167106407Sphk	+$(MAKE) -f $(THIS_FILE) $(OUTPUT_DIR)/_jar2_verified
168113010Sphk	$(TOUCH) $@
169106407Sphk
170106407Sphkupdate-jar2: $(OUTPUT_DIR)/_jar2_updated
171106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar2_updated
172113010Sphk
173106407Sphk.PHONY: clean-jar2 create-jar2 update-jar2
174106407Sphk
175106407Sphk################################################################################
176113010Sphk# Test: jar3
177106407Sphk# Creates a jar file based on 2 source roots with an extra file
178106407Sphk
179106407SphkJAR3_SRC_ROOT1 := $(OUTPUT_DIR)/jar3src1
180106407SphkJAR3_SRC_ROOT2 := $(OUTPUT_DIR)/jar3src2
181106407SphkJAR3_UNZIP := $(OUTPUT_DIR)/jar3unzip
182106407SphkJAR3_FILE := $(OUTPUT_DIR)/jar3.jar
183113010Sphk
184106407Sphkclean-jar3:
185106407Sphk	$(RM) -r $(OUTPUT_DIR)/_jar3* $(OUTPUT_DIR)/jar3*
186106407Sphk
187106407Sphk$(OUTPUT_DIR)/_jar3_created: $(DEPS)
188106407Sphk	$(RM) -r $(JAR3_SRC_ROOT1)
189106407Sphk	$(RM) -r $(JAR3_SRC_ROOT2)
190106407Sphk	$(RM) $(JAR3_FILE)
191106407Sphk	$(RM) -r $(JAR3_UNZIP)
192106407Sphk	$(MKDIR) -p $(JAR3_SRC_ROOT1)/dir1
193106407Sphk	$(MKDIR) -p $(JAR3_SRC_ROOT2)/dir2
194106407Sphk	$(TOUCH) $(JAR3_SRC_ROOT1)/dir1/file1\$$foo.class
195106407Sphk	$(TOUCH) $(JAR3_SRC_ROOT2)/dir2/file2.class
196106407Sphk	$(TOUCH) $(JAR3_SRC_ROOT2)/extra-file
197106407Sphk	$(TOUCH) $(JAR3_SRC_ROOT2)/extra-file-abs
198106407Sphk	$(TOUCH) $(JAR3_SRC_ROOT2)/dir2/file\$$foo.dollar
199106407Sphk	$(TOUCH) $@
200106407Sphk
201106407Sphk$(eval $(call SetupJarArchive, BUILD_JAR3, \
202106407Sphk    DEPENDENCIES := $(OUTPUT_DIR)/_jar3_created, \
203106407Sphk    SRCS := $(JAR3_SRC_ROOT1) $(JAR3_SRC_ROOT2), \
204106407Sphk    EXTRA_FILES := extra-file \
205106407Sphk        dir2/file$$$$foo.dollar \
206106407Sphk        $(JAR3_SRC_ROOT2)/extra-file-abs, \
207106407Sphk    EXCLUDE_FILES := dir1/file1$$$$foo.class, \
208106407Sphk    JAR := $(JAR3_FILE), \
209106407Sphk))
210106407Sphk
211106407Sphk$(OUTPUT_DIR)/_jar3_verified: $(BUILD_JAR3)
212106407Sphk	$(RM) -r $(JAR3_UNZIP)
213106407Sphk	$(MKDIR) -p $(JAR3_UNZIP)
214105464Sphk	$(CD) $(JAR3_UNZIP) && $(UNZIP) $(JAR3_FILE) $(LOG_DEBUG)
215105464Sphk	if [ -d "$(JAR3_UNZIP)/dir1" ]; then \
216106407Sphk	  echo Should not be included $(JAR3_UNZIP)/dir1; \
217106407Sphk	  exit 1; \
218105464Sphk        fi
219106407Sphk	$(DIFF) -r $(JAR3_SRC_ROOT2)/dir2 $(JAR3_UNZIP)/dir2
220106407Sphk	$(DIFF) -r $(JAR3_SRC_ROOT2)/extra-file $(JAR3_UNZIP)/extra-file
221106407Sphk	$(TOUCH) $@
222106407Sphk
223106407Sphkcreate-jar3: $(OUTPUT_DIR)/_jar3_verified
224105464SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar3_verified
225105464Sphk
226120876Sphk$(OUTPUT_DIR)/_jar3_updated: $(OUTPUT_DIR)/_jar3_verified
227106407Sphk	$(ECHO) updated > $(JAR3_SRC_ROOT2)/extra-file
228106407Sphk	$(TOUCH) $(OUTPUT_DIR)/_jar3_created
229106407Sphk	+$(MAKE) -f $(THIS_FILE) $(OUTPUT_DIR)/_jar3_verified
230113010Sphk	$(TOUCH) $@
231106407Sphk
232106407Sphkupdate-jar3: $(OUTPUT_DIR)/_jar3_updated
233106407SphkTEST_TARGETS += $(OUTPUT_DIR)/_jar3_updated
234113010Sphk
235106407Sphk.PHONY: clean-jar3 create-jar3 update-jar3
236106407Sphk
237106407Sphk################################################################################
238113010Sphk# Test SetupJavaCompilation overrides of java files
239106407Sphk
240106407Sphk$(eval $(call SetupJavaCompiler,BOOT_JAVAC, \
241106407Sphk    JAVAC := $(JAVAC), \
242113010Sphk    DISABLE_SJAVAC := true, \
243106407Sphk))
244106407Sphk
245106407SphkJAVA_SRC_ROOT1 := $(OUTPUT_DIR)/javaroot1
246113010SphkJAVA_SRC_ROOT2 := $(OUTPUT_DIR)/javaroot2
247106407Sphk
248106407Sphk# Since this makefile calls itself a number of times, protect this macro from
249106407Sphk# being executed more than once.
250106407Sphk# Param 1 - File name
251106407Sphk# Param 2 - Package name
252106407Sphk# Param 3 - Class name
253113010Sphk# Param 4 - Message
254106407SphkCreateJavaSrc = \
255106407Sphk    $(if $(wildcard $1),,$(shell \
256106407Sphk        $(MKDIR) -p $(dir $1); \
257106407Sphk        $(ECHO) "package $2;" > $1; \
258106407Sphk        $(ECHO) "public class $3 {" >> $1; \
259106407Sphk        $(ECHO) "    public static void main(String[] args) {" >> $1; \
260106407Sphk        $(ECHO) "        System.out.print(\"$4\");" >> $1; \
261106407Sphk        $(ECHO) "    }" >> $1; \
262106407Sphk        $(ECHO) "}" >> $1; \
263106407Sphk    ))
264106407Sphk
265106407Sphk# Since this makefile calls itself a number of times, protect this macro from
266106407Sphk# being executed more than once.
267106407Sphk# Param 1 - File name
268106407Sphk# Param 2 - Message
269106407SphkCreateTextFile = \
270106407Sphk    $(if $(wildcard $1),,$(shell \
271106407Sphk        $(MKDIR) -p $(dir $1); \
272106407Sphk        $(PRINTF) '$2' > $1; \
273106407Sphk    ))
274105464Sphk
275106407Sphk$(call CreateJavaSrc,$(JAVA_SRC_ROOT1)/a/A.java,a,A,javaroot1)
276106407Sphk$(call CreateJavaSrc,$(JAVA_SRC_ROOT2)/a/A.java,a,A,javaroot2)
277106407Sphk$(call CreateTextFile,$(JAVA_SRC_ROOT1)/a/b.txt,javaroot1\n)
278106407Sphk$(call CreateTextFile,$(JAVA_SRC_ROOT2)/a/b.txt,javaroot2\n)
279106407Sphk$(call CreateTextFile,$(JAVA_SRC_ROOT1)/a/c.properties,#javaroot1\nname=value1\n)
280106407Sphk$(call CreateTextFile,$(JAVA_SRC_ROOT2)/a/c.properties,#javaroot2\nname=value2\n)
281106407Sphk
282106407Sphk# Due to a bug in gnu make 3.81, need to add the src roots with trailing slash,
283106407Sphk# otherwise $(wildcard ) will not find the directories and the sanity check in
284105464Sphk# SetupJavaCompilation will fail.
285105464Sphk$(eval $(call SetupJavaCompilation, BUILD_ROOT1_FIRST, \
286105464Sphk    SETUP := BOOT_JAVAC, \
287106407Sphk    SRC := $(JAVA_SRC_ROOT1)/ $(JAVA_SRC_ROOT2)/, \
288106407Sphk    COPY := .txt .java, \
289106407Sphk    CLEAN := .properties, \
290106407Sphk    BIN := $(OUTPUT_DIR)/root1first/, \
291106407Sphk))
292298808Spfg
293106407Sphk$(BUILD_ROOT1_FIRST):
294106407Sphk
295106407Sphkverify-root1-first: $(BUILD_ROOT1_FIRST)
296106407Sphk	$(JAVA_SMALL) -cp $(OUTPUT_DIR)/root1first a.A > $(OUTPUT_DIR)/root1first.output
297106407Sphk	if [ "`$(CAT) $(OUTPUT_DIR)/root1first.output`" != "javaroot1" ]; then \
298106407Sphk	  $(ECHO) "The wrong class was compiled. Expected >javaroot1<"; \
299106407Sphk	  $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root1first.output`<"; \
300106407Sphk	  false; \
301106407Sphk	fi
302106407Sphk	if [ "`$(CAT) $(OUTPUT_DIR)/root1first/a/b.txt`" != "javaroot1" ]; then \
303105464Sphk	  $(ECHO) "The wrong file was copied. Expected >javaroot1<"; \
304105464Sphk	  $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root1first/a/b.txt`<"; \
305105464Sphk	  false; \
306120876Sphk	fi
307105464Sphk	if [ ! -e "$(OUTPUT_DIR)/root1first/a/A.java" ]; then \
308106407Sphk	  $(ECHO) "Missed copying $(OUTPUT_DIR)/root1first/a/A.java"; \
309105464Sphk	  false; \
310105464Sphk	fi
311105464Sphk	if [ "`$(CAT) $(OUTPUT_DIR)/root1first/a/c.properties`" != "name=value1" ]; then \
312120876Sphk	  $(ECHO) "The wrong file was cleaned. Expected >name=value1<"; \
313120876Sphk	  $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root1first/a/c.properties`<"; \
314106407Sphk	  false; \
315120876Sphk	fi
316106407Sphk
317106407Sphk$(eval $(call SetupJavaCompilation, BUILD_ROOT2_FIRST, \
318105464Sphk    SETUP := BOOT_JAVAC, \
319105512Sphk    SRC := $(JAVA_SRC_ROOT2)/ $(JAVA_SRC_ROOT1)/, \
320105464Sphk    COPY := .txt, \
321105464Sphk    CLEAN := .properties, \
322105464Sphk    BIN := $(OUTPUT_DIR)/root2first/, \
323105464Sphk))
324120876Sphk
325105464Sphk$(BUILD_ROOT2_FIRST):
326105464Sphk
327105464Sphkverify-root2-first: $(BUILD_ROOT2_FIRST)
328106407Sphk	$(JAVA_SMALL) -cp $(OUTPUT_DIR)/root2first a.A > $(OUTPUT_DIR)/root2first.output
329105464Sphk	if [ "`$(CAT) $(OUTPUT_DIR)/root2first.output`" != "javaroot2" ]; then \
330106407Sphk	  $(ECHO) "The wrong class was compiled. Expected >javaroot2<"; \
331120876Sphk	  $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root2first.output`<"; \
332106407Sphk	  false; \
333120876Sphk	fi
334106407Sphk	if [ "`$(CAT) $(OUTPUT_DIR)/root2first/a/b.txt`" != "javaroot2" ]; then \
335105464Sphk	  $(ECHO) "The wrong file was cleaned. Expected >javaroot2<"; \
336105512Sphk	  $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root2first/a/b.txt`<"; \
337120876Sphk	  false; \
338105464Sphk	fi
339105464Sphk	if [ "`$(CAT) $(OUTPUT_DIR)/root2first/a/c.properties`" != "name=value2" ]; then \
340105464Sphk	  $(ECHO) "The wrong file was cleaned. Expected >name=value2<"; \
341106407Sphk	  $(ECHO) "Got >`$(CAT) $(OUTPUT_DIR)/root2first/a/c.properties`<"; \
342106407Sphk	  false; \
343106407Sphk	fi
344106407Sphk
345106407SphkTEST_TARGETS += verify-root1-first verify-root2-first
346106407Sphk
347106407Sphk.PHONY: verify-root1-first verify-root2-first
348106407Sphk
349106407Sphk################################################################################
350106407Sphk
351105464Sphkall: $(TEST_TARGETS)
352105464Sphk
353105512Sphk.PHONY: default all
354106407Sphk