summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Help/command/add_compile_options.rst2
-rw-r--r--Help/command/ctest_build.rst5
-rw-r--r--Help/command/file.rst444
-rw-r--r--Help/command/target_compile_features.rst6
-rw-r--r--Help/index.rst1
-rw-r--r--Help/manual/cmake-compile-features.7.rst297
-rw-r--r--Help/manual/cmake-developer.7.rst45
-rw-r--r--Help/manual/cmake-generator-expressions.7.rst8
-rw-r--r--Help/manual/cmake-properties.7.rst6
-rw-r--r--Help/manual/cmake-variables.7.rst4
-rw-r--r--Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst4
-rw-r--r--Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst26
-rw-r--r--Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst8
-rw-r--r--Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst9
-rw-r--r--Help/prop_tgt/COMPILE_FEATURES.rst3
-rw-r--r--Help/prop_tgt/CXX_EXTENSIONS.rst7
-rw-r--r--Help/prop_tgt/CXX_STANDARD.rst3
-rw-r--r--Help/prop_tgt/CXX_STANDARD_REQUIRED.rst3
-rw-r--r--Help/prop_tgt/C_EXTENSIONS.rst15
-rw-r--r--Help/prop_tgt/C_STANDARD.rst30
-rw-r--r--Help/prop_tgt/C_STANDARD_REQUIRED.rst17
-rw-r--r--Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst4
-rw-r--r--Help/release/dev/cmake-gui-capture-output.rst6
-rw-r--r--Help/release/dev/compile-language-features.rst10
-rw-r--r--Help/release/dev/variable_watch-no-allowed-access.rst8
-rw-r--r--Help/release/dev/xcode-file-type.rst7
-rw-r--r--Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst3
-rw-r--r--Help/variable/CMAKE_CXX_EXTENSIONS.rst3
-rw-r--r--Help/variable/CMAKE_CXX_STANDARD.rst3
-rw-r--r--Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst3
-rw-r--r--Help/variable/CMAKE_C_COMPILE_FEATURES.rst11
-rw-r--r--Help/variable/CMAKE_C_EXTENSIONS.rst11
-rw-r--r--Help/variable/CMAKE_C_STANDARD.rst11
-rw-r--r--Help/variable/CMAKE_C_STANDARD_REQUIRED.rst11
-rw-r--r--Modules/CMakeCCompiler.cmake.in5
-rw-r--r--Modules/CMakeDetermineCompileFeatures.cmake42
-rw-r--r--Modules/CMakeTestCCompiler.cmake3
-rw-r--r--Modules/CheckLanguage.cmake2
-rw-r--r--Modules/CheckTypeSize.cmake2
-rw-r--r--Modules/Compiler/Clang-C-FeatureTests.cmake11
-rw-r--r--Modules/Compiler/Clang-C.cmake36
-rw-r--r--Modules/Compiler/Clang-CXX-FeatureTests.cmake69
-rw-r--r--Modules/Compiler/Clang-CXX.cmake27
-rw-r--r--Modules/Compiler/GNU-C-FeatureTests.cmake12
-rw-r--r--Modules/Compiler/GNU-C.cmake32
-rw-r--r--Modules/FindCUDA.cmake14
-rw-r--r--Modules/FindFreetype.cmake73
-rw-r--r--Modules/FindGTK2.cmake1
-rw-r--r--Modules/FindQt3.cmake4
-rw-r--r--Modules/FindQt4.cmake12
-rw-r--r--Modules/FindSDL_sound.cmake2
-rw-r--r--Modules/FortranCInterface/CMakeLists.txt2
-rw-r--r--Modules/FortranCInterface/Verify/CMakeLists.txt2
-rw-r--r--Modules/GNUInstallDirs.cmake28
-rw-r--r--Modules/IntelVSImplicitPath/CMakeLists.txt2
-rw-r--r--Modules/Internal/FeatureTesting.cmake2
-rw-r--r--Modules/Platform/OpenBSD.cmake16
-rw-r--r--Modules/Platform/Windows-GNU.cmake4
-rw-r--r--Modules/WriteCompilerDetectionHeader.cmake28
-rw-r--r--Source/CMakeVersion.cmake2
-rw-r--r--Source/CTest/cmCTestBuildAndTestHandler.cxx50
-rw-r--r--Source/CTest/cmParseCacheCoverage.cxx14
-rw-r--r--Source/CTest/cmParseGTMCoverage.cxx22
-rw-r--r--Source/CursesDialog/ccmake.cxx5
-rw-r--r--Source/QtDialog/QCMake.cxx22
-rw-r--r--Source/QtDialog/QCMake.h6
-rw-r--r--Source/cmCacheManager.cxx6
-rw-r--r--Source/cmExecuteProcessCommand.cxx10
-rw-r--r--Source/cmFileCommand.cxx14
-rw-r--r--Source/cmGeneratorExpression.cxx17
-rw-r--r--Source/cmGeneratorExpression.h5
-rw-r--r--Source/cmGeneratorExpressionEvaluator.cxx89
-rw-r--r--Source/cmGeneratorExpressionEvaluator.h2
-rw-r--r--Source/cmGeneratorTarget.cxx24
-rw-r--r--Source/cmGeneratorTarget.h6
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx77
-rw-r--r--Source/cmGlobalXCodeGenerator.h6
-rw-r--r--Source/cmLocalGenerator.cxx37
-rw-r--r--Source/cmMakefile.cxx388
-rw-r--r--Source/cmMakefile.h31
-rw-r--r--Source/cmMakefileTargetGenerator.cxx2
-rw-r--r--Source/cmNinjaNormalTargetGenerator.cxx10
-rw-r--r--Source/cmNinjaTargetGenerator.cxx2
-rw-r--r--Source/cmSystemTools.cxx60
-rw-r--r--Source/cmSystemTools.h25
-rw-r--r--Source/cmTarget.cxx27
-rw-r--r--Source/cmTarget.h9
-rw-r--r--Source/cmVariableWatch.cxx1
-rw-r--r--Source/cmVariableWatch.h1
-rw-r--r--Source/cmake.cxx13
-rw-r--r--Source/cmake.h6
-rw-r--r--Source/cmakemain.cxx6
-rw-r--r--Source/kwsys/ProcessUNIX.c6
-rw-r--r--Source/kwsys/SystemTools.cxx7
-rw-r--r--Tests/BuildDepends/CMakeLists.txt3
-rw-r--r--Tests/BuildDepends/Project/bar.cxx6
-rw-r--r--Tests/CMakeCommands/target_compile_features/CMakeLists.txt42
-rw-r--r--Tests/CMakeCommands/target_compile_features/lib_restrict.c9
-rw-r--r--Tests/CMakeCommands/target_compile_features/lib_restrict.h7
-rw-r--r--Tests/CMakeCommands/target_compile_features/main.c12
-rw-r--r--Tests/CMakeCommands/target_compile_features/restrict_user.c14
-rw-r--r--Tests/CMakeLists.txt8
-rw-r--r--Tests/CTestTestTimeout/CMakeLists.txt12
-rw-r--r--Tests/CTestTestTimeout/check.cmake9
-rw-r--r--Tests/CTestTestTimeout/sleep.c21
-rw-r--r--Tests/CTestTestTimeout/test.cmake.in13
-rw-r--r--Tests/CTestTestTimeout/timeout.c18
-rw-r--r--Tests/CTestTestTimeout/timeout.cmake2
-rw-r--r--Tests/CompileFeatures/CMakeLists.txt24
-rw-r--r--Tests/CompileFeatures/c_function_prototypes.c9
-rw-r--r--Tests/CompileFeatures/c_restrict.c7
-rw-r--r--Tests/CompileFeatures/c_static_assert.c2
-rw-r--r--Tests/CompileFeatures/c_variadic_macros.c15
-rw-r--r--Tests/CompileFeatures/genex_test.cpp21
-rw-r--r--Tests/CompileFeatures/main.c12
-rw-r--r--Tests/ExportImport/Export/Interface/CMakeLists.txt5
-rw-r--r--Tests/ExportImport/Import/Interface/CMakeLists.txt21
-rw-r--r--Tests/Fortran/CMakeLists.txt2
-rw-r--r--Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt10
-rw-r--r--Tests/MumpsCoverage/Accounts_ReceivableTest.cmcov304
-rw-r--r--Tests/MumpsCoverage/Accounts_ReceivableTest.mcov1445
-rw-r--r--Tests/MumpsCoverage/VistA-FOIA/Packages/Toolkit/Routines/XINDEX.m144
-rw-r--r--Tests/MumpsCoverage/VistA-FOIA/Packages/Uncategorized/ZZCOVTST.m36
-rw-r--r--Tests/MumpsCoverage/ZZCOVTST.cmcov38
-rw-r--r--Tests/MumpsCoverage/ZZCOVTST.mcov30
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-NEW-stderr.txt2
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-NEW.cmake8
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-OLD-stderr.txt2
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-OLD.cmake8
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-WARN-stderr.txt2
-rw-r--r--Tests/RunCMake/CMP0053/CMP0053-WARN.cmake6
-rw-r--r--Tests/RunCMake/CMP0053/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/CMP0053/RunCMakeTest.cmake5
-rw-r--r--Tests/RunCMake/CMakeLists.txt6
-rw-r--r--Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle-result.txt1
-rw-r--r--Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle-stderr.txt7
-rw-r--r--Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle.cmake15
-rw-r--r--Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved-result.txt1
-rw-r--r--Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved-stderr.txt1
-rw-r--r--Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved.cmake14
-rw-r--r--Tests/RunCMake/CompileFeatures/NoSupportedCFeatures-result.txt1
-rw-r--r--Tests/RunCMake/CompileFeatures/NoSupportedCFeatures-stderr.txt8
-rw-r--r--Tests/RunCMake/CompileFeatures/NoSupportedCFeatures.cmake5
-rw-r--r--Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex-result.txt1
-rw-r--r--Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex-stderr.txt6
-rw-r--r--Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex.cmake5
-rw-r--r--Tests/RunCMake/CompileFeatures/NonValidTarget1-result.txt1
-rw-r--r--Tests/RunCMake/CompileFeatures/NonValidTarget1-stderr.txt9
-rw-r--r--Tests/RunCMake/CompileFeatures/NonValidTarget1.cmake17
-rw-r--r--Tests/RunCMake/CompileFeatures/NonValidTarget2-result.txt1
-rw-r--r--Tests/RunCMake/CompileFeatures/NonValidTarget2-stderr.txt9
-rw-r--r--Tests/RunCMake/CompileFeatures/NonValidTarget2.cmake8
-rw-r--r--Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake19
-rw-r--r--Tests/RunCMake/CompileFeatures/empty.c7
-rw-r--r--Tests/RunCMake/CompileFeatures/generate_feature_list.cmake6
-rw-r--r--Tests/RunCMake/Configure/FailCopyFileABI-stdout.txt2
-rw-r--r--Tests/RunCMake/XcodeProject/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/XcodeProject/RunCMakeTest.cmake3
-rw-r--r--Tests/RunCMake/XcodeProject/XcodeFileType-check.cmake10
-rw-r--r--Tests/RunCMake/XcodeProject/XcodeFileType.cmake4
-rw-r--r--Tests/RunCMake/XcodeProject/main.c0
-rw-r--r--Tests/RunCMake/XcodeProject/src-default0
-rw-r--r--Tests/RunCMake/XcodeProject/src-explicit0
-rw-r--r--Tests/RunCMake/XcodeProject/src-lastKnown0
-rw-r--r--Tests/RunCMake/file/CMakeLists.txt3
-rw-r--r--Tests/RunCMake/file/FileOpenFailRead-result.txt1
-rw-r--r--Tests/RunCMake/file/FileOpenFailRead-stderr.txt6
-rw-r--r--Tests/RunCMake/file/FileOpenFailRead.cmake1
-rw-r--r--Tests/RunCMake/file/RunCMakeTest.cmake3
-rw-r--r--Tests/RunCMake/target_compile_features/RunCMakeTest.cmake2
-rw-r--r--Tests/RunCMake/target_compile_features/empty.c7
-rw-r--r--Tests/RunCMake/target_compile_features/no_matching_c_feature-result.txt1
-rw-r--r--Tests/RunCMake/target_compile_features/no_matching_c_feature-stderr.txt8
-rw-r--r--Tests/RunCMake/target_compile_features/no_matching_c_feature.cmake15
-rw-r--r--Tests/RunCMake/target_compile_features/not_a_c_feature-result.txt1
-rw-r--r--Tests/RunCMake/target_compile_features/not_a_c_feature-stderr.txt5
-rw-r--r--Tests/RunCMake/target_compile_features/not_a_c_feature.cmake6
-rw-r--r--Tests/SystemInformation/SystemInformation.in10
178 files changed, 2637 insertions, 2412 deletions
diff --git a/Help/command/add_compile_options.rst b/Help/command/add_compile_options.rst
index 5d71e11..214f4be 100644
--- a/Help/command/add_compile_options.rst
+++ b/Help/command/add_compile_options.rst
@@ -14,7 +14,7 @@ alternative commands exist to add preprocessor definitions
include directories (:command:`target_include_directories` and
:command:`include_directories`). See documentation of the
:prop_tgt:`directory <COMPILE_OPTIONS>` and
-:prop_tgt:` target <COMPILE_OPTIONS>` ``COMPILE_OPTIONS`` properties.
+:prop_tgt:`target <COMPILE_OPTIONS>` ``COMPILE_OPTIONS`` properties.
Arguments to ``add_compile_options`` may use "generator expressions" with
the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
diff --git a/Help/command/ctest_build.rst b/Help/command/ctest_build.rst
index ac2a0c1..1347b42 100644
--- a/Help/command/ctest_build.rst
+++ b/Help/command/ctest_build.rst
@@ -22,3 +22,8 @@ of build errors and warnings detected.
The APPEND option marks results for append to those previously
submitted to a dashboard server since the last ctest_start. Append
semantics are defined by the dashboard server in use.
+
+If set the contents of the variable CTEST_BUILD_FLAGS are passed as
+additional arguments to the underlying build command. This can e.g. be
+used to trigger a parallel build using the -j option of make. See
+:module:`ProcessorCount` for an example.
diff --git a/Help/command/file.rst b/Help/command/file.rst
index 83ade1d..14ca20c 100644
--- a/Help/command/file.rst
+++ b/Help/command/file.rst
@@ -3,211 +3,299 @@ file
File manipulation command.
+------------------------------------------------------------------------------
+
::
- file(WRITE filename "message to write"... )
- file(APPEND filename "message to write"... )
- file(READ filename variable [LIMIT numBytes] [OFFSET offset] [HEX])
- file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> filename variable)
- file(STRINGS filename variable [LIMIT_COUNT num]
- [LIMIT_INPUT numBytes] [LIMIT_OUTPUT numBytes]
- [LENGTH_MINIMUM numBytes] [LENGTH_MAXIMUM numBytes]
- [NEWLINE_CONSUME] [REGEX regex]
- [NO_HEX_CONVERSION])
- file(GLOB variable [RELATIVE path] [globbing expressions]...)
- file(GLOB_RECURSE variable [RELATIVE path]
- [FOLLOW_SYMLINKS] [globbing expressions]...)
- file(RENAME <oldname> <newname>)
- file(REMOVE [file1 ...])
- file(REMOVE_RECURSE [file1 ...])
- file(MAKE_DIRECTORY [directory1 directory2 ...])
- file(RELATIVE_PATH variable directory file)
- file(TO_CMAKE_PATH path result)
- file(TO_NATIVE_PATH path result)
- file(DOWNLOAD url file [INACTIVITY_TIMEOUT timeout]
- [TIMEOUT timeout] [STATUS status] [LOG log] [SHOW_PROGRESS]
- [EXPECTED_HASH ALGO=value] [EXPECTED_MD5 sum]
- [TLS_VERIFY on|off] [TLS_CAINFO file])
- file(UPLOAD filename url [INACTIVITY_TIMEOUT timeout]
- [TIMEOUT timeout] [STATUS status] [LOG log] [SHOW_PROGRESS])
- file(TIMESTAMP filename variable [<format string>] [UTC])
- file(GENERATE OUTPUT output_file
- <INPUT input_file|CONTENT input_content>
- [CONDITION expression])
-
-WRITE will write a message into a file called 'filename'. It
-overwrites the file if it already exists, and creates the file if it
-does not exist. (If the file is a build input, use configure_file to
-update the file only when its content changes.)
-
-APPEND will write a message into a file same as WRITE, except it will
-append it to the end of the file
-
-READ will read the content of a file and store it into the variable.
-It will start at the given offset and read up to numBytes. If the
-argument HEX is given, the binary data will be converted to
-hexadecimal representation and this will be stored in the variable.
-
-MD5, SHA1, SHA224, SHA256, SHA384, and SHA512 will compute a
-cryptographic hash of the content of a file.
-
-STRINGS will parse a list of ASCII strings from a file and store it in
-a variable. Binary data in the file are ignored. Carriage return
-(CR) characters are ignored. It works also for Intel Hex and Motorola
-S-record files, which are automatically converted to binary format
-when reading them. Disable this using NO_HEX_CONVERSION.
-
-LIMIT_COUNT sets the maximum number of strings to return. LIMIT_INPUT
-sets the maximum number of bytes to read from the input file.
-LIMIT_OUTPUT sets the maximum number of bytes to store in the output
-variable. LENGTH_MINIMUM sets the minimum length of a string to
-return. Shorter strings are ignored. LENGTH_MAXIMUM sets the maximum
-length of a string to return. Longer strings are split into strings
-no longer than the maximum length. NEWLINE_CONSUME allows newlines to
-be included in strings instead of terminating them.
-
-REGEX specifies a regular expression that a string must match to be
-returned. Typical usage
+ file(WRITE <filename> <content>...)
+ file(APPEND <filename> <content>...)
+
+Write ``<content>`` into a file called ``<filename>``. If the file does
+not exist, it will be created. If the file already exists, ``WRITE``
+mode will overwrite it and ``APPEND`` mode will append to the end.
+(If the file is a build input, use the :command:`configure_file` command
+to update the file only when its content changes.)
+
+------------------------------------------------------------------------------
+
+::
+
+ file(READ <filename> <variable>
+ [OFFSET <offset>] [LIMIT <max-in>] [HEX])
+
+Read content from a file called ``<filename>`` and store it in a
+``<variable>``. Optionally start from the given ``<offset>`` and
+read at most ``<max-in>`` bytes. The ``HEX`` option causes data to
+be converted to a hexadecimal representation (useful for binary data).
+
+------------------------------------------------------------------------------
::
+ file(STRINGS <filename> <variable> [<options>...])
+
+Parse a list of ASCII strings from ``<filename>`` and store it in
+``<variable>``. Binary data in the file are ignored. Carriage return
+(``\r``, CR) characters are ignored. The options are:
+
+``LENGTH_MAXIMUM <max-len>``
+ Consider only strings of at most a given length.
+
+``LENGTH_MINIMUM <min-len>``
+ Consider only strings of at least a given length.
+
+``LIMIT_COUNT <max-num>``
+ Limit the number of distinct strings to be extracted.
+
+``LIMIT_INPUT <max-in>``
+ Limit the number of input bytes to read from the file.
+
+``LIMIT_OUTPUT <max-out>``
+ Limit the number of total bytes to store in the ``<variable>``.
+
+``NEWLINE_CONSUME``
+ Treat newline characters (``\n``, LF) as part of string content
+ instead of terminating at them.
+
+``NO_HEX_CONVERSION``
+ Intel Hex and Motorola S-record files are automatically converted to
+ binary while reading unless this option is given.
+
+``REGEX <regex>``
+ Consider only strings that match the given regular expression.
+
+For example, the code
+
+.. code-block:: cmake
+
file(STRINGS myfile.txt myfile)
-stores a list in the variable "myfile" in which each item is a line
+stores a list in the variable ``myfile`` in which each item is a line
from the input file.
-GLOB will generate a list of all files that match the globbing
-expressions and store it into the variable. Globbing expressions are
-similar to regular expressions, but much simpler. If RELATIVE flag is
-specified for an expression, the results will be returned as a
-relative path to the given path. (We do not recommend using GLOB to
-collect a list of source files from your source tree. If no
-CMakeLists.txt file changes when a source is added or removed then the
-generated build system cannot know when to ask CMake to regenerate.)
+------------------------------------------------------------------------------
+
+::
+
+ file(<MD5|SHA1|SHA224|SHA256|SHA384|SHA512> <filename> <variable>)
+
+Compute a cryptographic hash of the content of ``<filename>`` and
+store it in a ``<variable>``.
+
+------------------------------------------------------------------------------
+
+::
+
+ file(GLOB <variable> [RELATIVE <path>] [<globbing-expressions>...])
+ file(GLOB_RECURSE <variable> [RELATIVE <path>]
+ [FOLLOW_SYMLINKS] [<globbing-expressions>...])
+
+Generate a list of files that match the ``<globbing-expressions>`` and
+store it into the ``<variable>``. Globbing expressions are similar to
+regular expressions, but much simpler. If ``RELATIVE`` flag is
+specified, the results will be returned as relative paths to the given
+path.
+
+.. note::
+ We do not recommend using GLOB to collect a list of source files from
+ your source tree. If no CMakeLists.txt file changes when a source is
+ added or removed then the generated build system cannot know when to
+ ask CMake to regenerate.
+
+Examples of globbing expressions include::
+
+ *.cxx - match all files with extension cxx
+ *.vt? - match all files with extension vta,...,vtz
+ f[3-5].txt - match files f3.txt, f4.txt, f5.txt
+
+The ``GLOB_RECURSE`` mode will traverse all the subdirectories of the
+matched directory and match the files. Subdirectories that are symlinks
+are only traversed if ``FOLLOW_SYMLINKS`` is given or policy
+:policy:`CMP0009` is not set to ``NEW``.
+
+Examples of recursive globbing include::
+
+ /dir/*.py - match all python files in /dir and subdirectories
+
+------------------------------------------------------------------------------
+
+::
+
+ file(RENAME <oldname> <newname>)
+
+Move a file or directory within a filesystem from ``<oldname>`` to
+``<newname>``, replacing the destination atomically.
+
+------------------------------------------------------------------------------
+
+::
+
+ file(REMOVE [<files>...])
+ file(REMOVE_RECURSE [<files>...])
+
+Remove the given files. The ``REMOVE_RECURSE`` mode will remove the given
+files and directories, also non-empty directories
+
+------------------------------------------------------------------------------
+
+::
+
+ file(MAKE_DIRECTORY [<directories>...])
-Examples of globbing expressions include:
+Create the given directories and their parents as needed.
+
+------------------------------------------------------------------------------
::
- *.cxx - match all files with extension cxx
- *.vt? - match all files with extension vta,...,vtz
- f[3-5].txt - match files f3.txt, f4.txt, f5.txt
+ file(RELATIVE_PATH <variable> <directory> <file>)
-GLOB_RECURSE will generate a list similar to the regular GLOB, except
-it will traverse all the subdirectories of the matched directory and
-match the files. Subdirectories that are symlinks are only traversed
-if FOLLOW_SYMLINKS is given or cmake policy CMP0009 is not set to NEW.
-See cmake --help-policy CMP0009 for more information.
+Compute the relative path from a ``<directory>`` to a ``<file>`` and
+store it in the ``<variable>``.
-Examples of recursive globbing include:
+------------------------------------------------------------------------------
::
- /dir/*.py - match all python files in /dir and subdirectories
-
-MAKE_DIRECTORY will create the given directories, also if their parent
-directories don't exist yet
-
-RENAME moves a file or directory within a filesystem, replacing the
-destination atomically.
-
-REMOVE will remove the given files, also in subdirectories
-
-REMOVE_RECURSE will remove the given files and directories, also
-non-empty directories
-
-RELATIVE_PATH will determine relative path from directory to the given
-file.
-
-TO_CMAKE_PATH will convert path into a cmake style path with unix /.
-The input can be a single path or a system path like "$ENV{PATH}".
-Note the double quotes around the ENV call TO_CMAKE_PATH only takes
-one argument. This command will also convert the native list
-delimiters for a list of paths like the PATH environment variable.
-
-TO_NATIVE_PATH works just like TO_CMAKE_PATH, but will convert from a
-cmake style path into the native path style \ for windows and / for
-UNIX.
-
-DOWNLOAD will download the given URL to the given file. If LOG var is
-specified a log of the download will be put in var. If STATUS var is
-specified the status of the operation will be put in var. The status
-is returned in a list of length 2. The first element is the numeric
-return value for the operation, and the second element is a string
-value for the error. A 0 numeric error means no error in the
-operation. If TIMEOUT time is specified, the operation will timeout
-after time seconds, time should be specified as an integer. The
-INACTIVITY_TIMEOUT specifies an integer number of seconds of
-inactivity after which the operation should terminate. If
-EXPECTED_HASH ALGO=value is specified, the operation will verify that
-the downloaded file's actual hash matches the expected value, where
-ALGO is one of MD5, SHA1, SHA224, SHA256, SHA384, or SHA512. If it
-does not match, the operation fails with an error. ("EXPECTED_MD5
-sum" is short-hand for "EXPECTED_HASH MD5=sum".) If SHOW_PROGRESS is
-specified, progress information will be printed as status messages
-until the operation is complete. For https URLs CMake must be built
-with OpenSSL. TLS/SSL certificates are not checked by default. Set
-TLS_VERIFY to ON to check certificates and/or use EXPECTED_HASH to
-verify downloaded content. Set TLS_CAINFO to specify a custom
-Certificate Authority file. If either TLS option is not given CMake
-will check variables CMAKE_TLS_VERIFY and CMAKE_TLS_CAINFO,
-respectively.
-
-UPLOAD will upload the given file to the given URL. If LOG var is
-specified a log of the upload will be put in var. If STATUS var is
-specified the status of the operation will be put in var. The status
-is returned in a list of length 2. The first element is the numeric
-return value for the operation, and the second element is a string
-value for the error. A 0 numeric error means no error in the
-operation. If TIMEOUT time is specified, the operation will timeout
-after time seconds, time should be specified as an integer. The
-INACTIVITY_TIMEOUT specifies an integer number of seconds of
-inactivity after which the operation should terminate. If
-SHOW_PROGRESS is specified, progress information will be printed as
-status messages until the operation is complete.
-
-TIMESTAMP will write a string representation of the modification time
-of filename to variable.
-
-Should the command be unable to obtain a timestamp variable will be
-set to the empty string "".
-
-See documentation of the string TIMESTAMP sub-command for more
-details.
-
-The file() command also provides COPY and INSTALL signatures:
+ file(TO_CMAKE_PATH "<path>" <variable>)
+ file(TO_NATIVE_PATH "<path>" <variable>)
+
+The ``TO_CMAKE_PATH`` mode converts a native ``<path>`` into a cmake-style
+path with forward-slashes (``/``). The input can be a single path or a
+system search path like ``$ENV{PATH}``. A search path will be converted
+to a cmake-style list separated by ``;`` characters.
+
+The ``TO_NATIVE_PATH`` mode converts a cmake-style ``<path>`` into a native
+path with platform-specific slashes (``\`` on Windows and ``/`` elsewhere).
+
+Always use double quotes around the ``<path>`` to be sure it is treated
+as a single argument to this command.
+
+------------------------------------------------------------------------------
+
+::
+
+ file(DOWNLOAD <url> <file> [<options>...])
+ file(UPLOAD <file> <url> [<options>...])
+
+The ``DOWNLOAD`` mode downloads the given ``<url>`` to a local ``<file>``.
+The ``UPLOAD`` mode uploads a local ``<file>`` to a given ``<url>``.
+
+Options to both ``DOWNLOAD`` and ``UPLOAD`` are:
+
+``INACTIVITY_TIMEOUT <seconds>``
+ Terminate the operation after a period of inactivity.
+
+``LOG <variable>``
+ Store a human-readable log of the operation in a variable.
+
+``SHOW_PROGRESS``
+ Print progress information as status messages until the operation is
+ complete.
+
+``STATUS <variable>``
+ Store the resulting status of the operation in a variable.
+ The status is a ``;`` separated list of length 2.
+ The first element is the numeric return value for the operation,
+ and the second element is a string value for the error.
+ A ``0`` numeric error means no error in the operation.
+
+``TIMEOUT <seconds>``
+ Terminate the operation after a given total time has elapsed.
+
+Additional options to ``DOWNLOAD`` are:
+
+``EXPECTED_HASH ALGO=<value>``
+
+ Verify that the downloaded content hash matches the expected value, where
+ ``ALGO`` is one of ``MD5``, ``SHA1``, ``SHA224``, ``SHA256``, ``SHA384``, or
+ ``SHA512``. If it does not match, the operation fails with an error.
+
+``EXPECTED_MD5 <value>``
+ Historical short-hand for ``EXPECTED_HASH MD5=<value>``.
+
+``TLS_VERIFY <ON|OFF>``
+ Specify whether to verify the server certificate for ``https://`` URLs.
+ The default is to *not* verify.
+
+``TLS_CAINFO <file>``
+ Specify a custom Certificate Authority file for ``https://`` URLs.
+
+For ``https://`` URLs CMake must be built with OpenSSL support. ``TLS/SSL``
+certificates are not checked by default. Set ``TLS_VERIFY`` to ``ON`` to
+check certificates and/or use ``EXPECTED_HASH`` to verify downloaded content.
+If neither ``TLS`` option is given CMake will check variables
+``CMAKE_TLS_VERIFY`` and ``CMAKE_TLS_CAINFO``, respectively.
+
+------------------------------------------------------------------------------
+
+::
+
+ file(TIMESTAMP <filename> <variable> [<format>] [UTC])
+
+Compute a string representation of the modification time of ``<filename>``
+and store it in ``<variable>``. Should the command be unable to obtain a
+timestamp variable will be set to the empty string ("").
+
+See the :command:`string(TIMESTAMP)` command for documentation of
+the ``<format>`` and ``UTC`` options.
+
+------------------------------------------------------------------------------
+
+::
+
+ file(GENERATE <options>...)
+
+Generate an output file for each build configuration supported by the current
+:manual:`CMake Generator <cmake-generators(7)>`. Evaluate
+:manual:`generator expressions <cmake-generator-expressions(7)>`
+from the input content to produce the output content. The options are:
+
+``CONDITION <condition>``
+ Generate the output file for a particular configuration only if
+ the condition is true. The condition must be either ``0`` or ``1``
+ after evaluating generator expressions.
+
+``CONTENT <content>``
+ Use the content given explicitly as input.
+
+``INPUT <input-file>``
+ Use the content from a given file as input.
+
+``OUTPUT <output-file>``
+ Specify the output file name to generate. Use generator expressions
+ such as ``$<CONFIG>`` to specify a configuration-specific output file
+ name. Multiple configurations may generate the same output file only
+ if the generated content is identical. Otherwise, the ``<output-file>``
+ must evaluate to an unique name for each configuration.
+
+Exactly one ``CONTENT`` or ``INPUT`` option must be given. A specific
+``OUTPUT`` file may be named by at most one invocation of ``file(GENERATE)``.
+
+------------------------------------------------------------------------------
::
- file(<COPY|INSTALL> files... DESTINATION <dir>
- [FILE_PERMISSIONS permissions...]
- [DIRECTORY_PERMISSIONS permissions...]
+ file(<COPY|INSTALL> <files>... DESTINATION <dir>
+ [FILE_PERMISSIONS <permissions>...]
+ [DIRECTORY_PERMISSIONS <permissions>...]
[NO_SOURCE_PERMISSIONS] [USE_SOURCE_PERMISSIONS]
[FILES_MATCHING]
[[PATTERN <pattern> | REGEX <regex>]
- [EXCLUDE] [PERMISSIONS permissions...]] [...])
+ [EXCLUDE] [PERMISSIONS <permissions>...]] [...])
-The COPY signature copies files, directories, and symlinks to a
+The ``COPY`` signature copies files, directories, and symlinks to a
destination folder. Relative input paths are evaluated with respect
to the current source directory, and a relative destination is
evaluated with respect to the current build directory. Copying
preserves input file timestamps, and optimizes out a file if it exists
at the destination with the same timestamp. Copying preserves input
-permissions unless explicit permissions or NO_SOURCE_PERMISSIONS are
-given (default is USE_SOURCE_PERMISSIONS). See the install(DIRECTORY)
-command for documentation of permissions, PATTERN, REGEX, and EXCLUDE
-options.
-
-The INSTALL signature differs slightly from COPY: it prints status
-messages, and NO_SOURCE_PERMISSIONS is default. Installation scripts
-generated by the install() command use this signature (with some
-undocumented options for internal use).
-
-GENERATE will write an <output_file> with content from an
-<input_file>, or from <input_content>. The output is generated
-conditionally based on the content of the <condition>. The file is
-written at CMake generate-time and the input may contain generator
-expressions. The <condition>, <output_file> and <input_file> may also
-contain generator expressions. The <condition> must evaluate to
-either '0' or '1'. The <output_file> must evaluate to a unique name
-among all configurations and among all invocations of file(GENERATE).
+permissions unless explicit permissions or ``NO_SOURCE_PERMISSIONS``
+are given (default is ``USE_SOURCE_PERMISSIONS``).
+See the :command:`install(DIRECTORY)` command for documentation of
+permissions, ``PATTERN``, ``REGEX``, and ``EXCLUDE`` options.
+
+The ``INSTALL`` signature differs slightly from ``COPY``: it prints
+status messages, and ``NO_SOURCE_PERMISSIONS`` is default.
+Installation scripts generated by the :command:`install` command
+use this signature (with some undocumented options for internal use).
diff --git a/Help/command/target_compile_features.rst b/Help/command/target_compile_features.rst
index f8e5c54..a6503db 100644
--- a/Help/command/target_compile_features.rst
+++ b/Help/command/target_compile_features.rst
@@ -8,7 +8,8 @@ Add expected compiler features to a target.
target_compile_features(<target> <PRIVATE|PUBLIC|INTERFACE> <feature> [...])
Specify compiler features required when compiling a given target. If the
-feature is not listed in the :variable:`CMAKE_CXX_COMPILE_FEATURES` variable,
+feature is not listed in the :variable:`CMAKE_C_COMPILE_FEATURES` variable
+or :variable:`CMAKE_CXX_COMPILE_FEATURES` variable,
then an error will be reported by CMake. If the use of the feature requires
an additional compiler flag, such as ``-std=c++11``, the flag will be added
automatically.
@@ -27,4 +28,5 @@ an ``IMPORTED`` target.
Arguments to ``target_compile_features`` may use "generator expressions"
with the syntax ``$<...>``.
See the :manual:`cmake-generator-expressions(7)` manual for available
-expressions.
+expressions. See the :manual:`cmake-compile-features(7)` manual for
+information on compile features.
diff --git a/Help/index.rst b/Help/index.rst
index a4abfbf..2d3f156 100644
--- a/Help/index.rst
+++ b/Help/index.rst
@@ -27,6 +27,7 @@ Reference Manuals
/manual/cmake-buildsystem.7
/manual/cmake-commands.7
+ /manual/cmake-compile-features.7
/manual/cmake-developer.7
/manual/cmake-generator-expressions.7
/manual/cmake-generators.7
diff --git a/Help/manual/cmake-compile-features.7.rst b/Help/manual/cmake-compile-features.7.rst
new file mode 100644
index 0000000..c014846
--- /dev/null
+++ b/Help/manual/cmake-compile-features.7.rst
@@ -0,0 +1,297 @@
+.. cmake-manual-description: CMake Compile Features Reference
+
+cmake-compile-features(7)
+*************************
+
+.. only:: html or latex
+
+ .. contents::
+
+Introduction
+============
+
+Project source code may depend on, or be conditional on, the availability
+of certain features of the compiler. There are three use-cases which arise:
+`Compile Feature Requirements`_, `Optional Compile Features`_
+and `Conditional Compilation Options`_.
+
+While features are typically specified in programming language standards,
+CMake provides a primary user interface based on granular handling of
+the features, not the language standard that introduced the feature.
+
+The :prop_gbl:`CMAKE_C_KNOWN_FEATURES` and
+:prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global properties contain all the
+features known to CMake, regardless of compiler support for the feature.
+The :variable:`CMAKE_C_COMPILE_FEATURES` and
+:variable:`CMAKE_CXX_COMPILE_FEATURES` variables contain all features
+CMake knows are known to the compiler, regardless of language standard
+or compile flags needed to use them.
+
+Features known to CMake are named mostly following the same convention
+as the Clang feature test macros. The are some execptions, such as
+CMake using ``cxx_final`` and ``cxx_override`` instead of the single
+``cxx_override_control`` used by Clang.
+
+Compile Feature Requirements
+============================
+
+Compile feature requirements may be specified with the
+:command:`target_compile_features` command. For example, if a target must
+be compiled with compiler support for the
+:prop_gbl:`cxx_constexpr <CMAKE_CXX_KNOWN_FEATURES>` feature:
+
+.. code-block:: cmake
+
+ add_library(mylib requires_constexpr.cpp)
+ target_compile_features(mylib PRIVATE cxx_constexpr)
+
+In processing the requirement for the ``cxx_constexpr`` feature,
+:manual:`cmake(1)` will ensure that the in-use C++ compiler is capable
+of the feature, and will add any necessary flags such as ``-std=c++11``
+to the compile lines of C++ files in the ``mylib`` target. A
+``FATAL_ERROR`` is issued if the compiler is not capable of the
+feature.
+
+The exact compile flags and language standard are deliberately not part
+of the user interface for this use-case. CMake will compute the
+appropriate compile flags to use by considering the features specified
+for each target.
+
+Such compile flags are added even if the compiler supports the
+particular feature without the flag. For example, the GNU compiler
+supports variadic templates (with a warning) even if ``-std=c++98`` is
+used. CMake adds the ``-std=c++11`` flag if ``cxx_variadic_templates``
+is specified as a requirement.
+
+In the above example, ``mylib`` requires ``cxx_constexpr`` when it
+is built itself, but consumers of ``mylib`` are not required to use a
+compiler which supports ``cxx_constexpr``. If the interface of
+``mylib`` does require the ``cxx_constexpr`` feature (or any other
+known feature), that may be specified with the ``PUBLIC`` or
+``INTERFACE`` signatures of :command:`target_compile_features`:
+
+.. code-block:: cmake
+
+ add_library(mylib requires_constexpr.cpp)
+ # cxx_constexpr is a usage-requirement
+ target_compile_features(mylib PUBLIC cxx_constexpr)
+
+ # main.cpp will be compiled with -std=c++11 on GNU for cxx_constexpr.
+ add_executable(myexe main.cpp)
+ target_link_libraries(myexe mylib)
+
+Feature requirements are evaluated transitively by consuming the link
+implementation. See :manual:`cmake-buildsystem(7)` for more on
+transitive behavior of build properties and usage requirements.
+
+Note that new use of compile feature requirements may expose
+cross-platform bugs in user code. For example, the GNU compiler uses the
+``gnu++98`` language by default as of GCC version 4.8. User code may
+be relying on that by expecting the ``typeof`` GNU extension to work.
+However, if the :command:`target_compile_features` command is used to
+specify the requirement for ``cxx_constexpr``, a ``-std=c++11`` flag may
+be added, and the ``typeof`` extension would no longer be available. The
+solution is to specify that compiler extensions are relied upon by setting
+the :prop_tgt:`CXX_EXTENSIONS` target property to ``ON`` when starting to
+use the :command:`target_compile_features` command.
+
+Optional Compile Features
+=========================
+
+Compile features may be preferred if available, without creating a hard
+requirement. For example, a library may provides alternative
+implementations depending on whether the ``cxx_variadic_templates``
+feature is available:
+
+.. code-block:: c++
+
+ #if Foo_COMPILER_CXX_VARIADIC_TEMPLATES
+ template<int I, int... Is>
+ struct Interface;
+
+ template<int I>
+ struct Interface<I>
+ {
+ static int accumulate()
+ {
+ return I;
+ }
+ };
+
+ template<int I, int... Is>
+ struct Interface
+ {
+ static int accumulate()
+ {
+ return I + Interface<Is...>::accumulate();
+ }
+ };
+ #else
+ template<int I1, int I2 = 0, int I3 = 0, int I4 = 0>
+ struct Interface
+ {
+ static int accumulate() { return I1 + I2 + I3 + I4; }
+ };
+ #endif
+
+Such an interface depends on using the correct preprocessor defines for the
+compiler features. CMake can generate a header file containing such
+defines using the :module:`WriteCompilerDetectionHeader` module. The
+module contains the ``write_compiler_detection_header`` function which
+accepts parameters to control the content of the generated header file:
+
+.. code-block:: cmake
+
+ write_compiler_detection_header(
+ FILE "${CMAKE_CURRENT_BINARY_DIR}/foo_compiler_detection.h"
+ PREFIX Foo
+ COMPILERS GNU
+ FEATURES
+ cxx_variadic_templates
+ )
+
+Such a header file may be used internally in the source code of a project,
+and it may be installed and used in the interface of library code.
+
+For each feature listed in ``FEATURES``, a preprocessor definition
+is created in the header file, and defined to either ``1`` or ``0``.
+
+Additionally, some features call for additional defines, such as the
+``cxx_final`` and ``cxx_override`` features. Rather than being used in
+``#ifdef`` code, the ``final`` keyword is abstracted by a symbol
+which is defined to either ``final``, a compiler-specific equivalent, or
+to empty. That way, C++ code can be written to unconditionally use the
+symbol, and compiler support determines what it is expanded to:
+
+.. code-block:: c++
+
+ struct Interface {
+ virtual void Execute() = 0;
+ };
+
+ struct Concrete Foo_CXX_FINAL {
+ void Execute() Foo_CXX_OVERRIDE;
+ };
+
+In this case, ``Foo_CXX_FINAL`` will expand to ``final`` if the
+compiler supports the keyword, or to empty otherwise.
+
+In this use-case, the CMake code will wish to enable a particular language
+standard if available from the compiler. The :prop_tgt:`CXX_STANDARD`
+target property variable may be set to the desired language standard
+for a particular target, and the :variable:`CMAKE_CXX_STANDARD` may be
+set to influence all following targets:
+
+.. code-block:: cmake
+
+ write_compiler_detection_header(
+ FILE "${CMAKE_CURRENT_BINARY_DIR}/foo_compiler_detection.h"
+ PREFIX Foo
+ COMPILERS GNU
+ FEATURES
+ cxx_final cxx_override
+ )
+
+ # Includes foo_compiler_detection.h and uses the Foo_DECL_CXX_FINAL symbol
+ # which will expand to 'final' if the compiler supports the requested
+ # CXX_STANDARD.
+ add_library(foo foo.cpp)
+ set_property(TARGET foo PROPERTY CXX_STANDARD 11)
+
+ # Includes foo_compiler_detection.h and uses the Foo_DECL_CXX_FINAL symbol
+ # which will expand to 'final' if the compiler supports the feature,
+ # even though CXX_STANDARD is not set explicitly. The requirement of
+ # cxx_constexpr causes CMake to set CXX_STANDARD internally, which
+ # affects the compile flags.
+ add_library(foo_impl foo_impl.cpp)
+ target_compile_features(foo_impl PRIVATE cxx_constexpr)
+
+The ``write_compiler_detection_header`` function also creates compatibility
+code for other features which have standard equivalents. For example, the
+``cxx_static_assert`` feature is emulated with a template and abstracted
+via the ``<PREFIX>_STATIC_ASSERT`` and ``<PREFIX>_STATIC_ASSERT_MSG``
+function-macros.
+
+Conditional Compilation Options
+===============================
+
+Libraries may provide entirely different header files depending on
+requested compiler features.
+
+For example, a header at ``with_variadics/interface.h`` may contain:
+
+.. code-block:: c++
+
+ template<int I, int... Is>
+ struct Interface;
+
+ template<int I>
+ struct Interface<I>
+ {
+ static int accumulate()
+ {
+ return I;
+ }
+ };
+
+ template<int I, int... Is>
+ struct Interface
+ {
+ static int accumulate()
+ {
+ return I + Interface<Is...>::accumulate();
+ }
+ };
+
+while a header at ``no_variadics/interface.h`` may contain:
+
+.. code-block:: c++
+
+ template<int I1, int I2 = 0, int I3 = 0, int I4 = 0>
+ struct Interface
+ {
+ static int accumulate() { return I1 + I2 + I3 + I4; }
+ };
+
+It would be possible to write a abstraction ``interface.h`` header
+containing something like:
+
+.. code-block:: c++
+
+ #include "foo_compiler_detection.h"
+ #if Foo_COMPILER_CXX_VARIADIC_TEMPLATES
+ #include "with_variadics/interface.h"
+ #else
+ #include "no_variadics/interface.h"
+ #endif
+
+However this could be unmaintainable if there are many files to
+abstract. What is needed is to use alternative include directories
+depending on the compiler capabilities.
+
+CMake provides a ``COMPILE_FEATURES``
+:manual:`generator expression <cmake-generator-expressions(7)>` to implement
+such conditions. This may be used with the build-property commands such as
+:command:`target_include_directories` and :command:`target_link_libraries`
+to set the appropriate :manual:`buildsystem <cmake-buildsystem(7)>`
+properties:
+
+.. code-block:: cmake
+
+ add_library(foo INTERFACE)
+ target_link_libraries(foo
+ INTERFACE
+ "$<$<COMPILE_FEATURES:cxx_variadic_templates>:${CMAKE_CURRENT_SOURCE_DIR}/with_variadics>"
+ "$<$<NOT:$<COMPILE_FEATURES:cxx_variadic_templates>>:${CMAKE_CURRENT_SOURCE_DIR}/no_variadics>")
+
+Consuming code then simply links to the ``foo`` target as usual and uses
+the feature-appropriate include directory
+
+.. code-block:: cmake
+
+ add_executable(consumer_with consumer_with.cpp)
+ target_link_libraries(consumer_with foo)
+ set_property(TARGET consumer_with CXX_STANDARD 11)
+
+ add_executable(consumer_no consumer_no.cpp)
+ target_link_libraries(consumer_no foo)
diff --git a/Help/manual/cmake-developer.7.rst b/Help/manual/cmake-developer.7.rst
index f3af1e7..81adea0 100644
--- a/Help/manual/cmake-developer.7.rst
+++ b/Help/manual/cmake-developer.7.rst
@@ -197,6 +197,51 @@ Templates
Some template code is permitted, but with some limitations. Member templates
may not be used, and template friends may not be used.
+Adding Compile Features
+=======================
+
+CMake reports an error if a compiler whose features are known does not report
+support for a particular requested feature. A compiler is considered to have
+known features if it reports support for at least one feature.
+
+When adding a new compile feature to CMake, it is therefore necessary to list
+support for the feature for all CompilerIds which already have one or more
+feature supported, if the new feature is available for any version of the
+compiler.
+
+When adding the first supported feature to a particular CompilerId, it is
+necessary to list support for all features known to cmake (See
+:variable:`CMAKE_C_COMPILE_FEATURES` and
+:variable:`CMAKE_CXX_COMPILE_FEATURES` as appropriate), where available for
+the compiler.
+
+It is sensible to record the features for the most recent version of a
+particular CompilerId first, and then work backwards. It is sensible to
+try to create a continuous range of versions of feature releases of the
+compiler. Gaps in the range indicate incorrect features recorded for
+intermediate releases.
+
+Generally, features are made available for a particular version if the
+compiler vendor documents availability of the feature with that
+version. Note that sometimes partially implemented features appear to
+be functional in previous releases (such as ``cxx_constexpr`` in GNU 4.6,
+though availability is documented in GNU 4.7), and sometimes compiler vendors
+document availability of features, though supporting infrastructure is
+not available (such as ``__has_feature(cxx_generic_lambdas)`` indicating
+non-availability in Clang 3.4, though it is documented as available, and
+fixed in Clang 3.5). Similar cases for other compilers and versions
+need to be investigated when extending CMake to support them.
+
+When a vendor releases a new version of a known compiler which supports
+a previously unsupported feature, and there are already known features for
+that compiler, the feature should be listed as supported in CMake for
+that version of the compiler as soon as reasonably possible.
+
+Standard-specific/compiler-specific variables such
+``CMAKE_CXX98_COMPILE_FEATURES`` are deliberately not documented. They
+only exist for the compiler-specific implementation of adding the ``-std``
+compile flag for compilers which need that.
+
Help
====
diff --git a/Help/manual/cmake-generator-expressions.7.rst b/Help/manual/cmake-generator-expressions.7.rst
index dfda8dc..f04702e 100644
--- a/Help/manual/cmake-generator-expressions.7.rst
+++ b/Help/manual/cmake-generator-expressions.7.rst
@@ -83,6 +83,14 @@ otherwise expands to nothing.
else ``0``. If the policy was not set, the warning message for the policy
will be emitted. This generator expression only works for a subset of
policies.
+``$<COMPILE_FEATURES:feature[,feature]...>``
+ ``1`` if all of the ``feature`` features are available for the 'head'
+ target, and ``0`` otherwise. If this expression is used while evaluating
+ the link implementation of a target and if any dependency transitively
+ increases the required :prop_tgt:`C_STANDARD` or :prop_tgt:`CXX_STANDARD`
+ for the 'head' target, an error is reported. See the
+ :manual:`cmake-compile-features(7)` manual for information on
+ compile features.
Informational Expressions
=========================
diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst
index 949f190..e4546c1 100644
--- a/Help/manual/cmake-properties.7.rst
+++ b/Help/manual/cmake-properties.7.rst
@@ -16,6 +16,7 @@ Properties of Global Scope
/prop_gbl/ALLOW_DUPLICATE_CUSTOM_TARGETS
/prop_gbl/AUTOGEN_TARGETS_FOLDER
/prop_gbl/AUTOMOC_TARGETS_FOLDER
+ /prop_gbl/CMAKE_C_KNOWN_FEATURES
/prop_gbl/CMAKE_CXX_KNOWN_FEATURES
/prop_gbl/DEBUG_CONFIGURATIONS
/prop_gbl/DISABLED_FEATURES
@@ -93,6 +94,9 @@ Properties on Targets
/prop_tgt/BUILD_WITH_INSTALL_RPATH
/prop_tgt/BUNDLE_EXTENSION
/prop_tgt/BUNDLE
+ /prop_tgt/C_EXTENSIONS
+ /prop_tgt/C_STANDARD
+ /prop_tgt/C_STANDARD_REQUIRED
/prop_tgt/COMPATIBLE_INTERFACE_BOOL
/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MAX
/prop_tgt/COMPATIBLE_INTERFACE_NUMBER_MIN
@@ -289,6 +293,8 @@ Properties on Source Files
/prop_sf/OBJECT_OUTPUTS
/prop_sf/SYMBOLIC
/prop_sf/WRAP_EXCLUDE
+ /prop_sf/XCODE_EXPLICIT_FILE_TYPE
+ /prop_sf/XCODE_LAST_KNOWN_FILE_TYPE
Properties on Cache Entries
===========================
diff --git a/Help/manual/cmake-variables.7.rst b/Help/manual/cmake-variables.7.rst
index a7d4af6..b2dc88f 100644
--- a/Help/manual/cmake-variables.7.rst
+++ b/Help/manual/cmake-variables.7.rst
@@ -260,6 +260,10 @@ Variables for Languages
:maxdepth: 1
/variable/CMAKE_COMPILER_IS_GNULANG
+ /variable/CMAKE_C_COMPILE_FEATURES
+ /variable/CMAKE_C_EXTENSIONS
+ /variable/CMAKE_C_STANDARD
+ /variable/CMAKE_C_STANDARD_REQUIRED
/variable/CMAKE_CXX_COMPILE_FEATURES
/variable/CMAKE_CXX_EXTENSIONS
/variable/CMAKE_CXX_STANDARD
diff --git a/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst b/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
index 643bd3b..ed89d40 100644
--- a/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
+++ b/Help/prop_gbl/CMAKE_CXX_KNOWN_FEATURES.rst
@@ -8,7 +8,9 @@ C++ compiler. If the feature is available with the C++ compiler, it will
be listed in the :variable:`CMAKE_CXX_COMPILE_FEATURES` variable.
The features listed here may be used with the :command:`target_compile_features`
-command.
+command. See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
+
The features known to this version of CMake are:
diff --git a/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst b/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst
new file mode 100644
index 0000000..18cd030
--- /dev/null
+++ b/Help/prop_gbl/CMAKE_C_KNOWN_FEATURES.rst
@@ -0,0 +1,26 @@
+CMAKE_C_KNOWN_FEATURES
+----------------------
+
+List of C features known to this version of CMake.
+
+The features listed in this global property may be known to be available to the
+C compiler. If the feature is available with the C compiler, it will
+be listed in the :variable:`CMAKE_C_COMPILE_FEATURES` variable.
+
+The features listed here may be used with the :command:`target_compile_features`
+command. See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
+
+The features known to this version of CMake are:
+
+``c_function_prototypes``
+ Function prototypes, as defined in ``ISO/IEC 9899:1990``.
+
+``c_restrict``
+ ``restrict`` keyword, as defined in ``ISO/IEC 9899:1999``.
+
+``c_static_assert``
+ Static assert, as defined in ``ISO/IEC 9899:2011``.
+
+``c_variadic_macros``
+ Variadic macros, as defined in ``ISO/IEC 9899:1999``.
diff --git a/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst b/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst
new file mode 100644
index 0000000..1b24701
--- /dev/null
+++ b/Help/prop_sf/XCODE_EXPLICIT_FILE_TYPE.rst
@@ -0,0 +1,8 @@
+XCODE_EXPLICIT_FILE_TYPE
+------------------------
+
+Set the Xcode ``explicitFileType`` attribute on its reference to a
+source file. CMake computes a default based on file extension but
+can be told explicitly with this property.
+
+See also :prop_sf:`XCODE_LAST_KNOWN_FILE_TYPE`.
diff --git a/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst b/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst
new file mode 100644
index 0000000..42e3757
--- /dev/null
+++ b/Help/prop_sf/XCODE_LAST_KNOWN_FILE_TYPE.rst
@@ -0,0 +1,9 @@
+XCODE_LAST_KNOWN_FILE_TYPE
+--------------------------
+
+Set the Xcode ``lastKnownFileType`` attribute on its reference to a
+source file. CMake computes a default based on file extension but
+can be told explicitly with this property.
+
+See also :prop_sf:`XCODE_EXPLICIT_FILE_TYPE`, which is preferred
+over this property if set.
diff --git a/Help/prop_tgt/COMPILE_FEATURES.rst b/Help/prop_tgt/COMPILE_FEATURES.rst
index dc32825..225ffee 100644
--- a/Help/prop_tgt/COMPILE_FEATURES.rst
+++ b/Help/prop_tgt/COMPILE_FEATURES.rst
@@ -8,4 +8,5 @@ in the :variable:`CMAKE_CXX_COMPILE_FEATURES` variable.
Contents of ``COMPILE_FEATURES`` may use "generator expressions" with the
syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)` manual for
-available expressions.
+available expressions. See the :manual:`cmake-compile-features(7)` manual
+for information on compile features.
diff --git a/Help/prop_tgt/CXX_EXTENSIONS.rst b/Help/prop_tgt/CXX_EXTENSIONS.rst
index b9c9931..d7f87a4 100644
--- a/Help/prop_tgt/CXX_EXTENSIONS.rst
+++ b/Help/prop_tgt/CXX_EXTENSIONS.rst
@@ -6,3 +6,10 @@ Boolean specifying whether compiler specific extensions are requested.
This property specifies whether compiler specific extensions should be
used. For some compilers, this results in adding a flag such
as ``-std=gnu++11`` instead of ``-std=c++11`` to the compile line.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
+
+This property is initialized by the value of
+the :variable:`CMAKE_CXX_EXTENSIONS` variable if it is set when a target
+is created.
diff --git a/Help/prop_tgt/CXX_STANDARD.rst b/Help/prop_tgt/CXX_STANDARD.rst
index fdd5aac..8f299bb 100644
--- a/Help/prop_tgt/CXX_STANDARD.rst
+++ b/Help/prop_tgt/CXX_STANDARD.rst
@@ -22,6 +22,9 @@ flag will not result in an error or warning, but will instead add the
``-std=c++98`` flag if supported. This "decay" behavior may be controlled
with the :prop_tgt:`CXX_STANDARD_REQUIRED` target property.
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
+
This property is initialized by the value of
the :variable:`CMAKE_CXX_STANDARD` variable if it is set when a target
is created.
diff --git a/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst b/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst
index f082805..ac103a4 100644
--- a/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst
+++ b/Help/prop_tgt/CXX_STANDARD_REQUIRED.rst
@@ -9,6 +9,9 @@ property is ``OFF`` or unset, the :prop_tgt:`CXX_STANDARD` target property is
treated as optional and may "decay" to a previous standard if the requested is
not available.
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
+
This property is initialized by the value of
the :variable:`CMAKE_CXX_STANDARD_REQUIRED` variable if it is set when a
target is created.
diff --git a/Help/prop_tgt/C_EXTENSIONS.rst b/Help/prop_tgt/C_EXTENSIONS.rst
new file mode 100644
index 0000000..0772ecc
--- /dev/null
+++ b/Help/prop_tgt/C_EXTENSIONS.rst
@@ -0,0 +1,15 @@
+C_EXTENSIONS
+------------
+
+Boolean specifying whether compiler specific extensions are requested.
+
+This property specifies whether compiler specific extensions should be
+used. For some compilers, this results in adding a flag such
+as ``-std=gnu11`` instead of ``-std=c11`` to the compile line.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
+
+This property is initialized by the value of
+the :variable:`CMAKE_C_EXTENSIONS` variable if it is set when a target
+is created.
diff --git a/Help/prop_tgt/C_STANDARD.rst b/Help/prop_tgt/C_STANDARD.rst
new file mode 100644
index 0000000..a0c939a
--- /dev/null
+++ b/Help/prop_tgt/C_STANDARD.rst
@@ -0,0 +1,30 @@
+C_STANDARD
+----------
+
+The C standard whose features are requested to build this target.
+
+This property specifies the C standard whose features are requested
+to build this target. For some compilers, this results in adding a
+flag such as ``-std=c11`` to the compile line.
+
+Supported values are ``90``, ``99`` and ``11``.
+
+If the value requested does not result in a compile flag being added for
+the compiler in use, a previous standard flag will be added instead. This
+means that using:
+
+.. code-block:: cmake
+
+ set_property(TARGET tgt PROPERTY C_STANDARD 11)
+
+with a compiler which does not support ``-std=c11`` or an equivalent
+flag will not result in an error or warning, but will instead add the
+``-std=c99`` or ``-std=c90`` flag if supported. This "decay" behavior may
+be controlled with the :prop_tgt:`C_STANDARD_REQUIRED` target property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
+
+This property is initialized by the value of
+the :variable:`CMAKE_C_STANDARD` variable if it is set when a target
+is created.
diff --git a/Help/prop_tgt/C_STANDARD_REQUIRED.rst b/Help/prop_tgt/C_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..a7304f4
--- /dev/null
+++ b/Help/prop_tgt/C_STANDARD_REQUIRED.rst
@@ -0,0 +1,17 @@
+C_STANDARD_REQUIRED
+-------------------
+
+Boolean describing whether the value of :prop_tgt:`C_STANDARD` is a requirement.
+
+If this property is set to ``ON``, then the value of the
+:prop_tgt:`C_STANDARD` target property is treated as a requirement. If this
+property is ``OFF`` or unset, the :prop_tgt:`C_STANDARD` target property is
+treated as optional and may "decay" to a previous standard if the requested is
+not available.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
+
+This property is initialized by the value of
+the :variable:`CMAKE_C_STANDARD_REQUIRED` variable if it is set when a
+target is created.
diff --git a/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst b/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst
index a98e362..7abdecb 100644
--- a/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst
+++ b/Help/prop_tgt/INTERFACE_COMPILE_FEATURES.rst
@@ -11,4 +11,6 @@ to require the features specified in the interface of ``foo``.
Contents of ``INTERFACE_COMPILE_FEATURES`` may use "generator expressions"
with the syntax ``$<...>``. See the :manual:`cmake-generator-expressions(7)`
-manual for available expressions.
+manual for available expressions. See the
+:manual:`cmake-compile-features(7)` manual for information on compile
+features.
diff --git a/Help/release/dev/cmake-gui-capture-output.rst b/Help/release/dev/cmake-gui-capture-output.rst
new file mode 100644
index 0000000..40cd25e
--- /dev/null
+++ b/Help/release/dev/cmake-gui-capture-output.rst
@@ -0,0 +1,6 @@
+cmake-gui-capture-output
+------------------------
+
+* The :manual:`cmake-gui(1)` learned to capture output from child
+ processes started by the :command:`execute_process` command
+ and display it in the output window.
diff --git a/Help/release/dev/compile-language-features.rst b/Help/release/dev/compile-language-features.rst
index 3c5d7ca..d10e22b 100644
--- a/Help/release/dev/compile-language-features.rst
+++ b/Help/release/dev/compile-language-features.rst
@@ -7,6 +7,12 @@ target-language-features
:variable:`CMAKE_CXX_STANDARD` and :variable:`CMAKE_CXX_EXTENSIONS`
variables may be set to initialize the target properties.
+* New :prop_tgt:`C_STANDARD` and :prop_tgt:`C_EXTENSIONS` target
+ properties may specify values which CMake uses to compute required
+ compile options such as ``-std=c11`` or ``-std=gnu11``. The
+ :variable:`CMAKE_C_STANDARD` and :variable:`CMAKE_C_EXTENSIONS`
+ variables may be set to initialize the target properties.
+
* New :prop_tgt:`COMPILE_FEATURES` target property may contain a list
of features required to compile a target. CMake uses this
information to ensure that the compiler in use is capable of building
@@ -16,3 +22,7 @@ target-language-features
* New :command:`target_compile_features` command allows populating the
:prop_tgt:`COMPILE_FEATURES` target property, just like any other
build variable.
+
+* New ``COMPILE_FEATURES``
+ :manual:`generator expression <cmake-generator-expressions(7)>` allows
+ setting build properties based on available compiler features.
diff --git a/Help/release/dev/variable_watch-no-allowed-access.rst b/Help/release/dev/variable_watch-no-allowed-access.rst
new file mode 100644
index 0000000..ba7b4a5
--- /dev/null
+++ b/Help/release/dev/variable_watch-no-allowed-access.rst
@@ -0,0 +1,8 @@
+variable_watch-no-allowed-access
+--------------------------------
+
+* Callbacks established by the :command:`variable_watch` command will no
+ longer receive the ``ALLOWED_UNKNOWN_READ_ACCESS`` access type when
+ the undocumented ``CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS`` variable is
+ set. Uninitialized variable accesses will always be reported as
+ ``UNKNOWN_READ_ACCESS``.
diff --git a/Help/release/dev/xcode-file-type.rst b/Help/release/dev/xcode-file-type.rst
new file mode 100644
index 0000000..6f637f7
--- /dev/null
+++ b/Help/release/dev/xcode-file-type.rst
@@ -0,0 +1,7 @@
+xcode-file-type
+---------------
+
+* The :generator:`Xcode` generator learned to check source
+ file properties :prop_sf:`XCODE_EXPLICIT_FILE_TYPE` and
+ :prop_sf:`XCODE_LAST_KNOWN_FILE_TYPE` for a custom Xcode
+ file reference type.
diff --git a/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst b/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst
index 1102c21..460c78c 100644
--- a/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst
+++ b/Help/variable/CMAKE_CXX_COMPILE_FEATURES.rst
@@ -6,3 +6,6 @@ List of features known to the C++ compiler
These features are known to be available for use with the C++ compiler. This
list is a subset of the features listed in the :prop_gbl:`CMAKE_CXX_KNOWN_FEATURES`
global property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
diff --git a/Help/variable/CMAKE_CXX_EXTENSIONS.rst b/Help/variable/CMAKE_CXX_EXTENSIONS.rst
index 734d508..6448371 100644
--- a/Help/variable/CMAKE_CXX_EXTENSIONS.rst
+++ b/Help/variable/CMAKE_CXX_EXTENSIONS.rst
@@ -6,3 +6,6 @@ Default value for ``CXX_EXTENSIONS`` property of targets.
This variable is used to initialize the :prop_tgt:`CXX_EXTENSIONS`
property on all targets. See that target property for additional
information.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
diff --git a/Help/variable/CMAKE_CXX_STANDARD.rst b/Help/variable/CMAKE_CXX_STANDARD.rst
index 5fd4138..963a42a 100644
--- a/Help/variable/CMAKE_CXX_STANDARD.rst
+++ b/Help/variable/CMAKE_CXX_STANDARD.rst
@@ -6,3 +6,6 @@ Default value for ``CXX_STANDARD`` property of targets.
This variable is used to initialize the :prop_tgt:`CXX_STANDARD`
property on all targets. See that target property for additional
information.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
diff --git a/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst b/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst
index ff005da..f7750fa 100644
--- a/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst
+++ b/Help/variable/CMAKE_CXX_STANDARD_REQUIRED.rst
@@ -6,3 +6,6 @@ Default value for ``CXX_STANDARD_REQUIRED`` property of targets.
This variable is used to initialize the :prop_tgt:`CXX_STANDARD_REQUIRED`
property on all targets. See that target property for additional
information.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
diff --git a/Help/variable/CMAKE_C_COMPILE_FEATURES.rst b/Help/variable/CMAKE_C_COMPILE_FEATURES.rst
new file mode 100644
index 0000000..1106246
--- /dev/null
+++ b/Help/variable/CMAKE_C_COMPILE_FEATURES.rst
@@ -0,0 +1,11 @@
+CMAKE_C_COMPILE_FEATURES
+------------------------
+
+List of features known to the C compiler
+
+These features are known to be available for use with the C compiler. This
+list is a subset of the features listed in the :prop_gbl:`CMAKE_C_KNOWN_FEATURES`
+global property.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
diff --git a/Help/variable/CMAKE_C_EXTENSIONS.rst b/Help/variable/CMAKE_C_EXTENSIONS.rst
new file mode 100644
index 0000000..5e935fc
--- /dev/null
+++ b/Help/variable/CMAKE_C_EXTENSIONS.rst
@@ -0,0 +1,11 @@
+CMAKE_C_EXTENSIONS
+------------------
+
+Default value for ``C_EXTENSIONS`` property of targets.
+
+This variable is used to initialize the :prop_tgt:`C_EXTENSIONS`
+property on all targets. See that target property for additional
+information.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
diff --git a/Help/variable/CMAKE_C_STANDARD.rst b/Help/variable/CMAKE_C_STANDARD.rst
new file mode 100644
index 0000000..3098ce5
--- /dev/null
+++ b/Help/variable/CMAKE_C_STANDARD.rst
@@ -0,0 +1,11 @@
+CMAKE_C_STANDARD
+----------------
+
+Default value for ``C_STANDARD`` property of targets.
+
+This variable is used to initialize the :prop_tgt:`C_STANDARD`
+property on all targets. See that target property for additional
+information.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
diff --git a/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst b/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst
new file mode 100644
index 0000000..c24eea4
--- /dev/null
+++ b/Help/variable/CMAKE_C_STANDARD_REQUIRED.rst
@@ -0,0 +1,11 @@
+CMAKE_C_STANDARD_REQUIRED
+-------------------------
+
+Default value for ``C_STANDARD_REQUIRED`` property of targets.
+
+This variable is used to initialize the :prop_tgt:`C_STANDARD_REQUIRED`
+property on all targets. See that target property for additional
+information.
+
+See the :manual:`cmake-compile-features(7)` manual for information on
+compile features.
diff --git a/Modules/CMakeCCompiler.cmake.in b/Modules/CMakeCCompiler.cmake.in
index 694f8b8..86cd894 100644
--- a/Modules/CMakeCCompiler.cmake.in
+++ b/Modules/CMakeCCompiler.cmake.in
@@ -2,6 +2,11 @@ set(CMAKE_C_COMPILER "@CMAKE_C_COMPILER@")
set(CMAKE_C_COMPILER_ARG1 "@CMAKE_C_COMPILER_ARG1@")
set(CMAKE_C_COMPILER_ID "@CMAKE_C_COMPILER_ID@")
set(CMAKE_C_COMPILER_VERSION "@CMAKE_C_COMPILER_VERSION@")
+set(CMAKE_C_COMPILE_FEATURES "@CMAKE_C_COMPILE_FEATURES@")
+set(CMAKE_C90_COMPILE_FEATURES "@CMAKE_C90_COMPILE_FEATURES@")
+set(CMAKE_C99_COMPILE_FEATURES "@CMAKE_C99_COMPILE_FEATURES@")
+set(CMAKE_C11_COMPILE_FEATURES "@CMAKE_C11_COMPILE_FEATURES@")
+
set(CMAKE_C_PLATFORM_ID "@CMAKE_C_PLATFORM_ID@")
set(CMAKE_C_SIMULATE_ID "@CMAKE_C_SIMULATE_ID@")
set(CMAKE_C_SIMULATE_VERSION "@CMAKE_C_SIMULATE_VERSION@")
diff --git a/Modules/CMakeDetermineCompileFeatures.cmake b/Modules/CMakeDetermineCompileFeatures.cmake
index 583ff8d..da68e94 100644
--- a/Modules/CMakeDetermineCompileFeatures.cmake
+++ b/Modules/CMakeDetermineCompileFeatures.cmake
@@ -14,7 +14,45 @@
function(cmake_determine_compile_features lang)
- if(lang STREQUAL CXX AND COMMAND cmake_record_cxx_compile_features)
+ if(lang STREQUAL C AND COMMAND cmake_record_c_compile_features)
+ message(STATUS "Detecting ${lang} compile features")
+
+ set(CMAKE_C90_COMPILE_FEATURES)
+ set(CMAKE_C99_COMPILE_FEATURES)
+ set(CMAKE_C11_COMPILE_FEATURES)
+
+ include("${CMAKE_ROOT}/Modules/Internal/FeatureTesting.cmake")
+
+ cmake_record_c_compile_features()
+
+ if(NOT _result EQUAL 0)
+ message(STATUS "Detecting ${lang} compile features - failed")
+ return()
+ endif()
+
+ if (CMAKE_C99_COMPILE_FEATURES AND CMAKE_C11_COMPILE_FEATURES)
+ list(REMOVE_ITEM CMAKE_C11_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES})
+ endif()
+ if (CMAKE_C90_COMPILE_FEATURES AND CMAKE_C99_COMPILE_FEATURES)
+ list(REMOVE_ITEM CMAKE_C99_COMPILE_FEATURES ${CMAKE_C90_COMPILE_FEATURES})
+ endif()
+
+ if(NOT CMAKE_C_COMPILE_FEATURES)
+ set(CMAKE_C_COMPILE_FEATURES
+ ${CMAKE_C90_COMPILE_FEATURES}
+ ${CMAKE_C99_COMPILE_FEATURES}
+ ${CMAKE_C11_COMPILE_FEATURES}
+ )
+ endif()
+
+ set(CMAKE_C_COMPILE_FEATURES ${CMAKE_C_COMPILE_FEATURES} PARENT_SCOPE)
+ set(CMAKE_C90_COMPILE_FEATURES ${CMAKE_C90_COMPILE_FEATURES} PARENT_SCOPE)
+ set(CMAKE_C99_COMPILE_FEATURES ${CMAKE_C99_COMPILE_FEATURES} PARENT_SCOPE)
+ set(CMAKE_C11_COMPILE_FEATURES ${CMAKE_C11_COMPILE_FEATURES} PARENT_SCOPE)
+
+ message(STATUS "Detecting ${lang} compile features - done")
+
+ elseif(lang STREQUAL CXX AND COMMAND cmake_record_cxx_compile_features)
message(STATUS "Detecting ${lang} compile features")
set(CMAKE_CXX98_COMPILE_FEATURES)
@@ -29,7 +67,7 @@ function(cmake_determine_compile_features lang)
return()
endif()
- if (CMAKE_CXX98_COMPILE_FEATURES)
+ if (CMAKE_CXX11_COMPILE_FEATURES AND CMAKE_CXX98_COMPILE_FEATURES)
list(REMOVE_ITEM CMAKE_CXX11_COMPILE_FEATURES ${CMAKE_CXX98_COMPILE_FEATURES})
endif()
diff --git a/Modules/CMakeTestCCompiler.cmake b/Modules/CMakeTestCCompiler.cmake
index d133042..29a58bd 100644
--- a/Modules/CMakeTestCCompiler.cmake
+++ b/Modules/CMakeTestCCompiler.cmake
@@ -73,6 +73,9 @@ else()
# Try to identify the ABI and configure it into CMakeCCompiler.cmake
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompilerABI.cmake)
CMAKE_DETERMINE_COMPILER_ABI(C ${CMAKE_ROOT}/Modules/CMakeCCompilerABI.c)
+ # Try to identify the compiler features
+ include(${CMAKE_ROOT}/Modules/CMakeDetermineCompileFeatures.cmake)
+ CMAKE_DETERMINE_COMPILE_FEATURES(C)
# Re-configure to save learned information.
configure_file(
diff --git a/Modules/CheckLanguage.cmake b/Modules/CheckLanguage.cmake
index 3bd126a..99c809b 100644
--- a/Modules/CheckLanguage.cmake
+++ b/Modules/CheckLanguage.cmake
@@ -47,7 +47,7 @@ macro(check_language lang)
message(STATUS ${_desc})
file(REMOVE_RECURSE ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang})
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/Check${lang}/CMakeLists.txt"
- "cmake_minimum_required(VERSION 2.8)
+ "cmake_minimum_required(VERSION ${CMAKE_VERSION})
project(Check${lang} ${lang})
file(WRITE \"\${CMAKE_CURRENT_BINARY_DIR}/result.cmake\"
\"set(CMAKE_${lang}_COMPILER \\\"\${CMAKE_${lang}_COMPILER}\\\")\\n\"
diff --git a/Modules/CheckTypeSize.cmake b/Modules/CheckTypeSize.cmake
index ad3b6b5..8ce6b88 100644
--- a/Modules/CheckTypeSize.cmake
+++ b/Modules/CheckTypeSize.cmake
@@ -79,7 +79,7 @@ include(CheckIncludeFile)
include(CheckIncludeFileCXX)
cmake_policy(PUSH)
-cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
+cmake_policy(VERSION 3.0)
get_filename_component(__check_type_size_dir "${CMAKE_CURRENT_LIST_FILE}" PATH)
diff --git a/Modules/Compiler/Clang-C-FeatureTests.cmake b/Modules/Compiler/Clang-C-FeatureTests.cmake
new file mode 100644
index 0000000..4a72e87
--- /dev/null
+++ b/Modules/Compiler/Clang-C-FeatureTests.cmake
@@ -0,0 +1,11 @@
+
+set(_cmake_oldestSupported "((__clang_major__ * 100) + __clang_minor__) >= 304")
+
+set(Clang_C11 "${_cmake_oldestSupported} && __STDC_VERSION__ >= 201112L")
+set(_cmake_feature_test_c_static_assert "${Clang_C11}")
+set(Clang_C99 "${_cmake_oldestSupported} && __STDC_VERSION__ >= 199901L")
+set(_cmake_feature_test_c_restrict "${Clang_C99}")
+set(_cmake_feature_test_c_variadic_macros "${Clang_C99}")
+
+set(Clang_C90 "${_cmake_oldestSupported} && !defined(__STDC_VERSION__)")
+set(_cmake_feature_test_c_function_prototypes "${Clang_C90}")
diff --git a/Modules/Compiler/Clang-C.cmake b/Modules/Compiler/Clang-C.cmake
index 98fcd0b..05d3c0b 100644
--- a/Modules/Compiler/Clang-C.cmake
+++ b/Modules/Compiler/Clang-C.cmake
@@ -1,2 +1,38 @@
include(Compiler/Clang)
__compiler_clang(C)
+
+cmake_policy(GET CMP0025 appleClangPolicy)
+if(WIN32 OR (APPLE AND NOT appleClangPolicy STREQUAL NEW))
+ return()
+endif()
+
+if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
+ set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
+ set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+
+ set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+ set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+
+ set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+ set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+endif()
+
+set(CMAKE_C_STANDARD_DEFAULT 90)
+
+macro(cmake_record_c_compile_features)
+ macro(_get_clang_features std_version list)
+ record_compiler_features(C "-std=${std_version}" ${list})
+ endmacro()
+
+ if (UNIX AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
+ _get_clang_features(c11 CMAKE_C11_COMPILE_FEATURES)
+ if (_result EQUAL 0)
+ _get_clang_features(c99 CMAKE_C99_COMPILE_FEATURES)
+ endif()
+ if (_result EQUAL 0)
+ _get_clang_features(c90 CMAKE_C90_COMPILE_FEATURES)
+ endif()
+ else()
+ set(_result 0)
+ endif()
+endmacro()
diff --git a/Modules/Compiler/Clang-CXX-FeatureTests.cmake b/Modules/Compiler/Clang-CXX-FeatureTests.cmake
new file mode 100644
index 0000000..c4092c4
--- /dev/null
+++ b/Modules/Compiler/Clang-CXX-FeatureTests.cmake
@@ -0,0 +1,69 @@
+
+# Reference: http://clang.llvm.org/cxx_status.html
+# http://clang.llvm.org/docs/LanguageExtensions.html
+
+set(testable_features
+ cxx_alias_templates
+ cxx_alignas
+ cxx_attributes
+ cxx_auto_type
+ cxx_constexpr
+ cxx_decltype
+ cxx_decltype_incomplete_return_types
+ cxx_default_function_template_args
+ cxx_defaulted_functions
+ cxx_delegating_constructors
+ cxx_deleted_functions
+ cxx_explicit_conversions
+ cxx_generalized_initializers
+ cxx_inheriting_constructors
+ cxx_lambdas
+ cxx_local_type_template_args
+ cxx_noexcept
+ cxx_nonstatic_member_init
+ cxx_nullptr
+ cxx_range_for
+ cxx_raw_string_literals
+ cxx_reference_qualified_functions
+ cxx_rvalue_references
+ cxx_static_assert
+ cxx_strong_enums
+ cxx_thread_local
+ cxx_unicode_literals
+ cxx_unrestricted_unions
+ cxx_user_literals
+ cxx_variadic_templates
+)
+
+set(_cmake_oldestSupported "((__clang_major__ * 100) + __clang_minor__) >= 304")
+
+foreach(feature ${testable_features})
+ set(_cmake_feature_test_${feature} "${_cmake_oldestSupported} && __has_feature(${feature})")
+endforeach()
+
+unset(testable_features)
+
+set(_cmake_feature_test_cxx_trailing_return_types "${_cmake_oldestSupported} && __has_feature(cxx_trailing_return)")
+set(_cmake_feature_test_cxx_alignof "${_cmake_oldestSupported} && __has_feature(cxx_alignas)")
+set(_cmake_feature_test_cxx_final "${_cmake_oldestSupported} && __has_feature(cxx_override_control)")
+set(_cmake_feature_test_cxx_override "${_cmake_oldestSupported} && __has_feature(cxx_override_control)")
+set(_cmake_feature_test_cxx_uniform_initialization "${_cmake_oldestSupported} && __has_feature(cxx_generalized_initializers)")
+set(_cmake_feature_test_cxx_defaulted_move_initializers "${_cmake_oldestSupported} && __has_feature(cxx_defaulted_functions)")
+
+# TODO: Should be supported by Clang 3.1
+set(Clang31_CXX11 "${_cmake_oldestSupported} && __cplusplus >= 201103L")
+set(_cmake_feature_test_cxx_enum_forward_declarations "${Clang31_CXX11}")
+set(_cmake_feature_test_cxx_sizeof_member "${Clang31_CXX11}")
+# TODO: Should be supported by Clang 2.9
+set(Clang29_CXX11 "${_cmake_oldestSupported} && __cplusplus >= 201103L")
+set(_cmake_feature_test_cxx_extended_friend_declarations "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_extern_templates "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_func_identifier "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_inline_namespaces "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_long_long_type "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_right_angle_brackets "${Clang29_CXX11}")
+set(_cmake_feature_test_cxx_variadic_macros "${Clang29_CXX11}")
+
+# TODO: Should be supported forever?
+set(Clang_CXX98 "${_cmake_oldestSupported} && __cplusplus >= 199711L")
+set(_cmake_feature_test_cxx_template_template_parameters "${Clang_CXX98}")
diff --git a/Modules/Compiler/Clang-CXX.cmake b/Modules/Compiler/Clang-CXX.cmake
index a1b3a10..bdb6d69 100644
--- a/Modules/Compiler/Clang-CXX.cmake
+++ b/Modules/Compiler/Clang-CXX.cmake
@@ -6,7 +6,7 @@ if(NOT CMAKE_CXX_SIMULATE_ID STREQUAL "MSVC")
endif()
cmake_policy(GET CMP0025 appleClangPolicy)
-if(NOT appleClangPolicy STREQUAL NEW)
+if(WIN32 OR (APPLE AND NOT appleClangPolicy STREQUAL NEW))
return()
endif()
@@ -22,3 +22,28 @@ elseif(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 2.1)
set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++0x")
set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++0x")
endif()
+
+if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
+ set(CMAKE_CXX11_STANDARD_COMPILE_OPTION "-std=c++1y")
+ set(CMAKE_CXX11_EXTENSION_COMPILE_OPTION "-std=gnu++1y")
+endif()
+
+set(CMAKE_CXX_STANDARD_DEFAULT 98)
+
+macro(cmake_record_cxx_compile_features)
+ macro(_get_clang_features std_version list)
+ record_compiler_features(CXX "-std=${std_version}" ${list})
+ endmacro()
+
+ if (UNIX AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.4)
+ _get_clang_features(c++1y CMAKE_CXX14_COMPILE_FEATURES)
+ if (_result EQUAL 0)
+ _get_clang_features(c++11 CMAKE_CXX11_COMPILE_FEATURES)
+ endif()
+ if (_result EQUAL 0)
+ _get_clang_features(c++98 CMAKE_CXX98_COMPILE_FEATURES)
+ endif()
+ else()
+ set(_result 0)
+ endif()
+endmacro()
diff --git a/Modules/Compiler/GNU-C-FeatureTests.cmake b/Modules/Compiler/GNU-C-FeatureTests.cmake
new file mode 100644
index 0000000..dc1695c
--- /dev/null
+++ b/Modules/Compiler/GNU-C-FeatureTests.cmake
@@ -0,0 +1,12 @@
+
+set(_cmake_oldestSupported "(__GNUC__ * 100 + __GNUC_MINOR__) >= 407")
+
+set(GNU46_C11 "${_cmake_oldestSupported} && __STDC_VERSION__ >= 201112L")
+set(_cmake_feature_test_c_static_assert "${GNU46_C11}")
+# Since 4.4 at least:
+set(GNU44_C99 "${_cmake_oldestSupported} && __STDC_VERSION__ >= 199901L")
+set(_cmake_feature_test_c_restrict "${GNU44_C99}")
+set(_cmake_feature_test_c_variadic_macros "${GNU44_C99}")
+
+set(GNU_C90 "${_cmake_oldestSupported} && !defined(__STDC_VERSION__)")
+set(_cmake_feature_test_c_function_prototypes "${GNU_C90}")
diff --git a/Modules/Compiler/GNU-C.cmake b/Modules/Compiler/GNU-C.cmake
index 9a5137a..35954be 100644
--- a/Modules/Compiler/GNU-C.cmake
+++ b/Modules/Compiler/GNU-C.cmake
@@ -1,2 +1,34 @@
include(Compiler/GNU)
__compiler_gnu(C)
+
+if (NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
+ set(CMAKE_C90_STANDARD_COMPILE_OPTION "-std=c90")
+ set(CMAKE_C90_EXTENSION_COMPILE_OPTION "-std=gnu90")
+
+ set(CMAKE_C99_STANDARD_COMPILE_OPTION "-std=c99")
+ set(CMAKE_C99_EXTENSION_COMPILE_OPTION "-std=gnu99")
+
+ set(CMAKE_C11_STANDARD_COMPILE_OPTION "-std=c11")
+ set(CMAKE_C11_EXTENSION_COMPILE_OPTION "-std=gnu11")
+endif()
+
+# This may change in a future GNU version.
+set(CMAKE_C_STANDARD_DEFAULT 90)
+
+macro(cmake_record_c_compile_features)
+ macro(_get_gcc_features std_version list)
+ record_compiler_features(C "-std=${std_version}" ${list})
+ endmacro()
+
+ if (UNIX AND NOT APPLE AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.7)
+ _get_gcc_features(c90 CMAKE_C90_COMPILE_FEATURES)
+ if (_result EQUAL 0)
+ _get_gcc_features(c99 CMAKE_C99_COMPILE_FEATURES)
+ endif()
+ if (_result EQUAL 0)
+ _get_gcc_features(c11 CMAKE_C11_COMPILE_FEATURES)
+ endif()
+ else()
+ set(_result 0)
+ endif()
+endmacro()
diff --git a/Modules/FindCUDA.cmake b/Modules/FindCUDA.cmake
index 1f69620..d9809ad 100644
--- a/Modules/FindCUDA.cmake
+++ b/Modules/FindCUDA.cmake
@@ -330,11 +330,6 @@
# FindCUDA.cmake
-# We need to have at least this version to support the VERSION_LESS argument to 'if' (2.6.2) and unset (2.6.3)
-cmake_policy(PUSH)
-cmake_minimum_required(VERSION 2.6.3)
-cmake_policy(POP)
-
# This macro helps us find the location of helper files we will need the full path to
macro(CUDA_FIND_HELPER_FILE _name _extension)
set(_full_name "${_name}.${_extension}")
@@ -1430,15 +1425,24 @@ function(CUDA_LINK_SEPARABLE_COMPILATION_OBJECTS output_file cuda_target options
if( ccbin_found0 LESS 0 AND ccbin_found1 LESS 0 )
list(APPEND nvcc_flags -ccbin "\"${CUDA_HOST_COMPILER}\"")
endif()
+ # Create a list of flags specified by CUDA_NVCC_FLAGS_${CONFIG}
+ set(config_specific_flags)
set(flags)
foreach(config ${CUDA_configuration_types})
string(TOUPPER ${config} config_upper)
+ # Add config specific flags
+ foreach(f ${CUDA_NVCC_FLAGS_${config_upper}})
+ list(APPEND config_specific_flags $<$<CONFIG:${config}>:${f}>)
+ endforeach()
set(important_host_flags)
_cuda_get_important_host_flags(important_host_flags ${CMAKE_${CUDA_C_OR_CXX}_FLAGS_${config_upper}})
foreach(f ${important_host_flags})
list(APPEND flags $<$<CONFIG:${config}>:-Xcompiler> $<$<CONFIG:${config}>:${f}>)
endforeach()
endforeach()
+ # Add our general CUDA_NVCC_FLAGS with the configuration specifig flags
+ set(nvcc_flags ${CUDA_NVCC_FLAGS} ${config_specific_flags} ${nvcc_flags})
+
file(RELATIVE_PATH output_file_relative_path "${CMAKE_BINARY_DIR}" "${output_file}")
# Some generators don't handle the multiple levels of custom command
diff --git a/Modules/FindFreetype.cmake b/Modules/FindFreetype.cmake
index 1779b78..7d46d15 100644
--- a/Modules/FindFreetype.cmake
+++ b/Modules/FindFreetype.cmake
@@ -51,7 +51,9 @@
# wants explicit full paths and this trickery doesn't work too well.
# I'm going to attempt to cut out the middleman and hope
# everything still works.
-find_path(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
+find_path(
+ FREETYPE_INCLUDE_DIR_ft2build
+ ft2build.h
HINTS
ENV FREETYPE_DIR
PATHS
@@ -62,10 +64,14 @@ find_path(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
ENV GTKMM_BASEPATH
[HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]
[HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]
- PATH_SUFFIXES include/freetype2 include freetype2
+ PATH_SUFFIXES
+ include/freetype2
+ include
+ freetype2
)
-find_path(FREETYPE_INCLUDE_DIR_freetype2
+find_path(
+ FREETYPE_INCLUDE_DIR_freetype2
NAMES
freetype/config/ftheader.h
config/ftheader.h
@@ -79,14 +85,19 @@ find_path(FREETYPE_INCLUDE_DIR_freetype2
ENV GTKMM_BASEPATH
[HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]
[HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]
- PATH_SUFFIXES include/freetype2 include freetype2
+ PATH_SUFFIXES
+ include/freetype2
+ include
+ freetype2
)
find_library(FREETYPE_LIBRARY
- NAMES freetype libfreetype freetype219
+ NAMES
+ freetype
+ libfreetype
+ freetype219
HINTS
ENV FREETYPE_DIR
- PATH_SUFFIXES lib
PATHS
/usr/X11R6
/usr/local/X11R6
@@ -95,6 +106,8 @@ find_library(FREETYPE_LIBRARY
ENV GTKMM_BASEPATH
[HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]
[HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]
+ PATH_SUFFIXES
+ lib
)
# set the user variables
@@ -111,31 +124,41 @@ elseif(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
endif()
if(FREETYPE_INCLUDE_DIR_freetype2 AND FREETYPE_H)
- file(STRINGS "${FREETYPE_H}" freetype_version_str
- REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
+ file(STRINGS "${FREETYPE_H}" freetype_version_str
+ REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
- unset(FREETYPE_VERSION_STRING)
- foreach(VPART MAJOR MINOR PATCH)
- foreach(VLINE ${freetype_version_str})
- if(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$")
- set(FREETYPE_VERSION_PART "${CMAKE_MATCH_1}")
- if(FREETYPE_VERSION_STRING)
- set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_STRING}.${FREETYPE_VERSION_PART}")
- else()
- set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}")
- endif()
- unset(FREETYPE_VERSION_PART)
- endif()
- endforeach()
+ unset(FREETYPE_VERSION_STRING)
+ foreach(VPART MAJOR MINOR PATCH)
+ foreach(VLINE ${freetype_version_str})
+ if(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$")
+ set(FREETYPE_VERSION_PART "${CMAKE_MATCH_1}")
+ if(FREETYPE_VERSION_STRING)
+ set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_STRING}.${FREETYPE_VERSION_PART}")
+ else()
+ set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}")
+ endif()
+ unset(FREETYPE_VERSION_PART)
+ endif()
endforeach()
+ endforeach()
endif()
# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if
# all listed variables are TRUE
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Freetype
- REQUIRED_VARS FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS
- VERSION_VAR FREETYPE_VERSION_STRING)
-mark_as_advanced(FREETYPE_LIBRARY FREETYPE_INCLUDE_DIR_freetype2 FREETYPE_INCLUDE_DIR_ft2build)
+find_package_handle_standard_args(
+ Freetype
+ REQUIRED_VARS
+ FREETYPE_LIBRARY
+ FREETYPE_INCLUDE_DIRS
+ VERSION_VAR
+ FREETYPE_VERSION_STRING
+)
+
+mark_as_advanced(
+ FREETYPE_LIBRARY
+ FREETYPE_INCLUDE_DIR_freetype2
+ FREETYPE_INCLUDE_DIR_ft2build
+)
diff --git a/Modules/FindGTK2.cmake b/Modules/FindGTK2.cmake
index 15bcab8..eaa5e55 100644
--- a/Modules/FindGTK2.cmake
+++ b/Modules/FindGTK2.cmake
@@ -572,7 +572,6 @@ endif()
# If specified, enforce version number
#
if(GTK2_FIND_VERSION)
- cmake_minimum_required(VERSION 2.6.2)
set(GTK2_FAILED_VERSION_CHECK true)
if(GTK2_DEBUG)
message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
diff --git a/Modules/FindQt3.cmake b/Modules/FindQt3.cmake
index 4fc6829..86997ba 100644
--- a/Modules/FindQt3.cmake
+++ b/Modules/FindQt3.cmake
@@ -161,7 +161,7 @@ find_library(QT_QASSISTANTCLIENT_LIBRARY
# Qt 3 should prefer QTDIR over the PATH
find_program(QT_MOC_EXECUTABLE
- NAMES moc-qt3 moc moc3 moc3-mt
+ NAMES moc-qt3 moc3 moc3-mt moc
HINTS
ENV QTDIR
PATHS
@@ -186,7 +186,7 @@ endif()
# Qt 3 should prefer QTDIR over the PATH
find_program(QT_UIC_EXECUTABLE
- NAMES uic-qt3 uic uic3 uic3-mt
+ NAMES uic-qt3 uic3 uic3-mt uic
HINTS
ENV QTDIR
PATHS
diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake
index e44d1d9..9487a62 100644
--- a/Modules/FindQt4.cmake
+++ b/Modules/FindQt4.cmake
@@ -1137,17 +1137,17 @@ if (QT_QMAKE_EXECUTABLE AND QTVERSION)
endif()
endmacro()
- _find_qt4_program(QT_MOC_EXECUTABLE Qt4::moc moc-qt4 moc moc4)
- _find_qt4_program(QT_UIC_EXECUTABLE Qt4::uic uic-qt4 uic uic4)
+ _find_qt4_program(QT_MOC_EXECUTABLE Qt4::moc moc-qt4 moc4 moc)
+ _find_qt4_program(QT_UIC_EXECUTABLE Qt4::uic uic-qt4 uic4 uic)
_find_qt4_program(QT_UIC3_EXECUTABLE Qt4::uic3 uic3)
_find_qt4_program(QT_RCC_EXECUTABLE Qt4::rcc rcc)
_find_qt4_program(QT_DBUSCPP2XML_EXECUTABLE Qt4::qdbuscpp2xml qdbuscpp2xml)
_find_qt4_program(QT_DBUSXML2CPP_EXECUTABLE Qt4::qdbusxml2cpp qdbusxml2cpp)
- _find_qt4_program(QT_LUPDATE_EXECUTABLE Qt4::lupdate lupdate-qt4 lupdate lupdate4)
- _find_qt4_program(QT_LRELEASE_EXECUTABLE Qt4::lrelease lrelease-qt4 lrelease lrelease4)
+ _find_qt4_program(QT_LUPDATE_EXECUTABLE Qt4::lupdate lupdate-qt4 lupdate4 lupdate)
+ _find_qt4_program(QT_LRELEASE_EXECUTABLE Qt4::lrelease lrelease-qt4 lrelease4 lrelease)
_find_qt4_program(QT_QCOLLECTIONGENERATOR_EXECUTABLE Qt4::qcollectiongenerator qcollectiongenerator-qt4 qcollectiongenerator)
- _find_qt4_program(QT_DESIGNER_EXECUTABLE Qt4::designer designer-qt4 designer designer4)
- _find_qt4_program(QT_LINGUIST_EXECUTABLE Qt4::linguist linguist-qt4 linguist linguist4)
+ _find_qt4_program(QT_DESIGNER_EXECUTABLE Qt4::designer designer-qt4 designer4 designer)
+ _find_qt4_program(QT_LINGUIST_EXECUTABLE Qt4::linguist linguist-qt4 linguist4 linguist)
if (NOT TARGET Qt4::qmake)
add_executable(Qt4::qmake IMPORTED)
diff --git a/Modules/FindSDL_sound.cmake b/Modules/FindSDL_sound.cmake
index 8b22ff7..5fa40a5 100644
--- a/Modules/FindSDL_sound.cmake
+++ b/Modules/FindSDL_sound.cmake
@@ -183,7 +183,7 @@ if(SDL_FOUND AND SDL_SOUND_INCLUDE_DIR AND SDL_SOUND_LIBRARY)
# in the SDL_LIBRARY string after the "-framework".
# But if I quote the stuff in INCLUDE_DIRECTORIES, it doesn't work.
file(WRITE ${PROJECT_BINARY_DIR}/CMakeTmp/CMakeLists.txt
- "cmake_minimum_required(VERSION 2.8)
+ "cmake_minimum_required(VERSION ${CMAKE_VERSION})
project(DetermineSoundLibs)
include_directories(${SDL_INCLUDE_DIR} ${SDL_SOUND_INCLUDE_DIR})
add_executable(DetermineSoundLibs DetermineSoundLibs.c)
diff --git a/Modules/FortranCInterface/CMakeLists.txt b/Modules/FortranCInterface/CMakeLists.txt
index d35a72c..b6232ed 100644
--- a/Modules/FortranCInterface/CMakeLists.txt
+++ b/Modules/FortranCInterface/CMakeLists.txt
@@ -9,7 +9,7 @@
# See the License for more information.
#=============================================================================
-cmake_minimum_required(VERSION 2.6.3)
+cmake_minimum_required(VERSION ${CMAKE_VERSION})
project(FortranCInterface C Fortran)
include(${FortranCInterface_BINARY_DIR}/Input.cmake OPTIONAL)
diff --git a/Modules/FortranCInterface/Verify/CMakeLists.txt b/Modules/FortranCInterface/Verify/CMakeLists.txt
index e969f24..cde3c53 100644
--- a/Modules/FortranCInterface/Verify/CMakeLists.txt
+++ b/Modules/FortranCInterface/Verify/CMakeLists.txt
@@ -9,7 +9,7 @@
# See the License for more information.
#=============================================================================
-cmake_minimum_required(VERSION 2.7)
+cmake_minimum_required(VERSION ${CMAKE_VERSION})
project(VerifyFortranC C Fortran)
option(VERIFY_CXX "Whether to verify C++ and Fortran" OFF)
diff --git a/Modules/GNUInstallDirs.cmake b/Modules/GNUInstallDirs.cmake
index d868cb3..eac553d 100644
--- a/Modules/GNUInstallDirs.cmake
+++ b/Modules/GNUInstallDirs.cmake
@@ -192,9 +192,26 @@ if(NOT CMAKE_INSTALL_DATADIR)
set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}")
endif()
-if(NOT CMAKE_INSTALL_INFODIR)
- set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)")
- set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info")
+if(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD")
+ if(NOT CMAKE_INSTALL_INFODIR)
+ set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (info)")
+ set(CMAKE_INSTALL_INFODIR "info")
+ endif()
+
+ if(NOT CMAKE_INSTALL_MANDDIR)
+ set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (man)")
+ set(CMAKE_INSTALL_MANDIR "man")
+ endif()
+else()
+ if(NOT CMAKE_INSTALL_INFODIR)
+ set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)")
+ set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info")
+ endif()
+
+ if(NOT CMAKE_INSTALL_MANDDIR)
+ set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)")
+ set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man")
+ endif()
endif()
if(NOT CMAKE_INSTALL_LOCALEDIR)
@@ -202,11 +219,6 @@ if(NOT CMAKE_INSTALL_LOCALEDIR)
set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale")
endif()
-if(NOT CMAKE_INSTALL_MANDIR)
- set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)")
- set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man")
-endif()
-
if(NOT CMAKE_INSTALL_DOCDIR)
set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)")
set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}")
diff --git a/Modules/IntelVSImplicitPath/CMakeLists.txt b/Modules/IntelVSImplicitPath/CMakeLists.txt
index 96dc4e6..d115704 100644
--- a/Modules/IntelVSImplicitPath/CMakeLists.txt
+++ b/Modules/IntelVSImplicitPath/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 2.8)
+cmake_minimum_required(VERSION ${CMAKE_VERSION})
project(IntelFortranImplicit Fortran)
add_custom_command(
OUTPUT output.cmake
diff --git a/Modules/Internal/FeatureTesting.cmake b/Modules/Internal/FeatureTesting.cmake
index 7bf6d91..abd9a26 100644
--- a/Modules/Internal/FeatureTesting.cmake
+++ b/Modules/Internal/FeatureTesting.cmake
@@ -20,7 +20,7 @@ macro(record_compiler_features lang compile_flags feature_list)
endif()
endforeach()
file(APPEND "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}"
- "\n};\n\nint main() { return 0; }\n")
+ "\n};\n\nint main(int argc, char** argv) { (void)argv; return features[argc]; }\n")
try_compile(CMAKE_${lang}_FEATURE_TEST
${CMAKE_BINARY_DIR} "${CMAKE_BINARY_DIR}/CMakeFiles/feature_tests.${lang_lc}"
diff --git a/Modules/Platform/OpenBSD.cmake b/Modules/Platform/OpenBSD.cmake
index a4f6114..7ac6c7e 100644
--- a/Modules/Platform/OpenBSD.cmake
+++ b/Modules/Platform/OpenBSD.cmake
@@ -17,6 +17,22 @@ endif()
set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_OPENBSD_VERSIONING 1)
+# OpenBSD has no multilib
+set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE)
+
# OpenBSD policy requires that shared libraries be installed without
# executable permission.
set(CMAKE_INSTALL_SO_NO_EXE 1)
+
+if($ENV{LOCALBASE})
+ set(OPENBSD_LOCALBASE $ENV{LOCALBASE})
+else()
+ set(OPENBSD_LOCALBASE /usr/local)
+endif()
+if($ENV{X11BASE})
+ set(OPENBSD_X11BASE $ENV{X11BASE})
+else()
+ set(OPENBSD_X11BASE /usr/X11R6)
+endif()
+
+list(APPEND CMAKE_SYSTEM_PREFIX_PATH ${OPENBSD_LOCALBASE})
diff --git a/Modules/Platform/Windows-GNU.cmake b/Modules/Platform/Windows-GNU.cmake
index 990acea..ffc5657 100644
--- a/Modules/Platform/Windows-GNU.cmake
+++ b/Modules/Platform/Windows-GNU.cmake
@@ -154,6 +154,7 @@ macro(__windows_compiler_gnu_abi lang)
find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvars32.bat
DOC "Visual Studio vcvars32.bat"
PATHS
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\12.0\\Setup\\VC;ProductDir]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin"
@@ -163,9 +164,10 @@ macro(__windows_compiler_gnu_abi lang)
)
set(CMAKE_GNUtoMS_ARCH x86)
elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL 8)
- find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvarsamd64.bat
+ find_program(CMAKE_GNUtoMS_VCVARS NAMES vcvars64.bat vcvarsamd64.bat
DOC "Visual Studio vcvarsamd64.bat"
PATHS
+ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\12.0\\Setup\\VC;ProductDir]/bin/amd64"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VC;ProductDir]/bin/amd64"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\10.0\\Setup\\VC;ProductDir]/bin/amd64"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\9.0\\Setup\\VC;ProductDir]/bin/amd64"
diff --git a/Modules/WriteCompilerDetectionHeader.cmake b/Modules/WriteCompilerDetectionHeader.cmake
index fd236c1..f80943d 100644
--- a/Modules/WriteCompilerDetectionHeader.cmake
+++ b/Modules/WriteCompilerDetectionHeader.cmake
@@ -43,7 +43,11 @@
# Possible compiler identifiers are documented with the
# :variable:`CMAKE_<LANG>_COMPILER_ID` variable.
# Available features in this version of CMake are listed in the
-# :prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global property.
+# :prop_gbl:`CMAKE_C_KNOWN_FEATURES` and
+# :prop_gbl:`CMAKE_CXX_KNOWN_FEATURES` global properties.
+#
+# See the :manual:`cmake-compile-features(7)` manual for information on
+# compile features.
#
# Feature Test Macros
# ===================
@@ -102,6 +106,7 @@
# ========================== =================================== =================
# Feature Define Symbol
# ========================== =================================== =================
+# ``c_restrict`` ``<PREFIX>_RESTRICT`` ``restrict``
# ``cxx_constexpr`` ``<PREFIX>_CONSTEXPR`` ``constexpr``
# ``cxx_deleted_functions`` ``<PREFIX>_DELETED_FUNCTION`` ``= delete``
# ``cxx_extern_templates`` ``<PREFIX>_EXTERN_TEMPLATE`` ``extern``
@@ -198,6 +203,7 @@ function(write_compiler_detection_header
set(compilers
GNU
+ Clang
)
foreach(_comp ${_WCD_COMPILERS})
list(FIND compilers ${_comp} idx)
@@ -221,6 +227,9 @@ function(write_compiler_detection_header
if (feature MATCHES "^cxx_")
list(APPEND _langs CXX)
list(APPEND CXX_features ${feature})
+ elseif (feature MATCHES "^c_")
+ list(APPEND _langs C)
+ list(APPEND C_features ${feature})
else()
message(FATAL_ERROR "Unsupported feature ${feature}.")
endif()
@@ -239,6 +248,8 @@ function(write_compiler_detection_header
if(_lang STREQUAL CXX)
set(file_content "${file_content}\n#ifdef __cplusplus\n")
+ else()
+ set(file_content "${file_content}\n#ifndef __cplusplus\n")
endif()
compiler_id_detection(ID_CONTENT ${_lang} PREFIX ${prefix_arg}_
@@ -279,6 +290,16 @@ function(write_compiler_detection_header
string(TOUPPER ${feature} feature_upper)
set(feature_PP "COMPILER_${feature_upper}")
set(def_name ${prefix_arg}_${feature_PP})
+ if (feature STREQUAL c_restrict)
+ set(def_value "${prefix_arg}_RESTRICT")
+ set(file_content "${file_content}
+# if ${def_name}
+# define ${def_value} restrict
+# else
+# define ${def_value}
+# endif
+\n")
+ endif()
if (feature STREQUAL cxx_constexpr)
set(def_value "${prefix_arg}_DECL_${feature_upper}")
set(file_content "${file_content}
@@ -382,9 +403,8 @@ function(write_compiler_detection_header
\n")
endif()
endforeach()
- if(_lang STREQUAL CXX)
- set(file_content "${file_content}#endif\n")
- endif()
+
+ set(file_content "${file_content}#endif\n")
endforeach()
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index 1d7c127..c9ae7aa 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -1,5 +1,5 @@
# CMake version number components.
set(CMake_VERSION_MAJOR 3)
set(CMake_VERSION_MINOR 0)
-set(CMake_VERSION_PATCH 20140515)
+set(CMake_VERSION_PATCH 20140528)
#set(CMake_VERSION_RC 1)
diff --git a/Source/CTest/cmCTestBuildAndTestHandler.cxx b/Source/CTest/cmCTestBuildAndTestHandler.cxx
index 4a3eec5..b4818be 100644
--- a/Source/CTest/cmCTestBuildAndTestHandler.cxx
+++ b/Source/CTest/cmCTestBuildAndTestHandler.cxx
@@ -156,34 +156,36 @@ void CMakeProgressCallback(const char*msg, float , void * s)
}
//----------------------------------------------------------------------
-void CMakeStdoutCallback(const char* m, int len, void* s)
+void CMakeOutputCallback(const char* m, size_t len, void* s)
{
std::string* out = (std::string*)s;
out->append(m, len);
}
-struct cmSetupOutputCaptureCleanup
+
+//----------------------------------------------------------------------
+class cmCTestBuildAndTestCaptureRAII
{
- ~cmSetupOutputCaptureCleanup()
- {
- cmSystemTools::SetErrorCallback(0, 0);
+ cmake& CM;
+public:
+ cmCTestBuildAndTestCaptureRAII(cmake& cm, std::string& s): CM(cm)
+ {
+ cmSystemTools::SetMessageCallback(CMakeMessageCallback, &s);
+ cmSystemTools::SetStdoutCallback(CMakeOutputCallback, &s);
+ cmSystemTools::SetStderrCallback(CMakeOutputCallback, &s);
+ this->CM.SetProgressCallback(CMakeProgressCallback, &s);
+ }
+ ~cmCTestBuildAndTestCaptureRAII()
+ {
+ this->CM.SetProgressCallback(0, 0);
+ cmSystemTools::SetStderrCallback(0, 0);
cmSystemTools::SetStdoutCallback(0, 0);
- }
+ cmSystemTools::SetMessageCallback(0, 0);
+ }
};
//----------------------------------------------------------------------
int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
{
- unsigned int k;
- std::string cmakeOutString;
- cmSystemTools::SetErrorCallback(CMakeMessageCallback, &cmakeOutString);
- cmSystemTools::SetStdoutCallback(CMakeStdoutCallback, &cmakeOutString);
- // make sure SetStdoutCallback and SetErrorCallback are set to null
- // after this function exits so that they do not point at a destroyed
- // string cmakeOutString
- cmSetupOutputCaptureCleanup cleanup;
- static_cast<void>(cleanup);
- cmOStringStream out;
-
// if the generator and make program are not specified then it is an error
if (!this->BuildGenerator.size())
{
@@ -197,6 +199,12 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
return 1;
}
+ cmake cm;
+ std::string cmakeOutString;
+ cmCTestBuildAndTestCaptureRAII captureRAII(cm, cmakeOutString);
+ static_cast<void>(captureRAII);
+ cmOStringStream out;
+
if ( this->CTest->GetConfigType().size() == 0 &&
this->ConfigSample.size())
{
@@ -233,10 +241,6 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
}
cmSystemTools::ChangeDirectory(this->BinaryDir.c_str());
- // should we cmake?
- cmake cm;
- cm.SetProgressCallback(CMakeProgressCallback, &cmakeOutString);
-
if(this->BuildNoCMake)
{
// Make the generator available for the Build call below.
@@ -369,7 +373,7 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
std::vector<const char*> testCommand;
testCommand.push_back(fullPath.c_str());
- for(k=0; k < this->TestCommandArgs.size(); ++k)
+ for(size_t k=0; k < this->TestCommandArgs.size(); ++k)
{
testCommand.push_back(this->TestCommandArgs[k].c_str());
}
@@ -383,7 +387,7 @@ int cmCTestBuildAndTestHandler::RunCMakeAndTest(std::string* outstring)
cmSystemTools::ChangeDirectory(this->BuildRunDir.c_str());
}
out << "Running test command: \"" << fullPath << "\"";
- for(k=0; k < this->TestCommandArgs.size(); ++k)
+ for(size_t k=0; k < this->TestCommandArgs.size(); ++k)
{
out << " \"" << this->TestCommandArgs[k] << "\"";
}
diff --git a/Source/CTest/cmParseCacheCoverage.cxx b/Source/CTest/cmParseCacheCoverage.cxx
index 85e07ae..d17f169 100644
--- a/Source/CTest/cmParseCacheCoverage.cxx
+++ b/Source/CTest/cmParseCacheCoverage.cxx
@@ -215,7 +215,19 @@ bool cmParseCacheCoverage::ReadCMCovFile(const char* file)
{
coverageVector.push_back(-1);
}
- coverageVector[linenumber] += count;
+ // Accounts for lines that were previously marked
+ // as non-executable code (-1). if the parser comes back with
+ // a non-zero count, increase the count by 1 to push the line
+ // into the executable code set in addition to the count found.
+ if(coverageVector[linenumber] == -1 &&
+ count > 0)
+ {
+ coverageVector[linenumber] += count+1;
+ }
+ else
+ {
+ coverageVector[linenumber] += count;
+ }
}
return true;
}
diff --git a/Source/CTest/cmParseGTMCoverage.cxx b/Source/CTest/cmParseGTMCoverage.cxx
index 5bcfeac..be10c2e 100644
--- a/Source/CTest/cmParseGTMCoverage.cxx
+++ b/Source/CTest/cmParseGTMCoverage.cxx
@@ -106,7 +106,19 @@ bool cmParseGTMCoverage::ReadMCovFile(const char* file)
{
cmCTestCoverageHandlerContainer::SingleFileCoverageVector&
coverageVector = this->Coverage.TotalCoverage[filepath];
- coverageVector[lineoffset + linenumber] += count;
+ // This section accounts for lines that were previously marked
+ // as non-executable code (-1), if the parser comes back with
+ // a non-zero count, increase the count by 1 to push the line
+ // into the executable code set in addtion to the count found.
+ if(coverageVector[lineoffset + linenumber] == -1 &&
+ count > 0)
+ {
+ coverageVector[lineoffset + linenumber] += count+1;
+ }
+ else
+ {
+ coverageVector[lineoffset + linenumber] += count;
+ }
lastoffset = lineoffset;
}
}
@@ -141,7 +153,7 @@ bool cmParseGTMCoverage::FindFunctionInMumpsFile(std::string const& filepath,
if(pos == 0)
{
char nextchar = line[function.size()];
- if(nextchar == ' ' || nextchar == '(')
+ if(nextchar == ' ' || nextchar == '('|| nextchar == '\t')
{
lineoffset = linenum;
return true;
@@ -261,7 +273,11 @@ bool cmParseGTMCoverage::ParseMCOVLine(std::string const& line,
// ^COVERAGE("%RSEL","SRC"), the line offset is 0
if(args.size() == 2)
{
- linenumber = 0;
+ // To avoid double counting of line 0 of each entry point,
+ // Don't count the lines that do not give an explicit line
+ // number.
+ routine="";
+ function="";
}
else
{
diff --git a/Source/CursesDialog/ccmake.cxx b/Source/CursesDialog/ccmake.cxx
index 2d1ef5c..d70bedb 100644
--- a/Source/CursesDialog/ccmake.cxx
+++ b/Source/CursesDialog/ccmake.cxx
@@ -73,7 +73,8 @@ void onsig(int)
}
-void CMakeErrorHandler(const char* message, const char* title, bool&, void* clientData)
+void CMakeMessageHandler(const char* message, const char* title, bool&,
+ void* clientData)
{
cmCursesForm* self = static_cast<cmCursesForm*>( clientData );
self->AddError(message, title);
@@ -171,7 +172,7 @@ int main(int argc, char const* const* argv)
return 1;
}
- cmSystemTools::SetErrorCallback(CMakeErrorHandler, myform);
+ cmSystemTools::SetMessageCallback(CMakeMessageHandler, myform);
cmCursesForm::CurrentForm = myform;
diff --git a/Source/QtDialog/QCMake.cxx b/Source/QtDialog/QCMake.cxx
index 5f9ebaf..b833648 100644
--- a/Source/QtDialog/QCMake.cxx
+++ b/Source/QtDialog/QCMake.cxx
@@ -35,7 +35,9 @@ QCMake::QCMake(QObject* p)
cmSystemTools::DisableRunCommandOutput();
cmSystemTools::SetRunCommandHideConsole(true);
- cmSystemTools::SetErrorCallback(QCMake::errorCallback, this);
+ cmSystemTools::SetMessageCallback(QCMake::messageCallback, this);
+ cmSystemTools::SetStdoutCallback(QCMake::stdoutCallback, this);
+ cmSystemTools::SetStderrCallback(QCMake::stderrCallback, this);
this->CMakeInstance = new cmake;
this->CMakeInstance->SetCMakeEditCommand(
@@ -348,14 +350,28 @@ void QCMake::progressCallback(const char* msg, float percent, void* cd)
QCoreApplication::processEvents();
}
-void QCMake::errorCallback(const char* msg, const char* /*title*/,
- bool& /*stop*/, void* cd)
+void QCMake::messageCallback(const char* msg, const char* /*title*/,
+ bool& /*stop*/, void* cd)
{
QCMake* self = reinterpret_cast<QCMake*>(cd);
emit self->errorMessage(QString::fromLocal8Bit(msg));
QCoreApplication::processEvents();
}
+void QCMake::stdoutCallback(const char* msg, size_t len, void* cd)
+{
+ QCMake* self = reinterpret_cast<QCMake*>(cd);
+ emit self->outputMessage(QString::fromLocal8Bit(msg,int(len)));
+ QCoreApplication::processEvents();
+}
+
+void QCMake::stderrCallback(const char* msg, size_t len, void* cd)
+{
+ QCMake* self = reinterpret_cast<QCMake*>(cd);
+ emit self->outputMessage(QString::fromLocal8Bit(msg,int(len)));
+ QCoreApplication::processEvents();
+}
+
QString QCMake::binaryDirectory() const
{
return this->BinaryDirectory;
diff --git a/Source/QtDialog/QCMake.h b/Source/QtDialog/QCMake.h
index 93ac8ab..bd82f0d 100644
--- a/Source/QtDialog/QCMake.h
+++ b/Source/QtDialog/QCMake.h
@@ -136,8 +136,10 @@ protected:
static bool interruptCallback(void*);
static void progressCallback(const char* msg, float percent, void* cd);
- static void errorCallback(const char* msg, const char* title,
- bool&, void* cd);
+ static void messageCallback(const char* msg, const char* title,
+ bool&, void* cd);
+ static void stdoutCallback(const char* msg, size_t len, void* cd);
+ static void stderrCallback(const char* msg, size_t len, void* cd);
bool SuppressDevWarnings;
bool WarnUninitializedMode;
bool WarnUnusedMode;
diff --git a/Source/cmCacheManager.cxx b/Source/cmCacheManager.cxx
index 8f352b1..d6b84a0 100644
--- a/Source/cmCacheManager.cxx
+++ b/Source/cmCacheManager.cxx
@@ -751,11 +751,7 @@ void cmCacheManager::AddCacheEntry(const std::string& key,
}
e.SetProperty("HELPSTRING", helpString? helpString :
"(This variable does not exist and should not be used)");
- if (this->Cache[key].Value == e.Value)
- {
- this->CMakeInstance->UnwatchUnusedCli(key);
- }
- this->Cache[key] = e;
+ this->CMakeInstance->UnwatchUnusedCli(key);
}
bool cmCacheManager::CacheIterator::IsAtEnd() const
diff --git a/Source/cmExecuteProcessCommand.cxx b/Source/cmExecuteProcessCommand.cxx
index 40f70b8..11f8ae5 100644
--- a/Source/cmExecuteProcessCommand.cxx
+++ b/Source/cmExecuteProcessCommand.cxx
@@ -256,10 +256,6 @@ bool cmExecuteProcessCommand
// Check the output variables.
bool merge_output = (output_variable == error_variable);
- if(error_variable.empty() && !error_quiet)
- {
- cmsysProcess_SetPipeShared(cp, cmsysProcess_Pipe_STDERR, 1);
- }
if(!input_file.empty())
{
cmsysProcess_SetPipeFile(cp, cmsysProcess_Pipe_STDIN, input_file.c_str());
@@ -307,7 +303,11 @@ bool cmExecuteProcessCommand
}
else if(p == cmsysProcess_Pipe_STDERR && !error_quiet)
{
- if(!error_variable.empty())
+ if(error_variable.empty())
+ {
+ cmSystemTools::Stderr(data, length);
+ }
+ else
{
cmExecuteProcessCommandAppend(tempError, data, length);
}
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index 5bfb664..4ee34df 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -232,9 +232,10 @@ bool cmFileCommand::HandleWriteCommand(std::vector<std::string> const& args,
cmsys::ofstream file(fileName.c_str(), append?std::ios::app: std::ios::out);
if ( !file )
{
- std::string error = "Internal CMake error when trying to open file: ";
- error += fileName.c_str();
- error += " for writing.";
+ std::string error = "failed to open for writing (";
+ error += cmSystemTools::GetLastSystemError();
+ error += "):\n ";
+ error += fileName;
this->SetError(error);
return false;
}
@@ -292,9 +293,10 @@ bool cmFileCommand::HandleReadCommand(std::vector<std::string> const& args)
if ( !file )
{
- std::string error = "Internal CMake error when trying to open file: ";
- error += fileName.c_str();
- error += " for reading.";
+ std::string error = "failed to open for reading (";
+ error += cmSystemTools::GetLastSystemError();
+ error += "):\n ";
+ error += fileName;
this->SetError(error);
return false;
}
diff --git a/Source/cmGeneratorExpression.cxx b/Source/cmGeneratorExpression.cxx
index d09e950..d53bdd7 100644
--- a/Source/cmGeneratorExpression.cxx
+++ b/Source/cmGeneratorExpression.cxx
@@ -110,6 +110,9 @@ const char *cmCompiledGeneratorExpression::Evaluate(
break;
}
}
+
+ this->MaxLanguageStandard = context.MaxLanguageStandard;
+
if (!context.HadError)
{
this->HadContextSensitiveCondition = context.HadContextSensitiveCondition;
@@ -465,3 +468,17 @@ bool cmGeneratorExpression::IsValidTargetName(const std::string &input)
return targetNameValidator.find(input.c_str());
}
+
+//----------------------------------------------------------------------------
+void
+cmCompiledGeneratorExpression::GetMaxLanguageStandard(cmTarget const* tgt,
+ std::map<std::string, std::string>& mapping)
+{
+ typedef std::map<cmTarget const*,
+ std::map<std::string, std::string> > MapType;
+ MapType::const_iterator it = this->MaxLanguageStandard.find(tgt);
+ if (it != this->MaxLanguageStandard.end())
+ {
+ mapping = it->second;
+ }
+}
diff --git a/Source/cmGeneratorExpression.h b/Source/cmGeneratorExpression.h
index da64515..ef5360e 100644
--- a/Source/cmGeneratorExpression.h
+++ b/Source/cmGeneratorExpression.h
@@ -117,6 +117,9 @@ public:
this->EvaluateForBuildsystem = eval;
}
+ void GetMaxLanguageStandard(cmTarget const* tgt,
+ std::map<std::string, std::string>& mapping);
+
private:
cmCompiledGeneratorExpression(cmListFileBacktrace const& backtrace,
const std::string& input);
@@ -134,6 +137,8 @@ private:
mutable std::set<cmTarget*> DependTargets;
mutable std::set<cmTarget const*> AllTargetsSeen;
mutable std::set<std::string> SeenTargetProperties;
+ mutable std::map<cmTarget const*, std::map<std::string, std::string> >
+ MaxLanguageStandard;
mutable std::string Output;
mutable bool HadContextSensitiveCondition;
bool EvaluateForBuildsystem;
diff --git a/Source/cmGeneratorExpressionEvaluator.cxx b/Source/cmGeneratorExpressionEvaluator.cxx
index a513921..0b357f6 100644
--- a/Source/cmGeneratorExpressionEvaluator.cxx
+++ b/Source/cmGeneratorExpressionEvaluator.cxx
@@ -1314,6 +1314,94 @@ static const struct TargetObjectsNode : public cmGeneratorExpressionNode
} targetObjectsNode;
//----------------------------------------------------------------------------
+static const struct CompileFeaturesNode : public cmGeneratorExpressionNode
+{
+ CompileFeaturesNode() {}
+
+ virtual int NumExpectedParameters() const { return OneOrMoreParameters; }
+
+ std::string Evaluate(const std::vector<std::string> &parameters,
+ cmGeneratorExpressionContext *context,
+ const GeneratorExpressionContent *content,
+ cmGeneratorExpressionDAGChecker *dagChecker) const
+ {
+ cmTarget const* target = context->HeadTarget;
+ if (!target)
+ {
+ reportError(context, content->GetOriginalExpression(),
+ "$<COMPILE_FEATURE> may only be used with binary targets. It may "
+ "not be used with add_custom_command or add_custom_target.");
+ return std::string();
+ }
+
+ typedef std::map<std::string, std::vector<std::string> > LangMap;
+ static LangMap availableFeatures;
+
+ LangMap testedFeatures;
+
+ for (std::vector<std::string>::const_iterator it = parameters.begin();
+ it != parameters.end(); ++it)
+ {
+ std::string error;
+ std::string lang;
+ if (!context->Makefile->CompileFeatureKnown(context->HeadTarget,
+ *it, lang, &error))
+ {
+ reportError(context, content->GetOriginalExpression(), error);
+ return std::string();
+ }
+ testedFeatures[lang].push_back(*it);
+
+ if (availableFeatures.find(lang) == availableFeatures.end())
+ {
+ const char* featuresKnown
+ = context->Makefile->CompileFeaturesAvailable(lang, &error);
+ if (!featuresKnown)
+ {
+ reportError(context, content->GetOriginalExpression(), error);
+ return std::string();
+ }
+ cmSystemTools::ExpandListArgument(featuresKnown,
+ availableFeatures[lang]);
+ }
+ }
+
+ bool evalLL = dagChecker && dagChecker->EvaluatingLinkLibraries();
+
+ std::string result;
+
+ for (LangMap::const_iterator lit = testedFeatures.begin();
+ lit != testedFeatures.end(); ++lit)
+ {
+ for (std::vector<std::string>::const_iterator it = lit->second.begin();
+ it != lit->second.end(); ++it)
+ {
+ if (!context->Makefile->HaveFeatureAvailable(target,
+ lit->first, *it))
+ {
+ if (evalLL)
+ {
+ const char* l = target->GetProperty(lit->first + "_STANDARD");
+ if (!l)
+ {
+ l = context->Makefile
+ ->GetDefinition("CMAKE_" + lit->first + "_STANDARD_DEFAULT");
+ }
+ assert(l);
+ context->MaxLanguageStandard[target][lit->first] = l;
+ }
+ else
+ {
+ return "0";
+ }
+ }
+ }
+ }
+ return "1";
+ }
+} compileFeaturesNode;
+
+//----------------------------------------------------------------------------
static const char* targetPolicyWhitelist[] = {
0
#define TARGET_POLICY_STRING(POLICY) \
@@ -1647,6 +1735,7 @@ cmGeneratorExpressionNode* GetNode(const std::string &identifier)
nodeMap["C_COMPILER_VERSION"] = &cCompilerVersionNode;
nodeMap["CXX_COMPILER_VERSION"] = &cxxCompilerVersionNode;
nodeMap["PLATFORM_ID"] = &platformIdNode;
+ nodeMap["COMPILE_FEATURES"] = &compileFeaturesNode;
nodeMap["CONFIGURATION"] = &configurationNode;
nodeMap["CONFIG"] = &configurationTestNode;
nodeMap["TARGET_FILE"] = &targetFileNode;
diff --git a/Source/cmGeneratorExpressionEvaluator.h b/Source/cmGeneratorExpressionEvaluator.h
index 54a2548..eb76d7f 100644
--- a/Source/cmGeneratorExpressionEvaluator.h
+++ b/Source/cmGeneratorExpressionEvaluator.h
@@ -26,6 +26,8 @@ struct cmGeneratorExpressionContext
std::set<cmTarget*> DependTargets;
std::set<cmTarget const*> AllTargets;
std::set<std::string> SeenTargetProperties;
+ std::map<cmTarget const*, std::map<std::string, std::string> >
+ MaxLanguageStandard;
cmMakefile *Makefile;
std::string Config;
cmTarget const* HeadTarget; // The target whose property is being evaluated.
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index ec5ce9e..153c611 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -943,18 +943,32 @@ void cmGeneratorTarget::GetAppleArchs(const std::string& config,
}
//----------------------------------------------------------------------------
-const char* cmGeneratorTarget::GetCreateRuleVariable() const
+std::string
+cmGeneratorTarget::GetCreateRuleVariable(std::string const& lang,
+ std::string const& config) const
{
switch(this->GetType())
{
case cmTarget::STATIC_LIBRARY:
- return "_CREATE_STATIC_LIBRARY";
+ {
+ std::string var = "CMAKE_" + lang + "_CREATE_STATIC_LIBRARY";
+ if(this->Target->GetFeatureAsBool(
+ "INTERPROCEDURAL_OPTIMIZATION", config))
+ {
+ std::string varIPO = var + "_IPO";
+ if(this->Makefile->GetDefinition(varIPO))
+ {
+ return varIPO;
+ }
+ }
+ return var;
+ }
case cmTarget::SHARED_LIBRARY:
- return "_CREATE_SHARED_LIBRARY";
+ return "CMAKE_" + lang + "_CREATE_SHARED_LIBRARY";
case cmTarget::MODULE_LIBRARY:
- return "_CREATE_SHARED_MODULE";
+ return "CMAKE_" + lang + "_CREATE_SHARED_MODULE";
case cmTarget::EXECUTABLE:
- return "_LINK_EXECUTABLE";
+ return "CMAKE_" + lang + "_LINK_EXECUTABLE";
default:
break;
}
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index 9d13e6c..29aa410 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -75,9 +75,9 @@ public:
void GetAppleArchs(const std::string& config,
std::vector<std::string>& archVec) const;
- ///! Return the rule variable used to create this type of target,
- // need to add CMAKE_(LANG) for full name.
- const char* GetCreateRuleVariable() const;
+ /** Return the rule variable used to create this type of target. */
+ std::string GetCreateRuleVariable(std::string const& lang,
+ std::string const& config) const;
/** Get the include directories for this target. */
std::vector<std::string> GetIncludeDirectories(
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index d44da37..e5fc436 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -647,13 +647,14 @@ cmXCodeObject*
cmGlobalXCodeGenerator::CreateXCodeSourceFileFromPath(
const std::string &fullpath,
cmTarget& cmtarget,
- const std::string &lang)
+ const std::string &lang,
+ cmSourceFile* sf)
{
// Using a map and the full path guarantees that we will always get the same
// fileRef object for any given full path.
//
cmXCodeObject* fileRef =
- this->CreateXCodeFileReferenceFromPath(fullpath, cmtarget, lang);
+ this->CreateXCodeFileReferenceFromPath(fullpath, cmtarget, lang, sf);
cmXCodeObject* buildFile = this->CreateObject(cmXCodeObject::PBXBuildFile);
buildFile->SetComment(fileRef->GetComment());
@@ -696,7 +697,7 @@ cmGlobalXCodeGenerator::CreateXCodeSourceFile(cmLocalGenerator* lg,
this->CurrentLocalGenerator->GetSourceFileLanguage(*sf);
cmXCodeObject* buildFile =
- this->CreateXCodeSourceFileFromPath(sf->GetFullPath(), cmtarget, lang);
+ this->CreateXCodeSourceFileFromPath(sf->GetFullPath(), cmtarget, lang, sf);
cmXCodeObject* fileRef = buildFile->GetObject("fileRef")->GetObject();
cmXCodeObject* settings =
@@ -828,7 +829,8 @@ cmXCodeObject*
cmGlobalXCodeGenerator::CreateXCodeFileReferenceFromPath(
const std::string &fullpath,
cmTarget& cmtarget,
- const std::string &lang)
+ const std::string &lang,
+ cmSourceFile* sf)
{
std::string fname = fullpath;
cmXCodeObject* fileRef = this->FileRefs[fname];
@@ -848,36 +850,49 @@ cmGlobalXCodeGenerator::CreateXCodeFileReferenceFromPath(
}
fileRef->AddAttribute("fileEncoding", this->CreateString("4"));
- // Compute the extension.
- std::string ext;
- std::string realExt =
- cmSystemTools::GetFilenameLastExtension(fullpath);
- if(!realExt.empty())
+ bool useLastKnownFileType = false;
+ std::string fileType;
+ if(sf)
{
- // Extension without the leading '.'.
- ext = realExt.substr(1);
- }
-
- // If fullpath references a directory, then we need to specify
- // lastKnownFileType as folder in order for Xcode to be able to open the
- // contents of the folder (Xcode 4.6 does not like explicitFileType=folder).
- if(cmSystemTools::FileIsDirectory(fullpath.c_str()))
- {
- fileRef->AddAttribute("lastKnownFileType",
- this->CreateString("folder"));
+ if(const char* e = sf->GetProperty("XCODE_EXPLICIT_FILE_TYPE"))
+ {
+ fileType = e;
+ }
+ else if(const char* l = sf->GetProperty("XCODE_LAST_KNOWN_FILE_TYPE"))
+ {
+ useLastKnownFileType = true;
+ fileType = l;
+ }
}
- else
+ if(fileType.empty())
{
- bool keepLastKnownFileType = false;
- std::string sourcecode = GetSourcecodeValueFromFileExtension(ext,
- lang, keepLastKnownFileType);
- const char* attribute = keepLastKnownFileType ?
- "lastKnownFileType" :
- "explicitFileType";
- fileRef->AddAttribute(attribute,
- this->CreateString(sourcecode.c_str()));
+ // If fullpath references a directory, then we need to specify
+ // lastKnownFileType as folder in order for Xcode to be able to
+ // open the contents of the folder.
+ // (Xcode 4.6 does not like explicitFileType=folder).
+ if(cmSystemTools::FileIsDirectory(fullpath.c_str()))
+ {
+ fileType = "folder";
+ useLastKnownFileType = true;
+ }
+ else
+ {
+ // Compute the extension without leading '.'.
+ std::string ext = cmSystemTools::GetFilenameLastExtension(fullpath);
+ if(!ext.empty())
+ {
+ ext = ext.substr(1);
+ }
+
+ fileType = GetSourcecodeValueFromFileExtension(
+ ext, lang, useLastKnownFileType);
+ }
}
+ fileRef->AddAttribute(useLastKnownFileType? "lastKnownFileType"
+ : "explicitFileType",
+ this->CreateString(fileType));
+
// Store the file path relative to the top of the source tree.
std::string path = this->RelativeToSource(fullpath.c_str());
std::string name = cmSystemTools::GetFilenameName(path.c_str());
@@ -902,7 +917,7 @@ cmGlobalXCodeGenerator::CreateXCodeFileReference(cmSourceFile* sf,
this->CurrentLocalGenerator->GetSourceFileLanguage(*sf);
return this->CreateXCodeFileReferenceFromPath(
- sf->GetFullPath(), cmtarget, lang);
+ sf->GetFullPath(), cmtarget, lang, sf);
}
//----------------------------------------------------------------------------
@@ -1052,7 +1067,7 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
{
std::string obj = *oi;
cmXCodeObject* xsf =
- this->CreateXCodeSourceFileFromPath(obj, cmtarget, "");
+ this->CreateXCodeSourceFileFromPath(obj, cmtarget, "", 0);
externalObjFiles.push_back(xsf);
}
}
diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h
index 23616b4..c9937ed 100644
--- a/Source/cmGlobalXCodeGenerator.h
+++ b/Source/cmGlobalXCodeGenerator.h
@@ -163,10 +163,12 @@ private:
std::vector<cmLocalGenerator*>& generators);
cmXCodeObject* CreateXCodeFileReferenceFromPath(const std::string &fullpath,
cmTarget& cmtarget,
- const std::string &lang);
+ const std::string &lang,
+ cmSourceFile* sf);
cmXCodeObject* CreateXCodeSourceFileFromPath(const std::string &fullpath,
cmTarget& cmtarget,
- const std::string &lang);
+ const std::string &lang,
+ cmSourceFile* sf);
cmXCodeObject* CreateXCodeFileReference(cmSourceFile* sf,
cmTarget& cmtarget);
cmXCodeObject* CreateXCodeSourceFile(cmLocalGenerator* gen,
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 7028da0..e80b8ee 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -657,10 +657,10 @@ void cmLocalGenerator::AddBuildTargetRule(const std::string& llang,
{
std::string objs;
std::vector<std::string> objVector;
+ std::string config = this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE");
// Add all the sources outputs to the depends of the target
std::vector<cmSourceFile*> classes;
- target.GetSourceFiles(classes,
- this->Makefile->GetSafeDefinition("CMAKE_BUILD_TYPE"));
+ target.GetSourceFiles(classes, config);
for(std::vector<cmSourceFile*>::const_iterator i = classes.begin();
i != classes.end(); ++i)
{
@@ -686,9 +686,7 @@ void cmLocalGenerator::AddBuildTargetRule(const std::string& llang,
}
}
}
- std::string createRule = "CMAKE_";
- createRule += llang;
- createRule += target.GetCreateRuleVariable();
+ std::string createRule = target.GetCreateRuleVariable(llang, config);
bool useWatcomQuote = this->Makefile->IsOn(createRule+"_USE_WATCOM_QUOTE");
std::string targetName = target.Target->GetFullName();
// Executable :
@@ -1484,6 +1482,31 @@ void cmLocalGenerator::AddCompileOptions(
return;
}
}
+
+ for(std::map<std::string, std::string>::const_iterator it
+ = target->GetMaxLanguageStandards().begin();
+ it != target->GetMaxLanguageStandards().end(); ++it)
+ {
+ const char* standard = target->GetProperty(it->first + "_STANDARD");
+ if(!standard)
+ {
+ continue;
+ }
+ if (this->Makefile->IsLaterStandard(it->first, standard, it->second))
+ {
+ cmOStringStream e;
+ e << "The COMPILE_FEATURES property of target \""
+ << target->GetName() << "\" was evaluated when computing the link "
+ "implementation, and the \"" << it->first << "_STANDARD\" was \""
+ << it->second << "\" for that computation. Computing the "
+ "COMPILE_FEATURES based on the link implementation resulted in a "
+ "higher \"" << it->first << "_STANDARD\" \"" << standard << "\". "
+ "This is not permitted. The COMPILE_FEATURES may not both depend on "
+ "and be depended on by the link implementation." << std::endl;
+ this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
+ return;
+ }
+ }
this->AddCompilerRequirementFlag(flags, target, lang);
}
@@ -2201,6 +2224,10 @@ AddCompilerRequirementFlag(std::string &flags, cmTarget* target,
// Maintain sorted order, most recent first.
langStdMap["CXX"].push_back("11");
langStdMap["CXX"].push_back("98");
+
+ langStdMap["C"].push_back("11");
+ langStdMap["C"].push_back("99");
+ langStdMap["C"].push_back("90");
}
std::string standard(standardProp);
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 90a7b0b..aca7a93 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -103,6 +103,7 @@ cmMakefile::cmMakefile(): Internal(new Internals)
this->GeneratingBuildSystem = false;
this->NumLastMatches = 0;
+ this->SuppressWatches = false;
}
cmMakefile::cmMakefile(const cmMakefile& mf): Internal(new Internals)
@@ -153,6 +154,7 @@ cmMakefile::cmMakefile(const cmMakefile& mf): Internal(new Internals)
this->OutputToSource = mf.OutputToSource;
this->NumLastMatches = mf.NumLastMatches;
+ this->SuppressWatches = mf.SuppressWatches;
}
//----------------------------------------------------------------------------
@@ -2463,7 +2465,7 @@ const char* cmMakefile::GetDefinition(const std::string& name) const
}
#ifdef CMAKE_BUILD_WITH_CMAKE
cmVariableWatch* vv = this->GetVariableWatch();
- if ( vv )
+ if ( vv && !this->SuppressWatches )
{
if ( def )
{
@@ -2472,19 +2474,8 @@ const char* cmMakefile::GetDefinition(const std::string& name) const
}
else
{
- // are unknown access allowed
- const char* allow = this->Internal->VarStack.top()
- .Get("CMAKE_ALLOW_UNKNOWN_VARIABLE_READ_ACCESS");
- if(cmSystemTools::IsOn(allow))
- {
- vv->VariableAccessed(name,
- cmVariableWatch::ALLOWED_UNKNOWN_VARIABLE_READ_ACCESS, def, this);
- }
- else
- {
- vv->VariableAccessed(name,
+ vv->VariableAccessed(name,
cmVariableWatch::UNKNOWN_VARIABLE_READ_ACCESS, def, this);
- }
}
}
#endif
@@ -2570,10 +2561,14 @@ const char *cmMakefile::ExpandVariablesInString(std::string& source,
original = source;
newResult = source;
compareResults = true;
+ // Suppress variable watches to avoid calling hooks twice. Suppress new
+ // dereferences since the OLD behavior is still what is actually used.
+ this->SuppressWatches = true;
newError =
ExpandVariablesInStringNew(newErrorstr, newResult, escapeQuotes,
noEscapes, atOnly, filename, line,
removeEmpty, replaceAt);
+ this->SuppressWatches = false;
}
case cmPolicies::OLD:
mtype = ExpandVariablesInStringOld(errorstr, source, escapeQuotes,
@@ -4973,6 +4968,10 @@ void cmMakefile::RecordPolicies(cmPolicies::PolicyMap& pm)
}
#define FEATURE_STRING(F) , #F
+static const char * const C_FEATURES[] = {
+ 0
+ FOR_EACH_C_FEATURE(FEATURE_STRING)
+};
static const char * const CXX_FEATURES[] = {
0
@@ -4980,6 +4979,11 @@ static const char * const CXX_FEATURES[] = {
};
#undef FEATURE_STRING
+static const char * const C_STANDARDS[] = {
+ "90"
+ , "99"
+ , "11"
+};
static const char * const CXX_STANDARDS[] = {
"98"
, "11"
@@ -4995,35 +4999,91 @@ AddRequiredTargetFeature(cmTarget *target, const std::string& feature,
target->AppendProperty("COMPILE_FEATURES", feature.c_str());
return true;
}
- bool isCxxFeature = std::find_if(cmArrayBegin(CXX_FEATURES) + 1,
- cmArrayEnd(CXX_FEATURES), cmStrCmp(feature))
- != cmArrayEnd(CXX_FEATURES);
- if (!isCxxFeature)
+
+ std::string lang;
+ if (!this->CompileFeatureKnown(target, feature, lang, error))
+ {
+ return false;
+ }
+
+ const char* features = this->CompileFeaturesAvailable(lang, error);
+ if (!features)
+ {
+ return false;
+ }
+
+ std::vector<std::string> availableFeatures;
+ cmSystemTools::ExpandListArgument(features, availableFeatures);
+ if (std::find(availableFeatures.begin(),
+ availableFeatures.end(),
+ feature) == availableFeatures.end())
{
cmOStringStream e;
- if (error)
- {
- e << "specified";
- }
- else
- {
- e << "Specified";
- }
- e << " unknown feature \"" << feature << "\" for "
- "target \"" << target->GetName() << "\".";
- if (error)
- {
- *error = e.str();
- }
- else
- {
- this->IssueMessage(cmake::FATAL_ERROR, e.str());
- }
+ e << "The compiler feature \"" << feature
+ << "\" is not known to " << lang << " compiler\n\""
+ << this->GetDefinition("CMAKE_" + lang + "_COMPILER_ID")
+ << "\"\nversion "
+ << this->GetDefinition("CMAKE_" + lang + "_COMPILER_VERSION") << ".";
+ this->IssueMessage(cmake::FATAL_ERROR, e.str());
return false;
}
- std::string lang = "CXX";
+ target->AppendProperty("COMPILE_FEATURES", feature.c_str());
+
+ return lang == "C"
+ ? this->AddRequiredTargetCFeature(target, feature)
+ : this->AddRequiredTargetCxxFeature(target, feature);
+}
+
+//----------------------------------------------------------------------------
+bool cmMakefile::
+CompileFeatureKnown(cmTarget const* target, const std::string& feature,
+ std::string& lang, std::string *error) const
+{
+ assert(cmGeneratorExpression::Find(feature) == std::string::npos);
+
+ bool isCFeature = std::find_if(cmArrayBegin(C_FEATURES) + 1,
+ cmArrayEnd(C_FEATURES), cmStrCmp(feature))
+ != cmArrayEnd(C_FEATURES);
+ if (isCFeature)
+ {
+ lang = "C";
+ return true;
+ }
+ bool isCxxFeature = std::find_if(cmArrayBegin(CXX_FEATURES) + 1,
+ cmArrayEnd(CXX_FEATURES), cmStrCmp(feature))
+ != cmArrayEnd(CXX_FEATURES);
+ if (isCxxFeature)
+ {
+ lang = "CXX";
+ return true;
+ }
+ cmOStringStream e;
+ if (error)
+ {
+ e << "specified";
+ }
+ else
+ {
+ e << "Specified";
+ }
+ e << " unknown feature \"" << feature << "\" for "
+ "target \"" << target->GetName() << "\".";
+ if (error)
+ {
+ *error = e.str();
+ }
+ else
+ {
+ this->IssueMessage(cmake::FATAL_ERROR, e.str());
+ }
+ return false;
+}
+//----------------------------------------------------------------------------
+const char* cmMakefile::
+CompileFeaturesAvailable(const std::string& lang, std::string *error) const
+{
const char* featuresKnown =
this->GetDefinition("CMAKE_" + lang + "_COMPILE_FEATURES");
@@ -5050,30 +5110,150 @@ AddRequiredTargetFeature(cmTarget *target, const std::string& feature,
{
this->IssueMessage(cmake::FATAL_ERROR, e.str());
}
- return false;
+ return 0;
}
+ return featuresKnown;
+}
- std::vector<std::string> availableFeatures;
- cmSystemTools::ExpandListArgument(featuresKnown, availableFeatures);
- if (std::find(availableFeatures.begin(),
- availableFeatures.end(),
- feature) == availableFeatures.end())
+//----------------------------------------------------------------------------
+bool cmMakefile::HaveFeatureAvailable(cmTarget const* target,
+ std::string const& lang,
+ const std::string& feature) const
+{
+ return lang == "C"
+ ? this->HaveCFeatureAvailable(target, feature)
+ : this->HaveCxxFeatureAvailable(target, feature);
+}
+
+//----------------------------------------------------------------------------
+bool cmMakefile::
+HaveCFeatureAvailable(cmTarget const* target, const std::string& feature) const
+{
+ bool needC90 = false;
+ bool needC99 = false;
+ bool needC11 = false;
+
+ this->CheckNeededCLanguage(feature, needC90, needC99, needC11);
+
+ const char *existingCStandard = target->GetProperty("C_STANDARD");
+ if (!existingCStandard)
+ {
+ existingCStandard = this->GetDefinition("CMAKE_C_STANDARD_DEFAULT");
+ }
+
+ if (std::find_if(cmArrayBegin(C_STANDARDS), cmArrayEnd(C_STANDARDS),
+ cmStrCmp(existingCStandard)) == cmArrayEnd(C_STANDARDS))
{
cmOStringStream e;
- e << "The compiler feature \"" << feature
- << "\" is not known to " << lang << " compiler\n\""
- << this->GetDefinition("CMAKE_" + lang + "_COMPILER_ID")
- << "\"\nversion "
- << this->GetDefinition("CMAKE_" + lang + "_COMPILER_VERSION") << ".";
- this->IssueMessage(cmake::FATAL_ERROR, e.str());
+ e << "The C_STANDARD property on target \"" << target->GetName()
+ << "\" contained an invalid value: \"" << existingCStandard << "\".";
+ this->IssueMessage(cmake::FATAL_ERROR, e.str().c_str());
return false;
}
- target->AppendProperty("COMPILE_FEATURES", feature.c_str());
+ const char * const *existingCIt = existingCStandard
+ ? std::find_if(cmArrayBegin(C_STANDARDS),
+ cmArrayEnd(C_STANDARDS),
+ cmStrCmp(existingCStandard))
+ : cmArrayEnd(C_STANDARDS);
+ if (needC11 && existingCStandard && existingCIt <
+ std::find_if(cmArrayBegin(C_STANDARDS),
+ cmArrayEnd(C_STANDARDS),
+ cmStrCmp("11")))
+ {
+ return false;
+ }
+ else if(needC99 && existingCStandard && existingCIt <
+ std::find_if(cmArrayBegin(C_STANDARDS),
+ cmArrayEnd(C_STANDARDS),
+ cmStrCmp("99")))
+ {
+ return false;
+ }
+ else if(needC90 && existingCStandard && existingCIt <
+ std::find_if(cmArrayBegin(C_STANDARDS),
+ cmArrayEnd(C_STANDARDS),
+ cmStrCmp("90")))
+ {
+ return false;
+ }
+ return true;
+}
+
+//----------------------------------------------------------------------------
+bool cmMakefile::IsLaterStandard(std::string const& lang,
+ std::string const& lhs,
+ std::string const& rhs)
+{
+ if (lang == "C")
+ {
+ const char * const *rhsIt = std::find_if(cmArrayBegin(C_STANDARDS),
+ cmArrayEnd(C_STANDARDS),
+ cmStrCmp(rhs));
+
+ return std::find_if(rhsIt, cmArrayEnd(C_STANDARDS),
+ cmStrCmp(lhs)) != cmArrayEnd(C_STANDARDS);
+ }
+ const char * const *rhsIt = std::find_if(cmArrayBegin(CXX_STANDARDS),
+ cmArrayEnd(CXX_STANDARDS),
+ cmStrCmp(rhs));
+
+ return std::find_if(rhsIt, cmArrayEnd(CXX_STANDARDS),
+ cmStrCmp(lhs)) != cmArrayEnd(CXX_STANDARDS);
+}
+
+//----------------------------------------------------------------------------
+bool cmMakefile::HaveCxxFeatureAvailable(cmTarget const* target,
+ const std::string& feature) const
+{
bool needCxx98 = false;
bool needCxx11 = false;
+ this->CheckNeededCxxLanguage(feature, needCxx98, needCxx11);
+
+ const char *existingCxxStandard = target->GetProperty("CXX_STANDARD");
+ if (!existingCxxStandard)
+ {
+ existingCxxStandard = this->GetDefinition("CMAKE_CXX_STANDARD_DEFAULT");
+ }
+ if (std::find_if(cmArrayBegin(CXX_STANDARDS), cmArrayEnd(CXX_STANDARDS),
+ cmStrCmp(existingCxxStandard)) == cmArrayEnd(CXX_STANDARDS))
+ {
+ cmOStringStream e;
+ e << "The CXX_STANDARD property on target \"" << target->GetName()
+ << "\" contained an invalid value: \"" << existingCxxStandard << "\".";
+ this->IssueMessage(cmake::FATAL_ERROR, e.str());
+ return false;
+ }
+
+ const char * const *existingCxxIt = existingCxxStandard
+ ? std::find_if(cmArrayBegin(CXX_STANDARDS),
+ cmArrayEnd(CXX_STANDARDS),
+ cmStrCmp(existingCxxStandard))
+ : cmArrayEnd(CXX_STANDARDS);
+
+ if (needCxx11 && existingCxxIt < std::find_if(cmArrayBegin(CXX_STANDARDS),
+ cmArrayEnd(CXX_STANDARDS),
+ cmStrCmp("11")))
+ {
+ return false;
+ }
+ else if(needCxx98 && existingCxxIt <
+ std::find_if(cmArrayBegin(CXX_STANDARDS),
+ cmArrayEnd(CXX_STANDARDS),
+ cmStrCmp("98")))
+ {
+ return false;
+ }
+ return true;
+}
+
+//----------------------------------------------------------------------------
+void cmMakefile::CheckNeededCxxLanguage(const std::string& feature,
+ bool& needCxx98,
+ bool& needCxx11) const
+{
if (const char *propCxx98 =
this->GetDefinition("CMAKE_CXX98_COMPILE_FEATURES"))
{
@@ -5088,6 +5268,17 @@ AddRequiredTargetFeature(cmTarget *target, const std::string& feature,
cmSystemTools::ExpandListArgument(propCxx11, props);
needCxx11 = std::find(props.begin(), props.end(), feature) != props.end();
}
+}
+
+//----------------------------------------------------------------------------
+bool cmMakefile::
+AddRequiredTargetCxxFeature(cmTarget *target,
+ const std::string& feature) const
+{
+ bool needCxx98 = false;
+ bool needCxx11 = false;
+
+ this->CheckNeededCxxLanguage(feature, needCxx98, needCxx11);
const char *existingCxxStandard = target->GetProperty("CXX_STANDARD");
if (existingCxxStandard)
@@ -5136,3 +5327,102 @@ AddRequiredTargetFeature(cmTarget *target, const std::string& feature,
}
return true;
}
+
+//----------------------------------------------------------------------------
+void cmMakefile::CheckNeededCLanguage(const std::string& feature,
+ bool& needC90,
+ bool& needC99,
+ bool& needC11) const
+{
+ if (const char *propC90 =
+ this->GetDefinition("CMAKE_C90_COMPILE_FEATURES"))
+ {
+ std::vector<std::string> props;
+ cmSystemTools::ExpandListArgument(propC90, props);
+ needC90 = std::find(props.begin(), props.end(), feature) != props.end();
+ }
+ if (const char *propC99 =
+ this->GetDefinition("CMAKE_C99_COMPILE_FEATURES"))
+ {
+ std::vector<std::string> props;
+ cmSystemTools::ExpandListArgument(propC99, props);
+ needC99 = std::find(props.begin(), props.end(), feature) != props.end();
+ }
+ if (const char *propC11 =
+ this->GetDefinition("CMAKE_C11_COMPILE_FEATURES"))
+ {
+ std::vector<std::string> props;
+ cmSystemTools::ExpandListArgument(propC11, props);
+ needC11 = std::find(props.begin(), props.end(), feature) != props.end();
+ }
+}
+
+//----------------------------------------------------------------------------
+bool cmMakefile::
+AddRequiredTargetCFeature(cmTarget *target, const std::string& feature) const
+{
+ bool needC90 = false;
+ bool needC99 = false;
+ bool needC11 = false;
+
+ this->CheckNeededCLanguage(feature, needC90, needC99, needC11);
+
+ const char *existingCStandard = target->GetProperty("C_STANDARD");
+ if (existingCStandard)
+ {
+ if (std::find_if(cmArrayBegin(C_STANDARDS), cmArrayEnd(C_STANDARDS),
+ cmStrCmp(existingCStandard)) == cmArrayEnd(C_STANDARDS))
+ {
+ cmOStringStream e;
+ e << "The C_STANDARD property on target \"" << target->GetName()
+ << "\" contained an invalid value: \"" << existingCStandard << "\".";
+ this->IssueMessage(cmake::FATAL_ERROR, e.str().c_str());
+ return false;
+ }
+ }
+ const char * const *existingCIt = existingCStandard
+ ? std::find_if(cmArrayBegin(C_STANDARDS),
+ cmArrayEnd(C_STANDARDS),
+ cmStrCmp(existingCStandard))
+ : cmArrayEnd(C_STANDARDS);
+
+ bool setC90 = needC90 && !existingCStandard;
+ bool setC99 = needC99 && !existingCStandard;
+ bool setC11 = needC11 && !existingCStandard;
+
+ if (needC11 && existingCStandard && existingCIt <
+ std::find_if(cmArrayBegin(C_STANDARDS),
+ cmArrayEnd(C_STANDARDS),
+ cmStrCmp("11")))
+ {
+ setC11 = true;
+ }
+ else if(needC99 && existingCStandard && existingCIt <
+ std::find_if(cmArrayBegin(C_STANDARDS),
+ cmArrayEnd(C_STANDARDS),
+ cmStrCmp("99")))
+ {
+ setC99 = true;
+ }
+ else if(needC90 && existingCStandard && existingCIt <
+ std::find_if(cmArrayBegin(C_STANDARDS),
+ cmArrayEnd(C_STANDARDS),
+ cmStrCmp("90")))
+ {
+ setC90 = true;
+ }
+
+ if (setC11)
+ {
+ target->SetProperty("C_STANDARD", "11");
+ }
+ else if (setC99)
+ {
+ target->SetProperty("C_STANDARD", "99");
+ }
+ else if (setC90)
+ {
+ target->SetProperty("C_STANDARD", "90");
+ }
+ return true;
+}
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 2bfd19b..9a4b9c7 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -889,6 +889,19 @@ public:
const std::string& feature,
std::string *error = 0) const;
+ bool CompileFeatureKnown(cmTarget const* target, const std::string& feature,
+ std::string& lang, std::string *error) const;
+
+ const char* CompileFeaturesAvailable(const std::string& lang,
+ std::string *error) const;
+
+ bool HaveFeatureAvailable(cmTarget const* target, std::string const& lang,
+ const std::string& feature) const;
+
+ bool IsLaterStandard(std::string const& lang,
+ std::string const& lhs,
+ std::string const& rhs);
+
void ClearMatches();
void StoreMatches(cmsys::RegularExpression& re);
@@ -1098,6 +1111,24 @@ private:
std::vector<cmSourceFile*> QtUiFilesWithOptions;
unsigned int NumLastMatches;
+
+ bool AddRequiredTargetCFeature(cmTarget *target,
+ const std::string& feature) const;
+
+ bool AddRequiredTargetCxxFeature(cmTarget *target,
+ const std::string& feature) const;
+
+ void CheckNeededCLanguage(const std::string& feature, bool& needC90,
+ bool& needC99, bool& needC11) const;
+ void CheckNeededCxxLanguage(const std::string& feature, bool& needCxx98,
+ bool& needCxx11) const;
+
+ bool HaveCFeatureAvailable(cmTarget const* target,
+ const std::string& feature) const;
+ bool HaveCxxFeatureAvailable(cmTarget const* target,
+ const std::string& feature) const;
+
+ mutable bool SuppressWatches;
};
//----------------------------------------------------------------------------
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index 73d24a9..a08d731 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -2105,7 +2105,7 @@ const char* cmMakefileTargetGenerator::GetFeature(const std::string& feature)
//----------------------------------------------------------------------------
bool cmMakefileTargetGenerator::GetFeatureAsBool(const std::string& feature)
{
- return cmSystemTools::IsOn(this->GetFeature(feature));
+ return this->Target->GetFeatureAsBool(feature, this->ConfigName);
}
//----------------------------------------------------------------------------
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index b467d22..cfcf9f4 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -314,9 +314,8 @@ cmNinjaNormalTargetGenerator
std::vector<std::string> linkCmds;
cmMakefile* mf = this->GetMakefile();
{
- std::string linkCmdVar = "CMAKE_";
- linkCmdVar += this->TargetLinkLanguage;
- linkCmdVar += this->GetGeneratorTarget()->GetCreateRuleVariable();
+ std::string linkCmdVar = this->GetGeneratorTarget()
+ ->GetCreateRuleVariable(this->TargetLinkLanguage, this->GetConfigName());
const char *linkCmd = mf->GetDefinition(linkCmdVar);
if (linkCmd)
{
@@ -451,8 +450,9 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
std::string linkPath;
cmGeneratorTarget& genTarget = *this->GetGeneratorTarget();
- std::string createRule = "CMAKE_";
- createRule += this->TargetLinkLanguage + genTarget.GetCreateRuleVariable();
+ std::string createRule =
+ genTarget.GetCreateRuleVariable(this->TargetLinkLanguage,
+ this->GetConfigName());
bool useWatcomQuote = mf->IsOn(createRule+"_USE_WATCOM_QUOTE");
cmLocalNinjaGenerator& localGen = *this->GetLocalGenerator();
localGen.GetTargetFlags(vars["LINK_LIBRARIES"],
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index 54e398c..c3b4c75 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -105,7 +105,7 @@ const char* cmNinjaTargetGenerator::GetFeature(const std::string& feature)
// TODO: Picked up from cmMakefileTargetGenerator. Refactor it.
bool cmNinjaTargetGenerator::GetFeatureAsBool(const std::string& feature)
{
- return cmSystemTools::IsOn(this->GetFeature(feature));
+ return this->Target->GetFeatureAsBool(feature, this->GetConfigName());
}
// TODO: Picked up from cmMakefileTargetGenerator. Refactor it.
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index c38a99c..2e417cb 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -121,13 +121,14 @@ bool cmSystemTools::s_FatalErrorOccured = false;
bool cmSystemTools::s_DisableMessages = false;
bool cmSystemTools::s_ForceUnixPaths = false;
-void (*cmSystemTools::s_ErrorCallback)(const char*, const char*,
- bool&, void*);
-void (*cmSystemTools::s_StdoutCallback)(const char*, int len, void*);
-void* cmSystemTools::s_ErrorCallbackClientData = 0;
-void* cmSystemTools::s_StdoutCallbackClientData = 0;
-bool (*cmSystemTools::s_InterruptCallback)(void*);
-void* cmSystemTools::s_InterruptCallbackClientData = 0;
+cmSystemTools::MessageCallback cmSystemTools::s_MessageCallback;
+cmSystemTools::OutputCallback cmSystemTools::s_StdoutCallback;
+cmSystemTools::OutputCallback cmSystemTools::s_StderrCallback;
+cmSystemTools::InterruptCallback cmSystemTools::s_InterruptCallback;
+void* cmSystemTools::s_MessageCallbackClientData;
+void* cmSystemTools::s_StdoutCallbackClientData;
+void* cmSystemTools::s_StderrCallbackClientData;
+void* cmSystemTools::s_InterruptCallbackClientData;
// replace replace with with as many times as it shows up in source.
// write the result into source.
@@ -254,39 +255,48 @@ bool cmSystemTools::GetInterruptFlag()
return false;
}
-void cmSystemTools::SetErrorCallback(ErrorCallback f, void* clientData)
+void cmSystemTools::SetMessageCallback(MessageCallback f, void* clientData)
{
- s_ErrorCallback = f;
- s_ErrorCallbackClientData = clientData;
+ s_MessageCallback = f;
+ s_MessageCallbackClientData = clientData;
}
-void cmSystemTools::SetStdoutCallback(StdoutCallback f, void* clientData)
+void cmSystemTools::SetStdoutCallback(OutputCallback f, void* clientData)
{
s_StdoutCallback = f;
s_StdoutCallbackClientData = clientData;
}
+void cmSystemTools::SetStderrCallback(OutputCallback f, void* clientData)
+{
+ s_StderrCallback = f;
+ s_StderrCallbackClientData = clientData;
+}
+
void cmSystemTools::Stdout(const char* s)
{
- if(s_StdoutCallback)
+ cmSystemTools::Stdout(s, strlen(s));
+}
+
+void cmSystemTools::Stderr(const char* s)
+{
+ cmSystemTools::Stderr(s, strlen(s));
+}
+
+void cmSystemTools::Stderr(const char* s, size_t length)
+{
+ if(s_StderrCallback)
{
- (*s_StdoutCallback)(s, static_cast<int>(strlen(s)),
- s_StdoutCallbackClientData);
+ (*s_StderrCallback)(s, length, s_StderrCallbackClientData);
}
else
{
- std::cout << s;
- std::cout.flush();
- }
-}
-
-void cmSystemTools::Stderr(const char* s, int length)
-{
std::cerr.write(s, length);
std::cerr.flush();
+ }
}
-void cmSystemTools::Stdout(const char* s, int length)
+void cmSystemTools::Stdout(const char* s, size_t length)
{
if(s_StdoutCallback)
{
@@ -305,10 +315,10 @@ void cmSystemTools::Message(const char* m1, const char *title)
{
return;
}
- if(s_ErrorCallback)
+ if(s_MessageCallback)
{
- (*s_ErrorCallback)(m1, title, s_DisableMessages,
- s_ErrorCallbackClientData);
+ (*s_MessageCallback)(m1, title, s_DisableMessages,
+ s_MessageCallbackClientData);
return;
}
else
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 27b4bce..4455dd1 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -57,14 +57,14 @@ public:
*/
static std::string TrimWhitespace(const std::string& s);
- typedef void (*ErrorCallback)(const char*, const char*, bool&, void*);
+ typedef void (*MessageCallback)(const char*, const char*, bool&, void*);
/**
* Set the function used by GUIs to display error messages
* Function gets passed: message as a const char*,
* title as a const char*, and a reference to bool that when
* set to false, will disable furthur messages (cancel).
*/
- static void SetErrorCallback(ErrorCallback f, void* clientData=0);
+ static void SetMessageCallback(MessageCallback f, void* clientData=0);
/**
* Display an error message.
@@ -77,14 +77,17 @@ public:
*/
static void Message(const char* m, const char* title=0);
+ typedef void (*OutputCallback)(const char*, size_t length, void*);
+
///! Send a string to stdout
static void Stdout(const char* s);
- static void Stdout(const char* s, int length);
- typedef void (*StdoutCallback)(const char*, int length, void*);
- static void SetStdoutCallback(StdoutCallback, void* clientData=0);
+ static void Stdout(const char* s, size_t length);
+ static void SetStdoutCallback(OutputCallback, void* clientData=0);
- ///! Send a string to stderr. Stdout callbacks will not be invoced.
- static void Stderr(const char* s, int length);
+ ///! Send a string to stderr
+ static void Stderr(const char* s);
+ static void Stderr(const char* s, size_t length);
+ static void SetStderrCallback(OutputCallback, void* clientData=0);
typedef bool (*InterruptCallback)(void*);
@@ -470,11 +473,13 @@ private:
static bool s_FatalErrorOccured;
static bool s_DisableMessages;
static bool s_DisableRunCommandOutput;
- static ErrorCallback s_ErrorCallback;
- static StdoutCallback s_StdoutCallback;
+ static MessageCallback s_MessageCallback;
+ static OutputCallback s_StdoutCallback;
+ static OutputCallback s_StderrCallback;
static InterruptCallback s_InterruptCallback;
- static void* s_ErrorCallbackClientData;
+ static void* s_MessageCallbackClientData;
static void* s_StdoutCallbackClientData;
+ static void* s_StderrCallbackClientData;
static void* s_InterruptCallbackClientData;
};
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index 3f2ae9e..15acfdd 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -314,6 +314,9 @@ void cmTarget::SetMakefile(cmMakefile* mf)
this->SetPropertyDefault("MACOSX_BUNDLE", 0);
this->SetPropertyDefault("MACOSX_RPATH", 0);
this->SetPropertyDefault("NO_SYSTEM_FROM_IMPORTED", 0);
+ this->SetPropertyDefault("C_STANDARD", 0);
+ this->SetPropertyDefault("C_STANDARD_REQUIRED", 0);
+ this->SetPropertyDefault("C_EXTENSIONS", 0);
this->SetPropertyDefault("CXX_STANDARD", 0);
this->SetPropertyDefault("CXX_STANDARD_REQUIRED", 0);
this->SetPropertyDefault("CXX_EXTENSIONS", 0);
@@ -1217,7 +1220,7 @@ void cmTarget::GetDirectLinkLibraries(const std::string& config,
&dagChecker),
libs);
- std::set<std::string> seenProps = cge->GetSeenTargetProperties();
+ std::set<std::string> const& seenProps = cge->GetSeenTargetProperties();
for (std::set<std::string>::const_iterator it = seenProps.begin();
it != seenProps.end(); ++it)
{
@@ -1226,6 +1229,7 @@ void cmTarget::GetDirectLinkLibraries(const std::string& config,
this->LinkImplicitNullProperties.insert(*it);
}
}
+ cge->GetMaxLanguageStandard(this, this->MaxLanguageStandards);
}
}
@@ -3178,6 +3182,13 @@ const char* cmTarget::GetFeature(const std::string& feature,
}
//----------------------------------------------------------------------------
+bool cmTarget::GetFeatureAsBool(const std::string& feature,
+ const std::string& config) const
+{
+ return cmSystemTools::IsOn(this->GetFeature(feature, config));
+}
+
+//----------------------------------------------------------------------------
bool cmTarget::HandleLocationPropertyPolicy(cmMakefile* context) const
{
if (this->IsImported())
@@ -6481,11 +6492,6 @@ void cmTargetInternals::ComputeLinkInterface(cmTarget const* thisTarget,
}
}
}
- if(thisTarget->LinkLanguagePropagatesToDependents())
- {
- // Targets using this archive need its language runtime libraries.
- iface.Languages = impl->Languages;
- }
}
}
}
@@ -6497,9 +6503,14 @@ void cmTargetInternals::ComputeLinkInterface(cmTarget const* thisTarget,
impl = thisTarget->GetLinkImplementation(config, headTarget);
iface.ImplementationIsInterface = true;
iface.WrongConfigLibraries = impl->WrongConfigLibraries;
- if(thisTarget->LinkLanguagePropagatesToDependents())
+ }
+
+ if(thisTarget->LinkLanguagePropagatesToDependents())
+ {
+ // Targets using this archive need its language runtime libraries.
+ if(cmTarget::LinkImplementation const* impl =
+ thisTarget->GetLinkImplementation(config, headTarget))
{
- // Targets using this archive need its language runtime libraries.
iface.Languages = impl->Languages;
}
}
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index bee6b34..2d51835 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -237,6 +237,8 @@ public:
const char* GetFeature(const std::string& feature,
const std::string& config) const;
+ bool GetFeatureAsBool(const std::string& feature,
+ const std::string& config) const;
bool IsImported() const {return this->IsImportedTarget;}
@@ -587,6 +589,12 @@ public:
const std::string &report,
const std::string &compatibilityType) const;
+ std::map<std::string, std::string> const&
+ GetMaxLanguageStandards() const
+ {
+ return this->MaxLanguageStandards;
+ }
+
private:
bool HandleLocationPropertyPolicy(cmMakefile* context) const;
@@ -718,6 +726,7 @@ private:
mutable bool DebugSourcesDone;
mutable bool DebugCompileFeaturesDone;
mutable std::set<std::string> LinkImplicitNullProperties;
+ mutable std::map<std::string, std::string> MaxLanguageStandards;
bool BuildInterfaceIncludesAppended;
// Cache target output paths for each configuration.
diff --git a/Source/cmVariableWatch.cxx b/Source/cmVariableWatch.cxx
index 8ad6fce..cb6cb12 100644
--- a/Source/cmVariableWatch.cxx
+++ b/Source/cmVariableWatch.cxx
@@ -16,7 +16,6 @@ static const char* const cmVariableWatchAccessStrings[] =
"READ_ACCESS",
"UNKNOWN_READ_ACCESS",
"UNKNOWN_DEFINED_ACCESS",
- "ALLOWED_UNKNOWN_READ_ACCESS",
"MODIFIED_ACCESS",
"REMOVED_ACCESS",
"NO_ACCESS"
diff --git a/Source/cmVariableWatch.h b/Source/cmVariableWatch.h
index c86fad0..0ca4a55 100644
--- a/Source/cmVariableWatch.h
+++ b/Source/cmVariableWatch.h
@@ -53,7 +53,6 @@ public:
VARIABLE_READ_ACCESS = 0,
UNKNOWN_VARIABLE_READ_ACCESS,
UNKNOWN_VARIABLE_DEFINED_ACCESS,
- ALLOWED_UNKNOWN_VARIABLE_READ_ACCESS,
VARIABLE_MODIFIED_ACCESS,
VARIABLE_REMOVED_ACCESS,
NO_ACCESS
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 86652d3..60e92a0 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -1236,7 +1236,10 @@ int cmake::HandleDeleteCacheVariables(const std::string& var)
if(ci.Find(save.key))
{
save.type = ci.GetType();
- save.help = ci.GetProperty("HELPSTRING");
+ if(const char* help = ci.GetProperty("HELPSTRING"))
+ {
+ save.help = help;
+ }
}
saved.push_back(save);
}
@@ -2273,12 +2276,16 @@ const char *cmake::GetProperty(const std::string& prop,
}
this->SetProperty("ENABLED_LANGUAGES", lang.c_str());
}
+#define STRING_LIST_ELEMENT(F) ";" #F
+ if (prop == "CMAKE_C_KNOWN_FEATURES")
+ {
+ return FOR_EACH_C_FEATURE(STRING_LIST_ELEMENT) + 1;
+ }
if (prop == "CMAKE_CXX_KNOWN_FEATURES")
{
-#define STRING_LIST_ELEMENT(F) ";" #F
return FOR_EACH_CXX_FEATURE(STRING_LIST_ELEMENT) + 1;
-#undef STRING_LIST_ELEMENT
}
+#undef STRING_LIST_ELEMENT
return this->Properties.GetPropertyValue(prop, scope, chain);
}
diff --git a/Source/cmake.h b/Source/cmake.h
index 0034e85..3db77e6 100644
--- a/Source/cmake.h
+++ b/Source/cmake.h
@@ -470,6 +470,12 @@ private:
{"-Wno-dev", "Suppress developer warnings."},\
{"-Wdev", "Enable developer warnings."}
+#define FOR_EACH_C_FEATURE(F) \
+ F(c_function_prototypes) \
+ F(c_restrict) \
+ F(c_static_assert) \
+ F(c_variadic_macros)
+
#define FOR_EACH_CXX_FEATURE(F) \
F(cxx_alias_templates) \
F(cxx_alignas) \
diff --git a/Source/cmakemain.cxx b/Source/cmakemain.cxx
index fcaa127..77f1e4e 100644
--- a/Source/cmakemain.cxx
+++ b/Source/cmakemain.cxx
@@ -129,8 +129,8 @@ static std::string cmakemainGetStack(void *clientdata)
return msg;
}
-static void cmakemainErrorCallback(const char* m, const char*, bool&,
- void *clientdata)
+static void cmakemainMessageCallback(const char* m, const char*, bool&,
+ void *clientdata)
{
std::cerr << m << cmakemainGetStack(clientdata) << std::endl << std::flush;
}
@@ -310,7 +310,7 @@ int do_cmake(int ac, char const* const* av)
return ret;
}
cmake cm;
- cmSystemTools::SetErrorCallback(cmakemainErrorCallback, (void *)&cm);
+ cmSystemTools::SetMessageCallback(cmakemainMessageCallback, (void *)&cm);
cm.SetProgressCallback(cmakemainProgressCallback, (void *)&cm);
cm.SetWorkingMode(workingMode);
diff --git a/Source/kwsys/ProcessUNIX.c b/Source/kwsys/ProcessUNIX.c
index faeb967..241e295 100644
--- a/Source/kwsys/ProcessUNIX.c
+++ b/Source/kwsys/ProcessUNIX.c
@@ -2413,6 +2413,12 @@ static void kwsysProcessKill(pid_t process_id)
/* Suspend the process to be sure it will not create more children. */
kill(process_id, SIGSTOP);
+#if defined(__CYGWIN__)
+ /* Some Cygwin versions seem to need help here. Give up our time slice
+ so that the child can process SIGSTOP before we send SIGKILL. */
+ usleep(1);
+#endif
+
/* Kill all children if we can find them. */
#if defined(__linux__) || defined(__CYGWIN__)
/* First try using the /proc filesystem. */
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index a2681c1..704cbbc 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -92,7 +92,7 @@ extern char **environ;
#endif
#ifdef __CYGWIN__
-extern "C" void cygwin_conv_to_win32_path(const char *path, char *win32_path);
+# include <sys/cygwin.h>
#endif
// getpwnam doesn't exist on Windows and Cray Xt3/Catamount
@@ -1113,7 +1113,10 @@ bool SystemTools::PathCygwinToWin32(const char *path, char *win32_path)
}
else
{
- cygwin_conv_to_win32_path(path, win32_path);
+ if(cygwin_conv_path(CCP_POSIX_TO_WIN_A, path, win32_path, MAX_PATH) != 0)
+ {
+ win32_path[0] = 0;
+ }
SystemToolsTranslationMap::value_type entry(path, win32_path);
SystemTools::Cyg2Win32Map->insert(entry);
}
diff --git a/Tests/BuildDepends/CMakeLists.txt b/Tests/BuildDepends/CMakeLists.txt
index a875f07..8df331e 100644
--- a/Tests/BuildDepends/CMakeLists.txt
+++ b/Tests/BuildDepends/CMakeLists.txt
@@ -182,8 +182,7 @@ else()
endif()
message("Waiting 3 seconds...")
-# any additional argument will cause ${bar} to wait forever
-execute_process(COMMAND ${bar} -infinite TIMEOUT 3 OUTPUT_VARIABLE out)
+execute_process(COMMAND ${CMAKE_COMMAND} -E sleep 3)
message("Modifying Project/foo.cxx")
write_file(${BuildDepends_BINARY_DIR}/Project/foo.cxx
diff --git a/Tests/BuildDepends/Project/bar.cxx b/Tests/BuildDepends/Project/bar.cxx
index 25d8bd2..dadf93d 100644
--- a/Tests/BuildDepends/Project/bar.cxx
+++ b/Tests/BuildDepends/Project/bar.cxx
@@ -15,11 +15,5 @@ int main(int argc, char** argv)
/* Print out the string that should have been regenerated. */
printf("%s\n", regen_string);
fflush(stdout);
- // if any argument is used, wait forever
- if (argc>1)
- {
- // wait that we get killed...
- for(;;);
- }
return 0;
}
diff --git a/Tests/CMakeCommands/target_compile_features/CMakeLists.txt b/Tests/CMakeCommands/target_compile_features/CMakeLists.txt
index 62e3ce0..9b35f27 100644
--- a/Tests/CMakeCommands/target_compile_features/CMakeLists.txt
+++ b/Tests/CMakeCommands/target_compile_features/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.0)
project(target_compile_features)
-if (NOT CMAKE_CXX_COMPILE_FEATURES)
+if (NOT CMAKE_CXX_COMPILE_FEATURES AND NOT CMAKE_C_COMPILE_FEATURES)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/test_dummy.cpp"
"int main(int,char**) { return 0; }\n"
)
@@ -11,15 +11,35 @@ endif()
set(CMAKE_VERBOSE_MAKEFILE ON)
-add_executable(target_compile_features main.cpp)
-target_compile_features(target_compile_features
- PRIVATE cxx_auto_type
-)
+if (CMAKE_C_COMPILE_FEATURES)
+ add_executable(target_compile_features main.c)
+ target_compile_features(target_compile_features
+ PRIVATE c_restrict
+ )
-add_library(lib_auto_type lib_auto_type.cpp)
-target_compile_features(lib_auto_type
- PUBLIC cxx_auto_type
-)
+ add_library(lib_restrict lib_restrict.c)
+ target_compile_features(lib_restrict
+ PUBLIC c_restrict
+ )
-add_executable(lib_user lib_user.cpp)
-target_link_libraries(lib_user lib_auto_type)
+ add_executable(restrict_user restrict_user.c)
+ target_link_libraries(restrict_user lib_restrict)
+endif()
+
+if (CMAKE_CXX_COMPILE_FEATURES)
+ if (CMAKE_C_COMPILE_FEATURES)
+ set(target_suffix _cxx)
+ endif()
+ add_executable(target_compile_features${target_suffix} main.cpp)
+ target_compile_features(target_compile_features${target_suffix}
+ PRIVATE cxx_auto_type
+ )
+
+ add_library(lib_auto_type lib_auto_type.cpp)
+ target_compile_features(lib_auto_type
+ PUBLIC cxx_auto_type
+ )
+
+ add_executable(lib_user lib_user.cpp)
+ target_link_libraries(lib_user lib_auto_type)
+endif()
diff --git a/Tests/CMakeCommands/target_compile_features/lib_restrict.c b/Tests/CMakeCommands/target_compile_features/lib_restrict.c
new file mode 100644
index 0000000..049c1b0
--- /dev/null
+++ b/Tests/CMakeCommands/target_compile_features/lib_restrict.c
@@ -0,0 +1,9 @@
+
+#include "lib_restrict.h"
+
+int foo(int * restrict a, int * restrict b)
+{
+ (void)a;
+ (void)b;
+ return 0;
+}
diff --git a/Tests/CMakeCommands/target_compile_features/lib_restrict.h b/Tests/CMakeCommands/target_compile_features/lib_restrict.h
new file mode 100644
index 0000000..eca22be
--- /dev/null
+++ b/Tests/CMakeCommands/target_compile_features/lib_restrict.h
@@ -0,0 +1,7 @@
+
+#ifndef LIB_RESTRICT_H
+#define LIB_RESTRICT_H
+
+int foo(int * restrict a, int * restrict b);
+
+#endif
diff --git a/Tests/CMakeCommands/target_compile_features/main.c b/Tests/CMakeCommands/target_compile_features/main.c
new file mode 100644
index 0000000..831c5eb2
--- /dev/null
+++ b/Tests/CMakeCommands/target_compile_features/main.c
@@ -0,0 +1,12 @@
+
+int foo(int * restrict a, int * restrict b)
+{
+ (void)a;
+ (void)b;
+ return 0;
+}
+
+int main()
+{
+ return 0;
+}
diff --git a/Tests/CMakeCommands/target_compile_features/restrict_user.c b/Tests/CMakeCommands/target_compile_features/restrict_user.c
new file mode 100644
index 0000000..d47b847
--- /dev/null
+++ b/Tests/CMakeCommands/target_compile_features/restrict_user.c
@@ -0,0 +1,14 @@
+
+#include "lib_restrict.h"
+
+int bar(int * restrict a, int * restrict b)
+{
+ (void)a;
+ (void)b;
+ return foo(a, b);
+}
+
+int main()
+{
+ return 0;
+}
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 695aacb..8d2b7fc 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -2136,6 +2136,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
configure_file(
"${CMake_SOURCE_DIR}/Tests/MumpsCoverage/gtm_coverage.mcov.in"
"${CMake_BINARY_DIR}/Testing/MumpsCoverage/gtm_coverage.mcov")
+ file(REMOVE_RECURSE "${CMake_BINARY_DIR}/Testing/MumpsCoverage/VistA-FOIA")
file(COPY "${CMake_SOURCE_DIR}/Tests/MumpsCoverage/VistA-FOIA"
DESTINATION "${CMake_BINARY_DIR}/Testing/MumpsCoverage")
add_test(NAME CTestGTMCoverage
@@ -2144,7 +2145,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
$<TARGET_FILE:ctest> -T Coverage --debug)
set_tests_properties(CTestGTMCoverage PROPERTIES
PASS_REGULAR_EXPRESSION
- "Process file.*XINDEX.m.*Total LOC:.*127.*Percentage Coverage: 85.83.*"
+ "Process file.*ZZCOVTST.m.*Total LOC:.*23.*Percentage Coverage: 82.61*"
ENVIRONMENT COVFILE=)
configure_file(
@@ -2153,6 +2154,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
configure_file(
"${CMake_SOURCE_DIR}/Tests/MumpsCoverage/cache_coverage.cmcov.in"
"${CMake_BINARY_DIR}/Testing/MumpsCacheCoverage/cache_coverage.cmcov")
+ file(REMOVE_RECURSE "${CMake_BINARY_DIR}/Testing/MumpsCacheCoverage/VistA-FOIA")
file(COPY "${CMake_SOURCE_DIR}/Tests/MumpsCoverage/VistA-FOIA"
DESTINATION "${CMake_BINARY_DIR}/Testing/MumpsCacheCoverage")
add_test(NAME CTestCacheCoverage
@@ -2161,7 +2163,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
$<TARGET_FILE:ctest> -T Coverage --debug)
set_tests_properties(CTestCacheCoverage PROPERTIES
PASS_REGULAR_EXPRESSION
- "Process file.*XINDEX.m.*Total LOC:.*125.*Percentage Coverage: 85.60.*"
+ "Process file.*ZZCOVTST.m.*Total LOC:.*22.*Percentage Coverage: 86.36.*"
ENVIRONMENT COVFILE=)
# Adding a test case for Python Coverage
@@ -2392,7 +2394,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release
--output-log "${CMake_BINARY_DIR}/Tests/CTestTestTimeout/testOutput.log"
)
set_tests_properties(CTestTestTimeout PROPERTIES
- PASS_REGULAR_EXPRESSION "TestTimeout *\\.+ *\\*\\*\\*Timeout.*CheckChild *\\.+ *Passed")
+ PASS_REGULAR_EXPRESSION "TestTimeout *\\.+ *\\*\\*\\*Timeout.*TestSleep *\\.+ *Passed.*timeout correctly killed child")
add_test(
NAME CTestTestRerunFailed
diff --git a/Tests/CTestTestTimeout/CMakeLists.txt b/Tests/CTestTestTimeout/CMakeLists.txt
index 476d0a5..2e3bd6a 100644
--- a/Tests/CTestTestTimeout/CMakeLists.txt
+++ b/Tests/CTestTestTimeout/CMakeLists.txt
@@ -11,18 +11,14 @@ if(NOT TIMEOUT)
endif()
add_definitions(-DTIMEOUT=${TIMEOUT})
-add_executable (Timeout timeout.c)
+add_executable (Sleep sleep.c)
add_test(NAME TestTimeout
- COMMAND ${CMAKE_COMMAND} -D Timeout=$<TARGET_FILE:Timeout>
+ COMMAND ${CMAKE_COMMAND} -D Sleep=$<TARGET_FILE:Sleep>
-D Log=${CMAKE_CURRENT_BINARY_DIR}/timeout.log
-P ${CMAKE_CURRENT_SOURCE_DIR}/timeout.cmake
)
set_tests_properties(TestTimeout PROPERTIES TIMEOUT ${TIMEOUT})
-add_test(NAME CheckChild
- COMMAND ${CMAKE_COMMAND} -D Timeout=$<TARGET_FILE:Timeout>
- -D Log=${CMAKE_CURRENT_BINARY_DIR}/timeout.log
- -P ${CMAKE_CURRENT_SOURCE_DIR}/check.cmake
- )
-set_tests_properties(CheckChild PROPERTIES DEPENDS TestTimeout)
+add_test(NAME TestSleep COMMAND Sleep)
+set_tests_properties(TestSleep PROPERTIES DEPENDS TestTimeout)
diff --git a/Tests/CTestTestTimeout/check.cmake b/Tests/CTestTestTimeout/check.cmake
deleted file mode 100644
index b16f2aa..0000000
--- a/Tests/CTestTestTimeout/check.cmake
+++ /dev/null
@@ -1,9 +0,0 @@
-# Block just as long as timeout.cmake would if it were not killed.
-execute_process(COMMAND ${Timeout})
-
-# Verify that the log is empty, which indicates that the grandchild
-# was killed before it finished sleeping.
-file(READ "${Log}" LOG)
-if(NOT "${LOG}" STREQUAL "")
- message(FATAL_ERROR "${LOG}")
-endif()
diff --git a/Tests/CTestTestTimeout/sleep.c b/Tests/CTestTestTimeout/sleep.c
new file mode 100644
index 0000000..33ce307
--- /dev/null
+++ b/Tests/CTestTestTimeout/sleep.c
@@ -0,0 +1,21 @@
+#if defined(_WIN32)
+# include <windows.h>
+#else
+# include <unistd.h>
+#endif
+
+#include <stdio.h>
+
+int main(void)
+{
+ fprintf(stderr, "before sleep\n");
+ fflush(stderr); /* should not be needed, but just in case */
+#if defined(_WIN32)
+ Sleep((TIMEOUT+4)*1000);
+#else
+ sleep((TIMEOUT+4));
+#endif
+ fprintf(stderr, "after sleep\n");
+ fflush(stderr); /* should not be needed, but just in case */
+ return 0;
+}
diff --git a/Tests/CTestTestTimeout/test.cmake.in b/Tests/CTestTestTimeout/test.cmake.in
index 4178849..68c74d8 100644
--- a/Tests/CTestTestTimeout/test.cmake.in
+++ b/Tests/CTestTestTimeout/test.cmake.in
@@ -24,3 +24,16 @@ CTEST_START(Experimental)
CTEST_CONFIGURE(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
CTEST_BUILD(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
CTEST_TEST(BUILD "${CTEST_BINARY_DIRECTORY}" RETURN_VALUE res)
+
+set(log ${CTEST_BINARY_DIRECTORY}/timeout.log)
+if(EXISTS "${log}")
+ # Verify that the timeout test did not finish sleeping.
+ file(STRINGS "${log}" after_sleep REGEX "after sleep")
+ if(after_sleep)
+ message(FATAL_ERROR "Log indicates timeout did not kill child.")
+ else()
+ message("Log indicates timeout correctly killed child.")
+ endif()
+else()
+ message(FATAL_ERROR "Log does not exist:\n ${log}")
+endif()
diff --git a/Tests/CTestTestTimeout/timeout.c b/Tests/CTestTestTimeout/timeout.c
deleted file mode 100644
index 370ab22..0000000
--- a/Tests/CTestTestTimeout/timeout.c
+++ /dev/null
@@ -1,18 +0,0 @@
-#if defined(_WIN32)
-# include <windows.h>
-#else
-# include <unistd.h>
-#endif
-
-#include <stdio.h>
-
-int main(void)
-{
-#if defined(_WIN32)
- Sleep((TIMEOUT+4)*1000);
-#else
- sleep((TIMEOUT+4));
-#endif
- printf("timeout process finished sleeping!\n");
- return -1;
-}
diff --git a/Tests/CTestTestTimeout/timeout.cmake b/Tests/CTestTestTimeout/timeout.cmake
index 198cc97..0989b65 100644
--- a/Tests/CTestTestTimeout/timeout.cmake
+++ b/Tests/CTestTestTimeout/timeout.cmake
@@ -3,4 +3,4 @@ file(REMOVE ${Log})
# Run a child that sleeps longer than the timout of this test.
# Log its output so check.cmake can verify it dies.
-execute_process(COMMAND ${Timeout} OUTPUT_FILE ${Log})
+execute_process(COMMAND ${Sleep} ERROR_FILE ${Log})
diff --git a/Tests/CompileFeatures/CMakeLists.txt b/Tests/CompileFeatures/CMakeLists.txt
index adf50d5..7a8a975 100644
--- a/Tests/CompileFeatures/CMakeLists.txt
+++ b/Tests/CompileFeatures/CMakeLists.txt
@@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.0)
project(CompileFeatures)
-if (NOT CMAKE_CXX_COMPILE_FEATURES)
+if (NOT CMAKE_C_COMPILE_FEATURES AND NOT CMAKE_CXX_COMPILE_FEATURES)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp"
"int main(int,char**) { return 0; }\n"
)
@@ -22,6 +22,10 @@ macro(run_test feature lang)
endif()
endmacro()
+get_property(c_features GLOBAL PROPERTY CMAKE_C_KNOWN_FEATURES)
+foreach(feature ${c_features})
+ run_test(${feature} C)
+endforeach()
get_property(cxx_features GLOBAL PROPERTY CMAKE_CXX_KNOWN_FEATURES)
foreach(feature ${cxx_features})
run_test(${feature} CXX)
@@ -34,9 +38,11 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL GNU
)
endif()
+set(C_ext c)
+set(C_standard_flag 11)
set(CXX_ext cpp)
set(CXX_standard_flag 11)
-foreach(lang CXX)
+foreach(lang CXX C)
if (CMAKE_${lang}_COMPILE_FEATURES)
foreach(feature ${${lang}_non_features})
message("Testing feature : ${feature}")
@@ -77,3 +83,17 @@ set_property(TARGET iface
)
add_executable(IfaceCompileFeatures main.cpp)
target_link_libraries(IfaceCompileFeatures iface)
+
+add_executable(CompileFeaturesGenex genex_test.cpp)
+set_property(TARGET CompileFeaturesGenex PROPERTY CXX_STANDARD 11)
+target_compile_definitions(CompileFeaturesGenex PRIVATE HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>)
+
+add_executable(CompileFeaturesGenex2 genex_test.cpp)
+target_compile_features(CompileFeaturesGenex2 PRIVATE cxx_constexpr)
+target_compile_definitions(CompileFeaturesGenex2 PRIVATE HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>)
+
+add_library(noexcept_iface INTERFACE)
+target_compile_features(noexcept_iface INTERFACE cxx_noexcept)
+add_executable(CompileFeaturesGenex3 genex_test.cpp)
+target_link_libraries(CompileFeaturesGenex3 PRIVATE noexcept_iface)
+target_compile_definitions(CompileFeaturesGenex3 PRIVATE HAVE_OVERRIDE_CONTROL=$<COMPILE_FEATURES:cxx_final,cxx_override>)
diff --git a/Tests/CompileFeatures/c_function_prototypes.c b/Tests/CompileFeatures/c_function_prototypes.c
new file mode 100644
index 0000000..ab3c948
--- /dev/null
+++ b/Tests/CompileFeatures/c_function_prototypes.c
@@ -0,0 +1,9 @@
+
+int someFunc(int a, int b);
+
+int someFunc(int a, int b)
+{
+ (void)a;
+ (void)b;
+ return 0;
+}
diff --git a/Tests/CompileFeatures/c_restrict.c b/Tests/CompileFeatures/c_restrict.c
new file mode 100644
index 0000000..7bc7566
--- /dev/null
+++ b/Tests/CompileFeatures/c_restrict.c
@@ -0,0 +1,7 @@
+
+int f (int * restrict a, int * restrict b)
+{
+ (void)a;
+ (void)b;
+ return 0;
+}
diff --git a/Tests/CompileFeatures/c_static_assert.c b/Tests/CompileFeatures/c_static_assert.c
new file mode 100644
index 0000000..afab504
--- /dev/null
+++ b/Tests/CompileFeatures/c_static_assert.c
@@ -0,0 +1,2 @@
+
+_Static_assert(1, "Static assert test");
diff --git a/Tests/CompileFeatures/c_variadic_macros.c b/Tests/CompileFeatures/c_variadic_macros.c
new file mode 100644
index 0000000..4da111e
--- /dev/null
+++ b/Tests/CompileFeatures/c_variadic_macros.c
@@ -0,0 +1,15 @@
+
+int someFunc(int i1, char c, int i2)
+{
+ (void)i1;
+ (void)c;
+ (void)i2;
+ return 0;
+}
+
+#define FUNC_WRAPPER(...) someFunc(__VA_ARGS__)
+
+void otherFunc()
+{
+ FUNC_WRAPPER(42, 'a', 7);
+}
diff --git a/Tests/CompileFeatures/genex_test.cpp b/Tests/CompileFeatures/genex_test.cpp
new file mode 100644
index 0000000..ca38883
--- /dev/null
+++ b/Tests/CompileFeatures/genex_test.cpp
@@ -0,0 +1,21 @@
+
+#if !HAVE_OVERRIDE_CONTROL
+#error "Expect override control feature"
+#else
+
+struct A
+{
+ virtual int getA() { return 7; }
+};
+
+struct B final : A
+{
+ int getA() override { return 42; }
+};
+
+#endif
+
+int main()
+{
+
+}
diff --git a/Tests/CompileFeatures/main.c b/Tests/CompileFeatures/main.c
new file mode 100644
index 0000000..831c5eb2
--- /dev/null
+++ b/Tests/CompileFeatures/main.c
@@ -0,0 +1,12 @@
+
+int foo(int * restrict a, int * restrict b)
+{
+ (void)a;
+ (void)b;
+ return 0;
+}
+
+int main()
+{
+ return 0;
+}
diff --git a/Tests/ExportImport/Export/Interface/CMakeLists.txt b/Tests/ExportImport/Export/Interface/CMakeLists.txt
index 1b653eb..523fc29 100644
--- a/Tests/ExportImport/Export/Interface/CMakeLists.txt
+++ b/Tests/ExportImport/Export/Interface/CMakeLists.txt
@@ -26,7 +26,10 @@ target_link_libraries(sharediface INTERFACE sharedlib)
add_library(use_auto_type INTERFACE)
target_compile_features(use_auto_type INTERFACE cxx_auto_type)
-install(TARGETS headeronly sharediface use_auto_type
+add_library(use_c_restrict INTERFACE)
+target_compile_features(use_c_restrict INTERFACE c_restrict)
+
+install(TARGETS headeronly sharediface use_auto_type use_c_restrict
EXPORT expInterface
)
install(TARGETS sharedlib
diff --git a/Tests/ExportImport/Import/Interface/CMakeLists.txt b/Tests/ExportImport/Import/Interface/CMakeLists.txt
index 18d9b76..4028405 100644
--- a/Tests/ExportImport/Import/Interface/CMakeLists.txt
+++ b/Tests/ExportImport/Import/Interface/CMakeLists.txt
@@ -17,6 +17,7 @@ set_property(TARGET bld::sharediface APPEND PROPERTY INTERFACE_LINK_LIBRARIES de
add_executable(interfacetest_bld interfacetest.cpp)
target_link_libraries(interfacetest_bld bld::sharediface)
+include(CheckCSourceCompiles)
include(CheckCXXSourceCompiles)
macro(do_try_compile prefix)
@@ -41,6 +42,26 @@ macro(do_try_compile prefix)
message(SEND_ERROR "${prefix} try_compile with IMPORTED INTERFACE target failed!\n\n${OUTPUT}")
endif()
+ if (";${CMAKE_C_COMPILE_FEATURES};" MATCHES ";c_restrict;")
+ set(CMAKE_REQUIRED_LIBRARIES ${prefix}::use_c_restrict)
+ check_c_source_compiles(
+ "
+ int foo(int * restrict a, int * restrict b)
+ {
+ (void)a;
+ (void)b;
+ return 0;
+ }
+ int main()
+ {
+ return 0;
+ }
+ " ${prefix}IMPORTED_IFACE_C_RESTRICT)
+
+ if(NOT ${prefix}IMPORTED_IFACE_C_RESTRICT)
+ message(SEND_ERROR "${prefix} try_compile with IMPORTED INTERFACE target failed!\n\n${OUTPUT}")
+ endif()
+ endif()
if (";${CMAKE_CXX_COMPILE_FEATURES};" MATCHES ";cxx_auto_type;")
set(CMAKE_REQUIRED_LIBRARIES ${prefix}::use_auto_type)
check_cxx_source_compiles(
diff --git a/Tests/Fortran/CMakeLists.txt b/Tests/Fortran/CMakeLists.txt
index bf6d629..ef3b317 100644
--- a/Tests/Fortran/CMakeLists.txt
+++ b/Tests/Fortran/CMakeLists.txt
@@ -1,4 +1,4 @@
-cmake_minimum_required (VERSION 2.6)
+cmake_minimum_required (VERSION 3.0)
project(testf C CXX Fortran)
if(NOT DEFINED CMake_TEST_NESTED_MAKE_PROGRAM AND NOT CMAKE_GENERATOR MATCHES "Visual Studio")
set(CMake_TEST_NESTED_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM}")
diff --git a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
index 6c5e0be..ab0ebc3 100644
--- a/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
+++ b/Tests/Module/WriteCompilerDetectionHeader/CMakeLists.txt
@@ -6,19 +6,20 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
include(WriteCompilerDetectionHeader)
get_property(cxx_known_features GLOBAL PROPERTY CMAKE_CXX_KNOWN_FEATURES)
+get_property(c_known_features GLOBAL PROPERTY CMAKE_C_KNOWN_FEATURES)
write_compiler_detection_header(
FILE "${CMAKE_CURRENT_BINARY_DIR}/test_compiler_detection.h"
PREFIX TEST
- COMPILERS GNU
+ COMPILERS GNU Clang
VERSION 3.1
PROLOG "// something"
EPILOG "// more"
FEATURES
- ${cxx_known_features}
+ ${cxx_known_features} ${c_known_features}
)
-if (NOT CMAKE_CXX_COMPILE_FEATURES)
+if (NOT CMAKE_CXX_COMPILE_FEATURES AND NOT CMAKE_C_COMPILE_FEATURES)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp"
"int main(int,char**) { return 0; }\n"
)
@@ -48,7 +49,8 @@ macro(set_defines target true_defs false_defs)
)
endmacro()
-if (CMAKE_CXX_COMPILER_ID STREQUAL GNU)
+if (CMAKE_CXX_COMPILER_ID STREQUAL GNU
+ OR CMAKE_CXX_COMPILER_ID STREQUAL Clang)
# False for C++98 mode.
list(APPEND false_defs EXPECTED_COMPILER_CXX_DELEGATING_CONSTRUCTORS)
list(APPEND false_defs EXPECTED_COMPILER_CXX_VARIADIC_TEMPLATES)
diff --git a/Tests/MumpsCoverage/Accounts_ReceivableTest.cmcov b/Tests/MumpsCoverage/Accounts_ReceivableTest.cmcov
deleted file mode 100644
index c3b3342..0000000
--- a/Tests/MumpsCoverage/Accounts_ReceivableTest.cmcov
+++ /dev/null
@@ -1,304 +0,0 @@
-Routine,Line,RtnLine,Code
-DDIOL,1,0,"DDIOL ;SFISC/MKO-THE LOADER ;1:53 PM 12 Sep 1995"
-,2,0," ;;22.0;VA FileMan;;Mar 30, 1999"
-,3,0," ;Per VHA Directive 10-93-142, this routine should not be modified."
-,4,0," ;"
-,5,0,"EN(A,G,FMT) ;Write the text contained in local array A or global array G"
-,6,0," ;If one string passed, use format FMT"
-,7,0," N %,Y,DINAKED"
-,8,0," S DINAKED=$$LGR^%ZOSV"
-,9,0," ;"
-,10,0," S:'$D(A) A="""""
-,11,0," I $G(A)="""",$D(A)<9,$G(FMT)="""",$G(G)'?1""^""1A.7AN,$G(G)'?1""^""1A.7AN1""("".E1"")"" Q"
-,12,0," ;"
-,13,0," G:$D(DDS) SM"
-,14,0," G:$D(DIQUIET) LD"
-,15,0," ;"
-,16,0," N F,I,S"
-,17,0," I $D(A)=1,$G(G)="""" D"
-,18,0," . S F=$S($G(FMT)]"""":FMT,1:""!"")"
-,19,0," . W @F,A"
-,20,0," ;"
-,21,0," E I $D(A)>9 S I=0 F S I=$O(A(I)) Q:I'=+$P(I,""E"") D"
-,22,0," . S F=$G(A(I,""F""),""!"") S:F="""" F=""?0"""
-,23,0," . W @F,$G(A(I))"
-,24,0," ;"
-,25,0," E S I=0 F S I=$O(@G@(I)) Q:I'=+$P(I,""E"") D"
-,26,0," . S S=$G(@G@(I,0),$G(@G@(I)))"
-,27,0," . S F=$G(@G@(I,""F""),""!"") S:F="""" F=""?0"""
-,28,0," . W @F,S"
-,29,0," ;"
-,30,0," I DINAKED]"""" S DINAKED=$S(DINAKED["""""""""""":$O(@DINAKED),1:$D(@DINAKED))"
-,31,0," Q"
-,32,0," ;"
-,33,0,"LD ;Load text into ^TMP"
-,34,0," N I,N,T"
-,35,0," S T=$S($G(DDIOLFLG)[""H"":""DIHELP"",1:""DIMSG"")"
-,36,0," S N=$O(^TMP(T,$J,"" ""),-1)"
-,37,0," ;"
-,38,0," I $D(A)=1,$G(G)="""" D"
-,39,0," . D LD1(A,$S($G(FMT)]"""":FMT,1:""!""))"
-,40,0," ;"
-,41,0," E I $D(A)>9 S I=0 F S I=$O(A(I)) Q:I'=+$P(I,""E"") D"
-,42,0," . D LD1($G(A(I)),$G(A(I,""F""),""!""))"
-,43,0," ;"
-,44,0," E S I=0 F S I=$O(@G@(I)) Q:I'=+$P(I,""E"") D"
-,45,0," . D LD1($G(@G@(I),$G(@G@(I,0))),$G(@G@(I,""F""),""!""))"
-,46,0," ;"
-,47,0," K:'N @T S:N @T=N"
-,48,0," I DINAKED]"""" S DINAKED=$S(DINAKED["""""""""""":$O(@DINAKED),1:$D(@DINAKED))"
-,49,0," Q"
-,50,0," ;"
-,51,0,"LD1(S,F) ;Load string S, with format F"
-,52,0," ;In: N and T"
-,53,0," N C,J,L"
-,54,0," S:S[$C(7) S=$TR(S,$C(7),"""")"
-,55,0," F J=1:1:$L(F,""!"")-1 S N=N+1,^TMP(T,$J,N)="""""
-,56,0," S:'N N=1"
-,57,0," S:F[""?"" @(""C=""_$P(F,""?"",2))"
-,58,0," S L=$G(^TMP(T,$J,N))"
-,59,0," S ^TMP(T,$J,N)=L_$J("""",$G(C)-$L(L))_S"
-,60,0," Q"
-,61,0," ;"
-,62,0,"SM ;Print text in ScreenMan's Command Area"
-,63,0," I $D(DDSID),$D(DTOUT)!$D(DUOUT) G SMQ"
-,64,0," N DDIOL"
-,65,0," S DDIOL=1"
-,66,0," ;"
-,67,0," I $D(A)=1&($G(G)="""")!($D(A)>9) D"
-,68,0," . D MSG^DDSMSG(.A,"""",$G(FMT))"
-,69,0," E I $D(@G@(+$O(@G@(0)),0))#2 D"
-,70,0," . D WP^DDSMSG(G)"
-,71,0," E D HLP^DDSMSG(G)"
-,72,0," ;"
-,73,0,"SMQ I DINAKED]"""" S DINAKED=$S(DINAKED["""""""""""":$O(@DINAKED),1:$D(@DINAKED))"
-,74,0," Q"
-Totals for DDIOL,,0,
-XINDEX,1,0,"XINDEX ;ISC/REL,GFT,GRK,RWF - INDEX & CROSS-REFERENCE ;08/04/08 13:19"
-,2,1," ;;7.3;TOOLKIT;**20,27,48,61,66,68,110,121,128**;Apr 25, 1995;Build 1"
-,3,0," ; Per VHA Directive 2004-038, this routine should not be modified."
-,4,1," G ^XINDX6"
-,5,107216,"SEP F I=1:1 S CH=$E(LIN,I) D QUOTE:CH=Q Q:"" ""[CH"
-,6,107216," S ARG=$E(LIN,1,I-1) S:CH="" "" I=I+1 S LIN=$E(LIN,I,999) Q"
-,7,36371,"QUOTE F I=I+1:1 S CH=$E(LIN,I) Q:CH=""""!(CH=Q)"
-,8,36371," Q:CH]"""" S ERR=6 G ^XINDX1"
-,9,0,"ALIVE ;enter here from taskman"
-,10,1," D SETUP^XINDX7 ;Get ready to process"
-,11,468,"A2 S RTN=$O(^UTILITY($J,RTN)) G ^XINDX5:RTN="""""
-,12,467," S INDLC=(RTN?1""|""1.4L.NP) D LOAD:'INDLC"
-,13,467," I $D(ZTQUEUED),$$S^%ZTLOAD S RTN=""~"",IND(""QUIT"")=1,ZTSTOP=1 G A2"
-,14,467," I 'INDDS,INDLC W !!?10,""Data Dictionaries"",! S INDDS=1"
-,15,467," D BEG"
-,16,467," G A2"
-,17,0," ;"
-,18,467,"LOAD S X=RTN,XCNP=0,DIF=""^UTILITY(""_$J_"",1,RTN,0,"" X ^%ZOSF(""TEST"") Q:'$T X ^%ZOSF(""LOAD"") S ^UTILITY($J,1,RTN,0,0)=XCNP-1"
-,19,467," I $D(^UTILITY($J,1,RTN,0,0)) S ^UTILITY($J,1,RTN,""RSUM"")=""B""_$$SUMB^XPDRSUM($NA(^UTILITY($J,1,RTN,0)))"
-,20,467," Q"
-,21,0,"BEG ;"
-,22,467," S %=INDLC*5 W:$X+10+%>IOM ! W RTN,$J("""",10+%-$L(RTN))"
-,23,467," S (IND(""DO""),IND(""SZT""),IND(""SZC""),LABO)=0,LC=$G(^UTILITY($J,1,RTN,0,0))"
-,24,467," I LC="""" W !,"">>>Routine '"",RTN,""' not found <<<"",! Q"
-,25,467," S TXT="""",LAB=$P(^UTILITY($J,1,RTN,0,1,0),"" "") I RTN'=$P(LAB,""("") D E^XINDX1(17)"
-,26,467," I 'INDLC,LAB[""("" D E^XINDX1(55) S LAB=$P(LAB,""("")"
-,27,0," ;if M routine(not compiled template or DD) and has more than 2 lines, check lines 1 & 2"
-,28,467," I 'INDLC,LC>2 D"
-,29,467," . N LABO S LABO=1"
-,30,467," . S LIN=$G(^UTILITY($J,1,RTN,0,1,0)),TXT=1"
-,31,0," . ;check 1st line (site/dev - ) patch 128"
-,32,467," . I $P(LIN,"";"",2,4)'?.E1""/"".E.1""-"".E D E^XINDX1(62)"
-,33,467," . S LIN=$G(^UTILITY($J,1,RTN,0,2,0)),TXT=2"
-,34,0," . ;check 2nd line (;;nn.nn[TV]nn;package;.anything)"
-,35,467," . I $P(LIN,"";"",3,99)'?1.2N1"".""1.2N.1(1""T"",1""V"").2N1"";""1A.AP1"";"".E D E^XINDX1(44) ;patch 121"
-,36,467," . I $L(INP(11)) X INP(11) ;Version number check"
-,37,467," . I $L(INP(12)) X INP(12) ;Patch number check"
-,38,467,"B5 F TXT=1:1:LC S LIN=^UTILITY($J,1,RTN,0,TXT,0),LN=$L(LIN),IND(""SZT"")=IND(""SZT"")+LN+2 D LN,ST ;Process Line"
-,39,467," S LAB="""",LABO=0,TXT=0,^UTILITY($J,1,RTN,0)=IND(""SZT"")_""^""_LC_""^""_IND(""SZC"")"
-,40,467," I IND(""SZT"")>INP(""MAX""),'INDLC S ERR=35,ERR(1)=IND(""SZT"") D ^XINDX1"
-,41,467," I IND(""SZT"")-IND(""SZC"")>INP(""CMAX""),'INDLC S ERR=58,ERR(1)=IND(""SZT"")-IND(""SZC"") D ^XINDX1"
-,42,467," D POSTRTN"
-,43,467," Q"
-,44,0," ;Proccess one line, LN = Length, LIN = Line."
-,45,44620,"LN K V S (ARG,GRB,IND(""COM""),IND(""DOL""),IND(""F""))="""",X=$P(LIN,"" "")"
-,46,44620," I '$L(X) S LABO=LABO+1 G CD"
-,47,5073," S (IND(""COM""),LAB)=$P(X,""(""),ARG=$P($P(X,""("",2),"")""),LABO=0,IND(""PP"")=X?1.8E1""("".E1"")"""
-,48,5073," D:$L(ARG) NE^XINDX3 ;Process formal parameters as New list."
-,49,5073," I 'INDLC,'$$VT^XINDX2(LAB) D E^XINDX1($S(LAB=$$CASE^XINDX52(LAB):37,1:55)) ;Check for bad labels"
-,50,5073," I $D(^UTILITY($J,1,RTN,""T"",LAB)) D E^XINDX1(15) G CD ;DUP label"
-,51,5073," S ^UTILITY($J,1,RTN,""T"",LAB)="""""
-,52,44620,"CD I LN>245 D:'(LN=246&($E(RTN,1,3)=""|dd"")) E^XINDX1(19) ;patch 119"
-,53,44620," D:LIN'?1.ANP E^XINDX1(18)"
-,54,44620," S LIN=$P(LIN,"" "",2,999),IND(""LCC"")=1"
-,55,44620," I LIN="""" D E^XINDX1(42) Q ;Blank line ;p110"
-,56,44620," S I=0 ;Watch the scope of I, counts dots"
-,57,44620," I "" .""[$E(LIN) D S X=$L($E(LIN,1,I),""."")-1,LIN=$E(LIN,I,999)"
-,58,10770," . F I=1:1:245 Q:"". ""'[$E(LIN,I)"
-,59,10770," . Q"
-,60,0," ;check dots against Do level IND(""DO""), IND(""DOL"")=dot level"
-,61,44620," D:'I&$G(IND(""DO1"")) E^XINDX1(51) S IND(""DO1"")=0 S:'I IND(""DO"")=0"
-,62,44620," I I D:X>IND(""DO"") E^XINDX1(51) S (IND(""DO""),IND(""DOL""))=X"
-,63,0," ;Count Comment lines, skip ;; lines"
-,64,44620," I $E(LIN)="";"",$E(LIN,2)'="";"" S IND(""SZC"")=IND(""SZC"")+$L(LIN) ;p110"
-,65,0," ;Process commands on line."
-,66,116081,"EE I LIN="""" D ^XINDX2 Q"
-,67,71461," S COM=$E(LIN),GK="""",ARG="""""
-,68,71461," I COM="";"" S LIN="""" G EE ;p110"
-,69,54870," I COM="" "" S ERR=$S(LIN?1."" "":13,1:0),LIN=$S(ERR:"""",1:$E(LIN,2,999)) D:ERR ^XINDX1 G EE"
-,70,53608," D SEP"
-,71,53608," S CM=$P(ARG,"":"",1),POST=$P(ARG,"":"",2,999),IND(""COM"")=IND(""COM"")_$C(9)_COM,ERR=48"
-,72,53608," D:ARG["":""&(POST']"""") ^XINDX1 S:POST]"""" GRB=GRB_$C(9)_POST,IND(""COM"")=IND(""COM"")_"":"""
-,73,0," ;SAC now allows lowercase commands"
-,74,53608," I CM?.E1L.E S CM=$$CASE^XINDX52(CM),COM=$E(CM) ;I IND(""LCC"") S IND(""LCC"")=0 D E^XINDX1(47)"
-,75,53608," I CM="""" D E^XINDX1(21) G EE ;Missing command"
-,76,53608," S CX=$G(IND(""CMD"",CM)) I CX="""" D G:CX="""" EE"
-,77,0," . I $E(CM)=""Z"" S CX=""^Z"" Q ;Proccess Z commands"
-,78,0," . D E^XINDX1(1) S LIN="""" Q"
-,79,53608," S CX=$P(CX,""^"",2,9)"
-,80,53608," D SEP I '$L(LIN),CH="" "" D E^XINDX1(13) ;trailing space"
-,81,53608," I ARG="""",""CGJMORSUWX""[COM S ERR=49 G ^XINDX1"
-,82,53608," I CX>0 D E^XINDX1(CX) S CX="""""
-,83,53608," D:$L(CX) @CX S:ARG'="""" GRB=GRB_$C(9)_ARG G EE"
-,84,0,"B S ERR=25 G ^XINDX1"
-,85,0,"C S ERR=29 G ^XINDX1"
-,86,0,"D G DG1^XINDX4"
-,87,0,"E Q:ARG="""" S ERR=7 G ^XINDX1"
-,88,1559,"F G:ARG]"""" FR^XINDX4 S IND(""F"")=1 Q"
-,89,1932,"G G DG^XINDX4"
-,90,11,"H Q:ARG'="""" S ERR=32 G ^XINDX1"
-,91,0,"J S ERR=36,ARG="""" G ^XINDX1"
-,92,2218,"K S ERR=$S(ARG?1""("".E:22,ARG?."" "":23,1:0) D:ERR ^XINDX1"
-,93,2218," G KL^XINDX3"
-,94,259,"L G LO^XINDX4"
-,95,30,"M G S^XINDX3"
-,96,1721,"N G NE^XINDX3"
-,97,0,"O S ERR=34 D ^XINDX1,O^XINDX3 Q"
-,98,7762,"Q Q:ARG="""" G Q^XINDX4"
-,99,85,"R S RDTIME=0 G RD^XINDX3"
-,100,17549,"S G S^XINDX3"
-,101,0,"TR Q ;What to process. p110"
-,102,72,"U S ARG=$P(ARG,"":"") Q"
-,103,0,"V S ARG="""",ERR=20 G ^XINDX1"
-,104,4584,"W G WR^XINDX4"
-,105,220,"X G XE^XINDX4"
-,106,0,"Z S ERR=2 D ^XINDX1 G ZC^XINDX4"
-,107,0," ;"
-,108,0," ;Save off items from line."
-,109,44620,"ST S R=LAB_$S(LABO:""+""_LABO,1:"""")"
-,110,0," ;Local variable, Global, Marked Items, Naked global, Internal ref, eXternal ref., Tag ref."
-,111,44620," S LOC="""" F S LOC=$O(V(LOC)),S="""" Q:LOC="""" F S S=$O(V(LOC,S)) Q:S="""" D SET"
-,112,44620," S ^UTILITY($J,1,RTN,""COM"",TXT)=IND(""COM"")"
-,113,44620," Q"
-,114,0," ;"
-,115,85079,"SET I V(LOC,S)]"""" F %=""!"",""~"" I V(LOC,S)[%,$G(^UTILITY($J,1,RTN,LOC,S))'[% S ^(S)=$G(^(S))_%"
-,116,85079," S %=0"
-,117,86891,"SE2 S ARG=$G(^UTILITY($J,1,RTN,LOC,S,%)) I $L(ARG)>230 S %=%+1 G SE2"
-,118,85079," S ^UTILITY($J,1,RTN,LOC,S,%)=ARG_R_V(LOC,S)_"","""
-,119,85079," Q"
-,120,0," ;"
-,121,0,"POSTRTN ;Do more overall checking"
-,122,467," N V,E,T,T1,T2"
-,123,467," S T="""" ;Check for missing Labels"
-,124,467," F S T=$O(^UTILITY($J,1,RTN,""I"",T)),T2=T Q:T="""" S T1=$G(^(T,0)) D"
-,125,2091," . Q:$E(T2,1,2)=""@("""
-,126,2044," . S:$E(T2,1,2)=""$$"" T2=$E(T2,3,99)"
-,127,2044," . I T2]"""",'$D(^UTILITY($J,1,RTN,""T"",$P(T2,""+"",1))) D"
-,128,0," . . F I=1:1:$L(T1,"","")-1 S LAB=$P(T1,"","",I),LABO=+$P(LAB,""+"",2),LAB=$P(LAB,""+""),E=14,E(1)=T D E^XINDX1(.E)"
-,129,0," . . Q"
-,130,2044," . Q"
-,131,467," S LAB="""",LABO=0 ;Check for valid label names"
-,132,467," I 'INDLC F S LAB=$O(^UTILITY($J,1,RTN,""T"",LAB)) Q:LAB="""" D"
-,133,5073," . I '$$VA^XINDX2(LAB) D E^XINDX1(55) Q"
-,134,5073," . D:'$$VT^XINDX2(LAB) E^XINDX1(37)"
-,135,5073," . Q"
-,136,467," S LAB="""",LABO=0 ;Check for valid variable names."
-,137,467," F S LAB=$O(^UTILITY($J,1,RTN,""L"",LAB)) Q:LAB="""" D"
-,138,15909," . D VLNF^XINDX3($P(LAB,""(""))"
-,139,15909," . Q"
-,140,467," Q"
-,141,0," ;"
-,142,0,"QUICK ;Quick, Just get a routine an print the results"
-,143,0," D QUICK^XINDX6()"
-,144,0," Q"
-Totals for XINDEX,,2446443,
-XINDX1,1,0,"XINDX1 ;ISC/REL,GRK,RWF - ERROR ROUTINE ;08/05/08 13:59"
-,2,2," ;;7.3;TOOLKIT;**20,61,66,68,110,121,128**;Apr 25, 1995;Build 1"
-,3,0," ; Per VHA Directive 2004-038, this routine should not be modified."
-,4,2," G A"
-,5,0,"E(ERR) ;"
-,6,75,"A N %,%1 ;TXT is the line of the error."
-,7,75," S ERTX=LAB_$S(LABO:""+""_LABO,1:"""")_$C(9),%1=$T(ERROR+ERR),ERTX=ERTX_$S(ERR:$P(%1,"";"",4,9),1:ERR) ;p110"
-,8,75," I ERTX[""|"" F %=1:1 S ERTX=$P(ERTX,""|"")_$S($D(ERR(%)):ERR(%),1:""??"")_$P(ERTX,""|"",%+1,99) Q:ERTX'[""|"""
-,9,75,"B I $P(%1,"";"",3)]"""" D Q:%1]"""" ;Don't flag kernel doing kernel."
-,10,0," . S %1=$P(%1,"";"",3)"
-,11,0," . F Q:RTN[$P(%1,"","") S %1=$P(%1,"","",2,99) ;quit if RTN[%1 or null."
-,12,0," . Q"
-,13,75," I ERR=17,$E(RTN)'=""%"",$E(LAB)=""%"" Q ;Don't flag %RTN w/o %."
-,14,0," ;Global is Error Line,tab,error tag,tab,error text"
-,15,75," S %=$G(^UTILITY($J,1,RTN,""E"",0))+1,^(0)=%,^(%)=TXT_$C(9)_ERTX"
-,16,75," Q"
-,17,0," ;"
-,18,0," ;F = Fatal, S = Standard, W = Warning, I = Info"
-,19,0,"ERROR ;"
-,20,0,"1 ;;;F - UNDEFINED COMMAND (rest of line not checked)."
-,21,0,"2 ;;;F - Non-standard (Undefined) 'Z' command."
-,22,0,"3 ;;XTRMON;F - Undefined Function."
-,23,0,"4 ;;;F - Undefined Special Variable."
-,24,0,"5 ;;;F - Unmatched Parenthesis."
-,25,0,"6 ;;;F - Unmatched Quotation Marks."
-,26,0,"7 ;;;F - ELSE Command followed by only one space."
-,27,0,"8 ;;;F - FOR Command did not contain '='."
-,28,0,"9 ;;;I - QUIT Command followed by only one space."
-,29,0,"10 ;;;F - Unrecognized argument in SET command."
-,30,0,"11 ;;;W - Invalid local variable name."
-,31,0,"12 ;;;W - Invalid global variable name."
-,32,0,"13 ;;;W - Blank(s) at end of line."
-,33,0,"14 ;;;F - Call to missing label '|' in this routine."
-,34,0,"15 ;;;W - Duplicate label. (M57)"
-,35,0,"16 ;;;F - Error in pattern code."
-,36,0,"17 ;;;W - First line label NOT routine name."
-,37,0,"18 ;;;W - Line contains a CONTROL (non-graphic) character."
-,38,0,"19 ;;;S - Line is longer than 245 bytes."
-,39,0,"20 ;;;S - View command used."
-,40,0,"21 ;;;F - General Syntax Error."
-,41,0,"22 ;;;S - Exclusive Kill."
-,42,0,"23 ;;;S - Unargumented Kill."
-,43,0,"24 ;;;S - Kill of an unsubscripted global."
-,44,0,"25 ;;;S - Break command used."
-,45,0,"26 ;;;S - Exclusive or Unargumented NEW command."
-,46,0,"27 ;;;S - $View function used."
-,47,0,"28 ;;ZOSV,ZIS,ZT;S - Non-standard $Z special variable used."
-,48,0,"29 ;;ZIS,ZTM;S - 'Close' command should be invoked through 'D ^%ZISC'."
-,49,0,"30 ;;;S - LABEL+OFFSET syntax."
-,50,0,"31 ;;ZOSV,ZIS,ZT;S - Non-standard $Z function used."
-,51,0,"32 ;;;S - 'HALT' command should be invoked through 'G ^XUSCLEAN'."
-,52,0,"33 ;;;S - Read command doesn't have a timeout."
-,53,0,"34 ;;ZIS;S - 'OPEN' command should be invoked through ^%ZIS."
-,54,0,"35 ;;;S - Routine exceeds SACC maximum size of 20000 (|)."
-,55,0,"36 ;;ZTM;S - Should use 'TASKMAN' instead of 'JOB' command."
-,56,0,"37 ;;;F - Label is not valid."
-,57,0,"38 ;;;F - Call to this |"
-,58,0,"39 ;;ZIS,XUS,XUP;S - Kill of a protected variable (|)."
-,59,0,"40 ;;;S - Space where a command should be."
-,60,0,"41 ;;;I - Star or pound READ used."
-,61,0,"42 ;;;W - Null line (no commands or comment)."
-,62,0,"43 ;;;F - Invalid or wrong number of arguments to a function."
-,63,0,"44 ;;;S - 2nd line of routine violates the SAC."
-,64,0,"45 ;;ZT,ZIS,XUTM,XTER;S - Set to a '%' global."
-,65,0,"46 ;;;F - Quoted string not followed by a separator."
-,66,0,"47 ;;;S - Lowercase command(s) used in line."
-,67,0,"48 ;;;F - Missing argument to a command post-conditional."
-,68,0,"49 ;;;F - Command missing an argument."
-,69,0,"50 ;;ZTM;S - Extended reference."
-,70,0,"51 ;;;F - Block structure mismatch."
-,71,0,"52 ;;;F - Reference to routine '^|'. That isn't in this UCI."
-,72,0,"53 ;;;F - Bad Number."
-,73,0,"54 ;;XG;S - Access to SSVN's restricted to Kernel."
-,74,0,"55 ;;;S - Violates VA programming standards."
-,75,0,"56 ;;;S - Patch number '|' missing from second line."
-,76,0,"57 ;;;S - Lower/Mixed case Variable name used."
-,77,0,"58 ;;;S - Routine code exceeds SACC maximum size of 15000 (|)."
-,78,0,"59 ;;;F - Bad WRITE syntax."
-,79,0,"60 ;;;S - Lock missing Timeout."
-,80,0,"61 ;;;S - Non-Incremental Lock."
-,81,0,"62 ;;;S - First line of routine violates the SAC."
-,82,0,"63 ;;;F - GO or DO mismatch from block structure (M45)."
-Totals for XINDX1,,529,
diff --git a/Tests/MumpsCoverage/Accounts_ReceivableTest.mcov b/Tests/MumpsCoverage/Accounts_ReceivableTest.mcov
deleted file mode 100644
index 3c585f5..0000000
--- a/Tests/MumpsCoverage/Accounts_ReceivableTest.mcov
+++ /dev/null
@@ -1,1445 +0,0 @@
-%GO Global Output Utility
-GT.M 17-APR-2012 17:18:27 ZWR
-^ZZCOVERAGE("%RSEL","SRC")="1:0:0:0"
-^ZZCOVERAGE("%RSEL","SRC",1)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","SRC",2)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","SRC",3)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","SRC",4)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","SRC",5)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","SRC",6)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","SRC",7)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init")="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",1)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",3)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",4)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",5)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",6)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",7)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",8)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",8,"FOR_LOOP",1)=1
-^ZZCOVERAGE("%RSEL","init",9)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",10)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",11)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",12)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",13)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",14)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",15)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",16)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",17)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","init",17,"FOR_LOOP",1)=2
-^ZZCOVERAGE("%RSEL","init",18)="2:0:0:0"
-^ZZCOVERAGE("%RSEL","init",19)="2:0:0:0"
-^ZZCOVERAGE("%RSEL","init",20)="2:0:0:0"
-^ZZCOVERAGE("%RSEL","init",40)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","main")="1:32001:84004:116005"
-^ZZCOVERAGE("%RSEL","main",1)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","main",2)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","main",3)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","main",3,"FOR_LOOP",1)=468
-^ZZCOVERAGE("%RSEL","main",4)="468:0:24003:24003"
-^ZZCOVERAGE("%RSEL","main",5)="468:0:0:0"
-^ZZCOVERAGE("%RSEL","main",6)="468:32001:48001:80002"
-^ZZCOVERAGE("%RSEL","main",7)="467:0:12000:12000"
-^ZZCOVERAGE("%RSEL","main",8)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","main",9)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","main",10)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","main",11)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","main",12)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","main",13)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","main",14)="1:0:0:0"
-^ZZCOVERAGE("%RSEL","next")="1403:12001:20002:32003"
-^ZZCOVERAGE("%RSEL","next",0)="1403:0:0:0"
-^ZZCOVERAGE("%RSEL","next",1)="1403:12001:20002:32003"
-^ZZCOVERAGE("%RSEL","next",1,"FOR_LOOP",1)=1403
-^ZZCOVERAGE("%RSEL","next",2)="1403:0:0:0"
-^ZZCOVERAGE("%RSEL","save")="467:0:4001:4001"
-^ZZCOVERAGE("%RSEL","save",1)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","save",5)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","save",6)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","save",7)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","save",8)="467:0:4001:4001"
-^ZZCOVERAGE("%RSEL","save",9)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","search")="934:0:16001:16001"
-^ZZCOVERAGE("%RSEL","search",0)="934:0:4000:4000"
-^ZZCOVERAGE("%RSEL","search",1)="934:0:0:0"
-^ZZCOVERAGE("%RSEL","search",2)="934:0:4001:4001"
-^ZZCOVERAGE("%RSEL","search",2,"FOR_LOOP",1)=1868
-^ZZCOVERAGE("%RSEL","search",3)="934:0:8000:8000"
-^ZZCOVERAGE("%RSEL","search",4)="934:0:0:0"
-^ZZCOVERAGE("%RSEL","search",5)="934:0:0:0"
-^ZZCOVERAGE("%RSEL","start")="468:0:4001:4001"
-^ZZCOVERAGE("%RSEL","start",0)="468:0:0:0"
-^ZZCOVERAGE("%RSEL","start",1)="468:0:0:0"
-^ZZCOVERAGE("%RSEL","start",2)="468:0:0:0"
-^ZZCOVERAGE("%RSEL","start",2,"FOR_LOOP",1)=936
-^ZZCOVERAGE("%RSEL","start",3)="468:0:0:0"
-^ZZCOVERAGE("%RSEL","work")="467:20002:24001:44003"
-^ZZCOVERAGE("%RSEL","work",1)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","work",2)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","work",3)="467:0:4000:4000"
-^ZZCOVERAGE("%RSEL","work",4)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","work",6)="467:4000:12000:16000"
-^ZZCOVERAGE("%RSEL","work",6,"FOR_LOOP",1)=3421
-^ZZCOVERAGE("%RSEL","work",7)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","work",8)="467:4001:0:4001"
-^ZZCOVERAGE("%RSEL","work",9)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","work",10)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","work",11)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","work",12)="467:4000:0:4000"
-^ZZCOVERAGE("%RSEL","work",13)="467:0:4000:4000"
-^ZZCOVERAGE("%RSEL","work",14)="467:0:0:0"
-^ZZCOVERAGE("%RSEL","work",15)="467:4001:4001:8002"
-^ZZCOVERAGE("%RSEL","work",15,"FOR_LOOP",1)=934
-^ZZCOVERAGE("%RSEL","work",16)="467:0:0:0"
-^ZZCOVERAGE("%ZIS","%ZIS")="2:0:0:0"
-^ZZCOVERAGE("%ZIS","%ZIS",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","%ZIS",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","A",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","A",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","CLEAN")="3:0:0:0"
-^ZZCOVERAGE("%ZIS","CLEAN",1)="3:0:0:0"
-^ZZCOVERAGE("%ZIS","CLEAN",2)="3:0:0:0"
-^ZZCOVERAGE("%ZIS","CLEAN",3)="3:0:0:0"
-^ZZCOVERAGE("%ZIS","CLEAN",4)="3:0:0:0"
-^ZZCOVERAGE("%ZIS","GETHOME")="2:0:0:0"
-^ZZCOVERAGE("%ZIS","GETHOME",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","GETHOME",1)="1:0:0:0"
-^ZZCOVERAGE("%ZIS","GETHOME",3)="1:0:0:0"
-^ZZCOVERAGE("%ZIS","GETHOME",4)="1:0:0:0"
-^ZZCOVERAGE("%ZIS","GETHOME",5)="1:0:0:0"
-^ZZCOVERAGE("%ZIS","GETHOME",6)="1:0:0:0"
-^ZZCOVERAGE("%ZIS","GETHOME",7)="1:0:0:0"
-^ZZCOVERAGE("%ZIS","HOME")="1:0:0:0"
-^ZZCOVERAGE("%ZIS","HOME",1)="1:0:0:0"
-^ZZCOVERAGE("%ZIS","HOME",2)="1:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",6)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",8)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",10)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",11)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",12)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",13)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","INIT",15)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","K2",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","K2",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","K2",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","K2",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","VIRTUAL")="2:0:0:0"
-^ZZCOVERAGE("%ZIS","VIRTUAL",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","VIRTUAL",4,"FOR_LOOP",1)=6
-^ZZCOVERAGE("%ZIS","VIRTUAL",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","VIRTUAL",7)="2:0:0:0"
-^ZZCOVERAGE("%ZIS","VTLKUP")="4:0:0:0"
-^ZZCOVERAGE("%ZIS","VTLKUP",0)="4:0:0:0"
-^ZZCOVERAGE("%ZIS","VTLKUP",0,"FOR_LOOP",1)=8
-^ZZCOVERAGE("%ZIS","VTLKUP",1)="4:0:0:0"
-^ZZCOVERAGE("%ZIS1","EX2",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","EX2",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","EXIT",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","EXIT",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","EXIT",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","EXIT",6)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","EXIT",7)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","EXIT",8)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","EXIT",9)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","G",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","IOP")="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","IOP",1)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","K2")="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","K2",1)="4:0:0:0"
-^ZZCOVERAGE("%ZIS1","K2",2)="4:0:0:0"
-^ZZCOVERAGE("%ZIS1","K2",3)="4:0:0:0"
-^ZZCOVERAGE("%ZIS1","K2",4)="4:0:0:0"
-^ZZCOVERAGE("%ZIS1","KIL",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","KIL",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","KIL",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",6)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",7)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",8)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",9)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",10)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",11)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","L1",12)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","LKUP")="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","LKUP",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","LKUP",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","LKUP",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","MAIN",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","R")="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","R",0)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","R",1)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","R",2)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","RD",0)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","RD",1)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","RD",2)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","RD",3)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","RD",4)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","RD",5)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","SBR")="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","SBR",1)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","SBR",2)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","SBR",3)="1:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETQ")="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETQ",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETQ",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETQ",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETQ",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETQ",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",7)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",8)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",9)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",10)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",11)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",12)="2:0:0:0"
-^ZZCOVERAGE("%ZIS1","SETVAR",13)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","CHECK",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","CHECK",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","CHECK",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","CHECK",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","CHECK",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","CHECK",6)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","IOPAR")="4:0:0:0"
-^ZZCOVERAGE("%ZIS2","IOPAR",0)="4:0:0:0"
-^ZZCOVERAGE("%ZIS2","IOPAR",1)="4:0:0:0"
-^ZZCOVERAGE("%ZIS2","L2")="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","L2",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","OCPU",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","OOS",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","OOS",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","OTHCPU")="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","OTHCPU",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","OTHCPU",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","OTHCPU",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","OTHCPU",2,"FOR_LOOP",1)=4
-^ZZCOVERAGE("%ZIS2","OTHCPU",3)="4:0:0:0"
-^ZZCOVERAGE("%ZIS2","OTHCPU",4)="4:0:0:0"
-^ZZCOVERAGE("%ZIS2","OTHCPU",5)="4:0:0:0"
-^ZZCOVERAGE("%ZIS2","OTHCPU",15)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","PTIME",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","QUECHK")="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","QUECHK",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","QUECHK",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","QUECHK",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","QUECHK",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","QUECHK",9)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","QUECHK",13)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","SLAVE",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","T2",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","T2",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",10)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",11)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",12)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",15)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",16)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","TMPVAR",18)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","VTRM",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS2","VTRM",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","%ZIS3",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","%ZIS3",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","%ZIS3",6)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","%ZIS3",8)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","%ZIS3",9)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","%ZIS3",11)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","ALTP",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","ASKMAR",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","ASKMAR",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","MARGN")="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","MARGN",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","MARGN",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","MARGN",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","MARGN",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","Q",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","Q",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","Q",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","SETPAR")="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","SETPAR",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","SETPAR",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","ST")="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","ST",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","ST",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","ST",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","ST",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","STP",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","STP",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","STP",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","STP",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","TRM",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","TRM",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","TRM",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","TRM",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","TRM",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","W")="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","W",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","W",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS3","W",2)="1:0:0:0"
-^ZZCOVERAGE("%ZIS3","W",3)="1:0:0:0"
-^ZZCOVERAGE("%ZIS4","O")="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","O",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","O",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","O1")="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","O1",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","O1",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","O1",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","O1",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","OPAR",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","OPAR",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","OPAR",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","OPAR",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","OPAR",4)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","OPAR",5)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","OPAR",9)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","OPAR",10)="2:0:0:0"
-^ZZCOVERAGE("%ZIS4","OPAR",12)="2:0:0:0"
-^ZZCOVERAGE("%ZIS6","ANSBAK",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS6","ANSBAK",2)="2:0:0:0"
-^ZZCOVERAGE("%ZIS6","ANSBAK",3)="2:0:0:0"
-^ZZCOVERAGE("%ZIS6","OXECUTE",1)="2:0:0:0"
-^ZZCOVERAGE("%ZIS6","QUIT",0)="2:0:0:0"
-^ZZCOVERAGE("%ZIS6","QUIT",1)="2:0:0:0"
-^ZZCOVERAGE("%ZISC","C0")="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",1)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",3)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",5)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",6)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",8)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",9)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",10)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",13)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",16)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",17)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",21)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",26)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",27)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",29)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",32)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",33)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",34)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",37)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",41)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","C0",43)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS")="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS",0)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS",1)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS",2)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS",3)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS",4)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS",5)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS",6)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS",7)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CIOS",8)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CLOSPP")="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CLOSPP",0)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CLOSPP",1)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","CLOSPP",2)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","END",0)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","END",2)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","END",4)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","FF")="1:0:0:0"
-^ZZCOVERAGE("%ZISC","FF",0)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","FF",1)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","FF",2)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","RM")="1:0:0:0"
-^ZZCOVERAGE("%ZISC","RM",0)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","RM",1)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","S1",0)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","S1",1)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SETIO",2)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SETIO",4)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SETIO",5)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SETIO",6)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SETIO",7)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SETIO",8)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SETIO",9)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SETIO",10)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SETIO",12)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SUBTYPE")="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SUBTYPE",1)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SUBTYPE",2)="1:0:0:0"
-^ZZCOVERAGE("%ZISC","SUBTYPE",3)="1:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LINEPORT")="1:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LINEPORT",0)="1:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LINEPORT",2)="1:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LINEPORT",3)="1:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LINEPORT",4)="1:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LINEPORT",5)="1:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LINEPORT",6)="1:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTIEN")="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTIEN",0)="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTIEN",1)="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTNAM")="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTNAM",0)="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTNAM",1)="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTNAM",2)="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTNAM",3)="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTNAM",5)="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTNAM",6)="3:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTSUB")="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTSUB",0)="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTSUB",1)="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTSUB",2)="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","LNPRTSUB",3)="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","SYMBOL")="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","SYMBOL",0)="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","SYMBOL",1)="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","SYMBOL",3)="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","SYMBOL",4)="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","SYMBOL",5)="2:0:0:0"
-^ZZCOVERAGE("%ZISUTL","SYMBOL",5,"FOR_LOOP",1)=40
-^ZZCOVERAGE("%ZISUTL","SYMBOL",6)="40:0:0:0"
-^ZZCOVERAGE("%ZISUTL","SYMBOL",10)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","GETENV")="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","GETENV",1)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","GETENV",2)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","GETENV",3)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","LGR")="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","LGR",0)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","LGR",1)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","PRI")="1:0:0:0"
-^ZZCOVERAGE("%ZOSV","PRI",0)="1:0:0:0"
-^ZZCOVERAGE("%ZOSV","PRI",3)="1:0:0:0"
-^ZZCOVERAGE("%ZOSV","RETURN")="2:0:4000:4000"
-^ZZCOVERAGE("%ZOSV","RETURN",0)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","RETURN",2)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","RETURN",3)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","RETURN",4)="2:0:4000:4000"
-^ZZCOVERAGE("%ZOSV","RETURN",5)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","RETURN",7)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","TEMP")="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","TEMP",0)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV","TEMP",2)="2:0:0:0"
-^ZZCOVERAGE("%ZOSV2","LOAD")="467:1000060:340019:1340079"
-^ZZCOVERAGE("%ZOSV2","LOAD",0)="467:0:0:0"
-^ZZCOVERAGE("%ZOSV2","LOAD",1)="467:0:8001:8001"
-^ZZCOVERAGE("%ZOSV2","LOAD",2)="467:1000060:320018:1320078"
-^ZZCOVERAGE("%ZOSV2","LOAD",2,"FOR_LOOP",1)=45087
-^ZZCOVERAGE("%ZOSV2","LOAD",3)="467:0:12000:12000"
-^ZZCOVERAGE("DIALOG","EZBLD")="2:0:4000:4000"
-^ZZCOVERAGE("DIALOG","EZBLD",0)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","EZBLD",2)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","EZBLD",3)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","EZBLD",4)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","EZBLD",5)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","EZBLD",6)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","EZBLD",7)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","EZBLD",8)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","EZBLD",9)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","PARAM")="2:0:0:0"
-^ZZCOVERAGE("DIALOG","PARAM",0)="4:0:0:0"
-^ZZCOVERAGE("DIALOG","PARAM",1)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","PARAM",2)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","PARAM",3)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","Q1",0)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","Q2")="2:0:0:0"
-^ZZCOVERAGE("DIALOG","Q2",0)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","QEZ",0)="2:0:4000:4000"
-^ZZCOVERAGE("DIALOG","QEZ",1)="2:0:0:0"
-^ZZCOVERAGE("DIALOG","QP",0)="2:0:0:0"
-^ZZCOVERAGE("DIC","A1",0)="2:0:0:0"
-^ZZCOVERAGE("DIC","ASK",0)="2:0:0:0"
-^ZZCOVERAGE("DIC","ASK",1)="2:0:0:0"
-^ZZCOVERAGE("DIC","ASK",2)="2:0:0:0"
-^ZZCOVERAGE("DIC","ASK",3)="2:0:0:0"
-^ZZCOVERAGE("DIC","ASK",4)="2:0:0:0"
-^ZZCOVERAGE("DIC","DIC")="2:0:0:0"
-^ZZCOVERAGE("DIC","DIC",3)="2:0:0:0"
-^ZZCOVERAGE("DIC","DIC",4)="2:0:0:0"
-^ZZCOVERAGE("DIC","DIC",5)="2:0:0:0"
-^ZZCOVERAGE("DIC","DIC",6)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",0)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",1)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",2)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",3)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",4)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",5)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",6)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",7)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",8)="2:0:0:0"
-^ZZCOVERAGE("DIC","EN",9)="2:0:0:0"
-^ZZCOVERAGE("DIC","RTN",0)="2:0:0:0"
-^ZZCOVERAGE("DIC","RTN",3)="2:0:0:0"
-^ZZCOVERAGE("DIC","RTN",6)="2:0:0:0"
-^ZZCOVERAGE("DIC","X",1)="2:0:0:0"
-^ZZCOVERAGE("DIC","X",4)="2:0:0:0"
-^ZZCOVERAGE("DIC","X",5)="2:0:0:0"
-^ZZCOVERAGE("DIC","X",6)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE")="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",0)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",1)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",2)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",3)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",4)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",7)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",8)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",11)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",12)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",13)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",14)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",15)="2:0:0:0"
-^ZZCOVERAGE("DIC0","GETFILE",16)="2:0:0:0"
-^ZZCOVERAGE("DIC0","INIT")="2:0:0:0"
-^ZZCOVERAGE("DIC0","INIT",1)="2:0:0:0"
-^ZZCOVERAGE("DIC0","INIT",2)="2:0:0:0"
-^ZZCOVERAGE("DIC0","INIT",3)="2:0:0:0"
-^ZZCOVERAGE("DIC0","INIT",4)="2:0:0:0"
-^ZZCOVERAGE("DIC0","INIT",5)="2:0:0:0"
-^ZZCOVERAGE("DIC0","INIT",6)="2:0:0:0"
-^ZZCOVERAGE("DIC0","INIT",7)="2:0:0:0"
-^ZZCOVERAGE("DIC0","INIT",8)="2:0:0:0"
-^ZZCOVERAGE("DIC0","SETIEN")="2:0:0:0"
-^ZZCOVERAGE("DIC0","SETIEN",0)="2:0:0:0"
-^ZZCOVERAGE("DIC0","SETIEN",1)="2:0:0:0"
-^ZZCOVERAGE("DIC0","SETIEN",2)="2:0:0:0"
-^ZZCOVERAGE("DIC0","SETIEN",3)="2:0:0:0"
-^ZZCOVERAGE("DIC0","SETIEN",4)="2:0:0:0"
-^ZZCOVERAGE("DIC0","SETIEN",5)="2:0:0:0"
-^ZZCOVERAGE("DIC0","SETIEN",5,"FOR_LOOP",1)=2
-^ZZCOVERAGE("DIC0","SETIEN",6)="2:0:0:0"
-^ZZCOVERAGE("DIC0","SETIEN",7)="2:0:0:0"
-^ZZCOVERAGE("DIC1","B",0)="2:0:0:0"
-^ZZCOVERAGE("DIC1","DIC1")="2:0:0:0"
-^ZZCOVERAGE("DIC1","DIC1",3)="2:0:0:0"
-^ZZCOVERAGE("DIC1","DIC1",4)="2:0:0:0"
-^ZZCOVERAGE("DIC1","DIC1",5)="2:0:0:0"
-^ZZCOVERAGE("DIC1","DO")="4:0:0:0"
-^ZZCOVERAGE("DIC1","DO",1)="4:0:0:0"
-^ZZCOVERAGE("DIC1","DO",2)="2:0:0:0"
-^ZZCOVERAGE("DIC1","DO2",0)="2:0:0:0"
-^ZZCOVERAGE("DIC1","DO2",1)="2:0:0:0"
-^ZZCOVERAGE("DIC1","DO2",2)="2:0:0:0"
-^ZZCOVERAGE("DIC1","DO2",3)="2:0:0:0"
-^ZZCOVERAGE("DIC1","GETFA")="4:0:0:0"
-^ZZCOVERAGE("DIC1","GETFA",0)="4:0:0:0"
-^ZZCOVERAGE("DIC1","GETFA",2)="4:0:0:0"
-^ZZCOVERAGE("DIC1","P",1)="2:0:0:0"
-^ZZCOVERAGE("DIC1","P",2)="2:0:0:0"
-^ZZCOVERAGE("DIC1","PROMPT",1)="2:0:0:0"
-^ZZCOVERAGE("DIC1","PROMPT",2)="2:0:0:0"
-^ZZCOVERAGE("DIC1","W",0)="2:0:0:0"
-^ZZCOVERAGE("DIC1","W",0,"FOR_LOOP",1)=4
-^ZZCOVERAGE("DIC1","W",1)="3:0:0:0"
-^ZZCOVERAGE("DIC1","W",2)="3:0:0:0"
-^ZZCOVERAGE("DIC1","W",3)="2:0:0:0"
-^ZZCOVERAGE("DIC1","W",4)="2:0:0:0"
-^ZZCOVERAGE("DIC1","W",5)="2:0:0:0"
-^ZZCOVERAGE("DIC1","W",6)="2:0:0:0"
-^ZZCOVERAGE("DIC1","WOV")="1:0:0:0"
-^ZZCOVERAGE("DIC1","WOV",0)="1:0:0:0"
-^ZZCOVERAGE("DIC1","WOV",1)="1:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT")="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",0)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",1)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",2)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",3)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",3,"FOR_LOOP",1)=2
-^ZZCOVERAGE("DIC11","GETPRMT",4)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",8)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",9)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",10)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",11)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",12)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",13)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",14)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",15)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",16)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",17)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",18)="2:0:0:0"
-^ZZCOVERAGE("DIC11","GETPRMT",19)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",0)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",1)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",2)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",3)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",4)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",6)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",8)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",9)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",11)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",12)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",13)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",14)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",15)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PR1",16)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PROMPT")="2:0:0:0"
-^ZZCOVERAGE("DIC11","PROMPT",0)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PROMPT",1)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PROMPT",1,"FOR_LOOP",1)=2
-^ZZCOVERAGE("DIC11","PROMPT",2)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PROMPT",3)="2:0:0:0"
-^ZZCOVERAGE("DIC11","PROMPT",5)="2:0:0:0"
-^ZZCOVERAGE("DIC2","PGM")="4:0:0:0"
-^ZZCOVERAGE("DIC2","PGM",0)="4:0:0:0"
-^ZZCOVERAGE("DIC2","PGM",1)="4:0:0:0"
-^ZZCOVERAGE("DIC2","PGM",2)="4:0:0:0"
-^ZZCOVERAGE("DIC2","Q")="2:0:0:0"
-^ZZCOVERAGE("DIC2","Q",0)="2:0:0:0"
-^ZZCOVERAGE("DIC2","Q",1)="2:0:0:0"
-^ZZCOVERAGE("DIC2","Q",2)="2:0:0:0"
-^ZZCOVERAGE("DICL","DINDEX")="2:0:0:0"
-^ZZCOVERAGE("DICL","DINDEX",0)="2:0:0:0"
-^ZZCOVERAGE("DICL","DINDEX",1)="2:0:0:0"
-^ZZCOVERAGE("DICL","DINDEX",2)="2:0:0:0"
-^ZZCOVERAGE("DICL","DINDEX",5)="2:0:0:0"
-^ZZCOVERAGE("DICL","DINDEX",6)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","I1",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","I1",3)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","I1",4)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","I1",5)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","INDEX")="2:0:0:0"
-^ZZCOVERAGE("DICUIX","INDEX",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X1",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X1",8)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X1",9)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",3)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",4)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",5)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",8)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",11)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",12)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",13)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",14)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",15)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",15,"FOR_LOOP",1)=2
-^ZZCOVERAGE("DICUIX","X2",16)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",17)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",18)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",19)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",20)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",21)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",22)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",23)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",24)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",25)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",26)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",27)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",28)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",29)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",30)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",31)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",32)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","X2",33)="2:0:0:0"
-^ZZCOVERAGE("DICUIX","XREF")="2:0:0:0"
-^ZZCOVERAGE("DICUIX","XREF",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G1",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G1",3)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G1",4)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G2",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G2",3)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G3",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G30",1)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G4",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G4",3)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G4",4)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G4",5)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G4",6)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G4",7)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G5",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G5",3)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","G5",7)="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","GET")="2:0:0:0"
-^ZZCOVERAGE("DICUIX1","GET",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C1",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C1",1)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C2",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C2",1)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C3",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C3",1)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C3",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C3",5)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",1)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",3)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",4)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",5)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",6)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",7)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",8)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",9)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",10)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",11)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",12)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",17)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",18)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",23)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C4",24)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C5",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C5",1)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C6",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C6",18)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C6",19)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C6",20)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C7",0)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","C7",7)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON1")="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON1",1)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON1",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON1",3)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON1",4)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON1",5)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON1",6)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON1",7)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2")="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2",1)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2",2)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2",3)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2",4)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2",5)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2",6)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2",7)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2",8)="2:0:0:0"
-^ZZCOVERAGE("DICUIX2","COMMON2",9)="2:0:0:0"
-^ZZCOVERAGE("DIEFU","IENX",1)="2:0:0:0"
-^ZZCOVERAGE("DIEFU","IENX",2)="2:0:0:0"
-^ZZCOVERAGE("DIEFU","IENX",3)="2:0:0:0"
-^ZZCOVERAGE("DIEFU","IENX",3,"FOR_LOOP",1)=4
-^ZZCOVERAGE("DIEFU","IENX",4)="2:0:0:0"
-^ZZCOVERAGE("DIEFU","IENX",5)="2:0:0:0"
-^ZZCOVERAGE("DILF","CREF")="4:0:0:0"
-^ZZCOVERAGE("DILF","CREF",0)="4:0:0:0"
-^ZZCOVERAGE("DILF","IENS")="2:0:0:0"
-^ZZCOVERAGE("DILF","IENS",0)="2:0:0:0"
-^ZZCOVERAGE("DILF","IENS",1)="2:0:0:0"
-^ZZCOVERAGE("DILF","OREF")="2:0:0:0"
-^ZZCOVERAGE("DILF","OREF",0)="2:0:0:0"
-^ZZCOVERAGE("DILIBF","FNO")="2:0:0:0"
-^ZZCOVERAGE("DILIBF","FNO",0)="2:0:0:0"
-^ZZCOVERAGE("DILIBF","FNO",1)="2:0:0:0"
-^ZZCOVERAGE("DILIBF","FNO",2)="2:0:0:0"
-^ZZCOVERAGE("DIQGU","ENCREF",0)="4:0:0:0"
-^ZZCOVERAGE("DIQGU","ENOREF",0)="2:0:0:0"
-^ZZCOVERAGE("DIQGU","OR2")="2:0:0:0"
-^ZZCOVERAGE("DIQGU","OR2",0)="2:0:0:0"
-^ZZCOVERAGE("XINDEX","A2",0)="468:0:4000:4000"
-^ZZCOVERAGE("XINDEX","A2",1)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","A2",2)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","A2",3)="467:4000:0:4000"
-^ZZCOVERAGE("XINDEX","A2",4)="467:0:4000:4000"
-^ZZCOVERAGE("XINDEX","A2",5)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","ALIVE",1)="1:0:0:0"
-^ZZCOVERAGE("XINDEX","B5",0)="467:188012:220012:408024"
-^ZZCOVERAGE("XINDEX","B5",0,"FOR_LOOP",1)=44620
-^ZZCOVERAGE("XINDEX","B5",1)="467:20000:8000:28000"
-^ZZCOVERAGE("XINDEX","B5",2)="467:4000:0:4000"
-^ZZCOVERAGE("XINDEX","B5",3)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","B5",4)="467:4000:0:4000"
-^ZZCOVERAGE("XINDEX","B5",5)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","BEG")="467:2460149:2872194:5332343"
-^ZZCOVERAGE("XINDEX","BEG",1)="467:8000:0:8000"
-^ZZCOVERAGE("XINDEX","BEG",2)="467:4000:0:4000"
-^ZZCOVERAGE("XINDEX","BEG",3)="467:0:4000:4000"
-^ZZCOVERAGE("XINDEX","BEG",4)="467:0:4000:4000"
-^ZZCOVERAGE("XINDEX","BEG",5)="467:4001:0:4001"
-^ZZCOVERAGE("XINDEX","BEG",7)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","BEG",8)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","BEG",9)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","BEG",11)="467:4000:0:4000"
-^ZZCOVERAGE("XINDEX","BEG",12)="467:0:4000:4000"
-^ZZCOVERAGE("XINDEX","BEG",14)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","BEG",15)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","BEG",16)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","CD",0)="44620:32001:36002:68003"
-^ZZCOVERAGE("XINDEX","CD",1)="44620:40002:60004:100006"
-^ZZCOVERAGE("XINDEX","CD",2)="44620:40001:60002:100003"
-^ZZCOVERAGE("XINDEX","CD",3)="44620:36002:44004:80006"
-^ZZCOVERAGE("XINDEX","CD",4)="44620:28000:40002:68002"
-^ZZCOVERAGE("XINDEX","CD",5)="44620:28002:52001:80003"
-^ZZCOVERAGE("XINDEX","CD",6)="10770:28003:20000:48003"
-^ZZCOVERAGE("XINDEX","CD",6,"FOR_LOOP",1)=57531
-^ZZCOVERAGE("XINDEX","CD",7)="10770:24004:16000:40004"
-^ZZCOVERAGE("XINDEX","CD",9)="44620:60005:40004:100009"
-^ZZCOVERAGE("XINDEX","CD",10)="44620:44003:48005:92008"
-^ZZCOVERAGE("XINDEX","CD",12)="44620:52004:44002:96006"
-^ZZCOVERAGE("XINDEX","EE",0)="116081:148007:200014:348021"
-^ZZCOVERAGE("XINDEX","EE",1)="71461:44004:44002:88006"
-^ZZCOVERAGE("XINDEX","EE",2)="71461:100007:80003:180010"
-^ZZCOVERAGE("XINDEX","EE",3)="54870:44001:48001:92002"
-^ZZCOVERAGE("XINDEX","EE",4)="53608:88008:100009:188017"
-^ZZCOVERAGE("XINDEX","EE",5)="53608:72006:68004:140010"
-^ZZCOVERAGE("XINDEX","EE",6)="53608:76005:72004:148009"
-^ZZCOVERAGE("XINDEX","EE",8)="53608:60003:64005:124008"
-^ZZCOVERAGE("XINDEX","EE",9)="53608:48003:72003:120006"
-^ZZCOVERAGE("XINDEX","EE",10)="53608:52002:96008:148010"
-^ZZCOVERAGE("XINDEX","EE",13)="53608:52003:44001:96004"
-^ZZCOVERAGE("XINDEX","EE",14)="53608:96007:112006:208013"
-^ZZCOVERAGE("XINDEX","EE",15)="53608:24001:52004:76005"
-^ZZCOVERAGE("XINDEX","EE",16)="53608:52005:88007:140012"
-^ZZCOVERAGE("XINDEX","EE",17)="53608:128008:208017:336025"
-^ZZCOVERAGE("XINDEX","F")="1559:4000:4001:8001"
-^ZZCOVERAGE("XINDEX","F",0)="1559:4000:0:4000"
-^ZZCOVERAGE("XINDEX","G")="1932:56003:96009:152012"
-^ZZCOVERAGE("XINDEX","G",0)="1932:4000:8002:12002"
-^ZZCOVERAGE("XINDEX","H")="11:0:0:0"
-^ZZCOVERAGE("XINDEX","H",0)="11:0:0:0"
-^ZZCOVERAGE("XINDEX","K")="2218:40001:24002:64003"
-^ZZCOVERAGE("XINDEX","K",0)="2218:4000:4000:8000"
-^ZZCOVERAGE("XINDEX","K",1)="2218:0:4001:4001"
-^ZZCOVERAGE("XINDEX","L")="259:4001:4000:8001"
-^ZZCOVERAGE("XINDEX","L",0)="259:0:0:0"
-^ZZCOVERAGE("XINDEX","LN",0)="44620:68005:104005:172010"
-^ZZCOVERAGE("XINDEX","LN",1)="44620:40001:64004:104005"
-^ZZCOVERAGE("XINDEX","LN",2)="5073:12000:4001:16001"
-^ZZCOVERAGE("XINDEX","LN",3)="5073:4000:8000:12000"
-^ZZCOVERAGE("XINDEX","LN",4)="5073:20001:0:20001"
-^ZZCOVERAGE("XINDEX","LN",5)="5073:20003:12002:32005"
-^ZZCOVERAGE("XINDEX","LN",6)="5073:12002:16000:28002"
-^ZZCOVERAGE("XINDEX","LOAD")="467:88003:196019:284022"
-^ZZCOVERAGE("XINDEX","LOAD",0)="467:88003:196019:284022"
-^ZZCOVERAGE("XINDEX","LOAD",1)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","LOAD",2)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","M")="30:4000:0:4000"
-^ZZCOVERAGE("XINDEX","M",0)="30:0:0:0"
-^ZZCOVERAGE("XINDEX","N")="1721:88005:80004:168009"
-^ZZCOVERAGE("XINDEX","N",0)="1721:4000:0:4000"
-^ZZCOVERAGE("XINDEX","POSTRTN")="467:108009:96003:204012"
-^ZZCOVERAGE("XINDEX","POSTRTN",1)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","POSTRTN",2)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","POSTRTN",3)="467:12000:8000:20000"
-^ZZCOVERAGE("XINDEX","POSTRTN",3,"FOR_LOOP",1)=2558
-^ZZCOVERAGE("XINDEX","POSTRTN",4)="2091:0:0:0"
-^ZZCOVERAGE("XINDEX","POSTRTN",5)="2044:4000:0:4000"
-^ZZCOVERAGE("XINDEX","POSTRTN",6)="2044:4000:0:4000"
-^ZZCOVERAGE("XINDEX","POSTRTN",9)="2044:0:0:0"
-^ZZCOVERAGE("XINDEX","POSTRTN",10)="467:0:4000:4000"
-^ZZCOVERAGE("XINDEX","POSTRTN",11)="467:12002:16001:28003"
-^ZZCOVERAGE("XINDEX","POSTRTN",11,"FOR_LOOP",1)=5540
-^ZZCOVERAGE("XINDEX","POSTRTN",12)="5073:0:4000:4000"
-^ZZCOVERAGE("XINDEX","POSTRTN",13)="5073:8000:4000:12000"
-^ZZCOVERAGE("XINDEX","POSTRTN",14)="5073:0:0:0"
-^ZZCOVERAGE("XINDEX","POSTRTN",15)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","POSTRTN",16)="467:28001:20001:48002"
-^ZZCOVERAGE("XINDEX","POSTRTN",16,"FOR_LOOP",1)=16376
-^ZZCOVERAGE("XINDEX","POSTRTN",17)="15909:40006:40001:80007"
-^ZZCOVERAGE("XINDEX","POSTRTN",18)="15909:0:0:0"
-^ZZCOVERAGE("XINDEX","POSTRTN",19)="467:0:0:0"
-^ZZCOVERAGE("XINDEX","Q")="7762:12000:20001:32001"
-^ZZCOVERAGE("XINDEX","Q",0)="7762:4000:16001:20001"
-^ZZCOVERAGE("XINDEX","QUOTE")="36371:188012:232009:420021"
-^ZZCOVERAGE("XINDEX","QUOTE",0)="36371:156010:192008:348018"
-^ZZCOVERAGE("XINDEX","QUOTE",0,"FOR_LOOP",1)=323268
-^ZZCOVERAGE("XINDEX","QUOTE",1)="36371:20002:20001:40003"
-^ZZCOVERAGE("XINDEX","R")="85:0:8001:8001"
-^ZZCOVERAGE("XINDEX","R",0)="85:0:0:0"
-^ZZCOVERAGE("XINDEX","S")="17549:716055:988057:1704112"
-^ZZCOVERAGE("XINDEX","S",0)="17549:28003:28003:56006"
-^ZZCOVERAGE("XINDEX","SE2",0)="86891:176010:272017:448027"
-^ZZCOVERAGE("XINDEX","SE2",1)="85079:264015:376016:640031"
-^ZZCOVERAGE("XINDEX","SE2",2)="85079:72005:112010:184015"
-^ZZCOVERAGE("XINDEX","SEP")="107216:736054:648038:1384092"
-^ZZCOVERAGE("XINDEX","SEP",0)="107216:580045:440030:1020075"
-^ZZCOVERAGE("XINDEX","SEP",0,"FOR_LOOP",1)=1019212
-^ZZCOVERAGE("XINDEX","SEP",1)="107216:120007:144005:264012"
-^ZZCOVERAGE("XINDEX","SET")="85079:772044:1124063:1896107"
-^ZZCOVERAGE("XINDEX","SET",0)="85079:176007:168008:344015"
-^ZZCOVERAGE("XINDEX","SET",0,"FOR_LOOP",1)=74812
-^ZZCOVERAGE("XINDEX","SET",1)="85079:64005:144010:208015"
-^ZZCOVERAGE("XINDEX","ST",0)="44620:68001:56004:124005"
-^ZZCOVERAGE("XINDEX","ST",2)="44620:260012:376038:636050"
-^ZZCOVERAGE("XINDEX","ST",2,"FOR_LOOP",1)=85813
-^ZZCOVERAGE("XINDEX","ST",2,"FOR_LOOP",2)=126272
-^ZZCOVERAGE("XINDEX","ST",3)="44620:224014:184014:408028"
-^ZZCOVERAGE("XINDEX","ST",4)="44620:0:0:0"
-^ZZCOVERAGE("XINDEX","U")="72:0:0:0"
-^ZZCOVERAGE("XINDEX","U",0)="72:0:0:0"
-^ZZCOVERAGE("XINDEX","W")="4584:156009:200014:356023"
-^ZZCOVERAGE("XINDEX","W",0)="4584:0:16001:16001"
-^ZZCOVERAGE("XINDEX","X")="220:0:0:0"
-^ZZCOVERAGE("XINDEX","X",0)="220:0:0:0"
-^ZZCOVERAGE("XINDEX","XINDEX")="1:32002:36000:68002"
-^ZZCOVERAGE("XINDEX","XINDEX",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX1","A",0)="75:0:4000:4000"
-^ZZCOVERAGE("XINDX1","A",1)="75:0:0:0"
-^ZZCOVERAGE("XINDX1","A",2)="75:0:0:0"
-^ZZCOVERAGE("XINDX1","B",0)="75:0:0:0"
-^ZZCOVERAGE("XINDX1","B",4)="75:0:0:0"
-^ZZCOVERAGE("XINDX1","B",6)="75:0:0:0"
-^ZZCOVERAGE("XINDX1","B",7)="75:0:0:0"
-^ZZCOVERAGE("XINDX1","E")="73:0:4000:4000"
-^ZZCOVERAGE("XINDX1","E",0)="73:0:0:0"
-^ZZCOVERAGE("XINDX1","XINDX1")="2:0:0:0"
-^ZZCOVERAGE("XINDX1","XINDX1",3)="2:0:0:0"
-^ZZCOVERAGE("XINDX10","ASK")="1:0:0:0"
-^ZZCOVERAGE("XINDX10","ASK",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX10","ASK",2)="1:0:0:0"
-^ZZCOVERAGE("XINDX10","ASK",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX10","ASK",8)="1:0:0:0"
-^ZZCOVERAGE("XINDX2","%")="44620:132010:232014:364024"
-^ZZCOVERAGE("XINDX2","%",0)="44620:96008:92005:188013"
-^ZZCOVERAGE("XINDX2","%",0,"FOR_LOOP",1)=62810
-^ZZCOVERAGE("XINDX2","%",1)="44620:16001:68003:84004"
-^ZZCOVERAGE("XINDX2","ARG")="329774:1516089:2124136:3640225"
-^ZZCOVERAGE("XINDX2","ARG",1)="330498:328020:360021:688041"
-^ZZCOVERAGE("XINDX2","ARG",2)="262221:228015:296022:524037"
-^ZZCOVERAGE("XINDX2","ARG",3)="226556:260020:468034:728054"
-^ZZCOVERAGE("XINDX2","ARG",4)="126854:104004:160011:264015"
-^ZZCOVERAGE("XINDX2","ARG",5)="117750:136007:148011:284018"
-^ZZCOVERAGE("XINDX2","ARG",6)="88629:60001:96003:156004"
-^ZZCOVERAGE("XINDX2","ARG",7)="88424:80005:100006:180011"
-^ZZCOVERAGE("XINDX2","ARG",8)="86550:72002:108007:180009"
-^ZZCOVERAGE("XINDX2","ARGG")="18715:288018:352019:640037"
-^ZZCOVERAGE("XINDX2","ARGG",0)="18715:76007:84005:160012"
-^ZZCOVERAGE("XINDX2","ARGG",0,"FOR_LOOP",1)=49672
-^ZZCOVERAGE("XINDX2","ARGS")="44410:464031:676031:1140062"
-^ZZCOVERAGE("XINDX2","ARGS",1)="63125:620038:844037:1464075"
-^ZZCOVERAGE("XINDX2","ARGS",1,"FOR_LOOP",1)=291597
-^ZZCOVERAGE("XINDX2","ARGS",2)="63125:24001:60004:84005"
-^ZZCOVERAGE("XINDX2","DN")="44410:208011:284017:492028"
-^ZZCOVERAGE("XINDX2","DN",0)="44410:44003:108008:152011"
-^ZZCOVERAGE("XINDX2","DN",1)="44410:152008:144006:296014"
-^ZZCOVERAGE("XINDX2","EXT",1)="1970:4000:8001:12001"
-^ZZCOVERAGE("XINDX2","EXT",2)="1970:0:0:0"
-^ZZCOVERAGE("XINDX2","EXT",3)="1970:8001:12001:20002"
-^ZZCOVERAGE("XINDX2","EXT",4)="1970:0:4000:4000"
-^ZZCOVERAGE("XINDX2","FLUSH")="94:0:0:0"
-^ZZCOVERAGE("XINDX2","FLUSH",0)="94:0:0:0"
-^ZZCOVERAGE("XINDX2","FLUSH",1)="94:0:0:0"
-^ZZCOVERAGE("XINDX2","FLUSH",1,"FOR_LOOP",1)=415
-^ZZCOVERAGE("XINDX2","FLUSH",2)="94:0:0:0"
-^ZZCOVERAGE("XINDX2","FNC")="12:0:0:0"
-^ZZCOVERAGE("XINDX2","FNC",0)="12:0:0:0"
-^ZZCOVERAGE("XINDX2","FNC",1)="12:0:0:0"
-^ZZCOVERAGE("XINDX2","FNC",2)="12:0:0:0"
-^ZZCOVERAGE("XINDX2","FNC",3)="12:0:0:0"
-^ZZCOVERAGE("XINDX2","FNC",4)="12:0:0:0"
-^ZZCOVERAGE("XINDX2","FUN")="29121:340019:424027:764046"
-^ZZCOVERAGE("XINDX2","FUN",0)="29121:36004:40002:76006"
-^ZZCOVERAGE("XINDX2","FUN",1)="23452:48002:72003:120005"
-^ZZCOVERAGE("XINDX2","FUN",2)="23452:20000:44003:64003"
-^ZZCOVERAGE("XINDX2","FUN",3)="23393:96004:56005:152009"
-^ZZCOVERAGE("XINDX2","FUN",3,"FOR_LOOP",1)=147754
-^ZZCOVERAGE("XINDX2","FUN",4)="23393:48003:56005:104008"
-^ZZCOVERAGE("XINDX2","FUN",5)="23393:60004:92005:152009"
-^ZZCOVERAGE("XINDX2","GLO",0)="9104:28002:28001:56003"
-^ZZCOVERAGE("XINDX2","GLO",1)="9104:12001:20001:32002"
-^ZZCOVERAGE("XINDX2","GLO",2)="9104:16000:28001:44001"
-^ZZCOVERAGE("XINDX2","GLO",3)="9104:36002:80004:116006"
-^ZZCOVERAGE("XINDX2","GLO",4)="9104:8000:4000:12000"
-^ZZCOVERAGE("XINDX2","INC")="322910:416022:652029:1068051"
-^ZZCOVERAGE("XINDX2","INC",0)="365505:320019:472020:792039"
-^ZZCOVERAGE("XINDX2","INC2")="42595:104006:148008:252014"
-^ZZCOVERAGE("XINDX2","INC2",0)="42595:48001:40003:88004"
-^ZZCOVERAGE("XINDX2","LOC")="99702:576031:736052:1312083"
-^ZZCOVERAGE("XINDX2","LOC",0)="99702:144010:156013:300023"
-^ZZCOVERAGE("XINDX2","LOC",1)="99702:124004:148011:272015"
-^ZZCOVERAGE("XINDX2","LOC",2)="99702:212011:272014:484025"
-^ZZCOVERAGE("XINDX2","LOC",3)="99702:52005:96006:148011"
-^ZZCOVERAGE("XINDX2","NAK",0)="996:0:0:0"
-^ZZCOVERAGE("XINDX2","NAK",1)="996:0:0:0"
-^ZZCOVERAGE("XINDX2","PAT")="205:4000:0:4000"
-^ZZCOVERAGE("XINDX2","PAT",0)="205:0:0:0"
-^ZZCOVERAGE("XINDX2","PAT",1)="205:4000:0:4000"
-^ZZCOVERAGE("XINDX2","PAT",1,"FOR_LOOP",1)=457
-^ZZCOVERAGE("XINDX2","PAT",2)="205:0:0:0"
-^ZZCOVERAGE("XINDX2","PATCODE")="457:4000:4000:8000"
-^ZZCOVERAGE("XINDX2","PATCODE",0)="457:0:4000:4000"
-^ZZCOVERAGE("XINDX2","PATCODE",1)="358:4000:0:4000"
-^ZZCOVERAGE("XINDX2","PATCODE",1,"FOR_LOOP",1)=791
-^ZZCOVERAGE("XINDX2","PATCODE",2)="358:0:0:0"
-^ZZCOVERAGE("XINDX2","PATCODE",3)="358:0:0:0"
-^ZZCOVERAGE("XINDX2","PATCODE",4)="358:0:0:0"
-^ZZCOVERAGE("XINDX2","PATQ")="99:4000:4000:8000"
-^ZZCOVERAGE("XINDX2","PATQ",0)="99:0:4000:4000"
-^ZZCOVERAGE("XINDX2","PATQ",0,"FOR_LOOP",1)=247
-^ZZCOVERAGE("XINDX2","PATQ",1)="99:4000:0:4000"
-^ZZCOVERAGE("XINDX2","PATQ",2)="99:0:0:0"
-^ZZCOVERAGE("XINDX2","PEEK")="112687:168013:248022:416035"
-^ZZCOVERAGE("XINDX2","PEEK",0)="112687:120009:164010:284019"
-^ZZCOVERAGE("XINDX2","PEEKDN")="17373:56002:40000:96002"
-^ZZCOVERAGE("XINDX2","PEEKDN",0)="17373:48002:32000:80002"
-^ZZCOVERAGE("XINDX2","REPCNT")="457:0:0:0"
-^ZZCOVERAGE("XINDX2","REPCNT",0)="457:0:0:0"
-^ZZCOVERAGE("XINDX2","REPCNT",0,"FOR_LOOP",1)=1004
-^ZZCOVERAGE("XINDX2","REPCNT",1)="457:0:0:0"
-^ZZCOVERAGE("XINDX2","REPCNT",2)="457:0:0:0"
-^ZZCOVERAGE("XINDX2","SPV",1)="3699:0:8001:8001"
-^ZZCOVERAGE("XINDX2","SPV",2)="3699:0:0:0"
-^ZZCOVERAGE("XINDX2","ST")="110835:464030:648049:1112079"
-^ZZCOVERAGE("XINDX2","ST",0)="110835:192009:248021:440030"
-^ZZCOVERAGE("XINDX2","ST",1)="110835:100008:156011:256019"
-^ZZCOVERAGE("XINDX2","ST",2)="110835:76005:116005:192010"
-^ZZCOVERAGE("XINDX2","TEXT",0)="59:0:0:0"
-^ZZCOVERAGE("XINDX2","TEXT",1)="59:0:0:0"
-^ZZCOVERAGE("XINDX2","TEXT",2)="59:0:0:0"
-^ZZCOVERAGE("XINDX2","TEXT",3)="59:0:0:0"
-^ZZCOVERAGE("XINDX2","UP")="44410:116012:180012:296024"
-^ZZCOVERAGE("XINDX2","UP",1)="44410:112012:116006:228018"
-^ZZCOVERAGE("XINDX2","VA")="5073:16001:20000:36001"
-^ZZCOVERAGE("XINDX2","VA",0)="5073:4000:12000:16000"
-^ZZCOVERAGE("XINDX2","VA",1)="5073:8000:4000:12000"
-^ZZCOVERAGE("XINDX2","VT")="10205:4001:24002:28003"
-^ZZCOVERAGE("XINDX2","VT",0)="10205:0:8000:8000"
-^ZZCOVERAGE("XINDX2","VT",1)="10205:0:4000:4000"
-^ZZCOVERAGE("XINDX3","A",0)="8136:36001:12001:48002"
-^ZZCOVERAGE("XINDX3","ASM")="312:12001:0:12001"
-^ZZCOVERAGE("XINDX3","ASM",0)="312:0:0:0"
-^ZZCOVERAGE("XINDX3","ASM",1)="312:8001:0:8001"
-^ZZCOVERAGE("XINDX3","ASM",1,"FOR_LOOP",1)=2110
-^ZZCOVERAGE("XINDX3","ASM",2)="312:0:0:0"
-^ZZCOVERAGE("XINDX3","DN")="498:4000:4000:8000"
-^ZZCOVERAGE("XINDX3","DN",0)="498:0:4000:4000"
-^ZZCOVERAGE("XINDX3","DN",1)="498:4000:0:4000"
-^ZZCOVERAGE("XINDX3","FL")="63250:152007:260014:412021"
-^ZZCOVERAGE("XINDX3","FL",1)="63250:72000:144009:216009"
-^ZZCOVERAGE("XINDX3","FL",2)="63250:64006:80004:144010"
-^ZZCOVERAGE("XINDX3","INC")="145482:224018:308026:532044"
-^ZZCOVERAGE("XINDX3","INC",0)="145482:188015:196015:384030"
-^ZZCOVERAGE("XINDX3","KL",1)="2218:0:4000:4000"
-^ZZCOVERAGE("XINDX3","KL1")="28:0:0:0"
-^ZZCOVERAGE("XINDX3","KL1",0)="28:0:0:0"
-^ZZCOVERAGE("XINDX3","KL2")="724:4000:28000:32000"
-^ZZCOVERAGE("XINDX3","KL2",0)="724:0:0:0"
-^ZZCOVERAGE("XINDX3","KL2",1)="724:0:4000:4000"
-^ZZCOVERAGE("XINDX3","KL2",2)="724:0:0:0"
-^ZZCOVERAGE("XINDX3","KL3")="3320:12002:36002:48004"
-^ZZCOVERAGE("XINDX3","KL3",0)="3320:4000:8000:12000"
-^ZZCOVERAGE("XINDX3","KL3",1)="3320:4001:4000:8001"
-^ZZCOVERAGE("XINDX3","KL5",0)="3320:0:20002:20002"
-^ZZCOVERAGE("XINDX3","MULT")="498:8001:4000:12001"
-^ZZCOVERAGE("XINDX3","MULT",0)="498:4001:0:4001"
-^ZZCOVERAGE("XINDX3","MULT",1)="498:4000:4000:8000"
-^ZZCOVERAGE("XINDX3","MULT",1,"FOR_LOOP",1)=2401
-^ZZCOVERAGE("XINDX3","MULT",2)="498:0:0:0"
-^ZZCOVERAGE("XINDX3","N2",0)="23604:68004:36003:104007"
-^ZZCOVERAGE("XINDX3","N2",3)="11802:16002:4000:20002"
-^ZZCOVERAGE("XINDX3","N2",4)="187:0:0:0"
-^ZZCOVERAGE("XINDX3","N2",5)="187:0:0:0"
-^ZZCOVERAGE("XINDX3","N2",6)="11628:12001:20002:32003"
-^ZZCOVERAGE("XINDX3","N2",7)="11628:12000:8000:20000"
-^ZZCOVERAGE("XINDX3","NE")="779:32002:16001:48003"
-^ZZCOVERAGE("XINDX3","NE",1)="2500:4000:4000:8000"
-^ZZCOVERAGE("XINDX3","NE",2)="2500:4000:20000:24000"
-^ZZCOVERAGE("XINDX3","PEEK")="498:0:0:0"
-^ZZCOVERAGE("XINDX3","PEEK",0)="498:0:0:0"
-^ZZCOVERAGE("XINDX3","PEEKDN")="39:0:0:0"
-^ZZCOVERAGE("XINDX3","PEEKDN",0)="39:0:0:0"
-^ZZCOVERAGE("XINDX3","RD",0)="85:0:0:0"
-^ZZCOVERAGE("XINDX3","RD1",0)="278:0:4001:4001"
-^ZZCOVERAGE("XINDX3","RD1",3)="193:0:4000:4000"
-^ZZCOVERAGE("XINDX3","RD1",4)="85:0:0:0"
-^ZZCOVERAGE("XINDX3","RD1",5)="85:0:0:0"
-^ZZCOVERAGE("XINDX3","RD2")="85:0:4000:4000"
-^ZZCOVERAGE("XINDX3","RD2",0)="255:0:0:0"
-^ZZCOVERAGE("XINDX3","RD2",1)="170:0:0:0"
-^ZZCOVERAGE("XINDX3","RD2",2)="170:0:4000:4000"
-^ZZCOVERAGE("XINDX3","RD2",3)="85:0:0:0"
-^ZZCOVERAGE("XINDX3","RD3")="108:0:0:0"
-^ZZCOVERAGE("XINDX3","RD3",0)="161:0:0:0"
-^ZZCOVERAGE("XINDX3","RD3",1)="37:0:0:0"
-^ZZCOVERAGE("XINDX3","RD3",2)="37:0:0:0"
-^ZZCOVERAGE("XINDX3","S",1)="17579:48005:56003:104008"
-^ZZCOVERAGE("XINDX3","S2",0)="110559:164008:220011:384019"
-^ZZCOVERAGE("XINDX3","S2",1)="92980:64007:96005:160012"
-^ZZCOVERAGE("XINDX3","S2",2)="92980:52004:100005:152009"
-^ZZCOVERAGE("XINDX3","S2",3)="87238:60005:68003:128008"
-^ZZCOVERAGE("XINDX3","S2",4)="63916:68007:68004:136011"
-^ZZCOVERAGE("XINDX3","S2",5)="846:0:0:0"
-^ZZCOVERAGE("XINDX3","S2",6)="846:0:4000:4000"
-^ZZCOVERAGE("XINDX3","S2",10)="63916:56004:60003:116007"
-^ZZCOVERAGE("XINDX3","S2",11)="62481:40002:60003:100005"
-^ZZCOVERAGE("XINDX3","S2",12)="62313:56003:56005:112008"
-^ZZCOVERAGE("XINDX3","S2",13)="61815:76007:152010:228017"
-^ZZCOVERAGE("XINDX3","UP")="498:8000:4000:12000"
-^ZZCOVERAGE("XINDX3","UP",1)="498:8000:4000:12000"
-^ZZCOVERAGE("XINDX3","VLN",1)="15909:32002:16001:48003"
-^ZZCOVERAGE("XINDX3","VLN",2)="15909:44002:28003:72005"
-^ZZCOVERAGE("XINDX3","VLNF")="15909:120006:60005:180011"
-^ZZCOVERAGE("XINDX3","VLNF",0)="15909:32002:12001:44003"
-^ZZCOVERAGE("XINDX4","CNG")="2186:0:24001:24001"
-^ZZCOVERAGE("XINDX4","CNG",0)="2186:0:0:0"
-^ZZCOVERAGE("XINDX4","CNG",2)="2186:0:8001:8001"
-^ZZCOVERAGE("XINDX4","CNG",2,"FOR_LOOP",1)=2202
-^ZZCOVERAGE("XINDX4","CNG",3)="2186:0:12000:12000"
-^ZZCOVERAGE("XINDX4","DG",0)="8937:20003:16000:36003"
-^ZZCOVERAGE("XINDX4","DG",1)="8937:12000:16001:28001"
-^ZZCOVERAGE("XINDX4","DG",2)="8937:8001:20002:28003"
-^ZZCOVERAGE("XINDX4","DG",3)="8937:16000:12000:28000"
-^ZZCOVERAGE("XINDX4","DG",4)="8937:4000:12001:16001"
-^ZZCOVERAGE("XINDX4","DG",5)="8937:0:12002:12002"
-^ZZCOVERAGE("XINDX4","DG",6)="8937:12001:12000:24001"
-^ZZCOVERAGE("XINDX4","DG",7)="8937:12000:20003:32003"
-^ZZCOVERAGE("XINDX4","DG",8)="8937:24001:4001:28002"
-^ZZCOVERAGE("XINDX4","DG",9)="8937:4000:12001:16001"
-^ZZCOVERAGE("XINDX4","DG",10)="8937:16001:28001:44002"
-^ZZCOVERAGE("XINDX4","DG",11)="8937:8000:12000:20000"
-^ZZCOVERAGE("XINDX4","DG",12)="8937:4000:16002:20002"
-^ZZCOVERAGE("XINDX4","DG",13)="8937:8000:12002:20002"
-^ZZCOVERAGE("XINDX4","DG",14)="8937:0:4000:4000"
-^ZZCOVERAGE("XINDX4","DG",15)="8937:36002:32002:68004"
-^ZZCOVERAGE("XINDX4","DG",16)="8937:8001:4001:12002"
-^ZZCOVERAGE("XINDX4","DG",17)="8387:12002:4000:16002"
-^ZZCOVERAGE("XINDX4","DG1")="8449:168011:180013:348024"
-^ZZCOVERAGE("XINDX4","DG1",0)="8449:12001:16001:28002"
-^ZZCOVERAGE("XINDX4","FR",0)="525:0:4001:4001"
-^ZZCOVERAGE("XINDX4","FR",1)="525:0:0:0"
-^ZZCOVERAGE("XINDX4","FR",2)="525:0:0:0"
-^ZZCOVERAGE("XINDX4","INSIDE")="2202:4001:32001:36002"
-^ZZCOVERAGE("XINDX4","INSIDE",0)="2202:0:16000:16000"
-^ZZCOVERAGE("XINDX4","INSIDE",1)="2202:0:4000:4000"
-^ZZCOVERAGE("XINDX4","INSIDE",2)="2202:4001:4000:8001"
-^ZZCOVERAGE("XINDX4","LO",1)="259:0:0:0"
-^ZZCOVERAGE("XINDX4","LO",2)="259:0:0:0"
-^ZZCOVERAGE("XINDX4","LO",3)="259:0:0:0"
-^ZZCOVERAGE("XINDX4","LO",4)="259:0:4000:4000"
-^ZZCOVERAGE("XINDX4","LO",4,"FOR_LOOP",1)=260
-^ZZCOVERAGE("XINDX4","LO",5)="260:0:0:0"
-^ZZCOVERAGE("XINDX4","LO",6)="260:0:0:0"
-^ZZCOVERAGE("XINDX4","LO",7)="260:0:0:0"
-^ZZCOVERAGE("XINDX4","LO",8)="89:0:0:0"
-^ZZCOVERAGE("XINDX4","LO",9)="89:0:0:0"
-^ZZCOVERAGE("XINDX4","LO",10)="89:4001:0:4001"
-^ZZCOVERAGE("XINDX4","LO",12)="259:0:0:0"
-^ZZCOVERAGE("XINDX4","LO",13)="259:0:0:0"
-^ZZCOVERAGE("XINDX4","LOOP")="14735:44003:108008:152011"
-^ZZCOVERAGE("XINDX4","LOOP",0)="14735:28002:72005:100007"
-^ZZCOVERAGE("XINDX4","LOOP",0,"FOR_LOOP",1)=68121
-^ZZCOVERAGE("XINDX4","LOOP",1)="14735:4000:32003:36003"
-^ZZCOVERAGE("XINDX4","PAREN")="2638:24000:36004:60004"
-^ZZCOVERAGE("XINDX4","PAREN",0)="2638:4000:8000:12000"
-^ZZCOVERAGE("XINDX4","PAREN",1)="2638:20000:16001:36001"
-^ZZCOVERAGE("XINDX4","PAREN",1,"FOR_LOOP",1)=50171
-^ZZCOVERAGE("XINDX4","PAREN",2)="2638:0:8002:8002"
-^ZZCOVERAGE("XINDX4","PAREN",3)="2638:0:0:0"
-^ZZCOVERAGE("XINDX4","PRUNE")="2186:8001:16001:24002"
-^ZZCOVERAGE("XINDX4","PRUNE",0)="2186:8001:4000:12001"
-^ZZCOVERAGE("XINDX4","PRUNE",1)="2186:0:8001:8001"
-^ZZCOVERAGE("XINDX4","PRUNE",1,"FOR_LOOP",1)=2186
-^ZZCOVERAGE("XINDX4","PRUNE",2)="2186:0:4000:4000"
-^ZZCOVERAGE("XINDX4","PRUNE",2,"FOR_LOOP",1)=2187
-^ZZCOVERAGE("XINDX4","PRUNE",3)="2186:0:0:0"
-^ZZCOVERAGE("XINDX4","Q",1)="747:8000:0:8000"
-^ZZCOVERAGE("XINDX4","Q",2)="747:0:0:0"
-^ZZCOVERAGE("XINDX4","QUOTE")="2402:28002:28000:56002"
-^ZZCOVERAGE("XINDX4","QUOTE",0)="2402:20002:20000:40002"
-^ZZCOVERAGE("XINDX4","QUOTE",0,"FOR_LOOP",1)=23674
-^ZZCOVERAGE("XINDX4","QUOTE",1)="2402:0:0:0"
-^ZZCOVERAGE("XINDX4","QUOTE",2)="2402:8000:4000:12000"
-^ZZCOVERAGE("XINDX4","ST")="8937:24000:16002:40002"
-^ZZCOVERAGE("XINDX4","ST",0)="8937:12000:8000:20000"
-^ZZCOVERAGE("XINDX4","ST",1)="8937:8000:8002:16002"
-^ZZCOVERAGE("XINDX4","WR",0)="4584:12001:12000:24001"
-^ZZCOVERAGE("XINDX4","WR",1)="4584:0:8000:8000"
-^ZZCOVERAGE("XINDX4","WR",2)="4584:72004:56006:128010"
-^ZZCOVERAGE("XINDX4","WR",2,"FOR_LOOP",1)=27607
-^ZZCOVERAGE("XINDX4","WR",3)="23023:8002:32003:40005"
-^ZZCOVERAGE("XINDX4","WR",4)="20835:12000:32001:44001"
-^ZZCOVERAGE("XINDX4","WR",5)="20835:24002:8001:32003"
-^ZZCOVERAGE("XINDX4","WR",6)="20835:24000:36002:60002"
-^ZZCOVERAGE("XINDX4","WR",7)="20835:0:0:0"
-^ZZCOVERAGE("XINDX4","WR",8)="4584:4000:0:4000"
-^ZZCOVERAGE("XINDX4","XE",0)="220:0:0:0"
-^ZZCOVERAGE("XINDX4","XE",1)="220:0:0:0"
-^ZZCOVERAGE("XINDX5","A",0)="468:0:4000:4000"
-^ZZCOVERAGE("XINDX5","A",1)="467:28002:24000:52002"
-^ZZCOVERAGE("XINDX5","A",1,"FOR_LOOP",1)=4011
-^ZZCOVERAGE("XINDX5","A",2)="467:0:0:0"
-^ZZCOVERAGE("XINDX5","AA")="3544:48004:68006:116010"
-^ZZCOVERAGE("XINDX5","AA",0)="3544:8002:16003:24005"
-^ZZCOVERAGE("XINDX5","AA",1)="1902:0:4000:4000"
-^ZZCOVERAGE("XINDX5","AA",2)="1902:4001:0:4001"
-^ZZCOVERAGE("XINDX5","AA",3)="1902:12001:4001:16002"
-^ZZCOVERAGE("XINDX5","AA",4)="1902:12000:32002:44002"
-^ZZCOVERAGE("XINDX5","AA",5)="1902:0:0:0"
-^ZZCOVERAGE("XINDX5","AA",6)="1209:0:0:0"
-^ZZCOVERAGE("XINDX5","AA",7)="1209:8000:4000:12000"
-^ZZCOVERAGE("XINDX5","AA",8)="1209:0:0:0"
-^ZZCOVERAGE("XINDX5","AA",9)="1642:0:4000:4000"
-^ZZCOVERAGE("XINDX5","AA",10)="1594:0:0:0"
-^ZZCOVERAGE("XINDX5","AA",11)="1594:4000:4000:8000"
-^ZZCOVERAGE("XINDX5","AA",12)="1642:0:0:0"
-^ZZCOVERAGE("XINDX5","B",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","CLEAN",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","CLEAN",2)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","CLEAN",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","END",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","END",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","END",2)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","END",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","VTAG")="4320:12000:16001:28001"
-^ZZCOVERAGE("XINDX5","VTAG",0)="4320:12000:8001:20001"
-^ZZCOVERAGE("XINDX5","VTAG",1)="4320:0:4000:4000"
-^ZZCOVERAGE("XINDX5","XINDX5",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","XINDX5",4)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","XINDX5",5)="1:0:0:0"
-^ZZCOVERAGE("XINDX5","XINDX5",7)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","B")="1:0:4001:4001"
-^ZZCOVERAGE("XINDX51","B",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","B",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","B",3)="1:0:4001:4001"
-^ZZCOVERAGE("XINDX51","B",3,"FOR_LOOP",1)=468
-^ZZCOVERAGE("XINDX51","B",4)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","B",6)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","BHDR")="60:0:4000:4000"
-^ZZCOVERAGE("XINDX51","BHDR",0)="60:0:4000:4000"
-^ZZCOVERAGE("XINDX51","BHDR",1)="60:0:0:0"
-^ZZCOVERAGE("XINDX51","END",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","HD")="60:0:0:0"
-^ZZCOVERAGE("XINDX51","HD",0)="60:0:0:0"
-^ZZCOVERAGE("XINDX51","HD",1)="60:0:0:0"
-^ZZCOVERAGE("XINDX51","HD1")="1:0:0:0"
-^ZZCOVERAGE("XINDX51","HD1",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","HD1",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","HD2")="60:4000:0:4000"
-^ZZCOVERAGE("XINDX51","HD2",0)="60:4000:0:4000"
-^ZZCOVERAGE("XINDX51","HD2",1)="60:0:0:0"
-^ZZCOVERAGE("XINDX51","WAIT")="1:0:0:0"
-^ZZCOVERAGE("XINDX51","WAIT",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","WAIT",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","WAIT",2)="1:0:0:0"
-^ZZCOVERAGE("XINDX51","WERR")="60:0:0:0"
-^ZZCOVERAGE("XINDX51","WERR",0)="60:0:0:0"
-^ZZCOVERAGE("XINDX51","WERR",1)="60:0:0:0"
-^ZZCOVERAGE("XINDX51","WERR",2)="60:0:0:0"
-^ZZCOVERAGE("XINDX51","WERR",2,"FOR_LOOP",1)=135
-^ZZCOVERAGE("XINDX51","WERR",3)="75:0:0:0"
-^ZZCOVERAGE("XINDX51","WERR",4)="75:0:0:0"
-^ZZCOVERAGE("XINDX51","WERR",5)="75:0:0:0"
-^ZZCOVERAGE("XINDX51","WERR",6)="75:0:0:0"
-^ZZCOVERAGE("XINDX51","WERR",7)="60:0:0:0"
-^ZZCOVERAGE("XINDX51","WORL")="70:0:0:0"
-^ZZCOVERAGE("XINDX51","WORL",0)="70:0:0:0"
-^ZZCOVERAGE("XINDX51","WORL",1)="70:0:0:0"
-^ZZCOVERAGE("XINDX51","WORL",2)="70:0:0:0"
-^ZZCOVERAGE("XINDX51","WORL",3)="70:0:0:0"
-^ZZCOVERAGE("XINDX51","WORL",3,"FOR_LOOP",1)=76
-^ZZCOVERAGE("XINDX51","WORL",4)="70:0:0:0"
-^ZZCOVERAGE("XINDX52","CASE")="2:0:0:0"
-^ZZCOVERAGE("XINDX52","CASE",0)="2:0:0:0"
-^ZZCOVERAGE("XINDX52","CASE",1)="2:0:0:0"
-^ZZCOVERAGE("XINDX6","ANS")="2:0:0:0"
-^ZZCOVERAGE("XINDX6","ANS",0)="2:0:0:0"
-^ZZCOVERAGE("XINDX6","ANS",1)="2:0:0:0"
-^ZZCOVERAGE("XINDX6","ANS",1,"FOR_LOOP",1)=2
-^ZZCOVERAGE("XINDX6","ANS",2)="2:0:0:0"
-^ZZCOVERAGE("XINDX6","ASKRTN")="1:4000:0:4000"
-^ZZCOVERAGE("XINDX6","ASKRTN",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","ASKRTN",1,"FOR_LOOP",1)=468
-^ZZCOVERAGE("XINDX6","ASKRTN",2)="1:4000:0:4000"
-^ZZCOVERAGE("XINDX6","ASKRTN",2,"FOR_LOOP",1)=468
-^ZZCOVERAGE("XINDX6","ASKRTN",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","DEVICE",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","DEVICE",2)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","DEVICE",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","L7",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","L7",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","NY")="1:0:0:0"
-^ZZCOVERAGE("XINDX6","NY",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","PARAM")="1:0:0:0"
-^ZZCOVERAGE("XINDX6","PARAM",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","PARAM",2)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","PARAM",2,"FOR_LOOP",1)=10
-^ZZCOVERAGE("XINDX6","PARAM",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","PARAM",4)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","PARAM",5)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","PARAM",6)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","PARAM",7)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","RD")="2:0:0:0"
-^ZZCOVERAGE("XINDX6","RD",0)="2:0:0:0"
-^ZZCOVERAGE("XINDX6","XINDX6",5)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","XINDX6",6)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","XINDX6",7)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","XINDX6",8)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","XINDX6",9)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","XINDX6",10)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","XINDX6",11)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","XINDX6",12)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","XINDX6",13)="1:0:0:0"
-^ZZCOVERAGE("XINDX6","YN")="1:0:0:0"
-^ZZCOVERAGE("XINDX6","YN",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","BUILD")="1:0:0:0"
-^ZZCOVERAGE("XINDX7","BUILD",0)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","BUILD",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","BUILD",1,"FOR_LOOP",1)=10
-^ZZCOVERAGE("XINDX7","BUILD",2)="9:0:0:0"
-^ZZCOVERAGE("XINDX7","BUILD",3)="6:0:0:0"
-^ZZCOVERAGE("XINDX7","BUILD",3,"FOR_LOOP",1)=85
-^ZZCOVERAGE("XINDX7","BUILD",4)="79:0:0:0"
-^ZZCOVERAGE("XINDX7","BUILD",5)="79:0:0:0"
-^ZZCOVERAGE("XINDX7","BUILD",6)="6:0:0:0"
-^ZZCOVERAGE("XINDX7","BUILD",7)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","HDR")="2:0:0:0"
-^ZZCOVERAGE("XINDX7","HDR",0)="2:0:0:0"
-^ZZCOVERAGE("XINDX7","HDR",1)="2:0:0:0"
-^ZZCOVERAGE("XINDX7","HDR",2)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","HDR",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","HDR",4)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","HDR",5)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","HDR",6)="2:0:0:0"
-^ZZCOVERAGE("XINDX7","HDR",7)="2:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP")="1:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP",1)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP",2)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP",3)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP",4)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP",6)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP",7)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP",7,"FOR_LOOP",1)=468
-^ZZCOVERAGE("XINDX7","SETUP",8)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP",9)="1:0:0:0"
-^ZZCOVERAGE("XINDX7","SETUP",10)="1:0:0:0"
-^ZZCOVERAGE("XINDX9","ADD")="406841:436032:684041:1120073"
-^ZZCOVERAGE("XINDX9","ADD",0)="598820:552042:692040:1244082"
-^ZZCOVERAGE("XINDX9","AR")="197699:748039:1052073:1800112"
-^ZZCOVERAGE("XINDX9","AR",0)="197699:708036:936061:1644097"
-^ZZCOVERAGE("XINDX9","CASE")="23461:28003:92005:120008"
-^ZZCOVERAGE("XINDX9","CASE",0)="23461:12002:48003:60005"
-^ZZCOVERAGE("XINDX9","CASE",1)="23461:12001:28000:40001"
-^ZZCOVERAGE("XINDX9","DN")="45002:204010:248016:452026"
-^ZZCOVERAGE("XINDX9","DN",0)="45002:176008:196011:372019"
-^ZZCOVERAGE("XINDX9","DN",1)="45002:16001:24003:40004"
-^ZZCOVERAGE("XINDX9","EXT",1)="1970:4000:12001:16001"
-^ZZCOVERAGE("XINDX9","FNC")="29146:96005:104009:200014"
-^ZZCOVERAGE("XINDX9","FNC",0)="29146:28001:20003:48004"
-^ZZCOVERAGE("XINDX9","FNC",1)="29146:44002:72005:116007"
-^ZZCOVERAGE("XINDX9","FNC",2)="12:0:0:0"
-^ZZCOVERAGE("XINDX9","FNC",3)="12:0:0:0"
-^ZZCOVERAGE("XINDX9","FUNC")="29134:284015:400024:684039"
-^ZZCOVERAGE("XINDX9","FUNC",1)="29134:112005:120007:232012"
-^ZZCOVERAGE("XINDX9","FUNC",2)="23461:48003:72004:120007"
-^ZZCOVERAGE("XINDX9","FUNC",3)="23461:20000:32001:52001"
-^ZZCOVERAGE("XINDX9","FX",0)="23461:68004:116009:184013"
-^ZZCOVERAGE("XINDX9","GVAR")="29134:96004:180015:276019"
-^ZZCOVERAGE("XINDX9","GVAR",0)="29134:28000:44003:72003"
-^ZZCOVERAGE("XINDX9","GVAR",1)="29134:32001:72005:104006"
-^ZZCOVERAGE("XINDX9","GVAR",2)="29134:16000:24002:40002"
-^ZZCOVERAGE("XINDX9","INC")="29134:64003:64007:128010"
-^ZZCOVERAGE("XINDX9","INC",0)="29134:20001:12001:32002"
-^ZZCOVERAGE("XINDX9","INC",1)="29134:32002:40004:72006"
-^ZZCOVERAGE("XINDX9","NEW")="287703:532032:660032:1192064"
-^ZZCOVERAGE("XINDX9","NEW",0)="287703:200012:244014:444026"
-^ZZCOVERAGE("XINDX9","NEW",1)="287703:220014:248008:468022"
-^ZZCOVERAGE("XINDX9","NUM")="45379:292023:340026:632049"
-^ZZCOVERAGE("XINDX9","NUM",0)="45379:92006:84006:176012"
-^ZZCOVERAGE("XINDX9","NUM",0,"FOR_LOOP",1)=71145
-^ZZCOVERAGE("XINDX9","NUM",1)="45379:40005:48002:88007"
-^ZZCOVERAGE("XINDX9","NUM",2)="45379:40004:56005:96009"
-^ZZCOVERAGE("XINDX9","NUM",3)="45379:76003:88008:164011"
-^ZZCOVERAGE("XINDX9","NUM",4)="45379:24003:40003:64006"
-^ZZCOVERAGE("XINDX9","PA2",0)="518346:544028:668032:1212060"
-^ZZCOVERAGE("XINDX9","PA2",1)="472665:532043:620035:1152078"
-^ZZCOVERAGE("XINDX9","PA2",2)="317803:264019:292021:556040"
-^ZZCOVERAGE("XINDX9","PA2",3)="317803:200013:324018:524031"
-^ZZCOVERAGE("XINDX9","PA2",4)="307072:348020:492025:840045"
-^ZZCOVERAGE("XINDX9","PA2",5)="197397:160015:296011:456026"
-^ZZCOVERAGE("XINDX9","PA2",6)="152018:120016:132005:252021"
-^ZZCOVERAGE("XINDX9","PA2",7)="152018:116009:112008:228017"
-^ZZCOVERAGE("XINDX9","PA2",8)="151813:96008:168010:264018"
-^ZZCOVERAGE("XINDX9","PA2",9)="151813:100008:172009:272017"
-^ZZCOVERAGE("XINDX9","PA2",10)="151813:220008:324022:544030"
-^ZZCOVERAGE("XINDX9","PA2",11)="151813:168011:152010:320021"
-^ZZCOVERAGE("XINDX9","PA2",12)="151813:128009:148012:276021"
-^ZZCOVERAGE("XINDX9","PA2",13)="151813:136005:104009:240014"
-^ZZCOVERAGE("XINDX9","PARSE")="45681:3356226:4340257:7696483"
-^ZZCOVERAGE("XINDX9","PARSE",0)="45681:104007:108007:212014"
-^ZZCOVERAGE("XINDX9","PAT")="205:0:0:0"
-^ZZCOVERAGE("XINDX9","PAT",0)="205:0:0:0"
-^ZZCOVERAGE("XINDX9","PAT",1)="205:0:0:0"
-^ZZCOVERAGE("XINDX9","PAT",1,"FOR_LOOP",1)=1185
-^ZZCOVERAGE("XINDX9","PAT",2)="205:0:0:0"
-^ZZCOVERAGE("XINDX9","PAT",3)="205:0:0:0"
-^ZZCOVERAGE("XINDX9","PAT",4)="205:0:0:0"
-^ZZCOVERAGE("XINDX9","PATC")="28:0:0:0"
-^ZZCOVERAGE("XINDX9","PATC",0)="28:0:0:0"
-^ZZCOVERAGE("XINDX9","PATQ")="99:0:8000:8000"
-^ZZCOVERAGE("XINDX9","PATQ",0)="99:0:0:0"
-^ZZCOVERAGE("XINDX9","PATQ",0,"FOR_LOOP",1)=247
-^ZZCOVERAGE("XINDX9","PATQ",1)="99:0:0:0"
-^ZZCOVERAGE("XINDX9","PATQ",2)="99:0:8000:8000"
-^ZZCOVERAGE("XINDX9","PATU")="15:0:0:0"
-^ZZCOVERAGE("XINDX9","PATU",0)="15:0:0:0"
-^ZZCOVERAGE("XINDX9","PEND",0)="45681:68001:140014:208015"
-^ZZCOVERAGE("XINDX9","PEND",1)="45681:36004:52005:88009"
-^ZZCOVERAGE("XINDX9","QUOTE")="35724:244013:304019:548032"
-^ZZCOVERAGE("XINDX9","QUOTE",0)="36272:172010:140009:312019"
-^ZZCOVERAGE("XINDX9","QUOTE",0,"FOR_LOOP",1)=323021
-^ZZCOVERAGE("XINDX9","QUOTE",1)="36272:28001:72004:100005"
-^ZZCOVERAGE("XINDX9","QUOTE",2)="35724:28001:24003:52004"
-^ZZCOVERAGE("XINDX9","QUOTE",3)="35724:16001:52002:68003"
-^ZZCOVERAGE("XINDX9","SPV",0)="3703:4000:12000:16000"
-^ZZCOVERAGE("XINDX9","SPV",1)="3703:8001:4000:12001"
-^ZZCOVERAGE("XINDX9","SPV",2)="3703:8001:4000:12001"
-^ZZCOVERAGE("XINDX9","SPV",3)="3703:4000:8001:12001"
-^ZZCOVERAGE("XINDX9","STR")="287703:560037:724043:1284080"
-^ZZCOVERAGE("XINDX9","STR",0)="287703:300018:312020:612038"
-^ZZCOVERAGE("XINDX9","SUM")="213322:612034:916052:1528086"
-^ZZCOVERAGE("XINDX9","SUM",0)="213322:160009:208011:368020"
-^ZZCOVERAGE("XINDX9","SUM",1)="213322:212007:280018:492025"
-^ZZCOVERAGE("XINDX9","SUM",2)="213322:136012:268012:404024"
-^ZZCOVERAGE("XINDX9","UP")="45002:396026:440029:836055"
-^ZZCOVERAGE("XINDX9","UP",0)="45002:24003:44001:68004"
-^ZZCOVERAGE("XINDX9","UP",1)="45002:180008:192016:372024"
-^ZZCOVERAGE("XINDX9","UP",2)="45002:136010:128005:264015"
-^ZZCOVERAGE("XINDX9","UP",3)="45002:40003:52003:92006"
-^ZZCOVERAGE("XINDX9","VAR")="138809:828044:1004072:1832116"
-^ZZCOVERAGE("XINDX9","VAR",0)="138809:376018:336017:712035"
-^ZZCOVERAGE("XINDX9","VAR",0,"FOR_LOOP",1)=462128
-^ZZCOVERAGE("XINDX9","VAR",1)="138809:292018:376034:668052"
-^ZZCOVERAGE("XINDX9","VAR",2)="138809:116003:144008:260011"
-^ZZCOVERAGE("XINDX9","XINDX9")="45681:296016:320021:616037"
-^ZZCOVERAGE("XINDX9","XINDX9",3)="45681:52003:128006:180009"
-^ZZCOVERAGE("XINDX9","XINDX9",4)="45681:164006:112008:276014"
-^ZZCOVERAGE("XINDX9","XINDX9",4,"FOR_LOOP",1)=128269
-^ZZCOVERAGE("XINDX9","XINDX9",5)="45681:48004:52005:100009"
-^ZZCOVERAGE("XLFDT","DT")="1:0:0:0"
-^ZZCOVERAGE("XLFDT","DT",0)="1:0:0:0"
-^ZZCOVERAGE("XLFDT","DT",1)="1:0:0:0"
-^ZZCOVERAGE("XLFDT","HR")="3:0:0:0"
-^ZZCOVERAGE("XLFDT","HR",0)="3:0:0:0"
-^ZZCOVERAGE("XLFDT","HR",1)="3:0:0:0"
-^ZZCOVERAGE("XLFDT","HTE")="1:0:0:0"
-^ZZCOVERAGE("XLFDT","HTE",0)="1:0:0:0"
-^ZZCOVERAGE("XLFDT","HTE",1)="1:0:0:0"
-^ZZCOVERAGE("XLFDT","HTE",2)="1:0:0:0"
-^ZZCOVERAGE("XLFDT","HTE",3)="1:0:0:0"
-^ZZCOVERAGE("XLFDT","HTFM")="2:0:0:0"
-^ZZCOVERAGE("XLFDT","HTFM",0)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","HTFM",1)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","HTFM",2)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","HTFM",3)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","HTFM",4)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","HTFM",5)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","T2",0)="1:0:0:0"
-^ZZCOVERAGE("XLFDT","T2",1)="1:0:0:0"
-^ZZCOVERAGE("XLFDT","YMD")="2:0:0:0"
-^ZZCOVERAGE("XLFDT","YMD",1)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","YMD",2)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","YMD",3)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","YMD",4)="2:0:0:0"
-^ZZCOVERAGE("XLFDT","YMD",5)="2:0:0:0"
-^ZZCOVERAGE("XLFDT1","F1",1)="1:0:0:0"
-^ZZCOVERAGE("XLFDT1","FMT")="1:0:0:0"
-^ZZCOVERAGE("XLFDT1","FMT",1)="1:0:0:0"
-^ZZCOVERAGE("XLFDT1","FMT",2)="1:0:0:0"
-^ZZCOVERAGE("XLFDT1","M")="1:0:0:0"
-^ZZCOVERAGE("XLFDT1","M",0)="1:0:0:0"
-^ZZCOVERAGE("XLFDT1","TM",1)="1:0:0:0"
-^ZZCOVERAGE("XLFDT1","TM",2)="1:0:0:0"
-^ZZCOVERAGE("XLFDT1","TM",3)="1:0:0:0"
-^ZZCOVERAGE("XLFDT1","TM",7)="1:0:0:0"
-^ZZCOVERAGE("XPDRSUM","SUMB")="467:1808124:180014:1988138"
-^ZZCOVERAGE("XPDRSUM","SUMB",0)="467:8000:0:8000"
-^ZZCOVERAGE("XPDRSUM","SUMB",2)="467:0:0:0"
-^ZZCOVERAGE("XPDRSUM","SUMB",3)="467:1796124:180014:1976138"
-^ZZCOVERAGE("XPDRSUM","SUMB",3,"FOR_LOOP",1)=44620
-^ZZCOVERAGE("XPDRSUM","SUMB",3,"FOR_LOOP",2)=1566704
-^ZZCOVERAGE("XPDRSUM","SUMB",4)="467:0:0:0"
-^ZZCOVERAGE("XTRUTL1","BUILD")="1:0:0:0"
-^ZZCOVERAGE("XTRUTL1","BUILD",0)="1:0:0:0"
-^ZZCOVERAGE("XTRUTL1","BUILD",1)="1:0:0:0"
-^ZZCOVERAGE("XTRUTL1","BUILD",2)="1:0:0:0"
-^ZZCOVERAGE("XTRUTL1","BUILD",3)="1:0:0:0"
-
-
diff --git a/Tests/MumpsCoverage/VistA-FOIA/Packages/Toolkit/Routines/XINDEX.m b/Tests/MumpsCoverage/VistA-FOIA/Packages/Toolkit/Routines/XINDEX.m
deleted file mode 100644
index b045221..0000000
--- a/Tests/MumpsCoverage/VistA-FOIA/Packages/Toolkit/Routines/XINDEX.m
+++ /dev/null
@@ -1,144 +0,0 @@
-XINDEX ;ISC/REL,GFT,GRK,RWF - INDEX & CROSS-REFERENCE ;08/04/08 13:19
- ;;7.3;TOOLKIT;**20,27,48,61,66,68,110,121,128**;Apr 25, 1995;Build 1
- ; Per VHA Directive 2004-038, this routine should not be modified.
- G ^XINDX6
-SEP F I=1:1 S CH=$E(LIN,I) D QUOTE:CH=Q Q:" "[CH
- S ARG=$E(LIN,1,I-1) S:CH=" " I=I+1 S LIN=$E(LIN,I,999) Q
-QUOTE F I=I+1:1 S CH=$E(LIN,I) Q:CH=""!(CH=Q)
- Q:CH]"" S ERR=6 G ^XINDX1
-ALIVE ;enter here from taskman
- D SETUP^XINDX7 ;Get ready to process
-A2 S RTN=$O(^UTILITY($J,RTN)) G ^XINDX5:RTN=""
- S INDLC=(RTN?1"|"1.4L.NP) D LOAD:'INDLC
- I $D(ZTQUEUED),$$S^%ZTLOAD S RTN="~",IND("QUIT")=1,ZTSTOP=1 G A2
- I 'INDDS,INDLC W !!?10,"Data Dictionaries",! S INDDS=1
- D BEG
- G A2
- ;
-LOAD S X=RTN,XCNP=0,DIF="^UTILITY("_$J_",1,RTN,0," X ^%ZOSF("TEST") Q:'$T X ^%ZOSF("LOAD") S ^UTILITY($J,1,RTN,0,0)=XCNP-1
- I $D(^UTILITY($J,1,RTN,0,0)) S ^UTILITY($J,1,RTN,"RSUM")="B"_$$SUMB^XPDRSUM($NA(^UTILITY($J,1,RTN,0)))
- Q
-BEG ;
- S %=INDLC*5 W:$X+10+%>IOM ! W RTN,$J("",10+%-$L(RTN))
- S (IND("DO"),IND("SZT"),IND("SZC"),LABO)=0,LC=$G(^UTILITY($J,1,RTN,0,0))
- I LC="" W !,">>>Routine '",RTN,"' not found <<<",! Q
- S TXT="",LAB=$P(^UTILITY($J,1,RTN,0,1,0)," ") I RTN'=$P(LAB,"(") D E^XINDX1(17)
- I 'INDLC,LAB["(" D E^XINDX1(55) S LAB=$P(LAB,"(")
- ;if M routine(not compiled template or DD) and has more than 2 lines, check lines 1 & 2
- I 'INDLC,LC>2 D
- . N LABO S LABO=1
- . S LIN=$G(^UTILITY($J,1,RTN,0,1,0)),TXT=1
- . ;check 1st line (site/dev - ) patch 128
- . I $P(LIN,";",2,4)'?.E1"/".E.1"-".E D E^XINDX1(62)
- . S LIN=$G(^UTILITY($J,1,RTN,0,2,0)),TXT=2
- . ;check 2nd line (;;nn.nn[TV]nn;package;.anything)
- . I $P(LIN,";",3,99)'?1.2N1"."1.2N.1(1"T",1"V").2N1";"1A.AP1";".E D E^XINDX1(44) ;patch 121
- . I $L(INP(11)) X INP(11) ;Version number check
- . I $L(INP(12)) X INP(12) ;Patch number check
-B5 F TXT=1:1:LC S LIN=^UTILITY($J,1,RTN,0,TXT,0),LN=$L(LIN),IND("SZT")=IND("SZT")+LN+2 D LN,ST ;Process Line
- S LAB="",LABO=0,TXT=0,^UTILITY($J,1,RTN,0)=IND("SZT")_"^"_LC_"^"_IND("SZC")
- I IND("SZT")>INP("MAX"),'INDLC S ERR=35,ERR(1)=IND("SZT") D ^XINDX1
- I IND("SZT")-IND("SZC")>INP("CMAX"),'INDLC S ERR=58,ERR(1)=IND("SZT")-IND("SZC") D ^XINDX1
- D POSTRTN
- Q
- ;Proccess one line, LN = Length, LIN = Line.
-LN K V S (ARG,GRB,IND("COM"),IND("DOL"),IND("F"))="",X=$P(LIN," ")
- I '$L(X) S LABO=LABO+1 G CD
- S (IND("COM"),LAB)=$P(X,"("),ARG=$P($P(X,"(",2),")"),LABO=0,IND("PP")=X?1.8E1"(".E1")"
- D:$L(ARG) NE^XINDX3 ;Process formal parameters as New list.
- I 'INDLC,'$$VT^XINDX2(LAB) D E^XINDX1($S(LAB=$$CASE^XINDX52(LAB):37,1:55)) ;Check for bad labels
- I $D(^UTILITY($J,1,RTN,"T",LAB)) D E^XINDX1(15) G CD ;DUP label
- S ^UTILITY($J,1,RTN,"T",LAB)=""
-CD I LN>245 D:'(LN=246&($E(RTN,1,3)="|dd")) E^XINDX1(19) ;patch 119
- D:LIN'?1.ANP E^XINDX1(18)
- S LIN=$P(LIN," ",2,999),IND("LCC")=1
- I LIN="" D E^XINDX1(42) Q ;Blank line ;p110
- S I=0 ;Watch the scope of I, counts dots
- I " ."[$E(LIN) D S X=$L($E(LIN,1,I),".")-1,LIN=$E(LIN,I,999)
- . F I=1:1:245 Q:". "'[$E(LIN,I)
- . Q
- ;check dots against Do level IND("DO"), IND("DOL")=dot level
- D:'I&$G(IND("DO1")) E^XINDX1(51) S IND("DO1")=0 S:'I IND("DO")=0
- I I D:X>IND("DO") E^XINDX1(51) S (IND("DO"),IND("DOL"))=X
- ;Count Comment lines, skip ;; lines
- I $E(LIN)=";",$E(LIN,2)'=";" S IND("SZC")=IND("SZC")+$L(LIN) ;p110
- ;Process commands on line.
-EE I LIN="" D ^XINDX2 Q
- S COM=$E(LIN),GK="",ARG=""
- I COM=";" S LIN="" G EE ;p110
- I COM=" " S ERR=$S(LIN?1." ":13,1:0),LIN=$S(ERR:"",1:$E(LIN,2,999)) D:ERR ^XINDX1 G EE
- D SEP
- S CM=$P(ARG,":",1),POST=$P(ARG,":",2,999),IND("COM")=IND("COM")_$C(9)_COM,ERR=48
- D:ARG[":"&(POST']"") ^XINDX1 S:POST]"" GRB=GRB_$C(9)_POST,IND("COM")=IND("COM")_":"
- ;SAC now allows lowercase commands
- I CM?.E1L.E S CM=$$CASE^XINDX52(CM),COM=$E(CM) ;I IND("LCC") S IND("LCC")=0 D E^XINDX1(47)
- I CM="" D E^XINDX1(21) G EE ;Missing command
- S CX=$G(IND("CMD",CM)) I CX="" D G:CX="" EE
- . I $E(CM)="Z" S CX="^Z" Q ;Proccess Z commands
- . D E^XINDX1(1) S LIN="" Q
- S CX=$P(CX,"^",2,9)
- D SEP I '$L(LIN),CH=" " D E^XINDX1(13) ;trailing space
- I ARG="","CGJMORSUWX"[COM S ERR=49 G ^XINDX1
- I CX>0 D E^XINDX1(CX) S CX=""
- D:$L(CX) @CX S:ARG'="" GRB=GRB_$C(9)_ARG G EE
-B S ERR=25 G ^XINDX1
-C S ERR=29 G ^XINDX1
-D G DG1^XINDX4
-E Q:ARG="" S ERR=7 G ^XINDX1
-F G:ARG]"" FR^XINDX4 S IND("F")=1 Q
-G G DG^XINDX4
-H Q:ARG'="" S ERR=32 G ^XINDX1
-J S ERR=36,ARG="" G ^XINDX1
-K S ERR=$S(ARG?1"(".E:22,ARG?." ":23,1:0) D:ERR ^XINDX1
- G KL^XINDX3
-L G LO^XINDX4
-M G S^XINDX3
-N G NE^XINDX3
-O S ERR=34 D ^XINDX1,O^XINDX3 Q
-Q Q:ARG="" G Q^XINDX4
-R S RDTIME=0 G RD^XINDX3
-S G S^XINDX3
-TR Q ;What to process. p110
-U S ARG=$P(ARG,":") Q
-V S ARG="",ERR=20 G ^XINDX1
-W G WR^XINDX4
-X G XE^XINDX4
-Z S ERR=2 D ^XINDX1 G ZC^XINDX4
- ;
- ;Save off items from line.
-ST S R=LAB_$S(LABO:"+"_LABO,1:"")
- ;Local variable, Global, Marked Items, Naked global, Internal ref, eXternal ref., Tag ref.
- S LOC="" F S LOC=$O(V(LOC)),S="" Q:LOC="" F S S=$O(V(LOC,S)) Q:S="" D SET
- S ^UTILITY($J,1,RTN,"COM",TXT)=IND("COM")
- Q
- ;
-SET I V(LOC,S)]"" F %="!","~" I V(LOC,S)[%,$G(^UTILITY($J,1,RTN,LOC,S))'[% S ^(S)=$G(^(S))_%
- S %=0
-SE2 S ARG=$G(^UTILITY($J,1,RTN,LOC,S,%)) I $L(ARG)>230 S %=%+1 G SE2
- S ^UTILITY($J,1,RTN,LOC,S,%)=ARG_R_V(LOC,S)_","
- Q
- ;
-POSTRTN ;Do more overall checking
- N V,E,T,T1,T2
- S T="" ;Check for missing Labels
- F S T=$O(^UTILITY($J,1,RTN,"I",T)),T2=T Q:T="" S T1=$G(^(T,0)) D
- . Q:$E(T2,1,2)="@("
- . S:$E(T2,1,2)="$$" T2=$E(T2,3,99)
- . I T2]"",'$D(^UTILITY($J,1,RTN,"T",$P(T2,"+",1))) D
- . . F I=1:1:$L(T1,",")-1 S LAB=$P(T1,",",I),LABO=+$P(LAB,"+",2),LAB=$P(LAB,"+"),E=14,E(1)=T D E^XINDX1(.E)
- . . Q
- . Q
- S LAB="",LABO=0 ;Check for valid label names
- I 'INDLC F S LAB=$O(^UTILITY($J,1,RTN,"T",LAB)) Q:LAB="" D
- . I '$$VA^XINDX2(LAB) D E^XINDX1(55) Q
- . D:'$$VT^XINDX2(LAB) E^XINDX1(37)
- . Q
- S LAB="",LABO=0 ;Check for valid variable names.
- F S LAB=$O(^UTILITY($J,1,RTN,"L",LAB)) Q:LAB="" D
- . D VLNF^XINDX3($P(LAB,"("))
- . Q
- Q
- ;
-QUICK ;Quick, Just get a routine an print the results
- D QUICK^XINDX6()
- Q
diff --git a/Tests/MumpsCoverage/VistA-FOIA/Packages/Uncategorized/ZZCOVTST.m b/Tests/MumpsCoverage/VistA-FOIA/Packages/Uncategorized/ZZCOVTST.m
new file mode 100644
index 0000000..9a08edf
--- /dev/null
+++ b/Tests/MumpsCoverage/VistA-FOIA/Packages/Uncategorized/ZZCOVTST.m
@@ -0,0 +1,36 @@
+ZZCOVTST;OSEHRA/JPS -- Test routine for Coverage Parsing;4/28/2014
+ ; (tab) This is series of comments
+ ; (tab) it should all be not executable
+ ; (spaces) one of these sets might be a problem
+ ; (spaces) we will have to see.
+EN ; This entry point shouldn't be found without fixing
+ N D
+ S D=1 ;An executable line
+ D T1^ZZCOVTST
+ I '$$T5 W "RETURNED FROM t5",!
+ Q
+ ; This line not executable
+ ;
+T1 ; This line should always be found
+ N D
+ S D=2
+ W !,D,!,"This is the second entry point",!
+ D T2^ZZCOVTST(D)
+ Q
+ ;
+T2(EQ) ; This is debatable and only called with ENT^ROU notation
+ N D
+ S D=3
+ W !,D,!,EQ,"This is the third entry point",!
+ D T3^ZZCOVTST
+ Q
+ ;
+T3 N D S D=4 W D,!,"Fourth Entry point",! Q
+ ;
+T4 N D S D=5 W "Shouldn't be executed"
+ W "Lots to not do"
+ Q
+T5(EQ) ;this entry point is called with a $$ notation
+ W "THIS IS THE $$ NOTATION!",!
+ Q 0
+ ;
diff --git a/Tests/MumpsCoverage/ZZCOVTST.cmcov b/Tests/MumpsCoverage/ZZCOVTST.cmcov
new file mode 100644
index 0000000..798e5b2
--- /dev/null
+++ b/Tests/MumpsCoverage/ZZCOVTST.cmcov
@@ -0,0 +1,38 @@
+Routine,Line,RtnLine,Code
+ZZCOVTST,1,0,"ZZCOVTST;OSEHRA/JPS -- Test routine for Coverage Parsing;4/28/2014"
+,2,0," ; (tab) This is series of comments"
+,3,0," ; (tab) it should all be not executable"
+,4,0," ; (spaces) one of these sets might be a problem"
+,5,0," ; (spaces) we will have to see."
+,6,0,"EN ; This entry point shouldn't be found without fixing"
+,7,1," N D"
+,8,1," S D=1 ;An executable line"
+,9,1," D T1^ZZCOVTST"
+,10,1,"I '$$T5 W ""RETURNED FROM t5"",!"
+,11,1," Q"
+,12,0," ; This line not executable"
+,13,0," ;"
+,14,0,"T1 ; This line should always be found"
+,15,1," N D"
+,16,1," S D=2"
+,17,1," W !,D,!,""This is the second entry point"",!"
+,18,1," D T2^ZZCOVTST(D)"
+,19,1," Q"
+,20,0," ;"
+,21,0,"T2(EQ) ; This is debatable"
+,22,1," N D"
+,23,1," S D=3"
+,24,1," W !,D,!,EQ,""This is the third entry point"",!"
+,25,1," D T3^ZZCOVTST"
+,26,1," Q"
+,27,0," ;"
+,28,1,"T3 N D S D=4 W D,!,""Fourth Entry point"",! Q"
+,29,0," ;"
+,30,0,"T4 N D S D=5 W ""Shouldn't be executed"""
+,31,0," W ""Lots to not do"""
+,32,0," Q"
+,33,1,"T5()"
+,34,1," W ""THIS IS ONE WITH $$ NOTATION"",1"
+,35,1," Q 0"
+,36,0," ;"
+Totals for ZZCOVTST,,19,
diff --git a/Tests/MumpsCoverage/ZZCOVTST.mcov b/Tests/MumpsCoverage/ZZCOVTST.mcov
new file mode 100644
index 0000000..f73d354
--- /dev/null
+++ b/Tests/MumpsCoverage/ZZCOVTST.mcov
@@ -0,0 +1,30 @@
+%GO Global Output Utility
+GT.M 30-APR-2014 14:24:46 ZWR
+^ZZCOVERAGE("*CHILDREN")="0:0:0"
+^ZZCOVERAGE("*RUN")="24000:88000:112000"
+^ZZCOVERAGE("ZZCOVTST","EN")="1:4000:8000:12000:6464583"
+^ZZCOVERAGE("ZZCOVTST","EN",1)="1:0:0:0:20"
+^ZZCOVERAGE("ZZCOVTST","EN",2)="1:0:0:0:14"
+^ZZCOVERAGE("ZZCOVTST","EN",3)="1:0:0:0:26"
+^ZZCOVERAGE("ZZCOVTST","EN",4)="1:0:0:0:228"
+^ZZCOVERAGE("ZZCOVTST","T1")="1:0:0:0:92"
+^ZZCOVERAGE("ZZCOVTST","T1",1)="1:0:0:0:13"
+^ZZCOVERAGE("ZZCOVTST","T1",2)="1:0:0:0:12"
+^ZZCOVERAGE("ZZCOVTST","T1",3)="1:0:0:0:14"
+^ZZCOVERAGE("ZZCOVTST","T1",4)="1:0:0:0:29"
+^ZZCOVERAGE("ZZCOVTST","T1",5)="1:0:0:0:12"
+^ZZCOVERAGE("ZZCOVTST","T2")="1:0:0:0:102"
+^ZZCOVERAGE("ZZCOVTST","T2",0)="1:0:0:0:14"
+^ZZCOVERAGE("ZZCOVTST","T2",1)="1:0:0:0:12"
+^ZZCOVERAGE("ZZCOVTST","T2",2)="1:0:0:0:12"
+^ZZCOVERAGE("ZZCOVTST","T2",3)="1:0:0:0:14"
+^ZZCOVERAGE("ZZCOVTST","T2",4)="1:0:0:0:25"
+^ZZCOVERAGE("ZZCOVTST","T2",5)="1:0:0:0:12"
+^ZZCOVERAGE("ZZCOVTST","T3")="1:0:0:0:28"
+^ZZCOVERAGE("ZZCOVTST","T3",0)="1:0:0:0:17"
+^ZZCOVERAGE("ZZCOVTST","T5")="1:0:0:0:388"
+^ZZCOVERAGE("ZZCOVTST","T5",0)="1:0:0:0:114"
+^ZZCOVERAGE("ZZCOVTST","T5",1)="1:0:0:0:28"
+^ZZCOVERAGE("ZZCOVTST","T5",2)="1:0:0:0:14"
+
+
diff --git a/Tests/RunCMake/CMP0053/CMP0053-NEW-stderr.txt b/Tests/RunCMake/CMP0053/CMP0053-NEW-stderr.txt
new file mode 100644
index 0000000..836b0ff
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-NEW-stderr.txt
@@ -0,0 +1,2 @@
+^called
+--><--$
diff --git a/Tests/RunCMake/CMP0053/CMP0053-NEW.cmake b/Tests/RunCMake/CMP0053/CMP0053-NEW.cmake
new file mode 100644
index 0000000..6ffedc6
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-NEW.cmake
@@ -0,0 +1,8 @@
+cmake_policy(SET CMP0053 NEW)
+
+function (watch_callback)
+ message("called")
+endfunction ()
+
+variable_watch(test watch_callback)
+message("-->${test}<--")
diff --git a/Tests/RunCMake/CMP0053/CMP0053-OLD-stderr.txt b/Tests/RunCMake/CMP0053/CMP0053-OLD-stderr.txt
new file mode 100644
index 0000000..836b0ff
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-OLD-stderr.txt
@@ -0,0 +1,2 @@
+^called
+--><--$
diff --git a/Tests/RunCMake/CMP0053/CMP0053-OLD.cmake b/Tests/RunCMake/CMP0053/CMP0053-OLD.cmake
new file mode 100644
index 0000000..41f5347
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-OLD.cmake
@@ -0,0 +1,8 @@
+cmake_policy(SET CMP0053 OLD)
+
+function (watch_callback)
+ message("called")
+endfunction ()
+
+variable_watch(test watch_callback)
+message("-->${test}<--")
diff --git a/Tests/RunCMake/CMP0053/CMP0053-WARN-stderr.txt b/Tests/RunCMake/CMP0053/CMP0053-WARN-stderr.txt
new file mode 100644
index 0000000..836b0ff
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-WARN-stderr.txt
@@ -0,0 +1,2 @@
+^called
+--><--$
diff --git a/Tests/RunCMake/CMP0053/CMP0053-WARN.cmake b/Tests/RunCMake/CMP0053/CMP0053-WARN.cmake
new file mode 100644
index 0000000..b010d13
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMP0053-WARN.cmake
@@ -0,0 +1,6 @@
+function (watch_callback)
+ message("called")
+endfunction ()
+
+variable_watch(test watch_callback)
+message("-->${test}<--")
diff --git a/Tests/RunCMake/CMP0053/CMakeLists.txt b/Tests/RunCMake/CMP0053/CMakeLists.txt
new file mode 100644
index 0000000..3482e6b
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.0)
+project(${RunCMake_TEST} CXX)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/CMP0053/RunCMakeTest.cmake b/Tests/RunCMake/CMP0053/RunCMakeTest.cmake
new file mode 100644
index 0000000..6521ac0
--- /dev/null
+++ b/Tests/RunCMake/CMP0053/RunCMakeTest.cmake
@@ -0,0 +1,5 @@
+include(RunCMake)
+
+run_cmake(CMP0053-OLD)
+run_cmake(CMP0053-NEW)
+run_cmake(CMP0053-WARN)
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt
index 07ed397..d5af542 100644
--- a/Tests/RunCMake/CMakeLists.txt
+++ b/Tests/RunCMake/CMakeLists.txt
@@ -35,6 +35,7 @@ add_RunCMake_test(CMP0046)
add_RunCMake_test(CMP0049)
add_RunCMake_test(CMP0050)
add_RunCMake_test(CMP0051)
+add_RunCMake_test(CMP0053)
add_RunCMake_test(CTest)
if(UNIX AND "${CMAKE_GENERATOR}" MATCHES "Unix Makefiles")
add_RunCMake_test(CompilerChange)
@@ -84,6 +85,7 @@ add_RunCMake_test(add_dependencies)
add_RunCMake_test(build_command)
add_RunCMake_test(export)
add_RunCMake_test(cmake_minimum_required)
+add_RunCMake_test(file)
add_RunCMake_test(find_package)
add_RunCMake_test(get_filename_component)
add_RunCMake_test(if)
@@ -123,6 +125,10 @@ if("${CMAKE_GENERATOR}" MATCHES "Visual Studio [^6]")
add_RunCMake_test(SolutionGlobalSections)
endif()
+if(XCODE_VERSION AND NOT "${XCODE_VERSION}" VERSION_LESS 3)
+ add_RunCMake_test(XcodeProject)
+endif()
+
add_RunCMake_test(File_Generate)
add_RunCMake_test(ExportWithoutLanguage)
add_RunCMake_test(target_link_libraries)
diff --git a/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle-result.txt b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle-stderr.txt b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle-stderr.txt
new file mode 100644
index 0000000..a584d7d
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle-stderr.txt
@@ -0,0 +1,7 @@
+CMake Error in CMakeLists.txt:
+ The COMPILE_FEATURES property of target "empty1" was evaluated when
+ computing the link implementation, and the "CXX_STANDARD" was "98" for that
+ computation. Computing the COMPILE_FEATURES based on the link
+ implementation resulted in a higher "CXX_STANDARD" "11". This is not
+ permitted. The COMPILE_FEATURES may not both depend on and be depended on
+ by the link implementation.
diff --git a/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle.cmake b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle.cmake
new file mode 100644
index 0000000..9d56bc0
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycle.cmake
@@ -0,0 +1,15 @@
+
+add_library(empty1 empty.cpp)
+
+add_library(empty2 INTERFACE)
+add_library(empty3 INTERFACE)
+target_compile_features(empty3 INTERFACE cxx_constexpr)
+
+target_link_libraries(empty1
+ # When starting, $<COMPILE_FEATURES:cxx_final> is '0', so 'freeze' the
+ # CXX_STANDARD at 98 during computation.
+ $<$<COMPILE_FEATURES:cxx_final>:empty2>
+ # This would add cxx_constexpr, but that would require CXX_STANDARD = 11,
+ # which is not allowed after freeze. Report an error.
+ empty3
+)
diff --git a/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved-result.txt b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved-result.txt
new file mode 100644
index 0000000..573541a
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved-result.txt
@@ -0,0 +1 @@
+0
diff --git a/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved-stderr.txt b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved-stderr.txt
new file mode 100644
index 0000000..10f3293
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved-stderr.txt
@@ -0,0 +1 @@
+^$
diff --git a/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved.cmake b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved.cmake
new file mode 100644
index 0000000..0df548b
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/LinkImplementationFeatureCycleSolved.cmake
@@ -0,0 +1,14 @@
+
+add_library(empty1 empty.cpp)
+
+add_library(empty2 INTERFACE)
+add_library(empty3 INTERFACE)
+target_compile_features(empty3 INTERFACE cxx_constexpr)
+
+target_link_libraries(empty1
+ $<$<COMPILE_FEATURES:cxx_final>:empty2>
+ empty3
+)
+# This, or populating the COMPILE_FEATURES property with a feature in the
+# same standard as cxx_final, solves the cycle above.
+set_property(TARGET empty1 PROPERTY CXX_STANDARD 11)
diff --git a/Tests/RunCMake/CompileFeatures/NoSupportedCFeatures-result.txt b/Tests/RunCMake/CompileFeatures/NoSupportedCFeatures-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NoSupportedCFeatures-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CompileFeatures/NoSupportedCFeatures-stderr.txt b/Tests/RunCMake/CompileFeatures/NoSupportedCFeatures-stderr.txt
new file mode 100644
index 0000000..fd18c88
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NoSupportedCFeatures-stderr.txt
@@ -0,0 +1,8 @@
+CMake Error at NoSupportedCFeatures.cmake:[0-9]+ \(target_compile_features\):
+ target_compile_features no known features for C compiler
+
+ "[^"]*"
+
+ version *[.0-9]+\.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/CompileFeatures/NoSupportedCFeatures.cmake b/Tests/RunCMake/CompileFeatures/NoSupportedCFeatures.cmake
new file mode 100644
index 0000000..3624d4b
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NoSupportedCFeatures.cmake
@@ -0,0 +1,5 @@
+
+enable_language(C)
+
+add_library(no_features empty.c)
+target_compile_features(no_features PRIVATE c_static_assert)
diff --git a/Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex-result.txt b/Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex-stderr.txt b/Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex-stderr.txt
new file mode 100644
index 0000000..df647e8
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error in CMakeLists.txt:
+ No known features for C compiler
+
+ "[^"]*"
+
+ version *[.0-9]+\.
diff --git a/Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex.cmake b/Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex.cmake
new file mode 100644
index 0000000..b6053aa
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NoSupportedCFeaturesGenex.cmake
@@ -0,0 +1,5 @@
+
+enable_language(C)
+
+add_library(no_features empty.c)
+target_compile_features(no_features PRIVATE $<1:c_static_assert>)
diff --git a/Tests/RunCMake/CompileFeatures/NonValidTarget1-result.txt b/Tests/RunCMake/CompileFeatures/NonValidTarget1-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NonValidTarget1-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CompileFeatures/NonValidTarget1-stderr.txt b/Tests/RunCMake/CompileFeatures/NonValidTarget1-stderr.txt
new file mode 100644
index 0000000..7f3b43b
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NonValidTarget1-stderr.txt
@@ -0,0 +1,9 @@
+CMake Error at NonValidTarget1.cmake:[0-9]+ \(add_custom_command\):
+ Error evaluating generator expression:
+
+ \$<COMPILE_FEATURES:cxx_final>
+
+ \$<COMPILE_FEATURE> may only be used with binary targets. It may not be
+ used with add_custom_command or add_custom_target.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/CompileFeatures/NonValidTarget1.cmake b/Tests/RunCMake/CompileFeatures/NonValidTarget1.cmake
new file mode 100644
index 0000000..c6707c1
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NonValidTarget1.cmake
@@ -0,0 +1,17 @@
+
+set(genexvar $<COMPILE_FEATURES:cxx_final>)
+
+if (HAVE_FINAL)
+ set(expected_result 1)
+else()
+ set(expected_result 0)
+endif()
+
+add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/copied_file${HAVE_FINAL}.cpp"
+ COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp" "${CMAKE_CURRENT_BINARY_DIR}/copied_file${genexvar}.cpp"
+)
+
+add_library(empty "${CMAKE_CURRENT_BINARY_DIR}/copied_file${genexvar}.cpp")
+if (HAVE_FINAL)
+ target_compile_features(empty PRIVATE cxx_final)
+endif()
diff --git a/Tests/RunCMake/CompileFeatures/NonValidTarget2-result.txt b/Tests/RunCMake/CompileFeatures/NonValidTarget2-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NonValidTarget2-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/CompileFeatures/NonValidTarget2-stderr.txt b/Tests/RunCMake/CompileFeatures/NonValidTarget2-stderr.txt
new file mode 100644
index 0000000..635150c
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NonValidTarget2-stderr.txt
@@ -0,0 +1,9 @@
+CMake Error at NonValidTarget2.cmake:4 \(add_custom_target\):
+ Error evaluating generator expression:
+
+ \$<COMPILE_FEATURES:cxx_final>
+
+ \$<COMPILE_FEATURE> may only be used with binary targets. It may not be
+ used with add_custom_command or add_custom_target.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/CompileFeatures/NonValidTarget2.cmake b/Tests/RunCMake/CompileFeatures/NonValidTarget2.cmake
new file mode 100644
index 0000000..eb84692
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/NonValidTarget2.cmake
@@ -0,0 +1,8 @@
+
+set(genexvar $<COMPILE_FEATURES:cxx_final>)
+
+add_custom_target(copy_target
+ COMMAND "${CMAKE_COMMAND}" -E copy "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp" "${CMAKE_CURRENT_BINARY_DIR}/copied_file${genexvar}.txt"
+)
+
+add_library(empty "${CMAKE_CURRENT_BINARY_DIR}/copied_file${genexvar}.cpp")
diff --git a/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake b/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake
index bb4e0f9..1892a5c 100644
--- a/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake
+++ b/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake
@@ -10,13 +10,32 @@ run_cmake(NotAFeature_OriginDebug_target_compile_features)
run_cmake(generate_feature_list)
file(READ
+ "${RunCMake_BINARY_DIR}/generate_feature_list-build/c_features.txt"
+ C_FEATURES
+)
+file(READ
"${RunCMake_BINARY_DIR}/generate_feature_list-build/cxx_features.txt"
CXX_FEATURES
)
+if (NOT C_FEATURES)
+ run_cmake(NoSupportedCFeatures)
+ run_cmake(NoSupportedCFeaturesGenex)
+endif()
+
if (NOT CXX_FEATURES)
run_cmake(NoSupportedCxxFeatures)
run_cmake(NoSupportedCxxFeaturesGenex)
+else()
+ run_cmake(LinkImplementationFeatureCycle)
+ run_cmake(LinkImplementationFeatureCycleSolved)
+
+ if (";${CXX_FEATURES};" MATCHES ";cxx_final;")
+ set(RunCMake_TEST_OPTIONS "-DHAVE_FINAL=1")
+ endif()
+ run_cmake(NonValidTarget1)
+ run_cmake(NonValidTarget2)
+ unset(RunCMake_TEST_OPTIONS)
endif()
foreach(standard 98 11)
diff --git a/Tests/RunCMake/CompileFeatures/empty.c b/Tests/RunCMake/CompileFeatures/empty.c
new file mode 100644
index 0000000..bfbbdde
--- /dev/null
+++ b/Tests/RunCMake/CompileFeatures/empty.c
@@ -0,0 +1,7 @@
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int empty()
+{
+ return 0;
+}
diff --git a/Tests/RunCMake/CompileFeatures/generate_feature_list.cmake b/Tests/RunCMake/CompileFeatures/generate_feature_list.cmake
index beb15fc..09e17b1 100644
--- a/Tests/RunCMake/CompileFeatures/generate_feature_list.cmake
+++ b/Tests/RunCMake/CompileFeatures/generate_feature_list.cmake
@@ -1,4 +1,10 @@
+enable_language(C)
+
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/c_features.txt"
+ "${CMAKE_C_COMPILE_FEATURES}"
+)
+
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/cxx_features.txt"
"${CMAKE_CXX_COMPILE_FEATURES}"
)
diff --git a/Tests/RunCMake/Configure/FailCopyFileABI-stdout.txt b/Tests/RunCMake/Configure/FailCopyFileABI-stdout.txt
index bb87f4c..92fe233 100644
--- a/Tests/RunCMake/Configure/FailCopyFileABI-stdout.txt
+++ b/Tests/RunCMake/Configure/FailCopyFileABI-stdout.txt
@@ -1,4 +1,4 @@
-- Detecting C compiler ABI info
--- Detecting C compiler ABI info - failed
+-- Detecting C compiler ABI info - failed.*
-- Configuring done
-- Generating done
diff --git a/Tests/RunCMake/XcodeProject/CMakeLists.txt b/Tests/RunCMake/XcodeProject/CMakeLists.txt
new file mode 100644
index 0000000..12cd3c7
--- /dev/null
+++ b/Tests/RunCMake/XcodeProject/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 2.8.4)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/XcodeProject/RunCMakeTest.cmake b/Tests/RunCMake/XcodeProject/RunCMakeTest.cmake
new file mode 100644
index 0000000..8e4026b
--- /dev/null
+++ b/Tests/RunCMake/XcodeProject/RunCMakeTest.cmake
@@ -0,0 +1,3 @@
+include(RunCMake)
+
+run_cmake(XcodeFileType)
diff --git a/Tests/RunCMake/XcodeProject/XcodeFileType-check.cmake b/Tests/RunCMake/XcodeProject/XcodeFileType-check.cmake
new file mode 100644
index 0000000..7882d7f
--- /dev/null
+++ b/Tests/RunCMake/XcodeProject/XcodeFileType-check.cmake
@@ -0,0 +1,10 @@
+set(expect-default "explicitFileType = sourcecode")
+set(expect-explicit "explicitFileType = \"sourcecode.c.h\"")
+set(expect-lastKnown "lastKnownFileType = \"sourcecode.c.h\"")
+foreach(src default explicit lastKnown)
+ file(STRINGS ${RunCMake_TEST_BINARY_DIR}/XcodeFileType.xcodeproj/project.pbxproj actual-${src}
+ REGEX "PBXFileReference.*src-${src}")
+ if(NOT actual-${src} MATCHES "${expect-${src}}")
+ message(SEND_ERROR "src-${src} does not match '${expect-${src}}':\n ${actual-${src}}")
+ endif()
+endforeach()
diff --git a/Tests/RunCMake/XcodeProject/XcodeFileType.cmake b/Tests/RunCMake/XcodeProject/XcodeFileType.cmake
new file mode 100644
index 0000000..7faa781
--- /dev/null
+++ b/Tests/RunCMake/XcodeProject/XcodeFileType.cmake
@@ -0,0 +1,4 @@
+enable_language(C)
+add_executable(main main.c src-default src-explicit src-lastKnown)
+set_property(SOURCE src-explicit PROPERTY XCODE_EXPLICIT_FILE_TYPE sourcecode.c.h)
+set_property(SOURCE src-lastKnown PROPERTY XCODE_LAST_KNOWN_FILE_TYPE sourcecode.c.h)
diff --git a/Tests/RunCMake/XcodeProject/main.c b/Tests/RunCMake/XcodeProject/main.c
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/XcodeProject/main.c
diff --git a/Tests/RunCMake/XcodeProject/src-default b/Tests/RunCMake/XcodeProject/src-default
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/XcodeProject/src-default
diff --git a/Tests/RunCMake/XcodeProject/src-explicit b/Tests/RunCMake/XcodeProject/src-explicit
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/XcodeProject/src-explicit
diff --git a/Tests/RunCMake/XcodeProject/src-lastKnown b/Tests/RunCMake/XcodeProject/src-lastKnown
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Tests/RunCMake/XcodeProject/src-lastKnown
diff --git a/Tests/RunCMake/file/CMakeLists.txt b/Tests/RunCMake/file/CMakeLists.txt
new file mode 100644
index 0000000..2897109
--- /dev/null
+++ b/Tests/RunCMake/file/CMakeLists.txt
@@ -0,0 +1,3 @@
+cmake_minimum_required(VERSION 3.0)
+project(${RunCMake_TEST} NONE)
+include(${RunCMake_TEST}.cmake)
diff --git a/Tests/RunCMake/file/FileOpenFailRead-result.txt b/Tests/RunCMake/file/FileOpenFailRead-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/file/FileOpenFailRead-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/file/FileOpenFailRead-stderr.txt b/Tests/RunCMake/file/FileOpenFailRead-stderr.txt
new file mode 100644
index 0000000..23d4337
--- /dev/null
+++ b/Tests/RunCMake/file/FileOpenFailRead-stderr.txt
@@ -0,0 +1,6 @@
+CMake Error at FileOpenFailRead.cmake:[0-9]+ \(file\):
+ file failed to open for reading \(.*\):
+
+ .*/Tests/RunCMake/file/does_not_exist/file.txt
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/file/FileOpenFailRead.cmake b/Tests/RunCMake/file/FileOpenFailRead.cmake
new file mode 100644
index 0000000..4d4c6dc
--- /dev/null
+++ b/Tests/RunCMake/file/FileOpenFailRead.cmake
@@ -0,0 +1 @@
+file(READ "${CMAKE_CURRENT_SOURCE_DIR}/does_not_exist/file.txt" content)
diff --git a/Tests/RunCMake/file/RunCMakeTest.cmake b/Tests/RunCMake/file/RunCMakeTest.cmake
new file mode 100644
index 0000000..7b05229
--- /dev/null
+++ b/Tests/RunCMake/file/RunCMakeTest.cmake
@@ -0,0 +1,3 @@
+include(RunCMake)
+
+run_cmake(FileOpenFailRead)
diff --git a/Tests/RunCMake/target_compile_features/RunCMakeTest.cmake b/Tests/RunCMake/target_compile_features/RunCMakeTest.cmake
index f2abef7..33faf2b 100644
--- a/Tests/RunCMake/target_compile_features/RunCMakeTest.cmake
+++ b/Tests/RunCMake/target_compile_features/RunCMakeTest.cmake
@@ -9,3 +9,5 @@ run_cmake(imported_target)
run_cmake(no_target)
run_cmake(not_a_cxx_feature)
run_cmake(no_matching_cxx_feature)
+run_cmake(not_a_c_feature)
+run_cmake(no_matching_c_feature)
diff --git a/Tests/RunCMake/target_compile_features/empty.c b/Tests/RunCMake/target_compile_features/empty.c
new file mode 100644
index 0000000..bfbbdde
--- /dev/null
+++ b/Tests/RunCMake/target_compile_features/empty.c
@@ -0,0 +1,7 @@
+#ifdef _WIN32
+__declspec(dllexport)
+#endif
+int empty()
+{
+ return 0;
+}
diff --git a/Tests/RunCMake/target_compile_features/no_matching_c_feature-result.txt b/Tests/RunCMake/target_compile_features/no_matching_c_feature-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/target_compile_features/no_matching_c_feature-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/target_compile_features/no_matching_c_feature-stderr.txt b/Tests/RunCMake/target_compile_features/no_matching_c_feature-stderr.txt
new file mode 100644
index 0000000..96b959c
--- /dev/null
+++ b/Tests/RunCMake/target_compile_features/no_matching_c_feature-stderr.txt
@@ -0,0 +1,8 @@
+CMake Error at no_matching_c_feature.cmake:[0-9][0-9]? \((target_compile_features|message)\):
+ The compiler feature "gnu_c_dummy" is not known to C compiler
+
+ "GNU"
+
+ version 4.8.1.
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/target_compile_features/no_matching_c_feature.cmake b/Tests/RunCMake/target_compile_features/no_matching_c_feature.cmake
new file mode 100644
index 0000000..a44caf2
--- /dev/null
+++ b/Tests/RunCMake/target_compile_features/no_matching_c_feature.cmake
@@ -0,0 +1,15 @@
+
+if (NOT ";${CMAKE_C_COMPILE_FEATURES};" MATCHES ";gnu_c_typeof;")
+ # Simulate passing the test.
+ message(SEND_ERROR
+ "The compiler feature \"gnu_c_dummy\" is not known to C compiler\n\"GNU\"\nversion 4.8.1."
+ )
+ return()
+endif()
+
+add_executable(main empty.c)
+
+target_compile_features(main
+ PRIVATE
+ gnu_c_typeof
+)
diff --git a/Tests/RunCMake/target_compile_features/not_a_c_feature-result.txt b/Tests/RunCMake/target_compile_features/not_a_c_feature-result.txt
new file mode 100644
index 0000000..d00491f
--- /dev/null
+++ b/Tests/RunCMake/target_compile_features/not_a_c_feature-result.txt
@@ -0,0 +1 @@
+1
diff --git a/Tests/RunCMake/target_compile_features/not_a_c_feature-stderr.txt b/Tests/RunCMake/target_compile_features/not_a_c_feature-stderr.txt
new file mode 100644
index 0000000..6dd00f3
--- /dev/null
+++ b/Tests/RunCMake/target_compile_features/not_a_c_feature-stderr.txt
@@ -0,0 +1,5 @@
+CMake Error at not_a_c_feature.cmake:3 \(target_compile_features\):
+ target_compile_features specified unknown feature "c_not_a_feature" for
+ target "main".
+Call Stack \(most recent call first\):
+ CMakeLists.txt:3 \(include\)
diff --git a/Tests/RunCMake/target_compile_features/not_a_c_feature.cmake b/Tests/RunCMake/target_compile_features/not_a_c_feature.cmake
new file mode 100644
index 0000000..0420698
--- /dev/null
+++ b/Tests/RunCMake/target_compile_features/not_a_c_feature.cmake
@@ -0,0 +1,6 @@
+
+add_executable(main empty.c)
+target_compile_features(main
+ PRIVATE
+ c_not_a_feature
+)
diff --git a/Tests/SystemInformation/SystemInformation.in b/Tests/SystemInformation/SystemInformation.in
index 9966e8d..7e1ee24 100644
--- a/Tests/SystemInformation/SystemInformation.in
+++ b/Tests/SystemInformation/SystemInformation.in
@@ -19,6 +19,16 @@ CMAKE_COMPILER_IS_GNUCC == "${CMAKE_COMPILER_IS_GNUCC}"
CMAKE_COMPILER_IS_GNUCXX == "${CMAKE_COMPILER_IS_GNUCXX}"
CMAKE_C_COMPILER_ID == "${CMAKE_C_COMPILER_ID}"
CMAKE_C_COMPILER_VERSION == "${CMAKE_C_COMPILER_VERSION}"
+CMAKE_C90_STANDARD_COMPILE_OPTION == "${CMAKE_C90_STANDARD_COMPILE_OPTION}"
+CMAKE_C99_STANDARD_COMPILE_OPTION == "${CMAKE_C99_STANDARD_COMPILE_OPTION}"
+CMAKE_C11_STANDARD_COMPILE_OPTION == "${CMAKE_C11_STANDARD_COMPILE_OPTION}"
+CMAKE_C90_EXTENSION_COMPILE_OPTION == "${CMAKE_C90_EXTENSION_COMPILE_OPTION}"
+CMAKE_C99_EXTENSION_COMPILE_OPTION == "${CMAKE_C99_EXTENSION_COMPILE_OPTION}"
+CMAKE_C11_EXTENSION_COMPILE_OPTION == "${CMAKE_C11_EXTENSION_COMPILE_OPTION}"
+CMAKE_C_COMPILE_FEATURES == "${CMAKE_C_COMPILE_FEATURES}"
+CMAKE_C90_COMPILE_FEATURES == "${CMAKE_C90_COMPILE_FEATURES}"
+CMAKE_C99_COMPILE_FEATURES == "${CMAKE_C99_COMPILE_FEATURES}"
+CMAKE_C11_COMPILE_FEATURES == "${CMAKE_C11_COMPILE_FEATURES}"
CMAKE_CXX_COMPILER_ID == "${CMAKE_CXX_COMPILER_ID}"
CMAKE_CXX_COMPILER_VERSION == "${CMAKE_CXX_COMPILER_VERSION}"
CMAKE_CXX98_STANDARD_COMPILE_OPTION == "${CMAKE_CXX98_STANDARD_COMPILE_OPTION}"