1# Functions to compose path/classpath
2
3EMPTY :=
4SPACE := $(EMPTY) $(EMPTY)
5define joinsegments
6$(subst $(SPACE),:,$(strip $1))
7endef
8define composeclasspath
9$(if $(call joinsegments,$1),-classpath $(call joinsegments,$1),)
10endef
11
12# Source directories
13
14export TOP_BUILD_DIR = $(abs_top_builddir)
15
16export NETX_DIR = $(abs_top_builddir)/netx.build
17export DOCS_DIR=$(TOP_BUILD_DIR)/icedtea-web-docs/$(FULL_VERSION)
18export NETX_SRCDIR = $(abs_top_srcdir)/netx
19export NETX_RESOURCE_DIR=$(NETX_SRCDIR)/net/sourceforge/jnlp/resources
20export ICONS_DEST_DIR=$(DESTDIR)$(datadir)/pixmaps
21
22export REPORT_STYLES_DIRNAME=report-styles
23
24export TESTS_SRCDIR=$(abs_top_srcdir)/tests
25export TESTS_DIR=$(abs_top_builddir)/tests.build
26
27export NETX_UNIT_TEST_SRCDIR=$(TESTS_SRCDIR)/netx/unit
28export NETX_TEST_DIR=$(TESTS_DIR)/netx
29export NETX_UNIT_TEST_DIR=$(NETX_TEST_DIR)/unit
30
31export JUNIT_RUNNER_DIR=$(TESTS_DIR)/junit-runner
32export JUNIT_RUNNER_SRCDIR=$(TESTS_SRCDIR)/junit-runner
33
34export JACOCO_OPERATOR_DIR=$(TESTS_DIR)/jacoco-operator
35export JACOCO_OPERATOR_SRCDIR=$(TESTS_SRCDIR)/jacoco-operator
36
37export TEST_EXTENSIONS_SRCDIR=$(TESTS_SRCDIR)/test-extensions
38export TEST_EXTENSIONS_TESTS_SRCDIR=$(TESTS_SRCDIR)/test-extensions-tests
39export REPRODUCERS_TESTS_SRCDIR=$(TESTS_SRCDIR)/reproducers
40export TEST_EXTENSIONS_DIR=$(TESTS_DIR)/test-extensions
41export CPP_UNITTEST_FRAMEWORK_SRCDIR=$(TESTS_SRCDIR)/UnitTest++
42export CPP_UNITTEST_SRCDIR=$(TESTS_SRCDIR)/cpp-unit-tests
43export CPP_UNITTEST_DIR=$(TESTS_DIR)/cpp-unit-tests
44export TEST_EXTENSIONS_COMPATIBILITY_SYMLINK=$(TESTS_DIR)/netx/jnlp_testsengine
45export TEST_EXTENSIONS_TESTS_DIR=$(TESTS_DIR)/test-extensions-tests
46export REPRODUCERS_TESTS_SERVER_DEPLOYDIR=$(TESTS_DIR)/reproducers_test_server_deploydir
47export REPRODUCERS_BUILD_DIR=$(TESTS_DIR)/reproducers.classes
48export PRIVATE_KEYSTORE_NAME=teststore.ks
49export PRIVATE_KEYSTORE_PASS=123456789
50export EXPORTED_TEST_CERT_PREFIX=icedteatests
51export EXPORTED_TEST_CERT_SUFFIX=crt
52export TEST_CERT_ALIAS=icedteaweb
53export PUBLIC_KEYSTORE_STUB=icedtea-web/security/trusted.certs
54export PUBLIC_KEYSTORE_PASS=changeit
55
56export JUNIT_RUNNER_JAR=$(abs_top_builddir)/junit-runner.jar
57export UNIT_CLASS_NAMES = $(abs_top_builddir)/unit_class_names
58export REPRODUCERS_CLASS_NAMES = $(abs_top_builddir)/reproducers_class_names
59export REPRODUCERS_CLASS_WHITELIST = $(abs_top_srcdir)/netx-dist-tests-whitelist
60export COVERAGE_JAVA_ARGS=-Xmx2G
61export COVERAGE_MODIFIED_FILES=tests-output.xml ServerAccess-logs.xml stdout.log stderr.log all.log
62export EMMA_BACKUP_SUFFIX=_noEmma
63export EMMA_SUFFIX=_withEmma
64export META_MANIFEST = META-INF/MANIFEST.MF
65export SIGNED_REPRODUCERS=signed signed2
66export SIMPLE_REPRODUCERS=simple
67export CUSTOM_REPRODUCERS=custom
68export ALL_NONCUSTOM_REPRODUCERS=$(SIMPLE_REPRODUCERS) $(SIGNED_REPRODUCERS)
69export ALL_REPRODUCERS=$(ALL_NONCUSTOM_REPRODUCERS) $(CUSTOM_REPRODUCERS)
70
71export JACOCO_PATH:=$(shell dirname "$(JACOCO_JAR)")
72export JACOCO_AGENT=org.jacoco.agent.jar
73export JACOCO_ANT=org.jacoco.ant.jar
74export JACOCO_REPORT=org.jacoco.report.jar
75export JACOCO_AGENTRT=org.jacoco.agent.rt.jar
76export JACOCO_CORE=org.jacoco.core.jar
77export JACOCO_JAVAWS_RESULTS=$(TEST_EXTENSIONS_DIR)/jacoco_javaws.exec
78export JACOCO_PLUGIN_RESULTS=$(TEST_EXTENSIONS_DIR)/jacoco_plugin.exec
79# space separated fragments for composeclasspath
80export JACOCO_CLASSPATH=$(JACOCO_PATH)/$(JACOCO_CORE) $(JACOCO_PATH)/$(JACOCO_AGENT) $(JACOCO_PATH)/$(JACOCO_REPORT) $(JACOCO_PATH)/$(JACOCO_AGENTRT) $(JACOCO_PATH)/$(JACOCO_ANT) $(ASM_JAR)
81export JACOCO_AGENT_SWITCH_BODY=-javaagent:$(JACOCO_PATH)/$(JACOCO_AGENTRT)
82export JACOCO_BASE_EXCLUDE=org.junit.*:junit.*
83export JACOCO_ADVANCED_EXCLUDE=:*jacoco*:java.lang.*:java.reflect.*:java.util.*:sun.reflect.*
84export JACOCO_AGENT_SWITCH="$(JACOCO_AGENT_SWITCH_BODY)=excludes=$(JACOCO_BASE_EXCLUDE)$(JACOCO_ADVANCED_EXCLUDE),inclbootstrapclasses=true"
85export JACOCO_AGENT_JAVAWS_SWITCH=\"$(JACOCO_AGENT_SWITCH),destfile=$(JACOCO_JAVAWS_RESULTS)\"
86export JACOCO_AGENT_PLUGIN_SWITCH=\"$(JACOCO_AGENT_SWITCH),destfile=$(JACOCO_PLUGIN_RESULTS)\"
87export JACOCO_OPERATOR_EXEC=$(SYSTEM_JRE_DIR)/bin/java $(COVERAGE_JAVA_ARGS) -cp $(call joinsegments, $(JACOCO_OPERATOR_DIR) $(JACOCO_CLASSPATH) .) org.jacoco.operator.Main
88
89# linking variables
90export PLUGIN_LINK_NAME=libjavaplugin.so
91export MOZILLA_LOCAL_PLUGINDIR=${HOME}/.mozilla/plugins
92export MOZILLA_GLOBAL64_PLUGINDIR=/usr/lib64/mozilla/plugins
93export MOZILLA_GLOBAL32_PLUGINDIR=/usr/lib/mozilla/plugins
94export OPERA_GLOBAL64_PLUGINDIR=/usr/lib64/opera/plugins
95export OPERA_GLOBAL32_PLUGINDIR=/usr/lib/opera/plugins
96export BUILT_PLUGIN_LIBRARY=IcedTeaPlugin.so
97export CPP_UNITTEST_FRAMEWORK_BUILDDIR=$(CPP_UNITTEST_DIR)/UnitTest++
98export CPP_UNITTEST_FRAMEWORK_LIB_NAME=libUnitTest++.a
99export CPP_UNITTEST_FRAMEWORK_LIB=$(CPP_UNITTEST_FRAMEWORK_BUILDDIR)/$(CPP_UNITTEST_FRAMEWORK_LIB_NAME)
100export CPP_UNITTEST_EXECUTABLE=$(CPP_UNITTEST_DIR)/IcedTeaPluginUnitTests
101export MOZILLA_LOCAL_BACKUP_FILE=${HOME}/$(PLUGIN_LINK_NAME).origU
102export MOZILLA_GLOBAL_BACKUP_FILE=${HOME}/$(PLUGIN_LINK_NAME).origMG
103export OPERA_GLOBAL_BACKUP_FILE=${HOME}/$(PLUGIN_LINK_NAME).origOG
104export MOZILLA_FAMILY_TEST= "$(FIREFOX)" != "" -o "$(CHROMIUM)" != "" -o "$(CHROME)" != "" -o "$(MIDORI)" != "" -o "$(EPIPHANY)" != ""
105# end of linking variables
106
107# Build directories
108
109# note this is *space* separated list, as composeclasspath is called on them in classpath usage
110JUNIT_RUNTIME:=$(JUNIT_JAR) $(HAMCREST_JAR)
111
112# support for javaws -html needs plugin.jar on classpath. rest of javaws works of course without it.
113if ENABLE_PLUGIN
114  PLUGIN_JAR=$(datadir)/$(PACKAGE_NAME)/plugin.jar
115endif
116
117# Conditional defintions
118if HAVE_TAGSOUP
119  NETX_EXCLUDE_SRCS=
120else
121  NETX_EXCLUDE_SRCS=net.sourceforge.jnlp.MalformedXMLParser.java
122endif
123
124# Flags
125export IT_CFLAGS=$(CFLAGS) $(ARCHFLAG)
126export IT_JAVAC_SETTINGS=-g -encoding utf-8 $(JAVACFLAGS) $(MEMORY_LIMIT) $(PREFER_SOURCE)
127export IT_LANGUAGE_SOURCE_VERSION=7
128export IT_CLASS_TARGET_VERSION=7
129export IT_JAVACFLAGS=$(IT_JAVAC_SETTINGS) -source $(IT_LANGUAGE_SOURCE_VERSION) -target $(IT_CLASS_TARGET_VERSION)
130
131#
132# We need the jars in bootclasspath for a couple of reasons
133#  - we use classes (in the sun.applet package) loaded by the bootclassloader
134#    using another classloader to load classes from the same package causes an
135#    IllegalAccessException
136#  - we want full privileges
137#
138export UNIFIED_CLASSPATH_SEGMENTS=$(datadir)/$(PACKAGE_NAME)/netx.jar $(PLUGIN_JAR) $(RHINO_JAR) $(TAGSOUP_JAR)
139export UNIFIED_JACOCO_CLASSPATH_SEGMENTS=$(UNIFIED_CLASSPATH_SEGMENTS) $(JACOCO_CLASSPATH)
140export UNIFIED_CLASSPATH=$(call joinsegments, $(UNIFIED_CLASSPATH_SEGMENTS))
141export UNIFIED_JACOCO_CLASSPATH=$(call joinsegments, $(UNIFIED_JACOCO_CLASSPATH_SEGMENTS))
142export UNIFIED_BOOTCLASSPATH=-Xbootclasspath/a:$(UNIFIED_CLASSPATH)
143# note javaws, itwebsettings and policyeditor (== LAUNCHER_BOOTCLASSPATH) must be always able to compile and run *without* plugin
144export LAUNCHER_BOOTCLASSPATH="$(UNIFIED_BOOTCLASSPATH)"
145export PLUGIN_BOOTCLASSPATH='"$(UNIFIED_BOOTCLASSPATH)"'
146export PLUGIN_COVERAGE_BOOTCLASSPATH='"-Xbootclasspath/a:$(UNIFIED_JACOCO_CLASSPATH)"'
147
148# Fake update version to work with the Deployment Toolkit script used by Oracle
149# http://download.oracle.com/javase/tutorial/deployment/deploymentInDepth/depltoolkit_index.html
150export JDK_UPDATE_VERSION=50
151
152# Sources list
153
154export PLUGIN_TEST_SRCS = $(abs_top_srcdir)/plugin/tests/LiveConnect/*.java
155
156export NETX_PKGS = javax.jnlp net.sourceforge.nanoxml net.sourceforge.jnlp \
157	net.sourceforge.jnlp.about \
158	net.sourceforge.jnlp.cache net.sourceforge.jnlp.config \
159	net.sourceforge.jnlp.controlpanel net.sourceforge.jnlp.event \
160	net.sourceforge.jnlp.runtime net.sourceforge.jnlp.security \
161	net.sourceforge.jnlp.security.viewer net.sourceforge.jnlp.services \
162	net.sourceforge.jnlp.tools net.sourceforge.jnlp.util \
163	sun.applet
164
165if ENABLE_PLUGIN
166export ICEDTEAPLUGIN_CLEAN = clean-IcedTeaPlugin
167export LIVECONNECT_DIR = netscape sun/applet
168export PLUGIN_DIR=$(abs_top_builddir)/plugin/icedteanp
169export PLUGIN_SRCDIR=$(abs_top_srcdir)/plugin/icedteanp
170export LIVECONNECT_SRCS = $(PLUGIN_SRCDIR)/java
171export ICEDTEAPLUGIN_TARGET = $(PLUGIN_DIR)/$(BUILT_PLUGIN_LIBRARY) stamps/liveconnect-dist.stamp
172export PLUGIN_PKGS = sun.applet netscape.security netscape.javascript
173#this is for plugin testcoverage
174export COVERABLE_PLUGIN_DIR=$(TESTS_DIR)/icedteanp-build-with-jacoco
175endif
176
177if CP_SUPPORTS_REFLINK
178  REFLINK = --reflink=auto
179endif
180
181if SRC_DIR_HARDLINKABLE
182  SRC_DIR_LINK = -l
183else
184  SRC_DIR_LINK = $(REFLINK)
185endif
186
187if ENABLE_DOCS
188JAVADOC_OPTS=-use -keywords -encoding UTF-8 -splitIndex \
189 -bottom '<font size="-1"> <a href="http://icedtea.classpath.org/bugzilla">Submit a bug or feature</a></font>'
190if JAVADOC_SUPPORTS_J_OPTIONS
191JAVADOC_MEM_OPTS=-J-Xmx1024m -J-Xms128m
192endif
193endif
194
195# if you create netx-dist-tests-whitelist in top directory, and place "expr match" regexes
196# (separate by one of IFS's values (most commonly space)) into it, you can control reproducers which compile or/xor run.
197# if you need declare space in your regex, use \s as described in "expr match" documentation
198ECHO_WHITELIST=if [ -f $(REPRODUCERS_CLASS_WHITELIST) ] ; then cat $(REPRODUCERS_CLASS_WHITELIST) ; else echo ".*" ; fi
199if ENABLE_WHITELIST
200COMPILE_WHITELIST_FILTER=`$(ECHO_WHITELIST)`
201RUN_WHITELIST_FILTER=.*
202else
203COMPILE_WHITELIST_FILTER=.*
204RUN_WHITELIST_FILTER=`$(ECHO_WHITELIST)`
205endif
206
207if WITH_RHINO
208  RHINO_TESTS=stamps/check-pac-functions.stamp
209else
210  RHINO_TESTS=
211endif
212
213if WITH_JUNIT
214  JUNIT_TESTS=stamps/run-netx-unit-tests.stamp
215else
216  JUNIT_TESTS=
217endif
218
219
220export PLUGIN_VERSION = IcedTea-Web $(FULL_VERSION)
221
222export EXTRA_DIST = $(top_srcdir)/netx $(top_srcdir)/plugin javaws.png javaws.desktop.in policyeditor.desktop.in icedteaweb-completion \
223 itweb-settings.desktop.in launcher $(top_srcdir)/tests html-gen.sh NEW_LINE_IFS $(top_srcdir)/metadata.in
224
225# reproducers `D`shortcuts
226export DTEST_SERVER=-Dtest.server.dir=$(REPRODUCERS_TESTS_SERVER_DEPLOYDIR)
227export DJAVAWS_BUILD=-Djavaws.build.bin=$(DESTDIR)$(bindir)/$(javaws)
228export DBROWSERS=-Dused.browsers=$(FIREFOX):$(CHROMIUM):$(CHROME):$(OPERA):$(MIDORI):$(EPIPHANY)
229export REPRODUCERS_DPARAMETERS= $(DTEST_SERVER) $(DJAVAWS_BUILD) $(DBROWSERS) $(BROWSER_TESTS_MODIFICATION)
230# end of `D`shortcuts
231
232#exported autoconf copies
233export EXPORTED_JAVAC=$(SYSTEM_JDK_DIR)/bin/javac
234export EXPORTED_JAR=$(SYSTEM_JDK_DIR)/bin/jar
235export EXPORTED_KEYTOOL=$(SYSTEM_JDK_DIR)/bin/keytool
236export EXPORTED_JARSIGNER=$(SYSTEM_JDK_DIR)/bin/jarsigner
237export EXPORTED_PACK200=$(SYSTEM_JDK_DIR)/bin/pack200
238#end of exported autoconf copies
239
240# binary names
241javaws:= $(shell echo javaws | sed '@program_transform_name@')
242itweb_settings:= $(shell echo itweb-settings | sed '@program_transform_name@')
243policyeditor:= $(shell echo policyeditor | sed '@program_transform_name@')
244
245# the launcher needs to know $(bindir) and $(datadir) which can be different at
246# make-time from configure-time
247edit_launcher_script = sed \
248  -e "s|[@]LAUNCHER_BOOTCLASSPATH[@]|$(LAUNCHER_BOOTCLASSPATH)|g" \
249  -e "s|[@]JAVAWS_SPLASH_LOCATION[@]|$(datadir)/$(PACKAGE_NAME)/javaws_splash.png|g" \
250  -e "s|[@]JAVA[@]|$(JAVA)|g" \
251  -e "s|[@]JRE[@]|$(SYSTEM_JRE_DIR)|g" \
252  -e "s|[@]MAIN_CLASS[@]|$${MAIN_CLASS}|g" \
253  -e "s|[@]BIN_LOCATION[@]|$${BIN_LOCATION}|g" \
254  -e "s|[@]PROGRAM_NAME[@]|$${PROGRAM_NAME}|g"
255
256# Top-Level Targets
257# =================
258
259all-local: stamps/netx-dist.stamp stamps/plugin.stamp launcher.build/$(javaws) \
260 javaws.desktop stamps/docs.stamp launcher.build/$(itweb_settings) itweb-settings.desktop \
261 launcher.build/$(policyeditor) policyeditor.desktop
262
263check-local: $(RHINO_TESTS) $(JUNIT_TESTS)
264
265clean-local: clean-netx clean-plugin clean-liveconnect \
266 clean-native-ecj clean-launchers clean-desktop-files clean-docs clean-generated-docs clean-metadata clean-tests clean-bootstrap-directory
267	if [ -e stamps ] ; then \
268	  rmdir stamps ; \
269	fi
270
271.PHONY: clean-IcedTeaPlugin clean-add-netx clean-add-netx-debug clean-add-plugin clean-add-plugin-debug \
272 clean-bootstrap-directory clean-native-ecj clean-desktop-files clean-netx-docs clean-docs clean-plugin-docs clean-generated-docs \
273 clean-tests check-local clean-launchers stamps/check-pac-functions.stamp stamps/run-netx-unit-tests.stamp clean-netx-tests \
274 clean-junit-runner clean-netx-unit-tests clean-metadata
275
276install-exec-local:
277	${mkinstalldirs} $(DESTDIR)$(bindir) $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/ $(DESTDIR)$(libdir) $(ICONS_DEST_DIR)
278if ENABLE_PLUGIN
279	${INSTALL_PROGRAM} $(PLUGIN_DIR)/$(BUILT_PLUGIN_LIBRARY) $(DESTDIR)$(libdir)
280	${INSTALL_DATA} $(abs_top_builddir)/liveconnect/lib/classes.jar $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/plugin.jar
281endif
282	${INSTALL_DATA} $(NETX_DIR)/lib/classes.jar $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/netx.jar
283	${INSTALL_DATA} $(NETX_SRCDIR)/javaws_splash.png $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/javaws_splash.png
284	${INSTALL_DATA} $(abs_top_srcdir)/javaws.png $(ICONS_DEST_DIR)/
285	${INSTALL_PROGRAM} launcher.build/$(javaws) $(DESTDIR)$(bindir)
286	${INSTALL_PROGRAM} launcher.build/$(itweb_settings) $(DESTDIR)$(bindir)
287	${INSTALL_PROGRAM} launcher.build/$(policyeditor) $(DESTDIR)$(bindir)
288
289# all generated manpages are installed in swarm
290install-data-local:
291	${mkinstalldirs} -d $(DESTDIR)$(mandir)
292	cp -r "$(DOCS_DIR)/man/"* $(DESTDIR)$(mandir)/
293if ENABLE_DOCS
294	${mkinstalldirs} $(DESTDIR)$(htmldir)
295	(cd ${abs_top_builddir}/docs/netx; \
296	 for files in $$(find . -type f); \
297	 do \
298	   ${INSTALL_DATA} -D $${files} $(DESTDIR)$(htmldir)/netx/$${files}; \
299	 done)
300if ENABLE_PLUGIN
301	(cd ${abs_top_builddir}/docs/plugin; \
302	 for files in $$(find . -type f); \
303	 do \
304	   ${INSTALL_DATA} -D $${files} $(DESTDIR)$(htmldir)/plugin/$${files}; \
305	 done)
306endif
307endif
308
309# all generated manpages must be removed one by one
310uninstall-local:
311	rm -f $(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY)
312	rm -f $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/plugin.jar
313	rm -f $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/netx.jar
314	rm -r $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/javaws_splash.png
315	rm -r $(ICONS_DEST_DIR)/javaws.png
316	KNOWN_MANS="icedtea-web.1  icedtea-web-plugin.1  itweb-settings.1  javaws.1  policyeditor.1" ; \
317	KNOWN_DIRS="man1 de/man1 pl/man1 cs/man1" ; \
318	for file in $$KNOWN_MANS ; do \
319	  for dir in $$KNOWN_DIRS ; do \
320	    rm -f $(DESTDIR)$(mandir)/$$dir/$$file ; \
321	  done ; \
322	done
323	rm -f $(DESTDIR)$(bindir)/$(javaws)
324	rm -f $(DESTDIR)$(bindir)/$(itweb_settings)
325	rm -f $(DESTDIR)$(bindir)/$(policyeditor)
326	rm -rf $(DESTDIR)$(htmldir)
327
328# Plugin
329
330if ENABLE_PLUGIN
331# IcedTeaPlugin.so.
332# Separate compile and link invocations to ensure intermediate object
333# is listed before -l options.  See:
334# http://developer.mozilla.org/en/docs/XPCOM_Glue
335
336PLUGIN_SRC=IcedTeaNPPlugin.cc IcedTeaScriptablePluginObject.cc \
337        IcedTeaJavaRequestProcessor.cc IcedTeaPluginRequestProcessor.cc \
338		IcedTeaPluginUtils.cc IcedTeaParseProperties.cc
339
340PLUGIN_OBJECTS=IcedTeaNPPlugin.o IcedTeaScriptablePluginObject.o \
341        IcedTeaJavaRequestProcessor.o IcedTeaPluginRequestProcessor.o \
342		IcedTeaPluginUtils.o IcedTeaParseProperties.o
343
344$(PLUGIN_DIR)/%.o: $(PLUGIN_SRCDIR)/%.cc
345	mkdir -p $(PLUGIN_DIR) && \
346	cd $(PLUGIN_DIR) && \
347	$(CXX) $(CXXFLAGS) \
348	   $(DEFS) $(VERSION_DEFS) \
349	  -DJDK_UPDATE_VERSION="\"$(JDK_UPDATE_VERSION)\"" \
350	  -DPLUGIN_NAME="\"IcedTea-Web Plugin\"" \
351	  -DJAVAWS_BIN="\"$(bindir)/$(javaws)\"" \
352	  -DJAVAWS_NAME="\"$(javaws)\"" \
353	  -DPLUGIN_VERSION="\"$(PLUGIN_VERSION)\"" \
354	  -DPACKAGE_URL="\"$(PACKAGE_URL)\"" \
355	  -DMOZILLA_VERSION_COLLAPSED="$(MOZILLA_VERSION_COLLAPSED)" \
356	  -DICEDTEA_WEB_JRE="\"$(SYSTEM_JRE_DIR)\"" \
357	  -DPLUGIN_BOOTCLASSPATH=$(PLUGIN_BOOTCLASSPATH) \
358	  $(GLIB_CFLAGS) \
359	  $(MOZILLA_CFLAGS) \
360  	  -fvisibility=hidden \
361	  -fPIC -o $@ -c $<
362
363$(PLUGIN_DIR)/$(BUILT_PLUGIN_LIBRARY): $(addprefix $(PLUGIN_DIR)/,$(PLUGIN_OBJECTS))
364	cd $(PLUGIN_DIR) && \
365	$(CXX) $(CXXFLAGS) \
366	  $(PLUGIN_OBJECTS) \
367	  $(GLIB_LIBS) \
368	  $(MOZILLA_LIBS) \
369	  -shared -o $@
370
371# Start of CPP Unit test targets
372
373# Note that UnitTest++ has its own makefile, however this is avoided because it creates an in-source build.
374$(CPP_UNITTEST_FRAMEWORK_LIB): $(CPP_UNITTEST_FRAMEWORK_SRCDIR)
375	mkdir -p $(CPP_UNITTEST_FRAMEWORK_BUILDDIR) && \
376	pushd $(CPP_UNITTEST_FRAMEWORK_SRCDIR) && \
377	for cppfile in $$(find $(CPP_UNITTEST_FRAMEWORK_SRCDIR) -name '*.cpp') ; \
378	do \
379	  objfile="$(CPP_UNITTEST_FRAMEWORK_BUILDDIR)/$$(basename $${cppfile%.cpp}).o" ; \
380	  $(CXX) $(CXXFLAGS) -c $$cppfile -o $$objfile || exit 1 ; \
381	done ; \
382	ar cr $(CPP_UNITTEST_FRAMEWORK_LIB) $(CPP_UNITTEST_FRAMEWORK_BUILDDIR)/*.o ; \
383	popd
384
385clean-unittest++:
386	rm -f $(CPP_UNITTEST_FRAMEWORK_BUILDDIR)/*.o
387	rm -f $(CPP_UNITTEST_FRAMEWORK_LIB)
388	if [ -e $(CPP_UNITTEST_FRAMEWORK_BUILDDIR) ] ; then \
389		rmdir $(CPP_UNITTEST_FRAMEWORK_BUILDDIR) ; \
390	fi
391
392stamps/cpp-unit-tests-compile.stamp: $(CPP_UNITTEST_FRAMEWORK_LIB) $(CPP_UNITTEST_SRCDIR) $(addprefix $(PLUGIN_DIR)/,$(PLUGIN_OBJECTS))
393	mkdir -p $(CPP_UNITTEST_DIR) && \
394	pushd $(CPP_UNITTEST_SRCDIR) && \
395	for cppfile in $$(find $(CPP_UNITTEST_SRCDIR) -name '*.cc') ; \
396	do \
397	objfile="$(CPP_UNITTEST_DIR)/$$(basename $${cppfile%.cc}).o" ; \
398	echo "Compiling $$cppfile to $$objfile"; \
399	$(CXX) $(CXXFLAGS) \
400	   $(DEFS) $(VERSION_DEFS) \
401	  -DJDK_UPDATE_VERSION="\"$(JDK_UPDATE_VERSION)\"" \
402	  -DPLUGIN_NAME="\"IcedTea-Web Plugin\"" \
403	  -DJAVAWS_BIN="\"$(bindir)/$(javaws)\"" \
404	  -DJAVAWS_NAME="\"$(javaws)\"" \
405	  -DPLUGIN_VERSION="\"$(PLUGIN_VERSION)\"" \
406	  -DPACKAGE_URL="\"$(PACKAGE_URL)\"" \
407	  -DMOZILLA_VERSION_COLLAPSED="$(MOZILLA_VERSION_COLLAPSED)" \
408	  -DICEDTEA_WEB_JRE="\"$(SYSTEM_JRE_DIR)\"" \
409	  -DPLUGIN_BOOTCLASSPATH=$(PLUGIN_BOOTCLASSPATH) \
410	  $(GLIB_CFLAGS) \
411	  $(MOZILLA_CFLAGS) \
412	  "-I$(CPP_UNITTEST_FRAMEWORK_SRCDIR)/src" \
413	  "-I$(PLUGIN_SRCDIR)" \
414	  -o $$objfile -c $$cppfile || exit 1 ; \
415	done ; \
416	popd ; \
417	mkdir -p stamps ; \
418	touch $@
419
420$(CPP_UNITTEST_EXECUTABLE): $(CPP_UNITTEST_FRAMEWORK_LIB) stamps/cpp-unit-tests-compile.stamp
421	cd $(CPP_UNITTEST_DIR) && \
422	$(CXX) $(CXXFLAGS) \
423	  $(addprefix $(PLUGIN_DIR)/,$(PLUGIN_OBJECTS)) \
424	  $(CPP_UNITTEST_DIR)/*.o \
425	  -lrt \
426	  -lpthread \
427	  $(GLIB_LIBS) \
428	  $(MOZILLA_LIBS) \
429	  $(CPP_UNITTEST_FRAMEWORK_LIB)\
430	  $(BUILT_CPP_UNIT_TEST_FRAMEWORK) -o $@
431
432clean-cpp-unit-tests:
433	rm -f stamps/cpp-unit-tests-compile.stamp
434	rm -f $(CPP_UNITTEST_EXECUTABLE)
435	rm -f $(CPP_UNITTEST_DIR)/*.o
436
437run-cpp-unit-tests: $(CPP_UNITTEST_EXECUTABLE)
438	$(CPP_UNITTEST_EXECUTABLE)
439
440# End of CPP Unit test targets
441
442clean-IcedTeaPlugin:
443	rm -f $(PLUGIN_DIR)/*.o
444	rm -f $(PLUGIN_DIR)/$(BUILT_PLUGIN_LIBRARY)
445	if [ $(abs_top_srcdir) != $(abs_top_builddir) ]; then \
446	  if [ -e $(abs_top_builddir)/plugin/icedteanp ] ; then \
447	    rmdir $(abs_top_builddir)/plugin/icedteanp ; \
448	    rmdir $(abs_top_builddir)/plugin ; \
449	  fi ; \
450	fi
451endif
452
453stamps/plugin.stamp: $(ICEDTEAPLUGIN_TARGET)
454	mkdir -p stamps
455	touch stamps/plugin.stamp
456
457clean-plugin: $(ICEDTEAPLUGIN_CLEAN)
458	rm -f stamps/plugin.stamp
459
460liveconnect-source-files.txt:
461	if test "x${LIVECONNECT_DIR}" != x; then \
462	  find $(LIVECONNECT_SRCS) -name '*.java' | sort > $@ ; \
463	fi
464	touch $@
465
466stamps/liveconnect.stamp: liveconnect-source-files.txt stamps/netx.stamp
467	if test "x${LIVECONNECT_DIR}" != x; then \
468	  mkdir -p $(abs_top_builddir)/liveconnect && \
469	  $(SYSTEM_JDK_DIR)/bin/javac $(IT_JAVACFLAGS) \
470	      -d $(abs_top_builddir)/liveconnect \
471	      $(call composeclasspath,$(NETX_DIR) $(TAGSOUP_JAR) $(RHINO_JAR)) \
472	      -sourcepath $(LIVECONNECT_SRCS) \
473	      @liveconnect-source-files.txt ; \
474	fi
475	mkdir -p stamps
476	touch $@
477
478stamps/liveconnect-dist.stamp: stamps/liveconnect.stamp
479	if test "x${LIVECONNECT_DIR}" != x; then \
480	  (cd $(abs_top_builddir)/liveconnect ; \
481	   mkdir -p lib ; \
482	   $(SYSTEM_JDK_DIR)/bin/jar cf lib/classes.jar $(LIVECONNECT_DIR) ; \
483	   cp -pPR $(SRC_DIR_LINK) $(LIVECONNECT_SRCS) src; \
484	   find src -type f -exec chmod 640 '{}' ';' -o -type d -exec chmod 750 '{}' ';'; \
485	   cd src ; \
486	   $(ZIP) -qr $(abs_top_builddir)/liveconnect/lib/src.zip $(LIVECONNECT_DIR) ) ; \
487	fi
488	mkdir -p stamps
489	touch $@
490
491clean-liveconnect:
492	rm -rf $(abs_top_builddir)/liveconnect
493	rm -f stamps/liveconnect-dist.stamp
494	rm -f liveconnect-source-files.txt
495	rm -f stamps/liveconnect.stamp
496
497# NetX
498# requires availability of OpenJDK source code including
499# a patch applied to sun.plugin.AppletViewerPanel and generated sources
500
501netx-source-files.txt:
502	find $(NETX_SRCDIR) -name '*.java' | sort > $@ ; \
503	for src in $(NETX_EXCLUDE_SRCS) ; \
504	do \
505	  sed -i "/$${src}/ d" $@ ; \
506	done
507if !WITH_RHINO
508	sed -i '/RhinoBasedPacEvaluator/ d' $@
509endif
510
511# if 'sed' will be missing on machine, use old IFS hack as on other places
512# the 'sed' cycles is changing some custom version like 1.6.2 fedora23.4 to simple 1.6
513# if changed, keep in mind that also 1.7 should bubble to 1.7
514# also 1.7pre or 1.7preHASH should end up like 1.7
515$(abs_top_builddir)/metadata: $(top_srcdir)/metadata.in
516	mkdir -p $(abs_top_builddir)/metadata-work ; \
517	METAFILES=`ls $(top_srcdir)/metadata.in` ; \
518	SEDDED_VERSION=`echo "$(FULL_VERSION)" | sed 's/[^0-9]\+/ /g'` ; \
519	x=0; for i in $$SEDDED_VERSION ; do  \
520	  let x++; \
521	  if [ $$x -eq 1 ] ; then V1=$$i; fi; \
522	  if [ $$x -eq 2 ] ; then V2=$$i; fi; \
523	done; \
524	XVERSION=$$V1.$$V2; \
525	for F in $$METAFILES ; do \
526	  cat $(top_srcdir)/metadata.in/$$F | sed "s;%{name};$(PACKAGE_NAME);g" |  sed "s;%{version};$$XVERSION;g" > $(abs_top_builddir)/metadata-work/$$F ; \
527	done ; \
528	mv $(abs_top_builddir)/metadata-work $(abs_top_builddir)/metadata ;
529
530check-metadata: $(abs_top_builddir)/metadata
531	xmllint --noout $(abs_top_builddir)/metadata/* ; \
532	if [ $$? -eq 0 ] ; then \
533	  echo "Passed: well formed" ; \
534	else \
535	  echo "FAILED: well formed" ; \
536	fi ; \
537	xmllint --noout --schema http://maven.apache.org/xsd/maven-4.0.0.xsd $(abs_top_builddir)/metadata/*.pom ; \
538	if [ $$? -eq 0 ] ; then \
539	  echo "Passed: valid poms" ; \
540	else \
541	  echo "FAILED: valid poms" ; \
542	fi ; \
543	appstream-util validate $(abs_top_builddir)/metadata/*.appdata.xml  $(abs_top_builddir)/metadata/*.metainfo.xml ; \
544	if [ $$? -eq 0 ] ; then \
545	  echo "Passed: valid software descriptors" ; \
546	else \
547	  echo "FAILED: valid software descriptors" ; \
548	fi ;
549# very strange results:
550# appstreamcli  validate $(abs_top_builddir)/metadata/*.appdata.xml  $(abs_top_builddir)/metadata/*.metainfo.xml
551
552
553stamps/generate-docs.stamp: stamps/netx.stamp
554	mkdir -p "$(DOCS_DIR)" ; \
555	HTML_DOCS_TARGET_DIR="$(DOCS_DIR)/html"  ; \
556	PLAIN_DOCS_TARGET_DIR="$(DOCS_DIR)/plain" ; \
557	MAN_DOCS_TARGET_DIR="$(DOCS_DIR)/man"  ; \
558	mkdir "$$HTML_DOCS_TARGET_DIR" ; \
559	mkdir "$$PLAIN_DOCS_TARGET_DIR" ; \
560	mkdir "$$MAN_DOCS_TARGET_DIR" ; \
561	HTML_DOCS_INDEX="$$HTML_DOCS_TARGET_DIR/index.html" ; \
562	TP_COMMAND="$(SYSTEM_JRE_DIR)/bin/java -cp $(NETX_DIR) net.sourceforge.jnlp.util.docprovider.TextsProvider" ; \
563	TP_TAIL="false $(FULL_VERSION)" ; \
564	LANG_BACKUP=$$LANG ; \
565	echo "<html><head><title>$(PLUGIN_VERSION)</title></head>" > "$$HTML_DOCS_INDEX" ; \
566	echo "<body><h3>$(PLUGIN_VERSION) docs:</h3>"  >> "$$HTML_DOCS_INDEX" ; \
567	for LANG_ID in en_US.UTF-8 cs_CZ.UTF-8 pl_PL.UTF-8 de_DE.UTF-8 ;  do \
568	  ID=`echo "$$LANG_ID" | head -c 2` ; \
569	  ENCOD=`echo "$$LANG_ID" | tail -c 6 -` ; \
570	  export LANG=$$LANG_ID; \
571	  mkdir "$$HTML_DOCS_TARGET_DIR/$$ID" ; \
572	  echo "<li><a href='$$ID/icedtea-web.html'>$$LANG_ID</a></li>"  >> "$$HTML_DOCS_INDEX" ; \
573	  $$TP_COMMAND html "$$HTML_DOCS_TARGET_DIR/$$ID" $$TP_TAIL ; \
574	  mkdir "$$PLAIN_DOCS_TARGET_DIR/$$ID" ; \
575	  $$TP_COMMAND plain "$$PLAIN_DOCS_TARGET_DIR/$$ID" 160 $$TP_TAIL; \
576	  if [ $$ID = "en" ] ; then \
577	    MAN_DESC="$$MAN_DOCS_TARGET_DIR/man1" ; \
578	  else \
579	    MAN_DESC="$$MAN_DOCS_TARGET_DIR/$$ID/man1" ; \
580	  fi ; \
581	  mkdir -p "$$MAN_DESC" ; \
582	  $$TP_COMMAND man $$ENCOD "$$MAN_DESC" $$TP_TAIL ; \
583	  $$TP_COMMAND htmlIntro "$(NETX_DIR)/net/sourceforge/jnlp/resources/about_$$ID.html" $$TP_TAIL; \
584	done ; \
585	export LANG=$$LANG_BACKUP ; \
586	echo "</body></html>"  >> $$HTML_DOCS_INDEX ; \
587	touch $@
588
589stamps/netx-html-gen.stamp:
590	(cd $$NETX_SRCDIR/..; \
591	mkdir -p html-gen; \
592	cp AUTHORS NEWS COPYING ChangeLog html-gen/; \
593	export HTML_GEN_DEBUG=true; \
594	${SHELL} html-gen.sh 33; \
595	unset HTML_GEN_DEBUG)
596	${INSTALL_DATA} $(NETX_SRCDIR)/../html-gen/*.html $(NETX_RESOURCE_DIR)
597	rm -r $(NETX_SRCDIR)/../html-gen/
598	mkdir -p stamps
599	touch $@
600
601stamps/netx.stamp: netx-source-files.txt stamps/netx-html-gen.stamp
602	mkdir -p $(NETX_DIR)
603	$(SYSTEM_JDK_DIR)/bin/javac $(IT_JAVACFLAGS) \
604		-d $(NETX_DIR) \
605		-sourcepath $(NETX_SRCDIR) \
606		$(call composeclasspath, $(TAGSOUP_JAR) $(RHINO_JAR)) \
607	    @netx-source-files.txt
608	(cd $(NETX_RESOURCE_DIR); \
609	 for files in $$(find . -type f); \
610	 do \
611	   ${INSTALL_DATA} -D $${files} \
612	   $(NETX_DIR)/net/sourceforge/jnlp/resources/$${files}; \
613	 done)
614	cp -a $(NETX_SRCDIR)/net/sourceforge/jnlp/runtime/pac-funcs.js \
615	  $(NETX_DIR)/net/sourceforge/jnlp/runtime
616	cp -a build.properties $(NETX_DIR)/net/sourceforge/jnlp/
617	mkdir -p stamps
618	touch $@
619
620stamps/netx-dist.stamp: stamps/netx.stamp $(abs_top_builddir)/netx.manifest stamps/generate-docs.stamp $(abs_top_builddir)/metadata
621	(cd $(NETX_DIR) ; \
622	 mkdir -p lib ; \
623	 $(SYSTEM_JDK_DIR)/bin/jar cfm lib/classes.jar \
624	  $(abs_top_builddir)/netx.manifest javax/jnlp net sun; \
625	 cp -pPR $(SRC_DIR_LINK) $(NETX_SRCDIR) src; \
626	 find src -type f -exec chmod 640 '{}' ';' -o -type d -exec chmod 750 '{}' ';'; \
627	 cd src ; \
628	 $(ZIP) -qr $(NETX_DIR)/lib/src.zip javax net sun)
629	mkdir -p stamps
630	touch $@
631
632clean-netx:
633	rm -rf $(NETX_DIR)
634	rm -f stamps/netx-dist.stamp
635	rm -f netx-source-files.txt
636	rm -f stamps/netx.stamp
637	rm -f stamps/netx-html-gen.stamp
638	rm -f $(NETX_RESOURCE_DIR)/{NEWS,AUTHORS,COPYING,ChangeLog}.html
639
640clean-desktop-files:
641	rm -f javaws.desktop
642	rm -f itweb-settings.desktop
643
644launcher.build/$(javaws): launcher/launchers.in
645	mkdir -p launcher.build
646	MAIN_CLASS=net.sourceforge.jnlp.runtime.Boot ;\
647	BIN_LOCATION=$(bindir)/$(javaws) ;\
648	PROGRAM_NAME=$(javaws) ;\
649	$(edit_launcher_script) < $< > $@
650
651launcher.build/$(itweb_settings): launcher/launchers.in
652	mkdir -p launcher.build
653	MAIN_CLASS=net.sourceforge.jnlp.controlpanel.CommandLine ;\
654	BIN_LOCATION=$(bindir)/$(itweb_settings) ;\
655	PROGRAM_NAME=$(itweb_settings) ;\
656	$(edit_launcher_script) < $< > $@
657
658launcher.build/$(policyeditor): launcher/launchers.in
659	mkdir -p launcher.build
660	MAIN_CLASS=net.sourceforge.jnlp.security.policyeditor.PolicyEditor ;\
661	BIN_LOCATION=$(bindir)/$(policyeditor) ;\
662	PROGRAM_NAME=$(policyeditor) ;\
663	$(edit_launcher_script) < $< > $@
664
665clean-launchers:
666	rm -f launcher.build/$(javaws)
667	rm -f launcher.build/$(itweb_settings)
668	rm -f launcher.build/$(policyeditor)
669	if [ -e launcher.build ] ; then \
670	  rmdir launcher.build ; \
671	fi
672
673javaws.desktop: javaws.desktop.in
674	sed "s#PATH_TO_JAVAWS#$(bindir)/$(javaws)#" < $(srcdir)/javaws.desktop.in > javaws.desktop
675
676itweb-settings.desktop: $(srcdir)/itweb-settings.desktop.in
677	sed "s#PATH_TO_ITWEB_SETTINGS#$(bindir)/$(itweb_settings)#" \
678	  < $(srcdir)/itweb-settings.desktop.in > itweb-settings.desktop
679
680policyeditor.desktop: $(srcdir)/policyeditor.desktop.in
681	sed 's#PATH_TO_POLICYEDITOR#$(bindir)/$(policyeditor)#' \
682	< $(srcdir)/policyeditor.desktop.in > policyeditor.desktop
683
684# documentation
685
686stamps/docs.stamp: stamps/netx-docs.stamp stamps/plugin-docs.stamp
687	touch stamps/docs.stamp
688
689clean-docs: clean-netx-docs clean-plugin-docs
690	if [ -e ${abs_top_builddir}/docs ] ; then \
691	  rmdir ${abs_top_builddir}/docs ; \
692	fi
693	rm -f stamps/docs.stamp
694
695stamps/netx-docs.stamp:
696if ENABLE_DOCS
697	$(SYSTEM_JDK_DIR)/bin/javadoc $(JAVADOC_MEM_OPTS) $(JAVADOC_OPTS) \
698	 -d ${abs_top_builddir}/docs/netx -sourcepath $(NETX_SRCDIR) \
699	 -doctitle 'IcedTea-Web: NetX API Specification' \
700	 -windowtitle 'IcedTea-Web: NetX ' \
701	 -header '<strong>IcedTea-Web<br/>NetX</strong>' \
702	 $(call composeclasspath, $(TAGSOUP_JAR) $(RHINO_JAR)) \
703	 $(NETX_PKGS)
704endif
705	mkdir -p stamps
706	touch stamps/netx-docs.stamp
707
708clean-netx-docs:
709	rm -rf ${abs_top_builddir}/docs/netx
710	rm -f stamps/netx-docs.stamp
711
712stamps/plugin-docs.stamp:
713if ENABLE_DOCS
714if ENABLE_PLUGIN
715	$(SYSTEM_JDK_DIR)/bin/javadoc $(JAVADOC_MEM_OPTS) $(JAVADOC_OPTS) \
716	 -d ${abs_top_builddir}/docs/plugin -sourcepath $(NETX_SRCDIR):$(LIVECONNECT_SRCS) \
717	 -doctitle 'IcedTea-Web: Plugin API Specification' \
718	 -windowtitle 'IcedTea-Web: Plugin ' \
719	 -header '<strong>IcedTea-Web<br/>Plugin</strong>' \
720	 $(call composeclasspath, $(TAGSOUP_JAR) $(RHINO_JAR)) \
721	 $(PLUGIN_PKGS)
722endif
723endif
724	mkdir -p stamps
725	touch stamps/plugin-docs.stamp
726
727clean-plugin-docs:
728	rm -rf ${abs_top_builddir}/docs/plugin
729	rm -f stamps/plugin-docs.stamp
730
731clean-generated-docs:
732	rm -rf "$(DOCS_DIR)"
733	rm -f stamps/generate-docs.stamp
734
735
736clean-metadata:
737	rm -rf $(abs_top_builddir)/metadata
738
739# check
740# ==========================
741
742clean-tests: clean-netx-tests clean-cpp-unit-tests clean-unittest++
743	if [ -e $(CPP_UNITTEST_DIR) ] ; then \
744		rmdir $(CPP_UNITTEST_DIR) ; \
745	fi
746	if [ -e $(TESTS_DIR) ]; then \
747		rmdir $(TESTS_DIR) ; \
748	fi
749
750stamps/check-pac-functions.stamp:
751	./jrunscript $(abs_top_srcdir)/tests/netx/pac/pac-funcs-test.js \
752	  $$(readlink -f $(abs_top_srcdir)/netx/net/sourceforge/jnlp/runtime/pac-funcs.js) ; \
753	mkdir -p stamps && \
754	touch $@
755
756junit-runner-source-files.txt:
757	find $(JUNIT_RUNNER_SRCDIR) -name '*.java' | sort > $@
758
759jacoco-operator-source-files.txt:
760	find $(JACOCO_OPERATOR_SRCDIR) -name '*.java' | sort > $@
761
762$(JUNIT_RUNNER_JAR): junit-runner-source-files.txt stamps/test-extensions-compile.stamp
763	mkdir -p $(JUNIT_RUNNER_DIR) && \
764	$(SYSTEM_JDK_DIR)/bin/javac $(IT_JAVACFLAGS) \
765	  -d $(JUNIT_RUNNER_DIR) \
766	  $(call composeclasspath, $(JUNIT_RUNTIME) $(TEST_EXTENSIONS_DIR)) \
767	  @junit-runner-source-files.txt && \
768	$(SYSTEM_JDK_DIR)/bin/jar cf $@  -C $(JUNIT_RUNNER_DIR) .
769
770stamps/junit-jnlp-dist-dirs: junit-jnlp-dist-simple.txt stamps/junit-jnlp-dist-signed.stamp junit-jnlp-dist-custom.txt
771	mkdir -p $(REPRODUCERS_TESTS_SERVER_DEPLOYDIR)
772	mkdir -p $(REPRODUCERS_BUILD_DIR)
773	touch $@
774
775junit-jnlp-dist-custom.txt:
776	cd $(REPRODUCERS_TESTS_SRCDIR)/$(CUSTOM_REPRODUCERS)/ ; \
777	for x in $(COMPILE_WHITELIST_FILTER) ; do \
778	  find .  -maxdepth 1 -mindepth 1 | sed "s/.\/*//" | grep $$x > $(abs_top_builddir)/$@ || true ; \
779	done
780
781junit-jnlp-dist-simple.txt:
782	cd $(REPRODUCERS_TESTS_SRCDIR)/simple/ ; \
783	for x in $(COMPILE_WHITELIST_FILTER) ; do \
784	  find .  -maxdepth 1 -mindepth 1 | sed "s/.\/*//" | grep $$x > $(abs_top_builddir)/$@ || true ; \
785	done
786
787stamps/junit-jnlp-dist-signed.stamp:
788	types=($(SIGNED_REPRODUCERS)) ; \
789	for which in "$${types[@]}" ; do \
790	  pushd $(REPRODUCERS_TESTS_SRCDIR)/$$which/ ; \
791	    for x in $(COMPILE_WHITELIST_FILTER) ; do \
792	      find .  -maxdepth 1 -mindepth 1 | sed "s/.\/*//" | grep $$x > $(abs_top_builddir)/junit-jnlp-dist-$$which.txt ; \
793	    done ; \
794	  popd ; \
795	done ; \
796	mkdir -p stamps && \
797	touch $@
798
799stamps/netx-dist-tests-prepare-reproducers.stamp: stamps/junit-jnlp-dist-dirs stamps/liveconnect-dist.stamp stamps/netx-dist.stamp stamps/plugin.stamp
800	types=($(ALL_NONCUSTOM_REPRODUCERS)); \
801	for which in "$${types[@]}" ; do \
802	  . $(abs_top_srcdir)/NEW_LINE_IFS ; \
803	  simpleReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-$$which.txt `); \
804	  IFS="$$IFS_BACKUP" ; \
805	  for dir in "$${simpleReproducers[@]}" ; do \
806	    echo "processing: $$dir" ; \
807	    mkdir -p "$(REPRODUCERS_BUILD_DIR)/$$dir" ; \
808	    if [ -e "$(REPRODUCERS_TESTS_SRCDIR)/$$which/$$dir/srcs/" ]; then \
809	      d=`pwd` ; \
810	      cd "$(REPRODUCERS_TESTS_SRCDIR)/$$which/$$dir/srcs/" ; \
811	      srcFiles=`find . -mindepth 1 -type f -name "*.java" | sed "s/.\/*//"` ; \
812	      notSrcFiles=`find . -mindepth 1 -type f \! -name "*.java" | sed "s/.\/*//"` ; \
813	      $(SYSTEM_JDK_DIR)/bin/javac -cp $(NETX_DIR)/lib/classes.jar:$(abs_top_builddir)/liveconnect -d "$(REPRODUCERS_BUILD_DIR)/$$dir/" $$srcFiles ; \
814	      if [ -n "$$notSrcFiles" ] ; then \
815	        cp -R --parents $$notSrcFiles "$(REPRODUCERS_BUILD_DIR)/$$dir/" ; \
816	      fi ; \
817	      cd "$(REPRODUCERS_BUILD_DIR)/$$dir/" ; \
818	      if [ -f $(META_MANIFEST) ]; \
819	      then \
820	        $(SYSTEM_JDK_DIR)/bin/jar cfm "$(REPRODUCERS_TESTS_SERVER_DEPLOYDIR)/$$dir.jar" $(META_MANIFEST) * ; \
821	      else \
822	        $(SYSTEM_JDK_DIR)/bin/jar cf "$(REPRODUCERS_TESTS_SERVER_DEPLOYDIR)/$$dir.jar" * ; \
823	      fi; \
824	      AN="Application-Name:" ; \
825	      grep $$AN $(META_MANIFEST) 2>/dev/null >/dev/null ; \
826	      GREP_R=$$?; \
827	      if [ ! -f $(META_MANIFEST) -o  $$GREP_R -ne 0  ]; \
828	      then \
829	       TMP_MANIFEST=`mktemp` ; \
830	       echo "$$AN $$dir" > $$TMP_MANIFEST ; \
831	       $(SYSTEM_JDK_DIR)/bin/jar ufm "$(REPRODUCERS_TESTS_SERVER_DEPLOYDIR)/$$dir.jar"  $$TMP_MANIFEST ; \
832	       rm -f $$TMP_MANIFEST ; \
833	      fi ; \
834	      cd "$$d" ; \
835	    fi; \
836	  done ; \
837	done ; \
838	mkdir -p stamps && \
839	touch $@
840
841stamps/netx-dist-tests-sign-some-reproducers.stamp: stamps/netx-dist-tests-prepare-reproducers.stamp
842	keystore=$(abs_top_builddir)/$(PRIVATE_KEYSTORE_NAME); \
843	types=($(SIGNED_REPRODUCERS)) ; \
844	for which in "$${types[@]}" ; do \
845	  tcaw=$(TEST_CERT_ALIAS)_$$which ; \
846	  $(SYSTEM_JRE_DIR)/bin/keytool -genkey -alias $$tcaw -keystore $$keystore -keypass $(PRIVATE_KEYSTORE_PASS) -storepass $(PRIVATE_KEYSTORE_PASS) -dname "cn=$$tcaw, ou=$$tcaw, o=$$tcaw, c=$$tcaw" ; \
847	    . $(abs_top_srcdir)/NEW_LINE_IFS ; \
848	  signedReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-$$which.txt `); \
849	    IFS="$$IFS_BACKUP" ; \
850	  for dir in "$${signedReproducers[@]}" ; do \
851	   $(SYSTEM_JDK_DIR)/bin/jarsigner -keystore $$keystore -storepass $(PRIVATE_KEYSTORE_PASS) -keypass $(PRIVATE_KEYSTORE_PASS)  "$(REPRODUCERS_TESTS_SERVER_DEPLOYDIR)/$$dir.jar"  $$tcaw ; \
852	  done ; \
853	done ; \
854	mkdir -p stamps && \
855	touch $@
856
857stamps/change-dots-to-paths.stamp: stamps/netx-dist-tests-sign-some-reproducers.stamp
858	pushd  $(REPRODUCERS_TESTS_SERVER_DEPLOYDIR); \
859	types=($(ALL_NONCUSTOM_REPRODUCERS)); \
860	for which in "$${types[@]}" ; do \
861	  . $(abs_top_srcdir)/NEW_LINE_IFS ; \
862	  simpleReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-$$which.txt `); \
863	  IFS="$$IFS_BACKUP" ; \
864	  for dir in "$${simpleReproducers[@]}" ; do \
865	    if test "$${dir:0:1}" = "." ; then \
866	      echo "reproducer $$dir starts with dot. It is forbidden" ; \
867	      exit 5; \
868	    fi; \
869	    if test "$${dir:(-1)}" = "." ; then \
870	      echo "reproducer $$dir ends with dot. It is forbidden" ; \
871	      exit 5; \
872	    fi; \
873	    q=`expr index "$$dir" .`; \
874	    r=$$? ; \
875	    if [ $$r = 0  ]; then \
876	      slashed_dir="./$${dir//.//}" ; \
877	      path="`dirname $$slashed_dir`" ; \
878	      file="`basename $$slashed_dir`.jar" ; \
879	      echo "copying $$dir.jar to $$path as $$file" ; \
880	      mkdir --parents $$path ; \
881	      cp $$dir".jar" "$$path"/"$$file" ; \
882	    fi ; \
883	  done ; \
884	done ; \
885	popd ; \
886	mkdir -p stamps && \
887	touch $@
888
889#this always tries to remove  previous testcert
890#the code is copypasted from netx-dist-tests-remove-cert-from-public, because
891#with depending to not stamped target we always have to rerun reproducers targets
892stamps/exported-test-certs.stamp: stamps/change-dots-to-paths.stamp
893	-types=($(SIGNED_REPRODUCERS)) ; \
894	PUBLIC_KEYSTORE=$$XDG_CONFIG_HOME ; \
895	if test "x$$PUBLIC_KEYSTORE" = x; then \
896	  PUBLIC_KEYSTORE=${HOME}/.config ; \
897	fi ;\
898	PUBLIC_KEYSTORE=$$PUBLIC_KEYSTORE/$(PUBLIC_KEYSTORE_STUB); \
899	keystoredir=`dirname $(PUBLIC_KEYSTORE)`; \
900	[ ! -d $(keystoredir) ] && mkdir -p $(keystoredir); \
901	for which in "$${types[@]}" ; do \
902	  $(SYSTEM_JDK_DIR)/bin/keytool -delete -alias $(TEST_CERT_ALIAS)_$$which -keystore $$PUBLIC_KEYSTORE -storepass $(PUBLIC_KEYSTORE_PASS) ; \
903	done ;
904	types=($(SIGNED_REPRODUCERS)) ; \
905	for which in "$${types[@]}" ; do \
906	  $(SYSTEM_JDK_DIR)/bin/keytool -export -alias $(TEST_CERT_ALIAS)_$$which -file $(EXPORTED_TEST_CERT_PREFIX)_$$which.$(EXPORTED_TEST_CERT_SUFFIX) -storepass $(PRIVATE_KEYSTORE_PASS) -keystore $(PRIVATE_KEYSTORE_NAME) ; \
907	done ;
908	mkdir -p stamps && \
909	touch $@
910
911stamps/netx-dist-tests-import-cert-to-public: stamps/exported-test-certs.stamp
912	types=($(SIGNED_REPRODUCERS)) ; \
913	PUBLIC_KEYSTORE=$$XDG_CONFIG_HOME ; \
914	if test "x$$PUBLIC_KEYSTORE" = x; then \
915	  PUBLIC_KEYSTORE=${HOME}/.config ; \
916	fi ;\
917	PUBLIC_KEYSTORE=$$PUBLIC_KEYSTORE/$(PUBLIC_KEYSTORE_STUB); \
918	keystoredir=`dirname $(PUBLIC_KEYSTORE)`; \
919	[ ! -d $(keystoredir) ] && mkdir -p $(keystoredir); \
920	for which in "$${types[@]}" ; do \
921	  yes | $(SYSTEM_JDK_DIR)/bin/keytool -import -alias $(TEST_CERT_ALIAS)_$$which -keystore $$PUBLIC_KEYSTORE -storepass $(PUBLIC_KEYSTORE_PASS) -file $(EXPORTED_TEST_CERT_PREFIX)_$$which.$(EXPORTED_TEST_CERT_SUFFIX) ;\
922	done ;
923	mkdir -p stamps && \
924	touch $@
925
926netx-dist-tests-remove-cert-from-public:
927	-types=($(SIGNED_REPRODUCERS)) ; \
928	PUBLIC_KEYSTORE=$$XDG_CONFIG_HOME ; \
929	if test "x$$PUBLIC_KEYSTORE" = x; then \
930	  PUBLIC_KEYSTORE=${HOME}/.config ; \
931	fi ;\
932	PUBLIC_KEYSTORE=$$PUBLIC_KEYSTORE/$(PUBLIC_KEYSTORE_STUB); \
933	keystoredir=`dirname $(PUBLIC_KEYSTORE)`; \
934	[ ! -d $(keystoredir) ] && mkdir -p $(keystoredir); \
935	for which in "$${types[@]}" ; do \
936	  $(SYSTEM_JDK_DIR)/bin/keytool -delete -alias $(TEST_CERT_ALIAS)_$$which -keystore $$PUBLIC_KEYSTORE -storepass $(PUBLIC_KEYSTORE_PASS) ; \
937	done ;
938	-rm -rf stamps/netx-dist-tests-import-cert-to-public
939
940test-extensions-source-files.txt:
941	find $(TEST_EXTENSIONS_SRCDIR) -name '*.java' | sort > $@
942
943stamps/test-extensions-compile.stamp: stamps/netx-dist.stamp stamps/plugin.stamp stamps/junit-jnlp-dist-dirs test-extensions-source-files.txt
944	mkdir -p $(TEST_EXTENSIONS_DIR);
945	mkdir -p $(NETX_TEST_DIR);
946	ln -s $(TEST_EXTENSIONS_DIR) $(TEST_EXTENSIONS_COMPATIBILITY_SYMLINK);
947	$(SYSTEM_JDK_DIR)/bin/javac $(IT_JAVACFLAGS) \
948	 -d $(TEST_EXTENSIONS_DIR) \
949	 $(call composeclasspath, $(JUNIT_RUNTIME) $(NETX_DIR)/lib/classes.jar $(abs_top_builddir)/liveconnect/lib/classes.jar) \
950	 @test-extensions-source-files.txt && \
951	mkdir -p stamps && \
952	touch $@
953
954test-extensions-tests-source-files.txt:
955	for x in $(COMPILE_WHITELIST_FILTER) ; do \
956	  find $(TEST_EXTENSIONS_TESTS_SRCDIR) -name '*.java' | grep $$x | sort > $@ ; \
957	done
958
959stamps/test-extensions-tests-compile.stamp: stamps/junit-jnlp-dist-dirs test-extensions-tests-source-files.txt  stamps/test-extensions-compile.stamp
960	mkdir -p $(TEST_EXTENSIONS_TESTS_DIR);
961	for x in `cat $(abs_top_builddir)/test-extensions-tests-source-files.txt` ; do \
962	  $(SYSTEM_JDK_DIR)/bin/javac $(IT_JAVACFLAGS) \
963	   -d $(TEST_EXTENSIONS_TESTS_DIR) \
964	   $(call composeclasspath, $(JUNIT_RUNTIME) $(NETX_DIR)/lib/classes.jar $(TEST_EXTENSIONS_DIR)) \
965	   $$x ; \
966	done ; \
967	mkdir -p stamps && \
968	touch $@
969
970stamps/compile-reproducers-testcases.stamp: stamps/netx-dist.stamp stamps/plugin.stamp stamps/junit-jnlp-dist-dirs \
971 test-extensions-source-files.txt stamps/test-extensions-compile.stamp stamps/test-extensions-tests-compile.stamp
972	types=($(ALL_REPRODUCERS)); \
973	for which in "$${types[@]}" ; do \
974	  . $(abs_top_srcdir)/NEW_LINE_IFS ; \
975	  simpleReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-$$which.txt `); \
976	  IFS="$$IFS_BACKUP" ; \
977	  for dir in "$${simpleReproducers[@]}" ; do \
978	    echo "compiling" $$dir ; \
979	    $(SYSTEM_JDK_DIR)/bin/javac $(IT_JAVACFLAGS) \
980	      -d $(TEST_EXTENSIONS_TESTS_DIR) \
981	      $(call composeclasspath, $(JUNIT_RUNTIME) $(NETX_DIR)/lib/classes.jar $(TEST_EXTENSIONS_DIR)) \
982	    "$(REPRODUCERS_TESTS_SRCDIR)/$$which/$$dir/testcases/"*.java ; \
983	    if [ -d "$(REPRODUCERS_TESTS_SRCDIR)/$$which/$$dir/testcases" ]; then \
984	        pushd "$(REPRODUCERS_TESTS_SRCDIR)/$$which/$$dir/testcases" ; \
985	        NONJAVA_RESOURCES=`ls | grep -v ".*\\.java$$"` ; \
986	        if [ -n "$$NONJAVA_RESOURCES" ]; then \
987	            cp $$NONJAVA_RESOURCES $(TEST_EXTENSIONS_TESTS_DIR)/ ; \
988	        fi ; \
989	        popd ; \
990	    fi ; \
991	  done ; \
992	done ; \
993	mkdir -p stamps && \
994	touch $@
995
996stamps/copy-reproducers-resources.stamp: stamps/junit-jnlp-dist-dirs
997	types=($(ALL_REPRODUCERS)); \
998	for which in "$${types[@]}" ; do \
999	  . $(abs_top_srcdir)/NEW_LINE_IFS ; \
1000	  simpleReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-$$which.txt `); \
1001	  IFS="$$IFS_BACKUP" ; \
1002	  for dir in "$${simpleReproducers[@]}" ; do \
1003	    cp -R "$(REPRODUCERS_TESTS_SRCDIR)/$$which/$$dir/resources/"*  $(REPRODUCERS_TESTS_SERVER_DEPLOYDIR)/ ; \
1004	  done ; \
1005	done ; \
1006	mkdir -p stamps && \
1007	touch $@
1008
1009$(REPRODUCERS_CLASS_NAMES):
1010	whiteListed=$(RUN_WHITELIST_FILTER); \
1011	cd $(TEST_EXTENSIONS_TESTS_DIR) ; \
1012	class_names= ; \
1013	for test in `find -type f` ; do \
1014	  class_name=`echo $$test | sed -e 's|\.class$$||' -e 's|^\./||'` ; \
1015	  class_name=`echo $$class_name | sed -e 's|/|.|g' ` ; \
1016	  INCLUDE="NO" ; \
1017	  for x in $$whiteListed ; do \
1018	    q=`expr match "$$class_name" "$$x"`; \
1019	    r=$$? ; \
1020	    if [ $$r = 0  ]; then \
1021	      echo "$$class_name will be included in reproducers testcases because of $$x pattern in $(REPRODUCERS_CLASS_WHITELIST). Matching was  $$q"; \
1022	      INCLUDE="YES" ; \
1023	    fi; \
1024	  done; \
1025	  if [ "$$INCLUDE" = "YES" ]; then \
1026	    class_names="$$class_names $$class_name" ; \
1027	  else \
1028	    echo "$$class_name had no match in $(REPRODUCERS_CLASS_WHITELIST). Excluding"; \
1029	  fi; \
1030	done ; \
1031	echo $$class_names > $(REPRODUCERS_CLASS_NAMES)
1032
1033stamps/run-netx-dist-tests.stamp: stamps/netx-dist.stamp stamps/plugin.stamp launcher.build/$(javaws) \
1034 javaws.desktop stamps/docs.stamp launcher.build/$(itweb_settings) itweb-settings.desktop launcher.build/$(policyeditor) policyeditor.desktop \
1035 stamps/netx.stamp stamps/junit-jnlp-dist-dirs stamps/netx-dist-tests-import-cert-to-public \
1036 stamps/test-extensions-compile.stamp stamps/compile-reproducers-testcases.stamp $(JUNIT_RUNNER_JAR) stamps/copy-reproducers-resources.stamp\
1037 $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME) $(REPRODUCERS_CLASS_NAMES) stamps/process-custom-reproducers.stamp
1038	cd $(TEST_EXTENSIONS_DIR) ; \
1039	class_names=`cat $(REPRODUCERS_CLASS_NAMES)` ; \
1040	CLASSPATH=$(call joinsegments, $(NETX_DIR)/lib/classes.jar $(JUNIT_RUNTIME) $(JUNIT_RUNNER_JAR) . $(TEST_EXTENSIONS_TESTS_DIR) $(TEST_EXTENSIONS_SRCDIR)) ; \
1041	  $(SYSTEM_JRE_DIR)/bin/java $(REPRODUCERS_DPARAMETERS) \
1042	 -Xbootclasspath/a:$$CLASSPATH CommandLine $$class_names
1043if WITH_XSLTPROC
1044	-$(XSLTPROC)  --stringparam logs logs_reproducers.html $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/jreport.xsl $(TEST_EXTENSIONS_DIR)/tests-output.xml > $(TESTS_DIR)/index_reproducers.html
1045	-$(XSLTPROC)  $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/logs.xsl $(TEST_EXTENSIONS_DIR)/ServerAccess-logs.xml > $(TESTS_DIR)/logs_reproducers.html
1046	-$(XSLTPROC)  $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/textreport.xsl $(TEST_EXTENSIONS_DIR)/tests-output.xml > $(TESTS_DIR)/summary_reproducers.txt
1047endif
1048	touch $@
1049
1050stamps/process-custom-reproducers.stamp: stamps/junit-jnlp-dist-dirs stamps/netx-dist-tests-import-cert-to-public \
1051 stamps/test-extensions-compile.stamp stamps/compile-reproducers-testcases.stamp $(JUNIT_RUNNER_JAR) stamps/copy-reproducers-resources.stamp\
1052 $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME) $(REPRODUCERS_CLASS_NAMES)
1053	. $(abs_top_srcdir)/NEW_LINE_IFS ; \
1054	customReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-custom.txt `); \
1055	IFS="$$IFS_BACKUP" ; \
1056	for dir in "$${customReproducers[@]}" ; do \
1057	  pushd $(REPRODUCERS_TESTS_SRCDIR)/$(CUSTOM_REPRODUCERS)/$$dir/srcs; \
1058	  $(MAKE) prepare-reproducer ; \
1059	  popd ; \
1060	done ; \
1061	mkdir -p stamps && \
1062	touch $@
1063
1064clean-custom-reproducers: junit-jnlp-dist-custom.txt
1065	. $(abs_top_srcdir)/NEW_LINE_IFS ; \
1066	customReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-custom.txt `); \
1067	IFS="$$IFS_BACKUP" ; \
1068	for dir in "$${customReproducers[@]}" ; do \
1069	  pushd $(REPRODUCERS_TESTS_SRCDIR)/custom/$$dir/srcs; \
1070	  $(MAKE) clean-reproducer ; \
1071	  popd ; \
1072	done ; \
1073	rm -f stamps/process-custom-reproducers.stamp
1074
1075#for global-links you must be root, for opera there do not exists user-links
1076#although this targets will indeed create symbolic links to enable
1077#icedtea-web plugin inside browser it is intended for testing purposes
1078if ENABLE_PLUGIN
1079stamps/user-links.stamp: stamps/netx-dist.stamp stamps/plugin.stamp \
1080 launcher.build/$(javaws) stamps/netx.stamp $(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY)
1081	if [ $(MOZILLA_FAMILY_TEST) ]  ; then  \
1082	  if [ -e $(MOZILLA_LOCAL_PLUGINDIR)/$(PLUGIN_LINK_NAME) ] ; then \
1083	    mv -f $(MOZILLA_LOCAL_PLUGINDIR)/$(PLUGIN_LINK_NAME)  $(MOZILLA_LOCAL_BACKUP_FILE) ; \
1084	    echo "$(MOZILLA_LOCAL_PLUGINDIR)/$(PLUGIN_LINK_NAME) backed up as $(MOZILLA_LOCAL_BACKUP_FILE)" ; \
1085	  else \
1086	    echo "$(MOZILLA_LOCAL_PLUGINDIR)/$(PLUGIN_LINK_NAME) doesn't exists, nothing to be backed up to $(MOZILLA_LOCAL_BACKUP_FILE)" ; \
1087	  fi ; \
1088	  pushd $(MOZILLA_LOCAL_PLUGINDIR) ; \
1089	  ln -s $(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY) $(PLUGIN_LINK_NAME) ; \
1090	  echo "$(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY) linked as  $$PWD/$(PLUGIN_LINK_NAME)" ; \
1091	  popd ; \
1092	fi ; \
1093	touch $@
1094
1095restore-user-links:
1096	if [ $(MOZILLA_FAMILY_TEST) ]  ; then  \
1097	  if [ -e $(MOZILLA_LOCAL_BACKUP_FILE) ] ; then \
1098	    mv -f  $(MOZILLA_LOCAL_BACKUP_FILE)  $(MOZILLA_LOCAL_PLUGINDIR)/$(PLUGIN_LINK_NAME) ; \
1099	    echo "$(MOZILLA_LOCAL_BACKUP_FILE) restored as $(MOZILLA_LOCAL_PLUGINDIR)/$(PLUGIN_LINK_NAME)" ; \
1100	  else \
1101	    rm -f $(MOZILLA_LOCAL_PLUGINDIR)/$(PLUGIN_LINK_NAME) ; \
1102	    echo "$(MOZILLA_LOCAL_BACKUP_FILE) do not exists, nothing to be restored. $(MOZILLA_LOCAL_PLUGINDIR)/$(PLUGIN_LINK_NAME) removed" ; \
1103	  fi ; \
1104	fi ;
1105	if [ -e stamps/user-links.stamp ] ; then \
1106	  rm -f stamps/user-links.stamp ; \
1107	fi
1108
1109stamps/global-links.stamp: stamps/netx-dist.stamp stamps/plugin.stamp launcher.build/$(javaws) \
1110 stamps/netx.stamp $(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY)
1111	if [ $(MOZILLA_FAMILY_TEST) ]  ; then  \
1112	    dir="$(MOZILLA_GLOBAL32_PLUGINDIR)"  ; \
1113	    arch=`arch`  ; \
1114	    if [ "$$arch" = "x86_64" ]  ; then \
1115	      dir="$(MOZILLA_GLOBAL64_PLUGINDIR)"  ; \
1116	    fi ; \
1117	    if [ -e "$$dir"/$(PLUGIN_LINK_NAME) ] ; then \
1118	      mv -f "$$dir"/$(PLUGIN_LINK_NAME)  $(MOZILLA_GLOBAL_BACKUP_FILE) ; \
1119	      echo "$$dir/$(PLUGIN_LINK_NAME) backed up as  $(MOZILLA_GLOBAL_BACKUP_FILE)" ; \
1120	    else \
1121	      echo "$$dir/$(PLUGIN_LINK_NAME) do not exists, nothing to be backed up to $(MOZILLA_GLOBAL_BACKUP_FILE)" ; \
1122	    fi ; \
1123	    pushd "$$dir"  ; \
1124	    ln -s $(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY) $(PLUGIN_LINK_NAME)  ; \
1125	    echo "$(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY) linked as  $$PWD/$(PLUGIN_LINK_NAME)" ; \
1126	    popd  ; \
1127	fi ;
1128	if [ "$(OPERA)" != "" ]  ; then \
1129	    dir="$(OPERA_GLOBAL32_PLUGINDIR)"  ; \
1130	    arch=`arch`  ; \
1131	    if [ "$$arch" = "x86_64" ] ; then \
1132	      dir="$(OPERA_GLOBAL64_PLUGINDIR)" ; \
1133	    fi ; \
1134	    if [ -e "$$dir"/$(PLUGIN_LINK_NAME) ] ; then \
1135	      mv -f "$$dir"/$(PLUGIN_LINK_NAME)  $(OPERA_GLOBAL_BACKUP_FILE) ; \
1136	      echo "$$dir/$(PLUGIN_LINK_NAME) backed up as  $(OPERA_GLOBAL_BACKUP_FILE) "; \
1137	    else \
1138	      echo "$$dir/$(PLUGIN_LINK_NAME) do not exists, nothing to be backed up to $(OPERA_GLOBAL_BACKUP_FILE) "; \
1139	    fi ; \
1140	    pushd "$$dir"  ; \
1141	    ln -s $(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY) $(PLUGIN_LINK_NAME)  ; \
1142	    echo "$(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY) linked as  $$PWD/$(PLUGIN_LINK_NAME)" ; \
1143	    popd  ; \
1144	fi   ; \
1145	touch $@
1146
1147restore-global-links:
1148	if [ $(MOZILLA_FAMILY_TEST) ]  ; then  \
1149	    dir="$(MOZILLA_GLOBAL32_PLUGINDIR)"  ; \
1150	    arch=`arch`  ; \
1151	    if [ "$$arch" = "x86_64" ]  ; then \
1152	      dir="$(MOZILLA_GLOBAL64_PLUGINDIR)"  ; \
1153	    fi ; \
1154	    if [ -e $(MOZILLA_GLOBAL_BACKUP_FILE) ] ; then \
1155	      mv -f $(MOZILLA_GLOBAL_BACKUP_FILE) "$$dir"/$(PLUGIN_LINK_NAME) ; \
1156	      echo "$(MOZILLA_GLOBAL_BACKUP_FILE) restored as $$dir/$(PLUGIN_LINK_NAME)" ; \
1157	    else \
1158	      rm -f "$$dir"/$(PLUGIN_LINK_NAME) ; \
1159	      echo "$(MOZILLA_GLOBAL_BACKUP_FILE) do not exists, nothing to be restored. $$dir/$(PLUGIN_LINK_NAME) removed" ; \
1160	    fi ; \
1161	fi ;
1162	if [ "$(OPERA)" != "" ]  ; then \
1163	    dir="$(OPERA_GLOBAL32_PLUGINDIR)"  ; \
1164	    arch=`arch`  ; \
1165	    if [ "$$arch" = "x86_64" ] ; then \
1166	      dir="$(OPERA_GLOBAL64_PLUGINDIR)" ; \
1167	    fi ; \
1168	    if [ -e $(OPERA_GLOBAL_BACKUP_FILE) ] ; then \
1169	      mv -f $(OPERA_GLOBAL_BACKUP_FILE) "$$dir"/$(PLUGIN_LINK_NAME) ; \
1170	      echo "$(OPERA_GLOBAL_BACKUP_FILE)  restored as $$dir/$(PLUGIN_LINK_NAME)" ; \
1171	    else \
1172	      rm -f "$$dir"/$(PLUGIN_LINK_NAME) ; \
1173	      echo "$(OPERA_GLOBAL_BACKUP_FILE) do not exist, nothing to be restored. $$dir/$(PLUGIN_LINK_NAME) removed" ; \
1174	    fi ; \
1175	fi   ;
1176	if [ -e stamps/global-links.stamp ] ; then \
1177	  rm -f stamps/global-links.stamp ; \
1178	fi
1179endif
1180
1181netx-unit-tests-source-files.txt:
1182	find $(NETX_UNIT_TEST_SRCDIR) -name '*.java' | sort > $@
1183
1184stamps/netx-unit-tests-compile.stamp: stamps/netx.stamp \
1185 netx-unit-tests-source-files.txt stamps/test-extensions-compile.stamp
1186	mkdir -p $(NETX_UNIT_TEST_DIR) && \
1187	$(SYSTEM_JDK_DIR)/bin/javac $(IT_JAVACFLAGS) \
1188	 -d $(NETX_UNIT_TEST_DIR) \
1189	 $(call composeclasspath, $(JUNIT_RUNTIME) $(abs_top_builddir)/liveconnect/lib/classes.jar $(NETX_DIR)/lib/classes.jar $(TEST_EXTENSIONS_DIR) $(TAGSOUP_JAR)) \
1190	 @netx-unit-tests-source-files.txt && \
1191	mkdir -p stamps && \
1192	touch $@
1193
1194$(TESTS_DIR)/$(REPORT_STYLES_DIRNAME):
1195	mkdir $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)
1196	cp $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/*.css $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)/
1197	cp $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/*.js $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)/
1198
1199$(UNIT_CLASS_NAMES):
1200	cd $(NETX_UNIT_TEST_DIR) ; \
1201	class_names= ; \
1202	for test in `find -type f` ; do \
1203	  class_name=`echo $$test | sed -e 's|\.class$$||' -e 's|^\./||'` ; \
1204	  class_name=`echo $$class_name | sed -e 's|/|.|g' ` ; \
1205	  class_names="$$class_names $$class_name" ; \
1206	done ; \
1207	echo $$class_names > $(UNIT_CLASS_NAMES);
1208
1209stamps/run-netx-unit-tests.stamp: stamps/netx-unit-tests-compile.stamp $(JUNIT_RUNNER_JAR)  \
1210 $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)  $(UNIT_CLASS_NAMES)
1211	filename=" " ; \
1212	cd $(NETX_UNIT_TEST_SRCDIR) ; \
1213	for file in `find . -type f \! -iname "*.java"`; do\
1214		filename=`echo $$file `; \
1215		cp --parents $$filename $(NETX_UNIT_TEST_DIR) ; \
1216	done ; \
1217	cd $(NETX_UNIT_TEST_DIR) ; \
1218	class_names=`cat $(UNIT_CLASS_NAMES)` ; \
1219	CLASSPATH=$(call joinsegments, $(NETX_DIR)/lib/classes.jar $(abs_top_builddir)/liveconnect/lib/classes.jar $(JUNIT_RUNTIME) $(JUNIT_RUNNER_JAR) $(TEST_EXTENSIONS_DIR) . $(TEST_EXTENSIONS_SRCDIR) $(TAGSOUP_JAR)) ; \
1220	  $(SYSTEM_JRE_DIR)/bin/java -Xbootclasspath/a:$$CLASSPATH CommandLine $$class_names
1221if WITH_XSLTPROC
1222	-$(XSLTPROC) --stringparam logs logs_unit.html $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/jreport.xsl $(NETX_UNIT_TEST_DIR)/tests-output.xml > $(TESTS_DIR)/index_unit.html
1223	-$(XSLTPROC) $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/logs.xsl $(NETX_UNIT_TEST_DIR)/ServerAccess-logs.xml > $(TESTS_DIR)/logs_unit.html
1224	-$(XSLTPROC) $(TESTS_SRCDIR)/$(REPORT_STYLES_DIRNAME)/textreport.xsl $(NETX_UNIT_TEST_DIR)/tests-output.xml > $(TESTS_DIR)/summary_unit.txt
1225endif
1226	mkdir -p stamps && \
1227	touch $@
1228
1229stamps/compile-jacoco-operator.stamp: jacoco-operator-source-files.txt
1230if WITH_JACOCO
1231	mkdir -p $(JACOCO_OPERATOR_DIR) && \
1232	$(SYSTEM_JDK_DIR)/bin/javac $(IT_JAVACFLAGS) \
1233	  -d $(JACOCO_OPERATOR_DIR) \
1234	  $(call composeclasspath, $(JACOCO_CLASSPATH)) \
1235	  @jacoco-operator-source-files.txt ;
1236else
1237	echo "Sorry, jacoco coverage report generator  cant be compiled without jacoco installed. Try installing jacoco or specify with-jacoco value" ;
1238	exit 5
1239endif
1240	touch $@
1241
1242
1243#warning,  during this target tests.build/netx/unit/tests-output.xml is backup and rewriten (but not coresponding html file)
1244#xml results run with jacoco agent however, can be wrong, co the new tests-output.xml is then renamed and orginal one restored
1245stamps/run-unit-test-code-coverage-jacoco.stamp: stamps/netx-unit-tests-compile.stamp $(JUNIT_RUNNER_JAR)  \
1246 $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)  $(UNIT_CLASS_NAMES) stamps/compile-jacoco-operator.stamp
1247if WITH_JACOCO
1248	filename=" " ; \
1249	cd $(NETX_UNIT_TEST_SRCDIR) ; \
1250	for file in `find . -type f \! -iname "*.java"`; do\
1251		filename=`echo $$file `; \
1252		cp --parents $$filename $(NETX_UNIT_TEST_DIR) ; \
1253	done ; \
1254	cd $(NETX_UNIT_TEST_DIR) ; \
1255	for file in $(COVERAGE_MODIFIED_FILES) ; do \
1256	  mv $(NETX_UNIT_TEST_DIR)/$$file  $(NETX_UNIT_TEST_DIR)/"$$file""$(EMMA_BACKUP_SUFFIX)" ; \
1257	done ;\
1258	class_names=`cat $(UNIT_CLASS_NAMES)` ; \
1259	CLASSPATH=$(call joinsegments, $(NETX_DIR)/lib/classes.jar $(abs_top_builddir)/liveconnect/lib/classes.jar $(JUNIT_RUNTIME) $(JUNIT_RUNNER_JAR) $(TEST_EXTENSIONS_DIR) $(JACOCO_CLASSPATH) . $(TEST_EXTENSIONS_SRCDIR) $(TAGSOUP_JAR)) ; \
1260	  $(SYSTEM_JRE_DIR)/bin/java $(JACOCO_AGENT_SWITCH) -Xbootclasspath/a:$$CLASSPATH CommandLine $$class_names ; \
1261	for file in $(COVERAGE_MODIFIED_FILES) ; do \
1262	  mv $(NETX_UNIT_TEST_DIR)/$$file  $(NETX_UNIT_TEST_DIR)/"$$file""$(EMMA_SUFFIX)" ; \
1263	  mv $(NETX_UNIT_TEST_DIR)/"$$file""$(EMMA_BACKUP_SUFFIX)"  $(NETX_UNIT_TEST_DIR)/$$file ; \
1264	done ; \
1265	$(JACOCO_OPERATOR_EXEC) \
1266	  report --die-soon --html-output coverage --xml-output coverage.xml --input-file jacoco.exec \
1267	  --input-srcs  $(NETX_SRCDIR) $(PLUGIN_SRCDIR)/java $(NETX_UNIT_TEST_SRCDIR) $(JUNIT_RUNNER_SRCDIR) $(TEST_EXTENSIONS_SRCDIR) \
1268	  --input-builds $(NETX_DIR)/lib/classes.jar $(abs_top_builddir)/liveconnect/lib/classes.jar $(NETX_UNIT_TEST_DIR) $(JUNIT_RUNNER_JAR)  $(TEST_EXTENSIONS_DIR) \
1269	  --title "IcedTea-Web unit-tests codecoverage" ;
1270else
1271	echo "Sorry, coverage report cant be run without jacoco installed. Try installing jacoco or specify with-jacoco value" ;
1272	exit 5
1273endif
1274	touch $@
1275
1276$(COVERABLE_PLUGIN_DIR):
1277	mkdir -p $(COVERABLE_PLUGIN_DIR);
1278
1279$(COVERABLE_PLUGIN_DIR)/%.o: $(PLUGIN_SRCDIR)/%.cc
1280	cd $(COVERABLE_PLUGIN_DIR) && \
1281	$(CXX) $(CXXFLAGS) \
1282	   $(DEFS) $(VERSION_DEFS) \
1283	  -DJDK_UPDATE_VERSION="\"$(JDK_UPDATE_VERSION)\"" \
1284	  -DPLUGIN_NAME="\"IcedTea-Web Plugin with jacoco coverage agent\"" \
1285	  -DJAVAWS_BIN="\"$(bindir)/$(javaws)\"" \
1286	  -DJAVAWS_NAME="\"$(javaws)\"" \
1287	  -DPLUGIN_VERSION="\"$(PLUGIN_VERSION)\"" \
1288	  -DPACKAGE_URL="\"$(PACKAGE_URL)\"" \
1289	  -DMOZILLA_VERSION_COLLAPSED="$(MOZILLA_VERSION_COLLAPSED)" \
1290	  -DICEDTEA_WEB_JRE="\"$(SYSTEM_JRE_DIR)\"" \
1291	  -DPLUGIN_BOOTCLASSPATH=$(PLUGIN_COVERAGE_BOOTCLASSPATH) \
1292	  -DCOVERAGE_AGENT=$(JACOCO_AGENT_PLUGIN_SWITCH) \
1293	  $(GLIB_CFLAGS) \
1294	  $(MOZILLA_CFLAGS) \
1295	  -fvisibility=hidden \
1296	  -fPIC -o $@ -c $<
1297
1298$(COVERABLE_PLUGIN_DIR)/$(BUILT_PLUGIN_LIBRARY): $(addprefix $(COVERABLE_PLUGIN_DIR)/,$(PLUGIN_OBJECTS))
1299	cd $(COVERABLE_PLUGIN_DIR) && \
1300	$(CXX) $(CXXFLAGS) \
1301	  $(PLUGIN_OBJECTS) \
1302	  $(GLIB_LIBS) \
1303	  $(MOZILLA_LIBS) \
1304	  -shared -o $@
1305
1306stamps/build-fake-plugin.stamp:  $(COVERABLE_PLUGIN_DIR)  $(addprefix $(PLUGIN_SRCDIR)/,$(PLUGIN_SRC)) $(addprefix $(COVERABLE_PLUGIN_DIR)/,$(PLUGIN_OBJECTS)) stamps/liveconnect-dist.stamp  $(COVERABLE_PLUGIN_DIR)/$(BUILT_PLUGIN_LIBRARY)
1307	touch $@
1308
1309#warning,  during this target tests.build/netx/jnlp_testsengine/tests-output.xml is backup and rewriten (but not coresponding html file)
1310#xml results run with jacoco agent, however, can be wrong, co the new tests-output.xml is then renamed and orginal one restored
1311stamps/run-reproducers-test-code-coverage-jacoco.stamp: stamps/run-netx-dist-tests.stamp $(REPRODUCERS_CLASS_NAMES) \
1312stamps/compile-jacoco-operator.stamp stamps/build-fake-plugin.stamp
1313if WITH_JACOCO
1314	cd $(TESTS_DIR) ; \
1315	for file in $(COVERAGE_MODIFIED_FILES) ; do \
1316	  mv $(TEST_EXTENSIONS_DIR)/$$file $(TEST_EXTENSIONS_DIR)/"$$file""$(EMMA_BACKUP_SUFFIX)" ; \
1317	done ;\
1318	echo "backuping javaws in $(DESTDIR)$(bindir)" ; \
1319	javaws_backup=$(DESTDIR)$(bindir)/javaws_backup ; \
1320	mv $(DESTDIR)$(bindir)/javaws $$javaws_backup ;  \
1321	echo "patching $(javaws)" ; \
1322	nw_bootclasspath="-Xbootclasspath/a:$(UNIFIED_JACOCO_CLASSPATH)" ; \
1323	cat $$javaws_backup | sed "s|COMMAND.k.=\"..JAVA.\"|COMMAND[k]=\"\\$$\\{JAVA\\}\" ;  k=1 ; COMMAND[k]=$(JACOCO_AGENT_JAVAWS_SWITCH)|" | sed "s,$(LAUNCHER_BOOTCLASSPATH),$$nw_bootclasspath," > $(DESTDIR)$(bindir)/$(javaws) ; \
1324	chmod 777 $(DESTDIR)$(bindir)/$(javaws) ; \
1325	echo "backuping plugin in $(DESTDIR)/$(libdir)$(BUILT_PLUGIN_LIBRARY)" ; \
1326	plugin_backup=$(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY)_backup ; \
1327	mv $(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY) $$plugin_backup ;  \
1328	echo "fakeing plugin" ; \
1329	cp $(COVERABLE_PLUGIN_DIR)/$(BUILT_PLUGIN_LIBRARY) $(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY) ; \
1330	testcases_srcs=( ) ; \
1331	k=0 ; \
1332	types=($(ALL_REPRODUCERS)); \
1333	for which in "$${types[@]}" ; do \
1334	  . $(abs_top_srcdir)/NEW_LINE_IFS ; \
1335	  simpleReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-$$which.txt `); \
1336	  IFS="$$IFS_BACKUP" ; \
1337	  for dir in "$${simpleReproducers[@]}" ; do \
1338	    testcases_srcs[k]="$(REPRODUCERS_TESTS_SRCDIR)/$$which/$$dir/testcases/" ; \
1339	    k=$$((k+1)) ; \
1340	    done ; \
1341	  done ; \
1342	cd $(TEST_EXTENSIONS_DIR) ; \
1343	class_names=`cat $(REPRODUCERS_CLASS_NAMES)` ; \
1344	CLASSPATH=$(call joinsegments, $(NETX_DIR)/lib/classes.jar $(JUNIT_RUNTIME) $(JUNIT_RUNNER_JAR) . $(TEST_EXTENSIONS_DIR) $(JACOCO_CLASSPATH) $(TEST_EXTENSIONS_TESTS_DIR) $(TEST_EXTENSIONS_SRCDIR)) ; \
1345	  $(SYSTEM_JRE_DIR)/bin/java $(JACOCO_AGENT_SWITCH) $(REPRODUCERS_DPARAMETERS) \
1346	 -Xbootclasspath/a:$$CLASSPATH CommandLine $$class_names ; \
1347	if [ -f $(JACOCO_JAVAWS_RESULTS) ] ; then \
1348	  jacoco_javaws_results=$(JACOCO_JAVAWS_RESULTS) ; \
1349	  $(JACOCO_OPERATOR_EXEC) \
1350	    report --die-soon --html-output coverage-javaws --xml-output coverage-javaws.xml --input-file $(JACOCO_JAVAWS_RESULTS) \
1351	    --input-srcs  $(NETX_SRCDIR) \
1352	    --input-builds $(NETX_DIR)/lib/classes.jar \
1353	    --title "IcedTea-Web javaws reproducers codecoverage" ; \
1354	fi; \
1355	if [ -f $(JACOCO_PLUGIN_RESULTS) ] ; then \
1356	  jacoco_plugin_results=$(JACOCO_PLUGIN_RESULTS) ; \
1357	  $(JACOCO_OPERATOR_EXEC) \
1358	    report --die-soon --html-output coverage-plugin --xml-output coverage-plugin.xml --input-file $(JACOCO_PLUGIN_RESULTS) \
1359	    --input-srcs  $(NETX_SRCDIR) $(PLUGIN_SRCDIR)/java \
1360	    --input-builds $(NETX_DIR)/lib/classes.jar $(abs_top_builddir)/liveconnect/lib/classes.jar \
1361	    --title "IcedTea-Web plugin reproducers codecoverage" ; \
1362	fi; \
1363	$(JACOCO_OPERATOR_EXEC) \
1364	  merge --die-soon --input-files jacoco.exec $$jacoco_javaws_results $$jacoco_plugin_results  --output-file jacoco-merged-reproducers.exec ; \
1365	$(JACOCO_OPERATOR_EXEC) \
1366	  report --html-output coverage --xml-output coverage.xml --input-file jacoco-merged-reproducers.exec \
1367	  --input-srcs  $(NETX_SRCDIR) $(PLUGIN_SRCDIR)/java  $(JUNIT_RUNNER_SRCDIR) $(TEST_EXTENSIONS_SRCDIR) $(TEST_EXTENSIONS_TESTS_SRCDIR) "$${testcases_srcs[@]}" \
1368	  --input-builds $(NETX_DIR)/lib/classes.jar $(abs_top_builddir)/liveconnect/lib/classes.jar  $(JUNIT_RUNNER_JAR)  $(TEST_EXTENSIONS_DIR) $(TEST_EXTENSIONS_TESTS_DIR) \
1369	  --title "IcedTea-Web reproducers-tests codecoverage" ; \
1370	echo "restoring javaws in $(DESTDIR)$(bindir)" ; \
1371	rm -f $(DESTDIR)$(bindir)/$(javaws);  \
1372	mv $$javaws_backup $(DESTDIR)$(bindir)/$(javaws);  \
1373	echo "restoring  plugin in $(DESTDIR)/$(libdir)$(BUILT_PLUGIN_LIBRARY)" ; \
1374	mv $$plugin_backup $(DESTDIR)$(libdir)/$(BUILT_PLUGIN_LIBRARY) ; \
1375	for file in $(COVERAGE_MODIFIED_FILES) ; do \
1376	  mv $(TEST_EXTENSIONS_DIR)/$$file  $(TEST_EXTENSIONS_DIR)/"$$file""$(EMMA_SUFFIX)" ; \
1377	  mv $(TEST_EXTENSIONS_DIR)/"$$file""$(EMMA_BACKUP_SUFFIX)"  $(TEST_EXTENSIONS_DIR)/$$file ; \
1378	done ;
1379else
1380	echo "Sorry, coverage report cant be run without jacoco installed. Try installing jacoco or specify with-jacoco value" ;
1381	exit 5
1382endif
1383	touch $@
1384
1385run-test-code-coverage-jacoco: stamps/run-unit-test-code-coverage-jacoco.stamp stamps/run-reproducers-test-code-coverage-jacoco.stamp
1386if WITH_JACOCO
1387	cd $(TESTS_DIR) ; \
1388	k=0 ; \
1389	types=($(ALL_REPRODUCERS)); \
1390	for which in "$${types[@]}" ; do \
1391	  . $(abs_top_srcdir)/NEW_LINE_IFS ; \
1392	  simpleReproducers=(`cat $(abs_top_builddir)/junit-jnlp-dist-$$which.txt `); \
1393	  IFS="$$IFS_BACKUP" ; \
1394	  for dir in "$${simpleReproducers[@]}" ; do \
1395	    testcases_srcs[k]="$(REPRODUCERS_TESTS_SRCDIR)/$$which/$$dir/testcases/" ; \
1396	    k=$$((k+1)) ; \
1397	    done ; \
1398	  done ; \
1399	class_names=`cat $(REPRODUCERS_CLASS_NAMES)` ; \
1400	$(JACOCO_OPERATOR_EXEC) \
1401	  merge --die-soon --input-files $(TEST_EXTENSIONS_DIR)/jacoco-merged-reproducers.exec $(NETX_UNIT_TEST_DIR)/jacoco.exec  --output-file  jacoco-merged.exec; \
1402	$(JACOCO_OPERATOR_EXEC) \
1403	  report --html-output coverage --xml-output coverage.xml --input-file jacoco-merged.exec \
1404	  --input-srcs  $(NETX_SRCDIR) $(PLUGIN_SRCDIR)/java  $(JUNIT_RUNNER_SRCDIR) $(TEST_EXTENSIONS_SRCDIR) $(TEST_EXTENSIONS_TESTS_SRCDIR) "$${testcases_srcs[@]}" \
1405	  --input-builds $(NETX_DIR)/lib/classes.jar $(abs_top_builddir)/liveconnect/lib/classes.jar  $(JUNIT_RUNNER_JAR)  $(TEST_EXTENSIONS_DIR) $(TEST_EXTENSIONS_TESTS_DIR) \
1406	  --input-srcs  $(NETX_UNIT_TEST_SRCDIR)  \
1407	  --input-builds $(NETX_UNIT_TEST_DIR)  \
1408	  --title "IcedTea-Web complete codecoverage" ;
1409else
1410	echo "Sorry, coverage report cant be run without jacoco installed. Try installing jacoco or specify with-jacoco value" ;
1411	exit 5
1412endif
1413
1414run-test-server-on-44321: stamps/netx.stamp stamps/junit-jnlp-dist-dirs stamps/netx-dist-tests-import-cert-to-public \
1415 stamps/test-extensions-compile.stamp stamps/compile-reproducers-testcases.stamp $(JUNIT_RUNNER_JAR) stamps/copy-reproducers-resources.stamp
1416	cd $(TEST_EXTENSIONS_DIR) ; \
1417	CLASSPATH=$(call joinsegments, $(NETX_DIR)/lib/classes.jar $(JUNIT_RUNTIME) $(JUNIT_RUNNER_JAR) . $(TEST_EXTENSIONS_TESTS_DIR)) ; \
1418	  $(SYSTEM_JRE_DIR)/bin/java $(REPRODUCERS_DPARAMETERS) \
1419	 -Xbootclasspath/a:$$CLASSPATH net.sourceforge.jnlp.ServerAccess
1420
1421run-test-server-on-random-port: stamps/netx.stamp stamps/junit-jnlp-dist-dirs stamps/netx-dist-tests-import-cert-to-public \
1422 stamps/test-extensions-compile.stamp stamps/compile-reproducers-testcases.stamp $(JUNIT_RUNNER_JAR) stamps/copy-reproducers-resources.stamp
1423	cd $(TEST_EXTENSIONS_DIR) ; \
1424	CLASSPATH=$(call joinsegments, $(NETX_DIR)/lib/classes.jar $(JUNIT_RUNTIME) $(JUNIT_RUNNER_JAR) . $(TEST_EXTENSIONS_TESTS_DIR)) ; \
1425	  $(SYSTEM_JRE_DIR)/bin/java $(REPRODUCERS_DPARAMETERS) \
1426	 -Xbootclasspath/a:$$CLASSPATH net.sourceforge.jnlp.ServerAccess randomport
1427
1428clean-netx-tests: clean-netx-unit-tests clean-junit-runner clean-netx-dist-tests clean-test-code-coverage-jacoco
1429	if [ -e $(TESTS_DIR)/netx ]; then \
1430	  rmdir $(TESTS_DIR)/netx ; \
1431	fi
1432
1433clean-junit-runner:
1434	rm -f junit-runner-source-files.txt
1435	rm -rf $(JUNIT_RUNNER_DIR)
1436	rm -f $(JUNIT_RUNNER_JAR)
1437
1438clean-netx-unit-tests: clean_tests_reports
1439	rm -f netx-unit-tests-source-files.txt
1440	rm -rf $(NETX_UNIT_TEST_DIR)
1441	rm -f $(UNIT_CLASS_NAMES)
1442	rm -f stamps/check-pac-functions.stamp
1443	rm -f stamps/run-netx-unit-tests.stamp
1444	rm -f stamps/netx-unit-tests-compile.stamp
1445
1446clean_tests_reports:
1447	rm -rf  $(TESTS_DIR)/$(REPORT_STYLES_DIRNAME)/
1448	rm -f  $(TESTS_DIR)/*.html
1449	rm -f $(TESTS_DIR)/summary_unit.txt
1450	rm -f $(TESTS_DIR)/summary_reproducers.txt
1451
1452clean-netx-dist-tests: clean_tests_reports netx-dist-tests-remove-cert-from-public clean-custom-reproducers
1453	rm -f test-extensions-source-files.txt
1454	rm -f test-extensions-tests-source-files.txt
1455	rm -f $(TEST_EXTENSIONS_COMPATIBILITY_SYMLINK)
1456	rm -rf $(TEST_EXTENSIONS_TESTS_DIR)
1457	rm -rf $(REPRODUCERS_BUILD_DIR)
1458	rm -rf $(REPRODUCERS_TESTS_SERVER_DEPLOYDIR)
1459	rm -rf $(TEST_EXTENSIONS_DIR)
1460	rm -f stamps/junit-jnlp-dist-dirs
1461	rm -f stamps/test-extensions-compile.stamp
1462	rm -f stamps/test-extensions-tests-compile.stamp
1463	rm -f stamps/netx-dist-tests-prepare-reproducers.stamp
1464	rm -f stamps/compile-reproducers-testcases.stamp
1465	rm -f stamps/copy-reproducers-resources.stamp
1466	rm -f stamps/netx-dist-tests-sign-some-reproducers.stamp
1467	rm -f stamps/change-dots-to-paths.stamp
1468	rm -f junit-jnlp-dist-simple.txt
1469	rm -f junit-jnlp-dist-custom.txt
1470	rm -f netx-dist-tests-tests-source-files.txt
1471	types=($(SIGNED_REPRODUCERS)) ; \
1472	for which in "$${types[@]}" ; do \
1473	  rm -f junit-jnlp-dist-$$which.txt ; \
1474	  rm -f $(EXPORTED_TEST_CERT_PREFIX)_$$which.$(EXPORTED_TEST_CERT_SUFFIX) ; \
1475	done ;
1476	rm -f stamps/exported-test-certs.stamp
1477	rm -f stamps/junit-jnlp-dist-signed.stamp
1478	rm -f $(REPRODUCERS_CLASS_NAMES)
1479	rm -f $(abs_top_builddir)/$(PRIVATE_KEYSTORE_NAME)
1480	rm -f stamps/run-netx-dist-tests.stamp
1481
1482clean-unit-test-code-coverage-jacoco:
1483	if [ -e stamps/run-unit-test-code-coverage-jacoco.stamp ]; then \
1484	  rm -rf $(NETX_UNIT_TEST_DIR)/coverage ; \
1485	  rm -f $(NETX_UNIT_TEST_DIR)/coverage.xml ; \
1486	  rm -f $(NETX_UNIT_TEST_DIR)/jacoco.exec ; \
1487	  rm -f $(NETX_UNIT_TEST_DIR)/tests-output_withEmma.xml ; \
1488	  rm -f stamps/run-unit-test-code-coverage-jacoco.stamp ; \
1489	fi
1490
1491clean-reproducers-test-code-coverage-jacoco:
1492	if [ -e stamps/run-reproducers-test-code-coverage-jacoco.stamp ]; then \
1493	 rm -rf $(TEST_EXTENSIONS_DIR)/coverage-javaws ; \
1494	 rm -f $(TEST_EXTENSIONS_DIR)/coverage-javaws.xml ; \
1495	 rm -f $(TEST_EXTENSIONS_DIR)/jacoco_javaws.exec ; \
1496	 rm -rf $(TEST_EXTENSIONS_DIR)/coverage-plugin ; \
1497	 rm -f $(TEST_EXTENSIONS_DIR)/coverage-plugin.xml ; \
1498	 rm -f $(TEST_EXTENSIONS_DIR)/jacoco_plugin.exec ; \
1499	 rm -rf $(TEST_EXTENSIONS_DIR)/coverage ; \
1500	 rm -f $(TEST_EXTENSIONS_DIR)/coverage.xml ; \
1501	 rm -f $(TEST_EXTENSIONS_DIR)/jacoco-merged-reproducers.exec ; \
1502	 rm -f $(TEST_EXTENSIONS_DIR)/tests-output_withEmma.xml ; \
1503	 rm -f stamps/run-reproducers-test-code-coverage-jacoco.stamp ; \
1504	fi
1505
1506clean-test-code-coverage-jacoco: clean-unit-test-code-coverage-jacoco clean-reproducers-test-code-coverage-jacoco clean-test-code-coverage-tools-jacoco
1507	if [ -e $(TESTS_DIR)/coverage.xml ]; then \
1508	  rm -rf $(TESTS_DIR)/coverage  ; \
1509	  rm -f $(TESTS_DIR)/jacoco-merged.exec; \
1510	fi
1511
1512clean-test-code-coverage-tools-jacoco:
1513	rm -rf  $(JACOCO_OPERATOR_DIR)
1514	rm -rf  $(COVERABLE_PLUGIN_DIR)
1515	rm -f stamps/compile-jacoco-operator.stamp;
1516	rm -f jacoco-operator-source-files.txt
1517	rm -f stamps/build-fake-plugin.stamp
1518
1519# plugin tests
1520
1521if ENABLE_PLUGIN
1522stamps/plugin-tests.stamp: $(PLUGIN_TEST_SRCS) stamps/plugin.stamp
1523	mkdir -p plugin/tests/LiveConnect
1524	$(SYSTEM_JDK_DIR)/bin/javac $(IT_JAVACFLAGS) \
1525	 -d plugin/tests/LiveConnect \
1526	 -classpath liveconnect/lib/classes.jar \
1527	 $(PLUGIN_TEST_SRCS) ;
1528	$(SYSTEM_JDK_DIR)/bin/jar cf plugin/tests/LiveConnect/PluginTest.jar \
1529	  plugin/tests/LiveConnect/*.class ;
1530	cp -pPR $(SRC_DIR_LINK) $(abs_top_srcdir)/plugin/tests/LiveConnect/*.{js,html} \
1531	  plugin/tests/LiveConnect ;
1532	echo "Done. Now launch \"firefox file://`pwd`/index.html\"" ;
1533	mkdir -p stamps
1534	touch stamps/plugin-tests.stamp
1535endif
1536
1537# Target Aliases
1538# ===============
1539
1540add-netx: stamps/add-netx.stamp
1541
1542add-netx-debug: stamps/add-netx-debug.stamp
1543
1544netx: stamps/netx.stamp
1545
1546netx-dist: stamps/netx-dist.stamp
1547
1548plugin: stamps/plugin.stamp
1549
1550plugin-tests: stamps/plugin-tests.stamp
1551
1552check-pac-functions: stamps/check-pac-functions.stamp
1553
1554run-netx-unit-tests: stamps/run-netx-unit-tests.stamp
1555
1556links: stamps/global-links.stamp
1557
1558user-links: stamps/user-links.stamp
1559
1560run-netx-dist-tests: stamps/run-netx-dist-tests.stamp
1561
1562run-unit-test-code-coverage-jacoco: stamps/run-unit-test-code-coverage-jacoco.stamp
1563
1564run-reproducers-test-code-coverage-jacoco: stamps/run-reproducers-test-code-coverage-jacoco.stamp
1565