Skip to content

Commit

Permalink
Use ExternalProject machinery to fetch/update third party
Browse files Browse the repository at this point in the history
  • Loading branch information
martyngigg committed Nov 6, 2015
1 parent c7e0fb6 commit 56e5709
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 19 deletions.
57 changes: 39 additions & 18 deletions buildconfig/CMake/Bootstrap.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,49 @@ if( MSVC )
# Git LFS does not work properly with <= 1.9
find_package ( Git 1.9.5 REQUIRED )
find_package ( GitLFS REQUIRED)


# Use ExternalProject functionality as it already knows how to do clone/update
include ( ExternalProject )
set( EXTERNAL_ROOT ${PROJECT_SOURCE_DIR}/external )
set( THIRD_PARTY_GIT_URL "https://github.com/mantidproject/thirdparty-msvc2015.git" )
set( THIRD_PARTY_GIT_SHA1 master )
set( THIRD_PARTY_DIR ${EXTERNAL_ROOT}/thirdparty-msvc2015 )
set ( THIRD_PARTY_GIT_SHA1 master )
set ( THIRD_PARTY_DIR ${EXTERNAL_ROOT}/src/ThirdParty )
# Generates a script to do the clone/update in tmp
set ( _project_name ThirdParty )
ExternalProject_Add( ${_project_name}
PREFIX ${EXTERNAL_ROOT}
GIT_REPOSITORY ${THIRD_PARTY_GIT_URL}
GIT_TAG ${THIRD_PARTY_GIT_SHA1}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
set_property ( TARGET ${_project_name} PROPERTY EXCLUDE_FROM_ALL )

if( NOT IS_DIRECTORY ${THIRD_PARTY_DIR} )
message ( STATUS "Third party directory not found. Pulling down libraries for MSVC" )
execute_process( COMMAND "${GIT_EXECUTABLE}" clone ${THIRD_PARTY_GIT_URL} ${THIRD_PARTY_DIR}
WORKING_DIRECTORY ${EXTERNAL_ROOT} )
execute_process( COMMAND "${GIT_EXECUTABLE}" checkout ${THIRD_PARTY_GIT_SHA1}
WORKING_DIRECTORY ${THIRD_PARTY_DIR} )
else()
message ( STATUS "Found existing ${THIRD_PARTY_DIR}. Updating to ${THIRD_PARTY_GIT_SHA1}" )
execute_process( COMMAND "${GIT_EXECUTABLE}" checkout ${THIRD_PARTY_GIT_SHA1}
WORKING_DIRECTORY ${THIRD_PARTY_DIR} )
execute_process( COMMAND "${GIT_EXECUTABLE}" pull --rebase origin master
WORKING_DIRECTORY ${THIRD_PARTY_DIR} )
endif()
# Do fetch/update now as we need the dependencies to configure
set ( _tmp_dir ${EXTERNAL_ROOT}/tmp )
if ( NOT EXISTS ${THIRD_PARTY_DIR}/.git )
message ( STATUS "Fetching third party dependencies" )
execute_process ( COMMAND ${CMAKE_COMMAND} ARGS -P ${_tmp_dir}/${_project_name}-gitclone.cmake
COMMENT
RESULT_VARIABLE error_code )
if ( error_code )
message(FATAL_ERROR "Failed to clone repository: 'THIRD_PARTY_GIT_URL'")
endif ()
else ()
message ( STATUS "Updating third party dependencies" )
execute_process ( COMMAND ${CMAKE_COMMAND} ARGS -P ${_tmp_dir}/${_project_name}-gitupdate.cmake
RESULT_VARIABLE error_code )
if ( error_code )
message(FATAL_ERROR "Failed to update repository: 'THIRD_PARTY_GIT_URL'")
endif ()
endif ()
unset ( _tmp_dir )

# Print out where we think we are looking for 3rd party stuff
# Print out where we are looking for 3rd party stuff
set ( THIRD_PARTY_BIN "${THIRD_PARTY_DIR}/bin;${THIRD_PARTY_DIR}/lib/qt4/bin;${THIRD_PARTY_DIR}/lib/python2.7" )
message ( STATUS "Thirdparty dependencies are in ${THIRD_PARTY_DIR}. " )
message ( STATUS "Third party dependencies are in ${THIRD_PARTY_DIR}" )
# Add to the path so that cmake can configure correctly without the user having to do it
set ( ENV{PATH} "${THIRD_PARTY_BIN};$ENV{PATH}" )

Expand All @@ -39,6 +59,7 @@ if( MSVC )
set ( BOOST_LIBRARYDIR "${CMAKE_LIBRARY_PATH}" )
set ( Boost_NO_SYSTEM_PATHS TRUE )

# Configure MSVC
include ( MSVCSetup )
else()
find_package ( Git )
Expand Down
3 changes: 2 additions & 1 deletion external/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
thirdparty-msvc2015
src/*
tmp/*

0 comments on commit 56e5709

Please sign in to comment.