diff -urN tdebindings/korundum/bin/Makefile.am tdebindings.new/korundum/bin/Makefile.am
--- tdebindings/korundum/bin/Makefile.am	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/korundum/bin/Makefile.am	2012-02-25 22:12:17.000000000 -0600
@@ -1,4 +1,4 @@
-INCLUDES = $(all_includes) -I$(RUBY_ARCHDIR)
+INCLUDES = $(all_includes) -I$(RUBY_INCLUDEDIR) -I/usr/include/tqt
 
 bin_PROGRAMS = krubyinit
 krubyinit_LDFLAGS = -module $(all_libraries) -version-info 0:0:0 -L$(top_srcdir)/smoke/kde/ -L$(RUBY_LIBDIR) -lkmdi -lknewstuff
diff -urN tdebindings/korundum/bin/krubyinit.cpp tdebindings.new/korundum/bin/krubyinit.cpp
--- tdebindings/korundum/bin/krubyinit.cpp	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/korundum/bin/krubyinit.cpp	2012-02-25 22:13:38.000000000 -0600
@@ -24,6 +24,6 @@
 int main(int argc, char **argv) {
      ruby_init();
      ruby_script((char*)script_name);
-     ruby_options(argc, argv); 
-     ruby_run();
+     void* node = ruby_options(argc, argv); 
+     ruby_run_node(node);
 }
diff -urN tdebindings/korundum/rubylib/korundum/Korundum.cpp tdebindings.new/korundum/rubylib/korundum/Korundum.cpp
--- tdebindings/korundum/rubylib/korundum/Korundum.cpp	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/korundum/rubylib/korundum/Korundum.cpp	2012-02-25 22:13:50.000000000 -0600
@@ -805,7 +805,7 @@
 			// isn't in the Smoke runtime
 			TQValueList<DCOPRef> windowList;
 			
