BuildConfigPtr ProjectSettings::GetBuildConfiguration(const wxString& configName, bool merge) const
{
    wxString confName = configName;
    if(confName.IsEmpty()) {
        confName = wxT("Debug");
    }

    std::map<wxString, BuildConfigPtr>::const_iterator iter = m_configs.find(confName);
    if(iter == m_configs.end()) {
        return NULL;
    }
    BuildConfigPtr buildConf = iter->second;
    if(!merge) {
        return buildConf;
    }

    // Need to merge configuration and global settings
    BuildConfigPtr buildConfMerged(buildConf->Clone());
    if(buildConfMerged->GetBuildCmpWithGlobalSettings() == BuildConfig::PREPEND_GLOBAL_SETTINGS) {
        buildConfMerged->SetCompileOptions(buildConf->GetCompileOptions() + wxT(";") +
                                           m_globalSettings->GetCompileOptions());
        buildConfMerged->SetCCompileOptions(buildConf->GetCCompileOptions() + wxT(";") +
                                            m_globalSettings->GetCCompileOptions());
        buildConfMerged->SetPreprocessor(buildConf->GetPreprocessor() + wxT(";") + m_globalSettings->GetPreprocessor());
        buildConfMerged->SetIncludePath(buildConf->GetIncludePath() + wxT(";") + m_globalSettings->GetIncludePath());
    } else if(buildConfMerged->GetBuildCmpWithGlobalSettings() == BuildConfig::APPEND_TO_GLOBAL_SETTINGS) {
        buildConfMerged->SetCompileOptions(m_globalSettings->GetCompileOptions() + wxT(";") +
                                           buildConf->GetCompileOptions());
        buildConfMerged->SetCCompileOptions(m_globalSettings->GetCCompileOptions() + wxT(";") +
                                            buildConf->GetCCompileOptions());
        buildConfMerged->SetPreprocessor(m_globalSettings->GetPreprocessor() + wxT(";") + buildConf->GetPreprocessor());
        buildConfMerged->SetIncludePath(m_globalSettings->GetIncludePath() + wxT(";") + buildConf->GetIncludePath());
    }
    if(buildConfMerged->GetBuildLnkWithGlobalSettings() == BuildConfig::PREPEND_GLOBAL_SETTINGS) {
        buildConfMerged->SetLinkOptions(buildConf->GetLinkOptions() + wxT(";") + m_globalSettings->GetLinkOptions());
        buildConfMerged->SetLibraries(buildConf->GetLibraries() + wxT(";") + m_globalSettings->GetLibraries());
        buildConfMerged->SetLibPath(buildConf->GetLibPath() + wxT(";") + m_globalSettings->GetLibPath());
    } else if(buildConfMerged->GetBuildLnkWithGlobalSettings() == BuildConfig::APPEND_TO_GLOBAL_SETTINGS) {
        buildConfMerged->SetLinkOptions(m_globalSettings->GetLinkOptions() + wxT(";") + buildConf->GetLinkOptions());
        buildConfMerged->SetLibraries(m_globalSettings->GetLibraries() + wxT(";") + buildConf->GetLibraries());
        buildConfMerged->SetLibPath(m_globalSettings->GetLibPath() + wxT(";") + buildConf->GetLibPath());
    }
    if(buildConfMerged->GetBuildResWithGlobalSettings() == BuildConfig::PREPEND_GLOBAL_SETTINGS) {
        buildConfMerged->SetResCmpOptions(buildConf->GetResCompileOptions() + wxT(";") +
                                          m_globalSettings->GetResCompileOptions());
        buildConfMerged->SetResCmpIncludePath(buildConf->GetResCmpIncludePath() + wxT(";") +
                                              m_globalSettings->GetResCmpIncludePath());
    } else if(buildConfMerged->GetBuildResWithGlobalSettings() == BuildConfig::APPEND_TO_GLOBAL_SETTINGS) {
        buildConfMerged->SetResCmpOptions(m_globalSettings->GetResCompileOptions() + wxT(";") +
                                          buildConf->GetResCompileOptions());
        buildConfMerged->SetResCmpIncludePath(m_globalSettings->GetResCmpIncludePath() + wxT(";") +
                                              buildConf->GetResCmpIncludePath());
    }
    return buildConfMerged;
}
void PSLinkerPage::Load(BuildConfigPtr buildConf)
{
    m_checkLinkerNeeded->SetValue( !buildConf->IsLinkerRequired() );
    SelectChoiceWithGlobalSettings(m_pgPropBehaviorWithGlobalSettings, buildConf->GetBuildLnkWithGlobalSettings());
    m_pgPropLibraries->SetValue( buildConf->GetLibraries() );
    m_pgPropLibraryPaths->SetValue( buildConf->GetLibPath() );
    m_pgPropOptions->SetValue( buildConf->GetLinkOptions() );
}