Pagina 1 di 1

Avogadro 2 is out :-)

Inviato: ven 1 gen 2021, 15:57
da gian_d
Ciao e buon anno a tutti.
Ci ho lavorato per alcuni giorni, ma alla fine sono riuscito a partorire il topolino e installare Avogadro2 (basato su qt5) sulla attuale current.

Immagine

L'architettura della piattaforma, ora sviluppata da OpenChemistry, è cambiata completamente e ho dovuto costruire gli slackbuild di alcune dipendenze che non sono presenti sul repository di Ponce. Alcune sono librerie opzionali che implementano l'utilizzo di Avogadro per contesti più complessi, come ad esempio i modelli molecolari delle proteine, altre che potenziano le funzioni computazionali e infine alcune dipendenze che sono parte integrante della piattaforma ma sviluppate come sottoprogetti, dal momento che Avogadro Application non è altro che l'interfaccia grafica.

Per ciascun pacchetto ho allestito i file "di servizio" secondo lo standard seguito da Slackbuilds.org: README, slack-desc, pacchetto.info e pacchetto.SlackBuild. Negli slackbuild ho adottato per le variabili $TAG e $TMP valori diversi da "_SBo" e "/tmp/SBo", trattandosi di pacchetti estranei al repository ufficiale degli slackbuild.

Questi gli step
1) installazione di mmtf-cpp (nuovo slackbuild). Si tratta di una libreria per l'implementazione C++ di un codec per modelli molecolari (MacroMolecular Transmission Format) composta solo da header. In teoria dovrebbe bastare solo un file .h, ma nel dubbio ho incluso nel pacchetto tutto l'albero degli header h. Richiede come dipendenza obbligatoria msgpack-c, il cui slackbuild è sul repository di Ponce.
2) installazione di libmsym (nuovo slackbuild). Non so quanto possa essere essenziale, in ogni caso è una libreria che implementa processi computazionali nella stereochimica.
3) installazione di Spglib (nuovo slackbuild). È quella che mi ha fatto dannare più di tutte perché c'erano dei problemi negli script di verifica e acquisizione delle variabili d'ambiente da parte degli script cmake di avogadrolibs. Non so a cosa serva di preciso questa libreria, comunque implementa processi computazionali relativi alle strutture in cristallochimica, perciò penso possa essere un'integrazione da non sottovalutare. Può anche essere interfacciata con diversi linguaggi, comunque ho incluso il supporto a python 3. Nel file .info ho impostato per il download del sorgente una mia copia ricostruita come tarbal dopo aver clonato il repository con git. Questo perché ci sono incongruenze tra i numeri di versione tra l'ultima versione in download dal repository ufficiale e quella dell'albero su github.
4) installazione di MoleQueue (nuovo slackbuild). È una libreria essenziale perché è uno dei sottoprogetti implementati nella piattaforma. Da quello che ho capito dovrebbe gestire la trasmissione dei dati. Penso sia essenziale per il download o l'invio di modelli standard condivisi (operazione ordinaria per chi si occupa di proteine).
5) installazione di Avogadro libraries o avogadrolibs (nuovo slackbuild). È il core di Avogadro 2, quello che si occupa degli algoritmi, del rendering, ecc. Può essere integrato anche il supporto a VTK (Visualisation Toolkit), di cui è disponibile lo slackbuild sul repository di Ponce. L'ho impostata come dipendenza opzionale perché non è detto che sia installata (non è un osso facile da masticare perché richiede alcune ore di compilazione). Purtroppo non sono riuscito per il momento a inserire nello slackbuild il supporto a Python. Ci sono alcuni problemi che non sono riuscito a risolvere con Cmake. Il primo perché il sorgente utilizza un FindPackage deprecato che individua Python 2 come interprete predefinito (mentre è richiesto Python 3) e non so come fare acquisire alla configurazione le variabili di ambiente restituite dal FindPackage corretto (quello che punta alla configurazione di Python3 su cmake). Il secondo è che la compilazione dei python bindings richiede come necessaria l'installazione di pybind11, il cui slackbuild però non installa alcuno script di configurazione di cmake. Il risultato è che la configurazione dell'installazione di avogadrolibs si blocca perché non trova pybind11 attraverso cmake. È da ieri che mi sto battendo, ma alla fine ci ho rinunciato e ho deciso di prendermi una pausa di riflessione.
6) Installazione di Avogadro Application o avogadroapp (nuovo slackbuild) che per semplicità e chiarezza ho denominato avogadro2 nel pacchetto. È l'interfaccia grafica, sviluppata separatamente dal core.

