Add packages for scine modules (#34969)

* Add packages for scine modules

- lbfgspp (dependency for scine-utilities)
- scine-core
- scine-utilities and py-scine-utilities (virtual)
- scine-readuct and py-scine-readuct (virtual)
- scine-sparrow and py-scine-sparrow (virtual)
- scine-database and py-scine-database (virtual)
- scine-molassembler and py-scine-molassembler (virtual)
- scine-xtb and py-scine-xtb (virtual)
- py-scine-chemoton
- py-scine-puffin

* Fix line-length for flake8

* Remove virtual dependencies

* Update detection of boost, minor fixes in packages / dependencies

* Correctly declare build-only dependencies, add git versions

* Add sparrow dummy packages, fix dependencies

* Rename latest version from develop to master

* Restore original sparrow package

* Also rename latest version for chemoton and puffin
This commit is contained in:
Sebastian Ehlert 2023-01-25 18:33:37 +01:00 committed by GitHub
parent d4d200952e
commit d35c24a3ed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 585 additions and 0 deletions

View file

@ -0,0 +1,17 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Lbfgspp(CMakePackage):
"""A Header-only C++ Library for L-BFGS and L-BFGS-B Algorithms"""
homepage = "https://lbfgspp.statr.me/"
url = "https://github.com/yixuan/LBFGSpp/archive/refs/tags/v0.2.0.tar.gz"
version("0.2.0", sha256="7101744a538c3aff52e10c82267305847b0b5e9d39f9974b4b29812cd1398ff9")
depends_on("eigen @3:")

View file

@ -0,0 +1,27 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class PyScineChemoton(PythonPackage):
"""Software driving the automated exploration of chemical reaction networks"""
homepage = "https://scine.ethz.ch/download/chemoton"
pypi = "scine_chemoton/scine_chemoton-2.2.0.tar.gz"
git = "https://github.com/qcscine/puffin.git"
version("master", branch="master")
version("2.2.0", "cda4f9de1e1c00ecc5e0b2d9c17a5edb56b468d454022e3f4045ec116ba2ec45")
depends_on("python@3.6:", type=("build", "run"))
depends_on("py-networkx", type=("build", "run"))
depends_on("py-numpy", type=("build", "run"))
depends_on("py-scipy", type=("build", "run"))
depends_on("py-setproctitle", type=("build", "run"))
depends_on("py-setuptools", type="build")
depends_on("scine-database+python", type=("build", "run"))
depends_on("scine-molassembler+python", type=("build", "run"))
depends_on("scine-utilities+python", type=("build", "run"))

View file

@ -0,0 +1,32 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class PyScinePuffin(PythonPackage):
"""Calculation handler for SCINE Chemoton"""
homepage = "https://scine.ethz.ch/download/puffin"
pypi = "scine_puffin/scine_puffin-1.1.0.tar.gz"
git = "https://github.com/qcscine/puffin.git"
version("master", branch="master")
version("1.1.0", "1a15232b1b472c36349e5534e4fdf9dd90bc554926cb42fba37eee8e60be8c44")
depends_on("python@3.6:", type=("build", "run"))
depends_on("py-gitpython", type=("build", "run"))
depends_on("py-numpy", type=("build", "run"))
depends_on("py-psutil", type=("build", "run"))
depends_on("py-python-daemon", type=("build", "run"))
depends_on("py-pyyaml", type=("build", "run"))
depends_on("py-scipy", type=("build", "run"))
depends_on("py-setproctitle", type=("build", "run"))
depends_on("py-setuptools", type="build")
# Promoted from optional to explicit dependencies to avoid compiling them on puffin startup
depends_on("scine-database+python", type=("build", "run"))
depends_on("scine-molassembler+python", type=("build", "run"))
depends_on("scine-readuct+python", type=("build", "run"))
depends_on("scine-utilities+python", type=("build", "run"))

View file

@ -0,0 +1,44 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
class ScineCore(CMakePackage):
"""Core provides the functionality necessary to couple the individual SCINE modules together"""
homepage = "https://scine.ethz.ch/"
url = "https://github.com/qcscine/core/archive/refs/tags/4.0.2.tar.gz"
git = "https://github.com/qcscine/core.git"
version("master", branch="master")
version("4.0.2", "7181c6f93d71def22f1e0e5767afc7587c04b49abc03516f6926394868e7adc6")
resource(
name="dev",
url="https://github.com/qcscine/development-utils/archive/refs/tags/5.0.1.tar.gz",
sha256="089ca500fc191e04a968ea166d2fe80178b227bc2e6d3926523fa2eee5f6492d",
placement="_dev",
)
depends_on("boost+filesystem+program_options cxxstd=17 @1.65.0:")
depends_on("googletest", type="build")
def patch(self):
os.rmdir("dev")
os.rename("_dev", "dev")
def cmake_args(self):
return [
self.define("SCINE_BUILD_TESTS", self.run_tests),
self.define("SCINE_MARCH", ""),
self.define("BOOST_ROOT", self.spec["boost"].prefix),
self.define("BOOST_LIBRARY_DIR", self.spec["boost"].libs.directories[0]),
self.define("BOOST_INCLUDE_DIR", self.spec["boost"].headers.directories[0]),
self.define("BOOST_NO_SYSTEM_PATHS", True),
self.define("Boost_NO_BOOST_CMAKE", True),
]

View file

@ -0,0 +1,59 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
class ScineDatabase(CMakePackage):
"""The SCINE database module is a database wrapper for a MongoDB encoding reaction networks."""
homepage = "https://scine.ethz.ch/"
url = "https://github.com/qcscine/database/archive/refs/tags/1.1.0.tar.gz"
git = "https://github.com/qcscine/database.git"
version("master", branch="master")
version("1.1.0", "a9144631dfb90e06f6924cf58fc5db13719cf8577fcd3bbf788a135060a70c18")
resource(
name="dev",
url="https://github.com/qcscine/development-utils/archive/refs/tags/5.0.1.tar.gz",
sha256="089ca500fc191e04a968ea166d2fe80178b227bc2e6d3926523fa2eee5f6492d",
placement="_dev",
)
variant("python", default=False, description="Build Python extension module")
depends_on("eigen@3:")
depends_on("googletest", type="build")
depends_on("mongo-cxx-driver@3.2.1:")
depends_on("python@3.6:", when="+python", type=("build", "run"))
depends_on("py-pip", when="+python", type="build")
depends_on("py-pybind11", when="+python", type="build")
depends_on("scine-utilities@5:")
depends_on("scine-utilities+python", when="+python")
extends("python", when="+python")
def patch(self):
os.rmdir("dev")
os.rename("_dev", "dev")
filter_file(
"#include <mongocxx/collection.hpp>",
"#include <mongocxx/collection.hpp>\n#include <mongocxx/pipeline.hpp>",
"src/Database/Database/Collection.cpp",
)
def cmake_args(self):
args = [
self.define("SCINE_BUILD_TESTS", self.run_tests),
self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec),
self.define("SCINE_MARCH", ""),
]
if "+python" in self.spec:
args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path))
return args

