Commit 841fbad9 authored by Andreas Tille's avatar Andreas Tille
Browse files

New upstream version 1.1.0

parent 6930a7dc
Loading
Loading
Loading
Loading
+99 −0
Original line number Diff line number Diff line

# set_from_env
# ------------
#
# Sets a CMake variable from an environment variable. If the
# environment variable  is not  defined then either a fatal error is
# generated or the CMake variable is not modified.
#
# set_from_env( <variable> <environment variable> [REQUIRED|DEFAULT value] )
function(set_from_env var env_var)
  if(NOT DEFINED ENV{${env_var}})
    if (ARGV2 STREQUAL "REQUIRED")
      message(FATAL_ERROR "Required environment variable \"${env_var}\" not defined.")
    elseif (ARGV2 STREQUAL "DEFAULT")
      set(${var} ${ARGV3} PARENT_SCOPE)
    endif()
  else()
    set(${var} $ENV{${env_var}} PARENT_SCOPE)
  endif()
endfunction()

set(CTEST_SITE "CircleCI")
set(CTEST_UPDATE_VERSION_ONLY 1)


# Make environment variables to CMake variables for CTest
set_from_env(CTEST_CMAKE_GENERATOR "CTEST_CMAKE_GENERATOR" DEFAULT "Unix Makefiles" )
set_from_env(CTEST_BINARY_DIRECTORY "CTEST_BINARY_DIRECTORY")
set_from_env(CTEST_DASHBOARD_ROOT  "CTEST_DASHBOARD_ROOT" REQUIRED)
set_from_env(CTEST_SOURCE_DIRECTORY "CTEST_SOURCE_DIRECTORY" REQUIRED)
set_from_env(CTEST_CONFIGURATION_TYPE "CTEST_CONFIGURATION_TYPE" DEFAULT "Release")
set_from_env(CTEST_BUILD_FLAGS "CTEST_BUILD_FLAGS")
set_from_env(CTEST_BUILD_TARGET "CTEST_BUILD_TARGET")
set_from_env(CTEST_TEST_ARGS "CTEST_TEST_ARGS")


set_from_env(PARALLEL_LEVEL "PARALLEL_LEVEL" DEFAULT 2 )
set( CTEST_TEST_ARGS ${CTEST_TEST_ARGS} PARALLEL_LEVEL ${PARALLEL_LEVEL})

set_from_env(DASHBOARD_BRANCH_DIRECTORY "DASHBOARD_BRANCH_DIRECTORY" REQUIRED)

# Construct build name based on what is being built
string(SUBSTRING $ENV{CIRCLE_SHA1} 0 7 commit_sha1)
set(CTEST_BUILD_NAME "CircleCI-$ENV{CIRCLE_BRANCH}-$ENV{CIRCLE_STAGE}-${commit_sha1}")

set_from_env(dashboard_git_branch "CIRCLE_BRANCH")
set_from_env(dashboard_model "DASHBOARD_MODEL" DEFAULT "Experimental" )
set(dashboard_loop 0)


if ( EXISTS "${CTEST_SOURCE_DIRECTORY}/circle.yml")
  list(APPEND CTEST_NOTES_FILES
    "${CTEST_SOURCE_DIRECTORY}/circle.yml"
    )
endif()

if ( EXISTS  "${CTEST_SOURCE_DIRECTORY}/.circleci/config.yml")
  list(APPEND CTEST_NOTES_FILES
    "${CTEST_SOURCE_DIRECTORY}/.circleci/config.yml"
    )
endif()


