Exemple #1
0
    def __init__(self, conanfile, generator=None):
        self._conanfile = conanfile
        self.generator = self._get_generator(generator)
        self.variables = Variables()
        self.preprocessor_definitions = Variables()

        self.blocks = ToolchainBlocks(
            self._conanfile, self, [("user_toolchain", UserToolchain),
                                    ("generic_system", GenericSystemBlock),
                                    ("android_system", AndroidSystemBlock),
                                    ("apple_system", AppleSystemBlock),
                                    ("fpic", FPicBlock),
                                    ("arch_flags", ArchitectureBlock),
                                    ("libcxx", GLibCXXBlock),
                                    ("vs_runtime", VSRuntimeBlock),
                                    ("cppstd", CppStdBlock),
                                    ("parallel", ParallelBlock),
                                    ("extra_flags", ExtraFlagsBlock),
                                    ("cmake_flags_init", CMakeFlagsInitBlock),
                                    ("try_compile", TryCompileBlock),
                                    ("find_paths", FindFiles),
                                    ("rpath", SkipRPath),
                                    ("shared", SharedLibBock),
                                    ("output_dirs", OutputDirsBlock)])

        check_using_build_profile(self._conanfile)
Exemple #2
0
    def __init__(self, conanfile, generator=None, namespace=None):
        self._conanfile = conanfile
        self.generator = self._get_generator(generator)
        self._namespace = namespace
        self.variables = Variables()
        self.preprocessor_definitions = Variables()

        self.blocks = ToolchainBlocks(self._conanfile, self,
                                      [("user_toolchain", UserToolchain),
                                       ("generic_system", GenericSystemBlock),
                                       ("android_system", AndroidSystemBlock),
                                       ("apple_system", AppleSystemBlock),
                                       ("fpic", FPicBlock),
                                       ("arch_flags", ArchitectureBlock),
                                       ("libcxx", GLibCXXBlock),
                                       ("vs_runtime", VSRuntimeBlock),
                                       ("cppstd", CppStdBlock),
                                       ("parallel", ParallelBlock),
                                       ("cmake_flags_init", CMakeFlagsInitBlock),
                                       ("try_compile", TryCompileBlock),
                                       ("find_paths", FindConfigFiles),
                                       ("rpath", SkipRPath),
                                       ("shared", SharedLibBock)])

        # Set the CMAKE_MODULE_PATH and CMAKE_PREFIX_PATH to the deps .builddirs
        self.find_builddirs = True

        check_using_build_profile(self._conanfile)
Exemple #3
0
 def __init__(self, conanfile):
     self._conanfile = conanfile
     self.preprocessor_definitions = {}
     self.compile_options = {}
     self.configuration = conanfile.settings.build_type
     self.runtime_library = self._runtime_library(conanfile.settings)
     self.cppstd = conanfile.settings.get_safe("compiler.cppstd")
     self.toolset = self._msvs_toolset(conanfile)
     check_using_build_profile(self._conanfile)
Exemple #4
0
 def __init__(self, conanfile):
     self._conanfile = conanfile
     self.configuration = conanfile.settings.get_safe("build_type")
     arch = conanfile.settings.get_safe("arch")
     self.architecture = to_apple_arch(arch) or arch
     self.os_version = conanfile.settings.get_safe("os.version")
     self.sdk = conanfile.settings.get_safe("os.sdk")
     self.sdk_version = conanfile.settings.get_safe("os.sdk_version")
     check_using_build_profile(self._conanfile)
