Home | History | Annotate | Download | only in cython
      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 
      5 import argparse
      6 import os
      7 import sys
      8 
      9 from distutils import sysconfig
     10 from distutils.command import build_ext
     11 from distutils.dist import Distribution
     12 from distutils.extension import Extension
     13 
     14 def 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 
     57 if __name__ == '__main__':
     58   main()
     59