[pkg-java] r18237 - in trunk: . ecj ecj/debian ecj/debian/patches ecj/debian/poms ecj/debian/source

Matthias Klose doko at moszumanska.debian.org
Mon Jul 7 16:59:14 UTC 2014


Author: doko
Date: 2014-07-07 16:59:14 +0000 (Mon, 07 Jul 2014)
New Revision: 18237

Added:
   trunk/ecj/
   trunk/ecj/debian/
   trunk/ecj/debian/README.Debian
   trunk/ecj/debian/aot-compile
   trunk/ecj/debian/aotcompile.py
   trunk/ecj/debian/changelog
   trunk/ecj/debian/classfile.py
   trunk/ecj/debian/compat
   trunk/ecj/debian/control
   trunk/ecj/debian/copyright
   trunk/ecj/debian/ecj-gcj.install
   trunk/ecj/debian/ecj-gcj.overrides
   trunk/ecj/debian/ecj.1
   trunk/ecj/debian/ecj.in
   trunk/ecj/debian/ecj.install
   trunk/ecj/debian/ecj.manpages
   trunk/ecj/debian/ecj.postinst
   trunk/ecj/debian/ecj.prerm
   trunk/ecj/debian/libecj-java-gcj.install
   trunk/ecj/debian/libecj-java-gcj.postinst
   trunk/ecj/debian/libecj-java-gcj.postrm
   trunk/ecj/debian/libecj-java.links
   trunk/ecj/debian/libecj-java.poms
   trunk/ecj/debian/patches/
   trunk/ecj/debian/patches/gcc-changes.diff
   trunk/ecj/debian/patches/series
   trunk/ecj/debian/poms/
   trunk/ecj/debian/poms/ecj.pom
   trunk/ecj/debian/rules
   trunk/ecj/debian/source/
   trunk/ecj/debian/source/format
   trunk/ecj/debian/stamp-patched
Log:
 - checkin ecj


Added: trunk/ecj/debian/README.Debian
===================================================================
--- trunk/ecj/debian/README.Debian	                        (rev 0)
+++ trunk/ecj/debian/README.Debian	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,12 @@
+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. 
+

Added: trunk/ecj/debian/aot-compile
===================================================================
--- trunk/ecj/debian/aot-compile	                        (rev 0)
+++ trunk/ecj/debian/aot-compile	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,89 @@
+#! /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)

Added: trunk/ecj/debian/aotcompile.py
===================================================================
--- trunk/ecj/debian/aotcompile.py	                        (rev 0)
+++ trunk/ecj/debian/aotcompile.py	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,430 @@
+
+# -*- 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]

