guix-commits
[Top][All Lists]
Advanced

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

08/17: gnu: avalon-toolkit: Update to 2.0.5a.


From: guix-commits
Subject: 08/17: gnu: avalon-toolkit: Update to 2.0.5a.
Date: Tue, 13 Feb 2024 06:34:49 -0500 (EST)

cbaines pushed a commit to branch master
in repository guix.

commit 52cca41c6fdb35d25c0543fef5fd90ebc855163c
Author: David Elsing <david.elsing@posteo.net>
AuthorDate: Sun Jan 28 23:02:00 2024 +0000

    gnu: avalon-toolkit: Update to 2.0.5a.
    
    The bug freeing static memory and the makefile have been improved upstream, 
so
    we don't have to work around them anymore. Now, two static libraries are 
built
    instead.
    
    * gnu/packages/chemistry.scm (avalon-toolkit): Update to 2.0.5a.
    [source]: Switch to git reference from GitHub. Adjust snippet. Add patch 
from
    the RDKit fork.
    [arguments]: Remove 'dont-free-static-memory phase. Use provided
    makefile. Adjust 'install phase.
    * gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch: New file.
    * gnu/local.mk (dist_patch_DATA): Add it.
    
    Signed-off-by: Christopher Baines <mail@cbaines.net>
---
 gnu/local.mk                                       |   2 +
 gnu/packages/chemistry.scm                         | 131 +++++++++------------
 .../patches/avalon-toolkit-rdkit-fixes.patch       | 110 +++++++++++++++++
 3 files changed, 166 insertions(+), 77 deletions(-)

diff --git a/gnu/local.mk b/gnu/local.mk
index 7806771eea..ab690795a7 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -63,6 +63,7 @@
 # Copyright © 2023 gemmaro <gemmaro.dev@gmail.com>
 # Copyright © 2023 Herman Rimm <herman@rimm.ee>
 # Copyright © 2023 Troy Figiel <troy@troyfigiel.com>
+# Copyright © 2024 David Elsing <david.elsing@posteo.net>
 #
 # This file is part of GNU Guix.
 #
@@ -957,6 +958,7 @@ dist_patch_DATA =                                           
\
   %D%/packages/patches/audiofile-function-signature.patch      \
   %D%/packages/patches/automake-skip-amhello-tests.patch       \
   %D%/packages/patches/avahi-localstatedir.patch               \
+  %D%/packages/patches/avalon-toolkit-rdkit-fixes.patch                \
   %D%/packages/patches/avidemux-install-to-lib.patch           \
   %D%/packages/patches/awesome-reproducible-png.patch          \
   %D%/packages/patches/awesome-4.3-fno-common.patch            \
diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm
index 4a9dd97c5b..5e19bdf182 100644
--- a/gnu/packages/chemistry.scm
+++ b/gnu/packages/chemistry.scm
@@ -917,90 +917,67 @@ calculations and analyzing the results.")
 (define-public avalon-toolkit
   (package
     (name "avalon-toolkit")
-    (version "1.2.0")
-    (source
-     (origin
-       (method url-fetch)
-       (uri (string-append
-             "mirror://sourceforge/avalontoolkit/"
-             "AvalonToolkit_" (substring version 0 3) "/AvalonToolkit_"
-             version ".source.tar"))
-       (sha256
-        (base32
-         "0rnnyy6axs2da7aa4q6l30ldavbk49v6l22llj1adn74h1i67bpv"))
-       (modules '((guix build utils) (ice-9 ftw)))
-       (snippet
-        #~(begin
-            (delete-file-recursively "../SourceDistribution/java")))))
+    (version "2.0.5a")
+    (source (origin
+              (method git-fetch)
+              (uri (git-reference
+                    (url "https://github.com/rohdebe1/ava-formake";)
+                    (commit (string-append "AvalonToolkit_" version))))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1mfg40y5xc17sm59zdfc5sk22n9zm5zk0z1aw47chvl6hp465szk"))
+              (patches
+               (search-patches "avalon-toolkit-rdkit-fixes.patch"))
+              (modules '((guix build utils) (ice-9 ftw)))
+              (snippet
+               #~(begin
+                   (delete-file-recursively "src/main/java")
+                   (delete-file-recursively "src/test/target")))))
     (build-system gnu-build-system)
     (arguments
      (list
-      ;; There are no intended tests
+      ;; There is only one test, which is missing a file
       #:tests? #f
       #:phases
-      #~(let ((programs '("canonizer" "matchtest" "sketch" "smi2mol" 
"struchk")))
-          (modify-phases %standard-phases
-            (add-after 'unpack 'chdir
-              (lambda _ (chdir "common")))
-            (delete 'configure)
-            (add-before 'build 'dont-free-static-memory
-              (lambda _
-                (substitute* "reaccsio.c"
-                  (("MyFree\\(.*tempdir\\)" m)
-                   (string-append "/* freeing memory from getenv is bad */"
-                                  "// " m)))))
-            ;; The makefile has incorrect compiler flags and is missing some
-            ;; object files, so we build it ourselves.
-            (replace 'build
-              (lambda _
-                (for-each
-                 (lambda (part)
-                   (format #t "Compiling ~a.c ~~> ~a.o~%" part part)
-                   (invoke #$(cc-for-target) "-c" "-fPIC" "-O2"
-                           (string-append part ".c")
-                           "-o" (string-append part ".o")))
-                 (list "aacheck" "casutils" "denormal" "depictutil"
-                       "didepict" "fixcharges" "forio" "geometry"
-                       "graph" "hashcode" "layout" "local" "pattern"
-                       "perceive" "reaccsio" "rtutils" "set" "shortcut"
-                       "sketch" "ssmatch" "stereo" "symbol_lists"
-                       "symboltable" "utilities"))
-                (display "Building libavalontoolkit.so\n")
-                (apply invoke "gcc" "-fPIC" "-shared" "-lm"
-                       "-o" "libavalontoolkit.so" "canonizer.c" "smi2mol.c"
-                       "struchk.c" "patclean.c" (find-files "." "\\.o$"))
-                ;; patclean is not built here as there is an undeclared
-                ;; variable in main().
-                (for-each
-                 (lambda (program)
-                   (display (string-append "Building " program "\n"))
-                   (invoke "gcc" "-L." "-lavalontoolkit" "-lm" "-O2"
-                           (string-append "-Wl,-rpath=" #$output "/lib")
-                           "-DMAIN" (string-append program ".c") "-o" program))
-                 programs)))
-            (replace 'install
-              (lambda _
-                ;; Executables
+      #~(modify-phases %standard-phases
+          (delete 'configure)
+          (replace 'build
+            (lambda* (#:key parallel-build? #:allow-other-keys)
+              (mkdir "build")
+              (mkdir-p "target/executables")
+              (mkdir-p "target/libraries")
+              (invoke "make" "programs" "-j"
+                      (if parallel-build?
+                          (number->string (parallel-job-count))
+                          "1"))))
+          (replace 'install
+            (lambda _
+              ;; Executables
+              (let ((programs '("canonizer" "matchtest" "smi2mol" "struchk")))
                 (for-each
                  (lambda (program)
-                   (install-file program (string-append #$output "/bin")))
-                 programs)
-                (for-each
-                 (lambda (name)
-                   (symlink (string-append #$output "/bin/smi2mol")
-                            (string-append #$output "/bin/" name)))
-                 '("mol2smi" "rdf2smi" "mol2tbl" "mol2sma" "smi2rdf"))
-                ;; Library
-                (install-file "libavalontoolkit.so"
-                              (string-append #$output "/lib"))
-                (for-each
-                 (lambda (file)
-                   (install-file file (string-append #$output
-                                                    "/include/avalontoolkit")))
-                 (find-files "." "\\.h$"))
-                (install-file "../license.txt"
-                              (string-append #$output "/share/doc/"
-                                             #$name "-" #$version "/"))))))))
+                   (install-file (string-append "target/executables/" program)
+                                 (string-append #$output "/bin")))
+                 programs))
+              (for-each
+               (lambda (name)
+                 (symlink (string-append #$output "/bin/smi2mol")
+                          (string-append #$output "/bin/" name)))
+               '("mol2smi" "rdf2smi" "mol2tbl" "mol2sma" "smi2rdf"))
+              ;; Library
+              (install-file "target/libraries/libavalon_tools.a"
+                            (string-append #$output "/lib"))
+              (install-file "target/libraries/libavalon4rdkit.a"
+                            (string-append #$output "/lib"))
+              (for-each
+               (lambda (file)
+                 (install-file file (string-append #$output
+                                                   "/include/avalontoolkit")))
+               (find-files "src/main/C/include" "\\.h$"))
+              (install-file "license.txt"
+                            (string-append #$output "/share/doc/"
+                                           #$name "-" #$version "/")))))))
     (home-page "https://sourceforge.net/projects/avalontoolkit/";)
     (synopsis "Tools for SMILES and MOL files and for structure 
fingerprinting")
     (description "This package contains a library and programs for
diff --git a/gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch 
b/gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch
new file mode 100644
index 0000000000..c93a9869ed
--- /dev/null
+++ b/gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch
@@ -0,0 +1,110 @@
+Patches taken from the rdkit fork at this commit (there version
+AvalonToolkit_2.0.6-pre.2):
+https://github.com/rdkit/ava-formake/commit/d05bee0382b8f4696b2b4b05b0038fb7d559520a
+
+diff -ur a/src/main/C/common/reaccsio.c b/src/main/C/common/reaccsio.c
+--- a/src/main/C/common/reaccsio.c
++++ b/src/main/C/common/reaccsio.c
+@@ -322,34 +322,49 @@
+       fprintf(fp,"\n");
+ }
+ 
++#define MAX_BONDLINE_FIELDS 7
++#define BONDLINE_FIELD_LEN 3
++
+ int ReadREACCSBond(Fortran_FILE *fp, struct reaccs_bond_t *bp)
+ {
+-   int nitems, i;
+-   char buffer[MAX_BUFFER+1];
++   int nitems, i, j, k;
++   int bond_line_len, n_chars, pos;
++   int *ptrarray[MAX_BONDLINE_FIELDS];
++   char c;
++   char buffer[BONDLINE_FIELD_LEN+1];
+ 
+    if (fp->status != FORTRAN_NORMAL) return(fp->status);
+ 
+-   strncpy(buffer,fp->buffer,MAX_BUFFER);
+-   /* zero pad only atom numbers! */
+-   for (i=0; i<6; i++) if (buffer[i] == ' ') buffer[i] = '0';
+-
+    bp->stereo_symbol = 0;
+    bp->dummy = 0;
+    bp->topography = 0;
+    bp->reaction_mark = NONE;
+-   // make sure spaces are interpreted the Fortran-way
+-   for (i=9; i<strlen(buffer)  &&  i<21; i+=3)
+-   {
+-       if ((i+1)<strlen(buffer)  &&  buffer[i+1]==' ') buffer[i+1] = '0';
+-       if ((i+2)<strlen(buffer)  &&  buffer[i+2]==' ') buffer[i+2] = '0';
++   ptrarray[0] = &bp->atoms[0];
++   ptrarray[1] = &bp->atoms[1];
++   ptrarray[2] = &bp->bond_type;
++   ptrarray[3] = &bp->stereo_symbol;
++   ptrarray[4] = &bp->dummy;
++   ptrarray[5] = &bp->topography;
++   ptrarray[6] = &bp->reaction_mark;
++   bond_line_len = strlen(fp->buffer);
++   nitems = bond_line_len ? (bond_line_len - 1) / BONDLINE_FIELD_LEN + 1 : 0;
++   if (nitems > MAX_BONDLINE_FIELDS)
++      nitems = MAX_BONDLINE_FIELDS;
++   for (i = 0; i < nitems; ++i)
++   {
++      pos = i * BONDLINE_FIELD_LEN;
++      memset(buffer, 0, BONDLINE_FIELD_LEN + 1);
++      n_chars = bond_line_len - pos;
++      if (n_chars > BONDLINE_FIELD_LEN)
++         n_chars = BONDLINE_FIELD_LEN;
++      for (j = 0, k = 0; j < n_chars; ++j)
++      {
++         c = fp->buffer[pos + j];
++         if (c != ' ')
++            buffer[k++] = c;
++      }
++      sscanf(buffer, "%3d", ptrarray[i]);
+    }
+-   nitems = sscanf(buffer,
+-                   "%3d%3d%3d%3d%3d%3d%3d",
+-                   &bp->atoms[0],   &bp->atoms[1],
+-                   &bp->bond_type,  &bp->stereo_symbol,
+-                   &bp->dummy,
+-                   &bp->topography, &bp->reaction_mark);
+-
+    if (nitems >= 3)
+    {
+       GetBuffer(fp);
+@@ -1582,6 +1597,8 @@
+ 
+    PrintREACCSMolecule(fp, mp,"");
+ 
++   fputc('\0', fp);
++   fflush(fp);
+    rewind(fp);
+ 
+    MolStr = _ReadFile(fp);
+diff -ur a/src/main/C/programs/struchk.c b/src/main/C/programs/struchk.c
+--- a/src/main/C/programs/struchk.c
++++ b/src/main/C/programs/struchk.c
+@@ -1581,6 +1581,22 @@
+ 
+    if ((result & SIZE_CHECK_FAILED) == 0)
+    {
++      for (i = 0; i < mp->n_bonds; ++i) {
++         for (j = 0; j < 2; ++j) {
++            if (mp->bond_array[i].atoms[j] < 1 || mp->bond_array[i].atoms[j] 
> mp->n_atoms)
++            {
++               snprintf(msg_buffer, MAXMSG,
++                  "%10s    : illegal atom # (%d, max allowed is %d) in bond 
%d",
++                  mp->name, mp->bond_array[i].atoms[j], mp->n_atoms, i + 1);
++               AddMsgToList(msg_buffer);
++               result |= SIZE_CHECK_FAILED;
++            }
++         }
++      }
++   }
++
++   if ((result & SIZE_CHECK_FAILED) == 0)
++   {
+       if (convert_atom_texts)
+       {
+          tmp = ConvertAtomAliases(mp);



reply via email to

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