[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 1 | #!/usr/bin/env python |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 2 | # 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 | |
| 8 | cups-config, at least on Ubuntu Lucid and Natty, dumps all |
| 9 | cflags/ldflags/libs when passed the --libs argument. gyp would like |
| 10 | to keep these separate: cflags are only needed when compiling files |
| 11 | that use cups directly, while libs are only needed on the final link |
| 12 | line. |
| 13 | |
[email protected] | fc2020f | 2014-06-04 18:09:39 | [diff] [blame] | 14 | This can be dramatically simplified or maybe removed (depending on GN |
| 15 | requirements) when this is fixed: |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 16 | https://bugs.launchpad.net/ubuntu/+source/cupsys/+bug/163704 |
| 17 | is fixed. |
| 18 | """ |
| 19 | |
sbc | 05ac52d | 2015-05-22 23:51:26 | [diff] [blame] | 20 | import os |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 21 | import subprocess |
| 22 | import sys |
| 23 | |
| 24 | def usage(): |
agoode | b4d790c9 | 2016-01-05 17:20:31 | [diff] [blame] | 25 | print ('usage: %s {--api-version|--cflags|--ldflags|--libs|--libs-for-gn} ' |
| 26 | '[sysroot]' % sys.argv[0]) |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 27 | |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 28 | |
sbc | 05ac52d | 2015-05-22 23:51:26 | [diff] [blame] | 29 | def run_cups_config(cups_config, mode): |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 30 | """Run cups-config with all --cflags etc modes, parse out the mode we want, |
| 31 | and return those flags as a list.""" |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 32 | |
sbc | 05ac52d | 2015-05-22 23:51:26 | [diff] [blame] | 33 | cups = subprocess.Popen([cups_config, '--cflags', '--ldflags', '--libs'], |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 34 | stdout=subprocess.PIPE) |
| 35 | flags = cups.communicate()[0].strip() |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 36 | |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 37 | flags_subset = [] |
| 38 | for flag in flags.split(): |
| 39 | flag_mode = None |
| 40 | if flag.startswith('-l'): |
| 41 | flag_mode = '--libs' |
| 42 | elif (flag.startswith('-L') or flag.startswith('-Wl,')): |
| 43 | flag_mode = '--ldflags' |
| 44 | elif (flag.startswith('-I') or flag.startswith('-D')): |
| 45 | flag_mode = '--cflags' |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 46 | |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 47 | # Be conservative: for flags where we don't know which mode they |
| 48 | # belong in, always include them. |
| 49 | if flag_mode is None or flag_mode == mode: |
| 50 | flags_subset.append(flag) |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 51 | |
[email protected] | f7e45c1 | 2014-03-26 04:00:08 | [diff] [blame] | 52 | # Note: cross build is confused by the option, and may trigger linker |
| 53 | # warning causing build error. |
| 54 | if '-lgnutls' in flags_subset: |
| 55 | flags_subset.remove('-lgnutls') |
| 56 | |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 57 | return flags_subset |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 58 | |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 59 | |
| 60 | def main(): |
sbc | 05ac52d | 2015-05-22 23:51:26 | [diff] [blame] | 61 | if len(sys.argv) < 2: |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 62 | usage() |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 63 | return 1 |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 64 | |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 65 | mode = sys.argv[1] |
agoode | b4d790c9 | 2016-01-05 17:20:31 | [diff] [blame] | 66 | if len(sys.argv) > 2 and sys.argv[2]: |
sbc | 05ac52d | 2015-05-22 23:51:26 | [diff] [blame] | 67 | sysroot = sys.argv[2] |
| 68 | cups_config = os.path.join(sysroot, 'usr', 'bin', 'cups-config') |
| 69 | if not os.path.exists(cups_config): |
| 70 | print 'cups-config not found: %s' % cups_config |
| 71 | return 1 |
| 72 | else: |
| 73 | cups_config = 'cups-config' |
| 74 | |
[email protected] | fc2020f | 2014-06-04 18:09:39 | [diff] [blame] | 75 | if mode == '--api-version': |
sbc | 05ac52d | 2015-05-22 23:51:26 | [diff] [blame] | 76 | subprocess.call([cups_config, '--api-version']) |
[email protected] | fc2020f | 2014-06-04 18:09:39 | [diff] [blame] | 77 | return 0 |
| 78 | |
| 79 | # All other modes get the flags. |
| 80 | if mode not in ('--cflags', '--libs', '--libs-for-gn', '--ldflags'): |
[email protected] | 31aa30b | 2011-08-12 22:16:19 | [diff] [blame] | 81 | usage() |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 82 | return 1 |
[email protected] | fc2020f | 2014-06-04 18:09:39 | [diff] [blame] | 83 | |
| 84 | if mode == '--libs-for-gn': |
| 85 | gn_libs_output = True |
| 86 | mode = '--libs' |
| 87 | else: |
| 88 | gn_libs_output = False |
| 89 | |
sbc | 05ac52d | 2015-05-22 23:51:26 | [diff] [blame] | 90 | flags = run_cups_config(cups_config, mode) |
[email protected] | fc2020f | 2014-06-04 18:09:39 | [diff] [blame] | 91 | |
| 92 | if gn_libs_output: |
| 93 | # Strip "-l" from beginning of libs, quote, and surround in [ ]. |
| 94 | print '[' |
| 95 | for lib in flags: |
| 96 | if lib[:2] == "-l": |
| 97 | print '"%s", ' % lib[2:] |
| 98 | print ']' |
| 99 | else: |
| 100 | print ' '.join(flags) |
| 101 | |
[email protected] | aa539ba4 | 2011-11-23 22:22:20 | [diff] [blame] | 102 | return 0 |
| 103 | |
| 104 | |
| 105 | if __name__ == '__main__': |
| 106 | sys.exit(main()) |