Example #1
0
        private void IntegrateIntoConfiguration(VCConfiguration configuration)
        {
            string absPropFilePath      = GetPropsFilePath(configuration);
            string relativePropFilePath = ConanPathHelper.GetRelativePath(configuration.project.ProjectDirectory, absPropFilePath);

            IVCCollection tools = (IVCCollection)configuration.Tools;

            if (tools != null)
            {
                VCLinkerTool ltool = (VCLinkerTool)tools.Item("VCLinkerTool");
                if (ltool != null)
                {
                    string deps = ltool.AdditionalDependencies;
                    ltool.AdditionalDependencies = deps.Replace("$(NOINHERIT)", "");
                }
            }

            foreach (VCPropertySheet sheet in configuration.PropertySheets)
            {
                if (ConanPathHelper.NormalizePath(sheet.PropertySheetFile) == ConanPathHelper.NormalizePath(absPropFilePath))
                {
                    return;
                }
            }
            configuration.AddPropertySheet(relativePropFilePath);
            configuration.CollectIntelliSenseInfo();
        }
Example #2
0
        private async System.Threading.Tasks.Task InspectAsync(EnvDTE.Project project)
        {
            await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();

            string projectConanConfig = ConanPathHelper.GetNearestConanConfig(project.FileName);
            var    conanProject       = new ConanProject
            {
                Path       = project.FileName,
                ConfigFile = projectConanConfig
            };

            await TaskScheduler.Default;

            var conanRunner = new ConanRunner(_settingsService.LoadSettingFile(conanProject), _conanPath);

            var process = await conanRunner.Inspect(conanProject);

            Logger.Log(
                $"[Conan.VisualStudio] Calling process '{process.StartInfo.FileName}' " +
                $"with arguments '{process.StartInfo.Arguments}'");
            using (var reader = process.StandardOutput)
            {
                string line;
                while ((line = await reader.ReadLineAsync()) != null)
                {
                    Logger.Log(line);
                }
            }
        }
Example #3
0
        public async Task IntegrateAsync(VCProject vcProject)
        {
            var projectDirectory   = vcProject.ProjectDirectory;
            var conanfileDirectory = await ConanPathHelper.GetNearestConanfilePathAsync(projectDirectory);

            if (conanfileDirectory == null)
            {
                _errorListService.WriteError("unable to locate conanfile directory!");
                return;
            }

            if (_settingsService.GetConanInstallOnlyActiveConfiguration())
            {
                string relativePropFilePath = GetPropsFilePath(vcProject.ActiveConfiguration);
                vcProject.ActiveConfiguration.AddPropertySheet(relativePropFilePath);
                vcProject.ActiveConfiguration.CollectIntelliSenseInfo();
            }
            else
            {
                foreach (VCConfiguration configuration in vcProject.Configurations)
                {
                    string relativePropFilePath = GetPropsFilePath(configuration);
                    configuration.AddPropertySheet(relativePropFilePath);
                    configuration.CollectIntelliSenseInfo();
                }
            }
        }
Example #4
0
        public ConanProject ExtractConanProject(VCProject vcProject, ISettingsService settingsService)
        {
            var projectPath = ConanPathHelper.GetNearestConanfilePath(vcProject.ProjectDirectory); // TODO: Instead of nearest, use the one added to the project (be explicit)

            if (projectPath == null)
            {
                return(null);
            }

            string projectConanConfig = ConanPathHelper.GetNearestConanConfig(vcProject.ProjectDirectory);
            var    project            = new ConanProject
            {
                Path       = projectPath,
                ConfigFile = projectConanConfig
            };

            if (settingsService != null && settingsService.GetConanInstallOnlyActiveConfiguration())
            {
                project.Configurations.Add(ExtractConanConfiguration(settingsService, vcProject.ActiveConfiguration));
            }
            else
            {
                foreach (VCConfiguration configuration in vcProject.Configurations)
                {
                    project.Configurations.Add(ExtractConanConfiguration(settingsService, configuration));
                }
            }
            return(project);
        }
