From 48e21d2051ea39b073c204f0359e2778ab9660e2 Mon Sep 17 00:00:00 2001 From: naruse Date: Wed, 6 Aug 2008 20:52:44 +0000 Subject: * eval_intern.h: Add support to Haiku. see [ruby-core:18110] * include/ruby/defines.h: ditto. * configure.in: ditto. * thread_pthread.c: ditto. * io.c: ditto. * lib/mkmf.rb: ditto. * ext/socket/getaddrinfo.c: ditto. * ext/socket/extconf.rb: ditto. * ext/socket/socket.c: ditto. * ext/socket/addrinfo.h: ditto. * ext/socket/getnameinfo.c: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18402 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 24 ++++++++++++++++++++++++ configure.in | 27 +++++++++++++++++++++++---- eval_intern.h | 2 +- ext/socket/addrinfo.h | 4 ++++ ext/socket/extconf.rb | 5 ++++- ext/socket/getaddrinfo.c | 4 +++- ext/socket/getnameinfo.c | 5 ++++- ext/socket/socket.c | 2 +- include/ruby/defines.h | 2 +- io.c | 7 +++++-- lib/mkmf.rb | 1 + thread_pthread.c | 6 ++++++ 12 files changed, 77 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7f45e9de0a..0652f766a1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,27 @@ +Thu Aug 7 05:51:05 2008 NARUSE, Yui + + * eval_intern.h: Add support to Haiku. see [ruby-core:18110] + + * include/ruby/defines.h: ditto. + + * configure.in: ditto. + + * thread_pthread.c: ditto. + + * io.c: ditto. + + * lib/mkmf.rb: ditto. + + * ext/socket/getaddrinfo.c: ditto. + + * ext/socket/extconf.rb: ditto. + + * ext/socket/socket.c: ditto. + + * ext/socket/addrinfo.h: ditto. + + * ext/socket/getnameinfo.c: ditto. + Thu Aug 7 05:43:32 2008 NARUSE, Yui * common.mk: mkdir enc/trans before build tables. diff --git a/configure.in b/configure.in index c799ddab86..173e593b76 100644 --- a/configure.in +++ b/configure.in @@ -512,7 +512,12 @@ hpux*) LIBS="-lm $LIBS" human*) ac_cv_func_getpgrp_void=yes ac_cv_func_setitimer=no ;; -beos*) ac_cv_func_link=no;; +beos*) ac_cv_func_link=no + LIBS="$LIBS" # m lib is include in root under BeOS + ;; +haiku*) ac_cv_func_link=no + LIBS="$LIBS" # m lib is include in root under Haiku + ;; cygwin*) ;; mingw*) LIBS="-lshell32 -lws2_32 $LIBS" ac_cv_header_a_out_h=no @@ -1098,7 +1103,7 @@ int main() AC_DEFINE_UNQUOTED(STACK_GROW_DIRECTION, $rb_cv_stack_grow_dir) if test x"$enable_pthread" = xyes; then - for pthread_lib in thr pthread pthreads c c_r; do + for pthread_lib in thr pthread pthreads c c_r root; do AC_CHECK_LIB($pthread_lib, pthread_kill, rb_with_pthread=yes, rb_with_pthread=no) if test "$rb_with_pthread" = "yes"; then break; fi @@ -1110,6 +1115,8 @@ if test x"$enable_pthread" = xyes; then case $pthread_lib in c) ;; + root) + ;; c_r) MAINLIBS="-pthread $MAINLIBS" ;; @@ -1271,7 +1278,7 @@ if test "$with_dln_a_out" != yes; then openstep*) CCDLFLAGS="$CCDLFLAGS -fno-common";; rhapsody*) CCDLFLAGS="$CCDLFLAGS -fno-common";; darwin*) CCDLFLAGS="$CCDLFLAGS -fno-common";; - human*|bsdi*|beos*|cygwin*|mingw*|aix*|interix*) ;; + human*|bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*) ;; *) CCDLFLAGS="$CCDLFLAGS -fPIC";; esac else @@ -1393,6 +1400,18 @@ if test "$with_dln_a_out" != yes; then esac : ${LIBPATHENV=LIBRARY_PATH} rb_cv_dlopen=yes ;; + haiku*) case "$target_cpu" in + powerpc*) + : ${LDSHARED="ld -xms"} + DLDFLAGS="$DLDFLAGS "'-export Init_$(TARGET) -lbe -lroot glue-noinit.a init_term_dyn.o start_dyn.o' + ;; + i586*) + : ${LDSHARED="ld -shared"} + DLDFLAGS="$DLDFLAGS -L/boot/develop/lib/x86 -lbe -lroot" + ;; + esac + : ${LIBPATHENV=LIBRARY_PATH} + rb_cv_dlopen=yes ;; nto-qnx*) DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib" : ${LDSHARED='ld -Bshareable -x'} LDFLAGS="$LDFLAGS -L/lib -L/usr/lib -L/usr/local/lib" @@ -1605,7 +1624,7 @@ LIBRUBYARG='$(LIBRUBYARG_STATIC)' SOLIBS= case "$target_os" in - cygwin*|mingw*|beos*|openstep*|nextstep*|rhapsody*|darwin*|os2-emx*) + cygwin*|mingw*|beos*|haiku*|openstep*|nextstep*|rhapsody*|darwin*|os2-emx*) : ${DLDLIBS=""} ;; *) diff --git a/eval_intern.h b/eval_intern.h index 19275d911c..6fc0aecb3e 100644 --- a/eval_intern.h +++ b/eval_intern.h @@ -75,7 +75,7 @@ char *strrchr(const char *, const char); #include #endif -#ifdef __BEOS__ +#if defined(__BEOS__) && !defined(__HAIKU__) #include #endif diff --git a/ext/socket/addrinfo.h b/ext/socket/addrinfo.h index e93adafba6..f6061f1e26 100644 --- a/ext/socket/addrinfo.h +++ b/ext/socket/addrinfo.h @@ -108,7 +108,9 @@ #define AI_CANONNAME 0x00000002 /* fill ai_canonname */ #define AI_NUMERICHOST 0x00000004 /* prevent name resolution */ /* valid flags for addrinfo */ +#ifndef __HAIKU__ #define AI_MASK (AI_PASSIVE | AI_CANONNAME | AI_NUMERICHOST) +#endif #define AI_ALL 0x00000100 /* IPv6 and IPv4-mapped (with AI_V4MAPPED) */ #define AI_V4MAPPED_CFG 0x00000200 /* accept IPv4-mapped if kernel supports */ @@ -164,7 +166,9 @@ extern void freeaddrinfo __P((struct addrinfo *)); #if defined __UCLIBC__ const #endif +#ifndef __HAIKU__ extern char *gai_strerror __P((int)); +#endif /* In case there is no definition of offsetof() provided - though any proper Standard C system should have one. */ diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index 7354a0f300..5479d4d009 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -9,6 +9,9 @@ when /cygwin/ when /beos/ test_func = "socket" have_library("net", "socket") +when /haiku/ + test_func = "socket" + have_library("network", "socket") when /i386-os2_emx/ test_func = "socket" have_library("socket", "socket") @@ -30,7 +33,7 @@ if have_header("arpa/inet.h") end ipv6 = false -default_ipv6 = /cygwin/ !~ RUBY_PLATFORM +default_ipv6 = /cygwin|beos|haiku/ !~ RUBY_PLATFORM if enable_config("ipv6", default_ipv6) if checking_for("ipv6") {try_link(< diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c index d97012a3c5..0ff2d5f762 100644 --- a/ext/socket/getaddrinfo.c +++ b/ext/socket/getaddrinfo.c @@ -42,7 +42,7 @@ #include #ifndef _WIN32 #include -#if defined(__BEOS__) +#if defined(__BEOS__) && !defined(__HAIKU__) # include #else # include @@ -194,6 +194,7 @@ if (pai->ai_flags & AI_CANONNAME) {\ #define ERR(err) { error = (err); goto bad; } +/* #if defined __UCLIBC__ const #endif @@ -204,6 +205,7 @@ gai_strerror(int ecode) ecode = EAI_MAX; return (char *)ai_errlist[ecode]; } +*/ void freeaddrinfo(struct addrinfo *ai) diff --git a/ext/socket/getnameinfo.c b/ext/socket/getnameinfo.c index 6214359cd2..37f60fc83f 100644 --- a/ext/socket/getnameinfo.c +++ b/ext/socket/getnameinfo.c @@ -38,7 +38,7 @@ #include #include #ifndef _WIN32 -#if defined(__BEOS__) +#if defined(__BEOS__) && !defined(__HAIKU__) # include #else # include @@ -110,6 +110,9 @@ static struct afd { #define ENI_FAMILY 5 #define ENI_SALEN 6 +#ifdef __HAIKU__ +#define HAVE_INET_NTOP +#endif #ifndef HAVE_INET_NTOP static const char * inet_ntop(int af, const void *addr, char *numaddr, size_t numaddr_len) diff --git a/ext/socket/socket.c b/ext/socket/socket.c index 81c5a8e170..7665ed43eb 100644 --- a/ext/socket/socket.c +++ b/ext/socket/socket.c @@ -29,7 +29,7 @@ #endif #ifndef _WIN32 -#if defined(__BEOS__) +#if defined(__BEOS__) && !defined(__HAIKU__) # include #else # include diff --git a/include/ruby/defines.h b/include/ruby/defines.h index 2be89de5ff..411b912358 100644 --- a/include/ruby/defines.h +++ b/include/ruby/defines.h @@ -198,7 +198,7 @@ void xfree(void*); #include "vms/vms.h" #endif -#if defined(__BEOS__) +#if defined(__BEOS__) && !defined(__HAIKU__) #include /* intern.h needs fd_set definition */ #endif diff --git a/io.c b/io.c index 7925c7b5e4..ed3023b190 100644 --- a/io.c +++ b/io.c @@ -26,7 +26,7 @@ #include #if !defined(_WIN32) && !defined(__DJGPP__) -# if defined(__BEOS__) +#if defined(__BEOS__) && !defined(__HAIKU__) # include # else # include @@ -90,7 +90,6 @@ extern void Init_File(void); # ifndef NOFILE # define NOFILE (OPEN_MAX) # endif -#include #endif #include "ruby/util.h" @@ -202,6 +201,10 @@ static int max_file_descriptor = NOFILE; # endif #endif +#if defined(__HAIKU__) +#define shutdown(a,b) 0 +#endif + #if defined(_WIN32) #define is_socket(fd, path) rb_w32_is_socket(fd) #elif !defined(S_ISSOCK) diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 034ca0bf9c..b834c104e2 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -63,6 +63,7 @@ $human = /human/ =~ RUBY_PLATFORM $netbsd = /netbsd/ =~ RUBY_PLATFORM $os2 = /os2/ =~ RUBY_PLATFORM $beos = /beos/ =~ RUBY_PLATFORM +$haiku = /haiku/ =~ RUBY_PLATFORM $solaris = /solaris/ =~ RUBY_PLATFORM $dest_prefix_pattern = (File::PATH_SEPARATOR == ';' ? /\A([[:alpha:]]:)?/ : /\A/) diff --git a/thread_pthread.c b/thread_pthread.c index 029ad43002..e9d94e7780 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -119,7 +119,11 @@ native_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) #define native_cleanup_push pthread_cleanup_push #define native_cleanup_pop pthread_cleanup_pop +#ifdef __HAIKU__ +#define native_thread_yield() /* not available under Haiku */ +#else #define native_thread_yield() sched_yield() +#endif #ifndef __CYGWIN__ static void add_signal_thread_list(rb_thread_t *th); @@ -409,7 +413,9 @@ native_thread_create(rb_thread_t *th) CHECK_ERR(pthread_attr_setstacksize(&attr, stack_size)); #endif +#ifndef __HAIKU__ /* not yet available under Haiku */ CHECK_ERR(pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED)); +#endif CHECK_ERR(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED)); err = pthread_create(&th->thread_id, &attr, thread_start_func_1, th); -- cgit v1.2.3