diff --git a/.cmakelintrc b/.cmakelintrc new file mode 100644 index 00000000..b8d37b79 --- /dev/null +++ b/.cmakelintrc @@ -0,0 +1,2 @@ +filter=-readability/mixedcase +linelength=133 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 59943ae0..d17c459d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,16 +28,16 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 - - name: Install cmakelint + - name: Install linters run: | python3 -m pip install cmakelint fortitude-lint - name: Run cmakelint run: | - find -type f '(' -name 'CMakeLists.txt' -o -name '*.cmake' ')' \ - -exec cmakelint '{}' ';' + mapfile -t names < <(find -name 'CMakeLists.txt' -o -name '*.cmake') + cmakelint "${names[@]}" - name: Run fortitude check run: | - fortitude check --target-std=f2008 --line-length=150 + fortitude check build: name: gnu-openmpi diff --git a/CMakeLists.txt b/CMakeLists.txt index 8248a2bc..4a695313 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,7 @@ set( CMAKE_CXX_STANDARD 17 ) set( CMAKE_CXX_STANDARD_REQUIRED ON ) set( CMAKE_CXX_EXTENSIONS OFF ) -set( CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}) +set( CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH} ) set( CMAKE_DIRECTORY_LABELS "opsinputs" ) @@ -47,7 +47,7 @@ find_package( MPI REQUIRED COMPONENTS C CXX Fortran ) include_directories( ${Boost_INCLUDE_DIR} ) # NetCDF -find_package( NetCDF REQUIRED COMPONENTS C CXX Fortran) +find_package( NetCDF REQUIRED COMPONENTS C CXX Fortran ) # eckit find_package( eckit REQUIRED ) @@ -86,9 +86,9 @@ get_directory_property( OPSINPUTS_DEFINITIONS COMPILE_DEFINITIONS ) foreach( _tpl ${OPSINPUTS_TPLS} ) string( TOUPPER ${_tpl} TPL ) - list( APPEND OPSINPUTS_EXTRA_DEFINITIONS ${${TPL}_DEFINITIONS} ${${TPL}_TPL_DEFINITIONS} ) + list( APPEND OPSINPUTS_EXTRA_DEFINITIONS ${${TPL}_DEFINITIONS} ${${TPL}_TPL_DEFINITIONS} ) list( APPEND OPSINPUTS_EXTRA_INCLUDE_DIRS ${${TPL}_INCLUDE_DIRS} ${${TPL}_TPL_INCLUDE_DIRS} ) - list( APPEND OPSINPUTS_EXTRA_LIBRARIES ${${TPL}_LIBRARIES} ${${TPL}_TPL_LIBRARIES} ) + list( APPEND OPSINPUTS_EXTRA_LIBRARIES ${${TPL}_LIBRARIES} ${${TPL}_TPL_LIBRARIES} ) endforeach() ################################################################################ @@ -110,16 +110,37 @@ endif() if( BUILD_TESTING ) add_subdirectory( test ) - ecbuild_add_test( - TARGET opsinputs_coding_norms - TYPE SCRIPT - COMMAND ${oops_BINDIR}/oops_cpplint.py - ARGS - --quiet - --recursive - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CMAKE_CURRENT_SOURCE_DIR}/test - WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bin ) + # We can make use of CMake's native support of cpplint in future. If we set + # `CMAKE__CPPLINT` (where `` is either `C` or `CXX`) to point to + # the `cpplint` executable, it will run `cpplint` as part of the build. + find_program( + CPPLINT_EXECUTABLE + NAMES cpplint + DOC "Path to the cpplint executable" + ) + if(CPPLINT_EXECUTABLE) + ecbuild_add_test( + TARGET "${PROJECT_NAME}_coding_norms" + LABELS lint + TYPE SCRIPT + COMMAND "${CPPLINT_EXECUTABLE}" + ARGS --quiet --recursive "${CMAKE_CURRENT_SOURCE_DIR}" + ) + endif() + find_program( + FORTITUDE_EXECUTABLE + NAMES fortitude + DOC "Path to the Fortitude linter executable" + ) + if(FORTITUDE_EXECUTABLE) + ecbuild_add_test( + TARGET "${PROJECT_NAME}_fortitude_check" + LABELS lint + TYPE SCRIPT + COMMAND "${FORTITUDE_EXECUTABLE}" + ARGS check "${CMAKE_CURRENT_SOURCE_DIR}" + ) + endif() endif() ################################################################################ diff --git a/CPPLINT.cfg b/CPPLINT.cfg index 30ec5df6..55023bcb 100644 --- a/CPPLINT.cfg +++ b/CPPLINT.cfg @@ -1,3 +1,4 @@ set noparent linelength=100 -filter=+build,+legal,+readability,+runtime,+whitespace,-runtime/references,-runtime/printf +exclude_files=^deps +filter=+build,-build/header_guard,+legal,+readability,+runtime,-runtime/references,+whitespace,-whitespace/braces,-whitespace/indent_namespace diff --git a/cmake/FindSHUM.cmake b/cmake/FindSHUM.cmake index 36a3d948..613d6f12 100644 --- a/cmake/FindSHUM.cmake +++ b/cmake/FindSHUM.cmake @@ -30,7 +30,8 @@ This will define the following variables: Notes ^^^^^ -To guide the search process, set the SHUM_ROOT environment variable or CMake variable to the path to the SHUM build directory. +To guide the search process, set the SHUM_ROOT environment variable or CMake +variable to the path to the SHUM build directory. #]=======================================================================] @@ -68,7 +69,7 @@ set(SHUM_LIBRARIES ${SHUM_LATLON_EQ_GRIDS_LIBRARY} ${SHUM_LIBRARY}) -if (SHUM_ROOT AND (NOT EXISTS "${SHUM_ROOT}/include" OR NOT EXISTS "${SHUM_ROOT}/lib")) +if(SHUM_ROOT AND (NOT EXISTS "${SHUM_ROOT}/include" OR NOT EXISTS "${SHUM_ROOT}/lib")) message(WARNING "\ The 'include' and/or 'lib' subdirectories of the SHUM build directory haven't been found.\n\ Locate a build or rebuild SHUM.\n\ diff --git a/cmake/opsinputs_functions.cmake b/cmake/opsinputs_functions.cmake index 0476db90..d9f746b3 100644 --- a/cmake/opsinputs_functions.cmake +++ b/cmake/opsinputs_functions.cmake @@ -11,12 +11,12 @@ # folder, preserving subfolder hierarchy. function(CREATE_SYMLINKS src dst) file(MAKE_DIRECTORY ${dst}) - foreach (FILENAME ${ARGN}) + foreach(FILENAME ${ARGN}) get_filename_component(absolute_subdir ${src}/${FILENAME} DIRECTORY) file(RELATIVE_PATH relative_subdir ${src} ${absolute_subdir}) file(MAKE_DIRECTORY ${dst}/${relative_subdir}) execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${src}/${FILENAME} ${dst}/${FILENAME}) - endforeach(FILENAME) + endforeach() endfunction() diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 0ec56d21..debb5e6b 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -21,7 +21,7 @@ ${CMAKE_Fortran_FLAGS}" -frange-check \ ${CMAKE_Fortran_DEBUG_FLAGS}" ) -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel") set(OPS_DEFAULT_Fortran_FLAGS "\ -warn alignments,declarations,errors,general,ignore_loc,nointerfaces,notruncated_source,shape,stderrors,uncalled,unused,usage \ -implicitnone \ @@ -33,7 +33,7 @@ elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel") -assume norealloc_lhs \ ${CMAKE_Fortran_FLAGS}" ) -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Flang") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Flang") set(OPS_DEFAULT_Fortran_FLAGS "\ -fdefault-integer-8 -fdefault-real-8 \ ${CMAKE_Fortran_FLAGS}" @@ -41,21 +41,21 @@ ${CMAKE_Fortran_FLAGS}" set(CMAKE_Fortran_DEBUG_FLAGS "\ -check bounds \ -check format \ --check pointers \ +-check pointers \ -check uninit \ ${CMAKE_Fortran_DEBUG_FLAGS}" ) -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "NVHPC") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "NVHPC") set(OPS_DEFAULT_Fortran_FLAGS "\ -i8 -r8 \ ${CMAKE_Fortran_FLAGS}" ) -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Cray") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Cray") set(OPS_DEFAULT_Fortran_FLAGS "\ -sdefault64 \ ${CMAKE_Fortran_FLAGS}" ) -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "NAG") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "NAG") set(OPS_DEFAULT_Fortran_FLAGS "\ -double \ ${CMAKE_Fortran_FLAGS}" @@ -67,7 +67,7 @@ endif() list( APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake ) -if( NOT (MPI_FOUND AND MPI_Fortran_FOUND) ) +if( NOT ( MPI_FOUND AND MPI_Fortran_FOUND ) ) find_package( MPI REQUIRED COMPONENTS Fortran ) endif() diff --git a/deps/gcom/CMakeLists.txt b/deps/gcom/CMakeLists.txt index 9ec82732..cf0f09df 100644 --- a/deps/gcom/CMakeLists.txt +++ b/deps/gcom/CMakeLists.txt @@ -218,16 +218,16 @@ else() TARGET gcom SOURCES ${GCOM_SOURCE_FILES}) endif() - -target_compile_definitions(gcom PRIVATE - GC_VERSION="'7.2'" - GC_DESCRIP="'MPP'" + +target_compile_definitions(gcom PRIVATE + GC_VERSION="'7.2'" + GC_DESCRIP="'MPP'" GC_BUILD_DATE="'927'" - MPI_SRC - MPILIB_32B - PREC_64B - GC__FORTERRUNIT=0 - GC__FLUSHUNIT6 + MPI_SRC + MPILIB_32B + PREC_64B + GC__FORTERRUNIT=0 + GC__FLUSHUNIT6 # USE_MPIF_INCLUDE ) diff --git a/deps/ops/CMakeLists.txt b/deps/ops/CMakeLists.txt index 10ba94e2..0e55dcb8 100644 --- a/deps/ops/CMakeLists.txt +++ b/deps/ops/CMakeLists.txt @@ -110,17 +110,17 @@ else() SOURCES ${OPS_SOURCE_FILES}) endif() -target_compile_definitions(ops PRIVATE +target_compile_definitions(ops PRIVATE EXTERNAL_GCOM - FORTRAN_VERSION=2003 + FORTRAN_VERSION=2003 FDBK_OUT LITTLE_END - UNDERSCORE + UNDERSCORE LOWERCASE C_LOW_U - C_LONG_LONG_INT - FRL8 - _FILE_OFFSET_BITS=64 LFS + C_LONG_LONG_INT + FRL8 + _FILE_OFFSET_BITS=64 LFS _LARGEFILE_SOURCE ) diff --git a/src/opsinputs/CMakeLists.txt b/src/opsinputs/CMakeLists.txt index aefc9073..7e4ee9d7 100644 --- a/src/opsinputs/CMakeLists.txt +++ b/src/opsinputs/CMakeLists.txt @@ -1,7 +1,7 @@ # (C) Crown Copyright 2020, the Met Office. All rights reserved. # -list( APPEND opsinputs_src_files +list(APPEND opsinputs_src_files opsinputs_cxfields_mod.F90 opsinputs_fill_mod.F90 opsinputs_obsspace_f.cc @@ -41,20 +41,20 @@ list( APPEND opsinputs_src_files # in particular assuming that integers and reals without kind are 64-bit. if("${CMAKE_Fortran_COMPILER_ID}" MATCHES "GNU") set(FORTRAN_FLAGS_64_BIT_TYPES "-fdefault-real-8 -fdefault-integer-8") -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Intel") set(FORTRAN_FLAGS_64_BIT_TYPES "-integer-size 64 -real-size 64") -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "NAG") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "NAG") set(FORTRAN_FLAGS_64_BIT_TYPES "-double") -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Flang") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Flang") set(FORTRAN_FLAGS_64_BIT_TYPES "-fdefault-integer-8 -fdefault-real-8") -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Cray") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Cray") set(FORTRAN_FLAGS_64_BIT_TYPES "-sdefault64") endif() -if ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Cray") +if("${CMAKE_Fortran_COMPILER_ID}" MATCHES "Cray") set_source_files_properties(opsinputs_cxgenerate_mod.F90 PROPERTIES COMPILE_OPTIONS "-sdefault64") -elseif ("${CMAKE_Fortran_COMPILER_ID}" MATCHES "NVHPC") +elseif("${CMAKE_Fortran_COMPILER_ID}" MATCHES "NVHPC") set_source_files_properties(opsinputs_cxgenerate_mod.F90 PROPERTIES COMPILE_FLAGS "-i8 -r8") else() @@ -67,12 +67,13 @@ endif() set_source_files_properties(opsinputs_cxgenerate_mod.F90 PROPERTIES INCLUDE_DIRECTORIES ${CMAKE_CURRENT_SOURCE_DIR}/../../deps/ops/stubs/OpsMod_CXGenerate) -ecbuild_add_library( TARGET opsinputs - SOURCES ${opsinputs_src_files} - INSTALL_HEADERS LISTED - HEADER_DESTINATION ${INSTALL_INCLUDE_DIR}/opsinputs - LINKER_LANGUAGE ${OPSINPUTS_LINKER_LANGUAGE} - PRIVATE_INCLUDES ${OPS_INCLUDE_DIR} ) +ecbuild_add_library( + TARGET opsinputs + SOURCES ${opsinputs_src_files} + INSTALL_HEADERS LISTED + HEADER_DESTINATION ${INSTALL_INCLUDE_DIR}/opsinputs + LINKER_LANGUAGE ${OPSINPUTS_LINKER_LANGUAGE} + PRIVATE_INCLUDES ${OPS_INCLUDE_DIR}) target_link_libraries( opsinputs PUBLIC ufo ioda oops PRIVATE ops ) ## Include paths diff --git a/src/opsinputs/CxWriter.cc b/src/opsinputs/CxWriter.cc index e72a54a0..d1d64b4e 100644 --- a/src/opsinputs/CxWriter.cc +++ b/src/opsinputs/CxWriter.cc @@ -5,6 +5,7 @@ #include "opsinputs/CxWriter.h" +#include #include #include diff --git a/src/opsinputs/LocalEnvironment.cc b/src/opsinputs/LocalEnvironment.cc index 27a11c7a..65056c1f 100644 --- a/src/opsinputs/LocalEnvironment.cc +++ b/src/opsinputs/LocalEnvironment.cc @@ -6,6 +6,8 @@ #include "opsinputs/LocalEnvironment.h" #include +#include +#include namespace opsinputs { diff --git a/src/opsinputs/VarObsWriter.cc b/src/opsinputs/VarObsWriter.cc index 63853deb..18b21122 100644 --- a/src/opsinputs/VarObsWriter.cc +++ b/src/opsinputs/VarObsWriter.cc @@ -5,6 +5,8 @@ #include "opsinputs/VarObsWriter.h" +#include +#include #include #include diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e3ab1b3b..b64debc3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -23,32 +23,30 @@ include( opsinputs_functions ) # - DONT_SET_OPS_OUTPUT_DIR_ENV_VAR: if true, OPS environment variables specifying output folders # won't be set, so the output folder needs to be defined in the YAML file. function( ADD_WRITER_TEST ) - set( options DONT_SET_OPS_OUTPUT_DIR_ENV_VAR) + set( options DONT_SET_OPS_OUTPUT_DIR_ENV_VAR ) set( single_value_args NAME YAML NAMELIST MPI ) - set( multi_value_args DATA) + set( multi_value_args DATA ) cmake_parse_arguments( _PAR "${options}" "${single_value_args}" "${multi_value_args}" - ${_FIRST_ARG} ${ARGN} ) + ${_FIRST_ARG} ${ARGN} ) if(_PAR_UNPARSED_ARGUMENTS) ecbuild_critical("Unknown keywords given to ADD_WRITER_TEST(): \"${_PAR_UNPARSED_ARGUMENTS}\"") endif() list( APPEND opsinputs_test_input ${_PAR_YAML} ) list( APPEND opsinputs_test_input ${_PAR_NAMELIST} ) - set ( opsinputs_test_input ${opsinputs_test_input} PARENT_SCOPE ) - list( APPEND opsinputs_test_data ${_PAR_DATA}) + set( opsinputs_test_input ${opsinputs_test_input} PARENT_SCOPE ) + list( APPEND opsinputs_test_data ${_PAR_DATA} ) set( opsinputs_test_data ${opsinputs_test_data} PARENT_SCOPE ) - set( environment - OOPS_TRAPFPE=1 - OPSINPUTS_OPSPROG_RUNNER=${OPSINPUTS_OPSPROG_RUNNER} ) - if ( NOT ${_PAR_DONT_SET_OPS_OUTPUT_DIR_ENV_VAR} ) - list ( APPEND environment + set( environment OOPS_TRAPFPE=1 OPSINPUTS_OPSPROG_RUNNER=${OPSINPUTS_OPSPROG_RUNNER} ) + if( NOT ${_PAR_DONT_SET_OPS_OUTPUT_DIR_ENV_VAR} ) + list( APPEND environment OPS_VAROB_OUTPUT_DIR=${OPSINPUTS_OUTPUT_DIR}/test_opsinputs_${_PAR_NAME} OPS_CX_DIR_LIST=${OPSINPUTS_OUTPUT_DIR}/test_opsinputs_${_PAR_NAME} ) endif() - if (NOT _PAR_MPI) - set(_PAR_MPI 1) + if(NOT _PAR_MPI) + set(_PAR_MPI 1) endif() ecbuild_add_test( TARGET test_opsinputs_${_PAR_NAME} COMMAND ${CMAKE_BINARY_DIR}/bin/test_OpsInputsFilters.x @@ -59,8 +57,8 @@ function( ADD_WRITER_TEST ) set_tests_properties( test_opsinputs_${_PAR_NAME} PROPERTIES FIXTURES_REQUIRED CleanOutputDir ) endfunction() -set( OPSINPUTS_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/testoutput) -set( OPSINPUTS_OPSPROG_RUNNER ${CMAKE_CURRENT_BINARY_DIR}/opsprog_runner.sh) +set( OPSINPUTS_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/testoutput ) +set( OPSINPUTS_OPSPROG_RUNNER ${CMAKE_CURRENT_BINARY_DIR}/opsprog_runner.sh ) # Shell script running OPS programs with PATH set appropriately get_target_property( OPSPROG_BIN_DIR OpsProg_PrintVarobs RUNTIME_OUTPUT_DIRECTORY ) @@ -84,7 +82,7 @@ ecbuild_add_executable( TARGET test_OpsInputsFilters.x opsinputs/VarObsCheckerParameters.h mains/TestObsFilters.cc LIBS opsinputs ) -if (ufo_SOURCE_DIR) +if(ufo_SOURCE_DIR) target_include_directories(test_OpsInputsFilters.x PRIVATE ${ufo_SOURCE_DIR} ) @@ -97,7 +95,7 @@ endif() # Cleans up the output directory ecbuild_add_test( TARGET test_opsinputs_varobswriter_setup COMMAND ${CMAKE_COMMAND} - ARGS "-E" "remove_directory" ${OPSINPUTS_OUTPUT_DIR}) + ARGS "-E" "remove_directory" ${OPSINPUTS_OUTPUT_DIR} ) set_tests_properties(test_opsinputs_varobswriter_setup PROPERTIES FIXTURES_SETUP CleanOutputDir) ### VarObsWriter tests @@ -375,7 +373,7 @@ ADD_WRITER_TEST(NAME varobswriter_globalnamelist_epsmws YAML varobswriter_globalnamelist_epsmws.yaml NAMELIST ../../etc/global/varobs/EPSMWS.nl DATA varobs_globalnamelist_epsmws.nc4) - + # Tests the UKV namelist files in the etc directory ADD_WRITER_TEST(NAME varobswriter_ukvnamelist_seviviasr @@ -661,7 +659,7 @@ ADD_WRITER_TEST(NAME cxwriter_globalnamelist_epsmws ADD_WRITER_TEST(NAME cxwriter_globalnamelist_sternamwr YAML cxwriter_globalnamelist_sternamwr.yaml NAMELIST ../../etc/global/cx/SternaMWR.nl - DATA cx_globalnamelist_sternamwr.nc4 dummy.nc4) + DATA cx_globalnamelist_sternamwr.nc4 dummy.nc4) ADD_WRITER_TEST(NAME cxwriter_globalnamelist_ssmis YAML cxwriter_globalnamelist_ssmis.yaml NAMELIST ../../etc/global/cx/SSMIS.nl @@ -760,16 +758,14 @@ ecbuild_add_test( TARGET test_opsinputs_mpiexceptionsynchronizer ARGS "testinput/empty.yaml" ENVIRONMENT OOPS_TRAPFPE=1 MPI 4 - LIBS opsinputs) + LIBS opsinputs ) ### Final things to do # Create symlinks to test inputs and data files CREATE_SYMLINKS( ${CMAKE_CURRENT_SOURCE_DIR}/testinput ${CMAKE_CURRENT_BINARY_DIR}/testinput ${opsinputs_test_input} ) -CREATE_SYMLINKS( ${CMAKE_CURRENT_SOURCE_DIR}/testinput ${CMAKE_CURRENT_BINARY_DIR}/Data ${opsinputs_test_data} ) +CREATE_SYMLINKS( ${CMAKE_CURRENT_SOURCE_DIR}/testinput ${CMAKE_CURRENT_BINARY_DIR}/Data ${opsinputs_test_data} ) # Add files to cmake resources list( TRANSFORM opsinputs_test_input PREPEND testinput/ ) -ecbuild_add_resources( TARGET opsinputs_test_scripts - SOURCES_PACK - ${opsinputs_test_input} ) +ecbuild_add_resources( TARGET opsinputs_test_scripts SOURCES_PACK ${opsinputs_test_input} ) diff --git a/test/opsinputs/CheckerUtils.cc b/test/opsinputs/CheckerUtils.cc index dbc59e18..1280b2ee 100644 --- a/test/opsinputs/CheckerUtils.cc +++ b/test/opsinputs/CheckerUtils.cc @@ -3,9 +3,15 @@ * */ +#include #include #include +#include +#include #include +#include +#include +#include #include #include diff --git a/test/opsinputs/CxChecker.cc b/test/opsinputs/CxChecker.cc index e83354ca..770e98b1 100644 --- a/test/opsinputs/CxChecker.cc +++ b/test/opsinputs/CxChecker.cc @@ -5,6 +5,10 @@ #include #include +#include +#include +#include +#include #include #include diff --git a/test/opsinputs/TempFile.cc b/test/opsinputs/TempFile.cc index 70a141d8..b6af816a 100644 --- a/test/opsinputs/TempFile.cc +++ b/test/opsinputs/TempFile.cc @@ -5,6 +5,9 @@ #include "../../test/opsinputs/TempFile.h" +#include +#include + namespace opsinputs { namespace test { diff --git a/test/opsinputs/VarObsChecker.cc b/test/opsinputs/VarObsChecker.cc index fd86d2d2..023d7efa 100644 --- a/test/opsinputs/VarObsChecker.cc +++ b/test/opsinputs/VarObsChecker.cc @@ -5,6 +5,10 @@ #include #include +#include +#include +#include +#include #include #include