-			for (long i = 0; i < RARRAY(result)->len; i++) {
+			for (long i = 0; i < RARRAY_LEN(result); i++) {
 				VALUE item = rb_ary_entry(result, i);
 				smokeruby_object *o = value_obj_info(item);
 				if( !o || !o->ptr)
@@ -822,7 +822,7 @@
 			// And special case this type too 
 			TQValueList<TQCString> propertyList;
 			
-			for (long i = 0; i < RARRAY(result)->len; i++) {
+			for (long i = 0; i < RARRAY_LEN(result); i++) {
 				VALUE item = rb_ary_entry(result, i);
 				propertyList.append(TQCString(StringValuePtr(item)));
 			}
@@ -836,7 +836,7 @@
 			// Convert the ruby hash to an array of key/value arrays
 			VALUE temp = rb_funcall(result, rb_intern("to_a"), 0);
 
-			for (long i = 0; i < RARRAY(temp)->len; i++) {
+			for (long i = 0; i < RARRAY_LEN(temp); i++) {
 				VALUE action = rb_ary_entry(rb_ary_entry(temp, i), 0);
 				VALUE item = rb_ary_entry(rb_ary_entry(temp, i), 1);
 				
@@ -926,7 +926,7 @@
 {
 	VALUE dcopObject = rb_funcall(kde_module, rb_intern("createDCOPObject"), 1, self);
 	
-    TQString signalname(rb_id2name(rb_frame_last_func()));
+    TQString signalname(rb_id2name(rb_frame_this_func()));
     VALUE args = getdcopinfo(self, signalname);
 
     if(args == Qnil) return Qfalse;
@@ -1020,7 +1020,7 @@
 	
 	if (rb_funcall(kde_module, rb_intern("hasDCOPSignals"), 1, klass) == Qtrue) {
 		VALUE signalNames = rb_funcall(kde_module, rb_intern("getDCOPSignalNames"), 1, klass);
-		for (long index = 0; index < RARRAY(signalNames)->len; index++) {
+		for (long index = 0; index < RARRAY_LEN(signalNames); index++) {
 			VALUE signal = rb_ary_entry(signalNames, index);
 			rb_define_method(klass, StringValuePtr(signal), (VALUE (*) (...)) k_dcop_signal, -1);
 		}
@@ -1088,9 +1088,9 @@
 	TQStrList *args = new TQStrList;
 
 	if (value_args != Qnil) {
-		for (long i = 0; i < RARRAY(value_args)->len; i++) {
+		for (long i = 0; i < RARRAY_LEN(value_args); i++) {
 			VALUE item = rb_ary_entry(value_args, i);
-			args->append(TQString::fromLatin1(StringValuePtr(item), RSTRING(item)->len));
+			args->append(TQString::fromLatin1(StringValuePtr(item), RSTRING_LEN(item)));
 		}
 	}
 
diff -urN tdebindings/korundum/rubylib/korundum/Makefile.am tdebindings.new/korundum/rubylib/korundum/Makefile.am
--- tdebindings/korundum/rubylib/korundum/Makefile.am	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/korundum/rubylib/korundum/Makefile.am	2012-02-25 22:12:17.000000000 -0600
@@ -1,6 +1,6 @@
-INCLUDES = -I$(top_srcdir)/smoke -I$(top_srcdir)/qtruby/rubylib/qtruby $(all_includes) -I$(RUBY_ARCHDIR)
+INCLUDES = -I$(top_srcdir)/smoke -I$(top_srcdir)/qtruby/rubylib/qtruby $(all_includes) -I$(RUBY_INCLUDEDIR) -I/usr/include/tqt
 
-rubylibdir = $(RUBY_ARCHDIR)
+rubylibdir = $(RUBY_LIBDIR)
 rubylib_LTLIBRARIES = korundum.la
 korundum_la_LDFLAGS = -module $(all_libraries) -version-info 0:0:0
 korundum_la_METASOURCES = AUTO
diff -urN tdebindings/korundum/rubylib/korundum/configure.in.in tdebindings.new/korundum/rubylib/korundum/configure.in.in
--- tdebindings/korundum/rubylib/korundum/configure.in.in	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/korundum/rubylib/korundum/configure.in.in	2012-02-25 22:12:17.000000000 -0600
@@ -8,10 +8,30 @@
   RUBY_SITEARCHDIR=`ruby -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitearchdir"@:>@)'`
   RUBY_SITEDIR=`ruby -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitelibdir"@:>@)'`
   RUBY_RUBYLIBDIR=`ruby -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"rubylibdir"@:>@)'`
-  AC_MSG_RESULT([archdir $RUBY_ARCHDIR, sitearchdir $RUBY_SITEARCHDIR, sitedir $RUBY_SITEDIR])
+  RUBY_LIBDIR=`ruby -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"libdir"@:>@)'`
+  if test -n "ruby -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"rubyhdrdir"@:>@)'"; then
+    # Ruby 1.9
+    RUBY_INCLUDEDIR=`ruby -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"rubyhdrdir"@:>@)'`
+    RUBY_VERSION_H=ruby/version.h
+  else
+    # not Ruby 1.9
+    RUBY_INCLUDEDIR=$RUBY_ARCHDIR
+    RUBY_VERSION_H=version.h
+  fi
+  RUBY_LIBRUBYARG=`ruby -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"LIBRUBYARG_SHARED"@:>@)'`
+  AC_MSG_RESULT([
+                  archdir $RUBY_ARCHDIR,
+                  sitearchdir $RUBY_SITEARCHDIR,
+                  sitedir $RUBY_SITEDIR,
+                  libdir $RUBY_LIBDIR,
+                  includedir $RUBY_INCLUDEDIR,
+                  librubyarg $RUBY_LIBRUBYARG])
   AC_SUBST(RUBY_ARCHDIR)
   AC_SUBST(RUBY_SITEARCHDIR)
-  AC_SUBST(RUBY_RUBYLIBDIR)
   AC_SUBST(RUBY_SITEDIR)
+  AC_SUBST(RUBY_RUBYLIBDIR)
+  AC_SUBST(RUBY_LIBDIR)
+  AC_SUBST(RUBY_INCLUDEDIR)
+  AC_SUBST(RUBY_LIBRUBYARG)
 fi
 
diff -urN tdebindings/korundum/rubylib/korundum/kdehandlers.cpp tdebindings.new/korundum/rubylib/korundum/kdehandlers.cpp
--- tdebindings/korundum/rubylib/korundum/kdehandlers.cpp	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/korundum/rubylib/korundum/kdehandlers.cpp	2012-02-25 22:14:03.000000000 -0600
@@ -122,7 +122,7 @@
 		break;
 	    }
 
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    QCStringList *stringlist = new QCStringList;
 
 	    for(long i = 0; i < count; i++) {
@@ -131,7 +131,7 @@
 		    stringlist->append(TQCString());
 		    continue;
 		}
-		stringlist->append(TQCString(StringValuePtr(item), RSTRING(item)->len + 1));
+		stringlist->append(TQCString(StringValuePtr(item), RSTRING_LEN(item) + 1));
 	    }
 
 	    m->item().s_voidp = stringlist;
@@ -184,19 +184,19 @@
 			VALUE optionslist = *(m->var());
 			if (optionslist == Qnil
 			|| TYPE(optionslist) != T_ARRAY
-			|| RARRAY(optionslist)->len == 0 )
+			|| RARRAY_LEN(optionslist) == 0 )
 			{
 					m->item().s_voidp = 0;
 					break;
 			}
 
 			// Allocate 'length + 1' entries, to include an all NULLs last entry
-			KCmdLineOptions *cmdLineOptions = (KCmdLineOptions *) calloc(	RARRAY(optionslist)->len + 1, 
+			KCmdLineOptions *cmdLineOptions = (KCmdLineOptions *) calloc(	RARRAY_LEN(optionslist) + 1, 
 																			sizeof(struct KCmdLineOptions) );
 			
 			VALUE options;
 			long i;
-			for(i = 0; i < RARRAY(optionslist)->len; i++) {
+			for(i = 0; i < RARRAY_LEN(optionslist); i++) {
 				options = rb_ary_entry(optionslist, i);
 				VALUE temp = rb_ary_entry(options, 0);
 				cmdLineOptions[i].name = StringValuePtr(temp);
@@ -244,7 +244,7 @@
 		m->item().s_voidp = 0;
 		break;
 	    }
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    TQValueList<WId> *valuelist = new TQValueList<WId>;
 	    long i;
 	    for(i = 0; i < count; i++) {
@@ -815,7 +815,7 @@
 				m->item().s_voidp = 0;
 				break;
 			}
-			int count = RARRAY(list)->len;
+			int count = RARRAY_LEN(list);
 			KURL::List *kurllist = new KURL::List;
 			long i;
 			for(i = 0; i < count; i++) {
@@ -916,11 +916,11 @@
 		
 		KIO::UDSEntryList *cpplist = new KIO::UDSEntryList;
 		
-		for(long i = 0; i < RARRAY(list)->len; i++) {
+		for(long i = 0; i < RARRAY_LEN(list); i++) {
 			VALUE item = rb_ary_entry(list, i);
 			KIO::UDSEntry *cppsublist = new KIO::UDSEntry;
 			
-			for (int j = 0; j < RARRAY(item)->len; j++) {
+			for (int j = 0; j < RARRAY_LEN(item); j++) {
 				VALUE subitem = rb_ary_entry(item, j);
 				smokeruby_object *o = value_obj_info(subitem);
 				if(!o || !o->ptr)
@@ -998,7 +998,7 @@
 		m->item().s_voidp = 0;
 		break;
 	    }
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    ItemList *cpplist = new ItemList;
 	    long i;
 	    for(i = 0; i < count; i++) {
@@ -1103,7 +1103,7 @@
 		m->item().s_voidp = 0;
 		break;
 	    }
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    ItemList *cpplist = new ItemList;
 	    long i;
 	    for(i = 0; i < count; i++) {
@@ -1211,7 +1211,7 @@
 		// Convert the ruby hash to an array of key/value arrays
 		VALUE temp = rb_funcall(hash, rb_intern("to_a"), 0);
 
-		for (long i = 0; i < RARRAY(temp)->len; i++) {
+		for (long i = 0; i < RARRAY_LEN(temp); i++) {
 			VALUE key = rb_ary_entry(rb_ary_entry(temp, i), 0);
 			VALUE value = rb_ary_entry(rb_ary_entry(temp, i), 1);
 			
@@ -1316,7 +1316,7 @@
 		// Convert the ruby hash to an array of key/value arrays
 		VALUE temp = rb_funcall(hash, rb_intern("to_a"), 0);
 
-		for (long i = 0; i < RARRAY(temp)->len; i++) {
+		for (long i = 0; i < RARRAY_LEN(temp); i++) {
 			VALUE key = rb_ary_entry(rb_ary_entry(temp, i), 0);
 			VALUE value = rb_ary_entry(rb_ary_entry(temp, i), 1);
 			
diff -urN tdebindings/qtruby/bin/Makefile.am tdebindings.new/qtruby/bin/Makefile.am
--- tdebindings/qtruby/bin/Makefile.am	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/qtruby/bin/Makefile.am	2012-02-25 22:12:17.000000000 -0600
@@ -1,4 +1,4 @@
-INCLUDES = $(all_includes) -I$(RUBY_ARCHDIR)
+INCLUDES = $(all_includes) -I$(RUBY_INCLUDEDIR) -I/usr/include/tqt
 
 bin_PROGRAMS = qtrubyinit
 qtrubyinit_LDFLAGS = -module $(all_libraries) -version-info 0:0:0 -L$(top_srcdir)/smoke/qt/ -L$(RUBY_LIBDIR)
diff -urN tdebindings/qtruby/bin/qtrubyinit.cpp tdebindings.new/qtruby/bin/qtrubyinit.cpp
--- tdebindings/qtruby/bin/qtrubyinit.cpp	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/qtruby/bin/qtrubyinit.cpp	2012-02-25 22:13:23.000000000 -0600
@@ -24,6 +24,6 @@
 int main(int argc, char **argv) {
      ruby_init();
      ruby_script((char*)script_name);
-     ruby_options(argc, argv); 
-     ruby_run();
+     void* node = ruby_options(argc, argv); 
+     ruby_run_node(node);
 }
diff -urN tdebindings/qtruby/rubylib/designer/rbuic/Makefile.am tdebindings.new/qtruby/rubylib/designer/rbuic/Makefile.am
--- tdebindings/qtruby/rubylib/designer/rbuic/Makefile.am	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/qtruby/rubylib/designer/rbuic/Makefile.am	2012-02-25 22:12:17.000000000 -0600
@@ -4,7 +4,7 @@
 bin_PROGRAMS = rbuic
 noinst_LTLIBRARIES = librbuic.la
 
-INCLUDES = $(all_includes)
+INCLUDES = $(all_includes) -I$(RUBY_INCLUDEDIR) -I/usr/include/tqt
 
 METASOURCES = AUTO
 
@@ -12,8 +12,8 @@
 librbuic_la_LIBADD  = $(LIB_QT) $(LIBZ)
 
 rbuic_SOURCES = main.cpp
-rbuic_LDADD   = librbuic.la $(all_libraries) 
-rbuic_LDFLAGS = 
+rbuic_LDADD   = librbuic.la $(all_libraries)
+rbuic_LDFLAGS =
 
 EXTRA_DIST = domtool.cpp domtool.h embed.cpp form.cpp globaldefs.h main.cpp object.cpp parser.cpp parser.h subclassing.cpp uic.cpp uic.h widgetdatabase.cpp widgetdatabase.h widgetinterface.h
 
diff -urN tdebindings/qtruby/rubylib/designer/uilib/Makefile.am tdebindings.new/qtruby/rubylib/designer/uilib/Makefile.am
--- tdebindings/qtruby/rubylib/designer/uilib/Makefile.am	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/qtruby/rubylib/designer/uilib/Makefile.am	2012-02-25 22:12:17.000000000 -0600
@@ -1,6 +1,6 @@
-INCLUDES = -I$(top_srcdir)/smoke -I$(top_srcdir)/qtruby/rubylib/qtruby $(all_includes) -I$(RUBY_ARCHDIR)
+INCLUDES = -I$(top_srcdir)/smoke -I$(top_srcdir)/qtruby/rubylib/qtruby $(all_includes) -I$(RUBY_INCLUDEDIR) -I/usr/include/tqt
 
-rubylibdir = $(RUBY_ARCHDIR)
+rubylibdir = $(RUBY_LIBDIR)
 rubylib_LTLIBRARIES = qui.la
 qui_la_SOURCES = qui.cpp
 qui_la_LDFLAGS = -module -export-dynamic $(all_libraries) -version-info 0:0:0
diff -urN tdebindings/qtruby/rubylib/qtruby/Makefile.am tdebindings.new/qtruby/rubylib/qtruby/Makefile.am
--- tdebindings/qtruby/rubylib/qtruby/Makefile.am	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/qtruby/rubylib/qtruby/Makefile.am	2012-02-25 22:12:17.000000000 -0600
@@ -1,4 +1,4 @@
-INCLUDES = -I$(top_srcdir)/smoke $(all_includes) -I$(RUBY_ARCHDIR)
+INCLUDES = -I$(top_srcdir)/smoke $(all_includes) -I$(RUBY_INCLUDEDIR) -I/usr/include/tqt
 
 noinst_HEADERS = qtruby.h marshall.h smokeruby.h extconf.rb 
 
diff -urN tdebindings/qtruby/rubylib/qtruby/Qt.cpp tdebindings.new/qtruby/rubylib/qtruby/Qt.cpp
--- tdebindings/qtruby/rubylib/qtruby/Qt.cpp	2012-02-21 13:58:54.000000000 -0600
+++ tdebindings.new/qtruby/rubylib/qtruby/Qt.cpp	2012-02-25 22:12:52.000000000 -0600
@@ -110,7 +110,7 @@
 };
 
 #define logger logger_backend
-void rb_str_catf(VALUE self, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
+void rb_str_catf_1(VALUE self, const char *format, ...) __attribute__ ((format (printf, 2, 3)));
 
 static VALUE (*_new_kde)(int, VALUE *, VALUE) = 0;
 static VALUE (*_kconfigskeletonitem_immutable)(VALUE) = 0;
@@ -820,7 +820,7 @@
     }
 };
 
-void rb_str_catf(VALUE self, const char *format, ...) 
+void rb_str_catf_1(VALUE self, const char *format, ...) 
 {
     va_list ap;
     va_start(ap, format);
@@ -985,16 +985,16 @@
     VALUE r = rb_str_new2("");
     Smoke::Method &meth = qt_Smoke->methods[id];
     const char *tname = qt_Smoke->types[meth.ret].name;
-    if(meth.flags & Smoke::mf_static) rb_str_catf(r, "static ");
-    rb_str_catf(r, "%s ", (tname ? tname:"void"));
-    rb_str_catf(r, "%s::%s(", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]);
+    if(meth.flags & Smoke::mf_static) rb_str_catf_1(r, "static ");
+    rb_str_catf_1(r, "%s ", (tname ? tname:"void"));
+    rb_str_catf_1(r, "%s::%s(", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]);
     for(int i = 0; i < meth.numArgs; i++) {
-	if(i) rb_str_catf(r, ", ");
+	if(i) rb_str_catf_1(r, ", ");
 	tname = qt_Smoke->types[qt_Smoke->argumentList[meth.args+i]].name;
-	rb_str_catf(r, "%s", (tname ? tname:"void"));
+	rb_str_catf_1(r, "%s", (tname ? tname:"void"));
     }
-    rb_str_catf(r, ")");
-    if(meth.flags & Smoke::mf_const) rb_str_catf(r, " const");
+    rb_str_catf_1(r, ")");
+    if(meth.flags & Smoke::mf_const) rb_str_catf_1(r, " const");
     return r;
 }
 
@@ -1177,7 +1177,7 @@
 	// Start with #<Qt::HBoxLayout:0x30139030> from the original inspect() call
 	// Drop the closing '>'
 	VALUE inspect_str = rb_call_super(0, 0);	
-	rb_str_resize(inspect_str, RSTRING(inspect_str)->len - 1);
+	rb_str_resize(inspect_str, RSTRING_LEN(inspect_str) - 1);
 	
 	smokeruby_object * o = 0;
     Data_Get_Struct(self, smokeruby_object, o);	
@@ -1220,7 +1220,7 @@
 	// Start with #<Qt::HBoxLayout:0x30139030>
 	// Drop the closing '>'
 	VALUE inspect_str = rb_funcall(self, rb_intern("to_s"), 0, 0);	
-	rb_str_resize(inspect_str, RSTRING(inspect_str)->len - 1);
+	rb_str_resize(inspect_str, RSTRING_LEN(inspect_str) - 1);
 	rb_funcall(pp, rb_intern("text"), 1, inspect_str);
 	rb_funcall(pp, rb_intern("breakable"), 0);
 	
@@ -1236,7 +1236,7 @@
 		VALUE obj = getPointerObject(qobject->parent());
 		if (obj != Qnil) {
 			VALUE parent_inspect_str = rb_funcall(obj, rb_intern("to_s"), 0, 0);	
-			rb_str_resize(parent_inspect_str, RSTRING(parent_inspect_str)->len - 1);
+			rb_str_resize(parent_inspect_str, RSTRING_LEN(parent_inspect_str) - 1);
 			parentInspectString = StringValuePtr(parent_inspect_str);
 		} else {
 			parentInspectString.sprintf("#<%s:0x0", qobject->parent()->className());
@@ -1382,7 +1382,7 @@
     	return *(c.var());
 	} else if (	argc == 1 
 				&& TYPE(argv[0]) == T_ARRAY
-				&& RARRAY(argv[0])->len > 0
+				&& RARRAY_LEN(argv[0]) > 0
 				&& TYPE(rb_ary_entry(argv[0], 0)) != T_STRING )
 	{
 		_current_method = new_qvariant_qlist;
@@ -1741,7 +1741,7 @@
 		VALUE * local_argv = (VALUE *) calloc(argc + 1, sizeof(VALUE));
 		VALUE temp = rb_ary_dup(argv[0]);
 		rb_ary_unshift(temp, rb_gv_get("$0"));
-		local_argv[0] = INT2NUM(RARRAY(temp)->len);
+		local_argv[0] = INT2NUM(RARRAY_LEN(temp));
 		local_argv[1] = temp;
 		result = new_qt(2, local_argv, klass);
 		free(local_argv);
@@ -1772,7 +1772,7 @@
 VALUE
 getmetainfo(VALUE self, int &offset, int &index)
 {
-    const char * signalname = rb_id2name(rb_frame_last_func());
+    const char * signalname = rb_id2name(rb_frame_this_func());
     VALUE metaObject_value = rb_funcall(qt_internal_module, rb_intern("getMetaObject"), 1, self);
 
     smokeruby_object *ometa = value_obj_info(metaObject_value);
@@ -1862,7 +1862,7 @@
     // Now, I need to find out if this means me
     int index;
     char *slotname;
-    bool isSignal = qstrcmp(rb_id2name(rb_frame_last_func()), "qt_emit") == 0;
+    bool isSignal = qstrcmp(rb_id2name(rb_frame_this_func()), "qt_emit") == 0;
     VALUE mocArgs = getslotinfo(self, id, slotname, index, isSignal);
     if(mocArgs == Qnil) {
 		// No ruby slot/signal found, assume the target is a C++ one
@@ -2009,7 +2009,7 @@
 		return Qnil;
 	}
 	TQByteArray * dataArray = (TQByteArray*) o->ptr;
-	dataArray->setRawData(StringValuePtr(data), RSTRING(data)->len);
+	dataArray->setRawData(StringValuePtr(data), RSTRING_LEN(data));
 	return self;
 }
 
@@ -2195,7 +2195,7 @@
     m->name = new char[strlen(name) + 1];	// this too
     strcpy((char*)m->name, name);
     m->parameters = 0;
-    m->count = RARRAY(params)->len;
+    m->count = RARRAY_LEN(params);
 
     if (m->count > 0) {
 	m->parameters = new QUParameter[m->count];
@@ -2213,7 +2213,7 @@
 static VALUE
 make_QMetaData_tbl(VALUE /*self*/, VALUE list)
 {
-    long count = RARRAY(list)->len;
+    long count = RARRAY_LEN(list);
     QMetaData *m = new QMetaData[count];
 
     for (long i = 0; i < count; i++) {
@@ -2281,7 +2281,7 @@
 static VALUE
 add_signal_methods(VALUE self, VALUE klass, VALUE signalNames)
 {
-	for (long index = 0; index < RARRAY(signalNames)->len; index++) {
+	for (long index = 0; index < RARRAY_LEN(signalNames); index++) {
 		VALUE signal = rb_ary_entry(signalNames, index);
 		rb_define_method(klass, StringValuePtr(signal), (VALUE (*) (...)) qt_signal, -1);
 	}
@@ -2597,28 +2597,28 @@
 {
     VALUE errmsg = rb_str_new2("");
     if(rmeths != Qnil) {
-	int count = RARRAY(rmeths)->len;
+	int count = RARRAY_LEN(rmeths);
         for(int i = 0; i < count; i++) {
-	    rb_str_catf(errmsg, "\t");
+	    rb_str_catf_1(errmsg, "\t");
 	    int id = NUM2INT(rb_ary_entry(rmeths, i));
 	    Smoke::Method &meth = qt_Smoke->methods[id];
 	    const char *tname = qt_Smoke->types[meth.ret].name;
 	    if(meth.flags & Smoke::mf_enum) {
-			rb_str_catf(errmsg, "enum ");
-			rb_str_catf(errmsg, "%s::%s", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]);
-			rb_str_catf(errmsg, "\n");
+			rb_str_catf_1(errmsg, "enum ");
+			rb_str_catf_1(errmsg, "%s::%s", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]);
+			rb_str_catf_1(errmsg, "\n");
 	    } else {
 			if(meth.flags & Smoke::mf_static) rb_str_catf(errmsg, "static ");
-			rb_str_catf(errmsg, "%s ", (tname ? tname:"void"));
-			rb_str_catf(errmsg, "%s::%s(", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]);
+			rb_str_catf_1(errmsg, "%s ", (tname ? tname:"void"));
+			rb_str_catf_1(errmsg, "%s::%s(", qt_Smoke->classes[meth.classId].className, qt_Smoke->methodNames[meth.name]);
 			for(int i = 0; i < meth.numArgs; i++) {
-			if(i) rb_str_catf(errmsg, ", ");
+			if(i) rb_str_catf_1(errmsg, ", ");
 			tname = qt_Smoke->types[qt_Smoke->argumentList[meth.args+i]].name;
-			rb_str_catf(errmsg, "%s", (tname ? tname:"void"));
+			rb_str_catf_1(errmsg, "%s", (tname ? tname:"void"));
 			}
-			rb_str_catf(errmsg, ")");
-			if(meth.flags & Smoke::mf_const) rb_str_catf(errmsg, " const");
-			rb_str_catf(errmsg, "\n");
+			rb_str_catf_1(errmsg, ")");
+			if(meth.flags & Smoke::mf_const) rb_str_catf_1(errmsg, " const");
+			rb_str_catf_1(errmsg, "\n");
         	}
         }
     }
diff -urN tdebindings/qtruby/rubylib/qtruby/configure.in.in tdebindings.new/qtruby/rubylib/qtruby/configure.in.in
--- tdebindings/qtruby/rubylib/qtruby/configure.in.in	2011-12-25 00:54:23.000000000 -0600
+++ tdebindings.new/qtruby/rubylib/qtruby/configure.in.in	2012-02-25 22:12:17.000000000 -0600
@@ -9,13 +9,29 @@
   RUBY_SITEDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"sitelibdir"@:>@)'`
   RUBY_RUBYLIBDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"rubylibdir"@:>@)'`
   RUBY_LIBDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"libdir"@:>@)'`
+  if test -n "$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"rubyhdrdir"@:>@)'"; then
+    # Ruby 1.9
+    RUBY_INCLUDEDIR=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"rubyhdrdir"@:>@)'`
+    RUBY_VERSION_H=ruby/version.h
+  else
+    # not Ruby 1.9
+    RUBY_INCLUDEDIR=$RUBY_ARCHDIR
+    RUBY_VERSION_H=version.h
+  fi
   RUBY_LIBRUBYARG=`$RUBY -r rbconfig -e 'printf("%s",Config::CONFIG@<:@"LIBRUBYARG_SHARED"@:>@)'`
-  AC_MSG_RESULT([archdir $RUBY_ARCHDIR, sitearchdir $RUBY_SITEARCHDIR, sitedir $RUBY_SITEDIR, libdir $RUBY_LIBDIR, librubyarg $RUBY_LIBRUBYARG])
+  AC_MSG_RESULT([
+                  archdir $RUBY_ARCHDIR,
+                  sitearchdir $RUBY_SITEARCHDIR,
+                  sitedir $RUBY_SITEDIR,
+                  libdir $RUBY_LIBDIR,
+                  includedir $RUBY_INCLUDEDIR,
+                  librubyarg $RUBY_LIBRUBYARG])
   AC_SUBST(RUBY_ARCHDIR)
   AC_SUBST(RUBY_SITEARCHDIR)
   AC_SUBST(RUBY_SITEDIR)
   AC_SUBST(RUBY_RUBYLIBDIR)
   AC_SUBST(RUBY_LIBDIR)
+  AC_SUBST(RUBY_INCLUDEDIR)
   AC_SUBST(RUBY_LIBRUBYARG)
 fi
 
diff -urN tdebindings/qtruby/rubylib/qtruby/handlers.cpp tdebindings.new/qtruby/rubylib/qtruby/handlers.cpp
--- tdebindings/qtruby/rubylib/qtruby/handlers.cpp	2012-02-21 13:58:54.000000000 -0600
+++ tdebindings.new/qtruby/rubylib/qtruby/handlers.cpp	2012-02-25 22:13:09.000000000 -0600
@@ -755,7 +755,7 @@
             break;
         }
 	
-        int len = RSTRING(rv)->len;
+        int len = RSTRING_LEN(rv);
         char* mem = (char*) malloc(len+1);
         memcpy(mem, StringValuePtr(rv), len);
         mem[len] ='\0';
@@ -788,7 +788,7 @@
             m->item().s_voidp = 0;
             break;
         }
-        int len = RSTRING(rv)->len;
+        int len = RSTRING_LEN(rv);
         char* mem = (char*) malloc(len+1);
         memcpy(mem, StringValuePtr(rv), len);
         mem[len] ='\0';
@@ -824,7 +824,7 @@
 	
 	TQString *	s;
 	if (qstrcmp(KCODE, "UTF8") == 0)
-		s = new TQString(TQString::fromUtf8(StringValuePtr(rstring), RSTRING(rstring)->len));
+		s = new TQString(TQString::fromUtf8(StringValuePtr(rstring), RSTRING_LEN(rstring)));
 	else if (qstrcmp(KCODE, "EUC") == 0)
 		s = new TQString(codec->toUnicode(StringValuePtr(rstring)));
 	else if (qstrcmp(KCODE, "SJIS") == 0)
@@ -832,7 +832,7 @@
 	else if(qstrcmp(KCODE, "NONE") == 0)
 		s = new TQString(TQString::fromLatin1(StringValuePtr(rstring)));
 	else
-		s = new TQString(TQString::fromLocal8Bit(StringValuePtr(rstring), RSTRING(rstring)->len));
+		s = new TQString(TQString::fromLocal8Bit(StringValuePtr(rstring), RSTRING_LEN(rstring)));
 	return s;
 }
 
@@ -944,7 +944,7 @@
 		s = new TQCString(); 
         } else {
 		// Add 1 to the ruby string length to allow for a TQCString '\0' terminator
-		s = new TQCString(StringValuePtr(*(m->var())), RSTRING(*(m->var()))->len + 1); 
+		s = new TQCString(StringValuePtr(*(m->var())), RSTRING_LEN(*(m->var())) + 1); 
 		}
 	    m->item().s_voidp = s;
 	    
@@ -1007,7 +1007,7 @@
 		m->item().s_voidp = 0;
 		break;
 	    }
-	    int count = RARRAY(av)->len;
+	    int count = RARRAY_LEN(av);
 	    QCOORD *coord = new QCOORD[count + 2];
 	    for(long i = 0; i < count; i++) {
 		VALUE svp = rb_ary_entry(av, i);
@@ -1167,15 +1167,15 @@
 	    VALUE arglist = *(m->var());
 	    if (arglist == Qnil
 	    || TYPE(arglist) != T_ARRAY
-	    || RARRAY(arglist)->len == 0 )
+	    || RARRAY_LEN(arglist) == 0 )
 	    {
                 m->item().s_voidp = 0;
                 break;
 	    }
 
-	    char **argv = new char *[RARRAY(arglist)->len + 1];
+	    char **argv = new char *[RARRAY_LEN(arglist) + 1];
 	    long i;
-	    for(i = 0; i < RARRAY(arglist)->len; i++) {
+	    for(i = 0; i < RARRAY_LEN(arglist); i++) {
                 VALUE item = rb_ary_entry(arglist, i);
                 char *s = StringValuePtr(item);
                 argv[i] = new char[strlen(s) + 1];
@@ -1207,7 +1207,7 @@
 		break;
 	    }
 
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    TQStringList *stringlist = new QStringList;
 
 	    for(long i = 0; i < count; i++) {
@@ -1269,7 +1269,7 @@
 		break;
 	    }
 
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    TQStrList *stringlist = new QStrList;
 
 	    for(long i = 0; i < count; i++) {
@@ -1278,7 +1278,7 @@
 		    stringlist->append(TQString());
 		    continue;
 		}
-		stringlist->append(TQString::fromUtf8(StringValuePtr(item), RSTRING(item)->len));
+		stringlist->append(TQString::fromUtf8(StringValuePtr(item), RSTRING_LEN(item)));
 	    }
 
 	    m->item().s_voidp = stringlist;
@@ -1331,7 +1331,7 @@
 		m->item().s_voidp = 0;
 		break;
 	    }
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    ItemList *cpplist = new ItemList;
 	    long i;
 	    for(i = 0; i < count; i++) {
@@ -1421,7 +1421,7 @@
 		m->item().s_voidp = 0;
 		break;
 	    }
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    TQValueList<int> *valuelist = new TQValueList<int>;
 	    long i;
 	    for(i = 0; i < count; i++) {
@@ -1513,7 +1513,7 @@
 		// Convert the ruby hash to an array of key/value arrays
 		VALUE temp = rb_funcall(hash, rb_intern("to_a"), 0);
 
-		for (long i = 0; i < RARRAY(temp)->len; i++) {
+		for (long i = 0; i < RARRAY_LEN(temp); i++) {
 			VALUE key = rb_ary_entry(rb_ary_entry(temp, i), 0);
 			VALUE value = rb_ary_entry(rb_ary_entry(temp, i), 1);
 			(*map)[TQString(StringValuePtr(key))] = TQString(StringValuePtr(value));
@@ -1569,7 +1569,7 @@
 		// Convert the ruby hash to an array of key/value arrays
 		VALUE temp = rb_funcall(hash, rb_intern("to_a"), 0);
 
-		for (long i = 0; i < RARRAY(temp)->len; i++) {
+		for (long i = 0; i < RARRAY_LEN(temp); i++) {
 			VALUE key = rb_ary_entry(rb_ary_entry(temp, i), 0);
 			VALUE value = rb_ary_entry(rb_ary_entry(temp, i), 1);
 			
@@ -1673,7 +1673,7 @@
 		m->item().s_voidp = 0;
 		break;
 	    }
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    QRgb *rgb = new QRgb[count + 2];
 	    long i;
 	    for(i = 0; i < count; i++) {
@@ -1702,7 +1702,7 @@
       case Marshall::FromVALUE:
 	{
 	    VALUE list = *(m->var());
-	    if (TYPE(list) != T_ARRAY || RARRAY(list)->len != 2) {
+	    if (TYPE(list) != T_ARRAY || RARRAY_LEN(list) != 2) {
 		m->item().s_voidp = 0;
 		break;
 	    }
@@ -1770,7 +1770,7 @@
 		m->item().s_voidp = 0;
 		break;
 	    }
-	    int count = RARRAY(list)->len;
+	    int count = RARRAY_LEN(list);
 	    ItemList *cpplist = new ItemList;
 	    long i;
 	    for(i = 0; i < count; i++) {