From d35c24a3ed5b5ee826c525b3673e2fdcef8d33a8 Mon Sep 17 00:00:00 2001
From: Sebastian Ehlert <28669218+awvwgk@users.noreply.github.com>
Date: Wed, 25 Jan 2023 18:33:37 +0100
Subject: 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
---
 .../repos/builtin/packages/lbfgspp/package.py      |  17 ++++
 .../builtin/packages/py-scine-chemoton/package.py  |  27 ++++++
 .../builtin/packages/py-scine-puffin/package.py    |  32 +++++++
 .../repos/builtin/packages/scine-core/package.py   |  44 +++++++++
 .../builtin/packages/scine-database/package.py     |  59 ++++++++++++
 .../builtin/packages/scine-molassembler/package.py |  98 ++++++++++++++++++++
 .../builtin/packages/scine-readuct/package.py      |  67 ++++++++++++++
 .../builtin/packages/scine-sparrow/package.py      | 100 +++++++++++++++++++++
 .../builtin/packages/scine-utilities/package.py    |  81 +++++++++++++++++
 .../repos/builtin/packages/scine-xtb/package.py    |  59 ++++++++++++
 .../repos/builtin/packages/sparrow/package.py      |   1 +
 11 files changed, 585 insertions(+)
 create mode 100644 var/spack/repos/builtin/packages/lbfgspp/package.py
 create mode 100644 var/spack/repos/builtin/packages/py-scine-chemoton/package.py
 create mode 100644 var/spack/repos/builtin/packages/py-scine-puffin/package.py
 create mode 100644 var/spack/repos/builtin/packages/scine-core/package.py
 create mode 100644 var/spack/repos/builtin/packages/scine-database/package.py
 create mode 100644 var/spack/repos/builtin/packages/scine-molassembler/package.py
 create mode 100644 var/spack/repos/builtin/packages/scine-readuct/package.py
 create mode 100644 var/spack/repos/builtin/packages/scine-sparrow/package.py
 create mode 100644 var/spack/repos/builtin/packages/scine-utilities/package.py
 create mode 100644 var/spack/repos/builtin/packages/scine-xtb/package.py

(limited to 'var')

diff --git a/var/spack/repos/builtin/packages/lbfgspp/package.py b/var/spack/repos/builtin/packages/lbfgspp/package.py
new file mode 100644
index 0000000000..70f5865d9d
--- /dev/null
+++ b/var/spack/repos/builtin/packages/lbfgspp/package.py
@@ -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:")
diff --git a/var/spack/repos/builtin/packages/py-scine-chemoton/package.py b/var/spack/repos/builtin/packages/py-scine-chemoton/package.py
new file mode 100644
index 0000000000..1a8e0cc264
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-scine-chemoton/package.py
@@ -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"))
diff --git a/var/spack/repos/builtin/packages/py-scine-puffin/package.py b/var/spack/repos/builtin/packages/py-scine-puffin/package.py
new file mode 100644
index 0000000000..fd8c504d57
--- /dev/null
+++ b/var/spack/repos/builtin/packages/py-scine-puffin/package.py
@@ -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"))
diff --git a/var/spack/repos/builtin/packages/scine-core/package.py b/var/spack/repos/builtin/packages/scine-core/package.py
new file mode 100644
index 0000000000..88ed0b7b84
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scine-core/package.py
@@ -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),
+        ]
diff --git a/var/spack/repos/builtin/packages/scine-database/package.py b/var/spack/repos/builtin/packages/scine-database/package.py
new file mode 100644
index 0000000000..c62bf10c26
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scine-database/package.py
@@ -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
diff --git a/var/spack/repos/builtin/packages/scine-molassembler/package.py b/var/spack/repos/builtin/packages/scine-molassembler/package.py
new file mode 100644
index 0000000000..14ffcd9c79
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scine-molassembler/package.py
@@ -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
diff --git a/var/spack/repos/builtin/packages/scine-readuct/package.py b/var/spack/repos/builtin/packages/scine-readuct/package.py
new file mode 100644
index 0000000000..0f77db749f
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scine-readuct/package.py
@@ -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
diff --git a/var/spack/repos/builtin/packages/scine-sparrow/package.py b/var/spack/repos/builtin/packages/scine-sparrow/package.py
new file mode 100644
index 0000000000..10993213d6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scine-sparrow/package.py
@@ -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")
diff --git a/var/spack/repos/builtin/packages/scine-utilities/package.py b/var/spack/repos/builtin/packages/scine-utilities/package.py
new file mode 100644
index 0000000000..bf7a8fa9d6
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scine-utilities/package.py
@@ -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
diff --git a/var/spack/repos/builtin/packages/scine-xtb/package.py b/var/spack/repos/builtin/packages/scine-xtb/package.py
new file mode 100644
index 0000000000..c1219abb3a
--- /dev/null
+++ b/var/spack/repos/builtin/packages/scine-xtb/package.py
@@ -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
diff --git a/var/spack/repos/builtin/packages/sparrow/package.py b/var/spack/repos/builtin/packages/sparrow/package.py
index 195c1b57b1..dac5cf3690 100644
--- a/var/spack/repos/builtin/packages/sparrow/package.py
+++ b/var/spack/repos/builtin/packages/sparrow/package.py
@@ -32,6 +32,7 @@ class Sparrow(CMakePackage):
     version(
         "3.0.0",
         sha256="70636871694c9363ae3fb2df5050bddb22667b71d875d5a7e9afd872f6a2b65d",
+        deprecated=True,
     )
 
     resource(
-- 
cgit v1.2.3-70-g09d2