Revision 20fa4ce8d89369441dc4f8a74d62611e8dfa36ea authored by Matthew Woehlke on 18 July 2024, 16:07:26 UTC, committed by Matthew Woehlke on 23 July 2024, 16:13:39 UTC
In order to support generation of Common Package Specifications, the
mechanisms CMake uses to export package information need to be made more
abstract. The prior commits began this refactoring; this continues by
(actually) restructuring the classes used to generate the actual export files.
To minimize churn, this introduces virtual base classes and
diamond inheritance in order to separate logic which is format-agnostic
but depends on the export mode (build-tree versus install-tree) from
logic which is format-specific but mode-agnostic.

This could probably be refactored further to use helper classes instead,
and a future commit may do that, however an initial attempt to do that
was proving even more invasive, such that this approach was deemed more
manageable.

While we're at it, add 'const' in more places where possible.
1 parent 6c66340
Raw File
CTestCustom.cmake.in
list(APPEND CTEST_CUSTOM_ERROR_MATCH
  "ERROR:")

list(APPEND CTEST_CUSTOM_WARNING_EXCEPTION
  "warning: cast from 'char\\*' to 'cmCursesWidget\\*' increases required alignment of target type" # Occurs when using Solaris's system libform
  "xtree.[0-9]+. : warning C4702: unreachable code"
  "warning LNK4221"
  "warning LNK4204" # Occurs by race condition with objects in small libs
  "variable .var_args[2]*. is used before its value is set"
  "warning: variable .__d[01]. was set but never used" # FD_ZERO on NVHPC
  "jobserver unavailable"
  "warning: \\(Long double usage is reported only once for each file"
  "warning: To disable this warning use"
  "could not be inlined"
  "libcm(curl|expat).*has no symbols"
  "cm(curl|expat).build/[^ ]*.o has no symbols"
  "not sorted slower link editing will result"
  "stl_deque.h:479"
  "Utilities.cmzlib."
  "Utilities.cmzstd."
  "Utilities.cmbzip2."
  "Source.CTest.Curl"
  "Source.CursesDialog.form"
  "Utilities.cmcurl"
  "Utilities.cmexpat."
  "Utilities.cmlibarchive"
  "warning: declaration of .single. shadows a global declaration"
  "/usr/include.*(warning|note).*shadowed declaration is here"
  "/usr/bin/ld.*warning.*-..*directory.name.*bin.*does not exist"
  "Redeclaration of .send..... with a different storage class specifier"
  "is not used for resolving any symbol"
  "Clock skew detected"
  "remark\\(1209"
  "remark: .*LOOP WAS VECTORIZED"
  "warning .980: wrong number of actual arguments to intrinsic function .std::basic_"
  "LINK : warning LNK4089: all references to.*ADVAPI32.dll.*discarded by /OPT:REF"
  "LINK : warning LNK4089: all references to.*CRYPT32.dll.*discarded by /OPT:REF"
  "LINK : warning LNK4089: all references to.*PSAPI.DLL.*discarded by /OPT:REF"
  "LINK : warning LNK4089: all references to.*RPCRT4.dll.*discarded by /OPT:REF"
  "LINK : warning LNK4089: all references to.*SHELL32.dll.*discarded by /OPT:REF"
  "LINK : warning LNK4089: all references to.*USER32.dll.*discarded by /OPT:REF"
  "LINK : warning LNK4089: all references to.*ole32.dll.*discarded by /OPT:REF"
  "Warning.*: .*/Utilities/KWIML/test/test_int_format.h.* # Redundant preprocessing concatenation"
  "Warning: library was too large for page size.*"
  "Warning: public.*_archive_.*in module.*archive_*clashes with prior module.*archive_.*"
  "Warning: public.*BZ2_bz.*in module.*bzlib.*clashes with prior module.*bzlib.*"
  "Warning: public.*_archive.*clashes with prior module.*"
  "Warning: LINN32: Last line.*is less.*"
  "Warning: Olimit was exceeded on function.*"
  "Warning: To override Olimit for all functions in file.*"
  "Warning: Function .* can throw only the exceptions thrown by the function .* it overrides\\."
  "WarningMessagesDialog\\.cxx"
  "warning.*directory name.*CMake-Xcode.*/bin/.*does not exist.*"
  "stl_deque.h:1051"
  "Tests/CMakeLib/testCTestResourceSpec.cxx:.*warning: missing initializer for member.*cmCTestResourceSpec::.*" # GCC 4.8 disagrees with later compilers on C++11 initializer list conversion
  "(Lexer|Parser).*warning.*conversion.*may (alter its value|change the sign)"
  "(Lexer|Parser).*warning.*(statement is unreachable|will never be executed)"
  "(Lexer|Parser).*warning.*variable.*was set but never used"
  "LexerParser.*warning.*empty expression statement has no effect; remove unnecessary"
  "PGC-W-0095-Type cast required for this conversion.*ProcessUNIX.c"
  "[Qq]t([Cc]ore|[Gg]ui|[Ww]idgets).*warning.*conversion.*may alter its value"
  "warning:.*is.*very unsafe.*consider using.*"
  "warning:.*is.*misused, please use.*"
  "cmake.version.manifest.*manifest authoring warning.*Unrecognized Element"
  "cc-3968 CC: WARNING File.*" # "implicit" truncation by static_cast
  "ld: warning: directory not found for option .-(F|L)"
  "ld: warning .*/libgcc.a archive's cputype"
  "ld: warning: ignoring file .*/libgcc.a, file was built for archive which is not the architecture being linked"
  "ld: warning: in .*/libgcc.a, file is not of required architecture"
  "ld: warning: symbol .(deflate|inflate)_copyright. has differing sizes" # system libz and QtCore disagree
  "warning.*This version of Mac OS X is unsupported"
  "clang.*: warning: argument unused during compilation: .-g"
  "note: in expansion of macro" # diagnostic context note
  "note: expanded from macro" # diagnostic context note
  "cm(StringCommand|CTestTestHandler)\\.cxx.*warning.*rand.*may return deterministic values"
  "cm(StringCommand|CTestTestHandler)\\.cxx.*warning.*rand.*isn.*t random" # we do not do crypto
  "cm(StringCommand|CTestTestHandler)\\.cxx.*warning.*srand.*seed choices are.*poor" # we do not do crypto
  "cmFindPackageCommand.cxx.*: warning #177-D: parameter .* was declared but never referenced"
  "IPA warning: function.*multiply defined in"
  "LICENSE WARNING" # PGI license expiry.  Not useful in nightly testing.

  # Ignore compiler summary warning, assuming prior text has matched some
  # other warning expression:
  "[0-9,]+ warnings? generated." # Clang
  "compilation completed with warnings" # PGI
  "[0-9]+ Warning\\(s\\) detected" # SunPro

  # Ignore false positive on `cm::optional` usage from GCC
  "cmFileCommand.cxx:[0-9]*:[0-9]*: warning: '\\*\\(\\(void\\*\\)& tls_verify \\+2\\)' may be used uninitialized in this function \\[-Wmaybe-uninitialized\\]"
  "cmGlobalNinjaGenerator.cxx:[0-9]*:[0-9]*: warning: '.*cm::optional<CxxModuleMapFormat>::_mem\\)\\)' may be used uninitialized \\[-Wmaybe-uninitialized\\]"
  "cmGlobalNinjaGenerator.cxx:[0-9]*:[0-9]*: note: '.*cm::optional<CxxModuleMapFormat>::_mem\\)\\)' was declared here"
  "cmGlobalNinjaGenerator.cxx:[0-9]*:[0-9]*: warning: '\\*\\(\\(void\\*\\)& modmap_fmt \\+4\\)' may be used uninitialized in this function \\[-Wmaybe-uninitialized\\]"

  # clang-analyzer exceptions
  "cmListFileLexer.c:[0-9]+:[0-9]+: warning: Array subscript is undefined"
  "jsoncpp/src/.*:[0-9]+:[0-9]+: warning: Value stored to .* is never read"
  "liblzma/common/index_encoder.c:[0-9]+:[0-9]+: warning: Value stored to '[^']+' during its initialization is never read"
  "liblzma/liblzma/common/index.c:[0-9]+:[0-9]+: warning: Access to field '[^']+' results in a dereference of a null pointer"
  "liblzma/simple/x86.c:[0-9]+:[0-9]+: warning: The result of the '<<' expression is undefined"
  "librhash/librhash/.*:[0-9]+:[0-9]+: warning: The left operand of '[^']+' is a garbage value"
  "libuv/src/.*:[0-9]+:[0-9]+: warning: 1st function call argument is an uninitialized value"
  "libuv/src/.*:[0-9]+:[0-9]+: warning: Dereference of null pointer"
  "libuv/src/.*:[0-9]+:[0-9]+: warning: The left operand of '[^']+' is a garbage value"
  "nghttp2/lib/.*:[0-9]+:[0-9]+: warning: Access to field '[^']+' results in a dereference of a null pointer"
  "nghttp2/lib/.*:[0-9]+:[0-9]+: warning: Dereference of null pointer"
  "nghttp2/lib/.*:[0-9]+:[0-9]+: warning: Value stored to '[^']+' is never read"
  "zstd/lib/.*:[0-9]+:[0-9]+: warning: Assigned value is garbage or undefined"
  "zstd/lib/.*:[0-9]+:[0-9]+: warning: Dereference of null pointer"
  "zstd/lib/.*:[0-9]+:[0-9]+: warning: The right operand of .* is a garbage value due to array index out of bounds"
  )

if(NOT "@CMAKE_GENERATOR@" MATCHES "Xcode")
  list(APPEND CTEST_CUSTOM_COVERAGE_EXCLUDE
    "XCode"
    )
endif ()

list(APPEND CTEST_CUSTOM_COVERAGE_EXCLUDE
  # Exclude kwsys files from coverage results. They are reported
  # (with better coverage results) on kwsys dashboards...
  "/Source/(cm|kw)sys/"

  # Exclude try_compile sources from coverage results:
  "/CMakeFiles/CMakeTmp/"

  # Exclude Qt source files from coverage results:
  "[A-Za-z]./[Qq]t/qt-.+-opensource-src"
  )

list(APPEND CTEST_CUSTOM_MEMCHECK_IGNORE
  kwsys.testProcess-10 # See Source/kwsys/CTestCustom.cmake.in
  )
back to top