CString CGenericProcessingMachine::ConfigurationName(void) { if (PSC().VarDefined(GPM_VAR_NAME_CFG)) { return PSC().VarNamed(GPM_VAR_NAME_CFG).GetString(); } else { return DefaultConfigurationName(); } }
bool CProcessingMachine::Configure(const CString& FileName) { CGenericProcessingMachine::Configure(""/*FileName*/); if (DoShowHelp()) { DisplayHelpMessage(); return false; } if (BeVerbose()) { std::cout<<"Command line parameters:"<<std::endl; PSC().Print(std::cout); } if (PSC().VarDefined("--version")) { std::cout<<"cbp2make rev."<<REVISION_NUMBER<<std::endl; return false; } #ifdef REVISION_NUMBER if (!BeQuiet()) std::cout<<"Starting cbp2make rev."<<REVISION_NUMBER<<"..."<<std::endl; #endif m_BuildManager.Config().BeQuiet() = BeQuiet(); m_BuildManager.Config().BeVerbose() = BeVerbose(); CString cfg_name = ConfigurationName(); // Lookup configuration file // 1) if "-cfg" option is specified, use it as-is // 2) if "-cfg" option is not specified do following: // 2A) use default configuration in current directory // if it exists or "--local" option is specified. // 2B) find and/or create configuration in user's home directory, // if it is not possible, fallback to current directory. if (!PSC().VarDefined(GPM_VAR_NAME_CFG) && ((!FileExists(cfg_name) && !PSC().VarDefined("--local")) || PSC().VarDefined("--global"))) { CString cfg_path = JoinPaths(HomeDirPath(),".cbp2make"); if (!DirExists(cfg_path)) { MakeDir(cfg_path); } if (DirExists(cfg_path)) { cfg_name = JoinPaths(cfg_path,DefaultConfigurationName()); } } if (FileExists(cfg_name)) { if (!BeQuiet()) std::cout<<"Using configuration: "<<cfg_name.GetCString()<<std::endl; m_BuildManager.Config().Load(cfg_name); m_BuildManager.Config().BeQuiet() = BeQuiet(); m_BuildManager.Config().BeVerbose() = BeVerbose(); } else { if (!BeQuiet()) std::cout<<"Using default configuration."<<std::endl; m_BuildManager.Config().Platforms().AddDefault(); m_BuildManager.Config().ToolChains().AddDefault(); //do not create configuration file unless explicitly instructed to do so //m_BuildManager.Config().Save(cfg_name); } if (PSC().VarDefined("--default-options")) { m_BuildManager.Config().DefaultOptions() = PSC().VarNamed("--default-options").GetString(); } if (!m_BuildManager.Config().DefaultOptions().IsEmpty()) { PS().AddParameters(m_BuildManager.Config().DefaultOptions()); PSC().ProcessParameters(PS()); CGenericProcessingMachine::Configure(""); m_BuildManager.Config().BeQuiet() = BeQuiet(); m_BuildManager.Config().BeVerbose() = BeVerbose(); } // cache frequently used variables bool os_unix = PSC().VarDefined("-unix"); bool os_windows = PSC().VarDefined("-windows"); bool os_mac = PSC().VarDefined("-mac"); CPlatform::OS_Type os_type = CPlatform::OS_Unix; if (os_unix) os_type = CPlatform::OS_Unix; else if (os_windows) os_type = CPlatform::OS_Windows; else if (os_mac) os_type = CPlatform::OS_Mac; bool os_any = os_unix || os_windows || os_mac; // configure m_BuildManager.Config().Platforms().AddDefault(); if (PSC().VarDefined("--config")) { CString config_item_str = PSC().VarNamed("--config").GetString(); int config_item = GuessStr(config_item_str,"toolchain tool platform variable options", config_item_str,true); if (0==config_item) { CString chain_name = PSC().VarNamed("-chain").GetString(); if (PSC().VarDefined("--add")) { if (PSC().VarDefined("-chain")) { CToolChain *tc = m_BuildManager.ToolChains().Find(os_type,chain_name); if (0==tc) { tc = m_BuildManager.ToolChains().Add(os_type,chain_name); } if (0==tc) return false; ConfigureToolchain(tc); } } // add-toolchain else if (PSC().VarDefined("--remove")&&PSC().VarDefined("-chain")&&os_any) { m_BuildManager.ToolChains().Remove(os_type,chain_name); } } if (1==config_item) { CString chain_name = PSC().VarNamed("-chain").GetString(); if (PSC().VarDefined("--add")) { if (PSC().VarDefined("-chain")) { CToolChain *tc = m_BuildManager.ToolChains().Find(os_type,chain_name); if (0==tc) { tc = m_BuildManager.ToolChains().Add(os_type,chain_name); } if (0==tc) return false; if (PSC().VarDefined("-tool")&&PSC().VarDefined("-type")) { CString tool_type_str = PSC().VarNamed("-type").GetString(); int tool_type_int = GuessStr(tool_type_str,"other pp as cc rc sl dl el nl count", tool_type_str,false); CBuildTool::ToolType tool_type = (CBuildTool::ToolType)tool_type_int; CString tool_name = PSC().VarNamed("-tool").GetString(); CBuildTool *bt = tc->FindBuildToolByName(tool_name); if (0==bt) { bt = tc->CreateBuildTool(tool_type); bt->Alias() = tool_name; } if (0==bt) return false; ConfigureBuildTool(bt); } } } // add-tool else if (PSC().VarDefined("--remove")&&PSC().VarDefined("-chain")&&PSC().VarDefined("-tool")&&os_any) { CToolChain *tc = m_BuildManager.ToolChains().Find(os_type,chain_name); if (0!=tc) { return tc->RemoveToolByName(PSC().VarNamed("-tool").GetString()); } } } if (2==config_item) { if (os_any) { CPlatform *p = m_BuildManager.Platforms().Find(os_type); if (0==p) return false; ConfigurePlatform(p); } } if (3==config_item) { if (PSC().VarDefined("--add")) { CString set_name = PSC().VarNamed("-set").GetString(); if (PSC().VarDefined("-name") && PSC().VarDefined("-value")) { CString var_name = PSC().VarNamed("-name").GetString(); CGlobalVariableSet *vset = m_BuildManager.Config().GlobalVariables().Add(set_name); CGlobalVariable *var = vset->Add(var_name); if (PSC().VarDefined("-desc")) { var->Description() = PSC().VarNamed("-desc").GetString(); } if (PSC().VarDefined("-value")) { var->Add(PSC().VarNamed("-field").GetString(), PSC().VarNamed("-value").GetString()); } } } // add variable else if (PSC().VarDefined("--remove")) { CString set_name = PSC().VarNamed("-set").GetString(); if (PSC().VarDefined("-name")) { CString var_name = PSC().VarNamed("-name").GetString(); CGlobalVariableSet *vset = m_BuildManager.Config().GlobalVariables().Add(set_name); CGlobalVariable *var = vset->Add(var_name); if (PSC().VarDefined("-field")) { // if both variable and field names are defined, remove the field var->Remove(PSC().VarNamed("-field").GetString()); } else { // if variable name is defined, but field name is not, remove the variable vset->Remove(var_name); } } else { // if both variable and field names are not defined, // but set name is defined, remove the entire set if (PSC().VarDefined("-set")) { m_BuildManager.Config().GlobalVariables().Remove(set_name); } } } // remove variable } // config variable if (config_item < 0) m_BuildManager.Config().Show(); std::cout<<"Saving configuration: "<<cfg_name.GetCString()<<std::endl; m_BuildManager.Config().Save(cfg_name); return false; } // config // bool os_all = PSC().VarDefined("--all-os"); os_all = os_all || (os_unix && os_windows && os_mac); os_unix = os_unix || os_all; os_windows = os_windows || os_all; os_mac = os_mac || os_all; bool os_none = !os_all && !os_unix && !os_windows && !os_mac; if (os_none) { #ifdef OS_UNIX os_unix = true; #endif #ifdef OS_WIN os_windows = true; #endif #ifdef OS_MAC os_mac = true; #endif } if (os_unix) { CPlatform *p = m_BuildManager.Config().Platforms().Find(CPlatform::OS_Unix); if (p) p->Active() = true; } if (os_windows) { CPlatform *p = m_BuildManager.Config().Platforms().Find(CPlatform::OS_Windows); if (p) p->Active() = true; } if (os_mac) { CPlatform *p = m_BuildManager.Config().Platforms().Find(CPlatform::OS_Mac); if (p) p->Active() = true; } // { CString vset_name = PSC().VarNamed("-set").GetString(); CGlobalVariableSet *vset = m_BuildManager.Config().GlobalVariables().Find(vset_name); if (0!=vset) { vset->Active() = true; } } m_BuildManager.Config().FlatObjectNames() = PSC().VarDefined("--flat-objects"); m_BuildManager.Config().FlatObjectPaths() = PSC().VarDefined("--flat-objpath"); m_BuildManager.Config().MultilineObjects() = PSC().VarDefined("--wrap-objects"); m_BuildManager.Config().MultilineOptions() = PSC().VarDefined("--wrap-options"); m_BuildManager.Config().IncludeDependencies() = PSC().VarDefined("--with-deps"); { CString target_case_name = PSC().VarNamed("--target-case").GetString(); m_BuildManager.Config().TargetNameCase() = GuessStr(target_case_name,"keep lower upper",target_case_name,false); } { CString macros_case_name = PSC().VarNamed("--macros-case").GetString(); m_BuildManager.Config().MacroVariableCase() = GuessStr(macros_case_name,"keep lower upper",macros_case_name,false); } { CString quote_path_name = PSC().VarNamed("--quote-path").GetString(); m_BuildManager.Config().QuotePathMode() = GuessStr(quote_path_name,"auto never always",quote_path_name,false); } m_BuildManager.Config().KeepObjectDirectories() = PSC().VarDefined("--keep-objdir"); m_BuildManager.Config().KeepOutputDirectories() = PSC().VarDefined("--keep-outdir"); { CStringList targets; ParseStr(PSC().VarNamed("-targets").GetString(),',',targets); targets.RemoveEmpty(); targets.RemoveDuplicates(); m_BuildManager.Config().Targets() = targets; } //if (BeVerbose()) PSC().Print(std::cout); return true; }