forked from OPM/opm-polymer
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
105 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
find_package(Git REQUIRED) | ||
|
||
macro(sanity_check message) | ||
if(status_code) | ||
message(FATAL_ERROR "${message}") | ||
endif() | ||
endmacro() | ||
|
||
# Check that there are no changes in working-tree | ||
execute_process(COMMAND ${GIT_EXECUTABLE} diff --quiet | ||
RESULT_VARIABLE status_code | ||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) | ||
sanity_check("Cannot run with working tree changes. Commit, stash or drop them.") | ||
|
||
# Setup base of tests | ||
set(check_base $ENV{CHECK_BASE}) | ||
if(NOT check_base) | ||
set(check_base origin/master) | ||
endif() | ||
|
||
# Setup end of tests | ||
set(check_head $ENV{CHECK_HEAD}) | ||
if(NOT check_head) | ||
set(check_head HEAD) | ||
endif() | ||
|
||
# Setup target to build | ||
set(check_target $ENV{CHECK_TARGET}) | ||
if(NOT check_target) | ||
set(check_target all;test) | ||
endif() | ||
|
||
# Build threads | ||
set(build_threads $ENV{CHECK_THREADS}) | ||
if(NOT build_threads) | ||
if(UNIX) | ||
if(APPLE) | ||
execute_process(COMMAND sysctl hw.ncpu | ||
OUTPUT_VARIABLE build_threads) | ||
string(REPLACE " " ";" build_threads_list ${build_threads) | ||
list(GET build_threads_list 1 build_threads) | ||
else() | ||
find_program(NPROC_COMMAND nproc) | ||
if(NPROC_COMMAND) | ||
execute_process(COMMAND ${NPROC_COMMAND} | ||
OUTPUT_VARIABLE build_threads) | ||
string(REGEX REPLACE "(\r?\n)+$" "" build_threads "${build_threads}") | ||
endif() | ||
endif() | ||
endif() | ||
endif() | ||
|
||
# If for some reason we could not find the info - e.g. centos5 where nproc is missing | ||
if(NOT build_threads) | ||
set(build_threads 1) | ||
endif() | ||
|
||
# Record current HEAD | ||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD | ||
OUTPUT_VARIABLE current_branch | ||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) | ||
|
||
string(REGEX REPLACE "(\r?\n)+$" "" current_branch "${current_branch}") | ||
|
||
# Grab revision list | ||
execute_process(COMMAND ${GIT_EXECUTABLE} rev-list ${check_base}..${check_head} --reverse | ||
OUTPUT_VARIABLE rev_list | ||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) | ||
|
||
string(REPLACE "\n" ";" rev_list ${rev_list}) | ||
foreach(rev ${rev_list}) | ||
# Checkout | ||
message("Testing revision ${rev}") | ||
execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${rev} | ||
RESULT_VARIABLE status_code | ||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) | ||
sanity_check("Failed to checkout ${rev}") | ||
|
||
# Build | ||
foreach(tgt ${check_target}) | ||
if(build_threads GREATER 2) | ||
execute_process(COMMAND ${CMAKE_COMMAND} "--build" "${CMAKE_BINARY_DIR}" "--target" "${tgt}" "--use-stderr" "--" "-j${build_threads}" | ||
RESULT_VARIABLE status_code) | ||
else() | ||
execute_process(COMMAND ${CMAKE_COMMAND} "--build" "${CMAKE_BINARY_DIR}" "--target" "${tgt}" "--use-stderr" | ||
RESULT_VARIABLE status_code) | ||
endif() | ||
sanity_check("Failed to build target '${tgt}'") | ||
endforeach() | ||
if(status_code) | ||
execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${current_branch} | ||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) | ||
endif() | ||
sanity_check("Failed to build target for revision ${rev}") | ||
endforeach() | ||
|
||
message("Everything checks out fine") | ||
execute_process(COMMAND ${GIT_EXECUTABLE} checkout ${current_branch} | ||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) |