blob: 7dd5dbbb693402e82dd06405553cca4e03e1f509 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#! /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"
line[0]
else
next
end
}.compact!.sort!
uniq(data)
exp = open(out, "w")
exp.printf "#!\n"
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 -p ../../*.o")
extract(nm, "../ruby.imp")
end
#objs = Dir["*.o"].join(" ")
#nm = open("|/usr/ccs/bin/nm -p #{objs}")
#extract(nm, "#{base}.exp")
cmd = format("/usr/ccs/bin/ld %s %s ", ldargs, ARGV.join(' '))
printf "\t%s\n", cmd
system cmd
|