guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

09/09: gnu: Add java-apache-ivy.


From: julien lepiller
Subject: 09/09: gnu: Add java-apache-ivy.
Date: Sun, 29 Apr 2018 17:23:33 -0400 (EDT)

roptat pushed a commit to branch master
in repository guix.

commit f1f4a4f016291509ed97034af0216573cdacf36c
Author: Julien Lepiller <address@hidden>
Date:   Wed Apr 18 17:19:12 2018 +0200

    gnu: Add java-apache-ivy.
    
    * gnu/package/java.scm (java-apache-ivy): New variable.
    * gnu/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch:
    New file.
    * gnu/local.mk (dist_patch_DATA): Add it.
---
 gnu/local.mk                                       |   1 +
 gnu/packages/java.scm                              | 101 +++++++++++++++++++++
 ...va-apache-ivy-port-to-latest-bouncycastle.patch |  81 +++++++++++++++++
 3 files changed, 183 insertions(+)

diff --git a/gnu/local.mk b/gnu/local.mk
index cbf2c6f..ec11b26 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -792,6 +792,7 @@ dist_patch_DATA =                                           
\
   %D%/packages/patches/intltool-perl-compatibility.patch       \
   %D%/packages/patches/isl-0.11.1-aarch64-support.patch        \
   %D%/packages/patches/jacal-fix-texinfo.patch                 \
+  %D%/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch       
\
   %D%/packages/patches/java-jeromq-fix-tests.patch             \
   %D%/packages/patches/java-powermock-fix-java-files.patch             \
   %D%/packages/patches/java-simple-xml-fix-tests.patch         \
diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index a63d970..90fd07c 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -9705,3 +9705,104 @@ and Pageant included in Putty. This component contains 
a connector factory.")))
     (description "jsch-agent-proxy is a proxy program to OpenSSH's ssh-agent
 and Pageant included in Putty. This component contains a library to use
 jsch-agent-proxy with JSch.")))
+
+(define-public java-apache-ivy
+  (package
+    (name "java-apache-ivy")
+    (version "2.4.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "mirror://apache//ant/ivy/" version
+                                  "/apache-ivy-" version "-src.tar.gz"))
+              (sha256
+               (base32
+                "1xkfn57g2m7l6y0xdq75x5rnrgk52m9jx2xah70g3ggl8750hbr0"))
+              (patches
+                (search-patches
+                  "java-apache-ivy-port-to-latest-bouncycastle.patch"))))
+    (build-system ant-build-system)
+    (arguments
+     `(#:jar-name "ivy.jar"
+       #:tests? #f
+       #:phases
+       (modify-phases %standard-phases
+         (add-before 'build 'remove-example
+           (lambda _
+             (delete-file-recursively "src/example")
+             #t))
+         (add-before 'build 'copy-resources
+           (lambda _
+             (with-directory-excursion "src/java"
+               (for-each (lambda (file)
+                           (install-file file (string-append 
"../../build/classes/" (dirname file))))
+                 (append
+                   (find-files "." ".*.css")
+                   (find-files "." ".*.ent")
+                   (find-files "." ".*.html")
+                   (find-files "." ".*.properties")
+                   (find-files "." ".*.xsd")
+                   (find-files "." ".*.xsl")
+                   (find-files "." ".*.xml"))))))
+         (add-before 'build 'fix-vfs
+           (lambda _
+             (substitute*
+               
'("src/java/org/apache/ivy/plugins/repository/vfs/VfsRepository.java"
+                 
"src/java/org/apache/ivy/plugins/repository/vfs/VfsResource.java")
+               (("import org.apache.commons.vfs") "import 
org.apache.commons.vfs2"))
+             #t))
+         (add-before 'install 'copy-manifest
+           (lambda _
+             (install-file "META-INF/MANIFEST.MF" "build/classes/META-INF")
+             #t))
+         (add-before 'install 'repack
+           (lambda _
+             (invoke "jar" "-cmf" "build/classes/META-INF/MANIFEST.MF" 
"build/jar/ivy.jar"
+                     "-C" "build/classes" ".")
+             #t))
+         (add-after 'install 'install-bin
+           (lambda* (#:key outputs #:allow-other-keys)
+             (let* ((bin (string-append (assoc-ref outputs "out") "/bin"))
+                    (ivy (string-append bin "/ivy"))
+                    (jar (string-append (assoc-ref outputs "out") 
"/share/java/ivy.jar")))
+               (mkdir-p bin)
+               (with-output-to-file ivy
+                 (lambda _
+                   (display (string-append
+                              "#!" (which "sh") "\n"
+                              "if [[ -z $CLASSPATH ]]; then\n"
+                              "  cp=\"" (getenv "CLASSPATH") ":" jar "\"\n"
+                              "else\n"
+                              "  cp=\"" (getenv "CLASSPATH") ":" jar 
":$CLASSPATH\"\n"
+                              "fi\n"
+                              (which "java") " -cp $cp org.apache.ivy.Main 
address@hidden"))))
+               (chmod ivy #o755)
+               #t))))))
+    (inputs
+     `(("java-bouncycastle" ,java-bouncycastle)
+       ("java-commons-cli" ,java-commons-cli)
+       ("java-commons-collections" ,java-commons-collections)
+       ("java-commons-httpclient" ,java-commons-httpclient)
+       ("java-commons-lang" ,java-commons-lang)
+       ("java-commons-vfs" ,java-commons-vfs)
+       ("java-jakarta-oro" ,java-jakarta-oro)
+       ("java-jsch" ,java-jsch)
+       ("java-jsch-agentproxy-core" ,java-jsch-agentproxy-core)
+       ("java-jsch-agentproxy-connector-factory" 
,java-jsch-agentproxy-connector-factory)
+       ("java-jsch-agentproxy-jsch" ,java-jsch-agentproxy-jsch)
+       ("java-junit" ,java-junit)))
+    (home-page "https://ant.apache.org/ivy";)
+    (synopsis "Dependency manager for the Java programming language")
+    (description "Ivy is a tool for managing (recording, tracking, resolving
+and reporting) project dependencies.  It is characterized by the following:
+
address@hidden
address@hidden flexibility and configurability - Ivy is essentially process 
agnostic
+      and is not tied to any methodology or structure.  Instead it provides the
+      necessary flexibility and configurability to be adapted to a broad range
+      of dependency management and build processes.
address@hidden tight integration with Apache Ant - while available as a 
standalone tool,
+      Ivy works particularly well with Apache Ant providing a number of
+      powerful Ant tasks ranging from dependency resolution to dependency
+      reporting and publication.
address@hidden itemize")
+    (license license:asl2.0)))
diff --git 
a/gnu/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch 
b/gnu/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch
new file mode 100644
index 0000000..506de83
--- /dev/null
+++ b/gnu/packages/patches/java-apache-ivy-port-to-latest-bouncycastle.patch
@@ -0,0 +1,81 @@
+From 29055a825af5405e44ffcd59a776f8952bdc7203 Mon Sep 17 00:00:00 2001
+From: Julien Lepiller <address@hidden>
+Date: Fri, 15 Dec 2017 16:03:23 +0100
+Subject: [PATCH] Port to latest bouncycastle.
+
+---
+ .../bouncycastle/OpenPGPSignatureGenerator.java    | 34 ++++++++++------------
+ 1 file changed, 16 insertions(+), 18 deletions(-)
+
+diff --git 
a/src/java/org/apache/ivy/plugins/signer/bouncycastle/OpenPGPSignatureGenerator.java
 
