Skip to content

Commit

Permalink
Back to mixology as mixology handles adding itself to Object.
Browse files Browse the repository at this point in the history
git-svn-id: svn+ssh://rubyforge.org/var/svn/mixology/trunk@11 62817f43-b31e-4560-8c3d-5e0e681460fe
  • Loading branch information
pfarley committed Aug 18, 2007
1 parent e8cfe41 commit 6936566
Show file tree
Hide file tree
Showing 10 changed files with 171 additions and 37 deletions.
26 changes: 12 additions & 14 deletions Rakefile
Expand Up @@ -14,24 +14,22 @@ Rake::TestTask.new("test") do |t|
end

desc "Builds the extension"
task :compile => ["ext/mixable/Makefile", "ext/mixable/mixable.#{Config::CONFIG['DLEXT']}" ]
task :compile => ["ext/mixology/Makefile", "ext/mixology/mixology.#{Config::CONFIG['DLEXT']}" ]

file "ext/mixable/Makefile" => ["ext/mixable/extconf.rb"] do
Dir.chdir("ext/mixable") do
file "ext/mixology/Makefile" => ["ext/mixology/extconf.rb"] do
Dir.chdir("ext/mixology") do
ruby "extconf.rb"
end
end

file "ext/mixable/mixable.#{Config::CONFIG['DLEXT']}" do
Dir.chdir("ext/mixable") do
file "ext/mixology/mixology.#{Config::CONFIG['DLEXT']}" do
Dir.chdir("ext/mixology") do
sh "make"
end
mkdir_p "lib"
cp "ext/mixable/mixable.#{Config::CONFIG['DLEXT']}", "lib"
end

CLEAN.include ["ext/mixable/Makefile", "ext/mixable/mixable.bundle", "lib/mixable.bundle"]
CLEAN.include ["ext/mixable/MixableService.class", "ext/mixable/mixable.jar", "lib/mixable.jar"]
CLEAN.include ["ext/mixology/Makefile", "ext/mixology/mixology.bundle"]
CLEAN.include ["ext/mixology/MixableService.class", "ext/mixology/mixable.jar", "lib/mixology.jar"]

Gem::manage_gems

Expand All @@ -48,7 +46,7 @@ specification = Gem::Specification.new do |s|
s.files = FileList['ext/**/*.{c,rb}', '{lib,test}/**/*.rb', '^[A-Z]+$', 'Rakefile'].to_a
if RUBY_PLATFORM =~ /mswin/
s.platform = Gem::Platform::WIN32
s.files += ["lib/mixable.so"]
s.files += ["lib/mixology.so"]
else
s.platform = Gem::Platform::RUBY
s.extensions = FileList["ext/**/extconf.rb"].to_a
Expand All @@ -61,10 +59,10 @@ end

desc "Compiles the JRuby extension"
task :compile_java do
Dir.chdir("ext/mixable") do
sh %{javac -source 1.4 -target 1.4 -classpath $JRUBY_HOME/lib/jruby.jar MixableService.java}
sh %{jar cf mixable.jar MixableService.class}
cp "mixable.jar", "../../lib/mixable.jar"
Dir.chdir("ext/mixology") do
sh %{javac -source 1.4 -target 1.4 -classpath $JRUBY_HOME/lib/jruby.jar MixologyService.java}
sh %{jar cf mixology.jar MixologyService.class}
cp "mixology.jar", "../../lib/mixology.jar"
end
end

3 changes: 0 additions & 3 deletions ext/mixable/extconf.rb

This file was deleted.

139 changes: 139 additions & 0 deletions ext/mixology/Makefile
@@ -0,0 +1,139 @@

SHELL = /bin/sh

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

