From 4efb1f167e3f3f083f4f7ac92166f71ccf7a0b5b Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Wed, 2 Jul 2014 11:58:34 -0400 Subject: [PATCH] Applying Chris's fixes and some of my own. --- configure.in | 13 ++++++++++--- elf.h | 42 ++++++++++++++++++++++++++++++++++++++++++ ext/nkf/nkf-utf8/nkf.h | 5 +++++ signal.c | 4 ++-- 4 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 elf.h diff --git a/configure.in b/configure.in index 73c87b7..f4f6a23 100644 --- a/configure.in +++ b/configure.in @@ -2121,11 +2121,14 @@ if test "$with_dln_a_out" != yes; then [haiku*], [ AS_CASE(["$target_cpu"], [powerpc*], [ : ${LDSHARED="ld -xms"} - DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o' + DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lroot glue-noinit.a init_term_dyn.o start_dyn.o' ], [i586*], [ - : ${LDSHARED="ld -shared"} - DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lbe -lroot" + : ${LDSHARED="${CC} -shared"} + if test "$rb_cv_binary_elf" = yes; then + LDFLAGS="$LDFLAGS -Wl,-export-dynamic" + fi + DLDFLAGS="$DLDFLAGS -L/boot/system/develop/lib -lroot -L/boot/home/config/develop/lib" ]) : ${LIBPATHENV=LIBRARY_PATH} rb_cv_dlopen=yes ], @@ -2401,6 +2404,10 @@ AS_CASE("$enable_shared", [yes], [ LIBRUBY_DLDFLAGS='-f ruby.exp -lnet -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o' ]) ], + [haiku*], [ + LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)' + LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so' + ], [darwin*], [ RUBY_SO_NAME="$RUBY_SO_NAME"'.$(MAJOR).$(MINOR).$(TEENY)' LIBRUBY_LDSHARED='$(CC) -dynamiclib' diff --git a/elf.h b/elf.h new file mode 100644 index 0000000..2300dde --- /dev/null +++ b/elf.h @@ -0,0 +1,42 @@ +/* + * + * /boot/common/include/elf.h + * + * -I/system/develop/headers/private/system + * -I/system/develop/headers/private/system/arch_x86 + * + * As found on other platforms, for benefit of GHC Haskell compiler, + * Donn + * */ + +#ifdef __HAIKU__ + +#include +#include + +typedef struct Elf32_Ehdr Elf32_Ehdr; +typedef struct Elf32_Shdr Elf32_Shdr; +typedef struct Elf32_Sym Elf32_Sym; +typedef struct Elf32_Rel Elf32_Rel; +typedef struct Elf32_Rela Elf32_Rela; + +#define ELFMAG0 0x7F +#define ELFMAG1 'E' +#define ELFMAG2 'L' +#define ELFMAG3 'F' + +#define ET_NONE 0 +#define ET_REL 1 +#define ET_EXEC 2 +#define ET_DYN 3 +#define ET_CORE 4 + +#define EM_386 3 +#define EM_SPARC 2 +#define EM_PPC 20 + +#else + +#include_next + +#endif \ No newline at end of file diff --git a/ext/nkf/nkf-utf8/nkf.h b/ext/nkf/nkf-utf8/nkf.h index a23ec5c..8351578 100644 --- a/ext/nkf/nkf-utf8/nkf.h +++ b/ext/nkf/nkf-utf8/nkf.h @@ -164,6 +164,11 @@ void setbinmode(FILE *fp) # ifndef HAVE_LOCALE_H # define HAVE_LOCALE_H # endif +#elif defined(__HAIKU__) +# undef HAVE_LANGINFO_H +# ifndef HAVE_LOCALE_H +# define HAVE_LOCALE_H +# endif #else # ifndef HAVE_LANGINFO_H # define HAVE_LANGINFO_H diff --git a/signal.c b/signal.c index d4e56dc..92c54e9 100644 --- a/signal.c +++ b/signal.c @@ -28,6 +28,6 @@ ruby_atomic_exchange(rb_atomic_t *ptr, rb_atomic_t val) } #endif -#if defined(__BEOS__) || defined(__HAIKU__) +#if defined(__BEOS__) #undef SIGBUS #endif @@ -590,7 +590,7 @@ static int segv_received = 0; static RETSIGTYPE sigsegv(int sig SIGINFO_ARG) { -#ifdef USE_SIGALTSTACK +#if defined USE_SIGALTSTACK && defined SA_SIGINFO int ruby_stack_overflowed_p(const rb_thread_t *, const void *); NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th)); rb_thread_t *th = GET_THREAD(); --- 1.8.3.4