Commit Graph

117 Commits

Author SHA1 Message Date
Daniele E. Domenichelli f598f1aa83 ExternalProject: Add ExternalProject_Add_StepDependencies function
The ExternalProject_Add_StepDependencies function add some dependencies
for some external project step.

The syntax is:
 ExternalProject_Add_Step_Dependencies(<name> <step> [target1 [target2 [...]]])

This function takes care to set both target and file level dependencies,
and will ensure that parallel builds will not break.

It should be used instead of add_dependencies() when adding a dependency
for some of the step targets generated by ExternalProject. See also:
http://thread.gmane.org/gmane.comp.programming.tools.cmake.devel/8680/focus=8926
2014-11-03 16:15:14 +01:00
Daniele E. Domenichelli 4ae133e09c ExternalProject: Add independent step targets
When adding step targets using ExternalProject_Add_StepTargets, the
STEP_TARGETS argument or the EP_STEP_TARGETS property, ExternalProject
sets all the dependencies for the main project to that target.  Due to
this, the update target cannot be used without downloading and building
all the dependencies.

In order to be able to add step targets that do not depend on other
external projects, this patch adds:

* An optional "NO_DEPENDS" argument to the
  ExternalProject_Add_StepTargets function. If this argument is set,
  then no dependencies are set for the target (file dependencies will
  still be set).

* A new argument INDEPENDENT_STEP_TARGETS to the ExternalProject_Add
  function and a new directory property EP_INDEPENDENT_STEP_TARGETS that
  behave like STEP_TARGETS and EP_STEP_TARGETS, but cause the
  ExternalProject_Add_StepTargets to be called with the NO_DEPENDS
  argument.
2014-11-03 16:15:14 +01:00
Daniele E. Domenichelli 98cdb658e4 ExternalProject: Add CMAKE_CACHE_DEFAULT_ARGS arguments
This argument allows to set default arguments that are written in the
initial cache file, but that are not forced, and therefore allows the
user to change these values later (CMAKE_ARGS and CMAKE_CACHE_ARGS
always overwrite the values).

Also add some documentation to explain the differences between these 3
arguments.

Extend ExternalProjectLocal test to cover CMAKE_CACHE_DEFAULT_ARGS.
2014-10-31 11:34:04 -04:00
Brad King d9c2c17b29 ExternalProject: Use explicit markup and definition lists in docs
Convert ExternalProject module documentation to use explicit markup
blocks for each command.  Enumerate command options with definition
lists instead of a literal block.  This will allow more detail to be
added later.  Also fix the logic that parses options out of the
documentation to be aware of the new layout.
2014-10-28 12:46:17 -04:00
Brad King 98936ae3e0 ExternalProject: Convert docs to a bracket comment
Use a bracket comment to hold the documentation instead of a block of
line comments.  This will make further updates easier.  Also fix the
logic that parses options out of the documentation to be aware of the
new layout.
2014-10-28 12:41:00 -04:00
Brad King f28ebcbf1b Merge topic 'cleanup-CMP0054'
fa7d47ac Tests: Fix CMP0054 warnings
3b5ea54a CheckPrototypeDefinition: Avoid if() auto-dereference
c9b301cd ExternalProject: Fix CMP0054 warning in _ep_parse_arguments
2014-09-22 09:12:53 -04:00
Brad King 5eaa3e9025 Merge topic 'ExternalProject-retry'
30a94eec ExternalProject: Fix download retry logic
2014-09-22 09:12:50 -04:00
Matt McCormick c9b301cd71 ExternalProject: Fix CMP0054 warning in _ep_parse_arguments
Fix the CMP0054 warning:

 CMake Warning (dev) at .../Modules/ExternalProject.cmake:242 (if):
   Policy CMP0054 is not set: Only interpret if() arguments as variables or
   keywords when unquoted.  Run "cmake --help-policy CMP0054" for policy
   details.  Use the cmake_policy command to set the policy and suppress this
   warning.

   Quoted keywords like "COMMAND" will no longer be interpreted as keywords
   when the policy is set to NEW.  Since the policy is not set the OLD
   behavior will be used.
 Call Stack (most recent call first):
   .../Modules/ExternalProject.cmake:1938 (_ep_parse_arguments)
   CMakeLists.txt:5 (ExternalProject_Add)

