summaryrefslogtreecommitdiffstats
path: root/python/sip/custom
diff options
context:
space:
mode:
Diffstat (limited to 'python/sip/custom')
-rw-r--r--python/sip/custom/custom.c60
-rw-r--r--python/sip/custom/customw.c64
-rw-r--r--python/sip/custom/mkcustom.py87
3 files changed, 211 insertions, 0 deletions
diff --git a/python/sip/custom/custom.c b/python/sip/custom/custom.c
new file mode 100644
index 00000000..e5ec2d25
--- /dev/null
+++ b/python/sip/custom/custom.c
@@ -0,0 +1,60 @@
+/*
+ * This file is the basis of a custom Python interpreter. Use it for Linux,
+ * UNIX and Windows (console). You will also need to edit mkcustom.py.
+ */
+
+
+#include <Python.h>
+
+
+int main(int argc, char **argv)
+{
+ /*
+ * Declare the module initialisation function for each module you want
+ * to be a builtin in the custom interpreter. The name of the function
+ * will be the name of the module with "init" prepended. The modules
+ * must be built as static libraries (using the -k flag to configure.py
+ * for SIP and PyQt).
+ */
+
+ /* The sip module will be builtin. */
+ extern void initsip(void);
+
+ /*
+ * Uncomment these (and in the structure below) to include the PyQt
+ * modules as builtins.
+ */
+/* extern void initqt(void);*/
+/* extern void initqtaxcontainer(void);*/
+/* extern void initqtcanvas(void);*/
+/* extern void initqtext(void);*/
+/* extern void initqtgl(void);*/
+/* extern void initqtnetwork(void);*/
+/* extern void initqtsql(void);*/
+/* extern void initqttable(void);*/
+/* extern void initqtui(void);*/
+/* extern void initqtxml(void);*/
+
+ /*
+ * This structure specifies the names and initialisation functions of
+ * the builtin modules.
+ */
+ struct _inittab builtin_modules[] = {
+ {"sip", initsip},
+/* {"qt", initqt},*/
+/* {"qtaxcontainer", initqtaxcontainer},*/
+/* {"qtcanvas", initqtcanvas},*/
+/* {"qtext", initqtext},*/
+/* {"qtgl", initqtgl},*/
+/* {"qtnetwork", initqtnetwork},*/
+/* {"qtsql", initqtsql},*/
+/* {"qttable", initqttable},*/
+/* {"qtui", initqtui},*/
+/* {"qtxml", initqtxml},*/
+ {NULL, NULL}
+ };
+
+ PyImport_ExtendInittab(builtin_modules);
+
+ return Py_Main(argc, argv);
+}
diff --git a/python/sip/custom/customw.c b/python/sip/custom/customw.c
new file mode 100644
index 00000000..58770766
--- /dev/null
+++ b/python/sip/custom/customw.c
@@ -0,0 +1,64 @@
+/*
+ * This file is the basis of a custom Python interpreter. Use it for Windows
+ * (non-console). You will also need to edit mkcustom.py.
+ */
+
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+
+#include <Python.h>
+
+
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine, int nCmdShow)
+{
+ /*
+ * Declare the module initialisation function for each module you want
+ * to be a builtin in the custom interpreter. The name of the function
+ * will be the name of the module with "init" prepended. The modules
+ * must be built as static libraries (using the -k flag to configure.py
+ * for SIP and PyQt).
+ */
+
+ /* The sip module will be builtin. */
+ extern void initsip(void);
+
+ /*
+ * Uncomment these (and in the structure below) to include the PyQt
+ * modules as builtins.
+ */
+/* extern void initqt(void);*/
+/* extern void initqtaxcontainer(void);*/
+/* extern void initqtcanvas(void);*/
+/* extern void initqtext(void);*/
+/* extern void initqtgl(void);*/
+/* extern void initqtnetwork(void);*/
+/* extern void initqtsql(void);*/
+/* extern void initqttable(void);*/
+/* extern void initqtui(void);*/
+/* extern void initqtxml(void);*/
+
+ /*
+ * This structure specifies the names and initialisation functions of
+ * the builtin modules.
+ */
+ struct _inittab builtin_modules[] = {
+ {"sip", initsip},
+/* {"qt", initqt},*/
+/* {"qtaxcontainer", initqtaxcontainer},*/
+/* {"qtcanvas", initqtcanvas},*/
+/* {"qtext", initqtext},*/
+/* {"qtgl", initqtgl},*/
+/* {"qtnetwork", initqtnetwork},*/
+/* {"qtsql", initqtsql},*/
+/* {"qttable", initqttable},*/
+/* {"qtui", initqtui},*/
+/* {"qtxml", initqtxml},*/
+ {NULL, NULL}
+ };
+
+ PyImport_ExtendInittab(builtin_modules);
+
+ return Py_Main(__argc, __argv);
+}
diff --git a/python/sip/custom/mkcustom.py b/python/sip/custom/mkcustom.py
new file mode 100644
index 00000000..0e8deabb
--- /dev/null
+++ b/python/sip/custom/mkcustom.py
@@ -0,0 +1,87 @@
+"""This Python script uses the SIP build system to create a Makefile for
+building a custom Python interpreter. The script doesn't take any command line
+flags - just edit it to suit your needs. You will also need to edit custom.c
+or customw.c.
+"""
+
+
+import sys
+import sipconfig
+
+
+# Get the SIP configuration.
+cfg = sipconfig.Configuration()
+
+
+# This is the name of the interpreter executable (excluding any platform
+# specific extension.
+InterpreterName = "custom"
+
+# Set this to True to create a non-console interpreter on Windows (ie. a custom
+# version of pythonw). Make sure you make changes to customw.c rather than
+# custom.c. It is ignored on other platforms.
+WindowsInterpreter = False
+
+# Set this to the list of the name of modules to be builtin to the custom
+# interpreter. The modules must also be added to custom.c and/or customw.c.
+Modules = ["sip"]
+#Modules = ["sip", "qt", "qtaxcontainer", "qtcanvas", "qtext", "qtgl",
+# "qtnetwork", "qtsql", "qttable", "qtui", "qtxml"]
+
+# Set this to the name of the directory containing the static modules.
+ModuleDirectory = cfg.default_mod_dir
+
+# Set this to the list of additional libraries to link with the custom
+# interpreter.
+ExtraLibraries = []
+#ExtraLibraries = ["qassistantclient"]
+
+# Set this to the list of additional directory names to search for any
+# additional libraries.
+ExtraLibraryDirectories = []
+
+# Set this to the name of the directory containing the Python library.
+PythonLibraryDirectory = cfg.py_lib_dir
+
+
+# Make platform specific modifications.
+if sys.platform == "linux2":
+ ExtraLibraries.append("util")
+
+
+# Create a dictionary describing the target and source files to be passed to
+# the SIP build system.
+build = {}
+
+if sys.platform == "win32" and WindowsInterpreter:
+ build["target"] = InterpreterName + "w"
+ build["sources"] = "customw.c"
+ console = False
+else:
+ build["target"] = InterpreterName
+ build["sources"] = "custom.c"
+ console = True
+
+# Assume Qt support is required if Qt support was enabled in the sip module.
+qt = (cfg.qt_version > 0)
+
+# Create the Makefile instance.
+mf = sipconfig.ProgramMakefile(cfg, build, python=True, console=console, qt=qt)
+
+# Modify the Makefile according to the values set above.
+mf.extra_lib_dirs.extend(ExtraLibraryDirectories)
+mf.extra_lib_dirs.append(ModuleDirectory)
+mf.extra_lib_dirs.append(PythonLibraryDirectory)
+
+mf.extra_libs.extend(Modules)
+
+if sys.platform == "win32":
+ pylib = "python%u%u"
+else:
+ pylib = "python%u.%u"
+
+mf.extra_libs.append(pylib % ((cfg.py_version >> 16), ((cfg.py_version >> 8) & 0xff)))
+mf.extra_libs.extend(ExtraLibraries)
+
+# Generate the Makefile itself.
+mf.generate()