-
Notifications
You must be signed in to change notification settings - Fork 0
/
build-chef-gem.rb
123 lines (106 loc) · 3.47 KB
/
build-chef-gem.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
116
117
118
119
120
121
122
123
require "shellwords"
require "pathname"
require "bundler"
require_relative "../../../version_policy"
# Common definitions and helpers (like compile environment and binary
# locations) for all software definitions.
module BuildChefGem
PLATFORM_FAMILY_FAMILIES = {
"linux" => %w{wrlinux debian fedora rhel suse gentoo slackware arch exherbo alpine},
"bsd" => %w{dragonflybsd freebsd netbsd openbsd},
"solaris" => %w{smartos omnios openindiana opensolaris solaris2 nextentacore},
"aix" => %w{aix},
"windows" => %w{windows},
"mac_os_x" => %w{mac_os_x},
}
def platform_family_families
PLATFORM_FAMILY_FAMILIES.keys
end
def platform_family_family
PLATFORM_FAMILY_FAMILIES.
select { |key, families| families.include?(Omnibus::Ohai["platform_family"]) }.
first[0]
end
def embedded_bin(binary)
windows_safe_path("#{install_dir}/embedded/bin/#{binary}")
end
def appbundler_bin
embedded_bin("appbundler")
end
def bundle_bin
embedded_bin("bundle")
end
def gem_bin
embedded_bin("gem")
end
def rake_bin
embedded_bin("rake")
end
def without_groups
# Add --without for every known OS except the one we're in.
exclude_os_groups = platform_family_families - [ platform_family_family ]
(INSTALL_WITHOUT_GROUPS + exclude_os_groups).map { |g| g.to_sym }
end
#
# Get the path to the top level shared Gemfile included by all individual
# Gemfiles
#
def shared_gemfile
File.join(install_dir, "Gemfile")
end
# A common env for building everything including nokogiri and dep-selector-libgecode
def env
env = with_standard_compiler_flags(with_embedded_path, bfd_flags: true)
# From dep-selector-libgecode
# On some RHEL-based systems, the default GCC that's installed is 4.1. We
# need to use 4.4, which is provided by the gcc44 and gcc44-c++ packages.
# These do not use the gcc binaries so we set the flags to point to the
# correct version here.
if File.exist?("/usr/bin/gcc44")
env["CC"] = "gcc44"
env["CXX"] = "g++44"
end
# From dep-selector-libgecode
# Ruby DevKit ships with BSD Tar
env["PROG_TAR"] = "bsdtar" if windows?
env["ARFLAGS"] = "rv #{env["ARFLAGS"]}" if env["ARFLAGS"]
# Set up nokogiri environment and args
env["NOKOGIRI_USE_SYSTEM_LIBRARIES"] = "true"
env
end
#
# Install arguments for various gems (to be passed to `gem install` or set in
# `bundle config build.<gemname>`).
#
def all_install_args
@all_install_args = {
"nokogiri" => %W{
--use-system-libraries
--with-xml2-lib=#{Shellwords.escape("#{install_dir}/embedded/lib")}
--with-xml2-include=#{Shellwords.escape("#{install_dir}/embedded/include/libxml2")}
--with-xslt-lib=#{Shellwords.escape("#{install_dir}/embedded/lib")}
--with-xslt-include=#{Shellwords.escape("#{install_dir}/embedded/include/libxslt")}
--with-iconv-dir=#{Shellwords.escape("#{install_dir}/embedded")}
--with-zlib-dir=#{Shellwords.escape("#{install_dir}/embedded")}
}.join(" "),
}
end
# gem install arguments for a particular gem. "" if no special args.
def install_args_for(gem_name)
all_install_args[gem_name] || ""
end
# Give block all the variables
def block(*args, &block)
super do
extend BuildChefGem
instance_eval(&block)
end
end
# Give build all the variables
def build(*args, &block)
super do
extend BuildChefGem
instance_eval(&block)
end
end
end