Beispiel #1
0
    def test_different_arch(self):
        settings = Settings.loads(get_default_settings_yml())
        settings.os = "FreeBSD"
        settings.arch = "x86"
        self.assertTrue(
            cross_building(settings, self_os="FreeBSD", self_arch="x86_64"))

        with mock.patch("platform.system", mock.MagicMock(return_value='FreeBSD')), \
             mock.patch("platform.machine", mock.MagicMock(return_value="x86_64")):
            self.assertTrue(cross_building(settings))

        settings.os_build = "FreeBSD"
        settings.arch_build = "x86_64"
        self.assertTrue(cross_building(settings))
Beispiel #2
0
    def _get_host_build_target_flags(self):
        """Based on google search for build/host triplets, it could need a lot
        and complex verification"""

        arch_detected = detected_architecture() or platform.machine()
        os_detected = detected_os() or platform.system()

        if self._os_target and self._arch_target:
            try:
                target = get_gnu_triplet(self._os_target, self._arch_target,
                                         self._compiler)
            except ConanException as exc:
                self._conanfile.output.warn(str(exc))
                target = None
        else:
            target = None

        if os_detected is None or arch_detected is None or self._arch is None or self._os is None:
            return False, False, target
        if not cross_building(self._conanfile.settings, os_detected,
                              arch_detected):
            return False, False, target

        try:
            build = get_gnu_triplet(os_detected, arch_detected, self._compiler)
        except ConanException as exc:
            self._conanfile.output.warn(str(exc))
            build = None
        try:
            host = get_gnu_triplet(self._os, self._arch, self._compiler)
        except ConanException as exc:
            self._conanfile.output.warn(str(exc))
            host = None
        return build, host, target
Beispiel #3
0
    def _get_host_build_target_flags(self):
        """Based on google search for build/host triplets, it could need a lot
        and complex verification"""

        if self._os_target and self._arch_target:
            try:
                target = get_gnu_triplet(self._os_target, self._arch_target,
                                         self._compiler)
            except ConanException as exc:
                self._conanfile.output.warn(str(exc))
                target = None
        else:
            target = None

        if self._os_build is None or self._arch_build is None or self._arch_host is None or self._os_host is None:
            return False, False, target

        if not cross_building(self._conanfile, self._os_build,
                              self._arch_build):
            return False, False, target

        try:
            build = get_gnu_triplet(self._os_build, self._arch_build,
                                    self._compiler)
        except ConanException as exc:
            self._conanfile.output.warn(str(exc))
            build = None
        try:
            host = get_gnu_triplet(self._os_host, self._arch_host,
                                   self._compiler)
        except ConanException as exc:
            self._conanfile.output.warn(str(exc))
            host = None
        return build, host, target
Beispiel #4
0
    def configure(self, source_folder=None):
        source = self._conanfile.source_folder
        if source_folder:
            source = os.path.join(self._conanfile.source_folder, source_folder)

        cmd = "meson setup"
        if cross_building(self._conanfile):
            cmd += ' --cross-file "{}"'.format(MesonToolchain.cross_filename)
        else:
            cmd += ' --native-file "{}"'.format(MesonToolchain.native_filename)
        cmd += ' "{}" "{}"'.format(self._build_dir, source)
        if self._conanfile.package_folder:
            cmd += ' -Dprefix="{}"'.format(self._conanfile.package_folder)
        self._run(cmd)
Beispiel #5
0
    def _get_package_names(self, packages, arch_names):
        """ Parse package names according it architecture

        :param packages: list with all package to be installed e.g. ["libusb-dev libfoobar-dev"]
        :param arch_names: Package suffix/prefix name used by installer tool
        :return: list with all parsed names e.g. ["libusb-dev:armhf libfoobar-dev:armhf"]
        """
        if self._conanfile and self._conanfile.settings and cross_building(self._conanfile):
            _, build_arch, _, host_arch = get_cross_building_settings(self._conanfile)
            arch = host_arch or build_arch
            parsed_packages = []
            for package in packages:
                for package_name in package.split(" "):
                    parsed_packages.append(self._tool.get_package_name(package_name, arch,
                                                                       arch_names))
            return parsed_packages
        return packages
Beispiel #6
0
    def gcc_build(self):
        with tools.chdir(self.source_subfolder):
            self.run("autoreconf -f -i")

            autotools = AutoToolsBuildEnvironment(self)
            _args = ["--prefix=%s/build"%(os.getcwd()), "--enable-introspection"]
            if self.options.shared:
                _args.extend(['--enable-shared=yes','--enable-static=no'])
            else:
                _args.extend(['--enable-shared=no','--enable-static=yes'])
            autotools.configure(args=_args)
            autotools.make()#args=["-j2"])
            

            if not cross_building(self.settings):
                self.run('make check')
            autotools.install()
Beispiel #7
0
    def test_x86_x64(self):
        settings = Settings.loads(default_settings_yml)
        settings.os = "FreeBSD"
        settings.arch = "x86_64"
        self.assertTrue(
            cross_building(settings,
                           self_os="FreeBSD",
                           self_arch="x86",
                           skip_x64_x86=True))
        self.assertTrue(
            cross_building(settings,
                           self_os="FreeBSD",
                           self_arch="x86",
                           skip_x64_x86=False))

        with mock.patch("platform.system", mock.MagicMock(return_value='FreeBSD')), \
             mock.patch("platform.machine", mock.MagicMock(return_value="x86")):
            self.assertTrue(cross_building(settings, skip_x64_x86=True))
            self.assertTrue(cross_building(settings, skip_x64_x86=False))

        settings.os_build = "FreeBSD"
        settings.arch_build = "x86"
        self.assertTrue(cross_building(settings, skip_x64_x86=True))
        self.assertTrue(cross_building(settings, skip_x64_x86=False))
Beispiel #8
0
 def generate(self):
     if cross_building(self._conanfile):
         self._write_cross_file()
     else:
         self._write_native_file()
     write_conanvcvars(self._conanfile)