Commit Graph

77 Commits

Author SHA1 Message Date
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
Brad King 8da0fe4b53 ExternalProject: Add DOWNLOAD_NAME option
Some download URLs do not have the filename embedded in the url.
Add an interface to specify the local filename explicitly.

Suggested-by: James Goppert <james.goppert@gmail.com>
2012-09-18 16:06:21 -04:00
Brad King 131d91a1f9 Rename SSL terminology to TLS
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.
2012-09-14 15:40:09 -04:00
Bill Hoffman c266461084 Add SSL_VERIFYPEER and CAINFO file options to ExternalProject_Add.
This commit adds the ability to turn on and off ssl certificate
authority checking.  It also adds the ability to specify a
certificate authority information file.  This can be done
by setting global cmake variables CMAKE_CURLOPT_CAINFO_FILE
and or CMAKE_CURLOPT_SSL_VERIFYPEER in the project calling
ExternalProject_Add, or by passing those options to individual
ExternalProject_Add calls.
2012-09-12 18:31:52 -04:00
Brad King beb8a8309b ExternalProject: Generalize URL_MD5 option to URL_HASH
Add support for SHA algorithms.
2012-09-11 16:00:57 -04:00
Brad King 91053cdf7b ExternalProject: Add Mercurial (hg) repository support
Add options HG_REPOSITORY and HG_TAG to specify an external project
hosted in a Mercurial repository.  Teach ExternalProject to clone the
repository and update from it.  Extend the ExternalProject test to try a
Mercurial repository when hg is available.
2012-08-16 09:02:34 -04:00
Kitware Robot 9db3116226 Remove CMake-language block-end command arguments
Ancient versions of CMake required else(), endif(), and similar block
termination commands to have arguments matching the command starting the
block.  This is no longer the preferred style.

Run the following shell code:

for c in else endif endforeach endfunction endmacro endwhile; do
    echo 's/\b'"$c"'\(\s*\)(.\+)/'"$c"'\1()/'