Example #5
0
        public ConanProject ExtractConanProject(VCProject vcProject, ISettingsService settingsService)
        {
            var projectPath = ConanPathHelper.GetNearestConanfilePath(vcProject.ProjectDirectory);

            if (projectPath == null)
            {
                return(null);
            }
            var project = new ConanProject
            {
                Path = projectPath,
            };

            if (settingsService != null && settingsService.GetConanInstallOnlyActiveConfiguration())
            {
                project.Configurations.Add(ExtractConanConfiguration(settingsService, vcProject.ActiveConfiguration));
            }
            else
            {
                foreach (VCConfiguration configuration in vcProject.Configurations)
                {
                    project.Configurations.Add(ExtractConanConfiguration(settingsService, configuration));
                }
            }
            return(project);
        }
Example #6
0
        public async Task GetNearestConanfilePathWorksForDiskRootAsync()
        {
            var root = FileSystemUtils.CreateTempDirectory();
            var dir  = Directory.CreateDirectory(Path.Combine(root, Path.GetRandomFileName())).FullName;

            FileSystemUtils.CreateTempFile(root, "conanfile.txt");
            Assert.AreEqual(Path.Combine(root, "conanfile.txt"), await ConanPathHelper.GetNearestConanfilePathAsync(dir));
            Assert.AreEqual(Path.Combine(root, "conanfile.txt"), await ConanPathHelper.GetNearestConanfilePathAsync(root));
        }
Example #7
0
        public async Task GetNearestConanfilePathWorksForDiskRootAsync()
        {
            var dir  = FileSystemUtils.CreateTempDirectory();
            var root = Path.GetPathRoot(dir);

            FileSystemUtils.CreateTempFile(root, "conanfile.txt");
            Assert.AreEqual(root, await ConanPathHelper.GetNearestConanfilePathAsync(dir));
            Assert.AreEqual(root, await ConanPathHelper.GetNearestConanfilePathAsync(root));
        }
Example #8
0
        public async Task GetNearestConanfilePathReturnsParentPathIfValidAsync()
        {
            var dir    = FileSystemUtils.CreateTempDirectory();
            var subdir = Path.Combine(dir, "test");

            Directory.CreateDirectory(subdir);

            FileSystemUtils.CreateTempFile(dir, "conanfile.txt");
            Assert.AreEqual(dir, await ConanPathHelper.GetNearestConanfilePathAsync(subdir));
        }
Example #9
0
        protected internal override async Task MenuItemCallback()
        {
            var project            = _vcProjectService.GetActiveProject();
            var projectDirectory   = project.ProjectDirectory;
            var conanfileDirectory = await ConanPathHelper.GetNearestConanfilePath(projectDirectory);

            var propFilePath         = Path.Combine(conanfileDirectory, @"conan\conanbuildinfo_multi.props");
            var relativePropFilePath = ConanPathHelper.GetRelativePath(projectDirectory, propFilePath);
            await _vcProjectService.AddPropsImport(project.ProjectFile, relativePropFilePath);
        }
Example #10
0
 private bool ValidateConanExecutableAndShowMessage(string exe)
 {
     if (!ConanPathHelper.ValidateConanExecutable(exe, out string errorMessage))
     {
         MessageBox.Show(errorMessage, "Conan extension: invalid conan executable",
                         MessageBoxButtons.OK, MessageBoxIcon.Error);
         return(false);
     }
     return(true);
 }
Example #11
0
        public async Task GetNearestConanfilePathReturnsCurrentPathIfValidAsync()
        {
            var dir       = FileSystemUtils.CreateTempDirectory();
            var conanfile = FileSystemUtils.CreateTempFile(dir, "conanfile.txt");

            Assert.AreEqual(dir, await ConanPathHelper.GetNearestConanfilePathAsync(dir));

            File.Delete(conanfile);
            FileSystemUtils.CreateTempFile(dir, "conanfile.py");
            Assert.AreEqual(dir, await ConanPathHelper.GetNearestConanfilePathAsync(dir));
        }
Example #12
0
        public void ConanPathIsDeterminedAutomatically()
        {
            var          directory = FileSystemUtils.CreateTempDirectory();
            const string extension = ".cmd";
            var          conanShim = FileSystemUtils.CreateTempFile(directory, "conan" + extension);

            Environment.SetEnvironmentVariable("PATH", directory);
            Environment.SetEnvironmentVariable("PATHEXT", extension);

            Assert.AreEqual(conanShim, ConanPathHelper.DetermineConanPathFromEnvironment());
        }