Added: trunk/ecj/debian/changelog
===================================================================
--- trunk/ecj/debian/changelog	                        (rev 0)
+++ trunk/ecj/debian/changelog	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,558 @@
+ecj (3.10.0+3.9.0-2) unstable; urgency=medium
+
+  * Disable the source build and build the architecture dependent packages
+    from the libecj-java in the archive. 
+
+ -- Matthias Klose <doko at debian.org>  Mon, 07 Jul 2014 15:14:50 +0200
+
+ecj (3.10.0+3.9.0-1) unstable; urgency=high
+
+  * Revert back to 3.9.0, as long as #753315 is not fixed.
+
+ -- Matthias Klose <doko at debian.org>  Sat, 05 Jul 2014 15:55:57 +0200
+
+ecj (3.9.0-2) unstable; urgency=medium
+
+  * Build using gcj-4.9.
+
+ -- Matthias Klose <doko at debian.org>  Sat, 03 May 2014 16:46:31 +0200
+
+ecj (3.9.0-1) unstable; urgency=medium
+
+  * Update to 4.3.1 (built from the R4_3_1 tag, identifies itself as 3.9.0).
+
+ -- Matthias Klose <doko at debian.org>  Tue, 10 Dec 2013 15:50:07 +0100
+
+ecj (3.8.2-4) unstable; urgency=low
+
+  * Build using gcj-4.8 on all architectures.
+
+ -- Matthias Klose <doko at debian.org>  Mon, 01 Jul 2013 01:17:16 +0200
+
+ecj (3.8.2-2) unstable; urgency=low
+
+  * Build using gcj-4.6 on mips.
+
+ -- Matthias Klose <doko at debian.org>  Mon, 08 Apr 2013 18:56:06 +0200
+
+ecj (3.8.2-1) unstable; urgency=low
+
+  * Update to 3.8.2 (built from the R3_8_2 tag, identifies itself as 3.8.3).
+    Supports Java7. Closes: #693441.
+  * Remove copyright information from ICU and jsch. Closes: #622296.
+
+ -- Matthias Klose <doko at debian.org>  Mon, 08 Apr 2013 00:34:31 +0200
+
+ecj (3.5.1-6) unstable; urgency=low
+
+  * Allow package to build with gcj-4.6 on ia64.
+
+ -- Matthias Klose <doko at debian.org>  Sun, 06 Jan 2013 18:54:59 +0100
+
+ecj (3.5.1-5) unstable; urgency=low
+
+  * Fix the libgcj so version.
+
+ -- Matthias Klose <doko at debian.org>  Sun, 06 Jan 2013 17:36:18 +0100
+
+ecj (3.5.1-4) unstable; urgency=low
+
+  * Rebuild using GCC-4.7.
+
+ -- Matthias Klose <doko at debian.org>  Tue, 10 Apr 2012 14:47:52 +0200
+
+ecj (3.5.1-3) unstable; urgency=low
+
+  [ James Page ]
+  * Add maven artifact deployment to resolve FTBFS for 
+    tomcat-maven-plugin (LP: #835769):
+    - debian/control: added maven-repo-helper to Build-Depends-Indep
+    - debian/rules: install maven artifacts, added get-orig-poms target 
+      to retrieve original pom files
+    - debian/libecj-java.poms: POM file locator.
+    - debian/poms/ecj.pom: Upstream POM file from Maven repo1.
+    - debian/libecj-java.install: removed - install handled by m-r-h.
+
+  [ Matthias Klose ]
+  * Remove Jerry Haltom and Michael Koch from uploaders.
+
+ -- Matthias Klose <doko at debian.org>  Wed, 14 Sep 2011 23:27:58 +0200
+
+ecj (3.5.1-2.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * Enable armhf architecture for ecj1 (Closes: #631070) 
+
+ -- Hector Oron <zumbi at debian.org>  Wed, 13 Jul 2011 22:13:12 +0100
+
+ecj (3.5.1-2) unstable; urgency=medium
+
+  [ Steve Langasek ]
+  * Move ecj1 binary to the multiarch gcc directory so gcj can find it.
+  * Create a link to ecj1 in our build directory so that gcj can find it
+    for rebootstrapping ecj1.
+
+  [ Matthias Klose]
+  * Build with default gcj-jdk.
+  * ecj1: Provide a compatibility symlink in /usr/lib/gcc/ecj1.
+
+ -- Matthias Klose <doko at debian.org>  Wed, 08 Jun 2011 19:25:06 +0200
+
+ecj (3.5.1-1) unstable; urgency=low
+
+  * Update to the final 3.5.1 release.
+  * Update GCCMain.java from rhug/eclipse-gcj.
+
+ -- Matthias Klose <doko at debian.org>  Sat, 10 Oct 2009 11:18:07 +0200
+
+ecj (3.5+20090820-1) unstable; urgency=low
+
+  * Update to the R3_5_maintenance branch.
+    - Fixes eclipse #285466, bootstrap error in OpenJDK.
+  * Set sections to java.
+
+ -- Matthias Klose <doko at debian.org>  Thu, 20 Aug 2009 19:34:12 +0200
+
+ecj (3.5-1) unstable; urgency=low
+
+  * New upstream version.
+  * Update to the R3_5_maintenance branch 20090728.
+  * Update GCCMain.java.
+  * Build using gcj-4.4-jdk on all architectures.
+
+ -- Matthias Klose <doko at debian.org>  Tue, 28 Jul 2009 18:55:13 +0200
+
+ecj (3.4.2-4) unstable; urgency=low
+
+  * Build using gcj-4.4-jdk on hppa.
+
+ -- Matthias Klose <doko at debian.org>  Sun, 15 Feb 2009 22:34:28 +0100
+
+ecj (3.4.2-1) unstable; urgency=low
+
+  * New upstream version 3.4.2, built from the v_894_R34x tag,
+    R3_4_maintenance branch.
+
+ -- Matthias Klose <doko at debian.org>  Sun, 15 Feb 2009 22:34:28 +0100
+
+ecj (3.3.0+0728-11) unstable; urgency=low
+
+  * Build again for alpha.
+
+ -- Matthias Klose <doko at debian.org>  Sun, 01 Feb 2009 09:31:00 +0100
+
+ecj (3.3.0+0728-10) unstable; urgency=low
+
+  * libecj-java: Recommend default-jre-headless | java2-runtime-headless
+    instead of java2-runtime.
+
+ -- Matthias Klose <doko at debian.org>  Sat, 06 Sep 2008 10:52:13 +0000
+
+ecj (3.3.0+0728-9) unstable; urgency=low
+
+  * Don't build on alpha, arm, hppa.
+
+ -- Matthias Klose <doko at debian.org>  Wed, 09 Apr 2008 04:12:54 +0200
+
+ecj (3.3.0+0728-8) unstable; urgency=low
+
+  * Fix build failure on alpha.
+
+ -- Matthias Klose <doko at debian.org>  Thu, 24 Jan 2008 19:58:40 +0100
+
+ecj (3.3.0+0728-7) unstable; urgency=low
+
+  * Build using gcj-4.3 on all archs but alpha.
+
+ -- Matthias Klose <doko at debian.org>  Thu, 24 Jan 2008 19:11:08 +0100
+
+ecj (3.3.0+0728-6) unstable; urgency=low
+
+  * Build-depend on libecj-java on arm.
+
+ -- Matthias Klose <doko at debian.org>  Mon, 14 Jan 2008 22:07:01 +0100
+
+ecj (3.3.0+0728-5) unstable; urgency=medium
+
+  * Make ecj architecture dependent, dependencies depend on the jvm used.
+  * ecj: Depend on gij-x.y.
+
+ -- Matthias Klose <doko at debian.org>  Thu, 06 Sep 2007 19:22:58 +0200
+
+ecj (3.3.0+0728-4) unstable; urgency=low
+
+  * Fix name of renamed jar file (Michael Koch).
+
+ -- Matthias Klose <doko at debian.org>  Wed, 05 Sep 2007 00:08:06 +0200
+
+ecj (3.3.0+0728-3) unstable; urgency=medium
+
+  * Use ecj-standalone.jar to build the ecj-gcj and ecj1 binaries.
+  * ecj-gcj: Depend on ecj. Closes: #440259.
+
+ -- Matthias Klose <doko at debian.org>  Thu, 30 Aug 2007 23:33:08 +0200
+
+ecj (3.3.0+0728-2) unstable; urgency=low
+
+  * Tighten build-dependency on libgcj-bc.
+
+ -- Matthias Klose <doko at debian.org>  Sat, 25 Aug 2007 20:12:38 +0200
+
+ecj (3.3.0+0728-1) unstable; urgency=medium
+
+  * New upstream version, taken from the R3_3_maintenance tag.
+  * Build using gcj-4.2 on all architectures except alpha and m68k.
+  * Stop building the ecj-bootstrap and ecj-bootstrap-gcj packages.
+  * Build a libecj-java-gcj package.
+  * Build an ecj1 package on arm, BC-compile ecj1.
+  * Update debian/copyright, eclipse is EPL, not CPL anymore.
+
+ -- Matthias Klose <doko at debian.org>  Sat, 25 Aug 2007 12:35:30 +0200
+
+ecj (3.3.0-2) unstable; urgency=low
+
+  * Apply fix for upstream report #195317.
+
+ -- Matthias Klose <doko at debian.org>  Fri, 20 Jul 2007 12:05:37 +0200
+
+ecj (3.3.0-1) unstable; urgency=low
+
+  * New upstream release.
+  * Don't reference the transitional bootstrap package in the README.
+    Closes: #426887.
+  * Split out the library into libecj-java. Closes: #421621.
+
+ -- Matthias Klose <doko at ubuntu.com>  Sat,  7 Jul 2007 02:13:27 +0200
+
+ecj (3.3~M7-2) unstable; urgency=low
+
+  * debian/control: Make ecj and ecj-gcj conflict and replace their
+    eclipse-ecj and eclipse-ecj-gcj counterparts. Closes: #421302.
+
+ -- Michael Koch <konqueror at gmx.de>  Sun, 20 May 2007 09:57:58 -0100
+
+ecj (3.3~M7-1) unstable; urgency=low
+
+  * New upstream release.
+    - Fixes issues with classes extending java.io.PrintWriter and implementing
+      some random interface. Closes: #424504.
+    - Removed debian/patches/ecj-square-bracket-classpath.diff.
+      Applied upstream.
+
+ -- Michael Koch <konqueror at gmx.de>  Fri, 18 May 2007 09:32:35 -0100
+
+ecj (3.2.2-2) unstable; urgency=low
+
+  * Loosen dependency on gij-4.1, libgcj7-jar. Closes: #421488.
+
+ -- Matthias Klose <doko at debian.org>  Sun, 29 Apr 2007 22:19:47 +0200
+
+ecj (3.2.2-1) unstable; urgency=low
+
+  * Upload to unstable.
+
+ -- Matthias Klose <doko at debian.org>  Fri, 27 Apr 2007 01:04:45 +0200
+
+ecj (3.2.2-0) experimental; urgency=low
+
+  * New upstream version.
+    - Update patches.
+  * (Build-)depend on gcj generics backport.
+  * Build-Conflicts with ecj-bootstrap-gcj (<< 3.2.2).
+  * Merge from Ubuntu:
+    - Split out patches.
+    - Add ecj-square-bracket-classpath.diff.
+    - ecj-bootstrap: Add compatibilty script ecj-bootstrap.
+    - Install the jar as eclipse-ecj.jar, provide an ecj.jar symlink.
+    - Rename source and binary package to ecj.
+    - Pass gcj and gcj-dbtool versions to aot-compile.
+
+ -- Matthias Klose <doko at debian.org>  Sat,  3 Mar 2007 19:37:46 +0100
+
+ecj-bootstrap (3.2.1-6) unstable; urgency=low
+
+  * Fix PR java/30585 (-Werror and -Wall not working). Taken from the rhug
+    repository.
+
+ -- Matthias Klose <doko at debian.org>  Sat,  3 Feb 2007 14:16:47 +0100
+
+ecj-bootstrap (3.2.1-5) unstable; urgency=low
+
+  * debian/control: Call it a "standalone" version, not a "bootstrap"
+    version. The package is used as the compiler in java-gcj-compat-dev
+    as well. See also #396170.
+
+ -- Matthias Klose <doko at debian.org>  Thu, 11 Jan 2007 20:44:40 +0100
+
+ecj-bootstrap (3.2.1-4) unstable; urgency=medium
+
+  * Refactor batch/org/eclipse/jdt/internal/compiler/batch/Main.java,
+    add batch/org/eclipse/jdt/internal/compiler/batch/GCCMain.java,
+    needed to bootstrap GCC-4.3.
+
+ -- Matthias Klose <doko at debian.org>  Tue,  9 Jan 2007 00:09:22 +0100
+
+ecj-bootstrap (3.2.1-3) unstable; urgency=low
+
+  * Add missing build dependency.
+
+ -- Matthias Klose <doko at debian.org>  Sun,  8 Oct 2006 01:40:00 +0200
+
+ecj-bootstrap (3.2.1-2) unstable; urgency=low
+
+  * Add 1.6 compatibility in package description.
+  * Use own copy of aot-compile to build with less memory resources
+    on arm and m68k.
+  * Build the standalone binary without -fjni -findirect-dispatch.
+
+ -- Matthias Klose <doko at debian.org>  Sat,  7 Oct 2006 23:38:47 +0200
+
+ecj-bootstrap (3.2.1-1) unstable; urgency=medium
+
+  * New upstream version.
+  * ecj-bootstrap-gcj: Add postrm script.
+
+ -- Matthias Klose <doko at debian.org>  Tue,  3 Oct 2006 09:35:39 +0200
+
+ecj-bootstrap (3.2-3) unstable; urgency=low
+
+  * Install classmap db in /usr/share/gcj/classmap.db, install jar.so
+    in /usr/lib/gcj.
+  * ecj-bootstrap-gcj.postinst: Use rebuild-gcj-db.
+  * Build depend on gcj-4.1 (>= 4.1.1-13).
+
+ -- Matthias Klose <doko at debian.org>  Sat,  2 Sep 2006 13:55:21 +0000
+
+ecj-bootstrap (3.2-2) experimental; urgency=low
+
+   * Build using the gcj backport from experimental.
+   * Do not build the binary ecj.
+
+ -- Matthias Klose <doko at debian.org>  Sun, 13 Aug 2006 13:01:45 +0200 
+
+ecj-bootstrap (3.2-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Matthias Klose <doko at debian.org>  Mon, 31 Jul 2006 18:16:52 +0000
+
+ecj-bootstrap (3.1.2-6) unstable; urgency=low
+
+  * ecj-bootstrap-gcj: Do not register an alternative for ecj.
+  * ecj-bootstrap: Use ecj-bootstrap-gcj, if available.
+  * The above changes set the bootclasspath to /usr/share/java/libgcj-4.1.jar,
+    if no bootclasspath is set. Closes: #361608, #361806.
+  * Do not try to rebuild the jar file using the gij on arm and m68k.
+
+ -- Matthias Klose <doko at debian.org>  Thu,  1 Jun 2006 22:55:00 +0200
+
+ecj-bootstrap (3.1.2-5) unstable; urgency=low
+
+  * Updated Standards-Version to 3.7.2. No changes needed.
+
+ -- Michael Koch <konqueror at gmx.de>  Sat,  6 May 2006 16:25:40 +0000
+
+ecj-bootstrap (3.1.2-4) unstable; urgency=low
+
+  * Build using gij-4.1/gcj-4.1.
+  * Rebuild using ecj on all architectures.
+  * Remove conflict on virtual package ecj.
+
+ -- Matthias Klose <doko at debian.org>  Sat,  1 Apr 2006 11:29:03 +0000
+
+ecj-bootstrap (3.1.2-3) experimental; urgency=low
+
+   * Build using gcj-4.1, upload to experimental.
+
+ -- Matthias Klose <doko at debian.org>  Sat, 28 Jan 2006 08:35:09 +0000 
+
+ecj-bootstrap (3.1.2-2ubuntu3) dapper; urgency=low
+
+  * Use gij-4.1 in the package scripts.
+
+ -- Matthias Klose <doko at ubuntu.com>  Sun, 26 Feb 2006 21:00:44 +0000
+
+ecj-bootstrap (3.1.2-2ubuntu2) dapper; urgency=low
+
+  * Build using gcj-4.1.
+
+ -- Matthias Klose <doko at ubuntu.com>  Sun, 19 Feb 2006 01:07:40 +0000
+
+ecj-bootstrap (3.1.2-2build1) dapper; urgency=low
+
+  * Require gcj-4.0.2-9 to build.
+
+ -- Matthias Klose <doko at ubuntu.com>  Thu, 16 Feb 2006 03:18:22 +0000
+
+ecj-bootstrap (3.1.2-2) unstable; urgency=low
+
+  * Set the bootclasspath to /usr/share/java/libgcj-4.0.jar, if not called
+    with the -bootclasspath and /usr/lib/jvm/java-gcj/jre/lib/rt.jar does
+    not exist (java-gcj-compat not installed). Closes: #350542.
+
+ -- Matthias Klose <doko at debian.org>  Thu,  9 Feb 2006 16:33:45 +0000
+
+ecj-bootstrap (3.1.2-1) unstable; urgency=low
+
+  * New upstream version.
+
+ -- Matthias Klose <doko at debian.org>  Sat, 28 Jan 2006 08:09:25 +0000
+
+ecj-bootstrap (3.1.1-4) unstable; urgency=low
+
+  * Depend on libgcj6-jar instead of libgcj6-common.
+
+ -- Matthias Klose <doko at debian.org>  Thu,  5 Jan 2006 19:14:49 +0000
+
+ecj-bootstrap (3.1.1-3.1) unstable; urgency=low
+
+  [ Arnaud Fontaine ]
+  * NMU: added a backslash at the end of the first line of
+    'debian/ecj-bootstrap-gcj.postinst'. Closes: #335031.
+
+ -- Christoph Berg <myon at debian.org>  Sat, 29 Oct 2005 12:09:06 +0200
+
+ecj-bootstrap (3.1.1-3) unstable; urgency=low
+
+  * On arm and hppa, don't rebuild ecj using gij.
+
+ -- Matthias Klose <doko at debian.org>  Thu, 20 Oct 2005 19:08:20 +0000
+
+ecj-bootstrap (3.1.1-2) unstable; urgency=low
+
+  * Add a javac alternative (priority higher than gcj).
+  * ecj-bootstrap-gcj: Add slave alternative for the man page.
+    Addresses #328743.
+
+ -- Matthias Klose <doko at debian.org>  Thu, 20 Oct 2005 00:11:27 +0200
+
+ecj-bootstrap (3.1.1-1) unstable; urgency=low
+
+  * New upstream version.
+  * Remove bootstrap workaround, tighten build dependency to gcj-4.0.2.
+  * Fix symlink to manpage (closes: #330080).
+
+ -- Matthias Klose <doko at debian.org>  Sat,  1 Oct 2005 18:32:05 +0200
+
+ecj-bootstrap (3.0.93-1) unstable; urgency=low
+
+  * New upstream version (3.1rc3). Taken from the eclipse-3.1 package,
+    file ecj.zip.
+
+ -- Matthias Klose <doko at debian.org>  Wed, 14 Sep 2005 12:54:56 +0000
+
+ecj-bootstrap (3.0.1-4ubuntu6) breezy; urgency=low
+
+  * Only build one java file per gcj call, ignore errors on first
+    build. Closes: #327161, Ubuntu 14938.
+  * Add more error checking in debian/rules.
+  * Install manual page for ecj alternative as well.
+
+ -- Matthias Klose <doko at ubuntu.com>  Wed, 14 Sep 2005 14:19:57 +0200
+
+ecj-bootstrap (3.0.1-4ubuntu5) breezy; urgency=low
+
+  * Reenable ecj-bootstrap-gcj. (Build-)depend on fixed gcj-4.0.
+
+ -- Matthias Klose <doko at ubuntu.com>  Sat,  2 Jul 2005 08:25:02 +0000
+
+ecj-bootstrap (3.0.1-4ubuntu4) breezy; urgency=low
+
+  * Temporarily disable building ecj-bootstrap-gcj. FTBFS on amd64. Unbreak
+    ant's dependency on ecj (>= 3.0.1-4ubuntu2).
+
+ -- Matthias Klose <doko at ubuntu.com>  Thu, 30 Jun 2005 09:59:20 +0000
+
+ecj-bootstrap (3.0.1-4ubuntu3) breezy; urgency=low
+
+  * Include manpages for ecj-bootstrap and ecj-bootstrap-gcj (closes: #316641).
+
+ -- Jeff Bailey <jbailey at ubuntu.com>  Wed, 29 Jun 2005 14:52:57 +0000
+
+ecj-bootstrap (3.0.1-4ubuntu2) breezy; urgency=low
+
+  * Merged ecj-adapter.jar into ecj.jar in preparation for Eclipse 3.1
+    upgrade. Upstream has laid out ecj in this fashion.
+  * Removed java-gcj-compat bits which were unneccassary.
+  * Added native versions of the ecj binary and ecj.jar in a new package
+    named ecj-bootstrap-gcj. This increases the compilation speed of
+    packages built with this copy of ecj.
+  * Added new alternatives for /usr/bin/ecj for the native version.
+  * First package successfully creating a classmap.db.
+
+ -- Jerry Haltom <wasabi at larvalstage.net>  Tue, 14 Jun 2005 21:38:29 -0500
+
+ecj-bootstrap (3.0.1-4ubuntu1) breezy; urgency=low
+
+  * Add a /usr/bin/ecj binary.
+
+ -- Matthias Klose <doko at ubuntu.com>  Sat, 11 Jun 2005 16:57:27 +0000
+
+ecj-bootstrap (3.0.1-3) experimental; urgency=low
+
+  * Synchronize.
+
+ -- Matthias Klose <doko at debian.org>  Wed,  1 Jun 2005 23:24:48 +0200
+
+ecj-bootstrap (3.0.1-1ubuntu6) breezy; urgency=low
+
+  * Now provides 'ecj' which will also be provided by the future
+    eclipse-ecj package built from full Eclipse source.
+  * Removed universe/ from Section.
+  * Now refering to libgcj-4.0.jar instead of 4.0.0.jar to handle
+    changing versions better.
+
+ -- Jerry Haltom <wasabi at larvalstage.net>  Wed,  1 Jun 2005 14:12:16 -0500
+
+ecj-bootstrap (3.0.1-2) experimental; urgency=low
+
+  * Upload to experimental, set maintainer to Debian Java Matainers,
+    request by Michael Koch.
+
+ -- Matthias Klose <doko at debian.org>  Sun, 22 May 2005 15:53:07 +0000
+
+ecj-bootstrap (3.0.1-1ubuntu5) hoary; urgency=low
+
+  * Fixed path to ant.jar.
+
+ -- Jerry Haltom <wasabi at larvalstage.net>  Mon, 28 Mar 2005 20:17:03 -0600
+
+ecj-bootstrap (3.0.1-1ubuntu4) hoary; urgency=low
+
+  * Added build of Ant adapter. This introduces a circular dependency
+    on ecj-bootstrap and Ant.
+
+ -- Jerry Haltom <wasabi at larvalstage.net>  Sun, 27 Mar 2005 22:51:13 -0600
+
+ecj-bootstrap (3.0.1-1ubuntu3) hoary; urgency=low
+
+  * Added missing dependency on libgcj6-common.
+
+ -- Jerry Haltom <wasabi at larvalstage.net>  Wed, 23 Feb 2005 22:45:00 -0600
+
+ecj-bootstrap (3.0.1-1ubuntu2) hoary; urgency=low
+
+  * Removed argument modification from ecj and moved it to ecj-wrapper in the
+    style of gcj-wrapper.
+  * Jeff Bailey corrected the Posix-compliant argument expansion in
+    ecj-wrapper with the help of David Weinehall.
+  * ecj now rebuilds with itself as a sanity test.
+
+ -- Jerry Haltom <wasabi at larvalstage.net>  Mon, 14 Feb 2005 20:34:25 -0600
+
+ecj-bootstrap (3.0.1-1ubuntu1) hoary; urgency=low
+
+  * First upload to Ubuntu.
+
+  * Tighten build deps.  Use "ecj" instead of "ecj-bootstrap" to
+    allow ant to depend on ecj | ecj-bootstrap.
+
+  * Posixify wrapper
+
+ -- Jeff Bailey <jbailey at ubuntu.com>  Fri, 11 Feb 2005 20:37:21 +0000
+
+ecj-bootstrap (3.0.1-0) unstable; urgency=low
+
+  * Initial release.
+
+ -- Jerry Haltom <wasabi at larvalstage.net>  Wed, 09 Feb 2005 19:36:07 -0600

Added: trunk/ecj/debian/classfile.py
===================================================================
--- trunk/ecj/debian/classfile.py	                        (rev 0)
+++ trunk/ecj/debian/classfile.py	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,222 @@
+
+## 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")
+

Added: trunk/ecj/debian/compat
===================================================================
--- trunk/ecj/debian/compat	                        (rev 0)
+++ trunk/ecj/debian/compat	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1 @@
+5

Added: trunk/ecj/debian/control
===================================================================
--- trunk/ecj/debian/control	                        (rev 0)
+++ trunk/ecj/debian/control	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,72 @@
+Source: ecj
+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: cdbs (>= 0.4.90ubuntu9), debhelper (>= 5),
+ gcj-4.9-jdk (>= 4.9.0),
+ libgcj-bc (>= 4.6.3),
+ libecj-java (>= 3.10.0+3.9.0), libecj-java (<< 3.10.0+3.9.1), unzip,
+ libecj-java (>= 3.8.2) [arm], unzip [arm],
+ fastjar, ant, zip, dpkg (>= 1.13.19), python, time
+Build-Depends-Indep: maven-repo-helper
+Build-Conflicts: ecj-bootstrap-gcj (<< 3.8.2)
+Standards-Version: 3.9.5
+Vcs-Svn: svn://anonscm.debian.org/pkg-java/trunk/ecj
+Vcs-Browser: http://anonscm.debian.org/viewvc/pkg-java/trunk/ecj/
+
+Package: ecj
+Architecture: any
+Depends: libecj-java (>= ${source:Version}), ${pkg:gij}, ${pkg:libgcjjar}, java-common (>= 0.23), ${misc:Depends}
+Recommends: ecj-gcj
+Conflicts: ecj-bootstrap (<< 3.2.2), eclipse-ecj
+Replaces: ecj-bootstrap (<< 3.2.2), eclipse-ecj
+Suggests: ant
+Description: standalone version of the Eclipse Java compiler
+ 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 and 1.7.
+
+Package: libecj-java
+Architecture: all
+Depends: java-common (>= 0.23), ${misc:Depends}
+Conflicts: ecj-bootstrap (<< 3.2.2), eclipse-ecj
+Replaces: ecj-bootstrap (<< 3.2.2), eclipse-ecj, ecj (<< 3.3.0-1)
+Recommends: default-jre-headless | java2-runtime-headless | java5-runtime-headless
+Suggests: ecj, ant, libecj-java-gcj
+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 and 1.7.
+
+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 and 1.7.
+ .
+ This package contains a native version of libecj-java built using gcj.
+
+Package: ecj1
+Architecture: alpha arm armel armhf
+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 and 1.7.
+ .
+ This package contains a native version of ecj built using gcj.

Added: trunk/ecj/debian/copyright
===================================================================
--- trunk/ecj/debian/copyright	                        (rev 0)
+++ trunk/ecj/debian/copyright	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,230 @@
+This package was debianized by Jerry Haltom <wasabi at larvalstage.net> on
+Thu, 10 Feb 2005 14:47:15 -0600
+
+It was downloaded from http://download.eclipse.org/eclipse/downloads/
+
+This software is copyright (c) 2000, 2004 IBM Corporation and others,
+licensed under the Common Public License - v 1.0.
+
+The ecj script is Copyright (C) 2004  Red Hat, licensed under the GPL with
+a special exception. The full text of the GPL can be found in
+/usr/share/common-licenses/GPL-2. The full text of the exception is stated
+below.
+
+Copyright:
+
+Eclipse Public License - v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE 
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE 
+PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation 
+distributed under this Agreement, and
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are 
+distributed by that particular Contributor. A Contribution 'originates' 
+from a Contributor if it was added to the Program by such Contributor itself 
+or anyone acting on such Contributor's behalf. Contributions do not include 
+additions to the Program which: (i) are separate modules of software 
+distributed in conjunction with the Program under their own license 
+agreement, and (ii) are not derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are 
+necessarily infringed by the use or sale of its Contribution alone or when 
+combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this 
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, 
+including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants 
+Recipient a non-exclusive, worldwide, royalty-free copyright license to 
+reproduce, prepare derivative works of, publicly display, publicly perform, 
+distribute and sublicense the Contribution of such Contributor, if any, 
+and such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants 
+Recipient a non-exclusive, worldwide, royalty-free patent license under 
+Licensed Patents to make, use, sell, offer to sell, import and otherwise 
+transfer the Contribution of such Contributor, if any, in source code and 
+object code form. This patent license shall apply to the combination of 
+the Contribution and the Program if, at the time the Contribution is added 
+by the Contributor, such addition of the Contribution causes such 
+combination to be covered by the Licensed Patents. The patent license shall 
+not apply to any other combinations which include the Contribution. No 
+hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses 
+to its Contributions set forth herein, no assurances are provided by any 
+Contributor that the Program does not infringe the patent or other 
+intellectual property rights of any other entity. Each Contributor disclaims 
+any liability to Recipient for claims brought by any other entity based on 
+infringement of intellectual property rights or otherwise. As a condition to 
+exercising the rights and licenses granted hereunder, each Recipient hereby 
+assumes sole responsibility to secure any other intellectual property rights 
+needed, if any. For example, if a third party patent license is required to 
+allow Recipient to distribute the Program, it is Recipient's responsibility 
+to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient 
+copyright rights in its Contribution, if any, to grant the copyright license 
+set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under 
+its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and 
+conditions, express and implied, including warranties or conditions of title 
+and non-infringement, and implied warranties or conditions of merchantability 
+and fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for 
+damages, including direct, indirect, special, incidental and consequential 
+damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered 
+by that Contributor alone and not by any other party; and
+
+iv) states that source code for the Program is available from such 
+Contributor, and informs licensees how to obtain it in a reasonable manner on 
+or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within 
+the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, 
+if any, in a manner that reasonably allows subsequent Recipients to identify 
+the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with 
+respect to end users, business partners and the like. While this license is 
+intended to facilitate the commercial use of the Program, the Contributor who 
+includes the Program in a commercial product offering should do so in a manner 
+which does not create potential liability for other Contributors. Therefore, 
+if a Contributor includes the Program in a commercial product offering, such 
+Contributor ("Commercial Contributor") hereby agrees to defend and indemnify 
+every other Contributor ("Indemnified Contributor") against any losses, 
+damages and costs (collectively "Losses") arising from claims, lawsuits and 
+other legal actions brought by a third party against the Indemnified 
+Contributor to the extent caused by the acts or omissions of such Commercial 
+Contributor in connection with its distribution of the Program in a commercial 
+product offering. The obligations in this section do not apply to any claims 
+or Losses relating to any actual or alleged intellectual property 
+infringement. In order to qualify, an Indemnified Contributor must: 
+a) promptly notify the Commercial Contributor in writing of such claim, and 
+b) allow the Commercial Contributor to control, and cooperate with the 
+Commercial Contributor in, the defense and any related settlement 
+negotiations. The Indemnified Contributor may participate in any such claim 
+at its own expense.
+
+For example, a Contributor might include the Program in a commercial product 
+offering, Product X. That Contributor is then a Commercial Contributor. If 
+that Commercial Contributor then makes performance claims, or offers 
+warranties related to Product X, those performance claims and warranties are 
+such Commercial Contributor's responsibility alone. Under this section, the 
+Commercial Contributor would have to defend claims against the other 
+Contributors related to those performance claims and warranties, and if a 
+court requires any other Contributor to pay any damages as a result, the 
+Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON 
+AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER 
+EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR 
+CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A 
+PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the 
+appropriateness of using and distributing the Program and assumes all 
+risks associated with its exercise of rights under this Agreement , 
+including but not limited to the risks and costs of program errors, 
+compliance with applicable laws, damage to or loss of data, programs or 
+equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY 
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION 
+LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE 
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under 
+applicable law, it shall not affect the validity or enforceability of the 
+remainder of the terms of this Agreement, and without further action by 
+the parties hereto, such provision shall be reformed to the minimum extent 
+necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a 
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself 
+(excluding combinations of the Program with other software or hardware) 
+infringes such Recipient's patent(s), then such Recipient's rights granted 
+under Section 2(b) shall terminate as of the date such litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to 
+comply with any of the material terms or conditions of this Agreement and 
+does not cure such failure in a reasonable period of time after becoming 
+aware of such noncompliance. If all Recipient's rights under this Agreement 
+terminate, Recipient agrees to cease use and distribution of the Program as 
+soon as reasonably practicable. However, Recipient's obligations under this 
+Agreement and any licenses granted by Recipient relating to the Program 
+shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but 
+in order to avoid inconsistency the Agreement is copyrighted and may only 
+be modified in the following manner. The Agreement Steward reserves the 
+right to publish new versions (including revisions) of this Agreement from 
+time to time. No one other than the Agreement Steward has the right to 
+modify this Agreement. The Eclipse Foundation is the initial Agreement 
+Steward. The Eclipse Foundation may assign the responsibility to serve as 
+the Agreement Steward to a suitable separate entity. Each new version of 
+the Agreement will be given a distinguishing version number. The Program 
+(including Contributions) may always be distributed subject to the version 
+of the Agreement under which it was received. In addition, after a new 
+version of the Agreement is published, Contributor may elect to distribute 
+the Program (including its Contributions) under the new version. Except as 
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no 
+rights or licenses to the intellectual property of any Contributor under 
+this Agreement, whether expressly, by implication, estoppel or otherwise. 
+All rights in the Program not expressly granted under this Agreement are 
+reserved.
+
+This Agreement is governed by the laws of the State of New York and the 
+intellectual property laws of the United States of America. No party to 
+this Agreement will bring a legal action under this Agreement more than 
+one year after the cause of action arose. Each party waives its rights to 
+a jury trial in any resulting litigation.

Added: trunk/ecj/debian/ecj-gcj.install
===================================================================
--- trunk/ecj/debian/ecj-gcj.install	                        (rev 0)
+++ trunk/ecj/debian/ecj-gcj.install	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1 @@
+debian/tmp/usr/bin/ecj-gcj 

Added: trunk/ecj/debian/ecj-gcj.overrides
===================================================================
--- trunk/ecj/debian/ecj-gcj.overrides	                        (rev 0)
+++ trunk/ecj/debian/ecj-gcj.overrides	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1 @@
+ecj-gcj binary: binary-or-shlib-defines-rpath

Added: trunk/ecj/debian/ecj.1
===================================================================
--- trunk/ecj/debian/ecj.1	                        (rev 0)
+++ trunk/ecj/debian/ecj.1	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,106 @@
+.TH ECJ "1" "October 2002" 
+.SH NAME
+ecj \- manual page for eclipse JDT Compiler
+.SH SYNOPSIS
+.B ecj <options> <source files>\fR
+.SH DESCRIPTION
+The JDT Compiler (jdtc) is a command version of Java compiler for eclipse. ecj 
+has basic java compiler options like SUN's javac.
+.PP
+Note: this manual page is out of date; please call the compiler with
+\fB\-help\fR for the current documentation.
+.SH OPTIONS
+.TP
+\fB\-help\fR                   display a help message
+.TP
+\fB\-version\fR                compiler version number
+.TP
+\fB\-classpath\fR              <dir 1>;<dir 2>;...;<dir P>
+.TP
+\fB\-d\fR <dir>                destination directory (if omitted no package directory structure is created)
+.TP
+\fB\-d\fR none
+no classfile is generated
+.PP
+\fB\-1.3\fR                    set compliance level to 1.3
+.TP
+\fB\-1.4\fR                    set compliance level to 1.4 (default)
+.TP
+\fB\-1.5\fR                    set compliance level to 1.5
+.TP
+\fB\-1.6\fR                    set compliance level to 1.6
+.TP
+\fB\-1.7\fR                    set compliance level to 1.7
+.TP
+\fB\-source\fR <ver>           assertions toggle (1.3 or 1.4, default is 1.3 in -1.3 mode and 1.4 in -1.4 mode)
+.TP
+\fB\-target\fR <ver>           classfile target setting
+.TP
+\fB\-nowarn\fR                 no warning (equivalent to '\-warn:none')
+.TP
+\fB\-warn\fR: <level>          set warning level (e.g. '\-warn:unusedLocals,deprecation')
+.TP
+constructorName
+warn method with constructor name
+.TP
+packageDefaultMethod
+warn attempt to override package-default method
+.TP
+deprecation
+warn usage of deprecated type or member
+.TP
+maskedCatchBlocks
+warn hidden catch block
+.TP
+unusedLocals
+warn on unused local variable (never read)
+.TP
+unusedArguments
+warn on unused method argument (never read)
+.TP
+unusedImports
+warn on unused imports
+.TP
+syntheticAccess
+warn when performing synthetic access for innerclass
+.TP
+assertIdentifier
+warn occurrence of 'assert' used as identifier
+.PP
+\fB\-deprecation\fR            equivalent to \fB\-warn\fR:deprecation.
+\fB\-g[\fR:<level>]            debug attributes level
+.TP
+\fB\-g\fR
+all debug info ('\-g:lines,vars,source')
+.TP
+\fB\-g\fR:none
+no debug info
+.TP
+\fB\-g\fR:[lines,vars,source]
+selective debug info
+.PP
+\fB\-preserveAllLocals\fR      code gen preserve all local variables (for debug purpose)
+.TP
+\fB\-noImportError\fR          no errors for unresolved imports
+.TP
+\fB\-encoding\fR               specify default source encoding format (custom encoding can also be specifed on a per file basis by suffixing each input source file/folder name with '[encoding]')
+.PP
+\fB\-log\fR <filename>         specify a log file
+.TP
+\fB\-proceedOnError\fR         keep compiling when error, dumping class files with problem methods
+.TP
+\fB\-verbose\fR                print accessed\/processed compilation units
+.TP
+\fB\-referenceInfo\fR          compute reference info
+.TP
+\fB\-progress\fR               show progress (only in \fB\-log\fR mode)
+.TP
+\fB\-time\fR                   display speed information
+.TP
+\fB\-noExit\fR                 do not call System.exit(n) at end of compilation (n=0 if no error)
+.TP
+\fB\-repeat\fR <n>             repeat compilation process <n> times (perf analysis)
+.PP
+.SH AUTHOR
+This manual page was written by Takshi Okamoto and Jan Schulz
+<debian at katzien.de>.

Added: trunk/ecj/debian/ecj.in
===================================================================
--- trunk/ecj/debian/ecj.in	                        (rev 0)
+++ trunk/ecj/debian/ecj.in	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,30 @@
+#! /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

Added: trunk/ecj/debian/ecj.install
===================================================================
--- trunk/ecj/debian/ecj.install	                        (rev 0)
+++ trunk/ecj/debian/ecj.install	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1 @@
+debian/tmp/usr/bin/ecj

Added: trunk/ecj/debian/ecj.manpages
===================================================================
--- trunk/ecj/debian/ecj.manpages	                        (rev 0)
+++ trunk/ecj/debian/ecj.manpages	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1 @@
+debian/ecj.1

Added: trunk/ecj/debian/ecj.postinst
===================================================================
--- trunk/ecj/debian/ecj.postinst	                        (rev 0)
+++ trunk/ecj/debian/ecj.postinst	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,6 @@
+#! /bin/sh -e
+
+update-alternatives --quiet --install /usr/bin/javac javac /usr/bin/ecj 143 \
+  --slave /usr/share/man/man1/javac.1.gz javac.1.gz /usr/share/man/man1/ecj.1.gz
+
+#DEBHELPER#

Added: trunk/ecj/debian/ecj.prerm
===================================================================
--- trunk/ecj/debian/ecj.prerm	                        (rev 0)
+++ trunk/ecj/debian/ecj.prerm	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,5 @@
+#! /bin/sh -e
+
+update-alternatives --quiet --remove javac /usr/bin/ecj
+
+#DEBHELPER#

Added: trunk/ecj/debian/libecj-java-gcj.install
===================================================================
--- trunk/ecj/debian/libecj-java-gcj.install	                        (rev 0)
+++ trunk/ecj/debian/libecj-java-gcj.install	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,2 @@
+debian/tmp/usr/lib/gcj/eclipse-ecj.jar.so
+debian/tmp/usr/share/gcj

Added: trunk/ecj/debian/libecj-java-gcj.postinst
===================================================================
--- trunk/ecj/debian/libecj-java-gcj.postinst	                        (rev 0)
+++ trunk/ecj/debian/libecj-java-gcj.postinst	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = configure ] && which rebuild-gcj-db >/dev/null 2>&1; then
+    rebuild-gcj-db
+fi
+
+#DEBHELPER#

Added: trunk/ecj/debian/libecj-java-gcj.postrm
===================================================================
--- trunk/ecj/debian/libecj-java-gcj.postrm	                        (rev 0)
+++ trunk/ecj/debian/libecj-java-gcj.postrm	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+set -e
+
+if [ "$1" = remove ] && which rebuild-gcj-db >/dev/null 2>&1; then
+    rebuild-gcj-db
+fi
+
+#DEBHELPER#

Added: trunk/ecj/debian/libecj-java.links
===================================================================
--- trunk/ecj/debian/libecj-java.links	                        (rev 0)
+++ trunk/ecj/debian/libecj-java.links	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1 @@
+/usr/share/java/eclipse-ecj.jar /usr/share/java/ecj.jar

Added: trunk/ecj/debian/libecj-java.poms
===================================================================
--- trunk/ecj/debian/libecj-java.poms	                        (rev 0)
+++ trunk/ecj/debian/libecj-java.poms	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1 @@
+debian/poms/ecj.pom

Added: trunk/ecj/debian/patches/gcc-changes.diff
===================================================================
--- trunk/ecj/debian/patches/gcc-changes.diff	                        (rev 0)
+++ trunk/ecj/debian/patches/gcc-changes.diff	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,551 @@
+Index: b/gcc.properties
+===================================================================
+--- /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
+Index: b/src/org.eclipse.jdt.core/build.xml
+===================================================================
+--- a/src/org.eclipse.jdt.core/build.xml
++++ b/src/org.eclipse.jdt.core/build.xml
+@@ -49,9 +49,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>
+Index: b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/impl/CompilerOptions.java
+===================================================================
+--- 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
+@@ -1188,9 +1188,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
+ 
+Index: b/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/GCCMain.java
+===================================================================
+--- /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);
++	}
++}

