1c50c785cSJohn Marino# Program to fetch python compilation parameters. 2c50c785cSJohn Marino# Copied from python-config of the 2.7 release. 3c50c785cSJohn Marino 4c50c785cSJohn Marinoimport sys 5c50c785cSJohn Marinoimport os 6c50c785cSJohn Marinoimport getopt 7c50c785cSJohn Marinofrom distutils import sysconfig 8c50c785cSJohn Marino 9c50c785cSJohn Marinovalid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags', 10c50c785cSJohn Marino 'ldflags', 'help'] 11c50c785cSJohn Marino 12c50c785cSJohn Marinodef exit_with_usage(code=1): 13*ef5ccd6cSJohn Marino sys.stderr.write ("Usage: %s [%s]\n" % (sys.argv[0], 14*ef5ccd6cSJohn Marino '|'.join('--'+opt for opt in valid_opts))) 15c50c785cSJohn Marino sys.exit(code) 16c50c785cSJohn Marino 17c50c785cSJohn Marinotry: 18c50c785cSJohn Marino opts, args = getopt.getopt(sys.argv[1:], '', valid_opts) 19c50c785cSJohn Marinoexcept getopt.error: 20c50c785cSJohn Marino exit_with_usage() 21c50c785cSJohn Marino 22c50c785cSJohn Marinoif not opts: 23c50c785cSJohn Marino exit_with_usage() 24c50c785cSJohn Marino 25c50c785cSJohn Marinopyver = sysconfig.get_config_var('VERSION') 26c50c785cSJohn Marinogetvar = sysconfig.get_config_var 27*ef5ccd6cSJohn Marinoabiflags = getattr (sys, "abiflags", "") 28c50c785cSJohn Marino 29c50c785cSJohn Marinoopt_flags = [flag for (flag, val) in opts] 30c50c785cSJohn Marino 31c50c785cSJohn Marinoif '--help' in opt_flags: 32c50c785cSJohn Marino exit_with_usage(code=0) 33c50c785cSJohn Marino 34c50c785cSJohn Marinodef to_unix_path(path): 35c50c785cSJohn Marino """On Windows, returns the given path with all backslashes 36c50c785cSJohn Marino converted into forward slashes. This is to help prevent problems 37c50c785cSJohn Marino when using the paths returned by this script with cygwin tools. 38c50c785cSJohn Marino In particular, cygwin bash treats backslashes as a special character. 39c50c785cSJohn Marino 40c50c785cSJohn Marino On Unix systems, returns the path unchanged. 41c50c785cSJohn Marino """ 42c50c785cSJohn Marino if os.name == 'nt': 43c50c785cSJohn Marino path = path.replace('\\', '/') 44c50c785cSJohn Marino return path 45c50c785cSJohn Marino 46c50c785cSJohn Marinofor opt in opt_flags: 47c50c785cSJohn Marino if opt == '--prefix': 48*ef5ccd6cSJohn Marino print (to_unix_path(sysconfig.PREFIX)) 49c50c785cSJohn Marino 50c50c785cSJohn Marino elif opt == '--exec-prefix': 51*ef5ccd6cSJohn Marino print (to_unix_path(sysconfig.EXEC_PREFIX)) 52c50c785cSJohn Marino 53c50c785cSJohn Marino elif opt in ('--includes', '--cflags'): 54c50c785cSJohn Marino flags = ['-I' + sysconfig.get_python_inc(), 55c50c785cSJohn Marino '-I' + sysconfig.get_python_inc(plat_specific=True)] 56c50c785cSJohn Marino if opt == '--cflags': 57c50c785cSJohn Marino flags.extend(getvar('CFLAGS').split()) 58*ef5ccd6cSJohn Marino print (to_unix_path(' '.join(flags))) 59c50c785cSJohn Marino 60c50c785cSJohn Marino elif opt in ('--libs', '--ldflags'): 61c50c785cSJohn Marino libs = [] 62c50c785cSJohn Marino if getvar('LIBS') is not None: 63c50c785cSJohn Marino libs.extend(getvar('LIBS').split()) 64c50c785cSJohn Marino if getvar('SYSLIBS') is not None: 65c50c785cSJohn Marino libs.extend(getvar('SYSLIBS').split()) 66*ef5ccd6cSJohn Marino libs.append('-lpython'+pyver + abiflags) 67c50c785cSJohn Marino # add the prefix/lib/pythonX.Y/config dir, but only if there is no 68c50c785cSJohn Marino # shared library in prefix/lib/. 69c50c785cSJohn Marino if opt == '--ldflags': 70c50c785cSJohn Marino if not getvar('Py_ENABLE_SHARED'): 71c50c785cSJohn Marino if getvar('LIBPL') is not None: 72c50c785cSJohn Marino libs.insert(0, '-L' + getvar('LIBPL')) 73c50c785cSJohn Marino elif os.name == 'nt': 74c50c785cSJohn Marino libs.insert(0, '-L' + sysconfig.PREFIX + '/libs') 75c50c785cSJohn Marino if getvar('LINKFORSHARED') is not None: 76c50c785cSJohn Marino libs.extend(getvar('LINKFORSHARED').split()) 77*ef5ccd6cSJohn Marino print (to_unix_path(' '.join(libs))) 78c50c785cSJohn Marino 79