diff --git a/ChangeLog b/ChangeLog index f4e9ca16c1..5f46c2efa4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +Thu Jun 5 14:16:41 2014 Nobuyoshi Nakada + + * configure.in (with-jemalloc): also check for header, for ABIs + which JEMALLOC_MANGLE is needed, i.e., Mach-O and PE-COFF + platforms. [ruby-core:62939] [Feature #9113] + + * include/ruby/missing.h: include alternative malloc header to + replace memory management functions. + + * dln.c, io.c, parse.y, st.c: undef malloc family before + re-definition to suppress warnings. + Thu Jun 5 12:52:18 2014 SHIBATA Hiroshi * man/ruby.1: remove rubyforge entry. diff --git a/configure.in b/configure.in index 90219af803..555c323321 100644 --- a/configure.in +++ b/configure.in @@ -1177,8 +1177,22 @@ AC_ARG_WITH([jemalloc], [AS_HELP_STRING([--with-jemalloc],[use jemalloc allocator])], [with_jemalloc=yes], [with_jemalloc=no]) AS_IF([test "x$with_jemalloc" = xyes],[ - AC_CHECK_LIB([jemalloc],[malloc_conf],[LIBS="-ljemalloc $LIBS"], - [AC_MSG_ERROR([jemalloc requested but not found])])]) + AC_CHECK_LIB([jemalloc],[malloc_conf],[], [with_jemalloc=no]) + AS_IF([test "x$with_jemalloc" != xyes],[ + AC_CHECK_HEADER(jemalloc/jemalloc.h, [ + AC_DEFINE(RUBY_ALTERNATIVE_MALLOC_HEADER, []) + AC_DEFINE(JEMALLOC_MANGLE) + with_jemalloc=yes + ]) + ]) + AS_IF([test "x$with_jemalloc" = xyes], + [ + ac_cv_func_malloc_usable_size=yes + LIBS="-ljemalloc $LIBS" + ], + [AC_MSG_ERROR([jemalloc requested but not found]) + ]) +]) dnl check for large file stuff mv confdefs.h confdefs1.h diff --git a/dln.c b/dln.c index b3522f111c..25e40cf1e6 100644 --- a/dln.c +++ b/dln.c @@ -47,6 +47,7 @@ void *xcalloc(); void *xrealloc(); #endif +#undef free #define free(x) xfree(x) #include diff --git a/include/ruby/missing.h b/include/ruby/missing.h index 53e0833814..161d95430a 100644 --- a/include/ruby/missing.h +++ b/include/ruby/missing.h @@ -21,6 +21,9 @@ extern "C" { #include "ruby/config.h" #include #include /* for INFINITY and NAN */ +#ifdef RUBY_ALTERNATIVE_MALLOC_HEADER +# include RUBY_ALTERNATIVE_MALLOC_HEADER +#endif #ifdef RUBY_EXTCONF_H #include RUBY_EXTCONF_H #endif diff --git a/io.c b/io.c index 40ee3d435d..6926316569 100644 --- a/io.c +++ b/io.c @@ -21,6 +21,7 @@ #include #include "ruby_atomic.h" +#undef free #define free(x) xfree(x) #if defined(DOSISH) || defined(__CYGWIN__) diff --git a/parse.y b/parse.y index 580088eeab..2e73d64401 100644 --- a/parse.y +++ b/parse.y @@ -35,6 +35,10 @@ #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size)) #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size)) #define YYFREE(ptr) rb_parser_free(parser, (ptr)) +#undef malloc +#undef realloc +#undef calloc +#undef free #define malloc YYMALLOC #define realloc YYREALLOC #define calloc YYCALLOC diff --git a/st.c b/st.c index ff5bb305ab..f26443f99c 100644 --- a/st.c +++ b/st.c @@ -73,6 +73,10 @@ static const struct st_hash_type type_strcasehash = { static void rehash(st_table *); #ifdef RUBY +#undef malloc +#undef realloc +#undef calloc +#undef free #define malloc xmalloc #define calloc xcalloc #define realloc xrealloc