View file

@ -0,0 +1,98 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
class ScineMolassembler(CMakePackage):
"""Chemoinformatics toolkit with support for inorganic molecules."""
homepage = "https://scine.ethz.ch/download/molassembler"
url = "https://github.com/qcscine/molassembler/archive/refs/tags/1.2.1.tar.gz"
git = "https://github.com/qcscine/molassembler.git"
version("master", branch="master")
version("1.2.1", "c9fea41d383b7f54cf8a3ed4dabebe9e942fe3ef5b47895e3533e8ce42dacd38")
resource(
name="dev",
url="https://github.com/qcscine/development-utils/archive/refs/tags/5.0.1.tar.gz",
sha256="089ca500fc191e04a968ea166d2fe80178b227bc2e6d3926523fa2eee5f6492d",
placement="_dev",
)
resource(
name="nauty-finder",
url="https://raw.githubusercontent.com/conda-forge/scine-molassembler-feedstock/0aa909d/recipe/cmake/Findnauty.cmake",
sha256="0746e8a1e35687687866e82797ceb848d941a0c232ed5daa63689476b557e18e",
destination="cmake",
expand=False,
)
# resource(
# name="ringdecomposerlib-finder",
# url="https://raw.githubusercontent.com/conda-forge/scine-molassembler-feedstock/0aa909d/recipe/cmake/FindRingDecomposerLib.cmake",
# sha256="5ecfbccf48a66d8477011aa576181b56d725f1716cca5a268683e586d761a3ec",
# destination="cmake",
# expand=False,
# )
patch(
"https://raw.githubusercontent.com/conda-forge/scine-molassembler-feedstock/0aa909d/recipe/patches/nlohmann_json.patch",
level=1,
sha256="a9afcc42b264620ee24505c1857b8493c2fb632a1d155362ba4519814922a6af",
)
patch(
"https://raw.githubusercontent.com/conda-forge/scine-molassembler-feedstock/0aa909d/recipe/patches/no_cfenv.patch",
level=1,
sha256="4d746ebd3567d7209200614613861995b999e65e7e26fc0338184fffa0cb3fb7",
when="platform=darwin",
)
variant("python", default=False, description="Build Python extension module")
depends_on("boost+system+filesystem+program_options cxxstd=17 @1.65.0:")
depends_on("eigen@3:")
depends_on("googletest", type="build")
depends_on("nauty")
depends_on("nlohmann-json", type="build")
depends_on("python@3.6:", when="+python", type=("build", "run"))
depends_on("py-pip", when="+python", type="build")
depends_on("py-pybind11@2.6.2:", when="+python", type="build")
# depends_on("ringdecomposerlib")
depends_on("scine-core")
depends_on("scine-utilities")
depends_on("scine-utilities+python", when="+python", type=("build", "run"))
extends("python", when="+python")
def patch(self):
os.rmdir("dev")
os.rename("_dev", "dev")
filter_file(
"find_package(pybind11 2.6.2 EXACT QUIET)",
"find_package(pybind11)",
"dev/cmake/ImportPybind11.cmake",
)
def cmake_args(self):
args = [
self.define("BUILD_SHARED_LIBS", True),
self.define("SCINE_BUILD_TESTS", self.run_tests),
self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec),
self.define("SCINE_MARCH", ""),
self.define("BOOST_ROOT", self.spec["boost"].prefix),
self.define("BOOST_LIBRARY_DIR", self.spec["boost"].libs.directories[0]),
self.define("BOOST_INCLUDE_DIR", self.spec["boost"].headers.directories[0]),
self.define("BOOST_NO_SYSTEM_PATHS", True),
self.define("Boost_NO_BOOST_CMAKE", True),
]
if "+python" in self.spec:
args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path))
return args

