@@ -295,9 +295,6 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
295295set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR} /lib" )
296296set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR} /bin" )
297297
298- set (CBF_F90FLAGS_ENV $ENV{F90FLAGS} )
299- set (CBF_M4FLAGS_ENV $ENV{M4FLAGS} )
300-
301298option (BUILD_SHARED_LIBS "Build using shared libraries" ON )
302299
303300option (CBF_ENABLE_FORTRAN "Enable Fortran 90" ON )
@@ -320,24 +317,6 @@ set (CBF_CMAKE_DEBUG "ON")
320317# User setable parameters
321318#
322319
323- if (CBF_M4FLAGS_ENV)
324- set (CBF_M4FLAGS ${CBF_M4FLAGS_ENV} )
325- else (CBF_M4FLAGS_ENV)
326- set (CBF_M4FLAGS "-Dfcb_bytes_in_rec=4096" )
327- endif (CBF_M4FLAGS_ENV)
328-
329- if (CBF_ENABLE_FORTRAN)
330-
331- if (CBF_F90FLAGS_ENV)
332- set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} ${CBF_F90FLAGS_ENV} " )
333- set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} ${CBF_F90FLAGS_ENV} " )
334- else (CBF_F90FLAGS_ENV)
335- set (CMAKE_Fortran_FLAGS_RELEASE "${CMAKE_Fortran_FLAGS_RELEASE} -fno-range-check" )
336- set (CMAKE_Fortran_FLAGS_DEBUG "${CMAKE_Fortran_FLAGS_DEBUG} -fno-range-check" )
337- endif (CBF_F90FLAGS_ENV)
338-
339- endif ()
340-
341320# make sure that the default is a RELEASE
342321if (NOT CMAKE_BUILD_TYPE )
343322 set (CMAKE_BUILD_TYPE RELEASE CACHE STRING
@@ -384,7 +363,6 @@ endmacro(CBF_REQUIRE_DIRECTORY)
384363#
385364set (CBF__SRC "${CBFlib_SOURCE_DIR} /src" )
386365set (CBF__INCLUDE "${CBFlib_SOURCE_DIR} /include" )
387- set (CBF__M4 "${CBFlib_SOURCE_DIR} /m4" )
388366set (CBF__DOC "${CBFlib_SOURCE_DIR} /doc" )
389367set (CBF__EXAMPLES "${CBFlib_SOURCE_DIR} /examples" )
390368set (CBF__EXTERNAL_PACKAGES
@@ -396,17 +374,13 @@ set(CBF__DECTRIS_EXAMPLES
396374#
397375# Directories on the build side
398376#
399- set (CBF__BLDSRC "${CBFlib_BINARY_DIR} /src" )
400- set (CBF__BLDEXMP "${CBFlib_BINARY_DIR} /src" )
401377set (CBF__BIN "${CBFlib_BINARY_DIR} /bin" )
402378set (CBF__LIB "${CBFlib_BINARY_DIR} /lib" )
403379set (CBF__BIN_INCLUDE "${CBFlib_BINARY_DIR} /include" )
404380set (CBF__SHARE "${CBFlib_BINARY_DIR} /share" )
405381set (CBF__EXT_PKG "${CBFlib_BINARY_DIR} /external_packages" )
406382set (CBF__DATA "${CBFlib_BINARY_DIR} /data_files" )
407383
408- CBF_REQUIRE_DIRECTORY(${CBF__BLDSRC} )
409- CBF_REQUIRE_DIRECTORY(${CBF__BLDEXMP} )
410384CBF_REQUIRE_DIRECTORY(${CBF__BIN} )
411385CBF_REQUIRE_DIRECTORY(${CBF__LIB} )
412386CBF_REQUIRE_DIRECTORY(${CBF__BIN_INCLUDE} )
@@ -711,30 +685,6 @@ set(
711685 ${CBF__SRC} /img.c
712686)
713687
714- if (CBF_ENABLE_FORTRAN)
715-
716- set (
717- CBF_F90_BUILT_SOURCES
718- ${CBF__BLDSRC} /fcb_exit_binary.f90
719- ${CBF__BLDSRC} /fcb_next_binary.f90
720- ${CBF__BLDSRC} /fcb_open_cifin.f90
721- ${CBF__BLDSRC} /fcb_packed.f90
722- ${CBF__BLDSRC} /fcb_read_bits.f90
723- ${CBF__BLDSRC} /fcb_read_image.f90
724- ${CBF__BLDSRC} /fcb_read_xds_i2.f90
725- )
726-
727- set (
728- CBF_F90_SOURCES
729- ${CBF__SRC} /fcb_atol_wcnt.f90
730- ${CBF__SRC} /fcb_ci_strncmparr.f90
731- ${CBF__SRC} /fcb_nblen_array.f90
732- ${CBF__SRC} /fcb_read_byte.f90
733- ${CBF__SRC} /fcb_read_line.f90
734- ${CBF__SRC} /fcb_skip_whitespace.f90
735- )
736-
737- endif ()
738688
739689# use, i.e. don't skip the full RPATH for the build tree
740690SET (CMAKE_SKIP_BUILD_RPATH FALSE )
@@ -802,38 +752,6 @@ if(CBF_ENABLE_ULP)
802752endif ()
803753
804754
805- if (CBF_ENABLE_FORTRAN)
806-
807- #
808- # m4 FCB library macro files
809- #
810- set (
811- CBF_M4_FCB_DEFINES
812- ${CBF__M4} /fcblib_defines.m4
813- )
814-
815- set (
816- CBF_M4_FCB_FILES
817- ${CBF__M4} /fcb_exit_binary.m4
818- ${CBF__M4} /fcb_next_binary.m4
819- ${CBF__M4} /fcb_open_cifin.m4
820- ${CBF__M4} /fcb_packed.m4
821- ${CBF__M4} /fcb_read_bits.m4
822- ${CBF__M4} /fcb_read_image.m4
823- ${CBF__M4} /fcb_read_xds_i2.m4
824- )
825- #
826- # m4 F90 examples macro files
827- #
828- set (
829- CBF_M4_F90_EXAMPLES
830- ${CBF__M4} /test_fcb_read_image.m4
831- ${CBF__M4} /test_xds_binary.m4
832- )
833-
834- endif ()
835-
836-
837755#
838756# Documentation files
839757#
@@ -901,32 +819,65 @@ set_target_properties(img PROPERTIES OUTPUT_NAME "img")
901819set_target_properties (img PROPERTIES LINKER_LANGUAGE C)
902820
903821
904- if (CBF_ENABLE_FORTRAN)
905-
906822#
907- # Build the f90 library sources
908- #
909- find_program (M4 m4)
910- foreach (f90src IN LISTS CBF_F90_BUILT_SOURCES)
911- get_filename_component (filename "${f90src} " NAME_WE )
912- set (f90bldsrc "${CBF__BLDSRC} /${filename} .f90" )
913- set (f90srcm4 "${CBF__M4} /${filename} .m4" )
914- add_custom_command (
915- OUTPUT "${f90bldsrc} "
916- WORKING_DIRECTORY "${CBF__M4} "
917- COMMAND ${M4} -P "${CBF_M4FLAGS} " "${f90srcm4} " > "${f90bldsrc} "
918- DEPENDS ${CBF_M4_FCB_DEFINES} ${f90srcm4}
919- COMMENT "Generating ${f90bldsrc} "
920- )
921- endforeach (f90src)
823+ # Build all Fortran sources and libraries. The f90cbf library is not
824+ # installed.
825+ if (CBF_ENABLE_FORTRAN)
826+ find_program (M4 m4 REQUIRED)
827+ set (M4FLAGS "-Dfcb_bytes_in_rec=4096" CACHE STRING
828+ "Flags used by the M4 macro processor during Fortran build" )
829+ mark_as_advanced (M4FLAGS)
830+
831+ set (f90_sources_m4
832+ "${CMAKE_CURRENT_SOURCE_DIR} /m4/fcb_exit_binary.m4"
833+ "${CMAKE_CURRENT_SOURCE_DIR} /m4/fcb_next_binary.m4"
834+ "${CMAKE_CURRENT_SOURCE_DIR} /m4/fcb_open_cifin.m4"
835+ "${CMAKE_CURRENT_SOURCE_DIR} /m4/fcb_packed.m4"
836+ "${CMAKE_CURRENT_SOURCE_DIR} /m4/fcb_read_bits.m4"
837+ "${CMAKE_CURRENT_SOURCE_DIR} /m4/fcb_read_image.m4"
838+ "${CMAKE_CURRENT_SOURCE_DIR} /m4/fcb_read_xds_i2.m4"
839+ "${CMAKE_CURRENT_SOURCE_DIR} /m4/test_fcb_read_image.m4"
840+ "${CMAKE_CURRENT_SOURCE_DIR} /m4/test_xds_binary.m4" )
841+
842+ file (MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR} /src" )
843+ foreach (f90srcm4 IN LISTS f90_sources_m4)
844+ get_filename_component (filename "${f90srcm4} " NAME_WE )
845+ set (f90bldsrc "${CMAKE_CURRENT_BINARY_DIR} /src/${filename} .f90" )
846+ add_custom_command (
847+ OUTPUT "${f90bldsrc} "
848+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR} /m4"
849+ COMMAND ${M4} -P ${M4FLAGS} "${f90srcm4} " > "${f90bldsrc} "
850+ DEPENDS "${CMAKE_CURRENT_SOURCE_DIR} /m4/fcblib_defines.m4"
851+ "${f90srcm4} "
852+ COMMENT "Generating ${f90bldsrc} " )
853+ endforeach ()
854+
855+ add_library (fcb
856+ "${CMAKE_CURRENT_BINARY_DIR} /src/fcb_exit_binary.f90"
857+ "${CMAKE_CURRENT_BINARY_DIR} /src/fcb_next_binary.f90"
858+ "${CMAKE_CURRENT_BINARY_DIR} /src/fcb_open_cifin.f90"
859+ "${CMAKE_CURRENT_BINARY_DIR} /src/fcb_packed.f90"
860+ "${CMAKE_CURRENT_BINARY_DIR} /src/fcb_read_bits.f90"
861+ "${CMAKE_CURRENT_BINARY_DIR} /src/fcb_read_image.f90"
862+ "${CMAKE_CURRENT_BINARY_DIR} /src/fcb_read_xds_i2.f90"
863+ "${CBF__SRC} /fcb_atol_wcnt.f90"
864+ "${CBF__SRC} /fcb_ci_strncmparr.f90"
865+ "${CBF__SRC} /fcb_nblen_array.f90"
866+ "${CBF__SRC} /fcb_read_byte.f90"
867+ "${CBF__SRC} /fcb_read_line.f90"
868+ "${CBF__SRC} /fcb_skip_whitespace.f90" )
869+ set_target_properties (fcb PROPERTIES OUTPUT_NAME "fcb" )
870+ set_target_properties (fcb PROPERTIES LINKER_LANGUAGE C)
871+ install (TARGETS fcb DESTINATION lib)
922872
923873
924- #
925- # Build the fcb libraries
926- #
927- add_library (fcb ${CBF_F90_BUILT_SOURCES} ;${CBF_F90_SOURCES} )
928- set_target_properties (fcb PROPERTIES OUTPUT_NAME "fcb" )
929- set_target_properties (fcb PROPERTIES LINKER_LANGUAGE C)
874+ # Use the pre-generated SWIG wrapper, because current SWIG does not
875+ # support Fortran.
876+ add_library (f90cbf
877+ "${CMAKE_CURRENT_SOURCE_DIR} /f90cbf/f90cbf.f90"
878+ "${CMAKE_CURRENT_SOURCE_DIR} /f90cbf/f90cbf_wrap.c" )
879+ target_link_libraries (f90cbf
880+ cbf)
930881endif ()
931882
932883
@@ -970,6 +921,9 @@ target_link_libraries(cbf2adscimg
970921 cbf
971922 "${libm} " )
972923
924+ add_executable (convert_f90_swig_wrap
925+ "${CBF__EXAMPLES} /convert_f90_swig_wrap.cpp" )
926+
973927add_executable (convert_image
974928 "${CBF__EXAMPLES} /convert_image.c" )
975929target_link_libraries (convert_image
@@ -1073,31 +1027,17 @@ target_link_libraries(testreals
10731027
10741028
10751029#
1076- # F90 examples
1077- #
1030+ # F90 examples. Only for testing, not installed.
10781031if (CBF_ENABLE_FORTRAN)
1079- add_custom_command (OUTPUT "${CBF__BLDEXMP} /test_fcb_read_image.f90"
1080- WORKING_DIRECTORY "${CBF__M4} "
1081- COMMAND ${M4} -P "${CBF_M4FLAGS} " "${CBF__M4} /test_fcb_read_image.m4" > "${CBF__BLDEXMP} /test_fcb_read_image.f90"
1082- DEPENDS ${CBF_M4_FCB_DEFINES} "${CBF__M4} /test_fcb_read_image.m4"
1083- COMMENT "Generating ${test_fcb_read_image.f90}" )
1084- add_custom_command (OUTPUT "${CBF__BLDEXMP} /test_xds_binary.f90"
1085- WORKING_DIRECTORY "${CBF__M4} "
1086- COMMAND ${M4} -P "${CBF_M4FLAGS} " "${CBF__M4} /test_xds_binary.m4" > "${CBF__BLDEXMP} /test_xds_binary.f90"
1087- DEPENDS ${CBF_M4_FCB_DEFINES} "${CBF__M4} /test_xds_binary.m4"
1088- COMMENT "Generating ${test_xds_binary.f90}" )
1089-
10901032 add_executable (test_fcb_read_image
1091- "${CBF__BLDEXMP} /test_fcb_read_image.f90" )
1033+ "${CMAKE_CURRENT_BINARY_DIR} /src /test_fcb_read_image.f90" )
10921034 target_link_libraries (test_fcb_read_image
1093- fcb
1094- hdf5)
1035+ fcb)
10951036
10961037 add_executable (test_xds_binary
1097- "${CBF__BLDEXMP} /test_xds_binary.f90" )
1038+ "${CMAKE_CURRENT_BINARY_DIR} /src /test_xds_binary.f90" )
10981039 target_link_libraries (test_xds_binary
1099- fcb
1100- hdf5)
1040+ fcb)
11011041endif ()
11021042
11031043
@@ -1122,10 +1062,6 @@ install (TARGETS sequence_match DESTINATION bin)
11221062install (TARGETS tiff2cbf DESTINATION bin)
11231063install (TARGETS cbf DESTINATION lib)
11241064
1125- if (CBF_ENABLE_FORTRAN)
1126- install (TARGETS fcb DESTINATION lib)
1127- endif ()
1128-
11291065install (TARGETS img DESTINATION lib)
11301066install (DIRECTORY ${CBF__INCLUDE} / DESTINATION include /cbflib FILES_MATCHING PATTERN "*.h" )
11311067install (DIRECTORY ${CBF__BIN_INCLUDE} /* DESTINATION include /cbflib FILES_MATCHING PATTERN "*.h" )
@@ -2280,3 +2216,119 @@ add_test(NAME dectris-cmp
22802216set_tests_properties (dectris-cmp PROPERTIES
22812217 FIXTURES_REQUIRED dectris
22822218 REQUIRED_FILES "${CBFlib_SOURCE_DIR} /templates/cbf_test_orig.out" )
2219+
2220+
2221+ #
2222+ # Fortran tests
2223+ #
2224+ # test_fcb_read_image and test_xds_binary expect the name of the input
2225+ # file on stdin and write to stdout. The input file cannot have any
2226+ # directory components.
2227+ if (CBF_ENABLE_FORTRAN)
2228+ #
2229+ # xds_binary-flat
2230+ add_test (NAME xds_binary-flat
2231+ COMMAND ${CMAKE_COMMAND}
2232+ "-Dcommand=$<TARGET_FILE:test_xds_binary>"
2233+ "-Dinput=testflatin.cbf"
2234+ "-Doutput-file=${CBF__DATA} /test_xds_bin_testflatout.out"
2235+ -P "${CMAKE_CURRENT_SOURCE_DIR} /redirect.cmake"
2236+ WORKING_DIRECTORY "${data_input} " )
2237+ set_tests_properties (xds_binary-flat PROPERTIES
2238+ FIXTURES_SETUP xds_binary-flat
2239+ REQUIRED_FILES "${data_input} /testflatin.cbf" )
2240+
2241+ add_test (NAME xds_binary-flat-cleanup
2242+ COMMAND ${CMAKE_COMMAND} -E rm "${CBF__DATA} /test_xds_bin_testflatout.out" )
2243+ set_tests_properties (xds_binary-flat-cleanup PROPERTIES
2244+ FIXTURES_CLEANUP xds_binary-flat)
2245+
2246+ add_test (NAME xds_binary-flat-cmp
2247+ COMMAND ${CMAKE_COMMAND} -E compare_files
2248+ "${data_output} /test_xds_bin_testflatout_orig.out"
2249+ "${CBF__DATA} /test_xds_bin_testflatout.out" )
2250+ set_tests_properties (xds_binary-flat-cmp PROPERTIES
2251+ FIXTURES_REQUIRED xds_binary-flat
2252+ REQUIRED_FILES "${data_output} /test_xds_bin_testflatout_orig.out" )
2253+
2254+
2255+ #
2256+ # xds_binary-flatpacked
2257+ add_test (NAME xds_binary-flatpacked
2258+ COMMAND ${CMAKE_COMMAND}
2259+ "-Dcommand=$<TARGET_FILE:test_xds_binary>"
2260+ "-Dinput=testflatpackedin.cbf"
2261+ "-Doutput-file=${CBF__DATA} /test_xds_bin_testflatpackedout.out"
2262+ -P "${CMAKE_CURRENT_SOURCE_DIR} /redirect.cmake"
2263+ WORKING_DIRECTORY "${data_input} " )
2264+ set_tests_properties (xds_binary-flatpacked PROPERTIES
2265+ FIXTURES_SETUP xds_binary-flatpacked
2266+ REQUIRED_FILES "${data_input} /testflatpackedin.cbf" )
2267+
2268+ add_test (NAME xds_binary-flatpacked-cleanup
2269+ COMMAND ${CMAKE_COMMAND} -E rm "${CBF__DATA} /test_xds_bin_testflatpackedout.out" )
2270+ set_tests_properties (xds_binary-flatpacked-cleanup PROPERTIES
2271+ FIXTURES_CLEANUP xds_binary-flatpacked)
2272+
2273+ add_test (NAME xds_binary-flatpacked-cmp
2274+ COMMAND ${CMAKE_COMMAND} -E compare_files
2275+ "${data_output} /test_xds_bin_testflatpackedout_orig.out"
2276+ "${CBF__DATA} /test_xds_bin_testflatpackedout.out" )
2277+ set_tests_properties (xds_binary-flatpacked-cmp PROPERTIES
2278+ FIXTURES_REQUIRED xds_binary-flatpacked
2279+ REQUIRED_FILES "${data_output} /test_xds_bin_testflatpackedout_orig.out" )
2280+
2281+
2282+ #
2283+ # fcb_read_image-flat
2284+ add_test (NAME fcb_read_image-flat
2285+ COMMAND ${CMAKE_COMMAND}
2286+ "-Dcommand=$<TARGET_FILE:test_fcb_read_image>"
2287+ "-Dinput=testflatin.cbf"
2288+ "-Doutput-file=${CBF__DATA} /test_fcb_read_testflatout.out"
2289+ -P "${CMAKE_CURRENT_SOURCE_DIR} /redirect.cmake"
2290+ WORKING_DIRECTORY "${data_input} " )
2291+ set_tests_properties (fcb_read_image-flat PROPERTIES
2292+ FIXTURES_SETUP fcb_read_image-flat
2293+ REQUIRED_FILES "${data_input} /testflatin.cbf" )
2294+
2295+ add_test (NAME fcb_read_image-flat-cleanup
2296+ COMMAND ${CMAKE_COMMAND} -E rm "${CBF__DATA} /test_fcb_read_testflatout.out" )
2297+ set_tests_properties (fcb_read_image-flat-cleanup PROPERTIES
2298+ FIXTURES_CLEANUP fcb_read_image-flat)
2299+
2300+ add_test (NAME fcb_read_image-flat-cmp
2301+ COMMAND ${CMAKE_COMMAND} -E compare_files
2302+ "${data_output} /test_fcb_read_testflatout_orig.out"
2303+ "${CBF__DATA} /test_fcb_read_testflatout.out" )
2304+ set_tests_properties (fcb_read_image-flat-cmp PROPERTIES
2305+ FIXTURES_REQUIRED fcb_read_image-flat
2306+ REQUIRED_FILES "${data_output} /test_fcb_read_testflatout_orig.out" )
2307+
2308+
2309+ #
2310+ # fcb_read_image-flatpacked
2311+ add_test (NAME fcb_read_image-flatpacked
2312+ COMMAND ${CMAKE_COMMAND}
2313+ "-Dcommand=$<TARGET_FILE:test_fcb_read_image>"
2314+ "-Dinput=testflatpackedin.cbf"
2315+ "-Doutput-file=${CBF__DATA} /test_fcb_read_testflatpackedout.out"
2316+ -P "${CMAKE_CURRENT_SOURCE_DIR} /redirect.cmake"
2317+ WORKING_DIRECTORY "${data_input} " )
2318+ set_tests_properties (fcb_read_image-flatpacked PROPERTIES
2319+ FIXTURES_SETUP fcb_read_image-flatpacked
2320+ REQUIRED_FILES "${data_input} /testflatpackedin.cbf" )
2321+
2322+ add_test (NAME fcb_read_image-flatpacked-cleanup
2323+ COMMAND ${CMAKE_COMMAND} -E rm "${CBF__DATA} /test_fcb_read_testflatpackedout.out" )
2324+ set_tests_properties (fcb_read_image-flatpacked-cleanup PROPERTIES
2325+ FIXTURES_CLEANUP fcb_read_image-flatpacked)
2326+
2327+ add_test (NAME fcb_read_image-flatpacked-cmp
2328+ COMMAND ${CMAKE_COMMAND} -E compare_files
2329+ "${data_output} /test_fcb_read_testflatpackedout_orig.out"
2330+ "${CBF__DATA} /test_fcb_read_testflatpackedout.out" )
2331+ set_tests_properties (fcb_read_image-flatpacked-cmp PROPERTIES
2332+ FIXTURES_REQUIRED fcb_read_image-flatpacked
2333+ REQUIRED_FILES "${data_output} /test_fcb_read_testflatpackedout_orig.out" )
2334+ endif ()
0 commit comments