aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rwxr-xr-xext/extmk.rb13
-rw-r--r--ext/zlib/extconf.rb28
-rwxr-xr-xtool/rbinstall.rb9
4 files changed, 48 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 1691ceaed5..a60dc10104 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Sat Sep 24 22:26:20 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extract_makefile, extmake, configuration): store
+ extra libraries to be installed.
+
+ * tool/rbinstall.rb (ext-arch): install extra libraries.
+
+ * ext/zlib/extconf.rb: install zlib if built.
+
Sat Sep 24 14:24:55 2016 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
* spec/README: update URL.
diff --git a/ext/extmk.rb b/ext/extmk.rb
index b73b8b6907..86174830b3 100755
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
@@ -81,6 +81,7 @@ def extract_makefile(makefile, keep = true)
m = File.read(makefile)
s = m[/^CLEANFILES[ \t]*=[ \t](.*)/, 1] and $cleanfiles = s.split
s = m[/^DISTCLEANFILES[ \t]*=[ \t](.*)/, 1] and $distcleanfiles = s.split
+ s = m[/^EXTSO[ \t]*=[ \t](.*)/, 1] and $extso = s.split
if !(target = m[/^TARGET[ \t]*=[ \t]*(\S*)/, 1])
return keep
end
@@ -165,6 +166,7 @@ def extmake(target, basedir = (maybestatic = 'ext'))
$preload = nil
$objs = []
$srcs = []
+ $extso = []
$compiled[target] = false
makefile = "./Makefile"
static = $static
@@ -552,6 +554,10 @@ extend Module.new {
def timestamp_file(name, target_prefix = nil)
super.sub(%r[/\.extout\.(?:-\.)?], '/.')
end
+
+ def configuration(srcdir)
+ super << "EXTSO #{['=', $extso].join(' ')}\n"
+ end
}
dir = Dir.pwd
@@ -560,12 +566,14 @@ Dir::chdir('ext')
hdrdir = $hdrdir
$hdrdir = ($top_srcdir = relative_from(srcdir, $topdir = "..")) + "/include"
+extso = []
fails = []
exts.each do |d|
$static = $force_static ? true : $static_ext[d]
if $ignore or !$nodynamic or $static
result = extmake(d) or abort
+ extso |= $extso
fails << result unless result == true
end
end
@@ -608,6 +616,7 @@ gems.each do |d|
$extout = extout.dup
@gemname = d[%r{\A[^/]+}]
extmake(d, 'gems')
+ extso |= $extso
end
$extout = extout
Dir.chdir('../ext')
@@ -745,6 +754,7 @@ if $configure_only and $command_output
mf.macro "gems", gems
mf.macro "EXTOBJS", $extlist.empty? ? ["dmyext.#{$OBJEXT}"] : ["ext/extinit.#{$OBJEXT}", *$extobjs]
mf.macro "EXTLIBS", $extlibs
+ mf.macro "EXTSO", extso
mf.macro "EXTLDFLAGS", $extflags.split
submakeopts = []
if enable_config("shared", $enable_shared)
@@ -797,6 +807,9 @@ if $configure_only and $command_output
mf.puts "#{d[0..-2]}#{tgt}:\n\t$(Q)#{submake} $(MFLAGS) V=$(V) $(@F)"
end
end
+ mf.puts "\n""extso:\n"
+ mf.puts "\t@echo EXTSO=$(EXTSO)"
+
mf.puts "\n""note:\n"
unless fails.empty?
mf.puts %Q<\t@echo "*** Following extensions failed to configure:">
diff --git a/ext/zlib/extconf.rb b/ext/zlib/extconf.rb
index 47a15b1b20..c59ef7fd44 100644
--- a/ext/zlib/extconf.rb
+++ b/ext/zlib/extconf.rb
@@ -21,11 +21,27 @@ else
zsrc = dirs.max_by {|x| x.scan(/\d+/).map(&:to_i)}
end
if zsrc
+ addconf = [
+ "ZSRC = $(srcdir)/#{File.basename(zsrc)}\n",
+ "all:\n",
+ ]
$INCFLAGS << " -I$(ZSRC)"
if $mswin or $mingw
$libs = append_library($libs, "zdll")
dll = "zlib1.dll"
+ $extso << dll
+ addconf.push(
+ "ZIMPLIB = zdll.lib\n",
+ "$(TARGET_SO): $(ZIMPLIB)\n",
+ "$(ZIMPLIB):\n",
+ "\t$(MAKE) -f $(ZSRC)/win32/Makefile.#{$nmake ? 'msc' : 'gcc'} TOP=$(ZSRC) $@\n",
+ "install-so: $(topdir)/#{dll}",
+ "$(topdir)/#{dll}: $(ZIMPLIB)\n",
+ "\t$(Q) $(COPY) #{dll} $(@D)\n",
+ )
end
+ Logging.message "using zlib in #{zsrc}\n"
+ $defs << "-DHAVE_ZLIB_H"
have_zlib = true
end
end
@@ -82,17 +98,7 @@ if have_zlib
create_makefile('zlib') {|conf|
if zsrc
- conf << "ZSRC = $(srcdir)/#{File.basename(zsrc)}\n"
- conf << "all:\n"
- if $mingw or $mswin
- conf << "ZIMPLIB = zdll.lib\n"
- conf << "$(TARGET_SO): $(ZIMPLIB)\n"
- conf << "$(ZIMPLIB):\n"
- conf << "\t$(MAKE) -f $(ZSRC)/win32/Makefile.#{$nmake ? 'msc' : 'gcc'} TOP=$(ZSRC) $@\n"
- conf << "install-so: $(topdir)/#{dll}"
- conf << "$(topdir)/#{dll}: $(ZIMPLIB)\n"
- conf << "\t$(Q) $(COPY) #{dll} $(@D)\n"
- end
+ conf.concat addconf if addconf
end
conf
}
diff --git a/tool/rbinstall.rb b/tool/rbinstall.rb
index a012d840f5..e27cffd7a1 100755
--- a/tool/rbinstall.rb
+++ b/tool/rbinstall.rb
@@ -389,6 +389,15 @@ install?(:ext, :arch, :'ext-arch') do
install_recursive("#{$extout}/#{CONFIG['arch']}", archlibdir, :no_install => noinst, :mode => $prog_mode, :strip => $strip)
prepare "extension objects", sitearchlibdir
prepare "extension objects", vendorarchlibdir
+ if extso = File.read("exts.mk")[/^EXTSO[ \t]*=[ \t]*((?:.*\\\n)*.*)/, 1] and
+ !(extso = extso.gsub(/\\\n/, '').split).empty?
+ libpathenv = CONFIG["LIBPATHENV"]
+ dest = CONFIG[!libpathenv || libpathenv == "PATH" ? "bindir" : "libdir"]
+ prepare "external libraries", dest
+ for file in extso
+ install file, dest, :mode => $prog_mode
+ end
+ end
end
install?(:ext, :arch, :hdr, :'arch-hdr') do
prepare "extension headers", archhdrdir