diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..4ed40894e
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,106 @@
+# To use this file, run:
+#
+# $ make CONFIGURE_FLAGS="-Dplugin.path=/path/to/your/eclipse/plugins"
+#
+# For example, on Debian GNU/Linux:
+#
+# $ make CONFIGURE_FLAGS="-Dplugin.path=/usr/lib/eclipse:/usr/share/eclipse/dropins/jdt"
+#
+# You can also add e.g. "-DforceContextQualifier=none" to make the jars be
+# output under a stable filename.
+#
+# Due to https://github.com/zhourenjian/java2script/issues/7 you may need to
+# run this using xvfb https://packages.debian.org/sid/xvfb
+#
+CONFIGURE_FLAGS +=
+CORE_FLAGS += -DjavacFailOnError=true
+INCUBATOR_FLAGS += -DjavacFailOnError=true -DjavacSource=1.6 -DjavacTarget=1.6
+
+# Order is important; dependencies must go earlier.
+CORE_PLUGINS = net.sf.j2s.core net.sf.j2s.ajax net.sf.j2s.ui net.sf.j2s.lib
+INCUBATOR_PLUGINS = net.sf.j2s.ui.template.velocity net.sf.j2s.ui.cmdline
+CORE_J2SLIB = net.sf.j2s.ajax net.sf.j2s.java.core net.sf.j2s.java.org.eclipse.swt
+
+BUILD_WORKSPACE := $(PWD)/autobuild
+ECLIPSE_AUTO = eclipse \
+ -configuration $(BUILD_WORKSPACE)/configuration \
+ -user $(BUILD_WORKSPACE) \
+ -data $(BUILD_WORKSPACE) \
+ -nosplash -clean
+
+ECLIPSE_ANT = $(ECLIPSE_AUTO) \
+ -application org.eclipse.ant.core.antRunner
+ECLIPSE_ANT_BUILD = $(ECLIPSE_ANT) build.update.jar
+ECLIPSE_ANT_CLEAN = if [ -f build.xml ]; then \
+ $(ECLIPSE_ANT) clean; \
+ rm -rf build.xml javaCompiler...args; \
+fi
+ECLIPSE_J2S = $(ECLIPSE_AUTO) \
+ -application net.sf.j2s.ui.cmdlineApi
+
+all: build-libs
+
+configure:
+ $(ECLIPSE_ANT) -f configure.xml $(CONFIGURE_FLAGS)
+
+build-plugins: configure
+ sh switch-build-command.sh sources/net.sf.j2s.ajax/.project \
+ -net.sf.j2s.core.java2scriptbuilder +org.eclipse.jdt.core.javabuilder
+ set -e; for i in $(CORE_PLUGINS:%=sources/%); do \
+ ( cd $$i && $(ECLIPSE_ANT_BUILD) $(CORE_FLAGS); ) \
+ done
+ set -e; for i in $(INCUBATOR_PLUGINS:%=incubator/%); do \
+ ( cd $$i && $(ECLIPSE_ANT_BUILD) $(INCUBATOR_FLAGS); ) \
+ done
+
+local-install-plugins: build-plugins
+ $(MAKE) DESTDIR=$(BUILD_WORKSPACE) eclipsedir= install-plugins
+ mkdir -p $(BUILD_WORKSPACE)/features
+ touch $(BUILD_WORKSPACE)/artifacts.xml
+ $(ECLIPSE_AUTO) -initialize
+
+# Work around https://bugs.eclipse.org/bugs/show_bug.cgi?id=465693 (actually a JDK bug)
+# Otherwise the net.sf.j2s.java.core build wil segfault about half of the time.
+# Annoyingly, the segfault causes java to exit 0; I was unable to figure out why.
+# So we add some extra checks, testing for the absence of crash logs.
+BADMETHOD1 = org/eclipse/jdt/internal/compiler/parser/TypeConverter.decodeType
+WORKAROUND1 = -vmargs -XX:CompileCommand=exclude,$(BADMETHOD1)
+build-libs: local-install-plugins
+ sh switch-build-command.sh sources/net.sf.j2s.ajax/.project \
+ +net.sf.j2s.core.java2scriptbuilder -org.eclipse.jdt.core.javabuilder
+ test ! -f *err*.log
+ set -e; for i in $(CORE_J2SLIB); do \
+ $(ECLIPSE_J2S) -cmd build -path $$PWD/sources/$$i $(WORKAROUND1); \
+ test ! -f *err*.log; \
+ done
+ mkdir -p sources/net.sf.j2s.lib/bin sources/net.sf.j2s.lib/j2slib
+ cd sources/net.sf.j2s.lib/bin && jar xf ../library.jar
+ cd sources/net.sf.j2s.lib && ant -f build/build.xml
+ cd sources/net.sf.j2s.lib && zip -r j2slib.zip j2slib
+
+clean:
+ for i in $(INCUBATOR_PLUGINS:%=incubator/%); do \
+ ( cd $$i && $(ECLIPSE_ANT_CLEAN); ) \
+ done
+ for i in $(CORE_PLUGINS:%=sources/%); do \
+ ( cd $$i && $(ECLIPSE_ANT_CLEAN); ) \
+ done
+ rm -rf $(BUILD_WORKSPACE)/.metadata
+
+prefix ?= /usr/local
+eclipsedir ?= $(prefix)/share/eclipse
+datadir ?= $(prefix)/share/java2script
+pluginsdir ?= $(eclipsedir)/plugins
+
+install-plugins:
+ test -z "$(DESTDIR)$(pluginsdir)" || mkdir -p "$(DESTDIR)$(pluginsdir)"
+ install -t "$(DESTDIR)$(pluginsdir)" \
+ $(join $(CORE_PLUGINS:%=sources/%/),$(CORE_PLUGINS:%=%_2.0.0.jar)) \
+ $(join $(INCUBATOR_PLUGINS:%=incubator/%/),$(INCUBATOR_PLUGINS:%=%_1.0.0.*.jar))
+
+install: install-plugins
+ test -z "$(DESTDIR)$(datadir)" || mkdir -p "$(DESTDIR)$(datadir)"
+ install -t "$(DESTDIR)$(datadir)" \
+ sources/net.sf.j2s.lib/j2slib.zip
+
+.PHONY: all configure build-plugins local-install-plugins build-libs clean install-plugins install
diff --git a/configure.xml b/configure.xml
new file mode 100644
index 000000000..9c3149a96
--- /dev/null
+++ b/configure.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sources/net.sf.j2s.lib/build/build.xml b/sources/net.sf.j2s.lib/build/build.xml
index a03428969..a15ba4103 100644
--- a/sources/net.sf.j2s.lib/build/build.xml
+++ b/sources/net.sf.j2s.lib/build/build.xml
@@ -39,7 +39,7 @@
- - - - - - - - - - - - - - - - - -->
-
+
@@ -52,7 +52,7 @@
-
+
@@ -65,7 +65,7 @@
-
+
@@ -78,7 +78,7 @@
-
+
@@ -90,7 +90,7 @@
-
+
@@ -105,7 +105,7 @@
-
+
@@ -122,7 +122,7 @@
-
+
@@ -135,7 +135,7 @@
-
+
@@ -145,7 +145,7 @@
-
+
@@ -166,7 +166,7 @@
-
+
@@ -185,7 +185,7 @@
target: j2s.pack.common
- - - - - - - - - - - - - - - - - -->
-
+
@@ -375,7 +375,7 @@
-
+
@@ -387,7 +387,7 @@
-
+
@@ -510,7 +510,7 @@
-
+
@@ -543,7 +543,7 @@
target: pack.swt.css
- - - - - - - - - - - - - - - - - -->
-
+
@@ -567,7 +567,7 @@
target: pack.swt.basic
================================= -->
-
+
@@ -715,7 +715,7 @@
target: pack.swt.more
================================= -->
-
+
@@ -746,7 +746,7 @@
-
+
@@ -759,7 +759,7 @@
-
+
@@ -772,7 +772,7 @@
-
+
@@ -785,7 +785,7 @@
-
+
@@ -799,7 +799,7 @@
-
+
@@ -812,7 +812,7 @@
-
+
@@ -826,7 +826,7 @@
-
+
@@ -842,7 +842,7 @@
-
+
@@ -861,7 +861,7 @@
-
+
@@ -874,7 +874,7 @@
-
+
@@ -887,7 +887,7 @@
-
+
@@ -900,7 +900,7 @@
-
+
@@ -913,7 +913,7 @@
-
+
@@ -925,7 +925,7 @@
-
+
@@ -938,7 +938,7 @@
-
+
@@ -959,7 +959,7 @@
target: pack.swt.shell
================================= -->
-
+
@@ -991,7 +991,7 @@
target: pack.swt.dnd
================================= -->
-
+
@@ -1027,7 +1027,7 @@
target: pack.jface.viewer
================================= -->
-
+
@@ -1081,7 +1081,7 @@
target: pack.jface.resource
================================= -->
-
+
@@ -1124,7 +1124,7 @@
target: pack.jface.util
================================= -->
-
+
@@ -1151,7 +1151,7 @@
target: pack.jface.window
================================= -->
-
+
diff --git a/sources/net.sf.j2s.lib/src/net/sf/j2s/lib/build/UTF8Concat.java b/sources/net.sf.j2s.lib/src/net/sf/j2s/lib/build/UTF8Concat.java
index 5a1ab1c61..3d25741ed 100644
--- a/sources/net.sf.j2s.lib/src/net/sf/j2s/lib/build/UTF8Concat.java
+++ b/sources/net.sf.j2s.lib/src/net/sf/j2s/lib/build/UTF8Concat.java
@@ -79,7 +79,7 @@ public static void main(String[] args) {
//*/
} catch (FileNotFoundException e) {
e.printStackTrace();
- return;
+ System.exit(1);
}
}
try {
@@ -98,6 +98,7 @@ public static void main(String[] args) {
fos.close();
} catch (IOException e) {
e.printStackTrace();
+ System.exit(1);
}
}
diff --git a/switch-build-command.sh b/switch-build-command.sh
new file mode 100644
index 000000000..18b7ce6a1
--- /dev/null
+++ b/switch-build-command.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+set -e
+
+enable() {
+perl -0 -p \
+ -e 's||\1|gs'
+}
+
+disable() {
+perl -0 -p \
+ -e 's|\n((\s*)\s*'"$1"'.*?\n(\s*).*?\n)|\n\2\n|sg' \
+| perl -0 -p \
+ -e 's|)\s*-->|\1|gs'
+}
+
+file="$1"
+shift
+
+while [ -n "$1" ]; do
+case "$1" in
++*) cmd=enable;name="${1#+}";;
+-*) cmd=disable;name="${1#-}";;
+*) false;;
+esac
+echo "$cmd" "$name"
+sed -e 's/\r$//g' "$file" | $cmd "$name" | sed -e 's/$/\r/g' > "$file.tmp"
+mv "$file.tmp" "$file"
+shift
+done