summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--Makefile.in19
-rw-r--r--ext/extmk.rb13
3 files changed, 28 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index 985bdbd846..fc82388967 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Tue Aug 12 11:12:42 2003 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * Makefile.in: static link libraries to LIBRUBY_SO with static linked
+ ext. [ruby-dev:21157]
+
+ * ext/extmk.rb (extmake): sort extension library initialization order.
+
Tue Aug 12 02:48:56 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
* eval.c (THREAD_SAVE_CONTEXT): should explicitly turn off the
diff --git a/Makefile.in b/Makefile.in
index 8414aded98..9772438db5 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -30,7 +30,7 @@ EXTLIBS =
LIBS = @LIBS@ $(EXTLIBS)
MISSING = @LIBOBJS@ @ALLOCA@
LDSHARED = @LIBRUBY_LDSHARED@
-DLDFLAGS = @LIBRUBY_DLDFLAGS@
+DLDFLAGS = @LIBRUBY_DLDFLAGS@ $(EXTLDFLAGS)
SOLIBS = @SOLIBS@
MAINLIBS = @MAINLIBS@
@@ -57,8 +57,11 @@ LIBRUBYARG_SHARED = @LIBRUBYARG_SHARED@
PREP = @PREP@ @ARCHFILE@
SETUP =
+EXTSTATIC = @EXTSTATIC@
EXTOBJS =
+DLDOBJS = $(DMYEXT)
+DMYEXT = dmyext.@OBJEXT@
MAINOBJ = main.@OBJEXT@
@@ -108,22 +111,22 @@ SCRIPT_ARGS = --dest-dir="$(DESTDIR)" \
--make-flags="$(MAKEFLAGS)"
all: @MAKEFILES@ miniruby$(EXEEXT) rbconfig.rb $(LIBRUBY)
- @$(MINIRUBY) $(srcdir)/ext/extmk.rb --extstatic="@EXTSTATIC@" $(SCRIPT_ARGS)
+ @$(MINIRUBY) $(srcdir)/ext/extmk.rb --extstatic="$(EXTSTATIC)" $(SCRIPT_ARGS)
-miniruby$(EXEEXT): config.status $(LIBRUBY_A) $(MAINOBJ) dmyext.@OBJEXT@
+miniruby$(EXEEXT): config.status $(LIBRUBY_A) $(MAINOBJ) $(DMYEXT)
@rm -f $@
- $(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) dmyext.@OBJEXT@ $(LIBRUBY_A) $(LIBS) -o $@
+ $(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) $(DMYEXT) $(LIBRUBY_A) $(LIBS) -o $@
$(PROGRAM): $(LIBRUBY) $(MAINOBJ) $(EXTOBJS) $(SETUP) miniruby$(EXEEXT)
@rm -f $@
$(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINLIBS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@
-$(LIBRUBY_A): $(OBJS) dmyext.@OBJEXT@
- @AR@ rcu $@ $(OBJS) dmyext.@OBJEXT@
+$(LIBRUBY_A): $(OBJS) $(DMYEXT)
+ @AR@ rcu $@ $(OBJS) $(DMYEXT)
@-@RANLIB@ $@ 2> /dev/null || true
-$(LIBRUBY_SO): $(OBJS) dmyext.@OBJEXT@ miniruby$(EXEEXT) $(PREP)
- $(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.@OBJEXT@ $(SOLIBS) -o $@
+$(LIBRUBY_SO): $(OBJS) $(DLDOBJS) miniruby$(EXEEXT) $(PREP)
+ $(LDSHARED) $(DLDFLAGS) $(OBJS) $(DLDOBJS) $(SOLIBS) -o $@
@-$(MINIRUBY) -e 'ARGV.each{|link| File.delete link if File.exist? link; \
File.symlink "$(LIBRUBY_SO)", link}' \
$(LIBRUBY_ALIASES) || true
diff --git a/ext/extmk.rb b/ext/extmk.rb
index eb2a277600..b5286980a7 100644
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
@@ -60,6 +60,7 @@ def extmake(target)
$target = target
$mdir = target
$srcdir = File.join($top_srcdir, "ext", $mdir)
+ $preload = nil
unless $ignore
if $static ||
!(t = modified?("./Makefile", MTIMES)) ||
@@ -88,7 +89,7 @@ def extmake(target)
end
if File.exist?("./Makefile")
if $static
- $extlist.push [$static, $target, File.basename($target)]
+ $extlist.push [$static, $target, File.basename($target), $preload]
end
unless system($make, *sysquote($mflags))
$ignore or $continue or return false
@@ -228,7 +229,13 @@ end
if $extlist.size > 0
$extinit ||= ""
$extobjs ||= ""
- for s,t,i in $extlist
+ list = $extlist.dup
+ until list.empty?
+ s,t,i,r = list.shift
+ if r and list.any? {|l| r.include?(l[1])}
+ list << [s,t,i]
+ next
+ end
f = format("%s/%s.%s", s, i, $LIBEXT)
if File.exist?(f)
$extinit += "\tinit(Init_#{i}, \"#{t}.so\");\n"
@@ -252,7 +259,7 @@ SRC
$extpath.delete("$(topdir)")
$extflags = libpathflag($extpath) << " " << $extflags.strip
conf = [
- ['SETUP', $setup], ['EXTOBJS', $extobjs],
+ ['SETUP', $setup], [$enable_shared ? 'DLDOBJS' : 'EXTOBJS', $extobjs],
['EXTLIBS', $extlibs], ['EXTLDFLAGS', $extflags]
].map {|n, v|
"#{n}=#{v}" if v and !(v = v.strip).empty?