Skip to content

Commit e946253

Browse files
authored
Merge pull request puppetlabs#7 from scotje/maint_windows_rbconfig
(SDK-213) Add custom rbconfig stuff from puppet-agent for Windows.
2 parents b4657b9 + d9fae5b commit e946253

File tree

2 files changed

+298
-0
lines changed

2 files changed

+298
-0
lines changed

configs/components/ruby-2.1.9.rb

+28
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010
base = 'resources/patches/ruby_219'
1111
pkg.apply_patch "#{base}/libyaml_cve-2014-9130.patch"
1212

13+
rbconfig_info = {
14+
'x86_64-w64-mingw32' => {
15+
:sum => "fe5656cd5fcba0a63b18857275e03808",
16+
:target_double => 'x64-mingw32',
17+
},
18+
}
19+
1320
special_flags = " --prefix=#{settings[:prefix]} --with-opt-dir=#{settings[:prefix]} "
1421

1522
if platform.is_windows?
@@ -18,6 +25,8 @@
1825
pkg.apply_patch "#{base}/windows_remove_DL_deprecated_warning.patch"
1926
pkg.apply_patch "#{base}/windows_ruby_2.1_update_to_rubygems_2.4.5.1.patch"
2027
pkg.apply_patch "#{base}/update_rbinstall_for_windows.patch"
28+
29+
pkg.add_source "file://resources/files/ruby_219/rbconfig/rbconfig-#{settings[:platform_triple]}.rb"
2130
end
2231

2332
pkg.build_requires "openssl"
@@ -116,6 +125,25 @@
116125
]
117126
end
118127