done >convert.sed &&
git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' |
egrep -z -v '^(Utilities/cm|Source/kwsys/)' |
egrep -z -v 'Tests/CMakeTests/While-Endwhile-' |
xargs -0 sed -i -f convert.sed &&
rm convert.sed
2012-08-13 14:19:16 -04:00
Matt McCormick c9097c74b6 ExternalProject: Fix 'make' builds with Ninja (#13159)
Fix the build command when Ninja is the CMake Generator, but the
external project is created for a project that does not use CMake but
does use "make".
2012-05-21 18:57:11 -04:00
David Cole 08db81e008 ExternalProject: Avoid repeated git clone operations (#12564)
By tracking a stamp file within the git clone script itself.

Avoids a 2nd git clone operation after switching from Debug
to Release builds in Visual Studio, or vice-versa.
2012-04-28 15:02:17 -04:00
David Cole d14c02434a ExternalProject: Refactor repeated code into function (#12564)
Add "private/internal-use-only" function _ep_get_step_stampfile
to get the name of the stamp file for a given step.

The functionality provided by this commit should be identical
to its parent commit.
2012-04-28 14:54:04 -04:00
David Cole 987c017f6b ExternalProject: Avoid unnecessary git clones (#12564)
In the case of git, only track the repository in the
repository info dependency tracking file. Not the tag.

The download step should only re-run if the repository changes.
The download step should NOT re-run if the tag changes.

The update step is an 'always' re-running step, and so should
already re-run, unless it's been eliminated by use of

  UPDATE_COMMAND ""
2012-04-25 17:30:18 -04:00
David Cole 64818c1077 ExternalProject: Add missing COMMAND keyword
Commit f67139ae added running a verify script in between running
the download and extract scripts. Since then, it has always been
missing the COMMAND keyword added in this commit.

It worked anyway (semi-accidentally) by running a command line like:

  cmake -P script1.cmake cmake -P script2.cmake

CMake, when running -P scripts on the command line, runs them in order,
and apparently ignores spurious arguments in between (the middle "cmake"
in the above example) and so, all appeared to work as intended.

This commit adds the missing keyword and the commands that run are
now two separate sequential cmake invocations like:

  cmake -P script1.cmake
  cmake -P script2.cmake

...which was the original intent of commit f67139ae
2012-04-22 09:10:01 -04:00
Peter Collingbourne 6dd410c2b9 Ninja: Add the Ninja generator 2012-02-02 23:40:21 +00:00
Brad King 4ac6ba2bb8 ExternalProject: Update copyright year 2012-01-10 15:02:56 -05:00
Brad King 8cb8ccc571 ExternalProject: Fix git.cmd version detection
When GIT_EXECUTABLE points at ".../Git/cmd/git.cmd" in an msysGit
installation we previously failed to detect the version number in a
subtle case.  The "git.cmd" assumes 'chcp' is in PATH.  It is typically
available at "C:\Windows\System32\chcp.com".  On 64-bit Windows the File
System Redirector maps this location to "C:\Windows\SysWOW64\chcp.com"
for 32-bit processes.  However, some Windows installations fail to
provide chcp.com at this path.  Whenever git.cmd runs in a 32-bit
command shell, as it does under a 32-bit CMake binary, it reports

 'chcp' is not recognized as an internal or external command,
  operable program or batch file.

on stderr.  Capture stderr separately so it does not affect parsing
of the version number.

See also msysGit issue 358:

  http://code.google.com/p/msysgit/issues/detail?id=358

Note that FindGit prefers "git.cmd" over "git.exe" because it sets up
the proper HOME environment variable necessary for Git ssh connections
to work the same as they do from the Git bash prompt.
2012-01-10 15:02:40 -05:00
David Cole 12a3699372 ExternalProject: Always use --non-interactive with svn
The previous commit added --non-interactive as a "side effect"
of turning on SVN_TRUST_CERT. While reviewing that commit, we
decided all ExternalProject svn usage should be non-interactive.

That way, if there's any sort of problem, svn will return an
error right away rather than hang forever waiting for input...
2011-04-18 11:34:00 -04:00
David Cole 3a5a402a53 ExternalProject: Add SVN_TRUST_CERT argument
Which adds --non-interactive and --trust-server-cert to the svn
checkout and update command lines. This allows ExternalProject
clients to pull from an https:// based svn server even though
the server may not have a valid or trusted certificate.

Caveat emptor: I would NOT recommend using this except as a
short-term work-around. Rather, the server should have a valid,
trusted certificate, or the client should be using "http" instead
of "https".
2011-04-11 16:34:58 -04:00
David Cole 7f10b137e1 ExternalProject: Extract file names from more urls
Notably, downloads from sourceforge.net and gitweb snapshots.
2011-03-04 17:09:41 -05:00
David Cole d67a513447 ExternalProject: Replace location tags in CMAKE_CACHE_ARGS
When we added CMAKE_CACHE_ARGS, we did not try it with any
<SOURCE_DIR> or <INSTALL_DIR> references. This commit fixes
that accidental omission.
2011-01-07 08:04:16 -05:00
David Cole d7a87b52a0 Merge branch 'ep-log-output-under-vs' into ep-fix-substitutions 2011-01-07 07:59:21 -05:00
David Cole 44aff73d4a ExternalProject: Avoid bleed-through output when logging.
Unset VS_UNICODE_OUTPUT when executing a command whose output
is being logged to a file. Previously, running Microsoft tools
in sub-processes of Visual Studio would send their output to
the Visual Studio output pipe named by this environment variable.

Unsetting it forces the output back to the normal stdout and stderr
channels where cmake can intercept it and direct it to the
appropriate log files.
2011-01-06 18:29:44 -05:00
Marcus D. Hanwell 3bc828df9a Fixed bug where last entry would be lost.
The code to build up a list was missing the final entry in an initial
cache.
2010-12-13 12:50:38 -05:00
Marcus D. Hanwell b316087c09 Escape file write expansion, and build up lists.
Escaped the @var@ in the file writes - this was being expanded at file
write and so not causing a reconfigure at the right time. I also took
care of build up lists of lists in the variables, especially important
for things like MPI_EXTRA_LIBRARY. Added some error checking, and use
the tmp_dir for initial cache file.
2010-12-11 12:11:27 -05:00
Marcus D. Hanwell 68cd3fe038 Added CMAKE_CACHE_ARGS to ExternalProject.
On Windows the limit for command line arguments is 8192 characters, and
this was limiting longer paths with some of our more nested projects
such as Library. Placing the -D arguments into CMAKE_CACHE_ARGS will
write out an initial cache file, that will be passed to CMake with a -C
argument as the initial cache.

By forcing the cache variables we preserve the existing behavior with
-D, to change the values of cache variables in our inner projects.
2010-12-10 17:41:41 -05:00
Marcus D. Hanwell 74e49aa441 BUG 11451 - pass CMAKE_EXTRA_GENERATOR down.
This patch fixes the behavior of external projects with respect to
generators using the CMAKE_EXTRA_GENERATOR variable.
2010-11-12 19:43:05 -05:00
David Cole ec93cd2ead Merge topic 'fix-11173'
6e1282f ExternalProject: No svn --username if empty (#11173)
2010-10-28 14:10:01 -04:00
David Cole 6e1282f840 ExternalProject: No svn --username if empty (#11173)
Nor --password. But please do if non-empty. Thank you.
2010-10-22 16:23:27 -04:00
Marcus D. Hanwell beeca11c9b Fixed parallel build for generators with EXTRA.
Fixed parallel build for projects using generators that have the
CMAKE_EXTRA_GENERATOR as well as CMAKE_GENERATOR. Thanks to Bill Hoffman
for helping me to track this one down, I missed parallel builds.
2010-10-22 11:16:21 -04:00
David Cole ef9dd49d3d Add STEP_TARGETS to ExternalProject module.
This commit introduces the ability to add custom targets
that correspond to individual ExternalProject steps.
The main motivation behind this new feature is to drive
sub-project based dashboard steps as external projects
with separate targets for update, configure, build and
test output. This makes it easy to construct a ctest -S
script to drive such a dashboard.

With no STEP_TARGETS defined, there are no additional
custom targets introduced, to minimize the chatter in
the target name space. Clients may define STEP_TARGETS
on a per-ExternalProject_Add basis, or at the directory
level by setting the EP_STEP_TARGETS directory property.
2010-08-23 17:50:58 -04:00
Todd Gamblin 2cde67a781 Modules: Fix spelling 'To distributed' -> 'To distribute' 2010-08-09 08:48:31 -04:00
Brad King 7e578b8d73 Merge topic 'ExternalProject-cygwin-make'
ed43ea6 ExternalProject: Fix $(MAKE) with cygpath on Windows
2010-08-03 16:21:55 -04:00
Brad King 68efc3ef86 Merge topic 'fix-issue-11034'
9fa49dc ExternalProject: Remove 'unknown keyword' warning (#11034)
2010-08-03 16:11:01 -04:00
Brad King ed43ea603f ExternalProject: Fix $(MAKE) with cygpath on Windows
In non-cygwin builds using Cygwin's make tool, use cygpath to transform
the value of $(MAKE) to something Windows understands.
2010-08-02 12:02:15 -04:00
David Cole 9fa49dc3ad ExternalProject: Remove 'unknown keyword' warning (#11034)
The intent was to warn about misspelled keyword arguments,
but the effect was to warn about valid argument values far
too often. Let's stop annoying and confusing people.
2010-07-28 08:16:08 -04:00
David Cole b62fe1242f ExternalProject: Use $(MAKE) whenever possible.
ExternalProject_Add calls that did not explicitly request a
CMAKE_GENERATOR would not get recursive parallel make behavior.
This commit fixes that issue.
2010-07-23 13:51:37 -04:00
Brad King a570ba6df7 Merge topic 'external-project-launcher'
b2634b6 Detect CMake warnings and errors in build output.
012c986 ExternalProject: Add LOG_* options to hide step output
2010-07-13 14:58:11 -04:00
David Cole b2634b6aa3 Detect CMake warnings and errors in build output.
Fix niggly in ExternalProject that would inadvertently
create a log file of output when a command was explicitly
set to the empty string.

Also, increase the default value for showing context
around build errors to 10 lines, up from 6. Also add
the ability to customize this setting so that users
can put it back to 6 or even lower if they want, or
show more if they want.
2010-07-10 15:04:31 -04:00
David Cole 67f4759b55 Qualify name of extraction location with ExternalProject name.
Avoid issues with two external projects trying to extract two
separate trees at the same time into the same location. Should
fix the sporadically failing ExternalProject test on the dashboards
for parallel builds.
2010-06-23 07:04:06 -04:00
Brad King 012c986309 ExternalProject: Add LOG_* options to hide step output
Optionally hide the output of each external project build step by
wrapping its command in a launcher script.  Make output available in log
files instead.  This simplifies the output of external project builds.
2010-06-21 13:25:13 -04:00
David Cole cd3d60b8b5 Fix issue #10346. Error if SOURCE_DIR is empty.
See http://public.kitware.com/Bug/view.php?id=10346.
The proposed patch for the issue could not be applied as is
because the SOURCE_DIR always exists for an ExternalProject_Add
call by the time we get to the place to emit the potential error.

The fix is to emit the error only if the source dir is empty.
By which, I mean devoid of files and subdirectories. If
SOURCE_DIR is used by itself, without any DOWNLOAD_COMMAND
or repository info, then it implies that the SOURCE_DIR is ready
to build as-is without need for a download step. Clearly, if it
is empty, then it is not ready to build as is. So complain if
the SOURCE_DIR is empty.
2010-06-09 18:22:58 -04:00
Brad King 0d07e4379e Merge branch 'improve-file-download'
Conflicts:
	Modules/ExternalProject.cmake
2010-06-07 14:26:24 -04:00