@@ -36,6 +36,14 @@ include ( "cmake/checkOutOfSource.cmake" )
3636#---------------------
3737project ( jsonfortran NONE )
3838
39+ if (CMAKE_Fortran_COMPILER_ID STREQUAL GNU)
40+ option (JSON_FORTRAN_USE_OpenCoarrays
41+ "Build JSON-Fortran with support for linking against OpenCoarray programs" OFF )
42+ endif ()
43+ if (JSON_FORTRAN_USE_OpenCoarrays)
44+ find_package (OpenCoarrays)
45+ endif ()
46+
3947#---------------------
4048# Real and Integer kinds
4149#---------------------
@@ -161,6 +169,14 @@ endif ()
161169set ( LIB_NAME ${CMAKE_PROJECT_NAME} )
162170add_library ( ${LIB_NAME} SHARED ${JF_LIB_SRCS} )
163171add_library ( ${LIB_NAME} -static STATIC ${JF_LIB_SRCS} )
172+
173+ if (JSON_FORTRAN_USE_OpenCoarrays)
174+ target_link_libraries (${LIB_NAME}
175+ PRIVATE OpenCoarrays::caf_mpi_static)
176+ target_link_libraries (${LIB_NAME} -static
177+ PRIVATE OpenCoarrays::caf_mpi_static)
178+ endif ()
179+
164180set_target_properties ( ${LIB_NAME} -static
165181 PROPERTIES
166182 OUTPUT_NAME ${LIB_NAME}
@@ -273,14 +289,11 @@ if ( ENABLE_TESTS )
273289 add_dependencies (build_tests ${LIB_NAME} ${LIB_NAME} -static )
274290
275291 find_program ( JSONLINT jsonlint )
276- find_program ( DIFF diff )
277- file ( COPY "${CMAKE_SOURCE_DIR} /files"
278- DESTINATION "${CMAKE_BINARY_DIR} /" )
279292
280- set ( DATA_DIR "${CMAKE_BINARY_DIR } /files" )
293+ set ( DATA_DIR "${CMAKE_SOURCE_DIR } /files" )
281294
282295 set_directory_properties ( PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
283- "${DATA_DIR} /test2.json; ${DATA_DIR} /test4.json; ${ FORD_CLEAN_OUTPUTS} " )
296+ "${FORD_CLEAN_OUTPUTS} " )
284297
285298 # Validate input
286299 if ( JSONLINT )
@@ -294,26 +307,38 @@ if ( ENABLE_TESTS )
294307 foreach ( VALID_JSON ${JSON_INPUTS} )
295308 get_filename_component ( TESTNAME "${VALID_JSON} " NAME )
296309 add_test ( NAME validate-${TESTNAME}
297- WORKING_DIRECTORY "${DATA_DIR} /inputs"
298- COMMAND ${JSONLINT} "--allow=nonescape-characters" "${VALID_JSON} " )
310+ WORKING_DIRECTORY "${DATA_DIR} /inputs"
311+ COMMAND ${JSONLINT} "--allow=nonescape-characters" "${VALID_JSON} " )
299312 endforeach ()
300313
301314 foreach ( INVALID ${INVALID_JSON} )
302315 get_filename_component ( TESTNAME "${INVALID} " NAME )
303316 add_test ( NAME validate-${TESTNAME}
304- WORKING_DIRECTORY "${DATA_DIR} /inputs"
305- COMMAND ${JSONLINT} "${INVALID} " )
317+ WORKING_DIRECTORY "${DATA_DIR} /inputs"
318+ COMMAND ${JSONLINT} "${INVALID} " )
306319 set_property ( TEST validate-${TESTNAME}
307- PROPERTY
308- WILL_FAIL TRUE )
320+ PROPERTY
321+ WILL_FAIL TRUE )
309322 endforeach ()
310323 endif ()
311324
325+ add_test (NAME jf-cleanup-fixture
326+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR} "
327+ COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_BINARY_DIR} /files" )
328+ set_tests_properties (jf-cleanup-fixture
329+ PROPERTIES FIXTURES_SETUP JF)
330+ add_test (NAME jf-setup-fixture
331+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR} "
332+ COMMAND ${CMAKE_COMMAND} -E copy_directory "${DATA_DIR} " "${CMAKE_BINARY_DIR} /files" )
333+ set_tests_properties (jf-setup-fixture
334+ PROPERTIES FIXTURES_SETUP JF
335+ DEPENDS jf-cleanup-fixture)
336+
312337 set ( UNIT_TESTS '' )
313338 foreach ( UNIT_TEST ${JF_TEST_SRCS} )
314339 get_filename_component ( TEST ${UNIT_TEST} NAME_WE )
315340 if (MSVC_IDE )
316- link_directories (${CMAKE_BINARY_DIR} /lib)
341+ link_directories (${CMAKE_BINARY_DIR} /lib)
317342 endif ()
318343 add_executable ( ${TEST} EXCLUDE_FROM_ALL ${UNIT_TEST} )
319344 target_link_libraries ( ${TEST} ${LIB_NAME} )
@@ -325,11 +350,13 @@ if ( ENABLE_TESTS )
325350 add_test ( NAME ${TEST}
326351 WORKING_DIRECTORY ${CMAKE_BINARY_DIR} /bin
327352 COMMAND ./${TEST} )
353+ set_tests_properties ( ${TEST}
354+ PROPERTIES FIXTURES_REQUIRED JF)
328355 list ( APPEND UNIT_TESTS ${TEST} )
329356 if ( JSONLINT )
330357 set_property ( TEST ${TEST}
331- APPEND
332- PROPERTY DEPENDS validate-input1 validate-input2 )
358+ APPEND
359+ PROPERTY DEPENDS validate-input1 validate-input2 )
333360 endif ()
334361 endforeach ( UNIT_TEST )
335362
@@ -338,39 +365,42 @@ if ( ENABLE_TESTS )
338365 PROPERTY DEPENDS jf_test_02 )
339366
340367 # Validate output
368+ file ( GLOB EXPECTED_OUTPUTS "${DATA_DIR} /expected-outputs/*.json" )
369+ if (NOT ${ENABLE_UNICODE} )
370+ list ( REMOVE_ITEM EXPECTED_OUTPUTS "${DATA_DIR} /expected-outputs/hello-world-ucs4.json" )
371+ endif ()
372+ list ( REMOVE_ITEM EXPECTED_OUTPUTS "${DATA_DIR} /expected-outputs/example2.json" )
373+
341374 if ( JSONLINT )
342- file ( GLOB JSON_FILES "${DATA_DIR} /*.json" )
343- foreach ( JSON_FILE ${JSON_FILES} )
375+ foreach ( JSON_FILE ${EXPECTED_OUTPUTS} )
344376 get_filename_component ( TESTNAME ${JSON_FILE} NAME )
345377 add_test ( NAME validate-output -${TESTNAME}
346- WORKING_DIRECTORY "${DATA_DIR} "
347- COMMAND ${JSONLINT} "--allow=nonescape-characters" ${TESTNAME} )
378+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /files "
379+ COMMAND ${JSONLINT} "--allow=nonescape-characters" ${TESTNAME} )
348380 set_property ( TEST validate-output -${TESTNAME}
349- APPEND
350- PROPERTY
351- DEPENDS ${UNIT_TESTS}
352- REQUIRED_FILES ${JSON_FILES} )
381+ APPEND
382+ PROPERTY
383+ DEPENDS ${UNIT_TESTS} )
353384 endforeach ( JSON_FILE )
354385 endif ()
355386
356387 # Check output for differences
357- if ( DIFF )
358- file ( GLOB JSON_FILES "${DATA_DIR} /*.json" )
359- foreach ( JSON_FILE ${JSON_FILES} )
360- get_filename_component ( JSON_STEM ${JSON_FILE} NAME_WE )
361- add_test ( NAME regression-${JSON_STEM} .json
362- WORKING_DIRECTORY "${DATA_DIR} "
363- COMMAND ${DIFF} -q ${JSON_STEM} .json expected-outputs/${JSON_STEM} .json )
364- set_property ( TEST regression-${JSON_STEM} .json
365- APPEND
366- PROPERTY
367- DEPENDS ${UNIT_TESTS}
368- REQUIRED_FILES ${JSON_FILES} )
369- endforeach ( JSON_FILE )
370- else ()
371- message ( WARNING
372- "For full test coverage diff, or a similar tool must be present on your system" )
373- endif ()
388+ if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.14)
389+ set ( JSON_FORTRAN_COMPARE_FLAG "--ignore-eol" )
390+ endif ()
391+
392+ foreach ( JSON_FILE ${EXPECTED_OUTPUTS} )
393+ get_filename_component (OUTPUT ${JSON_FILE} NAME )
394+ add_test ( NAME regression-${OUTPUT}
395+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR} /files"
396+ COMMAND ${CMAKE_COMMAND} -E compare_files ${JSON_FORTRAN_COMPARE_FLAG} ${OUTPUT} expected-outputs/${OUTPUT} )
397+ set_property ( TEST regression-${OUTPUT}
398+ APPEND
399+ PROPERTY
400+ DEPENDS ${UNIT_TESTS}
401+ REQUIRED_FILES ${EXPECTED_OUTPUTS} )
402+ endforeach ( JSON_FILE )
403+
374404
375405endif ()
376406
0 commit comments