Hi! Next in to MSVC queue...
This is a variation of 95bdbc456f7c5d6d669121cf20d62a9c28bec2bf "Always dllimport the variable for MSVC in link-order.at" Patch previously discussed here: http://lists.gnu.org/archive/html/libtool-patches/2008-08/msg00053.html In that discussion I claim that "With MSVC, you can declare any variable with __decspec(dllimport), even if you are not actually importing it" and I must have been thoroughly confused when I arrived at that conclusion. It doesn't hold when I now try it... So, instead of just "#ifdef _MSC_VER", this version does #if defined _MSC_VER && defined PIC # define LIBCEE_SCOPE __declspec(dllimport) Now, the PIC part isn't truly what we want to test for, since we don't really want to dllimport when we a *building* a PIC library. We want to dllimport when we *use* a shared library. But in this case it happens to coincide, and the notion of using a shared vs. static library isn't really covered by libtool, i.e. there's no -DUSE_PIC or equivalent that can be used to discriminate in the code. Cheers, Peter 2010-07-10 Peter Rosin <p...@lysator.liu.se> dllimport the variable for MSVC in link-order.at * tests/link-order.at [MSVC]: Makes the test pass by dllimporting imported variables when working with shared libraries. diff --git a/tests/link-order.at b/tests/link-order.at index 0122a45..c1b53a5 100644 --- a/tests/link-order.at +++ b/tests/link-order.at @@ -48,13 +48,31 @@ for i in old new; do mkdir src cat >src/a_$i.c <<EOF -extern int c; +/* w32 fun, MSVC needs to dllimport when using a shared library, so use + * PIC/non-PIC to discriminate as that happens to coinside in this case. + * gnu has auto import. + */ +#if defined _MSC_VER && defined PIC +# define LIBCEE_SCOPE __declspec(dllimport) +#else +# define LIBCEE_SCOPE extern +#endif +LIBCEE_SCOPE int c; extern int b_$i(); int a_$i() { return c + b_$i(); } EOF cat >src/b_$i.c <<EOF -extern int c; +/* w32 fun, MSVC needs to dllimport when using a shared library, so use + * PIC/non-PIC to discriminate as that happens to coinside in this case. + * gnu has auto import. + */ +#if defined _MSC_VER && defined PIC +# define LIBCEE_SCOPE __declspec(dllimport) +#else +# define LIBCEE_SCOPE extern +#endif +LIBCEE_SCOPE int c; int b_$i() { return 1 + c; } EOF