srcdir = .
topdir = /usr/local/lib/ruby/1.8/i686-darwin8.8.1
hdrdir = $(topdir)
VPATH = $(srcdir):$(topdir):$(hdrdir)
prefix = $(DESTDIR)/usr/local
exec_prefix = $(prefix)
sitedir = $(prefix)/lib/ruby/site_ruby
rubylibdir = $(libdir)/ruby/$(ruby_version)
archdir = $(rubylibdir)/$(arch)
sbindir = $(exec_prefix)/sbin
datadir = $(prefix)/share
includedir = $(prefix)/include
infodir = $(prefix)/info
sysconfdir = $(prefix)/etc
mandir = $(prefix)/man
libdir = $(exec_prefix)/lib
sharedstatedir = $(prefix)/com
oldincludedir = $(DESTDIR)/usr/include
sitearchdir = $(sitelibdir)/$(sitearch)
bindir = $(exec_prefix)/bin
localstatedir = $(prefix)/var
sitelibdir = $(sitedir)/$(ruby_version)
libexecdir = $(exec_prefix)/libexec

CC = gcc
LIBRUBY = $(LIBRUBY_A)
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
LIBRUBYARG_SHARED =
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static

CFLAGS = -fno-common -g -O2 -pipe -fno-common
CPPFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir)
CXXFLAGS = $(CFLAGS)
DLDFLAGS =
LDSHARED = cc -dynamic -bundle -undefined suppress -flat_namespace
AR = ar
EXEEXT =

RUBY_INSTALL_NAME = ruby
RUBY_SO_NAME = ruby
arch = i686-darwin8.8.1
sitearch = i686-darwin8.8.1
ruby_version = 1.8
ruby = /usr/local/bin/ruby
RUBY = $(ruby)
RM = rm -f
MAKEDIRS = mkdir -p
INSTALL = /usr/bin/install -c
INSTALL_PROG = $(INSTALL) -m 0755
INSTALL_DATA = $(INSTALL) -m 644
COPY = cp

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

preload =

libpath = $(libdir)
LIBPATH = -L"$(libdir)"
DEFFILE =

CLEANFILES =
DISTCLEANFILES =

extout =
extout_prefix =
target_prefix =
LOCAL_LIBS =
LIBS = -ldl -lobjc
SRCS = mixology.c
OBJS = mixology.o
TARGET = mixology
DLLIB = $(TARGET).bundle
STATIC_LIB =

RUBYCOMMONDIR = $(sitedir)$(target_prefix)
RUBYLIBDIR = $(sitelibdir)$(target_prefix)
RUBYARCHDIR = $(sitearchdir)$(target_prefix)

TARGET_SO = $(DLLIB)
CLEANLIBS = $(TARGET).bundle $(TARGET).il? $(TARGET).tds $(TARGET).map
CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak

all: $(DLLIB)
static: $(STATIC_LIB)

clean:
@-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)

distclean: clean
@-$(RM) Makefile extconf.h conftest.* mkmf.log
@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)

realclean: distclean
install: install-so install-rb

install-so: $(RUBYARCHDIR)
install-so: $(RUBYARCHDIR)/$(DLLIB)
$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
install-rb: pre-install-rb install-rb-default
install-rb-default: pre-install-rb-default
pre-install-rb: Makefile
pre-install-rb-default: Makefile
$(RUBYARCHDIR):
$(MAKEDIRS) $@

site-install: site-install-so site-install-rb
site-install-so: install-so
site-install-rb: install-rb

.SUFFIXES: .c .m .cc .cxx .cpp .C .o

.cc.o:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<

.cxx.o:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<

.cpp.o:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<

.C.o:
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<

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

$(DLLIB): $(OBJS)
@-$(RM) $@
$(LDSHARED) $(DLDFLAGS) $(LIBPATH) -o $@ $(OBJS) $(LOCAL_LIBS) $(LIBS)



$(OBJS): ruby.h defines.h
Expand Up @@ -12,9 +12,9 @@
import org.jruby.exceptions.RaiseException;
import org.jruby.runtime.load.BasicLibraryService;