View file

@ -0,0 +1,67 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
class ScineReaduct(CMakePackage):
"""
ReaDuct allows you to carry out structure optimizations, transition state searches
and intrinsic reaction coordinate (IRC) calculations among other things
"""
homepage = "https://scine.ethz.ch/download/readuct"
url = "https://github.com/qcscine/readuct/archive/refs/tags/4.1.0.tar.gz"
version("4.1.0", "9cec0192a444403d6a8fd096509798c49fbd1eec298ec7194aba915e31f50782")
resource(
name="dev",
url="https://github.com/qcscine/development-utils/archive/refs/tags/5.0.1.tar.gz",
sha256="089ca500fc191e04a968ea166d2fe80178b227bc2e6d3926523fa2eee5f6492d",
placement="_dev",
)
variant("python", default=False, description="Build Python extension module")
depends_on("boost+system+filesystem+program_options cxxstd=17 @1.65.0:")
depends_on("eigen@3:")
depends_on("googletest")
depends_on("python@3.6:", when="+python", type=("build", "run"))
depends_on("py-pip", when="+python", type="build")
depends_on("py-pybind11@2.6.2:", when="+python", type=("build", "run"))
depends_on("scine-core")
depends_on("scine-utilities")
depends_on("scine-utilities+python", when="+python", type=("build", "run"))
depends_on("yaml-cpp")
extends("python", when="+python")
def patch(self):
os.rmdir("dev")
os.rename("_dev", "dev")
filter_file(
"find_package(pybind11 2.6.2 EXACT QUIET)",
"find_package(pybind11)",
"dev/cmake/ImportPybind11.cmake",
)
def cmake_args(self):
args = [
self.define("SCINE_BUILD_TESTS", self.run_tests),
self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec),
self.define("SCINE_MARCH", ""),
self.define("BOOST_ROOT", self.spec["boost"].prefix),
self.define("BOOST_LIBRARY_DIR", self.spec["boost"].libs.directories[0]),
self.define("BOOST_INCLUDE_DIR", self.spec["boost"].headers.directories[0]),
self.define("BOOST_NO_SYSTEM_PATHS", True),
self.define("Boost_NO_BOOST_CMAKE", True),
]
if "+python" in self.spec:
args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path))
return args

View file

