diff options
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> ¶meters, + 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}" |