ismrmrd / ismrmrd

ISMRM Raw Data Format
Other
104 stars 81 forks source link

ISMRMD 1.13.7 wont build #239

Closed mavel101 closed 1 year ago

mavel101 commented 1 year ago

Describe the bug

ISMRMD 1.13.7 wont build on Ubuntu 20.04. Cmake gives the error message:

Target "ismrmrd" links to target "pugixml::pugixml" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing?

To Reproduce

Dockerfile to reproduce the issue:

FROM ubuntu:20.04

ENV TZ=Europe/Berlin
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update --quiet \
    && apt-get install --no-install-recommends --no-install-suggests --yes \
       cmake doxygen build-essential git ca-certificates git-core graphviz libboost-all-dev libfftw3-dev libhdf5-serial-dev libxml2-utils libpugixml-dev

# ISMRMRD library
RUN git clone https://github.com/ismrmrd/ismrmrd.git \
    && cd ismrmrd \
    && mkdir build \
    && cd build \
    && cmake ../ \
    && make -j $(nproc) \
    && make install

System Information: Linux, Ubuntu 20.04

ISMRMRD 1.13.6 is building succesfully with the same Dockerfile.

mavel101 commented 1 year ago

The problem is probably due to an old pugixml library version in the Ubuntu 20.04 apt repositories. On Ubuntu 22.04 it builds with no errors.

alexjaffray commented 1 year ago

@mavel101 not sure this should be closed yet. Ubuntu 20.04 is definitely not EOL at the moment, is the older pugixml version incompatible with the most recent changes to ismrmrd?

mavel101 commented 1 year ago

Yes, it breaks with commit 595bd68. Ive reopened the issue, maybe someone wants to have a look on this.

hansenms commented 1 year ago

This is probably a won’t fix unless you want to have a look at it yourself. Don’t see us going back to keeping pugixml source files in the repo. We could sub module the project instead, but so could anybody who wants to build like that, so I’m not sure it’s worth it.

curtcorum commented 6 months ago

The distribution version of pugixml is 1.10:

libpugixml-dev/focal 1.10-1 amd64
libpugixml1v5/focal 1.10-1 amd64

And looks like that corresponds to a while back for ISMRMRD dependencies.

I can confirm that ISMRMRD v1.13.7 does build on Ubuntu 20.04.1 using a manual build and install of pugixml 1.14:

https://github.com/zeux/pugixml/tree/v1.14

Linux green 5.15.0-97-generic #107~20.04.1-Ubuntu SMP Fri Feb 9 14:20:11 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

(base) curt@green:~/src/pugixml/build$ cmake ../
-- The CXX compiler identification is GNU 9.4.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (6.3s)
-- Generating done (0.0s)
-- Build files have been written to: /home/curt/src/pugixml/build

(base) curt@green:~/src/pugixml/build$ make all
[ 50%] Building CXX object CMakeFiles/pugixml-static.dir/src/pugixml.cpp.o
[100%] Linking CXX static library libpugixml.a
[100%] Built target pugixml-static

(base) curt@green:~/src/pugixml/build$ sudo make install/local
[sudo] password for curt: 
[100%] Built target pugixml-static
Installing only the local directory...
-- Install configuration: ""
-- Installing: /usr/local/lib/libpugixml.a
-- Installing: /usr/local/lib/cmake/pugixml/pugixml-targets.cmake
-- Installing: /usr/local/lib/cmake/pugixml/pugixml-targets-noconfig.cmake
-- Installing: /usr/local/lib/cmake/pugixml/pugixml-config-version.cmake
-- Installing: /usr/local/lib/cmake/pugixml/pugixml-config.cmake
-- Installing: /usr/local/lib/pkgconfig/pugixml.pc
-- Installing: /usr/local/include/pugiconfig.hpp
-- Installing: /usr/local/include/pugixml.hpp
(base) curt@green:~/src/ismrmrd/ismrmrd$ cmake ../
CMake Deprecation Warning at CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 3.5 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.

