From: "Brian Schröder" Date: 2005-02-12T02:26:54+09:00 Subject: Re: RDoc of C extensions that extend classes On Sat, 12 Feb 2005 01:25:02 +0900 "Charles Mills" wrote: > Brian Schr�der wrote: > > Hello Group, > > > > I'm having a problem documenting my C extensions. The extension > actually > > consists of multiple differenct extensions. > > One that defines a Class and some Functions on it, and others that > > expand the functionality of the class by adding functions to it. > > When > > > I'`m running rdoc1.8 on the sourcecode, it documents only those > > functions that are defined in the main c-file. The other functions > (that > > reside in subdirectories) are not documented. > > > > What can I do to make rdoc include the missing functions? > > > There have been a number of patches posted to ruby core regarding rdoc > and C extensions in the last few months. I think one of them > addresses this issue. > But in the meantime you can add the following in the Init_() functions > of each of the C modules that expand the functionality of a class: > > #ifdef RDOC_NEVER_DEFINED > cMyClass = rb_define_class(...); > #endif > > Do your C modules that extend classes have Init_() functions that are > called from your main init function (init_mylib())? > > -Charlie > > Thanks for the pointer, I do not call the init functions from the main init function, but really create standalone extensions that require the main extension. To make it all even more complicated (maybe I'm doing it more complicated than I need?) I require extensions written in ruby, that require the actual c extensions. Like this: foo.rb foo/all.rb foo/bar.rb foo/baz.rb ... foo/so/bar.so foo/so/baz.so ... Content of foo/bar.rb --- require 'foo/so/bar' class MyClass ... end --- Content of foo/all.rb --- require 'foo/bar' require 'foo/baz' ... --- and similar for baz. So I can choose to include require 'foo' for the basic functionality or require 'foo/bar' for foo with bar extension or require 'foo/bar' require 'foo/baz' for foo with bar and baz extension or even require 'foo/all' to include everything. The c code of the extensions is generated via ruby scripts that automatically create a c library and its ruby bindings, so it need not maintain everything by hand. best regards, Brian