1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: forcelnk.h 3 // Purpose: see bellow 4 // Author: Vaclav Slavik 5 // RCS-ID: $Id: forcelnk.h 35686 2005-09-25 18:46:14Z VZ $ 6 // Copyright: (c) Vaclav Slavik 7 // Licence: wxWindows licence 8 ///////////////////////////////////////////////////////////////////////////// 9 10 /* 11 12 DESCRPITON: 13 14 mod_*.cpp files contain handlers for tags. These files are modules - they contain 15 one wxTagModule class and it's OnInit() method is called from wxApp's init method. 16 The module is called even if you only link it into the executable, so everything 17 seems wonderful. 18 19 The problem is that we have these modules in LIBRARY and mod_*.cpp files contain 20 no method nor class which is known out of the module. So the linker won't 21 link these .o/.obj files into executable because it detected that it is not used 22 by the program. 23 24 To workaround this I introduced set of macros FORCE_LINK_ME and FORCE_LINK. These 25 macros are generic and are not limited to mod_*.cpp files. You may find them quite 26 useful somewhere else... 27 28 How to use them: 29 let's suppose you want to always link file foo.cpp and that you have module 30 always.cpp that is certainly always linked (e.g. the one with main() function 31 or htmlwin.cpp in wxHtml library). 32 33 Place FORCE_LINK_ME(foo) somewhere in foo.cpp and FORCE_LINK(foo) somewhere 34 in always.cpp 35 See mod_*.cpp and htmlwin.cpp for example :-) 36 37 */ 38 39 40 #ifndef _WX_FORCELNK_H_ 41 #define _WX_FORCELNK_H_ 42 43 #include "wx/link.h" 44 45 // compatibility defines 46 #define FORCE_LINK wxFORCE_LINK_MODULE 47 #define FORCE_LINK_ME wxFORCE_LINK_THIS_MODULE 48 49 #define FORCE_WXHTML_MODULES() \ 50 FORCE_LINK(m_layout) \ 51 FORCE_LINK(m_fonts) \ 52 FORCE_LINK(m_image) \ 53 FORCE_LINK(m_list) \ 54 FORCE_LINK(m_dflist) \ 55 FORCE_LINK(m_pre) \ 56 FORCE_LINK(m_hline) \ 57 FORCE_LINK(m_links) \ 58 FORCE_LINK(m_tables) \ 59 FORCE_LINK(m_style) 60 61 62 #endif // _WX_FORCELNK_H_ 63