# Source directories
NETX_DIR = $(abs_top_builddir)/netx.build
NETX_SRCDIR = $(abs_top_srcdir)/netx
NETX_RESOURCE_DIR=$(NETX_SRCDIR)/net/sourceforge/jnlp/resources
NETX_EXTRA_DIR=$(abs_top_srcdir)/extra/net/sourceforge/javaws/about/resources
NETX_EXTRA_DIST_DIR=$(abs_top_builddir)/extra-lib/net/sourceforge/javaws/about/resources
# Build directories
BOOT_DIR = $(abs_top_builddir)/bootstrap/jdk1.6.0
if WITH_RHINO
RHINO_RUNTIME=:$(RHINO_JAR)
else
RHINO_RUNTIME=
endif
RUNTIME = $(BOOT_DIR)/jre/lib/rt.jar:$(BOOT_DIR)/jre/lib/jsse.jar$(RHINO_RUNTIME)
# Flags
IT_CFLAGS=$(CFLAGS) $(ARCHFLAG)
IT_JAVAC_SETTINGS=-g -encoding utf-8 $(JAVACFLAGS) $(MEMORY_LIMIT) $(PREFER_SOURCE)
IT_LANGUAGE_SOURCE_VERSION=6
IT_CLASS_TARGET_VERSION=6
IT_JAVACFLAGS=$(IT_JAVAC_SETTINGS) -source $(IT_LANGUAGE_SOURCE_VERSION) -target $(IT_CLASS_TARGET_VERSION)
JRE='"$(SYSTEM_JDK_DIR)/jre"'
LAUNCHER_BOOTCLASSPATH="-Xbootclasspath/a:$(datadir)/$(PACKAGE_NAME)/netx.jar$(RHINO_RUNTIME)"
PLUGIN_BOOTCLASSPATH='"-Xbootclasspath/a:$(datadir)/$(PACKAGE_NAME)/netx.jar:$(datadir)/$(PACKAGE_NAME)/plugin.jar$(RHINO_RUNTIME)"'
# Fake update version to shut up the plugin detector hosted by Oracle.
# If Oracle ever release a JDK update greater than 50, this needs to be increased.
JDK_UPDATE_VERSION=50
# Sources list
PLUGIN_TEST_SRCS = $(abs_top_srcdir)/plugin/tests/LiveConnect/*.java
NETX_PKGS = javax.jnlp net.sourceforge.nanoxml net.sourceforge.jnlp \
net.sourceforge.jnlp.cache net.sourceforge.jnlp.config \
net.sourceforge.jnlp.controlpanel net.sourceforge.jnlp.event \
net.sourceforge.jnlp.runtime net.sourceforge.jnlp.security \
net.sourceforge.jnlp.security.viewer net.sourceforge.jnlp.services \
net.sourceforge.jnlp.tools net.sourceforge.jnlp.util
# Conditional defintions
if ENABLE_PLUGIN
ICEDTEAPLUGIN_CLEAN = clean-IcedTeaPlugin
LIVECONNECT_DIR = netscape sun/applet
PLUGIN_DIR=$(abs_top_builddir)/plugin/icedteanp
PLUGIN_SRCDIR=$(abs_top_srcdir)/plugin/icedteanp
LIVECONNECT_SRCS = $(PLUGIN_SRCDIR)/java
ICEDTEAPLUGIN_TARGET = $(PLUGIN_DIR)/IcedTeaPlugin.so stamps/liveconnect-dist.stamp
PLUGIN_PKGS = sun.applet netscape.security netscape.javascript
endif
if CP_SUPPORTS_REFLINK
REFLINK = --reflink=auto
endif
if SRC_DIR_HARDLINKABLE
SRC_DIR_LINK = -l
else
SRC_DIR_LINK = $(REFLINK)
endif
if ENABLE_DOCS
JAVADOC_OPTS=-use -keywords -encoding UTF-8 -splitIndex \
-bottom ' Submit a bug or feature'
if JAVADOC_SUPPORTS_J_OPTIONS
JAVADOC_MEM_OPTS=-J-Xmx1024m -J-Xms128m -J-XX:PermSize=32m -J-XX:MaxPermSize=160m
endif
endif
PLUGIN_VERSION = IcedTea-Web $(FULL_VERSION)
EXTRA_DIST = $(top_srcdir)/netx $(top_srcdir)/plugin javaws.png javaws.desktop.in extra launcher \
itweb-settings.desktop.in $(top_srcdir)/tests
# the launcher needs to know $(bindir) and $(datadir) which can be different at
# make-time from configure-time
edit_launcher_script = sed \
-e 's|[@]LAUNCHER_BOOTCLASSPATH[@]|$(LAUNCHER_BOOTCLASSPATH)|g' \
-e 's|[@]JAVAWS_BIN_LOCATION[@]|$(bindir)/javaws|g' \
-e 's|[@]ITWEB_SETTINGS_BIN_LOCATION[@]|$(bindir)/itweb-settings|g' \
-e 's|[@]JAVA[@]|$(JAVA)|g'
# Top-Level Targets
# =================
all-local: stamps/netx-dist.stamp extra-lib/about.jar stamps/plugin.stamp launcher.build/javaws \
javaws.desktop stamps/docs.stamp launcher.build/itweb-settings itweb-settings.desktop
check-local: check-pac-functions
clean-local: clean-netx clean-plugin clean-liveconnect clean-extra clean-bootstrap-directory \
clean-native-ecj clean-launchers clean-desktop-files clean-docs clean-tests
if [ -e stamps ] ; then \
rmdir stamps ; \
fi
.PHONY: clean-IcedTeaPlugin clean-add-netx clean-add-netx-debug clean-add-plugin clean-add-plugin-debug \
clean-bootstrap-directory clean-native-ecj clean-desktop-files clean-netx-docs clean-docs clean-plugin-docs \
clean-tests check-local clean-launchers
install-exec-local:
${mkinstalldirs} $(DESTDIR)$(bindir) $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/ $(DESTDIR)$(libdir)
if ENABLE_PLUGIN
${INSTALL_PROGRAM} $(PLUGIN_DIR)/IcedTeaPlugin.so $(DESTDIR)$(libdir)
${INSTALL_DATA} $(abs_top_builddir)/liveconnect/lib/classes.jar $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/plugin.jar
endif
${INSTALL_DATA} $(NETX_DIR)/lib/classes.jar $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/netx.jar
${INSTALL_PROGRAM} launcher.build/javaws $(DESTDIR)$(bindir)
${INSTALL_DATA} extra-lib/about.jar $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/about.jar
${INSTALL_PROGRAM} launcher.build/itweb-settings $(DESTDIR)$(bindir)
install-data-local:
${mkinstalldirs} -d $(DESTDIR)$(mandir)/man1
${INSTALL_DATA} $(NETX_SRCDIR)/javaws.1 $(DESTDIR)$(mandir)/man1
${INSTALL_DATA} $(NETX_RESOURCE_DIR)/about.jnlp $(DESTDIR)$(datarootdir)/$(PACKAGE_NAME)
if ENABLE_DOCS
${mkinstalldirs} $(DESTDIR)$(htmldir)
(cd ${abs_top_builddir}/docs/netx; \
for files in $$(find . -type f); \
do \
${INSTALL_DATA} -D $${files} $(DESTDIR)$(htmldir)/netx/$${files}; \
done)
if ENABLE_PLUGIN
(cd ${abs_top_builddir}/docs/plugin; \
for files in $$(find . -type f); \
do \
${INSTALL_DATA} -D $${files} $(DESTDIR)$(htmldir)/plugin/$${files}; \
done)
endif
endif
uninstall-local:
rm -f $(DESTDIR)$(libdir)/IcedTeaPlugin.so
rm -f $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/plugin.jar
rm -f $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/netx.jar
rm -f $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/about.jnlp
rm -f $(DESTDIR)$(datadir)/$(PACKAGE_NAME)/about.jar
rm -f $(DESTDIR)$(mandir)/man1/javaws.1
rm -f $(DESTDIR)$(bindir)/javaws
rm -f $(DESTDIR)$(bindir)/itweb-settings
rm -rf $(DESTDIR)$(htmldir)
# Plugin
if ENABLE_PLUGIN
# IcedTeaPlugin.so.
# Separate compile and link invocations to ensure intermediate object
# is listed before -l options. See:
# http://developer.mozilla.org/en/docs/XPCOM_Glue
PLUGIN_SRC=IcedTeaNPPlugin.cc IcedTeaScriptablePluginObject.cc \
IcedTeaJavaRequestProcessor.cc IcedTeaPluginRequestProcessor.cc \
IcedTeaPluginUtils.cc
PLUGIN_OBJECTS=IcedTeaNPPlugin.o IcedTeaScriptablePluginObject.o \
IcedTeaJavaRequestProcessor.o IcedTeaPluginRequestProcessor.o \
IcedTeaPluginUtils.o
$(PLUGIN_DIR)/%.o: $(PLUGIN_SRCDIR)/%.cc
mkdir -p $(PLUGIN_DIR) && \
cd $(PLUGIN_DIR) && \
$(CXX) $(CXXFLAGS) \
-DJDK_UPDATE_VERSION="\"$(JDK_UPDATE_VERSION)\"" \
-DPLUGIN_NAME="\"IcedTea-Web Plugin\"" \
-DPLUGIN_VERSION="\"$(PLUGIN_VERSION)\"" \
-DPACKAGE_URL="\"$(PACKAGE_URL)\"" \
-DMOZILLA_VERSION_COLLAPSED="$(MOZILLA_VERSION_COLLAPSED)" \
-DICEDTEA_WEB_JRE=$(JRE) \
-DPLUGIN_BOOTCLASSPATH=$(PLUGIN_BOOTCLASSPATH) \
$(GLIB_CFLAGS) \
$(GTK_CFLAGS) \
$(MOZILLA_CFLAGS) \
-fPIC -o $@ -c $<
$(PLUGIN_DIR)/IcedTeaPlugin.so: $(addprefix $(PLUGIN_DIR)/,$(PLUGIN_OBJECTS))
cd $(PLUGIN_DIR) && \
$(CXX) $(CXXFLAGS) \
$(PLUGIN_OBJECTS) \
$(GLIB_LIBS) \
$(GTK_LIBS) \
$(MOZILLA_LIBS)\
-shared -o $@
clean-IcedTeaPlugin:
rm -f $(PLUGIN_DIR)/*.o
rm -f $(PLUGIN_DIR)/IcedTeaPlugin.so
if [ $(abs_top_srcdir) != $(abs_top_builddir) ]; then \
if [ -e $(abs_top_builddir)/plugin/icedteanp ] ; then \
rmdir $(abs_top_builddir)/plugin/icedteanp ; \
rmdir $(abs_top_builddir)/plugin ; \
fi ; \
fi
endif
stamps/plugin.stamp: $(ICEDTEAPLUGIN_TARGET)
mkdir -p stamps
touch stamps/plugin.stamp
clean-plugin: $(ICEDTEAPLUGIN_CLEAN)
rm -f stamps/plugin.stamp
liveconnect-source-files.txt:
if test "x${LIVECONNECT_DIR}" != x; then \
find $(LIVECONNECT_SRCS) -name '*.java' | sort > $@ ; \
fi
touch $@
stamps/liveconnect.stamp: liveconnect-source-files.txt stamps/netx.stamp
if test "x${LIVECONNECT_DIR}" != x; then \
mkdir -p $(abs_top_builddir)/liveconnect && \
$(BOOT_DIR)/bin/javac $(IT_JAVACFLAGS) \
-d $(abs_top_builddir)/liveconnect \
-bootclasspath $(NETX_DIR):$(RUNTIME) \
-sourcepath $(LIVECONNECT_SRCS) \
@liveconnect-source-files.txt ; \
fi
mkdir -p stamps
touch $@
stamps/liveconnect-dist.stamp: stamps/liveconnect.stamp
if test "x${LIVECONNECT_DIR}" != x; then \
(cd $(abs_top_builddir)/liveconnect ; \
mkdir -p lib ; \
$(BOOT_DIR)/bin/jar cf lib/classes.jar $(LIVECONNECT_DIR) ; \
cp -pPR $(SRC_DIR_LINK) $(LIVECONNECT_SRCS) src; \
find src -type f -exec chmod 640 '{}' ';' -o -type d -exec chmod 750 '{}' ';'; \
cd src ; \
$(ZIP) -qr $(abs_top_builddir)/liveconnect/lib/src.zip $(LIVECONNECT_DIR) ) ; \
fi
mkdir -p stamps
touch $@
clean-liveconnect:
rm -rf $(abs_top_builddir)/liveconnect
rm -f stamps/liveconnect-dist.stamp
rm -f liveconnect-source-files.txt
rm -f stamps/liveconnect.stamp
# NetX
# requires availability of OpenJDK source code including
# a patch applied to sun.plugin.AppletViewerPanel and generated sources
netx-source-files.txt:
find $(NETX_SRCDIR) -name '*.java' | sort > $@
if !WITH_RHINO
sed -i '/RhinoBasedPacEvaluator/ d' $@
endif
stamps/netx.stamp: netx-source-files.txt stamps/bootstrap-directory.stamp
mkdir -p $(NETX_DIR)
$(BOOT_DIR)/bin/javac $(IT_JAVACFLAGS) \
-d $(NETX_DIR) \
-sourcepath $(NETX_SRCDIR) \
-bootclasspath $(RUNTIME) \
@netx-source-files.txt
(cd $(NETX_RESOURCE_DIR); \
for files in $$(find . -type f); \
do \
${INSTALL_DATA} -D $${files} \
$(NETX_DIR)/net/sourceforge/jnlp/resources/$${files}; \
done)
cp -a $(NETX_SRCDIR)/net/sourceforge/jnlp/runtime/pac-funcs.js \
$(NETX_DIR)/net/sourceforge/jnlp/runtime
cp -a build.properties $(NETX_DIR)/net/sourceforge/jnlp/
mkdir -p stamps
touch $@
stamps/netx-dist.stamp: stamps/netx.stamp $(abs_top_builddir)/netx.manifest
(cd $(NETX_DIR) ; \
mkdir -p lib ; \
$(BOOT_DIR)/bin/jar cfm lib/classes.jar \
$(abs_top_builddir)/netx.manifest javax/jnlp net ; \
cp -pPR $(SRC_DIR_LINK) $(NETX_SRCDIR) src; \
find src -type f -exec chmod 640 '{}' ';' -o -type d -exec chmod 750 '{}' ';'; \
cd src ; \
$(ZIP) -qr $(NETX_DIR)/lib/src.zip javax net )
mkdir -p stamps
touch $@
clean-netx:
rm -rf $(NETX_DIR)
rm -f stamps/netx-dist.stamp
rm -f netx-source-files.txt
rm -f stamps/netx.stamp
clean-desktop-files:
rm -f javaws.desktop
rm -f itweb-settings.desktop
# extras -- used to create about.jar for javaws.
extra-source-files.txt:
find $(abs_top_srcdir)/extra -name '*.java' | sort > $@
stamps/extra-class-files.stamp: extra-source-files.txt stamps/netx.stamp
mkdir -p extra-lib
$(BOOT_DIR)/bin/javac $(IT_JAVACFLAGS) -d extra-lib \
-sourcepath $(abs_top_srcdir)/extra -cp netx.build \
-bootclasspath $(RUNTIME) @extra-source-files.txt
(cd $(NETX_EXTRA_DIR); \
for files in $$(find . -type f); \
do \
${INSTALL_DATA} -D $${files} \
$(NETX_EXTRA_DIST_DIR)/$${files}; \
done)
mkdir -p stamps
touch $@
clean-extra:
rm -rf extra-lib
rm -f stamps/extra-class-files.stamp
rm -f extra-source-files.txt
extra-lib/about.jar: stamps/extra-class-files.stamp
$(BOOT_DIR)/bin/jar cf $@ -C extra-lib net ;
launcher.build/javaws: launcher/javaws.in
mkdir -p launcher.build
$(edit_launcher_script) < $< > $@
launcher.build/itweb-settings: launcher/itweb-settings.in
mkdir -p launcher.build
$(edit_launcher_script) < $< > $@
clean-launchers:
rm -f launcher.build/javaws
rm -f launcher.build/itweb-settings
if [ -e launcher.build ] ; then \
rmdir launcher.build ; \
fi
javaws.desktop: javaws.desktop.in
sed "s#PATH_TO_JAVAWS#$(bindir)/javaws#" < $(srcdir)/javaws.desktop.in > javaws.desktop
itweb-settings.desktop: $(srcdir)/itweb-settings.desktop.in
sed "s#PATH_TO_ITWEB_SETTINGS#$(bindir)/itweb-settings#" \
< $(srcdir)/itweb-settings.desktop.in > itweb-settings.desktop
# documentation
stamps/docs.stamp: stamps/netx-docs.stamp stamps/plugin-docs.stamp
touch stamps/docs.stamp
clean-docs: clean-netx-docs clean-plugin-docs
if [ -e ${abs_top_builddir}/docs ] ; then \
rmdir ${abs_top_builddir}/docs ; \
fi
rm -f stamps/docs.stamp
stamps/netx-docs.stamp: stamps/bootstrap-directory.stamp
if ENABLE_DOCS
$(BOOT_DIR)/bin/javadoc $(JAVADOC_MEM_OPTS) $(JAVADOC_OPTS) \
-d ${abs_top_builddir}/docs/netx -sourcepath $(NETX_SRCDIR) \
-doctitle 'IcedTea-Web: NetX API Specification' \
-windowtitle 'IcedTea-Web: NetX ' \
-header 'IcedTea-Web
NetX' \
$(NETX_PKGS)
endif
mkdir -p stamps
touch stamps/netx-docs.stamp
clean-netx-docs:
rm -rf ${abs_top_builddir}/docs/netx
rm -f stamps/netx-docs.stamp
stamps/plugin-docs.stamp: stamps/bootstrap-directory.stamp
if ENABLE_DOCS
if ENABLE_PLUGIN
$(BOOT_DIR)/bin/javadoc $(JAVADOC_MEM_OPTS) $(JAVADOC_OPTS) \
-d ${abs_top_builddir}/docs/plugin -sourcepath $(NETX_SRCDIR):$(LIVECONNECT_SRCS) \
-doctitle 'IcedTea-Web: Plugin API Specification' \
-windowtitle 'IcedTea-Web: Plugin ' \
-header 'IcedTea-Web
Plugin' \
$(PLUGIN_PKGS)
endif
endif
mkdir -p stamps
touch stamps/plugin-docs.stamp
clean-plugin-docs:
rm -rf ${abs_top_builddir}/docs/plugin
rm -f stamps/plugin-docs.stamp
# check
# ==========================
check-pac-functions: stamps/bootstrap-directory.stamp
./jrunscript $(abs_top_srcdir)/tests/netx/pac/pac-funcs-test.js \
$$(readlink -f $(abs_top_srcdir)/netx/net/sourceforge/jnlp/runtime/pac-funcs.js)
clean-tests:
# plugin tests
if ENABLE_PLUGIN
stamps/plugin-tests.stamp: $(PLUGIN_TEST_SRCS) stamps/plugin.stamp
mkdir -p plugin/tests/LiveConnect
$(BOOT_DIR)/bin/javac $(IT_JAVACFLAGS) \
-d plugin/tests/LiveConnect \
-classpath liveconnect/lib/classes.jar \
$(PLUGIN_TEST_SRCS) ;
$(BOOT_DIR)/bin/jar cf plugin/tests/LiveConnect/PluginTest.jar \
plugin/tests/LiveConnect/*.class ;
cp -pPR $(SRC_DIR_LINK) $(abs_top_srcdir)/plugin/tests/LiveConnect/*.{js,html} \
plugin/tests/LiveConnect ;
echo "Done. Now launch \"firefox file://`pwd`/index.html\"" ;
mkdir -p stamps
touch stamps/plugin-tests.stamp
endif
# Bootstrap Directory Targets
# ===========================
stamps/native-ecj.stamp:
mkdir -p stamps ; \
if test "x$(GCJ)" != "xno"; then \
$(GCJ) $(IT_CFLAGS) -Wl,-Bsymbolic -findirect-dispatch -o native-ecj \
--main=org.eclipse.jdt.internal.compiler.batch.Main ${ECJ_JAR} ; \
fi ; \
touch stamps/native-ecj.stamp
clean-native-ecj:
rm -f native-ecj
rm -rf stamps/native-ecj.stamp
# bootstrap
stamps/bootstrap-directory.stamp: stamps/native-ecj.stamp
mkdir -p $(BOOT_DIR)/bin stamps/
ln -sf $(JAVA) $(BOOT_DIR)/bin/java
ln -sf $(JAR) $(BOOT_DIR)/bin/jar
ln -sf $(abs_top_builddir)/javac $(BOOT_DIR)/bin/javac
ln -sf $(JAVADOC) $(BOOT_DIR)/bin/javadoc
mkdir -p $(BOOT_DIR)/jre/lib && \
ln -s $(SYSTEM_JDK_DIR)/jre/lib/rt.jar $(BOOT_DIR)/jre/lib && \
if [ -e $(SYSTEM_JDK_DIR)/jre/lib/jsse.jar ] ; then \
ln -s $(SYSTEM_JDK_DIR)/jre/lib/jsse.jar $(BOOT_DIR)/jre/lib ; \
else \
ln -s rt.jar $(BOOT_DIR)/jre/lib/jsse.jar ; \
fi
ln -sf $(SYSTEM_JDK_DIR)/jre/lib/$(JRE_ARCH_DIR) \
$(BOOT_DIR)/jre/lib/ && \
if ! test -d $(BOOT_DIR)/jre/lib/$(INSTALL_ARCH_DIR); \
then \
ln -sf ./$(JRE_ARCH_DIR) \
$(BOOT_DIR)/jre/lib/$(INSTALL_ARCH_DIR); \
fi;
mkdir -p $(BOOT_DIR)/include && \
for i in $(SYSTEM_JDK_DIR)/include/*; do \
test -r $$i | continue; \
i=`basename $$i`; \
rm -f $(BOOT_DIR)/include/$$i; \
ln -s $(SYSTEM_JDK_DIR)/include/$$i $(BOOT_DIR)/include/$$i; \
done
mkdir -p stamps
touch stamps/bootstrap-directory.stamp
clean-bootstrap-directory:
rm -rf $(BOOT_DIR)
if [ -e ${abs_top_builddir}/bootstrap ] ; then \
rmdir ${abs_top_builddir}/bootstrap ; \
fi
rm -f stamps/bootstrap-directory.stamp
# Target Aliases
# ===============
add-netx: stamps/add-netx.stamp
add-netx-debug: stamps/add-netx-debug.stamp
netx: stamps/netx.stamp
netx-dist: stamps/netx-dist.stamp
plugin: stamps/plugin.stamp
plugin-tests: stamps/plugin-tests.stamp