Exemple #5
0
    def __init__(self, conanfile, namespace=None):
        self._conanfile = conanfile
        self._namespace = namespace
        build_type = self._conanfile.settings.get_safe("build_type")

        self.configure_args = []
        self.make_args = []
        self.default_configure_install_args = False

        # TODO: compiler.runtime for Visual studio?
        # defines
        self.ndebug = None
        if build_type in ['Release', 'RelWithDebInfo', 'MinSizeRel']:
            self.ndebug = "NDEBUG"
        self.gcc_cxx11_abi = self._cxx11_abi_define()
        self.defines = []

        # cxxflags, cflags
        self.cxxflags = []
        self.cflags = []
        self.ldflags = []
        self.libcxx = self._libcxx()
        self.fpic = self._conanfile.options.get_safe("fPIC")

        self.cppstd = cppstd_flag(self._conanfile.settings)
        self.arch_flag = architecture_flag(self._conanfile.settings)
        # TODO: This is also covering compilers like Visual Studio, necessary to test it (&remove?)
        self.build_type_flags = build_type_flags(self._conanfile.settings)

        # Cross build
        self._host = None
        self._build = None
        self._target = None

        self.apple_arch_flag = self.apple_isysroot_flag = None

        self.apple_min_version_flag = apple_min_version_flag(self._conanfile)
        if cross_building(self._conanfile):
            os_build, arch_build, os_host, arch_host = get_cross_building_settings(
                self._conanfile)
            self._host = _get_gnu_triplet(os_host, arch_host)
            self._build = _get_gnu_triplet(os_build, arch_build)

            # Apple Stuff
            if os_build == "Macos":
                sdk_path = apple_sdk_path(conanfile)
                apple_arch = to_apple_arch(
                    self._conanfile.settings.get_safe("arch"))
                # https://man.archlinux.org/man/clang.1.en#Target_Selection_Options
                self.apple_arch_flag = "-arch {}".format(
                    apple_arch) if apple_arch else None
                # -isysroot makes all includes for your library relative to the build directory
                self.apple_isysroot_flag = "-isysroot {}".format(
                    sdk_path) if sdk_path else None

        check_using_build_profile(self._conanfile)
Exemple #6
0
 def __init__(self, conanfile):
     self._conanfile = conanfile
     self.configuration = conanfile.settings.build_type
     self.platform = {'x86': 'Win32',
                      'x86_64': 'x64'}.get(str(conanfile.settings.arch))
     # ca_exclude section
     # TODO: Accept single strings, not lists
     self.exclude_code_analysis = self._conanfile.conf.get("tools.microsoft.msbuilddeps:exclude_code_analysis",
                                                           check_type=list)
     check_using_build_profile(self._conanfile)
Exemple #7
0
    def __init__(self, conanfile):
        self._conanfile = conanfile
        self.configuration = conanfile.settings.get_safe("build_type")

        arch = conanfile.settings.get_safe("arch")
        self.architecture = to_apple_arch(arch) or arch

        # TODO: check if it makes sense to add a subsetting for sdk version
        #  related to: https://github.com/conan-io/conan/issues/9608
        self.os_version = conanfile.settings.get_safe("os.version")
        check_using_build_profile(self._conanfile)
Exemple #8
0
    def __init__(self, conanfile):
        self._conanfile = conanfile
        self._build_type = self._conanfile.settings.get_safe("build_type")
        self._base_compiler = self._conanfile.settings.get_safe("compiler.base") or \
                              self._conanfile.settings.get_safe("compiler")
        self._vscrt = self._conanfile.settings.get_safe("compiler.base.runtime") or \
                      self._conanfile.settings.get_safe("compiler.runtime")
        self._cppstd = cppstd_from_settings(self._conanfile.settings)
        self._shared = self._conanfile.options.get_safe("shared")
        self._fpic = self._conanfile.options.get_safe("fPIC")
        self._build_env = VirtualBuildEnv(self._conanfile).environment()

        self.definitions = dict()
        self.preprocessor_definitions = dict()

        def from_build_env(name):
            return self._to_meson_value(self._build_env.get(name, None))

        self.c = from_build_env("CC")
        self.cpp = from_build_env("CXX")
        self.c_ld = from_build_env("CC_LD") or from_build_env("LD")
        self.cpp_ld = from_build_env("CXX_LD") or from_build_env("LD")
        self.ar = from_build_env("AR")
        self.strip = from_build_env("STRIP")
        self.as_ = from_build_env("AS")
        self.windres = from_build_env("WINDRES")
        self.pkgconfig = from_build_env("PKG_CONFIG")

        # https://mesonbuild.com/Builtin-options.html#core-options
        # Do not adjust "debug" if already adjusted "buildtype"
        self.buildtype = self._to_meson_build_type(
            self._build_type) if self._build_type else None
        self.default_library = self._to_meson_shared(self._shared) \
            if self._shared is not None else None

        # https://mesonbuild.com/Builtin-options.html#base-options
        self.b_vscrt = self._to_meson_vscrt(self._vscrt)
        self.b_staticpic = self._to_meson_value(self._fpic) \
            if (self._shared is False and self._fpic is not None) else None
        self.b_ndebug = self._to_meson_value(
            self._ndebug) if self._build_type else None

        # https://mesonbuild.com/Builtin-options.html#compiler-options
        self.cpp_std = self._to_meson_cppstd(
            self._cppstd) if self._cppstd else None
        self.c_args = self._to_meson_value(
            self._env_array('CPPFLAGS') + self._env_array('CFLAGS'))
        self.c_link_args = self._to_meson_value(self._env_array('LDFLAGS'))
        self.cpp_args = self._to_meson_value(
            self._env_array('CPPFLAGS') + self._env_array('CXXFLAGS'))
        self.cpp_link_args = self._to_meson_value(self._env_array('LDFLAGS'))
        self.pkg_config_path = "'%s'" % self._conanfile.generators_folder

        check_using_build_profile(self._conanfile)
