mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 13:58:15 -05:00
gnu: Add gromacs.
* gnu/packages/chemistry.scm (gromacs): New variable. * gnu/packages/patches/gromacs-tinyxml2.patch: New file... * gnu/local.mk (dist_patch_DATA): ...add it here. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
feba2c9751
commit
06ed1dba35
3 changed files with 158 additions and 0 deletions
|
@ -1006,6 +1006,7 @@ dist_patch_DATA = \
|
||||||
%D%/packages/patches/gpsbabel-qstring.patch \
|
%D%/packages/patches/gpsbabel-qstring.patch \
|
||||||
%D%/packages/patches/grantlee-merge-theme-dirs.patch \
|
%D%/packages/patches/grantlee-merge-theme-dirs.patch \
|
||||||
%D%/packages/patches/grep-timing-sensitive-test.patch \
|
%D%/packages/patches/grep-timing-sensitive-test.patch \
|
||||||
|
%D%/packages/patches/gromacs-tinyxml2.patch \
|
||||||
%D%/packages/patches/groovy-add-exceptionutilsgenerator.patch \
|
%D%/packages/patches/groovy-add-exceptionutilsgenerator.patch \
|
||||||
%D%/packages/patches/grub-efi-fat-serial-number.patch \
|
%D%/packages/patches/grub-efi-fat-serial-number.patch \
|
||||||
%D%/packages/patches/gsl-test-i686.patch \
|
%D%/packages/patches/gsl-test-i686.patch \
|
||||||
|
|
|
@ -30,15 +30,20 @@ (define-module (gnu packages chemistry)
|
||||||
#:use-module (gnu packages)
|
#:use-module (gnu packages)
|
||||||
#:use-module (gnu packages algebra)
|
#:use-module (gnu packages algebra)
|
||||||
#:use-module (gnu packages boost)
|
#:use-module (gnu packages boost)
|
||||||
|
#:use-module (gnu packages check)
|
||||||
#:use-module (gnu packages compression)
|
#:use-module (gnu packages compression)
|
||||||
#:use-module (gnu packages documentation)
|
#:use-module (gnu packages documentation)
|
||||||
#:use-module (gnu packages gl)
|
#:use-module (gnu packages gl)
|
||||||
|
#:use-module (gnu packages graphviz)
|
||||||
#:use-module (gnu packages gv)
|
#:use-module (gnu packages gv)
|
||||||
#:use-module (gnu packages maths)
|
#:use-module (gnu packages maths)
|
||||||
|
#:use-module (gnu packages mpi)
|
||||||
|
#:use-module (gnu packages perl)
|
||||||
#:use-module (gnu packages pkg-config)
|
#:use-module (gnu packages pkg-config)
|
||||||
#:use-module (gnu packages python)
|
#:use-module (gnu packages python)
|
||||||
#:use-module (gnu packages python-xyz)
|
#:use-module (gnu packages python-xyz)
|
||||||
#:use-module (gnu packages qt)
|
#:use-module (gnu packages qt)
|
||||||
|
#:use-module (gnu packages sphinx)
|
||||||
#:use-module (gnu packages xml)
|
#:use-module (gnu packages xml)
|
||||||
#:use-module (guix build-system cmake)
|
#:use-module (guix build-system cmake)
|
||||||
#:use-module (guix build-system gnu)
|
#:use-module (guix build-system gnu)
|
||||||
|
@ -336,6 +341,91 @@ (define-public tng
|
||||||
stored with user-specified precision.")
|
stored with user-specified precision.")
|
||||||
(license license:bsd-3)))
|
(license license:bsd-3)))
|
||||||
|
|
||||||
|
(define-public gromacs
|
||||||
|
(package
|
||||||
|
(name "gromacs")
|
||||||
|
(version "2020.2")
|
||||||
|
(source (origin
|
||||||
|
(method url-fetch)
|
||||||
|
(uri (string-append "http://ftp.gromacs.org/pub/gromacs/gromacs-"
|
||||||
|
version ".tar.gz"))
|
||||||
|
(sha256
|
||||||
|
(base32
|
||||||
|
"1wyjgcdl30wy4hy6jvi9lkq53bqs9fgfq6fri52dhnb3c76y8rbl"))
|
||||||
|
;; Our version of tinyxml2 is far newer than the bundled one and
|
||||||
|
;; require fixing `testutils' code. See patch header for more info
|
||||||
|
(patches (search-patches "gromacs-tinyxml2.patch"))))
|
||||||
|
(build-system cmake-build-system)
|
||||||
|
(arguments
|
||||||
|
`(#:configure-flags
|
||||||
|
(list "-DGMX_DEVELOPER_BUILD=on" ; Needed to run tests
|
||||||
|
;; Unbundling
|
||||||
|
"-DGMX_USE_LMFIT=EXTERNAL"
|
||||||
|
"-DGMX_BUILD_OWN_FFTW=off"
|
||||||
|
"-DGMX_EXTERNAL_BLAS=on"
|
||||||
|
"-DGMX_EXTERNAL_LAPACK=on"
|
||||||
|
"-DGMX_EXTERNAL_TNG=on"
|
||||||
|
"-DGMX_EXTERNAL_ZLIB=on"
|
||||||
|
"-DGMX_EXTERNAL_TINYXML2=on"
|
||||||
|
(string-append "-DTinyXML2_DIR="
|
||||||
|
(assoc-ref %build-inputs "tinyxml2"))
|
||||||
|
;; Workaround for cmake/FindSphinx.cmake version parsing that does
|
||||||
|
;; not understand the guix-wrapped `sphinx-build --version' answer
|
||||||
|
(string-append "-DSPHINX_EXECUTABLE_VERSION="
|
||||||
|
,(package-version python-sphinx)))
|
||||||
|
#:phases
|
||||||
|
(modify-phases %standard-phases
|
||||||
|
(add-after 'unpack 'fixes
|
||||||
|
(lambda* (#:key inputs #:allow-other-keys)
|
||||||
|
;; Still bundled: part of gromacs, source behind registration
|
||||||
|
;; but free software anyways
|
||||||
|
;;(delete-file-recursively "src/external/vmd_molfile")
|
||||||
|
;; Still bundled: threads-based OpenMPI-compatible fallback
|
||||||
|
;; designed to be bundled like that
|
||||||
|
;;(delete-file-recursively "src/external/thread_mpi")
|
||||||
|
;; Unbundling
|
||||||
|
(delete-file-recursively "src/external/lmfit")
|
||||||
|
(delete-file-recursively "src/external/clFFT")
|
||||||
|
(delete-file-recursively "src/external/fftpack")
|
||||||
|
(delete-file-recursively "src/external/build-fftw")
|
||||||
|
(delete-file-recursively "src/external/tng_io")
|
||||||
|
(delete-file-recursively "src/external/tinyxml2")
|
||||||
|
(delete-file-recursively "src/external/googletest")
|
||||||
|
(copy-recursively (assoc-ref inputs "googletest-source")
|
||||||
|
"src/external/googletest")
|
||||||
|
;; This test warns about the build host hardware, disable
|
||||||
|
(substitute* "src/gromacs/hardware/tests/hardwaretopology.cpp"
|
||||||
|
(("TEST\\(HardwareTopologyTest, HwlocExecute\\)")
|
||||||
|
"void __guix_disabled()"))
|
||||||
|
#t)))))
|
||||||
|
(native-inputs
|
||||||
|
`(("doxygen" ,doxygen)
|
||||||
|
("googletest-source" ,(package-source googletest))
|
||||||
|
("graphviz" ,graphviz)
|
||||||
|
("pkg-config" ,pkg-config)
|
||||||
|
("python" ,python)
|
||||||
|
("python-pygments" ,python-pygments)
|
||||||
|
("python-sphinx" ,python-sphinx)))
|
||||||
|
(inputs
|
||||||
|
`(("fftwf" ,fftwf)
|
||||||
|
("hwloc" ,hwloc-2 "lib")
|
||||||
|
("lmfit" ,lmfit)
|
||||||
|
("openblas" ,openblas)
|
||||||
|
("perl" ,perl)
|
||||||
|
("tinyxml2" ,tinyxml2)
|
||||||
|
("tng" ,tng)))
|
||||||
|
(home-page "http://www.gromacs.org/")
|
||||||
|
(synopsis "Molecular dynamics software package")
|
||||||
|
(description "GROMACS is a versatile package to perform molecular dynamics,
|
||||||
|
i.e. simulate the Newtonian equations of motion for systems with hundreds to
|
||||||
|
millions of particles. It is primarily designed for biochemical molecules like
|
||||||
|
proteins, lipids and nucleic acids that have a lot of complicated bonded
|
||||||
|
interactions, but since GROMACS is extremely fast at calculating the nonbonded
|
||||||
|
interactions (that usually dominate simulations) many groups are also using it
|
||||||
|
for research on non-biological systems, e.g. polymers. GROMACS supports all the
|
||||||
|
usual algorithms you expect from a modern molecular dynamics implementation.")
|
||||||
|
(license license:lgpl2.1+)))
|
||||||
|
|
||||||
(define-public openbabel
|
(define-public openbabel
|
||||||
(package
|
(package
|
||||||
(name "openbabel")
|
(name "openbabel")
|
||||||
|
|
67
gnu/packages/patches/gromacs-tinyxml2.patch
Normal file
67
gnu/packages/patches/gromacs-tinyxml2.patch
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
Unbundling tinyxml2 from gromacs and using our own, which is newer, broke gromacs
|
||||||
|
build.
|
||||||
|
|
||||||
|
This patch fixes three issues:
|
||||||
|
|
||||||
|
- cmake now errors out if using multiple target_link_libraries with mixed styles
|
||||||
|
of signatures.
|
||||||
|
|
||||||
|
- Error handling API changed, fix the testutils/refdata_xml.cpp code by using the
|
||||||
|
new API: document.ErrorStr() & tinyxml2::XML_SUCCESS.
|
||||||
|
|
||||||
|
Those fixes will be submitted for inclusion to upstream, but may not be suitable
|
||||||
|
there as long as they still keep the old version bundled.
|
||||||
|
|
||||||
|
First hunk has already been requested for merging. Third is in discussion. Second
|
||||||
|
will only be sent if third is OK'ed.
|
||||||
|
|
||||||
|
diff -ruN gromacs-2020.2/src/testutils/CMakeLists.txt gromacs-2020.2-fixed/src/testutils/CMakeLists.txt
|
||||||
|
--- gromacs-2020.2/src/testutils/CMakeLists.txt 2020-04-30 18:33:44.000000000 +0200
|
||||||
|
+++ gromacs-2020.2-fixed/src/testutils/CMakeLists.txt 2020-05-01 22:52:16.356000000 +0200
|
||||||
|
@@ -73,7 +73,7 @@
|
||||||
|
|
||||||
|
if(HAVE_TINYXML2)
|
||||||
|
include_directories(SYSTEM ${TinyXML2_INCLUDE_DIR})
|
||||||
|
- target_link_libraries(testutils ${TinyXML2_LIBRARIES})
|
||||||
|
+ target_link_libraries(testutils PRIVATE ${TinyXML2_LIBRARIES})
|
||||||
|
else()
|
||||||
|
include_directories(BEFORE SYSTEM "../external/tinyxml2")
|
||||||
|
endif()
|
||||||
|
diff -ruN gromacs-2020.2/src/testutils/refdata_xml.cpp gromacs-2020.2-fixed/src/testutils/refdata_xml.cpp
|
||||||
|
--- gromacs-2020.2/src/testutils/refdata_xml.cpp 2020-04-30 18:33:44.000000000 +0200
|
||||||
|
+++ gromacs-2020.2-fixed/src/testutils/refdata_xml.cpp 2020-05-01 23:17:09.556000000 +0200
|
||||||
|
@@ -206,21 +206,12 @@
|
||||||
|
document.LoadFile(path.c_str());
|
||||||
|
if (document.Error())
|
||||||
|
{
|
||||||
|
- const char* errorStr1 = document.GetErrorStr1();
|
||||||
|
- const char* errorStr2 = document.GetErrorStr2();
|
||||||
|
+ const char* errorStr = document.ErrorStr();
|
||||||
|
std::string errorString("Error was ");
|
||||||
|
- if (errorStr1)
|
||||||
|
- {
|
||||||
|
- errorString += errorStr1;
|
||||||
|
- }
|
||||||
|
- if (errorStr2)
|
||||||
|
- {
|
||||||
|
- errorString += errorStr2;
|
||||||
|
- }
|
||||||
|
- if (!errorStr1 && !errorStr2)
|
||||||
|
- {
|
||||||
|
+ if (errorStr)
|
||||||
|
+ errorString += errorStr;
|
||||||
|
+ else
|
||||||
|
errorString += "not specified.";
|
||||||
|
- }
|
||||||
|
GMX_THROW(TestException("Reference data not parsed successfully: " + path + "\n."
|
||||||
|
+ errorString + "\n"));
|
||||||
|
}
|
||||||
|
@@ -371,7 +362,7 @@
|
||||||
|
XMLElementPtr rootElement = createRootElement(&document);
|
||||||
|
createChildElements(rootElement, rootEntry);
|
||||||
|
|
||||||
|
- if (document.SaveFile(path.c_str()) != tinyxml2::XML_NO_ERROR)
|
||||||
|
+ if (document.SaveFile(path.c_str()) != tinyxml2::XML_SUCCESS)
|
||||||
|
{
|
||||||
|
GMX_THROW(TestException("Reference data saving failed in " + path));
|
||||||
|
}
|
Loading…
Reference in a new issue