From 3f7143f36f7098b3ef843bda0fe05dca7251e07d Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 24 Sep 2016 13:26:21 +0000 Subject: install extra libraries * 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56230 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 9 +++++++++ ext/extmk.rb | 13 +++++++++++++ ext/zlib/extconf.rb | 28 +++++++++++++++++----------- tool/rbinstall.rb | 9 +++++++++ 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 + + * 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 * 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 -- cgit v1.2.3