@ -0,0 +1,100 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
class ScineSparrow(CMakePackage):
"""Sparrow: fast semiempirical quantum chemical calculations.
When publishing results obtained with Sparrow, please cite
the corresponding release as archived on Zenodo
(DOI 10.5281/zenodo.3244105; please use the DOI of the respective
release).
In addition, we kindly request you to cite the following article
when using Sparrow:
T. Husch, A. C. Vaucher, M. Reiher, "Semiempirical molecular orbital
models based on the neglect of diatomic differential overlap
approximation", Int. J. Quantum Chem., 2018, 118, e25799.
"""
homepage = "https://scine.ethz.ch/download/sparrow"
url = "https://github.com/qcscine/sparrow/archive/refs/tags/3.1.0.tar.gz"
git = "https://github.com/qcscine/sparrow.git"
maintainers = ["frobnitzem"]
version("master", branch="master")
version("3.1.0", "91412de0f2670a1735c4ca76406db5bea04236eeac0bc1f93ccfe18104aa7ce4")
version("3.0.0", "70636871694c9363ae3fb2df5050bddb22667b71d875d5a7e9afd872f6a2b65d")
resource(
name="dev",
url="https://github.com/qcscine/development-utils/archive/refs/tags/5.0.1.tar.gz",
sha256="089ca500fc191e04a968ea166d2fe80178b227bc2e6d3926523fa2eee5f6492d",
placement="_dev",
)
variant("python", default=False, description="Build Python extension module")
depends_on("boost+filesystem+program_options cxxstd=17 @1.65.0:")
depends_on("cereal")
depends_on("eigen@3.3.2:")
depends_on("googletest", type="build")
depends_on("python@3.6:", when="+python", type=("build", "run"))
depends_on("py-pip", when="+python", type="build")
depends_on("scine-core")
depends_on("scine-utilities")
depends_on("scine-utilities+python", when="+python", type=("build", "run"))
depends_on("yaml-cpp")
extends("python", when="+python")
def patch(self):
os.rmdir("dev")
os.rename("_dev", "dev")
if self.spec.satisfies("platform=darwin"):
filter_file(
r"SparrowApp PROPERTIES OUTPUT_NAME sparrow",
'SparrowApp PROPERTIES OUTPUT_NAME sparrow SUFFIX ".exe"',
"src/Sparrow/CMakeLists.txt",
)
filter_file(
"#include <iostream>",
"#include <iostream>\n#include <fstream>",
"src/Sparrow/Sparrow/Implementations/Dftb/Utils/SkfParser.cpp",
)
def cmake_args(self):
args = [
self.define("SCINE_BUILD_TESTS", self.run_tests),
self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec),
self.define("SCINE_MARCH", ""),
self.define("BOOST_ROOT", self.spec["boost"].prefix),
self.define("BOOST_LIBRARY_DIR", self.spec["boost"].libs.directories[0]),
self.define("BOOST_INCLUDE_DIR", self.spec["boost"].headers.directories[0]),
self.define("BOOST_NO_SYSTEM_PATHS", True),
self.define("Boost_NO_BOOST_CMAKE", True),
]
if "+python" in self.spec:
args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path))
return args
# Adapted from ddd in MacPorts: cmake will build the executable
# "sparrow" right next to the copy of the source directory "Sparrow".
# As HFS+ is case-insensitive by default this will loosely FAIL.
# Mitigate this by building/installing 'sparrowexe'
# on Darwin and fixing up post install.
@run_after("install")
def _rename_exe_on_darwin(self):
if self.spec.satisfies("platform=darwin"):
with working_dir(self.prefix.bin):
os.rename("sparrow.exe", "sparrow")

View file

