Menu

[r7]: / Plugin / environmentconfig.cpp  Maximize  Restore  History

Download this file

153 lines (130 with data), 4.9 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// copyright : (C) 2008 by Eran Ifrah
// file name : environmentconfig.cpp
//
// -------------------------------------------------------------------------
// A
// _____ _ _ _ _
// / __ \ | | | | (_) |
// | / \/ ___ __| | ___| | _| |_ ___
// | | / _ \ / _ |/ _ \ | | | __/ _ )
// | \__/\ (_) | (_| | __/ |___| | || __/
// \____/\___/ \__,_|\___\_____/_|\__\___|
//
// F i l e
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#include "wx/utils.h"
#include "wx/regex.h"
#include "wx/filename.h"
#include "environmentconfig.h"
#include "evnvarlist.h"
EnvironmentConfig* EnvironmentConfig::ms_instance = 0;
//------------------------------------------------------------------------------
EnvironmentConfig::EnvironmentConfig()
{
}
EnvironmentConfig::~EnvironmentConfig()
{
}
EnvironmentConfig* EnvironmentConfig::Instance()
{
if (ms_instance == 0) {
ms_instance = new EnvironmentConfig();
}
return ms_instance;
}
void EnvironmentConfig::Release()
{
if (ms_instance) {
delete ms_instance;
}
ms_instance = 0;
}
wxString EnvironmentConfig::GetRootName()
{
return wxT("EnvironmentVariables");
}
bool EnvironmentConfig::Load()
{
return ConfigurationToolBase::Load( wxT("config/environment_variables.xml") );
}
wxString EnvironmentConfig::ExpandVariables(const wxString &in)
{
static wxRegEx reVarPattern(wxT("\\$\\(( *)([a-zA-Z0-9_]+)( *)\\)"));
wxString result(in);
ApplyEnv(NULL);
EvnVarList vars;
ReadObject(wxT("Variables"), &vars);
StringMap variables = vars.GetVariables();
while (reVarPattern.Matches(result)) {
wxString varName = reVarPattern.GetMatch(result, 2);
wxString text = reVarPattern.GetMatch(result);
wxString replacement;
if(varName == wxT("MAKE")) {
//ignore this variable, since it is probably was passed here
//by the makefile generator
replacement = wxT("___MAKE___");
}else{
//search for workspace variable with this name
wxGetEnv(varName, &replacement);
}
result.Replace(text, replacement);
}
//restore the ___MAKE___ back to $(MAKE)
result.Replace(wxT("___MAKE___"), wxT("$(MAKE)"));
UnApplyEnv();
return result;
}
void EnvironmentConfig::ApplyEnv(StringMap *overrideMap)
{
//read the environments variables
EvnVarList vars;
ReadObject(wxT("Variables"), &vars);
StringMap variables = vars.GetVariables();
// if we have an "override map" place all the entries from the override map
// into the global map before applying the environment
if(overrideMap) {
StringMap::iterator it = overrideMap->begin();
for(; it != overrideMap->end(); it++){
variables[it->first] = it->second;
}
}
StringMap::iterator iter = variables.begin();
m_envSnapshot.clear();
for ( ; iter != variables.end(); iter++ ) {
wxString key = iter->first;
wxString val = iter->second;
//keep old value before changing it
wxString oldVal(wxEmptyString);
wxGetEnv(key, &oldVal);
m_envSnapshot[key] = oldVal;
//allow value to include itself
//so this is valid:
//PATH=$(PATH):C:\SomePath
//but note that the following is not valid: PATH=$(OtherVarName):C:\SomePath
wxString varName(wxT("$(") + key + wxT(")"));
val.Replace(varName, oldVal);
//set the new value
wxSetEnv(key, val);
}
}
void EnvironmentConfig::UnApplyEnv()
{
//loop over the old values and restore them
StringMap::iterator iter = m_envSnapshot.begin();
for ( ; iter != m_envSnapshot.end(); iter++ ) {
wxString key = iter->first;
wxString value = iter->second;
wxSetEnv(key, value);
}
m_envSnapshot.clear();
}
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.