diff --git a/science/siesta/Makefile b/science/siesta/Makefile index 01d1dbcd203e..0d175c36f769 100644 --- a/science/siesta/Makefile +++ b/science/siesta/Makefile @@ -1,45 +1,68 @@ PORTNAME= siesta -DISTVERSION= 4.1.5 -PORTREVISION= 3 +DISTVERSION= 5.4.2 CATEGORIES= science # chemistry MASTER_SITES= https://gitlab.com/siesta-project/${PORTNAME}/-/releases/v${DISTVERSION}/downloads/ +DISTFILES= ${PORTNAME}-${DISTVERSION}.tar.gz MAINTAINER= yuri@FreeBSD.org COMMENT= Program to perform efficient electronic structure calculations WWW= https://siesta-project.org/siesta/ LICENSE= GPLv3 -LICENSE_FILE= ${WRKSRC}/../COPYING +LICENSE_FILE= ${WRKSRC}/COPYING -BROKEN_aarch64= Lack of IEEE754 support in gcc causes "Cannot find an intrinsic module named 'ieee_arithmetic'", see bug#255890 +BROKEN_aarch64= lack of IEEE754 support in gcc causes "Cannot find an intrinsic module named 'ieee_arithmetic'", see bug#255890 -LIB_DEPENDS= libblas.so:math/blas \ - liblapack.so:math/lapack +LIB_DEPENDS= libopenblas.so:math/openblas \ + libreadline.so:devel/readline -USES= fortran:gfortran gmake localbase:ldflags +USES= cmake:noninja,testing fortran:gfortran gmake localbase:ldflags pkgconfig -ALL_TARGET= default +PLIST_FILES= bin/${PORTNAME} -WRKSRC_SUBDIR= Obj +USE_GITHUB= nodefault +GH_TUPLE= ElectronicStructureLibrary:flook:v0.8.4:flook/External/Lua-Engine/flook \ + dftd3:simple-dftd3:f147b265d8b53dcf1666d7b0aba579ec02233fe8:s_dftd3/External/DFTD3/s-dftd3 \ + grimme-lab:mctc-lib:v0.3.1:mctc_lib/External/DFTD3/mctc-lib \ + grimme-lab:mstore:v0.2.0:mstore/External/DFTD3/mstore \ + toml-f:toml-f:v0.2.4:toml_f/External/DFTD3/toml-f \ + fortran-lang:test-drive:v0.4.0:test_drive/External/DFTD3/test-drive -PLIST_FILES= bin/${PORTNAME} +USE_GITLAB= nodefault +GL_TUPLE= siesta-project/libraries:libfdf:206a3d6c4628e584743bd5cd483d0e2e66e95b7c:libfdf/External/libfdf \ + siesta-project/libraries:xmlf90:963fe5d11487233d43ac59dd0c1340a7b2cc3dc5:xmlf90/External/xmlf90 \ + siesta-project/libraries:libpsml:b7049e4de25333fe8bd2dbf9a3495ef0f77ba168:libpsml/External/libpsml \ + siesta-project/libraries:libgridxc:022d2a6371eed0db272ac6922289921f62f30c21:libgridxc/External/libgridxc BINARY_ALIAS= gfortran=gfortran${GCC_DEFAULT} gcc=gcc${GCC_DEFAULT} +CMAKE_ARGS= -DSIESTA_WITH_MPI=OFF \ + -DSIESTA_WITH_ELSI=OFF \ + -DSIESTA_WITH_WANNIER90=OFF \ + -DSIESTA_WITH_NETCDF=OFF \ + -DSIESTA_WITH_LIBXC=OFF \ + -DSIESTA_WITH_FFTW=OFF \ + -Dlibfdf_FIND_METHOD=source \ + -Dxmlf90_FIND_METHOD=source \ + -Dlibpsml_FIND_METHOD=source \ + -Dlibgridxc_FIND_METHOD=source \ + -Ds-dftd3_FIND_METHOD=source \ + -Dmctc-lib_FIND_METHOD=source \ + -Dmstore_FIND_METHOD=source \ + -Dtoml-f_FIND_METHOD=source \ + -Dtest-drive_FIND_METHOD=source +CMAKE_OFF= SIESTA_TESTS +CMAKE_TESTING_ON= SIESTA_TESTS + .include .if ${GCC_DEFAULT} >= 10 # workaround for Type mismatch between actual argument at (1) and actual argument at (2) (COMPLEX(8)/REAL(8)). FFLAGS+= -fallow-argument-mismatch -MAKE_ARGS= FFLAGS="${FFLAGS} -O2 -fPIC -ftree-vectorize" +CMAKE_ARGS+= -DCMAKE_Fortran_FLAGS="${FFLAGS} -O2 -fPIC -ftree-vectorize" .endif -pre-configure: - @cd ${WRKSRC} && \ - ${SETENV} ${MAKE_ENV} ${SH} ../Src/obj_setup.sh && \ - ${LN} -s gfortran.make arch.make - do-install: - ${INSTALL_PROGRAM} ${WRKSRC}/${PORTNAME} ${STAGEDIR}${PREFIX}/bin + ${INSTALL_PROGRAM} ${BUILD_WRKSRC}/Src/${PORTNAME} ${STAGEDIR}${PREFIX}/bin .include diff --git a/science/siesta/distinfo b/science/siesta/distinfo index ae18218c0c8c..f8bbc58c3ece 100644 --- a/science/siesta/distinfo +++ b/science/siesta/distinfo @@ -1,3 +1,23 @@ -TIMESTAMP = 1619229947 -SHA256 (siesta-4.1.5.tar.gz) = 518df31aa6213af5e24cc73abb537b2c89a925b487171f5339d743d0c7140b3f -SIZE (siesta-4.1.5.tar.gz) = 16286464 +TIMESTAMP = 1783524801 +SHA256 (siesta-5.4.2.tar.gz) = 63d41b6b96e53b8ffa96750a80052ac61ee9550331604920f9040e2486a29b8d +SIZE (siesta-5.4.2.tar.gz) = 13087676 +SHA256 (ElectronicStructureLibrary-flook-v0.8.4_GH0.tar.gz) = 66304756194341157d24467d994312c950d2bd33d4d19d68e81424769a3dbc03 +SIZE (ElectronicStructureLibrary-flook-v0.8.4_GH0.tar.gz) = 570879 +SHA256 (dftd3-simple-dftd3-f147b265d8b53dcf1666d7b0aba579ec02233fe8_GH0.tar.gz) = 6a5f741a779eea17663d80e24cb5dda511960c9b24f5aed450dc57536839502e +SIZE (dftd3-simple-dftd3-f147b265d8b53dcf1666d7b0aba579ec02233fe8_GH0.tar.gz) = 605878 +SHA256 (grimme-lab-mctc-lib-v0.3.1_GH0.tar.gz) = 03dc8ccba37413da70e55a07cef8e8de53bce33f5bb52c1f8db5fec326abe083 +SIZE (grimme-lab-mctc-lib-v0.3.1_GH0.tar.gz) = 130801 +SHA256 (grimme-lab-mstore-v0.2.0_GH0.tar.gz) = 95edba88afbc8013f57f4c818a97c0500cc40b158bed11234c061b2b6d7e480d +SIZE (grimme-lab-mstore-v0.2.0_GH0.tar.gz) = 240180 +SHA256 (toml-f-toml-f-v0.2.4_GH0.tar.gz) = 21a0b558bec6750907da80cd7141444b56ef29eb3484b9689dc2a95949368baa +SIZE (toml-f-toml-f-v0.2.4_GH0.tar.gz) = 94087 +SHA256 (fortran-lang-test-drive-v0.4.0_GH0.tar.gz) = f9c037a3c1727e98801c2375e6f2efde9881ac1f54b04be3bc928e094f5787a5 +SIZE (fortran-lang-test-drive-v0.4.0_GH0.tar.gz) = 26298 +SHA256 (siesta-project/libraries-libfdf-206a3d6c4628e584743bd5cd483d0e2e66e95b7c_GL0.tar.gz) = d30b631a71644f8ea568f839400cab06148d6f558a102c83e301681c21f0facb +SIZE (siesta-project/libraries-libfdf-206a3d6c4628e584743bd5cd483d0e2e66e95b7c_GL0.tar.gz) = 78703 +SHA256 (siesta-project/libraries-xmlf90-963fe5d11487233d43ac59dd0c1340a7b2cc3dc5_GL0.tar.gz) = 1fc3f182c4bc941a9a41f42b2d3f9ca59abc8b132824e76cdd3c5ed4611bfe37 +SIZE (siesta-project/libraries-xmlf90-963fe5d11487233d43ac59dd0c1340a7b2cc3dc5_GL0.tar.gz) = 528426 +SHA256 (siesta-project/libraries-libpsml-b7049e4de25333fe8bd2dbf9a3495ef0f77ba168_GL0.tar.gz) = e169004471bd3e9eac9a698175edd17fc9bc5429427691ad6ee3a913bf705227 +SIZE (siesta-project/libraries-libpsml-b7049e4de25333fe8bd2dbf9a3495ef0f77ba168_GL0.tar.gz) = 675634 +SHA256 (siesta-project/libraries-libgridxc-022d2a6371eed0db272ac6922289921f62f30c21_GL0.tar.gz) = 7c1055b0b4ae0e9b0b1471e17b558aaedd44fd90f3eb6e8bbe5e3c524f5d1b32 +SIZE (siesta-project/libraries-libgridxc-022d2a6371eed0db272ac6922289921f62f30c21_GL0.tar.gz) = 360521 diff --git a/science/siesta/files/patch-External_Lua-Engine_CMakeLists.txt b/science/siesta/files/patch-External_Lua-Engine_CMakeLists.txt new file mode 100644 index 000000000000..4f63c9de8ac6 --- /dev/null +++ b/science/siesta/files/patch-External_Lua-Engine_CMakeLists.txt @@ -0,0 +1,24 @@ +-- Configure flook for FreeBSD instead of forcing the linux platform, and pass +-- an explicit job count to the recursive make invocation that builds flook. +-- A bare "-j" is propagated to the inner FreeBSD make, which requires an +-- argument and aborts the build. +--- External/Lua-Engine/CMakeLists.txt.orig 2025-12-16 02:10:34 UTC ++++ External/Lua-Engine/CMakeLists.txt +@@ -139,6 +139,8 @@ + + if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin") + set(FLOOK_PLATFORM "macosx") ++elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "FreeBSD") ++ set(FLOOK_PLATFORM "freebsd") + else() + set(FLOOK_PLATFORM "linux") + endif() +@@ -198,7 +200,7 @@ + ##CONFIGURE_HANDLED_BY_BUILD true + DOWNLOAD_EXTRACT_TIMESTAMP TRUE + CONFIGURE_COMMAND "" +- BUILD_COMMAND ${MAKE_EXECUTABLE} -j liball ++ BUILD_COMMAND ${MAKE_EXECUTABLE} -j1 liball + ## We avoid installing until we know how to specify the prefix... + ## ... the following should work but does not. + ## INSTALL_COMMAND ${MAKE_EXECUTABLE} DESTDIR= install diff --git a/science/siesta/files/patch-External_Lua-Engine_flook_Makefile b/science/siesta/files/patch-External_Lua-Engine_flook_Makefile new file mode 100644 index 000000000000..7e6c1943faef --- /dev/null +++ b/science/siesta/files/patch-External_Lua-Engine_flook_Makefile @@ -0,0 +1,22 @@ +-- Use $(MAKE) instead of a hardcoded "make" when recursing into aotus. The +-- bundled aotus/smeka makefiles use GNU make syntax and fail with FreeBSD make. +--- External/Lua-Engine/flook/Makefile.orig 2026-07-08 15:35:43 UTC ++++ External/Lua-Engine/flook/Makefile +@@ -64,15 +64,15 @@ + endif + lib-aotus: prep-aotus + ifdef SETUP +- (cd aotus/obj ; make SETUP=../../$(SETUP) ) ++ (cd aotus/obj ; $(MAKE) SETUP=../../$(SETUP) ) + else +- (cd aotus/obj ; make ) ++ (cd aotus/obj ; $(MAKE) ) + endif + clean-aotus: prep-aotus + ifdef SETUP +- (cd aotus/obj ; make SETUP=../../$(SETUP) clean ) ++ (cd aotus/obj ; $(MAKE) SETUP=../../$(SETUP) clean ) + else +- (cd aotus/obj ; make clean ) ++ (cd aotus/obj ; $(MAKE) clean ) + endif diff --git a/science/siesta/files/patch-cmake_SiestaFindPackage.cmake b/science/siesta/files/patch-cmake_SiestaFindPackage.cmake new file mode 100644 index 000000000000..2b71fe2208cf --- /dev/null +++ b/science/siesta/files/patch-cmake_SiestaFindPackage.cmake @@ -0,0 +1,55 @@ +-- Disallow the "fetch" method in Siesta_find_package so the build +-- does not try to clone Git repositories during configure. The +-- required dependency sources are now pre-fetched as GH_TUPLE/GL_TUPLE +-- distfiles and populated in External/ before the build starts. +--- cmake/SiestaFindPackage.cmake.orig 2026-07-08 15:31:28 UTC ++++ cmake/SiestaFindPackage.cmake +@@ -117,7 +117,7 @@ function(Siesta_find_package) + + + # Determine the allowed find-methods +- set(all_f_methods "cmake" "pkgconf" "source" "fetch") ++ set(all_f_methods "cmake" "pkgconf" "source") + set(allowed_f_methods "cmake" "pkgconf") + if(DEFINED _f_SOURCE_DIR) + list(APPEND allowed_f_methods "source") +@@ -323,39 +323,6 @@ function(Siesta_find_package) + else() + mymsg(CHECK_FAIL "not found/compatible") + endif() +- endif() +- +- if("${method}" STREQUAL "fetch") +- mymsg(CHECK_START "fetching from ${_f_REPO}") +- +- include(FetchContent) +- FetchContent_Declare("${pkg}" +- GIT_REPOSITORY "${_f_REPO}" +- GIT_TAG "${_f_TAG}" +- ) +- FetchContent_MakeAvailable("${pkg}") +- +- add_library("${_f_TARGET}" INTERFACE IMPORTED GLOBAL) +- target_link_libraries("${_f_TARGET}" INTERFACE "${pkg}") +- +- # We need the module directory in the subproject before we finish the configure stage +- # Note that this is relevant if the "Fortran_MODULE_DIRECTORY" property is set to +- # the 'include' subdirectory, as it is done for some libraries. +- # +- # (This is found experimentally; it does not seem to apply always, but it does not +- # hurt to do it.) +- +- FetchContent_GetProperties("${pkg}" BINARY_DIR "${pkg_uc}_BINARY_DIR") +- message(STATUS "BINARY_DIR for fetched ${pkg}: ${${pkg_uc}_BINARY_DIR}") +- +- if(NOT EXISTS "${${pkg_uc}_BINARY_DIR}/include") +- make_directory("${${pkg_uc}_BINARY_DIR}/include") +- endif() +- +- mymsg(CHECK_PASS "fetched") +- set(f_method "fetch") +- +- break() + endif() + + endforeach()