From 6f944669d1f1149c818bd1def222b64c3df67a69 Mon Sep 17 00:00:00 2001 From: Alan Morris Date: Tue, 2 Sep 2025 19:51:59 -0600 Subject: [PATCH 1/5] Trying ITK 5.4.4 --- .github/workflows/build-linux-debug.yml | 2 +- .github/workflows/build-linux.yml | 2 +- .github/workflows/build-windows.yml | 2 +- build_dependencies.sh | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-linux-debug.yml b/.github/workflows/build-linux-debug.yml index 99e1fa4d93..11caf354c3 100644 --- a/.github/workflows/build-linux-debug.yml +++ b/.github/workflows/build-linux-debug.yml @@ -73,7 +73,7 @@ jobs: - name: cmake shell: bash -l {0} - run: conda activate shapeworks && mkdir build && cd build && cmake -DCMAKE_CXX_FLAGS=-g -DITK_DIR=$HOME/install/lib/cmake/ITK-5.3 -DVTK_DIR=$HOME/install/lib/cmake/vtk-9.5 -DXLNT_DIR=$HOME/install -DLIBIGL_DIR=$HOME/install -DOpenVDB_DIR=$HOME/install/lib/cmake/OpenVDB -DGEOMETRYCENTRAL_DIR=$HOME/install -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBuild_Studio=ON -DJKQTCommonSharedLib_DIR=$HOME/install/lib/cmake/JKQTCommonSharedLib -DJKQTMathTextSharedLib_DIR=$HOME/install/lib/cmake/JKQTMathTextSharedLib -DJKQTPlotterSharedLib_DIR=$HOME/install/lib/cmake/JKQTPlotterSharedLib -DACVD_DIR=$HOME/install -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} -DCMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/shapeworks-install -DUSE_ORIGIN_RPATH=ON .. + run: conda activate shapeworks && mkdir build && cd build && cmake -DCMAKE_CXX_FLAGS=-g -DITK_DIR=$HOME/install/lib/cmake/ITK-5.4 -DVTK_DIR=$HOME/install/lib/cmake/vtk-9.5 -DXLNT_DIR=$HOME/install -DLIBIGL_DIR=$HOME/install -DOpenVDB_DIR=$HOME/install/lib/cmake/OpenVDB -DGEOMETRYCENTRAL_DIR=$HOME/install -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBuild_Studio=ON -DJKQTCommonSharedLib_DIR=$HOME/install/lib/cmake/JKQTCommonSharedLib -DJKQTMathTextSharedLib_DIR=$HOME/install/lib/cmake/JKQTMathTextSharedLib -DJKQTPlotterSharedLib_DIR=$HOME/install/lib/cmake/JKQTPlotterSharedLib -DACVD_DIR=$HOME/install -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} -DCMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/shapeworks-install -DUSE_ORIGIN_RPATH=ON .. - name: Check space6 run: df -h diff --git a/.github/workflows/build-linux.yml b/.github/workflows/build-linux.yml index 060aa835cc..cbfbec7870 100644 --- a/.github/workflows/build-linux.yml +++ b/.github/workflows/build-linux.yml @@ -72,7 +72,7 @@ jobs: - name: cmake shell: bash -l {0} - run: conda activate shapeworks && mkdir build && cd build && cmake -DCMAKE_CXX_FLAGS=-g -DITK_DIR=$HOME/install/lib/cmake/ITK-5.3 -DVTK_DIR=$HOME/install/lib/cmake/vtk-9.5 -DXLNT_DIR=$HOME/install -DLIBIGL_DIR=$HOME/install -DOpenVDB_DIR=$HOME/install/lib/cmake/OpenVDB -DGEOMETRYCENTRAL_DIR=$HOME/install -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBuild_Studio=ON -DJKQTCommonSharedLib_DIR=$HOME/install/lib/cmake/JKQTCommonSharedLib -DJKQTMathTextSharedLib_DIR=$HOME/install/lib/cmake/JKQTMathTextSharedLib -DJKQTPlotterSharedLib_DIR=$HOME/install/lib/cmake/JKQTPlotterSharedLib -DACVD_DIR=$HOME/install -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} -DCMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/shapeworks-install -DUSE_ORIGIN_RPATH=ON -DGA_MEASUREMENT_ID=$GA_MEASUREMENT_ID -DGA_API_SECRET=$GA_API_SECRET .. + run: conda activate shapeworks && mkdir build && cd build && cmake -DCMAKE_CXX_FLAGS=-g -DITK_DIR=$HOME/install/lib/cmake/ITK-5.4 -DVTK_DIR=$HOME/install/lib/cmake/vtk-9.5 -DXLNT_DIR=$HOME/install -DLIBIGL_DIR=$HOME/install -DOpenVDB_DIR=$HOME/install/lib/cmake/OpenVDB -DGEOMETRYCENTRAL_DIR=$HOME/install -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DBuild_Studio=ON -DJKQTCommonSharedLib_DIR=$HOME/install/lib/cmake/JKQTCommonSharedLib -DJKQTMathTextSharedLib_DIR=$HOME/install/lib/cmake/JKQTMathTextSharedLib -DJKQTPlotterSharedLib_DIR=$HOME/install/lib/cmake/JKQTPlotterSharedLib -DACVD_DIR=$HOME/install -DCMAKE_PREFIX_PATH=${CONDA_PREFIX} -DCMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/shapeworks-install -DUSE_ORIGIN_RPATH=ON -DGA_MEASUREMENT_ID=$GA_MEASUREMENT_ID -DGA_API_SECRET=$GA_API_SECRET .. - name: Check space5 run: df -h diff --git a/.github/workflows/build-windows.yml b/.github/workflows/build-windows.yml index 513dfaba28..9dcdc689b4 100644 --- a/.github/workflows/build-windows.yml +++ b/.github/workflows/build-windows.yml @@ -109,7 +109,7 @@ jobs: # Note the current convention is to use the -S and -B options here to specify source # and build directories, but this is only available with CMake 3.13 and higher. # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 - run: conda activate shapeworks && cmake $GITHUB_WORKSPACE -DCMAKE_CXX_FLAGS="-FS" -DCMAKE_C_FLAGS="-FS" -DCMAKE_CXX_FLAGS_RELEASE="-FS /Zm500 /Zi /GL /MD /O2 /Ob3 /DNDEBUG /EHsc" -DCMAKE_C_FLAGS_RELEASE="-FS /Zi /GL /MD /O2 /Ob3 /DNDEBUG /EHsc" -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-LTCG /DEBUG" -DCMAKE_EXE_LINKER_FLAGS_RELEASE="-LTCG /DEBUG" -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DITK_DIR="C:\deps\lib\cmake\ITK-5.3" -DVTK_DIR="C:\deps\lib\cmake\vtk-9.5" -DXLNT_DIR="C:\deps" -DLIBIGL_DIR="C:\deps" -DJKQTCommonSharedLib_DIR="C:/deps/lib/cmake/JKQTCommonSharedLib" -DJKQTMathTextSharedLib_DIR="C:/deps/lib/cmake/JKQTMathTextSharedLib" -DJKQTPlotterSharedLib_DIR="C:/deps/lib/cmake/JKQTPlotterSharedLib" -DOpenVDB_DIR="C:\deps\lib\cmake\OpenVDB" -DGEOMETRYCENTRAL_DIR="C:\deps" -DACVD_DIR="C:\deps" -DBuild_Studio=ON -DGA_MEASUREMENT_ID=$GA_MEASUREMENT_ID -DGA_API_SECRET=$GA_API_SECRET + run: conda activate shapeworks && cmake $GITHUB_WORKSPACE -DCMAKE_CXX_FLAGS="-FS" -DCMAKE_C_FLAGS="-FS" -DCMAKE_CXX_FLAGS_RELEASE="-FS /Zm500 /Zi /GL /MD /O2 /Ob3 /DNDEBUG /EHsc" -DCMAKE_C_FLAGS_RELEASE="-FS /Zi /GL /MD /O2 /Ob3 /DNDEBUG /EHsc" -DCMAKE_SHARED_LINKER_FLAGS_RELEASE="-LTCG /DEBUG" -DCMAKE_EXE_LINKER_FLAGS_RELEASE="-LTCG /DEBUG" -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DITK_DIR="C:\deps\lib\cmake\ITK-5.4" -DVTK_DIR="C:\deps\lib\cmake\vtk-9.5" -DXLNT_DIR="C:\deps" -DLIBIGL_DIR="C:\deps" -DJKQTCommonSharedLib_DIR="C:/deps/lib/cmake/JKQTCommonSharedLib" -DJKQTMathTextSharedLib_DIR="C:/deps/lib/cmake/JKQTMathTextSharedLib" -DJKQTPlotterSharedLib_DIR="C:/deps/lib/cmake/JKQTPlotterSharedLib" -DOpenVDB_DIR="C:\deps\lib\cmake\OpenVDB" -DGEOMETRYCENTRAL_DIR="C:\deps" -DACVD_DIR="C:\deps" -DBuild_Studio=ON -DGA_MEASUREMENT_ID=$GA_MEASUREMENT_ID -DGA_API_SECRET=$GA_API_SECRET - name: Build working-directory: "C:/build" diff --git a/build_dependencies.sh b/build_dependencies.sh index 0a61a007ce..0b8bf09ded 100755 --- a/build_dependencies.sh +++ b/build_dependencies.sh @@ -22,8 +22,8 @@ BUILD_TYPE="Release" BUILD_LOG="build_dependencies.log" VTK_VER="v9.5.0" VTK_VER_STR="9.5" -ITK_VER="v5.3.0" -ITK_VER_STR="5.3" +ITK_VER="v5.4.4" +ITK_VER_STR="5.4" QT_MIN_VER="5.15.4" XLNT_VER="538f80794c7d736afc0a452d21313606cc5538fc" JKQTPLOTTER_VER="v2022.11.30-refix-rpath" From f0f30fac64fb433a47589f957c15c17e3ad51738 Mon Sep 17 00:00:00 2001 From: Alan Morris Date: Tue, 2 Sep 2025 20:20:42 -0600 Subject: [PATCH 2/5] Patch xlnt for error: --- Support/xlnt.patch | 12 ++++++++++++ build_dependencies.sh | 3 +++ 2 files changed, 15 insertions(+) create mode 100644 Support/xlnt.patch diff --git a/Support/xlnt.patch b/Support/xlnt.patch new file mode 100644 index 0000000000..1af7488a53 --- /dev/null +++ b/Support/xlnt.patch @@ -0,0 +1,12 @@ +diff --git a/include/xlnt/cell/phonetic_run.hpp b/include/xlnt/cell/phonetic_run.hpp +index cbf62ea7..9f20384e 100644 +--- a/include/xlnt/cell/phonetic_run.hpp ++++ b/include/xlnt/cell/phonetic_run.hpp +@@ -24,6 +24,7 @@ + #pragma once + + #include ++#include + + #include + diff --git a/build_dependencies.sh b/build_dependencies.sh index 0b8bf09ded..af5400734d 100755 --- a/build_dependencies.sh +++ b/build_dependencies.sh @@ -201,6 +201,9 @@ build_xlnt() # move conflicting file out of the way so it builds on osx mv third-party/libstudxml/version third-party/libstudxml/version.bak + # patch for GCC 13 + patch -p1 < ${SCRIPT_DIR}/Support/xlnt.patch + # fix rpath sed -i'.original' -e 's/INSTALL_NAME_DIR.*/)/' source/CMakeLists.txt From b4804cfa6654bf18145cc8ea06fbf9dd594ba491 Mon Sep 17 00:00:00 2001 From: Alan Morris Date: Tue, 2 Sep 2025 21:42:42 -0600 Subject: [PATCH 3/5] Additional fixes --- Libs/Optimize/Container/GenericContainer.h | 2 +- Libs/Optimize/Container/GenericContainerArray.h | 2 +- Libs/Optimize/GradientDescentOptimizer.h | 2 +- build_dependencies.sh | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Libs/Optimize/Container/GenericContainer.h b/Libs/Optimize/Container/GenericContainer.h index cc86a98434..1e87478a32 100644 --- a/Libs/Optimize/Container/GenericContainer.h +++ b/Libs/Optimize/Container/GenericContainer.h @@ -28,7 +28,7 @@ class GenericContainer : public itk::DataObject { itkNewMacro(Self); /** Run-time type information (and related methods). */ - itkTypeMacro(ParticleContainer, itk::DataObject); + itkTypeMacro(GenericContainer, itk::DataObject); /** Returns a reference to the object associated with index k. If the index k does not already exist, this method inserts a new entry for k. */ diff --git a/Libs/Optimize/Container/GenericContainerArray.h b/Libs/Optimize/Container/GenericContainerArray.h index 03cabe1dbd..6298333605 100644 --- a/Libs/Optimize/Container/GenericContainerArray.h +++ b/Libs/Optimize/Container/GenericContainerArray.h @@ -30,7 +30,7 @@ class GenericContainerArray : public std::vector::P itkNewMacro(Self); /** Run-time type information (and related methods). */ - itkTypeMacro(ParticleContainer, Observer); + itkTypeMacro(GenericContainerArray, Observer); /** Callbacks that may be defined by a subclass. If a subclass defines one of these callback methods, the corresponding flag in m_DefinedCallbacks diff --git a/Libs/Optimize/GradientDescentOptimizer.h b/Libs/Optimize/GradientDescentOptimizer.h index 57290502a6..488f405359 100644 --- a/Libs/Optimize/GradientDescentOptimizer.h +++ b/Libs/Optimize/GradientDescentOptimizer.h @@ -43,7 +43,7 @@ class GradientDescentOptimizer : public itk::Object { typedef shapeworks::ImageDomainWithGradients DomainType; /** Run-time type information (and related methods). */ - itkTypeMacro(ParticleGradientDescentPositionOptimizer, Object); + itkTypeMacro(GradientDescentOptimizer, Object); /** Dimensionality of the domain of the particle system. */ itkStaticConstMacro(Dimension, unsigned int, VDimension); diff --git a/build_dependencies.sh b/build_dependencies.sh index af5400734d..cad68bb11c 100755 --- a/build_dependencies.sh +++ b/build_dependencies.sh @@ -201,9 +201,9 @@ build_xlnt() # move conflicting file out of the way so it builds on osx mv third-party/libstudxml/version third-party/libstudxml/version.bak - # patch for GCC 13 - patch -p1 < ${SCRIPT_DIR}/Support/xlnt.patch - + # Fix for GCC 13 + echo '#include ' >> include/xlnt/xlnt_config.hpp + # fix rpath sed -i'.original' -e 's/INSTALL_NAME_DIR.*/)/' source/CMakeLists.txt From 63e67ebb640a44626098ceb021236ca67e2dd651 Mon Sep 17 00:00:00 2001 From: Alan Morris Date: Tue, 2 Sep 2025 23:45:39 -0600 Subject: [PATCH 4/5] Fix ITK macro --- Libs/Optimize/Container/MeanCurvatureContainer.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Libs/Optimize/Container/MeanCurvatureContainer.h b/Libs/Optimize/Container/MeanCurvatureContainer.h index 7ea3b6b65b..1ebded1aa2 100644 --- a/Libs/Optimize/Container/MeanCurvatureContainer.h +++ b/Libs/Optimize/Container/MeanCurvatureContainer.h @@ -31,7 +31,7 @@ class MeanCurvatureContainer : public GenericContainerArray { itkNewMacro(Self); /** Run-time type information (and related methods). */ - itkTypeMacro(ParticleMeanCurvatureAttribute, GenericContainerArray); + itkTypeMacro(MeanCurvatureContainer, GenericContainerArray); void SetVerbosity(unsigned int val) { m_verbosity = val; } From 92858066e1048ed1a1148775261e04fb397ad956 Mon Sep 17 00:00:00 2001 From: Alan Morris Date: Tue, 2 Sep 2025 23:45:44 -0600 Subject: [PATCH 5/5] Set gtest to static to fix: [ 95%] Linking CXX executable ../../bin/ImageTests /usr/bin/ld: ../../lib/libgtest_main.so.1.11.0: undefined reference to `std::ios_base_library_init()@GLIBCXX_3.4.32' collect2: error: ld returned 1 exit status make[2]: [Testing/ImageTests/CMakeFiles/ImageTests.dir/build.make:500: bin/ImageTests] Error 1 make[1]: [CMakeFiles/Makefile2:1273: Testing/ImageTests/CMakeFiles/ImageTests.dir/all] Error 2 The problem is that there is libstdc++ from conda and from the system and they don't have the same versioned symbols. --- Testing/CMakeLists.txt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Testing/CMakeLists.txt b/Testing/CMakeLists.txt index 94422c2a5d..8a95dd2f93 100644 --- a/Testing/CMakeLists.txt +++ b/Testing/CMakeLists.txt @@ -1,6 +1,9 @@ # GTest setup #find_package(GTest REQUIRED) +set(BUILD_SHARED_LIBS_SAVED ${BUILD_SHARED_LIBS}) +set(BUILD_SHARED_LIBS OFF) + # fetch googletest include(FetchContent) FetchContent_Declare( @@ -14,6 +17,10 @@ if(NOT googletest_POPULATED) add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) endif() +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + +# Restore BUILD_SHARED_LIBS +set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_SAVED}) # NOTE: must call enable_testing() before this in the top-level CMakeLists.txt