[Cmake-commits] CMake branch, dashboard, created. 2228366c3ee66de17b01639edfb1f575336a49d3

cmake-commits at cmake.org cmake-commits at cmake.org
Mon Mar 29 12:46:06 EDT 2010


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "CMake".

The branch, dashboard has been created
        at  2228366c3ee66de17b01639edfb1f575336a49d3 (commit)

- Log -----------------------------------------------------------------
http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2228366c3ee66de17b01639edfb1f575336a49d3
commit 2228366c3ee66de17b01639edfb1f575336a49d3
Author: Brad King <brad.king at kitware.com>
Date:   Mon Mar 29 12:02:20 2010 -0400

    Add cmake_common dashboard script

diff --git a/cmake_common.cmake b/cmake_common.cmake
new file mode 100644
index 0000000..08b439a
--- /dev/null
+++ b/cmake_common.cmake
@@ -0,0 +1,416 @@
+# CMake Common Dashboard Script
+#
+# This script contains basic dashboard driver code common to all
+# clients.
+#
+# Put this script in a directory such as "~/Dashboards/Scripts" or
+# "c:/Dashboards/Scripts".  Create a file next to this script, say
+# 'my_dashboard.cmake', with code of the following form:
+#
+#   # Client maintainer: me at mydomain.net
+#   set(CTEST_SITE "machine.site")
+#   set(CTEST_BUILD_NAME "Platform-Compiler")
+#   set(CTEST_BUILD_CONFIGURATION Debug)
+#   set(CTEST_CMAKE_GENERATOR "Unix Makefiles")
+#   include(${CTEST_SCRIPT_DIRECTORY}/cmake_common.cmake)
+#
+# Then run a scheduled task (cron job) with a command line such as
+#
+#   ctest -S ~/Dashboards/Scripts/my_dashboard.cmake -V
+#
+# By default the source and build trees will be placed in the path
+# "../My Tests/" relative to your script location.
+#
+# The following variables may be set before including this script
+# to configure it:
+#
+#   dashboard_model       = Nightly | Experimental | Continuous
+#   dashboard_root_name   = Change name of "My Tests" directory
+#   dashboard_source_name = Name of source directory (CMake)
+#   dashboard_binary_name = Name of binary directory (CMake-build)
+#   dashboard_cache       = Initial CMakeCache.txt file content
+#   dashboard_bootstrap   = Bootstrap parallel level (0 to disable)
+#   dashboard_cvs_tag     = CVS tag to checkout (ex: CMake-2-6)
+#   dashboard_do_coverage = True to enable coverage (ex: gcov)
+#   dashboard_do_memcheck = True to enable memcheck (ex: valgrind)
+#   CTEST_UPDATE_COMMAND  = path to svn command-line client
+#   CTEST_BUILD_FLAGS     = build tool arguments (ex: -j2)
+#   CTEST_DASHBOARD_ROOT  = Where to put source and build trees
+#   CTEST_TEST_CTEST      = Whether to run long CTestTest* tests
+#   CTEST_TEST_TIMEOUT    = Per-test timeout length
+#   CMAKE_MAKE_PROGRAM    = Path to "make" tool to use
+#
+# Options to configure builds from experimental git repository:
+#   dashboard_use_git_repo = Whether to use experimental git repository
+#   dashboard_git_url      = Custom git clone url
+#   dashboard_git_branch   = Custom remote branch to track
+#   dashboard_git_crlf     = Value of core.autocrlf for repository
+#
+# For Makefile generators the script may be executed from an
+# environment already configured to use the desired compilers.
+# Alternatively the environment may be set at the top of the script:
+#
+#   set(ENV{CC}  /path/to/cc)   # C compiler
+#   set(ENV{CXX} /path/to/cxx)  # C++ compiler
+#   set(ENV{FC}  /path/to/fc)   # Fortran compiler (optional)
+#   set(ENV{LD_LIBRARY_PATH} /path/to/vendor/lib) # (if necessary)
+
+cmake_minimum_required(VERSION 2.6.3 FATAL_ERROR)
+
+set(CTEST_PROJECT_NAME CMake)
+set(dashboard_user_home "$ENV{HOME}")
+
+# Select the top dashboard directory.
+if(NOT DEFINED dashboard_root_name)
+  set(dashboard_root_name "My Tests")
+endif()
+if(NOT DEFINED CTEST_DASHBOARD_ROOT)
+  get_filename_component(CTEST_DASHBOARD_ROOT "${CTEST_SCRIPT_DIRECTORY}/../${dashboard_root_name}" ABSOLUTE)
+endif()
+
+# Select the model (Nightly, Experimental, Continuous).
+if(NOT DEFINED dashboard_model)
+  set(dashboard_model Nightly)
+endif()
+if(NOT "${dashboard_model}" MATCHES "^(Nightly|Experimental|Continuous)$")
+  message(FATAL_ERROR "dashboard_model must be Nightly, Experimental, or Continuous")
+endif()
+
+# Default to a Debug build.
+if(NOT DEFINED CTEST_BUILD_CONFIGURATION)
+  set(CTEST_BUILD_CONFIGURATION Debug)
+endif()
+
+# Choose CTest reporting mode.
+if(dashboard_bootstrap)
+  # Launchers do not work during bootstrap: no ctest available.
+  set(CTEST_USE_LAUNCHERS 0)
+elseif(NOT "${CTEST_CMAKE_GENERATOR}" MATCHES "Make")
+  # Launchers work only with Makefile generators.
+  set(CTEST_USE_LAUNCHERS 0)
+elseif(NOT DEFINED CTEST_USE_LAUNCHERS)
+  # The setting is ignored by CTest < 2.8 so we need no version test.
+  set(CTEST_USE_LAUNCHERS 1)
+endif()
+
+# Configure testing.
+if(NOT DEFINED CTEST_TEST_CTEST)
+  set(CTEST_TEST_CTEST 1)
+endif()
+if(NOT CTEST_TEST_TIMEOUT)
+  set(CTEST_TEST_TIMEOUT 1500)
+endif()
+
+set(dashboard_use_git_repo 1)
+if(dashboard_use_git_repo)
+  # Select Git source to use.
+  if(NOT DEFINED dashboard_git_url)
+    set(dashboard_git_url "git://cmake.org/cmake.git")
+  endif()
+  if(NOT DEFINED dashboard_git_branch)
+    if("${dashboard_model}" STREQUAL "Nightly")
+      set(dashboard_git_branch nightly)
+    else()
+      set(dashboard_git_branch master)
+    endif()
+  endif()
+  if(NOT DEFINED dashboard_git_crlf)
+    if(UNIX)
+      set(dashboard_git_crlf false)
+    else(UNIX)
+      set(dashboard_git_crlf true)
+    endif(UNIX)
+  endif()
+
+  # Select CVS source to use.
+  if(NOT DEFINED dashboard_cvs_root)
+    set(dashboard_cvs_root ":pserver:anonymous at cmake.org:/cmake.git")
+  endif()
+  if(NOT DEFINED dashboard_cvs_module)
+    set(dashboard_cvs_module ${dashboard_git_branch})
+  endif()
+  set(dashboard_cvs_tag)
+
+  # Look for a GIT command-line client.
+  if(NOT DEFINED CTEST_GIT_COMMAND)
+    find_program(CTEST_GIT_COMMAND NAMES git git.cmd)
+  endif()
+
+  # Use git only if driving CTest is at least 2.8.0.
+  if("${CMAKE_VERSION}" VERSION_LESS 2.8)
+    set(CTEST_GIT_COMMAND "")
+  endif()
+else()
+  set(CTEST_GIT_COMMAND "")
+endif()
+
+# Select CVS source to use.
+if(NOT DEFINED dashboard_cvs_root)
+  set(dashboard_cvs_root ":pserver:anoncvs at www.cmake.org:/cvsroot/CMake")
+endif()
+if(NOT DEFINED dashboard_cvs_module)
+  set(dashboard_cvs_module CMake)
+endif()
+if(DEFINED dashboard_cvs_tag)
+  set(dashboard_cvs_tag "-r${dashboard_cvs_tag}")
+endif()
+
+# Select a source directory name.
+if(NOT DEFINED CTEST_SOURCE_DIRECTORY)
+  if(DEFINED dashboard_source_name)
+    set(CTEST_SOURCE_DIRECTORY ${CTEST_DASHBOARD_ROOT}/${dashboard_source_name})
+  else()
+    set(CTEST_SOURCE_DIRECTORY ${CTEST_DASHBOARD_ROOT}/CMake)
+  endif()
+endif()
+
+# Select a build directory name.
+if(NOT DEFINED CTEST_BINARY_DIRECTORY)
+  if(DEFINED dashboard_binary_name)
+    set(CTEST_BINARY_DIRECTORY ${CTEST_DASHBOARD_ROOT}/${dashboard_binary_name})
+  else()
+    set(CTEST_BINARY_DIRECTORY ${CTEST_SOURCE_DIRECTORY}-build)
+  endif()
+endif()
+
+# Look for a CVS command-line client.
+if(NOT DEFINED CTEST_CVS_COMMAND)
+  find_program(CTEST_CVS_COMMAND cvs)
+endif()
+
+# Set standard CVS update flags.
+if(NOT DEFINED CTEST_CVS_UPDATE_OPTIONS)
+  if(dashboard_cvs_tag)
+    set(CTEST_CVS_UPDATE_OPTIONS "-d -P ${dashboard_cvs_tag}")
+  else()
+    set(CTEST_CVS_UPDATE_OPTIONS "-d -A -P")
+  endif()
+endif()
+
+# Delete source tree if it is incompatible with current VCS.
+if(EXISTS ${CTEST_SOURCE_DIRECTORY})
+  if(CTEST_GIT_COMMAND)
+    if(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}/.git")
+      set(vcs_refresh "because it is not managed by git.")
+    endif()
+  elseif(CTEST_CVS_COMMAND)
+    if(EXISTS "${CTEST_SOURCE_DIRECTORY}/CVS/Root")
+      file(STRINGS "${CTEST_SOURCE_DIRECTORY}/CVS/Root" cvsroot LIMIT_COUNT 1)
+    else()
+      set(cvsroot "none")
+    endif()
+    if(NOT "${cvsroot}" STREQUAL "${dashboard_cvs_root}")
+      set(vcs_refresh "because it does not have the correct CVS/Root.")
+    endif()
+  endif()
+  if(vcs_refresh AND "${CTEST_SOURCE_DIRECTORY}" MATCHES "/CMake[^/]*")
+    message("Deleting source tree\n  ${CTEST_SOURCE_DIRECTORY}\n${vcs_refresh}")
+    file(REMOVE_RECURSE "${CTEST_SOURCE_DIRECTORY}")
+  endif()
+endif()
+
+# Support initial checkout if necessary.
+if(NOT EXISTS "${CTEST_SOURCE_DIRECTORY}"
+    AND NOT DEFINED CTEST_CHECKOUT_COMMAND)
+  get_filename_component(_name "${CTEST_SOURCE_DIRECTORY}" NAME)
+  if(CTEST_GIT_COMMAND)
+    execute_process(COMMAND ${CTEST_GIT_COMMAND} --version OUTPUT_VARIABLE output)
+    string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+(\\.[0-9]+(\\.g[0-9a-f]+)?)?" GIT_VERSION "${output}")
+    if(NOT "${GIT_VERSION}" VERSION_LESS "1.6.5")
+      # Have "git clone -b <branch>" option.
+      set(git_branch_new "-b ${dashboard_git_branch}")
+      set(git_branch_old)
+    else()
+      # No "git clone -b <branch>" option.
+      set(git_branch_new)
+      set(git_branch_old "-b ${dashboard_git_branch} origin/${dashboard_git_branch}")
+    endif()
+
+    # Generate an initial checkout script.
+    set(ctest_checkout_script ${CTEST_DASHBOARD_ROOT}/${_name}-init.cmake)
+    file(WRITE ${ctest_checkout_script} "# git repo init script for ${_name}
+execute_process(
+  COMMAND \"${CTEST_GIT_COMMAND}\" clone -n ${git_branch_new} -- \"${dashboard_git_url}\"
+          \"${CTEST_SOURCE_DIRECTORY}\"
+  )
+if(EXISTS \"${CTEST_SOURCE_DIRECTORY}/.git\")
+  execute_process(
+    COMMAND \"${CTEST_GIT_COMMAND}\" config core.autocrlf ${dashboard_git_crlf}
+    WORKING_DIRECTORY \"${CTEST_SOURCE_DIRECTORY}\"
+    )
+  execute_process(
+    COMMAND \"${CTEST_GIT_COMMAND}\" checkout ${git_branch_old}
+    WORKING_DIRECTORY \"${CTEST_SOURCE_DIRECTORY}\"
+    )
+endif()
+")
+    set(CTEST_CHECKOUT_COMMAND "\"${CMAKE_COMMAND}\" -P \"${ctest_checkout_script}\"")
+  elseif(CTEST_CVS_COMMAND)
+    set(CTEST_CHECKOUT_COMMAND
+      "\"${CTEST_CVS_COMMAND}\" -d ${dashboard_cvs_root} co ${dashboard_cvs_tag} -d ${_name} ${dashboard_cvs_module}")
+  endif()
+  # CTest delayed initialization is broken, so we put the
+  # CTestConfig.cmake info here.
+  set(CTEST_NIGHTLY_START_TIME "21:00:00 EDT")
+  set(CTEST_DROP_METHOD "http")
+  set(CTEST_DROP_SITE "www.cdash.org")
+  set(CTEST_DROP_LOCATION "/CDash/submit.php?project=CMake")
+  set(CTEST_DROP_SITE_CDASH TRUE)
+endif()
+
+# Enable bootstrap build?
+if(NOT DEFINED CTEST_CONFIGURE_COMMAND)
+  if("${dashboard_bootstrap}" GREATER 1)
+    set(CTEST_CONFIGURE_COMMAND "\"${CTEST_SOURCE_DIRECTORY}/bootstrap\" --parallel=${dashboard_bootstrap}")
+  elseif(dashboard_bootstrap)
+    set(CTEST_CONFIGURE_COMMAND "\"${CTEST_SOURCE_DIRECTORY}/bootstrap\"")
+  endif()
+endif()
+
+#-----------------------------------------------------------------------------
+
+# Send the main script as a note.
+list(APPEND CTEST_NOTES_FILES
+  "${CTEST_SCRIPT_DIRECTORY}/${CTEST_SCRIPT_NAME}"
+  "${CMAKE_CURRENT_LIST_FILE}"
+  )
+
+# Check for required variables.
+foreach(req
+    CTEST_CMAKE_GENERATOR
+    CTEST_SITE
+    CTEST_BUILD_NAME
+    )
+  if(NOT DEFINED ${req})
+    message(FATAL_ERROR "The containing script must set ${req}")
+  endif()
+endforeach(req)
+
+# Print summary information.
+foreach(v
+    CTEST_SITE
+    CTEST_BUILD_NAME
+    CTEST_SOURCE_DIRECTORY
+    CTEST_BINARY_DIRECTORY
+    CTEST_CMAKE_GENERATOR
+    CTEST_BUILD_CONFIGURATION
+    CTEST_CVS_COMMAND
+    CTEST_GIT_COMMAND
+    CTEST_CHECKOUT_COMMAND
+    CTEST_CONFIGURE_COMMAND
+    CTEST_SCRIPT_DIRECTORY
+    CTEST_USE_LAUNCHERS
+    )
+  set(vars "${vars}  ${v}=[${${v}}]\n")
+endforeach(v)
+message("Dashboard script configuration:\n${vars}\n")
+
+# Avoid non-ascii characters in tool output.
+set(ENV{LC_ALL} C)
+
+# Helper macro to write the initial cache.
+macro(write_cache)
+  set(cache_build_type "")
+  set(cache_make_program "")
+  if(CTEST_CMAKE_GENERATOR MATCHES "Make")
+    set(cache_build_type CMAKE_BUILD_TYPE:STRING=${CTEST_BUILD_CONFIGURATION})
+    if(CMAKE_MAKE_PROGRAM)
+      set(cache_make_program CMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM})
+    endif()
+  endif()
+  file(WRITE ${CTEST_BINARY_DIRECTORY}/CMakeCache.txt "
+SITE:STRING=${CTEST_SITE}
+BUILDNAME:STRING=${CTEST_BUILD_NAME}
+CTEST_TEST_CTEST:BOOL=${CTEST_TEST_CTEST}
+CTEST_USE_LAUNCHERS:BOOL=${CTEST_USE_LAUNCHERS}
+DART_TESTING_TIMEOUT:STRING=${CTEST_TEST_TIMEOUT}
+${cache_build_type}
+${cache_make_program}
+${dashboard_cache}
+")
+endmacro(write_cache)
+
+# Start with a fresh build tree.
+file(MAKE_DIRECTORY "${CTEST_BINARY_DIRECTORY}")
+if(NOT "${CTEST_SOURCE_DIRECTORY}" STREQUAL "${CTEST_BINARY_DIRECTORY}")
+  message("Clearing build tree...")
+  ctest_empty_binary_directory(${CTEST_BINARY_DIRECTORY})
+endif()
+
+set(dashboard_continuous 0)
+if("${dashboard_model}" STREQUAL "Continuous")
+  set(dashboard_continuous 1)
+endif()
+
+# CTest 2.6 crashes with message() after ctest_test.
+macro(safe_message)
+  if(NOT "${CMAKE_VERSION}" VERSION_LESS 2.8 OR NOT safe_message_skip)
+    message(${ARGN})
+  endif()
+endmacro()
+
+set(dashboard_done 0)
+while(NOT dashboard_done)
+  if(dashboard_continuous)
+    set(START_TIME ${CTEST_ELAPSED_TIME})
+  endif()
+  set(ENV{HOME} "${dashboard_user_home}")
+
+  # Start a new submission.
+  if(COMMAND dashboard_hook_start)
+    dashboard_hook_start()
+  endif()
+  ctest_start(${dashboard_model})
+
+  # Always build if the tree is fresh.
+  set(dashboard_fresh 0)
+  if(NOT EXISTS "${CTEST_BINARY_DIRECTORY}/CMakeCache.txt")
+    set(dashboard_fresh 1)
+    safe_message("Starting fresh build...")
+    write_cache()
+  endif()
+
+  # Look for updates.
+  ctest_update(RETURN_VALUE count)
+  set(CTEST_CHECKOUT_COMMAND) # checkout on first iteration only
+  safe_message("Found ${count} changed files")
+  if(dashboard_fresh OR NOT dashboard_continuous OR count GREATER 0)
+    ctest_configure()
+    ctest_read_custom_files(${CTEST_BINARY_DIRECTORY})
+
+    if(COMMAND dashboard_hook_build)
+      dashboard_hook_build()
+    endif()
+    ctest_build()
+
+    if(COMMAND dashboard_hook_test)
+      dashboard_hook_test()
+    endif()
+    ctest_test(${CTEST_TEST_ARGS})
+    set(safe_message_skip 1) # Block furhter messages
+
+    if(dashboard_do_coverage)
+      ctest_coverage()
+    endif()
+    if(dashboard_do_memcheck)
+      ctest_memcheck()
+    endif()
+    if(NOT dashboard_no_submit)
+      ctest_submit()
+    endif()
+    if(COMMAND dashboard_hook_end)
+      dashboard_hook_end()
+    endif()
+  endif()
+
+  if(dashboard_continuous)
+    # Delay until at least 5 minutes past START_TIME
+    ctest_sleep(${START_TIME} 300 ${CTEST_ELAPSED_TIME})
+    if(${CTEST_ELAPSED_TIME} GREATER 43200)
+      set(dashboard_done 1)
+    endif()
+  else()
+    # Not continuous, so we are done.
+    set(dashboard_done 1)
+  endif()
+endwhile()

-----------------------------------------------------------------------


hooks/post-receive
-- 
CMake


More information about the Cmake-commits mailing list