summaryrefslogtreecommitdiff
path: root/devel
diff options
context:
space:
mode:
Diffstat (limited to 'devel')
-rw-r--r--devel/ruby-ncurses/Makefile33
-rw-r--r--devel/ruby-ncurses/PLIST48
-rw-r--r--devel/ruby-ncurses/distinfo11
-rw-r--r--devel/ruby-ncurses/files/gemspec25
-rw-r--r--devel/ruby-ncurses/patches/patch-aa249
-rw-r--r--devel/ruby-ncurses/patches/patch-ab56
-rw-r--r--devel/ruby-ncurses/patches/patch-ac52
7 files changed, 405 insertions, 69 deletions
diff --git a/devel/ruby-ncurses/Makefile b/devel/ruby-ncurses/Makefile
index 7cfdf4a2938..1edd1e67560 100644
--- a/devel/ruby-ncurses/Makefile
+++ b/devel/ruby-ncurses/Makefile
@@ -1,25 +1,36 @@
-# $NetBSD: Makefile,v 1.7 2008/04/04 15:30:00 jlam Exp $
+# $NetBSD: Makefile,v 1.8 2010/09/10 06:02:57 taca Exp $
-DISTNAME= ncurses-ruby-1.1
-PKGNAME= ${RUBY_PKGPREFIX}-${GEM_NAME}
-PKGREVISION= 1
+DISTNAME= ncurses-ruby-${VER}
+PKGNAME= ${RUBY_PKGPREFIX}-ncurses-${VER}
CATEGORIES= devel
MASTER_SITES= http://download.berlios.de/ncurses-ruby/
EXTRACT_SUFX= .tar.bz2
+LICENSE= gnu-lgpl-v2.1 OR gnu-lgpl-v3
MAINTAINER= pkgsrc-users@NetBSD.org
HOMEPAGE= http://ncurses-ruby.berlios.de/
COMMENT= Ruby interface to ncurses
-USE_NCURSES= yes # mouse functions
-GEM_NAME= ${DISTNAME:S/-ruby//}
-GEM_BUILD= gemspec
-GEM_CLEANBUILD= Makefile *.o ncurses_bin.${RUBY_DLEXT} mkmf.log
+PKG_DESTDIR_SUPPORT?= user-destdir
-post-extract:
- ${RUN} cp ${FILESDIR}/gemspec ${GEM_SPECFILE}
+VER= 1.2.4
+USE_NCURSES= YES # mouse functions
+USE_RUBY_EXTCONF= YES
-.include "../../misc/rubygems/rubygem.mk"
+DOCS= COPYING Changes MANIFEST README THANKS TODO VERSION
+DOCDIR= ${RUBY_DOC}/ncurses
+EGDIR= ${RUBY_EG}/ncurses
+INSTALLATION_DIRS+= ${DOCDIR} ${EGDIR}
+REPLACE_RUBY_DIRS= examples
+PLIST_SUBST+= DOCDIR=${DOCDIR} EGDIR=${EGDIR}
+
+post-install:
+.for f in ${DOCS}
+ ${INSTALL_DATA} ${WRKSRC}/${f} ${DESTDIR}${PREFIX}/${DOCDIR}
+.endfor
+ ${INSTALL_DATA} ${WRKSRC}/examples/* ${DESTDIR}${PREFIX}/${EGDIR}
+
+.include "../../lang/ruby/modules.mk"
.include "../../devel/ncurses/buildlink3.mk"
.include "../../mk/bsd.pkg.mk"
diff --git a/devel/ruby-ncurses/PLIST b/devel/ruby-ncurses/PLIST
index 0d64e1d108d..a73616a29e8 100644
--- a/devel/ruby-ncurses/PLIST
+++ b/devel/ruby-ncurses/PLIST
@@ -1,29 +1,19 @@
-@comment $NetBSD: PLIST,v 1.5 2009/06/14 18:48:17 joerg Exp $
-${GEM_HOME}/cache/ncurses-${PKGVERSION}.gem
-${GEM_LIBDIR}/COPYING
-${GEM_LIBDIR}/Changes
-${GEM_LIBDIR}/MANIFEST
-${GEM_LIBDIR}/README
-${GEM_LIBDIR}/THANKS
-${GEM_LIBDIR}/TODO
-${GEM_LIBDIR}/VERSION
-${GEM_LIBDIR}/examples/LICENSES_for_examples
-${GEM_LIBDIR}/examples/example.rb
-${GEM_LIBDIR}/examples/form.rb
-${GEM_LIBDIR}/examples/form2.rb
-${GEM_LIBDIR}/examples/hello_ncurses.rb
-${GEM_LIBDIR}/examples/rain.rb
-${GEM_LIBDIR}/examples/read_line.rb
-${GEM_LIBDIR}/examples/tclock.rb
-${GEM_LIBDIR}/examples/test_scanw.rb
-${GEM_LIBDIR}/extconf.rb
-${GEM_LIBDIR}/form_wrap.c
-${GEM_LIBDIR}/form_wrap.h
-${GEM_LIBDIR}/lib/ncurses.rb
-${GEM_LIBDIR}/lib/ncurses_bin.${RUBY_DLEXT}
-${GEM_LIBDIR}/make_dist.rb
-${GEM_LIBDIR}/ncurses_wrap.c
-${GEM_LIBDIR}/ncurses_wrap.h
-${GEM_LIBDIR}/panel_wrap.c
-${GEM_LIBDIR}/panel_wrap.h
-${GEM_HOME}/specifications/ncurses-${PKGVERSION}.gemspec
+@comment $NetBSD: PLIST,v 1.6 2010/09/10 06:02:57 taca Exp $
+${RUBY_VENDORLIB}/ncurses.rb
+${RUBY_VENDORARCHLIB}/ncurses_bin.${RUBY_DLEXT}
+${DOCDIR}/COPYING
+${DOCDIR}/Changes
+${DOCDIR}/MANIFEST
+${DOCDIR}/README
+${DOCDIR}/THANKS
+${DOCDIR}/TODO
+${DOCDIR}/VERSION
+${EGDIR}/LICENSES_for_examples
+${EGDIR}/example.rb
+${EGDIR}/form.rb
+${EGDIR}/form2.rb
+${EGDIR}/hello_ncurses.rb
+${EGDIR}/rain.rb
+${EGDIR}/read_line.rb
+${EGDIR}/tclock.rb
+${EGDIR}/test_scanw.rb
diff --git a/devel/ruby-ncurses/distinfo b/devel/ruby-ncurses/distinfo
index 958ccff36e4..710dda954da 100644
--- a/devel/ruby-ncurses/distinfo
+++ b/devel/ruby-ncurses/distinfo
@@ -1,5 +1,8 @@
-$NetBSD: distinfo,v 1.3 2007/03/17 16:05:02 taca Exp $
+$NetBSD: distinfo,v 1.4 2010/09/10 06:02:57 taca Exp $
-SHA1 (ncurses-ruby-1.1.tar.bz2) = f50a6eaec836845cdebd116760ab0e1ce5c1d75b
-RMD160 (ncurses-ruby-1.1.tar.bz2) = d9076cbbc28046d5017203049f4c0e026403ebc4
-Size (ncurses-ruby-1.1.tar.bz2) = 46327 bytes
+SHA1 (ncurses-ruby-1.2.4.tar.bz2) = b34ff1cf1147ab551855a5b2c63d2a034119fee2
+RMD160 (ncurses-ruby-1.2.4.tar.bz2) = 8f08b6c919abdcd6c86fc9d08e293ca3e79ec010
+Size (ncurses-ruby-1.2.4.tar.bz2) = 50858 bytes
+SHA1 (patch-aa) = e03d5f04364a24ebdbb7c1ae888ead7fb65e8e9b
+SHA1 (patch-ab) = 53d40b6a1e2e12826249dba3c9d9c7c3d1d39afb
+SHA1 (patch-ac) = fc0c8b3db447222189d0bdd3d950574d93103b09
diff --git a/devel/ruby-ncurses/files/gemspec b/devel/ruby-ncurses/files/gemspec
deleted file mode 100644
index 5e9bc3193c1..00000000000
--- a/devel/ruby-ncurses/files/gemspec
+++ /dev/null
@@ -1,25 +0,0 @@
-require "rubygems"
-
-PLUGIN = "ncurses"
-NAME = "ncurses"
-VERSION = "1.1"
-AUTHOR = "Tobias Peters"
-EMAIL = "t-peters@users.berlios.de"
-HOMEPAGE = "http://ncurses-ruby.berlios.de/"
-SUMMARY = "This wrapper provides access to the functions, macros, global variables and constants of the ncurses library. These are mapped to a Ruby Module named \"Ncurses\": Functions and external variables are implemented as singleton functions of the Module Ncurses."
-
-spec = Gem::Specification.new do |s|
- s.name = NAME
- s.email = EMAIL
- s.author = AUTHOR
- s.version = VERSION
- s.summary = SUMMARY
- s.platform = Gem::Platform::RUBY
- s.has_rdoc = false
- s.homepage = HOMEPAGE
- s.description = SUMMARY
- s.autorequire = PLUGIN
- s.require_paths = ["lib"]
- s.files = Dir.glob("[A-Z]*") + Dir.glob("*.{c,h,rb}") + Dir.glob("{examples,lib}/**/*")
- s.extensions = "extconf.rb"
-end
diff --git a/devel/ruby-ncurses/patches/patch-aa b/devel/ruby-ncurses/patches/patch-aa
new file mode 100644
index 00000000000..d7f70dd9c81
--- /dev/null
+++ b/devel/ruby-ncurses/patches/patch-aa
@@ -0,0 +1,249 @@
+$NetBSD: patch-aa,v 1.3 2010/09/10 06:02:58 taca Exp $
+
+--- ncurses_wrap.c.orig 2009-07-31 10:52:36.000000000 +0000
++++ ncurses_wrap.c
+@@ -475,7 +475,7 @@ static VALUE rbncurs_curses_version(){re
+ static VALUE rbncurs_define_key(VALUE dummy, VALUE definition, VALUE keycode)
+ {
+ return INT2NUM(define_key((definition != Qnil)
+- ? STR2CSTR(definition)
++ ? StringValuePtr(definition)
+ : (char*)(NULL),
+ NUM2INT(keycode)));
+ }
+@@ -580,10 +580,10 @@ static VALUE rbncurs_addchstr(VALUE dumm
+ return return_value;
+ }
+ static VALUE rbncurs_addnstr(VALUE dummy, VALUE arg1, VALUE arg2) {
+- return INT2NUM(addnstr(STR2CSTR(arg1), NUM2INT(arg2)));
++ return INT2NUM(addnstr(StringValuePtr(arg1), NUM2INT(arg2)));
+ }
+ static VALUE rbncurs_addstr(VALUE dummy, VALUE arg1) {
+- return INT2NUM(addstr(STR2CSTR(arg1)));
++ return INT2NUM(addstr(StringValuePtr(arg1)));
+ }
+ static VALUE rbncurs_attroff(VALUE dummy, VALUE arg1) {
+ return INT2NUM(attroff(NUM2ULONG(arg1)));
+@@ -1011,10 +1011,10 @@ static VALUE rbncurs_insertln(VALUE dumm
+ return INT2NUM(insertln());
+ }
+ static VALUE rbncurs_insnstr(VALUE dummy, VALUE arg1, VALUE arg2) {
+- return INT2NUM(insnstr(STR2CSTR(arg1), NUM2INT(arg2)));
++ return INT2NUM(insnstr(StringValuePtr(arg1), NUM2INT(arg2)));
+ }
+ static VALUE rbncurs_insstr(VALUE dummy, VALUE arg1) {
+- return INT2NUM(insstr(STR2CSTR(arg1)));
++ return INT2NUM(insstr(StringValuePtr(arg1)));
+ }
+ #ifdef HAVE_INTRFLUSH
+ static VALUE rbncurs_intrflush(VALUE dummy, VALUE arg1, VALUE arg2) {
+@@ -1070,10 +1070,10 @@ static VALUE rbncurs_mvaddchstr(VALUE du
+ return return_value;
+ }
+ static VALUE rbncurs_mvaddnstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4) {
+- return INT2NUM(mvaddnstr(NUM2INT(arg1), NUM2INT(arg2), STR2CSTR(arg3), NUM2INT(arg4)));
++ return INT2NUM(mvaddnstr(NUM2INT(arg1), NUM2INT(arg2), StringValuePtr(arg3), NUM2INT(arg4)));
+ }
+ static VALUE rbncurs_mvaddstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3) {
+- return INT2NUM(mvaddstr(NUM2INT(arg1), NUM2INT(arg2), STR2CSTR(arg3)));
++ return INT2NUM(mvaddstr(NUM2INT(arg1), NUM2INT(arg2), StringValuePtr(arg3)));
+ }
+ #ifdef HAVE_MVCHGAT
+ static VALUE rbncurs_mvchgat(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4, VALUE arg5, VALUE arg6) {
+@@ -1106,10 +1106,10 @@ static VALUE rbncurs_mvinsch(VALUE dummy
+ return INT2NUM(mvinsch(NUM2INT(arg1), NUM2INT(arg2), NUM2ULONG(arg3)));
+ }
+ static VALUE rbncurs_mvinsnstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4) {
+- return INT2NUM(mvinsnstr(NUM2INT(arg1), NUM2INT(arg2), STR2CSTR(arg3), NUM2INT(arg4)));
++ return INT2NUM(mvinsnstr(NUM2INT(arg1), NUM2INT(arg2), StringValuePtr(arg3), NUM2INT(arg4)));
+ }
+ static VALUE rbncurs_mvinsstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3) {
+- return INT2NUM(mvinsstr(NUM2INT(arg1), NUM2INT(arg2), STR2CSTR(arg3)));
++ return INT2NUM(mvinsstr(NUM2INT(arg1), NUM2INT(arg2), StringValuePtr(arg3)));
+ }
+ #ifdef HAVE_MVVLINE
+ static VALUE rbncurs_mvvline(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4) {
+@@ -1137,10 +1137,10 @@ static VALUE rbncurs_mvwaddchstr(VALUE d
+ return return_value;
+ }
+ static VALUE rbncurs_mvwaddnstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4, VALUE arg5) {
+- return INT2NUM(mvwaddnstr(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3), STR2CSTR(arg4), NUM2INT(arg5)));
++ return INT2NUM(mvwaddnstr(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3), StringValuePtr(arg4), NUM2INT(arg5)));
+ }
+ static VALUE rbncurs_mvwaddstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4) {
+- return INT2NUM(mvwaddstr(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3), STR2CSTR(arg4)));
++ return INT2NUM(mvwaddstr(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3), StringValuePtr(arg4)));
+ }
+ #ifdef HAVE_MVWCHGAT
+ static VALUE rbncurs_mvwchgat(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4, VALUE arg5, VALUE arg6, VALUE arg7) {
+@@ -1171,10 +1171,10 @@ static VALUE rbncurs_mvwinsch(VALUE dumm
+ return INT2NUM(mvwinsch(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3), NUM2ULONG(arg4)));
+ }
+ static VALUE rbncurs_mvwinsnstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4, VALUE arg5) {
+- return INT2NUM(mvwinsnstr(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3), STR2CSTR(arg4), NUM2INT(arg5)));
++ return INT2NUM(mvwinsnstr(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3), StringValuePtr(arg4), NUM2INT(arg5)));
+ }
+ static VALUE rbncurs_mvwinsstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4) {
+- return INT2NUM(mvwinsstr(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3), STR2CSTR(arg4)));
++ return INT2NUM(mvwinsstr(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3), StringValuePtr(arg4)));
+ }
+ #ifdef HAVE_MVWVLINE
+ static VALUE rbncurs_mvwvline(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3, VALUE arg4, VALUE arg5) {
+@@ -1238,7 +1238,7 @@ static VALUE rbncurs_prefresh(VALUE dumm
+ }
+ #ifdef HAVE_PUTP
+ static VALUE rbncurs_putp(VALUE dummy, VALUE arg1) {
+- return INT2NUM(putp(STR2CSTR(arg1)));
++ return INT2NUM(putp(StringValuePtr(arg1)));
+ }
+ #endif
+ #ifdef HAVE_QIFLUSH
+@@ -1271,12 +1271,12 @@ static VALUE rbncurs_savetty(VALUE dummy
+ }
+ #ifdef HAVE_SCR_DUMP
+ static VALUE rbncurs_scr_dump(VALUE dummy, VALUE arg1) {
+- return INT2NUM(scr_dump(STR2CSTR(arg1)));
++ return INT2NUM(scr_dump(StringValuePtr(arg1)));
+ }
+ #endif
+ #ifdef HAVE_SCR_INIT
+ static VALUE rbncurs_scr_init(VALUE dummy, VALUE arg1) {
+- return INT2NUM(scr_init(STR2CSTR(arg1)));
++ return INT2NUM(scr_init(StringValuePtr(arg1)));
+ }
+ #endif
+ static VALUE rbncurs_scrl(VALUE dummy, VALUE arg1) {
+@@ -1290,12 +1290,12 @@ static VALUE rbncurs_scrollok(VALUE dumm
+ }
+ #ifdef HAVE_SCR_RESTORE
+ static VALUE rbncurs_scr_restore(VALUE dummy, VALUE arg1) {
+- return INT2NUM(scr_restore(STR2CSTR(arg1)));
++ return INT2NUM(scr_restore(StringValuePtr(arg1)));
+ }
+ #endif
+ #ifdef HAVE_SCR_SET
+ static VALUE rbncurs_scr_set(VALUE dummy, VALUE arg1) {
+- return INT2NUM(scr_set(STR2CSTR(arg1)));
++ return INT2NUM(scr_set(StringValuePtr(arg1)));
+ }
+ #endif
+ static VALUE rbncurs_setscrreg(VALUE dummy, VALUE arg1, VALUE arg2) {
+@@ -1352,7 +1352,7 @@ static VALUE rbncurs_slk_restore(VALUE d
+ return INT2NUM(slk_restore());
+ }
+ static VALUE rbncurs_slk_set(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3) {
+- return INT2NUM(slk_set(NUM2INT(arg1), STR2CSTR(arg2), NUM2INT(arg3)));
++ return INT2NUM(slk_set(NUM2INT(arg1), StringValuePtr(arg2), NUM2INT(arg3)));
+ }
+ static VALUE rbncurs_slk_touch(VALUE dummy) {
+ return INT2NUM(slk_touch());
+@@ -1383,17 +1383,17 @@ static VALUE rbncurs_termname(VALUE dumm
+ }
+ #ifdef HAVE_TIGETFLAG
+ static VALUE rbncurs_tigetflag(VALUE dummy, VALUE arg1) {
+- return INT2NUM(tigetflag(STR2CSTR(arg1)));
++ return INT2NUM(tigetflag(StringValuePtr(arg1)));
+ }
+ #endif
+ #ifdef HAVE_TIGETNUM
+ static VALUE rbncurs_tigetnum(VALUE dummy, VALUE arg1) {
+- return INT2NUM(tigetnum(STR2CSTR(arg1)));
++ return INT2NUM(tigetnum(StringValuePtr(arg1)));
+ }
+ #endif
+ #ifdef HAVE_TIGETSTR
+ static VALUE rbncurs_tigetstr(VALUE dummy, VALUE arg1) {
+- return rb_str_new2(tigetstr(STR2CSTR(arg1)));
++ return rb_str_new2(tigetstr(StringValuePtr(arg1)));
+ }
+ #endif
+ static VALUE rbncurs_timeout(VALUE dummy, VALUE arg1) {
+@@ -1438,10 +1438,10 @@ static VALUE rbncurs_waddchstr(VALUE dum
+ return return_value;
+ }
+ static VALUE rbncurs_waddnstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3) {
+- return INT2NUM(waddnstr(get_window(arg1), STR2CSTR(arg2), NUM2INT(arg3)));
++ return INT2NUM(waddnstr(get_window(arg1), StringValuePtr(arg2), NUM2INT(arg3)));
+ }
+ static VALUE rbncurs_waddstr(VALUE dummy, VALUE arg1, VALUE arg2) {
+- return INT2NUM(waddstr(get_window(arg1), STR2CSTR(arg2)));
++ return INT2NUM(waddstr(get_window(arg1), StringValuePtr(arg2)));
+ }
+ static VALUE rbncurs_wattron(VALUE dummy, VALUE arg1, VALUE arg2) {
+ return INT2NUM(wattron(get_window(arg1), NUM2INT(arg2)));
+@@ -1514,10 +1514,10 @@ static VALUE rbncurs_winsertln(VALUE dum
+ return INT2NUM(winsertln(get_window(arg1)));
+ }
+ static VALUE rbncurs_winsnstr(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3) {
+- return INT2NUM(winsnstr(get_window(arg1), STR2CSTR(arg2), NUM2INT(arg3)));
++ return INT2NUM(winsnstr(get_window(arg1), StringValuePtr(arg2), NUM2INT(arg3)));
+ }
+ static VALUE rbncurs_winsstr(VALUE dummy, VALUE arg1, VALUE arg2) {
+- return INT2NUM(winsstr(get_window(arg1), STR2CSTR(arg2)));
++ return INT2NUM(winsstr(get_window(arg1), StringValuePtr(arg2)));
+ }
+ static VALUE rbncurs_wmove(VALUE dummy, VALUE arg1, VALUE arg2, VALUE arg3) {
+ return INT2NUM(wmove(get_window(arg1), NUM2INT(arg2), NUM2INT(arg3)));
+@@ -1619,7 +1619,7 @@ static VALUE rbncurs_unctrl(VALUE dummy,
+ { return rb_str_new2(unctrl(NUM2ULONG(ch))); }
+ static VALUE rbncurs_newterm(VALUE dummy, VALUE rb_type, VALUE rb_outfd, VALUE rb_infd)
+ {
+- char * type = (rb_type == Qnil) ? (char*)0 : STR2CSTR(rb_type);
++ char * type = (rb_type == Qnil) ? (char*)0 : StringValuePtr(rb_type);
+ int outfd = NUM2INT(rb_funcall(rb_outfd, rb_intern("to_i"), 0));
+ int infd = NUM2INT(rb_funcall(rb_infd, rb_intern("to_i"), 0));
+ VALUE rb_screen =
+@@ -2277,7 +2277,7 @@ static VALUE rbncurs_wmouse_trafo(VALUE
+ #ifdef HAVE_MCPRINT
+ static VALUE rbncurs_mcprint(VALUE dummy, VALUE data, VALUE len)
+ {
+- return INT2NUM(mcprint(STR2CSTR(data), NUM2INT(len)));
++ return INT2NUM(mcprint(StringValuePtr(data), NUM2INT(len)));
+ }
+ #endif
+ #ifdef HAVE_HAS_KEY
+@@ -2373,14 +2373,15 @@ static VALUE rbncurs_setsyx(VALUE dummy,
+
+ static VALUE rbncurs_wprintw(int argc, VALUE * argv, VALUE dummy)
+ {
++ VALUE v;
++
+ if (argc < 2) {
+ rb_raise(rb_eArgError, "function needs at least 2 arguments: a WINDOW"
+ " and a String");
+ return Qnil;
+ }
+- wprintw(get_window(argv[0]), "%s",
+- STR2CSTR(rb_funcall3(rb_mKernel, rb_intern("sprintf"), argc-1,
+- argv + 1)));
++ v = rb_funcall3(rb_mKernel, rb_intern("sprintf"), argc-1, argv + 1);
++ wprintw(get_window(argv[0]), "%s", StringValuePtr(v));
+ return Qnil;
+ }
+
+@@ -2394,14 +2395,14 @@ static VALUE rbncurs_tracef(int argc, VA
+ return Qnil;
+ }
+ _tracef("%s",
+- STR2CSTR(funcall3(rb_mKernel, rb_intern("sprintf"), argc, argv)));
++ StringValuePtr(funcall3(rb_mKernel, rb_intern("sprintf"), argc, argv)));
+ return Qnil;
+ }
+ #endif /* HAVE__TRACEF */
+ #ifdef HAVE__TRACEDUMP
+ static VALUE rbncurs_tracedump(VALUE dummy, VALUE rb_label, VALUE rb_win)
+ {
+- _tracedump(STR2CSTR(rb_label), get_window(rb_win));
++ _tracedump(StringValuePtr(rb_label), get_window(rb_win));
+ }
+ #endif /* HAVE__TRACEDUMP */
+ #ifdef HAVE__TRACEATTR
+@@ -2706,7 +2707,7 @@ void init_SCREEN_methods(void)
+
+ #ifdef HAVE_LOCALE_H
+ static VALUE rbncurs_setlocale(VALUE dummy, VALUE category, VALUE locale)
+-{ return rb_str_new2(setlocale(NUM2INT(category), STR2CSTR(locale)));}
++{ return rb_str_new2(setlocale(NUM2INT(category), StringValuePtr(locale)));}
+ #endif
+
+ static void init_safe_functions(void)
diff --git a/devel/ruby-ncurses/patches/patch-ab b/devel/ruby-ncurses/patches/patch-ab
new file mode 100644
index 00000000000..53a9913f238
--- /dev/null
+++ b/devel/ruby-ncurses/patches/patch-ab
@@ -0,0 +1,56 @@
+$NetBSD: patch-ab,v 1.1 2010/09/10 06:02:58 taca Exp $
+
+--- form_wrap.c.orig 2009-07-31 10:52:36.000000000 +0000
++++ form_wrap.c
+@@ -618,12 +618,14 @@ static VALUE rbncurs_c_set_field_type(in
+ rb_raise(rb_eArgError, "TYPE_ENUM requires three additional arguments");
+ }
+ else {
++ VALUE v;
+ int n = rbncurs_array_length(arg3);
+ /* Will ncurses free this array of strings in free_field()? */
+ char** list = ALLOC_N(char*, n+1);
+ int i;
+ for (i = 0; i < n; i++) {
+- list[i] = STR2CSTR(rb_ary_entry(arg3, (long)i));
++ v = rb_ary_entry(arg3, (long)i);
++ list[i] = StringValuePtr(v);
+ }
+ list[n] = NULL;
+ return INT2NUM(set_field_type(field, ftype,
+@@ -652,7 +654,7 @@ static VALUE rbncurs_c_set_field_type(in
+ if (argc != 2)
+ rb_raise(rb_eArgError, "TYPE_REGEXP requires one additional argument");
+ return INT2NUM(set_field_type(field, ftype,
+- STR2CSTR(arg3)));
++ StringValue(arg3)));
+ }
+ else if (ftype == TYPE_IPV4){
+ if (argc != 1)
+@@ -740,7 +742,7 @@ static VALUE rbncurs_m_field_pad(VALUE d
+ */
+ static VALUE rbncurs_c_set_field_buffer(VALUE rb_field, VALUE buf, VALUE value) {
+ FIELD* field = get_field(rb_field);
+- return INT2NUM(set_field_buffer(field, NUM2INT(buf), STR2CSTR(value)));
++ return INT2NUM(set_field_buffer(field, NUM2INT(buf), StringValuePtr(value)));
+ }
+ static VALUE rbncurs_m_set_field_buffer(VALUE dummy, VALUE rb_field, VALUE buf, VALUE value)
+ { return rbncurs_c_set_field_buffer(rb_field, buf, value); }
+@@ -1044,13 +1046,15 @@ static VALUE rbncurs_m_form_opts(VALUE d
+ * form_requestname
+ */
+ static VALUE rbncurs_c_form_request_name(VALUE request) {
+- return rb_str_new2(form_request_name(NUM2INT(request)));
++ const char *s;
++ s = form_request_name(NUM2INT(request));
++ return rb_str_new2(s);
+ }
+ static VALUE rbncurs_m_form_request_name(VALUE dummy, VALUE request)
+ { return rbncurs_c_form_request_name(request); }
+
+ static VALUE rbncurs_c_form_request_by_name(VALUE name) {
+- return INT2NUM(form_request_by_name(STR2CSTR(name)));
++ return INT2NUM(form_request_by_name(StringValuePtr(name)));
+ }
+ static VALUE rbncurs_m_form_request_by_name(VALUE dummy, VALUE name)
+ { return rbncurs_c_form_request_by_name(name); }
diff --git a/devel/ruby-ncurses/patches/patch-ac b/devel/ruby-ncurses/patches/patch-ac
new file mode 100644
index 00000000000..8fed22ce5e1
--- /dev/null
+++ b/devel/ruby-ncurses/patches/patch-ac
@@ -0,0 +1,52 @@
+$NetBSD: patch-ac,v 1.1 2010/09/10 06:02:58 taca Exp $
+
+Use modern Ruby API.
+
+--- menu_wrap.c.orig 2009-07-31 10:52:36.000000000 +0000
++++ menu_wrap.c
+@@ -370,7 +370,7 @@ static VALUE rbncurs_m_item_index(VALUE
+ * Item creation/destruction functions - mitem_new(3X) man page
+ */
+ static VALUE rbncurs_m_new_item(VALUE dummy, VALUE name, VALUE description)
+-{ return wrap_item(new_item(STR2CSTR(name), STR2CSTR(description))); }
++{ return wrap_item(new_item(StringValuePtr(name), StringValuePtr(description))); }
+
+ static VALUE rbncurs_c_free_item(VALUE rb_item)
+ {
+@@ -661,14 +661,16 @@ static VALUE rbncurs_m_menu_opts(VALUE d
+ */
+ static VALUE rbncurs_c_menu_request_name(VALUE request)
+ {
+- return rb_str_new2(menu_request_name(NUM2INT(request)));
++ const char *s;
++ s = menu_request_name(NUM2INT(request));
++ return rb_str_new2(s);
+ }
+ static VALUE rbncurs_m_menu_request_name(VALUE dummy, VALUE request)
+ { return rbncurs_c_menu_request_name(request); }
+
+ static VALUE rbncurs_c_menu_request_by_name(VALUE name)
+ {
+- return INT2NUM(menu_request_by_name(STR2CSTR(name)));
++ return INT2NUM(menu_request_by_name(StringValuePtr(name)));
+ }
+ static VALUE rbncurs_m_menu_request_by_name(VALUE dummy, VALUE name)
+ { return rbncurs_c_menu_request_by_name(name); }
+@@ -907,7 +909,7 @@ static VALUE rbncurs_m_menu_format(VALUE
+ static VALUE rbncurs_c_set_menu_mark(VALUE rb_menu, VALUE value)
+ {
+ MENU *menu = get_menu(rb_menu);
+- return INT2NUM(set_menu_mark(menu, STR2CSTR(value)));
++ return INT2NUM(set_menu_mark(menu, StringValuePtr(value)));
+ }
+ static VALUE rbncurs_m_set_menu_mark(VALUE dummy, VALUE rb_field, VALUE value)
+ { return rbncurs_c_set_menu_mark(rb_field, value); }
+@@ -927,7 +929,7 @@ static VALUE rbncurs_m_menu_mark(VALUE d
+ static VALUE rbncurs_c_set_menu_pattern(VALUE rb_menu, VALUE pattern)
+ {
+ MENU *menu = get_menu(rb_menu);
+- return INT2NUM(set_menu_pattern(menu, STR2CSTR(pattern)));
++ return INT2NUM(set_menu_pattern(menu, StringValuePtr(pattern)));
+ }
+ static VALUE rbncurs_m_set_menu_pattern(VALUE dummy, VALUE rb_menu, VALUE pattern)
+ { return rbncurs_c_set_menu_pattern(rb_menu, pattern); }