[ecj] 117/145: No longer build the -gcj packages (Closes: #892531)

Emmanuel Bourg ebourg-guest at moszumanska.debian.org
Tue Mar 27 23:11:35 BST 2018


This is an automated email from the git hooks/post-receive script.

ebourg-guest pushed a commit to branch master
in repository ecj.

commit e641e71b0d71dac5b16b53c00b90276966585bd7
Author: Emmanuel Bourg <ebourg at apache.org>
Date:   Tue Mar 27 12:39:21 2018 +0200

    No longer build the -gcj packages (Closes: #892531)
---
 debian/README.Debian                          |  12 -
 debian/aot-compile                            |  89 -----
 debian/aotcompile.py                          | 430 --------------------
 debian/build.xml                              |  20 +
 debian/changelog                              |   1 +
 debian/classfile.py                           | 222 -----------
 debian/clean                                  |   1 +
 debian/control                                |  46 +--
 debian/copyright                              |  17 -
 debian/ecj-gcj.install                        |   1 -
 debian/ecj-gcj.lintian-overrides              |   1 -
 debian/ecj.in                                 |  30 --
 debian/ecj.install                            |   2 +-
 debian/ecj1.lintian-overrides                 |   1 -
 debian/libecj-java-gcj.install                |   2 -
 debian/libecj-java-gcj.postinst               |   9 -
 debian/libecj-java-gcj.postrm                 |   9 -
 debian/libecj-java.poms                       |   2 +-
 debian/patches/gcc-changes.diff               | 543 --------------------------
 debian/patches/remove-overrides.diff          | 508 ------------------------
 debian/patches/replace-diamond-operators.diff |  40 --
 debian/patches/series                         |   3 -
 debian/rules                                  | 236 +----------
 debian/wrappers/ecj                           |  10 +
 24 files changed, 45 insertions(+), 2190 deletions(-)

diff --git a/debian/README.Debian b/debian/README.Debian
deleted file mode 100644
index 05fb499..0000000
--- a/debian/README.Debian
+++ /dev/null
@@ -1,12 +0,0 @@
-ecj
-===
-
-This package is not intended for end users!  This is basically to make
-it so that you can sanely bootstrap a port.  This high-quality java
-compiler is buildable with just gcj-4, which in turn is built in C.
-
-In particular, this doesn't include support for ant - When compiling
-with this version of ecj, ant will spawn a new VM instance and shell
-out to it to compile.  This means significantly higher memory costs,
-and slower compiles. 
-
diff --git a/debian/aot-compile b/debian/aot-compile
deleted file mode 100644
index 2caf8f4..0000000
--- a/debian/aot-compile
+++ /dev/null
@@ -1,89 +0,0 @@
-#! /usr/bin/python
-
-## Copyright (C) 2006 Red Hat, Inc.
-## Written by Gary Benson <gbenson at redhat.com>
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-
-import aotcompile
-import getopt
-import os
-import sys
-
-usage = """\
-Usage: %s [OPTION...] SRCDIR DSTDIR
-AOT-compile all Java bytecode in SRCDIR into DSTDIR.
-Note that DSTDIR must be within SRCDIR.
-
-Options:
-  -M, --make=PATH        make executable to use (%s)
-  -C, --gcj=PATH         gcj executable to use (%s)
-  -D, --dbtool=PATH      gcj-dbtool executable to use (%s)
-  -m, --makeflags=FLAGS  flags to pass to make during build
-  -c, --gcjflags=FLAGS   flags to pass to gcj during compilation
-                           in addition to %s
-  -l, --ldflags=FLAGS    flags to pass to gcj during linking
-                           in addition to %s
-  -e, --exclude=PATH     do not compile PATH
-  -L, --libdir=DIR       overwrite destination directory
-
-Extra flags may also be passed using the AOT_MAKEFLAGS, AOT_GCJFLAGS
-and AOT_LDFLAGS environment variables.""" % (
-    os.path.basename(sys.argv[0]),
-    aotcompile.PATHS["make"],
-    aotcompile.PATHS["gcj"],
-    aotcompile.PATHS["dbtool"],
-    repr(" ".join(aotcompile.GCJFLAGS)),
-    repr(" ".join(aotcompile.LDFLAGS)))
-
-try:
-    if os.environ.has_key("RPM_PACKAGE_NAME"):
-        raise aotcompile.Error, "not for use within rpm specfiles"
-
-    try:
-        opts, args = getopt.getopt(
-            sys.argv[1:],
-            "C:c:l:D:e:L:",
-            ["gcj=", "dbtool=", "gcjflags=", "ldflags=", "exclude=", "libdir="])
-        srcdir, dstdir = args
-    except:
-        print >>sys.stderr, usage
-        sys.exit(1)
-
-    compiler = aotcompile.Compiler(srcdir, dstdir)
-    for o, a in opts:
-        if o in ("-M", "--make"):
-            aotcompile.PATHS["make"] = a
-        if o in ("-C", "--gcj"):
-            aotcompile.PATHS["gcj"] = a
-        if o in ("-D", "--dbtool"):
-            aotcompile.PATHS["dbtool"] = a
-        if o in ("-m", "--makeflags"):
-            compiler.makeflags[0:0] = a.split()
-        if o in ("-c", "--gcjflags"):
-            compiler.gcjflags[0:0] = a.split()
-        if o in ("-l", "--ldflags"):
-            compiler.ldflags[0:0] = a.split()
-        if o in ("-e", "--exclude"):
-            compiler.exclusions.append(a)
-        if o in ("-L", "--libdir"):
-            compiler.libdir = a
-    
-    compiler.makeflags[0:0] = os.environ.get("AOT_MAKEFLAGS", "").split() 
-    compiler.gcjflags[0:0] = os.environ.get("AOT_GCJFLAGS", "").split() 
-    compiler.ldflags[0:0] = os.environ.get("AOT_LDFLAGS", "").split() 
-
-    compiler.compile()
-
-except aotcompile.Error, e:
-    print >>sys.stderr, "%s: error: %s" % (
-        os.path.basename(sys.argv[0]), e)
-    sys.exit(1)
diff --git a/debian/aotcompile.py b/debian/aotcompile.py
deleted file mode 100644
index 007c1dc..0000000
--- a/debian/aotcompile.py
+++ /dev/null
@@ -1,430 +0,0 @@
-
-# -*- python -*-
-
-## Copyright (C) 2005, 2006 Red Hat, Inc.
-## Written by Gary Benson <gbenson at redhat.com>
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-
-import classfile
-import copy
-import md5
-import operator
-import os
-import sys
-import cStringIO as StringIO
-import zipfile
-
-PATHS = {"make":   "/usr/bin/make",
-         "gcj":    "/usr/bin/gcj-4.1",
-         "dbtool": "/usr/bin/gcj-dbtool-4.1"}
-
-MAKEFLAGS = []
-GCJFLAGS = ["-g", "-O2", "-fPIC", "-findirect-dispatch", "-fjni"]
-LDFLAGS = ["-Wl,-Bsymbolic", "-Wl,-z,relro"]
-
-MAX_CLASSES_PER_JAR = 1024
-MAX_BYTES_PER_JAR = 1048576
-
-try:
-    for line in file('/proc/meminfo'):
-        if line.startswith('MemTotal:'):
-            memtotal = int(line.split()[1])
-        if memtotal < 270000:
-            MAX_CLASSES_PER_JAR = 512
-            MAX_BYTES_PER_JAR = 524288
-        if memtotal < 140000:
-            MAX_CLASSES_PER_JAR = 256
-            MAX_BYTES_PER_JAR = 262144
-except:
-    pass
-
-MAKEFILE = "Makefile"
-
-MAKEFILE_HEADER = '''\
-GCJ = %(gcj)s
-DBTOOL = %(dbtool)s
-GCJFLAGS = %(gcjflags)s
-LDFLAGS = %(ldflags)s
-
-%%.o: %%.jar
-	$(GCJ) -c $(GCJFLAGS) $< -o $@
-
-TARGETS = \\
-%(targets)s \\
-ecj-gcj ecj1
-
-all: $(TARGETS)'''
-
-MAKEFILE_JOB = '''
-%(base)s_SOURCES = \\
-%(jars)s
-
-%(base)s_OBJECTS = \\
-$(%(base)s_SOURCES:.jar=.o)
-
-%(dso)s: $(%(base)s_OBJECTS)
-	$(GCJ) -shared $(GCJFLAGS) $(LDFLAGS) $^ -o $@
-
-ecj-gcj: $(%(base)s_OBJECTS) resources.o
-	$(GCJ) $(LDFLAGS) $(GCJFLAGS) $(RPATH) -Wl,-O1 --main=org.eclipse.jdt.internal.compiler.batch.Main $^ -o $@
-
-ecj1: $(%(base)s_OBJECTS) resources.o
-	$(GCJ) $(LDFLAGS) $(GCJFLAGS) $(RPATH) -Wl,-O1 --main=org.eclipse.jdt.internal.compiler.batch.GCCMain $^ -o $@
-
-%(db)s: $(%(base)s_SOURCES)
-	$(DBTOOL) -n $@ 64
-	for jar in $^; do \\
-            $(DBTOOL) -f $@ $$jar \\
-                %(libdir)s/%(dso)s; \\
-        done'''
-
-ZIPMAGIC, CLASSMAGIC = "PK\x03\x04", "\xca\xfe\xba\xbe"
-
-class Error(Exception):
-    pass
-
-class Compiler:
-    def __init__(self, srcdir, dstdir):
-        self.srcdir = os.path.abspath(srcdir)
-        self.dstdir = os.path.abspath(dstdir)
-        if not self.dstdir.startswith(self.srcdir):
-            raise Error, "dstdir must be within srcdir"
-        self.libdir = dstdir[len(self.srcdir):]
-
-        # Calling code may modify these parameters
-        self.gcjflags = copy.copy(GCJFLAGS)
-        self.ldflags = copy.copy(LDFLAGS)
-        self.makeflags = copy.copy(MAKEFLAGS)
-        self.exclusions = []
-
-    def compile(self):
-        """Search srcdir for classes and jarfiles, then generate
-        solibs and mappings databases for them all in libdir."""
-        if not os.path.isdir(self.dstdir):
-            os.makedirs(self.dstdir)
-        oldcwd = os.getcwd()
-        os.chdir(self.dstdir)
-        try:            
-            jobs = self.getJobList()
-            self.writeMakefile(MAKEFILE, jobs)
-            for job in jobs:
-                job.writeJars()
-            system([PATHS["make"]] + self.makeflags)
-            for job in jobs:
-                job.clean()
-            os.unlink(MAKEFILE)
-        finally:
-            os.chdir(oldcwd)
-
-    def getJobList(self):
-        """Return all jarfiles and class collections in srcdir."""
-        jobs = weed_jobs(find_jobs(self.srcdir, self.exclusions))
-        set_basenames(jobs)
-        return jobs
-
-    def writeMakefile(self, path, jobs):
-        """Generate a makefile to build the solibs and mappings
-        databases for the specified list of jobs."""
-        fp = open(path, "w")
-        print >>fp, MAKEFILE_HEADER % {
-            "gcj": PATHS["gcj"],
-            "dbtool": PATHS["dbtool"],
-            "gcjflags": " ".join(self.gcjflags),
-            "ldflags": " ".join(self.ldflags),
-            "targets": " \\\n".join(reduce(operator.add, [
-                (job.dsoName(), job.dbName()) for job in jobs]))}
-        for job in jobs:
-            values = job.ruleArguments()
-            values["libdir"] = self.libdir
-            print >>fp, MAKEFILE_JOB % values
-        fp.close()
-
-def find_jobs(dir, exclusions = ()):
-    """Scan a directory and find things to compile: jarfiles (zips,
-    wars, ears, rars, etc: we go by magic rather than file extension)
-    and directories of classes."""
-    def visit((classes, zips), dir, items):
-        for item in items:
-            path = os.path.join(dir, item)
-            if os.path.islink(path) or not os.path.isfile(path):
-                continue
-            magic = open(path, "r").read(4)
-            if magic == ZIPMAGIC:
-                zips.append(path)
-            elif magic == CLASSMAGIC:
-                classes.append(path)
-    classes, paths = [], []
-    os.path.walk(dir, visit, (classes, paths))
-    # Convert the list of classes into a list of directories
-    while classes:
-        # XXX this requires the class to be correctly located in its heirachy.
-        path = classes[0][:-len(os.sep + classname(classes[0]) + ".class")]
-        paths.append(path)
-        classes = [cls for cls in classes if not cls.startswith(path)]
-    # Handle exclusions.  We're really strict about them because the
-    # option is temporary in aot-compile-rpm and dead options left in
-    # specfiles will hinder its removal.
-    for path in exclusions:
-        if path in paths:
-            paths.remove(path)
-        else:
-            raise Error, "%s: path does not exist or is not a job" % path
-    # Build the list of jobs
-    jobs = []
-    paths.sort()
-    for path in paths:
-        if os.path.isfile(path):
-            job = JarJob(path)
-        else:
-            job = DirJob(path)
-        if len(job.classes):
-            jobs.append(job)
-    return jobs
-
-class Job:
-    """A collection of classes that will be compiled as a unit."""
-    
-    def __init__(self, path):
-        self.path, self.classes, self.blocks = path, {}, None
-
-    def addClass(self, bytes):
-        """Subclasses call this from their __init__ method for
-        every class they find."""
-        self.classes[md5.new(bytes).digest()] = bytes
-
-    def __makeBlocks(self):
-        """Split self.classes into chunks that can be compiled to
-        native code by gcj.  In the majority of cases this is not
-        necessary -- the job will have come from a jarfile which will
-        be equivalent to the one we generate -- but this only happens
-        _if_ the job was a jarfile and _if_ the jarfile isn't too big
-        and _if_ the jarfile has the correct extension and _if_ all
-        classes are correctly named and _if_ the jarfile has no
-        embedded jarfiles.  Fitting a special case around all these
-        conditions is tricky to say the least.
-
-        Note that this could be called at the end of each subclass's
-        __init__ method.  The reason this is not done is because we
-        need to parse every class file.  This is slow, and unnecessary
-        if the job is subsetted."""
-        names = {}
-        for hash, bytes in self.classes.items():
-            name = classname(bytes)
-            if not names.has_key(name):
-                names[name] = []
-            names[name].append(hash)
-        names = names.items()
-        # We have to sort somehow, or the jars we generate 
-        # We sort by name in a simplistic attempt to keep related
-        # classes together so inter-class optimisation can happen.
-        names.sort()
-        self.blocks, bytes = [[]], 0
-        for name, hashes in names:
-            for hash in hashes:
-                if len(self.blocks[-1]) >= MAX_CLASSES_PER_JAR \
-                   or bytes >= MAX_BYTES_PER_JAR:
-                    self.blocks.append([])
-                    bytes = 0
-                self.blocks[-1].append((name, hash))
-                bytes += len(self.classes[hash])
-
-    # From Archit Shah:
-    #   The implementation and the documentation don't seem to match.
-    #  
-    #    [a, b].isSubsetOf([a]) => True
-    #  
-    #   Identical copies of all classes this collection do not exist
-    #   in the other. I think the method should be named isSupersetOf
-    #   and the documentation should swap uses of "this" and "other"
-    #
-    # XXX think about this when I've had more sleep...
-    def isSubsetOf(self, other):
-        """Returns True if identical copies of all classes in this
-        collection exist in the other."""
-        for item in other.classes.keys():
-            if not self.classes.has_key(item):
-                return False
-        return True
-
-    def __targetName(self, ext):
-        return self.basename + ext
-
-    def tempJarName(self, num):
-        return self.__targetName(".%d.jar" % (num + 1))
-
-    def tempObjName(self, num):
-        return self.__targetName(".%d.o" % (num + 1))
-
-    def dsoName(self):
-        """Return the filename of the shared library that will be
-        built from this job."""
-        return self.__targetName(".so")
-
-    def dbName(self):
-        """Return the filename of the mapping database that will be
-        built from this job."""
-        return self.__targetName(".db")
-
-    def ruleArguments(self):
-        """Return a dictionary of values that when substituted
-        into MAKEFILE_JOB will create the rules required to build
-        the shared library and mapping database for this job."""
-        if self.blocks is None:
-            self.__makeBlocks()
-        return {
-            "base": "".join(
-                [c.isalnum() and c or "_" for c in self.dsoName()]),
-            "jars": " \\\n".join(
-                [self.tempJarName(i) for i in xrange(len(self.blocks))]),
-            "dso": self.dsoName(),
-            "db": self.dbName()}
-
-    def writeJars(self):
-        """Generate jarfiles that can be native compiled by gcj."""
-        if self.blocks is None:
-            self.__makeBlocks()
-        for block, i in zip(self.blocks, xrange(len(self.blocks))):
-            jar = zipfile.ZipFile(self.tempJarName(i), "w", zipfile.ZIP_STORED)
-            for name, hash in block:
-                jar.writestr(
-                    zipfile.ZipInfo("%s.class" % name), self.classes[hash])
-            jar.close()
-
-    def clean(self):
-        """Delete all temporary files created during this job's build."""
-        if self.blocks is None:
-            self.__makeBlocks()
-        for i in xrange(len(self.blocks)):
-            os.unlink(self.tempJarName(i))
-            os.unlink(self.tempObjName(i))
-
-class JarJob(Job):
-    """A Job whose origin was a jarfile."""
-
-    def __init__(self, path):
-        Job.__init__(self, path)
-        self._walk(zipfile.ZipFile(path, "r"))
-
-    def _walk(self, zf):
-        for name in zf.namelist():
-            bytes = zf.read(name)
-            if bytes.startswith(ZIPMAGIC):
-                self._walk(zipfile.ZipFile(StringIO.StringIO(bytes)))
-            elif bytes.startswith(CLASSMAGIC):
-                self.addClass(bytes)
-
-class DirJob(Job):
-    """A Job whose origin was a directory of classfiles."""
-
-    def __init__(self, path):
-        Job.__init__(self, path)
-        os.path.walk(path, DirJob._visit, self)
-
-    def _visit(self, dir, items):
-        for item in items:
-            path = os.path.join(dir, item)
-            if os.path.islink(path) or not os.path.isfile(path):
-                continue
-            fp = open(path, "r")
-            magic = fp.read(4)
-            if magic == CLASSMAGIC:
-                self.addClass(magic + fp.read())
-    
-def weed_jobs(jobs):
-    """Remove any jarfiles that are completely contained within
-    another.  This is more common than you'd think, and we only
-    need one nativified copy of each class after all."""
-    jobs = copy.copy(jobs)
-    while True:
-        for job1 in jobs:
-            for job2 in jobs:
-                if job1 is job2:
-                    continue
-                if job1.isSubsetOf(job2):
-                    msg = "subsetted %s" % job2.path
-                    if job2.isSubsetOf(job1):
-                        if (isinstance(job1, DirJob) and
-                            isinstance(job2, JarJob)):
-                            # In the braindead case where a package
-                            # contains an expanded copy of a jarfile
-                            # the jarfile takes precedence.
-                            continue
-                        msg += " (identical)"
-                    warn(msg)
-                    jobs.remove(job2)
-                    break
-            else:
-                continue
-            break
-        else:
-            break
-        continue
-    return jobs
-
-def set_basenames(jobs):
-    """Ensure that each jarfile has a different basename."""
-    names = {}
-    for job in jobs:
-        name = os.path.basename(job.path)
-        if not names.has_key(name):
-            names[name] = []
-        names[name].append(job)
-    for name, set in names.items():
-        if len(set) == 1:
-            set[0].basename = name
-            continue
-        # prefix the jar filenames to make them unique
-        # XXX will not work in most cases -- needs generalising
-        set = [(job.path.split(os.sep), job) for job in set]
-        minlen = min([len(bits) for bits, job in set])
-        set = [(bits[-minlen:], job) for bits, job in set]
-        bits = apply(zip, [bits for bits, job in set])
-        while True:
-            row = bits[-2]
-            for bit in row[1:]:
-                if bit != row[0]:
-                    break
-            else:
-                del bits[-2]
-                continue
-            break
-        set = zip(
-            ["_".join(name) for name in apply(zip, bits[-2:])],
-            [job for bits, job in set])
-        for name, job in set:
-            warn("building %s as %s" % (job.path, name))
-            job.basename = name
-    # XXX keep this check until we're properly general
-    names = {}
-    for job in jobs:
-        name = job.basename
-        if names.has_key(name):
-            raise Error, "%s: duplicate jobname" % name
-        names[name] = 1
-
-def system(command):
-    """Execute a command."""
-    status = os.spawnv(os.P_WAIT, command[0], command)
-    if status > 0:
-        raise Error, "%s exited with code %d" % (command[0], status)
-    elif status < 0:
-        raise Error, "%s killed by signal %d" % (command[0], -status)
-
-def warn(msg):
-    """Print a warning message."""
-    print >>sys.stderr, "%s: warning: %s" % (
-        os.path.basename(sys.argv[0]), msg)
-
-def classname(bytes):
-    """Extract the class name from the bytes of a class file."""
-    klass = classfile.Class(bytes)
-    return klass.constants[klass.constants[klass.name][1]][1]
diff --git a/debian/build.xml b/debian/build.xml
new file mode 100644
index 0000000..284ad72
--- /dev/null
+++ b/debian/build.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project default="jar" basedir="..">
+
+  <target name="jar">
+    <mkdir dir="target/classes" />
+    <copy todir="target/classes">
+      <fileset dir="src/org.eclipse.jdt.core" includes="**/*.properties"/>
+    </copy>
+
+    <replace dir="target/classes" token="bundle_qualifier, bundle_version" value="${version}"/>
+
+    <javac srcdir="src/org.eclipse.jdt.core" destdir="target/classes" debuglevel="lines,source" source="1.8" target="1.8" encoding="UTF-8"/>
+
+    <jar destfile="target/ecj.jar">
+      <fileset dir="src/org.eclipse.jdt.core" includes="**/*.props,**/*.rsc"/>
+      <fileset dir="target/classes"/>
+    </jar>
+
+  </target>
+</project>
diff --git a/debian/changelog b/debian/changelog
index 35359b5..6aca011 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,6 @@
 ecj (3.11.1-3) UNRELEASED; urgency=medium
 
+  * No longer build the -gcj packages (Closes: #892531)
   * Moved the package to Git
   * Standards-Version updated to 4.1.3
   * Switch to debhelper level 11
diff --git a/debian/classfile.py b/debian/classfile.py
deleted file mode 100644
index d7e7d7e..0000000
--- a/debian/classfile.py
+++ /dev/null
@@ -1,222 +0,0 @@
-
-## Copyright (C) 2004, 2005 Red Hat, Inc.
-## Written by Gary Benson <gbenson at redhat.com>
-##
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-
-"""Read Java(TM) class files."""
-
-import cStringIO as StringIO
-import struct
-
-class Class:
-    def __init__(self, arg):
-        if hasattr(arg, "read"):
-            self.fp = arg
-        elif type(arg) == type(""):
-            if arg.startswith("\xca\xfe\xba\xbe"):
-                self.fp = StringIO.StringIO(arg)
-            else:
-                self.fp = open(arg, "r")
-        else:
-            raise TypeError, type(arg)
-
-        magic = self._read_int()
-        assert magic == 0xcafebabeL
-        minor, major = self._read(">HH")        
-        self.version = (major, minor)
-
-        self.pool_integrity_checks = None
-        try:
-            assert False
-        except AssertionError:
-            self.pool_integrity_checks = []
-
-        self._read_constants_pool()
-
-        self.access_flags = self._read_short()
-        self.name = self._read_reference_Class()
-        self.super = self._read_reference_Class()
-
-        self.interfaces = self._read_interfaces()
-        self.fields = self._read_fieldsormethods()
-        self.methods = self._read_fieldsormethods()
-        self.attributes = self._read_attributes()
-
-        if self.pool_integrity_checks is not None:
-            for index, tag in self.pool_integrity_checks:
-                assert self.constants[index][0] == tag
-
-        del self.fp, self.pool_integrity_checks
-
-    def __repr__(self):
-        result = []
-        attrs = [attr for attr in dir(self)
-                 if not attr.startswith("_") and attr != "Member"]
-        attrs.sort()
-        for attr in attrs:
-            result.append("%-13s %s" % (
-                attr + ":", attr == "constants" and
-                "<ELIDED>" or repr(getattr(self, attr))))
-        return "\n".join(result)
-
-    def _read_constants_pool(self):
-        self.constants = {}
-        skip = False
-        for i in xrange(1, self._read_short()):
-            if skip:
-                skip = False
-                continue
-            tag = {
-                1: "Utf8", 3: "Integer", 4: "Float", 5: "Long",
-                6: "Double", 7: "Class", 8: "String", 9: "Fieldref",
-                10: "Methodref", 11: "InterfaceMethodref",
-                12: "NameAndType"}[self._read_byte()]
-            skip = tag in ("Long", "Double") # crack crack crack!
-            self.constants[i] = (tag, getattr(self, "_read_constant_" + tag)())
-
-    def _read_interfaces(self):
-        result = []
-        for i in xrange(self._read_short()):
-            result.append(self._read_reference_Class())
-        return result
-
-    def _read_fieldsormethods(self):
-        result = []
-        for i in xrange(self._read_short()):
-            result.append(self.Member(self))
-        return result
-
-    class Member:
-        def __init__(self, source):
-            self.access_flags = source._read_short()
-            self.name = source._read_reference_Utf8()
-            self.descriptor = source._read_reference_Utf8()
-            self.attributes = source._read_attributes()
-
-        def __repr__(self):
-            result = []
-            attrs = [attr for attr in dir(self) if not attr.startswith("_")]
-            attrs.sort()
-            for attr in attrs:
-                value = getattr(self, attr)
-                if attr == "attributes" and value.has_key("Code"):
-                    value = value.copy()
-                    value.update({"Code": "<ELIDED>"})
-                result.append("%-13s %s" % (
-                    attr + ":", repr(value).replace(
-                        "'Code': '<ELIDED>'", "'Code': <ELIDED>")))
-            return ("\n%s" % (15 * " ")).join(result)
-
-    def _read_attributes(self):
-        result = {}
-        for i in xrange(self._read_short()):
-            name = self._read_reference_Utf8()
-            data = self.fp.read(self._read_int())
-            assert not result.has_key(name)
-            result[name] = data
-        return result
-
-    # Constants pool reference reader convenience functions
-
-    def _read_reference_Utf8(self):
-        return self._read_references("Utf8")[0]
-
-    def _read_reference_Class(self):
-        return self._read_references("Class")[0]
-
-    def _read_reference_Class_NameAndType(self):
-        return self._read_references("Class", "NameAndType")
-
-    def _read_references(self, *args):
-        result = []
-        for arg in args:
-            index = self._read_short()
-            if self.pool_integrity_checks is not None:
-                self.pool_integrity_checks.append((index, arg))
-            result.append(index)
-        return result
-
-    # Constants pool constant reader functions
-
-    def _read_constant_Utf8(self):
-        constant = self.fp.read(self._read_short())
-        try:
-            constant = constant.decode("utf-8")
-        except UnicodeError:
-            constant = _bork_utf8_decode(constant)
-        try:
-            constant = constant.encode("us-ascii")
-        except UnicodeError:
-            pass
-        return constant
-
-    def _read_constant_Integer(self):
-        return self._read_int()
-
-    def _read_constant_Float(self):
-        return self._read(">f")[0]
-
-    def _read_constant_Long(self):
-        return self._read(">q")[0]
-
-    def _read_constant_Double(self):
-        return self._read(">d")[0]
-
-    _read_constant_Class = _read_reference_Utf8
-    _read_constant_String = _read_reference_Utf8
-    _read_constant_Fieldref = _read_reference_Class_NameAndType
-    _read_constant_Methodref = _read_reference_Class_NameAndType
-    _read_constant_InterfaceMethodref = _read_reference_Class_NameAndType
-
-    def _read_constant_NameAndType(self):
-        return self._read_reference_Utf8(), self._read_reference_Utf8()
-
-    # Generic reader functions
-
-    def _read_int(self):
-        # XXX how else to read 32 bits on a 64-bit box?
-        h, l = map(long, self._read(">HH"))
-        return (h << 16) + l
-
-    def _read_short(self):
-        return self._read(">H")[0]
-
-    def _read_byte(self):
-        return self._read("B")[0]
-
-    def _read(self, fmt):
-        return struct.unpack(fmt, self.fp.read(struct.calcsize(fmt)))
-
-def _bork_utf8_decode(data):
-    # more crack!
-    bytes, unicode = map(ord, data), ""
-    while bytes:
-        b1 = bytes.pop(0)
-        if b1 & 0x80:
-            assert b1 & 0x40
-            b2 = bytes.pop(0)
-            assert b2 & 0xC0 == 0x80
-            if b1 & 0x20:
-                assert not b1 & 0x10
-                b3 = bytes.pop(0)
-                assert b3 & 0xC0 == 0x80
-                unicode += unichr(
-                    ((b1 & 0x0f) << 12) + ((b2 & 0x3f) << 6) + (b3 & 0x3f))
-            else:
-                unicode += unichr(((b1 & 0x1f) << 6) + (b2 & 0x3f))
-        else:
-            unicode += unichr(b1)
-    return unicode
-
-if __name__ == "__main__":
-    print Class("/usr/share/katana/build/ListDependentClasses.class")
-
diff --git a/debian/clean b/debian/clean
new file mode 100644
index 0000000..2f7896d
--- /dev/null
+++ b/debian/clean
@@ -0,0 +1 @@
+target/
diff --git a/debian/control b/debian/control
index ca36137..f792819 100644
--- a/debian/control
+++ b/debian/control
@@ -3,18 +3,16 @@ Section: java
 Priority: optional
 Maintainer: Debian Java Maintainers <pkg-java-maintainers at lists.alioth.debian.org>
 Uploaders: Matthias Klose <doko at debian.org>
-Build-Depends: debhelper (>= 11), gcj-6-jdk, libgcj-bc, fastjar, ant, zip, unzip, dpkg (>= 1.13.19), python, time
-Build-Depends-Indep: maven-repo-helper, default-jre-headless
-Build-Conflicts: ecj-bootstrap-gcj (<< 3.8.2)
+Build-Depends: debhelper (>= 11), ant, dpkg (>= 1.13.19)
+Build-Depends-Indep: maven-repo-helper, default-jdk-headless
 Standards-Version: 4.1.3
 Vcs-Git: https://anonscm.debian.org/git/pkg-java/ecj.git
 Vcs-Browser: https://anonscm.debian.org/cgit/pkg-java/ecj.git
 Homepage: http://www.eclipse.org/jdt/core/index.php
 
 Package: ecj
-Architecture: any
-Depends: libecj-java (>= ${source:Version}), ${pkg:gij}, ${pkg:libgcjjar}, java-common (>= 0.23), ${misc:Depends}
-Recommends: ecj-gcj
+Architecture: all
+Depends: libecj-java (>= ${source:Version}), ${misc:Depends}
 Conflicts: ecj-bootstrap (<< 3.2.2), eclipse-ecj
 Replaces: ecj-bootstrap (<< 3.2.2), eclipse-ecj
 Suggests: ant
@@ -25,43 +23,11 @@ Description: standalone version of the Eclipse Java compiler
 
 Package: libecj-java
 Architecture: all
-Depends: java-common (>= 0.23), ${misc:Depends}
+Depends: ${misc:Depends}
 Conflicts: ecj-bootstrap (<< 3.2.2), eclipse-ecj
 Replaces: ecj-bootstrap (<< 3.2.2), eclipse-ecj, ecj (<< 3.3.0-1)
-Suggests: ecj, ant, libecj-java-gcj
+Suggests: ecj, ant
 Description: Eclipse Java compiler (library)
  This package provides a standalone version of the Eclipse JDT compiler library
  which is distributed as part of Eclipse. It passes the JCK (Java Compatibility
  Kit) and is compatible with Java 1.3, 1.4, 1.5, 1.6, 1.7 and 1.8.
-
-Package: libecj-java-gcj
-Architecture: any
-Depends: java-common (>= 0.23), libecj-java (>= ${source:Version}), ${shlibs:Depends}, ${misc:Depends}
-Replaces: ecj-bootstrap-gcj (<< 3.2.2), eclipse-ecj-gcj, ecj-gcj (<< 3.3.0+0728)
-Description: Eclipse Java compiler (native library)
- This package provides a standalone version of the Eclipse JDT compiler library
- which is distributed as part of Eclipse. It passes the JCK (Java Compatibility
- Kit) and is compatible with Java 1.3, 1.4, 1.5, 1.6, 1.7 and 1.8.
- .
- This package contains a native version of libecj-java built using gcj.
-
-Package: ecj1
-Architecture: any
-Depends: ${shlibs:Depends}, ${misc:Depends}
-Description: java byte code compiler used by gcj
- This package provides a standalone version of the java byte code compiler
- used by gcj.
-
-Package: ecj-gcj
-Architecture: any
-Depends: ecj (>= ${source:Version}), libecj-java-gcj (>= ${source:Version}), ${shlibs:Depends}, ${misc:Depends}
-Recommends: java-gcj-compat (>= 1.0.69)
-Replaces: ecj-bootstrap-gcj (<< 3.2.2), eclipse-ecj-gcj
-Conflicts: eclipse-ecj-gcj
-Provides: libecj-java-gcj
-Description: standalone version of the Eclipse Java compiler (native version)
- This package provides a standalone version of the Eclipse JDT compiler which
- is distributed as part of Eclipse. It passes the JCK (Java Compatibility Kit)
- and is compatible with Java 1.3, 1.4, 1.5, 1.6, 1.7 and 1.8.
- .
- This package contains a native version of ecj built using gcj.
diff --git a/debian/copyright b/debian/copyright
index 1d4b699..66ee00a 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -21,23 +21,6 @@ Copyright: 2005, Jerry Haltom <wasabi at larvalstage.net>
            2014-2016, Emmanuel Bourg <ebourg at apache.org>
 License: EPL-1.0
 
-Files: debian/aotcompile.py
-       debian/aot-compile
-Copyright: 2004-2006 Red Hat, Inc.
-License: GPL-2+
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- .
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- GNU General Public License for more details.
- .
- On Debian systems, the full text of the GPL-2 license
- can be found in the file '/usr/share/common-licenses/GPL-2'
-
 License: EPL-1.0
  Eclipse Public License - v 1.0
  .
diff --git a/debian/ecj-gcj.install b/debian/ecj-gcj.install
deleted file mode 100644
index 25c2c6a..0000000
--- a/debian/ecj-gcj.install
+++ /dev/null
@@ -1 +0,0 @@
-debian/tmp/usr/bin/ecj-gcj 
diff --git a/debian/ecj-gcj.lintian-overrides b/debian/ecj-gcj.lintian-overrides
deleted file mode 100644
index 7bec7e3..0000000
--- a/debian/ecj-gcj.lintian-overrides
+++ /dev/null
@@ -1 +0,0 @@
-ecj-gcj binary: binary-or-shlib-defines-rpath
diff --git a/debian/ecj.in b/debian/ecj.in
deleted file mode 100644
index ca4dfa9..0000000
--- a/debian/ecj.in
+++ /dev/null
@@ -1,30 +0,0 @@
-#! /bin/sh
-
-case "$*" in
-  *-bootclasspath*) ;;
-  *)
-    if [ ! -f /usr/lib/jvm/java-gcj/jre/lib/rt.jar ]; then
-      bcoption="-bootclasspath /usr/share/java/libgcj- at ver@.jar"
-    fi
-esac
-
-if [ -x /usr/bin/ecj-gcj ]; then
-
-    exec /usr/bin/ecj-gcj \
-	$bcoption ${1+"$@"}
-
-else
-
-    case $CLASSPATH in
-      */usr/share/java/ecj.jar*) ;;
-      */usr/share/java/eclipse-ecj.jar*) ;;
-      *) CLASSPATH=${CLASSPATH:+$CLASSPATH:}/usr/share/java/eclipse-ecj.jar
-    esac
-    export CLASSPATH
-
-    exec /usr/bin/gij- at ver@ \
-        -Dgnu.gcj.precompiled.db.path=/var/lib/gcj-$ver/classmap.db \
-        -Djava.ext.dirs=/usr/lib/java-ext:/usr/share/java-ext \
-        org.eclipse.jdt.internal.compiler.batch.Main $bcoption ${1+"$@"}
-
-fi
diff --git a/debian/ecj.install b/debian/ecj.install
index 1b34224..6f1dcd2 100644
--- a/debian/ecj.install
+++ b/debian/ecj.install
@@ -1 +1 @@
-debian/tmp/usr/bin/ecj
+debian/wrappers/ecj      /usr/bin/
diff --git a/debian/ecj1.lintian-overrides b/debian/ecj1.lintian-overrides
deleted file mode 100644
index 24f5c3c..0000000
--- a/debian/ecj1.lintian-overrides
+++ /dev/null
@@ -1 +0,0 @@
-ecj1 binary: binary-or-shlib-defines-rpath
diff --git a/debian/libecj-java-gcj.install b/debian/libecj-java-gcj.install
deleted file mode 100644
index a206027..0000000
--- a/debian/libecj-java-gcj.install
+++ /dev/null
@@ -1,2 +0,0 @@
-debian/tmp/usr/lib/gcj/eclipse-ecj.jar.so
-debian/tmp/usr/share/gcj
diff --git a/debian/libecj-java-gcj.postinst b/debian/libecj-java-gcj.postinst
deleted file mode 100644
index d74fea3..0000000
--- a/debian/libecj-java-gcj.postinst
+++ /dev/null
@@ -1,9 +0,0 @@
-#! /bin/sh
-
-set -e
-
-if [ "$1" = configure ] && which rebuild-gcj-db >/dev/null 2>&1; then
-    rebuild-gcj-db
-fi
-
-#DEBHELPER#
diff --git a/debian/libecj-java-gcj.postrm b/debian/libecj-java-gcj.postrm
deleted file mode 100644
index 328faf5..0000000
--- a/debian/libecj-java-gcj.postrm
+++ /dev/null
@@ -1,9 +0,0 @@
-#! /bin/sh
-
-set -e
-
-if [ "$1" = remove ] && which rebuild-gcj-db >/dev/null 2>&1; then
-    rebuild-gcj-db
-fi
-
-#DEBHELPER#
diff --git a/debian/libecj-java.poms b/debian/libecj-java.poms
index 90e6353..51a33c2 100644
--- a/debian/libecj-java.poms
+++ b/debian/libecj-java.poms
@@ -1 +1 @@
-debian/poms/ecj.pom --java-lib --relocate=org.eclipse.jdt:ecj
+debian/poms/ecj.pom --java-lib --usj-name=eclipse-ecj --artifact=target/ecj.jar --relocate=org.eclipse.jdt:ecj
diff --git a/debian/patches/gcc-changes.diff b/debian/patches/gcc-changes.diff
deleted file mode 100644
index 28f1e0f..0000000
--- a/debian/patches/gcc-changes.diff
+++ /dev/null
@@ -1,543 +0,0 @@
---- /dev/null
-+++ b/gcc.properties
-@@ -0,0 +1,5 @@
-+
-+# GCCMain messages.
-+gcc.zipArg=-fzip-target requires argument
-+gcc.zipDepArg=-fzip-dependency requires argument
-+gcc.noClasspath=no classpath specified
---- a/src/org.eclipse.jdt.core/build.xml
-+++ b/src/org.eclipse.jdt.core/build.xml
-@@ -38,9 +38,10 @@
- 				<include name="**/readableNames.props"/>
- 				<include name="META-INF/**"/>
- 				<include name="**/*.properties"/>
-+				<include name="**/*.props"/>
- 				<exclude name="META-INF/eclipse.inf"/>
- 			</fileset>
- 		</zip>
- 		<delete dir="${output}" />
- 	</target>
--</project>
-\ No newline at end of file
-+</project>
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java
-@@ -1233,9 +1233,9 @@
- 		
- 		// by default only lines and source attributes are generated.
- 		this.produceDebugAttributes = ClassFileConstants.ATTR_SOURCE | ClassFileConstants.ATTR_LINES;
--		this.complianceLevel = this.originalComplianceLevel = ClassFileConstants.JDK1_4; // by default be compliant with 1.4
--		this.sourceLevel = this.originalSourceLevel = ClassFileConstants.JDK1_3; //1.3 source behavior by default
--		this.targetJDK = ClassFileConstants.JDK1_2; // default generates for JVM1.2
-+		this.complianceLevel = this.originalComplianceLevel = ClassFileConstants.JDK1_5;
-+		this.sourceLevel = this.originalSourceLevel = ClassFileConstants.JDK1_5;
-+		this.targetJDK = ClassFileConstants.JDK1_5;
- 
- 		this.defaultEncoding = null; // will use the platform default encoding
- 
---- /dev/null
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/GCCMain.java
-@@ -0,0 +1,502 @@
-+/**
-+ * 
-+ */
-+package org.eclipse.jdt.internal.compiler.batch;
-+
-+import java.io.BufferedOutputStream;
-+import java.io.BufferedReader;
-+import java.io.ByteArrayInputStream;
-+import java.io.File;
-+import java.io.FileOutputStream;
-+import java.io.FileReader;
-+import java.io.IOException;
-+import java.io.InputStreamReader;
-+import java.io.OutputStream;
-+import java.io.PrintWriter;
-+import java.io.UnsupportedEncodingException;
-+import java.util.ArrayList;
-+import java.util.HashSet;
-+import java.util.Iterator;
-+import java.util.Map;
-+import java.util.StringTokenizer;
-+import java.util.zip.CRC32;
-+import java.util.zip.ZipEntry;
-+import java.util.zip.ZipOutputStream;
-+
-+import org.eclipse.jdt.internal.compiler.ClassFile;
-+import org.eclipse.jdt.internal.compiler.CompilationResult;
-+import org.eclipse.jdt.internal.compiler.env.AccessRestriction;
-+import org.eclipse.jdt.internal.compiler.env.AccessRule;
-+import org.eclipse.jdt.internal.compiler.env.AccessRuleSet;
-+import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
-+import org.eclipse.jdt.internal.compiler.problem.ProblemSeverities;
-+import org.eclipse.jdt.internal.compiler.util.Messages;
-+import org.eclipse.jdt.internal.compiler.util.SuffixConstants;
-+
-+/**
-+ * This is an alternate entry point for the command-line compiler which
-+ * is simpler to integrate into GCC.  In particular the option processing
-+ * is more GNU-like and the recognized options are similar to those supported
-+ * by other GCC front ends.
-+ */
-+public class GCCMain extends Main {
-+
-+	// All the compilation units specified on the command line.
-+	private HashSet commandLineCompilationUnits = new HashSet();
-+	// True if we are only checking syntax.
-+	private boolean syntaxOnly;
-+	// If not null, the name of the output zip file.
-+	// If null, we are generating class files in the file system,
-+	// not a zip file.
-+	private String zipDestination;
-+	// The zip stream to which we're writing, or null if it hasn't been opened.
-+	private ZipOutputStream zipStream;
-+	
-+	// If not null, the name of the zip file to which dependency class files
-+	// should be written.
-+	private String zipDependencyDestination;
-+	// The zip stream to which dependency files should be written.
-+	private ZipOutputStream zipDependencyStream;
-+
-+	public GCCMain(PrintWriter outWriter, PrintWriter errWriter,
-+			boolean systemExitWhenFinished) {
-+		super(outWriter, errWriter, systemExitWhenFinished);
-+		this.logger.setEmacs();
-+	}
-+
-+	public GCCMain(PrintWriter outWriter, PrintWriter errWriter,
-+			boolean systemExitWhenFinished, Map customDefaultOptions) {
-+		super(outWriter, errWriter, systemExitWhenFinished,
-+				customDefaultOptions);
-+		this.logger.setEmacs();
-+	}
-+
-+	private void fail(Exception t) {
-+		t.printStackTrace();
-+		this.logger.logException(t);
-+		System.exit(1);
-+	}
-+
-+	public CompilationUnit[] getCompilationUnits() {
-+		CompilationUnit[] units = super.getCompilationUnits();
-+		for (int i = 0; i < units.length; ++i)
-+			this.commandLineCompilationUnits.add(units[i]);
-+		return units;
-+	}
-+
-+	private String combine(char[] one, char[] two) {
-+		StringBuffer b = new StringBuffer();
-+		b.append(one);
-+		b.append(two);
-+		return b.toString();
-+	}
-+
-+	private ZipOutputStream getZipOutput() throws IOException {
-+		if (this.zipDestination != null && this.zipStream == null) {
-+			OutputStream os;
-+			if ("-".equals(this.zipDestination)) { //$NON-NLS-1$
-+				os = System.out;
-+			} else {
-+				os = new FileOutputStream(this.zipDestination);
-+			}
-+			zipStream = new ZipOutputStream(new BufferedOutputStream(os));
-+			zipStream.setMethod(ZipOutputStream.STORED);
-+			// Sun/OpenJDK require at least one entry in the zip file.
-+			ZipEntry entry = new ZipEntry(".dummy");
-+			byte[] contents = new byte[0];
-+			CRC32 crc = new CRC32();
-+			crc.update(contents);
-+			entry.setSize(contents.length);
-+			entry.setCrc(crc.getValue());
-+			zipStream.putNextEntry(entry);
-+			zipStream.write(contents);
-+			zipStream.closeEntry();
-+		}
-+		return zipStream;
-+	}
-+
-+	private ZipOutputStream getDependencyOutput() throws IOException {
-+		if (this.zipDependencyDestination != null && this.zipDependencyStream == null) {
-+			OutputStream os = new FileOutputStream(zipDependencyDestination);
-+			zipDependencyStream = new ZipOutputStream(new BufferedOutputStream(os));
-+			zipDependencyStream.setMethod(ZipOutputStream.STORED);
-+			// Sun/OpenJDK require at least one entry in the zip file.
-+			ZipEntry entry = new ZipEntry(".dummy");
-+			byte[] contents = new byte[0];
-+			CRC32 crc = new CRC32();
-+			crc.update(contents);
-+			entry.setSize(contents.length);
-+			entry.setCrc(crc.getValue());
-+			zipDependencyStream.putNextEntry(entry);
-+			zipDependencyStream.write(contents);
-+			zipDependencyStream.closeEntry();
-+		}
-+		return zipDependencyStream;
-+	}
-+
-+	public void outputClassFiles(CompilationResult unitResult) {
-+		if (this.syntaxOnly) {
-+			return;
-+		}
-+		if (this.zipDestination == null) {
-+			// Nothing special to do here.
-+			super.outputClassFiles(unitResult);
-+			return;
-+		}
-+		if (unitResult == null || unitResult.hasErrors()) {
-+			return;
-+		}
-+
-+		// If we are compiling with indirect dispatch, we don't need
-+		// any dependent classes.  If we are using the C++ ABI, then we
-+		// do need the dependencies in order to do proper layout.
-+		boolean gcjCompile = this.commandLineCompilationUnits.contains(unitResult.getCompilationUnit());
-+		if (this.zipDependencyDestination == null && !gcjCompile) {
-+			return;
-+		}
-+
-+		try {
-+			ZipOutputStream dest = gcjCompile ? getZipOutput() : getDependencyOutput();
-+			ClassFile[] classFiles = unitResult.getClassFiles();
-+			for (int i = 0; i < classFiles.length; ++i) {
-+				ClassFile classFile = classFiles[i];
-+				String filename = combine(classFile.fileName(), SuffixConstants.SUFFIX_class);
-+				if (this.verbose)
-+					this.out.println(
-+							Messages.bind(
-+									Messages.compilation_write,
-+									new String[] {
-+								String.valueOf(this.exportedClassFilesCounter+1),
-+								filename
-+							}));
-+				ZipEntry entry = new ZipEntry(filename);
-+				byte[] contents = classFile.getBytes();
-+				CRC32 crc = new CRC32();
-+				crc.update(contents);
-+				entry.setSize(contents.length);
-+				entry.setCrc(crc.getValue());
-+				dest.putNextEntry(entry);
-+				dest.write(contents);
-+				dest.closeEntry();
-+			}
-+		} catch (IOException err) {
-+			fail(err);
-+		}
-+	}
-+	
-+	private String getArgument(String option) {
-+		int index = option.indexOf('=');
-+		return option.substring(index + 1);
-+	}
-+
-+	private void addPath(ArrayList result, String currentClasspathName) {
-+		String customEncoding = null;
-+		AccessRule[] accessRules = new AccessRule[0];
-+		AccessRuleSet accessRuleSet = new AccessRuleSet(accessRules, AccessRestriction.COMMAND_LINE, currentClasspathName);
-+		FileSystem.Classpath currentClasspath = FileSystem
-+				.getClasspath(currentClasspathName,
-+						customEncoding, accessRuleSet);
-+		if (currentClasspath != null) {
-+			result.add(currentClasspath);
-+		}
-+	}
-+	
-+	private void parsePath(ArrayList result, String path) {
-+		StringTokenizer iter = new StringTokenizer(path, File.pathSeparator);
-+		while (iter.hasMoreTokens()) {
-+			addPath(result, iter.nextToken());
-+		}
-+	}
-+
-+	protected void handleWarningToken(String token, boolean isEnabling) {
-+		// Recognize this for compatibility with older versions of gcj.
-+		if ("deprecated".equals(token)) //$NON-NLS-1$
-+			token = "deprecation"; //$NON-NLS-1$
-+		else if ("static-access".equals(token)   //$NON-NLS-1$
-+				|| "dep-ann".equals(token) //$NON-NLS-1$
-+				|| "over-ann".equals(token)) { //$NON-NLS-1$
-+			// Some exceptions to the warning naming rule.
-+		} else if ("extraneous-semicolon".equals(token)) { //$NON-NLS-1$
-+			// Compatibility with earlier versions of gcj.
-+			token = "semicolon"; //$NON-NLS-1$
-+		} else {
-+			// Turn "foo-bar-baz" into eclipse-style "fooBarBaz".
-+			StringBuffer newToken = new StringBuffer(token.length());
-+			StringTokenizer t = new StringTokenizer(token, "-"); //$NON-NLS-1$
-+			boolean first = true;
-+			while (t.hasMoreTokens()) {
-+				String next = t.nextToken();
-+				if (first) {
-+					newToken.append(next);
-+					first = false;
-+				} else {
-+					newToken.append(Character.toUpperCase(next.charAt(0)));
-+					newToken.append(next.substring(1));
-+				}
-+			}
-+			token = newToken.toString();
-+		}
-+		super.handleWarningToken(token, isEnabling);
-+	}
-+
-+	private void turnWarningsToErrors() {
-+		Object[] entries = this.options.entrySet().toArray();
-+		for (int i = 0, max = entries.length; i < max; i++) {
-+			Map.Entry entry = (Map.Entry) entries[i];
-+			if (!(entry.getKey() instanceof String))
-+				continue;
-+			if (!(entry.getValue() instanceof String))
-+				continue;
-+			if (((String) entry.getValue()).equals(CompilerOptions.WARNING)) {
-+				this.options.put(entry.getKey(), CompilerOptions.ERROR);
-+			}
-+		}
-+	}
-+
-+	/**
-+	 * Set the debug level to the indicated value.  The level should be
-+	 * between 0 and 2, inclusive, but this is not checked.
-+	 * @param level the debug level
-+	 */
-+	private void setDebugLevel(int level) {
-+		this.options.put(
-+				CompilerOptions.OPTION_LocalVariableAttribute,
-+				level > 1 ? CompilerOptions.GENERATE : CompilerOptions.DO_NOT_GENERATE);
-+		this.options.put(
-+				CompilerOptions.OPTION_LineNumberAttribute,
-+				level > 0 ? CompilerOptions.GENERATE : CompilerOptions.DO_NOT_GENERATE);
-+		this.options.put(
-+				CompilerOptions.OPTION_SourceFileAttribute,
-+				CompilerOptions.GENERATE);
-+	}
-+
-+	private void readFileList(String file, ArrayList result) {
-+		try {
-+			BufferedReader b = new BufferedReader(new FileReader(file));
-+			String line;
-+			while ((line = b.readLine()) != null) {
-+				if (line.endsWith(SUFFIX_STRING_java))
-+					result.add(line);
-+			}
-+			b.close();
-+		} catch (IOException err) {
-+			fail(err);
-+		}
-+	}
-+	
-+	private void readAllFileListFiles(ArrayList fileList, ArrayList result) {
-+		Iterator it = fileList.iterator();
-+		while (it.hasNext()) {
-+			readFileList((String) it.next(), result);
-+		}
-+	}
-+
-+	private void handleWall(boolean enable) {
-+		// A somewhat arbitrary list.  We use the GCC names
-+		// here, and the local handleWarningToken translates
-+		// for us.
-+		handleWarningToken("constructor-name", enable);
-+		handleWarningToken("pkg-default-method", enable);
-+		handleWarningToken("masked-catch-block", enable);
-+		handleWarningToken("all-deprecation", enable);
-+		handleWarningToken("unused-local", enable);
-+		handleWarningToken("unused-label", enable);
-+		handleWarningToken("static-receiver", enable);
-+		handleWarningToken("indirect-static", enable);
-+		handleWarningToken("no-effect-assign", enable);
-+		handleWarningToken("char-concat", enable);
-+		handleWarningToken("useless-type-check", enable);
-+		handleWarningToken("final-bound", enable);
-+		handleWarningToken("assert-identifier", enable);
-+		handleWarningToken("enum-identifier", enable);
-+		handleWarningToken("finally", enable);
-+		handleWarningToken("varargs-cast", enable);
-+		handleWarningToken("unused", enable);
-+		handleWarningToken("forbidden", enable);
-+	}
-+
-+	public void configure(String[] argv) {
-+		if ((argv == null) || (argv.length == 0)) {
-+			// This is a "can't happen".
-+			System.exit(1);
-+		}
-+
-+		ArrayList files = new ArrayList();
-+		ArrayList otherFiles = new ArrayList();
-+		String classpath = null;
-+		boolean haveFileList = false;
-+		boolean inhibitAllWarnings = false;
-+		boolean treatWarningsAsErrors = false;
-+
-+		for (int i = 0; i < argv.length; ++i) {
-+			String currentArg = argv[i];
-+			
-+			if (currentArg.startsWith("-fencoding=")) { //$NON-NLS-1$
-+				// Simply accept the last one.
-+				String encoding = getArgument(currentArg);
-+				try { // ensure encoding is supported
-+					new InputStreamReader(new ByteArrayInputStream(new byte[0]), encoding);
-+				} catch (UnsupportedEncodingException e) {
-+					throw new IllegalArgumentException(
-+						this.bind("configure.unsupportedEncoding", encoding)); //$NON-NLS-1$
-+				}
-+				this.options.put(CompilerOptions.OPTION_Encoding, encoding);
-+			} else if (currentArg.startsWith("-foutput-class-dir=")) { //$NON-NLS-1$
-+				String arg = getArgument(currentArg);
-+				if (this.destinationPath != null) {
-+					StringBuffer errorMessage = new StringBuffer();
-+					errorMessage.append("-d"); //$NON-NLS-1$
-+					errorMessage.append(' ');
-+					errorMessage.append(arg);
-+					throw new IllegalArgumentException(
-+						this.bind("configure.duplicateOutputPath", errorMessage.toString())); //$NON-NLS-1$
-+				}
-+				this.setDestinationPath(arg);
-+			} else if (currentArg.startsWith("-fbootclasspath=")) { //$NON-NLS-1$
-+				classpath = getArgument(currentArg);
-+			} else if (currentArg.equals("-fzip-target")) { //$NON-NLS-1$
-+				++i;
-+				if (i >= argv.length)
-+					throw new IllegalArgumentException(this.bind("gcc.zipArg")); //$NON-NLS-1$
-+				this.zipDestination = argv[i];
-+			} else if (currentArg.equals("-fzip-dependency")) { //$NON-NLS-1$
-+				++i;
-+				if (i >= argv.length)
-+					throw new IllegalArgumentException(this.bind("gcc.zipDepArg")); //$NON-NLS-1$
-+				this.zipDependencyDestination = argv[i];
-+			} else if (currentArg.startsWith("-g")) { //$NON-NLS-1$
-+				if (currentArg.equals("-g0")) { //$NON-NLS-1$
-+					setDebugLevel(0);
-+				} else if (currentArg.equals("-g2") || currentArg.equals("-g3") //$NON-NLS-1$ //$NON-NLS-2$
-+						|| currentArg.equals("-g")) { //$NON-NLS-1$
-+					setDebugLevel(2);
-+				} else {
-+					// Handle -g1 but also things like -gstabs.
-+					setDebugLevel(1);
-+				}
-+			} else if (currentArg.equals("-Werror")) { //$NON-NLS-1$
-+				treatWarningsAsErrors = true;
-+			} else if (currentArg.equals("-Wno-error")) { //$NON-NLS-1$
-+				treatWarningsAsErrors = false;
-+			} else if (currentArg.equals("-Wall")) { //$NON-NLS-1$
-+				handleWall(true);
-+			} else if (currentArg.equals("-Wno-all")) { //$NON-NLS-1$
-+				handleWall(false);
-+			} else if (currentArg.startsWith("-Wno-")) { //$NON-NLS-1$
-+				handleWarningToken(currentArg.substring(5), false);
-+			} else if (currentArg.startsWith("-W")) { //$NON-NLS-1$
-+				handleWarningToken(currentArg.substring(2), true);
-+			} else if (currentArg.equals("-w")) { //$NON-NLS-1$
-+				inhibitAllWarnings = true;
-+			} else if (currentArg.startsWith("-O")) { //$NON-NLS-1$
-+				// Ignore.
-+			} else if (currentArg.equals("-v")) { //$NON-NLS-1$
-+				this.verbose = true;
-+			} else if (currentArg.equals("-fsyntax-only")) { //$NON-NLS-1$
-+				this.syntaxOnly = true;
-+			} else if (currentArg.startsWith("-fsource=")) { //$NON-NLS-1$
-+				currentArg = getArgument(currentArg);
-+				if (currentArg.equals("1.3")) { //$NON-NLS-1$
-+					this.options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_3);
-+				} else if (currentArg.equals("1.4")) { //$NON-NLS-1$
-+					this.options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_4);
-+				} else if (currentArg.equals("1.5") || currentArg.equals("5") || currentArg.equals("5.0")) { //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
-+					this.options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_5);
-+				} else if (currentArg.equals("1.6") || currentArg.equals("6") || currentArg.equals("6.0")) { //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
-+					this.options.put(CompilerOptions.OPTION_Source, CompilerOptions.VERSION_1_6);
-+				} else {
-+					throw new IllegalArgumentException(this.bind("configure.source", currentArg)); //$NON-NLS-1$
-+				}
-+			} else if (currentArg.startsWith("-ftarget=")) { //$NON-NLS-1$
-+				currentArg = getArgument(currentArg);
-+				if (currentArg.equals("1.1")) { //$NON-NLS-1$
-+					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_1);
-+				} else if (currentArg.equals("1.2")) { //$NON-NLS-1$
-+					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_2);
-+				} else if (currentArg.equals("1.3")) { //$NON-NLS-1$
-+					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_3);
-+				} else if (currentArg.equals("1.4")) { //$NON-NLS-1$
-+					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_4);
-+				} else if (currentArg.equals("1.5") || currentArg.equals("5") || currentArg.equals("5.0")) { //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
-+					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_5);
-+				} else if (currentArg.equals("1.6") || currentArg.equals("6") || currentArg.equals("6.0")) { //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
-+					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_1_6);
-+				} else if (currentArg.equals("jsr14")) { //$NON-NLS-1$
-+					this.options.put(CompilerOptions.OPTION_TargetPlatform, CompilerOptions.VERSION_JSR14);
-+				} else {
-+					throw new IllegalArgumentException(this.bind("configure.targetJDK", currentArg)); //$NON-NLS-1$
-+				}
-+			} else if (currentArg.equals("-ffilelist-file")) { //$NON-NLS-1$
-+				haveFileList = true;
-+			} else if (currentArg.endsWith(SuffixConstants.SUFFIX_STRING_java)) {
-+				files.add(currentArg);
-+			} else if (currentArg.charAt(0) == '-'){
-+				// FIXME: error if not a file?
-+			} else {
-+				otherFiles.add(currentArg);
-+			}
-+		}
-+
-+		// Read the file list file.  We read them all, but really there
-+		// will only be one.
-+		if (haveFileList)
-+			readAllFileListFiles(otherFiles, files);
-+
-+		this.filenames = (String[]) files.toArray(new String[0]);
-+		this.encodings = new String[this.filenames.length];
-+		this.destinationPaths = new String[this.filenames.length];
-+		for (int i = 0; i < this.filenames.length; ++i)
-+			this.destinationPaths[i] = this.destinationPath;
-+		
-+		// Classpath processing.
-+		ArrayList result = new ArrayList();
-+		if (classpath == null)
-+			throw new IllegalArgumentException(this.bind("gcc.noClasspath")); //$NON-NLS-1$
-+		parsePath(result, classpath);
-+
-+		// We must always create both output files, even if one is not used.
-+		// That way we will always pass valid zip file on to jc1.
-+		try {
-+			getZipOutput();
-+			getDependencyOutput();
-+		} catch (IOException err) {
-+			fail(err);
-+		}
-+
-+		if (inhibitAllWarnings)
-+			disableAll(ProblemSeverities.Warning);
-+		if (treatWarningsAsErrors)
-+			turnWarningsToErrors();
-+
-+		this.checkedClasspaths = new FileSystem.Classpath[result.size()];
-+		result.toArray(this.checkedClasspaths);
-+
-+		this.logger.logCommandLineArguments(argv);
-+		this.logger.logOptions(this.options);
-+		this.logger.logClasspath(this.checkedClasspaths);
-+
-+		this.maxRepetition = 1;
-+	}
-+
-+	public boolean compile(String[] argv) {
-+		boolean result = super.compile(argv);
-+		try {
-+			if (zipStream != null) {
-+				zipStream.finish();
-+				zipStream.close();
-+			}
-+			if (zipDependencyStream != null) {
-+				zipDependencyStream.finish();
-+				zipDependencyStream.close();
-+			}
-+		} catch (IOException err) {
-+			fail(err);
-+		}
-+		return result;
-+	}
-+
-+	public static void main(String[] argv) {
-+		boolean result = new GCCMain(new PrintWriter(System.out), new PrintWriter(System.err), false).compile(argv);
-+		System.exit(result ? 0 : 1);
-+	}
-+}
diff --git a/debian/patches/remove-overrides.diff b/debian/patches/remove-overrides.diff
deleted file mode 100644
index 079ec2f..0000000
--- a/debian/patches/remove-overrides.diff
+++ /dev/null
@@ -1,508 +0,0 @@
-Description: Fixes compilation errors caused by @Override annotations (bug?)
-Author: Emmanuel Bourg <ebourg at apache.org>
-Forwarded: not-needed
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding18.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/lookup/CaptureBinding18.java
-@@ -241,15 +241,12 @@
- 				final CaptureBinding18 newCapture = (CaptureBinding18) clone(enclosingType());
- 				newCapture.tagBits = this.tagBits;
- 				Substitution substitution = new Substitution() {
--					@Override
- 					public TypeBinding substitute(TypeVariableBinding typeVariable) {
- 						return  (typeVariable == CaptureBinding18.this) ? newCapture : typeVariable; //$IDENTITY-COMPARISON$
- 					}
--					@Override
- 					public boolean isRawSubstitution() {
- 						return false;
- 					}
--					@Override
- 					public LookupEnvironment environment() {
- 						return CaptureBinding18.this.environment;
- 					}
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/classfmt/NonNullDefaultAwareTypeAnnotationWalker.java
-@@ -76,11 +76,9 @@
- 						'L', CharOperation.concatWith(environment.getNonNullAnnotationName(), '/'), ';');
- 		// create the synthetic annotation:
- 		return new IBinaryAnnotation() {
--			@Override
- 			public char[] getTypeName() {
- 				return nonNullAnnotationName;
- 			}
--			@Override
- 			public IBinaryElementValuePair[] getElementValuePairs() {
- 				return null;
- 			}
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/util/Sorting.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/util/Sorting.java
-@@ -112,7 +112,6 @@
- 	/** Sort inference variables by rank. */
- 	public static void sortInferenceVariables(InferenceVariable[] variables) {
- 		Arrays.sort(variables, new Comparator<InferenceVariable>() {
--			@Override
- 			public int compare(InferenceVariable iv1, InferenceVariable iv2) {
- 				return iv1.rank - iv2.rank;
- 			}
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/MemberValuePair.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/MemberValuePair.java
-@@ -106,7 +106,6 @@
- 		// the next check may need deferring:
- 		final boolean[] shouldExit = new boolean[1];
- 		Runnable check = new Runnable() {
--			@Override
- 			public void run() {
- 				if (!(MemberValuePair.this.value.isConstantValueOfTypeAssignableToType(valueType, requiredType)
- 						|| valueType.isCompatibleWith(requiredType))) {
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/classfmt/TypeAnnotationWalker.java
-@@ -44,17 +44,14 @@
- 
- 	// ==== filter by top-level targetType: ====
- 	
--	@Override
- 	public ITypeAnnotationWalker toField() {
- 		return toTarget(AnnotationTargetTypeConstants.FIELD);
- 	}
- 
--	@Override
- 	public ITypeAnnotationWalker toMethodReturn() {
- 		return toTarget(AnnotationTargetTypeConstants.METHOD_RETURN);
- 	}
- 
--	@Override
- 	public ITypeAnnotationWalker toReceiver() {
- 		return toTarget(AnnotationTargetTypeConstants.METHOD_RECEIVER);
- 	}
-@@ -75,7 +72,6 @@
- 		return restrict(newMatches, 0);
- 	}
- 
--	@Override
- 	public ITypeAnnotationWalker toTypeParameter(boolean isClassTypeParameter, int rank) {
- 		long newMatches = this.matches;
- 		if (newMatches == 0)
-@@ -92,7 +88,6 @@
- 		return restrict(newMatches, 0);		
- 	}
- 
--	@Override
- 	public ITypeAnnotationWalker toTypeParameterBounds(boolean isClassTypeParameter, int parameterRank) {
- 		long newMatches = this.matches;
- 		if (newMatches == 0)
-@@ -110,7 +105,6 @@
- 		return restrict(newMatches, 0);	
- 	}
- 
--	@Override
- 	public ITypeAnnotationWalker toTypeBound(short boundIndex) {
- 		long newMatches = this.matches;
- 		if (newMatches == 0)
-@@ -131,7 +125,6 @@
- 	 * {@inheritDoc}
- 	 * <p>(superTypesSignature is ignored in this implementation).</p>
- 	 */
--	@Override
- 	public ITypeAnnotationWalker toSupertype(short index, char[] superTypeSignature) {
- 		long newMatches = this.matches;
- 		if (newMatches == 0)
-@@ -147,7 +140,6 @@
- 		return restrict(newMatches, 0);		
- 	}
- 
--	@Override
- 	public ITypeAnnotationWalker toMethodParameter(short index) {
- 		long newMatches = this.matches;
- 		if (newMatches == 0)
-@@ -163,7 +155,6 @@
- 		return restrict(newMatches, 0);		
- 	}
- 
--	@Override
- 	public ITypeAnnotationWalker toThrows(int index) {
- 		long newMatches = this.matches;
- 		if (newMatches == 0)
-@@ -181,7 +172,6 @@
- 
- 	// ==== descending into details: ====
- 
--	@Override
- 	public ITypeAnnotationWalker toTypeArgument(int rank) {
- 		// like toNextDetail() but also checking byte 2 against rank
- 		long newMatches = this.matches;
-@@ -201,7 +191,6 @@
- 		return restrict(newMatches, this.pathPtr+2);		
- 	}
- 
--	@Override
- 	public ITypeAnnotationWalker toWildcardBound() {
- 		long newMatches = this.matches;
- 		if (newMatches == 0)
-@@ -219,12 +208,10 @@
- 		return restrict(newMatches, this.pathPtr+2);		
- 	}
- 
--	@Override
- 	public ITypeAnnotationWalker toNextArrayDimension() {
- 		return toNextDetail(AnnotationTargetTypeConstants.NEXT_ARRAY_DIMENSION);
- 	}
- 	
--	@Override
- 	public ITypeAnnotationWalker toNextNestedType() {
- 		return toNextDetail(AnnotationTargetTypeConstants.NEXT_NESTED_TYPE);
- 	}
-@@ -250,7 +237,6 @@
- 	
- 	// ==== leaves: the actual annotations: ====
- 	
--	@Override
- 	public IBinaryAnnotation[] getAnnotationsAtCursor(int currentTypeId) {
- 		int length = this.typeAnnotations.length;
- 		IBinaryAnnotation[] filtered = new IBinaryAnnotation[length];
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/classfmt/ExternalAnnotationProvider.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/classfmt/ExternalAnnotationProvider.java
-@@ -210,7 +210,6 @@
- 	}
- 
- 	abstract class SingleMarkerAnnotation implements IBinaryAnnotation {
--		@Override
- 		public IBinaryElementValuePair[] getElementValuePairs() {
- 			return ElementValuePairInfo.NoMembers;
- 		}
-@@ -224,12 +223,12 @@
- 	void initAnnotations(final LookupEnvironment environment) {
- 		if (this.NULLABLE_ANNOTATION == null) {
- 			this.NULLABLE_ANNOTATION = new SingleMarkerAnnotation() {
--				@Override public char[] getTypeName() { return getBinaryTypeName(environment.getNullableAnnotationName()); }
-+				public char[] getTypeName() { return getBinaryTypeName(environment.getNullableAnnotationName()); }
- 			};
- 		}
- 		if (this.NONNULL_ANNOTATION == null) {
- 			this.NONNULL_ANNOTATION = new SingleMarkerAnnotation() {
--				@Override public char[] getTypeName() { return getBinaryTypeName(environment.getNonNullAnnotationName()); }
-+				public char[] getTypeName() { return getBinaryTypeName(environment.getNonNullAnnotationName()); }
- 			};
- 		}
- 	}
-@@ -306,32 +305,26 @@
- 			return this.wrapper;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toReceiver() {
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toTypeParameter(boolean isClassTypeParameter, int rank) {
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toTypeParameterBounds(boolean isClassTypeParameter, int parameterRank) {
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toTypeBound(short boundIndex) {
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toSupertype(short index, char[] superTypeSignature) {
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toTypeArgument(int rank) {
- 			if (rank == 0) {
- 				int start = CharOperation.indexOf('<', this.source, this.pos) + 1;
-@@ -354,7 +347,6 @@
- 		    return new MethodAnnotationWalker(this.source, next,	this.environment);
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toWildcardBound() {
- 			switch (this.source[this.pos]) {
- 				case '-': 
-@@ -365,7 +357,6 @@
- 			}			
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toNextArrayDimension() {
- 			if (this.source[this.pos] == '[') {
- 				int newPos = this.pos+1;
-@@ -377,12 +368,10 @@
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toNextNestedType() {
- 			return this; // FIXME(stephan)
- 		}
- 
--		@Override
- 		public IBinaryAnnotation[] getAnnotationsAtCursor(int currentTypeId) {
- 			if (this.pos != -1 && this.pos < this.source.length-2) {
- 				switch (this.source[this.pos]) {
-@@ -451,7 +440,6 @@
- 			}
- 		}
- 		
--		@Override
- 		public ITypeAnnotationWalker toTypeParameter(boolean isClassTypeParameter, int rank) {
- 			if (rank == this.currentRank)
- 				return this;
-@@ -460,12 +448,10 @@
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toTypeParameterBounds(boolean isClassTypeParameter, int parameterRank) {
- 			return new TypeParametersAnnotationWalker(this.source, this.rankStarts[parameterRank], parameterRank, this.rankStarts, this.environment);
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toTypeBound(short boundIndex) {
- 			// assume we are positioned either at the start of the bounded type parameter
- 			// or at the start of a previous type bound
-@@ -485,27 +471,22 @@
- 			return this;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toField() {
- 			throw new UnsupportedOperationException("Cannot navigate to fields"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toMethodReturn() {
- 			throw new UnsupportedOperationException("Cannot navigate to method return"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toMethodParameter(short index) {
- 			throw new UnsupportedOperationException("Cannot navigate to method parameter"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toThrows(int index) {
- 			throw new UnsupportedOperationException("Cannot navigate to throws"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public IBinaryAnnotation[] getAnnotationsAtCursor(int currentTypeId) {
- 			if (this.pos != -1 && this.pos < this.source.length-1) {
- 				switch (this.source[this.pos]) {
-@@ -528,22 +509,18 @@
- 
- 		// actual implementation is inherited, main entries: toTypeArgument & getAnnotationsAtCursor
- 
--		@Override
- 		public ITypeAnnotationWalker toField() {
- 			throw new UnsupportedOperationException("Supertype has no field annotations"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toMethodReturn() {
- 			throw new UnsupportedOperationException("Supertype has no method return"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toMethodParameter(short index) {
- 			throw new UnsupportedOperationException("Supertype has no method parameter"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toThrows(int index) {
- 			throw new UnsupportedOperationException("Supertype has no throws"); //$NON-NLS-1$
- 		}
-@@ -572,7 +549,6 @@
- 			return end;
- 		}
- 		
--		@Override
- 		public ITypeAnnotationWalker toTypeParameter(boolean isClassTypeParameter, int rank) {
- 			if (this.source[0] == '<') {
- 				if (this.typeParametersWalker == null)
-@@ -582,14 +558,12 @@
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toTypeParameterBounds(boolean isClassTypeParameter, int parameterRank) {
- 			if (this.typeParametersWalker != null)
- 				return this.typeParametersWalker.toTypeParameterBounds(isClassTypeParameter, parameterRank);
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toMethodReturn() {
- 			int close = CharOperation.indexOf(')', this.source);
- 			if (close != -1) {
-@@ -600,7 +574,6 @@
- 			return ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toMethodParameter(short index) {
- 			if (index == 0) {
- 				int start = CharOperation.indexOf('(', this.source) + 1;
-@@ -618,17 +591,14 @@
- 		    return this;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toThrows(int index) {
- 			return this;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toField() {
- 			throw new UnsupportedOperationException("Methods have no fields"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public int getParameterCount() {
- 			int count = 0;
- 			int start = CharOperation.indexOf('(', this.source) + 1;
-@@ -645,22 +615,18 @@
- 			super(source, pos, environment);
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toField() {
- 			return this;
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toMethodReturn() {
- 			throw new UnsupportedOperationException("Field has no method return"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toMethodParameter(short index) {
- 			throw new UnsupportedOperationException("Field has no method parameter"); //$NON-NLS-1$
- 		}
- 
--		@Override
- 		public ITypeAnnotationWalker toThrows(int index) {
- 			throw new UnsupportedOperationException("Field has no throws"); //$NON-NLS-1$
- 		}
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/ClasspathJar.java
-@@ -125,7 +125,6 @@
- 	}
- 	return null;
- }
-- at Override
- public boolean hasAnnotationFileFor(String qualifiedTypeName) {
- 	return this.zipFile.getEntry(qualifiedTypeName+'.'+ExternalAnnotationProvider.ANNOTION_FILE_EXTENSION) != null; 
- }
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/ClasspathDirectory.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/ClasspathDirectory.java
-@@ -153,7 +153,6 @@
- 	return sourceExists ? null : findSourceSecondaryType(typeName, qualifiedPackageName, qualifiedBinaryFileName); /* only secondary types */
- }
- 
-- at Override
- public boolean hasAnnotationFileFor(String qualifiedTypeName) {
- 	int pos = qualifiedTypeName.lastIndexOf('/');
- 	if (pos != -1 && (pos + 1 < qualifiedTypeName.length())) {
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/FakedTrackingVariable.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/FakedTrackingVariable.java
-@@ -781,7 +781,6 @@
- 			this.atExit = atExit;
- 			setUpForStage(Stage.OuterLess);
- 		}
--		@Override
- 		public boolean hasNext() {
- 			FakedTrackingVariable trackingVar;
- 			switch (this.stage) {
-@@ -834,11 +833,9 @@
- 			this.iterator = this.varSet.iterator();
- 			this.stage = nextStage;
- 		}
--		@Override
- 		public FakedTrackingVariable next() {
- 			return this.next;
- 		}
--		@Override
- 		public void remove() {
- 			throw new UnsupportedOperationException();
- 		}
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/classfmt/ClassFileReader.java
-@@ -456,7 +456,6 @@
-  * If 'member' is given it must be either of IBinaryField or IBinaryMethod, in which case we're seeking annotations for that member.
-  * Otherwise we're seeking annotations for top-level elements of a type (type parameters & super types).
-  */
-- at Override
- public ITypeAnnotationWalker enrichWithExternalAnnotationsFor(ITypeAnnotationWalker walker, Object member, LookupEnvironment environment) {
- 	if (walker == ITypeAnnotationWalker.EMPTY_ANNOTATION_WALKER && this.annotationProvider != null) {
- 		if (member == null) {
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/BatchCompilerRequestor.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/BatchCompilerRequestor.java
-@@ -22,7 +22,6 @@
-         this.compiler = compiler;
-     }
- 
--    @Override
-     public void acceptResult(CompilationResult compilationResult) {
-         if (compilationResult.lineSeparatorPositions != null) {
-             int unitLineCount = compilationResult.lineSeparatorPositions.length;
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java
-@@ -499,7 +499,6 @@
- 		// Nothing to do.
- 	}
- 	
--	@Override
- 	public void registerResult(TypeBinding targetType, MethodBinding method) {
- 		// Nothing to do.
- 	}
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
-@@ -716,7 +716,6 @@
- 	this.inferenceContexts.put(method, infCtx18);
- }
- 
-- at Override
- public void registerResult(TypeBinding targetType, MethodBinding method) {
- 	if (method != null && method.isConstructor()) { // ignore the factory.
- 		if (this.solutionsPerTargetType == null)
-@@ -737,4 +736,4 @@
- public InferenceContext18 freshInferenceContext(Scope scope) {
- 	return new InferenceContext18(scope, this.arguments, this, this.outerInferenceContext);
- }
--}
-\ No newline at end of file
-+}
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/lookup/InvocationSite.java
-@@ -57,7 +57,6 @@
- 		public boolean receiverIsImplicitThis() { return false; }
- 		public InferenceContext18 freshInferenceContext(Scope scope) { return null; }
- 		public ExpressionContext getExpressionContext() { return ExpressionContext.VANILLA_CONTEXT; }
--		@Override
- 		public boolean isQualifiedSuper() { return false; }
- 		public boolean checkingPotentialCompatibility() { return false; }
- 		public void acceptPotentiallyCompatibleMethods(MethodBinding[] methods) { /* ignore */ }
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
-@@ -1058,7 +1058,6 @@
- 	this.inferenceContexts.put(method, infCtx18);
- }
- 
-- at Override
- public void registerResult(TypeBinding targetType, MethodBinding method) {
- 	if (this.solutionsPerTargetType == null)
- 		this.solutionsPerTargetType = new HashMap<TypeBinding, MethodBinding>();
-@@ -1080,7 +1079,6 @@
- public InferenceContext18 freshInferenceContext(Scope scope) {
- 	return new InferenceContext18(scope, this.arguments, this, this.outerInferenceContext);
- }
-- at Override
- public boolean isQualifiedSuper() {
- 	return this.receiver.isQualifiedSuper();
- }
diff --git a/debian/patches/replace-diamond-operators.diff b/debian/patches/replace-diamond-operators.diff
deleted file mode 100644
index 0b59177..0000000
--- a/debian/patches/replace-diamond-operators.diff
+++ /dev/null
@@ -1,40 +0,0 @@
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/Compiler.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/Compiler.java
-@@ -489,7 +489,7 @@
- 				for (CategorizedProblem problem : errors) {
- 					if (problem.getCategoryID() == CategorizedProblem.CAT_UNSPECIFIED) {
- 						if (this.aptProblems == null) {
--							this.aptProblems = new HashMap<>();
-+							this.aptProblems = new HashMap<String, APTProblem[]>();
- 						}
- 						APTProblem[] problems = this.aptProblems.get(new String(unitDecl.getFileName()));
- 						if (problems == null) {
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/FakedTrackingVariable.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/FakedTrackingVariable.java
-@@ -776,7 +776,7 @@
- 		}
- 
- 		public IteratorForReporting(List<FakedTrackingVariable> variables, Scope scope, boolean atExit) {
--			this.varSet = new HashSet<>(variables);
-+			this.varSet = new HashSet<FakedTrackingVariable>(variables);
- 			this.scope = scope;
- 			this.atExit = atExit;
- 			setUpForStage(Stage.OuterLess);
---- a/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/util/Util.java
-+++ b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/util/Util.java
-@@ -1125,7 +1125,7 @@
- 				bootclasspathProperty = System.getProperty("org.apache.harmony.boot.class.path"); //$NON-NLS-1$
- 			}
- 		}
--		List<String> filePaths = new ArrayList<>();
-+		List<String> filePaths = new ArrayList<String>();
- 		if ((bootclasspathProperty != null) && (bootclasspathProperty.length() != 0)) {
- 			StringTokenizer tokenizer = new StringTokenizer(bootclasspathProperty, File.pathSeparator);
- 			while (tokenizer.hasMoreTokens()) {
-@@ -1630,4 +1630,4 @@
- 		}
- 	}
- 
--}
-\ No newline at end of file
-+}
diff --git a/debian/patches/series b/debian/patches/series
index 341ec87..3c24925 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,5 +1,2 @@
-gcc-changes.diff
-remove-overrides.diff
-replace-diamond-operators.diff
 remove-javacore.diff
 fix-readmanager-npe.diff
diff --git a/debian/rules b/debian/rules
index 995875a..787d12f 100755
--- a/debian/rules
+++ b/debian/rules
@@ -1,251 +1,25 @@
 #!/usr/bin/make -f
 
-DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
-DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
-
 VERSION       := $(shell dpkg-parsechangelog --show-field Version | sed 's/-[^-]*//')
 UVERSION      := $(shell echo $(VERSION) | sed 's/~.*//')
 
-GCC_VERSION   := $(shell ls -l /usr/bin/gcj | sed 's/.*-> gcj-\(.*\)/\1/')
-GCC_VERSION   := 6
-
-LIBGCJ_EXT    := $(shell ls -l /usr/lib/$(DEB_HOST_MULTIARCH)/libgcj_bc.so.1 | sed 's/.*\.//')
-LIBGCJ_SOVER  = $(LIBGCJ_EXT)
-LIBGCJ_SOVER  = 17
-REQ_VERSION   = 4.4.6
-
-GCJ = gcj-$(GCC_VERSION)
-GIJ = gij-$(GCC_VERSION)
-GCJDBTOOL = gcj-dbtool-$(GCC_VERSION)
-GCJSUBDIR = /usr/lib/$(DEB_HOST_MULTIARCH)/gcj-$(GCC_VERSION)-$(LIBGCJ_SOVER)
-
-# work around ecj1 having fallen out of the gcc search path
-PATH := $(CURDIR):$(PATH)
-export PATH
-
-with_native := yes
-with_rebuild := yes
-with_sourcebuild := yes
-
-ifneq (,$(filter $(DEB_HOST_ARCH), m68k powerpcspe ppc64 s390x sh4 sparc64))
-  with_sourcebuild :=
-endif
-
-ifneq (,$(filter $(DEB_HOST_ARCH), arm armel))
-  with_rebuild := no
-endif
-
-ifneq (,$(filter $(DEB_HOST_ARCH), arm))
-  with_sourcebuild := no
-endif
-
-DEB_DH_GENCONTROL_ARGS = -- \
-	'-Vpkg:gij=gcj-$(GCC_VERSION)-jre-headless (>= $(REQ_VERSION))' \
-	'-Vpkg:libgcjjar=gcj-$(GCC_VERSION)-jre-lib (>= $(REQ_VERSION))'
-
-JAR = eclipse-ecj.jar
-
-eclipse_root = $(CURDIR)/../eclipse
-
 %:
-	dh $@
-
-override_dh_auto_build-indep: build/stamp-bytecode
-
-override_dh_auto_build-arch: build/stamp-nativecode
-
-build/stamp-bytecode:
-ifneq (,$(findstring $(DEB_HOST_ARCH),arm))
-	@echo 'Sorry ecj is no longer built on $(DEB_HOST_ARCH) due to a lack of porters'
-	@echo 'supporting gij/gcj on this architecture. Please consider helping if you can.'
-	false
-endif
-	rm -rf build/bin
-	mkdir -p build/bin
-
-ifeq ($(with_sourcebuild),yes)
-	cp -r src/org.eclipse.jdt.core/org build/bin/
-	cat gcc.properties \
-	    >> build/bin/org/eclipse/jdt/internal/compiler/batch/messages.properties
-	rm -rf build/bin/org/eclipse/jdt/internal/compiler/apt
-	rm -rf build/bin/org/eclipse/jdt/internal/compiler/tool
-
-	# Replace the bundle_version parameter with the actual version
-	sed -i 's/bundle_qualifier, bundle_version/$(UVERSION)/' \
-	    build/bin/org/eclipse/jdt/internal/compiler/batch/messages.properties
-
-	find build/bin -name '*.java' > build/sourcefiles
-	split -l 25 build/sourcefiles ecj-sources.
-	ls -l
-	mv ecj-sources.* build/bin
-	ls -l . build/bin
-
-	ln -sf /usr/lib/gcc/ecj1 $(CURDIR)/ecj1
-	set -e; \
-	for list in $$(find build/bin -name 'ecj-sources.*'); do \
-	    echo "building files in $$list ..."; \
-	    echo $(GCJ) -d build/bin -C -g \
-		-I/usr/share/ant/lib/ant.jar \
-		-Ibuild/bin \
-		$$(cat $$list); \
-	    $(GCJ) -v -d build/bin -C -g \
-		-I/usr/share/ant/lib/ant.jar \
-		-Ibuild/bin \
-	        -Wno-all -Wno-unchecked -Wno-raw -Wno-resource \
-		$$(cat $$list); \
-	done
-
-	find build/bin -name 'sources.list' -exec rm -f {} \;
-	find build/bin -name '*.java' -exec rm -f {} \;
-	find build/bin -name '*.html' -exec rm -f {} \;
-
-	mkdir -p build/bootstrap
-	fastjar -c -C build/bin . -f build/bootstrap/$(JAR)
-
-  ifeq ($(with_rebuild),yes)
-	: # rebuild the compiler
-	rm -rf build/bin
-	mkdir -p build/bin
-	cp -r src/org.eclipse.jdt.core/org build/bin/
-	cat gcc.properties \
-	    >> build/bin/org/eclipse/jdt/internal/compiler/batch/messages.properties
-	rm -rf build/bin/org/eclipse/jdt/internal/compiler/apt
-	rm -rf build/bin/org/eclipse/jdt/internal/compiler/tool
-
-	# Replace the bundle_version parameter with the actual version
-	sed -i 's/bundle_qualifier, bundle_version/$(UVERSION)/' \
-	    build/bin/org/eclipse/jdt/internal/compiler/batch/messages.properties
-
-	time $(GIJ) \
-	    -classpath build/bootstrap/$(JAR):/usr/share/ant/lib/ant.jar \
-	    org.eclipse.jdt.internal.compiler.batch.Main \
-	    -bootclasspath /usr/share/java/libgcj-$(GCC_VERSION).jar \
-	    build/bin
-
-	find build/bin -name '*.java' -exec rm -f {} \;
-	find build/bin -name '*.html' -exec rm -f {} \;
-
-	mkdir -p build/dist
-	fastjar -c -C build/bin . -f build/dist/$(JAR)
-  else
-	mkdir -p build/dist
-	cp -p build/bootstrap/$(JAR) build/dist/$(JAR)
-  endif
-else
-	mkdir -p build/bin
-	unzip -d build/bin -q /usr/share/java/eclipse-ecj.jar
-	mkdir -p build/dist
-	cp -p /usr/share/java/eclipse-ecj.jar build/dist/$(JAR)
-endif
-	mkdir -p build/exe
-	cp build/dist/$(JAR) build/exe/ecj-standalone.jar
-	zip -d build/exe/ecj-standalone.jar \
-		'org/eclipse/jdt/core/JDTCompilerAdapter*'
-
-	touch build/stamp-bytecode
-
-build/stamp-nativecode: build/stamp-bytecode
-	find build/dist -name '*.jar.*.jar' | xargs -r rm -f
-ifeq ($(with_native),yes)
-	: # $(JAR).so
-
-	cd build/bin && find -name '*.rsc' -o -name '*.properties' -o -name '*.props' \
-	    | fastjar -c -@ - -f $(CURDIR)/build/resources.jar
-	$(GCJ) \
-	    -c -O2 -g -fPIC -fjni -findirect-dispatch \
-	    -o build/dist/resources.o build/resources.jar
-	cp -p build/dist/resources.o build/exe/
-
-	PYTHONPATH=$(CURDIR)/debian \
-	RPATH=-Wl,-rpath,$(GCJSUBDIR) \
-	  time python debian/aot-compile \
-	    --gcj=$(GCJ) --dbtool=$(GCJDBTOOL) \
-	    -L /usr/lib/gcj build/dist build/dist
-
-	PYTHONPATH=$(CURDIR)/debian \
-	RPATH=-Wl,-rpath,$(GCJSUBDIR) \
-	  time python debian/aot-compile \
-	    --gcj=$(GCJ) --dbtool=$(GCJDBTOOL) \
-	    -L /usr/lib/gcj build/exe build/exe
-
-  ifeq (0,1)
-	: # ecj-gcj
-	time $(GCJ) \
-	    -O1 -g -Wl,-O1 -Wl,-rpath,$(GCJSUBDIR) -Wl,-z,relro \
-	    --main=org.eclipse.jdt.internal.compiler.batch.Main \
-	    -o build/dist/ecj-gcj build/exe/ecj-standalone.jar
-	: # ecj1
-	time $(GCJ) \
-	    -O1 -g -Wl,-O1 -Wl,-rpath,$(GCJSUBDIR) -Wl,-z,relro \
-	    --main=org.eclipse.jdt.internal.compiler.batch.GCCMain \
-	    -o build/dist/ecj1 build/exe/ecj-standalone.jar
-  endif
-endif
-	touch build/stamp-nativecode
-
-
-override_dh_install-indep:
-	dh_install -i
-
-	mh_installpoms -plibecj-java
-	mh_installjar -plibecj-java -l debian/poms/ecj.pom build/dist/$(JAR) \
-		--usj-name=eclipse-ecj
-
-override_dh_install-arch:
-	# ecj
-	mkdir -p debian/tmp/usr/bin
-	sed 's/@ver@/$(GCC_VERSION)/g' debian/ecj.in \
-	  > debian/tmp/usr/bin/ecj
-	chmod 755 debian/tmp/usr/bin/ecj
-
-ifeq ($(with_native),yes)
-	# libecj-java-gcj
-	mkdir -p debian/tmp/usr/lib/gcj
-	install -m 644 build/dist/$(JAR).so debian/tmp/usr/lib/gcj
-
-	mkdir -p debian/tmp/usr/share/gcj/classmap.d
-	install -m 644 build/dist/*.db \
-		debian/tmp/usr/share/gcj/classmap.d/
-endif
-
-ifeq ($(with_native),yes)
-	# ecj1::
-	mkdir -p debian/ecj1/usr/lib/$(DEB_HOST_MULTIARCH)/gcc
-	install -m 755 build/exe/ecj1 debian/ecj1/usr/lib/$(DEB_HOST_MULTIARCH)/gcc/
-	dh_link -p ecj1 \
-	  /usr/lib/$(DEB_HOST_MULTIARCH)/gcc/ecj1 /usr/lib/gcc/ecj1
-endif
-
-	# ecj-gcj
-ifeq ($(with_native),yes)
-	mkdir -p debian/tmp/usr/bin
-	install -m 755 build/exe/ecj-gcj debian/tmp/usr/bin/
-endif
-	mkdir -p debian/ecj-gcj/usr/bin
-
-	mkdir -p debian/ecj-gcj/usr/share/man/man1
-	ln -sf ecj.1.gz \
-	  debian/ecj-gcj/usr/share/man/man1/ecj-gcj.1.gz
-
-	dh_install -a
+	dh $@ --buildsystem=ant --with maven-repo-helper
 
+override_dh_auto_build:
+	dh_auto_build -- -f debian/build.xml -Dversion=$(UVERSION)
 
-override_dh_clean:
-	dh_clean
-	rm -rf build
-	rm -f debian/*.pyc ecj1
-	rm -rf debian/.mh
+override_dh_auto_clean:
 
 TAG = R4_5_1
 DIR = ecj-$(VERSION)
 
-MAVEN_REPO  := http://repo1.maven.org/maven2
 PACKAGE := ecj
 
 get-orig-pom:
 	mkdir -p debian/poms
 	wget  -U NoSuchBrowser/1.0 -O debian/poms/$(PACKAGE).pom \
-        $(MAVEN_REPO)/org/eclipse/jdt/core/compiler/$(PACKAGE)/$(VERSION)/$(PACKAGE)-$(VERSION).pom
+        https://repo1.maven.org/maven2/org/eclipse/jdt/core/compiler/$(PACKAGE)/$(VERSION)/$(PACKAGE)-$(VERSION).pom
 
 get-orig-source:
 	rm -rf $(DIR) $(TAG).tar.gz $(TAG)
diff --git a/debian/wrappers/ecj b/debian/wrappers/ecj
new file mode 100755
index 0000000..051ca29
--- /dev/null
+++ b/debian/wrappers/ecj
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# Include the wrappers utility script
+. /usr/lib/java-wrappers/java-wrappers.sh
+
+find_java_runtime
+
+JAVA_CLASSPATH=/usr/share/java/eclipse-ecj.jar
+
+run_java org.eclipse.jdt.internal.compiler.batch.Main "$@"

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/ecj.git



More information about the pkg-java-commits mailing list