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