blob: 45fe27ad61f86578ce8e5745ad1ec6ad9cdf2af1 [file] [log] [blame]
Brad Bishop1a4b7ee2018-12-16 17:11:34 -08001From 46dbe963aa6435591c87e788cdb54bc0daeac42e Mon Sep 17 00:00:00 2001
Patrick Williamsc0f7c042017-02-23 20:41:17 -06002From: Alexander Kanavin <alex.kanavin@gmail.com>
3Date: Mon, 19 Oct 2015 18:26:40 +0300
Brad Bishop1a4b7ee2018-12-16 17:11:34 -08004Subject: [PATCH] giscanner: add --use-binary-wrapper option
Patrick Williamsc0f7c042017-02-23 20:41:17 -06005
6With this option, giscanner will use a wrapper executable to run
7binaries it's producing, instead of running them directly. This
8is useful when binaries are cross-compiled and cannot be run directly,
9but they can be run using for example QEMU emulation.
10
11Upstream-Status: Pending [review on oe-core list]
12Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080013
Patrick Williamsc0f7c042017-02-23 20:41:17 -060014---
15 giscanner/scannermain.py | 14 ++++++++++++++
16 1 file changed, 14 insertions(+)
17
18diff --git a/giscanner/scannermain.py b/giscanner/scannermain.py
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080019index ccb14e9..061def0 100644
Patrick Williamsc0f7c042017-02-23 20:41:17 -060020--- a/giscanner/scannermain.py
21+++ b/giscanner/scannermain.py
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080022@@ -126,6 +126,9 @@ def _get_option_parser():
Patrick Williamsc0f7c042017-02-23 20:41:17 -060023 parser.add_option("", "--program",
24 action="store", dest="program", default=None,
25 help="program to execute")
26+ parser.add_option("", "--use-binary-wrapper",
27+ action="store", dest="wrapper", default=None,
28+ help="wrapper to use for running programs (useful when cross-compiling)")
29 parser.add_option("", "--program-arg",
30 action="append", dest="program_args", default=[],
31 help="extra arguments to program")
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080032@@ -418,6 +421,17 @@ def create_binary(transformer, options, args):
Patrick Williamsc0f7c042017-02-23 20:41:17 -060033 gdump_parser.get_error_quark_functions())
34
35 shlibs = resolve_shlibs(options, binary, options.libraries)
36+ if options.wrapper:
37+ # The wrapper needs the binary itself, not the libtool wrapper script,
38+ # so we check if libtool has sneaked the binary into .libs subdirectory
39+ # and adjust the path accordingly
40+ import os.path
41+ dir_name, binary_name = os.path.split(binary.args[0])
42+ libtool_binary = os.path.join(dir_name, '.libs', binary_name)
43+ if os.path.exists(libtool_binary):
44+ binary.args[0] = libtool_binary
45+ # Then prepend the wrapper to the command line to execute
46+ binary.args = [options.wrapper] + binary.args
47 gdump_parser.set_introspection_binary(binary)
48 gdump_parser.parse()
49 return shlibs