128+
# Here we replace the rbconfig from our ruby compiled with our toolchain
129+
# with an rbconfig from a ruby of the same version compiled with the system
130+
# gcc. Without this, the rbconfig will be looking for a gcc that won't
131+
# exist on a user system and will also pass flags which may not work on
132+
# that system.
133+
# We also disable a safety check in the rbconfig to prevent it from being
134+
# loaded from a different ruby, because we're going to do that later to
135+
# install compiled gems.
136+
target_dir = File.join(settings[:libdir], "ruby", "2.1.0", rbconfig_info[settings[:platform_triple]][:target_double])
137+
138+
pkg.install do
139+
[
140+
"sed -i 's|raise|warn|g' #{target_dir}/rbconfig.rb",
141+
"mkdir -p #{settings[:datadir]}/doc",
142+
"cp #{target_dir}/rbconfig.rb #{settings[:datadir]}/doc",
143+
"cp ../rbconfig-#{settings[:platform_triple]}.rb #{target_dir}/rbconfig.rb",
144+
]
145+
end
146+
119147
pkg.directory settings[:ruby_dir]
120148
pkg.directory settings[:ruby_bindir]
121149
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,270 @@
1+
# Custom rbconfig.rb file obtained from Puppet 1.9.3 installation and modified
2+
# to change build_os to "mingw32" as per PA-1086
3+
4+
# This file was created by mkconfig.rb when ruby was built. Any
5+
# changes made to this file will be lost the next time ruby is built.
6+
7+
module RbConfig
8+
RUBY_VERSION == "2.1.9" or
9+
raise "ruby lib version (2.1.9) doesn't match executable version (#{RUBY_VERSION})"
10+
11+
TOPDIR = File.dirname(__FILE__).chomp!("/lib/ruby/2.1.0/x64-mingw32")
12+
DESTDIR = TOPDIR && TOPDIR[/\A[a-z]:/i] || '' unless defined? DESTDIR
13+
CONFIG = {}
14+
CONFIG["DESTDIR"] = DESTDIR
15+
CONFIG["MAJOR"] = "2"
16+
CONFIG["MINOR"] = "1"
17+
CONFIG["TEENY"] = "0"
18+
CONFIG["PATCHLEVEL"] = "490"
19+
CONFIG["INSTALL"] = '/bin/install -c'
20+
CONFIG["EXEEXT"] = ".exe"
21+
CONFIG["prefix"] = (TOPDIR || DESTDIR + "C:/ProgramFiles64Folder/PuppetLabs/Puppet/sys/ruby")
22+
CONFIG["ruby_install_name"] = "ruby"
23+
CONFIG["RUBY_INSTALL_NAME"] = "ruby"
24+
CONFIG["RUBY_SO_NAME"] = "x64-msvcrt-ruby210"
25+
CONFIG["exec"] = "exec"
26+
CONFIG["ruby_pc"] = "ruby-2.1.pc"
27+
CONFIG["PACKAGE"] = "ruby"
28+
CONFIG["BUILTIN_TRANSSRCS"] = " newline.c"
29+
CONFIG["USE_RUBYGEMS"] = "YES"
30+
CONFIG["MANTYPE"] = "doc"
31+
CONFIG["NROFF"] = "/usr/bin/nroff"
32+
CONFIG["vendorarchhdrdir"] = "$(vendorhdrdir)/$(sitearch)"
33+
CONFIG["sitearchhdrdir"] = "$(sitehdrdir)/$(sitearch)"
34+
CONFIG["rubyarchhdrdir"] = "$(rubyhdrdir)/$(arch)"
35+
CONFIG["vendorhdrdir"] = "$(rubyhdrdir)/vendor_ruby"
36+
CONFIG["sitehdrdir"] = "$(rubyhdrdir)/site_ruby"
37+
CONFIG["rubyhdrdir"] = "$(includedir)/$(RUBY_VERSION_NAME)"
38+
CONFIG["RUBY_SEARCH_PATH"] = ""
39+
CONFIG["UNIVERSAL_INTS"] = ""
40+
CONFIG["UNIVERSAL_ARCHNAMES"] = ""
41+
CONFIG["configure_args"] = " '--enable-shared' '--enable-bundled-libyaml' '--disable-install-doc' '--disable-install-rdoc' '--host' 'x86_64-w64-mingw32' 'CPPFLAGS=-DFD_SETSIZE=2048' 'debugflags=-g' '--prefix=C:/ProgramFiles64Folder/PuppetLabs/Puppet/sys/ruby' '--with-opt-dir=C:/ProgramFiles64Folder/PuppetLabs/Puppet/puppet' 'host_alias=x86_64-w64-mingw32' 'LDFLAGS=-LC:/tools/pl-build-tools/lib -LC:/tools/mingw64/lib -LC:/ProgramFiles64Folder/PuppetLabs/Puppet/sys/ruby/lib'"
42+
CONFIG["vendorarchdir"] = "$(vendorlibdir)/$(sitearch)"
43+
CONFIG["vendorlibdir"] = "$(vendordir)/$(ruby_version)"
44+
CONFIG["vendordir"] = "$(rubylibprefix)/vendor_ruby"
45+
CONFIG["sitearchdir"] = "$(sitelibdir)/$(sitearch)"
46+
CONFIG["sitelibdir"] = "$(sitedir)/$(ruby_version)"
47+
CONFIG["sitedir"] = "$(rubylibprefix)/site_ruby"
48+
CONFIG["rubyarchdir"] = "$(rubylibdir)/$(arch)"
49+
CONFIG["rubylibdir"] = "$(rubylibprefix)/$(ruby_version)"
50+
CONFIG["ruby_version"] = "2.1.0"
51+
CONFIG["sitearch"] = "x64-msvcrt"
52+
CONFIG["arch"] = "x64-mingw32"
53+
CONFIG["sitearchincludedir"] = "$(includedir)/$(sitearch)"
54+
CONFIG["archincludedir"] = "$(includedir)/$(arch)"
55+
CONFIG["sitearchlibdir"] = "$(libdir)/$(sitearch)"
56+
CONFIG["archlibdir"] = "$(libdir)/$(arch)"
57+
CONFIG["libdirname"] = "libdir"
58+
CONFIG["RUBY_EXEC_PREFIX"] = ""
59+
CONFIG["RUBY_LIB_VERSION"] = ""
60+
CONFIG["RUBY_LIB_VERSION_STYLE"] = "3\t/* full */"
61+
CONFIG["RI_BASE_NAME"] = "ri"
62+
CONFIG["ridir"] = "$(datarootdir)/$(RI_BASE_NAME)"
63+
CONFIG["rubysitearchprefix"] = "$(rubylibprefix)/$(sitearch)"
64+
CONFIG["rubyarchprefix"] = "$(rubylibprefix)/$(arch)"
65+
CONFIG["MAKEFILES"] = "Makefile GNUmakefile"
66+
CONFIG["PLATFORM_DIR"] = "win32"
67+
CONFIG["THREAD_MODEL"] = "win32"
68+
CONFIG["SYMBOL_PREFIX"] = ""
69+
CONFIG["EXPORT_PREFIX"] = " "
70+
CONFIG["COMMON_HEADERS"] = "winsock2.h windows.h"
71+
CONFIG["COMMON_MACROS"] = ""
72+
CONFIG["COMMON_LIBS"] = "m"
73+
CONFIG["MAINLIBS"] = ""
74+
CONFIG["ENABLE_SHARED"] = "yes"
75+
CONFIG["DLDLIBS"] = ""
76+
CONFIG["SOLIBS"] = "$(LIBS)"
77+
CONFIG["LIBRUBYARG_SHARED"] = "-l$(RUBY_SO_NAME)"
78+
CONFIG["LIBRUBYARG_STATIC"] = "-l$(RUBY_SO_NAME)-static"
79+
CONFIG["LIBRUBYARG"] = "$(LIBRUBYARG_SHARED)"
80+
CONFIG["LIBRUBY"] = "lib$(RUBY_SO_NAME).dll.a"
81+
CONFIG["LIBRUBY_ALIASES"] = ""
82+
CONFIG["LIBRUBY_SO"] = "$(RUBY_SO_NAME).dll"
83+
CONFIG["LIBRUBY_A"] = "lib$(RUBY_SO_NAME)-static.a"
84+
CONFIG["RUBYW_INSTALL_NAME"] = "$(RUBYW_BASE_NAME)"
85+
CONFIG["rubyw_install_name"] = "$(RUBYW_INSTALL_NAME)"
86+
CONFIG["EXTDLDFLAGS"] = ""
87+
CONFIG["EXTLDFLAGS"] = ""
88+
CONFIG["strict_warnflags"] = ""
89+
CONFIG["warnflags"] = "-Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration"
90+
CONFIG["debugflags"] = "-g"
91+
CONFIG["optflags"] = "-IC:/tools/pl-build-tools/include -IC:/tools/mingw64/include -IC:/ProgramFiles64Folder/PuppetLabs/Puppet/puppet/include -O3 -fno-omit-frame-pointer -fno-fast-math"
92+
CONFIG["cxxflags"] = " $(optflags) $(debugflags) $(warnflags)"
93+
CONFIG["cflags"] = " $(optflags) $(debugflags) $(warnflags)"
94+
CONFIG["cppflags"] = ""
95+
CONFIG["NULLCMD"] = ":"
96+
CONFIG["DLNOBJ"] = "dln.o"
97+
CONFIG["INSTALLDOC"] = "nodoc"
98+
CONFIG["CAPITARGET"] = "nodoc"
99+
CONFIG["RDOCTARGET"] = "nodoc"
100+
CONFIG["DTRACE_GLOMMED_OBJ"] = ""
101+
CONFIG["DTRACE_OBJ"] = ""
102+
CONFIG["DTRACE_EXT"] = "dmyh"
103+
CONFIG["EXECUTABLE_EXTS"] = ".exe .com .cmd .bat"
104+
CONFIG["ARCHFILE"] = ""
105+
CONFIG["LIBRUBY_RELATIVE"] = "yes"
106+
CONFIG["EXTOUT"] = ".ext"
107+
CONFIG["RUNRUBY_COMMAND"] = "$(MINIRUBY) $(srcdir)/tool/runruby.rb --extout=$(EXTOUT) $(RUNRUBYOPT)"
108+
CONFIG["PREP"] = "miniruby$(EXEEXT)"
109+
CONFIG["BTESTRUBY"] = "$(MINIRUBY)"
110+
CONFIG["CROSS_COMPILING"] = "no"
111+
CONFIG["TEST_RUNNABLE"] = "yes"
112+
CONFIG["rubylibprefix"] = "$(libdir)/$(RUBY_BASE_NAME)"
113+
CONFIG["setup"] = "Setup"
114+
CONFIG["EXTSTATIC"] = ""
115+
CONFIG["STRIP"] = "strip"
116+
CONFIG["TRY_LINK"] = ""
117+
CONFIG["LIBPATHENV"] = ""
118+
CONFIG["RPATHFLAG"] = ""
119+
CONFIG["LIBPATHFLAG"] = " -L%s"
120+
CONFIG["LINK_SO"] = ""
121+
CONFIG["LIBEXT"] = "a"
122+
CONFIG["DLEXT2"] = ""
123+
CONFIG["DLEXT"] = "so"
124+
CONFIG["LDSHAREDXX"] = "$(CXX) -shared $(if $(filter-out -g -g0,$(debugflags)),,-s)"
125+
CONFIG["LDSHARED"] = "$(CC) -shared $(if $(filter-out -g -g0,$(debugflags)),,-s)"
126+
CONFIG["CCDLFLAGS"] = ""
127+
CONFIG["STATIC"] = ""
128+
CONFIG["ARCH_FLAG"] = ""
129+
CONFIG["DLDFLAGS"] = " -Wl,--enable-auto-image-base,--enable-auto-import -LC/lib -L/ProgramFiles64Folder/PuppetLabs/Puppet/puppet/lib $(DEFFILE)"
130+
CONFIG["ALLOCA"] = ""
131+
CONFIG["codesign"] = ""
132+
CONFIG["POSTLINK"] = ":"
133+
CONFIG["WERRORFLAG"] = "-Werror"
134+
CONFIG["CHDIR"] = "cd -P"
135+
CONFIG["RMALL"] = "rm -fr"
136+
CONFIG["RMDIRS"] = "rmdir --ignore-fail-on-non-empty -p"
137+
CONFIG["RMDIR"] = "rmdir --ignore-fail-on-non-empty"
138+
CONFIG["CP"] = "cp"
139+
CONFIG["RM"] = "rm -f"
140+
CONFIG["PKG_CONFIG"] = ""
141+
CONFIG["PYTHON"] = ""
142+
CONFIG["DOXYGEN"] = ""
143+
CONFIG["DOT"] = ""
144+
CONFIG["DTRACE"] = ""
145+
CONFIG["MAKEDIRS"] = "/bin/mkdir -p"
146+
CONFIG["MKDIR_P"] = "/bin/mkdir -p"
147+
CONFIG["INSTALL_DATA"] = "$(INSTALL) -m 644"
148+
CONFIG["INSTALL_SCRIPT"] = "$(INSTALL)"
149+
CONFIG["INSTALL_PROGRAM"] = "$(INSTALL)"
150+
CONFIG["SET_MAKE"] = ""
151+
CONFIG["LN_S"] = "ln -s"
152+
CONFIG["NM"] = "nm"
153+
CONFIG["DLLWRAP"] = "dllwrap"
154+
CONFIG["WINDRES"] = "windres"
155+
CONFIG["OBJCOPY"] = ":"
156+
CONFIG["OBJDUMP"] = "objdump"
157+
CONFIG["ASFLAGS"] = ""
158+
CONFIG["AS"] = "as"
159+
CONFIG["AR"] = "ar"
160+
CONFIG["RANLIB"] = "ranlib"
161+
CONFIG["try_header"] = ""
162+
CONFIG["CC_VERSION"] = "$(CC) -v"
163+
CONFIG["COUTFLAG"] = "-o "
164+
CONFIG["OUTFLAG"] = "-o "
165+
CONFIG["CPPOUTFILE"] = "-o conftest.i"
166+
CONFIG["GNU_LD"] = "no"
167+
CONFIG["LD"] = "ld"
168+
CONFIG["GCC"] = "yes"
169+
CONFIG["EGREP"] = "/bin/grep -E"
170+
CONFIG["GREP"] = "/bin/grep"
171+
CONFIG["CPP"] = "$(CC) -E"
172+
CONFIG["CXXFLAGS"] = "$(cxxflags)"
173+
CONFIG["CXX"] = "x86_64-w64-mingw32-g++"
174+
CONFIG["OBJEXT"] = "o"
175+
CONFIG["CPPFLAGS"] = "-DFD_SETSIZE=2048 -IC/include -I/ProgramFiles64Folder/PuppetLabs/Puppet/puppet/include -D_WIN32_WINNT=0x0501 -D__MINGW_USE_VC2005_COMPAT $(DEFS) $(cppflags)"
176+
CONFIG["LDFLAGS"] = "-L. -LC:/tools/pl-build-tools/lib -LC:/tools/mingw64/lib -LC:/ProgramFiles64Folder/PuppetLabs/Puppet/sys/ruby/lib -LC/lib -L/ProgramFiles64Folder/PuppetLabs/Puppet/puppet/lib "
177+
CONFIG["CFLAGS"] = "$(cflags)"
178+
CONFIG["CC"] = "x86_64-w64-mingw32-gcc"
179+
CONFIG["NACL_SDK_VARIANT"] = ""
180+
CONFIG["NACL_SDK_ROOT"] = ""
181+
CONFIG["NACL_TOOLCHAIN"] = ""
182+
CONFIG["target_os"] = "mingw32"
183+
CONFIG["target_vendor"] = "w64"
184+
CONFIG["target_cpu"] = "x64"
185+
CONFIG["target"] = "x86_64-w64-mingw32"
186+
CONFIG["host_os"] = "mingw32"
187+
CONFIG["host_vendor"] = "w64"
188+
CONFIG["host_cpu"] = "x86_64"
189+
CONFIG["host"] = "x86_64-w64-mingw32"
190+
CONFIG["RUBY_VERSION_NAME"] = "$(RUBY_BASE_NAME)-$(ruby_version)"
191+
CONFIG["RUBYW_BASE_NAME"] = "rubyw"
192+
CONFIG["RUBY_BASE_NAME"] = "ruby"
193+
CONFIG["build_os"] = "mingw32"
194+
CONFIG["build_vendor"] = "unknown"
195+
CONFIG["build_cpu"] = "x86_64"
196+
CONFIG["build"] = "x86_64-unknown-cygwin"
197+
CONFIG["RUBY_RELEASE_DATE"] = "2016-03-30"
198+
CONFIG["RUBY_PROGRAM_VERSION"] = "2.1.9"
199+
CONFIG["target_alias"] = ""
200+
CONFIG["host_alias"] = "x86_64-w64-mingw32"
201+
CONFIG["build_alias"] = ""
202+
CONFIG["LIBS"] = "-lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi "
203+
CONFIG["ECHO_T"] = ""
204+
CONFIG["ECHO_N"] = "-n"
205+
CONFIG["ECHO_C"] = ""
206+
CONFIG["DEFS"] = "-D_FILE_OFFSET_BITS=64"
207+
CONFIG["mandir"] = "$(datarootdir)/man"
208+
CONFIG["localedir"] = "$(datarootdir)/locale"
209+
CONFIG["libdir"] = "$(exec_prefix)/lib"
210+
CONFIG["psdir"] = "$(docdir)"
211+
CONFIG["pdfdir"] = "$(docdir)"
212+
CONFIG["dvidir"] = "$(docdir)"
213+
CONFIG["htmldir"] = "$(docdir)"
214+
CONFIG["infodir"] = "$(datarootdir)/info"
215+
CONFIG["docdir"] = "$(datarootdir)/doc/$(PACKAGE)"
216+
CONFIG["oldincludedir"] = "/usr/include"
217+
CONFIG["includedir"] = "$(prefix)/include"
218+
CONFIG["localstatedir"] = "$(prefix)/var"
219+
CONFIG["sharedstatedir"] = "$(prefix)/com"
220+
CONFIG["sysconfdir"] = "$(prefix)/etc"
221+
CONFIG["datadir"] = "$(datarootdir)"
222+
CONFIG["datarootdir"] = "$(prefix)/share"
223+
CONFIG["libexecdir"] = "$(exec_prefix)/libexec"
224+
CONFIG["sbindir"] = "$(exec_prefix)/sbin"
225+
CONFIG["bindir"] = "$(exec_prefix)/bin"
226+
CONFIG["exec_prefix"] = "$(prefix)"
227+
CONFIG["PACKAGE_URL"] = ""
228+
CONFIG["PACKAGE_BUGREPORT"] = ""
229+
CONFIG["PACKAGE_STRING"] = ""
230+
CONFIG["PACKAGE_VERSION"] = ""
231+
CONFIG["PACKAGE_TARNAME"] = ""
232+
CONFIG["PACKAGE_NAME"] = ""
233+
CONFIG["PATH_SEPARATOR"] = ":"
234+
CONFIG["SHELL"] = "/bin/sh"
235+
CONFIG["archdir"] = "$(rubyarchdir)"
236+
CONFIG["topdir"] = File.dirname(__FILE__)
237+
MAKEFILE_CONFIG = {}
238+
CONFIG.each{|k,v| MAKEFILE_CONFIG[k] = v.dup}
239+
def RbConfig::expand(val, config = CONFIG)
240+
newval = val.gsub(/\$\$|\$\(([^()]+)\)|\$\{([^{}]+)\}/) {
241+
var = $&
242+
if !(v = $1 || $2)
243+
'$'
244+
elsif key = config[v = v[/\A[^:]+(?=(?::(.*?)=(.*))?\z)/]]
245+
pat, sub = $1, $2
246+
config[v] = false
247+
config[v] = RbConfig::expand(key, config)
248+
key = key.gsub(/#{Regexp.quote(pat)}(?=\s|\z)/n) {sub} if pat
249+
key
250+
else
251+
var
252+
end
253+
}
254+
val.replace(newval) unless newval == val
255+
val
256+
end
257+
CONFIG.each_value do |val|
258+
RbConfig::expand(val)
259+
end
260+
261+
# returns the absolute pathname of the ruby command.
262+
def RbConfig.ruby
263+
File.join(
264+
RbConfig::CONFIG["bindir"],
265+
RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]
266+
)
267+
end
268+
end
269+
autoload :Config, "rbconfig/obsolete.rb" # compatibility for ruby-1.8.4 and older.
270+
CROSS_COMPILING = nil unless defined? CROSS_COMPILING

0 commit comments

Comments
 (0)