diff options
author | Stephen Kelly <steveire@gmail.com> | 2016-05-10 00:00:37 +0200 |
---|---|---|
committer | Stephen Kelly <steveire@gmail.com> | 2016-10-31 15:35:23 +0000 |
commit | 9e83e56088057a68589ffa99ce6019058f4e4fd9 (patch) | |
tree | aba1ea366bd80e8bdeb293b5a5c004a600c6771d /find-modules/Qt5Ruleset.py | |
parent | 37f1b5c4f905a37ddb8b43001bf2e4408c2a703b (diff) | |
download | extra-cmake-modules-9e83e56088057a68589ffa99ce6019058f4e4fd9.tar.gz extra-cmake-modules-9e83e56088057a68589ffa99ce6019058f4e4fd9.tar.bz2 |
Add Qt5 Ruleset.
The ruleset is used to transform or omit artifacts in C++ header files
when determining the SIP content to generate. Some content common to
all Qt-using libraries can be processed by using the rule set present
here. For example, most Q_METATYPE internal declarations should be
discarded.
Diffstat (limited to 'find-modules/Qt5Ruleset.py')
-rw-r--r-- | find-modules/Qt5Ruleset.py | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/find-modules/Qt5Ruleset.py b/find-modules/Qt5Ruleset.py new file mode 100644 index 00000000..6ace2962 --- /dev/null +++ b/find-modules/Qt5Ruleset.py @@ -0,0 +1,128 @@ +#!/usr/bin/env python +#============================================================================= +# Copyright 2016 Shaheed Haque <srhaque@theiet.org> +# Copyright 2016 Stephen Kelly <steveire@gmail.com> +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +from __future__ import print_function + +import rules_engine + +def container_rules(): + return [ + # + # SIP does not seem to be able to handle these. + # + [".*", "(QMetaTypeId|QTypeInfo)<.*>", ".*", ".*", ".*", rules_engine.container_discard], + # + # SIP does not seem to be able to handle templated containers. + # + [".*", ".*<.*", ".*", ".*", ".*", rules_engine.container_discard], + ] + +def function_rules(): + return [ + # + # Discard functions emitted by QOBJECT. + # + [".*", "metaObject|qt_metacast|tr|trUtf8|qt_metacall|qt_check_for_QOBJECT_macro|qt_check_for_QGADGET_macro", ".*", ".*", ".*", rules_engine.function_discard], + # + # SIP does not support operator=. + # + [".*", "operator=", ".*", ".*", ".*", rules_engine.function_discard], + + [".*", ".*", ".*", ".*", ".*::QPrivateSignal.*", rules_engine.function_discard], + # + # TODO: Temporarily remove any functions which require templates. SIP seems to support, e.g. QPairs, + # but we have not made them work yet. + # + + [".*", ".*", ".+", ".*", ".*", rules_engine.function_discard], + [".*", ".*<.*>.*", ".*", ".*", ".*", rules_engine.function_discard], + + [".*", ".*", ".*", ".*", ".*std::function.*", rules_engine.function_discard], + [".*", ".*", ".*", ".*", ".*std::numeric_limits.*", rules_engine.function_discard], + [".*", ".*", ".*", ".*", ".*QPair.*", rules_engine.function_discard], + [".*", ".*", ".*", ".*QPair.*", ".*", rules_engine.function_discard], + + [".*", ".*", ".*", ".*", ".*QDebug.*", rules_engine.function_discard], + [".*", ".*", ".*", ".*QDebug.*", ".*", rules_engine.function_discard], + + [".*", ".*", ".*", ".*", ".*QExplicitlySharedDataPointer.*", rules_engine.function_discard], + [".*", ".*", ".*", ".*QExplicitlySharedDataPointer.*", ".*", rules_engine.function_discard], + + [".*", ".*", ".*", ".*", ".*Private.*", rules_engine.function_discard], + [".*", ".*", ".*", "mode_t", ".*", rules_engine.return_rewrite_mode_t_as_int], + [".*", "d_func", ".*", ".*", ".*", rules_engine.function_discard], + + [".*", "operator\|", ".*", ".*", ".*", rules_engine.function_discard], + ] + +def parameter_rules(): + return [ + # + # Annotate with Transfer or TransferThis when we see a parent object. + # + [".*", ".*", ".*", r"[KQ][A-Za-z_0-9]+\W*\*\W*parent", ".*", rules_engine.parameter_transfer_to_parent], + [".*", ".*", ".*", "mode_t.*", ".*", rules_engine.param_rewrite_mode_t_as_int], + [".*", ".*", ".*", ".*enum .*", ".*", rules_engine.parameter_strip_class_enum], + ] + +def variable_rules(): + return [ + # + # Discard variable emitted by QOBJECT. + # + [".*", "staticMetaObject", ".*", rules_engine.variable_discard], + # + # Discard "private" variables. + # + [".*", "d_ptr", ".*", rules_engine.variable_discard], + [".*", "d", ".*Private.*", rules_engine.variable_discard], + ] + +class RuleSet(rules_engine.RuleSet): + """ + SIP file generator rules. This is a set of (short, non-public) functions + and regular expression-based matching rules. + """ + def __init__(self): + self._container_db = rules_engine.ContainerRuleDb(container_rules) + self._fn_db = rules_engine.FunctionRuleDb(function_rules) + self._param_db = rules_engine.ParameterRuleDb(parameter_rules) + self._var_db = rules_engine.VariableRuleDb(variable_rules) + + def container_rules(self): + return self._container_db + + def function_rules(self): + return self._fn_db + + def parameter_rules(self): + return self._param_db + + def variable_rules(self): + return self._var_db |