@@ -36,6 +36,14 @@ include ( "cmake/checkOutOfSource.cmake" )
36
36
#---------------------
37
37
project ( jsonfortran NONE )
38
38
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
+
39
47
#---------------------
40
48
# Real and Integer kinds
41
49
#---------------------
@@ -161,6 +169,14 @@ endif ()
161
169
set ( LIB_NAME ${CMAKE_PROJECT_NAME} )
162
170
add_library ( ${LIB_NAME} SHARED ${JF_LIB_SRCS} )
163
171
add_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
+
164
180
set_target_properties ( ${LIB_NAME} -static
165
181
PROPERTIES
166
182
OUTPUT_NAME ${LIB_NAME}
@@ -273,14 +289,11 @@ if ( ENABLE_TESTS )
273
289
add_dependencies (build_tests ${LIB_NAME} ${LIB_NAME} -static )
274
290
275
291
find_program ( JSONLINT jsonlint )
276
- find_program ( DIFF diff )
277
- file ( COPY "${CMAKE_SOURCE_DIR} /files"
278
- DESTINATION "${CMAKE_BINARY_DIR} /" )
279
292
280
- set ( DATA_DIR "${CMAKE_BINARY_DIR } /files" )
293
+ set ( DATA_DIR "${CMAKE_SOURCE_DIR } /files" )
281
294
282
295
set_directory_properties ( PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES
283
- "${DATA_DIR} /test2.json; ${DATA_DIR} /test4.json; ${ FORD_CLEAN_OUTPUTS} " )
296
+ "${FORD_CLEAN_OUTPUTS} " )
284
297
285
298
# Validate input
286
299
if ( JSONLINT )
@@ -294,26 +307,38 @@ if ( ENABLE_TESTS )
294
307
foreach ( VALID_JSON ${JSON_INPUTS} )
295
308
get_filename_component ( TESTNAME "${VALID_JSON} " NAME )
296
309
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} " )
299
312
endforeach ()
300
313
301
314
foreach ( INVALID ${INVALID_JSON} )
302
315
get_filename_component ( TESTNAME "${INVALID} " NAME )
303
316
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} " )
306
319
set_property ( TEST validate-${TESTNAME}
307
- PROPERTY
308
- WILL_FAIL TRUE )
320
+ PROPERTY
321
+ WILL_FAIL TRUE )
309
322
endforeach ()
310
323
endif ()
311
324
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
+
312
337
set ( UNIT_TESTS '' )
313
338
foreach ( UNIT_TEST ${JF_TEST_SRCS} )
314
339
get_filename_component ( TEST ${UNIT_TEST} NAME_WE )
315
340
if (MSVC_IDE )
316
- link_directories (${CMAKE_BINARY_DIR} /lib)
341
+ link_directories (${CMAKE_BINARY_DIR} /lib)
317
342
endif ()
318
343
add_executable ( ${TEST} EXCLUDE_FROM_ALL ${UNIT_TEST} )
319
344
target_link_libraries ( ${TEST} ${LIB_NAME} )
@@ -325,11 +350,13 @@ if ( ENABLE_TESTS )
325
350
add_test ( NAME ${TEST}
326
351
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} /bin
327
352
COMMAND ./${TEST} )
353
+ set_tests_properties ( ${TEST}
354
+ PROPERTIES FIXTURES_REQUIRED JF)
328
355
list ( APPEND UNIT_TESTS ${TEST} )
329
356
if ( JSONLINT )
330
357
set_property ( TEST ${TEST}
331
- APPEND
332
- PROPERTY DEPENDS validate-input1 validate-input2 )
358
+ APPEND
359
+ PROPERTY DEPENDS validate-input1 validate-input2 )
333
360
endif ()
334
361
endforeach ( UNIT_TEST )
335
362
@@ -338,39 +365,42 @@ if ( ENABLE_TESTS )
338
365
PROPERTY DEPENDS jf_test_02 )
339
366
340
367
# 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
+
341
374
if ( JSONLINT )
342
- file ( GLOB JSON_FILES "${DATA_DIR} /*.json" )
343
- foreach ( JSON_FILE ${JSON_FILES} )
375
+ foreach ( JSON_FILE ${EXPECTED_OUTPUTS} )
344
376
get_filename_component ( TESTNAME ${JSON_FILE} NAME )
345
377
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} )
348
380
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} )
353
384
endforeach ( JSON_FILE )
354
385
endif ()
355
386
356
387
# 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
+
374
404
375
405
endif ()
376
406
0 commit comments