public class MixableService implements BasicLibraryService {
public class MixologyService implements BasicLibraryService {
public boolean basicLoad(final Ruby runtime) throws IOException {
Init_mixable(runtime);
Init_mixology(runtime);
return true;
}

Expand All @@ -27,10 +27,10 @@ public static IRubyObject unmix(IRubyObject recv, RubyModule args, Block block)
}


public static void Init_mixable(Ruby runtime) {
RubyModule mixableModule = runtime.defineModule("Mixable");
CallbackFactory callbackFactory = runtime.callbackFactory(MixableService.class);
mixableModule.definePublicModuleFunction("mixin", callbackFactory.getSingletonMethod("mixin", RubyModule.class));
mixableModule.definePublicModuleFunction("unmix", callbackFactory.getSingletonMethod("unmix", RubyModule.class));
public static void Init_mixology(Ruby runtime) {
RubyModule mixologyModule = runtime.defineModule("Mixology");
CallbackFactory callbackFactory = runtime.callbackFactory(MixologyService.class);
mixologyModule.definePublicModuleFunction("mixin", callbackFactory.getSingletonMethod("mixin", RubyModule.class));
mixologyModule.definePublicModuleFunction("unmix", callbackFactory.getSingletonMethod("unmix", RubyModule.class));
}
}
3 changes: 3 additions & 0 deletions ext/mixology/extconf.rb
@@ -0,0 +1,3 @@
require "mkmf"
dir_config "mixology"
create_makefile "mixology"
Binary file added ext/mixology/mixology.bundle
Binary file not shown.
10 changes: 5 additions & 5 deletions ext/mixable/mixable.c → ext/mixology/mixology.c
Expand Up @@ -45,9 +45,9 @@ static VALUE rb_mixin(VALUE self, VALUE module) {
return self;
}

void Init_mixable() {
VALUE Mixable = rb_define_module("Mixable");
rb_define_method(Mixable, "mixin", rb_mixin, 1);
rb_define_method(Mixable, "unmix", rb_unmix, 1);
rb_include_module(rb_cObject, Mixable);
void Init_mixology() {
VALUE Mixology = rb_define_module("Mixology");
rb_define_method(Mixology, "mixin", rb_mixin, 1);
rb_define_method(Mixology, "unmix", rb_unmix, 1);
rb_include_module(rb_cObject, Mixology);
}
2 changes: 0 additions & 2 deletions lib/mixology.rb

This file was deleted.

9 changes: 4 additions & 5 deletions test/mixology_test.rb
Expand Up @@ -64,15 +64,15 @@ def test_included_modules_after_mixin
mixin = Module.new
object = Object.new
object.mixin mixin
assert_equal [mixin, Mixable, Kernel], (class << object; self; end).included_modules
assert_equal [mixin, Mixology, Kernel], (class << object; self; end).included_modules
end

def test_included_modules_after_unmix
mixin = Module.new
object = Object.new
object.mixin mixin
object.unmix mixin
assert_equal [Mixable, Kernel], (class << object; self; end).included_modules
assert_equal [Mixology, Kernel], (class << object; self; end).included_modules
end

def test_included_modules_after_remix
Expand All @@ -81,9 +81,9 @@ def test_included_modules_after_remix
object = Object.new
object.mixin mixin_one
object.mixin mixin_two
assert_equal [mixin_two, mixin_one, Mixable, Kernel], (class << object; self; end).included_modules
assert_equal [mixin_two, mixin_one, Mixology, Kernel], (class << object; self; end).included_modules
object.mixin mixin_one
assert_equal [mixin_one, mixin_two, Mixable, Kernel], (class << object; self; end).included_modules
assert_equal [mixin_one, mixin_two, Mixology, Kernel], (class << object; self; end).included_modules
end

def test_mixin_returns_object
Expand All @@ -92,7 +92,6 @@ def test_mixin_returns_object
assert_equal object, object.mixin(mixin)
end

# Does it make more sense for unmix to return the object or the module?
def test_unmix_returns_module
object = Object.new
mixin = Module.new
Expand Down
2 changes: 1 addition & 1 deletion test/test_helper.rb
@@ -1,2 +1,2 @@
require "test/unit"
require "mixable"
require "ext/mixology/mixology"

0 comments on commit 6936566

Please sign in to comment.