gobject-introspection r169 - in trunk: . giscanner tools
- From: johan svn gnome org
- To: svn-commits-list gnome org
- Subject: gobject-introspection r169 - in trunk: . giscanner tools
- Date: Thu, 27 Mar 2008 19:20:45 +0000 (GMT)
Author: johan
Date: Thu Mar 27 19:20:45 2008
New Revision: 169
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=169&view=rev
Log:
2008-03-27 Johan Dahlin <johan gnome org>
* giscanner/giscannermodule.c:
* giscanner/scannerlexer.l:
* giscanner/sourcescanner.c:
* tools/g-ir-scanner:
Add simple pre-processor using subprocess and a PIPE.
Change the parse_file apis to accept a file descriptor.
Modified:
trunk/ChangeLog
trunk/giscanner/giscannermodule.c
trunk/giscanner/scannerlexer.l
trunk/giscanner/sourcescanner.c
trunk/tools/g-ir-scanner
Modified: trunk/giscanner/giscannermodule.c
==============================================================================
--- trunk/giscanner/giscannermodule.c (original)
+++ trunk/giscanner/giscannermodule.c Thu Mar 27 19:20:45 2008
@@ -200,13 +200,14 @@
pygi_source_scanner_parse_file (PyGISourceScanner *self,
PyObject *args)
{
+ int fd;
char *filename;
FILE *fp;
- if (!PyArg_ParseTuple (args, "s:SourceScanner.__init__", &filename))
+ if (!PyArg_ParseTuple (args, "is:SourceScanner.__init__", &fd, &filename))
return NULL;
- fp = fopen (filename, "r");
+ fp = fdopen (fd, "r");
if (!fp)
{
PyErr_SetFromErrnoWithFilename (PyExc_OSError, filename);
@@ -215,16 +216,14 @@
self->scanner->filenames =
g_list_append (self->scanner->filenames, g_strdup (filename));
- self->scanner->current_filename = self->scanner->filenames->data;
-
+ self->scanner->current_filename = g_strdup (filename);
+
if (!gi_source_scanner_parse_file (self->scanner, fp))
{
g_print ("Something went wrong..\n");
return NULL;
}
- fclose (fp);
-
Py_INCREF (Py_None);
return Py_None;
}
Modified: trunk/giscanner/scannerlexer.l
==============================================================================
--- trunk/giscanner/scannerlexer.l (original)
+++ trunk/giscanner/scannerlexer.l Thu Mar 27 19:20:45 2008
@@ -384,9 +384,13 @@
if (filename_builder->len > 0) {
char *filename = g_strcompress (filename_builder->str);
- g_free (scanner->current_filename);
- scanner->current_filename = g_realpath(filename);
- g_free(filename);
+ if (g_realpath (filename))
+ {
+ g_free (scanner->current_filename);
+ scanner->current_filename = g_realpath (filename);
+ g_assert (scanner->current_filename);
+ g_free(filename);
+ }
}
g_string_free (filename_builder, TRUE);
Modified: trunk/giscanner/sourcescanner.c
==============================================================================
--- trunk/giscanner/sourcescanner.c (original)
+++ trunk/giscanner/sourcescanner.c Thu Mar 27 19:20:45 2008
@@ -249,6 +249,7 @@
gboolean found_filename = FALSE;
GList *l;
+ g_assert (scanner->current_filename);
for (l = scanner->filenames; l != NULL; l = l->next)
{
if (strcmp (l->data, scanner->current_filename) == 0)
Modified: trunk/tools/g-ir-scanner
==============================================================================
--- trunk/tools/g-ir-scanner (original)
+++ trunk/tools/g-ir-scanner Thu Mar 27 19:20:45 2008
@@ -1,26 +1,57 @@
#!/usr/bin/env python
import os
+import subprocess
import sys
sys.path.insert(0, '.')
import giscanner
+
+class Generator(object):
+ def __init__(self):
+ self._scanner = giscanner.SourceScanner()
+
+ def add_header(self, filename):
+ filename = os.path.abspath(filename)
+
+ proc = subprocess.Popen('cpp -U__GNUC__ -I.',
+ executable='/usr/bin/cpp',
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ )
+ proc.stdin.write(open(filename).read())
+ proc.stdin.close()
+ retval = proc.wait()
+ if retval != 0:
+ print 'Preprocessing failed'
+ return
+
+ fd = proc.stdout.fileno()
+ self._scanner.parse_file(fd, filename)
+
+ add_source = add_header
+ def dump(self):
+ print '-'*30
+ for symbol in self._scanner.get_symbols():
+ print symbol
+ print symbol.ident, symbol.type
+ print symbol.base_type.name
+ print '-'*30
+
+
def main(args):
if len(args) == 1:
print 'ERROR: Needs at least one filename.'
return 0
- scan = giscanner.SourceScanner()
+ gen = Generator()
for arg in args[1:]:
- filename = os.path.abspath(arg)
- scan.parse_file(filename)
+ if arg.endswith('.c'):
+ gen.add_source(arg)
+ elif arg.endswith('.h'):
+ gen.add_header(arg)
- print '-'*30
- for symbol in scan.get_symbols():
- print symbol
- print symbol.ident, symbol.type
- print symbol.base_type.name
- print '-'*30
+ gen.dump()
sys.exit(main(sys.argv))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]