# Copyright (C) March 2023- Linaro Limited (or its affiliates). All rights reserved.

# Copyright (C) 1995-2023 Arm Limited (or its affiliates). All rights reserved.

# 
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# Program to fetch python compilation parameters.
# Copied from python-config of the 2.7 release.

import sys
import os
import getopt
from distutils import sysconfig

valid_opts = ['prefix', 'exec-prefix', 'includes', 'libs', 'cflags',
              'ldflags', 'help']

def exit_with_usage(code=1):
    sys.stderr.write ("Usage: %s [%s]\n" % (sys.argv[0],
                                          '|'.join('--'+opt for opt in valid_opts)))
    sys.exit(code)

try:
    opts, args = getopt.getopt(sys.argv[1:], '', valid_opts)
except getopt.error:
    exit_with_usage()

if not opts:
    exit_with_usage()

pyver = sysconfig.get_config_var('VERSION')
getvar = sysconfig.get_config_var
abiflags = getattr (sys, "abiflags", "")

opt_flags = [flag for (flag, val) in opts]

if '--help' in opt_flags:
    exit_with_usage(code=0)

def to_unix_path(path):
    """On Windows, returns the given path with all backslashes
    converted into forward slashes.  This is to help prevent problems
    when using the paths returned by this script with cygwin tools.
    In particular, cygwin bash treats backslashes as a special character.

    On Unix systems, returns the path unchanged.
    """
    if os.name == 'nt':
        path = path.replace('\\', '/')
    return path

for opt in opt_flags:
    if opt == '--prefix':
        print (to_unix_path(sysconfig.PREFIX))

    elif opt == '--exec-prefix':
        print (to_unix_path(sysconfig.EXEC_PREFIX))

    elif opt in ('--includes', '--cflags'):
        flags = ['-I' + sysconfig.get_python_inc(),
                 '-I' + sysconfig.get_python_inc(plat_specific=True)]
        if opt == '--cflags':
            flags.extend(getvar('CFLAGS').split())
        print (to_unix_path(' '.join(flags)))

    elif opt in ('--libs', '--ldflags'):
        libs = ['-L' + getvar('LIBDIR')]
        libs.append('-lpython'+pyver + abiflags)
        if getvar('LIBS') is not None:
            libs.extend(getvar('LIBS').split())
        if getvar('SYSLIBS') is not None:
            libs.extend(getvar('SYSLIBS').split())
        # add the prefix/lib/pythonX.Y/config dir, but only if there is no
        # shared library in prefix/lib/.
        if opt == '--ldflags':
            if not getvar('Py_ENABLE_SHARED'):
                if getvar('LIBPL') is not None:
                    libs.insert(0, '-L' + getvar('LIBPL'))
                elif os.name == 'nt':
                    libs.insert(0, '-L' + sysconfig.PREFIX + '/libs')
        print (to_unix_path(' '.join(libs)))

