From 52cca41c6fdb35d25c0543fef5fd90ebc855163c Mon Sep 17 00:00:00 2001 From: David Elsing Date: Sun, 28 Jan 2024 23:02:00 +0000 Subject: 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 --- .../patches/avalon-toolkit-rdkit-fixes.patch | 110 +++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch (limited to 'gnu/packages/patches/avalon-toolkit-rdkit-fixes.patch') 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; iatoms[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); -- cgit v1.2.3