立石です。

shared libraryを使うようにrubyをコンパイル
するためのMakefile.inです。
もし、必要のある人は使って下さい。
僕の環境はlinux(slackware 3.4)ですので、その他
の環境ではテストしていません。

Makefile.inを下記のものと入れ換えて、

../configure --prefix=$HOGE
make shared
make install-shared

とすれば $HOGE/lib 以下にlibruby.soもインストール
されます。

ただし、gcc -shared を使ってるだけなのでgccを使用せず
solaris等の cc の場合には以下のように修正して下さい。

変更前:
$(LIBRUBY_SHARED): $(OBJS) dmyext.o
                $(CC) -shared $(OBJS) dmyext.o -o $(LIBRUBY_SHARED)

変更後:
$(LIBRUBY_SHARED): $(OBJS) dmyext.o
                $(CC) -G $(OBJS) dmyext.o -o $(LIBRUBY_SHARED)

------------- Makefile.in -----------------------
#
# Makefile.in (shared library version)
#
# written by Takaaki.Tateishi(ttate / jaist.ac.jp)
#
# Require:
#	gcc
#
# Install:
# 	./configure
#   	make shared
#	make install-shared
#


SHELL = /bin/sh

#### Start of system configuration section. ####

srcdir = @srcdir@
VPATH = @srcdir@:@srcdir@/missing

CC = @CC@
YACC = @YACC@
PURIFY =
@SET_MAKE@

prefix = @prefix@
CFLAGS = @CFLAGS@ -I@includedir@ -I@srcdir@
LDFLAGS = @STATIC@ $(CFLAGS) @LDFLAGS@
LIBS = @LIBS@ $(EXTLIBS)
MISSING = @LIBOBJS@ @ALLOCA@

binsuffix = @binsuffix@

#### End of system configuration section. ####


LIBRUBY	      = libruby.a

LIBRUBY_SHARED= libruby.so

EXTOBJS	      = 

MAINOBJ	      = main.o

OBJS	      = array.o \
		bignum.o \
		class.o \
		compar.o \
		dir.o \
		dln.o \
		enum.o \
		error.o \
		eval.o \
		file.o \
		fnmatch.o \
		gc.o \
		glob.o \
		hash.o \
		inits.o \
		io.o \
		marshal.o \
		math.o \
		numeric.o \
		object.o \
		pack.o \
		parse.o \
		process.o \
		random.o \
		range.o \
		re.o \
		regex.o \
		ruby.o \
		signal.o \
		sprintf.o \
		st.o \
		string.o \
		struct.o \
		time.o \
		util.o \
		variable.o \
		version.o \
		$(MISSING)

all:		miniruby$(binsuffix) rbconfig.rb
		@./miniruby$(binsuffix) -Xext extmk.rb @EXTSTATIC@

shared:		sharedruby$(binsuffix) rbconfig.rb
		@./miniruby$(binsuffix) -Xext extmk.rb @EXTSTATIC@
		mv sharedruby$(binsuffix) ruby$(binsuffix)

sharedruby$(binsuffix):	$(LIBRUBY_SHARED)
		$(CC) -o sharedruby$(binsuffix) $(MAINOBJ) $(LDFLAGS) $(LIBS) -L. -lruby

$(LIBRUBY_SHARED): $(OBJS) dmyext.o
		$(CC) -shared $(OBJS) dmyext.o -o $(LIBRUBY_SHARED)

miniruby$(binsuffix):	$(OBJS) $(MAINOBJ) dmyext.o
		@rm -f $@
		$(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) $(OBJS) dmyext.o $(LIBS) -o $@

ruby$(binsuffix):     	$(LIBRUBY) $(MAINOBJ) $(EXTOBJS) 
		@rm -f $@
		$(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) $(EXTOBJS) $(LIBRUBY) $(LIBS) -o $@

$(LIBRUBY):	$(OBJS) dmyext.o
		@AR@ rcu $(LIBRUBY) $(OBJS) dmyext.o
		@-@RANLIB@ $(LIBRUBY) 2> /dev/null || true

install-shared:	$(LIBRUBY_SHARED) install
		cp $(LIBRUBY_SHARED) $(prefix)/lib/$(LIBRUBY_SHARED)


install:	rbconfig.rb
		./miniruby$(binsuffix) $(srcdir)/instruby.rb


clean:;		@rm -f $(OBJS) $(LIBRUBY) $(MAINOBJ) rbconfig.rb
		@rm -f ext/extinit.c ext/extinit.o dmyext.o
		@if test -f ./miniruby$(binsuffix); then \
			./miniruby$(binsuffix) -Xext extmk.rb clean; \
		fi
		@if test -f ./$(LIBRUBY_SHARED); then \
			rm $(LIBRUBY_SHARED); \
		fi

distclean:	clean
		@rm -f Makefile ext/extmk.rb config.h
		@rm -f ext/config.cache config.cache config.log config.status
		@rm -f parse.c *~ core *.core gmon.out y.tab.c y.output
		@rm -f ruby$(binsuffix) miniruby$(binsuffix)

realclean:	distclean
		@rm -f lex.c

