Files
UnrealEngineUWP/Engine/Source/Programs/UnrealBuildTool/System/MakefileGenerator.cs
2014-04-02 18:09:23 -04:00

106 lines
3.2 KiB
C#

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace UnrealBuildTool
{
/// <summary>
/// Represents a folder within the master project (e.g. Visual Studio solution)
/// </summary>
public class MakefileFolder : MasterProjectFolder
{
/// <summary>
/// Constructor
/// </summary>
public MakefileFolder( ProjectFileGenerator InitOwnerProjectFileGenerator, string InitFolderName )
: base(InitOwnerProjectFileGenerator, InitFolderName)
{
}
}
public class MakefileProjectFile : ProjectFile
{
public MakefileProjectFile( string InitFilePath )
: base(InitFilePath)
{
}
}
/// <summary>
/// Makefile project file generator implementation
/// </summary>
public class MakefileGenerator : ProjectFileGenerator
{
/// File extension for project files we'll be generating (e.g. ".vcxproj")
override public string ProjectFileExtension
{
get
{
return ".mk";
}
}
protected override bool WriteMasterProjectFile( ProjectFile UBTProject )
{
bool bSuccess = true;
return bSuccess;
}
/// ProjectFileGenerator interface
//protected override bool WriteMasterProjectFile( ProjectFile UBTProject )
protected override bool WriteProjectFiles ()
{
var FileName = "Makefile"; // MasterProjectName + ".mk";
var MakefileContent = new StringBuilder();
MakefileContent.Append (
"# Makefile generated by MakefileGenerator.cs\n" +
"# *DO NOT EDIT*\n\n" +
"PLATFORM = Linux\n" +
"CONFIG = Debug\n\n" +
"TARGETS ="
);
foreach( string Target in DiscoverTargets() )
{
var Basename = Path.GetFileNameWithoutExtension(Target);
Basename = Path.GetFileNameWithoutExtension(Basename);
MakefileContent.Append( " \\\n " + Basename );
}
MakefileContent.Append( "\n\nall: $(TARGETS)\n" );
foreach( string Target in DiscoverTargets() )
{
var Basename = Path.GetFileNameWithoutExtension(Target);
Basename = Path.GetFileNameWithoutExtension(Basename);
MakefileContent.Append(String.Format("\n{0}:\n\tEngine/Build/BatchFiles/Linux/Build.sh {1} $(PLATFORM) $(CONFIG) $(ARGS)\n", Basename, Basename));
}
MakefileContent.Append( "\n.PHONY: $(TARGETS)\n" );
var FullFileName = Path.Combine( MasterProjectRelativePath, FileName );
return WriteFileIfChanged( FullFileName, MakefileContent.ToString() );
}
/// ProjectFileGenerator interface
public override MasterProjectFolder AllocateMasterProjectFolder( ProjectFileGenerator InitOwnerProjectFileGenerator, string InitFolderName )
{
return new MakefileFolder( InitOwnerProjectFileGenerator, InitFolderName );
}
/// ProjectFileGenerator interface
/// <summary>
/// Allocates a generator-specific project file object
/// </summary>
/// <param name="InitFilePath">Path to the project file</param>
/// <returns>The newly allocated project file object</returns>
protected override ProjectFile AllocateProjectFile( string InitFilePath )
{
return new MakefileProjectFile( InitFilePath );
}
/// ProjectFileGenerator interface
public override void CleanProjectFiles(string InMasterProjectRelativePath, string InMasterProjectName, string InIntermediateProjectFilesPath)
{
}
}
}