-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathbuild.rb
executable file
·115 lines (95 loc) · 3.75 KB
/
build.rb
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
#!/usr/bin/env ruby
# frozen_string_literal: true
# Copyright 2020-Present Couchbase, Inc.
#
# Licensed 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.
require "fileutils"
require "rbconfig"
def echo_env(*var_names)
var_names.each do |name|
value = ENV.fetch(name, nil)
puts "#{name}=#{value}" if value && !value.empty?
end
end
echo_env("HOSTNAME", "NODE_NAME", "CONTAINER_TAG", "JENKINS_SLAVE_LABELS", "NODE_LABELS")
def which(name)
ENV.fetch("PATH", "")
.split(File::PATH_SEPARATOR)
.map { |path| [path, name].join(File::SEPARATOR) + RbConfig::CONFIG["EXEEXT"] }
.find { |file| File.executable?(file) }
end
def run(*args)
args = args.compact.map(&:to_s)
puts args.join(" ")
system(*args) || abort("command returned non-zero status: #{args.join(' ')}")
end
PROJECT_ROOT = File.realpath(File.join(__dir__, ".."))
DEFAULT_PHP_PREFIX =
case RbConfig::CONFIG["target_os"]
when /darwin/
`brew --prefix php 2>/dev/null`.strip
else
"/usr"
end
default_cc = "cc"
default_cxx = "c++"
case RbConfig::CONFIG["target_os"]
when /darwin/
default_cc = "/usr/bin/gcc"
default_cxx = "/usr/bin/g++"
when /linux/
prefix = "/opt/rh/devtoolset-9/root/usr"
if File.directory?(prefix)
default_cc = File.join(prefix, "bin/gcc")
default_cxx = File.join(prefix, "bin/g++")
end
end
CB_PHP_PREFIX = ENV.fetch("CB_PHP_PREFIX", DEFAULT_PHP_PREFIX)
CB_CC = ENV.fetch("CB_CC", default_cc)
CB_CXX = ENV.fetch("CB_CXX", default_cxx)
CB_CMAKE_BUILD_TYPE = ENV.fetch("CMAKE_BUILD_TYPE", "Debug")
run("#{CB_PHP_PREFIX}/bin/php --version || true")
run("#{CB_PHP_PREFIX}/bin/php --ini || true")
run("#{CB_PHP_PREFIX}/bin/php-config || true")
LOCAL_OPENSSL = "/usr/local/openssl"
CB_OPENSSL_ROOT = ENV.fetch("CB_OPENSSL_ROOT", File.directory?(LOCAL_OPENSSL) ? LOCAL_OPENSSL : nil)
ENV["COUCHBASE_CMAKE_EXTRA"] = "-DOPENSSL_ROOT_DIR=#{CB_OPENSSL_ROOT}" if CB_OPENSSL_ROOT
Dir.chdir(PROJECT_ROOT) do
run("#{CB_PHP_PREFIX}/bin/phpize")
run("rm -rf cmake-build") unless ENV.fetch("CB_DO_NOT_CLEAN", false)
run("./configure --with-php-config=#{CB_PHP_PREFIX}/bin/php-config CC=#{CB_CC} CXX=#{CB_CXX} COUCHBASE_CMAKE_BUILD_TYPE=#{CB_CMAKE_BUILD_TYPE}")
exit if ENV.fetch("CB_CONFIGURE_ONLY", false)
run("make clean") unless ENV.fetch("CB_DO_NOT_CLEAN", false)
ENV["CMAKE_BUILD_PARALLEL_LEVEL"] = ENV.fetch("CB_NUMBER_OF_JOBS", "4")
run("make V=1")
end
COUCHBASE_EXT = "#{PROJECT_ROOT}/modules/couchbase.#{RbConfig::CONFIG['SOEXT']}".freeze
unless File.exist?(COUCHBASE_EXT)
alt_filename = "#{PROJECT_ROOT}/modules/couchbase.so"
COUCHBASE_EXT = alt_filename if File.exist?(alt_filename)
end
run("#{CB_PHP_PREFIX}/bin/php -d extension=#{COUCHBASE_EXT} -m | grep couchbase")
run("#{CB_PHP_PREFIX}/bin/php -d extension=#{COUCHBASE_EXT} -i | grep couchbase")
File.write("#{PROJECT_ROOT}/build/try_to_load.php", <<~EOF)
<?php
$versionABI = getenv("CB_ABI_VERSION");
if (!$versionABI) {
$function = "\\\\Couchbase\\\\Extension\\\\version";
} else {
$function = "Couchbase\\\\Extension_" . $versionABI . "\\\\version";
}
print_r($function());
require_once 'Couchbase/autoload.php';
var_dump((new ReflectionClass('\\\\Couchbase\\\\Cluster'))->getFileName());
EOF
run("#{CB_PHP_PREFIX}/bin/php -d extension=#{COUCHBASE_EXT} #{PROJECT_ROOT}/build/try_to_load.php")