mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2025-12-15 17:20:07 +01:00
This hopefully resolves a link issue with GCC 16+ which performs more aggressive devirtualization. We want to avoid linking wxHTML into the core library, so we need to just include helpbase here so GCC doesn't see the derived classes. Fixes: https://github.com/wxWidgets/Phoenix/issues/2807
86 lines
3.1 KiB
Python
86 lines
3.1 KiB
Python
#---------------------------------------------------------------------------
|
|
# Name: etg/help.py
|
|
# Author: Robin Dunn
|
|
#
|
|
# Created: 06-Apr-2012
|
|
# Copyright: (c) 2012-2020 by Total Control Software
|
|
# License: wxWindows License
|
|
#---------------------------------------------------------------------------
|
|
|
|
import etgtools
|
|
import etgtools.tweaker_tools as tools
|
|
|
|
PACKAGE = "wx"
|
|
MODULE = "_core"
|
|
NAME = "help" # Base name of the file to generate to for this script
|
|
DOCSTRING = ""
|
|
|
|
# The classes and/or the basename of the Doxygen XML files to be processed by
|
|
# this script.
|
|
ITEMS = [ "wxHelpControllerBase",
|
|
#"wxHelpController", See note below
|
|
]
|
|
|
|
#---------------------------------------------------------------------------
|
|
|
|
def run():
|
|
# Parse the XML file(s) building a collection of Extractor objects
|
|
module = etgtools.ModuleDef(PACKAGE, MODULE, NAME, DOCSTRING)
|
|
etgtools.parseDoxyXML(module, ITEMS)
|
|
|
|
#-----------------------------------------------------------------
|
|
# Tweak the parsed meta objects in the module object as needed for
|
|
# customizing the generated code and docstrings.
|
|
|
|
c = module.find('wxHelpControllerBase')
|
|
assert isinstance(c, etgtools.ClassDef)
|
|
|
|
c.find('GetFrameParameters.size').out = True
|
|
c.find('GetFrameParameters.pos').out = True
|
|
c.find('GetFrameParameters.newFrameEachTime').out = True
|
|
|
|
# We want to avoid having to link with wxHTML so override the include of
|
|
# wx/help.h and use wx/helpbase.h instead. This is needed with GCC 16+
|
|
# which performs more aggressive inlining.
|
|
c.includes[c.includes.index('wx/help.h')] = 'wx/helpbase.h'
|
|
|
|
|
|
# NOTE: Since wxHelpController is an alias for wxHtmlHelpController on
|
|
# Mac and GTK, and since we don't want to force the wx.core extension
|
|
# module to link to the wxHTML library, then we won't provide a wrapper
|
|
# for the wxHelpController 'class' here.
|
|
#
|
|
# Instead we'll add a Python factory function that accomplishes the same
|
|
# thing. Basically it just provides a help controller instance that is the
|
|
# best for the platform.
|
|
|
|
module.addPyFunction('HelpController', '(parentWindow=None)',
|
|
doc="""\
|
|
Rather than being an alias for some class, the Python version of
|
|
``HelpController`` is a factory function that creates and returns an
|
|
instance of the best Help Controller for the platform.
|
|
""",
|
|
body="""\
|
|
try:
|
|
if 'wxMSW' in wx.PlatformInfo:
|
|
from .msw import CHMHelpController as ControllerClass
|
|
else:
|
|
from .html import HtmlHelpController as ControllerClass
|
|
except ImportError:
|
|
from .adv import ExtHelpController as ControllerClass
|
|
|
|
return ControllerClass(parentWindow)
|
|
""")
|
|
|
|
|
|
|
|
#-----------------------------------------------------------------
|
|
tools.doCommonTweaks(module)
|
|
tools.runGenerators(module)
|
|
|
|
|
|
#---------------------------------------------------------------------------
|
|
if __name__ == '__main__':
|
|
run()
|
|
|