Exemple #1
0
 def detect_file_profile_test(self, _):
     output = TestBufferConanOutput()
     with tools.environment_append({"CC": "gcc"}):
         detect_defaults_settings(output, profile_path="./MyProfile")
         self.assertIn(
             "conan profile update settings.compiler.libcxx=libstdc++11 MyProfile",
             output)
Exemple #2
0
 def detect_default_profile_test(self, _):
     output = TestBufferConanOutput()
     with tools.environment_append({"CC": "gcc"}):
         detect_defaults_settings(output,
                                  profile_path="~/.conan/profiles/default")
         self.assertIn("edit the default profile at", output)
         self.assertIn("~/.conan/profiles/default", output)
Exemple #3
0
 def detect_abs_file_profile_test(self, _):
     output = TestBufferConanOutput()
     with tools.environment_append({"CC": "gcc"}):
         detect_defaults_settings(
             output, profile_path="/foo/bar/quz/custom-profile")
         self.assertIn("edit the custom-profile profile at", output)
         self.assertIn("/foo/bar/quz/custom-profile", output)
Exemple #4
0
 def test_detect_abs_file_profile(self, _):
     output = TestBufferConanOutput()
     with tools.environment_append({"CC": "gcc"}):
         detect_defaults_settings(
             output, profile_path="/foo/bar/quz/custom-profile")
         self.assertIn(
             "conan profile update settings.compiler.libcxx=libstdc++11 "
             "custom-profile", output)
Exemple #5
0
def cmd_profile_create(profile_name,
                       cache_profiles_path,
                       output,
                       detect=False):
    profile_path = get_profile_path(profile_name,
                                    cache_profiles_path,
                                    get_cwd(),
                                    exists=False)
    if os.path.exists(profile_path):
        raise ConanException("Profile already exists")

    profile = Profile()
    if detect:
        settings = detect_defaults_settings(output)
        for name, value in settings:
            profile.settings[name] = value

    contents = profile.dumps()
    save(profile_path, contents)

    if detect:
        output.info("Profile created with detected settings: %s" %
                    profile_path)
    else:
        output.info("Empty profile created: %s" % profile_path)
    return profile_path
Exemple #6
0
 def test_detect_arch(self, machine, expected_arch):
     with mock.patch("platform.machine", mock.MagicMock(return_value=machine)):
         result = detect_defaults_settings(output=Mock(),
                                           profile_path=DEFAULT_PROFILE_NAME)
         result = dict(result)
         self.assertEqual(expected_arch, result['arch'])
         self.assertEqual(expected_arch, result['arch_build'])
Exemple #7
0
 def detect_test(self):
     output = TestBufferConanOutput()
     result = detect_defaults_settings(output)
     if platform.system() == "Linux":
         for (name, value) in result:
             if name == "compiler":
                 self.assertEquals(value, "gcc")
Exemple #8
0
    def detect_default_in_mac_os_using_gcc_as_default_test(self):
        """
        Test if gcc in Mac OS X is using apple-clang as frontend
        """
        # See: https://github.com/conan-io/conan/issues/2231
        try:
            output = check_output(["gcc", "--version"],
                                  stderr=subprocess.STDOUT)
        except subprocess.CalledProcessError:
            # gcc is not installed or there is any error (no test scenario)
            return

        if "clang" not in output:
            # Not test scenario gcc should display clang in output
            # see: https://stackoverflow.com/questions/19535422/os-x-10-9-gcc-links-to-clang
            raise Exception(
                "Apple gcc doesn't point to clang with gcc frontend anymore!")

        output = TestBufferConanOutput()
        with tools.environment_append({"CC": "gcc"}):
            result = detect_defaults_settings(
                output, profile_path=DEFAULT_PROFILE_NAME)
        # result is a list of tuples (name, value) so converting it to dict
        result = dict(result)
        # No compiler should be detected
        self.assertIsNone(result.get("compiler", None))
        self.assertIn("gcc detected as a frontend using apple-clang", output)
        self.assertIsNotNone(output.error)