-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found HDF5: /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so;/usr/lib/x86_64-linux-gnu/libpthread.so;/usr/lib/x86_64-linux-gnu/libsz.so;/usr/lib/x86_64-linux-gnu/libz.so;/usr/lib/x86_64-linux-gnu/libdl.so;/usr/lib/x86_64-linux-gnu/libm.so (found version "1.10.4") found components: C 
-- HDF5 include found at: /usr/include/hdf5/serial
-- HDF5 libs found at: /usr/lib/x86_64-linux-gnu/hdf5/serial/libhdf5.so;/usr/lib/x86_64-linux-gnu/libpthread.so;/usr/lib/x86_64-linux-gnu/libsz.so;/usr/lib/x86_64-linux-gnu/libz.so;/usr/lib/x86_64-linux-gnu/libdl.so;/usr/lib/x86_64-linux-gnu/libm.so
-- Found Git: /usr/bin/git (found version "2.43.2") 
-- Found Doxygen: /usr/bin/doxygen (found version "1.8.17") found components: doxygen dot 
Building info application
-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found suitable version "1.71.0", minimum required is "1.43") found components: program_options random 
-- FFTW3 UNIX libraries: /usr/lib/x86_64-linux-gnu/libfftw3f.so
-- Found FFTW3: /usr/lib/x86_64-linux-gnu/libfftw3f.so  
FFTW3 and Boost Found... building utilities
CMake Deprecation Warning at examples/c/CMakeLists.txt:1 (cmake_minimum_required):
  Compatibility with CMake < 3.5 will be removed from a future version of
  CMake.

  Update the VERSION argument <min> value or use a ...<max> suffix to tell
  CMake that the project does not need compatibility with older versions.

-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found suitable version "1.71.0", minimum required is "1.43") found components: unit_test_framework filesystem 
CPACK_PACKAGING_INSTALL_PREFIX: /usr/local
-- Found CPack generators: DEB
-- Configuring done (0.7s)
-- Generating done (0.0s)
-- Build files have been written to: /home/curt/src/ismrmrd/ismrmrd

