summaryrefslogtreecommitdiffstats
path: root/codegen/mkskel.py
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2008-01-19 12:49:29 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-01-19 12:49:29 +0000
commit9c43da820eb2bd872e58ad12d65ed6c89d556893 (patch)
treee4f897f87a5cc9585495b7e41170bf770ebb56a2 /codegen/mkskel.py
parent23df5efb74f6b9b6c5da7a8db89ccd612533327d (diff)
downloadpygobject-9c43da820eb2bd872e58ad12d65ed6c89d556893.tar.gz
pygobject-9c43da820eb2bd872e58ad12d65ed6c89d556893.tar.xz
pygobject-9c43da820eb2bd872e58ad12d65ed6c89d556893.zip
Import codegen from pygtk. Add initial gio and gio.unix bindings.
2008-01-19 Johan Dahlin <johan@gnome.org> * Makefile.am: * codegen/Makefile.am: * codegen/README.defs: * codegen/__init__.py: * codegen/argtypes.py: * codegen/code-coverage.py: * codegen/codegen.py: * codegen/createdefs.py: * codegen/definitions.py: * codegen/defsconvert.py: * codegen/defsgen.py: * codegen/defsparser.py: * codegen/docextract.py: * codegen/docextract_to_xml.py: * codegen/docgen.py: * codegen/h2def.py: * codegen/mergedefs.py: * codegen/missingdefs.py: * codegen/mkskel.py: * codegen/override.py: * codegen/pygtk-codegen-2.0.in: * codegen/reversewrapper.py: * codegen/scanvirtuals.py: * codegen/scmexpr.py: * configure.ac: * gio/Makefile.am: * gio/__init__.py: * gio/gio-types.defs: * gio/gio.defs: * gio/gio.override: * gio/giomodule.c: (init_gio): * gio/unix-types.defs: * gio/unix.defs: * gio/unix.override: * gio/unixmodule.c: (initunix): Import codegen from pygtk. Add initial gio and gio.unix bindings. svn path=/trunk/; revision=730
Diffstat (limited to 'codegen/mkskel.py')
-rwxr-xr-xcodegen/mkskel.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/codegen/mkskel.py b/codegen/mkskel.py
new file mode 100755
index 0000000..61f520b
--- /dev/null
+++ b/codegen/mkskel.py
@@ -0,0 +1,89 @@
+#!/usr/bin/env python
+# -*- Mode: Python; py-indent-offset: 4 -*-
+
+import sys, os, getopt
+
+module_init_template = \
+'/* -*- Mode: C; c-basic-offset: 4 -*- */\n' + \
+'#ifdef HAVE_CONFIG_H\n' + \
+'# include "config.h"\n' + \
+'#endif\n' + \
+'#include <Python.h>\n' + \
+'#include <pygtk.h>\n' + \
+'\n' + \
+'/* include any extra headers needed here */\n' + \
+'\n' + \
+'void %(prefix)s_register_classes(PyObject *d);\n' + \
+'extern PyMethodDef %(prefix)s_functions[];\n' + \
+'\n' + \
+'DL_EXPORT(void)\n' + \
+'init%(module)s(void)\n' + \
+'{\n' + \
+' PyObject *m, *d;\n' + \
+'\n' + \
+' /* perform any initialisation required by the library here */\n' + \
+'\n' + \
+' m = Py_InitModule("%(module)s", %(prefix)s_functions);\n' + \
+' d = PyModule_GetDict(m);\n' + \
+'\n' + \
+' init_pygtk();\n' + \
+'\n' + \
+' %(prefix)s_register_classes(d);\n' + \
+'\n' + \
+' /* add anything else to the module dictionary (such as constants) */\n' +\
+'\n' + \
+' if (PyErr_Occurred())\n' + \
+' Py_FatalError("could not initialise module %(module)s");\n' + \
+'}\n'
+
+override_template = \
+'/* -*- Mode: C; c-basic-offset: 4 -*- */\n' + \
+'%%%%\n' + \
+'headers\n' + \
+'/* include any required headers here */\n' + \
+'%%%%\n' + \
+'init\n' + \
+' /* include any code here that needs to be executed before the\n' + \
+' * extension classes get initialised */\n' + \
+'%%%%\n' + \
+'\n' + \
+'/* you should add appropriate ignore, ignore-glob and\n' + \
+' * override sections here */\n'
+
+def open_with_backup(file):
+ if os.path.exists(file):
+ try:
+ os.rename(file, file+'~')
+ except OSError:
+ # fail silently if we can't make a backup
+ pass
+ return open(file, 'w')
+
+def write_skels(fileprefix, prefix, module):
+ fp = open_with_backup(fileprefix+'module.c')
+ fp.write(module_init_template % { 'prefix': prefix, 'module': module })
+ fp.close()
+ fp = open_with_backup(fileprefix+'.override')
+ fp.write(override_template % { 'prefix': prefix, 'module': module })
+ fp.close()
+
+if __name__ == '__main__':
+ opts, args = getopt.getopt(sys.argv[1:], 'f:p:m:h',
+ ['file-prefix=', 'prefix=', 'module=', 'help'])
+ fileprefix = None
+ prefix = None
+ module = None
+ for opt, arg in opts:
+ if opt in ('-f', '--file-prefix'):
+ fileprefix = arg
+ elif opt in ('-p', '--prefix'):
+ prefix = arg
+ elif opt in ('-m', '--module'):
+ module = arg
+ elif opt in ('-h', '--help'):
+ print 'usage: mkskel.py -f fileprefix -p prefix -m module'
+ sys.exit(0)
+ if not fileprefix or not prefix or not module:
+ print 'usage: mkskel.py -f fileprefix -p prefix -m module'
+ sys.exit(1)
+ write_skels(fileprefix, prefix, module)