Commit Graph

20423 Commits

Author SHA1 Message Date
Brad King 56ca8d4e63 Tests: Add generator toolset support
Propagate CMAKE_GENERATOR_TOOLSET through the test hierarchy so that all
tests can build with the selected generator toolset, if any.
2013-02-07 11:09:56 -05:00
Brad King f36c665df8 Tests: Consolidate ctest --build-and-test generator options
All ctest --build-and-test invocations require the options

  --build-generator ${CMAKE_GENERATOR}
  --build-makeprogram ${CMAKE_TEST_MAKEPROGRAM}

to be passed and have consistent values, except for a few special cases.
Collect the generator options in a variable instead of repeating the
options everywhere explicitly.
2013-02-07 11:09:24 -05:00
Brad King c0debb1f89 Merge branch 'master' into generator-toolset
We need the latest Tests/CMakeLists.txt so we can refactor all tests.
2013-02-07 11:09:01 -05:00
Brad King daae0d2f5b ExternalProject: Propagate the generator toolset
When the CMAKE_GENERATOR option is given to ExternalProject_Add, look
also for option CMAKE_GENERATOR_TOOLSET to select the value of the cmake
"-T" command-line flag.  When no CMAKE_GENERATOR option is given
explicitly then use the current project's CMAKE_GENERATOR_TOOLSET (since
we already use its CMAKE_GENERATOR).
2013-02-07 11:08:33 -05:00
Brad King e3841cf4a2 CTest: Add options to set generator toolset
The ctest_configure command already reads the CTEST_CMAKE_GENERATOR
variable to get the value for the cmake -G option.  Read new variable
CTEST_CMAKE_GENERATOR_TOOLSET for -T.

