summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt7
-rw-r--r--Modules/BasicConfigVersion-AnyNewerVersion.cmake.in5
-rw-r--r--Modules/BasicConfigVersion-ExactVersion.cmake.in5
-rw-r--r--Modules/BasicConfigVersion-SameMajorVersion.cmake.in5
-rw-r--r--Modules/CMakeCInformation.cmake2
-rw-r--r--Modules/CMakeCXXInformation.cmake2
-rw-r--r--Modules/CMakeFortranInformation.cmake2
-rw-r--r--Modules/CMakeGenericSystem.cmake10
-rw-r--r--Modules/CMakePlatformId.h.in3
-rw-r--r--Modules/CheckCCompilerFlag.cmake4
-rw-r--r--Modules/CheckCXXCompilerFlag.cmake4
-rw-r--r--Modules/Compiler/XL.cmake2
-rw-r--r--Modules/ExternalProject.cmake109
-rw-r--r--Modules/FeatureSummary.cmake4
-rw-r--r--Modules/FindPythonLibs.cmake5
-rw-r--r--Modules/FindQt4.cmake20
-rw-r--r--Modules/FindwxWidgets.cmake4
-rw-r--r--Modules/Platform/Darwin-icc.cmake6
-rw-r--r--Modules/Platform/Darwin.cmake10
-rw-r--r--Modules/Platform/SunOS.cmake2
-rw-r--r--Modules/Platform/Windows-Intel.cmake2
-rw-r--r--Modules/Qt4Macros.cmake40
-rw-r--r--Source/CMakeLists.txt5
-rw-r--r--Source/CMakeVersion.cmake2
-rw-r--r--Source/CPack/cmCPackDebGenerator.h11
-rw-r--r--Source/CPack/cmCPackDocumentVariables.cxx31
-rw-r--r--Source/CPack/cmCPackGenerator.cxx72
-rw-r--r--Source/CPack/cmCPackGenerator.h42
-rw-r--r--Source/CPack/cmCPackGeneratorFactory.cxx106
-rw-r--r--Source/CPack/cmCPackNSISGenerator.cxx18
-rw-r--r--Source/CPack/cmCPackNSISGenerator.h2
-rw-r--r--Source/CPack/cmCPackRPMGenerator.h11
-rw-r--r--Source/CTest/cmCTestCoverageHandler.cxx54
-rw-r--r--Source/CTest/cmCTestCoverageHandler.h2
-rw-r--r--Source/CTest/cmCTestMemCheckHandler.cxx2
-rw-r--r--Source/CTest/cmCTestRunTest.cxx2
-rw-r--r--Source/CTest/cmCTestScriptHandler.cxx6
-rw-r--r--Source/CTest/cmParseCacheCoverage.cxx220
-rw-r--r--Source/CTest/cmParseCacheCoverage.h42
-rw-r--r--Source/CTest/cmParseGTMCoverage.cxx272
-rw-r--r--Source/CTest/cmParseGTMCoverage.h49
-rw-r--r--Source/CTest/cmParseMumpsCoverage.cxx165
-rw-r--r--Source/CTest/cmParseMumpsCoverage.h52
-rw-r--r--Source/CTest/cmParsePHPCoverage.h3
-rw-r--r--Source/QtDialog/CMakeSetupDialog.cxx2
-rw-r--r--Source/cmCTest.cxx23
-rw-r--r--Source/cmCoreTryCompile.cxx1
-rw-r--r--Source/cmDependsFortranLexer.cxx552
-rw-r--r--Source/cmDependsFortranLexer.h25
-rw-r--r--Source/cmDependsFortranLexer.in.l5
-rw-r--r--Source/cmDependsFortranParser.cxx810
-rw-r--r--Source/cmDependsFortranParser.y8
-rw-r--r--Source/cmDependsFortranParserTokens.h20
-rw-r--r--Source/cmDocumentVariables.cxx40
-rw-r--r--Source/cmDocumentationFormatterHTML.cxx12
-rw-r--r--Source/cmExportFileGenerator.cxx16
-rw-r--r--Source/cmFindPackageCommand.cxx92
-rw-r--r--Source/cmFindPackageCommand.h2
-rw-r--r--Source/cmGeneratorTarget.cxx7
-rw-r--r--Source/cmGeneratorTarget.h1
-rw-r--r--Source/cmGlobalNinjaGenerator.cxx47
-rw-r--r--Source/cmGlobalNinjaGenerator.h2
-rw-r--r--Source/cmGlobalVisualStudio10Generator.cxx48
-rw-r--r--Source/cmGlobalVisualStudio10Generator.h14
-rw-r--r--Source/cmGlobalVisualStudio11ARMGenerator.cxx32
-rw-r--r--Source/cmGlobalVisualStudio11ARMGenerator.h37
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx4
-rw-r--r--Source/cmIfCommand.cxx13
-rw-r--r--Source/cmInstallCommand.cxx77
-rw-r--r--Source/cmInstallCommand.h4
-rw-r--r--Source/cmInstallCommandArguments.cxx19
-rw-r--r--Source/cmInstallCommandArguments.h11
-rw-r--r--Source/cmInstallFilesCommand.cxx32
-rw-r--r--Source/cmInstallGenerator.cxx12
-rw-r--r--Source/cmInstallProgramsCommand.cxx26
-rw-r--r--Source/cmInstallTargetsCommand.cxx3
-rw-r--r--Source/cmLocalGenerator.cxx39
-rw-r--r--Source/cmLocalGenerator.h1
-rw-r--r--Source/cmMakefile.cxx38
-rw-r--r--Source/cmMakefile.h8
-rw-r--r--Source/cmMakefileLibraryTargetGenerator.cxx6
-rw-r--r--Source/cmMakefileTargetGenerator.cxx26
-rw-r--r--Source/cmMakefileTargetGenerator.h1
-rw-r--r--Source/cmNinjaNormalTargetGenerator.cxx37
-rw-r--r--Source/cmNinjaTargetGenerator.cxx1
-rw-r--r--Source/cmSystemTools.cxx49
-rw-r--r--Source/cmSystemTools.h12
-rw-r--r--Source/cmTarget.cxx45
-rw-r--r--Source/cmTarget.h3
-rw-r--r--Source/cmVisualStudio10TargetGenerator.cxx139
-rw-r--r--Source/cmVisualStudio10TargetGenerator.h16
-rw-r--r--Source/cmake.cxx3
-rw-r--r--Source/kwsys/CMakeLists.txt86
-rw-r--r--Source/kwsys/DateStamp.h.in42
-rw-r--r--Source/kwsys/SystemInformation.cxx2
-rw-r--r--Source/kwsys/SystemTools.cxx232
-rw-r--r--Source/kwsys/SystemTools.hxx.in6
-rw-r--r--Source/kwsys/hash_fun.hxx.in5
-rw-r--r--Source/kwsys/kwsysDateStamp.cmake21
-rwxr-xr-xSource/kwsys/kwsysDateStamp.py54
-rw-r--r--Source/kwsys/kwsysPlatformTestsCXX.cxx35
-rw-r--r--Source/kwsys/testSystemTools.cxx54
-rw-r--r--Tests/CMakeLists.txt84
-rw-r--r--Tests/FindPackageTest/CMakeLists.txt12
-rw-r--r--Tests/MumpsCoverage/.gitattributes2
-rw-r--r--Tests/MumpsCoverage/Accounts_ReceivableTest.cmcov304
-rw-r--r--Tests/MumpsCoverage/Accounts_ReceivableTest.mcov1445
-rw-r--r--Tests/MumpsCoverage/DartConfiguration.cache.tcl.in8
-rw-r--r--Tests/MumpsCoverage/DartConfiguration.tcl.in8
-rw-r--r--Tests/MumpsCoverage/VistA-FOIA/Packages/Toolkit/Routines/XINDEX.m144
-rw-r--r--Tests/MumpsCoverage/cache_coverage.cmcov.in2
-rw-r--r--Tests/MumpsCoverage/gtm_coverage.mcov.in2
-rw-r--r--Tests/Plugin/CMakeLists.txt44
-rw-r--r--Tests/Plugin/check_mod_soname.cmake14
-rwxr-xr-xUtilities/GitSetup/setup-stage46
-rw-r--r--Utilities/cmlibarchive/CMakeLists.txt2
-rwxr-xr-xbootstrap64
117 files changed, 5223 insertions, 1338 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 66f9b2d..8522cad 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
#=============================================================================
# CMake - Cross Platform Makefile Generator
-# Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
+# Copyright 2000-2012 Kitware, Inc., Insight Software Consortium
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
@@ -9,7 +9,7 @@
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.2 FATAL_ERROR)
SET(CMAKE_LEGACY_CYGWIN_WIN32 0) # Remove when CMake >= 2.8.4 is required
PROJECT(CMake)
@@ -324,10 +324,9 @@ MACRO (CMAKE_BUILD_UTILITIES)
#---------------------------------------------------------------------
# Build or use system libarchive for CMake and CTest.
IF(CMAKE_USE_SYSTEM_LIBARCHIVE)
- IF(EXISTS ${CMAKE_ROOT}/Modules/FindLibArchive.cmake)
+ IF(EXISTS ${CMAKE_ROOT}/Modules/FindLibArchive.cmake) # added in 2.8.3
FIND_PACKAGE(LibArchive)
ELSE()
- CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR)
INCLUDE(${CMake_SOURCE_DIR}/Modules/FindLibArchive.cmake)
ENDIF()
IF(NOT LibArchive_FOUND)
diff --git a/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
index cf53db8..9f7f03e 100644
--- a/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
+++ b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in
@@ -18,6 +18,11 @@ else()
endif()
endif()
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
+ return()
+endif()
+
# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@")
math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
diff --git a/Modules/BasicConfigVersion-ExactVersion.cmake.in b/Modules/BasicConfigVersion-ExactVersion.cmake.in
index c610baa..63f3f03 100644
--- a/Modules/BasicConfigVersion-ExactVersion.cmake.in
+++ b/Modules/BasicConfigVersion-ExactVersion.cmake.in
@@ -34,6 +34,11 @@ if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}")
endif()
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
+ return()
+endif()
+
# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@")
math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
diff --git a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
index 2317fdb..7bcea88 100644
--- a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
+++ b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in
@@ -33,6 +33,11 @@ else()
endif()
+# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it:
+if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "@CMAKE_SIZEOF_VOID_P@" STREQUAL "")
+ return()
+endif()
+
# check that the installed version has the same 32/64bit-ness as the one which is currently searching:
if(NOT "${CMAKE_SIZEOF_VOID_P}" STREQUAL "@CMAKE_SIZEOF_VOID_P@")
math(EXPR installedBits "@CMAKE_SIZEOF_VOID_P@ * 8")
diff --git a/Modules/CMakeCInformation.cmake b/Modules/CMakeCInformation.cmake
index 6b5efba..afac7a4 100644
--- a/Modules/CMakeCInformation.cmake
+++ b/Modules/CMakeCInformation.cmake
@@ -164,7 +164,7 @@ INCLUDE(CMakeCommonLanguageInclude)
# create a C shared library
IF(NOT CMAKE_C_CREATE_SHARED_LIBRARY)
SET(CMAKE_C_CREATE_SHARED_LIBRARY
- "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_C_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_C_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
ENDIF(NOT CMAKE_C_CREATE_SHARED_LIBRARY)
# create a C shared module just copy the shared library rule
diff --git a/Modules/CMakeCXXInformation.cmake b/Modules/CMakeCXXInformation.cmake
index 25abb8c..608b833 100644
--- a/Modules/CMakeCXXInformation.cmake
+++ b/Modules/CMakeCXXInformation.cmake
@@ -242,7 +242,7 @@ INCLUDE(CMakeCommonLanguageInclude)
# create a shared C++ library
IF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
- "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_CXX_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
ENDIF(NOT CMAKE_CXX_CREATE_SHARED_LIBRARY)
# create a c++ shared module copy the shared library rule by default
diff --git a/Modules/CMakeFortranInformation.cmake b/Modules/CMakeFortranInformation.cmake
index 76cf34e..2cbd7f8 100644
--- a/Modules/CMakeFortranInformation.cmake
+++ b/Modules/CMakeFortranInformation.cmake
@@ -171,7 +171,7 @@ INCLUDE(CMakeCommonLanguageInclude)
# create a Fortran shared library
IF(NOT CMAKE_Fortran_CREATE_SHARED_LIBRARY)
SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
- "<CMAKE_Fortran_COMPILER> <CMAKE_SHARED_LIBRARY_Fortran_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_Fortran_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_Fortran_COMPILER> <CMAKE_SHARED_LIBRARY_Fortran_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
ENDIF(NOT CMAKE_Fortran_CREATE_SHARED_LIBRARY)
# create a Fortran shared module just copy the shared library rule
diff --git a/Modules/CMakeGenericSystem.cmake b/Modules/CMakeGenericSystem.cmake
index ee8040e..c733969 100644
--- a/Modules/CMakeGenericSystem.cmake
+++ b/Modules/CMakeGenericSystem.cmake
@@ -12,7 +12,7 @@
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
-SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") # -pic
+SET(CMAKE_SHARED_LIBRARY_C_FLAGS "") # -pic
SET(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-shared") # -shared
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") # +s, flag for exe link to use shared lib
SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "") # -rpath
@@ -42,7 +42,7 @@ SET (CMAKE_SKIP_RPATH "NO" CACHE BOOL
SET (CMAKE_SKIP_INSTALL_RPATH "NO" CACHE BOOL
"If set, runtime paths are not added when installing shared libraries, but are added when building.")
-SET(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
+SET(CMAKE_VERBOSE_MAKEFILE FALSE CACHE BOOL "If this value is on, makefiles will be generated without the .SILENT directive, and all commands will be echoed to the console during the make. This is useful for debugging only. With Visual Studio IDE projects all commands are done without /nologo.")
IF(CMAKE_GENERATOR MATCHES "Makefiles")
SET(CMAKE_COLOR_MAKEFILE ON CACHE BOOL
@@ -77,6 +77,8 @@ function(GetDefaultWindowsPrefixBase var)
#
if("${CMAKE_GENERATOR}" MATCHES "(Win64|IA64)")
set(arch_hint "x64")
+ elseif("${CMAKE_GENERATOR}" MATCHES "ARM")
+ set(arch_hint "ARM")
elseif("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8")
set(arch_hint "x64")
elseif("$ENV{LIB}" MATCHES "(amd64|ia64)")
@@ -168,6 +170,10 @@ ELSE(CMAKE_HOST_UNIX)
SET(CMAKE_GENERIC_PROGRAM_FILES)
ENDIF(CMAKE_HOST_UNIX)
+# Set a variable which will be used as component name in install() commands
+# where no COMPONENT has been given:
+SET(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME "Unspecified")
+
MARK_AS_ADVANCED(
CMAKE_SKIP_RPATH
CMAKE_SKIP_INSTALL_RPATH
diff --git a/Modules/CMakePlatformId.h.in b/Modules/CMakePlatformId.h.in
index b69bf63..6341dca 100644
--- a/Modules/CMakePlatformId.h.in
+++ b/Modules/CMakePlatformId.h.in
@@ -97,6 +97,9 @@
# elif defined(_M_IX86)
# define ARCHITECTURE_ID "X86"
+# elif defined(_M_ARM)
+# define ARCHITECTURE_ID "ARM"
+
# else /* unknown architecture */
# define ARCHITECTURE_ID ""
# endif
diff --git a/Modules/CheckCCompilerFlag.cmake b/Modules/CheckCCompilerFlag.cmake
index 1c08c59..90d04ac 100644
--- a/Modules/CheckCCompilerFlag.cmake
+++ b/Modules/CheckCCompilerFlag.cmake
@@ -33,7 +33,9 @@ MACRO (CHECK_C_COMPILER_FLAG _FLAG _RESULT)
FAIL_REGEX "unknown .*option" # Clang
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC, any lang
- FAIL_REGEX "option .*not supported" # Intel
+ FAIL_REGEX "option.*not supported" # Intel
+ FAIL_REGEX "invalid argument .*option" # Intel
+ FAIL_REGEX "ignoring option .*argument required" # Intel
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
diff --git a/Modules/CheckCXXCompilerFlag.cmake b/Modules/CheckCXXCompilerFlag.cmake
index 6fa69b1..19963ea 100644
--- a/Modules/CheckCXXCompilerFlag.cmake
+++ b/Modules/CheckCXXCompilerFlag.cmake
@@ -33,7 +33,9 @@ MACRO (CHECK_CXX_COMPILER_FLAG _FLAG _RESULT)
FAIL_REGEX "unknown .*option" # Clang
FAIL_REGEX "ignoring unknown option" # MSVC
FAIL_REGEX "warning D9002" # MSVC, any lang
- FAIL_REGEX "option .*not supported" # Intel
+ FAIL_REGEX "option.*not supported" # Intel
+ FAIL_REGEX "invalid argument .*option" # Intel
+ FAIL_REGEX "ignoring option .*argument required" # Intel
FAIL_REGEX "[Uu]nknown option" # HP
FAIL_REGEX "[Ww]arning: [Oo]ption" # SunPro
FAIL_REGEX "command option .* is not recognized" # XL
diff --git a/Modules/Compiler/XL.cmake b/Modules/Compiler/XL.cmake
index d2567d5..d293610 100644
--- a/Modules/Compiler/XL.cmake
+++ b/Modules/Compiler/XL.cmake
@@ -47,7 +47,7 @@ macro(__compiler_xl lang)
# files so that we export only the symbols actually provided by the sources.
set(CMAKE_${lang}_CREATE_SHARED_LIBRARY
"${CMAKE_XL_CreateExportList} <OBJECT_DIR>/objects.exp <OBJECTS>"
- "<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -Wl,-bE:<OBJECT_DIR>/objects.exp <CMAKE_SHARED_LIBRARY_SONAME_${lang}_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
+ "<CMAKE_${lang}_COMPILER> <CMAKE_SHARED_LIBRARY_${lang}_FLAGS> <LANGUAGE_COMPILE_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_${lang}_FLAGS> -Wl,-bE:<OBJECT_DIR>/objects.exp <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>"
)
endif()
endmacro()
diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake
index 301d1fc..a0a9aea 100644
--- a/Modules/ExternalProject.cmake
+++ b/Modules/ExternalProject.cmake
@@ -252,12 +252,23 @@ define_property(DIRECTORY PROPERTY "EP_STEP_TARGETS" INHERITED
)
-function(_ep_write_gitclone_script script_filename source_dir git_EXECUTABLE git_repository git_tag src_name work_dir)
+function(_ep_write_gitclone_script script_filename source_dir git_EXECUTABLE git_repository git_tag src_name work_dir gitclone_infofile gitclone_stampfile)
file(WRITE ${script_filename}
"if(\"${git_tag}\" STREQUAL \"\")
message(FATAL_ERROR \"Tag for git checkout should not be empty.\")
endif()
+set(run 0)
+
+if(\"${gitclone_infofile}\" IS_NEWER_THAN \"${gitclone_stampfile}\")
+ set(run 1)
+endif()
+
+if(NOT run)
+ message(STATUS \"Avoiding repeated git clone, stamp file is up to date: '${gitclone_stampfile}'\")
+ return()
+endif()
+
execute_process(
COMMAND \${CMAKE_COMMAND} -E remove_directory \"${source_dir}\"
RESULT_VARIABLE error_code
@@ -302,6 +313,19 @@ if(error_code)
message(FATAL_ERROR \"Failed to update submodules in: '${work_dir}/${src_name}'\")
endif()
+# Complete success, update the script-last-run stamp file:
+#
+execute_process(
+ COMMAND \${CMAKE_COMMAND} -E copy
+ \"${gitclone_infofile}\"
+ \"${gitclone_stampfile}\"
+ WORKING_DIRECTORY \"${work_dir}/${src_name}\"
+ RESULT_VARIABLE error_code
+ )
+if(error_code)
+ message(FATAL_ERROR \"Failed to copy script-last-run stamp file: '${gitclone_stampfile}'\")
+endif()
+
"
)
@@ -688,8 +712,12 @@ function(_ep_get_build_command name step cmd_var)
endif()
else() # if(cfg_cmd_id STREQUAL "configure")
# Non-CMake project. Guess "make" and "make install" and "make test".
- # But use "$(MAKE)" to get recursive parallel make.
- set(cmd "$(MAKE)")
+ if("${CMAKE_GENERATOR}" MATCHES "Makefiles")
+ # Try to get the parallel arguments
+ set(cmd "$(MAKE)")
+ else()
+ set(cmd "make")
+ endif()
if(step STREQUAL "INSTALL")
set(args install)
endif()
@@ -824,15 +852,23 @@ function(_ep_get_configuration_subdir_suffix suffix_var)
endfunction(_ep_get_configuration_subdir_suffix)
-function(ExternalProject_Add_StepTargets name)
- set(steps ${ARGN})
+function(_ep_get_step_stampfile name step stampfile_var)
+ ExternalProject_Get_Property(${name} stamp_dir)
_ep_get_configuration_subdir_suffix(cfgdir)
- ExternalProject_Get_Property(${name} stamp_dir)
+ set(stampfile "${stamp_dir}${cfgdir}/${name}-${step}")
+
+ set(${stampfile_var} "${stampfile}" PARENT_SCOPE)
+endfunction()
+
+
+function(ExternalProject_Add_StepTargets name)
+ set(steps ${ARGN})
foreach(step ${steps})
+ _ep_get_step_stampfile(${name} ${step} stamp_file)
add_custom_target(${name}-${step}
- DEPENDS ${stamp_dir}${cfgdir}/${name}-${step})
+ DEPENDS ${stamp_file})
# Depend on other external projects (target-level).
get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
@@ -845,23 +881,26 @@ endfunction(ExternalProject_Add_StepTargets)
function(ExternalProject_Add_Step name step)
set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
- ExternalProject_Get_Property(${name} stamp_dir)
-
_ep_get_configuration_subdir_suffix(cfgdir)
+ set(complete_stamp_file "${cmf_dir}${cfgdir}/${name}-complete")
+ _ep_get_step_stampfile(${name} ${step} stamp_file)
+
add_custom_command(APPEND
- OUTPUT ${cmf_dir}${cfgdir}/${name}-complete
- DEPENDS ${stamp_dir}${cfgdir}/${name}-${step}
+ OUTPUT ${complete_stamp_file}
+ DEPENDS ${stamp_file}
)
+
_ep_parse_arguments(ExternalProject_Add_Step
- ${name} _EP_${step}_ "${ARGN}")
+ ${name} _EP_${step}_ "${ARGN}")
# Steps depending on this step.
get_property(dependers TARGET ${name} PROPERTY _EP_${step}_DEPENDERS)
foreach(depender IN LISTS dependers)
+ _ep_get_step_stampfile(${name} ${depender} depender_stamp_file)
add_custom_command(APPEND
- OUTPUT ${stamp_dir}${cfgdir}/${name}-${depender}
- DEPENDS ${stamp_dir}${cfgdir}/${name}-${step}
+ OUTPUT ${depender_stamp_file}
+ DEPENDS ${stamp_file}
)
endforeach()
@@ -871,7 +910,8 @@ function(ExternalProject_Add_Step name step)
# Dependencies on steps.
get_property(dependees TARGET ${name} PROPERTY _EP_${step}_DEPENDEES)
foreach(dependee IN LISTS dependees)
- list(APPEND depends ${stamp_dir}${cfgdir}/${name}-${dependee})
+ _ep_get_step_stampfile(${name} ${dependee} dependee_stamp_file)
+ list(APPEND depends ${dependee_stamp_file})
endforeach()
# The command to run.
@@ -901,10 +941,10 @@ function(ExternalProject_Add_Step name step)
# Run every time?
get_property(always TARGET ${name} PROPERTY _EP_${step}_ALWAYS)
if(always)
- set_property(SOURCE ${stamp_dir}${cfgdir}/${name}-${step} PROPERTY SYMBOLIC 1)
+ set_property(SOURCE ${stamp_file} PROPERTY SYMBOLIC 1)
set(touch)
else()
- set(touch ${CMAKE_COMMAND} -E touch ${stamp_dir}${cfgdir}/${name}-${step})
+ set(touch ${CMAKE_COMMAND} -E touch ${stamp_file})
endif()
# Wrap with log script?
@@ -914,7 +954,7 @@ function(ExternalProject_Add_Step name step)
endif()
add_custom_command(
- OUTPUT ${stamp_dir}${cfgdir}/${name}-${step}
+ OUTPUT ${stamp_file}
COMMENT ${comment}
COMMAND ${command}
COMMAND ${touch}
@@ -1079,9 +1119,15 @@ function(_ep_add_download_command name)
set(git_tag "master")
endif()
+ # For the download step, and the git clone operation, only the repository
+ # should be recorded in a configured RepositoryInfo file. If the repo
+ # changes, the clone script should be run again. But if only the tag
+ # changes, avoid running the clone script again. Let the 'always' running
+ # update step checkout the new tag.
+ #
set(repository ${git_repository})
set(module)
- set(tag ${git_tag})
+ set(tag)
configure_file(
"${CMAKE_ROOT}/Modules/RepositoryInfo.txt.in"
"${stamp_dir}/${name}-gitinfo.txt"
@@ -1097,6 +1143,7 @@ function(_ep_add_download_command name)
#
_ep_write_gitclone_script(${tmp_dir}/${name}-gitclone.cmake ${source_dir}
${GIT_EXECUTABLE} ${git_repository} ${git_tag} ${src_name} ${work_dir}
+ ${stamp_dir}/${name}-gitinfo.txt ${stamp_dir}/${name}-gitclone-lastrun.txt
)
set(comment "Performing download step (git clone) for '${name}'")
set(cmd ${CMAKE_COMMAND} -P ${tmp_dir}/${name}-gitclone.cmake)
@@ -1277,14 +1324,12 @@ endfunction(_ep_add_patch_command)
function(_ep_add_configure_command name)
ExternalProject_Get_Property(${name} source_dir binary_dir tmp_dir)
- _ep_get_configuration_subdir_suffix(cfgdir)
-
# Depend on other external projects (file-level).
set(file_deps)
get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
foreach(dep IN LISTS deps)
- get_property(dep_stamp_dir TARGET ${dep} PROPERTY _EP_STAMP_DIR)
- list(APPEND file_deps ${dep_stamp_dir}${cfgdir}/${dep}-done)
+ _ep_get_step_stampfile(${dep} "done" done_stamp_file)
+ list(APPEND file_deps ${done_stamp_file})
endforeach()
get_property(cmd_set TARGET ${name} PROPERTY _EP_CONFIGURE_COMMAND SET)
@@ -1447,11 +1492,14 @@ function(ExternalProject_Add name)
# Add a custom target for the external project.
set(cmf_dir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles)
- add_custom_target(${name} ALL DEPENDS ${cmf_dir}${cfgdir}/${name}-complete)
+ set(complete_stamp_file "${cmf_dir}${cfgdir}/${name}-complete")
+
+ add_custom_target(${name} ALL DEPENDS ${complete_stamp_file})
set_property(TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT 1)
_ep_parse_arguments(ExternalProject_Add ${name} _EP_ "${ARGN}")
_ep_set_directories(${name})
- ExternalProject_Get_Property(${name} stamp_dir)
+ _ep_get_step_stampfile(${name} "done" done_stamp_file)
+ _ep_get_step_stampfile(${name} "install" install_stamp_file)
# The 'complete' step depends on all other steps and creates a
# 'done' mark. A dependent external project's 'configure' step
@@ -1462,19 +1510,18 @@ function(ExternalProject_Add name)
# parallel builds. However, the Ninja generator needs to see the entire
# dependency graph, and can cope with custom commands belonging to
# multiple targets, so we add the 'done' mark as an output for Ninja only.
- set(complete_outputs ${cmf_dir}${cfgdir}/${name}-complete)
+ set(complete_outputs ${complete_stamp_file})
if(${CMAKE_GENERATOR} MATCHES "Ninja")
- set(complete_outputs
- ${complete_outputs} ${stamp_dir}${cfgdir}/${name}-done)
+ set(complete_outputs ${complete_outputs} ${done_stamp_file})
endif()
add_custom_command(
OUTPUT ${complete_outputs}
COMMENT "Completed '${name}'"
COMMAND ${CMAKE_COMMAND} -E make_directory ${cmf_dir}${cfgdir}
- COMMAND ${CMAKE_COMMAND} -E touch ${cmf_dir}${cfgdir}/${name}-complete
- COMMAND ${CMAKE_COMMAND} -E touch ${stamp_dir}${cfgdir}/${name}-done
- DEPENDS ${stamp_dir}${cfgdir}/${name}-install
+ COMMAND ${CMAKE_COMMAND} -E touch ${complete_stamp_file}
+ COMMAND ${CMAKE_COMMAND} -E touch ${done_stamp_file}
+ DEPENDS ${install_stamp_file}
VERBATIM
)
diff --git a/Modules/FeatureSummary.cmake b/Modules/FeatureSummary.cmake
index cef647e..a5b94d1 100644
--- a/Modules/FeatureSummary.cmake
+++ b/Modules/FeatureSummary.cmake
@@ -318,7 +318,7 @@ FUNCTION(_FS_GET_FEATURE_SUMMARY _property _var _includeQuiet)
GET_PROPERTY(_info GLOBAL PROPERTY _CMAKE_${_currentFeature}_PURPOSE)
FOREACH(_purpose ${_info})
- SET(_currentFeatureText "${_currentFeatureText}\n * ${_purpose}")
+ SET(_currentFeatureText "${_currentFeatureText}\n ${_purpose}")
ENDFOREACH()
ENDIF(includeThisOne)
@@ -399,7 +399,7 @@ FUNCTION(FEATURE_SUMMARY)
SET(_tmp)
_FS_GET_FEATURE_SUMMARY( ${part} _tmp ${_FS_INCLUDE_QUIET_PACKAGES})
IF(_tmp)
- SET(_fullText "${_fullText}\n\n-- ${title_${part}}\n${_tmp}")
+ SET(_fullText "${_fullText}\n-- ${title_${part}}\n${_tmp}\n")
IF("${part}" STREQUAL "REQUIRED_PACKAGES_NOT_FOUND")
SET(requiredPackagesNotFound TRUE)
ENDIF()
diff --git a/Modules/FindPythonLibs.cmake b/Modules/FindPythonLibs.cmake
index 591b3e6..478ebcb 100644
--- a/Modules/FindPythonLibs.cmake
+++ b/Modules/FindPythonLibs.cmake
@@ -13,6 +13,11 @@
# The Python_ADDITIONAL_VERSIONS variable can be used to specify a list of
# version numbers that should be taken into account when searching for Python.
# You need to set this variable before calling find_package(PythonLibs).
+#
+# If you'd like to specify the installation of Python to use, you should modify
+# the following cache variables:
+# PYTHON_LIBRARY - path to the python library
+# PYTHON_INCLUDE_DIR - path to where Python.h is found
#=============================================================================
# Copyright 2001-2009 Kitware, Inc.
diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake
index 226a4b1..391797e 100644
--- a/Modules/FindQt4.cmake
+++ b/Modules/FindQt4.cmake
@@ -1173,10 +1173,22 @@ ELSE( Qt4_FIND_COMPONENTS )
ENDIF( Qt4_FIND_COMPONENTS )
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt4
- REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS}
- VERSION_VAR QTVERSION
- )
+if (QT_VERSION_MAJOR GREATER 4)
+ SET(VERSION_MSG "Found unsuitable Qt version \"${QTVERSION}\" from ${QT_QMAKE_EXECUTABLE}")
+ SET(QT4_FOUND FALSE)
+ IF(Qt4_FIND_REQUIRED)
+ MESSAGE( FATAL_ERROR "${VERSION_MSG}, this code requires Qt 4.x")
+ ELSE(Qt4_FIND_REQUIRED)
+ IF(NOT Qt4_FIND_QUIETLY)
+ MESSAGE( STATUS "${VERSION_MSG}")
+ ENDIF(NOT Qt4_FIND_QUIETLY)
+ ENDIF(Qt4_FIND_REQUIRED)
+else()
+ FIND_PACKAGE_HANDLE_STANDARD_ARGS(Qt4
+ REQUIRED_VARS ${_QT4_FOUND_REQUIRED_VARS}
+ VERSION_VAR QTVERSION
+ )
+endif()
#######################################
#
diff --git a/Modules/FindwxWidgets.cmake b/Modules/FindwxWidgets.cmake
index 0bc6172..865a6c5 100644
--- a/Modules/FindwxWidgets.cmake
+++ b/Modules/FindwxWidgets.cmake
@@ -167,9 +167,9 @@ SET(wxWidgets_CXX_FLAGS "")
# http://www.cmake.org/pipermail/cmake/2008-April/021115.html
# http://www.cmake.org/pipermail/cmake/2008-April/021146.html
#
-IF(APPLE)
+IF(APPLE OR CMAKE_CXX_PLATFORM_ID MATCHES "OpenBSD")
SET(wxWidgets_INCLUDE_DIRS_NO_SYSTEM 1)
-ENDIF(APPLE)
+ENDIF()
# DEPRECATED: This is a patch to support the DEPRECATED use of
# wxWidgets_USE_LIBS.
diff --git a/Modules/Platform/Darwin-icc.cmake b/Modules/Platform/Darwin-icc.cmake
index b62036c..e675c0e 100644
--- a/Modules/Platform/Darwin-icc.cmake
+++ b/Modules/Platform/Darwin-icc.cmake
@@ -84,11 +84,11 @@ ENDIF(XCODE)
SET(CMAKE_MacOSX_Content_COMPILE_OBJECT "\"${CMAKE_COMMAND}\" -E copy_if_different <SOURCE> <OBJECT>")
SET(CMAKE_C_CREATE_SHARED_LIBRARY
- "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
- "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
- "<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
SET(CMAKE_CXX_CREATE_SHARED_MODULE
"<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
diff --git a/Modules/Platform/Darwin.cmake b/Modules/Platform/Darwin.cmake
index f9d37c3..a19bfe7 100644
--- a/Modules/Platform/Darwin.cmake
+++ b/Modules/Platform/Darwin.cmake
@@ -207,11 +207,11 @@ ENDIF()
SET(CMAKE_C_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w)
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY_FORBIDDEN_FLAGS -w)
SET(CMAKE_C_CREATE_SHARED_LIBRARY
- "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
- "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
SET(CMAKE_Fortran_CREATE_SHARED_LIBRARY
- "<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
SET(CMAKE_CXX_CREATE_SHARED_MODULE
"<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
@@ -223,9 +223,9 @@ SET(CMAKE_Fortran_CREATE_SHARED_MODULE
"<CMAKE_Fortran_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_MODULE_CREATE_Fortran_FLAGS> <LINK_FLAGS> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
SET(CMAKE_C_CREATE_MACOSX_FRAMEWORK
- "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_C_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
SET(CMAKE_CXX_CREATE_MACOSX_FRAMEWORK
- "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> -install_name <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_CXX_COMPILER> <LANGUAGE_COMPILE_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <LINK_FLAGS> -o <TARGET> <SONAME_FLAG> <TARGET_INSTALLNAME_DIR><TARGET_SONAME> <OBJECTS> <LINK_LIBRARIES>")
diff --git a/Modules/Platform/SunOS.cmake b/Modules/Platform/SunOS.cmake
index 9f2ee2e..2291c34 100644
--- a/Modules/Platform/SunOS.cmake
+++ b/Modules/Platform/SunOS.cmake
@@ -8,7 +8,7 @@ ENDIF(CMAKE_SYSTEM MATCHES "SunOS-4.*")
IF(CMAKE_COMPILER_IS_GNUCXX)
IF(CMAKE_COMPILER_IS_GNUCC)
SET(CMAKE_CXX_CREATE_SHARED_LIBRARY
- "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <CMAKE_SHARED_LIBRARY_SONAME_CXX_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
+ "<CMAKE_C_COMPILER> <CMAKE_SHARED_LIBRARY_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_LIBRARY_CREATE_CXX_FLAGS> <SONAME_FLAG><TARGET_SONAME> -o <TARGET> <OBJECTS> <LINK_LIBRARIES>")
ELSE(CMAKE_COMPILER_IS_GNUCC)
# Take default rule from CMakeDefaultMakeRuleVariables.cmake.
ENDIF(CMAKE_COMPILER_IS_GNUCC)
diff --git a/Modules/Platform/Windows-Intel.cmake b/Modules/Platform/Windows-Intel.cmake
index e7462ba..2a54a98 100644
--- a/Modules/Platform/Windows-Intel.cmake
+++ b/Modules/Platform/Windows-Intel.cmake
@@ -92,7 +92,7 @@ macro(__windows_compiler_intel lang)
set(CMAKE_${lang}_LINK_EXECUTABLE
"<CMAKE_${lang}_COMPILER> ${CMAKE_CL_NOLOGO} ${CMAKE_START_TEMP_FILE} <FLAGS> <OBJECTS> /Fe<TARGET> -link /implib:<TARGET_IMPLIB> <CMAKE_${lang}_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>${CMAKE_END_TEMP_FILE}")
set(CMAKE_${lang}_FLAGS_INIT "/DWIN32 /D_WINDOWS /W3 /Zm1000${_FLAGS_${lang}}")
- set(CMAKE_${lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Od /GZ")
+ set(CMAKE_${lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Od /RTC1")
set(CMAKE_${lang}_FLAGS_MINSIZEREL_INIT "/DNDEBUG /MD /O1")
set(CMAKE_${lang}_FLAGS_RELEASE_INIT "/DNDEBUG /MD /O2")
set(CMAKE_${lang}_FLAGS_RELWITHDEBINFO_INIT "/DNDEBUG /MD /Zi /O2")
diff --git a/Modules/Qt4Macros.cmake b/Modules/Qt4Macros.cmake
index f327125..f867bc5 100644
--- a/Modules/Qt4Macros.cmake
+++ b/Modules/Qt4Macros.cmake
@@ -182,23 +182,31 @@ MACRO (QT4_ADD_RESOURCES outfiles )
GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
GET_FILENAME_COMPONENT(rc_path ${infile} PATH)
SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx)
- # parse file for dependencies
- # all files are absolute paths or relative to the location of the qrc file
- FILE(READ "${infile}" _RC_FILE_CONTENTS)
- STRING(REGEX MATCHALL "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}")
+
SET(_RC_DEPENDS)
- FOREACH(_RC_FILE ${_RC_FILES})
- STRING(REGEX REPLACE "^<file[^>]*>" "" _RC_FILE "${_RC_FILE}")
- IF(NOT IS_ABSOLUTE "${_RC_FILE}")
- SET(_RC_FILE "${rc_path}/${_RC_FILE}")
- ENDIF(NOT IS_ABSOLUTE "${_RC_FILE}")
- SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}")
- ENDFOREACH(_RC_FILE)
- # Since this cmake macro is doing the dependency scanning for these files,
- # let's make a configured file and add it as a dependency so cmake is run
- # again when dependencies need to be recomputed.
- QT4_MAKE_OUTPUT_FILE("${infile}" "" "qrc.depends" out_depends)
- CONFIGURE_FILE("${infile}" "${out_depends}" COPY_ONLY)
+ IF(EXISTS "${infile}")
+ # parse file for dependencies
+ # all files are absolute paths or relative to the location of the qrc file
+ FILE(READ "${infile}" _RC_FILE_CONTENTS)
+ STRING(REGEX MATCHALL "<file[^<]+" _RC_FILES "${_RC_FILE_CONTENTS}")
+ FOREACH(_RC_FILE ${_RC_FILES})
+ STRING(REGEX REPLACE "^<file[^>]*>" "" _RC_FILE "${_RC_FILE}")
+ IF(NOT IS_ABSOLUTE "${_RC_FILE}")
+ SET(_RC_FILE "${rc_path}/${_RC_FILE}")
+ ENDIF(NOT IS_ABSOLUTE "${_RC_FILE}")
+ SET(_RC_DEPENDS ${_RC_DEPENDS} "${_RC_FILE}")
+ ENDFOREACH(_RC_FILE)
+ # Since this cmake macro is doing the dependency scanning for these files,
+ # let's make a configured file and add it as a dependency so cmake is run
+ # again when dependencies need to be recomputed.
+ QT4_MAKE_OUTPUT_FILE("${infile}" "" "qrc.depends" out_depends)
+ CONFIGURE_FILE("${infile}" "${out_depends}" COPY_ONLY)
+ ELSE(EXISTS "${infile}")
+ # The .qrc file does not exist (yet). Let's add a dependency and hope
+ # that it will be generated later
+ SET(out_depends)
+ ENDIF(EXISTS "${infile}")
+
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
COMMAND ${QT_RCC_EXECUTABLE}
ARGS ${rcc_options} -name ${outfilename} -o ${outfile} ${infile}
diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt
index c01c490..46bdec6 100644
--- a/Source/CMakeLists.txt
+++ b/Source/CMakeLists.txt
@@ -337,6 +337,8 @@ IF (WIN32)
cmGlobalVisualStudio11Generator.cxx
cmGlobalVisualStudio11Win64Generator.h
cmGlobalVisualStudio11Win64Generator.cxx
+ cmGlobalVisualStudio11ARMGenerator.h
+ cmGlobalVisualStudio11ARMGenerator.cxx
cmGlobalVisualStudioGenerator.cxx
cmGlobalVisualStudioGenerator.h
cmGlobalWatcomWMakeGenerator.cxx
@@ -423,6 +425,9 @@ SET(CTEST_SRCS cmCTest.cxx
CTest/cmCTestConfigureHandler.cxx
CTest/cmCTestCoverageCommand.cxx
CTest/cmCTestCoverageHandler.cxx
+ CTest/cmParseMumpsCoverage.cxx
+ CTest/cmParseCacheCoverage.cxx
+ CTest/cmParseGTMCoverage.cxx
CTest/cmParsePHPCoverage.cxx
CTest/cmCTestEmptyBinaryDirectoryCommand.cxx
CTest/cmCTestGenericHandler.cxx
diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake
index c4625b8..1eb42be 100644
--- a/Source/CMakeVersion.cmake
+++ b/Source/CMakeVersion.cmake
@@ -2,5 +2,5 @@
SET(CMake_VERSION_MAJOR 2)
SET(CMake_VERSION_MINOR 8)
SET(CMake_VERSION_PATCH 8)
-SET(CMake_VERSION_TWEAK 20120430)
+SET(CMake_VERSION_TWEAK 20120605)
#SET(CMake_VERSION_RC 1)
diff --git a/Source/CPack/cmCPackDebGenerator.h b/Source/CPack/cmCPackDebGenerator.h
index f536c47..7f2352f 100644
--- a/Source/CPack/cmCPackDebGenerator.h
+++ b/Source/CPack/cmCPackDebGenerator.h
@@ -31,6 +31,17 @@ public:
cmCPackDebGenerator();
virtual ~cmCPackDebGenerator();
+ static bool CanGenerate()
+ {
+#ifdef __APPLE__
+ // on MacOS enable CPackDeb iff dpkg is found
+ return cmSystemTools::FindProgram("dpkg") != "" ? true : false;
+#else
+ // legacy behavior on other systems
+ return true;
+#endif
+ }
+
protected:
virtual int InitializeInternal();
/**
diff --git a/Source/CPack/cmCPackDocumentVariables.cxx b/Source/CPack/cmCPackDocumentVariables.cxx
index d2e3802..edbef45 100644
--- a/Source/CPack/cmCPackDocumentVariables.cxx
+++ b/Source/CPack/cmCPackDocumentVariables.cxx
@@ -77,4 +77,35 @@ void cmCPackDocumentVariables::DefineVariables(cmake* cm)
"which is done right before packaging the files."
" The script is not called by e.g.: make install.", false,
"Variables common to all CPack generators");
+
+ cm->DefineProperty
+ ("CPACK_ABSOLUTE_DESTINATION_FILES", cmProperty::VARIABLE,
+ "List of files which have been installed using "
+ " an ABSOLUTE DESTINATION path.",
+ "This variable is a Read-Only variable which is set internally"
+ " by CPack during installation and before packaging using"
+ " CMAKE_ABSOLUTE_DESTINATION_FILES defined in cmake_install.cmake "
+ "scripts. The value can be used within CPack project configuration"
+ " file and/or CPack<GEN>.cmake file of <GEN> generator.", false,
+ "Variables common to all CPack generators");
+
+ cm->DefineProperty
+ ("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
+ "Ask CPack to warn each time a file with absolute INSTALL"
+ " DESTINATION is encountered.",
+ "This variable triggers the definition of "
+ "CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION when CPack runs"
+ " cmake_install.cmake scripts.", false,
+ "Variables common to all CPack generators");
+
+ cm->DefineProperty
+ ("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
+ "Ask CPack to error out as soon as a file with absolute INSTALL"
+ " DESTINATION is encountered.",
+ "The fatal error is emitted before the installation of "
+ "the offending file takes place. Some CPack generators, like NSIS,"
+ "enforce this internally. "
+ "This variable triggers the definition of"
+ "CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION when CPack runs"
+ "Variables common to all CPack generators");
}
diff --git a/Source/CPack/cmCPackGenerator.cxx b/Source/CPack/cmCPackGenerator.cxx
index 0f832b3..0177653 100644
--- a/Source/CPack/cmCPackGenerator.cxx
+++ b/Source/CPack/cmCPackGenerator.cxx
@@ -62,10 +62,31 @@ void cmCPackGenerator::DisplayVerboseOutput(const char* msg,
//----------------------------------------------------------------------
int cmCPackGenerator::PrepareNames()
-{
+{
cmCPackLogger(cmCPackLog::LOG_DEBUG,
"Create temp directory." << std::endl);
+ // checks CPACK_SET_DESTDIR support
+ if (IsOn("CPACK_SET_DESTDIR"))
+ {
+ if (SETDESTDIR_UNSUPPORTED==SupportsSetDestdir())
+ {
+ cmCPackLogger(cmCPackLog::LOG_ERROR,
+ "CPACK_SET_DESTDIR is set to ON but the '"
+ << Name << "' generator does NOT support it."
+ << std::endl);
+ return 0;
+ }
+ else if (SETDESTDIR_SHOULD_NOT_BE_USED==SupportsSetDestdir())
+ {
+ cmCPackLogger(cmCPackLog::LOG_WARNING,
+ "CPACK_SET_DESTDIR is set to ON but it is "
+ << "usually a bad idea to do that with '"
+ << Name << "' generator. Use at your own risk."
+ << std::endl);
+ }
+ }
+
std::string tempDirectory = this->GetOption("CPACK_PACKAGE_DIRECTORY");
tempDirectory += "/_CPack_Packages/";
const char* toplevelTag = this->GetOption("CPACK_TOPLEVEL_TAG");
@@ -388,8 +409,11 @@ int cmCPackGenerator::InstallProjectViaInstalledDirectories(
std::string>(targetFile,inFileRelative));
}
/* If it is not a symlink then do a plain copy */
- else if ( !cmSystemTools::CopyFileIfDifferent(inFile.c_str(),
- filePath.c_str()) )
+ else if (!(
+ cmSystemTools::CopyFileIfDifferent(inFile.c_str(),filePath.c_str())
+ &&
+ cmSystemTools::CopyFileTime(inFile.c_str(),filePath.c_str())
+ ) )
{
cmCPackLogger(cmCPackLog::LOG_ERROR, "Problem copying file: "
<< inFile.c_str() << " -> " << filePath.c_str() << std::endl);
@@ -828,8 +852,35 @@ int cmCPackGenerator::InstallProjectViaInstallCMakeProjects(
filesBefore = glB.GetFiles();
std::sort(filesBefore.begin(),filesBefore.end());
}
+
+ // If CPack was asked to warn on ABSOLUTE INSTALL DESTINATION
+ // then forward request to cmake_install.cmake script
+ if (this->GetOption("CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION"))
+ {
+ mf->AddDefinition("CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION",
+ "1");
+ }
+ // If current CPack generator does support
+ // ABSOLUTE INSTALL DESTINATION or CPack has been asked for
+ // then ask cmake_install.cmake script to error out
+ // as soon as it occurs (before installing file)
+ if (!SupportsAbsoluteDestination() ||
+ this->GetOption("CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION"))
+ {
+ mf->AddDefinition("CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION",
+ "1");
+ }
// do installation
int res = mf->ReadListFile(0, installFile.c_str());
+ // forward definition of CMAKE_ABSOLUTE_DESTINATION_FILES
+ // to CPack (may be used by generators like CPack RPM or DEB)
+ // in order to transparently handle ABSOLUTE PATH
+ if (mf->GetDefinition("CMAKE_ABSOLUTE_DESTINATION_FILES"))
+ {
+ mf->AddDefinition("CPACK_ABSOLUTE_DESTINATION_FILES",
+ mf->GetDefinition("CMAKE_ABSOLUTE_DESTINATION_FILES"));
+ }
+
// Now rebuild the list of files after installation
// of the current component (if we are in component install)
if (componentInstall)
@@ -953,6 +1004,8 @@ int cmCPackGenerator::DoPackage()
cmCPackLogger(cmCPackLog::LOG_OUTPUT,
"Create package using " << this->Name.c_str() << std::endl);
+ // Prepare CPack internal name and check
+ // values for many CPACK_xxx vars
if ( !this->PrepareNames() )
{
return 0;
@@ -1431,6 +1484,19 @@ std::string cmCPackGenerator::GetComponentPackageFileName(
}
//----------------------------------------------------------------------
+enum cmCPackGenerator::CPackSetDestdirSupport
+cmCPackGenerator::SupportsSetDestdir() const
+{
+ return cmCPackGenerator::SETDESTDIR_SUPPORTED;
+}
+
+//----------------------------------------------------------------------
+bool cmCPackGenerator::SupportsAbsoluteDestination() const
+{
+ return true;
+}
+
+//----------------------------------------------------------------------
bool cmCPackGenerator::SupportsComponentInstallation() const
{
return false;
diff --git a/Source/CPack/cmCPackGenerator.h b/Source/CPack/cmCPackGenerator.h
index 55afb44..6748512 100644
--- a/Source/CPack/cmCPackGenerator.h
+++ b/Source/CPack/cmCPackGenerator.h
@@ -63,6 +63,16 @@ public:
cmSystemTools::OUTPUT_MERGE : cmSystemTools::OUTPUT_NONE; }
/**
+ * Returns true if the generator may work on this system.
+ * Rational:
+ * Some CPack generator may run on some host and may not on others
+ * (with the same system) because some tools are missing. If the tool
+ * is missing then CPack won't activate (in the CPackGeneratorFactory)
+ * this particular generator.
+ */
+ static bool CanGenerate() { return true; }
+
+ /**
* Do the actual whole package processing.
* Subclass may redefine it but its usually enough
* to redefine @ref PackageFiles, because in fact
@@ -190,6 +200,38 @@ protected:
bool setDestDir, const char* tempInstallDirectory);
/**
+ * The various level of support of
+ * CPACK_SET_DESTDIR used by the generator.
+ */
+ enum CPackSetDestdirSupport {
+ /* the generator works with or without it */
+ SETDESTDIR_SUPPORTED,
+ /* the generator works best if automatically handled */
+ SETDESTDIR_INTERNALLY_SUPPORTED,
+ /* no official support, use at your own risk */
+ SETDESTDIR_SHOULD_NOT_BE_USED,
+ /* officially NOT supported */
+ SETDESTDIR_UNSUPPORTED
+ };
+
+ /**
+ * Does the CPack generator support CPACK_SET_DESTDIR?
+ * The default legacy value is 'SETDESTDIR_SUPPORTED' generator
+ * have to override it in order change this.
+ * @return CPackSetDestdirSupport
+ */
+ virtual enum CPackSetDestdirSupport SupportsSetDestdir() const;
+
+ /**
+ * Does the CPack generator support absolute path
+ * in INSTALL DESTINATION?
+ * The default legacy value is 'true' generator
+ * have to override it in order change this.
+ * @return true if supported false otherwise
+ */
+ virtual bool SupportsAbsoluteDestination() const;
+
+ /**
* Does the CPack generator support component installation?.
* Some Generators requires the user to set
* CPACK_<GENNAME>_COMPONENT_INSTALL in order to make this
diff --git a/Source/CPack/cmCPackGeneratorFactory.cxx b/Source/CPack/cmCPackGeneratorFactory.cxx
index a04b403..37ff460 100644
--- a/Source/CPack/cmCPackGeneratorFactory.cxx
+++ b/Source/CPack/cmCPackGeneratorFactory.cxx
@@ -31,7 +31,7 @@
# include "cmCPackCygwinSourceGenerator.h"
#endif
-#if !defined(_WIN32) && !defined(__APPLE__) \
+#if !defined(_WIN32) \
&& !defined(__QNXNTO__) && !defined(__BEOS__)
# include "cmCPackDebGenerator.h"
# include "cmCPackRPMGenerator.h"
@@ -40,44 +40,90 @@
#include "cmCPackLog.h"
+#if defined(__BORLANDC__)
+# pragma warn -8008 /* condition is always true */
+#endif
+
//----------------------------------------------------------------------
cmCPackGeneratorFactory::cmCPackGeneratorFactory()
{
- this->RegisterGenerator("TGZ", "Tar GZip compression",
- cmCPackTGZGenerator::CreateGenerator);
- this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression",
- cmCPackSTGZGenerator::CreateGenerator);
- this->RegisterGenerator("NSIS", "Null Soft Installer",
- cmCPackNSISGenerator::CreateGenerator);
+ if (cmCPackTGZGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("TGZ", "Tar GZip compression",
+ cmCPackTGZGenerator::CreateGenerator);
+ }
+ if (cmCPackSTGZGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("STGZ", "Self extracting Tar GZip compression",
+ cmCPackSTGZGenerator::CreateGenerator);
+ }
+ if (cmCPackNSISGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("NSIS", "Null Soft Installer",
+ cmCPackNSISGenerator::CreateGenerator);
+ }
#ifdef __CYGWIN__
- this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer",
- cmCPackCygwinBinaryGenerator::CreateGenerator);
- this->RegisterGenerator("CygwinSource", "Cygwin Source Installer",
- cmCPackCygwinSourceGenerator::CreateGenerator);
+ if (cmCPackCygwinBinaryGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("CygwinBinary", "Cygwin Binary Installer",
+ cmCPackCygwinBinaryGenerator::CreateGenerator);
+ }
+ if (cmCPackCygwinSourceGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("CygwinSource", "Cygwin Source Installer",
+ cmCPackCygwinSourceGenerator::CreateGenerator);
+ }
#endif
- this->RegisterGenerator("ZIP", "ZIP file format",
- cmCPackZIPGenerator::CreateGenerator);
- this->RegisterGenerator("TBZ2", "Tar BZip2 compression",
- cmCPackTarBZip2Generator::CreateGenerator);
- this->RegisterGenerator("TZ", "Tar Compress compression",
- cmCPackTarCompressGenerator::CreateGenerator);
+ if (cmCPackZIPGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("ZIP", "ZIP file format",
+ cmCPackZIPGenerator::CreateGenerator);
+ }
+ if (cmCPackTarBZip2Generator::CanGenerate())
+ {
+ this->RegisterGenerator("TBZ2", "Tar BZip2 compression",
+ cmCPackTarBZip2Generator::CreateGenerator);
+ }
+ if (cmCPackTarCompressGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("TZ", "Tar Compress compression",
+ cmCPackTarCompressGenerator::CreateGenerator);
+ }
#ifdef __APPLE__
- this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop",
- cmCPackDragNDropGenerator::CreateGenerator);
- this->RegisterGenerator("Bundle", "Mac OSX bundle",
- cmCPackBundleGenerator::CreateGenerator);
- this->RegisterGenerator("PackageMaker", "Mac OSX Package Maker installer",
- cmCPackPackageMakerGenerator::CreateGenerator);
- this->RegisterGenerator("OSXX11", "Mac OSX X11 bundle",
- cmCPackOSXX11Generator::CreateGenerator);
+ if (cmCPackDragNDropGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("DragNDrop", "Mac OSX Drag And Drop",
+ cmCPackDragNDropGenerator::CreateGenerator);
+ }
+ if (cmCPackBundleGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("Bundle", "Mac OSX bundle",
+ cmCPackBundleGenerator::CreateGenerator);
+ }
+ if (cmCPackPackageMakerGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("PackageMaker", "Mac OSX Package Maker installer",
+ cmCPackPackageMakerGenerator::CreateGenerator);
+ }
+ if (cmCPackOSXX11Generator::CanGenerate())
+ {
+ this->RegisterGenerator("OSXX11", "Mac OSX X11 bundle",
+ cmCPackOSXX11Generator::CreateGenerator);
+ }
#endif
-#if !defined(_WIN32) && !defined(__APPLE__) \
+#if !defined(_WIN32) \
&& !defined(__QNXNTO__) && !defined(__BEOS__)
- this->RegisterGenerator("DEB", "Debian packages",
- cmCPackDebGenerator::CreateGenerator);
- this->RegisterGenerator("RPM", "RPM packages",
- cmCPackRPMGenerator::CreateGenerator);
+ if (cmCPackDebGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("DEB", "Debian packages",
+ cmCPackDebGenerator::CreateGenerator);
+ }
+ if (cmCPackRPMGenerator::CanGenerate())
+ {
+ this->RegisterGenerator("RPM", "RPM packages",
+ cmCPackRPMGenerator::CreateGenerator);
+ }
#endif
}
diff --git a/Source/CPack/cmCPackNSISGenerator.cxx b/Source/CPack/cmCPackNSISGenerator.cxx
index 0787ef9..7b52511 100644
--- a/Source/CPack/cmCPackNSISGenerator.cxx
+++ b/Source/CPack/cmCPackNSISGenerator.cxx
@@ -64,6 +64,7 @@ int cmCPackNSISGenerator::PackageFiles()
<< std::endl);
return false;
}
+
std::string nsisFileName = this->GetOption("CPACK_TOPLEVEL_DIRECTORY");
std::string tmpFile = nsisFileName;
tmpFile += "/NSISOutput.log";
@@ -542,8 +543,8 @@ void cmCPackNSISGenerator::CreateMenuLinks( cmOStringStream& str,
{
cmCPackLogger(
cmCPackLog::LOG_ERROR,
- "CPACK_PACKAGE_EXECUTABLES should contain pairs of <executable> and "
- "<icon name>." << std::endl);
+ "CPACK_NSIS_MENU_LINKS should contain pairs of <shortcut target> and "
+ "<shortcut label>." << std::endl);
return;
}
@@ -631,6 +632,19 @@ bool cmCPackNSISGenerator::GetListOfSubdirectories(const char* topdir,
}
//----------------------------------------------------------------------
+enum cmCPackGenerator::CPackSetDestdirSupport
+cmCPackNSISGenerator::SupportsSetDestdir() const
+{
+ return cmCPackGenerator::SETDESTDIR_SHOULD_NOT_BE_USED;
+}
+
+//----------------------------------------------------------------------
+bool cmCPackNSISGenerator::SupportsAbsoluteDestination() const
+{
+ return false;
+}
+
+//----------------------------------------------------------------------
bool cmCPackNSISGenerator::SupportsComponentInstallation() const
{
return true;
diff --git a/Source/CPack/cmCPackNSISGenerator.h b/Source/CPack/cmCPackNSISGenerator.h
index 7bccb89..8224854 100644
--- a/Source/CPack/cmCPackNSISGenerator.h
+++ b/Source/CPack/cmCPackNSISGenerator.h
@@ -44,6 +44,8 @@ protected:
bool GetListOfSubdirectories(const char* dir,
std::vector<std::string>& dirs);
+ enum cmCPackGenerator::CPackSetDestdirSupport SupportsSetDestdir() const;
+ virtual bool SupportsAbsoluteDestination() const;
virtual bool SupportsComponentInstallation() const;
/// Produce a string that contains the NSIS code to describe a
diff --git a/Source/CPack/cmCPackRPMGenerator.h b/Source/CPack/cmCPackRPMGenerator.h
index 4883a0d..eec8204 100644
--- a/Source/CPack/cmCPackRPMGenerator.h
+++ b/Source/CPack/cmCPackRPMGenerator.h
@@ -35,6 +35,17 @@ public:
cmCPackRPMGenerator();
virtual ~cmCPackRPMGenerator();
+ static bool CanGenerate()
+ {
+#ifdef __APPLE__
+ // on MacOS enable CPackRPM iff rpmbuild is found
+ return cmSystemTools::FindProgram("rpmbuild") != "" ? true : false;
+#else
+ // legacy behavior on other systems
+ return true;
+#endif
+ }
+
protected:
virtual int InitializeInternal();
virtual int PackageFiles();
diff --git a/Source/CTest/cmCTestCoverageHandler.cxx b/Source/CTest/cmCTestCoverageHandler.cxx
index ae06b0f..81d3669 100644
--- a/Source/CTest/cmCTestCoverageHandler.cxx
+++ b/Source/CTest/cmCTestCoverageHandler.cxx
@@ -11,6 +11,8 @@
============================================================================*/
#include "cmCTestCoverageHandler.h"
#include "cmParsePHPCoverage.h"
+#include "cmParseGTMCoverage.h"
+#include "cmParseCacheCoverage.h"
#include "cmCTest.h"
#include "cmake.h"
#include "cmMakefile.h"
@@ -373,21 +375,29 @@ int cmCTestCoverageHandler::ProcessHandler()
}
int file_count = 0;
file_count += this->HandleGCovCoverage(&cont);
+ error = cont.Error;
if ( file_count < 0 )
{
return error;
}
file_count += this->HandleTracePyCoverage(&cont);
+ error = cont.Error;
if ( file_count < 0 )
{
return error;
}
file_count += this->HandlePHPCoverage(&cont);
+ error = cont.Error;
if ( file_count < 0 )
{
return error;
}
+ file_count += this->HandleMumpsCoverage(&cont);
error = cont.Error;
+ if ( file_count < 0 )
+ {
+ return error;
+ }
std::set<std::string> uncovered = this->FindUncoveredFiles(&cont);
@@ -751,6 +761,46 @@ int cmCTestCoverageHandler::HandlePHPCoverage(
}
return static_cast<int>(cont->TotalCoverage.size());
}
+//----------------------------------------------------------------------
+int cmCTestCoverageHandler::HandleMumpsCoverage(
+ cmCTestCoverageHandlerContainer* cont)
+{
+ // try gtm coverage
+ cmParseGTMCoverage cov(*cont, this->CTest);
+ std::string coverageFile = this->CTest->GetBinaryDir() +
+ "/gtm_coverage.mcov";
+ if(cmSystemTools::FileExists(coverageFile.c_str()))
+ {
+ cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
+ "Parsing Cache Coverage: " << coverageFile
+ << std::endl);
+ cov.ReadCoverageFile(coverageFile.c_str());
+ return static_cast<int>(cont->TotalCoverage.size());
+ }
+ else
+ {
+ cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
+ " Cannot find foobar GTM coverage file: " << coverageFile
+ << std::endl);
+ }
+ cmParseCacheCoverage ccov(*cont, this->CTest);
+ coverageFile = this->CTest->GetBinaryDir() +
+ "/cache_coverage.cmcov";
+ if(cmSystemTools::FileExists(coverageFile.c_str()))
+ {
+ cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
+ "Parsing Cache Coverage: " << coverageFile
+ << std::endl);
+ ccov.ReadCoverageFile(coverageFile.c_str());
+ }
+ else
+ {
+ cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
+ " Cannot find Cache coverage file: " << coverageFile
+ << std::endl);
+ }
+ return static_cast<int>(cont->TotalCoverage.size());
+}
struct cmCTestCoverageHandlerLocale
{
@@ -800,7 +850,7 @@ int cmCTestCoverageHandler::HandleGCovCoverage(
std::string st2gcovOutputRex1 = "^File *[`'](.*)'$";
std::string st2gcovOutputRex2
= "Lines executed: *[0-9]+\\.[0-9]+% of [0-9]+$";
- std::string st2gcovOutputRex3 = "^(.*):creating [`'](.*\\.gcov)'";
+ std::string st2gcovOutputRex3 = "^(.*)reating [`'](.*\\.gcov)'";
std::string st2gcovOutputRex4 = "^(.*):unexpected EOF *$";
std::string st2gcovOutputRex5 = "^(.*):cannot open source file*$";
std::string st2gcovOutputRex6
@@ -1806,7 +1856,7 @@ int cmCTestCoverageHandler::HandleBullseyeCoverage(
cmCTestCoverageHandlerContainer* cont)
{
const char* covfile = cmSystemTools::GetEnv("COVFILE");
- if(!covfile)
+ if(!covfile || strlen(covfile) == 0)
{
cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
" COVFILE environment variable not found, not running "
diff --git a/Source/CTest/cmCTestCoverageHandler.h b/Source/CTest/cmCTestCoverageHandler.h
index d3e8503..92b0b22 100644
--- a/Source/CTest/cmCTestCoverageHandler.h
+++ b/Source/CTest/cmCTestCoverageHandler.h
@@ -70,6 +70,8 @@ private:
//! Handle coverage using xdebug php coverage
int HandlePHPCoverage(cmCTestCoverageHandlerContainer* cont);
+ //! Handle coverage for mumps
+ int HandleMumpsCoverage(cmCTestCoverageHandlerContainer* cont);
//! Handle coverage using Bullseye
int HandleBullseyeCoverage(cmCTestCoverageHandlerContainer* cont);
diff --git a/Source/CTest/cmCTestMemCheckHandler.cxx b/Source/CTest/cmCTestMemCheckHandler.cxx
index 035aaa9..3e4ecdd 100644
--- a/Source/CTest/cmCTestMemCheckHandler.cxx
+++ b/Source/CTest/cmCTestMemCheckHandler.cxx
@@ -358,7 +358,7 @@ void cmCTestMemCheckHandler::GenerateDartOutput(std::ostream& os)
os
<< "\t\t</Results>\n"
- << logTag << memcheckstr << std::endl
+ << logTag << cmXMLSafe(memcheckstr) << std::endl
<< "\t</Log>\n";
this->WriteTestResultFooter(os, result);
if ( current < cc )
diff --git a/Source/CTest/cmCTestRunTest.cxx b/Source/CTest/cmCTestRunTest.cxx
index 81f18b0..c3de5dc 100644
--- a/Source/CTest/cmCTestRunTest.cxx
+++ b/Source/CTest/cmCTestRunTest.cxx
@@ -671,7 +671,7 @@ bool cmCTestRunTest::ForkProcess(double testTimeOut, bool explicitTimeout,
if (environment && environment->size()>0)
{
- cmSystemTools::AppendEnv(environment);
+ cmSystemTools::AppendEnv(*environment);
}
return this->TestProcess->StartProcess();
diff --git a/Source/CTest/cmCTestScriptHandler.cxx b/Source/CTest/cmCTestScriptHandler.cxx
index 5841b8d..d3ab2ef 100644
--- a/Source/CTest/cmCTestScriptHandler.cxx
+++ b/Source/CTest/cmCTestScriptHandler.cxx
@@ -643,11 +643,7 @@ int cmCTestScriptHandler::RunCurrentScript()
{
std::vector<std::string> envArgs;
cmSystemTools::ExpandListArgument(this->CTestEnv.c_str(),envArgs);
- // for each variable/argument do a putenv
- for (unsigned i = 0; i < envArgs.size(); ++i)
- {
- cmSystemTools::PutEnv(envArgs[i].c_str());
- }
+ cmSystemTools::AppendEnv(envArgs);
}
// now that we have done most of the error checking finally run the
diff --git a/Source/CTest/cmParseCacheCoverage.cxx b/Source/CTest/cmParseCacheCoverage.cxx
new file mode 100644
index 0000000..137f344
--- /dev/null
+++ b/Source/CTest/cmParseCacheCoverage.cxx
@@ -0,0 +1,220 @@
+#include "cmStandardIncludes.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "cmSystemTools.h"
+#include "cmParseCacheCoverage.h"
+#include <cmsys/Directory.hxx>
+#include <cmsys/Glob.hxx>
+
+
+cmParseCacheCoverage::cmParseCacheCoverage(
+ cmCTestCoverageHandlerContainer& cont,
+ cmCTest* ctest)
+ :cmParseMumpsCoverage(cont, ctest)
+{
+}
+
+
+bool cmParseCacheCoverage::LoadCoverageData(const char* d)
+{
+ // load all the .mcov files in the specified directory
+ cmsys::Directory dir;
+ if(!dir.Load(d))
+ {
+ return false;
+ }
+ size_t numf;
+ unsigned int i;
+ numf = dir.GetNumberOfFiles();
+ for (i = 0; i < numf; i++)
+ {
+ std::string file = dir.GetFile(i);
+ if(file != "." && file != ".."
+ && !cmSystemTools::FileIsDirectory(file.c_str()))
+ {
+ std::string path = d;
+ path += "/";
+ path += file;
+ if(cmSystemTools::GetFilenameLastExtension(path) == ".cmcov")
+ {
+ if(!this->ReadCMCovFile(path.c_str()))
+ {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+}
+
+// not currently used, but leave it in case we want it in the future
+void cmParseCacheCoverage::RemoveUnCoveredFiles()
+{
+ // loop over the coverage data computed and remove all files
+ // that only have -1 or 0 for the lines.
+ cmCTestCoverageHandlerContainer::TotalCoverageMap::iterator ci =
+ this->Coverage.TotalCoverage.begin();
+ while(ci != this->Coverage.TotalCoverage.end())
+ {
+ cmCTestCoverageHandlerContainer::SingleFileCoverageVector& v =
+ ci->second;
+ bool nothing = true;
+ for(cmCTestCoverageHandlerContainer::SingleFileCoverageVector::iterator i=
+ v.begin(); i != v.end(); ++i)
+ {
+ if(*i > 0)
+ {
+ nothing = false;
+ break;
+ }
+ }
+ if(nothing)
+ {
+ cmCTestLog(this->CTest, HANDLER_VERBOSE_OUTPUT,
+ "No coverage found in: " << ci->first
+ << std::endl);
+ this->Coverage.TotalCoverage.erase(ci++);
+ }
+ else
+ {
+ ++ci;
+ }
+ }
+}
+
+bool cmParseCacheCoverage::SplitString(std::vector<std::string>& args,
+ std::string const& line)
+{
+ std::string::size_type pos1 = 0;
+ std::string::size_type pos2 = line.find(',', 0);
+ if(pos2 == std::string::npos)
+ {
+ return false;
+ }
+ std::string arg;
+ while(pos2 != std::string::npos)
+ {
+ arg = line.substr(pos1, pos2-pos1);
+ args.push_back(arg);
+ pos1 = pos2+1;
+ pos2 = line.find(',',pos1);
+ }
+ arg = line.substr(pos1);
+ args.push_back(arg);
+ return true;
+}
+
+bool cmParseCacheCoverage::ReadCMCovFile(const char* file)
+{
+ std::ifstream in(file);
+ if(!in)
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Can not open : "
+ << file << "\n");
+ return false;
+ }
+ std::string line;
+ std::vector<std::string> separateLine;
+ if(!cmSystemTools::GetLineFromStream(in, line))
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Empty file : "
+ << file << " referenced in this line of cmcov data:\n"
+ "[" << line << "]\n");
+ return false;
+ }
+ separateLine.clear();
+ this->SplitString(separateLine, line);
+ if(separateLine.size() !=4 || separateLine[0] != "Routine"
+ || separateLine[1] != "Line" || separateLine[2] != "RtnLine"
+ || separateLine[3] != "Code")
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Bad first line of cmcov file : "
+ << file << " line:\n"
+ "[" << line << "]\n");
+ }
+ std::string routine;
+ std::string filepath;
+ while(cmSystemTools::GetLineFromStream(in, line))
+ {
+ // clear out line argument vector
+ separateLine.clear();
+ // parse the comma separated line
+ this->SplitString(separateLine, line);
+ // might have more because code could have a quoted , in it
+ // but we only care about the first 3 args anyway
+ if(separateLine.size() < 4)
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Bad line of cmcov file expected at least 4 found: "
+ << separateLine.size() << " "
+ << file << " line:\n"
+ "[" << line << "]\n");
+ for(std::string::size_type i = 0; i < separateLine.size(); ++i)
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,""
+ << separateLine[1] << " ");
+ }
+ cmCTestLog(this->CTest, ERROR_MESSAGE, "\n");
+ return false;
+ }
+ // if we do not have a routine yet, then it should be
+ // the first argument in the vector
+ if(routine.size() == 0)
+ {
+ routine = separateLine[0];
+ // Find the full path to the file
+ if(!this->FindMumpsFile(routine, filepath))
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Could not find mumps file for routine: "
+ << routine << "\n");
+ filepath = "";
+ continue; // move to next line
+ }
+ }
+ // if we have a routine name, check for end of routine
+ else
+ {
+ // Totals in arg 0 marks the end of a routine
+ if(separateLine[0].substr(0, 6) == "Totals")
+ {
+ routine = ""; // at the end of this routine
+ filepath = "";
+ continue; // move to next line
+ }
+ }
+ // if the file path was not found for the routine
+ // move to next line. We should have already warned
+ // after the call to FindMumpsFile that we did not find
+ // it, so don't report again to cut down on output
+ if(filepath.size() == 0)
+ {
+ continue;
+ }
+ // now we are ready to set the coverage from the line of data
+ cmCTestCoverageHandlerContainer::SingleFileCoverageVector&
+ coverageVector = this->Coverage.TotalCoverage[filepath];
+ std::string::size_type linenumber = atoi(separateLine[1].c_str()) -1;
+ int count = atoi(separateLine[2].c_str());
+ if(linenumber > coverageVector.size())
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Parse error line is greater than number of lines in file: "
+ << linenumber << " " << filepath << "\n");
+ continue; // skip setting count to avoid crash
+ }
+ // now add to count for linenumber
+ // for some reason the cache coverage adds extra lines to the
+ // end of the file in some cases. Since they do not exist, we will
+ // mark them as non executable
+ while(linenumber >= coverageVector.size())
+ {
+ coverageVector.push_back(-1);
+ }
+ coverageVector[linenumber] += count;
+ }
+ return true;
+}
diff --git a/Source/CTest/cmParseCacheCoverage.h b/Source/CTest/cmParseCacheCoverage.h
new file mode 100644
index 0000000..114eb92
--- /dev/null
+++ b/Source/CTest/cmParseCacheCoverage.h
@@ -0,0 +1,42 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2009 Kitware, Inc.
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+
+#ifndef cmParseCacheCoverage_h
+#define cmParseCacheCoverage_h
+
+#include "cmParseMumpsCoverage.h"
+
+/** \class cmParseCacheCoverage
+ * \brief Parse Cache coverage information
+ *
+ * This class is used to parse Cache coverage information for
+ * mumps.
+ */
+class cmParseCacheCoverage : public cmParseMumpsCoverage
+{
+public:
+ cmParseCacheCoverage(cmCTestCoverageHandlerContainer& cont,
+ cmCTest* ctest);
+protected:
+ // implement virtual from parent
+ bool LoadCoverageData(const char* dir);
+ // remove files with no coverage
+ void RemoveUnCoveredFiles();
+ // Read a single mcov file
+ bool ReadCMCovFile(const char* f);
+ // split a string based on ,
+ bool SplitString(std::vector<std::string>& args,
+ std::string const& line);
+};
+
+
+#endif
diff --git a/Source/CTest/cmParseGTMCoverage.cxx b/Source/CTest/cmParseGTMCoverage.cxx
new file mode 100644
index 0000000..5dfcfe5
--- /dev/null
+++ b/Source/CTest/cmParseGTMCoverage.cxx
@@ -0,0 +1,272 @@
+#include "cmStandardIncludes.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "cmSystemTools.h"
+#include "cmParseGTMCoverage.h"
+#include <cmsys/Directory.hxx>
+#include <cmsys/Glob.hxx>
+
+
+cmParseGTMCoverage::cmParseGTMCoverage(cmCTestCoverageHandlerContainer& cont,
+ cmCTest* ctest)
+ :cmParseMumpsCoverage(cont, ctest)
+{
+}
+
+
+bool cmParseGTMCoverage::LoadCoverageData(const char* d)
+{
+ // load all the .mcov files in the specified directory
+ cmsys::Directory dir;
+ if(!dir.Load(d))
+ {
+ return false;
+ }
+ size_t numf;
+ unsigned int i;
+ numf = dir.GetNumberOfFiles();
+ for (i = 0; i < numf; i++)
+ {
+ std::string file = dir.GetFile(i);
+ if(file != "." && file != ".."
+ && !cmSystemTools::FileIsDirectory(file.c_str()))
+ {
+ std::string path = d;
+ path += "/";
+ path += file;
+ if(cmSystemTools::GetFilenameLastExtension(path) == ".mcov")
+ {
+ if(!this->ReadMCovFile(path.c_str()))
+ {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+}
+
+bool cmParseGTMCoverage::ReadMCovFile(const char* file)
+{
+ std::ifstream in(file);
+ if(!in)
+ {
+ return false;
+ }
+ std::string line;
+ std::string lastfunction;
+ std::string lastroutine;
+ std::string lastpath;
+ int lastoffset = 0;
+ while( cmSystemTools::GetLineFromStream(in, line))
+ {
+ // only look at lines that have coverage data
+ if(line.find("^ZZCOVERAGE") == line.npos)
+ {
+ continue;
+ }
+ std::string filepath;
+ std::string function;
+ std::string routine;
+ int linenumber = 0;
+ int count = 0;
+ this->ParseMCOVLine(line, routine, function, linenumber, count);
+ // skip this one
+ if(routine == "RSEL")
+ {
+ continue;
+ }
+ // no need to search the file if we just did it
+ if(function == lastfunction && lastroutine == routine)
+ {
+ if(lastpath.size())
+ {
+ this->Coverage.TotalCoverage[lastpath][lastoffset + linenumber]
+ += count;
+ }
+ else
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Can not find mumps file : "
+ << lastroutine <<
+ " referenced in this line of mcov data:\n"
+ "[" << line << "]\n");
+ }
+ continue;
+ }
+ // Find the full path to the file
+ bool found = this->FindMumpsFile(routine, filepath);
+ if(found)
+ {
+ int lineoffset;
+ if(this->FindFunctionInMumpsFile(filepath,
+ function,
+ lineoffset))
+ {
+ cmCTestCoverageHandlerContainer::SingleFileCoverageVector&
+ coverageVector = this->Coverage.TotalCoverage[filepath];
+ coverageVector[lineoffset + linenumber] += count;
+ }
+ lastoffset = lineoffset;
+ }
+ else
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Can not find mumps file : "
+ << routine << " referenced in this line of mcov data:\n"
+ "[" << line << "]\n");
+ }
+ lastfunction = function;
+ lastroutine = routine;
+ lastpath = filepath;
+ }
+ return true;
+}
+
+bool cmParseGTMCoverage::FindFunctionInMumpsFile(std::string const& filepath,
+ std::string const& function,
+ int& lineoffset)
+{
+ std::ifstream in(filepath.c_str());
+ if(!in)
+ {
+ return false;
+ }
+ std::string line;
+ int linenum = 0;
+ while( cmSystemTools::GetLineFromStream(in, line))
+ {
+ std::string::size_type pos = line.find(function.c_str());
+ if(pos == 0)
+ {
+ char nextchar = line[function.size()];
+ if(nextchar == ' ' || nextchar == '(')
+ {
+ lineoffset = linenum;
+ return true;
+ }
+ }
+ if(pos == 1)
+ {
+ char prevchar = line[0];
+ char nextchar = line[function.size()+1];
+ if(prevchar == '%' && (nextchar == ' ' || nextchar == '('))
+ {
+ lineoffset = linenum;
+ return true;
+ }
+ }
+ linenum++; // move to next line count
+ }
+ lineoffset = 0;
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Could not find entry point : "
+ << function << " in " << filepath << "\n");
+ return false;
+}
+
+bool cmParseGTMCoverage::ParseMCOVLine(std::string const& line,
+ std::string& routine,
+ std::string& function,
+ int& linenumber,
+ int& count)
+{
+ // this method parses lines from the .mcov file
+ // each line has ^COVERAGE(...) in it, and there
+ // are several varients of coverage lines:
+ //
+ // ^COVERAGE("DIC11","PR1",0)="2:0:0:0"
+ // ( file , entry, line ) = "number_executed:timing_info"
+ // ^COVERAGE("%RSEL","SRC")="1:0:0:0"
+ // ( file , entry ) = "number_executed:timing_info"
+ // ^COVERAGE("%RSEL","init",8,"FOR_LOOP",1)=1
+ // ( file , entry, line, IGNORE ) =number_executed
+ std::vector<cmStdString> args;
+ std::string::size_type pos = line.find('(', 0);
+ // if no ( is found, then return line has no coverage
+ if(pos == std::string::npos)
+ {
+ return false;
+ }
+ std::string arg;
+ bool done = false;
+ // separate out all of the comma separated arguments found
+ // in the COVERAGE(...) line
+ while(line[pos] && !done)
+ {
+ // save the char we are looking at
+ char cur = line[pos];
+ // , or ) means end of argument
+ if(cur == ',' || cur == ')')
+ {
+ // save the argument into the argument vector
+ args.push_back(arg);
+ // start on a new argument
+ arg = "";
+ // if we are at the end of the ), then finish while loop
+ if(cur == ')')
+ {
+ done = true;
+ }
+ }
+ else
+ {
+ // all chars except ", (, and % get stored in the arg string
+ if(cur != '\"' && cur != '(' && cur != '%')
+ {
+ arg.append(1, line[pos]);
+ }
+ }
+ // move to next char
+ pos++;
+ }
+ // now parse the right hand side of the =
+ pos = line.find('=');
+ // no = found, this is an error
+ if(pos == line.npos)
+ {
+ return false;
+ }
+ pos++; // move past =
+
+ // if the next positing is not a ", then this is a
+ // COVERAGE(..)=count line and turn the rest of the string
+ // past the = into an integer and set it to count
+ if(line[pos] != '\"')
+ {
+ count = atoi(line.substr(pos).c_str());
+ }
+ else
+ {
+ // this means line[pos] is a ", and we have a
+ // COVERAGE(...)="1:0:0:0" type of line
+ pos++; // move past "
+ // find the first : past the "
+ std::string::size_type pos2 = line.find(':', pos);
+ // turn the string between the " and the first : into an integer
+ // and set it to count
+ count = atoi(line.substr(pos, pos2-pos).c_str());
+ }
+ // less then two arguments is an error
+ if(args.size() < 2)
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Error parsing mcov line: [" << line << "]\n");
+ return false;
+ }
+ routine = args[0]; // the routine is the first argument
+ function = args[1]; // the function in the routine is the second
+ // in the two argument only format
+ // ^COVERAGE("%RSEL","SRC"), the line offset is 0
+ if(args.size() == 2)
+ {
+ linenumber = 0;
+ }
+ else
+ {
+ // this is the format for this line
+ // ^COVERAGE("%RSEL","SRC",count)
+ linenumber = atoi(args[2].c_str());
+ }
+ return true;
+}
diff --git a/Source/CTest/cmParseGTMCoverage.h b/Source/CTest/cmParseGTMCoverage.h
new file mode 100644
index 0000000..c6d7ef9
--- /dev/null
+++ b/Source/CTest/cmParseGTMCoverage.h
@@ -0,0 +1,49 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2009 Kitware, Inc.
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+
+#ifndef cmParseGTMCoverage_h
+#define cmParseGTMCoverage_h
+
+#include "cmParseMumpsCoverage.h"
+
+/** \class cmParseGTMCoverage
+ * \brief Parse GTM coverage information
+ *
+ * This class is used to parse GTM coverage information for
+ * mumps.
+ */
+class cmParseGTMCoverage : public cmParseMumpsCoverage
+{
+public:
+ cmParseGTMCoverage(cmCTestCoverageHandlerContainer& cont,
+ cmCTest* ctest);
+protected:
+ // implement virtual from parent
+ bool LoadCoverageData(const char* dir);
+ // Read a single mcov file
+ bool ReadMCovFile(const char* f);
+ // find out what line in a mumps file (filepath) the given entry point
+ // or function is. lineoffset is set by this method.
+ bool FindFunctionInMumpsFile(std::string const& filepath,
+ std::string const& function,
+ int& lineoffset);
+ // parse a line from a .mcov file, and fill in the
+ // routine, function, linenumber and coverage count
+ bool ParseMCOVLine(std::string const& line,
+ std::string& routine,
+ std::string& function,
+ int& linenumber,
+ int& count);
+};
+
+
+#endif
diff --git a/Source/CTest/cmParseMumpsCoverage.cxx b/Source/CTest/cmParseMumpsCoverage.cxx
new file mode 100644
index 0000000..37e8bd0
--- /dev/null
+++ b/Source/CTest/cmParseMumpsCoverage.cxx
@@ -0,0 +1,165 @@
+#include "cmStandardIncludes.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include "cmSystemTools.h"
+#include "cmParseGTMCoverage.h"
+#include <cmsys/Directory.hxx>
+#include <cmsys/Glob.hxx>
+
+
+cmParseMumpsCoverage::cmParseMumpsCoverage(
+ cmCTestCoverageHandlerContainer& cont,
+ cmCTest* ctest)
+ :Coverage(cont), CTest(ctest)
+{
+}
+
+cmParseMumpsCoverage::~cmParseMumpsCoverage()
+{
+}
+
+bool cmParseMumpsCoverage::ReadCoverageFile(const char* file)
+{
+ // Read the gtm_coverage.mcov file, that has two lines of data:
+ // packages:/full/path/to/Vista/Packages
+ // coverage_dir:/full/path/to/dir/with/*.mcov
+ std::ifstream in(file);
+ if(!in)
+ {
+ return false;
+ }
+ std::string line;
+ while(cmSystemTools::GetLineFromStream(in, line))
+ {
+ std::string::size_type pos = line.find(':', 0);
+ std::string packages;
+ if(pos != std::string::npos)
+ {
+ std::string type = line.substr(0, pos);
+ std::string path = line.substr(pos+1);
+ if(type == "packages")
+ {
+ this->LoadPackages(path.c_str());
+ }
+ else if(type == "coverage_dir")
+ {
+ this->LoadCoverageData(path.c_str());
+ }
+ else
+ {
+ cmCTestLog(this->CTest, ERROR_MESSAGE,
+ "Parse Error in Mumps coverage file :\n"
+ << file <<
+ "\ntype: [" << type << "]\npath:[" << path << "]\n"
+ "input line: [" << line << "]\n");
+ }
+ }
+ }
+ return true;
+}
+
+void cmParseMumpsCoverage::InitializeMumpsFile(std::string& file)
+{
+ // initialize the coverage information for a given mumps file
+ std::ifstream in(file.c_str());
+ if(!in)
+ {
+ return;
+ }
+ std::string line;
+ cmCTestCoverageHandlerContainer::SingleFileCoverageVector&
+ coverageVector = this->Coverage.TotalCoverage[file];
+ if(!cmSystemTools::GetLineFromStream(in, line))
+ {
+ return;
+ }
+ // first line of a .m file can never be run
+ coverageVector.push_back(-1);
+ while( cmSystemTools::GetLineFromStream(in, line) )
+ {
+ // putting in a 0 for a line means it is executable code
+ // putting in a -1 for a line means it is not executable code
+ int val = -1; // assume line is not executable
+ bool found = false;
+ std::string::size_type i = 0;
+ // (1) Search for the first whitespace or semicolon character on a line.
+ //This will skip over labels if the line starts with one, or will simply
+ //be the first character on the line for non-label lines.
+ for(; i < line.size(); ++i)
+ {
+ if(line[i] == ' ' || line[i] == '\t' || line[i] == ';')
+ {
+ found = true;
+ break;
+ }
+ }
+ if(found)
+ {
+ // (2) If the first character found above is whitespace then continue the
+ // search for the first following non-whitespace character.
+ if(line[i] == ' ' || line[i] == '\t')
+ {
+ while(i < line.size() && (line[i] == ' ' || line[i] == '\t'))
+ {
+ i++;
+ }
+ }
+ // (3) If the character found is not a semicolon then the line counts for
+ // coverage.
+ if(i < line.size() && line[i] != ';')
+ {
+ val = 0;
+ }
+ }
+ coverageVector.push_back(val);
+ }
+}
+
+bool cmParseMumpsCoverage::LoadPackages(const char* d)
+{
+ cmsys::Glob glob;
+ glob.RecurseOn();
+ std::string pat = d;
+ pat += "/*.m";
+ glob.FindFiles(pat.c_str());
+ std::vector<std::string>& files = glob.GetFiles();
+ std::vector<std::string>::iterator fileIt;
+ for ( fileIt = files.begin(); fileIt != files.end();
+ ++ fileIt )
+ {
+ std::string name = cmSystemTools::GetFilenameName(*fileIt);
+ this->RoutineToDirectory[name.substr(0, name.size()-2)] = *fileIt;
+ // initialze each file, this is left out until CDash is fixed
+ // to handle large numbers of files
+ this->InitializeMumpsFile(*fileIt);
+ }
+ return true;
+}
+
+bool cmParseMumpsCoverage::FindMumpsFile(std::string const& routine,
+ std::string& filepath)
+{
+ std::map<cmStdString, cmStdString>::iterator i =
+ this->RoutineToDirectory.find(routine);
+ if(i != this->RoutineToDirectory.end())
+ {
+ filepath = i->second;
+ return true;
+ }
+ else
+ {
+ // try some alternate names
+ const char* tryname[] = {"GUX", "GTM", "ONT", 0};
+ for(int k=0; tryname[k] != 0; k++)
+ {
+ std::string routine2 = routine + tryname[k];
+ i = this->RoutineToDirectory.find(routine2);
+ if(i != this->RoutineToDirectory.end())
+ {
+ filepath = i->second;
+ return true;
+ }
+ }
+ }
+ return false;
+}
diff --git a/Source/CTest/cmParseMumpsCoverage.h b/Source/CTest/cmParseMumpsCoverage.h
new file mode 100644
index 0000000..c1effa7
--- /dev/null
+++ b/Source/CTest/cmParseMumpsCoverage.h
@@ -0,0 +1,52 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2009 Kitware, Inc.
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+
+#ifndef cmParseMumpsCoverage_h
+#define cmParseMumpsCoverage_h
+
+#include "cmStandardIncludes.h"
+#include "cmCTestCoverageHandler.h"
+
+/** \class cmParseMumpsCoverage
+ * \brief Parse Mumps coverage information
+ *
+ * This class is used as the base class for Mumps coverage
+ * parsing.
+ */
+class cmParseMumpsCoverage
+{
+public:
+ cmParseMumpsCoverage(cmCTestCoverageHandlerContainer& cont,
+ cmCTest* ctest);
+ virtual ~cmParseMumpsCoverage();
+ // This is the toplevel coverage file locating the coverage files
+ // and the mumps source code package tree.
+ bool ReadCoverageFile(const char* file);
+protected:
+ // sub classes will use this to
+ // load all coverage files found in the given directory
+ virtual bool LoadCoverageData(const char* d) = 0;
+ // search the package directory for mumps files and fill
+ // in the RoutineToDirectory map
+ bool LoadPackages(const char* dir);
+ // initialize the coverage information for a single mumps file
+ void InitializeMumpsFile(std::string& file);
+ // Find mumps file for routine
+ bool FindMumpsFile(std::string const& routine,
+ std::string& filepath);
+protected:
+ std::map<cmStdString, cmStdString> RoutineToDirectory;
+ cmCTestCoverageHandlerContainer& Coverage;
+ cmCTest* CTest;
+};
+
+#endif
diff --git a/Source/CTest/cmParsePHPCoverage.h b/Source/CTest/cmParsePHPCoverage.h
index ce5741d..d50a83c 100644
--- a/Source/CTest/cmParsePHPCoverage.h
+++ b/Source/CTest/cmParsePHPCoverage.h
@@ -37,9 +37,6 @@ private:
bool ReadInt(std::ifstream& in, int& v);
bool ReadCoverageArray(std::ifstream& in, cmStdString const&);
bool ReadUntil(std::ifstream& in, char until);
- typedef std::map<int, int> FileLineCoverage;
- std::map<cmStdString, FileLineCoverage> FileToCoverage;
- std::map<int, int> FileCoverage;
cmCTestCoverageHandlerContainer& Coverage;
cmCTest* CTest;
};
diff --git a/Source/QtDialog/CMakeSetupDialog.cxx b/Source/QtDialog/CMakeSetupDialog.cxx
index 45b4cd3..5cd4f29 100644
--- a/Source/QtDialog/CMakeSetupDialog.cxx
+++ b/Source/QtDialog/CMakeSetupDialog.cxx
@@ -288,7 +288,7 @@ CMakeSetupDialog::~CMakeSetupDialog()
// wait for thread to stop
this->CMakeThread->quit();
- this->CMakeThread->wait(2000);
+ this->CMakeThread->wait();
}
bool CMakeSetupDialog::prepareConfigure()
diff --git a/Source/cmCTest.cxx b/Source/cmCTest.cxx
index 3f7fdc7..4aff64b 100644
--- a/Source/cmCTest.cxx
+++ b/Source/cmCTest.cxx
@@ -48,7 +48,7 @@
#include <float.h>
#include <ctype.h>
-#include <memory> // auto_ptr
+#include <cmsys/auto_ptr.hxx>
#include <cm_zlib.h>
#include <cmsys/Base64.h>
@@ -509,7 +509,7 @@ int cmCTest::Initialize(const char* binary_dir, cmCTestStartCommand* command)
cmake cm;
cmGlobalGenerator gg;
gg.SetCMakeInstance(&cm);
- std::auto_ptr<cmLocalGenerator> lg(gg.CreateLocalGenerator());
+ cmsys::auto_ptr<cmLocalGenerator> lg(gg.CreateLocalGenerator());
cmMakefile *mf = lg->GetMakefile();
if ( !this->ReadCustomConfigurationFileTree(this->BinaryDir.c_str(), mf) )
{
@@ -1277,7 +1277,6 @@ int cmCTest::RunTest(std::vector<const char*> argv,
std::ostream* log, double testTimeOut,
std::vector<std::string>* environment)
{
- std::vector<std::string> origEnv;
bool modifyEnv = (environment && environment->size()>0);
// determine how much time we have
@@ -1334,9 +1333,11 @@ int cmCTest::RunTest(std::vector<const char*> argv,
}
std::string oldpath = cmSystemTools::GetCurrentWorkingDirectory();
+ cmsys::auto_ptr<cmSystemTools::SaveRestoreEnvironment> saveEnv;
if (modifyEnv)
{
- origEnv = cmSystemTools::AppendEnv(environment);
+ saveEnv.reset(new cmSystemTools::SaveRestoreEnvironment);
+ cmSystemTools::AppendEnv(*environment);
}
*retVal = inst.Run(args, output);
@@ -1351,11 +1352,6 @@ int cmCTest::RunTest(std::vector<const char*> argv,
"Internal cmCTest object used to run test." << std::endl
<< *output << std::endl);
- if (modifyEnv)
- {
- cmSystemTools::RestoreEnv(origEnv);
- }
-
return cmsysProcess_State_Exited;
}
std::vector<char> tempOutput;
@@ -1364,9 +1360,11 @@ int cmCTest::RunTest(std::vector<const char*> argv,
*output = "";
}
+ cmsys::auto_ptr<cmSystemTools::SaveRestoreEnvironment> saveEnv;
if (modifyEnv)
{
- origEnv = cmSystemTools::AppendEnv(environment);
+ saveEnv.reset(new cmSystemTools::SaveRestoreEnvironment);
+ cmSystemTools::AppendEnv(*environment);
}
cmsysProcess* cp = cmsysProcess_New();
@@ -1436,11 +1434,6 @@ int cmCTest::RunTest(std::vector<const char*> argv,
}
cmsysProcess_Delete(cp);
- if (modifyEnv)
- {
- cmSystemTools::RestoreEnv(origEnv);
- }
-
return result;
}
diff --git a/Source/cmCoreTryCompile.cxx b/Source/cmCoreTryCompile.cxx
index 48f644b..ed485e3 100644
--- a/Source/cmCoreTryCompile.cxx
+++ b/Source/cmCoreTryCompile.cxx
@@ -404,6 +404,7 @@ void cmCoreTryCompile::CleanupFiles(const char* binDir)
if(cmSystemTools::FileIsDirectory(fullPath.c_str()))
{
this->CleanupFiles(fullPath.c_str());
+ cmSystemTools::RemoveADirectory(fullPath.c_str());
}
else
{
diff --git a/Source/cmDependsFortranLexer.cxx b/Source/cmDependsFortranLexer.cxx
index 438af2d..b0d9a74 100644
--- a/Source/cmDependsFortranLexer.cxx
+++ b/Source/cmDependsFortranLexer.cxx
@@ -20,7 +20,7 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 34
+#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -65,7 +65,6 @@ typedef int flex_int32_t;
typedef unsigned char flex_uint8_t;
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
/* Limits of integral types. */
#ifndef INT8_MIN
@@ -96,6 +95,8 @@ typedef unsigned int flex_uint32_t;
#define UINT32_MAX (4294967295U)
#endif
+#endif /* ! C99 */
+
#endif /* ! FLEXINT_H */
#ifdef __cplusplus
@@ -169,7 +170,15 @@ typedef void* yyscan_t;
/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
#endif
/* The state buf must be large enough to hold one state per character in the main buffer.
@@ -203,13 +212,6 @@ typedef struct yy_buffer_state *YY_BUFFER_STATE;
#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner )
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- * Given that the standard has decreed that size_t exists since 1989,
- * I guess we can afford to depend on it. Manoj.
- */
-
#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
@@ -367,8 +369,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 43
-#define YY_END_OF_BUFFER 44
+#define YY_NUM_RULES 44
+#define YY_END_OF_BUFFER 45
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -376,25 +378,26 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[161] =
+static yyconst flex_int16_t yy_accept[165] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 44, 38, 40, 39, 42, 1, 38, 31, 2, 33,
- 38, 39, 36, 38, 37, 38, 37, 40, 38, 39,
- 38, 37, 9, 8, 9, 4, 3, 38, 0, 10,
- 0, 0, 0, 0, 0, 31, 31, 32, 34, 36,
- 38, 37, 0, 41, 37, 0, 0, 0, 0, 0,
- 0, 0, 0, 38, 0, 11, 37, 0, 0, 5,
- 0, 0, 0, 27, 0, 0, 31, 31, 31, 31,
- 0, 0, 0, 0, 0, 21, 0, 0, 0, 0,
+ 45, 39, 41, 40, 43, 1, 39, 32, 2, 34,
+ 39, 40, 37, 39, 38, 39, 38, 41, 39, 40,
+ 39, 38, 9, 8, 9, 4, 3, 39, 0, 10,
+ 0, 0, 0, 0, 0, 32, 32, 33, 35, 37,
+ 39, 38, 0, 42, 38, 0, 0, 0, 0, 0,
+ 0, 0, 0, 39, 0, 11, 38, 0, 0, 5,
+ 0, 0, 0, 28, 0, 0, 32, 32, 32, 32,
+ 0, 0, 0, 0, 0, 22, 0, 0, 0, 0,
0, 6, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 28, 29, 0, 0, 0, 0, 0, 0,
- 0, 22, 23, 0, 0, 0, 0, 0, 0, 0,
- 0, 30, 25, 0, 0, 18, 0, 0, 24, 19,
- 0, 0, 17, 0, 0, 16, 26, 0, 0, 15,
- 20, 0, 7, 35, 7, 13, 0, 12, 14, 0
+ 0, 0, 29, 30, 0, 0, 0, 0, 0, 0,
+ 0, 23, 24, 0, 0, 0, 0, 0, 0, 0,
+ 0, 31, 26, 0, 0, 19, 0, 0, 25, 20,
+ 0, 0, 18, 0, 0, 17, 27, 0, 0, 16,
+ 21, 0, 7, 36, 7, 14, 0, 13, 15, 0,
+ 0, 0, 12, 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@@ -404,15 +407,15 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 5, 6, 7, 8, 9, 1, 10, 11, 1,
1, 12, 1, 13, 1, 1, 1, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 15, 16, 1,
- 17, 18, 19, 1, 20, 20, 21, 22, 23, 24,
- 20, 20, 25, 20, 20, 26, 20, 27, 20, 20,
- 20, 20, 28, 20, 29, 20, 20, 20, 20, 20,
- 1, 30, 1, 1, 31, 1, 20, 20, 32, 33,
-
- 34, 35, 20, 20, 36, 20, 20, 37, 20, 38,
- 20, 20, 20, 20, 39, 20, 40, 20, 20, 20,
- 20, 20, 1, 1, 1, 1, 1, 1, 1, 1,
+ 14, 14, 14, 14, 14, 14, 14, 15, 16, 17,
+ 18, 19, 20, 1, 21, 21, 22, 23, 24, 25,
+ 21, 21, 26, 21, 21, 27, 21, 28, 21, 21,
+ 21, 21, 29, 21, 30, 21, 21, 21, 21, 21,
+ 1, 31, 1, 1, 32, 1, 21, 21, 33, 34,
+
+ 35, 36, 21, 21, 37, 21, 21, 38, 21, 39,
+ 21, 21, 21, 21, 40, 21, 41, 21, 21, 21,
+ 21, 21, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -429,178 +432,187 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst flex_int32_t yy_meta[41] =
+static yyconst flex_int32_t yy_meta[42] =
{ 0,
1, 2, 2, 3, 4, 3, 3, 1, 1, 3,
- 3, 1, 3, 5, 1, 3, 3, 1, 1, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 1,
- 5, 6, 6, 6, 6, 6, 6, 6, 6, 6
+ 3, 1, 3, 5, 1, 3, 1, 3, 6, 1,
+ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+ 1, 5, 7, 7, 7, 7, 7, 7, 7, 7,
+ 7
} ;
-static yyconst flex_int16_t yy_base[169] =
+static yyconst flex_int16_t yy_base[174] =
{ 0,
- 0, 39, 0, 40, 184, 47, 43, 53, 55, 63,
- 186, 0, 476, 476, 164, 476, 79, 72, 476, 476,
- 143, 476, 130, 126, 0, 83, 119, 85, 149, 139,
- 189, 220, 476, 131, 89, 476, 476, 0, 132, 476,
- 259, 37, 69, 76, 34, 119, 137, 476, 0, 476,
- 121, 0, 150, 476, 0, 154, 298, 0, 75, 138,
- 142, 72, 127, 338, 94, 476, 0, 84, 158, 186,
- 81, 145, 108, 172, 147, 173, 260, 266, 284, 299,
- 272, 173, 178, 286, 245, 258, 285, 285, 78, 71,
- 207, 476, 288, 291, 296, 304, 310, 315, 317, 326,
-
- 330, 330, 335, 338, 338, 341, 343, 341, 348, 62,
- 52, 346, 476, 476, 353, 355, 357, 352, 359, 359,
- 359, 476, 476, 363, 365, 370, 366, 375, 46, 38,
- 378, 476, 476, 378, 381, 476, 376, 384, 476, 476,
- 384, 387, 476, 115, 0, 476, 476, 388, 393, 476,
- 476, 394, 476, 476, 476, 476, 398, 476, 476, 476,
- 432, 438, 443, 445, 451, 457, 463, 469
+ 0, 40, 0, 41, 188, 48, 44, 54, 56, 65,
+ 186, 0, 505, 505, 171, 505, 81, 74, 505, 505,
+ 158, 505, 151, 137, 0, 85, 122, 87, 153, 145,
+ 194, 226, 505, 143, 91, 505, 505, 0, 142, 505,
+ 266, 34, 70, 74, 34, 122, 141, 505, 0, 505,
+ 112, 0, 98, 505, 0, 154, 306, 0, 43, 133,
+ 139, 46, 130, 347, 130, 505, 0, 121, 163, 179,
+ 104, 156, 129, 176, 147, 178, 214, 267, 273, 292,
+ 279, 179, 249, 280, 257, 265, 288, 289, 116, 107,
+ 317, 505, 287, 289, 291, 302, 307, 310, 307, 311,
+
+ 316, 326, 329, 333, 332, 336, 347, 345, 349, 101,
+ 86, 346, 505, 505, 350, 351, 353, 350, 357, 362,
+ 362, 505, 505, 367, 369, 371, 366, 372, 56, 47,
+ 374, 505, 505, 374, 379, 505, 374, 387, 505, 505,
+ 387, 391, 505, 117, 0, 505, 505, 392, 394, 505,
+ 505, 394, 505, 505, 505, 505, 395, 419, 505, 429,
+ 0, 25, 505, 505, 446, 453, 459, 462, 469, 476,
+ 483, 490, 497
} ;
-static yyconst flex_int16_t yy_def[169] =
+static yyconst flex_int16_t yy_def[174] =
{ 0,
- 160, 1, 1, 1, 1, 1, 161, 161, 161, 161,
- 160, 162, 160, 160, 163, 160, 162, 160, 160, 160,
- 162, 160, 160, 162, 164, 162, 164, 160, 162, 160,
- 165, 160, 160, 160, 160, 160, 160, 162, 163, 160,
- 160, 160, 160, 160, 160, 160, 166, 160, 162, 160,
- 162, 164, 160, 160, 27, 160, 160, 57, 160, 160,
- 160, 160, 160, 165, 165, 160, 32, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 166, 166, 166, 166,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
-
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 167, 168, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 0,
- 160, 160, 160, 160, 160, 160, 160, 160
+ 164, 1, 1, 1, 1, 1, 165, 165, 165, 165,
+ 164, 166, 164, 164, 167, 164, 166, 164, 164, 164,
+ 166, 164, 164, 166, 168, 166, 168, 164, 166, 164,
+ 169, 164, 164, 164, 164, 164, 164, 166, 167, 164,
+ 164, 164, 164, 164, 164, 164, 170, 164, 166, 164,
+ 166, 168, 164, 164, 27, 164, 164, 57, 164, 164,
+ 164, 164, 164, 169, 169, 164, 32, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 170, 170, 170, 170,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 171, 172, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 173, 173, 164, 0, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164
} ;
-static yyconst flex_int16_t yy_nxt[517] =
+static yyconst flex_int16_t yy_nxt[547] =
{ 0,
12, 13, 14, 13, 13, 15, 16, 12, 17, 18,
- 19, 12, 20, 12, 21, 22, 23, 12, 24, 25,
- 25, 25, 25, 25, 25, 25, 25, 25, 25, 26,
- 27, 25, 25, 25, 25, 25, 25, 25, 25, 25,
- 28, 28, 145, 28, 28, 34, 29, 29, 28, 30,
- 144, 28, 35, 36, 29, 34, 130, 34, 31, 71,
- 76, 37, 35, 36, 35, 34, 129, 32, 32, 37,
- 71, 76, 35, 46, 46, 111, 46, 47, 32, 32,
- 41, 48, 110, 41, 53, 54, 56, 53, 90, 56,
- 69, 70, 57, 69, 72, 73, 66, 83, 88, 74,
-
- 42, 43, 75, 44, 93, 72, 73, 45, 83, 88,
- 74, 42, 43, 75, 44, 93, 154, 154, 45, 38,
- 46, 46, 81, 46, 47, 81, 38, 38, 48, 96,
- 38, 89, 55, 38, 40, 68, 38, 38, 78, 46,
- 96, 78, 79, 63, 51, 82, 80, 50, 38, 55,
- 58, 53, 54, 58, 53, 56, 82, 49, 56, 69,
- 70, 57, 69, 84, 85, 86, 40, 99, 87, 94,
- 59, 60, 95, 61, 84, 85, 86, 62, 99, 87,
- 94, 59, 60, 95, 61, 160, 30, 91, 62, 64,
- 91, 66, 160, 97, 100, 92, 64, 64, 98, 101,
-
- 64, 102, 64, 64, 97, 100, 64, 64, 91, 98,
- 101, 91, 102, 160, 160, 160, 92, 160, 64, 64,
- 65, 65, 66, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 67, 65, 65, 65, 65, 65, 67,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 65,
- 67, 67, 67, 67, 67, 67, 67, 67, 67, 67,
- 41, 78, 46, 41, 78, 79, 105, 78, 46, 80,
- 78, 79, 160, 81, 160, 80, 81, 105, 160, 106,
- 42, 43, 160, 44, 107, 78, 46, 45, 78, 79,
- 106, 42, 43, 80, 44, 107, 82, 160, 45, 58,
-
- 78, 46, 58, 78, 79, 108, 109, 82, 80, 160,
- 103, 160, 112, 104, 113, 160, 108, 109, 114, 59,
- 60, 103, 61, 112, 104, 113, 62, 160, 115, 114,
- 59, 60, 116, 61, 160, 160, 117, 62, 64, 115,
- 66, 160, 118, 116, 160, 64, 64, 117, 119, 64,
- 120, 64, 64, 118, 121, 64, 64, 160, 122, 119,
- 123, 120, 124, 125, 126, 121, 127, 64, 64, 122,
- 128, 123, 131, 124, 125, 126, 132, 127, 133, 134,
- 135, 128, 136, 131, 137, 138, 139, 132, 140, 133,
- 134, 135, 141, 136, 142, 137, 138, 139, 143, 140,
-
- 146, 147, 148, 141, 149, 142, 150, 151, 152, 143,
- 156, 146, 147, 148, 157, 149, 158, 150, 151, 152,
- 159, 156, 160, 160, 160, 157, 160, 158, 160, 160,
- 160, 159, 33, 33, 33, 33, 33, 33, 38, 160,
- 160, 160, 38, 39, 39, 39, 39, 39, 39, 52,
- 52, 65, 65, 65, 65, 65, 65, 77, 77, 77,
- 77, 77, 77, 153, 153, 153, 160, 153, 153, 155,
- 160, 155, 160, 155, 155, 11, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
-
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160
+ 19, 12, 20, 12, 21, 22, 12, 23, 12, 24,
+ 25, 25, 25, 25, 25, 25, 25, 25, 25, 25,
+ 26, 27, 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 28, 28, 163, 28, 28, 34, 29, 29, 28,
+ 30, 145, 28, 35, 36, 29, 34, 71, 34, 31,
+ 144, 76, 37, 35, 36, 35, 83, 34, 71, 32,
+ 32, 37, 76, 88, 35, 46, 46, 83, 46, 47,
+ 32, 32, 41, 48, 88, 41, 53, 54, 56, 53,
+ 130, 56, 69, 70, 57, 69, 72, 73, 74, 53,
+
+ 54, 75, 53, 42, 43, 129, 44, 72, 73, 74,
+ 45, 111, 75, 81, 42, 43, 81, 44, 154, 154,
+ 110, 45, 38, 46, 46, 90, 46, 47, 93, 38,
+ 38, 48, 66, 38, 89, 55, 38, 82, 38, 93,
+ 38, 38, 78, 46, 40, 78, 79, 68, 82, 63,
+ 80, 96, 38, 55, 58, 56, 51, 58, 56, 84,
+ 85, 57, 96, 86, 69, 70, 87, 69, 99, 50,
+ 84, 85, 49, 40, 86, 59, 60, 87, 61, 99,
+ 91, 94, 62, 91, 95, 164, 59, 60, 92, 61,
+ 30, 164, 94, 62, 64, 95, 66, 164, 97, 164,
+
+ 100, 64, 64, 98, 164, 64, 101, 64, 64, 97,
+ 64, 100, 64, 64, 98, 78, 46, 101, 78, 79,
+ 164, 164, 164, 80, 64, 64, 65, 65, 66, 65,
+ 65, 65, 65, 65, 65, 65, 65, 65, 65, 67,
+ 65, 65, 65, 65, 65, 65, 67, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 65, 67, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 41, 78, 46,
+ 41, 78, 79, 102, 78, 46, 80, 78, 79, 105,
+ 81, 164, 80, 81, 102, 164, 164, 106, 42, 43,
+ 105, 44, 107, 78, 46, 45, 78, 79, 106, 42,
+
+ 43, 80, 44, 107, 82, 103, 45, 58, 104, 108,
+ 58, 109, 112, 113, 114, 82, 103, 164, 91, 104,
+ 108, 91, 109, 112, 113, 114, 92, 115, 59, 60,
+ 116, 61, 117, 118, 119, 62, 164, 120, 115, 59,
+ 60, 116, 61, 117, 118, 119, 62, 64, 120, 66,
+ 164, 121, 164, 122, 64, 64, 123, 124, 64, 125,
+ 64, 64, 121, 64, 122, 64, 64, 123, 124, 126,
+ 125, 127, 128, 131, 132, 133, 134, 64, 64, 135,
+ 126, 136, 127, 128, 131, 132, 133, 134, 137, 138,
+ 135, 139, 136, 140, 141, 142, 143, 146, 147, 137,
+
+ 138, 148, 139, 149, 140, 141, 142, 143, 146, 147,
+ 150, 151, 148, 152, 149, 156, 157, 158, 159, 164,
+ 160, 150, 151, 160, 152, 164, 156, 157, 158, 159,
+ 160, 164, 164, 160, 164, 161, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 161, 33, 33, 33, 33,
+ 33, 33, 33, 38, 164, 164, 164, 38, 38, 39,
+ 39, 39, 39, 39, 39, 39, 52, 164, 52, 65,
+ 65, 65, 65, 65, 65, 65, 77, 77, 77, 77,
+ 77, 77, 77, 153, 153, 153, 164, 153, 153, 153,
+ 155, 164, 155, 164, 155, 155, 155, 162, 162, 162,
+
+ 162, 162, 164, 162, 11, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164
} ;
-static yyconst flex_int16_t yy_chk[517] =
+static yyconst flex_int16_t yy_chk[547] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 4, 130, 2, 4, 7, 2, 4, 6, 6,
- 129, 6, 7, 7, 6, 8, 111, 9, 6, 42,
- 45, 9, 8, 8, 9, 10, 110, 6, 6, 10,
- 42, 45, 10, 18, 18, 90, 18, 18, 6, 6,
- 17, 18, 89, 17, 26, 26, 28, 26, 68, 28,
- 35, 35, 28, 35, 43, 43, 65, 59, 62, 44,
-
- 17, 17, 44, 17, 71, 43, 43, 17, 59, 62,
- 44, 17, 17, 44, 17, 71, 144, 144, 17, 27,
- 46, 46, 51, 46, 46, 51, 27, 27, 46, 73,
- 27, 63, 27, 27, 39, 34, 27, 27, 47, 47,
- 73, 47, 47, 30, 24, 51, 47, 23, 27, 27,
- 29, 53, 53, 29, 53, 56, 51, 21, 56, 69,
- 69, 56, 69, 60, 60, 61, 15, 75, 61, 72,
- 29, 29, 72, 29, 60, 60, 61, 29, 75, 61,
- 72, 29, 29, 72, 29, 11, 5, 70, 29, 31,
- 70, 31, 0, 74, 76, 70, 31, 31, 74, 82,
-
- 31, 83, 31, 31, 74, 76, 31, 31, 91, 74,
- 82, 91, 83, 0, 0, 0, 91, 0, 31, 31,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
+ 1, 2, 4, 162, 2, 4, 7, 2, 4, 6,
+ 6, 130, 6, 7, 7, 6, 8, 42, 9, 6,
+ 129, 45, 9, 8, 8, 9, 59, 10, 42, 6,
+ 6, 10, 45, 62, 10, 18, 18, 59, 18, 18,
+ 6, 6, 17, 18, 62, 17, 26, 26, 28, 26,
+ 111, 28, 35, 35, 28, 35, 43, 43, 44, 53,
+
+ 53, 44, 53, 17, 17, 110, 17, 43, 43, 44,
+ 17, 90, 44, 51, 17, 17, 51, 17, 144, 144,
+ 89, 17, 27, 46, 46, 68, 46, 46, 71, 27,
+ 27, 46, 65, 27, 63, 27, 27, 51, 27, 71,
+ 27, 27, 47, 47, 39, 47, 47, 34, 51, 30,
+ 47, 73, 27, 27, 29, 56, 24, 29, 56, 60,
+ 60, 56, 73, 61, 69, 69, 61, 69, 75, 23,
+ 60, 60, 21, 15, 61, 29, 29, 61, 29, 75,
+ 70, 72, 29, 70, 72, 11, 29, 29, 70, 29,
+ 5, 0, 72, 29, 31, 72, 31, 0, 74, 0,
+
+ 76, 31, 31, 74, 0, 31, 82, 31, 31, 74,
+ 31, 76, 31, 31, 74, 77, 77, 82, 77, 77,
+ 0, 0, 0, 77, 31, 31, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 41, 77, 77, 41, 77, 77, 85, 78, 78, 77,
- 78, 78, 0, 81, 0, 78, 81, 85, 0, 86,
- 41, 41, 0, 41, 86, 79, 79, 41, 79, 79,
- 86, 41, 41, 79, 41, 86, 81, 0, 41, 57,
-
- 80, 80, 57, 80, 80, 87, 88, 81, 80, 0,
- 84, 0, 93, 84, 94, 0, 87, 88, 95, 57,
- 57, 84, 57, 93, 84, 94, 57, 0, 96, 95,
- 57, 57, 97, 57, 0, 0, 98, 57, 64, 96,
- 64, 0, 99, 97, 0, 64, 64, 98, 100, 64,
- 101, 64, 64, 99, 102, 64, 64, 0, 103, 100,
- 104, 101, 105, 106, 107, 102, 108, 64, 64, 103,
- 109, 104, 112, 105, 106, 107, 115, 108, 116, 117,
- 118, 109, 119, 112, 120, 121, 124, 115, 125, 116,
- 117, 118, 126, 119, 127, 120, 121, 124, 128, 125,
-
- 131, 134, 135, 126, 137, 127, 138, 141, 142, 128,
- 148, 131, 134, 135, 149, 137, 152, 138, 141, 142,
- 157, 148, 0, 0, 0, 149, 0, 152, 0, 0,
- 0, 157, 161, 161, 161, 161, 161, 161, 162, 0,
- 0, 0, 162, 163, 163, 163, 163, 163, 163, 164,
- 164, 165, 165, 165, 165, 165, 165, 166, 166, 166,
- 166, 166, 166, 167, 167, 167, 0, 167, 167, 168,
- 0, 168, 0, 168, 168, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
-
- 160, 160, 160, 160, 160, 160, 160, 160, 160, 160,
- 160, 160, 160, 160, 160, 160
+ 32, 32, 32, 32, 32, 32, 32, 41, 78, 78,
+ 41, 78, 78, 83, 79, 79, 78, 79, 79, 85,
+ 81, 0, 79, 81, 83, 0, 0, 86, 41, 41,
+ 85, 41, 86, 80, 80, 41, 80, 80, 86, 41,
+
+ 41, 80, 41, 86, 81, 84, 41, 57, 84, 87,
+ 57, 88, 93, 94, 95, 81, 84, 0, 91, 84,
+ 87, 91, 88, 93, 94, 95, 91, 96, 57, 57,
+ 97, 57, 98, 99, 100, 57, 0, 101, 96, 57,
+ 57, 97, 57, 98, 99, 100, 57, 64, 101, 64,
+ 0, 102, 0, 103, 64, 64, 104, 105, 64, 106,
+ 64, 64, 102, 64, 103, 64, 64, 104, 105, 107,
+ 106, 108, 109, 112, 115, 116, 117, 64, 64, 118,
+ 107, 119, 108, 109, 112, 115, 116, 117, 120, 121,
+ 118, 124, 119, 125, 126, 127, 128, 131, 134, 120,
+
+ 121, 135, 124, 137, 125, 126, 127, 128, 131, 134,
+ 138, 141, 135, 142, 137, 148, 149, 152, 157, 0,
+ 158, 138, 141, 158, 142, 0, 148, 149, 152, 157,
+ 160, 0, 0, 160, 0, 158, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 160, 165, 165, 165, 165,
+ 165, 165, 165, 166, 0, 0, 0, 166, 166, 167,
+ 167, 167, 167, 167, 167, 167, 168, 0, 168, 169,
+ 169, 169, 169, 169, 169, 169, 170, 170, 170, 170,
+ 170, 170, 170, 171, 171, 171, 0, 171, 171, 171,
+ 172, 0, 172, 0, 172, 172, 172, 173, 173, 173,
+
+ 173, 173, 0, 173, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164, 164, 164, 164, 164,
+ 164, 164, 164, 164, 164, 164
} ;
/* The intent behind this definition is that it'll catch
@@ -673,7 +685,7 @@ Modify cmDependsFortranLexer.h:
/*--------------------------------------------------------------------------*/
-#line 670 "cmDependsFortranLexer.cxx"
+#line 678 "cmDependsFortranLexer.cxx"
#define INITIAL 0
#define free_fmt 1
@@ -796,7 +808,12 @@ static int input (yyscan_t yyscanner );
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
#endif
/* Copy whatever the last rule matched to the standard output. */
@@ -804,7 +821,7 @@ static int input (yyscan_t yyscanner );
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO fwrite( yytext, yyleng, 1, yyout )
+#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
#endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
@@ -815,7 +832,7 @@ static int input (yyscan_t yyscanner );
if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
int c = '*'; \
- int n; \
+ size_t n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
@@ -901,10 +918,10 @@ YY_DECL
register int yy_act;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-#line 75 "cmDependsFortranLexer.in.l"
+#line 71 "cmDependsFortranLexer.in.l"
-#line 901 "cmDependsFortranLexer.cxx"
+#line 914 "cmDependsFortranLexer.cxx"
if ( !yyg->yy_init )
{
@@ -958,13 +975,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 161 )
+ if ( yy_current_state >= 165 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_base[yy_current_state] != 476 );
+ while ( yy_base[yy_current_state] != 505 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -990,7 +1007,7 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 77 "cmDependsFortranLexer.in.l"
+#line 73 "cmDependsFortranLexer.in.l"
{
cmDependsFortranParser_StringStart(yyextra);
cmDependsFortranParser_SetOldStartcond(yyextra, YY_START);
@@ -999,7 +1016,7 @@ YY_RULE_SETUP
YY_BREAK
case 2:
YY_RULE_SETUP
-#line 83 "cmDependsFortranLexer.in.l"
+#line 79 "cmDependsFortranLexer.in.l"
{
cmDependsFortranParser_StringStart(yyextra);
cmDependsFortranParser_SetOldStartcond(yyextra, YY_START);
@@ -1007,10 +1024,10 @@ YY_RULE_SETUP
}
YY_BREAK
case 3:
-#line 90 "cmDependsFortranLexer.in.l"
+#line 86 "cmDependsFortranLexer.in.l"
case 4:
YY_RULE_SETUP
-#line 90 "cmDependsFortranLexer.in.l"
+#line 86 "cmDependsFortranLexer.in.l"
{
BEGIN(cmDependsFortranParser_GetOldStartcond(yyextra) );
yylvalp->string = strdup(cmDependsFortranParser_StringEnd(yyextra));
@@ -1018,17 +1035,17 @@ YY_RULE_SETUP
}
case 5:
/* rule 5 can match eol */
-#line 97 "cmDependsFortranLexer.in.l"
+#line 93 "cmDependsFortranLexer.in.l"
case 6:
/* rule 6 can match eol */
YY_RULE_SETUP
-#line 97 "cmDependsFortranLexer.in.l"
+#line 93 "cmDependsFortranLexer.in.l"
/* Ignore (continued strings, free fmt) */
YY_BREAK
case 7:
/* rule 7 can match eol */
YY_RULE_SETUP
-#line 99 "cmDependsFortranLexer.in.l"
+#line 95 "cmDependsFortranLexer.in.l"
{
if (cmDependsFortranParser_GetOldStartcond(yyextra) == fixed_fmt)
; /* Ignore (cont. strings, fixed fmt) */
@@ -1041,7 +1058,7 @@ YY_RULE_SETUP
case 8:
/* rule 8 can match eol */
YY_RULE_SETUP
-#line 109 "cmDependsFortranLexer.in.l"
+#line 105 "cmDependsFortranLexer.in.l"
{
unput ('\n');
BEGIN(INITIAL);
@@ -1049,7 +1066,7 @@ YY_RULE_SETUP
}
case 9:
YY_RULE_SETUP
-#line 115 "cmDependsFortranLexer.in.l"
+#line 111 "cmDependsFortranLexer.in.l"
{
cmDependsFortranParser_StringAppend(yyextra, yytext[0]);
}
@@ -1057,96 +1074,99 @@ YY_RULE_SETUP
case 10:
/* rule 10 can match eol */
YY_RULE_SETUP
-#line 119 "cmDependsFortranLexer.in.l"
+#line 115 "cmDependsFortranLexer.in.l"
{ return EOSTMT; } /* Treat comments like */
case 11:
/* rule 11 can match eol */
YY_RULE_SETUP
-#line 120 "cmDependsFortranLexer.in.l"
+#line 116 "cmDependsFortranLexer.in.l"
{ return EOSTMT; } /* empty lines */
case 12:
+/* rule 12 can match eol */
YY_RULE_SETUP
-#line 122 "cmDependsFortranLexer.in.l"
-{ return CPP_INCLUDE; }
+#line 118 "cmDependsFortranLexer.in.l"
+{
+ yytext[yyleng-1] = 0;
+ yylvalp->string = strdup(strchr(yytext, '<')+1);
+ return CPP_INCLUDE_ANGLE;
+}
case 13:
YY_RULE_SETUP
#line 123 "cmDependsFortranLexer.in.l"
-{ return F90PPR_INCLUDE; }
+{ return CPP_INCLUDE; }
case 14:
YY_RULE_SETUP
#line 124 "cmDependsFortranLexer.in.l"
-{ return COCO_INCLUDE; }
+{ return F90PPR_INCLUDE; }
case 15:
YY_RULE_SETUP
-#line 126 "cmDependsFortranLexer.in.l"
-{ return CPP_DEFINE; }
+#line 125 "cmDependsFortranLexer.in.l"
+{ return COCO_INCLUDE; }
case 16:
YY_RULE_SETUP
#line 127 "cmDependsFortranLexer.in.l"
-{ return F90PPR_DEFINE; }
+{ return CPP_DEFINE; }
case 17:
YY_RULE_SETUP
-#line 129 "cmDependsFortranLexer.in.l"
-{ return CPP_UNDEF; }
+#line 128 "cmDependsFortranLexer.in.l"
+{ return F90PPR_DEFINE; }
case 18:
YY_RULE_SETUP
#line 130 "cmDependsFortranLexer.in.l"
-{ return F90PPR_UNDEF; }
+{ return CPP_UNDEF; }
case 19:
YY_RULE_SETUP
-#line 132 "cmDependsFortranLexer.in.l"
-{ return CPP_IFDEF; }
+#line 131 "cmDependsFortranLexer.in.l"
+{ return F90PPR_UNDEF; }
case 20:
YY_RULE_SETUP
#line 133 "cmDependsFortranLexer.in.l"
-{ return CPP_IFNDEF; }
+{ return CPP_IFDEF; }
case 21:
YY_RULE_SETUP
#line 134 "cmDependsFortranLexer.in.l"
-{ return CPP_IF; }
+{ return CPP_IFNDEF; }
case 22:
YY_RULE_SETUP
#line 135 "cmDependsFortranLexer.in.l"
-{ return CPP_ELIF; }
+{ return CPP_IF; }
case 23:
YY_RULE_SETUP
#line 136 "cmDependsFortranLexer.in.l"
-{ return CPP_ELSE; }
+{ return CPP_ELIF; }
case 24:
YY_RULE_SETUP
#line 137 "cmDependsFortranLexer.in.l"
-{ return CPP_ENDIF; }
+{ return CPP_ELSE; }
case 25:
YY_RULE_SETUP
-#line 139 "cmDependsFortranLexer.in.l"
-{ return F90PPR_IFDEF; }
+#line 138 "cmDependsFortranLexer.in.l"
+{ return CPP_ENDIF; }
case 26:
YY_RULE_SETUP
#line 140 "cmDependsFortranLexer.in.l"
-{ return F90PPR_IFNDEF; }
+{ return F90PPR_IFDEF; }
case 27:
YY_RULE_SETUP
#line 141 "cmDependsFortranLexer.in.l"
-{ return F90PPR_IF; }
+{ return F90PPR_IFNDEF; }
case 28:
YY_RULE_SETUP
#line 142 "cmDependsFortranLexer.in.l"
-{ return F90PPR_ELIF; }
+{ return F90PPR_IF; }
case 29:
YY_RULE_SETUP
#line 143 "cmDependsFortranLexer.in.l"
-{ return F90PPR_ELSE; }
+{ return F90PPR_ELIF; }
case 30:
YY_RULE_SETUP
#line 144 "cmDependsFortranLexer.in.l"
-{ return F90PPR_ENDIF; }
-/* Line continuations, possible involving comments. */
+{ return F90PPR_ELSE; }
case 31:
-/* rule 31 can match eol */
YY_RULE_SETUP
-#line 147 "cmDependsFortranLexer.in.l"
-
- YY_BREAK
+#line 145 "cmDependsFortranLexer.in.l"
+{ return F90PPR_ENDIF; }
+/* Line continuations, possible involving comments. */
case 32:
/* rule 32 can match eol */
YY_RULE_SETUP
@@ -1154,59 +1174,65 @@ YY_RULE_SETUP
YY_BREAK
case 33:
+/* rule 33 can match eol */
YY_RULE_SETUP
-#line 150 "cmDependsFortranLexer.in.l"
-{ return COMMA; }
+#line 149 "cmDependsFortranLexer.in.l"
+
+ YY_BREAK
case 34:
YY_RULE_SETUP
-#line 152 "cmDependsFortranLexer.in.l"
-{ return DCOLON; }
+#line 151 "cmDependsFortranLexer.in.l"
+{ return COMMA; }
case 35:
-/* rule 35 can match eol */
YY_RULE_SETUP
-#line 154 "cmDependsFortranLexer.in.l"
-{ return GARBAGE; }
+#line 153 "cmDependsFortranLexer.in.l"
+{ return DCOLON; }
case 36:
+/* rule 36 can match eol */
YY_RULE_SETUP
-#line 156 "cmDependsFortranLexer.in.l"
-{ return ASSIGNMENT_OP; }
+#line 155 "cmDependsFortranLexer.in.l"
+{ return GARBAGE; }
case 37:
YY_RULE_SETUP
-#line 158 "cmDependsFortranLexer.in.l"
+#line 157 "cmDependsFortranLexer.in.l"
+{ return ASSIGNMENT_OP; }
+case 38:
+YY_RULE_SETUP
+#line 159 "cmDependsFortranLexer.in.l"
{
yylvalp->string = strdup(yytext);
return WORD;
}
-case 38:
+case 39:
YY_RULE_SETUP
-#line 163 "cmDependsFortranLexer.in.l"
+#line 164 "cmDependsFortranLexer.in.l"
{ return GARBAGE; }
-case 39:
-/* rule 39 can match eol */
+case 40:
+/* rule 40 can match eol */
YY_RULE_SETUP
-#line 165 "cmDependsFortranLexer.in.l"
+#line 166 "cmDependsFortranLexer.in.l"
{ return EOSTMT; }
-case 40:
+case 41:
YY_RULE_SETUP
-#line 168 "cmDependsFortranLexer.in.l"
+#line 169 "cmDependsFortranLexer.in.l"
/* Ignore */
YY_BREAK
-case 41:
-/* rule 41 can match eol */
+case 42:
+/* rule 42 can match eol */
YY_RULE_SETUP
-#line 169 "cmDependsFortranLexer.in.l"
+#line 170 "cmDependsFortranLexer.in.l"
/* Ignore line-endings preceeded by \ */
YY_BREAK
-case 42:
+case 43:
YY_RULE_SETUP
-#line 171 "cmDependsFortranLexer.in.l"
+#line 172 "cmDependsFortranLexer.in.l"
{ return *yytext; }
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(free_fmt):
case YY_STATE_EOF(fixed_fmt):
case YY_STATE_EOF(str_sq):
case YY_STATE_EOF(str_dq):
-#line 173 "cmDependsFortranLexer.in.l"
+#line 174 "cmDependsFortranLexer.in.l"
{
if(!cmDependsFortranParser_FilePop(yyextra) )
{
@@ -1214,12 +1240,12 @@ case YY_STATE_EOF(str_dq):
}
}
YY_BREAK
-case 43:
+case 44:
YY_RULE_SETUP
-#line 180 "cmDependsFortranLexer.in.l"
+#line 181 "cmDependsFortranLexer.in.l"
ECHO;
YY_BREAK
-#line 1247 "cmDependsFortranLexer.cxx"
+#line 1270 "cmDependsFortranLexer.cxx"
case YY_END_OF_BUFFER:
{
@@ -1512,7 +1538,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 161 )
+ if ( yy_current_state >= 165 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1541,11 +1567,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 161 )
+ if ( yy_current_state >= 165 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 160);
+ yy_is_jam = (yy_current_state == 164);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -1991,7 +2017,7 @@ YY_BUFFER_STATE cmDependsFortran_yy_scan_string (yyconst char * yystr , yyscan_t
}
/** Setup the input buffer state to scan the given bytes. The next call to cmDependsFortran_yylex() will
- * scan from a @e copy of @a yybytes.
+ * scan from a @e copy of @a bytes.
* @param yybytes the byte buffer to scan
* @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
* @param yyscanner The scanner object.
@@ -2154,7 +2180,7 @@ void cmDependsFortran_yyset_lineno (int line_number , yyscan_t yyscanner)
}
/** Set the current column.
- * @param column_no
+ * @param line_number
* @param yyscanner The scanner object.
*/
void cmDependsFortran_yyset_column (int column_no , yyscan_t yyscanner)
@@ -2374,7 +2400,7 @@ void cmDependsFortran_yyfree (void * ptr , yyscan_t)
#define YYTABLES_NAME "yytables"
-#line 180 "cmDependsFortranLexer.in.l"
+#line 181 "cmDependsFortranLexer.in.l"
diff --git a/Source/cmDependsFortranLexer.h b/Source/cmDependsFortranLexer.h
index 85e861d..8e24cfd 100644
--- a/Source/cmDependsFortranLexer.h
+++ b/Source/cmDependsFortranLexer.h
@@ -20,7 +20,7 @@
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 34
+#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif
@@ -65,7 +65,6 @@ typedef int flex_int32_t;
typedef unsigned char flex_uint8_t;
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
/* Limits of integral types. */
#ifndef INT8_MIN
@@ -96,6 +95,8 @@ typedef unsigned int flex_uint32_t;
#define UINT32_MAX (4294967295U)
#endif
+#endif /* ! C99 */
+
#endif /* ! FLEXINT_H */
#ifdef __cplusplus
@@ -138,7 +139,15 @@ typedef void* yyscan_t;
/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k.
+ * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
+ * Ditto for the __ia64__ case accordingly.
+ */
+#define YY_BUF_SIZE 32768
+#else
#define YY_BUF_SIZE 16384
+#endif /* __ia64__ */
#endif
#ifndef YY_TYPEDEF_YY_BUFFER_STATE
@@ -146,13 +155,6 @@ typedef void* yyscan_t;
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- * Given that the standard has decreed that size_t exists since 1989,
- * I guess we can afford to depend on it. Manoj.
- */
-
#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
@@ -304,7 +306,12 @@ static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
+#ifdef __ia64__
+/* On IA-64, the buffer size is 16k, not 8k */
+#define YY_READ_BUF_SIZE 16384
+#else
#define YY_READ_BUF_SIZE 8192
+#endif /* __ia64__ */
#endif
/* Number of entries by which start-condition stack grows. */
diff --git a/Source/cmDependsFortranLexer.in.l b/Source/cmDependsFortranLexer.in.l
index af8e37d..40e80b7 100644
--- a/Source/cmDependsFortranLexer.in.l
+++ b/Source/cmDependsFortranLexer.in.l
@@ -115,6 +115,11 @@ Modify cmDependsFortranLexer.h:
!.*\n { return EOSTMT; } /* Treat comments like */
<fixed_fmt>^[cC*dD].*\n { return EOSTMT; } /* empty lines */
+^[ \t]*#[ \t]*include[ \t]*<[^>]+> {
+ yytext[yyleng-1] = 0;
+ yylvalp->string = strdup(strchr(yytext, '<')+1);
+ return CPP_INCLUDE_ANGLE;
+}
^[ \t]*#[ \t]*include { return CPP_INCLUDE; }
\$[ \t]*include { return F90PPR_INCLUDE; }
\?\?[ \t]*include { return COCO_INCLUDE; }
diff --git a/Source/cmDependsFortranParser.cxx b/Source/cmDependsFortranParser.cxx
index ea31d3a..7b49a9c 100644
--- a/Source/cmDependsFortranParser.cxx
+++ b/Source/cmDependsFortranParser.cxx
@@ -1,9 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.4.1. */
+/* A Bison parser, made by GNU Bison 2.5. */
-/* Skeleton implementation for Bison's Yacc-like parsers in C
+/* Bison implementation for Yacc-like parsers in C
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -45,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "2.5"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -74,7 +73,7 @@
/* Copy the first part of user declarations. */
-/* Line 189 of yacc.c */
+/* Line 268 of yacc.c */
#line 1 "cmDependsFortranParser.y"
/*============================================================================
@@ -161,8 +160,8 @@ static bool cmDependsFortranParserIsKeyword(const char* word,
#endif
-/* Line 189 of yacc.c */
-#line 172 "cmDependsFortranParser.cxx"
+/* Line 268 of yacc.c */
+#line 165 "cmDependsFortranParser.cxx"
/* Enabling traces. */
#ifndef YYDEBUG
@@ -216,7 +215,8 @@ static bool cmDependsFortranParserIsKeyword(const char* word,
CPP_TOENDL = 282,
UNTERMINATED_STRING = 283,
STRING = 284,
- WORD = 285
+ WORD = 285,
+ CPP_INCLUDE_ANGLE = 286
};
#endif
/* Tokens. */
@@ -248,6 +248,7 @@ static bool cmDependsFortranParserIsKeyword(const char* word,
#define UNTERMINATED_STRING 283
#define STRING 284
#define WORD 285
+#define CPP_INCLUDE_ANGLE 286
@@ -256,15 +257,15 @@ static bool cmDependsFortranParserIsKeyword(const char* word,
typedef union YYSTYPE
{
-/* Line 214 of yacc.c */
-#line 94 "cmDependsFortranParser.y"
+/* Line 293 of yacc.c */
+#line 89 "cmDependsFortranParser.y"
char* string;
-/* Line 214 of yacc.c */
-#line 274 "cmDependsFortranParser.cxx"
+/* Line 293 of yacc.c */
+#line 269 "cmDependsFortranParser.cxx"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -275,8 +276,8 @@ typedef union YYSTYPE
/* Copy the second part of user declarations. */
-/* Line 264 of yacc.c */
-#line 286 "cmDependsFortranParser.cxx"
+/* Line 343 of yacc.c */
+#line 281 "cmDependsFortranParser.cxx"
#ifdef short
# undef short
@@ -326,7 +327,7 @@ typedef short int yytype_int16;
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
#ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
# define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -379,11 +380,11 @@ YYID (yyi)
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
# endif
# endif
# endif
@@ -406,24 +407,24 @@ YYID (yyi)
# ifndef YYSTACK_ALLOC_MAXIMUM
# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
# endif
-# if (defined __cplusplus && ! defined _STDLIB_H \
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
&& ! ((defined YYMALLOC || defined malloc) \
&& (defined YYFREE || defined free)))
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-# ifndef _STDLIB_H
-# define _STDLIB_H 1
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
# endif
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
-# if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# ifndef YYFREE
# define YYFREE free
-# if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
|| defined __cplusplus || defined _MSC_VER)
void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
@@ -452,23 +453,7 @@ union yyalloc
((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ YYSTACK_GAP_MAXIMUM)
-/* Copy COUNT objects from FROM to TO. The source and destination do
- not overlap. */
-# ifndef YYCOPY
-# if defined __GNUC__ && 1 < __GNUC__
-# define YYCOPY(To, From, Count) \
- __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-# else
-# define YYCOPY(To, From, Count) \
- do \
- { \
- YYSIZE_T yyi; \
- for (yyi = 0; yyi < (Count); yyi++) \
- (To)[yyi] = (From)[yyi]; \
- } \
- while (YYID (0))
-# endif
-# endif
+# define YYCOPY_NEEDED 1
/* Relocate STACK from its old location to the new one. The
local variables YYSIZE and YYSTACKSIZE give the old and new number of
@@ -488,23 +473,43 @@ union yyalloc
#endif
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from FROM to TO. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(To, From, Count) \
+ __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+# else
+# define YYCOPY(To, From, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (To)[yyi] = (From)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 271
+#define YYLAST 276
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 31
+#define YYNTOKENS 32
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 16
/* YYNRULES -- Number of rules. */
-#define YYNRULES 52
+#define YYNRULES 53
/* YYNRULES -- Number of states. */
-#define YYNSTATES 94
+#define YYNSTATES 97
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 285
+#define YYMAXUTOK 286
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -540,7 +545,7 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30
+ 25, 26, 27, 28, 29, 30, 31
};
#if YYDEBUG
@@ -549,43 +554,43 @@ static const yytype_uint8 yytranslate[] =
static const yytype_uint8 yyprhs[] =
{
0, 0, 3, 4, 7, 9, 11, 16, 19, 24,
- 30, 38, 43, 48, 53, 58, 63, 68, 72, 76,
- 80, 84, 89, 93, 95, 97, 99, 101, 103, 105,
- 107, 109, 111, 113, 115, 117, 119, 121, 123, 125,
- 127, 129, 131, 133, 135, 136, 139, 141, 143, 145,
- 147, 149, 151
+ 30, 38, 43, 47, 52, 57, 62, 67, 72, 76,
+ 80, 84, 88, 93, 97, 99, 101, 103, 105, 107,
+ 109, 111, 113, 115, 117, 119, 121, 123, 125, 127,
+ 129, 131, 133, 135, 137, 139, 140, 143, 145, 147,
+ 149, 151, 153, 155
};
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int8 yyrhs[] =
{
- 32, 0, -1, -1, 32, 33, -1, 35, -1, 34,
- -1, 30, 4, 45, 3, -1, 30, 3, -1, 30,
- 30, 45, 3, -1, 30, 26, 30, 45, 3, -1,
- 30, 25, 30, 26, 30, 45, 3, -1, 30, 29,
- 45, 3, -1, 36, 29, 45, 3, -1, 37, 30,
- 45, 3, -1, 38, 30, 45, 3, -1, 39, 30,
- 45, 3, -1, 40, 30, 45, 3, -1, 41, 45,
- 3, -1, 42, 45, 3, -1, 43, 45, 3, -1,
- 44, 45, 3, -1, 30, 5, 45, 3, -1, 5,
- 45, 3, -1, 3, -1, 1, -1, 6, -1, 7,
- -1, 8, -1, 10, -1, 9, -1, 12, -1, 11,
- -1, 13, -1, 19, -1, 14, -1, 20, -1, 15,
- -1, 21, -1, 17, -1, 23, -1, 16, -1, 22,
- -1, 18, -1, 24, -1, -1, 45, 46, -1, 30,
- -1, 29, -1, 5, -1, 4, -1, 26, -1, 25,
- -1, 28, -1
+ 33, 0, -1, -1, 33, 34, -1, 36, -1, 35,
+ -1, 30, 4, 46, 3, -1, 30, 3, -1, 30,
+ 30, 46, 3, -1, 30, 26, 30, 46, 3, -1,
+ 30, 25, 30, 26, 30, 46, 3, -1, 30, 29,
+ 46, 3, -1, 31, 46, 3, -1, 37, 29, 46,
+ 3, -1, 38, 30, 46, 3, -1, 39, 30, 46,
+ 3, -1, 40, 30, 46, 3, -1, 41, 30, 46,
+ 3, -1, 42, 46, 3, -1, 43, 46, 3, -1,
+ 44, 46, 3, -1, 45, 46, 3, -1, 30, 5,
+ 46, 3, -1, 5, 46, 3, -1, 3, -1, 1,
+ -1, 6, -1, 7, -1, 8, -1, 10, -1, 9,
+ -1, 12, -1, 11, -1, 13, -1, 19, -1, 14,
+ -1, 20, -1, 15, -1, 21, -1, 17, -1, 23,
+ -1, 16, -1, 22, -1, 18, -1, 24, -1, -1,
+ 46, 47, -1, 30, -1, 29, -1, 5, -1, 4,
+ -1, 26, -1, 25, -1, 28, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 115, 115, 115, 117, 117, 119, 125, 135, 165,
- 176, 189, 200, 207, 213, 219, 225, 231, 236, 241,
- 246, 251, 255, 256, 257, 262, 262, 262, 263, 263,
- 264, 264, 265, 265, 266, 266, 267, 267, 268, 268,
- 269, 269, 270, 270, 271, 271, 274, 275, 276, 277,
- 278, 279, 280
+ 0, 111, 111, 111, 113, 113, 115, 121, 131, 161,
+ 172, 185, 196, 203, 210, 216, 222, 228, 234, 239,
+ 244, 249, 254, 258, 259, 260, 265, 265, 265, 266,
+ 266, 267, 267, 268, 268, 269, 269, 270, 270, 271,
+ 271, 272, 272, 273, 273, 274, 274, 277, 278, 279,
+ 280, 281, 282, 283
};
#endif
@@ -600,9 +605,9 @@ static const char *const yytname[] =
"CPP_IF", "CPP_ELSE", "CPP_ELIF", "CPP_ENDIF", "F90PPR_IFDEF",
"F90PPR_IFNDEF", "F90PPR_IF", "F90PPR_ELSE", "F90PPR_ELIF",
"F90PPR_ENDIF", "COMMA", "DCOLON", "CPP_TOENDL", "UNTERMINATED_STRING",
- "STRING", "WORD", "$accept", "code", "stmt", "assignment_stmt",
- "keyword_stmt", "include", "define", "undef", "ifdef", "ifndef", "if",
- "elif", "else", "endif", "other", "misc_code", 0
+ "STRING", "WORD", "CPP_INCLUDE_ANGLE", "$accept", "code", "stmt",
+ "assignment_stmt", "keyword_stmt", "include", "define", "undef", "ifdef",
+ "ifndef", "if", "elif", "else", "endif", "other", "misc_code", 0
};
#endif
@@ -614,163 +619,168 @@ static const yytype_uint16 yytoknum[] =
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285
+ 285, 286
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
- 0, 31, 32, 32, 33, 33, 34, 35, 35, 35,
- 35, 35, 35, 35, 35, 35, 35, 35, 35, 35,
- 35, 35, 35, 35, 35, 36, 36, 36, 37, 37,
- 38, 38, 39, 39, 40, 40, 41, 41, 42, 42,
- 43, 43, 44, 44, 45, 45, 46, 46, 46, 46,
- 46, 46, 46
+ 0, 32, 33, 33, 34, 34, 35, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 37, 37, 37, 38,
+ 38, 39, 39, 40, 40, 41, 41, 42, 42, 43,
+ 43, 44, 44, 45, 45, 46, 46, 47, 47, 47,
+ 47, 47, 47, 47
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
static const yytype_uint8 yyr2[] =
{
0, 2, 0, 2, 1, 1, 4, 2, 4, 5,
- 7, 4, 4, 4, 4, 4, 4, 3, 3, 3,
- 3, 4, 3, 1, 1, 1, 1, 1, 1, 1,
+ 7, 4, 3, 4, 4, 4, 4, 4, 3, 3,
+ 3, 3, 4, 3, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 2, 1, 1, 1, 1,
- 1, 1, 1
+ 1, 1, 1, 1, 1, 0, 2, 1, 1, 1,
+ 1, 1, 1, 1
};
-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
- STATE-NUM when YYTABLE doesn't specify something else to do. Zero
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
means the default is an error. */
static const yytype_uint8 yydefact[] =
{
- 2, 0, 1, 24, 23, 44, 25, 26, 27, 29,
- 28, 31, 30, 32, 34, 36, 40, 38, 42, 33,
- 35, 37, 41, 39, 43, 0, 3, 5, 4, 0,
- 0, 0, 0, 0, 44, 44, 44, 44, 0, 7,
- 44, 44, 0, 0, 44, 44, 44, 44, 44, 44,
- 44, 0, 0, 0, 0, 22, 49, 48, 51, 50,
- 52, 47, 46, 45, 0, 0, 0, 44, 0, 0,
- 0, 0, 0, 0, 0, 17, 18, 19, 20, 6,
- 21, 0, 0, 11, 8, 12, 13, 14, 15, 16,
- 44, 9, 0, 10
+ 2, 0, 1, 25, 24, 45, 26, 27, 28, 30,
+ 29, 32, 31, 33, 35, 37, 41, 39, 43, 34,
+ 36, 38, 42, 40, 44, 0, 45, 3, 5, 4,
+ 0, 0, 0, 0, 0, 45, 45, 45, 45, 0,
+ 7, 45, 45, 0, 0, 45, 45, 0, 45, 45,
+ 45, 45, 45, 0, 0, 0, 0, 23, 50, 49,
+ 52, 51, 53, 48, 47, 46, 0, 0, 0, 45,
+ 0, 0, 12, 0, 0, 0, 0, 0, 18, 19,
+ 20, 21, 6, 22, 0, 0, 11, 8, 13, 14,
+ 15, 16, 17, 45, 9, 0, 10
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- -1, 1, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 63
+ -1, 1, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 65
};
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -35
+#define YYPACT_NINF -29
static const yytype_int16 yypact[] =
{
- -35, 29, -35, -35, -35, -35, -35, -35, -35, -35,
- -35, -35, -35, -35, -35, -35, -35, -35, -35, -35,
- -35, -35, -35, -35, -35, 241, -35, -35, -35, -25,
- -22, -21, -13, -12, -35, -35, -35, -35, 57, -35,
- -35, -35, -11, -10, -35, -35, -35, -35, -35, -35,
- -35, 63, 69, 75, 103, -35, -35, -35, -35, -35,
- -35, -35, -35, -35, 109, 115, -5, -35, 121, 149,
- 155, 161, 167, 195, 201, -35, -35, -35, -35, -35,
- -35, -8, 207, -35, -35, -35, -35, -35, -35, -35,
- -35, -35, 213, -35
+ -29, 39, -29, -29, -29, -29, -29, -29, -29, -29,
+ -29, -29, -29, -29, -29, -29, -29, -29, -29, -29,
+ -29, -29, -29, -29, -29, 246, -29, -29, -29, -29,
+ -28, -27, -22, -17, -16, -29, -29, -29, -29, 2,
+ -29, -29, -29, -13, -12, -29, -29, 61, -29, -29,
+ -29, -29, -29, 68, 74, 80, 108, -29, -29, -29,
+ -29, -29, -29, -29, -29, -29, 114, 120, -24, -29,
+ 126, 154, -29, 160, 166, 172, 200, 206, -29, -29,
+ -29, -29, -29, -29, -9, 212, -29, -29, -29, -29,
+ -29, -29, -29, -29, -29, 218, -29
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -35, -35, -35, -35, -35, -35, -35, -35, -35, -35,
- -35, -35, -35, -35, -34, -35
+ -29, -29, -29, -29, -29, -29, -29, -29, -29, -29,
+ -29, -29, -29, -29, -26, -29
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule which
- number is the opposite. If zero, do what YYDEFACT says.
- If YYTABLE_NINF, syntax error. */
+ number is the opposite. If YYTABLE_NINF, syntax error. */
#define YYTABLE_NINF -1
static const yytype_uint8 yytable[] =
{
- 51, 52, 53, 54, 46, 0, 64, 65, 47, 48,
- 68, 69, 70, 71, 72, 73, 74, 49, 50, 66,
- 67, 81, 90, 0, 0, 0, 0, 0, 0, 2,
- 3, 0, 4, 82, 5, 6, 7, 8, 9, 10,
+ 47, 48, 84, 49, 0, 57, 58, 59, 50, 53,
+ 54, 55, 56, 51, 52, 66, 67, 68, 69, 70,
+ 71, 93, 73, 74, 75, 76, 77, 60, 61, 0,
+ 62, 63, 64, 0, 0, 0, 0, 0, 0, 2,
+ 3, 0, 4, 85, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 0, 0, 92, 0, 0, 25,
- 55, 56, 57, 0, 0, 0, 75, 56, 57, 0,
- 0, 0, 76, 56, 57, 0, 0, 0, 77, 56,
- 57, 0, 58, 59, 0, 60, 61, 62, 58, 59,
- 0, 60, 61, 62, 58, 59, 0, 60, 61, 62,
- 58, 59, 0, 60, 61, 62, 78, 56, 57, 0,
- 0, 0, 79, 56, 57, 0, 0, 0, 80, 56,
- 57, 0, 0, 0, 83, 56, 57, 0, 58, 59,
- 0, 60, 61, 62, 58, 59, 0, 60, 61, 62,
- 58, 59, 0, 60, 61, 62, 58, 59, 0, 60,
- 61, 62, 84, 56, 57, 0, 0, 0, 85, 56,
- 57, 0, 0, 0, 86, 56, 57, 0, 0, 0,
- 87, 56, 57, 0, 58, 59, 0, 60, 61, 62,
- 58, 59, 0, 60, 61, 62, 58, 59, 0, 60,
- 61, 62, 58, 59, 0, 60, 61, 62, 88, 56,
- 57, 0, 0, 0, 89, 56, 57, 0, 0, 0,
- 91, 56, 57, 0, 0, 0, 93, 56, 57, 0,
- 58, 59, 0, 60, 61, 62, 58, 59, 0, 60,
- 61, 62, 58, 59, 0, 60, 61, 62, 58, 59,
- 0, 60, 61, 62, 39, 40, 41, 0, 0, 0,
+ 21, 22, 23, 24, 72, 58, 59, 95, 0, 25,
+ 26, 78, 58, 59, 0, 0, 0, 79, 58, 59,
+ 0, 0, 0, 80, 58, 59, 60, 61, 0, 62,
+ 63, 64, 0, 60, 61, 0, 62, 63, 64, 60,
+ 61, 0, 62, 63, 64, 60, 61, 0, 62, 63,
+ 64, 81, 58, 59, 0, 0, 0, 82, 58, 59,
+ 0, 0, 0, 83, 58, 59, 0, 0, 0, 86,
+ 58, 59, 0, 60, 61, 0, 62, 63, 64, 60,
+ 61, 0, 62, 63, 64, 60, 61, 0, 62, 63,
+ 64, 60, 61, 0, 62, 63, 64, 87, 58, 59,
+ 0, 0, 0, 88, 58, 59, 0, 0, 0, 89,
+ 58, 59, 0, 0, 0, 90, 58, 59, 0, 60,
+ 61, 0, 62, 63, 64, 60, 61, 0, 62, 63,
+ 64, 60, 61, 0, 62, 63, 64, 60, 61, 0,
+ 62, 63, 64, 91, 58, 59, 0, 0, 0, 92,
+ 58, 59, 0, 0, 0, 94, 58, 59, 0, 0,
+ 0, 96, 58, 59, 0, 60, 61, 0, 62, 63,
+ 64, 60, 61, 0, 62, 63, 64, 60, 61, 0,
+ 62, 63, 64, 60, 61, 0, 62, 63, 64, 40,
+ 41, 42, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 42, 43, 0, 0,
- 44, 45
+ 0, 43, 44, 0, 0, 45, 46
};
+#define yypact_value_is_default(yystate) \
+ ((yystate) == (-29))
+
+#define yytable_value_is_error(yytable_value) \
+ YYID (0)
+
static const yytype_int8 yycheck[] =
{
- 34, 35, 36, 37, 29, -1, 40, 41, 30, 30,
- 44, 45, 46, 47, 48, 49, 50, 30, 30, 30,
- 30, 26, 30, -1, -1, -1, -1, -1, -1, 0,
- 1, -1, 3, 67, 5, 6, 7, 8, 9, 10,
+ 26, 29, 26, 30, -1, 3, 4, 5, 30, 35,
+ 36, 37, 38, 30, 30, 41, 42, 30, 30, 45,
+ 46, 30, 48, 49, 50, 51, 52, 25, 26, -1,
+ 28, 29, 30, -1, -1, -1, -1, -1, -1, 0,
+ 1, -1, 3, 69, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, -1, -1, 90, -1, -1, 30,
- 3, 4, 5, -1, -1, -1, 3, 4, 5, -1,
- -1, -1, 3, 4, 5, -1, -1, -1, 3, 4,
- 5, -1, 25, 26, -1, 28, 29, 30, 25, 26,
- -1, 28, 29, 30, 25, 26, -1, 28, 29, 30,
- 25, 26, -1, 28, 29, 30, 3, 4, 5, -1,
- -1, -1, 3, 4, 5, -1, -1, -1, 3, 4,
- 5, -1, -1, -1, 3, 4, 5, -1, 25, 26,
- -1, 28, 29, 30, 25, 26, -1, 28, 29, 30,
- 25, 26, -1, 28, 29, 30, 25, 26, -1, 28,
- 29, 30, 3, 4, 5, -1, -1, -1, 3, 4,
- 5, -1, -1, -1, 3, 4, 5, -1, -1, -1,
- 3, 4, 5, -1, 25, 26, -1, 28, 29, 30,
- 25, 26, -1, 28, 29, 30, 25, 26, -1, 28,
- 29, 30, 25, 26, -1, 28, 29, 30, 3, 4,
- 5, -1, -1, -1, 3, 4, 5, -1, -1, -1,
- 3, 4, 5, -1, -1, -1, 3, 4, 5, -1,
- 25, 26, -1, 28, 29, 30, 25, 26, -1, 28,
- 29, 30, 25, 26, -1, 28, 29, 30, 25, 26,
- -1, 28, 29, 30, 3, 4, 5, -1, -1, -1,
+ 21, 22, 23, 24, 3, 4, 5, 93, -1, 30,
+ 31, 3, 4, 5, -1, -1, -1, 3, 4, 5,
+ -1, -1, -1, 3, 4, 5, 25, 26, -1, 28,
+ 29, 30, -1, 25, 26, -1, 28, 29, 30, 25,
+ 26, -1, 28, 29, 30, 25, 26, -1, 28, 29,
+ 30, 3, 4, 5, -1, -1, -1, 3, 4, 5,
+ -1, -1, -1, 3, 4, 5, -1, -1, -1, 3,
+ 4, 5, -1, 25, 26, -1, 28, 29, 30, 25,
+ 26, -1, 28, 29, 30, 25, 26, -1, 28, 29,
+ 30, 25, 26, -1, 28, 29, 30, 3, 4, 5,
+ -1, -1, -1, 3, 4, 5, -1, -1, -1, 3,
+ 4, 5, -1, -1, -1, 3, 4, 5, -1, 25,
+ 26, -1, 28, 29, 30, 25, 26, -1, 28, 29,
+ 30, 25, 26, -1, 28, 29, 30, 25, 26, -1,
+ 28, 29, 30, 3, 4, 5, -1, -1, -1, 3,
+ 4, 5, -1, -1, -1, 3, 4, 5, -1, -1,
+ -1, 3, 4, 5, -1, 25, 26, -1, 28, 29,
+ 30, 25, 26, -1, 28, 29, 30, 25, 26, -1,
+ 28, 29, 30, 25, 26, -1, 28, 29, 30, 3,
+ 4, 5, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 25, 26, -1, -1,
- 29, 30
+ -1, 25, 26, -1, -1, 29, 30
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
- 0, 32, 0, 1, 3, 5, 6, 7, 8, 9,
+ 0, 33, 0, 1, 3, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 30, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 3,
- 4, 5, 25, 26, 29, 30, 29, 30, 30, 30,
- 30, 45, 45, 45, 45, 3, 4, 5, 25, 26,
- 28, 29, 30, 46, 45, 45, 30, 30, 45, 45,
- 45, 45, 45, 45, 45, 3, 3, 3, 3, 3,
- 3, 26, 45, 3, 3, 3, 3, 3, 3, 3,
- 30, 3, 45, 3
+ 20, 21, 22, 23, 24, 30, 31, 34, 35, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 3, 4, 5, 25, 26, 29, 30, 46, 29, 30,
+ 30, 30, 30, 46, 46, 46, 46, 3, 4, 5,
+ 25, 26, 28, 29, 30, 47, 46, 46, 30, 30,
+ 46, 46, 3, 46, 46, 46, 46, 46, 3, 3,
+ 3, 3, 3, 3, 26, 46, 3, 3, 3, 3,
+ 3, 3, 3, 30, 3, 46, 3
};
#define yyerrok (yyerrstatus = 0)
@@ -785,9 +795,18 @@ static const yytype_uint8 yystos[] =
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
#define YYRECOVERING() (!!yyerrstatus)
@@ -797,7 +816,6 @@ do \
{ \
yychar = (Token); \
yylval = (Value); \
- yytoken = YYTRANSLATE (yychar); \
YYPOPSTACK (1); \
goto yybackup; \
} \
@@ -839,19 +857,10 @@ while (YYID (0))
#endif
-/* YY_LOCATION_PRINT -- Print the location on the stream.
- This macro was not mandated originally: define only if we know
- we won't break user code: when these are the locations we know. */
+/* This macro is provided for backward compatibility. */
#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
-# define YY_LOCATION_PRINT(File, Loc) \
- fprintf (File, "%d.%d-%d.%d", \
- (Loc).first_line, (Loc).first_column, \
- (Loc).last_line, (Loc).last_column)
-# else
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-# endif
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
#endif
@@ -1043,7 +1052,6 @@ int yydebug;
# define YYMAXDEPTH 10000
#endif
-
#if YYERROR_VERBOSE
@@ -1146,115 +1154,142 @@ yytnamerr (char *yyres, const char *yystr)
}
# endif
-/* Copy into YYRESULT an error message about the unexpected token
- YYCHAR while in state YYSTATE. Return the number of bytes copied,
- including the terminating null byte. If YYRESULT is null, do not
- copy anything; just return the number of bytes that would be
- copied. As a special case, return 0 if an ordinary "syntax error"
- message will do. Return YYSIZE_MAXIMUM if overflow occurs during
- size calculation. */
-static YYSIZE_T
-yysyntax_error (char *yyresult, int yystate, int yychar)
-{
- int yyn = yypact[yystate];
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
- if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
- return 0;
- else
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ YYSIZE_T yysize1;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = 0;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
+
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
{
- int yytype = YYTRANSLATE (yychar);
- YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
- YYSIZE_T yysize = yysize0;
- YYSIZE_T yysize1;
- int yysize_overflow = 0;
- enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
- char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
- int yyx;
-
-# if 0
- /* This is so xgettext sees the translatable formats that are
- constructed on the fly. */
- YY_("syntax error, unexpected %s");
- YY_("syntax error, unexpected %s, expecting %s");
- YY_("syntax error, unexpected %s, expecting %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s");
- YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
-# endif
- char *yyfmt;
- char const *yyf;
- static char const yyunexpected[] = "syntax error, unexpected %s";
- static char const yyexpecting[] = ", expecting %s";
- static char const yyor[] = " or %s";
- char yyformat[sizeof yyunexpected
- + sizeof yyexpecting - 1
- + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
- * (sizeof yyor - 1))];
- char const *yyprefix = yyexpecting;
-
- /* Start YYX at -YYN if negative to avoid negative indexes in
- YYCHECK. */
- int yyxbegin = yyn < 0 ? -yyn : 0;
-
- /* Stay within bounds of both yycheck and yytname. */
- int yychecklim = YYLAST - yyn + 1;
- int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
- int yycount = 1;
-
- yyarg[0] = yytname[yytype];
- yyfmt = yystpcpy (yyformat, yyunexpected);
-
- for (yyx = yyxbegin; yyx < yyxend; ++yyx)
- if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
- {
- if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
+ {
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
{
- yycount = 1;
- yysize = yysize0;
- yyformat[sizeof yyunexpected - 1] = '\0';
- break;
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
}
- yyarg[yycount++] = yytname[yyx];
- yysize1 = yysize + yytnamerr (0, yytname[yyx]);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
- yyfmt = yystpcpy (yyfmt, yyprefix);
- yyprefix = yyor;
- }
+ }
+ }
+
+ switch (yycount)
+ {
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
- yyf = YY_(yyformat);
- yysize1 = yysize + yystrlen (yyf);
- yysize_overflow |= (yysize1 < yysize);
- yysize = yysize1;
+ yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
- if (yysize_overflow)
- return YYSIZE_MAXIMUM;
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
- if (yyresult)
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
{
- /* Avoid sprintf, as that infringes on the user's name space.
- Don't have undefined behavior even if the translation
- produced a string with the wrong number of "%s"s. */
- char *yyp = yyresult;
- int yyi = 0;
- while ((*yyp = *yyf) != '\0')
- {
- if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
- {
- yyp += yytnamerr (yyp, yyarg[yyi++]);
- yyf += 2;
- }
- else
- {
- yyp++;
- yyf++;
- }
- }
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
}
- return yysize;
- }
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
}
#endif /* YYERROR_VERBOSE */
-
/*-----------------------------------------------.
| Release the memory associated to this symbol. |
@@ -1287,6 +1322,7 @@ yydestruct (yymsg, yytype, yyvaluep)
}
}
+
/* Prevent warnings from -Wmissing-prototypes. */
#ifdef YYPARSE_PARAM
#if defined __STDC__ || defined __cplusplus
@@ -1303,12 +1339,9 @@ int yyparse ();
#endif /* ! YYPARSE_PARAM */
-
-
-
-/*-------------------------.
-| yyparse or yypush_parse. |
-`-------------------------*/
+/*----------.
+| yyparse. |
+`----------*/
#ifdef YYPARSE_PARAM
#if (defined __STDC__ || defined __C99__FUNC__ \
@@ -1495,7 +1528,7 @@ yybackup:
/* First try to decide what to do without reference to lookahead token. */
yyn = yypact[yystate];
- if (yyn == YYPACT_NINF)
+ if (yypact_value_is_default (yyn))
goto yydefault;
/* Not known => get a lookahead token if don't already have one. */
@@ -1526,7 +1559,7 @@ yybackup:
yyn = yytable[yyn];
if (yyn <= 0)
{
- if (yyn == 0 || yyn == YYTABLE_NINF)
+ if (yytable_value_is_error (yyn))
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
@@ -1582,8 +1615,8 @@ yyreduce:
{
case 6:
-/* Line 1455 of yacc.c */
-#line 120 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 116 "cmDependsFortranParser.y"
{
free((yyvsp[(1) - (4)].string));
}
@@ -1591,8 +1624,8 @@ yyreduce:
case 7:
-/* Line 1455 of yacc.c */
-#line 126 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 122 "cmDependsFortranParser.y"
{
if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (2)].string), "interface"))
{
@@ -1606,8 +1639,8 @@ yyreduce:
case 8:
-/* Line 1455 of yacc.c */
-#line 136 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 132 "cmDependsFortranParser.y"
{
if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (4)].string), "use"))
{
@@ -1641,8 +1674,8 @@ yyreduce:
case 9:
-/* Line 1455 of yacc.c */
-#line 166 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 162 "cmDependsFortranParser.y"
{
if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (5)].string), "use"))
{
@@ -1657,8 +1690,8 @@ yyreduce:
case 10:
-/* Line 1455 of yacc.c */
-#line 177 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 173 "cmDependsFortranParser.y"
{
if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (7)].string), "use") &&
cmDependsFortranParserIsKeyword((yyvsp[(3) - (7)].string), "non_intrinsic") )
@@ -1675,8 +1708,8 @@ yyreduce:
case 11:
-/* Line 1455 of yacc.c */
-#line 190 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 186 "cmDependsFortranParser.y"
{
if (cmDependsFortranParserIsKeyword((yyvsp[(1) - (4)].string), "include"))
{
@@ -1691,8 +1724,20 @@ yyreduce:
case 12:
-/* Line 1455 of yacc.c */
-#line 201 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 197 "cmDependsFortranParser.y"
+ {
+ cmDependsFortranParser* parser =
+ cmDependsFortran_yyget_extra(yyscanner);
+ cmDependsFortranParser_RuleInclude(parser, (yyvsp[(1) - (3)].string));
+ free((yyvsp[(1) - (3)].string));
+ }
+ break;
+
+ case 13:
+
+/* Line 1806 of yacc.c */
+#line 204 "cmDependsFortranParser.y"
{
cmDependsFortranParser* parser =
cmDependsFortran_yyget_extra(yyscanner);
@@ -1701,10 +1746,10 @@ yyreduce:
}
break;
- case 13:
+ case 14:
-/* Line 1455 of yacc.c */
-#line 208 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 211 "cmDependsFortranParser.y"
{
cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner);
cmDependsFortranParser_RuleDefine(parser, (yyvsp[(2) - (4)].string));
@@ -1712,10 +1757,10 @@ yyreduce:
}
break;
- case 14:
+ case 15:
-/* Line 1455 of yacc.c */
-#line 214 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 217 "cmDependsFortranParser.y"
{
cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner);
cmDependsFortranParser_RuleUndef(parser, (yyvsp[(2) - (4)].string));
@@ -1723,10 +1768,10 @@ yyreduce:
}
break;
- case 15:
+ case 16:
-/* Line 1455 of yacc.c */
-#line 220 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 223 "cmDependsFortranParser.y"
{
cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner);
cmDependsFortranParser_RuleIfdef(parser, (yyvsp[(2) - (4)].string));
@@ -1734,10 +1779,10 @@ yyreduce:
}
break;
- case 16:
+ case 17:
-/* Line 1455 of yacc.c */
-#line 226 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 229 "cmDependsFortranParser.y"
{
cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner);
cmDependsFortranParser_RuleIfndef(parser, (yyvsp[(2) - (4)].string));
@@ -1745,75 +1790,86 @@ yyreduce:
}
break;
- case 17:
+ case 18:
-/* Line 1455 of yacc.c */
-#line 232 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 235 "cmDependsFortranParser.y"
{
cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner);
cmDependsFortranParser_RuleIf(parser);
}
break;
- case 18:
+ case 19:
-/* Line 1455 of yacc.c */
-#line 237 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 240 "cmDependsFortranParser.y"
{
cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner);
cmDependsFortranParser_RuleElif(parser);
}
break;
- case 19:
+ case 20:
-/* Line 1455 of yacc.c */
-#line 242 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 245 "cmDependsFortranParser.y"
{
cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner);
cmDependsFortranParser_RuleElse(parser);
}
break;
- case 20:
+ case 21:
-/* Line 1455 of yacc.c */
-#line 247 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 250 "cmDependsFortranParser.y"
{
cmDependsFortranParser* parser = cmDependsFortran_yyget_extra(yyscanner);
cmDependsFortranParser_RuleEndif(parser);
}
break;
- case 21:
+ case 22:
-/* Line 1455 of yacc.c */
-#line 252 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 255 "cmDependsFortranParser.y"
{
free((yyvsp[(1) - (4)].string));
}
break;
- case 46:
+ case 47:
-/* Line 1455 of yacc.c */
-#line 274 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 277 "cmDependsFortranParser.y"
{ free ((yyvsp[(1) - (1)].string)); }
break;
- case 47:
+ case 48:
-/* Line 1455 of yacc.c */
-#line 275 "cmDependsFortranParser.y"
+/* Line 1806 of yacc.c */
+#line 278 "cmDependsFortranParser.y"
{ free ((yyvsp[(1) - (1)].string)); }
break;
-/* Line 1455 of yacc.c */
-#line 1821 "cmDependsFortranParser.cxx"
+/* Line 1806 of yacc.c */
+#line 1860 "cmDependsFortranParser.cxx"
default: break;
}
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
YYPOPSTACK (yylen);
@@ -1841,6 +1897,10 @@ yyreduce:
| yyerrlab -- here on detecting error |
`------------------------------------*/
yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
/* If not already recovering from an error, report this error. */
if (!yyerrstatus)
{
@@ -1848,37 +1908,36 @@ yyerrlab:
#if ! YYERROR_VERBOSE
yyerror (YY_("syntax error"));
#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
{
- YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
- if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
{
- YYSIZE_T yyalloc = 2 * yysize;
- if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
- yyalloc = YYSTACK_ALLOC_MAXIMUM;
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
- yymsg = (char *) YYSTACK_ALLOC (yyalloc);
- if (yymsg)
- yymsg_alloc = yyalloc;
- else
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
{
yymsg = yymsgbuf;
yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
}
}
-
- if (0 < yysize && yysize <= yymsg_alloc)
- {
- (void) yysyntax_error (yymsg, yystate, yychar);
- yyerror (yymsg);
- }
- else
- {
- yyerror (YY_("syntax error"));
- if (yysize != 0)
- goto yyexhaustedlab;
- }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
}
+# undef YYSYNTAX_ERROR
#endif
}
@@ -1939,7 +1998,7 @@ yyerrlab1:
for (;;)
{
yyn = yypact[yystate];
- if (yyn != YYPACT_NINF)
+ if (!yypact_value_is_default (yyn))
{
yyn += YYTERROR;
if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
@@ -1998,8 +2057,13 @@ yyexhaustedlab:
yyreturn:
if (yychar != YYEMPTY)
- yydestruct ("Cleanup: discarding lookahead",
- yytoken, &yylval);
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
/* Do not reclaim the symbols of the rule which action triggered
this YYABORT or YYACCEPT. */
YYPOPSTACK (yylen);
@@ -2024,7 +2088,7 @@ yyreturn:
-/* Line 1675 of yacc.c */
-#line 283 "cmDependsFortranParser.y"
+/* Line 2067 of yacc.c */
+#line 286 "cmDependsFortranParser.y"
/* End of grammar */
diff --git a/Source/cmDependsFortranParser.y b/Source/cmDependsFortranParser.y
index 00d3327..5681d69 100644
--- a/Source/cmDependsFortranParser.y
+++ b/Source/cmDependsFortranParser.y
@@ -102,6 +102,7 @@ static bool cmDependsFortranParserIsKeyword(const char* word,
%token <string> CPP_TOENDL
%token <number> UNTERMINATED_STRING
%token <string> STRING WORD
+%token <string> CPP_INCLUDE_ANGLE
/*-------------------------------------------------------------------------*/
/* grammar */
@@ -192,6 +193,13 @@ keyword_stmt:
free($1);
free($2);
}
+| CPP_INCLUDE_ANGLE other EOSTMT
+ {
+ cmDependsFortranParser* parser =
+ cmDependsFortran_yyget_extra(yyscanner);
+ cmDependsFortranParser_RuleInclude(parser, $1);
+ free($1);
+ }
| include STRING other EOSTMT
{
cmDependsFortranParser* parser =
diff --git a/Source/cmDependsFortranParserTokens.h b/Source/cmDependsFortranParserTokens.h
index 0bbcaae..941eda0 100644
--- a/Source/cmDependsFortranParserTokens.h
+++ b/Source/cmDependsFortranParserTokens.h
@@ -1,9 +1,8 @@
-/* A Bison parser, made by GNU Bison 2.4.1. */
+/* A Bison parser, made by GNU Bison 2.5. */
-/* Skeleton interface for Bison's Yacc-like parsers in C
+/* Bison interface for Yacc-like parsers in C
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -31,6 +30,7 @@
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
+
/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
@@ -64,7 +64,8 @@
CPP_TOENDL = 282,
UNTERMINATED_STRING = 283,
STRING = 284,
- WORD = 285
+ WORD = 285,
+ CPP_INCLUDE_ANGLE = 286
};
#endif
/* Tokens. */
@@ -96,6 +97,7 @@
#define UNTERMINATED_STRING 283
#define STRING 284
#define WORD 285
+#define CPP_INCLUDE_ANGLE 286
@@ -104,12 +106,14 @@
typedef union YYSTYPE
{
-/* Line 1676 of yacc.c */
-#line 94 "cmDependsFortranParser.y"
+/* Line 2068 of yacc.c */
+#line 89 "cmDependsFortranParser.y"
char* string;
-/* Line 1676 of yacc.c */
+
+
+/* Line 2068 of yacc.c */
#line 118 "cmDependsFortranParserTokens.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
diff --git a/Source/cmDocumentVariables.cxx b/Source/cmDocumentVariables.cxx
index 897e516..9e33d75 100644
--- a/Source/cmDocumentVariables.cxx
+++ b/Source/cmDocumentVariables.cxx
@@ -523,6 +523,16 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"Variables That Change Behavior");
cm->DefineProperty
+ ("CMAKE_INSTALL_DEFAULT_COMPONENT_NAME", cmProperty::VARIABLE,
+ "Default component used in install() commands.",
+ "If an install() command is used without the COMPONENT argument, "
+ "these files will be grouped into a default component. The name of this "
+ "default install component will be taken from this variable. "
+ "It defaults to \"Unspecified\". ",
+ false,
+ "Variables That Change Behavior");
+
+ cm->DefineProperty
("CMAKE_FIND_LIBRARY_PREFIXES", cmProperty::VARIABLE,
"Prefixes to prepend when looking for libraries.",
"This specifies what prefixes to add to library names when "
@@ -833,6 +843,36 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
"Default is ON.",false,
"Variables That Change Behavior");
+ cm->DefineProperty
+ ("CMAKE_ABSOLUTE_DESTINATION_FILES", cmProperty::VARIABLE,
+ "List of files which have been installed using "
+ " an ABSOLUTE DESTINATION path.",
+ "This variable is defined by CMake-generated cmake_install.cmake "
+ "scripts."
+ " It can be used (read-only) by program or script that source those"
+ " install scripts. This is used by some CPack generators (e.g. RPM).",
+ false,
+ "Variables That Change Behavior");
+
+ cm->DefineProperty
+ ("CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
+ "Ask cmake_install.cmake script to warn each time a file with "
+ "absolute INSTALL DESTINATION is encountered.",
+ "This variable is used by CMake-generated cmake_install.cmake"
+ " scripts. If ones set this variable to ON while running the"
+ " script, it may get warning messages from the script.", false,
+ "Variables That Change Behavior");
+
+ cm->DefineProperty
+ ("CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION", cmProperty::VARIABLE,
+ "Ask cmake_install.cmake script to error out as soon as "
+ "a file with absolute INSTALL DESTINATION is encountered.",
+ "The fatal error is emitted before the installation of "
+ "the offending file takes place."
+ " This variable is used by CMake-generated cmake_install.cmake"
+ " scripts. If ones set this variable to ON while running the"
+ " script, it may get fatal error messages from the script.",false,
+ "Variables That Change Behavior");
// Variables defined by CMake that describe the system
diff --git a/Source/cmDocumentationFormatterHTML.cxx b/Source/cmDocumentationFormatterHTML.cxx
index 6ced1e4..cd0077e 100644
--- a/Source/cmDocumentationFormatterHTML.cxx
+++ b/Source/cmDocumentationFormatterHTML.cxx
@@ -127,7 +127,7 @@ void cmDocumentationFormatterHTML
{
os << "<h2><a name=\"section_";
cmDocumentationPrintHTMLId(os, name);
- os << "\"/>" << name << "</h2>\n";
+ os << "\"></a>" << name << "</h2>\n";
}
// Is a list needed?
@@ -145,7 +145,7 @@ void cmDocumentationFormatterHTML
cmDocumentationPrintHTMLId(os, op->Name.c_str());
os << "\"><b><code>";
this->PrintHTMLEscapes(os, op->Name.c_str());
- os << "</code></b></a></li>";
+ os << "</code></b></a></li>\n";
}
}
os << "</ul>\n" ;
@@ -167,9 +167,9 @@ void cmDocumentationFormatterHTML
{
os << " <a name=\"" << prefix << ":";
cmDocumentationPrintHTMLId(os, op->Name.c_str());
- os << "\"><b><code>";
+ os << "\"></a><b><code>";
this->PrintHTMLEscapes(os, op->Name.c_str());
- os << "</code></b></a>: ";
+ os << "</code></b>: ";
}
this->PrintHTMLEscapes(os, op->Brief.c_str());
if(op->Full.size())
@@ -269,9 +269,9 @@ void cmDocumentationFormatterHTML
return;
}
- os << "<h2><a name=\"section_Index\">Master Index "
+ os << "<h2><a name=\"section_Index\"></a>Master Index "
<< "CMake " << cmVersion::GetCMakeVersion()
- << "</a></h2>\n";
+ << "</h2>\n";
if (!sections.empty())
{
diff --git a/Source/cmExportFileGenerator.cxx b/Source/cmExportFileGenerator.cxx
index c4f5dfb..eb19df5e 100644
--- a/Source/cmExportFileGenerator.cxx
+++ b/Source/cmExportFileGenerator.cxx
@@ -137,10 +137,20 @@ cmExportFileGenerator
(mf->IsOn("WIN32") || mf->IsOn("CYGWIN") || mf->IsOn("MINGW"));
if(!dll_platform)
{
- std::string soname = target->GetSOName(config);
- std::string prop = "IMPORTED_SONAME";
+ std::string prop;
+ std::string value;
+ if(target->HasSOName(config))
+ {
+ prop = "IMPORTED_SONAME";
+ value = target->GetSOName(config);
+ }
+ else
+ {
+ prop = "IMPORTED_NO_SONAME";
+ value = "TRUE";
+ }
prop += suffix;
- properties[prop] = soname;
+ properties[prop] = value;
}
}
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 4f9ba7e..be47f95 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -1368,41 +1368,73 @@ bool cmFindPackageCommand::ReadListFile(const char* f, PolicyScopeRule psr)
}
//----------------------------------------------------------------------------
-void cmFindPackageCommand::AppendToProperty(const char* propertyName)
+void cmFindPackageCommand::AppendToFoundProperty(bool found)
{
- std::string propertyValue;
- const char *prop =
- this->Makefile->GetCMakeInstance()->GetProperty(propertyName);
- if (prop && *prop)
+ std::vector<std::string> foundContents;
+ const char *foundProp =
+ this->Makefile->GetCMakeInstance()->GetProperty("PACKAGES_FOUND");
+ if (foundProp && *foundProp)
{
- propertyValue = prop;
+ std::string tmp = foundProp;
- std::vector<std::string> contents;
- cmSystemTools::ExpandListArgument(propertyValue, contents, false);
-
- bool alreadyInserted = false;
- for(std::vector<std::string>::const_iterator it = contents.begin();
- it != contents.end(); ++ it )
+ cmSystemTools::ExpandListArgument(tmp, foundContents, false);
+ std::vector<std::string>::iterator nameIt = std::find(
+ foundContents.begin(), foundContents.end(), this->Name);
+ if(nameIt != foundContents.end())
{
- if (*it == this->Name)
- {
- alreadyInserted = true;
- break;
- }
+ foundContents.erase(nameIt);
}
- if (!alreadyInserted)
+ }
+
+ std::vector<std::string> notFoundContents;
+ const char *notFoundProp =
+ this->Makefile->GetCMakeInstance()->GetProperty("PACKAGES_NOT_FOUND");
+ if (notFoundProp && *notFoundProp)
+ {
+ std::string tmp = notFoundProp;
+
+ cmSystemTools::ExpandListArgument(tmp, notFoundContents, false);
+ std::vector<std::string>::iterator nameIt = std::find(
+ notFoundContents.begin(), notFoundContents.end(), this->Name);
+ if(nameIt != notFoundContents.end())
{
- propertyValue += ";";
- propertyValue += this->Name;
+ notFoundContents.erase(nameIt);
}
}
+
+ if(found)
+ {
+ foundContents.push_back(this->Name);
+ }
else
{
- propertyValue = this->Name;
+ notFoundContents.push_back(this->Name);
+ }
+
+
+ std::string tmp;
+ const char* sep ="";
+ for(size_t i=0; i<foundContents.size(); i++)
+ {
+ tmp += sep;
+ tmp += foundContents[i];
+ sep = ";";
+ }
+
+ this->Makefile->GetCMakeInstance()->SetProperty("PACKAGES_FOUND",
+ tmp.c_str());
+
+ tmp = "";
+ sep = "";
+ for(size_t i=0; i<notFoundContents.size(); i++)
+ {
+ tmp += sep;
+ tmp += notFoundContents[i];
+ sep = ";";
}
- this->Makefile->GetCMakeInstance()->SetProperty(propertyName,
- propertyValue.c_str());
- }
+ this->Makefile->GetCMakeInstance()->SetProperty("PACKAGES_NOT_FOUND",
+ tmp.c_str());
+}
//----------------------------------------------------------------------------
void cmFindPackageCommand::AppendSuccessInformation()
@@ -1413,14 +1445,10 @@ void cmFindPackageCommand::AppendSuccessInformation()
const char* upperResult = this->Makefile->GetDefinition(upperFound.c_str());
const char* result = this->Makefile->GetDefinition(found.c_str());
- if ((cmSystemTools::IsOn(result)) || (cmSystemTools::IsOn(upperResult)))
- {
- this->AppendToProperty("PACKAGES_FOUND");
- }
- else
- {
- this->AppendToProperty("PACKAGES_NOT_FOUND");
- }
+ bool packageFound = ((cmSystemTools::IsOn(result))
+ || (cmSystemTools::IsOn(upperResult)));
+
+ this->AppendToFoundProperty(packageFound);
// Record whether the find was quiet or not, so this can be used
// e.g. in FeatureSummary.cmake
diff --git a/Source/cmFindPackageCommand.h b/Source/cmFindPackageCommand.h
index edb70a6..c380122 100644
--- a/Source/cmFindPackageCommand.h
+++ b/Source/cmFindPackageCommand.h
@@ -69,7 +69,7 @@ protected:
virtual void GenerateDocumentation();
private:
void AppendSuccessInformation();
- void AppendToProperty(const char* propertyName);
+ void AppendToFoundProperty(bool found);
void SetModuleVariables(const std::string& components);
bool FindModule(bool& found);
void AddFindDefinition(const char* var, const char* val);
diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx
index 42dd428..6e2e23d 100644
--- a/Source/cmGeneratorTarget.cxx
+++ b/Source/cmGeneratorTarget.cxx
@@ -39,17 +39,10 @@ void cmGeneratorTarget::ClassifySources()
{
cmSourceFile* sf = *si;
std::string ext = cmSystemTools::LowerCase(sf->GetExtension());
- cmTarget::SourceFileFlags tsFlags =
- this->Target->GetTargetSourceFileFlags(sf);
if(sf->GetCustomCommand())
{
this->CustomCommands.push_back(sf);
}
- else if(tsFlags.Type != cmTarget::SourceFileTypeNormal)
- {
- this->OSXContent.push_back(sf);
- if(isObjLib) { badObjLib.push_back(sf); }
- }
else if(sf->GetPropertyAsBool("HEADER_FILE_ONLY"))
{
this->HeaderSources.push_back(sf);
diff --git a/Source/cmGeneratorTarget.h b/Source/cmGeneratorTarget.h
index 3e50656..5c7578d 100644
--- a/Source/cmGeneratorTarget.h
+++ b/Source/cmGeneratorTarget.h
@@ -37,7 +37,6 @@ public:
std::vector<cmSourceFile*> HeaderSources;
std::vector<cmSourceFile*> ObjectSources;
std::vector<cmSourceFile*> ExternalObjects;
- std::vector<cmSourceFile*> OSXContent;
std::vector<cmSourceFile*> IDLSources;
std::string ModuleDefinitionFile;
diff --git a/Source/cmGlobalNinjaGenerator.cxx b/Source/cmGlobalNinjaGenerator.cxx
index 9cbd502..328706c 100644
--- a/Source/cmGlobalNinjaGenerator.cxx
+++ b/Source/cmGlobalNinjaGenerator.cxx
@@ -385,6 +385,11 @@ void cmGlobalNinjaGenerator::Generate()
this->WriteTargetAliases(*this->BuildFileStream);
this->WriteBuiltinTargets(*this->BuildFileStream);
+ if (cmSystemTools::GetErrorOccuredFlag()) {
+ this->RulesFileStream->setstate(std::ios_base::failbit);
+ this->BuildFileStream->setstate(std::ios_base::failbit);
+ }
+
this->CloseRulesFileStream();
this->CloseBuildFileStream();
}
@@ -754,6 +759,8 @@ void cmGlobalNinjaGenerator::WriteBuiltinTargets(std::ostream& os)
this->WriteTargetAll(os);
this->WriteTargetRebuildManifest(os);
+ this->WriteTargetClean(os);
+ this->WriteTargetHelp(os);
}
void cmGlobalNinjaGenerator::WriteTargetAll(std::ostream& os)
@@ -820,3 +827,43 @@ void cmGlobalNinjaGenerator::WriteTargetRebuildManifest(std::ostream& os)
implicitDeps,
cmNinjaDeps());
}
+
+void cmGlobalNinjaGenerator::WriteTargetClean(std::ostream& os)
+{
+ WriteRule(*this->RulesFileStream,
+ "CLEAN",
+ "ninja -t clean",
+ "Cleaning all built files...",
+ "Rule for cleaning all built files.",
+ /*depfile=*/ "",
+ /*restat=*/ false,
+ /*generator=*/ false);
+ WriteBuild(os,
+ "Clean all the built files.",
+ "CLEAN",
+ /*outputs=*/ cmNinjaDeps(1, "clean"),
+ /*explicitDeps=*/ cmNinjaDeps(),
+ /*implicitDeps=*/ cmNinjaDeps(),
+ /*orderOnlyDeps=*/ cmNinjaDeps(),
+ /*variables=*/ cmNinjaVars());
+}
+
+void cmGlobalNinjaGenerator::WriteTargetHelp(std::ostream& os)
+{
+ WriteRule(*this->RulesFileStream,
+ "HELP",
+ "ninja -t targets",
+ "All primary targets available:",
+ "Rule for printing all primary targets available.",
+ /*depfile=*/ "",
+ /*restat=*/ false,
+ /*generator=*/ false);
+ WriteBuild(os,
+ "Print all primary targets available.",
+ "HELP",
+ /*outputs=*/ cmNinjaDeps(1, "help"),
+ /*explicitDeps=*/ cmNinjaDeps(),
+ /*implicitDeps=*/ cmNinjaDeps(),
+ /*orderOnlyDeps=*/ cmNinjaDeps(),
+ /*variables=*/ cmNinjaVars());
+}
diff --git a/Source/cmGlobalNinjaGenerator.h b/Source/cmGlobalNinjaGenerator.h
index 3217581..e652972 100644
--- a/Source/cmGlobalNinjaGenerator.h
+++ b/Source/cmGlobalNinjaGenerator.h
@@ -273,6 +273,8 @@ private:
void WriteBuiltinTargets(std::ostream& os);
void WriteTargetAll(std::ostream& os);
void WriteTargetRebuildManifest(std::ostream& os);
+ void WriteTargetClean(std::ostream& os);
+ void WriteTargetHelp(std::ostream& os);
/// Called when we have seen the given custom command. Returns true
/// if we has seen it before.
diff --git a/Source/cmGlobalVisualStudio10Generator.cxx b/Source/cmGlobalVisualStudio10Generator.cxx
index 28d738a..18a786d 100644
--- a/Source/cmGlobalVisualStudio10Generator.cxx
+++ b/Source/cmGlobalVisualStudio10Generator.cxx
@@ -13,6 +13,7 @@
#include "cmGlobalVisualStudio10Generator.h"
#include "cmLocalVisualStudio10Generator.h"
#include "cmMakefile.h"
+#include "cmSourceFile.h"
#include "cmake.h"
@@ -51,6 +52,38 @@ cmLocalGenerator *cmGlobalVisualStudio10Generator::CreateLocalGenerator()
}
//----------------------------------------------------------------------------
+void cmGlobalVisualStudio10Generator::Generate()
+{
+ this->LongestSource = LongestSourcePath();
+ this->cmGlobalVisualStudio8Generator::Generate();
+ if(this->LongestSource.Length > 0)
+ {
+ cmMakefile* mf = this->LongestSource.Target->GetMakefile();
+ cmOStringStream e;
+ e <<
+ "The binary and/or source directory paths may be too long to generate "
+ "Visual Studio 10 files for this project. "
+ "Consider choosing shorter directory names to build this project with "
+ "Visual Studio 10. "
+ "A more detailed explanation follows."
+ "\n"
+ "There is a bug in the VS 10 IDE that renders property dialog fields "
+ "blank for files referenced by full path in the project file. "
+ "However, CMake must reference at least one file by full path:\n"
+ " " << this->LongestSource.SourceFile->GetFullPath() << "\n"
+ "This is because some Visual Studio tools would append the relative "
+ "path to the end of the referencing directory path, as in:\n"
+ " " << mf->GetCurrentOutputDirectory() << "/"
+ << this->LongestSource.SourceRel << "\n"
+ "and then incorrectly complain that the file does not exist because "
+ "the path length is too long for some internal buffer or API. "
+ "To avoid this problem CMake must use a full path for this file "
+ "which then triggers the VS 10 property dialog bug.";
+ mf->IssueMessage(cmake::WARNING, e.str().c_str());
+ }
+}
+
+//----------------------------------------------------------------------------
void cmGlobalVisualStudio10Generator
::GetDocumentation(cmDocumentationEntry& entry) const
{
@@ -230,3 +263,18 @@ cmGlobalVisualStudio10Generator
ruleFile += ".rule";
return ruleFile;
}
+
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio10Generator::PathTooLong(
+ cmTarget* target, cmSourceFile* sf, std::string const& sfRel)
+{
+ size_t len = (strlen(target->GetMakefile()->GetCurrentOutputDirectory()) +
+ 1 + sfRel.length());
+ if(len > this->LongestSource.Length)
+ {
+ this->LongestSource.Length = len;
+ this->LongestSource.Target = target;
+ this->LongestSource.SourceFile = sf;
+ this->LongestSource.SourceRel = sfRel;
+ }
+}
diff --git a/Source/cmGlobalVisualStudio10Generator.h b/Source/cmGlobalVisualStudio10Generator.h
index e2cc14e..4236563 100644
--- a/Source/cmGlobalVisualStudio10Generator.h
+++ b/Source/cmGlobalVisualStudio10Generator.h
@@ -46,6 +46,8 @@ public:
///! create the correct local generator
virtual cmLocalGenerator *CreateLocalGenerator();
+ virtual void Generate();
+
/**
* Try to determine system infomation such as shared library
* extension, pthreads, byte order etc.
@@ -79,10 +81,22 @@ public:
/** Generate an <output>.rule file path for a given command output. */
virtual std::string GenerateRuleFile(std::string const& output) const;
+ void PathTooLong(cmTarget* target, cmSourceFile* sf,
+ std::string const& sfRel);
protected:
virtual const char* GetIDEVersion() { return "10.0"; }
std::string PlatformToolset;
bool ExpressEdition;
+private:
+ struct LongestSourcePath
+ {
+ LongestSourcePath(): Length(0), Target(0), SourceFile(0) {}
+ size_t Length;
+ cmTarget* Target;
+ cmSourceFile* SourceFile;
+ std::string SourceRel;
+ };
+ LongestSourcePath LongestSource;
};
#endif
diff --git a/Source/cmGlobalVisualStudio11ARMGenerator.cxx b/Source/cmGlobalVisualStudio11ARMGenerator.cxx
new file mode 100644
index 0000000..fef1aba
--- /dev/null
+++ b/Source/cmGlobalVisualStudio11ARMGenerator.cxx
@@ -0,0 +1,32 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+#include "cmGlobalVisualStudio11ARMGenerator.h"
+#include "cmMakefile.h"
+#include "cmake.h"
+
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio11ARMGenerator
+::GetDocumentation(cmDocumentationEntry& entry) const
+{
+ entry.Name = this->GetName();
+ entry.Brief = "Generates Visual Studio 11 ARM project files.";
+ entry.Full = "";
+}
+
+//----------------------------------------------------------------------------
+void cmGlobalVisualStudio11ARMGenerator
+::AddPlatformDefinitions(cmMakefile* mf)
+{
+ this->cmGlobalVisualStudio11Generator::AddPlatformDefinitions(mf);
+ mf->AddDefinition("MSVC_C_ARCHITECTURE_ID", "ARM");
+ mf->AddDefinition("MSVC_CXX_ARCHITECTURE_ID", "ARM");
+}
diff --git a/Source/cmGlobalVisualStudio11ARMGenerator.h b/Source/cmGlobalVisualStudio11ARMGenerator.h
new file mode 100644
index 0000000..77e1429
--- /dev/null
+++ b/Source/cmGlobalVisualStudio11ARMGenerator.h
@@ -0,0 +1,37 @@
+/*============================================================================
+ CMake - Cross Platform Makefile Generator
+ Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
+
+ Distributed under the OSI-approved BSD License (the "License");
+ see accompanying file Copyright.txt for details.
+
+ This software is distributed WITHOUT ANY WARRANTY; without even the
+ implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the License for more information.
+============================================================================*/
+#ifndef cmGlobalVisualStudio11ARMGenerator_h
+#define cmGlobalVisualStudio11ARMGenerator_h
+
+#include "cmGlobalVisualStudio11Generator.h"
+
+class cmGlobalVisualStudio11ARMGenerator :
+ public cmGlobalVisualStudio11Generator
+{
+public:
+ cmGlobalVisualStudio11ARMGenerator() {}
+ static cmGlobalGenerator* New() {
+ return new cmGlobalVisualStudio11ARMGenerator; }
+
+ ///! Get the name for the generator.
+ virtual const char* GetName() const {
+ return cmGlobalVisualStudio11ARMGenerator::GetActualName();}
+ static const char* GetActualName() {return "Visual Studio 11 ARM";}
+
+ virtual const char* GetPlatformName() const {return "ARM";}
+
+ /** Get the documentation entry for this generator. */
+ virtual void GetDocumentation(cmDocumentationEntry& entry) const;
+
+ virtual void AddPlatformDefinitions(cmMakefile* mf);
+};
+#endif
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 998843f..522f3da 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -723,6 +723,10 @@ GetSourcecodeValueFromFileExtension(const std::string& _ext,
{
sourcecode = "file.xib";
}
+ else if(ext == "storyboard")
+ {
+ sourcecode = "file.storyboard";
+ }
else if(ext == "mm")
{
sourcecode += ".cpp.objcpp";
diff --git a/Source/cmIfCommand.cxx b/Source/cmIfCommand.cxx
index 4eed477..ffc0f35 100644
--- a/Source/cmIfCommand.cxx
+++ b/Source/cmIfCommand.cxx
@@ -74,6 +74,13 @@ IsFunctionBlocked(const cmListFileFunction& lff,
{
this->IsBlocking = this->HasRun;
this->HasRun = true;
+
+ // if trace is enabled, print a (trivially) evaluated "else"
+ // statement
+ if(!this->IsBlocking && mf.GetCMakeInstance()->GetTrace())
+ {
+ mf.PrintCommandTrace(this->Functions[c]);
+ }
}
else if (scopeDepth == 0 && !cmSystemTools::Strucmp
(this->Functions[c].Name.c_str(),"elseif"))
@@ -88,6 +95,12 @@ IsFunctionBlocked(const cmListFileFunction& lff,
cmMakefileCall stack_manager(&mf, this->Functions[c], status);
static_cast<void>(stack_manager);
+ // if trace is enabled, print the evaluated "elseif" statement
+ if(mf.GetCMakeInstance()->GetTrace())
+ {
+ mf.PrintCommandTrace(this->Functions[c]);
+ }
+
std::string errorString;
std::vector<std::string> expandedArguments;
diff --git a/Source/cmInstallCommand.cxx b/Source/cmInstallCommand.cxx
index c656487..4016734 100644
--- a/Source/cmInstallCommand.cxx
+++ b/Source/cmInstallCommand.cxx
@@ -23,25 +23,25 @@
static cmInstallTargetGenerator* CreateInstallTargetGenerator(cmTarget& target,
const cmInstallCommandArguments& args, bool impLib, bool forceOpt = false)
{
- return new cmInstallTargetGenerator(target, args.GetDestination().c_str(),
- impLib, args.GetPermissions().c_str(),
+ return new cmInstallTargetGenerator(target, args.GetDestination().c_str(),
+ impLib, args.GetPermissions().c_str(),
args.GetConfigurations(), args.GetComponent().c_str(),
args.GetOptional() || forceOpt);
}
static cmInstallFilesGenerator* CreateInstallFilesGenerator(
- const std::vector<std::string>& absFiles,
+ const std::vector<std::string>& absFiles,
const cmInstallCommandArguments& args, bool programs)
{
- return new cmInstallFilesGenerator(absFiles, args.GetDestination().c_str(),
- programs, args.GetPermissions().c_str(),
+ return new cmInstallFilesGenerator(absFiles, args.GetDestination().c_str(),
+ programs, args.GetPermissions().c_str(),
args.GetConfigurations(), args.GetComponent().c_str(),
args.GetRename().c_str(), args.GetOptional());
}
// cmInstallCommand
-bool cmInstallCommand::InitialPass(std::vector<std::string> const& args,
+bool cmInstallCommand::InitialPass(std::vector<std::string> const& args,
cmExecutionStatus &)
{
// Allow calling with no arguments so that arguments may be built up
@@ -55,6 +55,13 @@ bool cmInstallCommand::InitialPass(std::vector<std::string> const& args,
this->Makefile->GetLocalGenerator()
->GetGlobalGenerator()->EnableInstallTarget();
+ this->DefaultComponentName = this->Makefile->GetSafeDefinition(
+ "CMAKE_INSTALL_DEFAULT_COMPONENT_NAME");
+ if (this->DefaultComponentName.empty())
+ {
+ this->DefaultComponentName = "Unspecified";
+ }
+
// Switch among the command modes.
if(args[0] == "SCRIPT")
{
@@ -95,7 +102,7 @@ bool cmInstallCommand::InitialPass(std::vector<std::string> const& args,
//----------------------------------------------------------------------------
bool cmInstallCommand::HandleScriptMode(std::vector<std::string> const& args)
{
- std::string component("Unspecified");
+ std::string component = this->DefaultComponentName;
int componentCount = 0;
bool doing_script = false;
bool doing_code = false;
@@ -190,7 +197,7 @@ bool cmInstallCommand::HandleScriptMode(std::vector<std::string> const& args)
/*struct InstallPart
{
- InstallPart(cmCommandArgumentsHelper* helper, const char* key,
+ InstallPart(cmCommandArgumentsHelper* helper, const char* key,
cmCommandArgumentGroup* group);
cmCAStringVector argVector;
cmInstallCommandArguments args;
@@ -222,7 +229,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// ARCHIVE, RUNTIME etc. (see above)
// These generic args also contain the targets and the export stuff
std::vector<std::string> unknownArgs;
- cmInstallCommandArguments genericArgs;
+ cmInstallCommandArguments genericArgs(this->DefaultComponentName);
cmCAStringVector targetList(&genericArgs.Parser, "TARGETS");
cmCAString exports(&genericArgs.Parser,"EXPORT", &genericArgs.ArgumentGroup);
targetList.Follows(0);
@@ -230,16 +237,16 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
genericArgs.Parse(&genericArgVector.GetVector(), &unknownArgs);
bool success = genericArgs.Finalize();
- cmInstallCommandArguments archiveArgs;
- cmInstallCommandArguments libraryArgs;
- cmInstallCommandArguments runtimeArgs;
- cmInstallCommandArguments frameworkArgs;
- cmInstallCommandArguments bundleArgs;
- cmInstallCommandArguments privateHeaderArgs;
- cmInstallCommandArguments publicHeaderArgs;
- cmInstallCommandArguments resourceArgs;
+ cmInstallCommandArguments archiveArgs(this->DefaultComponentName);
+ cmInstallCommandArguments libraryArgs(this->DefaultComponentName);
+ cmInstallCommandArguments runtimeArgs(this->DefaultComponentName);
+ cmInstallCommandArguments frameworkArgs(this->DefaultComponentName);
+ cmInstallCommandArguments bundleArgs(this->DefaultComponentName);
+ cmInstallCommandArguments privateHeaderArgs(this->DefaultComponentName);
+ cmInstallCommandArguments publicHeaderArgs(this->DefaultComponentName);
+ cmInstallCommandArguments resourceArgs(this->DefaultComponentName);
- // now parse the args for specific parts of the target (e.g. LIBRARY,
+ // now parse the args for specific parts of the target (e.g. LIBRARY,
// RUNTIME, ARCHIVE etc.
archiveArgs.Parse (&archiveArgVector.GetVector(), &unknownArgs);
libraryArgs.Parse (&libraryArgVector.GetVector(), &unknownArgs);
@@ -345,7 +352,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
this->Makefile->IsOn("CYGWIN") ||
this->Makefile->IsOn("MINGW"));
- for(std::vector<std::string>::const_iterator
+ for(std::vector<std::string>::const_iterator
targetIt=targetList.GetVector().begin();
targetIt!=targetList.GetVector().end();
++targetIt)
@@ -422,7 +429,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
case cmTarget::SHARED_LIBRARY:
{
// Shared libraries are handled differently on DLL and non-DLL
- // platforms. All windows platforms are DLL platforms including
+ // platforms. All windows platforms are DLL platforms including
// cygwin. Currently no other platform is a DLL platform.
if(dll_platform)
{
@@ -436,13 +443,13 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
if(!archiveArgs.GetDestination().empty())
{
// The import library uses the ARCHIVE properties.
- archiveGenerator = CreateInstallTargetGenerator(target,
+ archiveGenerator = CreateInstallTargetGenerator(target,
archiveArgs, true);
}
if(!runtimeArgs.GetDestination().empty())
{
// The DLL uses the RUNTIME properties.
- runtimeGenerator = CreateInstallTargetGenerator(target,
+ runtimeGenerator = CreateInstallTargetGenerator(target,
runtimeArgs, false);
}
if ((archiveGenerator==0) && (runtimeGenerator==0))
@@ -467,7 +474,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Use the FRAMEWORK properties.
if (!frameworkArgs.GetDestination().empty())
{
- frameworkGenerator = CreateInstallTargetGenerator(target,
+ frameworkGenerator = CreateInstallTargetGenerator(target,
frameworkArgs, false);
}
else
@@ -484,7 +491,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// The shared library uses the LIBRARY properties.
if (!libraryArgs.GetDestination().empty())
{
- libraryGenerator = CreateInstallTargetGenerator(target,
+ libraryGenerator = CreateInstallTargetGenerator(target,
libraryArgs, false);
libraryGenerator->SetNamelinkMode(namelinkMode);
namelinkOnly =
@@ -507,7 +514,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Static libraries use ARCHIVE properties.
if (!archiveArgs.GetDestination().empty())
{
- archiveGenerator = CreateInstallTargetGenerator(target, archiveArgs,
+ archiveGenerator = CreateInstallTargetGenerator(target, archiveArgs,
false);
}
else
@@ -525,7 +532,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Modules use LIBRARY properties.
if (!libraryArgs.GetDestination().empty())
{
- libraryGenerator = CreateInstallTargetGenerator(target, libraryArgs,
+ libraryGenerator = CreateInstallTargetGenerator(target, libraryArgs,
false);
libraryGenerator->SetNamelinkMode(namelinkMode);
namelinkOnly =
@@ -548,7 +555,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Application bundles use the BUNDLE properties.
if (!bundleArgs.GetDestination().empty())
{
- bundleGenerator = CreateInstallTargetGenerator(target, bundleArgs,
+ bundleGenerator = CreateInstallTargetGenerator(target, bundleArgs,
false);
}
else if(!runtimeArgs.GetDestination().empty())
@@ -580,7 +587,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
// Executables use the RUNTIME properties.
if (!runtimeArgs.GetDestination().empty())
{
- runtimeGenerator = CreateInstallTargetGenerator(target,
+ runtimeGenerator = CreateInstallTargetGenerator(target,
runtimeArgs, false);
}
else
@@ -600,7 +607,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
target.IsExecutableWithExports())
{
// The import library uses the ARCHIVE properties.
- archiveGenerator = CreateInstallTargetGenerator(target,
+ archiveGenerator = CreateInstallTargetGenerator(target,
archiveArgs, true, true);
}
}
@@ -710,7 +717,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
installsRuntime = installsRuntime || runtimeGenerator != 0;
installsFramework = installsFramework || frameworkGenerator != 0;
installsBundle = installsBundle || bundleGenerator != 0;
- installsPrivateHeader = installsPrivateHeader
+ installsPrivateHeader = installsPrivateHeader
|| privateHeaderGenerator != 0;
installsPublicHeader = installsPublicHeader || publicHeaderGenerator != 0;
installsResource = installsResource || resourceGenerator;
@@ -729,7 +736,7 @@ bool cmInstallCommand::HandleTargetsMode(std::vector<std::string> const& args)
if(!exports.GetString().empty() && !namelinkOnly)
{
this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
- ->AddTargetToExports(exports.GetCString(), &target,
+ ->AddTargetToExports(exports.GetCString(), &target,
archiveGenerator, runtimeGenerator,
libraryGenerator, frameworkGenerator,
bundleGenerator, publicHeaderGenerator);
@@ -788,7 +795,7 @@ bool cmInstallCommand::HandleFilesMode(std::vector<std::string> const& args)
{
// This is the FILES mode.
bool programs = (args[0] == "PROGRAMS");
- cmInstallCommandArguments ica;
+ cmInstallCommandArguments ica(this->DefaultComponentName);
cmCAStringVector files(&ica.Parser, programs ? "PROGRAMS" : "FILES");
files.Follows(0);
ica.ArgumentGroup.Follows(&files);
@@ -803,7 +810,7 @@ bool cmInstallCommand::HandleFilesMode(std::vector<std::string> const& args)
this->SetError(e.str().c_str());
return false;
}
-
+
// Check if there is something to do.
if(files.GetVector().empty())
{
@@ -865,7 +872,7 @@ cmInstallCommand::HandleDirectoryMode(std::vector<std::string> const& args)
std::string permissions_file;
std::string permissions_dir;
std::vector<std::string> configurations;
- std::string component = "Unspecified";
+ std::string component = this->DefaultComponentName;
std::string literal_args;
for(unsigned int i=1; i < args.size(); ++i)
{
@@ -1179,7 +1186,7 @@ cmInstallCommand::HandleDirectoryMode(std::vector<std::string> const& args)
bool cmInstallCommand::HandleExportMode(std::vector<std::string> const& args)
{
// This is the EXPORT mode.
- cmInstallCommandArguments ica;
+ cmInstallCommandArguments ica(this->DefaultComponentName);
cmCAString exp(&ica.Parser, "EXPORT");
cmCAString name_space(&ica.Parser, "NAMESPACE", &ica.ArgumentGroup);
cmCAString filename(&ica.Parser, "FILE", &ica.ArgumentGroup);
diff --git a/Source/cmInstallCommand.h b/Source/cmInstallCommand.h
index 3403c38..bf9fd9e 100644
--- a/Source/cmInstallCommand.h
+++ b/Source/cmInstallCommand.h
@@ -337,10 +337,12 @@ private:
bool HandleFilesMode(std::vector<std::string> const& args);
bool HandleDirectoryMode(std::vector<std::string> const& args);
bool HandleExportMode(std::vector<std::string> const& args);
- bool MakeFilesFullPath(const char* modeName,
+ bool MakeFilesFullPath(const char* modeName,
const std::vector<std::string>& relFiles,
std::vector<std::string>& absFiles);
bool CheckCMP0006(bool& failure);
+
+ std::string DefaultComponentName;
};
diff --git a/Source/cmInstallCommandArguments.cxx b/Source/cmInstallCommandArguments.cxx
index 13ef8ed..0ba21c7 100644
--- a/Source/cmInstallCommandArguments.cxx
+++ b/Source/cmInstallCommandArguments.cxx
@@ -23,7 +23,8 @@ const char* cmInstallCommandArguments::PermissionsTable[] =
const std::string cmInstallCommandArguments::EmptyString;
-cmInstallCommandArguments::cmInstallCommandArguments()
+cmInstallCommandArguments::cmInstallCommandArguments(
+ const std::string& defaultComponent)
:Parser()
,ArgumentGroup()
,Destination (&Parser, "DESTINATION" , &ArgumentGroup)
@@ -35,7 +36,9 @@ cmInstallCommandArguments::cmInstallCommandArguments()
,NamelinkOnly (&Parser, "NAMELINK_ONLY" , &ArgumentGroup)
,NamelinkSkip (&Parser, "NAMELINK_SKIP" , &ArgumentGroup)
,GenericArguments(0)
-{}
+{
+ this->Component.SetDefaultString(defaultComponent.c_str());
+}
const std::string& cmInstallCommandArguments::GetDestination() const
{
@@ -130,7 +133,7 @@ bool cmInstallCommandArguments::GetNamelinkSkip() const
return false;
}
-const std::vector<std::string>&
+const std::vector<std::string>&
cmInstallCommandArguments::GetConfigurations() const
{
if (!this->Configurations.GetVector().empty())
@@ -156,7 +159,7 @@ bool cmInstallCommandArguments::Finalize()
return true;
}
-void cmInstallCommandArguments::Parse(const std::vector<std::string>* args,
+void cmInstallCommandArguments::Parse(const std::vector<std::string>* args,
std::vector<std::string>* unconsumedArgs)
{
this->Parser.Parse(args, unconsumedArgs);
@@ -166,9 +169,9 @@ void cmInstallCommandArguments::Parse(const std::vector<std::string>* args,
bool cmInstallCommandArguments::CheckPermissions()
{
this->PermissionsString = "";
- for(std::vector<std::string>::const_iterator
- permIt = this->Permissions.GetVector().begin();
- permIt != this->Permissions.GetVector().end();
+ for(std::vector<std::string>::const_iterator
+ permIt = this->Permissions.GetVector().begin();
+ permIt != this->Permissions.GetVector().end();
++permIt)
{
if (!this->CheckPermissions(*permIt, this->PermissionsString))
@@ -183,7 +186,7 @@ bool cmInstallCommandArguments::CheckPermissions(
const std::string& onePermission, std::string& permissions)
{
// Check the permission against the table.
- for(const char** valid = cmInstallCommandArguments::PermissionsTable;
+ for(const char** valid = cmInstallCommandArguments::PermissionsTable;
*valid; ++valid)
{
if(onePermission == *valid)
diff --git a/Source/cmInstallCommandArguments.h b/Source/cmInstallCommandArguments.h
index 16033ce..321454a 100644
--- a/Source/cmInstallCommandArguments.h
+++ b/Source/cmInstallCommandArguments.h
@@ -19,10 +19,10 @@
class cmInstallCommandArguments
{
public:
- cmInstallCommandArguments();
- void SetGenericArguments(cmInstallCommandArguments* args)
+ cmInstallCommandArguments(const std::string& defaultComponent);
+ void SetGenericArguments(cmInstallCommandArguments* args)
{this->GenericArguments = args;}
- void Parse(const std::vector<std::string>* args,
+ void Parse(const std::vector<std::string>* args,
std::vector<std::string>* unconsumedArgs);
// Compute destination path.and check permissions
@@ -37,14 +37,15 @@ class cmInstallCommandArguments
bool GetNamelinkOnly() const;
bool GetNamelinkSkip() const;
- // once HandleDirectoryMode() is also switched to using
+ // once HandleDirectoryMode() is also switched to using
// cmInstallCommandArguments then these two functions can become non-static
// private member functions without arguments
- static bool CheckPermissions(const std::string& onePerm,
+ static bool CheckPermissions(const std::string& onePerm,
std::string& perm);
cmCommandArgumentsHelper Parser;
cmCommandArgumentGroup ArgumentGroup;
private:
+ cmInstallCommandArguments(); // disabled
cmCAString Destination;
cmCAString Component;
cmCAString Rename;
diff --git a/Source/cmInstallFilesCommand.cxx b/Source/cmInstallFilesCommand.cxx
index 0ec3030..cc62c4b 100644
--- a/Source/cmInstallFilesCommand.cxx
+++ b/Source/cmInstallFilesCommand.cxx
@@ -34,7 +34,7 @@ bool cmInstallFilesCommand
if((args.size() > 1) && (args[1] == "FILES"))
{
- this->IsFilesForm = true;
+ this->IsFilesForm = true;
for(std::vector<std::string>::const_iterator s = args.begin()+2;
s != args.end(); ++s)
{
@@ -53,45 +53,46 @@ bool cmInstallFilesCommand
this->FinalArgs.push_back(*s);
}
}
-
+
this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
- ->AddInstallComponent("Unspecified");
+ ->AddInstallComponent(this->Makefile->GetSafeDefinition(
+ "CMAKE_INSTALL_DEFAULT_COMPONENT_NAME"));
return true;
}
-void cmInstallFilesCommand::FinalPass()
+void cmInstallFilesCommand::FinalPass()
{
// No final pass for "FILES" form of arguments.
if(this->IsFilesForm)
{
return;
}
-
+
std::string testf;
std::string ext = this->FinalArgs[0];
-
+
// two different options
if (this->FinalArgs.size() > 1)
{
// now put the files into the list
std::vector<std::string>::iterator s = this->FinalArgs.begin();
++s;
- // for each argument, get the files
+ // for each argument, get the files
for (;s != this->FinalArgs.end(); ++s)
{
// replace any variables
std::string temps = *s;
if (cmSystemTools::GetFilenamePath(temps).size() > 0)
{
- testf = cmSystemTools::GetFilenamePath(temps) + "/" +
+ testf = cmSystemTools::GetFilenamePath(temps) + "/" +
cmSystemTools::GetFilenameWithoutLastExtension(temps) + ext;
}
else
{
testf = cmSystemTools::GetFilenameWithoutLastExtension(temps) + ext;
}
-
+
// add to the result
this->Files.push_back(this->FindInstallSource(testf.c_str()));
}
@@ -102,9 +103,9 @@ void cmInstallFilesCommand::FinalPass()
std::string regex = this->FinalArgs[0].c_str();
cmSystemTools::Glob(this->Makefile->GetCurrentDirectory(),
regex.c_str(), files);
-
+
std::vector<std::string>::iterator s = files.begin();
- // for each argument, get the files
+ // for each argument, get the files
for (;s != files.end(); ++s)
{
this->Files.push_back(this->FindInstallSource(s->c_str()));
@@ -128,13 +129,14 @@ void cmInstallFilesCommand::CreateInstallGenerator() const
// Use a file install generator.
const char* no_permissions = "";
const char* no_rename = "";
- const char* no_component = "Unspecified";
+ std::string no_component = this->Makefile->GetSafeDefinition(
+ "CMAKE_INSTALL_DEFAULT_COMPONENT_NAME");
std::vector<std::string> no_configurations;
this->Makefile->AddInstallGenerator(
new cmInstallFilesGenerator(this->Files,
destination.c_str(), false,
no_permissions, no_configurations,
- no_component, no_rename));
+ no_component.c_str(), no_rename));
}
@@ -151,7 +153,7 @@ std::string cmInstallFilesCommand::FindInstallSource(const char* name) const
// This is a full path.
return name;
}
-
+
// This is a relative path.
std::string tb = this->Makefile->GetCurrentOutputDirectory();
tb += "/";
@@ -159,7 +161,7 @@ std::string cmInstallFilesCommand::FindInstallSource(const char* name) const
std::string ts = this->Makefile->GetCurrentDirectory();
ts += "/";
ts += name;
-
+
if(cmSystemTools::FileExists(tb.c_str()))
{
// The file exists in the binary tree. Use it.
diff --git a/Source/cmInstallGenerator.cxx b/Source/cmInstallGenerator.cxx
index 807168e..3be2c2b 100644
--- a/Source/cmInstallGenerator.cxx
+++ b/Source/cmInstallGenerator.cxx
@@ -60,7 +60,7 @@ void cmInstallGenerator
std::string dest = this->GetInstallDestination();
if (cmSystemTools::FileIsFullPath(dest.c_str()))
{
- os << "list(APPEND CPACK_ABSOLUTE_DESTINATION_FILES\n";
+ os << "list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES\n";
os << indent << " \"";
for(std::vector<std::string>::const_iterator fi = files.begin();
fi != files.end(); ++fi)
@@ -80,6 +80,16 @@ void cmInstallGenerator
}
}
os << "\")\n";
+ os << indent << "IF (CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
+ os << indent << indent << "message(WARNING \"ABSOLUTE path INSTALL "
+ << "DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}\")\n";
+ os << indent << "ENDIF (CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
+
+ os << indent << "IF (CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
+ os << indent << indent << "message(FATAL_ERROR \"ABSOLUTE path INSTALL "
+ << "DESTINATION forbidden (by caller): "
+ << "${CMAKE_ABSOLUTE_DESTINATION_FILES}\")\n";
+ os << indent << "ENDIF (CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION)\n";
}
os << "FILE(INSTALL DESTINATION \"" << dest << "\" TYPE " << stype.c_str();
if(optional)
diff --git a/Source/cmInstallProgramsCommand.cxx b/Source/cmInstallProgramsCommand.cxx
index 7e6c9ce..3a0a322 100644
--- a/Source/cmInstallProgramsCommand.cxx
+++ b/Source/cmInstallProgramsCommand.cxx
@@ -31,26 +31,27 @@ bool cmInstallProgramsCommand
for (++s;s != args.end(); ++s)
{
this->FinalArgs.push_back(*s);
- }
-
+ }
+
this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
- ->AddInstallComponent("Unspecified");
+ ->AddInstallComponent(this->Makefile->GetSafeDefinition(
+ "CMAKE_INSTALL_DEFAULT_COMPONENT_NAME"));
return true;
}
-void cmInstallProgramsCommand::FinalPass()
+void cmInstallProgramsCommand::FinalPass()
{
bool files_mode = false;
if(!this->FinalArgs.empty() && this->FinalArgs[0] == "FILES")
{
files_mode = true;
}
-
+
// two different options
if (this->FinalArgs.size() > 1 || files_mode)
{
- // for each argument, get the programs
+ // for each argument, get the programs
std::vector<std::string>::iterator s = this->FinalArgs.begin();
if(files_mode)
{
@@ -68,9 +69,9 @@ void cmInstallProgramsCommand::FinalPass()
std::vector<std::string> programs;
cmSystemTools::Glob(this->Makefile->GetCurrentDirectory(),
this->FinalArgs[0].c_str(), programs);
-
+
std::vector<std::string>::iterator s = programs.begin();
- // for each argument, get the programs
+ // for each argument, get the programs
for (;s != programs.end(); ++s)
{
this->Files.push_back(this->FindInstallSource(s->c_str()));
@@ -89,13 +90,14 @@ void cmInstallProgramsCommand::FinalPass()
// Use a file install generator.
const char* no_permissions = "";
const char* no_rename = "";
- const char* no_component = "Unspecified";
+ std::string no_component = this->Makefile->GetSafeDefinition(
+ "CMAKE_INSTALL_DEFAULT_COMPONENT_NAME");
std::vector<std::string> no_configurations;
this->Makefile->AddInstallGenerator(
new cmInstallFilesGenerator(this->Files,
destination.c_str(), true,
no_permissions, no_configurations,
- no_component, no_rename));
+ no_component.c_str(), no_rename));
}
/**
@@ -112,7 +114,7 @@ std::string cmInstallProgramsCommand
// This is a full path.
return name;
}
-
+
// This is a relative path.
std::string tb = this->Makefile->GetCurrentOutputDirectory();
tb += "/";
@@ -120,7 +122,7 @@ std::string cmInstallProgramsCommand
std::string ts = this->Makefile->GetCurrentDirectory();
ts += "/";
ts += name;
-
+
if(cmSystemTools::FileExists(tb.c_str()))
{
// The file exists in the binary tree. Use it.
diff --git a/Source/cmInstallTargetsCommand.cxx b/Source/cmInstallTargetsCommand.cxx
index 27fc175..277ccea 100644
--- a/Source/cmInstallTargetsCommand.cxx
+++ b/Source/cmInstallTargetsCommand.cxx
@@ -58,7 +58,8 @@ bool cmInstallTargetsCommand
}
this->Makefile->GetLocalGenerator()->GetGlobalGenerator()
- ->AddInstallComponent("Unspecified");
+ ->AddInstallComponent(this->Makefile->GetSafeDefinition(
+ "CMAKE_INSTALL_DEFAULT_COMPONENT_NAME"));
return true;
}
diff --git a/Source/cmLocalGenerator.cxx b/Source/cmLocalGenerator.cxx
index 13ede5d..8265d72 100644
--- a/Source/cmLocalGenerator.cxx
+++ b/Source/cmLocalGenerator.cxx
@@ -954,29 +954,27 @@ cmLocalGenerator::ExpandRuleVariable(std::string const& variable,
}
}
}
- if(replaceValues.TargetSOName)
+ if(variable == "TARGET_SONAME" || variable == "SONAME_FLAG" ||
+ variable == "TARGET_INSTALLNAME_DIR")
{
- if(variable == "TARGET_SONAME")
+ // All these variables depend on TargetSOName
+ if(replaceValues.TargetSOName)
{
- if(replaceValues.Language)
+ if(variable == "TARGET_SONAME")
{
- std::string name = "CMAKE_SHARED_LIBRARY_SONAME_";
- name += replaceValues.Language;
- name += "_FLAG";
- if(this->Makefile->GetDefinition(name.c_str()))
- {
- return replaceValues.TargetSOName;
- }
+ return replaceValues.TargetSOName;
+ }
+ if(variable == "SONAME_FLAG" && replaceValues.SONameFlag)
+ {
+ return replaceValues.SONameFlag;
+ }
+ if(replaceValues.TargetInstallNameDir &&
+ variable == "TARGET_INSTALLNAME_DIR")
+ {
+ return replaceValues.TargetInstallNameDir;
}
- return "";
- }
- }
- if(replaceValues.TargetInstallNameDir)
- {
- if(variable == "TARGET_INSTALLNAME_DIR")
- {
- return replaceValues.TargetInstallNameDir;
}
+ return "";
}
if(replaceValues.LinkLibraries)
{
@@ -1550,13 +1548,10 @@ void cmLocalGenerator::GetTargetFlags(std::string& linkLibs,
target.GetName());
return;
}
- std::string langVar = "CMAKE_";
- langVar += linkLanguage;
- std::string flagsVar = langVar + "_FLAGS";
+ this->AddLanguageFlags(flags, linkLanguage, buildType.c_str());
std::string sharedFlagsVar = "CMAKE_SHARED_LIBRARY_";
sharedFlagsVar += linkLanguage;
sharedFlagsVar += "_FLAGS";
- flags += this->Makefile->GetSafeDefinition(flagsVar.c_str());
flags += " ";
flags += this->Makefile->GetSafeDefinition(sharedFlagsVar.c_str());
flags += " ";
diff --git a/Source/cmLocalGenerator.h b/Source/cmLocalGenerator.h
index 3e93819..cb84a30 100644
--- a/Source/cmLocalGenerator.h
+++ b/Source/cmLocalGenerator.h
@@ -228,6 +228,7 @@ public:
const char* ObjectDir;
const char* Flags;
const char* ObjectsQuoted;
+ const char* SONameFlag;
const char* TargetSOName;
const char* TargetInstallNameDir;
const char* LinkFlags;
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx
index 17bb5ed..a60896f 100644
--- a/Source/cmMakefile.cxx
+++ b/Source/cmMakefile.cxx
@@ -354,6 +354,22 @@ bool cmMakefile::GetBacktrace(cmListFileBacktrace& backtrace) const
}
//----------------------------------------------------------------------------
+void cmMakefile::PrintCommandTrace(const cmListFileFunction& lff)
+{
+ cmOStringStream msg;
+ msg << lff.FilePath << "(" << lff.Line << "): ";
+ msg << lff.Name << "(";
+ for(std::vector<cmListFileArgument>::const_iterator i =
+ lff.Arguments.begin(); i != lff.Arguments.end(); ++i)
+ {
+ msg << i->Value;
+ msg << " ";
+ }
+ msg << ")";
+ cmSystemTools::Message(msg.str().c_str());
+}
+
+//----------------------------------------------------------------------------
bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
cmExecutionStatus &status)
{
@@ -385,20 +401,10 @@ bool cmMakefile::ExecuteCommand(const cmListFileFunction& lff,
|| pcmd->IsScriptable()))
{
- // if trace is one, print out invoke information
+ // if trace is enabled, print out invoke information
if(this->GetCMakeInstance()->GetTrace())
{
- cmOStringStream msg;
- msg << lff.FilePath << "(" << lff.Line << "): ";
- msg << lff.Name << "(";
- for(std::vector<cmListFileArgument>::const_iterator i =
- lff.Arguments.begin(); i != lff.Arguments.end(); ++i)
- {
- msg << i->Value;
- msg << " ";
- }
- msg << ")";
- cmSystemTools::Message(msg.str().c_str());
+ this->PrintCommandTrace(lff);
}
// Try invoking the command.
if(!pcmd->InvokeInitialPass(lff.Arguments,status) ||
@@ -2195,6 +2201,14 @@ bool cmMakefile::PlatformIs64Bit() const
return false;
}
+const char* cmMakefile::GetSONameFlag(const char* language) const
+{
+ std::string name = "CMAKE_SHARED_LIBRARY_SONAME_";
+ name += language;
+ name += "_FLAG";
+ return GetDefinition(name.c_str());
+}
+
bool cmMakefile::CanIWriteThisFile(const char* fileName)
{
if ( !this->IsOn("CMAKE_DISABLE_SOURCE_CHANGES") )
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 8b3bef7..8a0088b 100644
--- a/Source/cmMakefile.h
+++ b/Source/cmMakefile.h
@@ -595,6 +595,9 @@ public:
/** Return whether the target platform is 64-bit. */
bool PlatformIs64Bit() const;
+ /** Retrieve soname flag for the specified language if supported */
+ const char* GetSONameFlag(const char* language) const;
+
/**
* Get a list of preprocessor define flags.
*/
@@ -698,6 +701,11 @@ public:
#endif
/**
+ * Print a command's invocation
+ */
+ void PrintCommandTrace(const cmListFileFunction& lff);
+
+ /**
* Execute a single CMake command. Returns true if the command
* succeeded or false if it failed.
*/
diff --git a/Source/cmMakefileLibraryTargetGenerator.cxx b/Source/cmMakefileLibraryTargetGenerator.cxx
index 38aa59d..db59ffd 100644
--- a/Source/cmMakefileLibraryTargetGenerator.cxx
+++ b/Source/cmMakefileLibraryTargetGenerator.cxx
@@ -714,7 +714,11 @@ void cmMakefileLibraryTargetGenerator::WriteLibraryRules
std::string linkString = linklibs.str();
vars.LinkLibraries = linkString.c_str();
vars.ObjectsQuoted = buildObjs.c_str();
- vars.TargetSOName= targetNameSO.c_str();
+ if (this->Target->HasSOName(this->ConfigName))
+ {
+ vars.SONameFlag = this->Makefile->GetSONameFlag(linkLanguage);
+ vars.TargetSOName= targetNameSO.c_str();
+ }
vars.LinkFlags = linkFlags.c_str();
// Compute the directory portion of the install_name setting.
diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx
index a0e0481..408f287 100644
--- a/Source/cmMakefileTargetGenerator.cxx
+++ b/Source/cmMakefileTargetGenerator.cxx
@@ -153,14 +153,8 @@ void cmMakefileTargetGenerator::WriteTargetBuildRules()
}
}
}
- for(std::vector<cmSourceFile*>::const_iterator
- si = this->GeneratorTarget->OSXContent.begin();
- si != this->GeneratorTarget->OSXContent.end(); ++si)
- {
- cmTarget::SourceFileFlags tsFlags =
- this->Target->GetTargetSourceFileFlags(*si);
- this->WriteMacOSXContentRules(**si, tsFlags.MacFolder);
- }
+ this->WriteMacOSXContentRules(this->GeneratorTarget->HeaderSources);
+ this->WriteMacOSXContentRules(this->GeneratorTarget->ExtraSources);
for(std::vector<cmSourceFile*>::const_iterator
si = this->GeneratorTarget->ExternalObjects.begin();
si != this->GeneratorTarget->ExternalObjects.end(); ++si)
@@ -354,6 +348,22 @@ void cmMakefileTargetGenerator::WriteTargetLanguageFlags()
}
//----------------------------------------------------------------------------
+void cmMakefileTargetGenerator::WriteMacOSXContentRules(
+ std::vector<cmSourceFile*> const& sources)
+{
+ for(std::vector<cmSourceFile*>::const_iterator
+ si = sources.begin(); si != sources.end(); ++si)
+ {
+ cmTarget::SourceFileFlags tsFlags =
+ this->Target->GetTargetSourceFileFlags(*si);
+ if(tsFlags.Type != cmTarget::SourceFileTypeNormal)
+ {
+ this->WriteMacOSXContentRules(**si, tsFlags.MacFolder);
+ }
+ }
+}
+
+//----------------------------------------------------------------------------
void cmMakefileTargetGenerator::WriteMacOSXContentRules(cmSourceFile& source,
const char* pkgloc)
{
diff --git a/Source/cmMakefileTargetGenerator.h b/Source/cmMakefileTargetGenerator.h
index e1e554b..36a1f68 100644
--- a/Source/cmMakefileTargetGenerator.h
+++ b/Source/cmMakefileTargetGenerator.h
@@ -73,6 +73,7 @@ protected:
void WriteTargetDependRules();
// write rules for Mac OS X Application Bundle content.
+ void WriteMacOSXContentRules(std::vector<cmSourceFile*> const& sources);
void WriteMacOSXContentRules(cmSourceFile& source, const char* pkgloc);
// write the rules for an object
diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx
index cf2b427..8b86a98 100644
--- a/Source/cmNinjaNormalTargetGenerator.cxx
+++ b/Source/cmNinjaNormalTargetGenerator.cxx
@@ -166,6 +166,7 @@ cmNinjaNormalTargetGenerator
cmLocalGenerator::SHELL);
vars.ObjectDir = objdir.c_str();
vars.Target = "$out";
+ vars.SONameFlag = "$SONAME_FLAG";
vars.TargetSOName = "$SONAME";
vars.TargetInstallNameDir = "$INSTALLNAME_DIR";
vars.TargetPDB = "$TARGET_PDB";
@@ -192,12 +193,13 @@ cmNinjaNormalTargetGenerator
vars.LinkFlags = "$LINK_FLAGS";
std::string langFlags;
- this->GetLocalGenerator()->AddLanguageFlags(langFlags,
- this->TargetLinkLanguage,
- this->GetConfigName());
- if (targetType != cmTarget::EXECUTABLE)
+ if (targetType != cmTarget::EXECUTABLE) {
+ this->GetLocalGenerator()->AddLanguageFlags(langFlags,
+ this->TargetLinkLanguage,
+ this->GetConfigName());
langFlags += " $ARCH_FLAGS";
- vars.LanguageCompileFlags = langFlags.c_str();
+ vars.LanguageCompileFlags = langFlags.c_str();
+ }
// Rule for linking library.
std::vector<std::string> linkCmds = this->ComputeLinkCmd();
@@ -380,17 +382,20 @@ void cmNinjaNormalTargetGenerator::WriteLinkStatement()
this->GetTarget(),
this->TargetLinkLanguage,
this->GetConfigName());
- vars["SONAME"] = this->TargetNameSO;
-
- if (targetType == cmTarget::SHARED_LIBRARY) {
- std::string install_name_dir =
- this->GetTarget()->GetInstallNameDirForBuildTree(this->GetConfigName());
-
- if (!install_name_dir.empty()) {
- vars["INSTALLNAME_DIR"] =
- this->GetLocalGenerator()->Convert(install_name_dir.c_str(),
- cmLocalGenerator::NONE,
- cmLocalGenerator::SHELL, false);
+ if (this->GetTarget()->HasSOName(this->GetConfigName())) {
+ vars["SONAME_FLAG"] =
+ this->GetMakefile()->GetSONameFlag(this->TargetLinkLanguage);
+ vars["SONAME"] = this->TargetNameSO;
+ if (targetType == cmTarget::SHARED_LIBRARY) {
+ std::string install_name_dir = this->GetTarget()
+ ->GetInstallNameDirForBuildTree(this->GetConfigName());
+
+ if (!install_name_dir.empty()) {
+ vars["INSTALLNAME_DIR"] =
+ this->GetLocalGenerator()->Convert(install_name_dir.c_str(),
+ cmLocalGenerator::NONE,
+ cmLocalGenerator::SHELL, false);
+ }
}
}
diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx
index c6469f2..80007f1 100644
--- a/Source/cmNinjaTargetGenerator.cxx
+++ b/Source/cmNinjaTargetGenerator.cxx
@@ -396,7 +396,6 @@ cmNinjaTargetGenerator
cmCustomCommand const* cc = (*si)->GetCustomCommand();
this->GetLocalGenerator()->AddCustomCommandTarget(cc, this->GetTarget());
}
- // TODO: this->GeneratorTarget->OSXContent
for(std::vector<cmSourceFile*>::const_iterator
si = this->GeneratorTarget->ExternalObjects.begin();
si != this->GeneratorTarget->ExternalObjects.end(); ++si)
diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx
index 25975e0..89f03f6 100644
--- a/Source/cmSystemTools.cxx
+++ b/Source/cmSystemTools.cxx
@@ -1633,33 +1633,28 @@ std::vector<std::string> cmSystemTools::GetEnvironmentVariables()
}
//----------------------------------------------------------------------
-std::vector<std::string> cmSystemTools::AppendEnv(
- std::vector<std::string>* env)
+void cmSystemTools::AppendEnv(std::vector<std::string> const& env)
{
- std::vector<std::string> origEnv = GetEnvironmentVariables();
-
- if (env && env->size()>0)
+ for(std::vector<std::string>::const_iterator eit = env.begin();
+ eit != env.end(); ++eit)
{
- std::vector<std::string>::const_iterator eit;
-
- for (eit = env->begin(); eit!= env->end(); ++eit)
- {
- PutEnv(eit->c_str());
- }
+ cmSystemTools::PutEnv(eit->c_str());
}
-
- return origEnv;
}
//----------------------------------------------------------------------
-void cmSystemTools::RestoreEnv(const std::vector<std::string>& env)
+cmSystemTools::SaveRestoreEnvironment::SaveRestoreEnvironment()
{
- std::vector<std::string>::const_iterator eit;
+ this->Env = cmSystemTools::GetEnvironmentVariables();
+}
+//----------------------------------------------------------------------
+cmSystemTools::SaveRestoreEnvironment::~SaveRestoreEnvironment()
+{
// First clear everything in the current environment:
- //
std::vector<std::string> currentEnv = GetEnvironmentVariables();
- for (eit = currentEnv.begin(); eit!= currentEnv.end(); ++eit)
+ for(std::vector<std::string>::const_iterator
+ eit = currentEnv.begin(); eit != currentEnv.end(); ++eit)
{
std::string var(*eit);
@@ -1669,27 +1664,11 @@ void cmSystemTools::RestoreEnv(const std::vector<std::string>& env)
var = var.substr(0, pos);
}
- UnsetEnv(var.c_str());
+ cmSystemTools::UnsetEnv(var.c_str());
}
// Then put back each entry from the original environment:
- //
- for (eit = env.begin(); eit!= env.end(); ++eit)
- {
- PutEnv(eit->c_str());
- }
-}
-
-//----------------------------------------------------------------------
-cmSystemTools::SaveRestoreEnvironment::SaveRestoreEnvironment()
-{
- this->Env = cmSystemTools::GetEnvironmentVariables();
-}
-
-//----------------------------------------------------------------------
-cmSystemTools::SaveRestoreEnvironment::~SaveRestoreEnvironment()
-{
- cmSystemTools::RestoreEnv(this->Env);
+ cmSystemTools::AppendEnv(this->Env);
}
#endif
diff --git a/Source/cmSystemTools.h b/Source/cmSystemTools.h
index 5f21de2..69673c9 100644
--- a/Source/cmSystemTools.h
+++ b/Source/cmSystemTools.h
@@ -371,16 +371,8 @@ public:
/** Get the list of all environment variables */
static std::vector<std::string> GetEnvironmentVariables();
- /** Append multiple variables to the current environment.
- Return the original environment, as it was before the
- append. */
- static std::vector<std::string> AppendEnv(
- std::vector<std::string>* env);
-
- /** Restore the full environment to "env" - use after
- AppendEnv to put the environment back to the way it
- was. */
- static void RestoreEnv(const std::vector<std::string>& env);
+ /** Append multiple variables to the current environment. */
+ static void AppendEnv(std::vector<std::string> const& env);
/** Helper class to save and restore the environment.
Instantiate this class as an automatic variable on
diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx
index cfa9976..c5ef9ff 100644
--- a/Source/cmTarget.cxx
+++ b/Source/cmTarget.cxx
@@ -700,9 +700,9 @@ void cmTarget::DefineProperties(cmake *cm)
"Setting this property tells CMake what imported configurations are "
"suitable for use when building the <CONFIG> configuration. "
"The first configuration in the list found to be provided by the "
- "imported target is selected. If no matching configurations are "
- "available the imported target is considered to be not found. "
- "This property is ignored for non-imported targets.",
+ "imported target is selected. If this property is set and no matching "
+ "configurations are available, then the imported target is considered "
+ "to be not found. This property is ignored for non-imported targets.",
false /* TODO: make this chained */ );
cm->DefineProperty
@@ -823,6 +823,19 @@ void cmTarget::DefineProperties(cmake *cm)
"CMAKE_SKIP_BUILD_RPATH if it is set when a target is created.");
cm->DefineProperty
+ ("NO_SONAME", cmProperty::TARGET,
+ "Whether to set \"soname\" when linking a shared library or module.",
+ "Enable this boolean property if a generated shared library or module "
+ "should not have \"soname\" set. Default is to set \"soname\" on all "
+ "shared libraries and modules as long as the platform supports it. "
+ "Generally, use this property only for leaf private libraries or "
+ "plugins. If you use it on normal shared libraries which other targets "
+ "link against, on some platforms a linker will insert a full path to "
+ "the library (as specified at link time) into the dynamic section of "
+ "the dependent binary. Therefore, once installed, dynamic loader may "
+ "eventually fail to locate the library for the binary.");
+
+ cm->DefineProperty
("SOVERSION", cmProperty::TARGET,
"What version number is this target.",
"For shared libraries VERSION and SOVERSION can be used to specify "
@@ -831,6 +844,7 @@ void cmTarget::DefineProperties(cmake *cm)
"supports symlinks and the linker supports so-names. "
"If only one of both is specified the missing is assumed to have "
"the same version number. "
+ "SOVERSION is ignored if NO_SONAME property is set. "
"For shared libraries and executables on Windows the VERSION "
"attribute is parsed to extract a \"major.minor\" version number. "
"These numbers are used as the image version of the binary. ");
@@ -2995,6 +3009,17 @@ std::string cmTarget::GetPDBName(const char* config)
}
//----------------------------------------------------------------------------
+bool cmTarget::HasSOName(const char* config)
+{
+ // soname is supported only for shared libraries and modules,
+ // and then only when the platform supports an soname flag.
+ return ((this->GetType() == cmTarget::SHARED_LIBRARY ||
+ this->GetType() == cmTarget::MODULE_LIBRARY) &&
+ !this->GetPropertyAsBool("NO_SONAME") &&
+ this->Makefile->GetSONameFlag(this->GetLinkerLanguage(config)));
+}
+
+//----------------------------------------------------------------------------
std::string cmTarget::GetSOName(const char* config)
{
if(this->IsImported())
@@ -3327,22 +3352,10 @@ void cmTarget::GetLibraryNames(std::string& name,
return;
}
- // Construct the name of the soname flag variable for this language.
- const char* ll = this->GetLinkerLanguage(config);
- std::string sonameFlag = "CMAKE_SHARED_LIBRARY_SONAME";
- if(ll)
- {
- sonameFlag += "_";
- sonameFlag += ll;
- }
- sonameFlag += "_FLAG";
-
// Check for library version properties.
const char* version = this->GetProperty("VERSION");
const char* soversion = this->GetProperty("SOVERSION");
- if((this->GetType() != cmTarget::SHARED_LIBRARY &&
- this->GetType() != cmTarget::MODULE_LIBRARY) ||
- !this->Makefile->GetDefinition(sonameFlag.c_str()) ||
+ if(!this->HasSOName(config) ||
this->IsFrameworkOnApple())
{
// Versioning is supported only for shared libraries and modules,
diff --git a/Source/cmTarget.h b/Source/cmTarget.h
index d41c827..d70cacd 100644
--- a/Source/cmTarget.h
+++ b/Source/cmTarget.h
@@ -347,6 +347,9 @@ public:
/** Get the name of the pdb file for the target. */
std::string GetPDBName(const char* config=0);
+ /** Whether this library has soname enabled and platform supports it. */
+ bool HasSOName(const char* config);
+
/** Get the soname of the target. Allowed only for a shared library. */
std::string GetSOName(const char* config);
diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx
index 9c25b0c..9a97ab0 100644
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -491,14 +491,9 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
std::vector<std::string> *configs =
static_cast<cmGlobalVisualStudio7Generator *>
(this->GlobalGenerator)->GetConfigurations();
- this->WriteString("<CustomBuild Include=\"", 2);
- // custom command have to use relative paths or they do not
- // show up in the GUI
- std::string path = cmSystemTools::RelativePath(
- this->Makefile->GetCurrentOutputDirectory(),
- sourcePath.c_str());
- this->ConvertToWindowsSlash(path);
- (*this->BuildFileStream ) << path << "\">\n";
+
+ this->WriteSource("CustomBuild", source, ">\n");
+
for(std::vector<std::string>::iterator i = configs->begin();
i != configs->end(); ++i)
{
@@ -541,6 +536,18 @@ cmVisualStudio10TargetGenerator::WriteCustomRule(cmSourceFile* source,
this->WriteString("</CustomBuild>\n", 2);
}
+std::string
+cmVisualStudio10TargetGenerator::ConvertPath(std::string const& path,
+ bool forceRelative)
+{
+ return forceRelative
+ ? cmSystemTools::RelativePath(
+ this->Makefile->GetCurrentOutputDirectory(), path.c_str())
+ : this->LocalGenerator->Convert(path.c_str(),
+ cmLocalGenerator::START_OUTPUT,
+ cmLocalGenerator::UNCHANGED);
+}
+
void cmVisualStudio10TargetGenerator::ConvertToWindowsSlash(std::string& s)
{
// first convert all of the slashes
@@ -559,13 +566,6 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
std::vector<cmSourceFile*> classes = this->Target->GetSourceFiles();
std::set<cmSourceGroup*> groupsUsed;
- std::vector<cmSourceFile*> clCompile;
- std::vector<cmSourceFile*> customBuild;
- std::vector<cmSourceFile*> none;
- std::vector<cmSourceFile*> headers;
- std::vector<cmSourceFile*> idls;
- std::vector<cmSourceFile*> resource;
-
for(std::vector<cmSourceFile*>::const_iterator s = classes.begin();
s != classes.end(); s++)
{
@@ -574,40 +574,6 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
cmSourceGroup& sourceGroup =
this->Makefile->FindSourceGroup(source.c_str(), sourceGroups);
groupsUsed.insert(&sourceGroup);
- const char* lang = sf->GetLanguage();
- bool header = (*s)->GetPropertyAsBool("HEADER_FILE_ONLY")
- || this->GlobalGenerator->IgnoreFile
- ((*s)->GetExtension().c_str());
- std::string ext =
- cmSystemTools::LowerCase((*s)->GetExtension());
- if(!lang)
- {
- lang = "None";
- }
- if(header)
- {
- headers.push_back(sf);
- }
- else if(lang[0] == 'C')
- {
- clCompile.push_back(sf);
- }
- else if(strcmp(lang, "RC") == 0)
- {
- resource.push_back(sf);
- }
- else if(sf->GetCustomCommand())
- {
- customBuild.push_back(sf);
- }
- else if(ext == "idl")
- {
- idls.push_back(sf);
- }
- else
- {
- none.push_back(sf);
- }
}
this->AddMissingSourceGroups(groupsUsed, sourceGroups);
@@ -629,11 +595,11 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
"xmlns=\"http://schemas.microsoft.com/"
"developer/msbuild/2003\">\n",
0);
- this->WriteGroupSources("ClCompile", clCompile, sourceGroups);
- this->WriteGroupSources("ClInclude", headers, sourceGroups);
- this->WriteGroupSources("ResourceCompile", resource, sourceGroups);
- this->WriteGroupSources("Midl", idls, sourceGroups);
- this->WriteGroupSources("CustomBuild", customBuild, sourceGroups);
+ for(ToolSourceMap::const_iterator ti = this->Tools.begin();
+ ti != this->Tools.end(); ++ti)
+ {
+ this->WriteGroupSources(ti->first.c_str(), ti->second, sourceGroups);
+ }
// Add object library contents as external objects.
std::vector<std::string> objs;
@@ -690,7 +656,6 @@ void cmVisualStudio10TargetGenerator::WriteGroups()
this->WriteString("</Filter>\n", 2);
}
this->WriteString("</ItemGroup>\n", 1);
- this->WriteGroupSources("None", none, sourceGroups);
this->WriteString("</Project>\n", 0);
// restore stream pointer
this->BuildFileStream = save;
@@ -750,32 +715,20 @@ cmVisualStudio10TargetGenerator::AddMissingSourceGroups(
void
cmVisualStudio10TargetGenerator::
WriteGroupSources(const char* name,
- std::vector<cmSourceFile*> const& sources,
+ ToolSources const& sources,
std::vector<cmSourceGroup>& sourceGroups)
{
this->WriteString("<ItemGroup>\n", 1);
- for(std::vector<cmSourceFile*>::const_iterator s = sources.begin();
+ for(ToolSources::const_iterator s = sources.begin();
s != sources.end(); ++s)
{
- cmSourceFile* sf = *s;
- if(sf->GetExtension() == "obj")
- {
- continue;
- }
+ cmSourceFile* sf = s->SourceFile;
std::string const& source = sf->GetFullPath();
cmSourceGroup& sourceGroup =
this->Makefile->FindSourceGroup(source.c_str(), sourceGroups);
const char* filter = sourceGroup.GetFullName();
this->WriteString("<", 2);
- std::string path = source;
- // custom command sources must use relative paths or they will
- // not show up in the GUI.
- if(sf->GetCustomCommand())
- {
- path = cmSystemTools::RelativePath(
- this->Makefile->GetCurrentOutputDirectory(),
- source.c_str());
- }
+ std::string path = this->ConvertPath(source, s->RelativePath);
this->ConvertToWindowsSlash(path);
(*this->BuildFileStream) << name << " Include=\""
<< path;
@@ -796,15 +749,47 @@ WriteGroupSources(const char* name,
}
void cmVisualStudio10TargetGenerator::WriteSource(
- const char* tool, cmSourceFile* sf, bool end)
+ const char* tool, cmSourceFile* sf, const char* end)
{
- std::string sourceFile = sf->GetFullPath();
- // do not use a relative path here because it means that you
- // can not use as long a path to the file.
+ // Visual Studio tools append relative paths to the current dir, as in:
+ //
+ // c:\path\to\current\dir\..\..\..\relative\path\to\source.c
+ //
+ // and fail if this exceeds the maximum allowed path length. Our path
+ // conversion uses full paths outside the build tree to allow deeper trees.
+ bool forceRelative = false;
+ std::string sourceFile = this->ConvertPath(sf->GetFullPath(), false);
+ if(this->LocalGenerator->GetVersion() == cmLocalVisualStudioGenerator::VS10
+ && cmSystemTools::FileIsFullPath(sourceFile.c_str()))
+ {
+ // Normal path conversion resulted in a full path. VS 10 (but not 11)
+ // refuses to show the property page in the IDE for a source file with a
+ // full path (not starting in a '.' or '/' AFAICT). CMake <= 2.8.4 used a
+ // relative path but to allow deeper build trees CMake 2.8.[5678] used a
+ // full path except for custom commands. Custom commands do not work
+ // without a relative path, but they do not seem to be involved in tools
+ // with the above behavior. For other sources we now use a relative path
+ // when the combined path will not be too long so property pages appear.
+ std::string sourceRel = this->ConvertPath(sf->GetFullPath(), true);
+ size_t const maxLen = 250;
+ if(sf->GetCustomCommand() ||
+ ((strlen(this->Makefile->GetCurrentOutputDirectory()) + 1 +
+ sourceRel.length()) <= maxLen))
+ {
+ forceRelative = true;
+ sourceFile = sourceRel;
+ }
+ else
+ {
+ this->GlobalGenerator->PathTooLong(this->Target, sf, sourceRel);
+ }
+ }
this->ConvertToWindowsSlash(sourceFile);
this->WriteString("<", 2);
(*this->BuildFileStream ) << tool <<
- " Include=\"" << sourceFile << (end? "\" />\n" : "\" ");
+ " Include=\"" << sourceFile << "\"" << (end? end : " />\n");
+ ToolSource toolSource = {sf, forceRelative};
+ this->Tools[tool].push_back(toolSource);
}
void cmVisualStudio10TargetGenerator::WriteSources(
@@ -836,7 +821,7 @@ void cmVisualStudio10TargetGenerator::WriteAllSources()
bool cl = strcmp(lang, "C") == 0 || strcmp(lang, "CXX") == 0;
bool rc = strcmp(lang, "RC") == 0;
const char* tool = cl? "ClCompile" : (rc? "ResourceCompile" : "None");
- this->WriteSource(tool, *si, false);
+ this->WriteSource(tool, *si, " ");
// ouput any flags specific to this source file
if(cl && this->OutputSourceSpecificFlags(*si))
{
diff --git a/Source/cmVisualStudio10TargetGenerator.h b/Source/cmVisualStudio10TargetGenerator.h
index 20a443b..2d5ec2a 100644
--- a/Source/cmVisualStudio10TargetGenerator.h
+++ b/Source/cmVisualStudio10TargetGenerator.h
@@ -43,11 +43,19 @@ public:
);
private:
+ struct ToolSource
+ {
+ cmSourceFile* SourceFile;
+ bool RelativePath;
+ };
+ struct ToolSources: public std::vector<ToolSource> {};
+
+ std::string ConvertPath(std::string const& path, bool forceRelative);
void ConvertToWindowsSlash(std::string& s);
void WriteString(const char* line, int indentLevel);
void WriteProjectConfigurations();
void WriteProjectConfigurationValues();
- void WriteSource(const char* tool, cmSourceFile* sf, bool end = true);
+ void WriteSource(const char* tool, cmSourceFile* sf, const char* end = 0);
void WriteSources(const char* tool, std::vector<cmSourceFile*> const&);
void WriteAllSources();
void WriteDotNetReferences();
@@ -77,8 +85,7 @@ private:
void WriteEvents(std::string const& configName);
void WriteEvent(const char* name, std::vector<cmCustomCommand> & commands,
std::string const& configName);
- void WriteGroupSources(const char* name,
- std::vector<cmSourceFile*> const& sources,
+ void WriteGroupSources(const char* name, ToolSources const& sources,
std::vector<cmSourceGroup>& );
void AddMissingSourceGroups(std::set<cmSourceGroup*>& groupsUsed,
const std::vector<cmSourceGroup>& allGroups);
@@ -99,6 +106,9 @@ private:
cmGeneratedFileStream* BuildFileStream;
cmLocalVisualStudio7Generator* LocalGenerator;
std::set<cmSourceFile*> SourcesVisited;
+
+ typedef std::map<cmStdString, ToolSources> ToolSourceMap;
+ ToolSourceMap Tools;
};
#endif
diff --git a/Source/cmake.cxx b/Source/cmake.cxx
index 846aef5..2ffff42 100644
--- a/Source/cmake.cxx
+++ b/Source/cmake.cxx
@@ -70,6 +70,7 @@
# include "cmGlobalVisualStudio10Win64Generator.h"
# include "cmGlobalVisualStudio11Generator.h"
# include "cmGlobalVisualStudio11Win64Generator.h"
+# include "cmGlobalVisualStudio11ARMGenerator.h"
# include "cmGlobalVisualStudio8Win64Generator.h"
# include "cmGlobalBorlandMakefileGenerator.h"
# include "cmGlobalNMakeMakefileGenerator.h"
@@ -2569,6 +2570,8 @@ void cmake::AddDefaultGenerators()
&cmGlobalVisualStudio11Generator::New;
this->Generators[cmGlobalVisualStudio11Win64Generator::GetActualName()] =
&cmGlobalVisualStudio11Win64Generator::New;
+ this->Generators[cmGlobalVisualStudio11ARMGenerator::GetActualName()] =
+ &cmGlobalVisualStudio11ARMGenerator::New;
this->Generators[cmGlobalVisualStudio71Generator::GetActualName()] =
&cmGlobalVisualStudio71Generator::New;
this->Generators[cmGlobalVisualStudio8Generator::GetActualName()] =
diff --git a/Source/kwsys/CMakeLists.txt b/Source/kwsys/CMakeLists.txt
index 0ef4e28..a132357 100644
--- a/Source/kwsys/CMakeLists.txt
+++ b/Source/kwsys/CMakeLists.txt
@@ -123,7 +123,6 @@ IF(KWSYS_STANDALONE OR CMake_SOURCE_DIR)
SET(KWSYS_USE_FundamentalType 1)
SET(KWSYS_USE_Terminal 1)
SET(KWSYS_USE_IOStream 1)
- SET(KWSYS_USE_DateStamp 1)
SET(KWSYS_USE_String 1)
SET(KWSYS_USE_SystemInformation 1)
SET(KWSYS_USE_CPU 1)
@@ -142,7 +141,6 @@ IF(KWSYS_USE_Process)
SET(KWSYS_USE_System 1)
ENDIF(KWSYS_USE_Process)
IF(KWSYS_USE_SystemInformation)
- SET(KWSYS_USE_FundamentalType 1)
SET(KWSYS_USE_Process 1)
ENDIF(KWSYS_USE_SystemInformation)
@@ -414,6 +412,39 @@ IF(UNIX)
"Checking whether struct stat has st_mtim member" DIRECT)
ENDIF(UNIX)
+# Check existence and uniqueness of long long and __int64.
+KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_LONG_LONG
+ "Checking whether C++ compiler has 'long long'" DIRECT)
+KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS___INT64
+ "Checking whether C++ compiler has '__int64'" DIRECT)
+IF(KWSYS_CXX_HAS___INT64)
+ KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_SAME_LONG_AND___INT64
+ "Checking whether long and __int64 are the same type" DIRECT)
+ IF(KWSYS_CXX_HAS_LONG_LONG)
+ KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_SAME_LONG_LONG_AND___INT64
+ "Checking whether long long and __int64 are the same type" DIRECT)
+ ENDIF()
+ENDIF()
+
+# Enable the "long long" type if it is available. It is standard in
+# C99 and C++03 but not in earlier standards.
+IF(KWSYS_CXX_HAS_LONG_LONG)
+ SET(KWSYS_USE_LONG_LONG 1)
+ELSE()
+ SET(KWSYS_USE_LONG_LONG 0)
+ENDIF()
+
+# Enable the "__int64" type if it is available and unique. It is not
+# standard.
+SET(KWSYS_USE___INT64 0)
+IF(KWSYS_CXX_HAS___INT64)
+ IF(NOT KWSYS_CXX_SAME_LONG_AND___INT64)
+ IF(NOT KWSYS_CXX_SAME_LONG_LONG_AND___INT64)
+ SET(KWSYS_USE___INT64 1)
+ ENDIF()
+ ENDIF()
+ENDIF()
+
IF(KWSYS_USE_FundamentalType)
# Look for type size helper macros.
KWSYS_PLATFORM_INFO_TEST(C KWSYS_C_TYPE_MACROS
@@ -464,34 +495,6 @@ IF(KWSYS_USE_FundamentalType)
ENDIF()
ENDFOREACH()
- # Check uniqueness of types.
- IF(KWSYS_SIZEOF___INT64)
- KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_SAME_LONG_AND___INT64
- "Checking whether long and __int64 are the same type" DIRECT)
- IF(KWSYS_SIZEOF_LONG_LONG)
- KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_SAME_LONG_LONG_AND___INT64
- "Checking whether long long and __int64 are the same type" DIRECT)
- ENDIF(KWSYS_SIZEOF_LONG_LONG)
- ENDIF(KWSYS_SIZEOF___INT64)
-
- # Enable the "long long" type if it is available. It is standard in
- # C99 and C++03 but not in earlier standards.
- IF(KWSYS_SIZEOF_LONG_LONG)
- SET(KWSYS_USE_LONG_LONG 1)
- ELSE(KWSYS_SIZEOF_LONG_LONG)
- SET(KWSYS_USE_LONG_LONG 0)
- ENDIF(KWSYS_SIZEOF_LONG_LONG)
-
- # Enable the "__int64" type if it is available and unique. It is not
- # standard.
- SET(KWSYS_USE___INT64 0)
- IF(KWSYS_SIZEOF___INT64)
- IF(NOT KWSYS_CXX_SAME_LONG_AND___INT64)
- IF(NOT KWSYS_CXX_SAME_LONG_LONG_AND___INT64)
- SET(KWSYS_USE___INT64 1)
- ENDIF(NOT KWSYS_CXX_SAME_LONG_LONG_AND___INT64)
- ENDIF(NOT KWSYS_CXX_SAME_LONG_AND___INT64)
- ENDIF(KWSYS_SIZEOF___INT64)
IF(KWSYS_USE___INT64)
KWSYS_PLATFORM_CXX_TEST(KWSYS_CAN_CONVERT_UI64_TO_DOUBLE
"Checking whether unsigned __int64 can convert to double" DIRECT)
@@ -506,8 +509,6 @@ ENDIF(KWSYS_USE_FundamentalType)
IF(KWSYS_USE_IOStream)
# Determine whether iostreams support long long.
- KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_LONG_LONG
- "Checking whether C++ compiler has 'long long'" DIRECT)
IF(KWSYS_CXX_HAS_LONG_LONG)
SET(KWSYS_PLATFORM_CXX_TEST_DEFINES
-DKWSYS_IOS_USE_ANSI=${KWSYS_IOS_USE_ANSI}
@@ -553,11 +554,22 @@ SET_SOURCE_FILES_PROPERTIES(ProcessUNIX.c System.c PROPERTIES
COMPILE_FLAGS "-DKWSYS_C_HAS_PTRDIFF_T=${KWSYS_C_HAS_PTRDIFF_T} -DKWSYS_C_HAS_SSIZE_T=${KWSYS_C_HAS_SSIZE_T}"
)
-IF(KWSYS_DO_NOT_CLEAN_PUTENV)
- # Disable cleanup of putenv memory for issues with GCOV.
+IF(KWSYS_USE_SystemTools)
+ KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_SETENV
+ "Checking whether CXX compiler has setenv" DIRECT)
+ KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_UNSETENV
+ "Checking whether CXX compiler has unsetenv" DIRECT)
+ KWSYS_PLATFORM_CXX_TEST(KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H
+ "Checking whether CXX compiler has environ in stdlib.h" DIRECT)
SET_SOURCE_FILES_PROPERTIES(SystemTools.cxx PROPERTIES
- COMPILE_FLAGS -DKWSYS_DO_NOT_CLEAN_PUTENV=1)
-ENDIF(KWSYS_DO_NOT_CLEAN_PUTENV)
+ COMPILE_FLAGS "-DKWSYS_CXX_HAS_SETENV=${KWSYS_CXX_HAS_SETENV} -DKWSYS_CXX_HAS_UNSETENV=${KWSYS_CXX_HAS_UNSETENV} -DKWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H=${KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H}")
+ENDIF()
+
+IF(KWSYS_USE_SystemInformation)
+ SET_PROPERTY(SOURCE SystemInformation.cxx PROPERTY
+ COMPILE_DEFINITIONS KWSYS_USE_LONG_LONG=${KWSYS_USE_LONG_LONG}
+ KWSYS_USE___INT64=${KWSYS_USE___INT64})
+ENDIF()
#-----------------------------------------------------------------------------
# Choose a directory for the generated headers.
@@ -690,7 +702,7 @@ ENDFOREACH(cpp)
# Add selected C components.
FOREACH(c
- Process Base64 FundamentalType MD5 Terminal System DateStamp String CPU
+ Process Base64 FundamentalType MD5 Terminal System String CPU
)
IF(KWSYS_USE_${c})
# Use the corresponding header file.
diff --git a/Source/kwsys/DateStamp.h.in b/Source/kwsys/DateStamp.h.in
deleted file mode 100644
index c3d0099..0000000
--- a/Source/kwsys/DateStamp.h.in
+++ /dev/null
@@ -1,42 +0,0 @@
-/*============================================================================
- KWSys - Kitware System Library
- Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
-
- Distributed under the OSI-approved BSD License (the "License");
- see accompanying file Copyright.txt for details.
-
- This software is distributed WITHOUT ANY WARRANTY; without even the
- implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- See the License for more information.
-============================================================================*/
-#ifndef @KWSYS_NAMESPACE@_DateStamp_h
-#define @KWSYS_NAMESPACE@_DateStamp_h
-
-/** Version date integer year. The format is CCYY. */
-#define @KWSYS_NAMESPACE@_DATE_STAMP_YEAR @KWSYS_DATE_STAMP_YEAR@
-
-/** Version date integer month. The format is MM. */
-#define @KWSYS_NAMESPACE@_DATE_STAMP_MONTH @KWSYS_DATE_STAMP_MONTH@
-
-/** Version date integer day. The format is DD. */
-#define @KWSYS_NAMESPACE@_DATE_STAMP_DAY @KWSYS_DATE_STAMP_DAY@
-
-/** Version date full integer. The format is CCYYMMDD. */
-#define @KWSYS_NAMESPACE@_DATE_STAMP_FULL @KWSYS_DATE_STAMP_YEAR@@KWSYS_DATE_STAMP_MONTH@@KWSYS_DATE_STAMP_DAY@
-
-/** Version date string year. The format is "CCYY". */
-#define @KWSYS_NAMESPACE@_DATE_STAMP_STRING_YEAR "@KWSYS_DATE_STAMP_YEAR@"
-
-/** Version date string month. The format is "MM". */
-#define @KWSYS_NAMESPACE@_DATE_STAMP_STRING_MONTH "@KWSYS_DATE_STAMP_MONTH@"
-
-/** Version date string day. The format is "DD". */
-#define @KWSYS_NAMESPACE@_DATE_STAMP_STRING_DAY "@KWSYS_DATE_STAMP_DAY@"
-
-/** Version date full string. The format is "CCYYMMDD". */
-#define @KWSYS_NAMESPACE@_DATE_STAMP_STRING_FULL "@KWSYS_DATE_STAMP_YEAR@@KWSYS_DATE_STAMP_MONTH@@KWSYS_DATE_STAMP_DAY@"
-
-/** Version date formatted string. The format is "CCYY-MM-DD". */
-#define @KWSYS_NAMESPACE@_DATE_STAMP_STRING "@KWSYS_DATE_STAMP_YEAR@-@KWSYS_DATE_STAMP_MONTH@-@KWSYS_DATE_STAMP_DAY@"
-
-#endif
diff --git a/Source/kwsys/SystemInformation.cxx b/Source/kwsys/SystemInformation.cxx
index d49c0d7..e1ee873 100644
--- a/Source/kwsys/SystemInformation.cxx
+++ b/Source/kwsys/SystemInformation.cxx
@@ -26,7 +26,6 @@
// http://msdn.microsoft.com/en-us/library/ms683219(VS.85).aspx
#include "kwsysPrivate.h"
-#include KWSYS_HEADER(FundamentalType.h)
#include KWSYS_HEADER(stl/string)
#include KWSYS_HEADER(stl/vector)
#include KWSYS_HEADER(ios/iosfwd)
@@ -38,7 +37,6 @@
// Work-around CMake dependency scanning limitation. This must
// duplicate the above list of headers.
#if 0
-# include "FundamentalType.h.in"
# include "SystemInformation.hxx.in"
# include "Process.h.in"
# include "Configure.hxx.in"
diff --git a/Source/kwsys/SystemTools.cxx b/Source/kwsys/SystemTools.cxx
index 4d83293..66850e9 100644
--- a/Source/kwsys/SystemTools.cxx
+++ b/Source/kwsys/SystemTools.cxx
@@ -25,6 +25,8 @@
#include KWSYS_HEADER(ios/fstream)
#include KWSYS_HEADER(ios/sstream)
+#include KWSYS_HEADER(stl/set)
+
// Work-around CMake dependency scanning limitation. This must
// duplicate the above list of headers.
#if 0
@@ -78,6 +80,10 @@
# undef _WIN32
#endif
+#if !KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H
+extern char **environ;
+#endif
+
#ifdef __CYGWIN__
extern "C" void cygwin_conv_to_win32_path(const char *path, char *win32_path);
#endif
@@ -371,38 +377,224 @@ bool SystemTools::GetEnv(const char* key, kwsys_stl::string& result)
}
}
-#ifdef __INTEL_COMPILER
-#pragma warning disable 444
+//----------------------------------------------------------------------------
+
+#if defined(__CYGWIN__) || defined(__GLIBC__)
+# define KWSYS_PUTENV_NAME /* putenv("A") removes A. */
+#elif defined(_WIN32)
+# define KWSYS_PUTENV_EMPTY /* putenv("A=") removes A. */
#endif
-class kwsysDeletingCharVector : public kwsys_stl::vector<char*>
+#if KWSYS_CXX_HAS_UNSETENV
+/* unsetenv("A") removes A from the environment.
+ On older platforms it returns void instead of int. */
+static int kwsysUnPutEnv(const char* env)
{
-public:
- ~kwsysDeletingCharVector();
-};
+ if(const char* eq = strchr(env, '='))
+ {
+ std::string name(env, eq-env);
+ unsetenv(name.c_str());
+ }
+ else
+ {
+ unsetenv(env);
+ }
+ return 0;
+}
-kwsysDeletingCharVector::~kwsysDeletingCharVector()
+#elif defined(KWSYS_PUTENV_EMPTY) || defined(KWSYS_PUTENV_NAME)
+/* putenv("A=") or putenv("A") removes A from the environment. */
+static int kwsysUnPutEnv(const char* env)
{
-#ifndef KWSYS_DO_NOT_CLEAN_PUTENV
- for(kwsys_stl::vector<char*>::iterator i = this->begin();
- i != this->end(); ++i)
+ int err = 0;
+ const char* eq = strchr(env, '=');
+ size_t const len = eq? (size_t)(eq-env) : strlen(env);
+# ifdef KWSYS_PUTENV_EMPTY
+ size_t const sz = len + 2;
+# else
+ size_t const sz = len + 1;
+# endif
+ char local_buf[256];
+ char* buf = sz > sizeof(local_buf) ? (char*)malloc(sz) : local_buf;
+ if(!buf)
+ {
+ return -1;
+ }
+ strncpy(buf, env, len);
+# ifdef KWSYS_PUTENV_EMPTY
+ buf[len] = '=';
+ buf[len+1] = 0;
+ if(putenv(buf) < 0)
+ {
+ err = errno;
+ }
+# else
+ buf[len] = 0;
+ if(putenv(buf) < 0 && errno != EINVAL)
+ {
+ err = errno;
+ }
+# endif
+ if(buf != local_buf)
{
- delete []*i;
+ free(buf);
}
+ if(err)
+ {
+ errno = err;
+ return -1;
+ }
+ return 0;
+}
+
+#else
+/* Manipulate the "environ" global directly. */
+static int kwsysUnPutEnv(const char* env)
+{
+ const char* eq = strchr(env, '=');
+ size_t const len = eq? (size_t)(eq-env) : strlen(env);
+ int in = 0;
+ int out = 0;
+ while(environ[in])
+ {
+ if(strlen(environ[in]) > len &&
+ environ[in][len] == '=' &&
+ strncmp(env, environ[in], len) == 0)
+ {
+ ++in;
+ }
+ else
+ {
+ environ[out++] = environ[in++];
+ }
+ }
+ while(out < in)
+ {
+ environ[out++] = 0;
+ }
+ return 0;
+}
#endif
+
+//----------------------------------------------------------------------------
+
+#if KWSYS_CXX_HAS_SETENV
+
+/* setenv("A", "B", 1) will set A=B in the environment and makes its
+ own copies of the strings. */
+bool SystemTools::PutEnv(const char* env)
+{
+ if(const char* eq = strchr(env, '='))
+ {
+ std::string name(env, eq-env);
+ return setenv(name.c_str(), eq+1, 1) == 0;
+ }
+ else
+ {
+ return kwsysUnPutEnv(env) == 0;
+ }
+}
+
+bool SystemTools::UnPutEnv(const char* env)
+{
+ return kwsysUnPutEnv(env) == 0;
+}
+
+#else
+
+/* putenv("A=B") will set A=B in the environment. Most putenv implementations
+ put their argument directly in the environment. They never free the memory
+ on program exit. Keep an active set of pointers to memory we allocate and
+ pass to putenv, one per environment key. At program exit remove any
+ environment values that may still reference memory we allocated. Then free
+ the memory. This will not affect any environment values we never set. */
+
+# ifdef __INTEL_COMPILER
+# pragma warning disable 444 /* base has non-virtual destructor */
+# endif
+
+/* Order by environment key only (VAR from VAR=VALUE). */
+struct kwsysEnvCompare
+{
+ bool operator() (const char* l, const char* r) const
+ {
+ const char* leq = strchr(l, '=');
+ const char* req = strchr(r, '=');
+ size_t llen = leq? (leq-l) : strlen(l);
+ size_t rlen = req? (req-r) : strlen(r);
+ if(llen == rlen)
+ {
+ return strncmp(l,r,llen) < 0;
+ }
+ else
+ {
+ return strcmp(l,r) < 0;
+ }
+ }
+};
+
+class kwsysEnv: public kwsys_stl::set<const char*, kwsysEnvCompare>
+{
+ class Free
+ {
+ const char* Env;
+ public:
+ Free(const char* env): Env(env) {}
+ ~Free() { free(const_cast<char*>(this->Env)); }
+ };
+public:
+ typedef kwsys_stl::set<const char*, kwsysEnvCompare> derived;
+ ~kwsysEnv()
+ {
+ for(derived::iterator i = this->begin(); i != this->end(); ++i)
+ {
+ kwsysUnPutEnv(*i);
+ free(const_cast<char*>(*i));
+ }
+ }
+ const char* Release(const char* env)
+ {
+ const char* old = 0;
+ derived::iterator i = this->find(env);
+ if(i != this->end())
+ {
+ old = *i;
+ this->erase(i);
+ }
+ return old;
+ }
+ bool Put(const char* env)
+ {
+ Free oldEnv(this->Release(env));
+ static_cast<void>(oldEnv);
+ char* newEnv = strdup(env);
+ this->insert(newEnv);
+ return putenv(newEnv) == 0;
+ }
+ bool UnPut(const char* env)
+ {
+ Free oldEnv(this->Release(env));
+ static_cast<void>(oldEnv);
+ return kwsysUnPutEnv(env) == 0;
+ }
+};
+
+static kwsysEnv kwsysEnvInstance;
+
+bool SystemTools::PutEnv(const char* env)
+{
+ return kwsysEnvInstance.Put(env);
}
-bool SystemTools::PutEnv(const char* value)
+
+bool SystemTools::UnPutEnv(const char* env)
{
- static kwsysDeletingCharVector localEnvironment;
- char* envVar = new char[strlen(value)+1];
- strcpy(envVar, value);
- int ret = putenv(envVar);
- // save the pointer in the static vector so that it can
- // be deleted on exit
- localEnvironment.push_back(envVar);
- return ret == 0;
+ return kwsysEnvInstance.UnPut(env);
}
+#endif
+
+//----------------------------------------------------------------------------
+
const char* SystemTools::GetExecutableExtension()
{
#if defined(_WIN32) || defined(__CYGWIN__) || defined(__VMS)
diff --git a/Source/kwsys/SystemTools.hxx.in b/Source/kwsys/SystemTools.hxx.in
index 04f1978..5171125 100644
--- a/Source/kwsys/SystemTools.hxx.in
+++ b/Source/kwsys/SystemTools.hxx.in
@@ -749,7 +749,11 @@ public:
/** Put a string into the environment
of the form var=value */
- static bool PutEnv(const char* value);
+ static bool PutEnv(const char* env);
+
+ /** Remove a string from the environment.
+ Input is of the form "var" or "var=value" (value is ignored). */
+ static bool UnPutEnv(const char* env);
/**
* Get current working directory CWD
diff --git a/Source/kwsys/hash_fun.hxx.in b/Source/kwsys/hash_fun.hxx.in
index 8c5eb6a..6f787dd 100644
--- a/Source/kwsys/hash_fun.hxx.in
+++ b/Source/kwsys/hash_fun.hxx.in
@@ -38,7 +38,6 @@
#define @KWSYS_NAMESPACE@_hash_fun_hxx
#include <@KWSYS_NAMESPACE@/Configure.hxx>
-#include <@KWSYS_NAMESPACE@/FundamentalType.h>
#include <@KWSYS_NAMESPACE@/cstddef> // size_t
#include <@KWSYS_NAMESPACE@/stl/string> // string
@@ -124,7 +123,7 @@ struct hash<unsigned long> {
};
// use long long or __int64
-#if @KWSYS_NAMESPACE@_USE_LONG_LONG
+#if @KWSYS_USE_LONG_LONG@
@KWSYS_NAMESPACE@_CXX_DEFINE_SPECIALIZATION
struct hash<long long> {
size_t operator()(long long __x) const { return __x; }
@@ -134,7 +133,7 @@ struct hash<long long> {
struct hash<unsigned long long> {
size_t operator()(unsigned long long __x) const { return __x; }
};
-#elif @KWSYS_NAMESPACE@_USE___INT64
+#elif @KWSYS_USE___INT64@
@KWSYS_NAMESPACE@_CXX_DEFINE_SPECIALIZATION
struct hash<__int64> {
size_t operator()(__int64 __x) const { return __x; }
diff --git a/Source/kwsys/kwsysDateStamp.cmake b/Source/kwsys/kwsysDateStamp.cmake
deleted file mode 100644
index 3d0f03d..0000000
--- a/Source/kwsys/kwsysDateStamp.cmake
+++ /dev/null
@@ -1,21 +0,0 @@
-# Do not edit! Generated by kwsysDateStamp.py
-#=============================================================================
-# KWSys - Kitware System Library
-# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-
-# KWSys version date year component. Format is CCYY.
-SET(KWSYS_DATE_STAMP_YEAR 2012)
-
-# KWSys version date month component. Format is MM.
-SET(KWSYS_DATE_STAMP_MONTH 04)
-
-# KWSys version date day component. Format is DD.
-SET(KWSYS_DATE_STAMP_DAY 20)
diff --git a/Source/kwsys/kwsysDateStamp.py b/Source/kwsys/kwsysDateStamp.py
deleted file mode 100755
index bd2e49a..0000000
--- a/Source/kwsys/kwsysDateStamp.py
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/usr/bin/python
-#=============================================================================
-# KWSys - Kitware System Library
-# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-
-import sys,os
-import time
-
-# Get the path to the directory containing this script.
-if __name__ == '__main__':
- selfdir = os.path.abspath(sys.path[0] or os.curdir)
-else:
- selfdir = os.path.abspath(os.path.dirname(__file__))
-
-# Open the CMake code file.
-fname = os.path.join(selfdir, 'kwsysDateStamp.cmake')
-fout = open(fname, 'w');
-
-# Get the current time.
-ct = time.localtime()
-
-# Write the CMake code describing the date.
-fout.write("""# Do not edit! Generated by kwsysDateStamp.py
-#=============================================================================
-# KWSys - Kitware System Library
-# Copyright 2000-2009 Kitware, Inc., Insight Software Consortium
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-
-# KWSys version date year component. Format is CCYY.
-SET(KWSYS_DATE_STAMP_YEAR %04u)
-
-# KWSys version date month component. Format is MM.
-SET(KWSYS_DATE_STAMP_MONTH %02u)
-
-# KWSys version date day component. Format is DD.
-SET(KWSYS_DATE_STAMP_DAY %02u)
-""" % (ct.tm_year, ct.tm_mon, ct.tm_mday))
-
-fout.close()
diff --git a/Source/kwsys/kwsysPlatformTestsCXX.cxx b/Source/kwsys/kwsysPlatformTestsCXX.cxx
index 903be9b..7b73d06 100644
--- a/Source/kwsys/kwsysPlatformTestsCXX.cxx
+++ b/Source/kwsys/kwsysPlatformTestsCXX.cxx
@@ -122,6 +122,15 @@ int main()
}
#endif
+#ifdef TEST_KWSYS_CXX_HAS___INT64
+__int64 f(__int64 n) { return n; }
+int main()
+{
+ __int64 n = 0;
+ return static_cast<int>(f(n));
+}
+#endif
+
#ifdef TEST_KWSYS_CXX_HAS_NULL_TEMPLATE_ARGS
template <class T> class A;
template <class T> int f(A<T>&);
@@ -393,6 +402,32 @@ int main(int, char **argv)
}
#endif
+#ifdef TEST_KWSYS_CXX_HAS_SETENV
+#include <stdlib.h>
+int main()
+{
+ return setenv("A", "B", 1);
+}
+#endif
+
+#ifdef TEST_KWSYS_CXX_HAS_UNSETENV
+#include <stdlib.h>
+int main()
+{
+ unsetenv("A");
+ return 0;
+}
+#endif
+
+#ifdef TEST_KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H
+#include <stdlib.h>
+int main()
+{
+ char* e = environ[0];
+ return e? 0:1;
+}
+#endif
+
#ifdef TEST_KWSYS_CXX_TYPE_INFO
/* Collect fundamental type information and save it to a CMake script. */
diff --git a/Source/kwsys/testSystemTools.cxx b/Source/kwsys/testSystemTools.cxx
index c0e74af..3ac0cb3 100644
--- a/Source/kwsys/testSystemTools.cxx
+++ b/Source/kwsys/testSystemTools.cxx
@@ -328,6 +328,58 @@ bool CheckStringOperations()
}
//----------------------------------------------------------------------------
+
+bool CheckPutEnv(const char* env, const char* name, const char* value)
+{
+ if(!kwsys::SystemTools::PutEnv(env))
+ {
+ kwsys_ios::cerr << "PutEnv(\"" << env
+ << "\") failed!" << kwsys_ios::endl;
+ return false;
+ }
+ const char* v = kwsys::SystemTools::GetEnv(name);
+ v = v? v : "(null)";
+ if(strcmp(v, value) != 0)
+ {
+ kwsys_ios::cerr << "GetEnv(\"" << name << "\") returned \""
+ << v << "\", not \"" << value << "\"!" << kwsys_ios::endl;
+ return false;
+ }
+ return true;
+}
+
+bool CheckUnPutEnv(const char* env, const char* name)
+{
+ if(!kwsys::SystemTools::UnPutEnv(env))
+ {
+ kwsys_ios::cerr << "UnPutEnv(\"" << env << "\") failed!"
+ << kwsys_ios::endl;
+ return false;
+ }
+ if(const char* v = kwsys::SystemTools::GetEnv(name))
+ {
+ kwsys_ios::cerr << "GetEnv(\"" << name << "\") returned \""
+ << v << "\", not (null)!" << kwsys_ios::endl;
+ return false;
+ }
+ return true;
+}
+
+bool CheckEnvironmentOperations()
+{
+ bool res = true;
+ res &= CheckPutEnv("A=B", "A", "B");
+ res &= CheckPutEnv("B=C", "B", "C");
+ res &= CheckPutEnv("C=D", "C", "D");
+ res &= CheckPutEnv("D=E", "D", "E");
+ res &= CheckUnPutEnv("A", "A");
+ res &= CheckUnPutEnv("B=", "B");
+ res &= CheckUnPutEnv("C=D", "C");
+ /* Leave "D=E" in environment so a memory checker can test for leaks. */
+ return res;
+}
+
+//----------------------------------------------------------------------------
int testSystemTools(int, char*[])
{
bool res = true;
@@ -356,5 +408,7 @@ int testSystemTools(int, char*[])
res &= CheckStringOperations();
+ res &= CheckEnvironmentOperations();
+
return res ? 0 : 1;
}
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index c0b7cd6..5972c19 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -699,6 +699,31 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
ENDIF(CTEST_RUN_CPackComponents)
IF(CTEST_RUN_CPackComponentsForAll)
+ # Analyze 'cpack --help' output for list of available generators:
+ execute_process(COMMAND ${CMAKE_CPACK_COMMAND} --help
+ RESULT_VARIABLE result
+ OUTPUT_VARIABLE stdout
+ ERROR_VARIABLE stderr)
+
+ string(REPLACE ";" "\\;" stdout "${stdout}")
+ string(REPLACE "\n" "E;" stdout "${stdout}")
+
+ set(collecting 0)
+ set(ACTIVE_CPACK_GENERATORS)
+ foreach(eline ${stdout})
+ string(REGEX REPLACE "^(.*)E$" "\\1" line "${eline}")
+ if(collecting AND NOT line STREQUAL "")
+ string(REGEX REPLACE "^ ([^ ]+) += (.*)$" "\\1" gen "${line}")
+ string(REGEX REPLACE "^ ([^ ]+) += (.*)$" "\\2" doc "${line}")
+ list(APPEND ACTIVE_CPACK_GENERATORS ${gen})
+ endif()
+ if(line STREQUAL "Generators")
+ set(collecting 1)
+ endif()
+ endforeach()
+ # ACTIVE_CPACK_GENERATORS variable
+ # now contains the list of 'active generators'
+
set(CPackComponentsForAll_EXTRA_OPTIONS)
set(CPackRun_CPackCommand "-DCPackCommand=${CMAKE_CPACK_COMMAND}")
# set up list of CPack generators
@@ -706,18 +731,17 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
if(APPLE)
list(APPEND GENLST "DragNDrop")
endif(APPLE)
- if (CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT CMAKE_CURRENT_BINARY_DIR MATCHES ".* .*")
- find_program(RPMBUILD NAMES rpmbuild)
- endif(CMAKE_SYSTEM_NAME MATCHES "Linux" AND NOT CMAKE_CURRENT_BINARY_DIR MATCHES ".* .*")
- if (RPMBUILD)
- list(APPEND GENLST "RPM")
- endif(RPMBUILD)
- if (CMAKE_SYSTEM_NAME MATCHES "Linux")
- find_program(DPKG NAMES dpkg)
- if (DPKG)
- list(APPEND GENLST "DEB")
- endif(DPKG)
- endif(CMAKE_SYSTEM_NAME MATCHES "Linux")
+ if (NOT CMAKE_CURRENT_BINARY_DIR MATCHES ".* .*")
+ list(FIND ACTIVE_CPACK_GENERATORS "RPM" RPM_ACTIVE)
+ if (NOT ${RPM_ACTIVE} EQUAL -1)
+ list(APPEND GENLST "RPM")
+ endif(NOT ${RPM_ACTIVE} EQUAL -1)
+ endif(NOT CMAKE_CURRENT_BINARY_DIR MATCHES ".* .*")
+ list(FIND ACTIVE_CPACK_GENERATORS "DEB" DEB_ACTIVE)
+ if (NOT ${DEB_ACTIVE} EQUAL -1)
+ list(APPEND GENLST "DEB")
+ endif(NOT ${DEB_ACTIVE} EQUAL -1)
+
# set up list of component packaging ways
list(APPEND CWAYLST "default")
list(APPEND CWAYLST "OnePackPerGroup")
@@ -1708,6 +1732,42 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
PASS_REGULAR_EXPRESSION
"Reading ctest configuration file: ${CTEST_TEST_ESCAPED_BINARY_DIR}.Tests.CTestTestConfigFileInBuildDir2.CTestConfig.cmake")
+ # test coverage for mumps
+ # create a MumpsCoverage dir in the binary tree under Testing to
+ # avoid the .NoDartCoverage files in the cmake testing tree
+ configure_file(
+ "${CMake_SOURCE_DIR}/Tests/MumpsCoverage/DartConfiguration.tcl.in"
+ "${CMake_BINARY_DIR}/Testing/MumpsCoverage/DartConfiguration.tcl")
+ configure_file(
+ "${CMake_SOURCE_DIR}/Tests/MumpsCoverage/gtm_coverage.mcov.in"
+ "${CMake_BINARY_DIR}/Testing/MumpsCoverage/gtm_coverage.mcov")
+ file(COPY "${CMake_SOURCE_DIR}/Tests/MumpsCoverage/VistA-FOIA"
+ DESTINATION "${CMake_BINARY_DIR}/Testing/MumpsCoverage")
+ add_test(NAME CTestGTMCoverage
+ COMMAND cmake -E chdir
+ ${CMake_BINARY_DIR}/Testing/MumpsCoverage
+ $<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.*"
+ ENVIRONMENT COVFILE=)
+
+ configure_file(
+ "${CMake_SOURCE_DIR}/Tests/MumpsCoverage/DartConfiguration.cache.tcl.in"
+ "${CMake_BINARY_DIR}/Testing/MumpsCacheCoverage/DartConfiguration.tcl")
+ configure_file(
+ "${CMake_SOURCE_DIR}/Tests/MumpsCoverage/cache_coverage.cmcov.in"
+ "${CMake_BINARY_DIR}/Testing/MumpsCacheCoverage/cache_coverage.cmcov")
+ file(COPY "${CMake_SOURCE_DIR}/Tests/MumpsCoverage/VistA-FOIA"
+ DESTINATION "${CMake_BINARY_DIR}/Testing/MumpsCacheCoverage")
+ add_test(NAME CTestCacheCoverage
+ COMMAND cmake -E chdir
+ ${CMake_BINARY_DIR}/Testing/MumpsCacheCoverage
+ $<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.*"
+ ENVIRONMENT COVFILE=)
# Use macro, not function so that build can still be driven by CMake 2.4.
# After 2.6 is required, this could be a function without the extra 'set'
# calls.
diff --git a/Tests/FindPackageTest/CMakeLists.txt b/Tests/FindPackageTest/CMakeLists.txt
index 5862094..e85fb4d 100644
--- a/Tests/FindPackageTest/CMakeLists.txt
+++ b/Tests/FindPackageTest/CMakeLists.txt
@@ -363,10 +363,16 @@ endif()
#-----------------------------------------------------------------------------
# Test write_basic_config_version_file().
+# also test that an empty CMAKE_SIZEOF_VOID_P is accepted:
+set(_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
+set(CMAKE_SIZEOF_VOID_P "")
+
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/Foo123ConfigVersion.cmake
VERSION 1.2.3
COMPATIBILITY AnyNewerVersion)
+set(CMAKE_SIZEOF_VOID_P ${_CMAKE_SIZEOF_VOID_P})
+
set(PACKAGE_FIND_VERSION 2.3.4)
include(${CMAKE_CURRENT_BINARY_DIR}/Foo123ConfigVersion.cmake)
if(PACKAGE_VERSION_COMPATIBLE)
@@ -379,6 +385,10 @@ if(NOT PACKAGE_VERSION_COMPATIBLE)
message(SEND_ERROR "Did not find Foo123 with version 1.2.3 (0.0.1 was requested) !")
endif()
+if(PACKAGE_VERSION_UNSUITABLE)
+ message(SEND_ERROR "PACKAGE_VERSION_UNSUITABLE set, but must not be !")
+endif()
+
set(PACKAGE_FIND_VERSION 1.0.0)
include(${CMAKE_CURRENT_BINARY_DIR}/Foo123ConfigVersion.cmake)
if(NOT PACKAGE_VERSION_COMPATIBLE)
@@ -405,6 +415,7 @@ write_basic_config_version_file(${CMAKE_CURRENT_BINARY_DIR}/Boo123ConfigVersion.
VERSION 1.2.3
COMPATIBILITY SameMajorVersion)
+unset(PACKAGE_VERSION_UNSUITABLE)
set(PACKAGE_VERSION_EXACT FALSE)
set(PACKAGE_FIND_VERSION 2.3.4)
set(PACKAGE_FIND_VERSION_MAJOR 2)
@@ -456,6 +467,7 @@ write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/Bar123ConfigVersion
VERSION 1.2.3.17
COMPATIBILITY ExactVersion)
+unset(PACKAGE_VERSION_UNSUITABLE)
set(PACKAGE_VERSION_EXACT FALSE)
set(PACKAGE_FIND_VERSION 2.3.4)
include(${CMAKE_CURRENT_BINARY_DIR}/Bar123ConfigVersion.cmake)
diff --git a/Tests/MumpsCoverage/.gitattributes b/Tests/MumpsCoverage/.gitattributes
new file mode 100644
index 0000000..b680612
--- /dev/null
+++ b/Tests/MumpsCoverage/.gitattributes
@@ -0,0 +1,2 @@
+*.cmcov -crlf -whitespace
+*.mcov -crlf -whitespace
diff --git a/Tests/MumpsCoverage/Accounts_ReceivableTest.cmcov b/Tests/MumpsCoverage/Accounts_ReceivableTest.cmcov
new file mode 100644
index 0000000..c3b3342
--- /dev/null
+++ b/Tests/MumpsCoverage/Accounts_ReceivableTest.cmcov
@@ -0,0 +1,304 @@
+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
new file mode 100644
index 0000000..3c585f5
--- /dev/null
+++ b/Tests/MumpsCoverage/Accounts_ReceivableTest.mcov
@@ -0,0 +1,1445 @@
+%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/DartConfiguration.cache.tcl.in b/Tests/MumpsCoverage/DartConfiguration.cache.tcl.in
new file mode 100644
index 0000000..a1c6b17
--- /dev/null
+++ b/Tests/MumpsCoverage/DartConfiguration.cache.tcl.in
@@ -0,0 +1,8 @@
+# This file is configured by CMake automatically as DartConfiguration.tcl
+# If you choose not to use CMake, this file may be hand configured, by
+# filling in the required variables.
+
+
+# Configuration directories and files
+SourceDirectory: ${CMake_SOURCE_DIR}/Testing/MumpsCoverage
+BuildDirectory: ${CMake_BINARY_DIR}/Testing/MumpsCacheCoverage
diff --git a/Tests/MumpsCoverage/DartConfiguration.tcl.in b/Tests/MumpsCoverage/DartConfiguration.tcl.in
new file mode 100644
index 0000000..2d7eaa5
--- /dev/null
+++ b/Tests/MumpsCoverage/DartConfiguration.tcl.in
@@ -0,0 +1,8 @@
+# This file is configured by CMake automatically as DartConfiguration.tcl
+# If you choose not to use CMake, this file may be hand configured, by
+# filling in the required variables.
+
+
+# Configuration directories and files
+SourceDirectory: ${CMake_SOURCE_DIR}/Testing/MumpsCoverage
+BuildDirectory: ${CMake_BINARY_DIR}/Testing/MumpsCoverage
diff --git a/Tests/MumpsCoverage/VistA-FOIA/Packages/Toolkit/Routines/XINDEX.m b/Tests/MumpsCoverage/VistA-FOIA/Packages/Toolkit/Routines/XINDEX.m
new file mode 100644
index 0000000..b045221
--- /dev/null
+++ b/Tests/MumpsCoverage/VistA-FOIA/Packages/Toolkit/Routines/XINDEX.m
@@ -0,0 +1,144 @@
+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/cache_coverage.cmcov.in b/Tests/MumpsCoverage/cache_coverage.cmcov.in
new file mode 100644
index 0000000..b431dbd
--- /dev/null
+++ b/Tests/MumpsCoverage/cache_coverage.cmcov.in
@@ -0,0 +1,2 @@
+packages:${CMake_BINARY_DIR}/Testing/MumpsCoverage/VistA-FOIA/Packages
+coverage_dir:${CMake_SOURCE_DIR}/Tests/MumpsCoverage
diff --git a/Tests/MumpsCoverage/gtm_coverage.mcov.in b/Tests/MumpsCoverage/gtm_coverage.mcov.in
new file mode 100644
index 0000000..b431dbd
--- /dev/null
+++ b/Tests/MumpsCoverage/gtm_coverage.mcov.in
@@ -0,0 +1,2 @@
+packages:${CMake_BINARY_DIR}/Testing/MumpsCoverage/VistA-FOIA/Packages
+coverage_dir:${CMake_SOURCE_DIR}/Tests/MumpsCoverage
diff --git a/Tests/Plugin/CMakeLists.txt b/Tests/Plugin/CMakeLists.txt
index b0942c0..31ca59c 100644
--- a/Tests/Plugin/CMakeLists.txt
+++ b/Tests/Plugin/CMakeLists.txt
@@ -39,6 +39,50 @@ TARGET_LINK_LIBRARIES(example_exe kwsys)
ADD_LIBRARY(example_mod_1 MODULE src/example_mod_1.c)
TARGET_LINK_LIBRARIES(example_mod_1 example_exe)
+
+IF(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG AND
+ "${CMAKE_C_CREATE_SHARED_MODULE}" MATCHES "SONAME_FLAG")
+ # Add a second plugin that should not have any soname.
+ ADD_LIBRARY(example_mod_2 MODULE src/example_mod_1.c)
+ TARGET_LINK_LIBRARIES(example_mod_2 example_exe)
+ SET_PROPERTY(TARGET example_mod_2 PROPERTY NO_SONAME 1)
+
+ # Verify that targets export with proper IMPORTED SONAME properties.
+ EXPORT(TARGETS example_mod_1 example_mod_2 NAMESPACE exp_
+ FILE ${CMAKE_CURRENT_BINARY_DIR}/mods.cmake)
+ INCLUDE(${CMAKE_CURRENT_BINARY_DIR}/mods.cmake)
+ GET_PROPERTY(configs TARGET exp_example_mod_1 PROPERTY IMPORTED_CONFIGURATIONS)
+ FOREACH(c ${configs})
+ STRING(TOUPPER "${c}" CONFIG)
+ GET_PROPERTY(soname1 TARGET exp_example_mod_1 PROPERTY IMPORTED_SONAME_${CONFIG})
+ GET_PROPERTY(soname2 TARGET exp_example_mod_2 PROPERTY IMPORTED_NO_SONAME_${CONFIG})
+ IF(soname1)
+ MESSAGE(STATUS "exp_example_mod_1 has IMPORTED_SONAME_${CONFIG} as expected: ${soname1}")
+ ELSE()
+ MESSAGE(SEND_ERROR "exp_example_mod_1 does not have IMPORTED_SONAME_${CONFIG} but should")
+ ENDIF()
+ IF(soname2)
+ MESSAGE(STATUS "exp_example_mod_2 has IMPORTED_NO_SONAME_${CONFIG} as expected: ${soname2}")
+ ELSE()
+ MESSAGE(SEND_ERROR "exp_example_mod_2 does not have IMPORTED_NO_SONAME_${CONFIG} but should")
+ ENDIF()
+ ENDFOREACH()
+
+ # Parse the binary to check for SONAME if possible.
+ IF("${CMAKE_EXECUTABLE_FORMAT}" MATCHES "ELF")
+ FIND_PROGRAM(READELF_EXE readelf)
+ IF(READELF_EXE)
+ ADD_CUSTOM_TARGET(check_mod_soname ALL COMMAND
+ ${CMAKE_COMMAND} -Dreadelf=${READELF_EXE}
+ -Dmod1=$<TARGET_FILE:example_mod_1>
+ -Dmod2=$<TARGET_FILE:example_mod_2>
+ -P ${CMAKE_CURRENT_SOURCE_DIR}/check_mod_soname.cmake
+ )
+ ADD_DEPENDENCIES(check_mod_soname example_mod_1 example_mod_2)
+ ENDIF()
+ ENDIF()
+ENDIF()
+
# TODO:
# - create a plugin that links to a static lib
# - create a plugin that links to a shared lib
diff --git a/Tests/Plugin/check_mod_soname.cmake b/Tests/Plugin/check_mod_soname.cmake
new file mode 100644
index 0000000..3737b45
--- /dev/null
+++ b/Tests/Plugin/check_mod_soname.cmake
@@ -0,0 +1,14 @@
+execute_process(COMMAND ${readelf} -d ${mod1} OUTPUT_FILE ${mod1}.readelf.txt)
+execute_process(COMMAND ${readelf} -d ${mod2} OUTPUT_FILE ${mod2}.readelf.txt)
+file(STRINGS ${mod1}.readelf.txt soname1 REGEX "\\(SONAME\\)")
+file(STRINGS ${mod2}.readelf.txt soname2 REGEX "\\(SONAME\\)")
+if(soname1)
+ message(STATUS "${mod1} has soname as expected: ${soname1}")
+else()
+ message(FATAL_ERROR "${mod1} has no soname but should:\n ${soname1}")
+endif()
+if(soname2)
+ message(FATAL_ERROR "${mod2} has soname but should not:\n ${soname2}")
+else()
+ message(STATUS "${mod2} has no soname as expected")
+endif()
diff --git a/Utilities/GitSetup/setup-stage b/Utilities/GitSetup/setup-stage
index ef53b99..323e47a 100755
--- a/Utilities/GitSetup/setup-stage
+++ b/Utilities/GitSetup/setup-stage
@@ -37,17 +37,43 @@ die() {
cd "${BASH_SOURCE%/*}" &&
# Load the project configuration.
-url=$(git config -f config --get stage.url) &&
-pushurl=$(git config -f config --get stage.pushurl || echo '') ||
+fetchurl=$(git config -f config --get stage.url) &&
+pushurl_=$(git config -f config --get stage.pushurl || echo '') &&
+remote=$(git config -f config --get stage.remote || echo 'stage') ||
die 'This project is not configured to use a topic stage.'
-# Configure the remote if necessary.
-if git config remote.stage.url >/dev/null; then
- echo 'Topic stage already configured.'
+# Get current stage push URL.
+pushurl=$(git config --get remote."$remote".pushurl ||
+ git config --get remote."$remote".url || echo '') &&
+
+# Tell user about current configuration.
+if test -n "$pushurl"; then
+ echo 'Remote "'"$remote"'" is currently configured to push to
+
+ '"$pushurl"'
+' &&
+ read -ep 'Reconfigure Topic Stage? [y/N]: ' ans &&
+ if [ "$ans" == "y" ] || [ "$ans" == "Y" ]; then
+ setup=1
+ else
+ setup=''
+ fi
else
+ setup=1
+fi
+
+# Perform setup if necessary.
+if test -n "$setup"; then
echo 'Setting up the topic stage...' &&
- git remote add stage "$url" &&
- if test -n "$pushurl"; then
- git config remote.stage.pushurl "$pushurl"
- fi
-fi || die 'Could not add the topic stage remote.'
+ if test -z "$pushurl"; then
+ git remote add "$remote" "$fetchurl"
+ else
+ git config remote."$remote".url "$fetchurl"
+ fi &&
+ pushurl="${pushurl_}" &&
+ git config remote."$remote".pushurl "$pushurl" &&
+ echo 'Remote "'"$remote"'" is now configured to push to
+
+ '"$pushurl"'
+'
+fi || die 'Could not configure the topic stage remote.'
diff --git a/Utilities/cmlibarchive/CMakeLists.txt b/Utilities/cmlibarchive/CMakeLists.txt
index 7f7a69f..ebf28ae 100644
--- a/Utilities/cmlibarchive/CMakeLists.txt
+++ b/Utilities/cmlibarchive/CMakeLists.txt
@@ -2,7 +2,7 @@
#
PROJECT(libarchive C)
#
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6.3 FATAL_ERROR)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
SET(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/build/cmake")
if(NOT CMAKE_RUNTIME_OUTPUT_DIRECTORY)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${libarchive_BINARY_DIR}/bin)
diff --git a/bootstrap b/bootstrap
index 0069754..9d98f47 100755
--- a/bootstrap
+++ b/bootstrap
@@ -395,7 +395,6 @@ cmake_kwsys_config_replace_string ()
echo "${APPEND}" > "${OUTFILE}${_tmp}"
cat "${INFILE}" |
sed "/./ {s/\@KWSYS_NAMESPACE\@/cmsys/g;
- s/@KWSYS_DO_NOT_CLEAN_PUTENV@/0/g;
s/@KWSYS_BUILD_SHARED@/${KWSYS_BUILD_SHARED}/g;
s/@KWSYS_LFS_AVAILABLE@/${KWSYS_LFS_AVAILABLE}/g;
s/@KWSYS_LFS_REQUESTED@/${KWSYS_LFS_REQUESTED}/g;
@@ -450,6 +449,12 @@ cmake_escape ()
echo $1 | sed "s/ /\\\\ /g"
}
+# Strip prefix from argument
+cmake_arg ()
+{
+ echo "$1" | sed "s/^${2-[^=]*=}//"
+}
+
# Write message to the log
cmake_log ()
{
@@ -534,21 +539,24 @@ cmake_ccache_enabled=
cmake_prefix_dir="${cmake_default_prefix}"
while test $# != 0; do
case "$1" in
- --prefix=*) cmake_prefix_dir=`cmake_fix_slashes "${1#*=}"` ;;
- --parallel=*) cmake_parallel_make="${1#*=}" ;;
- --datadir=*) cmake_data_dir="${1#*=}" ;;
- --docdir=*) cmake_doc_dir="${1#*=}" ;;
- --mandir=*) cmake_man_dir="${1#*=}" ;;
- --init=*) cmake_init_file="${1#*=}" ;;
+ --prefix=*) dir=`cmake_arg "$1"`
+ cmake_prefix_dir=`cmake_fix_slashes "$dir"` ;;
+ --parallel=*) cmake_parallel_make=`cmake_arg "$1"` ;;
+ --datadir=*) cmake_data_dir=`cmake_arg "$1"` ;;
+ --docdir=*) cmake_doc_dir=`cmake_arg "$1"` ;;
+ --mandir=*) cmake_man_dir=`cmake_arg "$1"` ;;
+ --init=*) cmake_init_file=`cmake_arg "$1"` ;;
--system-libs) cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARIES=1" ;;
--no-system-libs) cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARIES=0" ;;
--system-bzip2|--system-curl|--system-expat|--system-libarchive|--system-zlib)
- cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARY_`cmake_toupper ${1#--system-}`=1" ;;
+ lib=`cmake_arg "$1" "--system-"`
+ cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARY_`cmake_toupper $lib`=1" ;;
--no-system-bzip2|--no-system-curl|--no-system-expat|--no-system-libarchive|--no-system-zlib)
- cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARY_`cmake_toupper ${1#--no-system-}`=0" ;;
+ lib=`cmake_arg "$1" "--no-system-"`
+ cmake_bootstrap_system_libs="${cmake_bootstrap_system_libs} -DCMAKE_USE_SYSTEM_LIBRARY_`cmake_toupper $lib`=0" ;;
--qt-gui) cmake_bootstrap_qt_gui="1" ;;
--no-qt-gui) cmake_bootstrap_qt_gui="0" ;;
- --qt-qmake=*) cmake_bootstrap_qt_qmake="${1#*=}" ;;
+ --qt-qmake=*) cmake_bootstrap_qt_qmake=`cmake_arg "$1"` ;;
--help) cmake_usage ;;
--version) cmake_version_display ; exit 2 ;;
--verbose) cmake_verbose=TRUE ;;
@@ -1039,6 +1047,9 @@ KWSYS_STL_HAS_ALLOCATOR_NONTEMPLATE=0
KWSYS_STL_HAS_ALLOCATOR_REBIND=0
KWSYS_STL_HAS_ALLOCATOR_MAX_SIZE_ARGUMENT=0
KWSYS_STL_HAS_ALLOCATOR_OBJECTS=0
+KWSYS_CXX_HAS_SETENV=0
+KWSYS_CXX_HAS_UNSETENV=0
+KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H=0
KWSYS_CXX_HAS_CSTDDEF=0
KWSYS_CXX_HAS_NULL_TEMPLATE_ARGS=0
KWSYS_CXX_HAS_MEMBER_TEMPLATES=0
@@ -1050,6 +1061,33 @@ KWSYS_STL_STRING_HAVE_ISTREAM=1
KWSYS_STL_STRING_HAVE_OSTREAM=1
if cmake_try_run "${cmake_cxx_compiler}" \
+ "${cmake_cxx_flags} -DTEST_KWSYS_CXX_HAS_SETENV" \
+ "${cmake_source_dir}/Source/kwsys/kwsysPlatformTestsCXX.cxx" >> cmake_bootstrap.log 2>&1; then
+ KWSYS_CXX_HAS_SETENV=1
+ echo "${cmake_cxx_compiler} has setenv"
+else
+ echo "${cmake_cxx_compiler} does not have setenv"
+fi
+
+if cmake_try_run "${cmake_cxx_compiler}" \
+ "${cmake_cxx_flags} -DTEST_KWSYS_CXX_HAS_UNSETENV" \
+ "${cmake_source_dir}/Source/kwsys/kwsysPlatformTestsCXX.cxx" >> cmake_bootstrap.log 2>&1; then
+ KWSYS_CXX_HAS_UNSETENV=1
+ echo "${cmake_cxx_compiler} has unsetenv"
+else
+ echo "${cmake_cxx_compiler} does not have unsetenv"
+fi
+
+if cmake_try_run "${cmake_cxx_compiler}" \
+ "${cmake_cxx_flags} -DTEST_KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H" \
+ "${cmake_source_dir}/Source/kwsys/kwsysPlatformTestsCXX.cxx" >> cmake_bootstrap.log 2>&1; then
+ KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H=1
+ echo "${cmake_cxx_compiler} has environ in stdlib.h"
+else
+ echo "${cmake_cxx_compiler} does not have environ in stdlib.h"
+fi
+
+if cmake_try_run "${cmake_cxx_compiler}" \
"${cmake_cxx_flags} -DTEST_KWSYS_STL_HAVE_STD" \
"${cmake_source_dir}/Source/kwsys/kwsysPlatformTestsCXX.cxx" >> cmake_bootstrap.log 2>&1; then
KWSYS_STL_HAVE_STD=1
@@ -1365,7 +1403,7 @@ cmake_replace_string "${cmake_source_dir}/Source/kwsys/kwsys_stl.hxx.in" \
cmake_replace_string "${cmake_bootstrap_dir}/cmsys/stl/stl.hxx_a" \
"${cmake_bootstrap_dir}/cmsys/stl/stl.hxx_b" KWSYS_NAMESPACE cmsys
-for a in string vector map algorithm; do
+for a in string vector set map algorithm; do
cmake_replace_string "${cmake_bootstrap_dir}/cmsys/stl/stl.hxx_b" \
"${cmake_bootstrap_dir}/cmsys/stl/${a}" KWSYS_STL_HEADER ${a}
done
@@ -1396,6 +1434,7 @@ if [ "x${cmake_cxx_flags}" != "x" ]; then
fi
cmake_c_flags_String="-DKWSYS_STRING_C"
+cmake_cxx_flags_SystemTools="-DKWSYS_CXX_HAS_SETENV=${KWSYS_CXX_HAS_SETENV} -DKWSYS_CXX_HAS_UNSETENV=${KWSYS_CXX_HAS_UNSETENV} -DKWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H=${KWSYS_CXX_HAS_ENVIRON_IN_STDLIB_H}"
cmake_c_flags="${cmake_c_flags}-I`cmake_escape \"${cmake_bootstrap_dir}\"` -I`cmake_escape \"${cmake_source_dir}/Source\"` \
-I`cmake_escape \"${cmake_bootstrap_dir}\"`"
cmake_cxx_flags="${cmake_cxx_flags} -I`cmake_escape \"${cmake_bootstrap_dir}\"` -I`cmake_escape \"${cmake_source_dir}/Source\"` \
@@ -1421,8 +1460,9 @@ for a in ${KWSYS_C_SOURCES} ${KWSYS_C_MINGW_SOURCES}; do
done
for a in ${KWSYS_CXX_SOURCES}; do
src=`cmake_escape "${cmake_source_dir}/Source/kwsys/${a}.cxx"`
+ src_flags=`eval echo \\${cmake_cxx_flags_\${a}}`
echo "${a}.o : ${src} ${dep}" >> "${cmake_bootstrap_dir}/Makefile"
- echo " ${cmake_cxx_compiler} ${cmake_cxx_flags} -DKWSYS_NAMESPACE=cmsys -c ${src} -o ${a}.o" >> "${cmake_bootstrap_dir}/Makefile"
+ echo " ${cmake_cxx_compiler} ${cmake_cxx_flags} -DKWSYS_NAMESPACE=cmsys ${src_flags} -c ${src} -o ${a}.o" >> "${cmake_bootstrap_dir}/Makefile"
done
if ${cmake_system_mingw}; then
src=`cmake_escape "${cmake_bootstrap_dir}/cmsysProcessFwd9xEnc.c"`