test:		miniruby$(binsuffix)
		@./miniruby$(binsuffix) $(srcdir)/rubytest.rb

rbconfig.rb:	config.status miniruby$(binsuffix)
		@./miniruby$(binsuffix) $(srcdir)/mkconfig.rb rbconfig.rb

..c.o:
	$(CC) $(CFLAGS) $(CPPFLAGS) -c $<

lex.c: keywords
	gperf -p -j1 -i 1 -g -o -t -N rb_reserved_word -k1,3,$$ keywords > lex.c

parse.c: parse.y
	$(YACC) $<
	mv -f y.tab.c parse.c

alloca.o: @srcdir@/missing/alloca.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/alloca.c

crypt.o: @srcdir@/missing/crypt.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/crypt.c

dup2.o: @srcdir@/missing/dup2.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/dup2.c

flock.o: @srcdir@/missing/flock.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/flock.c

memcmp.o: @srcdir@/missing/memcmp.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/memcmp.c

memmove.o: @srcdir@/missing/memmove.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/memmove.c

mkdir.o: @srcdir@/missing/mkdir.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/mkdir.c

setenv.o: @srcdir@/missing/setenv.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/setenv.c

strcasecmp.o: @srcdir@/missing/strcasecmp.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strcasecmp.c

strchr.o: @srcdir@/missing/strchr.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strchr.c

strdup.o: @srcdir@/missing/strdup.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strdup.c

strerror.o: @srcdir@/missing/strerror.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strerror.c

strftime.o: @srcdir@/missing/strftime.c
	$(CC) -I. $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strftime.c

strstr.o: @srcdir@/missing/strstr.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strstr.c

strtol.o: @srcdir@/missing/strtol.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strtol.c

strtoul.o: @srcdir@/missing/strtoul.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/strtoul.c

nt.o: @srcdir@/missing/nt.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/nt.c

x68.o: @srcdir@/missing/x68.c
	$(CC) $(CFLAGS) $(CPPFLAGS) -c @srcdir@/missing/x68.c

# Prevent GNU make v3 from overflowing arg limit on SysV.
..NOEXPORT:
###
parse.o: parse.y ruby.h config.h defines.h intern.h env.h node.h st.h regex.h util.h lex.c
###
array.o: array.c ruby.h config.h defines.h intern.h
bignum.o: bignum.c ruby.h config.h defines.h intern.h
class.o: class.c ruby.h config.h defines.h intern.h node.h st.h
compar.o: compar.c ruby.h config.h defines.h intern.h
dir.o: dir.c ruby.h config.h defines.h intern.h
dln.o: dln.c config.h defines.h dln.h
dmyext.o: dmyext.c
enum.o: enum.c ruby.h config.h defines.h intern.h
error.o: error.c ruby.h config.h defines.h intern.h env.h
eval.o: eval.c ruby.h config.h defines.h intern.h node.h env.h sig.h st.h dln.h
file.o: file.c ruby.h config.h defines.h intern.h io.h sig.h
gc.o: gc.c ruby.h config.h defines.h intern.h sig.h st.h node.h env.h re.h regex.h
hash.o: hash.c ruby.h config.h defines.h intern.h st.h sig.h
inits.o: inits.c ruby.h config.h defines.h intern.h
io.o: io.c ruby.h config.h defines.h intern.h io.h sig.h
main.o: main.c ruby.h config.h defines.h intern.h
marshal.o: marshal.c ruby.h config.h defines.h intern.h io.h sig.h st.h
math.o: math.c ruby.h config.h defines.h intern.h
numeric.o: numeric.c ruby.h config.h defines.h intern.h
object.o: object.c ruby.h config.h defines.h intern.h st.h
pack.o: pack.c ruby.h config.h defines.h intern.h
process.o: process.c ruby.h config.h defines.h intern.h sig.h st.h
random.o: random.c ruby.h config.h defines.h intern.h
range.o: range.c ruby.h config.h defines.h intern.h
re.o: re.c ruby.h config.h defines.h intern.h re.h regex.h
ruby.o: ruby.c ruby.h config.h defines.h intern.h re.h regex.h dln.h
signal.o: signal.c ruby.h config.h defines.h intern.h sig.h
sprintf.o: sprintf.c ruby.h config.h defines.h intern.h
st.o: st.c config.h st.h
string.o: string.c ruby.h config.h defines.h intern.h re.h regex.h
struct.o: struct.c ruby.h config.h defines.h intern.h
time.o: time.c ruby.h config.h defines.h intern.h
util.o: util.c ruby.h config.h defines.h intern.h util.h
variable.o: variable.c ruby.h config.h defines.h intern.h env.h node.h st.h
version.o: version.c ruby.h config.h defines.h intern.h version.h
------------------- EOF ------------------------------------------
----------------------------------------------
Name	Takaaki Tateishi
E-Mail 	ttate / jaist.ac.jp
	tateishi / pluto.dti.ne.jp
URL	http://www.pluto.dti.ne.jp/~tateishi/
Org	School of Information Science
	Japan Advanced Institute of Science and Technology (JAIST)