SET (_dashboard_cache "
    BUILD_DOCUMENTATION:BOOL=OFF
    BUILD_EXAMPLES:BOOL=OFF
    BUILD_SHARED_LIBS:BOOL=ON
    BUILD_TESTING:BOOL=ON

    SimpleITK_USE_SYSTEM_LUA:BOOL=ON
    SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF

    WRAP_DEFAULT:BOOL=OFF
" )

set_from_env(dashboard_cache "CTEST_CACHE" DEFAULT ${_dashboard_cache})


if (DEFINED ENV{DISTCC_DIR})
  SET (dashboard_cache "${dashboard_cache}
     CMAKE_CXX_COMPILER_LAUNCHER:STRING=distcc
     CMAKE_C_COMPILER_LAUNCHER:STRING=distcc
" )
endif()



include("${DASHBOARD_BRANCH_DIRECTORY}/simpleitk_common.cmake")

if(NOT ${configure_return} EQUAL 0 OR
   NOT ${build_return} EQUAL 0 OR
   NOT ${build_errors} EQUAL 0 OR
   NOT ${build_warnings} EQUAL 0 OR
   NOT ${test_return} EQUAL 0)
  message(FATAL_ERROR
    "Build did not complete without warnings, errors, or failures.")
else()
  return(0)
endif()

.circleci/config.yml

0 → 100644
+198 −0
Original line number Diff line number Diff line
referenced:
  defaults: &defaults
    docker:
     - image: circleci/python:2.7
    working_directory: ~/
    resource_class: large
    environment:
      CTEST_DASHBOARD_ROOT: /home/circleci
      CTEST_SOURCE_DIRECTORY: /home/circleci/SimpleITK
      CTEST_BINARY_DIRECTORY: /home/circleci/SimpleITK-build
      CTEST_BUILD_FLAGS: "-j 4"
      CTEST_CONFIGURATION_TYPE: "Release"
      CTEST_OUTPUT_ON_FAILURE: 1
      ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS: 2
      PARALLEL_LEVEL: 4
      DASHBOARD_BRANCH_DIRECTORY: /home/circleci/dashboard
      ExternalData_OBJECT_STORES: /home/circleci/.ExternalData
      CCACHE_NODIRECT: 1
  dependencies: &dependencies
    run:
      name: Dependencies
      command: |
        sudo apt-get install -y rsync lua5.1 ccache kwstyle swig
        sudo pip install --upgrade pip
        sudo pip install numpy scikit-ci-addons
        ci_addons circle/install_cmake.py 3.10.2
  generate-hash-step: &generate-hash-step
    run:
      name: Generate external data hash
      command: |
        cd SimpleITK
        git log -n 1 ${CTEST_SOURCE_DIRECTORY}/Testing/Data/ | tee /home/circleci/external-data.hashable
  restore-data-step: &restore-data-step
     restore_cache:
       keys:
         - 'v1-external-data-{{ checksum "/home/circleci/external-data.hashable" }}'
         - 'v1-external-data'
  restore-ccache-step: &restore-ccache-step
    restore_cache:
      keys:
        - ccache-{{ arch }}-{{ .Branch }}
        - ccache-{{ arch }}-master
  clone-dashboard-step: &clone-dashboard-step
     run:
       name: Cloning dashboard branch
       command: |
         git clone --single-branch ${CIRCLE_REPOSITORY_URL} -b dashboard ${DASHBOARD_BRANCH_DIRECTORY}
  env-step: &env-step
     run:
       name: Additional Environment Variables
       command: |
         echo 'export DASHBOARD_MODEL=$( [[ "$CIRCLE_BRANCH" = "master" || "$CIRCLE_BRANCH" = "next"  || "$CIRCLE_BRANCH" = "release" ]] && echo Continuous || echo Experimental )' >> $BASH_ENV
         echo 'export PATH=/usr/lib/ccache:${PATH}' >> $BASH_ENV

version: 2
jobs:
  build-and-test:
    <<: *defaults
    steps:
      - checkout:
          path : ~/SimpleITK
      - *generate-hash-step
      - *restore-data-step
      - *restore-ccache-step
      - *clone-dashboard-step
      - *dependencies
      - *env-step
      - run:
          name: CCache initialization
          command: |
            ccache --show-stats
            ccache --zero-stats
            ccache --max-size=2.0G
      - run:
          name: Build and Testing with CTest
          no_output_timeout: 20.0m
          command: |
            export LD_LIBRARY_PATH="${CTEST_BINARY_DIRECTORY}/ITK-prefix/lib/:${CTEST_BINARY_DIRECTORY}/SimpleITK-build/lib"
            export CTEST_CACHE="
              BUILD_DOCUMENTATION:BOOL=OFF
              BUILD_EXAMPLES:BOOL=OFF
              BUILD_SHARED_LIBS:BOOL=ON

              SimpleITK_USE_SYSTEM_LUA:BOOL=ON
              SimpleITK_EXPLICIT_INSTANTIATION:BOOL=OFF

              WRAP_DEFAULT:BOOL=OFF"
            ctest -V -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake"
      - run:
          name: ccache stats
          when: always
          command: |
            ccache --show-stats
      - run:
          name: Formatting CTest for JUnit
          when: always
          command: |
            env
            mkdir -p /tmp/test-results
            ci_addons ctest_junit_formatter ${CTEST_BINARY_DIRECTORY} > /tmp/test-results/JUnit-${CIRCLE_NODE_INDEX}.xml
      - store_test_results:
          path: /tmp/test-results
          destination: ctest
      - save_cache:
          key: 'ccache-{{ arch }}-{{ .Branch }}-{{ epoch }}'
          paths: [ "/home/circleci/.ccache" ]
      - save_cache:
          key: 'v1-external-data-{{ checksum "/home/circleci/external-data.hashable" }}'
          paths: [ "/home/circleci/.ExternalData" ]
      - run:
          name: Cleanup build
          command: |
            rm -rf "${CTEST_BINARY_DIRECTORY}/ITK" "${CTEST_BINARY_DIRECTORY}/ITK-build"
            rm -rf "${CTEST_BINARY_DIRECTORY}/SimpleITK" "${CTEST_BINARY_DIRECTORY}/SimpleITK-build"
      - persist_to_workspace:
          root: /home/circleci/SimpleITK-build
          paths:
            - "*"
  python-and-test:
    <<: *defaults
    steps:
      - checkout:
          path : ~/SimpleITK
      - *generate-hash-step
      - *restore-data-step
      - *clone-dashboard-step
      - *dependencies
      - *env-step
      - attach_workspace:
          at: /home/circleci/SimpleITK-build
      - run:
          name: Build Python and Testing with CTest
          no_output_timeout: 20.0m
          command: |
            export LD_LIBRARY_PATH="${CTEST_BINARY_DIRECTORY}/ITK-prefix/lib/:${CTEST_BINARY_DIRECTORY}/lib"
            export CTEST_CACHE="CMAKE_PREFIX_PATH:PATH=${CTEST_BINARY_DIRECTORY}
              SWIG_EXECUTABLE:PATH=${CTEST_BINARY_DIRECTORY}/Swig/bin/swig"
            export CTEST_BINARY_DIRECTORY="/home/circleci/SimpleITK-py"
            ctest -V -Ddashboard_source_config_dir:PATH="Wrapping/Python" -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake"
  docs:
    <<: *defaults
    steps:
      - checkout:
          path : ~/SimpleITK
      - *generate-hash-step
      - *restore-data-step
      - *restore-ccache-step
      - *clone-dashboard-step
      - *dependencies
      - *env-step
      - run:
          name: Additional Dependencies
          command: |
            sudo apt-get install -y doxygen
      - run:
          name: Building and Generating Doxygen
          no_output_timeout: 20.0m
          command: |
            export CTEST_BUILD_TARGET=SimpleITK-doc
            export CTEST_CACHE="
             BUILD_SHARED_LIBS:BOOL=ON
             WRAP_DEFAULT=OFF
             BUILD_DOXYGEN=ON
             SimpleITK_USE_SYSTEM_LUA:BOOL=ON"
            ctest -V -Ddashboard_no_test:BOOL=1\
              -Ddashboard_track:BOOL=Doxygen\
              -S "${CTEST_SOURCE_DIRECTORY}/.circleci/circleci.cmake"
      - run:
          name: Archiving directory for artifact
          command: |
            cd ${CTEST_BINARY_DIRECTORY}/SimpleITK-build/Documentation/
            tar -zcvf simpleitk_doxygen_html.tar.gz html
      - store_artifacts:
          path: /home/circleci/SimpleITK-build/SimpleITK-build/Documentation/simpleitk_doxygen_html.tar.gz
workflows:
  version: 2
  build_and_test:
    jobs:
      - build-and-test:
          filters:
            branches:
               ignore:
                 - gh-pages
                 - dashboard
                 - hooks
      - python-and-test:
          requires:
            - build-and-test
  nightly:
    triggers:
      - schedule:
          cron: "0 3 * * *"
          filters:
            branches:
              only:
                - master
    jobs:
        - docs
+1 −0
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ SET(CTEST_CUSTOM_WARNING_EXCEPTION
  # Ignore CSharp invalid version warning for dev
  "warning CS1607.*The version number.*dev.*is invalid"
  "warning CS1607.*The version.*dev.*is not in the normal"
  "warning CS7035.*The specified version string.*does not conform"

  # Warning when building R, issue related to make file
  "warning: jobserver unavailable:"
+1 −0
Original line number Diff line number Diff line
configure_file( "${CONFIGUREBUILDTIME_filename}" "${CONFIGUREBUILDTIME_out_filename}" )
+77 −41
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@ include(sitkExternalData)
include(CMakeParseArguments)

set(SimpleITK_DATA_ROOT ${SimpleITK_SOURCE_DIR}/Testing/Data)
set(SimpleITK_TEST_OUTPUT_DIR ${CMAKE_BINARY_DIR}/Testing/Temporary)

#-----------------------------------------------------------------------------
# SimpleITK wrapper for add_test that adds support for external data,
@@ -13,16 +14,26 @@ set(SimpleITK_DATA_ROOT ${SimpleITK_SOURCE_DIR}/Testing/Data)
#   The first arguments are passed to cmake's add_test function with
#   support for the DATA{} references to external data
# TRANSFORM_COMPARE <test transform> <baseline displacement> [tolerance]
# IMAGE_COMPARE <test image> <baseline image> [tolerance]
# IMAGE_MD5_COMPARE <test image> <md5 hash>
function(sitk_add_test)
  set(options "")
  set(oneValueArgs "NAME")
  set(multiValueArgs COMMAND TRANSFORM_COMPARE)
  set(multiValueArgs COMMAND TRANSFORM_COMPARE IMAGE_COMPARE IMAGE_MD5_COMPARE)
  cmake_parse_arguments("_" "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )

  if ( NOT "${__TRANSFORM_COMPARE}" STREQUAL "" )
    set(COMPARE_ARGS ${COMPARE_ARGS} --compareTransform ${__TRANSFORM_COMPARE})
  endif()

  if ( NOT "${__IMAGE_COMPARE}" STREQUAL "" )
    set(COMPARE_ARGS ${COMPARE_ARGS} --compare ${__IMAGE_COMPARE})
  endif()

  if ( NOT "${__IMAGE_MD5_COMPARE}" STREQUAL "" )
    set(COMPARE_ARGS ${COMPARE_ARGS} --compare-MD5 ${__IMAGE_MD5_COMPARE})
  endif()

  if (COMPARE_ARGS)
    set(__COMMAND $<TARGET_FILE:sitkCompareDriver> ${COMPARE_ARGS} -- ${__COMMAND})
  endif()
@@ -30,7 +41,6 @@ function(sitk_add_test)
  # Add test with data in the SimpleITKData group.
  ExternalData_add_test(SimpleITKData NAME ${__NAME} COMMAND ${__COMMAND} ${__UNPARSED_ARGUMENTS})


endfunction()


@@ -52,16 +62,21 @@ function(sitk_add_python_test name)
  endif()

  sitk_add_test(NAME Python.${name}
    COMMAND "${ITK_TEST_DRIVER}"
    COMMAND
      ${command}
      ${ARGN}
    )
  set_property(TEST Python.${name}
      PROPERTY LABELS Python
      )
  if (SimpleITK_TESTING_NOSHOW)
    set_property(TEST Python.${name}
        PROPERTY ENVIRONMENT SITK_NOSHOW=YES
        )
  endif()
  if (NOT SimpleITK_PYTHON_USE_VIRTUALENV)
    set_property(TEST Python.${name}
      APPEND PROPERTY ENVIRONMENT PYTHONPATH=${SimpleITK_BINARY_DIR}/Wrapping/Python
      APPEND PROPERTY ENVIRONMENT PYTHONPATH=${SimpleITK_Python_BINARY_DIR}
      )
  endif()

@@ -86,16 +101,21 @@ function(sitk_add_lua_test name)
  endif()

  sitk_add_test(NAME Lua.${name}
    COMMAND "${ITK_TEST_DRIVER}"
    COMMAND
      ${command}
      ${ARGN}
    )
  set_property(TEST Lua.${name}
    PROPERTY LABELS Lua
    )
  set_property(TEST Lua.${name}
    PROPERTY ENVIRONMENT LUA_CPATH=$<TARGET_FILE:SimpleITKLuaModule_LUA>
    )
  if (SimpleITK_TESTING_NOSHOW)
    set_property(TEST Lua.${name}
      APPEND PROPERTY ENVIRONMENT SITK_NOSHOW=YES
      )
  endif()
endfunction()


@@ -117,11 +137,13 @@ function(sitk_add_ruby_test name)
  endif()

  sitk_add_test(NAME Ruby.${name}
    COMMAND "${ITK_TEST_DRIVER}"
    COMMAND
      ${command}
      ${ARGN}
    )

  set_property(TEST Ruby.${name}
    PROPERTY LABELS Ruby
    )
  set_property(TEST Ruby.${name}
    PROPERTY ENVIRONMENT RUBYLIB=$<TARGET_FILE_DIR:simpleitk_RUBY>
    )
@@ -146,10 +168,13 @@ function(sitk_add_tcl_test name)
  endif()

  sitk_add_test(NAME Tcl.${name}
    COMMAND "${ITK_TEST_DRIVER}"
    COMMAND
      ${command}
      ${ARGN}
    )
  set_property(TEST Tcl.${name}
    PROPERTY LABELS Tcl
    )
endfunction()


@@ -170,9 +195,9 @@ function(sitk_add_java_test name java_file)

  set( _JAVA_LIBRARY_PATH  "$<TARGET_FILE_DIR:SimpleITKJava_JAVA>")
  if(WIN32)
    set( _JAVA_CLASSPATH "${SimpleITK_BINARY_DIR}/Wrapping/Java/${JAR_FILE}$<SEMICOLON>${_class_path}" )
    set( _JAVA_CLASSPATH "${SimpleITK_Java_BINARY_DIR}/${JAR_FILE}$<SEMICOLON>${_class_path}" )
  else()
    set( _JAVA_CLASSPATH "${SimpleITK_BINARY_DIR}/Wrapping/Java/${JAR_FILE}:${_class_path}" )
    set( _JAVA_CLASSPATH "${SimpleITK_Java_BINARY_DIR}/${JAR_FILE}:${_class_path}" )
  endif()

  if (NOT TARGET ${_java_class}Java)
@@ -196,13 +221,16 @@ function(sitk_add_java_test name java_file)


  sitk_add_test(NAME Java.${name}
    COMMAND "${ITK_TEST_DRIVER}"
    COMMAND
      "${Java_JAVA_EXECUTABLE}"
      "-Djava.library.path=${_JAVA_LIBRARY_PATH}"
      "-classpath" "${_JAVA_CLASSPATH}"
      "${_java_class}"
      ${ARGN}
    )
  set_property(TEST Java.${name}
    PROPERTY LABELS Java
    )
endfunction()


@@ -215,7 +243,8 @@ function(sitk_add_r_test name)
    return()
  endif()

  set(command "${R_COMMAND}")
  set(command "${RSCRIPT_EXECUTABLE}" "--no-save" "--no-restore"
  "--no-site-file" "--no-init-file")

  # add extra command which may be needed on some systems
  if(CMAKE_OSX_ARCHITECTURES)
@@ -224,12 +253,17 @@ function(sitk_add_r_test name)
  endif()

  sitk_add_test(NAME R.${name}
    COMMAND "${ITK_TEST_DRIVER}"
    COMMAND
      ${command}
      ${ARGN}
    )

  file(TO_NATIVE_PATH "${SimpleITK_BINARY_DIR}/Wrapping/R/R_libs" _native_path)
  set_property(TEST R.${name}
    PROPERTY LABELS R
    )

  file(TO_NATIVE_PATH "${SimpleITK_R_BINARY_DIR}/R_libs" _native_path)

  set_property(TEST R.${name}
    PROPERTY ENVIRONMENT R_LIBS=${_native_path}
    )
@@ -274,17 +308,19 @@ function(sitk_add_csharp_test name csharp_file)
  # the interpreter is set to "" when none is needed
  if( CSHARP_INTERPRETER )
    sitk_add_test(NAME CSharp.${name}
      COMMAND "${ITK_TEST_DRIVER}"
      COMMAND
        "${CSHARP_INTERPRETER}"
        "${CSHARP_BINARY_DIRECTORY}/${CSHARP_EXECUTABLE}.exe"
        ${ARGN}
      )
  else ()
    sitk_add_test(NAME CSharp.${name}
      COMMAND "${ITK_TEST_DRIVER}"
      COMMAND
        "${CSHARP_BINARY_DIRECTORY}/${CSHARP_EXECUTABLE}.exe"
        ${ARGN}
      )
  endif()

  set_property(TEST CSharp.${name}
    PROPERTY LABELS CSharp
    )
endfunction()
Loading