--- ecj-3.5.1.orig/gcc.properties +++ ecj-3.5.1/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 --- ecj-3.5.1.orig/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java +++ ecj-3.5.1/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java @@ -811,7 +811,8 @@ // check whether comparing identical expressions Binding leftDirect = Expression.getDirectBinding(this.left); - if (leftDirect != null && leftDirect == Expression.getDirectBinding(this.right)) { + if (leftDirect != null && leftDirect == Expression.getDirectBinding(this.right) + && !(this.right instanceof Assignment)) { scope.problemReporter().comparingIdenticalExpressions(this); } return this.resolvedType = TypeBinding.BOOLEAN; @@ -848,7 +849,9 @@ // check whether comparing identical expressions Binding leftDirect = Expression.getDirectBinding(this.left); if (leftDirect != null && leftDirect == Expression.getDirectBinding(this.right)) { - scope.problemReporter().comparingIdenticalExpressions(this); + if (!(this.right instanceof Assignment)) { + scope.problemReporter().comparingIdenticalExpressions(this); + } } return this.resolvedType = TypeBinding.BOOLEAN; } --- ecj-3.5.1.orig/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java +++ ecj-3.5.1/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java @@ -325,6 +325,21 @@ if (needFieldsAndMethods) { createFields(binaryType.getFields(), sourceLevel, missingTypeNames); createMethods(binaryType.getMethods(), sourceLevel, missingTypeNames); + boolean isViewedAsDeprecated = isViewedAsDeprecated(); + if (isViewedAsDeprecated) { + for (int i = 0, max = this.fields.length; i < max; i++) { + FieldBinding field = this.fields[i]; + if (!field.isDeprecated()) { + field.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly; + } + } + for (int i = 0, max = this.methods.length; i < max; i++) { + MethodBinding method = this.methods[i]; + if (!method.isDeprecated()) { + method.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly; + } + } + } } if (this.environment.globalOptions.storeAnnotations) setAnnotations(createAnnotations(binaryType.getAnnotations(), this.environment, missingTypeNames)); @@ -344,7 +359,6 @@ if (size > 0) { this.fields = new FieldBinding[size]; boolean use15specifics = sourceLevel >= ClassFileConstants.JDK1_5; - boolean isViewedAsDeprecated = isViewedAsDeprecated(); boolean hasRestrictedAccess = hasRestrictedAccess(); int firstAnnotatedFieldIndex = -1; for (int i = 0; i < size; i++) { @@ -368,8 +382,6 @@ field.id = i; // ordinal if (use15specifics) field.tagBits |= binaryField.getTagBits(); - if (isViewedAsDeprecated && !field.isDeprecated()) - field.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly; if (hasRestrictedAccess) field.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess; if (fieldSignature != null) @@ -569,14 +581,11 @@ return; } - boolean isViewedAsDeprecated = isViewedAsDeprecated(); boolean hasRestrictedAccess = hasRestrictedAccess(); this.methods = new MethodBinding[total]; if (total == initialTotal) { for (int i = 0; i < initialTotal; i++) { MethodBinding method = createMethod(iMethods[i], sourceLevel, missingTypeNames); - if (isViewedAsDeprecated && !method.isDeprecated()) - method.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly; if (hasRestrictedAccess) method.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess; this.methods[i] = method; @@ -585,8 +594,6 @@ for (int i = 0, index = 0; i < initialTotal; i++) { if (iClinit != i && (toSkip == null || toSkip[i] != -1)) { MethodBinding method = createMethod(iMethods[i], sourceLevel, missingTypeNames); - if (isViewedAsDeprecated && !method.isDeprecated()) - method.modifiers |= ExtraCompilerModifiers.AccDeprecatedImplicitly; if (hasRestrictedAccess) method.modifiers |= ExtraCompilerModifiers.AccRestrictedAccess; this.methods[index++] = method; --- ecj-3.5.1.orig/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/lookup/Scope.java +++ ecj-3.5.1/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/lookup/Scope.java @@ -3593,12 +3593,21 @@ } // caveat: this is not a direct implementation of JLS - protected final MethodBinding mostSpecificMethodBinding(MethodBinding[] visible, int visibleSize, TypeBinding[] argumentTypes, InvocationSite invocationSite, ReferenceBinding receiverType) { + protected final MethodBinding mostSpecificMethodBinding(MethodBinding[] visible, int visibleSize, TypeBinding[] argumentTypes, final InvocationSite invocationSite, ReferenceBinding receiverType) { int[] compatibilityLevels = new int[visibleSize]; for (int i = 0; i < visibleSize; i++) compatibilityLevels[i] = parameterCompatibilityLevel(visible[i], argumentTypes); - boolean useTiebreakMethod = invocationSite.genericTypeArguments() == null; + InvocationSite tieBreakInvocationSite = new InvocationSite() { + public TypeBinding[] genericTypeArguments() { return null; } // ignore genericTypeArgs + public boolean isSuperAccess() { return invocationSite.isSuperAccess(); } + public boolean isTypeAccess() { return invocationSite.isTypeAccess(); } + public void setActualReceiverType(ReferenceBinding actualReceiverType) { /* ignore */} + public void setDepth(int depth) { /* ignore */} + public void setFieldIndex(int depth) { /* ignore */} + public int sourceStart() { return invocationSite.sourceStart(); } + public int sourceEnd() { return invocationSite.sourceStart(); } + }; MethodBinding[] moreSpecific = new MethodBinding[visibleSize]; int count = 0; for (int level = 0, max = VARARGS_COMPATIBLE; level <= max; level++) { @@ -3607,7 +3616,7 @@ max = level; // do not examine further categories, will either return mostSpecific or report ambiguous case MethodBinding current = visible[i]; MethodBinding original = current.original(); - MethodBinding tiebreakMethod = useTiebreakMethod ? current.tiebreakMethod() : current; + MethodBinding tiebreakMethod = current.tiebreakMethod(); for (int j = 0; j < visibleSize; j++) { if (i == j || compatibilityLevels[j] != level) continue; MethodBinding next = visible[j]; @@ -3626,7 +3635,7 @@ methodToTest = pNext.originalMethod; } } - MethodBinding acceptable = computeCompatibleMethod(methodToTest, tiebreakMethod.parameters, invocationSite); + MethodBinding acceptable = computeCompatibleMethod(methodToTest, tiebreakMethod.parameters, tieBreakInvocationSite); /* There are 4 choices to consider with current & next : foo(B) & foo(A) where B extends A 1. the 2 methods are equal (both accept each others parameters) -> want to continue --- ecj-3.5.1.orig/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/GCCMain.java +++ ecj-3.5.1/src/org.eclipse.jdt.core/org/eclipse/jdt/internal/compiler/batch/GCCMain.java @@ -0,0 +1,501 @@ +/** + * + */ +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.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) + disableWarnings(); + 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); + } +} --- ecj-3.5.1.orig/debian/compat +++ ecj-3.5.1/debian/compat @@ -0,0 +1 @@ +5 --- ecj-3.5.1.orig/debian/aot-compile +++ ecj-3.5.1/debian/aot-compile @@ -0,0 +1,89 @@ +#! /usr/bin/python + +## Copyright (C) 2006 Red Hat, Inc. +## Written by Gary Benson +## +## 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) --- ecj-3.5.1.orig/debian/README.Debian +++ ecj-3.5.1/debian/README.Debian @@ -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. + --- ecj-3.5.1.orig/debian/ecj.in +++ ecj-3.5.1/debian/ecj.in @@ -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-@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-@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 --- ecj-3.5.1.orig/debian/aotcompile.py +++ ecj-3.5.1/debian/aotcompile.py @@ -0,0 +1,430 @@ + +# -*- python -*- + +## Copyright (C) 2005, 2006 Red Hat, Inc. +## Written by Gary Benson +## +## 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"] + +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) $(GCJFLAGS) $(RPATH) -Wl,-O1 --main=org.eclipse.jdt.internal.compiler.batch.Main $^ -o $@ + +ecj1: $(%(base)s_OBJECTS) resources.o + $(GCJ) $(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] --- ecj-3.5.1.orig/debian/ecj-gcj.install +++ ecj-3.5.1/debian/ecj-gcj.install @@ -0,0 +1 @@ +debian/tmp/usr/bin/ecj-gcj --- ecj-3.5.1.orig/debian/rules +++ ecj-3.5.1/debian/rules @@ -0,0 +1,255 @@ +#!/usr/bin/make -f + +include /usr/share/cdbs/1/rules/debhelper.mk +include /usr/share/cdbs/1/rules/simple-patchsys.mk + +DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) + +GCC_VERSION = $(shell ls -l /usr/bin/gcj | sed 's/.*-> gcj-\(.*\)/\1/') + +LIBGCJ_EXT = 12 +LIBGCJ_SOVER = 12 +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/gcj-$(GCC_VERSION)-$(LIBGCJ_SOVER) + +# work around ecj1 having fallen out of the gcc search path +PATH := $(CURDIR):$(PATH) +export PATH + +with_native := yes +with_rebuild := yes +with_sourcebuild := yes + +ifneq (,$(filter $(DEB_HOST_ARCH), 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/ + 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' \ + | 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) \ + --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) \ + --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:: + mkdir -p debian/tmp/usr/share/java + install -m 644 build/dist/$(JAR) debian/tmp/usr/share/java/ + +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 + +RR=../cvs/R3_5_maintenance/ +RR=../cvs/R3_5_1/ +tag = R3_5_1 + +get-source: + rm -rf org.eclipse.jdt.core +# @echo Press enter for the password +# cvs -d :pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse login +# cvs -z3 -d :pserver:anonymous@dev.eclipse.org:/cvsroot/eclipse \ +# co -r $(tag) org.eclipse.jdt.core + 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 + + 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 + + find tmp-src -name CVS | xargs -r rm -rf --- ecj-3.5.1.orig/debian/ecj.prerm +++ ecj-3.5.1/debian/ecj.prerm @@ -0,0 +1,5 @@ +#! /bin/sh -e + +update-alternatives --quiet --remove javac /usr/bin/ecj + +#DEBHELPER# --- ecj-3.5.1.orig/debian/libecj-java.install +++ ecj-3.5.1/debian/libecj-java.install @@ -0,0 +1 @@ +debian/tmp/usr/share/java/eclipse-ecj.jar --- ecj-3.5.1.orig/debian/ecj.install +++ ecj-3.5.1/debian/ecj.install @@ -0,0 +1 @@ +debian/tmp/usr/bin/ecj --- ecj-3.5.1.orig/debian/ecj.manpages +++ ecj-3.5.1/debian/ecj.manpages @@ -0,0 +1 @@ +debian/ecj.1 --- ecj-3.5.1.orig/debian/classfile.py +++ ecj-3.5.1/debian/classfile.py @@ -0,0 +1,222 @@ + +## Copyright (C) 2004, 2005 Red Hat, Inc. +## Written by Gary Benson +## +## 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 + "" 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": ""}) + result.append("%-13s %s" % ( + attr + ":", repr(value).replace( + "'Code': ''", "'Code': "))) + 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") + --- ecj-3.5.1.orig/debian/libecj-java-gcj.postrm +++ ecj-3.5.1/debian/libecj-java-gcj.postrm @@ -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# --- ecj-3.5.1.orig/debian/libecj-java.links +++ ecj-3.5.1/debian/libecj-java.links @@ -0,0 +1 @@ +/usr/share/java/eclipse-ecj.jar /usr/share/java/ecj.jar --- ecj-3.5.1.orig/debian/ecj.postinst +++ ecj-3.5.1/debian/ecj.postinst @@ -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# --- ecj-3.5.1.orig/debian/control +++ ecj-3.5.1/debian/control @@ -0,0 +1,68 @@ +Source: ecj +Section: java +Priority: optional +Maintainer: Debian Java Maintainers +Uploaders: Jerry Haltom , Michael Koch , Matthias Klose +Build-Depends: cdbs (>= 0.4.90ubuntu9), debhelper (>= 5), + gcj-jdk, + libgcj-bc (>= 4.4.6), + libecj-java (>= 3.3.0+0728) [arm], unzip [arm], + fastjar, ant, zip, dpkg (>= 1.13.19), python, time +Build-Conflicts: ecj-bootstrap-gcj (<< 3.2.2) +Standards-Version: 3.9.2 + +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 +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. --- ecj-3.5.1.orig/debian/libecj-java-gcj.postinst +++ ecj-3.5.1/debian/libecj-java-gcj.postinst @@ -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# --- ecj-3.5.1.orig/debian/ecj-gcj.overrides +++ ecj-3.5.1/debian/ecj-gcj.overrides @@ -0,0 +1 @@ +ecj-gcj binary: binary-or-shlib-defines-rpath --- ecj-3.5.1.orig/debian/copyright +++ ecj-3.5.1/debian/copyright @@ -0,0 +1,311 @@ +This package was debianized by Jerry Haltom 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. + +------------------------------------------------------------------------------ + +icu4j was downloaded from +ftp://ftp.software.ibm.com/software/globalization/icu/icu4j/3.4.5/icu4jsrc_3_4_5.jar + +Copyright Holder: IBM and contributors + +License: + +ICU4J license - ICU4J 1.3.1 and later + + COPYRIGHT AND PERMISSION NOTICE + + Copyright (c) 1995-2006 International Business Machines Corporation + and others + + All rights reserved. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, and/or sell copies of the Software, and to permit persons + to whom the Software is furnished to do so, provided that the above + copyright notice(s) and this permission notice appear in all copies of + the Software and that both the above copyright notice(s) and this + permission notice appear in supporting documentation. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT + OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR + HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY + SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER + RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF + CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + + Except as contained in this notice, the name of a copyright holder + shall not be used in advertising or otherwise to promote the sale, use + or other dealings in this Software without prior written authorization + of the copyright holder. + _________________________________________________________________ + + All trademarks and registered trademarks mentioned herein are the + property of their respective owners. + +------------------------------------------------------------------------------ + +jsch was downloaded from http://www.sourceforget.net/jsch + +License: + +------------------------------------------------------------------------------ +Copyright (c) 2002,2003,2004 Atsuhiko Yamanaka, JCraft,Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) 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 OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --- ecj-3.5.1.orig/debian/changelog +++ ecj-3.5.1/debian/changelog @@ -0,0 +1,471 @@ +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 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 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 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 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 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 Sun, 15 Feb 2009 22:34:28 +0100 + +ecj (3.3.0+0728-11) unstable; urgency=low + + * Build again for alpha. + + -- Matthias Klose 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 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 Wed, 09 Apr 2008 04:12:54 +0200 + +ecj (3.3.0+0728-8) unstable; urgency=low + + * Fix build failure on alpha. + + -- Matthias Klose 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 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 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 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 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 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 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 Sat, 25 Aug 2007 12:35:30 +0200 + +ecj (3.3.0-2) unstable; urgency=low + + * Apply fix for upstream report #195317. + + -- Matthias Klose 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 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 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 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 Sun, 29 Apr 2007 22:19:47 +0200 + +ecj (3.2.2-1) unstable; urgency=low + + * Upload to unstable. + + -- Matthias Klose 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 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 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 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 Tue, 9 Jan 2007 00:09:22 +0100 + +ecj-bootstrap (3.2.1-3) unstable; urgency=low + + * Add missing build dependency. + + -- Matthias Klose 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 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 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 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 Sun, 13 Aug 2006 13:01:45 +0200 + +ecj-bootstrap (3.2-1) unstable; urgency=low + + * New upstream version. + + -- Matthias Klose 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 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 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 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 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 Sun, 26 Feb 2006 21:00:44 +0000 + +ecj-bootstrap (3.1.2-2ubuntu2) dapper; urgency=low + + * Build using gcj-4.1. + + -- Matthias Klose 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 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 Thu, 9 Feb 2006 16:33:45 +0000 + +ecj-bootstrap (3.1.2-1) unstable; urgency=low + + * New upstream version. + + -- Matthias Klose 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 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 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 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 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 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 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 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 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 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 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 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 Sat, 11 Jun 2005 16:57:27 +0000 + +ecj-bootstrap (3.0.1-3) experimental; urgency=low + + * Synchronize. + + -- Matthias Klose 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 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 Sun, 22 May 2005 15:53:07 +0000 + +ecj-bootstrap (3.0.1-1ubuntu5) hoary; urgency=low + + * Fixed path to ant.jar. + + -- Jerry Haltom 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 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 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 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 Fri, 11 Feb 2005 20:37:21 +0000 + +ecj-bootstrap (3.0.1-0) unstable; urgency=low + + * Initial release. + + -- Jerry Haltom Wed, 09 Feb 2005 19:36:07 -0600 --- ecj-3.5.1.orig/debian/ecj.1 +++ ecj-3.5.1/debian/ecj.1 @@ -0,0 +1,106 @@ +.TH ECJ "1" "October 2002" +.SH NAME +ecj \- manual page for eclipse JDT Compiler +.SH SYNOPSIS +.B ecj \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 ;;...; +.TP +\fB\-d\fR 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 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 classfile target setting +.TP +\fB\-nowarn\fR no warning (equivalent to '\-warn:none') +.TP +\fB\-warn\fR: 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:] 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 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 repeat compilation process times (perf analysis) +.PP +.SH AUTHOR +This manual page was written by Takshi Okamoto and Jan Schulz +. --- ecj-3.5.1.orig/debian/libecj-java-gcj.install +++ ecj-3.5.1/debian/libecj-java-gcj.install @@ -0,0 +1,2 @@ +debian/tmp/usr/lib/gcj/eclipse-ecj.jar.so +debian/tmp/usr/share/gcj