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) {