import sys
from distutils import unixccompiler
from distutils import ccompiler


def register():
    sys.modules["distutils.crossunixccompiler"] = sys.modules[__name__]
    ccompiler.compiler_class["crossunix"] = (
        __name__,
        "CrossUnixCCompiler",
        "UNIX-style compiler for cross compilation",
    )


def try_remove_all(lst, starts):
    lst[:] = [x for x in lst if not x.startswith(starts)]


class CrossUnixCCompiler(unixccompiler.UnixCCompiler):
    def _compile(self, obj, src, ext, cc_args, extra_postargs, pp_opts):
        try_remove_all(
            self.compiler_so, ("-m64", "-fstack-protector-strong", "-mtune=generic")
        )
        try_remove_all(cc_args, "-I/usr")
        try_remove_all(pp_opts, "-I/usr")
        return unixccompiler.UnixCCompiler._compile(
            self, obj, src, ext, cc_args, extra_postargs, pp_opts
        )

    def link(
        self,
        target_desc,
        objects,
        output_filename,
        output_dir=None,
        libraries=None,
        library_dirs=None,
        runtime_library_dirs=None,
        export_symbols=None,
        debug=0,
        extra_preargs=None,
        extra_postargs=None,
        build_temp=None,
        target_lang=None,
    ):
        try_remove_all(self.library_dirs, ("/usr"))
        return unixccompiler.UnixCCompiler.link(
            self,
            target_desc,
            objects,
            output_filename,
            output_dir,
            libraries,
            library_dirs,
            runtime_library_dirs,
            export_symbols,
            debug,
            extra_preargs,
            extra_postargs,
            build_temp,
            target_lang,
        )

    def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs):
        self.__class__ = unixccompiler.UnixCCompiler
        ret = unixccompiler.UnixCCompiler._fix_lib_args(
            self, libraries, library_dirs, runtime_library_dirs
        )
        self.__class__ = CrossUnixCCompiler
        return ret
