summaryrefslogtreecommitdiff
path: root/qpid/cpp/CMakeModules/CheckSizetDistinct.cmake
blob: 463a37d4a89e89e828299f5b55f3d2ecbe574de7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#

# This module checks to see if size_t is a distinct type from the other
# integer types already set up in IntegerTypes.h.

INCLUDE (CheckCXXSourceCompiles)

FUNCTION (check_size_t_distinct VARIABLE)
  # No need to check if we already did. If you want to re-run, clear it
  # from the cache.
  if (NOT DEFINED ${VARIABLE})
    message (STATUS "Check for size_t")
    set (CMAKE_REQUIRED_QUIET ON)
    set (CMAKE_REQUIRED_INCLUDES "${CMAKE_SOURCE_DIR}/include")
    CHECK_CXX_SOURCE_COMPILES (
"
#include \"qpid/sys/IntegerTypes.h\"
// Define functions that will fail to compile if size_t is the same as
// one of the int types defined in IntegerTypes.h
int foo(int16_t)    { return 1; }
int foo(int32_t)    { return 2; }
int foo(int64_t)    { return 3; }
int foo(uint16_t)   { return 4; }
int foo(uint32_t)   { return 5; }
int foo(uint64_t)   { return 6; }
int foo(size_t)     { return 7; }
int main (int, char *[]) {
  return 0;
}
"
    ${VARIABLE})
    if (${VARIABLE})
      message (STATUS "Check for size_t -- NOT a distinct type")
    else (${VARIABLE})
      message (STATUS "Check for size_t -- distinct type")
    endif (${VARIABLE})
  endif ()
ENDFUNCTION (check_size_t_distinct VARIABLE)