xtb: init at 6.7.1 (#530405)

This commit is contained in:
Gaétan Lepage
2026-06-23 09:25:00 +00:00
committed by GitHub
9 changed files with 398 additions and 9 deletions
@@ -0,0 +1,15 @@
diff --git a/config/config.cmake.in b/config/config.cmake.in
index e5e4f6b..d41c070 100644
--- a/config/config.cmake.in
+++ b/config/config.cmake.in
@@ -23,6 +23,10 @@ if(NOT TARGET "@PROJECT_NAME@::@PROJECT_NAME@")
include(CMakeFindDependencyMacro)
+ if(NOT TARGET "numsa::numsa")
+ find_dependency("numsa" REQUIRED)
+ endif()
+
if(NOT TARGET "mctc-lib::mctc-lib")
find_dependency("mctc-lib" REQUIRED)
endif()
+107
View File
@@ -0,0 +1,107 @@
{
lib,
stdenv,
fetchFromGitHub,
buildType ? "meson",
gfortran,
pkg-config,
python3,
meson,
ninja,
cmake,
# buildInputs
blas,
lapack,
test-drive,
# propagatedBuildInputs
mctc-lib,
numsa,
toml-f,
nix-update-script,
}:
assert (
builtins.elem buildType [
"meson"
"cmake"
]
);
stdenv.mkDerivation (finalAttrs: {
pname = "cpcm-x";
version = "1.1.0";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "grimme-lab";
repo = "CPCM-X";
tag = "v${finalAttrs.version}";
hash = "sha256-FyPUECbcqUHoGq1LASvPF4qSUKQ5N/y1itq8e2wGliE=";
};
patches = [
# The installed CMake package config links numsa::numsa transitively but
# never re-discovers it, so consumers fail with "target numsa::numsa not
# found". Add the missing find_dependency call.
./cmake-config-find-numsa.patch
];
postPatch = ''
substituteInPlace config/install-mod.py \
--replace-fail "/usr/bin/env python" "${lib.getExe python3}"
'';
outputs = [
"out"
"dev"
];
nativeBuildInputs = [
gfortran
pkg-config
python3
]
++ lib.optionals (buildType == "meson") [
meson
ninja
]
++ lib.optionals (buildType == "cmake") [
cmake
];
buildInputs = [
blas
lapack
# only needed to build the bundled test suite
test-drive
];
propagatedBuildInputs = [
mctc-lib
numsa
toml-f
];
doCheck = true;
preCheck = ''
export OMP_NUM_THREADS=2
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Extended conductor-like polarizable continuum solvation model";
homepage = "https://github.com/grimme-lab/CPCM-X";
changelog = "https://github.com/grimme-lab/CPCM-X/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.lgpl3;
maintainers = with lib.maintainers; [ GaetanLepage ];
mainProgram = "cpx";
platforms = lib.platforms.linux;
};
})
+4 -1
View File
@@ -27,11 +27,13 @@ assert (
stdenv.mkDerivation (finalAttrs: {
pname = "dftd4";
version = "4.2.0";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "dftd4";
repo = "dftd4";
rev = "v${finalAttrs.version}";
tag = "v${finalAttrs.version}";
hash = "sha256-uKjNOIza3/I0oREp88oFESoNqEdumo1AztIjcrVb1O8=";
};
@@ -85,6 +87,7 @@ stdenv.mkDerivation (finalAttrs: {
meta = {
description = "Generally Applicable Atomic-Charge Dependent London Dispersion Correction";
changelog = "https://github.com/dftd4/dftd4/releases/tag/${finalAttrs.src.tag}";
mainProgram = "dftd4";
license = with lib.licenses; [
lgpl3Plus
+7 -2
View File
@@ -26,11 +26,13 @@ assert (
stdenv.mkDerivation (finalAttrs: {
pname = "multicharge";
version = "0.5.0";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "grimme-lab";
repo = "multicharge";
rev = "v${finalAttrs.version}";
tag = "v${finalAttrs.version}";
hash = "sha256-hswqC+fvC6tuxDpuUgowyqm72ubVikzpR4EzXtTM5cs=";
};
@@ -48,7 +50,9 @@ stdenv.mkDerivation (finalAttrs: {
meson
ninja
]
++ lib.optional (buildType == "cmake") cmake;
++ lib.optionals (buildType == "cmake") [
cmake
];
buildInputs = [
blas
@@ -85,6 +89,7 @@ stdenv.mkDerivation (finalAttrs: {
mainProgram = "multicharge";
license = lib.licenses.asl20;
homepage = "https://github.com/grimme-lab/multicharge";
changelog = "https://github.com/grimme-lab/multicharge/releases/tag/${finalAttrs.src.tag}";
platforms = lib.platforms.linux;
maintainers = [ lib.maintainers.sheepforce ];
};
+107
View File
@@ -0,0 +1,107 @@
{
lib,
stdenv,
fetchFromGitHub,
buildType ? "meson",
# nativeBuildInputs
asciidoctor,
gfortran,
pkg-config,
python3,
# meson:
meson,
ninja,
# cmake:
cmake,
# buildInputs
mstore,
test-drive,
blas,
lapack,
# propagatedBuildInputs
mctc-lib,
# passthru
nix-update-script,
}:
assert (
builtins.elem buildType [
"meson"
"cmake"
]
);
stdenv.mkDerivation (finalAttrs: {
pname = "numsa";
version = "0.2.0";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "grimme-lab";
repo = "numsa";
tag = "v${finalAttrs.version}";
hash = "sha256-PAzxeYyg/9P/3YFxKzM4ZFm2xT0AGap6q8/ei8jD/3M=";
};
outputs = [
"out"
"dev"
];
patches = [
# Use nixpkgs' mstore instead of building it from source
./use-external-mstore.patch
];
postPatch = ''
substituteInPlace config/install-mod.py \
--replace-fail "/usr/bin/env python" "${lib.getExe python3}"
'';
nativeBuildInputs = [
asciidoctor
gfortran
pkg-config
python3
]
++ lib.optionals (buildType == "meson") [
meson
ninja
]
++ lib.optionals (buildType == "cmake") [
cmake
];
buildInputs = [
blas
lapack
mstore # only needed to build the bundled test suite
test-drive
];
propagatedBuildInputs = [
mctc-lib
];
doCheck = true;
preCheck = ''
export OMP_NUM_THREADS=2
'';
passthru.updateScript = nix-update-script { };
meta = {
description = "Solvent accessible surface area calculation";
homepage = "https://github.com/grimme-lab/numsa";
changelog = "https://github.com/grimme-lab/numsa/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [ GaetanLepage ];
platforms = lib.platforms.linux;
};
})
@@ -0,0 +1,30 @@
diff --git a/test/meson.build b/test/meson.build
index c60e4a4..7da0216 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -14,20 +14,21 @@
# You should have received a copy of the GNU Lesser General Public License
# along with numsa. If not, see <https://www.gnu.org/licenses/>.
-# Create mstore as subproject for testing
-mstore_prj = subproject(
+# Find the molecular structure store, preferring an external installation
+# (e.g. via pkg-config) and falling back to building it as a subproject
+mstore_dep = dependency(
'mstore',
version: '>=0.1',
+ fallback: ['mstore', 'mstore_dep'],
required: not meson.is_subproject(),
default_options: [
'default_library=static',
],
)
# If we do not find mstore and are a subproject, we just skip testing
-if not mstore_prj.found()
+if not mstore_dep.found()
subdir_done()
endif
-mstore_dep = mstore_prj.get_variable('mstore_dep')
tests = [
'surface',
+7 -2
View File
@@ -21,11 +21,13 @@ assert (
stdenv.mkDerivation (finalAttrs: {
pname = "toml-f";
version = "0.5.1";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "toml-f";
repo = "toml-f";
rev = "v${finalAttrs.version}";
tag = "v${finalAttrs.version}";
hash = "sha256-lReez2rSAJVnLFngjUYgGkm+HUDH8VsCC2m9zYOOr4A=";
};
@@ -42,7 +44,9 @@ stdenv.mkDerivation (finalAttrs: {
meson
ninja
]
++ lib.optional (buildType == "cmake") cmake;
++ lib.optionals (buildType == "cmake") [
cmake
];
buildInputs = [ test-drive ];
@@ -65,6 +69,7 @@ stdenv.mkDerivation (finalAttrs: {
mit
];
homepage = "https://github.com/toml-f/toml-f";
changelog = "https://github.com/toml-f/toml-f/releases/tag/${finalAttrs.src.tag}";
platforms = lib.platforms.linux;
maintainers = [ lib.maintainers.sheepforce ];
};
+112
View File
@@ -0,0 +1,112 @@
{
lib,
stdenv,
fetchFromGitHub,
# nativeBuildInputs
gfortran,
meson,
ninja,
pkg-config,
# buildInputs
blas,
lapack,
cpcm-x,
dftd4,
mctc-lib,
multicharge,
numsa,
simple-dftd3,
tblite,
test-drive,
toml-f,
# passthru
nix-update-script,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "xtb";
# No tagged release supports the tblite 0.6 / dftd4 4.2 API; the latest tag (6.7.1) targets
# tblite 0.3. Track master, which builds against the current grimme-lab stack packaged in nixpkgs
version = "6.7.1-unstable-2026-05-16";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "grimme-lab";
repo = "xtb";
rev = "2b5cd4829290775e575807daee21560f851ff7e1";
hash = "sha256-dnpmbjLG6xKSLXEUdwndsA0ADTEyaTY9fJiOSXI7jD4=";
};
# The `solve`/`solve4` eigensolvers size the DSYGVD workspace from a `LWORK = -1` query.
# OpenBLAS leaves `aux(1)` as a denormal/garbage value on that query, so `int(aux(1))` falls
# below DSYGVD's documented minimum and the real call aborts with `DSYGVD parameter number 11 had
# an illegal value` (it works against reference LAPACK, which fills the query correctly).
# This surfaces as failures in the `gfn0` and `peeq` unit tests. Clamp the workspace sizes to the
# LAPACK minima so the query result can only ever grow them.
postPatch = ''
substituteInPlace src/scc_core.f90 \
--replace-fail "lwork=int(aux(1))" "lwork=max(int(aux(1)),1+6*ndim+2*ndim**2)" \
--replace-fail "lwork=int(aux4(1))" "lwork=max(int(aux4(1)),1+6*ndim+2*ndim**2)" \
--replace-fail "liwork=iwork(1)" "liwork=max(iwork(1),3+5*ndim)"
'';
nativeBuildInputs = [
gfortran
meson
ninja
pkg-config
];
mesonFlags = [
# Require the optional backends rather than letting the `auto` features
# silently disable themselves if a dependency is not found.
(lib.mesonEnable "tblite" true)
(lib.mesonEnable "cpcmx" true)
];
# Serialize the build: ninja otherwise compiles xtb's program/library objects before the
# library's Fortran modules are generated.
# `enableParallel` only controls the explicit -j flag and ninja parallelizes regardless, so the
# race has to be killed with an explicit -j1.
ninjaFlags = [ "-j1" ];
buildInputs = [
blas
cpcm-x
dftd4
lapack
mctc-lib
multicharge
numsa
simple-dftd3
tblite
test-drive
toml-f
];
doCheck = true;
preCheck = ''
export OMP_NUM_THREADS=2
'';
passthru.updateScript = nix-update-script {
extraArgs = [ "--version=branch" ];
};
meta = {
description = "Semiempirical Extended Tight-Binding Program Package";
homepage = "https://github.com/grimme-lab/xtb";
# changelog = "https://github.com/grimme-lab/xtb/releases/tag/${finalAttrs.src.tag}";
license = lib.licenses.gpl3Only;
maintainers = with lib.maintainers; [
GaetanLepage
sheepforce
];
mainProgram = "xtb";
platforms = lib.platforms.linux;
};
})
@@ -27,14 +27,16 @@ assert (
]
);
stdenv.mkDerivation rec {
stdenv.mkDerivation (finalAttrs: {
pname = "tblite";
version = "0.6.0";
__structuredAttrs = true;
strictDeps = true;
src = fetchFromGitHub {
owner = "tblite";
repo = "tblite";
rev = "v${version}";
tag = "v${finalAttrs.version}";
hash = "sha256-z0g+bf6APqNLB9mDE49FelitQ9ptZXdFQuYeXIT0NIw=";
};
@@ -86,7 +88,9 @@ stdenv.mkDerivation rec {
"dev"
];
checkInputs = [
nativeCheckInputs = [
# Runs python test drivers (test/*/tester.py) during checkPhase, so it must be available on the
# build host (strictDeps)
python3
];
@@ -108,7 +112,8 @@ stdenv.mkDerivation rec {
lgpl3Plus
];
homepage = "https://github.com/tblite/tblite";
changelog = "https://github.com/tblite/tblite/releases/tag/${finalAttrs.src.tag}";
platforms = lib.platforms.linux;
maintainers = [ lib.maintainers.sheepforce ];
};
}
})