From 3a5a402a533b88e9f4810d07c1bfcb9e2c5abde4 Mon Sep 17 00:00:00 2001 From: David Cole Date: Mon, 11 Apr 2011 16:34:58 -0400 Subject: 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". --- Modules/ExternalProject.cmake | 13 +++++++++++-- Tests/ExternalProject/CMakeLists.txt | 3 +++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index 390b8f9..c910a56 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -18,6 +18,7 @@ # [SVN_REVISION rev] # Revision to checkout from Subversion repo # [SVN_USERNAME john ] # Username for Subversion checkout and update # [SVN_PASSWORD doe ] # Password for Subversion checkout and update +# [SVN_TRUST_CERT 1 ] # Trust the Subversion server site certificate # [GIT_REPOSITORY url] # URL of git repo # [GIT_TAG tag] # Git branch name, commit id or tag # [URL /.../src.tgz] # Full path or URL of source @@ -1026,6 +1027,7 @@ function(_ep_add_download_command name) get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION) get_property(svn_username TARGET ${name} PROPERTY _EP_SVN_USERNAME) get_property(svn_password TARGET ${name} PROPERTY _EP_SVN_PASSWORD) + get_property(svn_trust_cert TARGET ${name} PROPERTY _EP_SVN_TRUST_CERT) set(repository "${svn_repository} user=${svn_username} password=${svn_password}") set(module) @@ -1046,8 +1048,11 @@ function(_ep_add_download_command name) if(svn_password) set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}") endif() + if(svn_trust_cert) + set(svn_trust_cert_args --non-interactive --trust-server-cert) + endif() set(cmd ${Subversion_SVN_EXECUTABLE} co ${svn_repository} ${svn_revision} - ${svn_user_pw_args} ${src_name}) + ${svn_trust_cert_args} ${svn_user_pw_args} ${src_name}) list(APPEND depends ${stamp_dir}/${name}-svninfo.txt) elseif(git_repository) find_package(Git) @@ -1191,6 +1196,7 @@ function(_ep_add_update_command name) get_property(svn_revision TARGET ${name} PROPERTY _EP_SVN_REVISION) get_property(svn_username TARGET ${name} PROPERTY _EP_SVN_USERNAME) get_property(svn_password TARGET ${name} PROPERTY _EP_SVN_PASSWORD) + get_property(svn_trust_cert TARGET ${name} PROPERTY _EP_SVN_TRUST_CERT) set(svn_user_pw_args "") if(svn_username) set(svn_user_pw_args ${svn_user_pw_args} "--username=${svn_username}") @@ -1198,8 +1204,11 @@ function(_ep_add_update_command name) if(svn_password) set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}") endif() + if(svn_trust_cert) + set(svn_trust_cert_args --non-interactive --trust-server-cert) + endif() set(cmd ${Subversion_SVN_EXECUTABLE} up ${svn_revision} - ${svn_user_pw_args}) + ${svn_trust_cert_args} ${svn_user_pw_args}) set(always 1) elseif(git_repository) if(NOT GIT_EXECUTABLE) diff --git a/Tests/ExternalProject/CMakeLists.txt b/Tests/ExternalProject/CMakeLists.txt index 5158f31..4a542d7 100644 --- a/Tests/ExternalProject/CMakeLists.txt +++ b/Tests/ExternalProject/CMakeLists.txt @@ -100,6 +100,9 @@ ExternalProject_Add(${proj} STEP_TARGETS install update SVN_REPOSITORY "" SVN_REVISION "" + SVN_USERNAME "" + SVN_PASSWORD "" + SVN_TRUST_CERT 1 TEST_COMMAND "" TIMEOUT "" URL "" -- cgit v0.12 From 12a3699372277916d11af5fe1eb2768e704ecb33 Mon Sep 17 00:00:00 2001 From: David Cole Date: Mon, 18 Apr 2011 11:34:00 -0400 Subject: 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... --- Modules/ExternalProject.cmake | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index c910a56..a37771b 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -1049,10 +1049,10 @@ function(_ep_add_download_command name) set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}") endif() if(svn_trust_cert) - set(svn_trust_cert_args --non-interactive --trust-server-cert) + set(svn_trust_cert_args --trust-server-cert) endif() set(cmd ${Subversion_SVN_EXECUTABLE} co ${svn_repository} ${svn_revision} - ${svn_trust_cert_args} ${svn_user_pw_args} ${src_name}) + --non-interactive ${svn_trust_cert_args} ${svn_user_pw_args} ${src_name}) list(APPEND depends ${stamp_dir}/${name}-svninfo.txt) elseif(git_repository) find_package(Git) @@ -1205,10 +1205,10 @@ function(_ep_add_update_command name) set(svn_user_pw_args ${svn_user_pw_args} "--password=${svn_password}") endif() if(svn_trust_cert) - set(svn_trust_cert_args --non-interactive --trust-server-cert) + set(svn_trust_cert_args --trust-server-cert) endif() set(cmd ${Subversion_SVN_EXECUTABLE} up ${svn_revision} - ${svn_trust_cert_args} ${svn_user_pw_args}) + --non-interactive ${svn_trust_cert_args} ${svn_user_pw_args}) set(always 1) elseif(git_repository) if(NOT GIT_EXECUTABLE) -- cgit v0.12