File: RunCMakeTest.cmake

package info (click to toggle)
cmake 4.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 158,704 kB
  • sloc: ansic: 406,077; cpp: 309,512; sh: 4,233; python: 3,696; yacc: 3,109; lex: 1,279; f90: 538; asm: 471; lisp: 375; java: 310; cs: 270; fortran: 239; objc: 215; perl: 213; xml: 198; makefile: 110; javascript: 83; pascal: 63; tcl: 55; php: 25; ruby: 22; sed: 2
file content (161 lines) | stat: -rw-r--r-- 5,465 bytes parent folder | download | duplicates (3)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
include(RunCMake)

# System Ruby tests
run_cmake(System/Ruby)
run_cmake(System/Fail)
run_cmake(System/FailExact)

# RBENV specific tests
if(CMake_TEST_FindRuby_RBENV)
  set(RBENV_ROOT "$ENV{RBENV_ROOT}")
  if(NOT IS_DIRECTORY "${RBENV_ROOT}")
    message(FATAL_ERROR "RBENV_ROOT should be set to a valid rbenv ruby location")
  endif()

  # Test environment has RBENV_ROOT setup
  find_program(rbenv
    NAMES rbenv
    NAMES_PER_DIR
    PATHS "$ENV{HOME}/.rbenv/bin" ENV RBENV_ROOT
    PATH_SUFFIXES bin Scripts
    NO_CACHE)
  execute_process(COMMAND "${rbenv}" which ruby
    RESULT_VARIABLE result
    OUTPUT_VARIABLE RBENV_RUBY
    ERROR_QUIET
    OUTPUT_STRIP_TRAILING_WHITESPACE)

  # Make sure we found a valid Ruby interpreter
  if(NOT RBENV_RUBY)
    message(FATAL_ERROR "Unable to find rbenv Ruby using RBENV_ROOT=${RBENV_ROOT}")
  endif()

  # Get the version of rbenv Ruby
  execute_process(COMMAND "${RBENV_RUBY}" -e "puts RUBY_VERSION"
    RESULT_VARIABLE result
    OUTPUT_VARIABLE RBENV_RUBY_VERSION
    ERROR_QUIET
    OUTPUT_STRIP_TRAILING_WHITESPACE)

  if(result)
    message(FATAL_ERROR "Unable to detect rbenv ruby version from '${RBENV_RUBY}': ${RBENV_RUBY_VERSION}")
  endif()

  # Find system Ruby
  execute_process(COMMAND "${CMAKE_COMMAND}" -E env PATH=/usr/bin:/bin which ruby
    RESULT_VARIABLE result
    OUTPUT_VARIABLE SYSTEM_RUBY
    ERROR_QUIET
    OUTPUT_STRIP_TRAILING_WHITESPACE)

  if(SYSTEM_RUBY STREQUAL RBENV_RUBY)
    message(FATAL_ERROR "System Ruby (${SYSTEM_RUBY}) matches rbenv Ruby (${RBENV_RUBY})")
  endif()

  # Get version of the system Ruby
  execute_process(COMMAND "${SYSTEM_RUBY}" -e "puts RUBY_VERSION"
    RESULT_VARIABLE result
    OUTPUT_VARIABLE SYSTEM_RUBY_VERSION
    ERROR_QUIET
    OUTPUT_STRIP_TRAILING_WHITESPACE)

  if(result)
    message(FATAL_ERROR "Unable to detect system ruby version from '${SYSTEM_RUBY}': ${SYSTEM_RUBY_VERSION}")
  endif()

  if(SYSTEM_RUBY_VERSION VERSION_EQUAL RBENV_RUBY_VERSION)
    message(FATAL_ERROR "Your rbenv Ruby version and system Ruby version are the same (${RBENV_RUBY_VERSION}).")
  endif()

  message(STATUS "Found system Ruby (${SYSTEM_RUBY_VERSION}): ${SYSTEM_RUBY}")
  message(STATUS "Found rbenv Ruby (${RBENV_RUBY_VERSION}): ${RBENV_RUBY}")

  set(RunCMake_TEST_OPTIONS
    "-DRBENV_RUBY=${RBENV_RUBY}"
    "-DSYSTEM_RUBY=${SYSTEM_RUBY}"
    "-DRBENV_RUBY_VERSION=${RBENV_RUBY_VERSION}"
    "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}")
  run_cmake(Rbenv/RbenvDefault)
  run_cmake(Rbenv/RbenvOnly)
  run_cmake(Rbenv/RbenvStandard)
  unset(RunCMake_TEST_OPTIONS)
