summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog24
-rw-r--r--configure.in27
-rw-r--r--eval_intern.h2
-rw-r--r--ext/socket/addrinfo.h4
-rw-r--r--ext/socket/extconf.rb5
-rw-r--r--ext/socket/getaddrinfo.c4
-rw-r--r--ext/socket/getnameinfo.c5
-rw-r--r--ext/socket/socket.c2
-rw-r--r--include/ruby/defines.h2
-rw-r--r--io.c7
-rw-r--r--lib/mkmf.rb1
-rw-r--r--thread_pthread.c6
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 <naruse@ruby-lang.org>
+
+ * 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 <naruse@ruby-lang.org>
* 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 <unistd.h>
#endif
-#ifdef __BEOS__
+#if defined(__BEOS__) && !defined(__HAIKU__)
#include <net/socket.h>
#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(<<EOF)}
#include <sys/types.h>
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 <sys/types.h>
#ifndef _WIN32
#include <sys/param.h>
-#if defined(__BEOS__)
+#if defined(__BEOS__) && !defined(__HAIKU__)
# include <net/socket.h>
#else
# include <sys/socket.h>
@@ -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 <stdio.h>
#include <sys/types.h>
#ifndef _WIN32
-#if defined(__BEOS__)
+#if defined(__BEOS__) && !defined(__HAIKU__)
# include <net/socket.h>
#else
# include <sys/socket.h>
@@ -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 <net/socket.h>
#else
# include <sys/socket.h>
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 <net/socket.h> /* 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 <sys/types.h>
#if !defined(_WIN32) && !defined(__DJGPP__)
-# if defined(__BEOS__)
+#if defined(__BEOS__) && !defined(__HAIKU__)
# include <net/socket.h>
# else
# include <sys/socket.h>
@@ -90,7 +90,6 @@ extern void Init_File(void);
# ifndef NOFILE
# define NOFILE (OPEN_MAX)
# endif
-#include <net/socket.h>
#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);