Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 10 Mar 2010 02:00:46 GMT
From:      "Aaron D. Gifford" <astounding@tambler.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   ports/144607: [patch] Get www/ruby-fcgi working under Ruby 1.9.1
Message-ID:  <201003100200.o2A20kdc087132@www.freebsd.org>
Resent-Message-ID: <201003100210.o2A2A1JH023884@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         144607
>Category:       ports
>Synopsis:       [patch] Get www/ruby-fcgi working under Ruby 1.9.1
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Mar 10 02:10:01 UTC 2010
>Closed-Date:
>Last-Modified:
>Originator:     Aaron D. Gifford
>Release:        FreeBSD 8
>Organization:
>Environment:
FreeBSD rubyfans.unite.everywhere.example.org 8.0-STABLE FreeBSD 8.0-STABLE #0: Wed Jan 27 19:46:39 MST 2010     root@rubyfans.unite.example.org:/usr/obj/usr/src/sys/RUBY.IS.SWEET  amd64

>Description:
The www/ruby-fcgi native (C) code uses some Ruby 1.8-isms that break under 1.9.  The fix is to update the C code so it works under 1.9 but add some macros so it still works under 1.8 as well.  It does require defining a new build variable to engage the macros under 1.8 (I chose RUBY_18, but that could be changed).

A patch is included.

A Ruby 1.9.1 fan hoping FreeBSD is soon more 1.9.1-friendly,
Aaron out.
>How-To-Repeat:

>Fix:
TWO PATCHES, one to the port Makefile, the other to ext/fcgi/fcgi.c:



PATCH TO FCGI.C:
================

--- ext/fcgi/fcgi.c.orig	2010-03-08 23:18:38.934686443 -0700
+++ ext/fcgi/fcgi.c	2010-03-08 23:20:16.669821883 -0700
@@ -17,6 +17,13 @@
 #include "fcgiapp.h"
 #endif
 
+#ifdef RUBY_18
+#define RSTRING_LEN(x) ((x)->len)
+#define RSTRING_PTR(x) ((x)->ptr)
+#define RARRAY_LEN(x) ((x)->len)
+#define RARRAY_PTR(x) ((x)->ptr)
+#endif
+
 static VALUE cFCGI;
 static VALUE eFCGIError;
 static VALUE cFCGIStream;
@@ -222,7 +229,7 @@
   rb_secure(4);
   Data_Get_Struct(self, FCGX_Stream, stream);
   str = rb_obj_as_string(str);
-  len = FCGX_PutStr(RSTRING(str)->ptr, RSTRING(str)->len, stream);
+  len = FCGX_PutStr(RSTRING_PTR(str), RSTRING_LEN(str), stream);
   if (len == EOF) CHECK_STREAM_ERROR(stream);
   return INT2NUM(len);
 }
@@ -271,8 +278,8 @@
   VALUE tmp;
   int i;
 
-  for (i=0; i<RARRAY(ary)->len; i++) {
-    tmp = RARRAY(ary)->ptr[i];
+  for (i=0; i<RARRAY_LEN(ary); i++) {
+    tmp = RARRAY_PTR(ary)[i];
     if (rb_inspecting_p(tmp)) {
       tmp = rb_str_new2("[...]");
     }
@@ -305,7 +312,7 @@
     }
     line = rb_obj_as_string(line);
     fcgi_stream_write(out, line);
-    if (RSTRING(line)->ptr[RSTRING(line)->len-1] != '\n') {
+    if (RSTRING_PTR(line)[RSTRING_LEN(line)-1] != '\n') {
       fcgi_stream_write(out, rb_default_rs);
     }
   }
@@ -379,7 +386,7 @@
     rb_str_cat(str, buff, strlen(buff));
     if (strchr(buff, '\n')) break;
   }
-  if (RSTRING(str)->len > 0)
+  if (RSTRING_LEN(str) > 0)
     return str;
   else
     return Qnil;




PATCH to the PORT Makefile to define RUBY_18:
=============================================


--- Makefile.orig	2010-03-08 23:15:44.555014059 -0700
+++ Makefile	2010-03-08 23:17:03.867500346 -0700
@@ -35,3 +35,8 @@
 .endif
 
 .include <bsd.port.mk>
+
+.if ${RUBY_VER} == "1.8"
+CFLAGS+=	-DRUBY_18
+.endif
+


>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003100200.o2A20kdc087132>