Example #13
0
        public void PathDeterminerRespectPathExtOrder()
        {
            var directory = FileSystemUtils.CreateTempDirectory();
            var comShim   = FileSystemUtils.CreateTempFile(directory, "conan.com");

            FileSystemUtils.CreateTempFile(directory, "conan.exe");
            var batShim = FileSystemUtils.CreateTempFile(directory, "conan.bat");

            Environment.SetEnvironmentVariable("PATH", directory);

            Environment.SetEnvironmentVariable("PATHEXT", ".COM;.EXE;.BAT");
            Assert.AreEqual(comShim, ConanPathHelper.DetermineConanPathFromEnvironment());

            Environment.SetEnvironmentVariable("PATHEXT", ".BAT;.EXE;.COM");
            Assert.AreEqual(batShim, ConanPathHelper.DetermineConanPathFromEnvironment());
        }
        public async Task <ConanProject> ExtractConanProject(VCProject vcProject)
        {
            var projectPath = await ConanPathHelper.GetNearestConanfilePath(vcProject.ProjectDirectory);

            var project = new ConanProject
            {
                Path        = projectPath,
                InstallPath = Path.Combine(projectPath, "conan")
            };

            foreach (VCConfiguration configuration in vcProject.Configurations)
            {
                project.Configurations.Add(ExtractConanConfiguration(configuration));
            }

            return(project);
        }
Example #15
0
        private string GetPropsFilePath(VCConfiguration configuration)
        {
            string installPath = _vcProjectService.GetInstallationDirectory(_settingsService, configuration);
            string propFileName;

            if (_settingsService.GetConanGenerator() == ConanGeneratorType.visual_studio)
            {
                propFileName = @"conanbuildinfo.props";
            }
            else
            {
                propFileName = @"conanbuildinfo_multi.props";
            }
            string propFilePath = Path.Combine(installPath, propFileName);

            return(ConanPathHelper.GetRelativePath(configuration.project.ProjectDirectory, propFilePath));
        }
Example #16
0
        private void IntegrateIntoConfiguration(IVCConfiguration configuration)
        {
            string absPropFilePath      = GetPropsFilePath(configuration);
            string relativePropFilePath = ConanPathHelper.GetRelativePath(configuration.ProjectDirectory, absPropFilePath);

            configuration.AdditionalDependencies = configuration.AdditionalDependencies.Replace("$(NOINHERIT)", "");

            foreach (IVCPropertySheet sheet in configuration.PropertySheets)
            {
                if (ConanPathHelper.NormalizePath(sheet.PropertySheetFile) == ConanPathHelper.NormalizePath(absPropFilePath))
                {
                    string msg = $"[Conan.VisualStudio] Property sheet '{absPropFilePath}' already added to project {configuration.ProjectName}";
                    Logger.Log(msg);
                    return;
                }
            }
            configuration.AddPropertySheet(relativePropFilePath);
            Logger.Log($"[Conan.VisualStudio] Property sheet '{absPropFilePath}' added to project {configuration.ProjectName}");
            configuration.CollectIntelliSenseInfo();
        }
Example #17
0
        public async Task IntegrateAsync(IVCProject vcProject)
        {
            var projectDirectory   = vcProject.ProjectDirectory;
            var conanfileDirectory = await ConanPathHelper.GetNearestConanfilePathAsync(projectDirectory);

            if (conanfileDirectory == null)
            {
                _errorListService.WriteError("unable to locate conanfile directory!");
                return;
            }

            if (_settingsService.GetConanInstallOnlyActiveConfiguration())
            {
                IntegrateIntoConfiguration(vcProject.ActiveConfiguration);
            }
            else
            {
                foreach (IVCConfiguration configuration in vcProject.Configurations)
                {
                    IntegrateIntoConfiguration(configuration);
                }
            }
        }
Example #18
0
        public async Task GetNearestConanfilePathReturnsNullIfThereIsNoConanfileAsync()
        {
            var dir = FileSystemUtils.CreateTempDirectory();

            Assert.IsNull(await ConanPathHelper.GetNearestConanfilePathAsync(dir));
        }
Example #19
0
 public void GetRelativePathTests(string basePath, string location, string expectedRelativePath) =>
 Assert.AreEqual(expectedRelativePath, ConanPathHelper.GetRelativePath(basePath, location));
Example #20
0
 public bool IsConanProject(Project project)
 {
     ThreadHelper.ThrowIfNotOnUIThread();
     return(IsCppProject(project) && null != ConanPathHelper.GetNearestConanfilePath(AsVCProject(project).ProjectDirectory));
 }