From 744d4b4a5a6621cf1b43724355da4597ea5a3983 Mon Sep 17 00:00:00 2001 From: Hamish Morrison Date: Tue, 2 Jun 2015 22:27:50 +0100 Subject: [PATCH] ruby: add recipe and patchset for 2.2.2 --- dev-lang/ruby/patches/ruby-2.2.2.patchset | 386 ++++++++++++++++++++++ dev-lang/ruby/ruby-2.2.2.recipe | 107 ++++++ 2 files changed, 493 insertions(+) create mode 100644 dev-lang/ruby/patches/ruby-2.2.2.patchset create mode 100644 dev-lang/ruby/ruby-2.2.2.recipe diff --git a/dev-lang/ruby/patches/ruby-2.2.2.patchset b/dev-lang/ruby/patches/ruby-2.2.2.patchset new file mode 100644 index 000000000..495b24f3d --- /dev/null +++ b/dev-lang/ruby/patches/ruby-2.2.2.patchset @@ -0,0 +1,386 @@ +From f8c8eabcfb046fd68c420634bdfed2cd3ff75564 Mon Sep 17 00:00:00 2001 +From: Alexander von Gluck IV +Date: Sun, 1 Feb 2015 03:29:50 +0000 +Subject: configure.in: Fix haiku build by removing unneeded i586 check + + +diff --git a/configure.in b/configure.in +index 8297c5a..81c9d9f 100644 +--- a/configure.in ++++ b/configure.in +@@ -2983,15 +2983,8 @@ if test "$with_dln_a_out" != yes; then + ]) + : ${LIBPATHENV=LIBRARY_PATH} + rb_cv_dlopen=yes], +- [haiku*], [ AS_CASE(["$target_cpu"], +- [powerpc*], [ +- : ${LDSHARED='$(LD) -xms'} +- EXTDLDFLAGS='-export $(TARGET_ENTRY)' +- DLDFLAGS="$DLDFLAGS -lroot glue-noinit.a init_term_dyn.o start_dyn.o" +- ], +- [i586*], [ +- : ${LDSHARED='$(CC) -shared'} +- ]) ++ [haiku*], [ ++ : ${LDSHARED='$(CC) -shared'} + : ${LIBPATHENV=LIBRARY_PATH} + rb_cv_dlopen=yes ], + [nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib" +-- +2.2.2 + + +From 7e2766fd9d003971ac66024ad80e468fe94dc114 Mon Sep 17 00:00:00 2001 +From: Alexander von Gluck IV +Date: Wed, 4 Feb 2015 04:43:25 +0000 +Subject: ext/socket: Don't check for Haiku, no longer needed + + +diff --git a/ext/socket/getaddrinfo.c b/ext/socket/getaddrinfo.c +index 68f610e..b518787 100644 +--- a/ext/socket/getaddrinfo.c ++++ b/ext/socket/getaddrinfo.c +@@ -45,7 +45,7 @@ + #include + #ifndef _WIN32 + #include +-#if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE) ++#if defined(__BEOS__) && !defined(BONE) + # include + #else + # include +-- +2.2.2 + + +From 7063b8ed25cd25943ee395f367a6a8a04b34ea01 Mon Sep 17 00:00:00 2001 +From: Hamish Morrison +Date: Tue, 2 Jun 2015 21:47:45 +0100 +Subject: configure.in: remove obsolete workarounds for Haiku + + +diff --git a/configure.in b/configure.in +index 81c9d9f..0d56aba 100644 +--- a/configure.in ++++ b/configure.in +@@ -845,7 +845,7 @@ if test "$GCC" = yes; then + + # -fstack-protector + AS_CASE(["$target_os"], +- [mingw*|nacl|haiku], [ ++ [mingw*|nacl], [ + stack_protector=no + ]) + if test -z "${stack_protector+set}"; then +@@ -870,11 +870,6 @@ if test "$GCC" = yes; then + [cygwin*|darwin*|netbsd*|nacl], [ + # need lgamma_r(), finite() + ], +- [haiku], [ +- # Haiku R1/alpha3 uses gcc-4.4.4 which can not handle anonymous union +- # with ANSI standard flags. Anonumous union is required to compile +- # socket extension where uses anonymous union. +- ], + [ + # ANSI (no XCFLAGS because this is C only) + for ansi_options in -std=iso9899:1999 "-ansi -std=iso9899:199409"; do +@@ -1055,14 +1050,15 @@ main() + ], + [hpux*], [ LIBS="-lm $LIBS" + ac_cv_c_inline=no], +-[beos*|haiku*], [ ++[beos*], [ + ac_cv_func_link=no + ac_cv_func_sched_yield=no + ac_cv_func_pthread_attr_setinheritsched=no +- AS_CASE(["$target_os"], +- [beos*], [ ac_cv_header_net_socket_h=yes], +- [haiku*], [ ac_cv_func_shutdown=no]) +- LIBS="$LIBS" # m lib is include in root under BeOS/Haiku ++ ac_cv_header_net_socket_h=yes ++ LIBS="$LIBS" # m lib is include in root under BeOS ++ ], ++[haiku*], [ ++ LIBS="$LIBS" + ], + [cygwin*], [ ac_cv_header_langinfo_h=yes + AC_CHECK_FUNCS(cygwin_conv_path) +@@ -2868,7 +2864,7 @@ if test "$with_dln_a_out" != yes; then + # mkmf.rb's have_header() to fail if the desired resource happens to be + # installed in the /usr/local tree. + RUBY_APPEND_OPTION(CCDLFLAGS, -fno-common)], +- [bsdi*|beos*|haiku*|cygwin*|mingw*|aix*|interix*], [ ], ++ [bsdi*|beos*|cygwin*|mingw*|aix*|interix*], [ ], + [ + RUBY_APPEND_OPTION(CCDLFLAGS, -fPIC)]) + else +@@ -2986,6 +2982,9 @@ if test "$with_dln_a_out" != yes; then + [haiku*], [ + : ${LDSHARED='$(CC) -shared'} + : ${LIBPATHENV=LIBRARY_PATH} ++ if test "$rb_cv_binary_elf" = yes; then ++ LDFLAGS="$LDFLAGS -Wl,-export-dynamic" ++ fi + rb_cv_dlopen=yes ], + [nto-qnx*], [ DLDFLAGS="$DLDFLAGS -L/lib -L/usr/lib -L/usr/local/lib" + : ${LDSHARED='$(LD) -Bshareable -x'} +@@ -3427,7 +3426,7 @@ AS_CASE("$enable_shared", [yes], [ + [sunos4*], [ + LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so' + ], +- [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu], [ ++ [linux* | gnu* | k*bsd*-gnu | atheos* | kopensolaris*-gnu | haiku*], [ + LIBRUBY_DLDFLAGS='-Wl,-soname,lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR)'" $LDFLAGS_OPTDIR" + LIBRUBY_ALIASES='lib$(RUBY_SO_NAME).so.$(MAJOR).$(MINOR) lib$(RUBY_SO_NAME).so' + if test "$load_relative" = yes; then +@@ -3518,10 +3517,6 @@ AS_CASE("$enable_shared", [yes], [ + AS_HELP_STRING([--disable-pie], [disable PIE feature]), + [pie=$enableval], [pie=]) + AS_CASE(["$target_os"], +- [haiku], [ +- # gcc supports PIE, but doesn't work correctly in Haiku +- pie=no +- ], + [nacl], [ + # -pie implies -shared for NaCl. + pie=no +-- +2.2.2 + + +From 41be5c80069347589b6d350c2a9d08ac3f353b9e Mon Sep 17 00:00:00 2001 +From: Hamish Morrison +Date: Tue, 2 Jun 2015 21:50:06 +0100 +Subject: dln.c, file.c, io.c: remove obsolete Haiku workarounds + + +diff --git a/dln.c b/dln.c +index ae38a42..6676974 100644 +--- a/dln.c ++++ b/dln.c +@@ -85,7 +85,7 @@ char *getenv(); + # endif + #endif + +-#if defined(__BEOS__) || defined(__HAIKU__) ++#if defined(__BEOS__) + # include + #endif + +@@ -1426,7 +1426,7 @@ dln_load(const char *file) + } + #endif + +-#if defined(__BEOS__) || defined(__HAIKU__) ++#if defined(__BEOS__) + # define DLN_DEFINED + { + status_t err_stat; /* BeOS error status code */ +@@ -1472,7 +1472,7 @@ dln_load(const char *file) + (*init_fct)(); + return (void*)img_id; + } +-#endif /* __BEOS__ || __HAIKU__ */ ++#endif /* __BEOS__ */ + + #ifndef DLN_DEFINED + dln_notimplement(); +diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h +index 8beffd2..445935f 100644 +--- a/ext/socket/rubysocket.h ++++ b/ext/socket/rubysocket.h +@@ -27,7 +27,7 @@ + # undef HAVE_TYPE_STRUCT_SOCKADDR_DL + # endif + #else +-# if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE) ++# if defined(__BEOS__) && !defined(BONE) + # include + # else + # include +diff --git a/file.c b/file.c +index 95de489..57b147b 100644 +--- a/file.c ++++ b/file.c +@@ -114,7 +114,7 @@ int flock(int, int); + #define STAT(p, s) stat((p), (s)) + #endif + +-#if defined(__BEOS__) || defined(__HAIKU__) /* should not change ID if -1 */ ++#if defined(__BEOS__) /* should not change ID if -1 */ + static int + be_chown(const char *path, uid_t owner, gid_t group) + { +@@ -139,7 +139,7 @@ be_fchown(int fd, uid_t owner, gid_t group) + return fchown(fd, owner, group); + } + #define fchown be_fchown +-#endif /* __BEOS__ || __HAIKU__ */ ++#endif /* __BEOS__ */ + + VALUE rb_cFile; + VALUE rb_mFileTest; +diff --git a/include/ruby/defines.h b/include/ruby/defines.h +index 7baf210..cb0e4ce 100644 +--- a/include/ruby/defines.h ++++ b/include/ruby/defines.h +@@ -163,7 +163,7 @@ void xfree(void*); + #include "ruby/win32.h" + #endif + +-#if defined(__BEOS__) && !defined(__HAIKU__) && !defined(BONE) ++#if defined(__BEOS__) && !defined(BONE) + #include /* intern.h needs fd_set definition */ + #endif + +diff --git a/io.c b/io.c +index 76220e6..9f0bb72 100644 +--- a/io.c ++++ b/io.c +@@ -34,7 +34,7 @@ + # include + #endif + +-#if defined(__BOW__) || defined(__CYGWIN__) || defined(_WIN32) || defined(__EMX__) || defined(__BEOS__) || defined(__HAIKU__) ++#if defined(__BOW__) || defined(__CYGWIN__) || defined(_WIN32) || defined(__EMX__) || defined(__BEOS__) + # define NO_SAFE_RENAME + #endif + +@@ -96,7 +96,7 @@ + #include + #endif + +-#if defined(__BEOS__) || defined(__HAIKU__) ++#if defined(__BEOS__) + # ifndef NOFILE + # define NOFILE (OPEN_MAX) + # endif +-- +2.2.2 + + +From b9710a5c5728b30b1f4dfc93a22ae4bf028ffd21 Mon Sep 17 00:00:00 2001 +From: Hamish Morrison +Date: Tue, 2 Jun 2015 21:51:28 +0100 +Subject: thread_pthread.c: add stack bounds detection for Haiku + + +diff --git a/thread_pthread.c b/thread_pthread.c +index 03f3166..50ac590 100644 +--- a/thread_pthread.c ++++ b/thread_pthread.c +@@ -33,6 +33,9 @@ + #if defined(HAVE_SYS_TIME_H) + #include + #endif ++#if defined(__HAIKU__) ++#include ++#endif + + static void native_mutex_lock(rb_nativethread_lock_t *lock); + static void native_mutex_unlock(rb_nativethread_lock_t *lock); +@@ -497,6 +500,8 @@ size_t pthread_get_stacksize_np(pthread_t); + #define STACKADDR_AVAILABLE 1 + #elif defined HAVE_PTHREAD_GETTHRDS_NP + #define STACKADDR_AVAILABLE 1 ++#elif defined __HAIKU__ ++#define STACKADDR_AVAILABLE 1 + #elif defined __ia64 && defined _HPUX_SOURCE + #include + +@@ -615,6 +620,13 @@ get_stack(void **addr, size_t *size) + *addr = thinfo.__pi_stackaddr; + *size = thinfo.__pi_stacksize; + STACK_DIR_UPPER((void)0, (void)(*addr = (char *)*addr + *size)); ++#elif defined __HAIKU__ ++ thread_info info; ++ STACK_GROW_DIR_DETECTION; ++ CHECK_ERR(get_thread_info(find_thread(NULL), &info)); ++ *addr = info.stack_base; ++ *size = (uintptr_t)info.stack_end - (uintptr_t)info.stack_base; ++ STACK_DIR_UPPER((void)0, (void)(*addr = (char *)*addr + *size)); + #else + #error STACKADDR_AVAILABLE is defined but not implemented. + #endif +-- +2.2.2 + + +From ac860d7d8b75e2e119f6a75acd7302cf236725b7 Mon Sep 17 00:00:00 2001 +From: Hamish Morrison +Date: Tue, 2 Jun 2015 21:52:34 +0100 +Subject: signal.c: get stack pointer from signal context on Haiku + + +diff --git a/configure.in b/configure.in +index 0d56aba..6525e94 100644 +--- a/configure.in ++++ b/configure.in +@@ -2710,10 +2710,24 @@ if test x"$enable_pthread" = xyes; then + fi + fi + fi +-if test x"$ac_cv_header_ucontext_h" = xyes; then ++ ++if test x"$ac_cv_header_ucontext_h" = xno; then ++ AC_CACHE_CHECK([if signal.h defines ucontext_t], [rb_cv_ucontext_in_signal_h], ++ [AC_TRY_COMPILE([@%:@include ], ++ [size_t size = sizeof(ucontext_t);], ++ [rb_cv_ucontext_in_signal_h=yes], [rb_cv_ucontext_in_signal_h=no])]) ++ if test x"$rb_cv_ucontext_in_signal_h" = xyes; then ++ AC_DEFINE_UNQUOTED(UCONTEXT_IN_SIGNAL_H, 1) ++ fi ++fi ++if test x"$ac_cv_header_ucontext_h" = xyes -o x"$rb_cv_ucontext_in_signal_h" = xyes; then + AC_CACHE_CHECK([if mcontext_t is a pointer], [rb_cv_mcontext_t_ptr], +- [AC_TRY_COMPILE([@%:@include +- mcontext_t test(mcontext_t mc) {return mc+1;} ++ [AC_TRY_COMPILE([ ++ @%:@include ++ @%:@ifdef HAVE_UCONTEXT_H ++ @%:@include ++ @%:@endif ++ mcontext_t test(mcontext_t mc) {return mc+1;} + ], + [test(0);], + [rb_cv_mcontext_t_ptr=yes], [rb_cv_mcontext_t_ptr=no])]) +diff --git a/signal.c b/signal.c +index 0c4b73d..75e2761 100644 +--- a/signal.c ++++ b/signal.c +@@ -66,7 +66,7 @@ ruby_atomic_compare_and_swap(rb_atomic_t *ptr, rb_atomic_t cmp, + } + #endif + +-#if defined(__BEOS__) || defined(__HAIKU__) ++#if defined(__BEOS__) + #undef SIGBUS + #endif + +@@ -752,7 +752,9 @@ static const char *received_signal; + + #if defined(USE_SIGALTSTACK) || defined(_WIN32) + NORETURN(void ruby_thread_stack_overflow(rb_thread_t *th)); +-# if !(defined(HAVE_UCONTEXT_H) && (defined __i386__ || defined __x86_64__ || defined __amd64__)) ++# if defined __HAIKU__ ++# define USE_UCONTEXT_REG 1 ++# elif !(defined(HAVE_UCONTEXT_H) && (defined __i386__ || defined __x86_64__ || defined __amd64__)) + # elif defined __linux__ + # define USE_UCONTEXT_REG 1 + # elif defined __APPLE__ +@@ -783,6 +785,12 @@ check_stack_overflow(const uintptr_t addr, const ucontext_t *ctx) + # else + const __register_t sp = mctx->mc_esp; + # endif ++# elif defined __HAIKU__ ++# if defined(__amd64__) ++ const unsigned long sp = mctx->rsp; ++# else ++ const unsigned long sp = mctx->esp; ++# endif + # endif + enum {pagesize = 4096}; + const uintptr_t sp_page = (uintptr_t)sp / pagesize; +-- +2.2.2 + diff --git a/dev-lang/ruby/ruby-2.2.2.recipe b/dev-lang/ruby/ruby-2.2.2.recipe new file mode 100644 index 000000000..0b76b1519 --- /dev/null +++ b/dev-lang/ruby/ruby-2.2.2.recipe @@ -0,0 +1,107 @@ +SUMMARY="A programming language focused on simplicity and productivity" +DESCRIPTION="Ruby is a dynamic, reflective, object-oriented, general-purpose \ +programming language. It was designed and developed in the mid-1990s \ +by Yukihiro 'Matz' Matsumoto in Japan. + +Ruby embodies syntax inspired by Perl with Smalltalk-like features and \ +was also influenced by Eiffel and Lisp. It supports multiple \ +programming paradigms, including functional, object oriented, and \ +imperative. It also has a dynamic type system and automatic memory \ +management. Therefore, it is similar in varying degrees to, Smalltalk, \ +Python, Perl, Lisp, Dylan, and CLU." +HOMEPAGE="http://www.ruby-lang.org" +SRC_URI="http://cache.ruby-lang.org/pub/ruby/2.2/ruby-$portVersion.tar.gz" +CHECKSUM_SHA256="5ffc0f317e429e6b29d4a98ac521c3ce65481bfd22a8cf845fa02a7b113d9b44" +LICENSE="Ruby + BSD (3-clause)" +COPYRIGHT="1993-2015 Yukihiro Matsumoto" +PATCHES="ruby-$portVersion.patchset" + +REVISION="1" + +ARCHITECTURES="?x86 !x86_64" +if [ $effectiveTargetArchitecture != x86_gcc2 ]; then + # x86_gcc2 is fine as primary target architecture as long as we're building + # for a different secondary architecture. + ARCHITECTURES="$ARCHITECTURES x86_gcc2" +fi +SECONDARY_ARCHITECTURES="x86" + +PROVIDES=" + ruby$secondaryArchSuffix = $portVersion compat >= 2.2 + cmd:ruby = $portVersion compat >= 2.2 + cmd:erb = $portVersion compat >= 2.2 + cmd:gem = $portVersion compat >= 2.2 + cmd:irb = $portVersion compat >= 2.2 + cmd:rake = $portVersion compat >= 2.2 + cmd:rdoc = $portVersion compat >= 2.2 + cmd:ri = $portVersion compat >= 2.2 + cmd:testrb = $portVersion compat >= 2.2 + lib:libruby$secondaryArchSuffix = $portVersion compat >= 2.2 + " +REQUIRES=" + haiku$secondaryArchSuffix + lib:libedit$secondaryArchSuffix + lib:libz$secondaryArchSuffix + lib:libcrypto$secondaryArchSuffix + lib:libssl$secondaryArchSuffix + lib:libiconv$secondaryArchSuffix + lib:libncursesw$secondaryArchSuffix + " +BUILD_REQUIRES=" + haiku${secondaryArchSuffix}_devel + devel:libedit$secondaryArchSuffix + devel:libz$secondaryArchSuffix + devel:libcrypto$secondaryArchSuffix + devel:libssl$secondaryArchSuffix + devel:libiconv$secondaryArchSuffix + devel:libncursesw$secondaryArchSuffix + devel:libffi$secondaryArchSuffix + " +BUILD_PREREQUIRES=" + cmd:gcc$secondaryArchSuffix + cmd:g++$secondaryArchSuffix + cmd:autoconf + cmd:bison + cmd:git + cmd:libtoolize + cmd:make + cmd:pkg_config$secondaryArchSuffix + " + +PROVIDES_devel=" + ruby${secondaryArchSuffix}_devel = $portVersion + devel:libruby_static$secondaryArchSuffix = $portVersion compat >= 2.2 + lib:libruby_static$secondaryArchSuffix = $portVersion compat >= 2.2 + devel:libruby$secondaryArchSuffix = $portVersion compat >= 2.2 + " +REQUIRES_devel=" + ruby$secondaryArchSuffix == $portVersion base + " + +BUILD() +{ + libtoolize --force --copy --install + autoconf + runConfigure --omit-dirs binDir ./configure --enable-shared \ + --disable-silent-rules \ + --bindir=$prefix/bin + # The build process needs to run ruby, and without this it fails to find + # libruby.so. + export LIBRARY_PATH=$LIBRARY_PATH:%A + make $jobArgs Q='' +} + +INSTALL() +{ + export LIBRARY_PATH=$LIBRARY_PATH:%A + make install + prepareInstalledDevelLibs libruby-static libruby + packageEntries devel $developDir +} + +TEST() +{ + export LIBRARY_PATH=$LIBRARY_PATH:%A + make check +}