private static void AddLibraries(Project project, ProFileOption option, string paths, string deps) { if (QtProject.GetFormatVersion(project) < Resources.qtMinFormatVersion_ClProperties) { return; } var versionManager = QtVersionManager.The(); var qtDir = versionManager.GetInstallPath(project); if (qtDir == null) { qtDir = Environment.GetEnvironmentVariable("QTDIR"); } if (qtDir == null) { qtDir = ""; } qtDir = HelperFunctions.NormalizeRelativeFilePath(qtDir); ThreadHelper.ThrowIfNotOnUIThread(); if (paths != null) { foreach (var s in paths.Split(';', ',')) { var d = HelperFunctions.NormalizeRelativeFilePath(s); if (!d.StartsWith("$(qtdir)\\lib", StringComparison.OrdinalIgnoreCase) && !d.StartsWith(qtDir + "\\lib", StringComparison.OrdinalIgnoreCase)) { if (HelperFunctions.IsAbsoluteFilePath(d)) { d = HelperFunctions.GetRelativePath(project.FullName, d); } if (!HelperFunctions.IsAbsoluteFilePath(d)) { option.List.Add("-L\"" + HelperFunctions.ChangePathFormat(d) + "\""); } } } } if (deps != null) { foreach (var d in deps.Split(' ')) { if (d.Length > 0 && !d.StartsWith("$(qtdir)\\lib", StringComparison.OrdinalIgnoreCase) && !d.StartsWith(qtDir + "\\lib", StringComparison.OrdinalIgnoreCase) && !d.StartsWith("qt", StringComparison.OrdinalIgnoreCase) && !d.StartsWith(".\\qt", StringComparison.OrdinalIgnoreCase) && d != ".") { option.List.Add("-l" + HelperFunctions.ChangePathFormat(d).Replace(".lib", "")); } } } }
private void optionComboBox_SelectedIndexChanged(object sender, System.EventArgs e) { currentOpt = currentPro.Options[optionComboBox.SelectedIndex]; UpdateCurrentListItem(); optionTextBox.Text = string.Empty; // update comment field commentLabel.Text = currentOpt.Comment; UpdateButtons(); }
private static void WriteProFileOption(StreamWriter sw, ProFileOption option) { if (option.List.Count <= 0) { return; } if (option.IncludeComment) { sw.WriteLine(sw.NewLine + "#" + option.ShortComment); } if (option.AssignSymbol != ProFileOption.AssignType.AT_Function) { sw.Write(option.Name); switch (option.AssignSymbol) { case ProFileOption.AssignType.AT_Equals: sw.Write(" = "); break; case ProFileOption.AssignType.AT_MinusEquals: sw.Write(" -= "); break; case ProFileOption.AssignType.AT_PlusEquals: sw.Write(" += "); break; } for (var i = 0; i < option.List.Count - 1; i++) { sw.Write(option.List[i] + option.NewOption); } sw.Write(option.List[option.List.Count - 1] + sw.NewLine); } else { for (var i = 0; i < option.List.Count; i++) { sw.WriteLine(option.Name + "(" + option.List[i] + ")"); } } }
private static void AddPreprocessorDefinitions(ProFileOption option, string preprocessorDefinitions) { if (preprocessorDefinitions == null) { return; } var excludeList = "UNICODE WIN32 NDEBUG QDESIGNER_EXPORT_WIDGETS "; excludeList += "QT_THREAD_SUPPORT QT_PLUGIN QT_NO_DEBUG QT_CORE_LIB QT_GUI_LIB"; foreach (var define in preprocessorDefinitions.Split(';', ',')) { if (excludeList.IndexOf(define, StringComparison.OrdinalIgnoreCase) == -1) { option.List.Add(define); } } }
private static void AddModules(QtProject qtPrj, ProFileOption optionQT, ProFileOption optionCONFIG) { ThreadHelper.ThrowIfNotOnUIThread(); foreach (var module in QtModules.Instance.GetAvailableModules()) { if (!qtPrj.HasModule(module.Id)) { continue; } if (module.proVarQT != null) { optionQT.List.Add(module.proVarQT); } if (module.proVarCONFIG != null) { optionCONFIG.List.Add(module.proVarCONFIG); } } }
private void WriteProSolution(ProSolution prosln, bool openFile) { ThreadHelper.ThrowIfNotOnUIThread(); var sln = prosln.ProjectSolution; if (string.IsNullOrEmpty(sln.FileName)) { return; } var fi = new FileInfo(sln.FullName); var slnDir = fi.Directory; var createSlnFile = false; if ((slnDir != null) && (prosln.ProFiles.Count > 1)) { if (MessageBox.Show(SR.GetString("ExportProject_SolutionProFileBuildIn", slnDir.FullName), SR.GetString("ExportSolution"), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { createSlnFile = true; } } if (createSlnFile) { StreamWriter sw; var slnName = HelperFunctions.RemoveFileNameExtension(fi); var slnFileName = slnDir.FullName + "\\" + slnName + ".pro"; if (File.Exists(slnFileName)) { if (MessageBox.Show(SR.GetString("ExportProject_ExistsOverwriteQuestion", slnFileName), SR.GetString("ExportSolution"), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) { return; } } try { sw = new StreamWriter(File.Create(slnFileName)); } catch (Exception e) { Messages.DisplayErrorMessage(e); return; } var content = new ProFileContent(null); var option = new ProFileOption("TEMPLATE"); option.NewOption = null; // just one option... option.AssignSymbol = ProFileOption.AssignType.AT_Equals; content.Options.Add(option); option.List.Add("subdirs"); option = new ProFileOption("SUBDIRS"); option.ShortComment = "#Projects"; content.Options.Add(option); string proFullName, relativePath; char[] trimChars = { '\\' }; foreach (var profile in prosln.ProFiles) { var fiProject = new FileInfo(profile.Project.ProjectFile); var projectBaseName = HelperFunctions.RemoveFileNameExtension(fiProject); proFullName = profile.Project.ProjectDirectory + projectBaseName + ".pro"; relativePath = HelperFunctions.GetRelativePath(slnDir.FullName, proFullName); relativePath = relativePath.TrimEnd(trimChars); relativePath = HelperFunctions.ChangePathFormat(relativePath.Remove(0, 2)); option.List.Add(relativePath); } using (sw) { sw.WriteLine(Resources.exportSolutionHeader); for (var i = 0; i < content.Options.Count; i++) { WriteProFileOption(sw, content.Options[i]); } } if (openFile) { dteObject.OpenFile(Constants.vsViewKindTextView, slnFileName).Activate(); } } }
private static ProFileContent CreatePriFileContent(Project project, string priFileDirectory) { ThreadHelper.ThrowIfNotOnUIThread(); ProFileOption option; var qtPro = QtProject.Create(project); var content = new ProFileContent(qtPro.VCProject); var hasSpaces = false; // add the header files option = new ProFileOption("HEADERS"); option.ShortComment = "Header files"; option.IncludeComment = false; content.Options.Add(option); option.List.AddRange(HelperFunctions.GetProjectFiles(project, FilesToList.FL_HFiles)); MakeFilesRelativePath(qtPro.VCProject, option.List, priFileDirectory); hasSpaces |= ContainsFilesWithSpaces(option.List); // add the source files option = new ProFileOption("SOURCES"); option.ShortComment = "Source files"; option.IncludeComment = false; content.Options.Add(option); option.List.AddRange(HelperFunctions.GetProjectFiles(project, FilesToList.FL_CppFiles)); MakeFilesRelativePath(qtPro.VCProject, option.List, priFileDirectory); hasSpaces |= ContainsFilesWithSpaces(option.List); // add the form files option = new ProFileOption("FORMS"); option.ShortComment = "Forms"; option.IncludeComment = false; content.Options.Add(option); option.List.AddRange(HelperFunctions.GetProjectFiles(project, FilesToList.FL_UiFiles)); MakeFilesRelativePath(qtPro.VCProject, option.List, priFileDirectory); hasSpaces |= ContainsFilesWithSpaces(option.List); // add the translation files option = new ProFileOption("TRANSLATIONS"); option.Comment = Resources.ec_Translations; option.ShortComment = "Translation file(s)"; option.IncludeComment = false; option.List.AddRange(HelperFunctions.GetProjectFiles(project, FilesToList.FL_Translation)); MakeFilesRelativePath(qtPro.VCProject, option.List, priFileDirectory); hasSpaces |= ContainsFilesWithSpaces(option.List); content.Options.Add(option); // add the resource files option = new ProFileOption("RESOURCES"); option.Comment = Resources.ec_Resources; option.ShortComment = "Resource file(s)"; option.IncludeComment = false; content.Options.Add(option); foreach (var resFile in qtPro.GetResourceFiles()) { option.List.Add(resFile.RelativePath.Replace('\\', '/')); } if (hasSpaces) { Messages.DisplayWarningMessage(SR.GetString("ExportProject_PriFileContainsSpaces")); } return(content); }
private static ProFileContent CreateProFileContent(Project project) { ThreadHelper.ThrowIfNotOnUIThread(); ProFileOption option; var qtPro = QtProject.Create(project); var content = new ProFileContent(qtPro.VCProject); // hack to get active config var activeConfig = project.ConfigurationManager.ActiveConfiguration.ConfigurationName; var activePlatform = project.ConfigurationManager.ActiveConfiguration.PlatformName; var config = (VCConfiguration)((IVCCollection)qtPro.VCProject.Configurations).Item(activeConfig); var compiler = CompilerToolWrapper.Create(config); var linker = (VCLinkerTool)((IVCCollection)config.Tools).Item("VCLinkerTool"); var libTool = (VCLibrarianTool)((IVCCollection)config.Tools).Item("VCLibrarianTool"); var outPut = config.PrimaryOutput; var fi = new FileInfo(outPut); var destdir = HelperFunctions.GetRelativePath(qtPro.VCProject.ProjectDirectory, fi.DirectoryName); destdir = HelperFunctions.ChangePathFormat(destdir); var target = qtPro.VCProject.Name; option = new ProFileOption("TEMPLATE"); option.Comment = Resources.ec_Template; option.ShortComment = "Template"; option.NewOption = null; // just one option... option.AssignSymbol = ProFileOption.AssignType.AT_Equals; content.Options.Add(option); if (config.ConfigurationType == ConfigurationTypes.typeApplication) { option.List.Add("app"); } else { option.List.Add("lib"); } option = new ProFileOption("TARGET"); option.Comment = Resources.ec_Target; option.ShortComment = "Target Name"; option.NewOption = null; // just one option... option.AssignSymbol = ProFileOption.AssignType.AT_Equals; content.Options.Add(option); option.List.Add(target); option = new ProFileOption("DESTDIR"); option.Comment = Resources.ec_DestDir; option.ShortComment = "Destination Directory"; option.NewOption = null; // just one option... option.AssignSymbol = ProFileOption.AssignType.AT_Equals; content.Options.Add(option); option.List.Add(destdir); // add the qt option option = new ProFileOption("QT"); var optionQT = option; option.Comment = Resources.ec_Qt; option.ShortComment = "Qt Options"; option.NewOption = " "; // just space between the options... content.Options.Add(option); // add the config option option = new ProFileOption("CONFIG"); var optionCONFIG = option; option.Comment = Resources.ec_Config; option.ShortComment = "Config Options"; option.NewOption = " "; // just space between the options... content.Options.Add(option); AddModules(qtPro, optionQT, optionCONFIG); if (config.ConfigurationType == ConfigurationTypes.typeStaticLibrary) { option.List.Add("staticlib"); } if (linker != null) { var generateDebugInformation = (linker is IVCRulePropertyStorage linkerRule) ? linkerRule.GetUnevaluatedPropertyValue("GenerateDebugInformation") : null; if (generateDebugInformation != "false") { option.List.Add("debug"); } else { option.List.Add("release"); } if (linker.SubSystem == subSystemOption.subSystemConsole) { option.List.Add("console"); } if (linker.AdditionalDependencies != null) { if (linker.AdditionalDependencies.IndexOf("QAxServer", StringComparison.Ordinal) > -1) { option.List.Add("qaxserver"); } else if (linker.AdditionalDependencies.IndexOf("QAxContainer", StringComparison.Ordinal) > -1) { option.List.Add("qaxcontainer"); } else if (linker.AdditionalDependencies.IndexOf("QtHelp", StringComparison.Ordinal) > -1) { option.List.Add("help"); } } } if (qtPro.IsDesignerPluginProject()) { option.List.Add("designer"); option.List.Add("plugin"); } // add defines option = new ProFileOption("DEFINES"); option.Comment = Resources.ec_Defines; option.ShortComment = "Defines"; option.NewOption = " "; option.AssignSymbol = ProFileOption.AssignType.AT_PlusEquals; content.Options.Add(option); AddPreprocessorDefinitions(option, compiler.GetPreprocessorDefinitions()); // add the include path option option = new ProFileOption("INCLUDEPATH"); option.Comment = Resources.ec_IncludePath; option.ShortComment = "Include Path"; content.Options.Add(option); AddIncludePaths(project, option, compiler.GetAdditionalIncludeDirectories()); option = new ProFileOption("LIBS"); option.Comment = Resources.ec_Libs; option.ShortComment = "Additional Libraries"; content.Options.Add(option); if (linker != null) { AddLibraries(project, option, linker.AdditionalLibraryDirectories, linker.AdditionalDependencies); } else if (libTool != null) { AddLibraries(project, option, libTool.AdditionalLibraryDirectories, libTool.AdditionalDependencies); } option = new ProFileOption("PRECOMPILED_HEADER"); option.Comment = Resources.ec_PrecompiledHeader; option.ShortComment = "Using Precompiled Headers"; option.AssignSymbol = ProFileOption.AssignType.AT_Equals; content.Options.Add(option); if (qtPro.UsesPrecompiledHeaders()) { option.List.Add(compiler.GetPrecompiledHeaderThrough()); } // add the depend path option option = new ProFileOption("DEPENDPATH"); option.Comment = Resources.ec_DependPath; option.ShortComment = "Depend Path"; content.Options.Add(option); option.List.Add("."); var mocDir = QtVSIPSettings.GetMocDirectory(project, activeConfig.ToLower(), activePlatform.ToLower()); mocDir = mocDir.Replace('\\', '/'); option = new ProFileOption("MOC_DIR"); option.Comment = Resources.ec_MocDir; option.ShortComment = "Moc Directory"; option.NewOption = null; // just one option... content.Options.Add(option); option.List.Add(mocDir); option = new ProFileOption("OBJECTS_DIR"); option.Comment = Resources.ec_ObjDir; option.ShortComment = "Objects Directory"; option.NewOption = null; // just one option... content.Options.Add(option); option.List.Add(config.ConfigurationName.ToLower()); var uiDir = QtVSIPSettings.GetUicDirectory(project); uiDir = uiDir.Replace('\\', '/'); option = new ProFileOption("UI_DIR"); option.Comment = Resources.ec_UiDir; option.ShortComment = "UI Directory"; option.NewOption = null; // just one option... content.Options.Add(option); option.List.Add(uiDir); var rccDir = QtVSIPSettings.GetRccDirectory(project); rccDir = rccDir.Replace('\\', '/'); option = new ProFileOption("RCC_DIR"); option.Comment = Resources.ec_RccDir; option.ShortComment = "RCC Directory"; option.NewOption = null; // just one option... content.Options.Add(option); option.List.Add(rccDir); // add the include path option option = new ProFileOption("include"); option.Comment = Resources.ec_Include; option.ShortComment = "Include file(s)"; option.IncludeComment = false; // print the comment in the output file option.AssignSymbol = ProFileOption.AssignType.AT_Function; content.Options.Add(option); // add the translation files option = new ProFileOption("TRANSLATIONS"); option.Comment = Resources.ec_Translations; option.ShortComment = "Translation files"; option.IncludeComment = false; content.Options.Add(option); option.List.AddRange(HelperFunctions.GetProjectFiles(project, FilesToList.FL_Translation)); // add the rc file if (File.Exists(qtPro.VCProject.ProjectDirectory + "\\" + project.Name + ".rc")) { option = new ProFileOption("win32:RC_FILE"); option.Comment = Resources.ec_rcFile; option.ShortComment = "Windows resource file"; option.IncludeComment = false; option.AssignSymbol = ProFileOption.AssignType.AT_Equals; content.Options.Add(option); option.List.Add(project.Name + ".rc"); } if (qtPro.IsDesignerPluginProject()) { option = new ProFileOption("target.path"); option.ShortComment = "Install the plugin in the designer plugins directory."; option.IncludeComment = true; option.AssignSymbol = ProFileOption.AssignType.AT_Equals; option.List.Add("$$[QT_INSTALL_PLUGINS]/designer"); content.Options.Add(option); option = new ProFileOption("INSTALLS"); option.IncludeComment = false; option.AssignSymbol = ProFileOption.AssignType.AT_PlusEquals; option.List.Add("target"); content.Options.Add(option); } return(content); }
private static void AddIncludePaths(Project project, ProFileOption option, string includePaths) { ThreadHelper.ThrowIfNotOnUIThread(); if (QtProject.GetFormatVersion(project) >= Resources.qtMinFormatVersion_ClProperties) { return; } if (includePaths == null) { return; } var versionManager = QtVersionManager.The(); var qtDir = versionManager.GetInstallPath(project); if (qtDir == null) { qtDir = Environment.GetEnvironmentVariable("QTDIR"); } if (qtDir == null) { qtDir = ""; } qtDir = HelperFunctions.NormalizeRelativeFilePath(qtDir); foreach (var s in includePaths.Split(';', ',')) { var d = HelperFunctions.NormalizeRelativeFilePath(s); if (!d.StartsWith("$(qtdir)\\include", StringComparison.OrdinalIgnoreCase) && !d.StartsWith(qtDir + "\\include", StringComparison.OrdinalIgnoreCase) && !d.EndsWith("win32-msvc2005", StringComparison.OrdinalIgnoreCase)) { if (project.ConfigurationManager.ActiveConfiguration.Object is VCConfiguration vcConfig) { HelperFunctions.ExpandString(ref d, vcConfig); } if (HelperFunctions.IsAbsoluteFilePath(d)) { d = HelperFunctions.GetRelativePath(project.FullName, d); } if (!HelperFunctions.IsAbsoluteFilePath(d)) { option.List.Add(HelperFunctions.ChangePathFormat(d)); } } } }