diff options
author | Petteri Räty <betelgeuse@gentoo.org> | 2009-03-15 12:18:37 +0000 |
---|---|---|
committer | Petteri Räty <betelgeuse@gentoo.org> | 2009-03-15 12:18:37 +0000 |
commit | 56b58eb0930152c52dabe7cfcb848e692c8800c3 (patch) | |
tree | c6f16fe131029f391dcc0fd2846eece0687dbb63 /dev-java | |
parent | Bump to 0.0.6. (diff) | |
download | gentoo-2-56b58eb0930152c52dabe7cfcb848e692c8800c3.tar.gz gentoo-2-56b58eb0930152c52dabe7cfcb848e692c8800c3.tar.bz2 gentoo-2-56b58eb0930152c52dabe7cfcb848e692c8800c3.zip |
Add patch from trunk for an issue with pkg-info files. Fixes bug #262511. Thanks to John W Eckhart <jweckhart@gmail.com> for reporting.
(Portage version: 2.2_rc25/cvs/Linux i686)
Diffstat (limited to 'dev-java')
-rw-r--r-- | dev-java/ant-core/ChangeLog | 9 | ||||
-rw-r--r-- | dev-java/ant-core/ant-core-1.7.1-r3.ebuild | 104 | ||||
-rw-r--r-- | dev-java/ant-core/files/1.7.1-pkg-info.patch | 244 |
3 files changed, 356 insertions, 1 deletions
diff --git a/dev-java/ant-core/ChangeLog b/dev-java/ant-core/ChangeLog index 86e205e96a92..0025cf60c3e5 100644 --- a/dev-java/ant-core/ChangeLog +++ b/dev-java/ant-core/ChangeLog @@ -1,11 +1,18 @@ # ChangeLog for dev-java/ant-core # Copyright 2002-2009 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/dev-java/ant-core/ChangeLog,v 1.91 2009/01/07 15:05:15 ranger Exp $ +# $Header: /var/cvsroot/gentoo-x86/dev-java/ant-core/ChangeLog,v 1.92 2009/03/15 12:18:36 betelgeuse Exp $ # Ant-core blocks lower/older versions of ant-tasks, # since it will not run when there is a version mismatch betwean the 2 packages # Please unemerge ant-tasks when updating ant-core. +*ant-core-1.7.1-r3 (15 Mar 2009) + + 15 Mar 2009; Petteri Räty <betelgeuse@gentoo.org> + +files/1.7.1-pkg-info.patch, +ant-core-1.7.1-r3.ebuild: + Add patch from trunk for an issue with pkg-info files. Fixes bug #262511. + Thanks to John W Eckhart <jweckhart@gmail.com> for reporting. + 07 Jan 2009; Brent Baude <ranger@gentoo.org> ant-core-1.7.1-r2.ebuild: Marking ant-core-1.7.1-r2 ppc64 for bug 252819 diff --git a/dev-java/ant-core/ant-core-1.7.1-r3.ebuild b/dev-java/ant-core/ant-core-1.7.1-r3.ebuild new file mode 100644 index 000000000000..fa52e59ccc48 --- /dev/null +++ b/dev-java/ant-core/ant-core-1.7.1-r3.ebuild @@ -0,0 +1,104 @@ +# Copyright 1999-2009 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/dev-java/ant-core/ant-core-1.7.1-r3.ebuild,v 1.1 2009/03/15 12:18:36 betelgeuse Exp $ + +EAPI="2" + +# don't depend on itself +JAVA_ANT_DISABLE_ANT_CORE_DEP=true +# rewriting build.xml files for the testcases has no reason atm +JAVA_PKG_BSFIX_ALL=no +JAVA_PKG_IUSE="doc source" +inherit java-pkg-2 java-ant-2 + +MY_P="apache-ant-${PV}" + +DESCRIPTION="Java-based build tool similar to 'make' that uses XML configuration files." +HOMEPAGE="http://ant.apache.org/" +SRC_URI="mirror://apache/ant/source/${MY_P}-src.tar.bz2 + mirror://gentoo/ant-${PV}-gentoo.tar.bz2" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64 ~ia64 ~ppc ~ppc64 ~x86 ~x86-fbsd" +IUSE="" + +DEPEND=">=virtual/jdk-1.4 + !dev-java/ant-tasks + !dev-java/ant-optional" +RDEPEND="${DEPEND}" + +S="${WORKDIR}/${MY_P}" + +src_prepare() { + # remove bundled xerces + rm -v lib/*.jar || die + + epatch "${FILESDIR}/1.7.1-pkg-info.patch" + + # use our split-ant build.xml + mv -f "${WORKDIR}/build.xml" . || die + + # bug #196080 + java-ant_bsfix_one build.xml + java-pkg-2_src_prepare +} + +src_compile() { + export ANT_HOME="" + + local bsyscp + + # this ensures that when building ant with bootstrapped ant, + # only the source is used for resolving references, and not + # the classes in bootstrapped ant + # but jikes in kaffe has issues with this... + if ! java-pkg_current-vm-matches kaffe; then + bsyscp="-Dbuild.sysclasspath=ignore" + fi + + CLASSPATH="$(java-config -t)" ./build.sh ${bsyscp} jars-core internal_dist \ + $(use_doc javadocs) || die "build failed" +} + +src_install() { + dodir /usr/share/ant/lib + for jar in ant.jar ant-bootstrap.jar ant-launcher.jar ; do + java-pkg_dojar build/lib/${jar} + dosym /usr/share/${PN}/lib/${jar} /usr/share/ant/lib/${jar} + done + + newbin "${FILESDIR}/${PV}-ant-r1" ant || die "failed to install wrapper" + dodir /usr/share/${PN}/bin + for each in antRun runant.pl runant.py complete-ant-cmd.pl ; do + dobin "${S}/src/script/${each}" + dosym /usr/bin/${each} /usr/share/${PN}/bin/${each} + done + dosym /usr/share/${PN}/bin /usr/share/ant/bin + + insinto /usr/share/${PN} + doins -r dist/etc + dosym /usr/share/${PN}/etc /usr/share/ant/etc + + echo "ANT_HOME=\"/usr/share/ant\"" > "${T}/20ant" + doenvd "${T}/20ant" || die "failed to install env.d file" + + dodoc README WHATSNEW KEYS + + if use doc; then + dohtml welcome.html + dohtml -r docs/* + java-pkg_dojavadoc --symlink manual/api build/javadocs + fi + + use source && java-pkg_dosrc src/main/* +} + +pkg_postinst() { + elog "The way of packaging ant in Gentoo has changed significantly since" + elog "the 1.7.0 version, For more information, please see:" + elog "http://www.gentoo.org/proj/en/java/ant-guide.xml" + elog + elog "Since 1.7.1, the ant-tasks meta-ebuild has been removed and its USE" + elog "flags have been moved to dev-java/ant." +} diff --git a/dev-java/ant-core/files/1.7.1-pkg-info.patch b/dev-java/ant-core/files/1.7.1-pkg-info.patch new file mode 100644 index 000000000000..2531aeef6150 --- /dev/null +++ b/dev-java/ant-core/files/1.7.1-pkg-info.patch @@ -0,0 +1,244 @@ +Index: Javac.java +=================================================================== +--- src/main/org/apache/tools/ant/taskdefs/Javac.java (revision 672109) ++++ src/main/org/apache/tools/ant/taskdefs/Javac.java (revision 743910) +@@ -19,10 +19,12 @@ + package org.apache.tools.ant.taskdefs; + + 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 +34,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 +89,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 +117,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 +127,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. +@@ -183,13 +185,16 @@ + } + + /** +- * Value of the -source command-line switch; will be ignored +- * by all implementations except modern and jikes. ++ * Value of the -source command-line switch; will be ignored by ++ * all implementations except modern, jikes and gcj (gcj uses ++ * -fsource). ++ * ++ * <p>If you use this attribute together with jikes or gcj, you ++ * must make sure that your version of jikes supports the -source ++ * switch.</p> + * +- * If you use this attribute together with jikes, you must make +- * sure that your version of jikes supports the -source switch. +- * Legal values are 1.3, 1.4, 1.5, and 5 - by default, no +- * -source argument will be used at all. ++ * <p>Legal values are 1.3, 1.4, 1.5, and 5 - by default, no ++ * -source argument will be used at all.</p> + * + * @param v Value to assign to source. + */ +@@ -892,6 +897,7 @@ + */ + protected void resetFileLists() { + compileList = new File[0]; ++ packageInfos = new HashMap(); + } + + /** +@@ -909,8 +915,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 +1069,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 +1108,68 @@ + } + } + +- // ---------------------------------------------------------------- +- // 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; ++ } ++ String path = FILE_UTILS.removeLeadingPath(srcDir, f). ++ replace(File.separatorChar, '/'); ++ String suffix = "/package-info.java"; ++ if (!path.endsWith(suffix)) { ++ log("anomalous package-info.java path: " + path, Project.MSG_WARN); ++ continue; + } ++ String pkg = path.substring(0, path.length() - suffix.length()); ++ packageInfos.put(pkg, Long.valueOf(f.lastModified())); + } +- 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; ++ /** ++ * 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 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 ++ }; + +- 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; +- } +- return false; +- } +- +- private String relativePath(File src, File file) { +- return file.getAbsolutePath().substring( +- src.getAbsolutePath().length() + 1); +- } + } |