Added: trunk/ecj/debian/patches/series
===================================================================
--- trunk/ecj/debian/patches/series	                        (rev 0)
+++ trunk/ecj/debian/patches/series	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1 @@
+gcc-changes.diff

Added: trunk/ecj/debian/poms/ecj.pom
===================================================================
--- trunk/ecj/debian/poms/ecj.pom	                        (rev 0)
+++ trunk/ecj/debian/poms/ecj.pom	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<!-- Originally downloaded here: 
+		http://download.eclipse.org/eclipse/downloads/drops4/R-4.2.1-201209141800/#JDTCORE
+	-->
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>org.eclipse.jdt.core.compiler</groupId>
+	<artifactId>ecj</artifactId>
+	<version>3.8.2</version>
+	<packaging>jar</packaging>
+	<name>Eclipse ECJ</name>
+	<description>Eclipse JDT Core Batch Compiler</description>
+	<url>http://www.eclipse.org/jdt/</url>
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+	</properties>
+	<licenses>
+		<license>
+			<name>Eclipse Public License v1.0</name>
+			<url>http://www.eclipse.org/org/documents/epl-v10.php</url>
+			<distribution>repo</distribution>
+		</license>
+	</licenses>
+	<scm>
+		<url>http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.jdt.core/</url>
+		<connection>:pserver:anonymous at dev.eclipse.org:/cvsroot/eclipse</connection>
+	</scm>
+	<developers>
+		<!-- I didn't develop ECJ, but the Central Sync Requirements mandate a developer in the POM:
+			https://docs.sonatype.org/display/Repository/Central+Sync+Requirements
+		-->
+		<developer>
+			<name>Ralph Schaer</name>
+			<email>ralphschaer at gmail.com</email>
+		</developer>
+	</developers>
+</project>

