mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
3db12e8b23
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
73 lines
1.4 KiB
Ruby
73 lines
1.4 KiB
Ruby
#! /usr/local/bin/ruby
|
|
|
|
def older(file1, file2)
|
|
if !File.exist?(file1) then
|
|
return TRUE
|
|
end
|
|
if !File.exist?(file2) then
|
|
return FALSE
|
|
end
|
|
if File.mtime(file1) < File.mtime(file2)
|
|
return TRUE
|
|
end
|
|
return FALSE
|
|
end
|
|
|
|
target = ARGV.shift
|
|
unless target =~ /\.so/
|
|
STDERR.printf "wrong suffix specified\n"
|
|
exit 1
|
|
end
|
|
base = File.basename(target, ".so")
|
|
entry="Init_#{base}"
|
|
ldargs = "-e#{entry} -bI:../ruby.imp -bM:SRE -T512 -H512 -lc"
|
|
|
|
def uniq(data)
|
|
last=nil
|
|
data.delete_if do |name|
|
|
if last == name
|
|
TRUE
|
|
else
|
|
last = name
|
|
FALSE
|
|
end
|
|
end
|
|
end
|
|
|
|
def extract(nm, out)
|
|
data = nm.readlines.collect{|line|
|
|
line = line.split
|
|
case line[1]
|
|
when "B", "D", "T"
|
|
line[2]
|
|
else
|
|
next
|
|
end
|
|
}.sort!
|
|
uniq(data)
|
|
exp = open(out, "w")
|
|
for line in data
|
|
exp.printf "%s\n", line
|
|
end
|
|
exp.close
|
|
nm.close
|
|
end
|
|
if older("../ruby.imp", "../../miniruby")
|
|
# nm = open("|/usr/ccs/bin/nm -Bex ../../*.o")
|
|
# nm = open("|/usr/ccs/bin/nm -Bex ../../*.o")
|
|
nm = open("|nm ../../*.o")
|
|
extract(nm, "../ruby.imp")
|
|
end
|
|
|
|
objs = Dir["*.o"].join(" ")
|
|
#nm = open("|/usr/ccs/bin/nm -Bex #{objs}")
|
|
nm = open("|nm #{objs}")
|
|
extract(nm, "#{base}.exp")
|
|
|
|
#system format("/usr/ccs/bin/ld %s %s ",ldargs,ARGV.join(' '))
|
|
#system "/bin/rm -f #{base}.exp"
|
|
#system "chmod o-rwx ${base}.so"
|
|
|
|
p format("/usr/ccs/bin/ld %s %s ",ldargs,ARGV.join(' '))
|
|
p "/bin/rm -f #{base}.exp"
|
|
p "chmod o-rwx ${base}.so"
|