11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci# found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport argparse
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport os
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciimport sys
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom distutils import sysconfig
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom distutils.command import build_ext
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom distutils.dist import Distribution
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom distutils.extension import Extension
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccidef main():
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  """Command line utility to retrieve compilation options for python modules'
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  """
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  parser = argparse.ArgumentParser(
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      description='Retrieves compilation options for python modules.')
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  parser.add_argument('--gn',
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      help='Returns all values in a format suitable for gn',
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      action='store_true')
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  parser.add_argument('--libraries', help='Returns libraries',
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      action='store_true')
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  parser.add_argument('--includes', help='Returns includes',
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      action='store_true')
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  parser.add_argument('--library_dirs', help='Returns library_dirs',
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                      action='store_true')
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  opts = parser.parse_args()
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ext = Extension('Dummy', [])
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  b = build_ext.build_ext(Distribution())
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  b.initialize_options()
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  b.finalize_options()
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  result = []
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if opts.libraries:
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    libraries = b.get_libraries(ext)
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if sys.platform == 'darwin':
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      libraries.append('python%s' % sys.version[:3])
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if not opts.gn and sys.platform in ['darwin', 'linux2']:
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      # In case of GYP output for darwin and linux prefix all
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      # libraries (if there are any) so the result can be used as a
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      # compiler argument. GN handles platform-appropriate prefixing itself.
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      libraries = ['-l%s' % library for library in libraries]
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    result.extend(libraries)
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if opts.includes:
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    result = result  + b.include_dirs
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if opts.library_dirs:
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if sys.platform == 'darwin':
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      result.append('%s/lib' % sysconfig.get_config_vars('prefix')[0])
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  if opts.gn:
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    for x in result:
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      print x
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  else:
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    print ''.join(['"%s"' % x for x in result])
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciif __name__ == '__main__':
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  main()
59