# -*- coding: utf-8 -*-
#
# SPDX-License-Identifier: LGPL-2.1-only
#
# Copyright (C) 2015 Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>

import os
import sys

if sys.version_info < (3, 12):
    from distutils.core import setup, Extension
else:
    from setuptools import setup, Extension

# Starting with Debian's Python 3.10, the default install scheme is
# 'posix_local' which is a Debian specific scheme based on 'posix_prefix' but
# with an added 'local' prefix. This is the default so users doing system wide
# manual installations of python modules end up in '/usr/local'. This
# interferes with our autotools based install which already defaults to
# '/usr/local' and expect a provided prefix to be used verbatim.
#
# Monkeypatch sysconfig to override this scheme and use 'posix_prefix' instead.
if sys.version_info >= (3, 10):
    import sysconfig

    original_get_preferred_scheme = sysconfig.get_preferred_scheme

    def our_get_preferred_scheme(key):
        scheme = original_get_preferred_scheme(key)
        if scheme == "posix_local":
            return "posix_prefix"
        else:
            return scheme

    sysconfig.get_preferred_scheme = our_get_preferred_scheme

PY_PATH_WARN_MSG = """
-------------------------------------WARNING------------------------------------
The install directory used:\n ({0})\nis not included in your PYTHONPATH.

To add this directory to your Python search path permanently you can add the
following command to your .bashrc/.zshrc:
    export PYTHONPATH="${{PYTHONPATH}}:{0}"
--------------------------------------------------------------------------------
"""

def main():
    dist = setup(name='lttngust',
            version='@PACKAGE_VERSION@',
            description='LTTng-UST Python agent',
            packages=['lttngust'],
            package_dir={'lttngust': 'lttngust'},
            options={'build': {'build_base': 'build'}},
            url='http://lttng.org',
            license='LGPL-2.1',
            classifiers=[
                'Development Status :: 5 - Production/Stable',
                'Intended Audience :: Developers',
                'License :: OSI Approved :: GNU Lesser General Public License v2 (LGPLv2)',
                'Programming Language :: Python :: 2.7',
                'Programming Language :: Python :: 3'
                'Topic :: System :: Logging',
                ])

# After the installation, we check that the install directory is included in
# the Python search path and we print a warning message when it's not. We need
# to do this because Python search path differs depending on the distro and
# some distros don't include any `/usr/local/` (the default install prefix) in
# the search path. This is also useful for out-of-tree installs and tests. It's
# only relevant to make this check on the `install` command.

    if 'install' in dist.command_obj:
        install_dir = dist.command_obj['install'].install_libbase
        if install_dir not in sys.path:
            # We can't consider this an error because if affects every
            # distro differently. We only warn the user that some
            # extra configuration is needed to use the agent
            abs_install_dir = os.path.abspath(install_dir)
            print(PY_PATH_WARN_MSG.format(abs_install_dir))

if __name__ == '__main__':
    main()
