On Sat, Nov 16, 2013 at 12:25:53PM -0800, Guy Harris wrote:
> 
> On Nov 16, 2013, at 1:54 AM, buildbot-no-re...@wireshark.org wrote:
> 
> > The Buildbot has detected a new failure on builder Windows-7-x64 while 
> > building Wireshark (development).
> > Full details are available at:
> > http://buildbot.wireshark.org/trunk/builders/Windows-7-x64/builds/7888
> > 
> > Buildbot URL: http://buildbot.wireshark.org/trunk/
> > 
> > Buildslave for this Build: windows-7-x64
> > 
> > Build Reason: scheduler
> > Build Source Stamp: 53366
> > Blamelist: darkjames
> > 
> > BUILD FAILED: failed nmake all
> 
> Would somebody with sufficient Windows build experience care to indicate what 
> the right way is to handle a variable (not a function) that is:
> 
>       exported by library A;
> 
>       imported by library B;
> 
>       declared in a header file that's included by the source file in library 
> A that defines the variable and by the source files in library B that use the 
> variable?
> 
> The problem is that the source file in library A *and* the source files in 
> library B are *both* compiled with "this is going into a DLL" flag on 
> Windows, as they *are* all going into DLLs on Windows, so that -D flag cannot 
> be used to control whether the declaration in the header file is "this is 
> being exported" (__declspec(dllexport)) and "this is being imported" 
> (__declspec(dllimport)).

Ups, my fault.

Looking how it's done in glib (GLIB_VAR definition [1]):

#  ifdef G_PLATFORM_WIN32
#      ifdef GLIB_COMPILATION
#          define GLIB_VAR __declspec(dllexport)
#      else /* !GLIB_COMPILATION */
#        define GLIB_VAR extern __declspec(dllimport)
#  endif /* !G_PLATFORM_WIN32 */


In our bulding system the similar thing of GLIB_COMPILATION does WS_BUILD_DLL, 
but it's always set
when building library i.e. epan, wiretap, wsutil.


So we can't have one WS_BUILD_DLL because we need to distinguish if we want to 
export (the same library) or import symbol (different library) or use extern 
(the same library).

in Makefiles: -DWS_BUILD_DLL=EPAN, -DWS_BUILD_DLL=WSUTIL, WS_BUILD_DLL=WIRETAP

+ instead of one WS_DLL_PUBLIC we need to use some: WS_DLL_PUBLIC(EPAN), 
WS_BUILD_DLL(WSUTIL)...

later in WS_DLL_PUBLIC(x) compare #if x == WS_BUILD_DLL

Does it makes sense? Still it seems to be quite complicated for one bitswap 
variable... (revert?).

Kuba.

[1] https://git.gnome.org/browse/glib/tree/glib/gtypes.h
___________________________________________________________________________
Sent via:    Wireshark-dev mailing list <wireshark-dev@wireshark.org>
Archives:    http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
             mailto:wireshark-dev-requ...@wireshark.org?subject=unsubscribe

Reply via email to