summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-08-06 03:11:14 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-08-06 03:11:14 +0000
commit94d17c1f1fbacf7dffcdbbe508b37c7719ba6778 (patch)
tree6bd33eaba915980e6c7e3423536803018ddbbdd4
parent6fa004b2e87c82952f95bb90f8576f04a9e510aa (diff)
* ext/extmk.rb (extmake): pass LIBPATH to make ruby. [ruby-dev:21137]
* ext/extmk.rb (extmake): set library name as source file name in Init_ext(). [ruby-dev:21137] * lib/mkmf.rb (Logging::postpone): postpone logging messages after heading message as the result of the block. * lib/mkmf.rb (macro_defined?): append newline to src unless ended with it. * lib/mkmf.rb (have_library): allow nil function name to just append a library. (ruby-bugs:PR#1083) * lib/mkmf.rb (pkg_config): should append additional libraries to $libs but not $LIBS. [ruby-dev:21137] * ext/io/wait/extconf.rb: check DOSISH macro instead of platform. * ext/digest/sha1/extconf.rb: have_library already appends library name. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4337 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog24
-rw-r--r--ext/digest/sha1/extconf.rb1
-rw-r--r--ext/extmk.rb22
-rw-r--r--ext/io/wait/extconf.rb2
-rw-r--r--lib/mkmf.rb52
5 files changed, 78 insertions, 23 deletions
diff --git a/ChangeLog b/ChangeLog
index 03186f96942..59f15364918 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,27 @@
+Wed Aug 6 12:11:10 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/extmk.rb (extmake): pass LIBPATH to make ruby. [ruby-dev:21137]
+
+ * ext/extmk.rb (extmake): set library name as source file name in
+ Init_ext(). [ruby-dev:21137]
+
+ * lib/mkmf.rb (Logging::postpone): postpone logging messages after
+ heading message as the result of the block.
+
+ * lib/mkmf.rb (macro_defined?): append newline to src unless ended
+ with it.
+
+ * lib/mkmf.rb (have_library): allow nil function name to just
+ append a library. (ruby-bugs:PR#1083)
+
+ * lib/mkmf.rb (pkg_config): should append additional libraries to
+ $libs but not $LIBS. [ruby-dev:21137]
+
+ * ext/io/wait/extconf.rb: check DOSISH macro instead of platform.
+
+ * ext/digest/sha1/extconf.rb: have_library already appends library
+ name.
+
Wed Aug 6 04:58:32 2003 NAKAMURA Usaku <usa@ruby-lang.org>
* ext/Setup*: add io/wait and openssl.
diff --git a/ext/digest/sha1/extconf.rb b/ext/digest/sha1/extconf.rb
index d5b7e06d9c6..c249a415ed5 100644
--- a/ext/digest/sha1/extconf.rb
+++ b/ext/digest/sha1/extconf.rb
@@ -12,7 +12,6 @@ dir_config("openssl")
if !with_config("bundled-sha1") &&
have_library("crypto") && have_header("openssl/sha.h")
$objs << "sha1ossl.#{$OBJEXT}"
- $libs << " -lcrypto"
else
$objs << "sha1.#{$OBJEXT}" << "sha1hl.#{$OBJEXT}"
end
diff --git a/ext/extmk.rb b/ext/extmk.rb
index 68274efde69..eb2a2776007 100644
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
@@ -101,10 +101,12 @@ def extmake(target)
if $static
$extflags ||= ""
$extlibs ||= ""
- $extflags += " " + $DLDFLAGS if $DLDFLAGS
- $extflags += " " + $LDFLAGS unless $LDFLAGS == ""
- $extlibs += " " + $libs unless $libs == ""
- $extlibs += " " + $LOCAL_LIBS unless $LOCAL_LIBS == ""
+ $extpath ||= []
+ $extflags += " " + $DLDFLAGS unless $DLDFLAGS.empty?
+ $extflags += " " + $LDFLAGS unless $LDFLAGS.empty?
+ libs = ($libs.split+$LOCAL_LIBS.split).uniq
+ $extlibs = [$extlibs, *libs].join(" ") unless libs.empty?
+ $extpath |= $LIBPATH
end
ensure
Dir.chdir dir
@@ -212,7 +214,7 @@ File::makedirs('ext')
Dir::chdir('ext')
ext_prefix = "#{$top_srcdir}/ext"
-Dir.glob("#{ext_prefix}/**/MANIFEST") do |d|
+Dir.glob("#{ext_prefix}/*/**/MANIFEST") do |d|
d = File.dirname(d)
d.slice!(0, ext_prefix.length + 1)
extmake(d) or exit(1)
@@ -229,12 +231,16 @@ if $extlist.size > 0
for s,t,i in $extlist
f = format("%s/%s.%s", s, i, $LIBEXT)
if File.exist?(f)
- $extinit += "\tInit_#{i}();\n\trb_provide(\"#{t}.so\");\n"
+ $extinit += "\tinit(Init_#{i}, \"#{t}.so\");\n"
$extobjs += "ext/#{f} "
end
end
- src = "void Init_ext() {\n#$extinit}\n"
+ src = <<SRC
+extern char *ruby_sourcefile, *rb_source_filename();
+#define init(func, name) (ruby_sourcefile = src = rb_source_filename(name), func(), rb_provide(src))
+void Init_ext() {\n\tchar* src;\n#$extinit}
+SRC
if !modified?("extinit.c", MTIMES) || IO.read("extinit.c") != src
open("extinit.c", "w") {|f| f.print src}
end
@@ -243,6 +249,8 @@ if $extlist.size > 0
if RUBY_PLATFORM =~ /m68k-human|beos/
$extlibs.gsub!("-L/usr/local/lib", "") if $extlibs
end
+ $extpath.delete("$(topdir)")
+ $extflags = libpathflag($extpath) << " " << $extflags.strip
conf = [
['SETUP', $setup], ['EXTOBJS', $extobjs],
['EXTLIBS', $extlibs], ['EXTLDFLAGS', $extflags]
diff --git a/ext/io/wait/extconf.rb b/ext/io/wait/extconf.rb
index a766ccbe6f2..ea7dc9f6cff 100644
--- a/ext/io/wait/extconf.rb
+++ b/ext/io/wait/extconf.rb
@@ -1,7 +1,7 @@
require 'mkmf'
target = "io/wait"
-unless /djgpp|mswin|mingw|human/ =~ RUBY_PLATFORM
+unless macro_defined?("DOSISH", "#include <ruby.h>")
fionread = %w[sys/ioctl.h sys/filio.h].find do |h|
checking_for("FIONREAD") {macro_defined?("FIONREAD", "#include <#{h}>\n")}
end
diff --git a/lib/mkmf.rb b/lib/mkmf.rb
index 80c16519945..5d63277db7d 100644
--- a/lib/mkmf.rb
+++ b/lib/mkmf.rb
@@ -144,6 +144,22 @@ module Logging
@log = nil
end
end
+
+ def self::postpone
+ tmplog = "mkmftmp.log"
+ open do
+ log, *save = @log, @logfile, @orgout, @orgerr
+ @log, @logfile, @orgout, @orgerr = nil, tmplog, log, log
+ begin
+ log.print(open {yield})
+ @log.close
+ File::open(tmplog) {|t| FileUtils.copy_stream(t, log)}
+ ensure
+ @log, @logfile, @orgout, @orgerr = log, *save
+ rm_f tmplog
+ end
+ end
+ end
end
def xsystem command
@@ -184,7 +200,7 @@ def create_tmpsrc(src)
end
def try_do(src, command)
- src += "\n" unless /\n\z/ =~ src
+ src = src.sub(/[^\n]\z/, "\\&\n")
create_tmpsrc(src)
xsystem(command)
ensure
@@ -318,7 +334,7 @@ SRC
end
def egrep_cpp(pat, src, opt="")
- src += "\n" unless /\n\z/ =~ src
+ src = src.sub(/[^\n]\z/, "\\&\n")
create_tmpsrc(src)
xpopen(cpp_command('', opt)) do |f|
if Regexp === pat
@@ -345,6 +361,7 @@ ensure
end
def macro_defined?(macro, src, opt="")
+ src = src.sub(/[^\n]\z/, "\\&\n")
try_cpp(src + <<"SRC", opt)
#ifndef #{macro}
# error
@@ -418,23 +435,30 @@ def checking_for(m)
f = caller[0][/in `(.*)'$/, 1] and f << ": " #` for vim
m = "checking for #{m}... "
message "%s", m
- Logging::message "%s%s--------------------\n", f, m
- r = yield
- message(a = r ? "yes\n" : "no\n")
- Logging::message "-------------------- %s\n", a
+ a = r = nil
+ Logging::postpone do
+ r = yield
+ a = r ? "yes\n" : "no\n"
+ "#{f}#{m}-------------------- #{a}\n"
+ end
+ message(a)
+ Logging::message "--------------------\n\n"
r
end
def have_library(lib, func="main")
- checking_for "#{func}() in -l#{lib}" do
- libs = append_library($libs, lib)
- if func && func != "" && COMMON_LIBS.include?(lib)
- true
- elsif try_func(func, libs)
- $libs = libs
+ func &&= ((m = "#{func}() in "; func) unless func.empty?)
+ checking_for "#{m}-l#{lib}" do
+ if COMMON_LIBS.include?(lib)
true
else
- false
+ libs = append_library($libs, lib)
+ if !func || try_func(func, libs)
+ $libs = libs
+ true
+ else
+ false
+ end
end
end
end
@@ -630,7 +654,7 @@ def pkg_config(pkg)
libs = `#{$PKGCONFIG} --libs-only-l #{pkg}`.chomp
$CFLAGS += " " << cflags
$LDFLAGS += " " << ldflags
- $LIBS += " " << libs
+ $libs += " " << libs
Logging::message "package configuration for %s\n", pkg
Logging::message "cflags: %s\nldflags: %s\nlibs: %s\n\n",
cflags, ldflags, libs