Added: trunk/ecj/debian/rules
===================================================================
--- trunk/ecj/debian/rules	                        (rev 0)
+++ trunk/ecj/debian/rules	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1,272 @@
+#!/usr/bin/make -f
+
+include /usr/share/cdbs/1/rules/debhelper.mk
+
+DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
+DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+
+GCC_VERSION   := $(shell ls -l /usr/bin/gcj | sed 's/.*-> gcj-\(.*\)/\1/')
+GCC_VERSION   := 4.9
+
+LIBGCJ_EXT    := $(shell ls -l /usr/lib/$(DEB_HOST_MULTIARCH)/libgcj_bc.so.1 | sed 's/.*\.//')
+LIBGCJ_SOVER  = $(LIBGCJ_EXT)
+LIBGCJ_SOVER  = 15
+REQ_VERSION   = 4.4.6
+
+ant_version = 1.7
+ant_version =
+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
+
+# use the ecj.jar from the archive
+with_sourcebuild :=
+
+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
+
+default: build
+
+eclipse_root = $(CURDIR)/../eclipse
+
+build/ecj:: build/stamp-bytecode build/stamp-nativecode
+
+build/stamp-bytecode:
+ifneq (,$(findstring $(DEB_HOST_ARCH),arm))
+	@echo 'ecj is not built anymore on this architecture.'
+	@echo 'People insist on 100% compatible packages without providing any help.'
+	@echo 'The porter lists are quiet on the topic of better gij/gcj support for'
+	@echo 'these architectures.'
+	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
+
+	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$(ant_version)/lib/ant.jar \
+		-Ibuild/bin \
+		$$(cat $$list); \
+	    $(GCJ) -v -d build/bin -C -g \
+		-I/usr/share/ant$(ant_version)/lib/ant.jar \
+		-Ibuild/bin \
+		$$(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
+
+	time $(GIJ) \
+	    -classpath build/bootstrap/$(JAR):/usr/share/ant$(ant_version)/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
+
+
+install/libecj-java::
+	mh_installpoms -plibecj-java
+	mh_installjar -plibecj-java -l debian/poms/ecj.pom build/dist/$(JAR) \
+		--usj-name=eclipse-ecj
+
+install/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
+
+install/libecj-java-gcj::
+ifeq ($(with_native),yes)
+	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
+
+install/ecj1::
+ifeq ($(with_native),yes)
+	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
+
+install/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
+
+	mkdir -p debian/ecj-gcj/usr/share/lintian/overrides
+	cp -p debian/ecj-gcj.overrides \
+	  debian/ecj-gcj/usr/share/lintian/overrides/ecj-gcj
+
+binary-predeb/ecj1::
+#	sed -i 's/libgcj[1-9][^,]*//;s/,,/,/' debian/ecj1.substvars
+
+binary-predeb/ecj-gcj::
+#	sed -i 's/libgcj[1-9][^,]*//;s/,,/,/' debian/ecj-gcj.substvars
+
+clean::
+	rm -rf build
+	rm -f debian/*.pyc ecj1
+	rm -rf debian/.mh
+
+RR=../cvs/R3_5_maintenance/
+RR=../cvs/R3_5_1/
+RR=R4_3_1/
+tag = R4_3_1
+
+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)/$(DEB_UPSTREAM_VERSION)/$(PACKAGE)-$(DEB_UPSTREAM_VERSION).pom
+
+get-source:
+	rm -rf org.eclipse.jdt.core
+	#wget http://git.eclipse.org/c/jdt/eclipse.jdt.core.git/snapshot/R4_3_1.tar.gz
+	#git clone -b R3_8_maintenance git://git.eclipse.org/gitroot/jdt/eclipse.jdt.core.git
+	tar xf ../R4_3_1.tar.gz
+	rm -rf tmp-src
+	mkdir -p tmp-src/org.eclipse.jdt.core
+	cp -p $(RR)org.eclipse.jdt.core/scripts/about.html \
+		tmp-src/org.eclipse.jdt.core/
+	cp -p $(RR)org.eclipse.jdt.core/scripts/build.xml \
+		tmp-src/org.eclipse.jdt.core/
+	tar -c -f - -C $(RR)org.eclipse.jdt.core/compiler org \
+	    | tar -x -f - -C tmp-src/org.eclipse.jdt.core/
+
+	tar -c -f - -C $(RR)org.eclipse.jdt.core/antadapter org META-INF \
+	    | tar -x -f - -C tmp-src/org.eclipse.jdt.core/
+	find tmp-src -name CheckDebugAttributes.java | xargs -r rm -f
+	find tmp-src -name BuildJarIndex.java | xargs -r rm -f
+
+	tar -c -f - -C $(RR)org.eclipse.jdt.core/batch org \
+	    | tar -x -f - -C tmp-src/org.eclipse.jdt.core/
+
+	mkdir -p tmp-src/org.eclipse.jdt.core/META-INF/services
+#	cp -p $(RR)org.eclipse.jdt.core/scripts/META-INF/MANIFEST.MF \
+#	    tmp-src/org.eclipse.jdt.core/META-INF/
+	printf 'org.eclipse.jdt.internal.compiler.tool.EclipseCompiler #Eclipse compiler' \
+	    > tmp-src/org.eclipse.jdt.core/META-INF/services/javax.tools.JavaCompiler
+


Property changes on: trunk/ecj/debian/rules
___________________________________________________________________
Added: svn:executable
   + *

Added: trunk/ecj/debian/source/format
===================================================================
--- trunk/ecj/debian/source/format	                        (rev 0)
+++ trunk/ecj/debian/source/format	2014-07-07 16:59:14 UTC (rev 18237)
@@ -0,0 +1 @@
+3.0 (quilt)

Added: trunk/ecj/debian/stamp-patched
===================================================================



More information about the pkg-java-commits mailing list