Hi!

I'd like to make the "Export test" work on MSVC.

Therefore I'm asking if I can cherry-pick commit
89a3cdc7a57314fb3ca8f57bf47afd20809e5608
"* tests/export.at [MSVC]: dllimport all imported variables."
into master (the patch is also attached).

Previous discussion:
http://lists.gnu.org/archive/html/libtool-patches/2008-08/msg00021.html

Cheers,
Peter
commit 89a3cdc7a57314fb3ca8f57bf47afd20809e5608
Author: Peter Rosin <peda@lysator.liu.se>
Date:   Sat Aug 9 22:48:50 2008 +0200

    * tests/export.at [MSVC]: dllimport all imported variables.
    
    Signed-off-by: Ralf Wildenhues <Ralf.Wildenhues@gmx.de>

diff --git a/ChangeLog b/ChangeLog
index 537fdb5..e4e5484 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-08-09  Peter Rosin  <peda@lysator.liu.se>
+
+	* tests/export.at [MSVC]: dllimport all imported variables.
+
 2008-08-02  Peter Rosin  <peda@lysator.liu.se>
 
 	Add MSVC support.
diff --git a/tests/export.at b/tests/export.at
index a330d40..39adfbc 100644
--- a/tests/export.at
+++ b/tests/export.at
@@ -93,32 +93,48 @@ v15
 
 AT_DATA(main.c,
 [[
+/* w32 fun.  With GCC, you can have auto-import, which will work for
+ * functions and non-const variables.  With MSVC, you have to explicitly
+ * import all variables.  Depending on the amount of portability, you
+ * need these annotations: LIBA_SCOPE for GCC, and also LIBA_SCOPE_VAR
+ * for MSVC.  Of course you can merge both to one, this test only avoids
+ * that in order to expose the auto-import feature on Cygwin.
+ *
+ * For users, it's best to realize that they should not provide any
+ * non-function API at all.
+ */
 #if defined(LIBA_DLL_IMPORT)
 #  if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__)
 #    define LIBA_SCOPE extern __declspec(dllimport)
+#    if defined(_MSC_VER)
+#      define LIBA_SCOPE_VAR LIBA_SCOPE
+#    endif
 #  endif
 #endif
 #if !defined(LIBA_SCOPE)
 #  define LIBA_SCOPE extern
 #endif
+#if !defined(LIBA_SCOPE_VAR)
+#  define LIBA_SCOPE_VAR extern
+#endif
 #ifdef __cplusplus
 extern "C" {
 #endif
-extern int v1;
-extern int v3, v4;
+LIBA_SCOPE_VAR int v1;
+LIBA_SCOPE_VAR int v3, v4;
 LIBA_SCOPE const int v5, v6;
-extern const char* v7;
-extern const char v8[];
+LIBA_SCOPE_VAR const char* v7;
+LIBA_SCOPE_VAR const char v8[];
 extern int v9(void);
-extern int (*v10) (void);
-extern int (*v11) (void);
+LIBA_SCOPE_VAR int (*v10) (void);
+LIBA_SCOPE_VAR int (*v11) (void);
 LIBA_SCOPE int (*const v12) (void);
 #ifdef __cplusplus
 }
 #endif
 
 typedef struct { int arr[1000]; } large;
-extern large v13, v14, v15;
+LIBA_SCOPE_VAR large v13, v14, v15;
 
 int main (void)
 {

Reply via email to