# Disable LTO - causes linker issues with VTK/ITK on Fedora 43+ %global _lto_cflags %{nil} %global soname_version 0.1 %global commit fd37b874033c6589e28f5cefdd56a5f605d09960 %global shortcommit %(c=%{commit}; echo ${c:0:8}) %global snapdate 20260126 Name: ctk Version: 2026.01.26 Release: 0.1.%{snapdate}git%{shortcommit}%{?dist} Summary: The Common Toolkit for biomedical imaging (full Slicer build) # The entire source is Apache-2.0; CMake/CMakeFindDependencyMacro.cmake is # BSD-3-Clause, but does not contribute to the licenses of the binary RPMs. License: Apache-2.0 URL: https://commontk.org/ Source0: https://github.com/commontk/CTK/archive/%{commit}/CTK-%{shortcommit}.tar.gz # https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval ExcludeArch: %{ix86} # This is the full CTK build for 3D Slicer, with VTK, ITK, PythonQt, and DICOM. # It Conflicts with the Fedora stock ctk package (which only has Core/Widgets/DICOM/PluginFramework). Conflicts: ctk < 2026 BuildRequires: gcc-c++ BuildRequires: cmake >= 3.16 BuildRequires: ninja-build BuildRequires: python3-devel # Qt5 (Slicer 5.x uses Qt5; CTK supports both Qt5 and Qt6) BuildRequires: qt5-qtbase-devel >= 5.15.0 BuildRequires: qt5-qtbase-private-devel >= 5.15.0 BuildRequires: qt5-qtsvg-devel BuildRequires: qt5-qtmultimedia-devel BuildRequires: qt5-qtdeclarative-devel BuildRequires: qt5-qttools-devel BuildRequires: qt5-qttools-static BuildRequires: qt5-qtxmlpatterns-devel # DCMTK BuildRequires: dcmtk-devel # VTK (COPR 9.5.2) BuildRequires: vtk-devel # VTK cmake config transitive deps (COPR vtk-devel doesn't Require these) BuildRequires: json-devel BuildRequires: jsoncpp-devel BuildRequires: hdf5-devel BuildRequires: utf8cpp-devel BuildRequires: fmt-devel BuildRequires: libglvnd-devel BuildRequires: libtheora-devel BuildRequires: libogg-devel BuildRequires: libjpeg-turbo-devel BuildRequires: libpng-devel BuildRequires: libtiff-devel BuildRequires: freetype-devel BuildRequires: fontconfig-devel BuildRequires: expat-devel BuildRequires: lz4-devel BuildRequires: xz-devel BuildRequires: zlib-devel BuildRequires: sqlite-devel BuildRequires: libxml2-devel BuildRequires: netcdf-devel BuildRequires: pugixml-devel BuildRequires: proj-devel BuildRequires: tbb-devel BuildRequires: PEGTL-devel BuildRequires: libharu-devel BuildRequires: gl2ps-devel BuildRequires: double-conversion-devel BuildRequires: eigen3-devel BuildRequires: cli11-devel BuildRequires: boost-devel BuildRequires: gdal-devel BuildRequires: postgresql-server-devel # ITK5 (COPR) BuildRequires: InsightToolkit5-devel # PythonQt (COPR - commontk fork) BuildRequires: PythonQt-devel %global _description %{expand: The Common Toolkit is a community effort to provide support code for medical image analysis, surgical navigation, and related projects. This is the full build used by 3D Slicer, including VTK visualization, ITK image processing, PythonQt scripting, and DICOM support.} %description %{_description} This package contains the CTK Core library. %package widgets Summary: Qt widgets for biomedical imaging applications Requires: %{name}%{?_isa} = %{version}-%{release} %description widgets %{_description} The Widgets library is a collection of Qt widgets for usage in biomedical imaging applications. %package dicom Summary: High-level DICOM query/retrieve library Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-widgets%{?_isa} = %{version}-%{release} %description dicom %{_description} DICOM library provides high-level classes supporting query and retrieve operations from PACS and local databases. %package vtk Summary: CTK VTK visualization components Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-widgets%{?_isa} = %{version}-%{release} %description vtk %{_description} VTK visualization widgets and core components for CTK. %package itk Summary: CTK ITK image processing components Requires: %{name}%{?_isa} = %{version}-%{release} %description itk %{_description} ITK image processing core components for CTK. %package python Summary: CTK PythonQt scripting components Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-widgets%{?_isa} = %{version}-%{release} %description python %{_description} PythonQt scripting integration for CTK (Core and Widgets). %package devel Summary: Development files for CTK Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-widgets%{?_isa} = %{version}-%{release} Requires: %{name}-dicom%{?_isa} = %{version}-%{release} Requires: %{name}-vtk%{?_isa} = %{version}-%{release} Requires: %{name}-itk%{?_isa} = %{version}-%{release} Requires: %{name}-python%{?_isa} = %{version}-%{release} Requires: dcmtk-devel%{?_isa} Requires: qt5-qtbase-devel%{?_isa} Requires: vtk-devel Requires: InsightToolkit5-devel Requires: PythonQt-devel %description devel %{_description} This package contains development files for building applications with CTK. %prep %autosetup -n CTK-%{commit} # Change EOL encoding tr -d '\r' < README.md > README mv -vf README README.md # Fix cmake_minimum_required for CMake 4 compatibility for f in \ Utilities/DGraph/CMakeLists.txt \ CMake/ctkCheckoutRepo.cmake.in \ CMake/ctkDashboardScript.TEMPLATE.cmake \ CMake/ctkMacroSetupQt.cmake \ CMakeLists.txt \ Libs/Core/CMake/TestBFD/CMakeLists.txt do if [ -f "${f}" ]; then sed -i 's/cmake_minimum_required(VERSION.*)/cmake_minimum_required(VERSION 3.16)/' "${f}" fi done %build # GCC 15 / Fedora 43+ fixes export CXXFLAGS="$(echo "%{optflags}" | sed 's/-flto=auto//') -std=c++17 -include cstdint" export CFLAGS="$(echo "%{optflags}" | sed 's/-flto=auto//') -std=gnu17" %cmake \ -GNinja \ -DCTK_SUPERBUILD=OFF \ -DCTK_QT_VERSION=5 \ -DBUILD_TESTING:BOOL=OFF \ -DCMAKE_CXX_STANDARD=17 \ -DCMAKE_CXX_STANDARD_REQUIRED=ON \ -DCMAKE_SKIP_INSTALL_RPATH=ON \ -DCTK_INSTALL_LIB_DIR=%{_libdir} \ -DCTK_INSTALL_CMAKE_DIR=%{_libdir}/cmake/ctk \ -DCTK_INSTALL_PLUGIN_DIR=%{_libdir}/ctk/plugins \ -DCTK_INSTALL_QTPLUGIN_DIR=%{_qt5_plugindir} \ -DDOCUMENTATION_TARGET_IN_ALL=OFF \ -DCTK_ENABLE_DICOM=ON \ -DCTK_ENABLE_Widgets=ON \ -DCTK_ENABLE_PluginFramework=OFF \ -DCTK_LIB_Visualization/VTK/Widgets=ON \ -DCTK_LIB_ImageProcessing/ITK/Core=ON \ -DCTK_LIB_Scripting/Python/Core=ON \ -DCTK_LIB_Scripting/Python/Widgets=ON \ -DCTK_USE_SYSTEM_VTK=ON \ -DCTK_USE_SYSTEM_ITK=ON \ -DCTK_USE_SYSTEM_DCMTK=ON \ -DCTK_USE_SYSTEM_PythonQt=ON \ -DCTK_BUILD_QTDESIGNER_PLUGINS=ON \ -DITK_DIR=%{_prefix}/lib/cmake/ITK-5.4 %cmake_build %install %cmake_install %files %doc README.md %license NOTICE LICENSE %{_libdir}/libCTKCore.so.%{soname_version}{,.*} %files widgets %{_libdir}/libCTKWidgets.so.%{soname_version}{,.*} %files dicom %{_libdir}/libCTKDICOMCore.so.%{soname_version}{,.*} %{_libdir}/libCTKDICOMWidgets.so.%{soname_version}{,.*} %files vtk # TODO: verify exact library names after first successful build # Expected: libCTKVisualizationVTKCore.so and libCTKVisualizationVTKWidgets.so %{_libdir}/libCTKVisualizationVTK*.so.%{soname_version}{,.*} %files itk # TODO: verify exact library name after first successful build # Expected: libCTKImageProcessingITKCore.so %{_libdir}/libCTKImageProcessingITK*.so.%{soname_version}{,.*} %files python # TODO: verify exact library names after first successful build # Expected: libCTKScriptingPythonCore.so and libCTKScriptingPythonWidgets.so %{_libdir}/libCTKScriptingPython*.so.%{soname_version}{,.*} %files devel %{_includedir}/ctk-%{soname_version}/ %{_libdir}/libCTKCore.so %{_libdir}/libCTKWidgets.so %{_libdir}/libCTKDICOMCore.so %{_libdir}/libCTKDICOMWidgets.so %{_libdir}/libCTKVisualizationVTK*.so %{_libdir}/libCTKImageProcessingITK*.so %{_libdir}/libCTKScriptingPython*.so %{_qt5_plugindir}/designer/libCTK*.so %{_libdir}/cmake/ctk/ %changelog * Thu Mar 05 2026 Morgan Hough - 2026.01.26-0.1.20260126gitfd37b874 - Full CTK build for 3D Slicer (git snapshot from master) - Enable VTK visualization, ITK image processing, PythonQt scripting - Enable DICOM support, disable PluginFramework (not needed by Slicer) - Based on Slicer's pinned CTK commit fd37b874 - Uses Qt5, system VTK 9.5, ITK 5.4, PythonQt 3.6.1