Exemple #9
0
    def default_profile(self):
        if self._default_profile is None:
            if not os.path.exists(self.default_profile_path):
                self._output.writeln(
                    "Auto detecting your dev setup to initialize the "
                    "default profile (%s)" % self.default_profile_path,
                    Color.BRIGHT_YELLOW)

                default_settings = detect_defaults_settings(self._output)
                self._output.writeln("Default settings", Color.BRIGHT_YELLOW)
                self._output.writeln(
                    "\n".join(
                        ["\t%s=%s" % (k, v) for (k, v) in default_settings]),
                    Color.BRIGHT_YELLOW)
                self._output.writeln(
                    "*** You can change them in %s ***" %
                    self.default_profile_path, Color.BRIGHT_MAGENTA)
                self._output.writeln(
                    "*** Or override with -s compiler='other' -s ...s***\n\n",
                    Color.BRIGHT_MAGENTA)

                self._default_profile = Profile()
                tmp = OrderedDict(default_settings)
                self._default_profile.update_settings(tmp)
                save(self.default_profile_path, self._default_profile.dumps())
            else:
                self._default_profile, _ = read_profile(
                    self.default_profile_path, get_cwd(), self.profiles_path)

            # Mix profile settings with environment
            mixed_settings = _mix_settings_with_env(
                self._default_profile.settings)
            self._default_profile.settings = mixed_settings

        return self._default_profile
Exemple #10
0
    def detect_default_in_mac_os_using_gcc_as_default_test(self):
        """
        Test if gcc in Mac OS X is using apple-clang as frontend
        """
        # See: https://github.com/conan-io/conan/issues/2231
        if platform.system() != "Darwin":
            return

        try:
            output = subprocess.check_output(["gcc", "--version"], stderr=subprocess.STDOUT)
        except subprocess.CalledProcessError:
            # gcc is not installed or there is any error (no test scenario)
            return

        if b"clang" not in output:
            # Not test scenario gcc should display clang in output
            # see: https://stackoverflow.com/questions/19535422/os-x-10-9-gcc-links-to-clang
            raise Exception("Apple gcc doesn't point to clang with gcc frontend anymore! please check")

        output = TestBufferConanOutput()
        with tools.environment_append({"CC": "gcc"}):
            result = detect_defaults_settings(output)
        # result is a list of tuples (name, value) so converting it to dict
        result = dict(result)
        # No compiler should be detected
        self.assertIsNone(result.get("compiler", None))
        self.assertIn("gcc detected as a frontend using apple-clang", output)
        self.assertIsNotNone(output.error)
Exemple #11
0
 def test_vs2022(self):
     with mock.patch("conans.client.conf.detect._get_default_compiler",
                     mock.MagicMock(return_value=("Visual Studio", "17"))):
         result = detect_defaults_settings(
             output=Mock(), profile_path=DEFAULT_PROFILE_NAME)
         result = dict(result)
         self.assertEqual('msvc', result['compiler'])
         self.assertEqual('19.3', result['compiler.version'])
Exemple #12
0
 def test_detect_default_compilers(self):
     platform_default_compilers = {
         "Linux": "gcc",
         "Darwin": "apple-clang",
         "Windows": "Visual Studio"
     }
     output = TestBufferConanOutput()
     result = detect_defaults_settings(output, profile_path=DEFAULT_PROFILE_NAME)
     # result is a list of tuples (name, value) so converting it to dict
     result = dict(result)
     platform_compiler = platform_default_compilers.get(platform.system(), None)
     if platform_compiler is not None:
         self.assertEqual(result.get("compiler", None), platform_compiler)