Exemple #9
0
    def __init__(self, conanfile):
        self._conanfile = conanfile
        self.arch = self._conanfile.settings.get_safe("arch")
        self.configuration = str(self._conanfile.settings.build_type)

        # Activate the build config files for the specified libraries
        self.build_context_activated = []
        # By default, the build modules are generated for host context only
        self.build_context_build_modules = []
        # If specified, the files/targets/variables for the build context will be renamed appending
        # a suffix. It is necessary in case of same require and build_require and will cause an error
        self.build_context_suffix = {}

        check_using_build_profile(self._conanfile)

        # Enable/Disable checking if a component target exists or not
        self.check_components_exist = False
Exemple #10
0
    def __init__(self, conanfile):
        self._conanfile = conanfile
        self.configuration = conanfile.settings.build_type
        self.platform = {
            'x86': 'Win32',
            'x86_64': 'x64'
        }.get(str(conanfile.settings.arch))
        # ca_exclude section
        self.exclude_code_analysis = None
        ca_exclude = self._conanfile.conf[
            "tools.microsoft.msbuilddeps:exclude_code_analysis"]
        if ca_exclude is not None:
            # TODO: Accept single strings, not lists
            self.exclude_code_analysis = eval(ca_exclude)
            if not isinstance(self.exclude_code_analysis, list):
                raise ConanException(
                    "tools.microsoft.msbuilddeps:exclude_code_analysis must be a"
                    " list of package names patterns like ['pkga*']")

        check_using_build_profile(self._conanfile)
Exemple #11
0
 def __init__(self, conanfile):
     self._conanfile = conanfile
     arch = conanfile.settings.get_safe("arch")
     self.architecture = to_apple_arch(arch) or arch
     self.configuration = conanfile.settings.build_type
     self.sdk = conanfile.settings.get_safe("os.sdk")
     self.sdk_version = conanfile.settings.get_safe("os.sdk_version")
     self.libcxx = conanfile.settings.get_safe("compiler.libcxx")
     self.os_version = conanfile.settings.get_safe("os.version")
     self._global_defines = self._conanfile.conf.get("tools.build:defines",
                                                     default=[],
                                                     check_type=list)
     self._global_cxxflags = self._conanfile.conf.get(
         "tools.build:cxxflags", default=[], check_type=list)
     self._global_cflags = self._conanfile.conf.get("tools.build:cflags",
                                                    default=[],
                                                    check_type=list)
     sharedlinkflags = self._conanfile.conf.get(
         "tools.build:sharedlinkflags", default=[], check_type=list)
     exelinkflags = self._conanfile.conf.get("tools.build:exelinkflags",
                                             default=[],
                                             check_type=list)
     self._global_ldflags = sharedlinkflags + exelinkflags
     check_using_build_profile(self._conanfile)
Exemple #12
0
 def __init__(self, conanfile):
     self._conanfile = conanfile
     self._environment = None
     check_using_build_profile(self._conanfile)
