Bug 574501 - Install giscanner Python module to private directory
authorColin Walters <walters@verbum.org>
Mon, 9 Mar 2009 19:08:50 +0000 (15:08 -0400)
committerColin Walters <walters@verbum.org>
Mon, 16 Mar 2009 17:29:50 +0000 (13:29 -0400)
We don't want to pollute the global namespace with our private
libraries.  Also, this sidesteps all the craziness that is happening
with OS vendors changing how Python installs modules.

configure.ac
giscanner/Makefile.am
giscanner/scannermain.py [moved from tools/g-ir-scanner with 93% similarity, mode: 0644]
tools/g-ir-scanner.in [new file with mode: 0755]

index 5487e75..8b57e17 100644 (file)
@@ -212,4 +212,5 @@ examples/Makefile
 docs/Makefile
 docs/reference/Makefile
 gobject-introspection-1.0.pc])
+AC_CONFIG_FILES([tools/g-ir-scanner], [chmod a+x tools/g-ir-scanner])
 AC_OUTPUT
index bc2977f..1ecd977 100644 (file)
@@ -31,7 +31,7 @@ libgiscanner_la_CFLAGS = $(GOBJECT_CFLAGS)
 GCOVSOURCES = $(libgiscanner_la_SOURCES)
 
 # Python module
-pkgpyexecdir = $(pyexecdir)/giscanner
+pkgpyexecdir = $(pkglibdir)/giscanner
 pkgpyexec_LTLIBRARIES = _giscanner.la
 pkgpyexec_PYTHON =             \
        __init__.py             \
@@ -47,6 +47,7 @@ pkgpyexec_PYTHON =            \
        libtoolimporter.py      \
        minixpath.py            \
        odict.py                \
+       scannermain.py          \
        sourcescanner.py        \
        transformer.py          \
        utils.py                \
old mode 100755 (executable)
new mode 100644 (file)
similarity index 93%
rename from tools/g-ir-scanner
rename to giscanner/scannermain.py
index 4b5b924..f7ac884
@@ -2,6 +2,7 @@
 # -*- Mode: Python -*-
 # GObject-Introspection - a framework for introspecting GObject libraries
 # Copyright (C) 2008  Johan Dahlin
+# Copyright (C) 2009 Red Hat, Inc.
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -24,23 +25,6 @@ import optparse
 import os
 import sys
 
-# This only works on unix systems
-currentdir = os.path.dirname(os.path.abspath(sys.argv[0]))
-basedir = os.path.abspath(os.path.join(currentdir, '..'))
-if (os.path.exists(os.path.join(basedir, '.svn')) or
-    os.path.exists(os.path.join(basedir, '.git'))):
-    path = basedir
-else:
-    libdir = 'lib'
-    for p in sys.path:
-       if 'lib64' in p:
-           libdir = 'lib64'
-           break
-
-    path = os.path.join(basedir, libdir, 'python%d.%d' % sys.version_info[:2],
-                        'site-packages')
-sys.path.insert(0, path)
-
 from giscanner.annotationparser import AnnotationParser, InvalidAnnotationError
 from giscanner.ast import Include
 from giscanner.cachestore import CacheStore
@@ -110,7 +94,7 @@ def _get_option_parser():
                       help="Inject additional components into GIR XML")
     parser.add_option("", "--xpath-assertions",
                       action="store", dest="xpath_assertions",
-                      help="Use given file to create assertions on GIR content")
+            help="Use given file to create assertions on GIR content")
     parser.add_option("", "--c-include",
                       action="append", dest="c_includes", default=[],
                       help="headers which should be included in C programs")
@@ -194,14 +178,14 @@ def validate(assertions, path):
         xpath_assert(root, assertion)
     f.close()
     return 0
-    
+
 def process_options(output, allowed_flags):
     for option in output.split():
         for flag in allowed_flags:
             if not option.startswith(flag):
                 continue
             yield option
-            break    
+            break
 
 def process_packages(parser, options, packages):
     args = ['pkg-config', '--cflags']
@@ -214,7 +198,7 @@ def process_packages(parser, options, packages):
         sys.exit(1)
     # Some pkg-config files on Windows have options we don't understand,
     # so we explicitly filter to only the ones we need.
-    options_whitelist = ['-I', '-D', '-U', '-l', '-L']        
+    options_whitelist = ['-I', '-D', '-U', '-l', '-L']
     filtered_output = list(process_options(output, options_whitelist))
     pkg_options, unused = parser.parse_args(filtered_output)
     options.cpp_includes.extend(pkg_options.cpp_includes)
@@ -229,9 +213,9 @@ def process_packages(parser, options, packages):
         sys.exit(1)
     filtered_output = list(process_options(output, options_whitelist))
     pkg_options, unused = parser.parse_args(filtered_output)
-    options.library_paths.extend(pkg_options.library_paths)    
+    options.library_paths.extend(pkg_options.library_paths)
 
-def main(args):
+def scanner_main(args):
     parser = _get_option_parser()
     (options, args) = parser.parse_args(args)
 
@@ -285,8 +269,8 @@ def main(args):
             # Make absolute, because we do comparisons inside scannerparser.c
             # against the absolute path that cpp will give us
             filenames.append(os.path.abspath(arg))
-            
-    cachestore = CacheStore()            
+
+    cachestore = CacheStore()
     transformer = Transformer(cachestore,
                               options.namespace_name,
                               options.namespace_version)
@@ -301,7 +285,7 @@ def main(args):
             raise ValueError("Invalid include path %r" % (include, ))
         include_obj = Include.from_string(include)
         transformer.register_include(include_obj)
-        
+
     packages = set(options.packages)
     packages.update(transformer.get_pkgconfig_packages())
     process_packages(parser, options, packages)
@@ -333,7 +317,7 @@ def main(args):
         binary = IntrospectionBinary(args)
     else:
         binary = compile_introspection_binary(options,
-                                              glibtransformer.get_get_type_functions())
+                            glibtransformer.get_get_type_functions())
 
     glibtransformer.set_introspection_binary(binary)
 
@@ -356,5 +340,3 @@ def main(args):
         print data
 
     return 0
-
-sys.exit(main(sys.argv))
diff --git a/tools/g-ir-scanner.in b/tools/g-ir-scanner.in
new file mode 100755 (executable)
index 0000000..b7197c9
--- /dev/null
@@ -0,0 +1,39 @@
+#!/usr/bin/env python
+# -*- Mode: Python -*-
+# GObject-Introspection - a framework for introspecting GObject libraries
+# Copyright (C) 2008  Johan Dahlin
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
+
+import os
+import sys
+
+# This only works on unix systems
+currentdir = os.path.dirname(os.path.abspath(sys.argv[0]))
+basedir = os.path.abspath(os.path.join(currentdir, '..'))
+if (os.path.exists(os.path.join(basedir, '.svn')) or
+    os.path.exists(os.path.join(basedir, '.git'))):
+    path = basedir
+else:
+    # This is a private directory, we don't want to pollute the global
+    # namespace.
+    path = os.path.join('@libdir@', 'gobject-introspection')
+sys.path.insert(0, path)
+
+from giscanner.scannermain import scanner_main
+
+sys.exit(scanner_main(sys.argv))