7aa9927 GenEx: Don't use std::vector::at(int).
78e54b9 GenEx: Add tests for "0" and "1" expressions with literal commas.
d729e8b GenEx: Add test for $<BOOL:> with empty parameter.
354face GenEx: Ensure that the empty CONFIGURATION can be used conditionally.
8b3b88a GenEx: Validate target and property names.
b3d8f5d GenEx: Parse comma after colon tokens specially
a4985a9 GenEx: Report actual target name not found, not "0" each time.
d70650d GenEx: Return after error reported.
4801eb6 GenEx: It is not an error to specify an empty parameter
Otherwise the comma is treated as plain text by ParseContent.
$<STREQUAL:,> should be valid and true.
$<STREQUAL:,something> should be valid and false.
$<STREQUAL:,,> should be non-valid as it is 3 parameters.
$<STREQUAL:something,,> should be non-valid as it is 3 parameters.
Additionally, this allows reporting the correct error for other
expressions. For example $<TARGET_PROPERTY:,> should be invalid
because it has an empty target and empty property. It shouldn't
attempt to read the property ',' on the 'implicit this' target.
If the checker was explicitely set with a "TypeCommand" variable (e.g.
ValgrindCommand) then we now just believe that this is valgrind, even if
nothing in the path matches "valgrind". Only when "MemoryCheckCommand" was used
we still scan the path to find out what checker we have.
Hack access to cmCTestVC::Revision on this compiler to avoid errors like
Source/CTest/cmCTestSVN.cxx, line 23: Error: cmCTestSVN::SVNInfo is not accessible from cmCTestSVN::Revision.
Source/CTest/cmCTestSVN.cxx, line 22: Error: cmCTestVC::Revision is not accessible from file level.
1e47ccb Ninja: add option to enforce usage of response files
e31df03 Ninja: move <OBJECTS> in front of the first linker option
8d674e7 Ninja: move -LIBPATH behind -link option
In the response file also linker options could be passed,
and because <OBJECTS> is replaced by a response file, it
is necessary that no compiler option follows <OBJECTS>.
This reverts commit 5598d9b2a0.
Since commit f1670ab1 (Ninja: don't confuse ninja's rsp files with
nmake's, 2012-09-26) Ninja generator response files are placed in
CMakeFiles/ so the previously existing check already avoids expanding
them.
CMake's test suite includes a dashboard build of KWSys directly out of
the CMake source tree. Upstream KWSys switched to a dedicated dashboard
but CMake's test should still submit to the PublicDashboard project.
4ad0233 Remove period at the end of the check message.
50b1ea5 Fix minor typos.
19c3206 Remove unused parameter marker and the unused parameter.
9d462b2 Document that generator expressions can be used in target properties.
daf88c3 Fix punctuation in some variables documentation.
3172cde Fix the layout of the generator expression documentation.
80112da Merge topic 'AutomocUseTargetProperties' into export-sets
955b966 exports: add a test for exporting dependent targets
6f50a04 exports: define a CMAKE_FIND_PACKAGE_NAME var set by find_package()
0cfd055 exports: move the handling of missing targets into subclasses
190f2c8 exports: fix build with MSVC6
8b5f448 exports: first try at error handling if a target is missing
87f4c01 exports: accept a missing target if it is exported exactly once
999061a exports: store pointers to all installations of each export set
64b3a6c exports: cmGlobalGenerator::ExportSets destructor will clear it
81cdab5 exports: Hold an ExportSet pointer in cm*Export*Generator
5c898fb exports: Add cmExportSetMap class
d13ec1a exports: Create class cmExportSet
4e2347c exports: Rename cmGlobalGenerator::AddTargetToExport{s,}
e846e70 exports: Remove cmTargetExport constructor
81c66c8 exports: Move cmTargetExport to a dedicated header file
ae4ab62 find_package: add support for a <package>_NOT_FOUND_MESSAGE variable
...
2ccca05 Run PDBDirectoryAndName test on MSVC and Intel
efc83b3 Document that PDB_(NAME|OUTPUT_DIRECTORY) are ignored for VS 6
b294457 Verify that PDB_(NAME|OUTPUT_DIRECTORY) are honored in test
3f60dbf Add PDB_OUTPUT_DIRECTORY and PDB_NAME target properties (#10830)
If the pre or post memcheck or test commands have spaces in the path these
were never escaped, leading to broken commands. This was not covered in the
test suite so it went unnoticed.
The filename was escaped in cmCTestMemCheckHandler::InitializeMemoryChecking()
and again before it was written to output in
cmCTestRunTest::ComputeArguments().
Once someone uses e.g. a valgrind path with spaces this leads to double escaping
making the memory checker fail completely because of the invalid path.
This way the name of the searched package can be accessed in find-modules,
config-files and more importantly in generated target export files.
This is now used when a target export file detects that a required
target does not exist.
Alex
Before, cmExportFileGenerator::ComplainAboutMissingTarget() was a virtual
function which had to be implemented in the subclasses. It is not
anymore. Instead, there is now a virtual function
HandleMissingTargets(), which is implemented in the two subclasses.
This makes e.g. dealing correctly with APPEND mode easier.
Alex
083de7e Process generator expressions in the COMPILE_DEFINITIONS target property.
08cb4fa Process generator expressions in the INCLUDE_DIRECTORIES property.
0ef091d Early return if there is no target.
eb250cd Add a self-reference check for target properties.
7e80747 Add API to check that dependent target properties form a DAG.
239ac84 Add a generator expression for target properties.
e028381 Extend the generator expression language with more logic.
b8e61d6 Refactor GetCompileDefinitions a bit.
2c2b25b Return a std::string from GetCompileDefinitions.
b7e48e0 Add an AppendDefines std::string overload.
9a16087 Convert paths in INCLUDE_DIRECTORIES property to Unix slashes.
4557c8d Don't prepend a path before generator expressions in include_directories.
c6abc41 Add include guard for cmGeneratorExpression.
0ff4e3f Port remaining code to GetCompileDefinitions().
f178d53 Fix indentation in the code blocks generator.
Now, if an imported target depends on a library which must come
from some other export set, cmake generates a check which errors
out if that target does not exist. I guess instead of completely
erroring out it would be better to only make the find_package() fail.
Alex
If a target is exported, and a library it depends on is not part
of the same export set, before this patch cmake errored out.
With this patch, it now checks whether the missing target
is exported somewhere else exactly once, and accepts in this
case (because then it can determine the namespace for the
missing target and use this).
Alex
If a config-file sets <package>_FOUND to FALSE, it can now give a reason
using the variable <package>_NOT_FOUND_MESSAGE, which is used by cmFindPackage
and FPHSA.
Alex
The remainder of this method depends on the target existing (otherwise
the includes container would be empty), so make the code a little more
readable.
Prevent constructs like:
... INCLUDE_DIRECTORIES "$<TARGET_PROPERTY:INCLUDE_DIRECTORIES>"
Indirect self-references (cycles) are also prevented here, but
indirect generator expression references of any kind are not
possible yet anyway.
There are two overloads, so that it can use the operational
target when a target property is being evaluated, and a target
can alternatively be specified by name.
At this point, the generators don't chain. That comes later.
Generator expressions for comparing strings, evaluating
strings as booleans, and for creating literal right-angle-brackets
and commas are added. Those may be needed in some cases
where they appear in literals.
When more than one value is given to the NAMES option this command by
default will consider one name at a time and search every directory for
it. Add a NAMES_PER_DIR option to tell this command to consider one
directory at a time and search for all names in it.
In cmFindLibraryCommand::FindFrameworkLibrary drop use of the old
SystemTools::FindDirectory method. Replace it with a direct
implementation of the only code path we used.
Teach cmFindLibraryHelper to support multiple possible names and iterate
over all of them in each CheckDirectory call. For now we still only
ever configure one name.
This enables changing the name and output folder of the debug symbol
files produced by MS compilers.
Inspired-by: Thomas Bernard <thomas.bernard@ipetronik.com>
e83cc94 Use the cmGeneratorTarget for the include directories API.
9d8e59d Merge branch 'use-generator-target' into AutomocUseTargetProperties
ea12871 Automoc: also the makefile-COMPILE_DEFINITIONS
894e91a Automoc: do not use DEFINITIONS, but only COMPILE_DEFINITIONS
825d1ab Automoc: fix#13493, use target properties for include dirs
879fd35 Revert "Move GenerateTargetManifest to cmGeneratorTarget."
6674583 Fix compiler warning with initialization order.
5285458 Add convenience for getting a cmGeneratorTarget to use.
c31f3d9 Add a wrapper for accessing config-specific compile-definitions.
d1446ca Append the COMPILE_DEFINITIONS from the Makefile to all targets.
290e92a Move GetIncludeDirectories to cmGeneratorTarget.
f9146f6 Port cmLocalGenerator::GetTargetFlags to cmGeneratorTarget.
9facfd1 Move GetCreateRuleVariable to cmGeneratorTarget.
78bfee3 Make cmLocalGenerator::AddArchitectureFlags take a cmGeneratorTarget.
4f5384e Move GetLinkInformation to cmGeneratorTarget
987e12e Move GenerateTargetManifest to cmGeneratorTarget.
14bf778 Store cmGeneratorTargets with the makefile.
f428ca2 Add more forwarding API to cmGeneratorTarget.
df92864 OS X: Ignore MACOSX_DEPLOYMENT_TARGET during Xcode compiler id
e7e613e OS X: Teach deployment target sanity check about SDK names
43b7479 OS X: Further improve default CMAKE_OSX_SYSROOT selection
2690738 OS X: If CMAKE_OSX_SYSROOT is already set do not compute default
7995722 OS X: Simplify selection of CMAKE_OSX_ARCHITECTURES
1786b12 OS X: Allow CMAKE_OSX_SYSROOT to be a logical SDK name
242f673 Tests/Assembler: Use CMAKE_OSX_SYSROOT to generate .s file
a1c032b bootstrap: Suppress CMAKE_OSX_SYSROOT if CFLAGS have -isysroot
230ea21 OS X: Improve default CMAKE_OSX_SYSROOT selection
a0a0877 OS X: Always generate -isysroot if any SDK is in use
33a60e6 Xcode: Remove unused code reading CMAKE_OSX_SYSROOT_DEFAULT
The QAbstractItemModel::reset() method is deprecated in Qt 5, and
therefore not part of the API by default (on non-Windows).
The replacement for it is beginResetModel/endResetModel which are
available from Qt 4.6 onwards.
The minimum version of Qt required is currently 4.4, so enable the
deprecated API instead of changing that.
Drop the last use of CMAKE_OSX_SYSROOT_DEFAULT. Replace internal
platform variable CMAKE_${lang}_HAS_ISYSROOT with a more general
CMAKE_${lang}_SYSROOT_FLAG variable. If the -isysroot flag exists and
CMAKE_OSX_SYSROOT points to an SDK (not "/") then always add it to
compiler command lines. This is already done in the Xcode IDE.
Like the special case for commas, this ensures that the colon only has
special meaning as the delimiter between the identifier and the
parameters of a particular expression, but constructs such as
INCLUDE_DIRECTORIES "$<1:C:\foo>"
are legal.
This reverts commit 987e12e2f9.
GenerateTargetManifest is called by the global generator before it
creates the generator targets, so we can't move it to cmGeneratorTarget
yet.
Make the EXPECTED_HASH option take only a single value instead of two to
avoid handling sub-keyword arguments. This is also consistent with
URL_HASH in ExternalProject.
This way we don't need to check the definitions from the Makefile when
generating later, and can more easily add generator expressions.
Duplication is not a problem as the definitions are de-duplicated before
generating.
Removing the Process() API and removing the parameters from the
constructor will allow cmGeneratorExpressions to be cached and evaluated
with multiple configs for example, such as when evaluating target
properties. This requires the creation of a new compiled representation
of cmGeneratorExpression. The cmListFileBacktrace remains in the
constructor so that we can record where a particular generator
expression appeared in the CMakeLists file.
The expressions may be parsed and then cached and evaluated multiple
times. They are evaluated lazily so that literals such as ',' can be
treated as universal parameter separators, and can be processed from
results without appearing literally, and without interfering with the
parsing/evaluation of the entire expression.
25a4f56 Build with Qt5 if it is found.
717f31a Compile with both Qt4 and Qt5.
066e858 Replace two include_directories with a setting.
430ba9f Use add_subdirectory instead of the obsolete subdirs.
32a5725 Remove an if which is always true.
0b6625c Move variable setting down to where it relates to.
8ab312b Use CMake platform variables instead of Qt ones.
bd728f6 Add a return-after-error if an old Qt is found.
Some servers require a User-Agent string. The curl command-line tool
just sends "curl/$curlver", so do the same.
Suggested-by: Fredrik Ehnbom <fehnbom@nvidia.com>
Use the registry entries that vsvars32.bat uses to detect the location of
MSBuild.exe in the framework directory. Invoke MSBuild with the option
/p:VisualStudioVersion=$version
so it knows from which VS version to load the system build rules. Teach
cmGlobalVisualStudio11Generator to set its ExpressEdition member using the
registry.
Add WDExpress to the list of registry search locations. Add VS 11 to
the list of VS versions and corresponding generator names. Fix the
search logic to use the most recent version found under any registry
entry.
Inspired-by: Peter Kümmel <syntheticpp@gmx.net>
The logic added in commit e1c89f08 (file(DOWNLOAD): Add options for SSL,
2012-08-21) did not actually provide the documented behavior. Simplify
the implementation to read the variable values first and then replace
them with the explicit argument values if encountered. Always set the
curl option CURLOPT_SSL_VERIFYPEER to either on or off explicitly
instead of depending on the curl default behavior.
TLS has superseded SSL so rename the recently added file(DOWNLOAD) and
ExternalProject options using the newer terminology. Drop "CURLOPT"
from names because curl is an implementation detail.
Extend the number of components tested by
if(... VERSION_LESS ...)
if(... VERSION_EQUAL ...)
if(... VERSION_GREATER ...)
from 4 to 8. The latter is a more extreme maximum.
Add the ability to request that downloads disable or enable Certificate
Authority checking with https ssl downloads. When the option to verify
the servers CA is disabled, one may verify download contents with SHA
hashes.
d0c863f docbook: Fix Sun CC warning on ptr_fun(isalnum)
4e62784 docbook: Fix formatter naming convention to avoid shadow
9ad85dbb docbook: Remove redundant docs that cause invalid DocBook
9468b41 docbook: Add CMake.DocBook test to validate xml (#13508)
3a9e373 docbook: Add support for <abstract> at section level 1
67e7d49 docbook: Cleanup formatter and generated DocBook
55146ed docbook: Fix the DocBook section output
dbfe335 docbook: Factor out code to write valid DocBook IDs
cffa899 docbook: Remove table of contents
ac25bc0 Utilities/xml: Add docbook-4.5 DTD (#13508)
2b2e86f Utilities/xml: Add .gitattributes to disable whitespace checks
57234dd cmCTestSVN: Load and process information from externals
3776690 cmCTestSVN: Add a LoadExternal() function and an ExternalParser class
41f0f83 cmCTestSVN: Use the SVNInfo structure
fb6d513 cmCTestSVN: Create the SVNInfo for the root repository
8d1e102 cmCTestSVN: Add the Repositories list and the RootInfo pointer
2f204bc cmCTestSVN: Extend Revision struct with SVN repo information
aa1076f cmCTestSVN: Add the new SVNInfo structure
The Sun compiler complains:
cmDocumentationFormatterDocbook.cxx", line 230: Warning (Anachronism),
badargtype2w: Formal argument x of type int(*)(int) in call to
std::ptr_fun<int, int>(int(*)(int)) is being passed
extern "C" int(*)(int).
Add an intermediate C++ function to forward to the C function.
Some compilers complain:
cmDocumentationFormatterDocbook.cxx: In member function virtual void cmDocumentationFormatterDocbook::PrintHeader(const char*, const char*, std::ostream&):
cmDocumentationFormatterDocbook.cxx:197:73: warning: declaration of docname shadows a member of 'this' [-Wshadow]
Fix the name of the member variable.
If a section has subsections (ie. subelemens with a title), all elements
before the first title are written inside an <abstract>. Also wrap
<programlisting> in <para>, to allow preformatted output in abstracts.
The DocBook formatter used to generate something like:
<para id="section"><sect2><title>Title</title></sect2>Some Text</para>
Which was completely wrong. In DocBook, a section should look like this:
<sect2 id="section"><title>Title</title><para>Some Text</para></sect2>
Attributes in XML may contain alphanumeric characters, underscores,
colons and dots. When DocBook is chunked, the dot is often used as a
path separator. To generate a valid ID, we take the title of the
section, transform all non-alphanumeric characters to underscores and
then add a prefix separated with dots. We also add the document name as
a prefix, in order to 'xinclude' eg. cmake.docbook and ctest.docbook in
the same document. IDs are written in multiple places, so the code is
factored to a function.
When DocBook is transformed (eg. to PDF, HTML, ...), a TOC is generated
from the document's layout. The TOC-like list that the docbook
formatter used to generate was both redundant and invalid.
Sometimes it wasn't returning an error and one could continue
with the generate generate as if no errors occurred, and even
with an incomplete configure step.
This call 'svn status' and parse the result to get the list of externals
repositories. The external repositories found are added to the
Repositories list.
- Suppress the URL, Root, Base fields from the cmCTestSVN class
- Update the code to use RootInfo instead
- LoadInfo(), GuessBase(), and a new LoadRevision() functions work on a given SVNInfo
- Use the implementation from the base class for LocalPath(), correct path is built by SVNInfo::BuildLocalPath() instead
The Repository list will contain the SVNInfo of all the repositories
(root and external ones). The RootInfo pointer will point to the
SVNInfo structure of the root repository.
The POSITION_INDEPENDENT_CODE property documentation states that its
default value depends on whether SHARED or MODULE is given to the
add_library call. Since these are options to the add_library command we
should document on the command how they affect the property.
While at it, add a missing space to the POSITION_INDEPENDENT_CODE
property documentation.
32b7c72 Merge branch 'cmake-platform-info-version' into msvc-compiler-info
f3ddfef Modernize MSVC compiler information files
485a940 VS: Simplify MSVC version reporting
32db033 VS: Remove support for "free" version 2003 tools
e5fee8a Store ABI detection results in compiler information files
3df81b4 Move CMAKE_<LANG>_COMPILER_WORKS to compiler information files
7195aca Make platform information files specific to the CMake version
Teach Windows-cl.cmake to use CMAKE_(C|CXX)_COMPILER_VERSION to set the
"MSVC##" and MSVC_VERSION variables. It no longer needs the IDE generator
to dictate the version or to detect the version by running the
command-line tool for NMake and Ninja generators. Drop configuration of
CMakeCPlatform.cmake and CMakeCXXPlatform.cmake from Windows-cl.cmake.in
because all the results it saved are now cheap to compute every time.
Until now it was only rerun if the compile definitions changed, but
of course it also has to rerun if the include dirs or moc options
change. Strange that I didn't notice this before...
Alex
403ead6 Document CMAKE_<LANG>_COMPILER_(ID|VERSION) values
8be51f6 Test variables CMAKE_(C|CXX|Fortran)_COMPILER(|_ID|_VERSION)
ec22a9b Cleanly enable a language in multiple subdirectories
66cb335 VS: Detect the compiler id and tool location
89595d6 VS10: Define CMAKE_VS_PLATFORM_TOOLSET variable
965a69d Xcode: Detect the compiler id and tool location
9a9e1ee CMakeDetermineCompilerId: Prepare to detect IDE compiler id
b8b5c83 Re-order C/C++/Fortran compiler determination logic
709fa59 Ninja: remove GetTargetPDB because it is used only once
4bb4787 Ninja:split out setting of msvc TARGET_PDB
59cbc28 Ninja: prepare msvc pdb cleanup
f0a1065 Rename files from main.cpp to more meaningful names.
ca7fb14 Fix the test setting COMPILE_DEFINITIONS target property
733deb6 Fix CompileDefinitions test on Visual Studio.
3dae652 Don't duplicate -D defines sent to the compiler.
ee949d8 Remove duplicate 'of' from docs.
ecc1acb Remove incorrect doc string for link type enum
805f5e5 Fix some typos in the docs.
389d423 Add missing whitespace to docs.
8aed02a -fix Java dependency scanning, broken in previous commit
7ae4479 -fix line length
87fe428fix#13474: also rescan dependencies if the depender does not exist
At the top of a build tree we configure inside the CMakeFiles directory
files such as "CMakeSystem.cmake" and "CMake<lang>Compiler.cmake" to
save information detected about the system and compilers in use. The
method of detection and the exact results store varies across CMake
versions as things improve. This leads to problems when loading files
configured by a different version of CMake. Previously we ignored such
existing files only if the major.minor part of the CMake version
component changed, and depended on the CMakeCache.txt to tell us the
last version of CMake that wrote the files. This led to problems if the
user deletes the CMakeCache.txt or we add required information to the
files in a patch-level release of CMake (still a "feature point" release
by modern CMake versioning convention).
Ensure that we always have version-consistent platform information files
by storing them in a subdirectory named with the CMake version. Every
version of CMake will do its own system and compiler identification
checks even when a build tree has already been configured by another
version of CMake. Stored results will not clobber those from other
versions of CMake which may be run again on the same tree in the future.
Loaded results will match what the system and language modules expect.
Rename the undocumented variable CMAKE_PLATFORM_ROOT_BIN to
CMAKE_PLATFORM_INFO_DIR to clarify its purpose. The new variable points
at the version-specific directory while the old variable did not.
Several more recent Visual Studio Express editions are now available and
they support debug builds. Simplify our VS platform files by removing
support for these old tools. If anyone still uses them we can restore
support with a more modern way to test for them.
When a language is not enabled at the top level of a project but is
enabled in multiple disjoint subdirectories we should re-use the
CMake<lang>Compiler.cmake file from the first directory. Load the file
whenever it exists and is not left from a different version of CMake.
Run cmparseMSBuildXML.py on cl.xml, lib.xml, and link.xml to generate
our flag tables:
python cmparseMSBuildXML.py -x ".../MSBuild/Microsoft.Cpp/v4.0/V110/1033/cl.xml" > cmVS11CLFlagTable.h
python cmparseMSBuildXML.py -x ".../MSBuild/Microsoft.Cpp/v4.0/V110/1033/lib.xml" > cmVS11LibFlagTable.h
python cmparseMSBuildXML.py -x ".../MSBuild/Microsoft.Cpp/v4.0/V110/1033/link.xml" > cmVS11LinkFlagTable.h
Fix up the declaration names at the top of each file. Finally, teach
cmVisualStudio10TargetGenerator to select the version of the table
matching the version of VS.
In VS 11 the WindowsAppContainer element enabled by the
VS_WINRT_EXTENSIONS property activates precompiled header support
automatically if no PrecompiledHeader setting is specified. For VS 10 and
11 set PrecompiledHeader to "NotUsing" explicitly by default unless
overridden by a project-specified flag.
Suggested-by: Eugene Golushkov <eugene_gff@ukr.net>