aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--bcc32/Makefile.sub1
-rw-r--r--configure.in12
-rw-r--r--defines.h5
-rw-r--r--ext/extmk.rb1
-rw-r--r--win32/Makefile.sub1
-rw-r--r--wince/Makefile.sub1
7 files changed, 26 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index e986db75aa..f18278d4b1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Wed Oct 26 01:58:19 2005 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * configure.in (RUBY_EXTERN): macro to export symbols in shared
+ library. [ruby-core:05528]
+
+ * defines.h, {bcc32,win32,wince}/Makefile.sub (RUBY_EXTERN): moved to
+ configuration pass.
+
+ * ext/extmk.rb (extmake): RUBY_EXTERN for static linked extensions.
+
Tue Oct 25 20:06:59 2005 Hirokazu Yamamoto <ocean@m2.ccsnet.ne.jp>
* ruby.h (Qfalse, Qtrue, Qnil, Qundef): make sure these immediate
diff --git a/bcc32/Makefile.sub b/bcc32/Makefile.sub
index 53b908f658..18c5c47f13 100644
--- a/bcc32/Makefile.sub
+++ b/bcc32/Makefile.sub
@@ -226,6 +226,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)bcc32/Makefile.sub
\#define TOKEN_PASTE(x,y) x\#\#y
\#define HAVE_STDARG_PROTOTYPES 1
\#define NORETURN(x) x
+\#define RUBY_EXTERN extern __declspec(dllimport)
\#define HAVE_DECL_SYS_NERR 1
\#define HAVE_LIMITS_H 1
\#define HAVE_FCNTL_H 1
diff --git a/configure.in b/configure.in
index 6518b49e14..dff993ef23 100644
--- a/configure.in
+++ b/configure.in
@@ -308,6 +308,17 @@ RUBY_FUNC_ATTRIBUTE(noinline, NOINLINE)
RUBY_FUNC_ATTRIBUTE(stdcall)
RUBY_FUNC_ATTRIBUTE(cdecl)
+AC_CACHE_CHECK([for RUBY_EXTERN], rb_cv_ruby_extern,
+[rb_cv_ruby_extern=no
+for mac in "__attribute__((dllimport))" "__declspec(dllimport)"; do
+ AC_TRY_COMPILE(
+ [extern $mac void conftest(void);],
+ [rb_cv_ruby_extern="extern $mac"; break])
+done])
+test "x$rb_cv_ruby_extern" = xno || AC_DEFINE_UNQUOTED(RUBY_EXTERN, $rb_cv_ruby_extern)
+
+XCFLAGS="$XCFLAGS -DRUBY_EXPORT"
+
dnl Check whether we need to define sys_nerr locally
AC_CHECK_DECLS([sys_nerr], [], [], [$ac_includes_default
#include <errno.h>])
@@ -1375,7 +1386,6 @@ case "$target_os" in
COMMON_HEADERS="winsock2.h windows.h"
;;
esac
- XCFLAGS="$XCFLAGS"
LIBRUBY_DLDFLAGS="${DLDFLAGS}"' -Wl,--out-implib=$(LIBRUBY)'
LIBRUBY_ALIASES=''
FIRSTMAKEFILE=GNUmakefile:cygwin/GNUmakefile.in
diff --git a/defines.h b/defines.h
index 48ca3aa8a1..8ff20270db 100644
--- a/defines.h
+++ b/defines.h
@@ -195,11 +195,8 @@ void xfree(void*);
#include <net/socket.h> /* intern.h needs fd_set definition */
#endif
+#ifdef RUBY_EXPORT
#undef RUBY_EXTERN
-#if defined _WIN32 && !defined __GNUC__
-# ifndef RUBY_EXPORT
-# define RUBY_EXTERN extern __declspec(dllimport)
-# endif
#endif
#ifndef RUBY_EXTERN
diff --git a/ext/extmk.rb b/ext/extmk.rb
index 331ed180ea..1642012dbd 100644
--- a/ext/extmk.rb
+++ b/ext/extmk.rb
@@ -129,6 +129,7 @@ def extmake(target)
then
ok = false
init_mkmf
+ $defs << "-DRUBY_EXPORT" if $static
Logging::logfile 'mkmf.log'
rm_f makefile
if File.exist?($0 = "#{$srcdir}/makefile.rb")
diff --git a/win32/Makefile.sub b/win32/Makefile.sub
index 21639a223a..4a9cddc0e6 100644
--- a/win32/Makefile.sub
+++ b/win32/Makefile.sub
@@ -228,6 +228,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub
#define DEPRECATED(x) __declspec(deprecated) x
#define NOINLINE(x) __declspec(noinline) x
!endif
+#define RUBY_EXTERN extern __declspec(dllimport)
#define HAVE_DECL_SYS_NERR 1
#define HAVE_LIMITS_H 1
#define HAVE_FCNTL_H 1
diff --git a/wince/Makefile.sub b/wince/Makefile.sub
index 71a7df2167..f7a88752d6 100644
--- a/wince/Makefile.sub
+++ b/wince/Makefile.sub
@@ -223,6 +223,7 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/wince/Makefile.sub
#define DEPRECATED(x) __declspec(deprecated) x
#define NOINLINE(x) __declspec(noinline) x
!endif
+#define RUBY_EXTERN extern __declspec(dllimport)
#define HAVE_DECL_SYS_NERR 1
#define HAVE_FCNTL_H 1
#define HAVE_SYS_UTIME_H 1