Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
308 changes: 180 additions & 128 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -295,9 +295,6 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")

set(CBF_F90FLAGS_ENV $ENV{F90FLAGS})
set(CBF_M4FLAGS_ENV $ENV{M4FLAGS})

option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

option(CBF_ENABLE_FORTRAN "Enable Fortran 90" ON)
Expand All @@ -320,24 +317,6 @@ set (CBF_CMAKE_DEBUG "ON")
# User setable parameters
#

if (CBF_M4FLAGS_ENV)
set(CBF_M4FLAGS ${CBF_M4FLAGS_ENV})
else (CBF_M4FLAGS_ENV)
set(CBF_M4FLAGS "-Dfcb_bytes_in_rec=4096")
endif (CBF_M4FLAGS_ENV)

if(CBF_ENABLE_FORTRAN)

if (CBF_F90FLAGS_ENV)
set(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} ${CBF_F90FLAGS_ENV}")
set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} ${CBF_F90FLAGS_ENV}")
else (CBF_F90FLAGS_ENV)
set(CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fno-range-check")
set(CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fno-range-check")
endif (CBF_F90FLAGS_ENV)

endif()

# make sure that the default is a RELEASE
if (NOT CMAKE_BUILD_TYPE)
set (CMAKE_BUILD_TYPE RELEASE CACHE STRING
Expand Down Expand Up @@ -384,7 +363,6 @@ endmacro(CBF_REQUIRE_DIRECTORY)
#
set(CBF__SRC "${CBFlib_SOURCE_DIR}/src" )
set(CBF__INCLUDE "${CBFlib_SOURCE_DIR}/include" )
set(CBF__M4 "${CBFlib_SOURCE_DIR}/m4" )
set(CBF__DOC "${CBFlib_SOURCE_DIR}/doc" )
set(CBF__EXAMPLES "${CBFlib_SOURCE_DIR}/examples" )
set(CBF__EXTERNAL_PACKAGES
Expand All @@ -396,17 +374,13 @@ set(CBF__DECTRIS_EXAMPLES
#
# Directories on the build side
#
set(CBF__BLDSRC "${CBFlib_BINARY_DIR}/src" )
set(CBF__BLDEXMP "${CBFlib_BINARY_DIR}/src" )
set(CBF__BIN "${CBFlib_BINARY_DIR}/bin" )
set(CBF__LIB "${CBFlib_BINARY_DIR}/lib" )
set(CBF__BIN_INCLUDE "${CBFlib_BINARY_DIR}/include" )
set(CBF__SHARE "${CBFlib_BINARY_DIR}/share" )
set(CBF__EXT_PKG "${CBFlib_BINARY_DIR}/external_packages" )
set(CBF__DATA "${CBFlib_BINARY_DIR}/data_files" )

CBF_REQUIRE_DIRECTORY(${CBF__BLDSRC})
CBF_REQUIRE_DIRECTORY(${CBF__BLDEXMP})
CBF_REQUIRE_DIRECTORY(${CBF__BIN})
CBF_REQUIRE_DIRECTORY(${CBF__LIB})
CBF_REQUIRE_DIRECTORY(${CBF__BIN_INCLUDE})
Expand Down Expand Up @@ -711,30 +685,6 @@ set(
${CBF__SRC}/img.c
)

if(CBF_ENABLE_FORTRAN)

set(
CBF_F90_BUILT_SOURCES
${CBF__BLDSRC}/fcb_exit_binary.f90
${CBF__BLDSRC}/fcb_next_binary.f90
${CBF__BLDSRC}/fcb_open_cifin.f90
${CBF__BLDSRC}/fcb_packed.f90
${CBF__BLDSRC}/fcb_read_bits.f90
${CBF__BLDSRC}/fcb_read_image.f90
${CBF__BLDSRC}/fcb_read_xds_i2.f90
)

set(
CBF_F90_SOURCES
${CBF__SRC}/fcb_atol_wcnt.f90
${CBF__SRC}/fcb_ci_strncmparr.f90
${CBF__SRC}/fcb_nblen_array.f90
${CBF__SRC}/fcb_read_byte.f90
${CBF__SRC}/fcb_read_line.f90
${CBF__SRC}/fcb_skip_whitespace.f90
)

endif()

# use, i.e. don't skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
Expand Down Expand Up @@ -802,38 +752,6 @@ if(CBF_ENABLE_ULP)
endif()


if(CBF_ENABLE_FORTRAN)

#
# m4 FCB library macro files
#
set(
CBF_M4_FCB_DEFINES
${CBF__M4}/fcblib_defines.m4
)

set(
CBF_M4_FCB_FILES
${CBF__M4}/fcb_exit_binary.m4
${CBF__M4}/fcb_next_binary.m4
${CBF__M4}/fcb_open_cifin.m4
${CBF__M4}/fcb_packed.m4
${CBF__M4}/fcb_read_bits.m4
${CBF__M4}/fcb_read_image.m4
${CBF__M4}/fcb_read_xds_i2.m4
)
#
# m4 F90 examples macro files
#
set(
CBF_M4_F90_EXAMPLES
${CBF__M4}/test_fcb_read_image.m4
${CBF__M4}/test_xds_binary.m4
)

endif()


#
# Documentation files
#
Expand Down Expand Up @@ -901,32 +819,65 @@ set_target_properties(img PROPERTIES OUTPUT_NAME "img")
set_target_properties(img PROPERTIES LINKER_LANGUAGE C)


if(CBF_ENABLE_FORTRAN)

#
# Build the f90 library sources
#
find_program(M4 m4)
foreach(f90src IN LISTS CBF_F90_BUILT_SOURCES)
get_filename_component(filename "${f90src}" NAME_WE )
set(f90bldsrc "${CBF__BLDSRC}/${filename}.f90")
set(f90srcm4 "${CBF__M4}/${filename}.m4")
add_custom_command(
OUTPUT "${f90bldsrc}"
WORKING_DIRECTORY "${CBF__M4}"
COMMAND ${M4} -P "${CBF_M4FLAGS}" "${f90srcm4}" > "${f90bldsrc}"
DEPENDS ${CBF_M4_FCB_DEFINES} ${f90srcm4}
COMMENT "Generating ${f90bldsrc}"
)
endforeach(f90src)
# Build all Fortran sources and libraries. The f90cbf library is not
# installed.
if(CBF_ENABLE_FORTRAN)
find_program(M4 m4 REQUIRED)
set(M4FLAGS "-Dfcb_bytes_in_rec=4096" CACHE STRING
"Flags used by the M4 macro processor during Fortran build")
mark_as_advanced(M4FLAGS)

set(f90_sources_m4
"${CMAKE_CURRENT_SOURCE_DIR}/m4/fcb_exit_binary.m4"
"${CMAKE_CURRENT_SOURCE_DIR}/m4/fcb_next_binary.m4"
"${CMAKE_CURRENT_SOURCE_DIR}/m4/fcb_open_cifin.m4"
"${CMAKE_CURRENT_SOURCE_DIR}/m4/fcb_packed.m4"
"${CMAKE_CURRENT_SOURCE_DIR}/m4/fcb_read_bits.m4"
"${CMAKE_CURRENT_SOURCE_DIR}/m4/fcb_read_image.m4"
"${CMAKE_CURRENT_SOURCE_DIR}/m4/fcb_read_xds_i2.m4"
"${CMAKE_CURRENT_SOURCE_DIR}/m4/test_fcb_read_image.m4"
"${CMAKE_CURRENT_SOURCE_DIR}/m4/test_xds_binary.m4")

file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/src")
foreach(f90srcm4 IN LISTS f90_sources_m4)
get_filename_component(filename "${f90srcm4}" NAME_WE)
set(f90bldsrc "${CMAKE_CURRENT_BINARY_DIR}/src/${filename}.f90")
add_custom_command(
OUTPUT "${f90bldsrc}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/m4"
COMMAND ${M4} -P ${M4FLAGS} "${f90srcm4}" > "${f90bldsrc}"
DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/m4/fcblib_defines.m4"
"${f90srcm4}"
COMMENT "Generating ${f90bldsrc}")
endforeach()

add_library(fcb
"${CMAKE_CURRENT_BINARY_DIR}/src/fcb_exit_binary.f90"
"${CMAKE_CURRENT_BINARY_DIR}/src/fcb_next_binary.f90"
"${CMAKE_CURRENT_BINARY_DIR}/src/fcb_open_cifin.f90"
"${CMAKE_CURRENT_BINARY_DIR}/src/fcb_packed.f90"
"${CMAKE_CURRENT_BINARY_DIR}/src/fcb_read_bits.f90"
"${CMAKE_CURRENT_BINARY_DIR}/src/fcb_read_image.f90"
"${CMAKE_CURRENT_BINARY_DIR}/src/fcb_read_xds_i2.f90"
"${CBF__SRC}/fcb_atol_wcnt.f90"
"${CBF__SRC}/fcb_ci_strncmparr.f90"
"${CBF__SRC}/fcb_nblen_array.f90"
"${CBF__SRC}/fcb_read_byte.f90"
"${CBF__SRC}/fcb_read_line.f90"
"${CBF__SRC}/fcb_skip_whitespace.f90")
set_target_properties(fcb PROPERTIES OUTPUT_NAME "fcb")
set_target_properties(fcb PROPERTIES LINKER_LANGUAGE C)
install(TARGETS fcb DESTINATION lib)


#
# Build the fcb libraries
#
add_library(fcb ${CBF_F90_BUILT_SOURCES};${CBF_F90_SOURCES})
set_target_properties(fcb PROPERTIES OUTPUT_NAME "fcb")
set_target_properties(fcb PROPERTIES LINKER_LANGUAGE C)
# Use the pre-generated SWIG wrapper, because current SWIG does not
# support Fortran.
add_library(f90cbf
"${CMAKE_CURRENT_SOURCE_DIR}/f90cbf/f90cbf.f90"
"${CMAKE_CURRENT_SOURCE_DIR}/f90cbf/f90cbf_wrap.c")
target_link_libraries(f90cbf
cbf)
endif()


Expand Down Expand Up @@ -970,6 +921,9 @@ target_link_libraries(cbf2adscimg
cbf
"${libm}")

add_executable(convert_f90_swig_wrap
"${CBF__EXAMPLES}/convert_f90_swig_wrap.cpp")

add_executable(convert_image
"${CBF__EXAMPLES}/convert_image.c")
target_link_libraries(convert_image
Expand Down Expand Up @@ -1073,31 +1027,17 @@ target_link_libraries(testreals


#
# F90 examples
#
# F90 examples. Only for testing, not installed.
if(CBF_ENABLE_FORTRAN)
add_custom_command(OUTPUT "${CBF__BLDEXMP}/test_fcb_read_image.f90"
WORKING_DIRECTORY "${CBF__M4}"
COMMAND ${M4} -P "${CBF_M4FLAGS}" "${CBF__M4}/test_fcb_read_image.m4" > "${CBF__BLDEXMP}/test_fcb_read_image.f90"
DEPENDS ${CBF_M4_FCB_DEFINES} "${CBF__M4}/test_fcb_read_image.m4"
COMMENT "Generating ${test_fcb_read_image.f90}")
add_custom_command(OUTPUT "${CBF__BLDEXMP}/test_xds_binary.f90"
WORKING_DIRECTORY "${CBF__M4}"
COMMAND ${M4} -P "${CBF_M4FLAGS}" "${CBF__M4}/test_xds_binary.m4" > "${CBF__BLDEXMP}/test_xds_binary.f90"
DEPENDS ${CBF_M4_FCB_DEFINES} "${CBF__M4}/test_xds_binary.m4"
COMMENT "Generating ${test_xds_binary.f90}")

add_executable(test_fcb_read_image
"${CBF__BLDEXMP}/test_fcb_read_image.f90")
"${CMAKE_CURRENT_BINARY_DIR}/src/test_fcb_read_image.f90")
target_link_libraries(test_fcb_read_image
fcb
hdf5)
fcb)

add_executable(test_xds_binary
"${CBF__BLDEXMP}/test_xds_binary.f90")
"${CMAKE_CURRENT_BINARY_DIR}/src/test_xds_binary.f90")
target_link_libraries(test_xds_binary
fcb
hdf5)
fcb)
endif()


Expand All @@ -1122,10 +1062,6 @@ install (TARGETS sequence_match DESTINATION bin)
install (TARGETS tiff2cbf DESTINATION bin)
install(TARGETS cbf DESTINATION lib)

if(CBF_ENABLE_FORTRAN)
install(TARGETS fcb DESTINATION lib)
endif()

install(TARGETS img DESTINATION lib)
install (DIRECTORY ${CBF__INCLUDE}/ DESTINATION include/cbflib FILES_MATCHING PATTERN "*.h")
install (DIRECTORY ${CBF__BIN_INCLUDE}/* DESTINATION include/cbflib FILES_MATCHING PATTERN "*.h")
Expand Down Expand Up @@ -2280,3 +2216,119 @@ add_test(NAME dectris-cmp
set_tests_properties(dectris-cmp PROPERTIES
FIXTURES_REQUIRED dectris
REQUIRED_FILES "${CBFlib_SOURCE_DIR}/templates/cbf_test_orig.out")


#
# Fortran tests
#
# test_fcb_read_image and test_xds_binary expect the name of the input
# file on stdin and write to stdout. The input file cannot have any
# directory components.
if(CBF_ENABLE_FORTRAN)
#
# xds_binary-flat
add_test(NAME xds_binary-flat
COMMAND ${CMAKE_COMMAND}
"-Dcommand=$<TARGET_FILE:test_xds_binary>"
"-Dinput=testflatin.cbf"
"-Doutput-file=${CBF__DATA}/test_xds_bin_testflatout.out"
-P "${CMAKE_CURRENT_SOURCE_DIR}/redirect.cmake"
WORKING_DIRECTORY "${data_input}")
set_tests_properties(xds_binary-flat PROPERTIES
FIXTURES_SETUP xds_binary-flat
REQUIRED_FILES "${data_input}/testflatin.cbf")

add_test(NAME xds_binary-flat-cleanup
COMMAND ${CMAKE_COMMAND} -E rm "${CBF__DATA}/test_xds_bin_testflatout.out")
set_tests_properties(xds_binary-flat-cleanup PROPERTIES
FIXTURES_CLEANUP xds_binary-flat)

add_test(NAME xds_binary-flat-cmp
COMMAND ${CMAKE_COMMAND} -E compare_files
"${data_output}/test_xds_bin_testflatout_orig.out"
"${CBF__DATA}/test_xds_bin_testflatout.out")
set_tests_properties(xds_binary-flat-cmp PROPERTIES
FIXTURES_REQUIRED xds_binary-flat
REQUIRED_FILES "${data_output}/test_xds_bin_testflatout_orig.out")


#
# xds_binary-flatpacked
add_test(NAME xds_binary-flatpacked
COMMAND ${CMAKE_COMMAND}
"-Dcommand=$<TARGET_FILE:test_xds_binary>"
"-Dinput=testflatpackedin.cbf"
"-Doutput-file=${CBF__DATA}/test_xds_bin_testflatpackedout.out"
-P "${CMAKE_CURRENT_SOURCE_DIR}/redirect.cmake"
WORKING_DIRECTORY "${data_input}")
set_tests_properties(xds_binary-flatpacked PROPERTIES
FIXTURES_SETUP xds_binary-flatpacked
REQUIRED_FILES "${data_input}/testflatpackedin.cbf")

add_test(NAME xds_binary-flatpacked-cleanup
COMMAND ${CMAKE_COMMAND} -E rm "${CBF__DATA}/test_xds_bin_testflatpackedout.out")
set_tests_properties(xds_binary-flatpacked-cleanup PROPERTIES
FIXTURES_CLEANUP xds_binary-flatpacked)

add_test(NAME xds_binary-flatpacked-cmp
COMMAND ${CMAKE_COMMAND} -E compare_files
"${data_output}/test_xds_bin_testflatpackedout_orig.out"
"${CBF__DATA}/test_xds_bin_testflatpackedout.out")
set_tests_properties(xds_binary-flatpacked-cmp PROPERTIES
FIXTURES_REQUIRED xds_binary-flatpacked
REQUIRED_FILES "${data_output}/test_xds_bin_testflatpackedout_orig.out")


#
# fcb_read_image-flat
add_test(NAME fcb_read_image-flat
COMMAND ${CMAKE_COMMAND}
"-Dcommand=$<TARGET_FILE:test_fcb_read_image>"
"-Dinput=testflatin.cbf"
"-Doutput-file=${CBF__DATA}/test_fcb_read_testflatout.out"
-P "${CMAKE_CURRENT_SOURCE_DIR}/redirect.cmake"
WORKING_DIRECTORY "${data_input}")
set_tests_properties(fcb_read_image-flat PROPERTIES
FIXTURES_SETUP fcb_read_image-flat
REQUIRED_FILES "${data_input}/testflatin.cbf")

add_test(NAME fcb_read_image-flat-cleanup
COMMAND ${CMAKE_COMMAND} -E rm "${CBF__DATA}/test_fcb_read_testflatout.out")
set_tests_properties(fcb_read_image-flat-cleanup PROPERTIES
FIXTURES_CLEANUP fcb_read_image-flat)

add_test(NAME fcb_read_image-flat-cmp
COMMAND ${CMAKE_COMMAND} -E compare_files
"${data_output}/test_fcb_read_testflatout_orig.out"
"${CBF__DATA}/test_fcb_read_testflatout.out")
set_tests_properties(fcb_read_image-flat-cmp PROPERTIES
FIXTURES_REQUIRED fcb_read_image-flat
REQUIRED_FILES "${data_output}/test_fcb_read_testflatout_orig.out")


#
# fcb_read_image-flatpacked
add_test(NAME fcb_read_image-flatpacked
COMMAND ${CMAKE_COMMAND}
"-Dcommand=$<TARGET_FILE:test_fcb_read_image>"
"-Dinput=testflatpackedin.cbf"
"-Doutput-file=${CBF__DATA}/test_fcb_read_testflatpackedout.out"
-P "${CMAKE_CURRENT_SOURCE_DIR}/redirect.cmake"
WORKING_DIRECTORY "${data_input}")
set_tests_properties(fcb_read_image-flatpacked PROPERTIES
FIXTURES_SETUP fcb_read_image-flatpacked
REQUIRED_FILES "${data_input}/testflatpackedin.cbf")

add_test(NAME fcb_read_image-flatpacked-cleanup
COMMAND ${CMAKE_COMMAND} -E rm "${CBF__DATA}/test_fcb_read_testflatpackedout.out")
set_tests_properties(fcb_read_image-flatpacked-cleanup PROPERTIES
FIXTURES_CLEANUP fcb_read_image-flatpacked)

add_test(NAME fcb_read_image-flatpacked-cmp
COMMAND ${CMAKE_COMMAND} -E compare_files
"${data_output}/test_fcb_read_testflatpackedout_orig.out"
"${CBF__DATA}/test_fcb_read_testflatpackedout.out")
set_tests_properties(fcb_read_image-flatpacked-cmp PROPERTIES
FIXTURES_REQUIRED fcb_read_image-flatpacked
REQUIRED_FILES "${data_output}/test_fcb_read_testflatpackedout_orig.out")
endif()