[pkg-java] r12724 - in trunk/ant1.7/debian: . patches

Matthias Klose doko at alioth.debian.org
Sat Jul 3 11:03:45 UTC 2010


Author: doko
Date: 2010-07-03 11:03:44 +0000 (Sat, 03 Jul 2010)
New Revision: 12724

Added:
   trunk/ant1.7/debian/patches/12_ant_upstream_43114.patch
Modified:
   trunk/ant1.7/debian/changelog
Log:
  * Fix ant to correctly build JAX-WS (upstream #43114).


Modified: trunk/ant1.7/debian/changelog
===================================================================
--- trunk/ant1.7/debian/changelog	2010-07-02 16:44:51 UTC (rev 12723)
+++ trunk/ant1.7/debian/changelog	2010-07-03 11:03:44 UTC (rev 12724)
@@ -1,12 +1,16 @@
-ant1.7 (1.7.1-7) UNRELEASED; urgency=low
+ant1.7 (1.7.1-7) unstable; urgency=medium
 
+  [ Niels Thykier ]
   * Team upload.
   * Replaced B-D on default-jdk-builddep with default-jdk and
     gcj-native-helper.
   * Bumped Standards-Versions to 3.9.0 - no changes required.
 
- -- Niels Thykier <niels at thykier.net>  Tue, 29 Jun 2010 22:22:53 +0200
+  [ Matthias Klose ]
+  * Fix ant to correctly build JAX-WS (upstream #43114).
 
+ -- Matthias Klose <doko at debian.org>  Sat, 03 Jul 2010 12:42:16 +0200
+
 ant1.7 (1.7.1-6) unstable; urgency=low
 
   * Add unversioned Provides. (Closes: #572328)

Added: trunk/ant1.7/debian/patches/12_ant_upstream_43114.patch
===================================================================
--- trunk/ant1.7/debian/patches/12_ant_upstream_43114.patch	                        (rev 0)
+++ trunk/ant1.7/debian/patches/12_ant_upstream_43114.patch	2010-07-03 11:03:44 UTC (rev 12724)
@@ -0,0 +1,220 @@
+--- src/main/org/apache/tools/ant/taskdefs/Javac.java.orig	2009/01/29 05:23:52	738761
++++ src/main/org/apache/tools/ant/taskdefs/Javac.java	2009/02/12 22:35:18	743910
+@@ -20,9 +20,12 @@
+ 
+ import java.io.File;
+ 
+-import java.util.ArrayList;
++import java.io.FileOutputStream;
++import java.io.IOException;
++import java.io.OutputStream;
++import java.util.HashMap;
+ import java.util.Iterator;
+-import java.util.List;
++import java.util.Map;
+ 
+ import org.apache.tools.ant.BuildException;
+ import org.apache.tools.ant.DirectoryScanner;
+@@ -32,6 +35,7 @@
+ import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory;
+ import org.apache.tools.ant.types.Path;
+ import org.apache.tools.ant.types.Reference;
++import org.apache.tools.ant.util.FileUtils;
+ import org.apache.tools.ant.util.GlobPatternMapper;
+ import org.apache.tools.ant.util.JavaEnvUtils;
+ import org.apache.tools.ant.util.SourceFileScanner;
+@@ -86,8 +90,7 @@
+     private static final String CLASSIC = "classic";
+     private static final String EXTJAVAC = "extJavac";
+ 
+-    private static final String PACKAGE_INFO_JAVA = "package-info.java";
+-    private static final String PACKAGE_INFO_CLASS = "package-info.class";
++    private static final FileUtils FILE_UTILS = FileUtils.getFileUtils();
+ 
+     private Path src;
+     private File destDir;
+@@ -115,6 +118,7 @@
+     protected boolean failOnError = true;
+     protected boolean listFiles = false;
+     protected File[] compileList = new File[0];
++    private Map/*<String,Long>*/ packageInfos = new HashMap();
+     // CheckStyle:VisibilityModifier ON
+ 
+     private String source;
+@@ -124,7 +128,6 @@
+     private String errorProperty;
+     private boolean taskSuccess = true; // assume the best
+     private boolean includeDestClasses = true;
+-    private List    updateDirList = new ArrayList();
+ 
+     /**
+      * Javac task for compilation of Java files.
+@@ -892,6 +895,7 @@
+      */
+     protected void resetFileLists() {
+         compileList = new File[0];
++        packageInfos = new HashMap();
+     }
+ 
+     /**
+@@ -909,8 +913,8 @@
+         SourceFileScanner sfs = new SourceFileScanner(this);
+         File[] newFiles = sfs.restrictAsFiles(files, srcDir, destDir, m);
+ 
+-        newFiles = removePackageInfoFiles(newFiles, srcDir, destDir);
+         if (newFiles.length > 0) {
++            lookForPackageInfos(srcDir, newFiles);
+             File[] newCompileList
+                 = new File[compileList.length + newFiles.length];
+             System.arraycopy(compileList, 0, newCompileList, 0,
+@@ -1063,10 +1067,12 @@
+ 
+             // finally, lets execute the compiler!!
+             if (adapter.execute()) {
+-                // Success - check
+-                for (Iterator i = updateDirList.iterator(); i.hasNext();) {
+-                    File file = (File) i.next();
+-                    file.setLastModified(System.currentTimeMillis());
++                // Success
++                try {
++                    generateMissingPackageInfoClasses();
++                } catch (IOException x) {
++                    // Should this be made a nonfatal warning?
++                    throw new BuildException(x, getLocation());
+                 }
+             } else {
+                 // Fail path
+@@ -1100,75 +1106,74 @@
+         }
+     }
+ 
+-    // ----------------------------------------------------------------
+-    //  Code to remove package-info.java files from compilation
+-    //  Since Ant 1.7.1.
+-    //
+-    //    package-info.java are files that contain package level
+-    //    annotations. They may or may not have corresponding .class
+-    //    files.
+-    //
+-    //    The following code uses the algorithm:
+-    //     * on entry we have the files that need to be compiled
+-    //     * if the filename is not package-info.java compile it
+-    //     * if a corresponding .class file exists compile it
+-    //     * if the corresponding class directory does not exist compile it
+-    //     * if the corresponding directory lastmodifed time is
+-    //       older than the java file, compile the java file and
+-    //       touch the corresponding class directory (on successful
+-    //       compilation).
+-    //
+-    // ----------------------------------------------------------------
+-    private File[] removePackageInfoFiles(
+-        File[] newFiles, File srcDir, File destDir) {
+-        if (!hasPackageInfo(newFiles)) {
+-            return newFiles;
+-        }
+-        List ret = new ArrayList();
+-        for (int i = 0; i < newFiles.length; ++i) {
+-            if (needsCompilePackageFile(newFiles[i], srcDir, destDir)) {
+-                ret.add(newFiles[i]);
++    private void lookForPackageInfos(File srcDir, File[] newFiles) {
++        for (int i = 0; i < newFiles.length; i++) {
++            File f = newFiles[i];
++            if (!f.getName().equals("package-info.java")) {
++                continue;
+             }
+-        }
+-        return (File[]) ret.toArray(new File[0]);
+-    }
+-
+-    private boolean hasPackageInfo(File[] newFiles) {
+-        for (int i = 0; i < newFiles.length; ++i) {
+-            if (newFiles[i].getName().equals(PACKAGE_INFO_JAVA)) {
+-                return true;
++            String path = FILE_UTILS.removeLeadingPath(srcDir, f).
++                    replace(File.separatorChar, '/');
++            String suffix = "/package-info.java";
++            if (!path.endsWith(suffix)) {
++                continue;
+             }
++            String pkg = path.substring(0, path.length() - suffix.length());
++            packageInfos.put(pkg, Long.valueOf(f.lastModified()));
+         }
+-        return false;
+     }
+ 
+-    private boolean needsCompilePackageFile(
+-        File file, File srcDir, File destDir) {
+-        if (!file.getName().equals(PACKAGE_INFO_JAVA)) {
+-            return true;
+-        }
+-        // return true if destDir contains the file
+-        String rel = relativePath(srcDir, file);
+-        File destFile = new File(destDir, rel);
+-        File parent = destFile.getParentFile();
+-        destFile = new File(parent, PACKAGE_INFO_CLASS);
+-        File sourceFile = new File(srcDir, rel);
+-        if (destFile.exists()) {
+-            return true;
+-        }
+-        // Dest file does not exist
+-        // Compile Source file if sourceFile is newer that destDir
+-        // TODO - use fs
+-        if (sourceFile.lastModified()
+-            > destFile.getParentFile().lastModified()) {
+-            updateDirList.add(destFile.getParentFile());
+-            return true;
++    /**
++     * Ensure that every {@code package-info.java} produced a {@code package-info.class}.
++     * Otherwise this task's up-to-date tracking mechanisms do not work.
++     * @see <a href="https://issues.apache.org/bugzilla/show_bug.cgi?id=43114">Bug #43114</a>
++     */
++    private void generateMissingPackageInfoClasses() throws IOException {
++        for (Iterator i = packageInfos.entrySet().iterator(); i.hasNext(); ) {
++            Map.Entry entry = (Map.Entry) i.next();
++            String pkg = (String) entry.getKey();
++            Long sourceLastMod = (Long) entry.getValue();
++            File pkgBinDir = new File(destDir, pkg.replace('/', File.separatorChar));
++            pkgBinDir.mkdirs();
++            File pkgInfoClass = new File(pkgBinDir, "package-info.class");
++            if (pkgInfoClass.isFile() && pkgInfoClass.lastModified() >= sourceLastMod.longValue()) {
++                continue;
++            }
++            log("Creating empty " + pkgInfoClass);
++            OutputStream os = new FileOutputStream(pkgInfoClass);
++            try {
++                os.write(PACKAGE_INFO_CLASS_HEADER);
++                byte[] name = pkg.getBytes("UTF-8");
++                int length = name.length + /* "/package-info" */ 13;
++                os.write((byte) length / 256);
++                os.write((byte) length % 256);
++                os.write(name);
++                os.write(PACKAGE_INFO_CLASS_FOOTER);
++            } finally {
++                os.close();
++            }
+         }
+-        return false;
+     }
+ 
+     private String relativePath(File src, File file) {
+         return file.getAbsolutePath().substring(
+             src.getAbsolutePath().length() + 1);
+     }
++
++    private static final byte[] PACKAGE_INFO_CLASS_HEADER = {
++        (byte) 0xca, (byte) 0xfe, (byte) 0xba, (byte) 0xbe, 0x00, 0x00, 0x00,
++        0x31, 0x00, 0x07, 0x07, 0x00, 0x05, 0x07, 0x00, 0x06, 0x01, 0x00, 0x0a,
++        0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x01, 0x00,
++        0x11, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2d, 0x69, 0x6e, 0x66,
++        0x6f, 0x2e, 0x6a, 0x61, 0x76, 0x61, 0x01
++    };
++    private static final byte[] PACKAGE_INFO_CLASS_FOOTER = {
++        0x2f, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x2d, 0x69, 0x6e, 0x66,
++        0x6f, 0x01, 0x00, 0x10, 0x6a, 0x61, 0x76, 0x61, 0x2f, 0x6c, 0x61, 0x6e,
++        0x67, 0x2f, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x02, 0x00, 0x00, 0x01,
++        0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03,
++        0x00, 0x00, 0x00, 0x02, 0x00, 0x04
++    };
++
+ }
++




More information about the pkg-java-commits mailing list