1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 20:42:21 +02:00

Fixed dep-of-dep checks

This commit is contained in:
Brian Fiete 2020-05-12 06:44:09 -07:00
parent 962ebba6e9
commit 0a7e0e01e6
3 changed files with 83 additions and 81 deletions

View file

@ -58,6 +58,9 @@ namespace IDE
if (trigger == .Never) if (trigger == .Never)
return .NoCommands; return .NoCommands;
List<Project> depProjectList = scope .();
gApp.GetDependentProjectList(project, depProjectList);
if ((trigger == .IfFilesChanged) && (!project.mForceCustomCommands)) if ((trigger == .IfFilesChanged) && (!project.mForceCustomCommands))
{ {
int64 highestDateTime = 0; int64 highestDateTime = 0;
@ -66,7 +69,7 @@ namespace IDE
bool forceRebuild = false; bool forceRebuild = false;
for (var depName in project.mDependencies) for (var depName in depProjectList)
{ {
var depProject = gApp.mWorkspace.FindProject(depName.mProjectName); var depProject = gApp.mWorkspace.FindProject(depName.mProjectName);
if (depProject != null) if (depProject != null)
@ -341,46 +344,36 @@ namespace IDE
gApp.GetDependentProjectList(project, depProjectList); gApp.GetDependentProjectList(project, depProjectList);
if (depProjectList.Count > 0) if (depProjectList.Count > 0)
{ {
for (var dep in project.mDependencies) for (var depProject in depProjectList)
{ {
var depProject = gApp.mWorkspace.FindProject(dep.mProjectName); /*if (depProject.mNeedsTargetRebuild)
if (depProject == null) project.mNeedsTargetRebuild = true;*/
{
gApp.OutputLine("Failed to locate dependent library: {0}", dep.mProjectName);
return false;
}
else
{
/*if (depProject.mNeedsTargetRebuild)
project.mNeedsTargetRebuild = true;*/
var depOptions = gApp.GetCurProjectOptions(depProject); var depOptions = gApp.GetCurProjectOptions(depProject);
if (depOptions.mClangObjectFiles != null) if (depOptions.mClangObjectFiles != null)
{ {
var argBuilder = scope IDEApp.ArgBuilder(linkLine, true); var argBuilder = scope IDEApp.ArgBuilder(linkLine, true);
for (var fileName in depOptions.mClangObjectFiles) for (var fileName in depOptions.mClangObjectFiles)
{ {
//AppendWithOptionalQuotes(linkLine, fileName); //AppendWithOptionalQuotes(linkLine, fileName);
argBuilder.AddFileName(fileName); argBuilder.AddFileName(fileName);
argBuilder.AddSep(); argBuilder.AddSep();
} }
} }
/*String depLibTargetPath = scope String();
ResolveConfigString(depProject, depOptions, "$(TargetPath)", error, depLibTargetPath);
IDEUtils.FixFilePath(depLibTargetPath);
/*String depLibTargetPath = scope String(); String depDir = scope String();
ResolveConfigString(depProject, depOptions, "$(TargetPath)", error, depLibTargetPath); Path.GetDirectoryName(depLibTargetPath, depDir);
IDEUtils.FixFilePath(depLibTargetPath); String depFileName = scope String();
Path.GetFileNameWithoutExtension(depLibTargetPath, depFileName);
String depDir = scope String(); AppendWithOptionalQuotes(linkLine, depLibTargetPath);
Path.GetDirectoryName(depLibTargetPath, depDir); linkLine.Append(" ");*/
String depFileName = scope String();
Path.GetFileNameWithoutExtension(depLibTargetPath, depFileName);
AppendWithOptionalQuotes(linkLine, depLibTargetPath);
linkLine.Append(" ");*/
}
} }
} }
@ -645,54 +638,45 @@ namespace IDE
gApp.GetDependentProjectList(project, depProjectList); gApp.GetDependentProjectList(project, depProjectList);
if (depProjectList.Count > 0) if (depProjectList.Count > 0)
{ {
for (var dep in project.mDependencies) for (var depProject in depProjectList)
{ {
var depProject = gApp.mWorkspace.FindProject(dep.mProjectName); var depOptions = gApp.GetCurProjectOptions(depProject);
if (depProject == null) if (depOptions != null)
{ {
gApp.OutputLine("Failed to locate dependent library: {0}", dep.mProjectName); if (depOptions.mClangObjectFiles != null)
return false; {
} var argBuilder = scope IDEApp.ArgBuilder(linkLine, true);
else
{
var depOptions = gApp.GetCurProjectOptions(depProject);
if (depOptions != null)
{
if (depOptions.mClangObjectFiles != null)
{
var argBuilder = scope IDEApp.ArgBuilder(linkLine, true);
for (var fileName in depOptions.mClangObjectFiles) for (var fileName in depOptions.mClangObjectFiles)
{
argBuilder.AddFileName(fileName);
argBuilder.AddSep();
}
}
}
if (depProject.mGeneralOptions.mTargetType == .BeefDynLib)
{
if (mImpLibMap.TryGetValue(depProject, var libPath))
{ {
IDEUtils.AppendWithOptionalQuotes(linkLine, libPath); argBuilder.AddFileName(fileName);
linkLine.Append(" "); argBuilder.AddSep();
} }
} }
}
if (depProject.mGeneralOptions.mTargetType == .BeefLib) if (depProject.mGeneralOptions.mTargetType == .BeefDynLib)
{
if (mImpLibMap.TryGetValue(depProject, var libPath))
{ {
let depProjectOptions = gApp.GetCurProjectOptions(depProject); IDEUtils.AppendWithOptionalQuotes(linkLine, libPath);
var linkFlags = scope String(); linkLine.Append(" ");
gApp.ResolveConfigString(gApp.mPlatformName, workspaceOptions, depProject, depProjectOptions, depProjectOptions.mBuildOptions.mOtherLinkFlags, "link flags", linkFlags);
if (!linkFlags.IsWhiteSpace)
linkLine.Append(linkFlags, " ");
for (let libPath in depProjectOptions.mBuildOptions.mLibPaths)
AddLibPath(libPath, depProject, depProjectOptions);
for (let depPath in depProjectOptions.mBuildOptions.mLinkDependencies)
AddDepPath(depPath, depProject, depProjectOptions);
} }
} }
if (depProject.mGeneralOptions.mTargetType == .BeefLib)
{
let depProjectOptions = gApp.GetCurProjectOptions(depProject);
var linkFlags = scope String();
gApp.ResolveConfigString(gApp.mPlatformName, workspaceOptions, depProject, depProjectOptions, depProjectOptions.mBuildOptions.mOtherLinkFlags, "link flags", linkFlags);
if (!linkFlags.IsWhiteSpace)
linkLine.Append(linkFlags, " ");
for (let libPath in depProjectOptions.mBuildOptions.mLibPaths)
AddLibPath(libPath, depProject, depProjectOptions);
for (let depPath in depProjectOptions.mBuildOptions.mLinkDependencies)
AddDepPath(depPath, depProject, depProjectOptions);
}
} }
} }

View file

@ -2217,12 +2217,25 @@ namespace IDE
public bool HasDependency(String projectName) public bool HasDependency(String projectName)
{ {
for (var dependency in mDependencies) HashSet<Project> checkedProject = scope .();
{
if (dependency.mProjectName == projectName) bool CheckDependency(Project project)
return true; {
} if (!checkedProject.Add(project))
return false; return false;
for (var dependency in project.mDependencies)
{
if (dependency.mProjectName == projectName)
return true;
let depProject = gApp.mWorkspace.FindProject(dependency.mProjectName);
if ((depProject != null) && (CheckDependency(depProject)))
return true;
}
return false;
}
return CheckDependency(this);
} }
public void SetupDefault(Options options, String configName, String platformName) public void SetupDefault(Options options, String configName, String platformName)

View file

@ -1242,8 +1242,13 @@ namespace IDE
if (depProject == null) if (depProject == null)
return; return;
List<Project> depProjectList = scope .();
gApp.GetDependentProjectList(depProject, depProjectList);
for (let checkProject in gApp.mWorkspace.mProjects) for (let checkProject in gApp.mWorkspace.mProjects)
{ {
if (checkProject.mGeneralOptions.mTargetType == .BeefLib)
continue;
if (checkProject.HasDependency(depProject.mProjectName)) if (checkProject.HasDependency(depProject.mProjectName))
{ {
List<String> targetPaths = scope .(); List<String> targetPaths = scope .();