by avoiding a reference to "${key}" or "COMMAND" in quotes.
2014-09-15 15:56:37 -04:00
Brad King b234836637 Merge topic 'vs-generator-platform'
be6a555d Tests: Test setting a generator platform in a toolchain file
d506fee8 Tests: Use -A option to pass generator platform selection
11c9ddd6 ExternalProject: Use -A option to pass generator platform
29bd843e CTest: Use -A option to pass generator platform selection
eb7d8156 cmake: Add -A option to specify a generator platform
2014-09-15 10:27:38 -04:00
Brad King 11c9ddd694 ExternalProject: Use -A option to pass generator platform
This is less verbose than defining CMAKE_GENERATOR_PLATFORM.
2014-09-15 10:26:59 -04:00
Ruslan Baratov 30a94eecdb ExternalProject: Fix download retry logic
Do not check file's hash in download script.  If hash will not match
command ``file(DOWNLOAD ...)`` will fail with FATAL_ERROR, ``cmake -P``
will exit with unsuccessful code, and the build will stop.  Leave hash
checking to the existing implementation in the verify step.
2014-09-15 09:08:33 -04:00
Brad King 0a92b23c52 Merge topic 'vs-generator-platform'
09c8ad99 enable_language: Initialize system-specific generator info only once
09ab207c Tests: Add generator platform support
6944997b ExternalProject: Propagate the generator platform
8d332091 CTest: Add options to set generator platform
b97736a2 VS: Implement CMAKE_GENERATOR_PLATFORM for VS >= 8
0f1f1271 CMake: Add CMAKE_GENERATOR_PLATFORM option
4f7d0c42 Help: Document CMAKE_VS_PLATFORM_NAME variable
68d4280a VS: Refactor internal default platform name selection
ad2a4776 cmGlobalVisualStudio10Generator: Re-order some methods
03b7b6cd cmGlobalGenerator: Call SetGeneratorToolset even for empty toolset
2014-09-10 11:23:22 -04:00
Brad King 371f06d005 Merge topic 'ExternalProject-download-loop'
9f49ac3d ExternalProject: Avoid infinite loop on file download hash mismatch
2014-09-09 11:23:30 -04:00
Alan W. Irwin 9f49ac3df0 ExternalProject: Avoid infinite loop on file download hash mismatch
When the loop was added by commit v3.0.0-rc1~103^2~3 (ExternalProject:
Reattempt download when verification fails, 2015-01-15), we forgot to
actually increment the loop counter.  Add the increment line.
2014-09-08 16:36:35 -04:00
Brad King 6944997bd6 ExternalProject: Propagate the generator platform
When the CMAKE_GENERATOR option is given to ExternalProject_Add, look
also for option CMAKE_GENERATOR_PLATFORM to pass on to cmake as a cache
definition.  When no CMAKE_GENERATOR option is given explicitly then use
the current project's CMAKE_GENERATOR_PLATFORM (since we already use its
CMAKE_GENERATOR).
2014-09-05 15:20:47 -04:00
Brad King b26faaf1b5 ExternalProject: Clarify SVN_REVISION format in docs (#15081)
Show the explicit '-r' that is required.
2014-08-13 10:56:35 -04:00
Brad King 56e6975ce9 ExternalProject: Recognize lzma-compressed files (#13515)
Add .7z, .tar.xz, and .txz file extensions.

Inspired-by: Joke de Buhr <joke@seiken.de>
Inspired-by: David Cole <DLRdave@aol.com>
2014-07-29 09:32:27 -04:00
Brad King 98ea03443b ExternalProject: Recognize .tbz2 extension
Also fix .bz2 extension to be .tar.bz2 since we only support compressed
tarballs and not plain compressed files.

Suggested-by: Nils Gladitz <nilsgladitz@gmail.com>
Suggested-by: Rolf Eike Beer <eike@sf-mail.de>
2014-07-29 09:29:57 -04:00
Daniele E. Domenichelli 93730bb3e0 ExternalProject: Set FOLDER property to targets
This is useful when using the USE_FOLDERS global property
2014-05-05 18:49:41 +02:00
Daniele E. Domenichelli 39ef804602 ExternalProject: Set LABELS property to targets
This is useful for using CDash subprojects.
2014-05-05 18:49:41 +02:00
Brad King 6482fbaf70 Merge topic 'ExternalProject-verify-cmake-var'
420280f3 ExternalProject: Fix path to cmake in verify script
2014-05-01 09:11:18 -04:00
Brad King 420280f322 ExternalProject: Fix path to cmake in verify script
In commit v3.0.0-rc1~103^2~3 (ExternalProject: Reattempt download when
verification fails, 2014-01-15) a reference to ${CMAKE_COMMAND} was
added to generate a reference to the CMake command in a cmake script.
Escape the '$' so that the literal variable reference appears in the
script instead of writing the path to the current cmake.  This is
necessary when the path to CMake contains spaces or other characters
special to CMake syntax.
2014-04-30 16:21:58 -04:00
Rolf Eike Beer 2622bc3f65 Clean up usage of if(... MATCHES regex) followed string(REGEX REPLACE regex)
The matches have already been calculated and can simply be taken from
CMAKE_MATCH_n variables. This avoids multiple compilations of the same or very
similar regular expressions.
2014-04-14 18:16:58 +02:00
Daniele E. Domenichelli 2dad1c143c ExternalProject: Find VCS packages quietly
This keeps the VCS packages out from FeatureSummary output, unless
the INCLUDE_QUIET_PACKAGES is used.
2014-04-04 13:27:50 +02:00
Daniele E. Domenichelli 1ddcc582c1 ExternalProject: Add EXCLUDE_FROM_ALL option to ExternalProject_Add
When adding a new external project, the "all" target will depend on
this.
This option allows one to add an external project will not be executed
when the "all" target is executed.
The reason for this is that an external project could be useful, for
example, only for running tests, and therefore not necessary during
the build.
2014-04-01 18:17:31 +02:00
Daniele E. Domenichelli 0a1c012961 ExternalProject: Add EXCLUDE_FROM_MAIN option to ExternalProject_Add_Step
When adding a new step using ExternalProject_Add_Step, the main target
will depend on this step.
This option allows one to add a step that will not be executed when the
main target for the external project is executed.
2014-04-01 18:17:31 +02:00
Daniele E. Domenichelli f2128d4c28 ExternalProject: Improve handling of git remote branches
ExternalProject handles git remote branches by commit hash. Due to
this, the git repository ends in detached states, and local commits
are discarded.

Use "git rebase" for remote branches instead of "git checkout".  If
there are uncommitted changes, use "git stash save/pop" to save changes
and restore them after the rebase.  If any of these operations fails,
try to restore the original status and exit with a fatal error, asking
the user to resolve the conflicts manually.

This also makes the behaviour of ExternalProject using git more similar
to the svn version, and probably more likely to what the user expects
by setting GIT_TAG to a branch.
2014-04-01 10:51:58 -04:00
Daniele E. Domenichelli ff2451dc24 ExternalProject: Strip trailing space from git hash 2014-04-01 10:51:53 -04:00
Brad King 7d35b55060 ExternalProject: Add option to disable download progress (#14807)
Add a DOWNLOAD_NO_PROGRESS option to disable progress reports while
downloading source tarballs.
2014-03-17 11:28:05 -04:00
Brad King 73e5c6aead ExternalProject: Add option to always run the build step
Teach ExternalProject_Add a new BUILD_ALWAYS option to skip using
the build step stamp file and execute the step on every build.

Extend the BuildDepends test with a case to cover this option.
2014-02-21 11:05:41 -05:00
Gereon Kremer 819015ef3a ExternalProject: Add option GIT_SUBMODULES
This option allows to filter the submodules that are checked out.
Add a simple testcase for GIT_SUBMODULES option passing an empty list.
2014-01-28 12:51:27 -05:00
Matt McCormick b5e2265fc3 ExternalProject: Reattempt download when verification fails.
When downloading an URL with ExternalProject, reattempt the download three
times if the file hash verification fails.

The re-attempt is limited to non-local URL's.  The same download CMake script
is re-used after removing any file that resulted from the previous download
attempt.  Up to three re-attempts are performed.
2014-01-15 16:31:23 -05:00
Brad King 01ecd24fa6 ExternalProject: Format module documentation
Manually revise the .rst format of the documentation.  Use inline
literal quotes appropriately in paragraph text.  Move the :: literal
block openers to the end of the preceding paragraphs.  Convert the
command signature documentation and examples to cmake code-block
directives.
2013-11-19 09:27:08 -05:00
Brad King 441f2808ec Help: Fix reStructuredText syntax in auto-generated documents 2013-10-15 14:12:49 -04:00
Brad King c717e2aa8b ExternalProject: Restore documentation indentation level
This module parses its own documentation to extract supported options.
Fix the indentation level to match that expected by the parser.
2013-10-15 14:12:48 -04:00
Kitware Robot f051814ed0 Convert builtin help to reStructuredText source files
Run the convert-help.bash script to convert documentation:

 ./convert-help.bash "/path/to/CMake-build/bin"

Then remove it.
2013-10-15 14:12:03 -04:00
Brad King 3573a94d72 Merge topic 'vs-no-indirect-output'
45d2966 VS: Avoid leaking child process output back to IDE (#14266)
2013-07-16 13:59:17 -04:00
Brad King 45d2966dcc VS: Avoid leaking child process output back to IDE (#14266)
The VS IDE sets the environment variable VS_UNICODE_OUTPUT when
executing build rules in order to tell MS tools to report output through
a back door instead of through stdout/stderr.  Unset this variable so
that CMake can capture or properly redirect all output from processes it
runs even when running inside a VS IDE build environment.

This generalizes the special cases fixed by commit 80d045b0 (When
GetPrerequisites.cmake runs dumpbin while running inside the VS IDE...,
2008-05-01) and commit 44aff73d (ExternalProject: Avoid bleed-through
output when logging, 2011-01-06), so drop special handling of
VS_UNICODE_OUTPUT in those instances.
2013-07-16 13:48:10 -04:00
Brad King 93c1165705 ExternalProject: Document multiple COMMAND lines
We support multiple commands per external project step by using
the COMMAND keyword.  Document this behavior and show an example.
While at it, document that shell operators and current working
directory behavior is not defined.
2013-07-08 11:55:33 -04:00
Matt McCormick ecd11a25cc ExternalProject: Allow blank SVN_USERNAME/SVN_PASSWORD (#14128)
With

  SVN_USERNAME ""
  SVN_PASSWORD ""

in an ExternalProject_Add() call, the blank username and password
will be passed to the svn checkout/update step commands.
2013-05-06 13:16:18 -04:00
Bill Hoffman 118f741c49 ExternalProject: Retry on a failed git clone
Git sometimes fails to clone repositories due to network outage or
server load.  Try 3 times before giving up.
2013-03-26 10:31:39 -04: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 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
Brad King c0f1af926f ExternalProject: Allow DEPENDS on normal targets (#13849)
The ExternalProject_Add DEPENDS option adds two types of dependencies.
It adds a target-level build order dependency between the external
project target and the named targets.  It also adds a file-level
dependency on the "done" stamp file of the named external project
targets.  Targets not created by ExternalProject_Add have no such stamp
file and no _EP_STAMP_DIR property.  Prior to commit d14c0243 (Refactor
repeated code into function, 2012-04-26) we unconditionally accepted an
empty stamp dir and generated a dependency on a non-existent file.
After that commit we generate an error that no stamp dir is set.

Skip the file-level dependency when the named dependency is not an
external project target in order to allow this use case.  Teach the
ExternalProject test to cover the case.
2013-01-16 10:35:58 -05:00
Matt McCormick 9b66c8faf5 ExternalProject: Always do a git fetch for a remote ref.
Remote git refs always require a git fetch, because the remote may move around
where the ref points.
2012-11-13 13:34:43 -05:00
Matt McCormick d0758290e7 ExternalProject: Only run 'git fetch' when required.
In the current default update step for Git under the ExternalProject_Add
command, a 'git fetch' is always performed, followed by a 'git checkout' and
'git submodule update --recursive'.  However, a 'git fetch' can be time
consuming and requires a network connection.

To save time, we look at the current checked out hash, and only perform the
fetch if required.  This is performed in a CMake script so we can handle
the conditional logic in a cross platform manner.
2012-11-03 17:18:14 -04:00
David Cole 998a17d098 Merge topic 'file-DOWNLOAD-EXPECTED_HASH'
95a0011 file(DOWNLOAD): Change EXPECTED_HASH to take ALGO=value
2012-09-25 15:17:01 -04:00
Brad King d58448544c Merge topic 'ExternalProject-DOWNLOAD_NAME'
8da0fe4 ExternalProject: Add DOWNLOAD_NAME option
2012-09-19 13:58:05 -04:00
Brad King 95a0011604 file(DOWNLOAD): Change EXPECTED_HASH to take ALGO=value
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.
2012-09-19 11:31:36 -04:00