5770 has lost build dependencies functionality
-
- CodeLite Enthusiast
- Posts: 15
- Joined: Wed May 12, 2010 12:15 am
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: 5770 has lost build dependencies functionality
Okay ... I have narrowed down the problem.
Make does not like having the embedded quotes in the name.
If I manually went in and changed WorkspacePath in the makefile
old definition:
WorkspacePath := "/home/user/Sample Folder"
new definition:
WorkspacePath :=/home/user/Sample\ Folder
Make does not like having the embedded quotes in the name.
If I manually went in and changed WorkspacePath in the makefile
old definition:
WorkspacePath := "/home/user/Sample Folder"
new definition:
WorkspacePath :=/home/user/Sample\ Folder
-
- CodeLite Enthusiast
- Posts: 15
- Joined: Wed May 12, 2010 12:15 am
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: 5770 has lost build dependencies functionality
Here are some changes that I made that fixes the problem:
First I added a new function BuilderGnuMake::EscapeSpecialChars then I massaged createConfigsVariables to call it.
modified
Oh ... I also changed the objectsFileName to be in the intermediate directory.
First I added a new function BuilderGnuMake::EscapeSpecialChars then I massaged createConfigsVariables to call it.
Code: Select all
wxString BuilderGnuMake::EscapeSpecialChars(const wxString& sx) const
{
char* sStart = new char[sx.Length() * 2];
char* s = sStart;
const wxChar* p = sx.c_str();
const wxChar* pEnd = p + sx.Length();
while ( p < pEnd )
{
if ( '$' == *p )
{
*s++ = *p; // make it $$
*s++ = *p++;
}
else if ( 0 < strchr("%?*[~#\\\"", *p ))
{
*s++ = wxChar('\\');
*s++ = *p++;
}
else
{
*s++ = *p++;
}
}
*s = '\0';
return wxString::From8BitData( sStart );
}
Code: Select all
void BuilderGnuMake::CreateConfigsVariables(ProjectPtr proj, BuildConfigPtr bldConf, wxString &text)
{
wxString name = bldConf->GetName();
name = NormalizeConfigName(name);
wxString cmpType = bldConf->GetCompilerType();
CompilerPtr cmp = BuildSettingsConfigST::Get()->GetCompiler(cmpType);
wxString objectsFileName(wxT("$(IntermediateDirectory)"));
objectsFileName << PATH_SEP << proj->GetName() << wxT(".txt");
wxString tmp;
tmp = WorkspaceST::Get()->GetWorkspaceFileName().GetPath();
wxString workspacePath = EscapeSpecialChars( tmp );
tmp = proj->GetFileName().GetPath();
wxString projectPath = EscapeSpecialChars( tmp );
text << wxT("## ") << name << wxT("\n");
wxString outputFile = bldConf->GetOutputFileName();
if(OS_WINDOWS && (bldConf->GetProjectType() == Project::EXECUTABLE || bldConf->GetProjectType().IsEmpty())) {
outputFile.Trim().Trim(false);
//if(outputFile.EndsWith(wxT(".exe")) == false) {
// outputFile.Append(wxT(".exe"));
//}
}
// Expand the build macros into the generated makefile
text << wxT("ProjectName :=") << proj->GetName() << wxT("\n");
text << wxT("ConfigurationName :=") << name << wxT("\n");
text << wxT("WorkspacePath := ") << workspacePath << wxT("\n");
text << wxT("ProjectPath := ") << projectPath << wxT("\n");
text << wxT("IntermediateDirectory :=") << bldConf->GetIntermediateDirectory() << wxT("\n");
text << wxT("OutDir := $(IntermediateDirectory)\n");
text << wxT("CurrentFileName :=\n"); // TODO:: Need implementation
text << wxT("CurrentFilePath :=\n"); // TODO:: Need implementation
text << wxT("CurrentFileFullPath :=\n"); // TODO:: Need implementation
text << wxT("User :=") << wxGetUserName() << wxT("\n");
text << wxT("Date :=") << wxDateTime::Now().FormatDate() << wxT("\n");
text << wxT("CodeLitePath :=\"") << WorkspaceST::Get()->GetStartupDir() << wxT("\"\n");
text << wxT("LinkerName :=") << cmp->GetTool(wxT("LinkerName")) << wxT("\n");
text << wxT("SharedObjectLinkerName :=") << cmp->GetTool(wxT("SharedObjectLinkerName")) << wxT("\n");
text << wxT("ObjectSuffix :=") << cmp->GetObjectSuffix() << wxT("\n");
text << wxT("DependSuffix :=") << cmp->GetDependSuffix() << wxT("\n");
text << wxT("PreprocessSuffix :=") << cmp->GetPreprocessSuffix() << wxT("\n");
text << wxT("DebugSwitch :=") << cmp->GetSwitch(wxT("Debug")) << wxT("\n");
text << wxT("IncludeSwitch :=") << cmp->GetSwitch(wxT("Include")) << wxT("\n");
text << wxT("LibrarySwitch :=") << cmp->GetSwitch(wxT("Library")) << wxT("\n");
text << wxT("OutputSwitch :=") << cmp->GetSwitch(wxT("Output")) << wxT("\n");
text << wxT("LibraryPathSwitch :=") << cmp->GetSwitch(wxT("LibraryPath")) << wxT("\n");
text << wxT("PreprocessorSwitch :=") << cmp->GetSwitch(wxT("Preprocessor")) << wxT("\n");
text << wxT("SourceSwitch :=") << cmp->GetSwitch(wxT("Source")) << wxT("\n");
text << wxT("OutputFile :=") << outputFile << wxT("\n");
text << wxT("Preprocessors :=") << ParsePreprocessor(bldConf->GetPreprocessor()) << wxT("\n");
text << wxT("ObjectSwitch :=") << cmp->GetSwitch(wxT("Object")) << wxT("\n");
text << wxT("ArchiveOutputSwitch :=") << cmp->GetSwitch(wxT("ArchiveOutput")) << wxT("\n");
text << wxT("PreprocessOnlySwitch :=") << cmp->GetSwitch(wxT("PreprocessOnly")) << wxT("\n");
text << wxT("ObjectsFileList :=\"") << objectsFileName << wxT("\"\n");
text << wxT("PCHCompileFlags :=") << bldConf->GetPchCompileFlags() << wxT("\n");
if (OS_WINDOWS) {
text << wxT("MakeDirCommand :=") << wxT("makedir") << wxT("\n");
} else {
text << wxT("MakeDirCommand :=") << wxT("mkdir -p") << wxT("\n");
}
wxString buildOpts = bldConf->GetCompileOptions();
buildOpts.Replace(wxT(";"), wxT(" "));
wxString cBuildOpts = bldConf->GetCCompileOptions();
cBuildOpts.Replace(wxT(";"), wxT(" "));
// Let the plugins add their content here
wxCommandEvent e(wxEVT_GET_ADDITIONAL_COMPILEFLAGS);
EventNotifier::Get()->ProcessEvent(e);
wxString additionalCompileFlags = e.GetString();
if(additionalCompileFlags.IsEmpty() == false) {
buildOpts << wxT(" ") << additionalCompileFlags;
cBuildOpts << wxT(" ") << additionalCompileFlags;
}
//only if resource compiler required, evaluate the resource variables
if (bldConf->IsResCompilerRequired()) {
wxString rcBuildOpts = bldConf->GetResCompileOptions();
rcBuildOpts.Replace(wxT(";"), wxT(" "));
text << wxT("RcCmpOptions :=") << rcBuildOpts << wxT("\n");
text << wxT("RcCompilerName :=") << cmp->GetTool(wxT("ResourceCompiler")) << wxT("\n");
}
wxString linkOpt = bldConf->GetLinkOptions();
linkOpt.Replace(wxT(";"), wxT(" "));
//link options are kept with semi-colons, strip them
text << wxT("LinkOptions := ") << linkOpt << wxT("\n");
// add the global include path followed by the project include path
wxString pchFile;
// If the PCH is required to be in the command line, add it here
// otherwise, we just make sure it is generated and the compiler will pick it by itself
if(bldConf->GetPchInCommandLine()) {
pchFile = bldConf->GetPrecompiledHeader();
pchFile.Trim().Trim(false);
if(pchFile.IsEmpty() == false) {
pchFile.Prepend(wxT(" -include ")).Append(wxT(" "));
}
}
wxString libraries = bldConf->GetLibraries();
wxArrayString libsArr = ::wxStringTokenize(libraries, wxT(";"), wxTOKEN_STRTOK);
libraries.Clear();
libraries << wxT(" ");
for(size_t i=0; i<libsArr.GetCount(); i++) {
libsArr.Item(i).Trim().Trim(false);
libraries << wxT("\"") << libsArr.Item(i) << wxT("\" ");
}
text << wxT("IncludePath := ") << ParseIncludePath(cmp->GetGlobalIncludePath(), proj->GetName(), bldConf->GetName()) << wxT(" ") << ParseIncludePath(bldConf->GetIncludePath(), proj->GetName(), bldConf->GetName()) << wxT("\n");
text << wxT("IncludePCH := ") << pchFile << wxT("\n");
text << wxT("RcIncludePath := ") << ParseIncludePath(bldConf->GetResCmpIncludePath(), proj->GetName(), bldConf->GetName()) << wxT("\n");
text << wxT("Libs := ") << ParseLibs(bldConf->GetLibraries()) << wxT("\n");
text << wxT("ArLibs := ") << libraries << wxT("\n");
// add the global library path followed by the project library path
text << wxT("LibPath :=") << ParseLibPath(cmp->GetGlobalLibPath(), proj->GetName(), bldConf->GetName()) << wxT(" ") << ParseLibPath(bldConf->GetLibPath(), proj->GetName(), bldConf->GetName()) << wxT("\n");
text << wxT("\n");
text << wxT("##\n");
text << wxT("## Common variables\n");
text << wxT("## AR, CXX, CC, CXXFLAGS and CFLAGS can be overriden using an environment variables\n");
text << wxT("##\n");
text << wxT("AR := ") << cmp->GetTool(wxT("AR")) << wxT("\n");
text << wxT("CXX := ") << cmp->GetTool(wxT("CXX")) << wxT("\n");
text << wxT("CC := ") << cmp->GetTool(wxT("CC")) << wxT("\n");
text << wxT("CXXFLAGS := ") << buildOpts << wxT(" $(Preprocessors)") << wxT("\n");
text << wxT("CFLAGS := ") << cBuildOpts << wxT(" $(Preprocessors)") << wxT("\n");
text << wxT("\n\n");
}
-
- CodeLite Enthusiast
- Posts: 15
- Joined: Wed May 12, 2010 12:15 am
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: 5770 has lost build dependencies functionality
oops I had a leak in my new func
Code: Select all
wxString BuilderGnuMake::EscapeSpecialChars(const wxString& sx) const
{
char* sStart = new char[sx.Length() * 2];
char* s = sStart;
const wxChar* p = sx.c_str();
const wxChar* pEnd = p + sx.Length();
while ( p < pEnd )
{
if ( '$' == *p )
{
*s++ = *p; // make it $$
*s++ = *p++;
}
else if ( 0 < strchr("%?*[~#\\\"", *p ))
{
*s++ = wxChar('\\');
*s++ = *p++;
}
else
{
*s++ = *p++;
}
}
*s = '\0';
wxString out = wxString::From8BitData( sStart );
delete [] sStart;
return out;
}
- eranif
- CodeLite Plugin
- Posts: 6375
- Joined: Wed Feb 06, 2008 9:29 pm
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: 5770 has lost build dependencies functionality
Can you send it as patch?
It will be alot easier for me to apply it
Eran
It will be alot easier for me to apply it
Eran
Make sure you have read the HOW TO POST thread
-
- CodeLite Enthusiast
- Posts: 15
- Joined: Wed May 12, 2010 12:15 am
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: 5770 has lost build dependencies functionality
Where do I read about how to post as patch?
- eranif
- CodeLite Plugin
- Posts: 6375
- Joined: Wed Feb 06, 2008 9:29 pm
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: 5770 has lost build dependencies functionality
Basically, if you use SVN version of codelite:
From within codelite's root source directory:
If you use stable tarball sources (remember to mention which revision did you use):
Use the 'diff' utility:
Eran
From within codelite's root source directory:
Code: Select all
svn diff > my.patch
Use the 'diff' utility:
Code: Select all
diff -uNr path-orig path-mine > my.patch
Make sure you have read the HOW TO POST thread
-
- CodeLite Enthusiast
- Posts: 15
- Joined: Wed May 12, 2010 12:15 am
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: 5770 has lost build dependencies functionality
I'm submitting a patch that is a significant change to the generated makefile. IMHO it is much cleaner and the makefile can be easily used outside of CodeLite (for those people that refuse to use IDEs). It also fixes the problems of dependencies not correctly updating. The one thing that I don't have working right now is Precompiled Headers. But I can't get them to work on my machine period!
By the way, I couldn't figure out in the code how to invoke "Preprocess-Only". I have the makefile setup so it can generate the preprocess file but there is now way to trigger it.
Oh! its worth mentioning that this has only been tested on Linux. I don't have a Windows installation to try it on.
Give the new makefiles a spin and let me know if you want to add it.
-- humbly John
By the way, I couldn't figure out in the code how to invoke "Preprocess-Only". I have the makefile setup so it can generate the preprocess file but there is now way to trigger it.
Oh! its worth mentioning that this has only been tested on Linux. I don't have a Windows installation to try it on.
Give the new makefiles a spin and let me know if you want to add it.
-- humbly John
You do not have the required permissions to view the files attached to this post.
-
- CodeLite Enthusiast
- Posts: 15
- Joined: Wed May 12, 2010 12:15 am
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: 5770 has lost build dependencies functionality
I have cleaned up a few things and gotten precompiled headers to work.
This patch is against 4.1.5770
-- John
This patch is against 4.1.5770
-- John
You do not have the required permissions to view the files attached to this post.
- eranif
- CodeLite Plugin
- Posts: 6375
- Joined: Wed Feb 06, 2008 9:29 pm
- Genuine User: Yes
- IDE Question: C++
- Contact:
Re: 5770 has lost build dependencies functionality
Thanks for the patch, I will give it a try tomorrowgrizzie17 wrote:I have cleaned up a few things and gotten precompiled headers to work.
This patch is against 4.1.5770
-- John
Eran
Make sure you have read the HOW TO POST thread