diff options
author | Johan Dahlin <johan@gnome.org> | 2008-01-19 12:49:29 +0000 |
---|---|---|
committer | Johan Dahlin <johan@src.gnome.org> | 2008-01-19 12:49:29 +0000 |
commit | 9c43da820eb2bd872e58ad12d65ed6c89d556893 (patch) | |
tree | e4f897f87a5cc9585495b7e41170bf770ebb56a2 /codegen/mkskel.py | |
parent | 23df5efb74f6b9b6c5da7a8db89ccd612533327d (diff) | |
download | pygobject-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-x | codegen/mkskel.py | 89 |
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) |