endif()

# RVM specific tests
if(CMake_TEST_FindRuby_RVM)
  # Properly using rvm would require sourcing a shell script, eg `source "$HOME/.rvm/scripts/rvm"`
  # Instead, we just rely on the env variable MY_RUBY_HOME
  set(MY_RUBY_HOME "$ENV{MY_RUBY_HOME}")
  if(NOT IS_DIRECTORY "${MY_RUBY_HOME}")
    message(FATAL_ERROR "MY_RUBY_HOME should be set to a valid RVM ruby location, or you should call `rvm use x.y.z` before")
  endif()

  execute_process(COMMAND "${MY_RUBY_HOME}/bin/ruby" -e "puts RUBY_VERSION"
    RESULT_VARIABLE result
    OUTPUT_VARIABLE RVM_RUBY_VERSION
    ERROR_QUIET
    OUTPUT_STRIP_TRAILING_WHITESPACE)

  if(result)
    message(FATAL_ERROR "Unable to detect RVM ruby version from '${MY_RUBY_HOME}/bin/ruby': ${RVM_RUBY_VERSION}")
  endif()

  execute_process(COMMAND "${CMAKE_COMMAND}" -E env --unset=MY_RUBY_HOME PATH=/usr/bin:/bin which ruby
    RESULT_VARIABLE result
    OUTPUT_VARIABLE SYSTEM_RUBY
    ERROR_QUIET
    OUTPUT_STRIP_TRAILING_WHITESPACE)

  if(SYSTEM_RUBY MATCHES "^${MY_RUBY_HOME}")
    message(FATAL_ERROR "Unable to find system ruby, found ${SYSTEM_RUBY} which is part of MY_RUBY_HOME=${MY_RUBY_HOME}")
  endif()

  # Check version of the system ruby executable.
  execute_process(COMMAND "${SYSTEM_RUBY}" -e "puts RUBY_VERSION"
    RESULT_VARIABLE result
    OUTPUT_VARIABLE SYSTEM_RUBY_VERSION
    ERROR_QUIET
    OUTPUT_STRIP_TRAILING_WHITESPACE)

  if(result)
    message(FATAL_ERROR "Unable to detect system ruby version from '${SYSTEM_RUBY}': ${SYSTEM_RUBY_VERSION}")
  endif()

  if(SYSTEM_RUBY_VERSION VERSION_EQUAL RVM_RUBY_VERSION)
    message(FATAL_ERROR "Your RVM Ruby version and system Ruby version are the same (${RVM_RUBY_VERSION}).")
  endif()

  message(STATUS "Found system Ruby (${SYSTEM_RUBY_VERSION}): ${SYSTEM_RUBY}")
  message(STATUS "Found RVM Ruby (${RVM_RUBY_VERSION}): ${MY_RUBY_HOME}/bin/ruby")

  set(ORIGINAL_PATH "$ENV{PATH}")

  # RvmDefault - just MY_RUBY_HOME set
  set(RunCMake_TEST_OPTIONS "-DMY_RUBY_HOME=${MY_RUBY_HOME}")
  run_cmake(Rvm/RvmDefault)

  # RvmOnly - PATH unset, MY_RUBY_HOME set
  unset(ENV{PATH})
  set(RunCMake_TEST_OPTIONS
    "-DMY_RUBY_HOME=${MY_RUBY_HOME}"
    "-DRVM_RUBY_VERSION=${RVM_RUBY_VERSION}"
    "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}")
  run_cmake(Rvm/RvmOnly)

  # UnsetRvmOnly - MY_RUBY_HOME unset, PATH set to minimal
  unset(ENV{MY_RUBY_HOME})
  set(ENV{PATH} "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin")
  set(RunCMake_TEST_OPTIONS
    "-DRVM_RUBY_VERSION=${RVM_RUBY_VERSION}"
    "-DSYSTEM_RUBY_VERSION=${SYSTEM_RUBY_VERSION}")
  run_cmake(Rvm/UnsetRvmOnly)

  # RvmStandard - PATH minimal, MY_RUBY_HOME set
  set(ENV{MY_RUBY_HOME} "${MY_RUBY_HOME}")
  set(RunCMake_TEST_OPTIONS "-DMY_RUBY_HOME=${MY_RUBY_HOME}")
  run_cmake(Rvm/RvmStandard)

  # Restore PATH
  set(ENV{PATH} "${ORIGINAL_PATH}")
  unset(RunCMake_TEST_OPTIONS)
endif()