1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import argparse
6import os
7import sys
8
9from distutils import sysconfig
10from distutils.command import build_ext
11from distutils.dist import Distribution
12from distutils.extension import Extension
13
14def main():
15  """Command line utility to retrieve compilation options for python modules'
16  """
17  parser = argparse.ArgumentParser(
18      description='Retrieves compilation options for python modules.')
19  parser.add_argument('--gn',
20                      help='Returns all values in a format suitable for gn',
21                      action='store_true')
22  parser.add_argument('--libraries', help='Returns libraries',
23                      action='store_true')
24  parser.add_argument('--includes', help='Returns includes',
25                      action='store_true')
26  parser.add_argument('--library_dirs', help='Returns library_dirs',
27                      action='store_true')
28  opts = parser.parse_args()
29
30  ext = Extension('Dummy', [])
31  b = build_ext.build_ext(Distribution())
32  b.initialize_options()
33  b.finalize_options()
34  result = []
35  if opts.libraries:
36    libraries = b.get_libraries(ext)
37    if sys.platform == 'darwin':
38      libraries.append('python%s' % sys.version[:3])
39    if not opts.gn and sys.platform in ['darwin', 'linux2']:
40      # In case of GYP output for darwin and linux prefix all
41      # libraries (if there are any) so the result can be used as a
42      # compiler argument. GN handles platform-appropriate prefixing itself.
43      libraries = ['-l%s' % library for library in libraries]
44    result.extend(libraries)
45  if opts.includes:
46    result = result  + b.include_dirs
47  if opts.library_dirs:
48    if sys.platform == 'darwin':
49      result.append('%s/lib' % sysconfig.get_config_vars('prefix')[0])
50
51  if opts.gn:
52    for x in result:
53      print x
54  else:
55    print ''.join(['"%s"' % x for x in result])
56
57if __name__ == '__main__':
58  main()
59