On 2011-09-12 13:10+0100 Andrew Ross wrote: > > Alan, > > Good idea. I was forgetting that you could redefine macros even after > they had been used in further #define statements.
Hi Andrew: I assume you have thoroughly tested that assumption so it must be true, but that sure seems counter-intuitive to me, and I cannot find a reference to it. Furthermore, K&H "The ANSI C Programming Language", p. 89 state "subsequent occurrences of the token name will be replaced ....", and that "subsequent" adjective seems to contradict the assumption. I now realize my previous idea implicitly depended on this assumption as well because oct-dlldefs.h modifies other macros within it depending on OCTAVE_EXPORT, and those won't get changed by my subsequent OCTAVE_EXPORT redefinition if the assumption is incorrect. If further testing shows this assumption doesn't really work, then I suggest a new idea which is we simply replace oct-dlldefs.h with our own modified version where the replace the present OCTAVE_EXPORT definition logic with the following logic (similar to what we do in pldll.h(.in)): #if defined (_MSC_VER) // Visual C/C++, Borland, MinGW and Watcom #if defined ( __VISUALC__ ) || defined ( _MSC_VER ) || defined ( __BORLANDC__ ) || defined ( __GNUC__ ) || defined ( __WATCOMC__ ) #define OCTAVE_EXPORT __declspec(dllexport) #else #define OCTAVE_EXPORT #endif #elif defined ( __CYGWIN__ ) #define OCTAVE_EXPORT __declspec(dllexport) #elif defined ( __GNUC__ ) && __GNUC__ > 3 #define OCTAVE_EXPORT __attribute__ ( ( visibility( "default" ) ) ) #endif #ifndef OCTAVE_EXPORT #define OCTAVE_EXPORT #endif The only further issue is our updated header has to be #included before any other octave header is #included (if the assumption fails). In swig use the following directives %begin %{ #include "oct-dlldefs_modified.h" %} to accomplish that. The "#define octave_dlldefs_h 1" in our modified header that is copied from the original means that further #includes of oct-dlldefs.h effectively become preprocessor no-ops. Even if the assumption that the last #define of some token completely supersedes previous #defines of that token is true so your present solution works, then I suggest you modify that present solution so you take full control of OCTAVE_EXPORT redefinition for all platforms using preprocessor language like what I use above for the hypothetical oct-dlldefs_modified.h. Alan __________________________ Alan W. Irwin Astronomical research affiliation with Department of Physics and Astronomy, University of Victoria (astrowww.phys.uvic.ca). Programming affiliations with the FreeEOS equation-of-state implementation for stellar interiors (freeeos.sf.net); the Time Ephemerides project (timeephem.sf.net); PLplot scientific plotting software package (plplot.sf.net); the libLASi project (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); and the Linux Brochure Project (lbproject.sf.net). __________________________ Linux-powered Science __________________________ ------------------------------------------------------------------------------ Doing More with Less: The Next Generation Virtual Desktop What are the key obstacles that have prevented many mid-market businesses from deploying virtual desktops? How do next-generation virtual desktops provide companies an easier-to-deploy, easier-to-manage and more affordable virtual desktop model.http://www.accelacomm.com/jaw/sfnl/114/51426474/ _______________________________________________ Plplot-devel mailing list Plplot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-devel