blob: 373c244a152e474cacb18a86fb99ca17bde6b17e [file] [log] [blame]
[email protected]aa539ba42011-11-23 22:22:201#!/usr/bin/env python
[email protected]31aa30b2011-08-12 22:16:192# Copyright (c) 2011 The Chromium Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
6"""cups-config wrapper.
7
8cups-config, at least on Ubuntu Lucid and Natty, dumps all
9cflags/ldflags/libs when passed the --libs argument. gyp would like
10to keep these separate: cflags are only needed when compiling files
11that use cups directly, while libs are only needed on the final link
12line.
13
[email protected]fc2020f2014-06-04 18:09:3914This can be dramatically simplified or maybe removed (depending on GN
15requirements) when this is fixed:
[email protected]31aa30b2011-08-12 22:16:1916 https://bugs.launchpad.net/ubuntu/+source/cupsys/+bug/163704
17is fixed.
18"""
19
Raul Tambre38201dc2019-09-26 18:01:4620from __future__ import print_function
21
sbc05ac52d2015-05-22 23:51:2622import os
[email protected]31aa30b2011-08-12 22:16:1923import subprocess
24import sys
25
26def usage():
Raul Tambre38201dc2019-09-26 18:01:4627 print('usage: %s {--api-version|--cflags|--ldflags|--libs|--libs-for-gn} '
28 '[sysroot]' % sys.argv[0])
[email protected]aa539ba42011-11-23 22:22:2029
[email protected]31aa30b2011-08-12 22:16:1930
sbc05ac52d2015-05-22 23:51:2631def run_cups_config(cups_config, mode):
[email protected]aa539ba42011-11-23 22:22:2032 """Run cups-config with all --cflags etc modes, parse out the mode we want,
33 and return those flags as a list."""
[email protected]31aa30b2011-08-12 22:16:1934
sbc05ac52d2015-05-22 23:51:2635 cups = subprocess.Popen([cups_config, '--cflags', '--ldflags', '--libs'],
Christian Biesinger0afee772019-09-25 18:12:2036 stdout=subprocess.PIPE, universal_newlines=True)
[email protected]aa539ba42011-11-23 22:22:2037 flags = cups.communicate()[0].strip()
[email protected]31aa30b2011-08-12 22:16:1938
[email protected]aa539ba42011-11-23 22:22:2039 flags_subset = []
40 for flag in flags.split():
41 flag_mode = None
42 if flag.startswith('-l'):
43 flag_mode = '--libs'
44 elif (flag.startswith('-L') or flag.startswith('-Wl,')):
45 flag_mode = '--ldflags'
46 elif (flag.startswith('-I') or flag.startswith('-D')):
47 flag_mode = '--cflags'
[email protected]31aa30b2011-08-12 22:16:1948
[email protected]aa539ba42011-11-23 22:22:2049 # Be conservative: for flags where we don't know which mode they
50 # belong in, always include them.
51 if flag_mode is None or flag_mode == mode:
52 flags_subset.append(flag)
[email protected]31aa30b2011-08-12 22:16:1953
[email protected]f7e45c12014-03-26 04:00:0854 # Note: cross build is confused by the option, and may trigger linker
55 # warning causing build error.
56 if '-lgnutls' in flags_subset:
57 flags_subset.remove('-lgnutls')
58
[email protected]aa539ba42011-11-23 22:22:2059 return flags_subset
[email protected]31aa30b2011-08-12 22:16:1960
[email protected]aa539ba42011-11-23 22:22:2061
62def main():
sbc05ac52d2015-05-22 23:51:2663 if len(sys.argv) < 2:
[email protected]31aa30b2011-08-12 22:16:1964 usage()
[email protected]aa539ba42011-11-23 22:22:2065 return 1
[email protected]31aa30b2011-08-12 22:16:1966
[email protected]aa539ba42011-11-23 22:22:2067 mode = sys.argv[1]
agoodeb4d790c92016-01-05 17:20:3168 if len(sys.argv) > 2 and sys.argv[2]:
sbc05ac52d2015-05-22 23:51:2669 sysroot = sys.argv[2]
70 cups_config = os.path.join(sysroot, 'usr', 'bin', 'cups-config')
71 if not os.path.exists(cups_config):
Christian Biesinger0afee772019-09-25 18:12:2072 print('cups-config not found: %s' % cups_config)
sbc05ac52d2015-05-22 23:51:2673 return 1
74 else:
75 cups_config = 'cups-config'
76
[email protected]fc2020f2014-06-04 18:09:3977 if mode == '--api-version':
sbc05ac52d2015-05-22 23:51:2678 subprocess.call([cups_config, '--api-version'])
[email protected]fc2020f2014-06-04 18:09:3979 return 0
80
81 # All other modes get the flags.
82 if mode not in ('--cflags', '--libs', '--libs-for-gn', '--ldflags'):
[email protected]31aa30b2011-08-12 22:16:1983 usage()
[email protected]aa539ba42011-11-23 22:22:2084 return 1
[email protected]fc2020f2014-06-04 18:09:3985
86 if mode == '--libs-for-gn':
87 gn_libs_output = True
88 mode = '--libs'
89 else:
90 gn_libs_output = False
91
sbc05ac52d2015-05-22 23:51:2692 flags = run_cups_config(cups_config, mode)
[email protected]fc2020f2014-06-04 18:09:3993
94 if gn_libs_output:
95 # Strip "-l" from beginning of libs, quote, and surround in [ ].
Christian Biesinger0afee772019-09-25 18:12:2096 print('[')
[email protected]fc2020f2014-06-04 18:09:3997 for lib in flags:
98 if lib[:2] == "-l":
Christian Biesinger0afee772019-09-25 18:12:2099 print('"%s", ' % lib[2:])
100 print(']')
[email protected]fc2020f2014-06-04 18:09:39101 else:
Christian Biesinger0afee772019-09-25 18:12:20102 print(' '.join(flags))
[email protected]fc2020f2014-06-04 18:09:39103
[email protected]aa539ba42011-11-23 22:22:20104 return 0
105
106
107if __name__ == '__main__':
108 sys.exit(main())