(base) curt@green:~/src/ismrmrd/ismrmrd$ make all
[  2%] Building C object CMakeFiles/ismrmrd.dir/libsrc/ismrmrd.c.o
[  4%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/ismrmrd.cpp.o
[  7%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/xml.cpp.o
[  9%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/meta.cpp.o
[ 11%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/serialization.cpp.o
[ 14%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/waveform.cpp.o
[ 16%] Building C object CMakeFiles/ismrmrd.dir/libsrc/waveform.c.o
[ 19%] Building C object CMakeFiles/ismrmrd.dir/libsrc/dataset.c.o
[ 21%] Building CXX object CMakeFiles/ismrmrd.dir/libsrc/dataset.cpp.o
[ 23%] Linking CXX shared library libismrmrd.so
[ 23%] Built target ismrmrd
[ 26%] Building CXX object utilities/CMakeFiles/ismrmrd_info.dir/ismrmrd_info.cpp.o
[ 28%] Linking CXX executable ismrmrd_info
[ 28%] Built target ismrmrd_info
[ 30%] Building CXX object utilities/CMakeFiles/ismrmrd_test_xml.dir/ismrmrd_test_xml.cpp.o
[ 33%] Linking CXX executable ismrmrd_test_xml
[ 33%] Built target ismrmrd_test_xml
[ 35%] Building CXX object utilities/CMakeFiles/ismrmrd_read_timing_test.dir/read_timing_test.cpp.o
[ 38%] Linking CXX executable ismrmrd_read_timing_test
[ 38%] Built target ismrmrd_read_timing_test
[ 40%] Building CXX object utilities/CMakeFiles/ismrmrd_generate_cartesian_shepp_logan.dir/generate_cartesian_shepp_logan.cpp.o
[ 42%] Building CXX object utilities/CMakeFiles/ismrmrd_generate_cartesian_shepp_logan.dir/ismrmrd_phantom.cpp.o
[ 45%] Linking CXX executable ismrmrd_generate_cartesian_shepp_logan
[ 45%] Built target ismrmrd_generate_cartesian_shepp_logan
[ 47%] Building CXX object utilities/CMakeFiles/ismrmrd_recon_cartesian_2d.dir/recon_cartesian_2d.cpp.o
[ 50%] Linking CXX executable ismrmrd_recon_cartesian_2d
[ 50%] Built target ismrmrd_recon_cartesian_2d
[ 52%] Building CXX object utilities/CMakeFiles/ismrmrd_hdf5_to_stream.dir/ismrmrd_hdf5_to_stream.cpp.o
[ 54%] Linking CXX executable ismrmrd_hdf5_to_stream
[ 54%] Built target ismrmrd_hdf5_to_stream
[ 57%] Building CXX object utilities/CMakeFiles/ismrmrd_stream_to_hdf5.dir/ismrmrd_stream_to_hdf5.cpp.o
[ 59%] Linking CXX executable ismrmrd_stream_to_hdf5
[ 59%] Built target ismrmrd_stream_to_hdf5
[ 61%] Building CXX object utilities/CMakeFiles/ismrmrd_stream_recon_cartesian_2d.dir/stream_recon_cartesian_2d.cpp.o
[ 64%] Linking CXX executable ismrmrd_stream_recon_cartesian_2d
[ 64%] Built target ismrmrd_stream_recon_cartesian_2d
[ 66%] Building C object examples/c/CMakeFiles/ismrmrd_c_example.dir/main.c.o
[ 69%] Linking CXX executable ismrmrd_c_example
[ 69%] Built target ismrmrd_c_example
[ 71%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_main.cpp.o
[ 73%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_acquisitions.cpp.o
[ 76%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_images.cpp.o
[ 78%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_ndarray.cpp.o
[ 80%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_flags.cpp.o
[ 83%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_channels.cpp.o
[ 85%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_xml_header.cpp.o
[ 88%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_quaternions.cpp.o
[ 90%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_serialization.cpp.o
[ 92%] Building CXX object tests/CMakeFiles/test_ismrmrd.dir/test_dataset.cpp.o
[ 95%] Linking CXX executable test_ismrmrd
[ 95%] Built target test_ismrmrd
[ 97%] Building CXX object tests/CMakeFiles/benchmark_dataset.dir/benchmark_dataset.cpp.o
[100%] Linking CXX executable benchmark_dataset
[100%] Built target benchmark_dataset

(base) curt@green:~/src/ismrmrd/ismrmrd$ sudo make install/local
[sudo] password for curt: 
[ 23%] Built target ismrmrd
[ 28%] Built target ismrmrd_info
[ 33%] Built target ismrmrd_test_xml
[ 38%] Built target ismrmrd_read_timing_test
[ 45%] Built target ismrmrd_generate_cartesian_shepp_logan
[ 50%] Built target ismrmrd_recon_cartesian_2d
[ 54%] Built target ismrmrd_hdf5_to_stream
[ 59%] Built target ismrmrd_stream_to_hdf5
[ 64%] Built target ismrmrd_stream_recon_cartesian_2d
[ 69%] Built target ismrmrd_c_example
[ 95%] Built target test_ismrmrd
[100%] Built target benchmark_dataset
Installing only the local directory...
-- Install configuration: "Release"
-- Installing: /usr/local/include/ismrmrd/version.h
-- Installing: /usr/local/lib/libismrmrd.so.1.14.0
-- Installing: /usr/local/lib/libismrmrd.so.1.14
-- Set non-toolchain portion of runtime path of "/usr/local/lib/libismrmrd.so.1.14.0" to ""
-- Installing: /usr/local/lib/libismrmrd.so
-- Up-to-date: /usr/local/include/ismrmrd
-- Installing: /usr/local/include/ismrmrd/xml.h
-- Installing: /usr/local/include/ismrmrd/ismrmrd.h
-- Installing: /usr/local/include/ismrmrd/meta.h
-- Installing: /usr/local/include/ismrmrd/cpp98.h
-- Installing: /usr/local/include/ismrmrd/serialization.h
-- Installing: /usr/local/include/ismrmrd/export.h
-- Installing: /usr/local/include/ismrmrd/dataset.h
-- Installing: /usr/local/include/ismrmrd/serialization_iostream.h
-- Installing: /usr/local/include/ismrmrd/waveform.h
-- Installing: /usr/local/share/ismrmrd/schema/ismrmrd.xsd
-- Installing: /usr/local/share/ismrmrd/matlab
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/Waveform.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/Acquisition.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/Dataset.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+util
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+util/ImageHeaderToBytes.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+util/AcquisitionHeaderToBytes.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+util/AcquisitionHeaderFromBytes.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+util/hdf5_datatypes.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+util/isInt.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+util/ImageHeaderFromBytes.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/Image.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/WaveformHeader.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/ImageHeader.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+xml
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+xml/deserialize.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+xml/serialize.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/+xml/validate.m
-- Installing: /usr/local/share/ismrmrd/matlab/+ismrmrd/AcquisitionHeader.m
-- Installing: /usr/local/share/ismrmrd/matlab/test
-- Installing: /usr/local/share/ismrmrd/matlab/test/xmlTest.m
-- Installing: /usr/local/share/ismrmrd/matlab/test/xml
-- Installing: /usr/local/share/ismrmrd/matlab/test/xml/minimal_with_user_parameters.xml
-- Installing: /usr/local/share/ismrmrd/matlab/test/xml/ismrmrd_example_extended.xml
-- Installing: /usr/local/share/ismrmrd/matlab/test/xml/minimal.xml
-- Installing: /usr/local/share/ismrmrd/matlab/test/xml/ismrmrd_example.xml
-- Installing: /usr/local/lib/cmake/ISMRMRD/ISMRMRDTargets.cmake
-- Installing: /usr/local/lib/cmake/ISMRMRD/ISMRMRDTargets-release.cmake
-- Installing: /usr/local/lib/cmake/ISMRMRD/ISMRMRDConfigVersion.cmake
-- Installing: /usr/local/lib/cmake/ISMRMRD/ISMRMRDConfig.cmake