@ -0,0 +1,81 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
class ScineUtilities(CMakePackage):
"""Contains functionality which is used in most SCINE modules."""
homepage = "https://scine.ethz.ch"
url = "https://github.com/qcscine/utilities/archive/refs/tags/6.0.0.tar.gz"
git = "https://github.com/qcscine/utilities.git"
version("master", branch="master")
version("6.0.0", "e4387d5562b7442a8e31e4dfc028bacfeb6d12e39f2d8aa6effc6db380863b4a")
version("5.0.0", "a304c89d9a196fe304f38610dea6b066d74590c0d434e4bd09a9796340700465")
resource(
name="dev",
url="https://github.com/qcscine/development-utils/archive/refs/tags/5.0.1.tar.gz",
sha256="089ca500fc191e04a968ea166d2fe80178b227bc2e6d3926523fa2eee5f6492d",
placement="_dev",
)
variant("python", default=False, description="Build Python extension module")
depends_on("boost+system+filesystem+program_options cxxstd=17 @1.65.0:")
depends_on("eigen@3:")
depends_on("googletest", type="build")
depends_on("lbfgspp", type="build")
depends_on("python@3.6:", when="+python", type=("build", "run"))
depends_on("py-numpy", when="+python", type=("build", "run"))
depends_on("py-pip", when="+python", type="build")
depends_on("py-pybind11@2.6.2:", when="+python", type="build")
depends_on("py-scipy", when="+python", type=("build", "run"))
depends_on("scine-core")
depends_on("yaml-cpp")
extends("python", when="+python")
def patch(self):
os.rmdir("dev")
os.rename("_dev", "dev")
filter_file(
"find_package(pybind11 2.6.2 EXACT QUIET)",
"find_package(pybind11)",
"dev/cmake/ImportPybind11.cmake",
)
filter_file(
"#include <regex>",
"#include <regex>\n#include <fstream>",
"src/Utils/Utils/ExternalQC/Turbomole/TurbomoleHelper.cpp",
)
filter_file(
"#include <iostream>",
"#include <iostream>\n#include <fstream>",
"src/Utils/Utils/IO/TurbomoleMinimalBasisfile.cpp",
)
def cmake_args(self):
args = [
self.define("SCINE_BUILD_TESTS", self.run_tests),
self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec),
self.define("SCINE_MARCH", ""),
self.define("BOOST_ROOT", self.spec["boost"].prefix),
self.define("BOOST_LIBRARY_DIR", self.spec["boost"].libs.directories[0]),
self.define("BOOST_INCLUDE_DIR", self.spec["boost"].headers.directories[0]),
self.define("BOOST_NO_SYSTEM_PATHS", True),
self.define("Boost_NO_BOOST_CMAKE", True),
]
if "+python" in self.spec:
args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path))
return args

View file

@ -0,0 +1,59 @@
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
import os
from spack.package import *
class ScineXtb(CMakePackage):
"""Wrapper around xtb to export it into the Scine tool chain."""
homepage = "https://scine.ethz.ch"
url = "https://github.com/qcscine/xtb_wrapper/archive/refs/tags/1.0.2.tar.gz"
git = "https://github.com/qcscine/xtb_wrapper.git"
version("master", branch="master")
version("1.0.2", "9beb1103467f3cfd9ad33beb2f3ec650bc3e6dc7094876774be3cc4e6f210487")
resource(
name="dev",
url="https://github.com/qcscine/development-utils/archive/refs/tags/5.0.1.tar.gz",
sha256="089ca500fc191e04a968ea166d2fe80178b227bc2e6d3926523fa2eee5f6492d",
placement="_dev",
)
variant("python", default=False, description="Build Python extension module")
depends_on("boost+system+filesystem+program_options cxxstd=17 @1.65.0:")
depends_on("eigen@3:")
depends_on("pkgconfig", type="build")
depends_on("python@3.6:", when="+python", type=("build", "run"))
depends_on("py-pip", when="+python", type="build")
depends_on("scine-core")
depends_on("scine-utilities")
depends_on("scine-utilities+python", when="+python", type=("build", "run"))
depends_on("xtb")
extends("python", when="+python")
def patch(self):
os.rmdir("dev")
os.rename("_dev", "dev")
def cmake_args(self):
args = [
self.define("SCINE_BUILD_TESTS", self.run_tests),
self.define("SCINE_BUILD_PYTHON_BINDINGS", "+python" in self.spec),
self.define("SCINE_MARCH", ""),
self.define("BOOST_ROOT", self.spec["boost"].prefix),
self.define("BOOST_LIBRARY_DIR", self.spec["boost"].libs.directories[0]),
self.define("BOOST_INCLUDE_DIR", self.spec["boost"].headers.directories[0]),
self.define("BOOST_NO_SYSTEM_PATHS", True),
self.define("Boost_NO_BOOST_CMAKE", True),
]
if "+python" in self.spec:
args.append(self.define("PYTHON_EXECUTABLE", self.spec["python"].command.path))
return args

View file

@ -32,6 +32,7 @@ class Sparrow(CMakePackage):
version( version(
"3.0.0", "3.0.0",
sha256="70636871694c9363ae3fb2df5050bddb22667b71d875d5a7e9afd872f6a2b65d", sha256="70636871694c9363ae3fb2df5050bddb22667b71d875d5a7e9afd872f6a2b65d",
deprecated=True,
) )
resource( resource(