b/src/java/org/apache/ivy/plugins/signer/bouncycastle/OpenPGPSignatureGenerator.java
+index af7beae..34c204f 100644
+--- 
a/src/java/org/apache/ivy/plugins/signer/bouncycastle/OpenPGPSignatureGenerator.java
++++ 
b/src/java/org/apache/ivy/plugins/signer/bouncycastle/OpenPGPSignatureGenerator.java
+@@ -41,6 +41,11 @@ import org.bouncycastle.openpgp.PGPSecretKeyRingCollection;
+ import org.bouncycastle.openpgp.PGPSignature;
+ import org.bouncycastle.openpgp.PGPSignatureGenerator;
+ import org.bouncycastle.openpgp.PGPUtil;
++import org.bouncycastle.openpgp.operator.PBESecretKeyDecryptor;
++import org.bouncycastle.openpgp.operator.bc.BcPBESecretKeyDecryptorBuilder;
++import org.bouncycastle.openpgp.operator.bc.BcPGPDigestCalculatorProvider;
++import org.bouncycastle.openpgp.operator.bc.BcPGPContentSignerBuilder;
++import org.bouncycastle.openpgp.operator.bc.BcKeyFingerprintCalculator;
+ 
+ public class OpenPGPSignatureGenerator implements SignatureGenerator {
+ 
+@@ -101,11 +106,15 @@ public class OpenPGPSignatureGenerator implements 
SignatureGenerator {
+                 pgpSec = readSecretKey(keyIn);
+             }
+ 
+-            PGPPrivateKey pgpPrivKey = 
pgpSec.extractPrivateKey(password.toCharArray(),
+-                BouncyCastleProvider.PROVIDER_NAME);
+-            PGPSignatureGenerator sGen = new 
PGPSignatureGenerator(pgpSec.getPublicKey()
+-                    .getAlgorithm(), PGPUtil.SHA1, 
BouncyCastleProvider.PROVIDER_NAME);
+-            sGen.initSign(PGPSignature.BINARY_DOCUMENT, pgpPrivKey);
++            PBESecretKeyDecryptor decryptor =
++                    new BcPBESecretKeyDecryptorBuilder(new 
BcPGPDigestCalculatorProvider())
++                    .build(password.toCharArray());
++            PGPPrivateKey pgpPrivKey = pgpSec.extractPrivateKey(decryptor);
++            BcPGPContentSignerBuilder builder = new BcPGPContentSignerBuilder(
++                            pgpSec.getPublicKey().getAlgorithm(), 
PGPUtil.SHA1);
++
++            PGPSignatureGenerator sGen = new PGPSignatureGenerator(builder);
++            sGen.init(PGPSignature.BINARY_DOCUMENT, pgpPrivKey);
+ 
+             in = new FileInputStream(src);
+             out = new BCPGOutputStream(new ArmoredOutputStream(new 
FileOutputStream(dest)));
+@@ -116,22 +125,10 @@ public class OpenPGPSignatureGenerator implements 
SignatureGenerator {
+             }
+ 
+             sGen.generate().encode(out);
+-        } catch (SignatureException e) {
+-            IOException ioexc = new IOException();
+-            ioexc.initCause(e);
+-            throw ioexc;
+         } catch (PGPException e) {
+             IOException ioexc = new IOException();
+             ioexc.initCause(e);
+             throw ioexc;
+-        } catch (NoSuchAlgorithmException e) {
+-            IOException ioexc = new IOException();
+-            ioexc.initCause(e);
+-            throw ioexc;
+-        } catch (NoSuchProviderException e) {
+-            IOException ioexc = new IOException();
+-            ioexc.initCause(e);
+-            throw ioexc;
+         } finally {
+             if (out != null) {
+                 try {
+@@ -156,7 +153,8 @@ public class OpenPGPSignatureGenerator implements 
SignatureGenerator {
+ 
+     private PGPSecretKey readSecretKey(InputStream in) throws IOException, 
PGPException {
+         in = PGPUtil.getDecoderStream(in);
+-        PGPSecretKeyRingCollection pgpSec = new 
PGPSecretKeyRingCollection(in);
++        PGPSecretKeyRingCollection pgpSec = new PGPSecretKeyRingCollection(in,
++                        new BcKeyFingerprintCalculator());
+ 
+         PGPSecretKey key = null;
+         for (Iterator it = pgpSec.getKeyRings(); key == null && 
it.hasNext();) {
+-- 
+2.15.1



reply via email to

[Prev in Thread] Current Thread [Next in Thread]