CMakeLists.txt 6.27 KB
Newer Older
1 2
# Copyright 2012 Intel Corporation
#
3
# All rights reserved.
4
#
5 6
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
7
#
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
# - Redistributions of source code must retain the above copyright notice, this
#   list of conditions and the following disclaimer.
#
# - Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25

26
project(waffle1 C CXX)
27

28
cmake_minimum_required(VERSION 2.8.11)
29

30
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules")
31

32 33 34 35 36 37 38
# Set the default location for all build artifacts to traditionally named
# top-level directories.  CMake's default location for build artifacts varies
# per artifact and is hard-to-guess.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")

39
include(WaffleDefineOS)
40
include(WaffleFindDependencies)
41
include(Options.cmake)
42
include(WaffleDefineInternalOptions)
43
include(WaffleValidateOptions)
44
include(WaffleDefineVersion)
45
include(WaffleDefineCompilerFlags)
46 47
include(GNUInstallDirs)

48 49 50 51
if(waffle_build_tests)
    include(WaffleCMocka)
endif()

52 53 54 55 56
# Require MSVC 2013 U4
if (MSVC AND ${CMAKE_C_COMPILER_VERSION} VERSION_LESS 18.00.31101.0)
    message (FATAL_ERROR "Visual Studio 2013 Update 4 or later required")
endif ()

Chad Versace's avatar
Chad Versace committed
57 58
find_package(PkgConfig)

59
# ------------------------------------------------------------------------------
60
# Targets: check, check-func, valgrind-check, valgrind-check-func
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
# ------------------------------------------------------------------------------

#
# Target 'check' runs unit tests, but no functional tests.
#
add_custom_target(check)

#
# Target 'check-func' runs functional tests as well as unit tests.
#
# The unit tests are ran first (due to the depenency on 'check'). If any unit
# test fails, then no functional tests run.
#
add_custom_target(check-func
    DEPENDS check
    )

78 79 80 81 82 83 84 85 86 87 88 89 90
find_program(VALGRIND_EXECUTABLE valgrind)
if(VALGRIND_EXECUTABLE)
    # Runs the 'check' target under valgrind.
    add_custom_target(valgrind-check
        DEPENDS check
        )

    # Runs the 'check-func' target under valgrind.
    add_custom_target(valgrind-check-func
        DEPENDS valgrind-check check-func
        )
endif()

91 92 93 94
# ------------------------------------------------------------------------------
# Add subdirectories
# ------------------------------------------------------------------------------

95 96 97 98 99 100 101
if(waffle_on_mac)
    link_libraries(
        ${COCOA_FRAMEWORK}
        ${CORE_FOUNDATION_FRAMEWORK}
        )
endif()

102
include_directories(
103
    include
104 105 106
    include/waffle
    src
    )
107

108 109 110 111 112 113
add_subdirectory(third_party/threads)
include_directories(
    third_party/threads
    )
set(THREADS_LIBRARIES threads_bundled)

114 115 116 117 118 119 120 121
if(MSVC)
    add_subdirectory(third_party/getopt)
    include_directories(
        third_party/getopt
        )
    set(GETOPT_LIBRARIES getopt_bundled)
endif()

122
add_subdirectory(doc)
123
add_subdirectory(src)
124
add_subdirectory(include)
125
add_subdirectory(man)
126

127 128
if(waffle_build_tests)
    add_subdirectory(tests)
129
endif()
130 131 132

if(waffle_build_examples)
    add_subdirectory(examples)
133
endif()
134

135
# ------------------------------------------------------------------------------
136 137
# Install packaging files: waffle.pc WaffleConfigVersion.cmake, and
# WaffleConfig.cmake
138 139
# ------------------------------------------------------------------------------

140
configure_file(waffle.pc.in ${waffle_libname}.pc @ONLY)
141

142 143 144 145 146
install(
    FILES ${CMAKE_BINARY_DIR}/${waffle_libname}.pc
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
    COMPONENT pkgconfig
    )
147

148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
set(ConfigPackageLocation "${CMAKE_INSTALL_LIBDIR}/cmake/Waffle")
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
    "${CMAKE_BINARY_DIR}/cmake/Modules/WaffleConfigVersion.cmake"
    VERSION "${waffle_version}"
    COMPATIBILITY SameMajorVersion
)

configure_package_config_file(
    cmake/Modules/WaffleConfig.cmake.in
    cmake/Modules/WaffleConfig.cmake
    INSTALL_DESTINATION "${ConfigPackageLocation}"
    PATH_VARS CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_INCLUDEDIR
    NO_CHECK_REQUIRED_COMPONENTS_MACRO
)

install(
    FILES
        "${CMAKE_BINARY_DIR}/cmake/Modules/WaffleConfigVersion.cmake"
        "${CMAKE_BINARY_DIR}/cmake/Modules/WaffleConfig.cmake"
    DESTINATION "${ConfigPackageLocation}"
    COMPONENT devel
)

172 173 174 175 176 177 178 179
# ------------------------------------------------------------------------------
# Install core documentation
# ------------------------------------------------------------------------------

install(
    FILES
        "README.txt"
        "LICENSE.txt"
180
        "HACKING.txt"
181 182 183 184
    DESTINATION "${CMAKE_INSTALL_DOCDIR}"
    COMPONENT coredocs
    )

185 186
# ------------------------------------------------------------------------------

187
include(WafflePrintConfigurationSummary)
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209

set (CPACK_SET_DESTDIR ON)
set (CPACK_PACKAGE_VERSION_MAJOR ${waffle_major_version})
set (CPACK_PACKAGE_VERSION_MINOR ${waffle_minor_version})
set (CPACK_PACKAGE_VERSION_PATCH ${waffle_patch_version})

# cpack detects win64 vs win32 only when msvc is available
# reported upstream, fix (likely post cmake 3.0) pending
if (MINGW)
        if (CMAKE_SIZEOF_VOID_P EQUAL 8)
                set (CPACK_SYSTEM_NAME win64)
        endif ()
endif ()

# See http://www.vtk.org/Wiki/CMake:CPackPackageGenerators
if (WIN32)
        set (CPACK_GENERATOR "ZIP")
else ()
        set (CPACK_GENERATOR "TBZ2")
endif ()

include(CPack)