From b9f0120dd30ecdd81c85ccbab6512800e7181fc0 Mon Sep 17 00:00:00 2001 From: Kiran Shila Date: Tue, 7 Apr 2026 10:37:08 -0700 Subject: [PATCH 1/6] casacore: propagate wcslib/cfitsio, add pkgconfig patch, enable OpenMP --- .../ca/casacore/casacore-pkgconfig.patch | 29 ++++++++ pkgs/by-name/ca/casacore/package.nix | 67 ++++++++++++++++--- 2 files changed, 87 insertions(+), 9 deletions(-) create mode 100644 pkgs/by-name/ca/casacore/casacore-pkgconfig.patch diff --git a/pkgs/by-name/ca/casacore/casacore-pkgconfig.patch b/pkgs/by-name/ca/casacore/casacore-pkgconfig.patch new file mode 100644 index 000000000000..58b0e29adf9e --- /dev/null +++ b/pkgs/by-name/ca/casacore/casacore-pkgconfig.patch @@ -0,0 +1,29 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 574150c05..109e96889 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -566,6 +566,14 @@ foreach (module ${_modules}) + endforeach (module) + + # Install pkg-config support file ++set(pc_req_public "") ++if (_usewcs AND WCSLIB_FOUND) ++ list(APPEND pc_req_public "wcslib") ++endif() ++if (_usefits AND CFITSIO_FOUND) ++ list(APPEND pc_req_public "cfitsio") ++endif() ++list(JOIN pc_req_public " " pc_req_public) + CONFIGURE_FILE("casacore.pc.in" "casacore.pc" @ONLY) + set(CASA_PKGCONFIG_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") + INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/casacore.pc" DESTINATION "${CASA_PKGCONFIG_INSTALL_PREFIX}") +diff --git a/casacore.pc.in b/casacore.pc.in +index 6881300df..d0a01b240 100644 +--- a/casacore.pc.in ++++ b/casacore.pc.in +@@ -9,4 +9,4 @@ Version: @PROJECT_VERSION@ + Requires: @pc_req_public@ + Requires.private: @pc_req_private@ + Libs: -L${libdir} @PRIVATE_LIBS@ +-Cflags: -I${includedir} -I@WCSLIB_INCLUDE_DIR@ ++Cflags: -I${includedir} diff --git a/pkgs/by-name/ca/casacore/package.nix b/pkgs/by-name/ca/casacore/package.nix index dc1cae89fe07..5a026b41ba10 100644 --- a/pkgs/by-name/ca/casacore/package.nix +++ b/pkgs/by-name/ca/casacore/package.nix @@ -14,8 +14,33 @@ fftwFloat, readline, gsl, + mpi, + adios2, + hdf5, + llvmPackages, + mpiSupport ? false, + adios2Support ? false, + hdf5Support ? false, }: - +let + casacorePackages = { + adios2 = adios2.override { + inherit mpi mpiSupport; + }; + fftw = fftw.override { + inherit mpi; + enableMpi = mpiSupport; + }; + fftwFloat = fftwFloat.override { + inherit mpi; + enableMpi = mpiSupport; + }; + hdf5 = hdf5.override { + inherit mpi mpiSupport; + cppSupport = !mpiSupport; + }; + }; +in stdenv.mkDerivation (finalAttrs: { pname = "casacore"; version = "3.8.0"; @@ -27,31 +52,55 @@ stdenv.mkDerivation (finalAttrs: { hash = "sha256-NOxuHMCuHGk9XuWXMwQTN6kOFDI0QuHMgfNRDdlPw44="; }; + strictDeps = true; + nativeBuildInputs = [ cmake gfortran flex bison - ]; + ] + ++ lib.optional mpiSupport mpi; + + propagatedBuildInputs = [ + wcslib + cfitsio + ] + ++ lib.optional hdf5Support casacorePackages.hdf5 + ++ lib.optional mpiSupport mpi + ++ lib.optional adios2Support casacorePackages.adios2; buildInputs = [ blas lapack - cfitsio - wcslib - fftw - fftwFloat + casacorePackages.fftw + casacorePackages.fftwFloat readline gsl + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + llvmPackages.openmp + ]; + + patches = [ + # Fix the generated .pc file: set Requires from a variable instead of + # leaving it empty, and remove hardcoded absolute cmake build paths from + # Cflags (which would embed /nix/store paths from the build environment). + ./casacore-pkgconfig.patch ]; enableParallelBuilding = true; - strictDeps = true; - cmakeFlags = [ (lib.cmakeBool "ENABLE_SHARED" (!stdenv.hostPlatform.isStatic)) - (lib.cmakeBool "BUILD_PYTHON3" false) # TODO: If/when we package python-casacore, this will change + (lib.cmakeBool "BUILD_PYTHON3" false) + (lib.cmakeBool "USE_OPENMP" true) + (lib.cmakeBool "USE_ADIOS2" adios2Support) + (lib.cmakeBool "USE_HDF5" hdf5Support) + (lib.cmakeBool "USE_MPI" mpiSupport) + (lib.cmakeBool "PORTABLE" true) + (lib.cmakeBool "USE_PCH" false) + (lib.cmakeBool "BUILD_FFTPACK_DEPRECATED" true) # Needed for casacpp ]; meta = { From 0baef0b1ad0412d171bbf2baf56568b315c1dc6e Mon Sep 17 00:00:00 2001 From: Kiran Shila Date: Tue, 7 Apr 2026 10:37:17 -0700 Subject: [PATCH 2/6] libsakura: init at 5.3.2 --- pkgs/by-name/li/libsakura/package.nix | 49 +++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 pkgs/by-name/li/libsakura/package.nix diff --git a/pkgs/by-name/li/libsakura/package.nix b/pkgs/by-name/li/libsakura/package.nix new file mode 100644 index 000000000000..93183b65c521 --- /dev/null +++ b/pkgs/by-name/li/libsakura/package.nix @@ -0,0 +1,49 @@ +{ + lib, + stdenv, + fetchFromGitHub, + cmake, + eigen, + fftw, +}: +stdenv.mkDerivation (finalAttrs: { + pname = "libsakura"; + version = "5.3.2"; + + src = fetchFromGitHub { + owner = "tnakazato"; + repo = "sakura"; + tag = "${finalAttrs.pname}-${finalAttrs.version}"; + hash = "sha256-QkVZXb9m4iMTeFYUOK1u+9HM0oMu48bwe7AovafanVU="; + }; + + sourceRoot = "${finalAttrs.src.name}/${finalAttrs.pname}"; + + strictDeps = true; + __structuredAttrs = true; + + nativeBuildInputs = [ + cmake + ]; + + buildInputs = [ + eigen + fftw + ]; + + cmakeFlags = [ + (lib.cmakeFeature "SIMD_ARCH" "GENERIC") + (lib.cmakeBool "PYTHON_BINDING" false) + (lib.cmakeBool "BUILD_DOC" false) + (lib.cmakeBool "ENABLE_TEST" false) + ]; + + meta = { + homepage = "https://tnakazato.github.io/sakura/"; + changelog = "https://github.com/tnakazato/sakura/releases/tag/${finalAttrs.pname}-${finalAttrs.version}"; + description = "Thread-safe library for signal processing in radio astronomy"; + maintainers = with lib.maintainers; [ kiranshila ]; + license = lib.licenses.lgpl3Plus; + platforms = lib.platforms.unix; + }; +}) From 51cf4a81255301948f324cf450f55e800c325b2b Mon Sep 17 00:00:00 2001 From: Kiran Shila Date: Tue, 7 Apr 2026 10:37:22 -0700 Subject: [PATCH 3/6] casacpp: init at 6.7.5.18 --- .../ca/casacpp/casacpp-pkgconfig.patch | 22 ++++ pkgs/by-name/ca/casacpp/package.nix | 120 ++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 pkgs/by-name/ca/casacpp/casacpp-pkgconfig.patch create mode 100644 pkgs/by-name/ca/casacpp/package.nix diff --git a/pkgs/by-name/ca/casacpp/casacpp-pkgconfig.patch b/pkgs/by-name/ca/casacpp/casacpp-pkgconfig.patch new file mode 100644 index 000000000000..5856af18c55b --- /dev/null +++ b/pkgs/by-name/ca/casacpp/casacpp-pkgconfig.patch @@ -0,0 +1,22 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4d3cae2326..7954107f8f 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -195,6 +195,7 @@ foreach(_component IN LISTS casacpp_all_components) + endforeach() + + # Install pkg-config support file ++set(pc_req_public "casacore cfitsio libxml-2.0 gsl protobuf grpc++ fftw3 libsakura") + CONFIGURE_FILE("casacpp.pc.in" "casacpp.pc" @ONLY) + set(CASACPP_PKGCONFIG_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") + INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/casacpp.pc" DESTINATION "${CASACPP_PKGCONFIG_INSTALL_PREFIX}") +diff --git a/casacpp.pc.in b/casacpp.pc.in +index 08a996b2c3..699cfb7319 100644 +--- a/casacpp.pc.in ++++ b/casacpp.pc.in +@@ -9,4 +9,4 @@ Version: @PROJECT_VERSION@ + Requires: @pc_req_public@ + Requires.private: @pc_req_private@ + Libs: -L${libdir} @PRIVATE_LIBS@ +-Cflags: -DWITHOUT_ACS -DWITHOUT_BOOST -I${includedir}/casacpp -I${includedir}/casacpp/protobuf_generated -I@CASACORE_INCLUDE_DIRS@ -I@CFITSIO_INCLUDE_DIRS@ -I@LibXML_INCLUDE_DIRS@ -I@GSL_INCLUDE_DIRS@ ++Cflags: -DWITHOUT_ACS -DWITHOUT_BOOST -I${includedir}/casacpp -I${includedir}/casacpp/protobuf_generated diff --git a/pkgs/by-name/ca/casacpp/package.nix b/pkgs/by-name/ca/casacpp/package.nix new file mode 100644 index 000000000000..f495ec40a467 --- /dev/null +++ b/pkgs/by-name/ca/casacpp/package.nix @@ -0,0 +1,120 @@ +{ + lib, + stdenv, + fetchgit, + cmake, + common-updater-scripts, + curl, + gnugrep, + writeShellScript, + pkg-config, + flex, + bison, + gfortran, + casacore, + libsakura, + grpc, + protobuf, + gsl, + libxml2, + libxslt, + fftw, + fftwFloat, + sqlite, + openssl, + mpi, + mpiSupport ? false, +}: +let + casacppPackages = { + fftw = fftw.override { + inherit mpi; + enableMpi = mpiSupport; + }; + fftwFloat = fftwFloat.override { + inherit mpi; + enableMpi = mpiSupport; + }; + casacore = casacore.override { + inherit mpi mpiSupport; + }; + }; +in +stdenv.mkDerivation (finalAttrs: { + pname = "casacpp"; + version = "6.7.5.18"; + + src = fetchgit { + url = "https://open-bitbucket.nrao.edu/scm/casa/casa6.git"; + rev = "refs/tags/${finalAttrs.version}"; + hash = "sha256-75oIlaNAyu70KWSjz38LoYAvV7RJgzH/X9uBnGpriF4="; + fetchSubmodules = false; + }; + + sourceRoot = "${finalAttrs.src.name}/casatools/src/code"; + + patches = [ + # Fix the generated .pc file: set Requires from a variable instead of + # leaving it empty, and remove hardcoded absolute cmake build paths from + # Cflags (which would embed /nix/store paths from the build environment). + ./casacpp-pkgconfig.patch + ]; + + postPatch = '' + sed -i '/execute_process(COMMAND/,/OUTPUT_VARIABLE CASACPP_VERSION)/c\set(CASACPP_VERSION "${finalAttrs.version}")' CMakeLists.txt + sed -i 's/string(REGEX MATCH.*CASACPP_VERSION)//' CMakeLists.txt + substituteInPlace CMakeLists.txt \ + --replace-fail \ + 'find_package(gRPC QUIET)' \ + 'set(gRPC_FOUND 0)' + ''; + + strictDeps = true; + __structuredAttrs = true; + + nativeBuildInputs = [ + cmake + pkg-config + flex + bison + gfortran + grpc # for grpc_cpp_plugin + ] + ++ lib.optional mpiSupport mpi; + + buildInputs = [ + libxslt + sqlite + openssl + ]; + + propagatedBuildInputs = [ + casacppPackages.casacore + protobuf + grpc + casacppPackages.fftw + casacppPackages.fftwFloat + libsakura + gsl + libxml2 + ]; + + cmakeFlags = lib.optionals stdenv.hostPlatform.isDarwin [ + (lib.cmakeFeature "CMAKE_CXX_FLAGS" "-ffp-contract=off") + ]; + + enableParallelBuilding = true; + + passthru.updateScript = writeShellScript "update-casacpp" '' + version=$(${lib.getExe curl} -s https://pypi.org/pypi/casatasks/json | ${lib.getExe gnugrep} -oP '"version"\s*:\s*"\K[^"]+' | head -1) + ${lib.getExe' common-updater-scripts "update-source-version"} casacpp "$version" + ''; + + meta = { + description = "C++ core libraries for radio interferometry data reduction"; + homepage = "https://casa.nrao.edu/"; + license = lib.licenses.gpl2Only; + platforms = lib.platforms.unix; + maintainers = with lib.maintainers; [ kiranshila ]; + }; +}) From fc8c57ea28ab8ccfaf0c924eb6bd477bf79641d7 Mon Sep 17 00:00:00 2001 From: Kiran Shila Date: Tue, 7 Apr 2026 10:45:00 -0700 Subject: [PATCH 4/6] python3Packages.casaconfig: init at 1.5.0 --- .../python-modules/casaconfig/default.nix | 30 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 32 insertions(+) create mode 100644 pkgs/development/python-modules/casaconfig/default.nix diff --git a/pkgs/development/python-modules/casaconfig/default.nix b/pkgs/development/python-modules/casaconfig/default.nix new file mode 100644 index 000000000000..5b0040af4b1a --- /dev/null +++ b/pkgs/development/python-modules/casaconfig/default.nix @@ -0,0 +1,30 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + setuptools, + certifi, +}: +buildPythonPackage (finalAttrs: { + pname = "casaconfig"; + version = "1.5.0"; + + pyproject = true; + + src = fetchPypi { + inherit (finalAttrs) pname version; + hash = "sha256-/O0rzef1Yqn+ezjTWfe1oRIh6FyU1W3Ev9tuXldukys="; + }; + + build-system = [ setuptools ]; + + dependencies = [ certifi ]; + + meta = { + description = "Reference data and converters for CASA operation"; + homepage = "https://casa.nrao.edu/"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ kiranshila ]; + platforms = lib.platforms.all; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 106da0d63b21..eb69ca3cf792 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -2500,6 +2500,8 @@ self: super: with self; { casa-formats-io = callPackage ../development/python-modules/casa-formats-io { }; + casaconfig = callPackage ../development/python-modules/casaconfig { }; + casadi = toPythonModule ( pkgs.casadi.override { pythonSupport = true; From d7c9debef77e9ad32da38f774156c7e32b582222 Mon Sep 17 00:00:00 2001 From: Kiran Shila Date: Tue, 7 Apr 2026 10:45:10 -0700 Subject: [PATCH 5/6] python3Packages.casatools: init at 6.7.5.18 --- .../python-modules/casatools/default.nix | 113 ++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 115 insertions(+) create mode 100644 pkgs/development/python-modules/casatools/default.nix diff --git a/pkgs/development/python-modules/casatools/default.nix b/pkgs/development/python-modules/casatools/default.nix new file mode 100644 index 000000000000..868891e5dc4a --- /dev/null +++ b/pkgs/development/python-modules/casatools/default.nix @@ -0,0 +1,113 @@ +{ + lib, + buildPythonPackage, + fetchgit, + fetchurl, + common-updater-scripts, + curl, + gnugrep, + gnused, + writeShellScript, + cmake, + pkg-config, + swig, + flex, + bison, + gfortran, + jdk, + setuptools, + wheel, + build, + numpy, + casaconfig, + casacpp, + xercesc, + grpc, + readline, +}: +buildPythonPackage (finalAttrs: { + pname = "casatools"; + version = "6.7.5.18"; + + src = fetchgit { + url = "https://open-bitbucket.nrao.edu/scm/casa/casa6.git"; + rev = "refs/tags/${finalAttrs.version}"; + hash = "sha256-75oIlaNAyu70KWSjz38LoYAvV7RJgzH/X9uBnGpriF4="; + fetchSubmodules = false; + }; + + sourceRoot = "${finalAttrs.src.name}/casatools"; + + format = "pyproject"; + + nativeBuildInputs = [ + cmake + pkg-config + swig + flex + bison + gfortran + jdk + grpc + setuptools + wheel + build + ]; + + dontConfigure = true; + + buildInputs = [ + casacpp + xercesc + readline + ]; + + propagatedBuildInputs = [ + numpy + casaconfig + ]; + + jarName = "xml-casa-assembly-1.88.jar"; + + xml_jar = fetchurl { + url = "http://casa.nrao.edu/download/devel/xml-casa/java/${finalAttrs.jarName}"; + hash = "sha256-UJCiXLXAe7Prm1qGXJ9jbuZcgKhPTSrU8qnf4C5Goxs="; # xml-jar + }; + + postPatch = '' + mkdir -p scripts/java + cp ${finalAttrs.xml_jar} scripts/java/${finalAttrs.jarName} + echo "${finalAttrs.version} ${finalAttrs.version}" > version.txt + sed -i 's/def compute_version():/def compute_version():\n return "${finalAttrs.version}"\ndef _compute_version_orig():/' setup.py + ''; + + # Tests require a full CASA data directory and network access + doCheck = false; + + passthru.updateScript = writeShellScript "update-casatools" '' + set -euo pipefail + version=$(${lib.getExe curl} -s https://pypi.org/pypi/casatools/json | ${lib.getExe gnugrep} -oP '"version"\s*:\s*"\K[^"]+' | head -1) + ${lib.getExe' common-updater-scripts "update-source-version"} python3Packages.casatools "$version" + + # Extract the jar filename from the xml-casa script at the new tag + jar_name=$(${lib.getExe curl} -s \ + "https://open-bitbucket.nrao.edu/rest/api/1.0/projects/CASA/repos/casa6/raw/casatools/scripts/xml-casa?at=refs/tags/$version" | \ + ${lib.getExe gnugrep} -oP '(?<=jarfile_name = ").*(?=")') + jar_url="http://casa.nrao.edu/download/devel/xml-casa/java/$jar_name" + jar_sri=$(nix-prefetch-url --type sha256 "$jar_url" | xargs nix hash convert --hash-algo sha256 --to sri) + + nix_file=pkgs/development/python-modules/casatools/default.nix + ${lib.getExe gnused} -i \ + -e "s|xml-casa-assembly-[^ \"]*\.jar|$jar_name|" \ + -e "s|hash = \"sha256-.*\"; # xml-jar|hash = \"$jar_sri\"; # xml-jar|" \ + "$nix_file" + ''; + + meta = { + description = "Python interface to core radio astronomy data processing routines"; + homepage = "https://casa.nrao.edu/"; + license = lib.licenses.gpl2Only; + platforms = lib.platforms.unix; + maintainers = with lib.maintainers; [ kiranshila ]; + }; +}) diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index eb69ca3cf792..18de7e99c268 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -2509,6 +2509,8 @@ self: super: with self; { } ); + casatools = callPackage ../development/python-modules/casatools { }; + case-converter = callPackage ../development/python-modules/case-converter { }; cashaddress = callPackage ../development/python-modules/cashaddress { }; From 2c57d93813ca69530bb938d349e6b742a6b097d3 Mon Sep 17 00:00:00 2001 From: Kiran Shila Date: Tue, 7 Apr 2026 11:01:07 -0700 Subject: [PATCH 6/6] python3Packages.casatasks: init at 6.7.5.18 --- .../python-modules/casatasks/default.nix | 106 ++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 108 insertions(+) create mode 100644 pkgs/development/python-modules/casatasks/default.nix diff --git a/pkgs/development/python-modules/casatasks/default.nix b/pkgs/development/python-modules/casatasks/default.nix new file mode 100644 index 000000000000..f778b3340490 --- /dev/null +++ b/pkgs/development/python-modules/casatasks/default.nix @@ -0,0 +1,106 @@ +{ + lib, + buildPythonPackage, + fetchgit, + fetchurl, + common-updater-scripts, + curl, + gnugrep, + gnused, + writeShellScript, + jdk, + wheel, + casatools, + casaconfig, + matplotlib, + scipy, + certifi, + pyerfa, + setuptools, + pipInstallHook, +}: +buildPythonPackage (finalAttrs: { + pname = "casatasks"; + version = "6.7.5.18"; + + src = fetchgit { + url = "https://open-bitbucket.nrao.edu/scm/casa/casa6.git"; + rev = "refs/tags/${finalAttrs.version}"; + hash = "sha256-75oIlaNAyu70KWSjz38LoYAvV7RJgzH/X9uBnGpriF4="; + fetchSubmodules = false; + }; + + sourceRoot = "${finalAttrs.src.name}/casatasks"; + + format = "other"; + + nativeBuildInputs = [ + jdk + wheel + setuptools + pipInstallHook + ]; + + propagatedBuildInputs = [ + casatools + casaconfig + matplotlib + scipy + certifi + pyerfa + ]; + + jarName = "xml-casa-assembly-1.88.jar"; + + xml_jar = fetchurl { + url = "http://casa.nrao.edu/download/devel/xml-casa/java/${finalAttrs.jarName}"; + hash = "sha256-UJCiXLXAe7Prm1qGXJ9jbuZcgKhPTSrU8qnf4C5Goxs="; # xml-jar + }; + + postPatch = '' + mkdir -p java + cp ${finalAttrs.xml_jar} java/${finalAttrs.jarName} + ''; + + buildPhase = '' + runHook preBuild + export HOME=$(mktemp -d) + mkdir -p $HOME/.casa/data + cat > $HOME/.casa/config.py <