Exemple #13
0
    def __init__(self, conanfile, backend=None):
        self._conanfile = conanfile
        self._os = self._conanfile.settings.get_safe("os")

        # Values are kept as Python built-ins so users can modify them more easily, and they are
        # only converted to Meson file syntax for rendering
        # priority: first user conf, then recipe, last one is default "ninja"
        self._backend = conanfile.conf.get(
            "tools.meson.mesontoolchain:backend", default=backend or 'ninja')
        build_type = self._conanfile.settings.get_safe("build_type")
        self._buildtype = {
            "Debug": "debug",  # Note, it is not "'debug'"
            "Release": "release",
            "MinSizeRel": "minsize",
            "RelWithDebInfo": "debugoptimized"
        }.get(build_type, build_type)
        self._b_ndebug = "true" if self._buildtype != "debug" else "false"

        # https://mesonbuild.com/Builtin-options.html#base-options
        fpic = self._conanfile.options.get_safe("fPIC")
        shared = self._conanfile.options.get_safe("shared")
        self._b_staticpic = fpic if (shared is False
                                     and fpic is not None) else None
        # https://mesonbuild.com/Builtin-options.html#core-options
        # Do not adjust "debug" if already adjusted "buildtype"
        self._default_library = (
            "shared" if shared else "static") if shared is not None else None

        compiler = self._conanfile.settings.get_safe("compiler")
        cppstd = self._conanfile.settings.get_safe("compiler.cppstd")
        self._cpp_std = to_cppstd_flag(compiler, cppstd)

        if compiler == "Visual Studio":
            vscrt = self._conanfile.settings.get_safe("compiler.runtime")
            self._b_vscrt = str(vscrt).lower()
        elif compiler == "msvc":
            vscrt = msvc_runtime_flag(self._conanfile)
            self._b_vscrt = str(vscrt).lower()
        else:
            self._b_vscrt = None

        self.properties = {}
        self.project_options = {
            "wrap_mode":
            "nofallback"  # https://github.com/conan-io/conan/issues/10671
        }
        self.preprocessor_definitions = {}
        self.pkg_config_path = self._conanfile.generators_folder

        check_using_build_profile(self._conanfile)

        self.cross_build = {}
        default_comp = ""
        default_comp_cpp = ""
        if cross_building(conanfile, skip_x64_x86=True):
            os_build, arch_build, os_host, arch_host = get_cross_building_settings(
                self._conanfile)
            self.cross_build["build"] = to_meson_machine(os_build, arch_build)
            self.cross_build["host"] = to_meson_machine(os_host, arch_host)
            self.properties["needs_exe_wrapper"] = True
            if hasattr(conanfile,
                       'settings_target') and conanfile.settings_target:
                settings_target = conanfile.settings_target
                os_target = settings_target.get_safe("os")
                arch_target = settings_target.get_safe("arch")
                self.cross_build["target"] = to_meson_machine(
                    os_target, arch_target)
            if is_apple_os(
                    os_host):  # default cross-compiler in Apple is common
                default_comp = "clang"
                default_comp_cpp = "clang++"
        else:
            if "Visual" in compiler or compiler == "msvc":
                default_comp = "cl"
                default_comp_cpp = "cl"
            elif "clang" in compiler:
                default_comp = "clang"
                default_comp_cpp = "clang++"
            elif compiler == "gcc":
                default_comp = "gcc"
                default_comp_cpp = "g++"

        # Read the VirtualBuildEnv to update the variables
        build_env = VirtualBuildEnv(self._conanfile).vars()
        self.c = build_env.get("CC") or default_comp
        self.cpp = build_env.get("CXX") or default_comp_cpp
        self.c_ld = build_env.get("CC_LD") or build_env.get("LD")
        self.cpp_ld = build_env.get("CXX_LD") or build_env.get("LD")
        self.ar = build_env.get("AR")
        self.strip = build_env.get("STRIP")
        self.as_ = build_env.get("AS")
        self.windres = build_env.get("WINDRES")
        self.pkgconfig = build_env.get("PKG_CONFIG")
        self.c_args = self._get_env_list(build_env.get("CFLAGS", []))
        self.c_link_args = self._get_env_list(build_env.get("LDFLAGS", []))
        self.cpp_args = self._get_env_list(build_env.get("CXXFLAGS", []))
        self.cpp_link_args = self._get_env_list(build_env.get("LDFLAGS", []))

        # Apple flags
        self.apple_arch_flag = []
        self.apple_isysroot_flag = []
        self.apple_min_version_flag = []

        self._resolve_apple_flags()
        self._resolve_android_cross_compilation()
Exemple #14
0
 def __init__(self, conanfile):
     self._conanfile = conanfile
     self._environment = None
     self._ordered_deps = []
     check_using_build_profile(self._conanfile)
 def __init__(self, conanfile):
     self._conanfile = conanfile
     check_using_build_profile(self._conanfile)
Exemple #16
0
 def __init__(self, conanfile, namespace=None):
     self._conanfile = conanfile
     self._namespace = namespace
     check_using_build_profile(self._conanfile)