Exemple #13
0
 def test_detect_aix(self, processor, bitness, version, expected_arch):
     with mock.patch("platform.machine", mock.MagicMock(return_value='XXXXXXXXXXXX')), \
             mock.patch("platform.processor", mock.MagicMock(return_value=processor)), \
             mock.patch("platform.system", mock.MagicMock(return_value='AIX')), \
             mock.patch("conans.client.tools.oss.OSInfo.get_aix_conf", mock.MagicMock(return_value=bitness)), \
             mock.patch('subprocess.check_output', mock.MagicMock(return_value=version)):
         result = detect_defaults_settings(
             output=Mock(), profile_path=DEFAULT_PROFILE_NAME)
         result = dict(result)
         self.assertEqual("AIX", result['os'])
         self.assertEqual("AIX", result['os_build'])
         self.assertEqual(expected_arch, result['arch'])
         self.assertEqual(expected_arch, result['arch_build'])
Exemple #14
0
 def detect_default_compilers_test(self):
     platform_default_compilers = {
         "Linux": "gcc",
         "Darwin": "apple-clang",
         "Windows": "Visual Studio"
     }
     output = TestBufferConanOutput()
     result = detect_defaults_settings(output)
     # result is a list of tuples (name, value) so converting it to dict
     result = dict(result)
     platform_compiler = platform_default_compilers.get(platform.system(), None)
     if platform_compiler is not None:
         self.assertEquals(result.get("compiler", None), platform_compiler)
Exemple #15
0
    def create_profile(self, profile_name, detect=False):
        profile_path = get_profile_path(profile_name, self._client_cache.profiles_path, os.getcwd(),
                                        exists=False)
        if os.path.exists(profile_path):
            raise ConanException("Profile already exists")

        profile = Profile()
        if detect:
            settings = detect_defaults_settings(self._user_io.out)
            for name, value in settings:
                profile.settings[name] = value

        contents = profile.dumps()
        save(profile_path, contents)
        self._user_io.out.info("Empty profile created: %s" % profile_path)
        return profile_path
Exemple #16
0
    def initialize_default_profile(self):
        if not os.path.exists(self.default_profile_path):
            self._output.writeln("Auto detecting your dev setup to initialize the "
                                 "default profile (%s)" % self.default_profile_path,
                                 Color.BRIGHT_YELLOW)

            default_settings = detect_defaults_settings(self._output,
                                                        profile_path=self.default_profile_path)
            self._output.writeln("Default settings", Color.BRIGHT_YELLOW)
            self._output.writeln("\n".join(["\t%s=%s" % (k, v) for (k, v) in default_settings]),
                                 Color.BRIGHT_YELLOW)
            self._output.writeln("*** You can change them in %s ***" % self.default_profile_path,
                                 Color.BRIGHT_MAGENTA)
            self._output.writeln("*** Or override with -s compiler='other' -s ...s***\n\n",
                                 Color.BRIGHT_MAGENTA)

            default_profile = Profile()
            tmp = OrderedDict(default_settings)
            default_profile.update_settings(tmp)
            save(self.default_profile_path, default_profile.dumps())
