File: Common.cmake

package info (click to toggle)
cmake 4.2.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 152,456 kB
  • sloc: ansic: 403,896; cpp: 303,920; sh: 4,105; python: 3,583; yacc: 3,106; lex: 1,279; f90: 538; asm: 471; lisp: 375; cs: 270; java: 266; fortran: 239; objc: 215; perl: 213; xml: 198; makefile: 111; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22
file content (140 lines) | stat: -rw-r--r-- 4,119 bytes parent folder | download | duplicates (2)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
if(CMAKE_HOST_UNIX)
  function(permissions_set f)
    file(CHMOD ${f} FILE_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE SETUID)
  endfunction()
  function(permissions_check f)
    execute_process(COMMAND sh -c "stat -c %a \"${f}\""
      OUTPUT_VARIABLE stat_out OUTPUT_STRIP_TRAILING_WHITESPACE
      ERROR_VARIABLE stat_err
      RESULT_VARIABLE stat_res
      )
    if(stat_res EQUAL 0)
      if(NOT stat_out STREQUAL "4700")
        message(FATAL_ERROR "Expected permissions 4700 but got ${stat_out}:\n ${f}")
      endif()
    endif()
  endfunction()
else()
  function(permissions_set)
  endfunction()
  function(permissions_check)
  endfunction()
endif()

# Prepare binaries on which to operate.
set(in "${CMAKE_CURRENT_LIST_DIR}/${format}")
set(out "${CMAKE_CURRENT_BINARY_DIR}")
foreach(f ${dynamic})
  file(COPY ${in}/${f} DESTINATION ${out} NO_SOURCE_PERMISSIONS)
  list(APPEND dynamic_files "${out}/${f}")
endforeach()
foreach(f ${static})
  file(COPY ${in}/${f} DESTINATION ${out} NO_SOURCE_PERMISSIONS)
  list(APPEND static_files "${out}/${f}")
endforeach()

foreach(f ${dynamic_files})
  permissions_set(${f})

  # Check for the initial RPATH.
  file(RPATH_CHECK FILE "${f}" RPATH "/sample/rpath")
  if(NOT EXISTS "${f}")
    message(FATAL_ERROR "RPATH_CHECK removed ${f}")
  endif()
  permissions_check(${f})

  # Change the RPATH.
  file(RPATH_CHANGE FILE "${f}"
    OLD_RPATH "/sample/rpath"
    NEW_RPATH "/path1:/path2")
  set(rpath)
  file(STRINGS "${f}" rpath REGEX "/path1:/path2" LIMIT_COUNT 1)
  if(NOT rpath)
    message(FATAL_ERROR "RPATH not changed in ${f}")
  endif()
  permissions_check(${f})

  # Change the RPATH without compiler defined rpath removed
  file(RPATH_CHANGE FILE "${f}"
    OLD_RPATH "/path2"
    NEW_RPATH "/path3")
  set(rpath)
  file(STRINGS "${f}" rpath REGEX "/path1:/path3" LIMIT_COUNT 1)
  if(NOT rpath)
    message(FATAL_ERROR "RPATH not updated in ${f}")
  endif()
  permissions_check(${f})

  # Change the RPATH with compiler defined rpath removed
  file(RPATH_CHANGE FILE "${f}"
    OLD_RPATH "/path3"
    NEW_RPATH "/rpath/sample"
    INSTALL_REMOVE_ENVIRONMENT_RPATH)
  set(rpath)
  file(STRINGS "${f}" rpath REGEX "/rpath/sample" LIMIT_COUNT 1)
  if(NOT rpath)
    message(FATAL_ERROR "RPATH not updated in ${f}")
  endif()
  file(STRINGS "${f}" rpath REGEX "/path1" LIMIT_COUNT 1)
  if(rpath)
    message(FATAL_ERROR "RPATH not removed in ${f}")
  endif()
  permissions_check(${f})

  # Remove the RPATH.
  file(RPATH_REMOVE FILE "${f}")
  set(rpath)
  file(STRINGS "${f}" rpath REGEX "/rpath/sample" LIMIT_COUNT 1)
  if(rpath)
    message(FATAL_ERROR "RPATH not removed from ${f}")
  endif()
  permissions_check(${f})

  # Check again...this should remove the file.
  file(RPATH_CHECK FILE "${f}" RPATH "/sample/rpath")
  if(EXISTS "${f}")
    message(FATAL_ERROR "RPATH_CHECK did not remove ${f}")
  endif()
endforeach()

# TODO Implement RPATH_SET in XCOFF.
if(format STREQUAL "ELF")
  foreach(f ${dynamic})
    file(COPY ${in}/${f} DESTINATION ${out} NO_SOURCE_PERMISSIONS)
  endforeach()

  foreach(f ${dynamic_files})
    # Set the RPATH.
    file(RPATH_SET FILE "${f}"
      NEW_RPATH "/new/rpath")
    set(rpath)
    file(STRINGS "${f}" rpath REGEX "/new/rpath" LIMIT_COUNT 1)
    if(NOT rpath)
      message(FATAL_ERROR "RPATH not set in ${f}")
    endif()
    file(STRINGS "${f}" rpath REGEX "/rpath/sample" LIMIT_COUNT 1)
    if(rpath)
      message(FATAL_EROR "RPATH not removed in ${f}")
    endif()

    # Remove the RPATH.
    file(RPATH_SET FILE "${f}"
      NEW_RPATH "")
    set(rpath)
    file(STRINGS "${f}" rpath REGEX "/new/rpath" LIMIT_COUNT 1)
    if(rpath)
      message(FATAL_ERROR "RPATH not removed from ${f}")
    endif()

    # Check again...this should remove the file.
    file(RPATH_CHECK FILE "${f}" RPATH "/new/rpath")
    if(EXISTS "${f}")
      message(FATAL_ERROR "RPATH_CHECK did not remove ${f}")
    endif()
  endforeach()
endif()

# Verify that modifying rpaths on a static library is a no-op
foreach(f ${static_files})
  file(RPATH_CHANGE FILE "${f}" OLD_RPATH "/rpath/foo" NEW_RPATH "/rpath/bar")
endforeach()