Tutti gli slackbuild sono scaricabili da questi indirizzi
- https://www.giand.it/tic/download/avoga ... cpp.tar.gz
- https://www.giand.it/tic/download/avoga ... sym.tar.gz
- https://www.giand.it/tic/download/avoga ... lib.tar.gz
- https://www.giand.it/tic/download/avoga ... eue.tar.gz
- https://www.giand.it/tic/download/avoga ... ibs.tar.gz
- https://www.giand.it/tic/download/avoga ... ro2.tar.gz

Gli slackbuild li ho testati su una Slackware64 current aggiornata al 28 dicembre. Sicuramente non è installabile sulla 14.2 neppure disponendo di qt5 perché alcune dipendenze sono troppo datate. Ad esempio ho patchato la verifica della versione di cmake portandola come versione minima alla 3.10.0 per una compatibilità migliore con OpenGL, ma sicuramente ci sono impedimenti con versioni vecchie del compilatore e con l'eventuale mancanza o aggiornamento di alcune dipendenze (ad esempio è necessario Eigen3, che non so se sia disponibile sulla 14.2).

Questo è quanto

PS: per Matteo: vedi tu se vale la pena di aggiungere questa roba al repository

Re: Avogadro 2 is out :-)

Inviato: mer 10 feb 2021, 18:06
da gian_d
A margine, segnalo che ieri sono riuscito finalmente a risolvere il problema con una piccola correzione allo slackbuild di avogadrolibs (che ho corretto nel tarbal in download).
Perché vada a buon fine, però, è necessario installare pybind11 con uno slackbuild un po' differente da quello disponibile sul repository di Ponce perché va installato non solo usando lo script python ma anche con cmake. Io ho usato questo slackbuild (ampliato dall'originale):

Codice: Seleziona tutto

#!/bin/sh

# Slackware build script for pybind11

# Copyright 2019,2020 Christoph Willing,  Brisbane, Australia
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


PRGNAM=pybind11
VERSION=${VERSION:-2.5.0}
BUILD=${BUILD:-8}
TAG=${TAG:-_SBo}

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) ARCH=i586 ;;
    arm*) ARCH=arm ;;
       *) ARCH=$( uname -m ) ;;
  esac
fi

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i586" ]; then
  SLKCFLAGS="-O2 -march=i586 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
  LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"
  LIBDIRSUFFIX="64"
else
  SLKCFLAGS="-O2"
  LIBDIRSUFFIX=""
fi

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
find -L . \
 \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
  -o -perm 511 \) -exec chmod 755 {} \; -o \
 \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
  -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;

#sed -i 's/include <Python.h>/include <\/usr\/include\/python3.9\/Python.h>/g' include/pybind11/detail/common.h
#sed -i 's/include <frameobject.h>/include <\/usr\/include\/python3.9\/frameobject.h>/g' include/pybind11/detail/common.h
#sed -i 's/include <pythread.h>/include\/usr\/include\/python3.9\/pythread.h>/g' include/pybind11/detail/common.h
  
patch -p0 <<'EOF'
--- tools/FindPythonLibsNew.cmake
+++ tools/FindPythonLibsNew.cmake
@@ -59,7 +59,7 @@
 if(PythonLibsNew_FIND_REQUIRED)
-    find_package(PythonInterp ${PythonLibsNew_FIND_VERSION} REQUIRED)
+    find_package(Python3 ${PythonLibsNew_FIND_VERSION} REQUIRED)
 else()
-    find_package(PythonInterp ${PythonLibsNew_FIND_VERSION})
+    find_package(Python3 ${PythonLibsNew_FIND_VERSION} REQUIRED)
 endif()

EOF
#   -DPYTHON_INCLUDE_DIRS='/usr/include/python3.9' \
 
SLKCFLAGS=$SLKCFLAGS" -I /usr/include/python3.9" 
mkdir build
cd build
cmake \
   -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
   -DPYTHON_EXECUTABLE=/usr/bin/python3 \
   -DPYBIND11_PYTHON_VERSION=3 ..
# make check -j 4
make VERBOSE=1
make install DESTDIR=$PKG
cd ..

python setup.py install --root=$PKG

# Python 3 support.
if $(python3 -c 'import sys' 2>/dev/null); then
  python3 setup.py install --root=$PKG
fi

find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
  | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
  CONTRIBUTING.md LICENSE README.md \
  $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc

cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}