Exemple #17
0
def cmd_profile_create(profile_name, cache_profiles_path, output, detect=False):
    profile_path = get_profile_path(profile_name, cache_profiles_path, get_cwd(),
                                    exists=False)
    if os.path.exists(profile_path):
        raise ConanException("Profile already exists")

    profile = Profile()
    if detect:
        settings = detect_defaults_settings(output)
        for name, value in settings:
            profile.settings[name] = value

    contents = profile.dumps()
    save(profile_path, contents)

    if detect:
        output.info("Profile created with detected settings: %s" % profile_path)
    else:
        output.info("Empty profile created: %s" % profile_path)
    return profile_path
    def env_setting_override_test(self):
        tmp_dir = temp_folder()
        out = MockOut()
        cache = ClientCache(tmp_dir, None, out)

        base_settings = OrderedDict(
            detect_defaults_settings(out,
                                     profile_path="~/.conan/profiles/default"))

        with tools.environment_append({"CONAN_ENV_COMPILER_VERSION": "4.6"}):
            expected = copy.copy(base_settings)
            expected["compiler.version"] = "4.6"
            self.assertEqual(cache.default_profile.settings, expected)

        tmp_dir = temp_folder()
        cache = ClientCache(tmp_dir, None, out)
        with tools.environment_append({}):
            self.assertEqual(cache.default_profile.settings, base_settings)

        tmp_dir = temp_folder()
        cache = ClientCache(tmp_dir, None, out)
        # If compiler is overwritten compiler subsettings are not assigned
        with tools.environment_append({"CONAN_ENV_COMPILER": "Visual Studio"}):
            expected = copy.copy(base_settings)
            expected["compiler"] = "Visual Studio"
            self.assertEqual(cache.default_profile.settings, expected)

        tmp_dir = temp_folder()
        cache = ClientCache(tmp_dir, None, out)
        with tools.environment_append({
                "CONAN_ENV_COMPILER": "Visual Studio",
                "CONAN_ENV_COMPILER_VERSION": "14",
                "CONAN_ENV_COMPILER_RUNTIME": "MDd"
        }):
            expected = copy.copy(base_settings)
            expected["compiler"] = "Visual Studio"
            expected["compiler.runtime"] = "MDd"
            expected["compiler.version"] = "14"

            self.assertEqual(cache.default_profile.settings, expected)
    def env_setting_override_test(self):
        tmp_dir = temp_folder()
        out = MockOut()
        cache = ClientCache(tmp_dir, None, out)

        base_settings = OrderedDict(detect_defaults_settings(out))

        with tools.environment_append({"CONAN_ENV_COMPILER_VERSION": "4.6"}):
            expected = copy.copy(base_settings)
            expected["compiler.version"] = "4.6"
            self.assertEquals(cache.default_profile.settings, expected)

        tmp_dir = temp_folder()
        cache = ClientCache(tmp_dir, None, out)
        with tools.environment_append({}):
            self.assertEquals(cache.default_profile.settings, base_settings)

        tmp_dir = temp_folder()
        cache = ClientCache(tmp_dir, None, out)
        # If compiler is overwritten compiler subsettings are not assigned
        with tools.environment_append({"CONAN_ENV_COMPILER": "Visual Studio"}):
            expected = copy.copy(base_settings)
            expected["compiler"] = "Visual Studio"
            self.assertEquals(cache.default_profile.settings, expected)

        tmp_dir = temp_folder()
        cache = ClientCache(tmp_dir, None, out)
        with tools.environment_append({"CONAN_ENV_COMPILER": "Visual Studio",
                                       "CONAN_ENV_COMPILER_VERSION": "14",
                                       "CONAN_ENV_COMPILER_RUNTIME": "MDd"}):
            expected = copy.copy(base_settings)
            expected["compiler"] = "Visual Studio"
            expected["compiler.runtime"] = "MDd"
            expected["compiler.version"] = "14"

            self.assertEquals(cache.default_profile.settings, expected)
Exemple #20
0
 def test_detect_empty_arch(self, _):
     result = detect_defaults_settings(output=TestBufferConanOutput())
     result = dict(result)
     self.assertTrue("arch" not in result)
     self.assertTrue("arch_build" not in result)
Exemple #21
0
 def test_detect_clang_gcc_toolchain(self, _):
     output = TestBufferConanOutput()
     with tools.environment_append(
         {"CC": "clang-9 --gcc-toolchain=/usr/lib/gcc/x86_64-linux-gnu/9"}):
         detect_defaults_settings(output, profile_path="./MyProfile")
         self.assertIn("CC and CXX: clang-9 --gcc-toolchain", output)
Exemple #22
0
 def test_detect_empty_arch(self, _):
     result = detect_defaults_settings(output=TestBufferConanOutput(),
                                       profile_path=DEFAULT_PROFILE_NAME)
     result = dict(result)
     self.assertTrue("arch" not in result)
     self.assertTrue("arch_build" not in result)