The "ctest --build-and-test" mode already has "--build-generator" to
specify the -G option to CMake.  Add a "--build-generator-toolset" option
to specify the -T value.
2013-02-07 11:08:32 -05:00
Brad King f980a80495 Xcode: Implement generator toolset selection (#9831, #13802)
Implement generator toolset selection (cmake -T) for Xcode > 2.0 by
adding the GCC_VERSION build setting to project files.
2013-02-07 11:07:48 -05:00
Brad King 650c647160 VS: Implement generator toolset selection (#10722, #13774)
Implement generator toolset selection (cmake -T) for VS >= 10 by setting
the PlatformToolset.  Extend the RunCMake.GeneratorToolset test case to
verify CMAKE_GENERATOR_TOOLSET when the generator supports -T.

Since commit 485a940e (VS: Simplify MSVC version reporting, 2012-08-23)
all MSVC version information is detected during the compiler id step
from the actual compiler invoked by generated build systems rather than
hard-coded in VS generators.  Therefore we can set the PlatformToolset
in VS >= 10 project files and support toolsets from other VS versions.
2013-02-07 11:06:28 -05:00
Brad King 4fd5342956 CMake: Add -T option to choose a generator toolset
Reject the option by default.  It will be implemented on a per-generator
basis.  Pass the setting into try_compile project generation.  Add cache
entry CMAKE_GENERATOR_TOOLSET and associated variable documentation to
hold the value persistently.

Add a RunCMake.GeneratorToolset test to cover basic "-T" option cases.
Verify that CMAKE_GENERATOR_TOOLSET is empty without -T, that -T is
rejected when the generator doesn't support it, and that two -T options
are always rejected.
2013-02-07 10:53:19 -05:00
Brad King ec85306025 Merge topic 'tll-includes-defines'
e48d842 Cache context-independent includes on evaluation.
089fe1c Optimize genex evaluation for includes and defines.
179f495 find_package: Reword <package>_NO_INTERFACES documentation
e7b579b Test workaround of bad interface include directories from depends.
77cecb7 Add includes and compile definitions with target_link_libraries.
0b92602 Add the $<LINKED:...> generator expression.
0fa7f69 Add API to check if we're reading a includes or defines property.
2c3654c Add a way to exclude INTERFACE properties from exported targets.
d4297d5 Export targets to a targets file, not a Config file.
df4d2b2 Make it an error for INSTALL_PREFIX to be evaluated.
7ceeba9 Advance more when preprocessing exported strings.
30268b4 Handle reading empty properties defined by the link interface.
2013-02-05 14:46:43 -05:00
Brad King 020525845a Merge topic 'add-ExternalData-module'
5484c60 Merge branch 'vs6-rule-files' into add-ExternalData-module
1fd8d01 ExternalData: Attach download rules to content links in IDEs
a6d3ffc Fix Module.ExternalData test on VS 6
aed590a Fix Module.ExternalData test on Cygwin
06e8ded Merge branch 'fix-atomic-rename-on-Windows' into add-ExternalData-module
e2e0d2e ExternalData: Collapse ../ components in DATA{} paths
ee2abfd ExternalData: Add support for SHA 1 and 2 hash algorithms
aa8b228 ExternalData: Generalize hash algo/ext handling
9e518a8 ExternalData: Allow DATA{} syntax to reference directories
175ed02 ExternalData: Allow ()-groups in series match regex
4befecc ExternalData: Add tests covering interfaces and errors
bcd2580 ExternalData: Improve series matching using an explicit syntax
c0cebcb ExternalData: Remove unused private interface
5275993 ExternalData: Cleanup stray TODO and typo in comments
7bb8344 ExternalData: Do not match directory names when resolving DATA{}
00d801f ExternalData: Remove compatibility with CMake < 2.8.5
...
2013-02-05 14:46:40 -05:00
Brad King 252c5211b5 Merge topic 'ninja-link-rsp-newlines'
a55d5ca Ninja: Avoid LNK1170 linker error
2013-02-05 14:46:36 -05:00
Brad King e6b72e8b87 Merge topic 'vs6-rule-files'
0f24a66 VS 6: Create .rule file directory before file
2013-02-05 14:46:32 -05:00
Brad King 9ff34ff2fd Merge topic 'fix-atomic-rename-on-Windows'
59b568e Fix cmSystemTools::RenameFile race on Windows
2013-02-05 14:46:27 -05:00
Brad King d1660f0895 Merge topic 'fix-include-directories-unix-path'
b6f6654 Use the result of converting to a unix path.
2013-02-05 14:46:23 -05:00
Brad King 08f69324bb Merge topic 'wince-cmake-variable'
fd2a0d5 Set WINCE to 1 when building for WindowsCE
2013-02-05 14:46:20 -05:00
Brad King 50de1247a0 Merge topic 'update-kwsys'
588d705 Merge branch 'upstream-kwsys' into update-kwsys
23ae484 KWSys 2013-01-31 (5b0d1bd9)
2013-02-05 14:46:13 -05:00
Brad King 4341fd2579 Merge topic 'new-command-class-type-macros'
9397270 Fix use of cmTypeMacro in new command classes
2013-02-05 14:45:57 -05:00
Brad King 252209fb0b Merge topic 'avoid-CTestLimitDashJ-crash-on-Borland'
19f3208 Tests: Avoid CTestLimitDashJ crash on Borland 5.8 builds
2013-02-05 14:45:52 -05:00
Stephen Kelly b6f6654267 Use the result of converting to a unix path.
The commit 18a3195a ('Keep track of INCLUDE_DIRECTORIES as a vector
of structs.', 2012-11-19) moved the handling of includes from
cmGeneratorTarget to cmTarget, but in the process introduced this
bug.
2013-02-05 09:19:27 +01:00
Kitware Robot f77a1147f5 CMake Nightly Date Stamp 2013-02-05 00:01:16 -05:00
Patrick Gansterer a55d5ca481 Ninja: Avoid LNK1170 linker error
link.exe has problems with very very long lines in rsp files too.
Use $in_newline instead of $in variable for rspcontent which
separates the arguments with a newline instead of a simple space
and was specially made for this purpose.
2013-02-04 16:26:39 -05:00
Brad King 5484c60694 Merge branch 'vs6-rule-files' into add-ExternalData-module 2013-02-04 15:20:18 -05:00
Brad King 1fd8d017e6 ExternalData: Attach download rules to content links in IDEs
Each data file to be created in the build tree corresponds one-to-one with
a raw file or content link in the source tree.  Use the MAIN_DEPENDENCY of
add_custom_command to attach the build rule to the source tree file.  This
looks much nicer in the IDE project file browser and avoids ".rule" files.
2013-02-04 15:20:03 -05:00
Brad King a6d3ffcb1f Fix Module.ExternalData test on VS 6
Run the test with the ctest --build-noclean option.  The test
CMakeLists.txt file already uses file(REMOVE_RECURSE) to clean out
downloaded data anyway.  Some file removed by "msdev ... /clean" causes
CMake to re-run in the middle of the build step and file(REMOVE_RECURSE)
wipes out already-generated files.
2013-02-04 15:19:56 -05:00
Brad King aed590a7e0 Fix Module.ExternalData test on Cygwin
In ExternalData_URL_TEMPLATES add a leading slash to the path after
file:// only if the path does not already start with one.
2013-02-04 15:19:49 -05:00
Brad King 06e8dedb3c Merge branch 'fix-atomic-rename-on-Windows' into add-ExternalData-module 2013-02-04 15:19:33 -05:00
Brad King 59b568e5e8 Fix cmSystemTools::RenameFile race on Windows
Since commit d46d8df0 (Re-implemented cmGeneratedFileStream to look like a
real stream and replace the destination file atomically, 2004-11-03) our
RenameFile implementation tries to deal with MoveFile not replacing
read-only files.  In order to avoid the Get/SetFileAttributes pair we used
stat to test for existence of the destination file.  This has a race in
which the destination could be created between the test for existence and
the MoveFile call.

Remove the stat call and use GetFileAttributes to detect whether the file
exists.  This shortens the race but does not eliminate it.  Use a loop to
try multiple times in case we lose the race.  While at it, drop Win9x
support and always use MoveFileEx.
2013-02-04 15:15:21 -05:00
Kitware Robot 8669f64d54 CMake Nightly Date Stamp 2013-02-04 00:01:18 -05:00
Stephen Kelly e48d84209c Cache context-independent includes on evaluation.
Generator expressions whose output depends on the configuration
now record that fact. The GetIncludeDirectories method can use
that result to cache the include directories for later calls.

GetIncludeDirectories is called multiple times for a target
for each configuration, so this should restore performance for
multi-config generators.
2013-02-03 23:04:03 +01:00
Brad King 0f24a66715 VS 6: Create .rule file directory before file
The VS 6 IDE wants .rule files to exist in order to run the rule attached
to it.  When creating the dummy .rule file make sure the directory exists.
2013-02-03 12:03:14 -05:00
Kitware Robot a25f26f54f CMake Nightly Date Stamp 2013-02-03 00:01:21 -05:00
Stephen Kelly 089fe1c13d Optimize genex evaluation for includes and defines.
While porting boost to use these features, the generation step took
too long (several minutes before I stopped it). The reason was that
the boost libraries form a large interdependent mesh. The libraries
list their dependencies in their INTERFACE such as:

 $<LINKED:boost::core>;$<LINKED:boost::config>;$<LINKED:boost::mpl>

As boost::core already depends on the boost::config libraries, that
expression has no impact on the end-content, as it is removed after
the generation step. There is no DAG issue though, so the generator
expression evaluation would fully evaluate them. In the case of the
config library, it also depends on the core library, so all depends
are followed through that again, despite the fact that they've just
been evaluated. After this patch, the evaluation skips libraries if
they have already been seen via depends or directly in the content.

This patch keeps track of targets whose INTERFACE has been consumed
already. The INCLUDE_DIRECTORIES and COMPILE_DEFINITIONS properties
are whitelisted because repeated content will be stripped out later
during generation. For other properties now and in the future, that
may not be the case.
2013-02-02 15:06:53 +01:00
Kitware Robot 425c56788d CMake Nightly Date Stamp 2013-02-02 00:01:22 -05:00
Patrick Gansterer fd2a0d58c5 Set WINCE to 1 when building for WindowsCE
Introduce a new variable WINCE to make the WindowsCE
system more easy to use in if statements.
2013-02-01 23:26:03 +01:00
Brad King 179f495602 find_package: Reword <package>_NO_INTERFACES documentation 2013-02-01 10:30:57 -05:00
Brad King 588d705cb1 Merge branch 'upstream-kwsys' into update-kwsys 2013-02-01 09:28:50 -05:00
KWSys Robot 23ae484120 KWSys 2013-01-31 (5b0d1bd9)
Extract upstream KWSys using the following shell commands.

$ git archive --prefix=upstream-kwsys/ 5b0d1bd9 | tar x
$ git shortlog --no-merges --abbrev=8 --format='%h %s' 6fa1c99f..5b0d1bd9
Alan Hourihane (2):
      e81e2b72 DynamicLoader: Implement on Atari FreeMINT
      5c4dcb2b ProcessUNIX: No select on Atari FreeMINT

Sean McBride (2):
      bff2ea07 Glob: Fix clang -Wdocumentation warning
      5b0d1bd9 Fix clang -Weverything warnings

Change-Id: I8b342bea8bc9c7b92a856ddc948e1b56f5e74b98
2013-02-01 09:27:46 -05:00
Kitware Robot 1638124680 CMake Nightly Date Stamp 2013-02-01 00:01:16 -05:00
Stephen Kelly e7b579bd01 Test workaround of bad interface include directories from depends. 2013-01-31 17:34:20 +01:00
Stephen Kelly 77cecb778f Add includes and compile definitions with target_link_libraries.
This establishes that linking is used to propagate usage-requirements
between targets in CMake code. The use of the target_link_libraries
command as the API for this is chosen because introducing a new command
would introduce confusion due to multiple commands which differ only in
a subtle way.
2013-01-31 17:34:20 +01:00
Stephen Kelly 0b92602b81 Add the $<LINKED:...> generator expression.
This is both a short form of using a TARGET_DEFINED expression
together with a TARGET_PROPERTY definition, and a way to strip
non-target content from interface properties when exporting.
2013-01-31 17:34:20 +01:00
Stephen Kelly 0fa7f69c0e Add API to check if we're reading a includes or defines property.
This will allow the implementation of the LINKED generator expression.
2013-01-31 17:30:49 +01:00
Stephen Kelly 2c3654c3de Add a way to exclude INTERFACE properties from exported targets.
Projects set interface requirements upstream, and existing
downstreams use of target_link_libraries will consume those interfaces.

This can create a backward compatibility concern as the result may
be changing the order of include directories of downstreams, or another
side-effect of using the INTERFACE properties.

Provide a way for them to emulate the behavior of a version-based
policy in the config file.
2013-01-31 17:29:04 +01:00
Stephen Kelly d4297d5697 Export targets to a targets file, not a Config file. 2013-01-31 17:27:06 +01:00
Stephen Kelly df4d2b28b2 Make it an error for INSTALL_PREFIX to be evaluated.
An empty string is not likely going to produce expected results
in any evaluation context. It is replaced by preprocessing
currently.
2013-01-31 17:27:06 +01:00
Brad King 9397270d73 Fix use of cmTypeMacro in new command classes
Both commit 8a37ebec (Add the target_include_directories command,
2013-01-01) and commit fc61a7a7 (Add the target_compile_definitions
command, 2013-01-08) added command implementations deriving from the new
cmTargetPropCommandBase class.  Fix cmTypeMacro declarations of the
inheritance relationship.
2013-01-31 11:08:40 -05:00
Brad King 19f3208a06 Tests: Avoid CTestLimitDashJ crash on Borland 5.8 builds
The test added by commit e378ba5f (Add CTestLimitDashJ test, 2012-12-26)
crashes with CTest compiled by Borland 5.8.  There seems to be interaction
among the large number of internal ctest runs.  It is probably related to
the undiscovered underlying issue mentioned in commit 32478069 (CTest:
Prevent creation of unbounded number of tests in ctest, 2012-12-18) when
fixing the symptom covered by the CTestLimitDashJ test.

Add --force-new-ctest-process to avoid the crash.  Further investigation
will still be needed to identify the true problem.
2013-01-31 10:58:16 -05:00
Brad King 118c32f8f2 Merge branch 'xcode-duplicate-flags-13354' into generator-toolset 2013-01-31 09:58:50 -05:00
Brad King cf8645e82d Tests: Run ctest custom commands with VERBATIM 2013-01-31 09:58:05 -05:00
Brad King 5b2fba5d40 ExternalProject: Simplify CMake command line generation
Append the source directory to the command line option in a separate
step instead of duplicating it with each possible generator.
2013-01-31 09:58:05 -05:00