[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

ruby-1.8.5 and openssl and gcc 3.2

Bil Kleb

9/16/2006 8:54:00 PM

I'm trying to compile ruby-1.8.5 on a rather old Linux box,
and it's failing in ext/openssl,

gcc -I. -I../.. -I../../. -I../.././ext/openssl -DRUBY_EXTCONF_H=\"extconf.h\" -I/users/kleb/local/openssl/include -fPIC -g -O2 -c ossl_bio.c
ossl_bio.c: In function `ossl_obj2bio':
ossl_bio.c:23: called object is not a function
make: *** [ossl_bio.o] Error 1

Does this error look familiar to anyone?

21 if (TYPE(obj) == T_FILE) {
22 OpenFile *fptr;
> 23 GetOpenFile(obj, fptr);
24 rb_io_check_readable(fptr);
25 bio = BIO_new_fp(fptr->f, BIO_NOCLOSE);
26 }

As you can see, I tried supplying a fresh openssl (0.9.7k),
but the error didn't change.

Here's the state of gcc on this box,

gcc -v
Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/3.2/specs
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --disable-checking --host=i386-redhat-linux --with-system-zlib --enable-__cxa_atexit
Thread model: posix
gcc version 3.2 20020903 (Red Hat Linux 8.0 3.2-7)

Thanks,
--
Bil Kleb
http://fun3d.lar...
6 Answers

Nobuyoshi Nakada

9/17/2006 1:40:00 PM

0

Hi,

At Sun, 17 Sep 2006 06:06:16 +0900,
Bil Kleb wrote in [ruby-talk:214786]:
> ossl_bio.c: In function `ossl_obj2bio':
> ossl_bio.c:23: called object is not a function
> make: *** [ossl_bio.o] Error 1
>
> Does this error look familiar to anyone?
>
> 21 if (TYPE(obj) == T_FILE) {
> 22 OpenFile *fptr;
> > 23 GetOpenFile(obj, fptr);
> 24 rb_io_check_readable(fptr);
> 25 bio = BIO_new_fp(fptr->f, BIO_NOCLOSE);
> 26 }

Can't you show the preprocessed result?

$ gcc -I. -I../.. -I../../. -I../.././ext/openssl -DRUBY_EXTCONF_H=\"extconf.h\" -I/users/kleb/local/openssl/include -fPIC -g -O2 -E ossl_bio.c | sed -n /^ossl_obj2bio/,/^}/p

would show the corresponding portion.

--
Nobu Nakada

Bil Kleb

9/17/2006 2:13:00 PM

0

Nobuyoshi Nakada wrote:
> Hi,

Hello.

> At Sun, 17 Sep 2006 06:06:16 +0900,
> Bil Kleb wrote in [ruby-talk:214786]:
>> ossl_bio.c: In function `ossl_obj2bio':
>> ossl_bio.c:23: called object is not a function
>> make: *** [ossl_bio.o] Error 1
>
> Can't you show the preprocessed result?

ossl_obj2bio(VALUE obj)
{
BIO *bio;

if (rb_type((VALUE)(obj)) == 0x0e) {
OpenFile *fptr;
rb_io_check_closed((fptr) = ".rnd"(rb_io_taint_check(obj))->fptr);
rb_io_check_readable(fptr);
bio = BIO_new_fp(fptr->f, 0x00);
}
else {
rb_string_value(&(obj));
bio = BIO_new_mem_buf(((struct RString*)(obj))->ptr, ((struct RString*)(obj))->len);
}
if (!bio) ossl_raise(eOSSLError, ((void *)0));

return bio;
}

Regards,
--
Bil Kleb
http://fun3d.lar...

Nobuyoshi Nakada

9/17/2006 3:15:00 PM

0

Hi,

At Sun, 17 Sep 2006 23:21:09 +0900,
Bil Kleb wrote in [ruby-talk:214845]:
> if (rb_type((VALUE)(obj)) == 0x0e) {
> OpenFile *fptr;
> rb_io_check_closed((fptr) = ".rnd"(rb_io_taint_check(obj))->fptr);

This line has to be:

rb_io_check_closed((fptr) = ((struct RFile*)(rb_io_taint_check(obj)))->fptr);

In ext/openssl/ossl.h:
/*
* OpenSSL has defined RFILE and Ruby has defined RFILE - so undef it!
*/
#if defined(RFILE) /*&& !defined(OSSL_DEBUG)*/
# undef RFILE
#endif
#include <ruby.h>
#include <rubyio.h>

RFILE seems redefined somewhere after here.

--
Nobu Nakada

Bil Kleb

9/17/2006 3:50:00 PM

0

Nobuyoshi Nakada wrote:
> Hi,
>
> At Sun, 17 Sep 2006 23:21:09 +0900,
> Bil Kleb wrote in [ruby-talk:214845]:
>> if (rb_type((VALUE)(obj)) == 0x0e) {
>> OpenFile *fptr;
>> rb_io_check_closed((fptr) = ".rnd"(rb_io_taint_check(obj))->fptr);
>
> This line has to be:
>
> rb_io_check_closed((fptr) = ((struct RFile*)(rb_io_taint_check(obj)))->fptr);
>
> In ext/openssl/ossl.h:
> /*
> * OpenSSL has defined RFILE and Ruby has defined RFILE - so undef it!
> */
> #if defined(RFILE) /*&& !defined(OSSL_DEBUG)*/
> # undef RFILE
> #endif
> #include <ruby.h>
> #include <rubyio.h>

I have this in my ossl.h too:

20 /*
21 * OpenSSL has defined RFILE and Ruby has defined RFILE - so undef it!
22 */
23 #if defined(RFILE) /*&& !defined(OSSL_DEBUG)*/
24 # undef RFILE
25 #endif
26 #include <ruby.h>
27 #include <rubyio.h>

> RFILE seems redefined somewhere after here.

But I can't find another RFILE in /ext/openssl or below...

$ cd /ext/openssl && grep -nr RFILE *
ossl.h:21:* OpenSSL has defined RFILE and Ruby has defined RFILE - so undef it!
ossl.h:23:#if defined(RFILE) /*&& !defined(OSSL_DEBUG)*/
ossl.h:24:# undef RFILE

Suggestions?

I tried removing the comment from the "#if defined" line
and just putting "#undef RFILE' with no apparent effect.

Thanks,
--
Bil Kleb
http://fun3d.lar...

Nobuyoshi Nakada

9/18/2006 2:53:00 AM

0

Hi,

At Mon, 18 Sep 2006 01:06:07 +0900,
Bil Kleb wrote in [ruby-talk:214856]:
> > RFILE seems redefined somewhere after here.
>
> But I can't find another RFILE in /ext/openssl or below...

`Somewhere' inside <openssl/*.h> below it.

> $ cd /ext/openssl && grep -nr RFILE *
> ossl.h:21:* OpenSSL has defined RFILE and Ruby has defined RFILE - so undef it!
> ossl.h:23:#if defined(RFILE) /*&& !defined(OSSL_DEBUG)*/
> ossl.h:24:# undef RFILE
>
> Suggestions?

Moving the code block after #include lines of openssl. Try
this patch.


Index: ext/openssl/ossl.h
===================================================================
RCS file: /cvs/ruby/src/ruby/ext/openssl/ossl.h,v
retrieving revision 1.14.2.4
diff -p -u -2 -r1.14.2.4 ossl.h
--- ext/openssl/ossl.h 27 Jul 2006 07:45:33 -0000 1.14.2.4
+++ ext/openssl/ossl.h 18 Sep 2006 02:49:17 -0000
@@ -16,14 +16,13 @@
#if defined(__cplusplus)
extern "C" {
+#elif 0
+}
#endif

/*
-* OpenSSL has defined RFILE and Ruby has defined RFILE - so undef it!
-*/
-#if defined(RFILE) /*&& !defined(OSSL_DEBUG)*/
-# undef RFILE
-#endif
-#include <ruby.h>
-#include <rubyio.h>
+ *_FILE_OFFSET_BITS needs to be defined before some system headers on
+ * Solaris.
+ */
+#include "config.h"

/*
@@ -70,4 +69,13 @@ extern "C" {

/*
+* OpenSSL has defined RFILE and Ruby has defined RFILE - so undef it!
+*/
+#if defined(RFILE) /*&& !defined(OSSL_DEBUG)*/
+# undef RFILE
+#endif
+#include <ruby.h>
+#include <rubyio.h>
+
+/*
* Common Module
*/
@@ -212,5 +220,7 @@ void ossl_debug(const char *, ...);
void Init_openssl(void);

-#if defined(__cplusplus)
+#if 0
+{
+#elif defined(__cplusplus)
}
#endif


--
Nobu Nakada

Bil Kleb

9/18/2006 10:12:00 AM

0

Nobuyoshi Nakada wrote:
> Hi,

Hello.

> Moving the code block after #include lines of openssl. Try
> this patch.

Works.

Thanks,
--
Bil Kleb
http://fun3d.lar...