~ubuntu-branches/ubuntu/saucy/kactivities/saucy-proposed

« back to all changes in this revision

Viewing changes to cmake/modules/CheckCxxFeatures.cmake

  • Committer: Package Import Robot
  • Author(s): Scott Kitterman, Jonathan Riddell, Scott Kitterman
  • Date: 2012-11-20 13:47:27 UTC
  • mfrom: (1.1.13)
  • Revision ID: package-import@ubuntu.com-20121120134727-vqzk04slqjoay3de
Tags: 4:4.9.80-0ubuntu1
[ Jonathan Riddell ]
* New upstream beta release

[ Scott Kitterman ]
* Add new libkactivities-models1 library package (debian/control, .install,
  and .symbols)
* Add nepomuk-core-dev to build-depends
* Wildcard libkactivities6.install so that soversion changes don't cause
  build failures
* Update libkactivities6.symbols
* Update libkactivities-dev.install for new files for libkactivies-models
* Add new files to libkactivities-bin.install, including Activities kcm

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Macro that tests and returns whether a C++ feature is present in the
 
2
# current compiler
 
3
 
 
4
set(CXX_CHECK_FEATURE_MODULE_DIR "${CMAKE_SOURCE_DIR}/cmake/modules")
 
5
set(CXX_FEATURES_SUPPORTED "")
 
6
set(CXX_FEATURES_UNSUPPORTED "")
 
7
 
 
8
macro(CXX_PERFORM_TEST TEST_SOURCE_FILE TEST_TEST_BINARY_DIR EXPECTED_RESULT RESULT COMPILE_DEFINITIONS)
 
9
 
 
10
    try_run(
 
11
        RUN_RESULT_VAR COMPILE_RESULT_VAR
 
12
        "${TEST_BINARY_DIR}" "${TEST_SOURCE_FILE}"
 
13
        COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS}"
 
14
        COMPILE_OUTPUT_VARIABLE COMPILE_OUT
 
15
        RUN_OUTPUT_VARIABLE RUN_OUT
 
16
    )
 
17
 
 
18
    set(RESULT_VAR FALSE)
 
19
 
 
20
    if (COMPILE_RESULT_VAR AND NOT RUN_RESULT_VAR)
 
21
        set(RESULT_VAR TRUE)
 
22
    endif (COMPILE_RESULT_VAR AND NOT RUN_RESULT_VAR)
 
23
 
 
24
    if (NOT ("${RESULT_VAR}" STREQUAL "${EXPECTED_RESULT}"))
 
25
        # message ("Got ${RESULT_VAR} as a result, but ${EXPECTED_RESULT} expected")
 
26
 
 
27
        if (NOT ${COMPILE_RESULT_VAR})
 
28
            # message("------ compilation output ------")
 
29
            # message("${COMPILE_OUT}")
 
30
        endif (NOT ${COMPILE_RESULT_VAR})
 
31
 
 
32
        if (${RUN_RESULT_VAR})
 
33
            # message("---------- run output ----------")
 
34
            # message("${RUN_OUT}")
 
35
            # message("Process returned: ${RUN_RESULT_VAR}")
 
36
        endif (${RUN_RESULT_VAR})
 
37
 
 
38
        # message("--------------------------------")
 
39
 
 
40
        set (${RESULT} FALSE)
 
41
 
 
42
    else ()
 
43
        set (${RESULT} TRUE)
 
44
 
 
45
    endif ()
 
46
 
 
47
 
 
48
 
 
49
endmacro(CXX_PERFORM_TEST TEST_SOURCE EXPECTED_RESULT RESULT)
 
50
 
 
51
 
 
52
 
 
53
macro(CXX_CHECK_FEATURE CXX_VERSION FEATURE_NAME FEATURE_NUMBER RESULT_VAR COMPILE_DEFINITIONS)
 
54
 
 
55
    # Testing whether we have previously set the variable
 
56
    if(NOT DEFINED ${RESULT_VAR})
 
57
 
 
58
        set(TEST_BINARY_DIR
 
59
            "${CMAKE_CURRENT_BINARY_DIR}/cxx-check-feature/cxx_${FEATURE_NUMBER}"
 
60
            )
 
61
 
 
62
        set(TEST_SOURCE_BASE
 
63
            "${CXX_CHECK_FEATURE_MODULE_DIR}/${CXX_VERSION}-test-${FEATURE_NAME}-${FEATURE_NUMBER}"
 
64
            )
 
65
 
 
66
        set(TEST_SOURCE_FILE "${TEST_SOURCE_BASE}.cpp")
 
67
        set(FAILTEST_SOURCE_FILE "${TEST_SOURCE_BASE}-fail.cpp")
 
68
 
 
69
        set(FEATURE_NAME
 
70
            "'${FEATURE_NAME}' (${CXX_VERSION} N${FEATURE_NUMBER})"
 
71
            )
 
72
 
 
73
        message(STATUS "Checking C++ support for ${FEATURE_NAME}")
 
74
 
 
75
        string (COMPARE EQUAL "${CMAKE_CXX_COMPILER_ID}" "Clang" CMAKE_COMPILER_IS_CLANG)
 
76
        string (COMPARE EQUAL "${CMAKE_CXX_COMPILER_ID}" "GNU" CMAKE_COMPILER_IS_GCC)
 
77
 
 
78
        set (ADD_COMPILE_DEFINITIONS "")
 
79
 
 
80
        if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANG OR CMAKE_COMPILER_IS_GCC)
 
81
            set (ADD_COMPILE_DEFINITIONS "-std=c++0x")
 
82
        endif ()
 
83
 
 
84
        if (EXISTS ${TEST_SOURCE_FILE})
 
85
            CXX_PERFORM_TEST(${TEST_SOURCE_FILE} ${TEST_BINARY_DIR} TRUE ${RESULT_VAR} "${COMPILE_DEFINITIONS} ${ADD_COMPILE_DEFINITIONS}")
 
86
        endif ()
 
87
 
 
88
        if (${RESULT_VAR} AND EXISTS ${FAILTEST_SOURCE_FILE})
 
89
            CXX_PERFORM_TEST(${FAILTEST_SOURCE_FILE} ${TEST_BINARY_DIR} FALSE ${RESULT_VAR} "${COMPILE_DEFINITIONS} ${ADD_COMPILE_DEFINITIONS}")
 
90
        endif ()
 
91
 
 
92
        if (${RESULT_VAR})
 
93
            message(STATUS "Checking C++ support for ${FEATURE_NAME} -- works")
 
94
            set (CXX_FEATURES_SUPPORTED
 
95
                "${CXX_FEATURES_SUPPORTED} ${FEATURE_NAME} (${FEATURE_NUMBER}),"
 
96
                )
 
97
 
 
98
        else ()
 
99
            message(STATUS "Checking C++ support for ${FEATURE_NAME} -- not supported")
 
100
            set (CXX_FEATURES_UNSUPPORTED
 
101
                "${CXX_FEATURES_UNSUPPORTED} ${FEATURE_NAME} (${FEATURE_NUMBER}),"
 
102
                )
 
103
 
 
104
        endif ()
 
105
 
 
106
        # This would break the feature reporting on second call of cmake
 
107
        # TODO: Fix?
 
108
        # set(${RESULT_VAR} ${${RESULT_VAR}} CACHE INTERNAL "C++ support for ${FEATURE_NAME}")
 
109
 
 
110
    endif(NOT DEFINED ${RESULT_VAR})
 
111
 
 
112
endmacro(CXX_CHECK_FEATURE)
 
113