Skip to content

Commit

Permalink
Merge remote-tracking branch 'github/release'
Browse files Browse the repository at this point in the history
  • Loading branch information
schuhschuh committed Mar 28, 2014
2 parents 5b635ee + f27b4f1 commit dad1c3c
Show file tree
Hide file tree
Showing 78 changed files with 5,025 additions and 1,576 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
*.pyc

*.autosave
CMakeLists.txt.user.*
4 changes: 2 additions & 2 deletions BasisProject.cmake
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ============================================================================
# Copyright (c) 2011-2012 University of Pennsylvania
# Copyright (c) 2013-2014 Carnegie Melon University
# Copyright (c) 2013-2014 Carnegie Mellon University
# Copyright (c) 2013-2014 Andreas Schuh
# All rights reserved.
#
Expand Down Expand Up @@ -83,7 +83,7 @@ basis_project (
# --------------------------------------------------------------------------
# meta-data
NAME "BASIS"
VERSION "3.0.0"
VERSION "3.1.0"
AUTHORS "Andreas Schuh"
DESCRIPTION "This package implements and supports the development of "
"software which follows the CMake Build system And Software "
Expand Down
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ cmake_minimum_required (VERSION 2.8.4)
# include BASIS policies, settings, macros, and functions

# The following variables would be set by the BASISConfig.cmake file if
# this would be a project which uses BASIS.
# this is a project that uses BASIS.

set (BASIS_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/cmake")

Expand Down
2 changes: 1 addition & 1 deletion COPYING.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ CMake BASIS License
===================

Copyright (c) 2011-2012 University of Pennsylvania
Copyright (c) 2013-2014 Carnegie Melon University
Copyright (c) 2013-2014 Carnegie Mellon University
Copyright (c) 2013-2014 Andreas Schuh
All rights reserved.

Expand Down
25 changes: 25 additions & 0 deletions ChangeLog.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
.. This file is formatted using reStructuredText (reST) and included by doc/changelog.rst !

.. _v3.1.0:

Release 3.1.0 (Mar 28, 2014)
----------------------------

- Custom project layout by overriding the default directory names.
- Revised concept of project modules vs. subprojects.
- Enable build of each module by default.
- Enhanced documentation of project modularization.
- Added project configuraton how-to detailing the various configuration files.
- Allow - and _ in project name.
- Allow use of characters -, _, and + in target names.
- Various improvements to reduce build configuration time.
- Require explicit declaration of link dependency to BASIS Utilities.
- Make RPATH setting optional.
- Root documentation files such as README and COPYING file are now optional.
- Conversion of target name to UID is now disabled by default.
- Added shell script which performs the Quick Start steps.
- Default CMakeList.txt template bootstraps BASIS if no installation found.
- Fixed addition of shared libraries.
- Fixed basis_set_project_property(APPEND PROJECT OtherModule ...).
- Fixed TEST property used by basis_build_script_library.
- Fixed help output of basisproject command.


.. _v3.0.0:

Release 3.0.0 (Jan 15, 2014)
Expand Down
2 changes: 1 addition & 1 deletion config/CTestCustom.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ set (
${CTEST_CUSTOM_COVERAGE_EXCLUDE} # keep current exclude expressions
"/CMakeFiles/CMakeTmp/" # exclude try_compile sources
"./test/.*" # exclude test implementations
"./modules/.*/test/.*" # exclude test implementations of modules
"${PROJECT_MODULES_DIR}/.*/test/.*" # exclude test implementations of modules
# add further exclude expressions here
"/gtest/" # tested by Google
"/gmock/" # tested by Google
Expand Down
10 changes: 10 additions & 0 deletions config/ConfigUse.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@
# @PROJECT_NAME@ configuration
# ============================================================================

# ----------------------------------------------------------------------------
# Import configured script executables

# The following statements ensure that all scripts and modules are
# configured/compiled using the same version of the interpreters.
# Yet, the user can modify these variables, though this is not recommended.
Expand Down Expand Up @@ -84,3 +87,10 @@ if (BASIS_BASH_EXECUTABLE)
)
mark_as_advanced (BASH_EXECUTABLE)
endif ()

# ----------------------------------------------------------------------------
# include further required BASIS CMake modules
# base tools included by @PROJECT_NAME@Config.cmake already
if (BASIS_SUPER_BUILD_MODULES)
include (${BASIS_MODULE_PATH}/SuperBuildTools.cmake)
endif ()
55 changes: 52 additions & 3 deletions config/Settings.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# required and optional dependencies and the CMake variables related to the
# project directory structure were defined (see BASISDirectories.cmake file
# in @c PROJECT_BINARY_DIR, where BASIS is here the name of the project).
# It is further included before the BasisSettings.cmake file.
# It is also included before the BasisSettings.cmake file.
#
# In particular, build options should be added in this file using CMake's
# <a href="http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:option">
Expand Down Expand Up @@ -66,7 +66,7 @@ set (INSTALL_TEMPLATE_DIR "${INSTALL_SHARE_DIR}/templates" CACHE PATH "Installat

# force default template to be set
if (NOT DEFAULT_TEMPLATE)
set_property (CACHE DEFAULT_TEMPLATE PROPERTY VALUE "basis/1.0")
set_property (CACHE DEFAULT_TEMPLATE PROPERTY VALUE "basis/1.1")
endif ()
# disable installation of templates if no destination specified
if (NOT INSTALL_TEMPLATE_DIR)
Expand Down Expand Up @@ -131,6 +131,52 @@ endif ()
# utilities
# ============================================================================

# system checks
include (CheckTypeSize)
include (CheckIncludeFileCXX)

# check if type long long is supported
CHECK_TYPE_SIZE ("long long" LONG_LONG)

if (HAVE_LONG_LONG)
set (HAVE_LONG_LONG 1)
else ()
set (HAVE_LONG_LONG 0)
endif ()

# check for presence of sstream header
include (TestForSSTREAM)

if (CMAKE_NO_ANSI_STRING_STREAM)
set (HAVE_SSTREAM 0)
else ()
set (HAVE_SSTREAM 1)
endif ()

# check if tr/tuple header file is available
if (CMAKE_GENERATOR MATCHES "Visual Studio [1-9][0-9]+")
set (HAVE_TR1_TUPLE 1)
else ()
CHECK_INCLUDE_FILE_CXX ("tr1/tuple" HAVE_TR1_TUPLE)
if (HAVE_TR1_TUPLE)
set (HAVE_TR1_TUPLE 1)
else ()
set (HAVE_TR1_TUPLE 0)
endif ()
endif ()

# check for availibility of pthreads library
# defines CMAKE_USE_PTHREADS_INIT and CMAKE_THREAD_LIBS_INIT
find_package (Threads)

if (Threads_FOUND)
if (CMAKE_USE_PTHREADS_INIT)
set (HAVE_PTHREAD 1)
else ()
set (HAVE_PTHREAD 0)
endif ()
endif ()

# list of enabled utilities
# in case of other projects defined by BASISConfig.cmake
set (BASIS_UTILITIES_ENABLED CXX)
Expand Down Expand Up @@ -164,7 +210,7 @@ endif ()

# target UIDs of BASIS libraries; these would be set by the package configuration
# file if this BASIS project would not be BASIS itself
if (BASIS_USE_FULLY_QUALIFIED_UIDS)
if (BASIS_USE_TARGET_UIDS AND BASIS_USE_FULLY_QUALIFIED_UIDS)
set (NS "basis.")
else ()
set (NS)
Expand All @@ -175,3 +221,6 @@ set (BASIS_PERL_UTILITIES_LIBRARY "${NS}utilities_perl")
set (BASIS_BASH_UTILITIES_LIBRARY "${NS}utilities_bash")
set (BASIS_TEST_LIBRARY "${NS}testlib")
set (BASIS_TEST_MAIN_LIBRARY "${NS}testmain")

configure_file(include/basis/config.h.in ${BINARY_INCLUDE_DIR}/basis/config.h)

2 changes: 1 addition & 1 deletion data/templates/basis/1.0/config/CTestCustom.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ set (
${CTEST_CUSTOM_COVERAGE_EXCLUDE} # keep current exclude expressions
"/CMakeFiles/CMakeTmp/" # exclude try_compile sources
"./test/.*" # exclude test implementations
"./modules/.*/test/.*" # exclude test implementations of modules
"${PROJECT_MODULES_DIR}/.*/test/.*" # exclude test implementations of modules
# add further exclude expressions here
)

Expand Down
2 changes: 1 addition & 1 deletion data/templates/basis/1.0/config/Settings.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
# This file is included by basis_project_impl(), after it looked for the
# required and optional dependencies and the CMake variables related to the
# project directory structure were defined (see Directories.cmake file in
# @c BINARY_CONFIG_DIR). It is further included before the BasisSettings.cmake
# @c BINARY_CONFIG_DIR). It is also included before the BasisSettings.cmake
# file.
#
# In particular build options should be added in this file using CMake's
Expand Down
179 changes: 179 additions & 0 deletions data/templates/basis/1.1/BasisBootstrapping.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
# ============================================================================
# Copyright (c) <copyright>
# All rights reserved.
#
# <license>
# ============================================================================

##############################################################################
# @file BasisBootstrapping.cmake
# @brief Auxiliary function to bootstrap the build of CMake BASIS.
##############################################################################

include (CMakeParseArguments)

# ----------------------------------------------------------------------------
## @brief Boostrap build of CMake BASIS during configuration of project.
#
# This function downloads, configures, and builds CMake BASIS. If the (cached)
# variable @c BASIS_INSTALL_PREFIX is set, it also installs BASIS into the
# specified directory. This is only required if the project uses the
# BASIS Utilities. Otherwise, the BASIS build tree can be used directly to
# build the software project which bootstrapped BASIS. It is not required
# during runtime of the software.
#
# @param[in] ARGN The list of arguments is parsed as follows:
# @par
# <table border=0>
# <tr>
# @tp @b VERSION major.minor.patch @endtp
# <td>Version of CMake BASIS to download.</td>
# </tr>
# <tr>
# @tp @b DOWNLOAD_URL url @endtp
# <td>URL from which to download the CMake BASIS source distribution package.
# The given URL can be either a complete download URL which includes the
# package name (which must end with .tar.gz or .zip) or the path of
# a remote directory which contains the CMake BASIS packages named
# cmake-basis-version.zip (for Windows) and cmake-basis-version.tar.gz (for Unix).
# (default: http://opensource.andreasschuh.com/cmake-basis/_downloads)</td>
# </tr>
# <tr>
# @tp @b INFORM_USER @endtp
# <td>This option causes this function to abort the initial configure step
# of CMake. It informs the user that this project required BASIS for
# the build configuration and that it upon the next configure run it
# will attempt to download and build BASIS automatically. It further
# notes that the user can set the @c BASIS_DIR variable prior to the
# next configure run in order to use an existing BASIS installation.
# (default: off)</td>
# </tr>
# <tr>
# @tp @b BASIS_VARIABLE_NAME value @endtp
# <td>Adds a build configuration to the CMake command used to configure
# the build of CMake BASIS using the -D option of @c cmake. The
# @c BASIS_VARIABLE_NAME can be any CMake option or variable that
# is normally used to configure a BASIS build using CMake. For example,
# USE_PythonInterp, USE_BASH, USE_DOXYGEN.</td>
# </tr>
# </table>
#
# @returns Sets the @c BASIS_DIR variable to the bootstrapped BASIS build.
function (basis_bootstrap)
# parse arguments -- unparsed arguments are passed on to CMake using -D
CMAKE_PARSE_ARGUMENTS (BASIS "INFORM_USER" "VERSION;DOWNLOAD_URL" "" ${ARGN})
if (NOT BASIS_VERSION)
message (FATAL_ERROR "No CMake BASIS version specified! Use 'VERSION 3.0.0', for example.")
endif ()
# abort the first time to give users a chance to specify where their
# CMake BASIS installation is located by setting BASIS_DIR in the GUI
if (BASIS_INFORM_USER)
if (DEFINED BASIS_DIR AND NOT DEFINED BASIS_INSTALL_PREFIX)
set (BASIS_INSTALL_PREFIX "" CACHE PATH "Installation prefix for CMake BASIS.")
message (FATAL_ERROR "Could not find an existing CMake BASIS installation!\n"
"This project uses CMake BASIS for the build configuration."
" Next time you configure this build by running CMake again,"
" BASIS version ${BASIS_VERSION} will be automatically downloaded"
" and build as part of the build configuration of this project."
" If you want to install this version permanently,"
" specify an installation prefix for CMake BASIS using"
" BASIS_INSTALL_PREFIX. Otherwise, leave it blank.\n"
"If you installed CMake BASIS already on your system, please"
" specify its location by setting the BASIS_DIR variable"
" before you re-configure the build system of this project.\n"
"Visit http://opensource.andreasschuh.com/cmake-basis for"
" more information about the CMake BASIS package.\n")
endif ()
endif ()

set (DOWNLOAD_PATH "${CMAKE_CURRENT_BINARY_DIR}")
if (WIN32)
set (BASIS_ARCHIVE "cmake-basis-${BASIS_VERSION}.zip")
else ()
set (BASIS_ARCHIVE "cmake-basis-${BASIS_VERSION}.tar.gz")
endif ()
if (NOT BASIS_DOWNLOAD_URL)
set (BASIS_DOWNLOAD_URL "http://opensource.andreasschuh.com/cmake-basis/_downloads")
endif ()
if (NOT BASIS_DOWNLOAD_URL MATCHES "\\.(zip|tar\\.gz)$")
set (BASIS_DOWNLOAD_URL "${BASIS_DOWNLOAD_URL}/${BASIS_ARCHIVE}")
endif ()
set (BASIS_SOURCE_DIR "${DOWNLOAD_PATH}/cmake-basis-${BASIS_VERSION}")
set (BASIS_BINARY_DIR "${DOWNLOAD_PATH}/cmake-basis-${BASIS_VERSION}/build")

# bootstrap BASIS build/installation only if not done before
# or when BASIS_INSTALL_PREFIX has changed
if ( NOT IS_DIRECTORY "${BASIS_BINARY_DIR}"
OR NOT DEFINED BASIS_INSTALL_PREFIX_CONFIGURED
OR NOT BASIS_INSTALL_PREFIX_CONFIGURED STREQUAL "${BASIS_INSTALL_PREFIX}")

# download and extract source code if not done before
if (NOT EXISTS "${BASIS_SOURCE_DIR}/BasisProject.cmake")
# download source code distribution package
if (NOT EXISTS "${DOWNLOAD_PATH}/${BASIS_ARCHIVE}")
message (STATUS "Downloading CMake BASIS v${BASIS_VERSION}...")
file (DOWNLOAD "${BASIS_DOWNLOAD_URL}" "${DOWNLOAD_PATH}/${BASIS_ARCHIVE}" STATUS RETVAL)
list (GET RETVAL 1 ERRMSG)
list (GET RETVAL 0 RETVAL)
if (NOT RETVAL EQUAL 0)
message (FATAL_ERROR "Failed to download CMake BASIS v${BASIS_VERSION} from\n"
"\t${BASIS_DOWNLOAD_URL}\n"
"Error: ${ERRMSG}\n"
"Either try again or follow the instructions at\n"
"\thttp://opensource.andreasschuh.com/cmake-basis/\n"
"to download and install it manually before configuring this project.\n")
endif ()
message (STATUS "Downloading CMake BASIS v${BASIS_VERSION}... - done")
endif ()
# extract source package
message (STATUS "Extracting CMake BASIS...")
execute_process (COMMAND ${CMAKE_COMMAND} -E tar -xvzf "${DOWNLOAD_PATH}/${BASIS_ARCHIVE}" RESULT_VARIABLE RETVAL)
if (NOT RETVAL EQUAL 0)
file (REMOVE_RECURSE "${BASIS_SOURCE_DIR}")
message (FATAL_ERROR "Failed to extract the downloaded archive file ${DOWNLOAD_PATH}/${BASIS_ARCHIVE}!")
endif ()
message (STATUS "Extracting CMake BASIS... - done")
endif ()

# configure
# TODO: Does this work on Windows as well ? Do we need "-G${CMAKE_GENERATOR}" ?
file (MAKE_DIRECTORY "${BASIS_BINARY_DIR}")

set (CMAKE_ARGUMENTS "-DBASIS_REGISTER:BOOL=OFF") # do not register this BASIS build/installation
# as it should only be used by this project
if (BASIS_INSTALL_PREFIX)
list (APPEND CMAKE_ARGUMENTS "-DCMAKE_INSTALL_PREFIX=${BASIS_INSTALL_PREFIX}")
endif ()
list (LENGTH BASIS_UNPARSED_ARGUMENTS N)
while (N GREATER 0)
list (GET BASIS_UNPARSED_ARGUMENTS 0 VARIABLE_NAME)
list (GET BASIS_UNPARSED_ARGUMENTS 1 VARIABLE_VALUE)
list (APPEND CMAKE_ARGUMENTS "-D${VARIABLE_NAME}=${VARIABLE_VALUE}")
list (REMOVE_AT BASIS_UNPARSED_ARGUMENTS 0 1)
math (EXPR N "${N} - 2")
endwhile ()
execute_process (
COMMAND "${CMAKE_COMMAND}" ${CMAKE_ARGUMENTS} "${BASIS_SOURCE_DIR}"
WORKING_DIRECTORY "${BASIS_BINARY_DIR}"
)
# build
execute_process (COMMAND "${CMAKE_BUILD_TOOL}" all WORKING_DIRECTORY "${BASIS_BINARY_DIR}")
# install
if (BASIS_INSTALL_PREFIX)
execute_process (COMMAND "${CMAKE_BUILD_TOOL}" install WORKING_DIRECTORY "${BASIS_BINARY_DIR}")
set (BASIS_DIR "${BASIS_INSTALL_PREFIX}" PARENT_SCOPE)
else ()
set (BASIS_DIR "${BASIS_BINARY_DIR}" PARENT_SCOPE)
endif ()

# remember in which directory BASIS was installed to avoid re-running
# the bootstrapping every time the project needs to be re-configured
set (BASIS_INSTALL_PREFIX_CONFIGURED "${BASIS_INSTALL_PREFIX}" CACHE INTERNAL "" FORCE)

elseif (BASIS_INSTALL_PREFIX_CONFIGURED)
set (BASIS_DIR "${BASIS_INSTALL_PREFIX_CONFIGURED}" PARENT_SCOPE)
else ()
set (BASIS_DIR "${BASIS_BINARY_DIR}" PARENT_SCOPE)
endif ()

endfunction (basis_bootstrap)
Loading

0 comments on commit dad1c3c

Please sign in to comment.