gobject-introspection 3.0.7-x86-mingw32 → 3.0.8-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +2 -2
- data/ext/gobject-introspection/extconf.rb +1 -0
- data/ext/gobject-introspection/rb-gi-argument.c +123 -26
- data/ext/gobject-introspection/rb-gi-function-info.c +558 -19
- data/ext/gobject-introspection/rb-gi-repository.c +9 -0
- data/ext/gobject-introspection/rb-gobject-introspection.h +3 -0
- data/lib/2.2/gobject_introspection.so +0 -0
- data/lib/2.3/gobject_introspection.so +0 -0
- data/lib/gobject-introspection/loader.rb +1 -1
- data/vendor/local/bin/g-ir-compiler.exe +0 -0
- data/vendor/local/bin/g-ir-generate.exe +0 -0
- data/vendor/local/bin/libgirepository-1.0-1.dll +0 -0
- data/vendor/local/include/gobject-introspection-1.0/gistructinfo.h +4 -0
- data/vendor/local/lib/girepository-1.0/GIRepository-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/GLib-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/GModule-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/GObject-2.0.typelib +0 -0
- data/vendor/local/lib/girepository-1.0/Gio-2.0.typelib +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/__init__.py +1 -1
- data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/__init__.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.py +39 -11
- data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationmain.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.py +187 -164
- data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/annotationparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ast.py +191 -58
- data/vendor/local/lib/gobject-introspection/giscanner/ast.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ast.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/cachestore.py +42 -54
- data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/cachestore.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ccompiler.py +272 -82
- data/vendor/local/lib/gobject-introspection/giscanner/ccompiler.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/ccompiler.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/codegen.py +18 -11
- data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/codegen.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.py +4 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/__init__.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/counter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/counter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.py +25 -13
- data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/collections/ordereddict.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docmain.py +21 -19
- data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docmain.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docwriter.py +19 -16
- data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/docwriter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/dumper.py +148 -158
- data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/dumper.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.py +31 -21
- data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/gdumpparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girparser.py +13 -5
- data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girwriter.py +12 -13
- data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/girwriter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.py +5 -1
- data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/introspectablepass.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.py +11 -9
- data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/libtoolimporter.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.py +150 -45
- data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/maintransformer.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/message.py +56 -19
- data/vendor/local/lib/gobject-introspection/giscanner/message.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/message.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/msvccompiler.py +101 -0
- data/vendor/local/lib/gobject-introspection/giscanner/msvccompiler.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/msvccompiler.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/scannermain.py +41 -22
- data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/scannermain.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.py +6 -1
- data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sectionparser.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/shlibs.py +8 -2
- data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/shlibs.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.py +42 -56
- data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/sourcescanner.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.py +19 -5
- data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/testcodegen.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/transformer.py +73 -37
- data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/transformer.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/utils.py +92 -14
- data/vendor/local/lib/gobject-introspection/giscanner/utils.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/utils.pyo +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.py +30 -11
- data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyc +0 -0
- data/vendor/local/lib/gobject-introspection/giscanner/xmlwriter.pyo +0 -0
- data/vendor/local/lib/libgirepository-1.0.a +0 -0
- data/vendor/local/lib/libgirepository-1.0.dll.a +0 -0
- data/vendor/local/lib/libgirepository-1.0.la +1 -1
- data/vendor/local/lib/pkgconfig/gobject-introspection-1.0.pc +1 -1
- data/vendor/local/lib/pkgconfig/gobject-introspection-no-export-1.0.pc +1 -1
- data/vendor/local/share/gir-1.0/GIRepository-2.0.gir +57 -13
- data/vendor/local/share/gir-1.0/GLib-2.0.gir +2018 -894
- data/vendor/local/share/gir-1.0/GModule-2.0.gir +2 -1
- data/vendor/local/share/gir-1.0/GObject-2.0.gir +1107 -674
- data/vendor/local/share/gir-1.0/Gio-2.0.gir +5589 -1287
- data/vendor/local/share/gobject-introspection-1.0/Makefile.introspection +4 -2
- data/vendor/local/share/gobject-introspection-1.0/gdump.c +8 -0
- data/vendor/local/share/gobject-introspection-1.0/tests/everything.c +273 -323
- data/vendor/local/share/gobject-introspection-1.0/tests/everything.h +58 -38
- data/vendor/local/share/gobject-introspection-1.0/tests/gimarshallingtests.c +1 -1
- data/vendor/local/share/gobject-introspection-1.0/tests/regress.c +177 -23
- data/vendor/local/share/gobject-introspection-1.0/tests/regress.h +40 -0
- data/vendor/local/share/man/man1/g-ir-compiler.1 +7 -7
- metadata +9 -7
- data/lib/2.0/gobject_introspection.so +0 -0
- data/lib/2.1/gobject_introspection.so +0 -0
Binary file
|
Binary file
|
@@ -20,10 +20,13 @@
|
|
20
20
|
|
21
21
|
import os
|
22
22
|
import subprocess
|
23
|
+
import tempfile
|
24
|
+
|
23
25
|
import sys
|
24
26
|
import distutils
|
25
27
|
|
26
28
|
from distutils.msvccompiler import MSVCCompiler
|
29
|
+
from distutils.unixccompiler import UnixCCompiler
|
27
30
|
from distutils.cygwinccompiler import Mingw32CCompiler
|
28
31
|
from distutils.sysconfig import customize_compiler
|
29
32
|
|
@@ -36,118 +39,260 @@ class CCompiler(object):
|
|
36
39
|
compiler = None
|
37
40
|
_cflags_no_deprecation_warnings = ''
|
38
41
|
|
39
|
-
def __init__(self,
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
42
|
+
def __init__(self,
|
43
|
+
environ=os.environ,
|
44
|
+
osname=os.name,
|
45
|
+
compiler_name=None):
|
46
|
+
|
47
|
+
if osname == 'nt':
|
48
|
+
# The compiler used here on Windows may well not be
|
49
|
+
# the same compiler that was used to build Python,
|
50
|
+
# as the official Python binaries are built with
|
51
|
+
# Visual Studio
|
52
|
+
if compiler_name is None:
|
53
|
+
if environ.get('MSYSTEM') == 'MINGW32' or environ.get('MSYSTEM') == 'MINGW64':
|
54
|
+
compiler_name = 'mingw32'
|
55
|
+
else:
|
56
|
+
compiler_name = distutils.ccompiler.get_default_compiler()
|
57
|
+
if compiler_name != 'msvc' and \
|
58
|
+
compiler_name != 'mingw32':
|
59
|
+
raise SystemExit('Specified Compiler \'%s\' is unsupported.' % compiler_name)
|
60
|
+
else:
|
61
|
+
# XXX: Is it common practice to use a non-Unix compiler
|
62
|
+
# class instance on non-Windows on platforms g-i supports?
|
63
|
+
compiler_name = distutils.ccompiler.get_default_compiler()
|
64
|
+
|
65
|
+
# Now, create the distutils ccompiler instance based on the info we have.
|
66
|
+
if compiler_name == 'msvc':
|
67
|
+
# For MSVC, we need to create a instance of a subclass of distutil's
|
68
|
+
# MSVC9Compiler class, as it does not provide a preprocess()
|
69
|
+
# implementation
|
70
|
+
from . import msvccompiler
|
71
|
+
self.compiler = msvccompiler.get_msvc_compiler()
|
72
|
+
|
73
|
+
else:
|
74
|
+
self.compiler = distutils.ccompiler.new_compiler(compiler=compiler_name)
|
75
|
+
customize_compiler(self.compiler)
|
76
|
+
|
77
|
+
# customize_compiler() from distutils only does customization
|
78
|
+
# for 'unix' compiler type. Also, avoid linking to msvcrxx.dll
|
79
|
+
# for MinGW builds as the dumper binary does not link to the
|
80
|
+
# Python DLL, but link to msvcrt.dll if necessary.
|
81
|
+
if isinstance(self.compiler, Mingw32CCompiler):
|
82
|
+
if self.compiler.dll_libraries != ['msvcrt']:
|
83
|
+
self.compiler.dll_libraries = []
|
84
|
+
if self.compiler.preprocessor is None:
|
85
|
+
self.compiler.preprocessor = self.compiler.compiler + ['-E']
|
86
|
+
|
87
|
+
if self.check_is_msvc():
|
88
|
+
# We trick distutils to believe that we are (always) using a
|
89
|
+
# compiler supplied by a Windows SDK, so that we avoid launching
|
90
|
+
# a new build environment to detect the compiler that is used to
|
91
|
+
# build Python itself, which is not desirable, so that we use the
|
92
|
+
# compiler commands (and env) as-is.
|
93
|
+
os.environ['DISTUTILS_USE_SDK'] = '1'
|
94
|
+
if 'MSSdk' not in os.environ:
|
95
|
+
if 'WindowsSDKDir' in os.environ:
|
96
|
+
os.environ['MSSdk'] = os.environ.get('WindowsSDKDir')
|
97
|
+
elif os.environ.get('VCInstallDir'):
|
98
|
+
os.environ['MSSdk'] = os.environ.get('VCInstallDir')
|
99
|
+
|
100
|
+
self.compiler_cmd = 'cl.exe'
|
101
|
+
|
102
|
+
self._cflags_no_deprecation_warnings = "-wd4996"
|
103
|
+
else:
|
104
|
+
if (isinstance(self.compiler, Mingw32CCompiler)):
|
105
|
+
self.compiler_cmd = self.compiler.compiler[0]
|
106
|
+
else:
|
107
|
+
self.compiler_cmd = ' '.join(self.compiler.compiler)
|
108
|
+
|
109
|
+
self._cflags_no_deprecation_warnings = "-Wno-deprecated-declarations"
|
110
|
+
|
111
|
+
def get_internal_link_flags(self, args, libtool, libraries, libpaths):
|
50
112
|
# An "internal" link is where the library to be introspected
|
51
113
|
# is being built in the current directory.
|
52
114
|
|
53
|
-
# Search the current directory first
|
54
|
-
# (This flag is not supported nor needed for Visual C++)
|
55
|
-
if pkgconfig_msvc_flags == '':
|
56
|
-
args.append('-L.')
|
57
|
-
|
58
|
-
# https://bugzilla.gnome.org/show_bug.cgi?id=625195
|
59
115
|
if not libtool:
|
60
|
-
#
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
ns_version + '.lib')
|
69
|
-
else:
|
70
|
-
args.append(str.lower(ns) + '.lib')
|
116
|
+
# non-libtool case: prepare distutils use
|
117
|
+
if self.check_is_msvc():
|
118
|
+
for library in libraries:
|
119
|
+
# MSVC Builds don't use libtool, so no .la libraries,
|
120
|
+
# so just add the library directly.
|
121
|
+
self.compiler.add_library(library)
|
122
|
+
for libpath in libpaths:
|
123
|
+
self.compiler.add_library_dir(libpath)
|
71
124
|
else:
|
72
|
-
|
125
|
+
# Search the current directory first
|
126
|
+
# (This flag is not supported nor needed for Visual C++)
|
127
|
+
self.compiler.add_library_dir('.')
|
128
|
+
if os.name != 'nt':
|
129
|
+
self.compiler.add_runtime_library_dir('.')
|
73
130
|
|
74
|
-
|
75
|
-
|
76
|
-
if not libtool and pkgconfig_msvc_flags == '':
|
77
|
-
args.append('-Wl,--no-as-needed')
|
131
|
+
# https://bugzilla.gnome.org/show_bug.cgi?id=625195
|
132
|
+
args.append('-Wl,-rpath,.')
|
78
133
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
134
|
+
# Ensure libraries are always linked as we are going to use ldd to work
|
135
|
+
# out their names later
|
136
|
+
if sys.platform != 'darwin':
|
137
|
+
args.append('-Wl,--no-as-needed')
|
138
|
+
|
139
|
+
for library in libraries:
|
140
|
+
self.compiler.add_library(library)
|
141
|
+
if not self.check_is_msvc():
|
142
|
+
for library_path in libpaths:
|
143
|
+
args.append('-L' + library_path)
|
144
|
+
if os.path.isabs(library_path):
|
145
|
+
args.append('-Wl,-rpath,' + library_path)
|
146
|
+
|
147
|
+
else:
|
148
|
+
# libtool case: assemble linker command arguments, like we did before
|
149
|
+
args.append('-L.')
|
150
|
+
for library in libraries:
|
84
151
|
if library.endswith(".la"): # explicitly specified libtool library
|
85
152
|
args.append(library)
|
86
153
|
else:
|
87
154
|
args.append('-l' + library)
|
88
155
|
|
89
|
-
|
90
|
-
# Not used/needed on Visual C++, and -Wl,-rpath options
|
91
|
-
# will cause grief
|
92
|
-
if pkgconfig_msvc_flags == '':
|
156
|
+
for library_path in libpaths:
|
93
157
|
args.append('-L' + library_path)
|
94
158
|
if os.path.isabs(library_path):
|
95
|
-
|
96
|
-
|
97
|
-
args.append(library_path)
|
98
|
-
else:
|
99
|
-
args.append('-Wl,-rpath=' + library_path)
|
159
|
+
args.append('-rpath')
|
160
|
+
args.append(library_path)
|
100
161
|
|
101
|
-
def get_external_link_flags(self, args,
|
162
|
+
def get_external_link_flags(self, args, libtool, libraries):
|
102
163
|
# An "external" link is where the library to be introspected
|
103
164
|
# is installed on the system; this case is used for the scanning
|
104
165
|
# of GLib in gobject-introspection itself.
|
105
166
|
|
106
167
|
for library in libraries:
|
107
|
-
|
108
|
-
|
109
|
-
|
168
|
+
if not libtool:
|
169
|
+
self.compiler.add_library(library)
|
170
|
+
else:
|
110
171
|
if library.endswith(".la"): # explicitly specified libtool library
|
111
172
|
args.append(library)
|
112
173
|
else:
|
113
174
|
args.append('-l' + library)
|
114
175
|
|
176
|
+
def preprocess(self, source, output, cpp_options):
|
177
|
+
extra_postargs = ['-C']
|
178
|
+
(include_paths, macros, postargs) = self._set_cpp_options(cpp_options)
|
179
|
+
|
180
|
+
# We always want to include the current path
|
181
|
+
include_dirs = ['.']
|
182
|
+
|
183
|
+
include_dirs.extend(include_paths)
|
184
|
+
extra_postargs.extend(postargs)
|
185
|
+
|
186
|
+
# Define these macros when using Visual C++ to silence many warnings,
|
187
|
+
# and prevent stepping on many Visual Studio-specific items, so that
|
188
|
+
# we don't have to handle them specifically in scannerlexer.l
|
189
|
+
if self.check_is_msvc():
|
190
|
+
macros.append(('_USE_DECLSPECS_FOR_SAL', None))
|
191
|
+
macros.append(('_CRT_SECURE_NO_WARNINGS', None))
|
192
|
+
macros.append(('_CRT_NONSTDC_NO_WARNINGS', None))
|
193
|
+
macros.append(('SAL_NO_ATTRIBUTE_DECLARATIONS', None))
|
194
|
+
|
195
|
+
self.compiler.preprocess(source=source,
|
196
|
+
output_file=output,
|
197
|
+
macros=macros,
|
198
|
+
include_dirs=include_dirs,
|
199
|
+
extra_postargs=extra_postargs)
|
200
|
+
|
201
|
+
def compile(self, pkg_config_cflags, cpp_includes, source, init_sections):
|
202
|
+
extra_postargs = []
|
203
|
+
includes = []
|
204
|
+
source_str = ''.join(source)
|
205
|
+
tmpdir_idx = source_str.rfind(os.sep, 0, source_str.rfind(os.sep))
|
206
|
+
(include_paths, macros, extra_args) = \
|
207
|
+
self._set_cpp_options(pkg_config_cflags)
|
208
|
+
|
209
|
+
for include in cpp_includes:
|
210
|
+
includes.append(include)
|
211
|
+
|
212
|
+
if isinstance(self.compiler, UnixCCompiler):
|
213
|
+
# This is to handle the case where macros are defined in CFLAGS
|
214
|
+
cflags = os.environ.get('CFLAGS')
|
215
|
+
if cflags:
|
216
|
+
for i, cflag in enumerate(cflags.split()):
|
217
|
+
if cflag.startswith('-D'):
|
218
|
+
stridx = cflag.find('=')
|
219
|
+
if stridx > -1:
|
220
|
+
macroset = (cflag[2:stridx],
|
221
|
+
cflag[stridx + 1:])
|
222
|
+
else:
|
223
|
+
macroset = (cflag[2:], None)
|
224
|
+
if macroset not in macros:
|
225
|
+
macros.append(macroset)
|
226
|
+
|
227
|
+
# Do not add -Wall when using init code as we do not include any
|
228
|
+
# header of the library being introspected
|
229
|
+
if self.compiler_cmd == 'gcc' and not init_sections:
|
230
|
+
extra_postargs.append('-Wall')
|
231
|
+
extra_postargs.append(self._cflags_no_deprecation_warnings)
|
232
|
+
|
233
|
+
includes.extend(include_paths)
|
234
|
+
extra_postargs.extend(extra_args)
|
235
|
+
|
236
|
+
return self.compiler.compile(sources=source,
|
237
|
+
macros=macros,
|
238
|
+
include_dirs=includes,
|
239
|
+
extra_postargs=extra_postargs,
|
240
|
+
output_dir=str(source_str[tmpdir_idx + 1:
|
241
|
+
source_str.rfind(os.sep)]))
|
242
|
+
|
243
|
+
def link(self, output, objects, lib_args):
|
244
|
+
# Note: This is used for non-libtool builds only!
|
245
|
+
extra_preargs = []
|
246
|
+
extra_postargs = []
|
247
|
+
library_dirs = []
|
248
|
+
libraries = []
|
249
|
+
|
250
|
+
for arg in lib_args:
|
251
|
+
extra_postargs.append(arg)
|
252
|
+
|
253
|
+
self.compiler.link(target_desc=self.compiler.EXECUTABLE,
|
254
|
+
objects=objects,
|
255
|
+
output_filename=output,
|
256
|
+
extra_preargs=extra_preargs,
|
257
|
+
extra_postargs=extra_postargs)
|
258
|
+
|
115
259
|
def resolve_windows_libs(self, libraries, options):
|
116
260
|
args = []
|
117
|
-
compiler_cmd = os.environ.get('CC', 'cc')
|
118
261
|
libsearch = []
|
119
262
|
|
120
263
|
# When we are using Visual C++...
|
121
|
-
if
|
264
|
+
if self.check_is_msvc():
|
122
265
|
# The search path of the .lib's on Visual C++
|
123
266
|
# is dependent on the LIB environmental variable,
|
124
267
|
# so just query for that
|
125
|
-
is_msvc = True
|
126
268
|
libpath = os.environ.get('LIB')
|
127
269
|
libsearch = libpath.split(';')
|
128
270
|
|
129
271
|
# Use the dumpbin utility that's included in
|
130
272
|
# every Visual C++ installation to find out which
|
131
|
-
# DLL the
|
273
|
+
# DLL the .lib gets linked to.
|
274
|
+
# dumpbin -symbols something.lib gives the
|
275
|
+
# filename of DLL without the '.dll' extension that something.lib
|
276
|
+
# links to, in the line that contains
|
277
|
+
# __IMPORT_DESCRIPTOR_<dll_filename_that_something.lib_links_to>
|
132
278
|
args.append('dumpbin.exe')
|
133
279
|
args.append('-symbols')
|
134
280
|
|
135
281
|
# When we are not using Visual C++ (i.e. we are using GCC)...
|
136
282
|
else:
|
137
|
-
is_msvc = False
|
138
283
|
libtool = utils.get_libtool_command(options)
|
139
284
|
if libtool:
|
140
|
-
|
285
|
+
if os.name == 'nt':
|
286
|
+
args.append(utils.which(os.environ.get('SHELL', 'sh.exe')))
|
141
287
|
args.extend(libtool)
|
142
288
|
args.append('--mode=execute')
|
143
|
-
|
144
|
-
|
145
|
-
proc = subprocess.Popen([compiler_cmd, '-print-search-dirs'],
|
289
|
+
args.extend([os.environ.get('DLLTOOL', 'dlltool.exe'), '--identify'])
|
290
|
+
proc = subprocess.Popen([self.compiler_cmd, '-print-search-dirs'],
|
146
291
|
stdout=subprocess.PIPE)
|
147
292
|
o, e = proc.communicate()
|
148
|
-
for line in o.splitlines():
|
293
|
+
for line in o.decode('ascii').splitlines():
|
149
294
|
if line.startswith('libraries: '):
|
150
|
-
libsearch = line[len('libraries: '):].split(
|
295
|
+
libsearch = line[len('libraries: '):].split(os.pathsep)
|
151
296
|
|
152
297
|
shlibs = []
|
153
298
|
not_resolved = []
|
@@ -170,26 +315,36 @@ class CCompiler(object):
|
|
170
315
|
break
|
171
316
|
implib = os.path.join(l, c)
|
172
317
|
if os.path.exists(implib):
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
318
|
+
if self.check_is_msvc():
|
319
|
+
tmp_fd, tmp_filename = \
|
320
|
+
tempfile.mkstemp(prefix='g-ir-win32-resolve-lib-')
|
321
|
+
|
322
|
+
# This is dumb, but it is life... Windows does not like one
|
323
|
+
# trying to write to a file when its FD is not closed first,
|
324
|
+
# when we use a flag in a program to do so. So, close,
|
325
|
+
# write to temp file with dumpbin and *then* re-open the
|
326
|
+
# file for reading.
|
327
|
+
os.close(tmp_fd)
|
328
|
+
output_flag = ['-out:' + tmp_filename]
|
329
|
+
proc = subprocess.call(args + [implib] + output_flag,
|
330
|
+
stdout=subprocess.PIPE)
|
331
|
+
with open(tmp_filename, 'r') as tmp_fileobj:
|
332
|
+
for line in tmp_fileobj.read().splitlines():
|
333
|
+
|
334
|
+
if '__IMPORT_DESCRIPTOR_' in line:
|
335
|
+
line_tokens = line.split()
|
336
|
+
for item in line_tokens:
|
337
|
+
if item.startswith('__IMPORT_DESCRIPTOR_'):
|
338
|
+
shlibs.append(item[20:] + '.dll')
|
339
|
+
found = True
|
340
|
+
break
|
341
|
+
tmp_fileobj.close()
|
342
|
+
os.unlink(tmp_filename)
|
343
|
+
else:
|
344
|
+
proc = subprocess.Popen(args + [implib],
|
345
|
+
stdout=subprocess.PIPE)
|
346
|
+
o, e = proc.communicate()
|
347
|
+
for line in o.decode('ascii').splitlines():
|
193
348
|
shlibs.append(line)
|
194
349
|
found = True
|
195
350
|
break
|
@@ -200,3 +355,38 @@ class CCompiler(object):
|
|
200
355
|
"ERROR: can't resolve libraries to shared libraries: " +
|
201
356
|
", ".join(not_resolved))
|
202
357
|
return shlibs
|
358
|
+
|
359
|
+
def check_is_msvc(self):
|
360
|
+
if isinstance(self.compiler, MSVCCompiler):
|
361
|
+
return True
|
362
|
+
else:
|
363
|
+
return False
|
364
|
+
|
365
|
+
# Private APIs
|
366
|
+
def _set_cpp_options(self, options):
|
367
|
+
includes = []
|
368
|
+
macros = []
|
369
|
+
other_options = []
|
370
|
+
|
371
|
+
for o in options:
|
372
|
+
option = utils.cflag_real_include_path(o)
|
373
|
+
if option.startswith('-I'):
|
374
|
+
includes.append(option[len('-I'):])
|
375
|
+
elif option.startswith('-D'):
|
376
|
+
macro = option[len('-D'):]
|
377
|
+
macro_index = macro.find('=')
|
378
|
+
if macro_index == -1:
|
379
|
+
macro_name = macro
|
380
|
+
macro_value = None
|
381
|
+
else:
|
382
|
+
macro_name = macro[:macro_index]
|
383
|
+
macro_value = macro[macro_index + 1:]
|
384
|
+
macros.append((macro_name, macro_value))
|
385
|
+
elif option.startswith('-U'):
|
386
|
+
macros.append((option[len('-U'):],))
|
387
|
+
else:
|
388
|
+
# We expect the preprocessor to remove macros. If debugging is turned
|
389
|
+
# up high enough that won't happen, so don't add those flags. Bug #720504
|
390
|
+
if option not in ['-g3', '-ggdb3', '-gstabs3', '-gcoff3', '-gxcoff3', '-gvms3']:
|
391
|
+
other_options.append(option)
|
392
|
+
return (includes, macros, other_options)
|
Binary file
|
Binary file
|
@@ -19,6 +19,10 @@
|
|
19
19
|
#
|
20
20
|
|
21
21
|
from __future__ import with_statement
|
22
|
+
from __future__ import absolute_import
|
23
|
+
from __future__ import division
|
24
|
+
from __future__ import print_function
|
25
|
+
from __future__ import unicode_literals
|
22
26
|
|
23
27
|
from contextlib import contextmanager
|
24
28
|
|
@@ -84,28 +88,31 @@ class CCodeGenerator(object):
|
|
84
88
|
self._write_prelude(self.out_h, func)
|
85
89
|
self.out_h.write(";\n\n")
|
86
90
|
|
87
|
-
def _write_annotation_transfer(self,
|
88
|
-
|
91
|
+
def _write_annotation_transfer(self, node):
|
92
|
+
if (node.type not in ast.BASIC_TYPES or
|
93
|
+
node.type.ctype.endswith('*')):
|
94
|
+
self.out_c.write(" (transfer %s)" % (node.transfer, ))
|
89
95
|
|
90
96
|
def _write_docs(self, func):
|
91
97
|
self.out_c.write("/**\n * %s:\n" % (func.symbol, ))
|
92
98
|
for param in func.parameters:
|
93
|
-
self.out_c.write(" * @%s
|
99
|
+
self.out_c.write(" * @%s" % (param.argname, ))
|
94
100
|
if param.direction in (ast.PARAM_DIRECTION_OUT,
|
95
101
|
ast.PARAM_DIRECTION_INOUT):
|
96
102
|
if param.caller_allocates:
|
97
103
|
allocate_string = ' caller-allocates'
|
98
104
|
else:
|
99
105
|
allocate_string = ''
|
100
|
-
self.out_c.write("(%s%s) " % (param.direction,
|
101
|
-
|
102
|
-
self._write_annotation_transfer(param
|
106
|
+
self.out_c.write(": (%s%s) " % (param.direction,
|
107
|
+
allocate_string))
|
108
|
+
self._write_annotation_transfer(param)
|
103
109
|
self.out_c.write(":\n")
|
104
110
|
self.out_c.write(' *\n')
|
105
|
-
self.out_c.write(' * Undocumented
|
106
|
-
|
107
|
-
|
108
|
-
|
111
|
+
self.out_c.write(' * Undocumented.')
|
112
|
+
if func.retval.type != ast.TYPE_NONE:
|
113
|
+
self.out_c.write('\n *\n')
|
114
|
+
self.out_c.write(' * Returns: ')
|
115
|
+
self._write_annotation_transfer(func.retval)
|
109
116
|
self.out_c.write('\n */')
|
110
117
|
|
111
118
|
@contextmanager
|
@@ -162,7 +169,7 @@ class CCodeGenerator(object):
|
|
162
169
|
|
163
170
|
self._codegen_start()
|
164
171
|
|
165
|
-
for node in self.namespace.
|
172
|
+
for node in self.namespace.values():
|
166
173
|
if isinstance(node, ast.Function):
|
167
174
|
with self._function(node):
|
168
175
|
body = self._function_bodies.get(node)
|