File: CheckTypeAlignment.cmake

package info (click to toggle)
orthanc-postgresql 5.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 1,372 kB
  • sloc: cpp: 18,362; python: 388; sql: 275; makefile: 30; sh: 13
file content (29 lines) | stat: -rw-r--r-- 950 bytes parent folder | download | duplicates (8)
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
macro(CHECK_TYPE_ALIGNMENT TYPE NAME)
  if(NOT ${NAME})
    message(STATUS "Check alignment of ${TYPE}")
    
    set(INCLUDE_HEADERS "#include <stddef.h>
      #include <stdio.h>
      #include <stdlib.h>")

    if(HAVE_STDINT_H)
      set(INCLUDE_HEADERS "${INCLUDE_HEADERS}\n#include <stdint.h>\n")
    endif(HAVE_STDINT_H)

    file(WRITE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_${NAME}_alignment.c"
      "${INCLUDE_HEADERS}
      int main(){
        char diff;
        struct foo {char a; ${TYPE} b;};
        struct foo *p = (struct foo *) malloc(sizeof(struct foo));
        diff = ((char *)&p->b) - ((char *)&p->a);
        return diff;}
    ")

    try_run(${NAME} COMPILE_RESULT "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/"
      "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/check_${NAME}_alignment.c")

    message(STATUS "Check alignment of ${TYPE} - ${${NAME}}")

  endif(NOT ${NAME})
endmacro()