Implements VS2002 and VS2003 solutions with hardcoded configurations; much refactoring
This commit is contained in:
parent
0cd1e2dd85
commit
cbeb7c9eb9
111
samples/vs2002/CppExe/CppExe.vcproj
Normal file
111
samples/vs2002/CppExe/CppExe.vcproj
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.00"
|
||||||
|
Name="CppExe"
|
||||||
|
ProjectGUID="{AE61726D-187C-E440-BD07-2556188A6565}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory=".."
|
||||||
|
IntermediateDirectory="obj/Debug"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
EnableFunctionLevelLinking="TRUE"
|
||||||
|
RuntimeTypeInfo="TRUE"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/CppExe.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
AdditionalLibraryDirectories=".."
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/CppExe.pdb"
|
||||||
|
SubSystem="1"
|
||||||
|
EntryPointSymbol="mainCRTStartup"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory=".."
|
||||||
|
IntermediateDirectory="obj/Release"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="3"
|
||||||
|
StringPooling="TRUE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
EnableFunctionLevelLinking="TRUE"
|
||||||
|
RuntimeTypeInfo="TRUE"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
|
DebugInformationFormat="0"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/CppExe.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
AdditionalLibraryDirectories=".."
|
||||||
|
GenerateDebugInformation="FALSE"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
EntryPointSymbol="mainCRTStartup"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Hello.cpp">
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
21
samples/vs2002/MySolution.sln
Normal file
21
samples/vs2002/MySolution.sln
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Microsoft Visual Studio Solution File, Format Version 7.00
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CppExe", "CppExe/CppExe.vcproj", "{AE61726D-187C-E440-BD07-2556188A6565}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfiguration) = preSolution
|
||||||
|
ConfigName.0 = Debug
|
||||||
|
ConfigName.1 = Release
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectDependencies) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfiguration) = postSolution
|
||||||
|
{AE61726D-187C-E440-BD07-2556188A6565}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{AE61726D-187C-E440-BD07-2556188A6565}.Debug.Build.0 = Debug|Win32
|
||||||
|
{AE61726D-187C-E440-BD07-2556188A6565}.Release.ActiveCfg = Release|Win32
|
||||||
|
{AE61726D-187C-E440-BD07-2556188A6565}.Release.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityAddIns) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
125
samples/vs2003/CppExe/CppExe.vcproj
Normal file
125
samples/vs2003/CppExe/CppExe.vcproj
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?>
|
||||||
|
<VisualStudioProject
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="7.10"
|
||||||
|
Name="CppExe"
|
||||||
|
ProjectGUID="{2606321E-67AA-8244-A5C1-67F2E3F8CA0C}"
|
||||||
|
Keyword="Win32Proj">
|
||||||
|
<Platforms>
|
||||||
|
<Platform
|
||||||
|
Name="Win32"/>
|
||||||
|
</Platforms>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
OutputDirectory=".."
|
||||||
|
IntermediateDirectory="obj/Debug"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="0"
|
||||||
|
MinimalRebuild="TRUE"
|
||||||
|
BasicRuntimeChecks="3"
|
||||||
|
RuntimeLibrary="3"
|
||||||
|
EnableFunctionLevelLinking="TRUE"
|
||||||
|
RuntimeTypeInfo="TRUE"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
|
DebugInformationFormat="4"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/CppExe.exe"
|
||||||
|
LinkIncremental="2"
|
||||||
|
AdditionalLibraryDirectories=".."
|
||||||
|
GenerateDebugInformation="TRUE"
|
||||||
|
ProgramDatabaseFile="$(OutDir)/CppExe.pdb"
|
||||||
|
SubSystem="1"
|
||||||
|
EntryPointSymbol="mainCRTStartup"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
OutputDirectory=".."
|
||||||
|
IntermediateDirectory="obj/Release"
|
||||||
|
ConfigurationType="1"
|
||||||
|
CharacterSet="2">
|
||||||
|
<Tool
|
||||||
|
Name="VCCLCompilerTool"
|
||||||
|
Optimization="3"
|
||||||
|
StringPooling="TRUE"
|
||||||
|
RuntimeLibrary="2"
|
||||||
|
EnableFunctionLevelLinking="TRUE"
|
||||||
|
RuntimeTypeInfo="TRUE"
|
||||||
|
UsePrecompiledHeader="2"
|
||||||
|
WarningLevel="3"
|
||||||
|
Detect64BitPortabilityProblems="TRUE"
|
||||||
|
DebugInformationFormat="0"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCLinkerTool"
|
||||||
|
OutputFile="$(OutDir)/CppExe.exe"
|
||||||
|
LinkIncremental="1"
|
||||||
|
AdditionalLibraryDirectories=".."
|
||||||
|
GenerateDebugInformation="FALSE"
|
||||||
|
SubSystem="1"
|
||||||
|
OptimizeReferences="2"
|
||||||
|
EnableCOMDATFolding="2"
|
||||||
|
EntryPointSymbol="mainCRTStartup"
|
||||||
|
TargetMachine="1"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCMIDLTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPostBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreBuildEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCPreLinkEventTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCResourceCompilerTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebServiceProxyGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCXMLDataGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCWebDeploymentTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCManagedWrapperGeneratorTool"/>
|
||||||
|
<Tool
|
||||||
|
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
<References>
|
||||||
|
</References>
|
||||||
|
<Files>
|
||||||
|
<File
|
||||||
|
RelativePath=".\Hello.cpp">
|
||||||
|
</File>
|
||||||
|
</Files>
|
||||||
|
<Globals>
|
||||||
|
</Globals>
|
||||||
|
</VisualStudioProject>
|
21
samples/vs2003/MySolution.sln
Normal file
21
samples/vs2003/MySolution.sln
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
Microsoft Visual Studio Solution File, Format Version 8.00
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CppExe", "CppExe/CppExe.vcproj", "{2606321E-67AA-8244-A5C1-67F2E3F8CA0C}"
|
||||||
|
ProjectSection(ProjectDependencies) = postProject
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfiguration) = preSolution
|
||||||
|
Debug = Debug
|
||||||
|
Release = Release
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfiguration) = postSolution
|
||||||
|
{2606321E-67AA-8244-A5C1-67F2E3F8CA0C}.Debug.ActiveCfg = Debug|Win32
|
||||||
|
{2606321E-67AA-8244-A5C1-67F2E3F8CA0C}.Debug.Build.0 = Debug|Win32
|
||||||
|
{2606321E-67AA-8244-A5C1-67F2E3F8CA0C}.Release.ActiveCfg = Release|Win32
|
||||||
|
{2606321E-67AA-8244-A5C1-67F2E3F8CA0C}.Release.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ExtensibilityAddIns) = postSolution
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
@ -43,15 +43,14 @@ int make_solution_create(Session sess, Solution sln, Stream strm)
|
|||||||
*/
|
*/
|
||||||
int make_solution_signature(Session sess, Solution sln, Stream strm)
|
int make_solution_signature(Session sess, Solution sln, Stream strm)
|
||||||
{
|
{
|
||||||
int z = OKAY;
|
int z;
|
||||||
|
|
||||||
assert(strm);
|
assert(strm);
|
||||||
sess = 0; /* unused */
|
UNUSED(sess);
|
||||||
sln = 0; /* unused */
|
UNUSED(sln);
|
||||||
|
|
||||||
z |= stream_writeline(strm, "# GNU Makefile autogenerated by Premake");
|
z = stream_writeline(strm, "# GNU Makefile autogenerated by Premake");
|
||||||
z |= stream_writeline(strm, "# Usage: make [ CONFIG=config_name ]");
|
z |= stream_writeline(strm, "# Usage: make [ CONFIG=config_name ]");
|
||||||
z |= stream_writeline(strm, "# Where {config_name} is one of:");
|
z |= stream_writeline(strm, "# Where {config_name} is one of:");
|
||||||
|
|
||||||
return z;
|
return z;
|
||||||
}
|
}
|
||||||
|
111
src/action/vs200x/tests/vs2002_solution_tests.cpp
Normal file
111
src/action/vs200x/tests/vs2002_solution_tests.cpp
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
/**
|
||||||
|
* \file vs2002_solution_tests.cpp
|
||||||
|
* \brief Automated tests for VS2002 solution processing.
|
||||||
|
* \author Copyright (c) 2008 Jason Perkins and the Premake project
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "premake.h"
|
||||||
|
#include "testing/testing.h"
|
||||||
|
extern "C" {
|
||||||
|
#include "action/vs200x/vs200x_solution.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "vs200x_tests.h"
|
||||||
|
|
||||||
|
|
||||||
|
SUITE(action)
|
||||||
|
{
|
||||||
|
/**********************************************************************
|
||||||
|
* Signature tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Vs2002_Signature_IsCorrect)
|
||||||
|
{
|
||||||
|
session_set_action(sess, "vs2002");
|
||||||
|
vs2002_solution_signature(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"Microsoft Visual Studio Solution File, Format Version 7.00\r\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Project entry tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Vs2002_ProjectEntry_UsesRelativePath)
|
||||||
|
{
|
||||||
|
vs2002_solution_projects(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"MyProject\", \"ProjectFolder\\MyProject.vcproj\", \"{AE2461B7-236F-4278-81D3-F0D476F9A4C0}\"\n"
|
||||||
|
"EndProject\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Solution configuration tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Vs2002_SolutionConfiguration_IsCorrect)
|
||||||
|
{
|
||||||
|
vs2002_solution_configuration(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"Global\n"
|
||||||
|
"\tGlobalSection(SolutionConfiguration) = preSolution\n"
|
||||||
|
"\t\tConfigName.0 = Debug\n"
|
||||||
|
"\t\tConfigName.1 = Release\n"
|
||||||
|
"\tEndGlobalSection\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Project dependencies tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Vs2002_ProjectDependencies_IsCorrect)
|
||||||
|
{
|
||||||
|
vs2002_solution_dependencies(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"\tGlobalSection(ProjectDependencies) = postSolution\n"
|
||||||
|
"\tEndGlobalSection\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Project configuration tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Vs2002_ProjectConfiguration_IsCorrect)
|
||||||
|
{
|
||||||
|
vs2002_solution_project_configuration(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"\tGlobalSection(ProjectConfiguration) = postSolution\n"
|
||||||
|
"\t\t{AE2461B7-236F-4278-81D3-F0D476F9A4C0}.Debug.ActiveCfg = Debug|Win32\n"
|
||||||
|
"\t\t{AE2461B7-236F-4278-81D3-F0D476F9A4C0}.Debug.Build.0 = Debug|Win32\n"
|
||||||
|
"\t\t{AE2461B7-236F-4278-81D3-F0D476F9A4C0}.Release.ActiveCfg = Release|Win32\n"
|
||||||
|
"\t\t{AE2461B7-236F-4278-81D3-F0D476F9A4C0}.Release.Build.0 = Release|Win32\n"
|
||||||
|
"\tEndGlobalSection\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Solution extensibility tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Vs2002_Extensibility_IsCorrect)
|
||||||
|
{
|
||||||
|
vs2002_solution_extensibility(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"\tGlobalSection(ExtensibilityGlobals) = postSolution\n"
|
||||||
|
"\tEndGlobalSection\n"
|
||||||
|
"\tGlobalSection(ExtensibilityAddIns) = postSolution\n"
|
||||||
|
"\tEndGlobalSection\n"
|
||||||
|
"EndGlobal\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
48
src/action/vs200x/tests/vs2003_solution_tests.cpp
Normal file
48
src/action/vs200x/tests/vs2003_solution_tests.cpp
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/**
|
||||||
|
* \file vs2003_solution_tests.cpp
|
||||||
|
* \brief Automated tests for VS2003 solution processing.
|
||||||
|
* \author Copyright (c) 2008 Jason Perkins and the Premake project
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "premake.h"
|
||||||
|
#include "testing/testing.h"
|
||||||
|
extern "C" {
|
||||||
|
#include "action/vs200x/vs200x_solution.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "vs200x_tests.h"
|
||||||
|
|
||||||
|
|
||||||
|
SUITE(action)
|
||||||
|
{
|
||||||
|
/**********************************************************************
|
||||||
|
* Signature tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Vs2003_Signature_IsCorrect)
|
||||||
|
{
|
||||||
|
session_set_action(sess, "vs2003");
|
||||||
|
vs2003_solution_signature(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"Microsoft Visual Studio Solution File, Format Version 8.00\r\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Solution configuration tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Vs2003_SolutionConfiguration_IsCorrect)
|
||||||
|
{
|
||||||
|
vs2003_solution_configuration(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"Global\n"
|
||||||
|
"\tGlobalSection(SolutionConfiguration) = preSolution\n"
|
||||||
|
"\t\tDebug = Debug\n"
|
||||||
|
"\t\tRelease = Release\n"
|
||||||
|
"\tEndGlobalSection\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
83
src/action/vs200x/tests/vs2005_solution_tests.cpp
Normal file
83
src/action/vs200x/tests/vs2005_solution_tests.cpp
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/**
|
||||||
|
* \file vs2005_solution_tests.cpp
|
||||||
|
* \brief Automated tests for VS2005 solution processing.
|
||||||
|
* \author Copyright (c) 2008 Jason Perkins and the Premake project
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "premake.h"
|
||||||
|
#include "testing/testing.h"
|
||||||
|
extern "C" {
|
||||||
|
#include "action/vs200x/vs200x_solution.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "vs200x_tests.h"
|
||||||
|
|
||||||
|
|
||||||
|
SUITE(action)
|
||||||
|
{
|
||||||
|
/**********************************************************************
|
||||||
|
* Signature tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Vs2005_Signature_IsCorrect)
|
||||||
|
{
|
||||||
|
session_set_action(sess, "vs2005");
|
||||||
|
vs2005_solution_signature(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"\357\273\277\r\n"
|
||||||
|
"Microsoft Visual Studio Solution File, Format Version 9.00\r\n"
|
||||||
|
"# Visual Studio 2005\r\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Solution Configuration Platforms tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Platforms_IsCorrect)
|
||||||
|
{
|
||||||
|
vs2005_solution_platforms(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"Global\n"
|
||||||
|
"\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n"
|
||||||
|
"\t\tDebug|Win32 = Debug|Win32\n"
|
||||||
|
"\t\tRelease|Win32 = Release|Win32\n"
|
||||||
|
"\tEndGlobalSection\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Project Configuration Platforms tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, ProjectPlatforms_IsCorrect)
|
||||||
|
{
|
||||||
|
vs2005_solution_project_platforms(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n"
|
||||||
|
"\t\t{AE2461B7-236F-4278-81D3-F0D476F9A4C0}.Debug|Win32.ActiveCfg = Debug|Win32\n"
|
||||||
|
"\t\t{AE2461B7-236F-4278-81D3-F0D476F9A4C0}.Debug|Win32.Build.0 = Debug|Win32\n"
|
||||||
|
"\t\t{AE2461B7-236F-4278-81D3-F0D476F9A4C0}.Release|Win32.ActiveCfg = Release|Win32\n"
|
||||||
|
"\t\t{AE2461B7-236F-4278-81D3-F0D476F9A4C0}.Release|Win32.Build.0 = Release|Win32\n"
|
||||||
|
"\tEndGlobalSection\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Solution Project tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxVs200x, Properties_IsCorrect)
|
||||||
|
{
|
||||||
|
vs2005_solution_properties(sess, sln, strm);
|
||||||
|
CHECK_EQUAL(
|
||||||
|
"\tGlobalSection(SolutionProperties) = preSolution\n"
|
||||||
|
"\t\tHideSolutionNode = FALSE\n"
|
||||||
|
"\tEndGlobalSection\n"
|
||||||
|
"EndGlobal\n",
|
||||||
|
buffer);
|
||||||
|
}
|
||||||
|
}
|
@ -1,112 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file vs200x_solution_tests.cpp
|
|
||||||
* \brief Automated tests for VS200x solution processing.
|
|
||||||
* \author Copyright (c) 2008 Jason Perkins and the Premake project
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "premake.h"
|
|
||||||
#include "testing/testing.h"
|
|
||||||
extern "C" {
|
|
||||||
#include "action/vs200x/vs200x_solution.h"
|
|
||||||
}
|
|
||||||
|
|
||||||
struct FxVs200xSln
|
|
||||||
{
|
|
||||||
Session sess;
|
|
||||||
Stream strm;
|
|
||||||
Solution sln;
|
|
||||||
char buffer[8192];
|
|
||||||
|
|
||||||
FxVs200xSln()
|
|
||||||
{
|
|
||||||
sess = session_create();
|
|
||||||
|
|
||||||
strm = stream_create_null();
|
|
||||||
stream_set_buffer(strm, buffer);
|
|
||||||
|
|
||||||
sln = solution_create();
|
|
||||||
solution_set_name(sln, "MySolution");
|
|
||||||
solution_set_base_dir(sln, "/Root");
|
|
||||||
}
|
|
||||||
|
|
||||||
~FxVs200xSln()
|
|
||||||
{
|
|
||||||
solution_destroy(sln);
|
|
||||||
stream_destroy(strm);
|
|
||||||
session_destroy(sess);
|
|
||||||
}
|
|
||||||
|
|
||||||
Project AddProject()
|
|
||||||
{
|
|
||||||
Project prj = project_create();
|
|
||||||
project_set_name(prj, "MyProject");
|
|
||||||
project_set_base_dir(prj, "/Root");
|
|
||||||
project_set_guid(prj, "AE2461B7-236F-4278-81D3-F0D476F9A4C0");
|
|
||||||
solution_add_project(sln, prj);
|
|
||||||
return prj;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
SUITE(action)
|
|
||||||
{
|
|
||||||
/**********************************************************************
|
|
||||||
* Signature tests
|
|
||||||
**********************************************************************/
|
|
||||||
|
|
||||||
TEST_FIXTURE(FxVs200xSln, Signature_IsCorrect_OnVs2002)
|
|
||||||
{
|
|
||||||
session_set_action(sess, "vs2002");
|
|
||||||
vs200x_solution_signature(sess, sln, strm);
|
|
||||||
CHECK_EQUAL(
|
|
||||||
"\357\273\277Microsoft Visual Studio Solution File, Format Version 7.00\r\n",
|
|
||||||
buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_FIXTURE(FxVs200xSln, Signature_IsCorrect_OnVs2003)
|
|
||||||
{
|
|
||||||
session_set_action(sess, "vs2003");
|
|
||||||
vs200x_solution_signature(sess, sln, strm);
|
|
||||||
CHECK_EQUAL(
|
|
||||||
"\357\273\277Microsoft Visual Studio Solution File, Format Version 8.00\r\n",
|
|
||||||
buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_FIXTURE(FxVs200xSln, Signature_IsCorrect_OnVs2005)
|
|
||||||
{
|
|
||||||
session_set_action(sess, "vs2005");
|
|
||||||
vs200x_solution_signature(sess, sln, strm);
|
|
||||||
CHECK_EQUAL(
|
|
||||||
"\357\273\277\r\n"
|
|
||||||
"Microsoft Visual Studio Solution File, Format Version 9.00\r\n"
|
|
||||||
"# Visual Studio 2005\r\n",
|
|
||||||
buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* Project entry tests
|
|
||||||
**********************************************************************/
|
|
||||||
|
|
||||||
TEST_FIXTURE(FxVs200xSln, ProjectEntry_IsCorrect_OnCppProject)
|
|
||||||
{
|
|
||||||
AddProject();
|
|
||||||
vs200x_solution_projects(sess, sln, strm);
|
|
||||||
CHECK_EQUAL(
|
|
||||||
"Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"MyProject\", \"MyProject.vcproj\", \"{AE2461B7-236F-4278-81D3-F0D476F9A4C0}\"\n"
|
|
||||||
"EndProject\n",
|
|
||||||
buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
TEST_FIXTURE(FxVs200xSln, ProjectEntry_UsesRelativePath)
|
|
||||||
{
|
|
||||||
Project prj = AddProject();
|
|
||||||
project_set_location(prj, "ProjectFolder");
|
|
||||||
vs200x_solution_projects(sess, sln, strm);
|
|
||||||
CHECK_EQUAL(
|
|
||||||
"Project(\"{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}\") = \"MyProject\", \"ProjectFolder\\MyProject.vcproj\", \"{AE2461B7-236F-4278-81D3-F0D476F9A4C0}\"\n"
|
|
||||||
"EndProject\n",
|
|
||||||
buffer);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -10,20 +10,8 @@ extern "C" {
|
|||||||
#include "action/vs200x/vs200x.h"
|
#include "action/vs200x/vs200x.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
struct FxVs200x
|
#include "vs200x_tests.h"
|
||||||
{
|
|
||||||
Session sess;
|
|
||||||
|
|
||||||
FxVs200x()
|
|
||||||
{
|
|
||||||
sess = session_create();
|
|
||||||
}
|
|
||||||
|
|
||||||
~FxVs200x()
|
|
||||||
{
|
|
||||||
session_destroy(sess);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
SUITE(action)
|
SUITE(action)
|
||||||
{
|
{
|
||||||
|
42
src/action/vs200x/tests/vs200x_tests.h
Normal file
42
src/action/vs200x/tests/vs200x_tests.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/**
|
||||||
|
* \file vs200x_tests.h
|
||||||
|
* \brief Standard test fixtures for Visual Studio.
|
||||||
|
* \author Copyright (c) 2008 Jason Perkins and the Premake project
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct FxVs200x
|
||||||
|
{
|
||||||
|
Session sess;
|
||||||
|
Stream strm;
|
||||||
|
Solution sln;
|
||||||
|
Project prj;
|
||||||
|
char buffer[8192];
|
||||||
|
|
||||||
|
FxVs200x()
|
||||||
|
{
|
||||||
|
sess = session_create();
|
||||||
|
|
||||||
|
strm = stream_create_null();
|
||||||
|
stream_set_buffer(strm, buffer);
|
||||||
|
|
||||||
|
sln = solution_create();
|
||||||
|
solution_set_name(sln, "MySolution");
|
||||||
|
solution_set_base_dir(sln, "/Root");
|
||||||
|
solution_add_config_name(sln, "Debug");
|
||||||
|
solution_add_config_name(sln, "Release");
|
||||||
|
|
||||||
|
prj = project_create();
|
||||||
|
project_set_name(prj, "MyProject");
|
||||||
|
project_set_base_dir(prj, "/Root");
|
||||||
|
project_set_location(prj, "ProjectFolder");
|
||||||
|
project_set_guid(prj, "AE2461B7-236F-4278-81D3-F0D476F9A4C0");
|
||||||
|
solution_add_project(sln, prj);
|
||||||
|
}
|
||||||
|
|
||||||
|
~FxVs200x()
|
||||||
|
{
|
||||||
|
solution_destroy(sln);
|
||||||
|
stream_destroy(strm);
|
||||||
|
session_destroy(sess);
|
||||||
|
}
|
||||||
|
};
|
@ -13,7 +13,13 @@
|
|||||||
/** The VS2002 solution writing process, for session_enumerate_objects() */
|
/** The VS2002 solution writing process, for session_enumerate_objects() */
|
||||||
static SessionSolutionCallback Vs2002SolutionCallbacks[] =
|
static SessionSolutionCallback Vs2002SolutionCallbacks[] =
|
||||||
{
|
{
|
||||||
vs200x_solution_create,
|
vs2002_solution_create,
|
||||||
|
vs2002_solution_signature,
|
||||||
|
vs2002_solution_projects,
|
||||||
|
vs2002_solution_configuration,
|
||||||
|
vs2002_solution_dependencies,
|
||||||
|
vs2002_solution_project_configuration,
|
||||||
|
vs2002_solution_extensibility,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
192
src/action/vs200x/vs2002_solution.c
Normal file
192
src/action/vs200x/vs2002_solution.c
Normal file
@ -0,0 +1,192 @@
|
|||||||
|
/**
|
||||||
|
* \file vs2002_solution.c
|
||||||
|
* \brief Visual Studio 2002 solution generation functions.
|
||||||
|
* \author Copyright (c) 2002-2008 Jason Perkins and the Premake project
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "premake.h"
|
||||||
|
#include "vs200x.h"
|
||||||
|
#include "vs200x_solution.h"
|
||||||
|
#include "vs200x_project.h"
|
||||||
|
#include "base/path.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the Visual Studio 2002 solution configuration block.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2002_solution_configuration(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int i, n, z;
|
||||||
|
UNUSED(sess);
|
||||||
|
|
||||||
|
z = stream_writeline(strm, "Global");
|
||||||
|
z |= stream_writeline(strm, "\tGlobalSection(SolutionConfiguration) = preSolution");
|
||||||
|
|
||||||
|
n = solution_num_configs(sln);
|
||||||
|
for (i = 0; i < n; ++i)
|
||||||
|
{
|
||||||
|
const char* config_name = solution_get_config_name(sln, i);
|
||||||
|
z |= stream_writeline(strm, "\t\tConfigName.%d = %s", i, config_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
z |= stream_writeline(strm, "\tEndGlobalSection");
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the Visual Studio 2002 project dependencies block.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2002_solution_dependencies(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int z;
|
||||||
|
UNUSED(sess);
|
||||||
|
UNUSED(sln);
|
||||||
|
z = stream_writeline(strm, "\tGlobalSection(ProjectDependencies) = postSolution");
|
||||||
|
z |= stream_writeline(strm, "\tEndGlobalSection");
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write out the Visual Studio 2002 solution extensibility block.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2002_solution_extensibility(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int z;
|
||||||
|
UNUSED(sess);
|
||||||
|
UNUSED(sln);
|
||||||
|
z = stream_writeline(strm, "\tGlobalSection(ExtensibilityGlobals) = postSolution");
|
||||||
|
z |= stream_writeline(strm, "\tEndGlobalSection");
|
||||||
|
z |= stream_writeline(strm, "\tGlobalSection(ExtensibilityAddIns) = postSolution");
|
||||||
|
z |= stream_writeline(strm, "\tEndGlobalSection");
|
||||||
|
z |= stream_writeline(strm, "EndGlobal");
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new output stream for a solution, and make it active for subsequent writes.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2002_solution_create(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
/* create the solution file */
|
||||||
|
const char* filename = solution_get_filename(sln, NULL, ".sln");
|
||||||
|
strm = stream_create_file(filename);
|
||||||
|
if (!strm)
|
||||||
|
{
|
||||||
|
return !OKAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* make the stream active for the functions that come after */
|
||||||
|
session_set_active_stream(sess, strm);
|
||||||
|
return OKAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write out the Visual Studio 2002 project configurations block.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2002_solution_project_configuration(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int pi, pn, z;
|
||||||
|
UNUSED(sess);
|
||||||
|
z = stream_writeline(strm, "\tGlobalSection(ProjectConfiguration) = postSolution");
|
||||||
|
pn = solution_num_projects(sln);
|
||||||
|
for (pi = 0; pi < pn; ++pi)
|
||||||
|
{
|
||||||
|
int ci, cn;
|
||||||
|
Project prj = solution_get_project(sln, pi);
|
||||||
|
const char* prj_id = project_get_guid(prj);
|
||||||
|
|
||||||
|
cn = solution_num_configs(sln);
|
||||||
|
for (ci = 0; ci < cn; ++ci)
|
||||||
|
{
|
||||||
|
const char* config_name = solution_get_config_name(sln, ci);
|
||||||
|
z |= stream_writeline(strm, "\t\t{%s}.%s.ActiveCfg = %s|Win32", prj_id, config_name, config_name);
|
||||||
|
z |= stream_writeline(strm, "\t\t{%s}.%s.Build.0 = %s|Win32", prj_id, config_name, config_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
z |= stream_writeline(strm, "\tEndGlobalSection");
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write out the list of projects contained by the solution.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2002_solution_projects(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
const char* sln_path;
|
||||||
|
int i, n;
|
||||||
|
|
||||||
|
UNUSED(sess);
|
||||||
|
|
||||||
|
/* project file paths are specified relative to the solution */
|
||||||
|
sln_path = path_directory(solution_get_filename(sln, NULL, NULL));
|
||||||
|
|
||||||
|
n = solution_num_projects(sln);
|
||||||
|
for (i = 0; i < n; ++i)
|
||||||
|
{
|
||||||
|
Project prj = solution_get_project(sln, i);
|
||||||
|
const char* prj_name = project_get_name(prj);
|
||||||
|
const char* prj_id = project_get_guid(prj);
|
||||||
|
const char* prj_lang = project_get_language(prj);
|
||||||
|
const char* prj_ext = vs200x_project_extension(prj);
|
||||||
|
const char* prj_file = project_get_filename(prj, prj_name, prj_ext);
|
||||||
|
const char* tool_id = vs200x_tool_guid(prj_lang);
|
||||||
|
|
||||||
|
/* convert absolute project file name to be relative to solution */
|
||||||
|
prj_file = path_relative(sln_path, prj_file);
|
||||||
|
prj_file = path_translate(prj_file, "\\");
|
||||||
|
|
||||||
|
stream_writeline(strm, "Project(\"{%s}\") = \"%s\", \"%s\", \"{%s}\"", tool_id, prj_name, prj_file, prj_id);
|
||||||
|
stream_writeline(strm, "EndProject");
|
||||||
|
}
|
||||||
|
|
||||||
|
return OKAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write the Visual Studio 2002 solution file signature.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2002_solution_signature(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int z;
|
||||||
|
UNUSED(sess);
|
||||||
|
UNUSED(sln);
|
||||||
|
stream_set_newline(strm, "\r\n");
|
||||||
|
z = stream_writeline(strm, "Microsoft Visual Studio Solution File, Format Version 7.00");
|
||||||
|
return z;
|
||||||
|
}
|
@ -13,7 +13,12 @@
|
|||||||
/** The VS2003 solution writing process, for session_enumerate_objects() */
|
/** The VS2003 solution writing process, for session_enumerate_objects() */
|
||||||
static SessionSolutionCallback Vs2003SolutionCallbacks[] =
|
static SessionSolutionCallback Vs2003SolutionCallbacks[] =
|
||||||
{
|
{
|
||||||
vs200x_solution_create,
|
vs2002_solution_create,
|
||||||
|
vs2003_solution_signature,
|
||||||
|
vs2002_solution_projects,
|
||||||
|
vs2003_solution_configuration,
|
||||||
|
vs2002_solution_project_configuration,
|
||||||
|
vs2002_solution_extensibility,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -34,4 +39,3 @@ int vs2003_action(Session sess)
|
|||||||
stream_writeline(Console, "Generating project files for Visual Studio 2003...");
|
stream_writeline(Console, "Generating project files for Visual Studio 2003...");
|
||||||
return session_enumerate_objects(sess, Vs2003SolutionCallbacks, Vs2003ProjectCallbacks);
|
return session_enumerate_objects(sess, Vs2003SolutionCallbacks, Vs2003ProjectCallbacks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
55
src/action/vs200x/vs2003_solution.c
Normal file
55
src/action/vs200x/vs2003_solution.c
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
* \file vs2003_solution.c
|
||||||
|
* \brief Visual Studio 2003 solution generation functions.
|
||||||
|
* \author Copyright (c) 2002-2008 Jason Perkins and the Premake project
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "premake.h"
|
||||||
|
#include "vs200x_solution.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create the Visual Studio 2003 solution configuration block.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2003_solution_configuration(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int i, n, z;
|
||||||
|
UNUSED(sess);
|
||||||
|
|
||||||
|
z = stream_writeline(strm, "Global");
|
||||||
|
z |= stream_writeline(strm, "\tGlobalSection(SolutionConfiguration) = preSolution");
|
||||||
|
|
||||||
|
n = solution_num_configs(sln);
|
||||||
|
for (i = 0; i < n; ++i)
|
||||||
|
{
|
||||||
|
const char* config_name = solution_get_config_name(sln, i);
|
||||||
|
z |= stream_writeline(strm, "\t\t%s = %s", config_name, config_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
z |= stream_writeline(strm, "\tEndGlobalSection");
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write the Visual Studio 2003 solution file signature.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2003_solution_signature(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int z;
|
||||||
|
UNUSED(sess);
|
||||||
|
UNUSED(sln);
|
||||||
|
stream_set_newline(strm, "\r\n");
|
||||||
|
z = stream_writeline(strm, "Microsoft Visual Studio Solution File, Format Version 8.00");
|
||||||
|
return z;
|
||||||
|
}
|
@ -13,9 +13,12 @@
|
|||||||
/** The VS2005 solution writing process, for session_enumerate_objects() */
|
/** The VS2005 solution writing process, for session_enumerate_objects() */
|
||||||
static SessionSolutionCallback Vs2005SolutionCallbacks[] =
|
static SessionSolutionCallback Vs2005SolutionCallbacks[] =
|
||||||
{
|
{
|
||||||
vs200x_solution_create,
|
vs2002_solution_create,
|
||||||
vs200x_solution_signature,
|
vs2005_solution_signature,
|
||||||
vs200x_solution_projects,
|
vs2002_solution_projects,
|
||||||
|
vs2005_solution_platforms,
|
||||||
|
vs2005_solution_project_platforms,
|
||||||
|
vs2005_solution_properties,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
110
src/action/vs200x/vs2005_solution.c
Normal file
110
src/action/vs200x/vs2005_solution.c
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
/**
|
||||||
|
* \file vs2005_solution.c
|
||||||
|
* \brief Visual Studio 2005 solution generation functions.
|
||||||
|
* \author Copyright (c) 2002-2008 Jason Perkins and the Premake project
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "premake.h"
|
||||||
|
#include "vs200x_solution.h"
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write out the Visual Studio solution-level platform configuration block.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2005_solution_platforms(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int i, n, z;
|
||||||
|
UNUSED(sess);
|
||||||
|
|
||||||
|
z = stream_writeline(strm, "Global");
|
||||||
|
z |= stream_writeline(strm, "\tGlobalSection(SolutionConfigurationPlatforms) = preSolution");
|
||||||
|
|
||||||
|
n = solution_num_configs(sln);
|
||||||
|
for (i = 0; i < n; ++i)
|
||||||
|
{
|
||||||
|
const char* config_name = solution_get_config_name(sln, i);
|
||||||
|
z |= stream_writeline(strm, "\t\t%s|Win32 = %s|Win32", config_name, config_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
z |= stream_writeline(strm, "\tEndGlobalSection");
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write out the Visual Studio 2005 project-level platform configurations block.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2005_solution_project_platforms(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int pi, pn, z;
|
||||||
|
UNUSED(sess);
|
||||||
|
z = stream_writeline(strm, "\tGlobalSection(ProjectConfigurationPlatforms) = postSolution");
|
||||||
|
pn = solution_num_projects(sln);
|
||||||
|
for (pi = 0; pi < pn; ++pi)
|
||||||
|
{
|
||||||
|
int ci, cn;
|
||||||
|
Project prj = solution_get_project(sln, pi);
|
||||||
|
const char* prj_id = project_get_guid(prj);
|
||||||
|
|
||||||
|
cn = solution_num_configs(sln);
|
||||||
|
for (ci = 0; ci < cn; ++ci)
|
||||||
|
{
|
||||||
|
const char* config_name = solution_get_config_name(sln, ci);
|
||||||
|
z |= stream_writeline(strm, "\t\t{%s}.%s|Win32.ActiveCfg = %s|Win32", prj_id, config_name, config_name);
|
||||||
|
z |= stream_writeline(strm, "\t\t{%s}.%s|Win32.Build.0 = %s|Win32", prj_id, config_name, config_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
z |= stream_writeline(strm, "\tEndGlobalSection");
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write out the Visual Studio 2005 solution properties block.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2005_solution_properties(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int z;
|
||||||
|
UNUSED(sess);
|
||||||
|
UNUSED(sln);
|
||||||
|
z = stream_writeline(strm, "\tGlobalSection(SolutionProperties) = preSolution");
|
||||||
|
z |= stream_writeline(strm, "\t\tHideSolutionNode = FALSE");
|
||||||
|
z |= stream_writeline(strm, "\tEndGlobalSection");
|
||||||
|
z |= stream_writeline(strm, "EndGlobal");
|
||||||
|
return z;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Write the Visual Studio 2005 solution file signature.
|
||||||
|
* \param sess The execution session context.
|
||||||
|
* \param sln The current solution.
|
||||||
|
* \param strm The currently active stream; set with session_set_active_stream().
|
||||||
|
* \returns OKAY if successful.
|
||||||
|
*/
|
||||||
|
int vs2005_solution_signature(Session sess, Solution sln, Stream strm)
|
||||||
|
{
|
||||||
|
int z;
|
||||||
|
UNUSED(sess);
|
||||||
|
UNUSED(sln);
|
||||||
|
stream_set_newline(strm, "\r\n");
|
||||||
|
z = stream_write_unicode_marker(strm);
|
||||||
|
z |= stream_writeline(strm, "");
|
||||||
|
z |= stream_writeline(strm, "Microsoft Visual Studio Solution File, Format Version 9.00");
|
||||||
|
z |= stream_writeline(strm, "# Visual Studio 2005");
|
||||||
|
return z;
|
||||||
|
}
|
@ -5,9 +5,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include "premake.h"
|
#include "premake.h"
|
||||||
#include "vs200x.h"
|
#include "vs200x.h"
|
||||||
#include "base/cstr.h"
|
#include "base/cstr.h"
|
||||||
|
#include "base/error.h"
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -36,3 +38,26 @@ int vs200x_get_target_version(Session sess)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the Visual Studio GUID for a particular project type.
|
||||||
|
* \param language The programming language used in the project.
|
||||||
|
* \returns The GUID corresponding the programming language.
|
||||||
|
*/
|
||||||
|
const char* vs200x_tool_guid(const char* language)
|
||||||
|
{
|
||||||
|
if (cstr_eq(language, "c") || cstr_eq(language, "c++"))
|
||||||
|
{
|
||||||
|
return "8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942";
|
||||||
|
}
|
||||||
|
else if (cstr_eq(language, "c#"))
|
||||||
|
{
|
||||||
|
return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
error_set("unsupported language '%s'", language);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -8,7 +8,9 @@
|
|||||||
|
|
||||||
#include "engine/session.h"
|
#include "engine/session.h"
|
||||||
|
|
||||||
int vs200x_get_target_version(Session sess);
|
int vs200x_get_target_version(Session sess);
|
||||||
|
const char* vs200x_tool_guid(const char* language);
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1,137 +0,0 @@
|
|||||||
/**
|
|
||||||
* \file vs200x_solution.c
|
|
||||||
* \brief Visual Studio 200x solution generation functions.
|
|
||||||
* \author Copyright (c) 2002-2008 Jason Perkins and the Premake project
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "premake.h"
|
|
||||||
#include "vs200x.h"
|
|
||||||
#include "vs200x_solution.h"
|
|
||||||
#include "vs200x_project.h"
|
|
||||||
#include "base/cstr.h"
|
|
||||||
#include "base/error.h"
|
|
||||||
#include "base/path.h"
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create a new output stream for a solution, and make it active for subsequent writes.
|
|
||||||
* \param sess The execution session context.
|
|
||||||
* \param sln The current solution.
|
|
||||||
* \param strm The currently active stream; set with session_set_active_stream().
|
|
||||||
* \returns OKAY if successful.
|
|
||||||
*/
|
|
||||||
int vs200x_solution_create(Session sess, Solution sln, Stream strm)
|
|
||||||
{
|
|
||||||
/* create the solution file */
|
|
||||||
const char* filename = solution_get_filename(sln, NULL, ".sln");
|
|
||||||
strm = stream_create_file(filename);
|
|
||||||
if (!strm)
|
|
||||||
{
|
|
||||||
return !OKAY;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* make the stream active for the functions that come after */
|
|
||||||
session_set_active_stream(sess, strm);
|
|
||||||
return OKAY;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write out the list of projects contained by the solution.
|
|
||||||
* \param sess The execution session context.
|
|
||||||
* \param sln The current solution.
|
|
||||||
* \param strm The currently active stream; set with session_set_active_stream().
|
|
||||||
* \returns OKAY if successful.
|
|
||||||
*/
|
|
||||||
int vs200x_solution_projects(Session sess, Solution sln, Stream strm)
|
|
||||||
{
|
|
||||||
const char* sln_path;
|
|
||||||
int i, n;
|
|
||||||
sess = 0; /* unused */
|
|
||||||
|
|
||||||
/* project file paths are specified relative to the solution */
|
|
||||||
sln_path = path_directory(solution_get_filename(sln, NULL, NULL));
|
|
||||||
|
|
||||||
n = solution_num_projects(sln);
|
|
||||||
for (i = 0; i < n; ++i)
|
|
||||||
{
|
|
||||||
Project prj = solution_get_project(sln, i);
|
|
||||||
const char* prj_name = project_get_name(prj);
|
|
||||||
const char* prj_id = project_get_guid(prj);
|
|
||||||
const char* prj_ext = vs200x_project_extension(prj);
|
|
||||||
const char* prj_file = project_get_filename(prj, prj_name, prj_ext);
|
|
||||||
const char* tool_id = vs200x_solution_tool_guid("c++");
|
|
||||||
|
|
||||||
/* convert absolute project file name to be relative to solution */
|
|
||||||
prj_file = path_relative(sln_path, prj_file);
|
|
||||||
prj_file = path_translate(prj_file, "\\");
|
|
||||||
|
|
||||||
stream_writeline(strm, "Project(\"{%s}\") = \"%s\", \"%s\", \"{%s}\"", tool_id, prj_name, prj_file, prj_id);
|
|
||||||
stream_writeline(strm, "EndProject");
|
|
||||||
}
|
|
||||||
|
|
||||||
return OKAY;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write the solution file signature block.
|
|
||||||
* \param sess The execution session context.
|
|
||||||
* \param sln The current solution.
|
|
||||||
* \param strm The currently active stream; set with session_set_active_stream().
|
|
||||||
* \returns OKAY if successful.
|
|
||||||
*/
|
|
||||||
int vs200x_solution_signature(Session sess, Solution sln, Stream strm)
|
|
||||||
{
|
|
||||||
int version, z;
|
|
||||||
|
|
||||||
assert(sess);
|
|
||||||
assert(strm);
|
|
||||||
sln = 0; /* unused */
|
|
||||||
|
|
||||||
stream_set_newline(strm, "\r\n");
|
|
||||||
z = stream_write_unicode_marker(strm);
|
|
||||||
|
|
||||||
version = vs200x_get_target_version(sess);
|
|
||||||
switch (version)
|
|
||||||
{
|
|
||||||
case 2002:
|
|
||||||
z |= stream_writeline(strm, "Microsoft Visual Studio Solution File, Format Version 7.00");
|
|
||||||
break;
|
|
||||||
case 2003:
|
|
||||||
z |= stream_writeline(strm, "Microsoft Visual Studio Solution File, Format Version 8.00");
|
|
||||||
break;
|
|
||||||
case 2005:
|
|
||||||
z |= stream_writeline(strm, "");
|
|
||||||
z |= stream_writeline(strm, "Microsoft Visual Studio Solution File, Format Version 9.00");
|
|
||||||
z |= stream_writeline(strm, "# Visual Studio 2005");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return z;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the Visual Studio GUID for a particular project type.
|
|
||||||
* \param language The programming language used in the project.
|
|
||||||
* \returns The GUID corresponding the programming language.
|
|
||||||
*/
|
|
||||||
const char* vs200x_solution_tool_guid(const char* language)
|
|
||||||
{
|
|
||||||
if (cstr_eq(language, "c") || cstr_eq(language, "c++"))
|
|
||||||
{
|
|
||||||
return "8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942";
|
|
||||||
}
|
|
||||||
else if (cstr_eq(language, "c#"))
|
|
||||||
{
|
|
||||||
return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
error_set("unsupported language '%s'", language);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
@ -8,9 +8,20 @@
|
|||||||
|
|
||||||
#include "engine/session.h"
|
#include "engine/session.h"
|
||||||
|
|
||||||
int vs200x_solution_create(Session sess, Solution sln, Stream strm);
|
int vs2002_solution_configuration(Session sess, Solution sln, Stream strm);
|
||||||
int vs200x_solution_projects(Session sess, Solution sln, Stream strm);
|
int vs2002_solution_create(Session sess, Solution sln, Stream strm);
|
||||||
int vs200x_solution_signature(Session sess, Solution sln, Stream strm);
|
int vs2002_solution_dependencies(Session sess, Solution sln, Stream strm);
|
||||||
const char* vs200x_solution_tool_guid(const char* language);
|
int vs2002_solution_extensibility(Session sess, Solution sln, Stream strm);
|
||||||
|
int vs2002_solution_project_configuration(Session sess, Solution sln, Stream strm);
|
||||||
|
int vs2002_solution_projects(Session sess, Solution sln, Stream strm);
|
||||||
|
int vs2002_solution_signature(Session sess, Solution sln, Stream strm);
|
||||||
|
|
||||||
|
int vs2003_solution_configuration(Session sess, Solution sln, Stream strm);
|
||||||
|
int vs2003_solution_signature(Session sess, Solution sln, Stream strm);
|
||||||
|
|
||||||
|
int vs2005_solution_platforms(Session sess, Solution sln, Stream strm);
|
||||||
|
int vs2005_solution_project_platforms(Session sess, Solution sln, Stream strm);
|
||||||
|
int vs2005_solution_properties(Session sess, Solution sln, Stream strm);
|
||||||
|
int vs2005_solution_signature(Session sess, Solution sln, Stream strm);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -8,6 +8,8 @@
|
|||||||
#include "premake.h"
|
#include "premake.h"
|
||||||
#include "internals.h"
|
#include "internals.h"
|
||||||
|
|
||||||
|
static int unload_solution_projects(Session sess, lua_State* L, struct UnloadFuncs* funcs, Solution sln);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy project information out of the scripting environment and into C objects that
|
* Copy project information out of the scripting environment and into C objects that
|
||||||
@ -34,29 +36,17 @@ int unload_all(Session sess, lua_State* L, struct UnloadFuncs* funcs)
|
|||||||
{
|
{
|
||||||
Solution sln = solution_create();
|
Solution sln = solution_create();
|
||||||
session_add_solution(sess, sln);
|
session_add_solution(sess, sln);
|
||||||
|
|
||||||
lua_rawgeti(L, -1, si);
|
lua_rawgeti(L, -1, si);
|
||||||
|
|
||||||
|
/* hardcoded a standard set of configurations for now */
|
||||||
|
solution_add_config_name(sln, "Debug");
|
||||||
|
solution_add_config_name(sln, "Release");
|
||||||
|
|
||||||
|
/* extract the project fields */
|
||||||
status = funcs->unload_solution(sess, L, sln);
|
status = funcs->unload_solution(sess, L, sln);
|
||||||
if (status == OKAY)
|
if (status == OKAY)
|
||||||
{
|
{
|
||||||
/* iterate over list of projects */
|
status = unload_solution_projects(sess, L, funcs, sln);
|
||||||
int pi, pn;
|
|
||||||
lua_getfield(L, -1, PROJECTS_KEY);
|
|
||||||
pn = luaL_getn(L, -1);
|
|
||||||
for (pi = 1; status == OKAY && pi <= pn; ++pi)
|
|
||||||
{
|
|
||||||
Project prj = project_create();
|
|
||||||
solution_add_project(sln, prj);
|
|
||||||
|
|
||||||
lua_rawgeti(L, -1, pi);
|
|
||||||
status = funcs->unload_project(sess, L, prj);
|
|
||||||
|
|
||||||
/* remove project object from stack */
|
|
||||||
lua_pop(L, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* remove list of projects from stack */
|
|
||||||
lua_pop(L, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* remove solution object from stack */
|
/* remove solution object from stack */
|
||||||
@ -69,6 +59,33 @@ int unload_all(Session sess, lua_State* L, struct UnloadFuncs* funcs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int unload_solution_projects(Session sess, lua_State* L, struct UnloadFuncs* funcs, Solution sln)
|
||||||
|
{
|
||||||
|
int pi, pn;
|
||||||
|
int status = OKAY;
|
||||||
|
|
||||||
|
/* iterate over list of projects from the solution */
|
||||||
|
lua_getfield(L, -1, PROJECTS_KEY);
|
||||||
|
pn = luaL_getn(L, -1);
|
||||||
|
for (pi = 1; status == OKAY && pi <= pn; ++pi)
|
||||||
|
{
|
||||||
|
Project prj = project_create();
|
||||||
|
solution_add_project(sln, prj);
|
||||||
|
|
||||||
|
/* unload the project fields */
|
||||||
|
lua_rawgeti(L, -1, pi);
|
||||||
|
status = funcs->unload_project(sess, L, prj);
|
||||||
|
|
||||||
|
/* remove project object from stack */
|
||||||
|
lua_pop(L, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remove list of projects from stack */
|
||||||
|
lua_pop(L, 1);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Unload information from the scripting environment for a particular solution.
|
* Unload information from the scripting environment for a particular solution.
|
||||||
* \param sess The session object which contains the scripted project objects.
|
* \param sess The session object which contains the scripted project objects.
|
||||||
|
@ -35,3 +35,9 @@
|
|||||||
*/
|
*/
|
||||||
#define ALLOC_CLASS(n) (n)malloc(sizeof(struct n##_impl))
|
#define ALLOC_CLASS(n) (n)malloc(sizeof(struct n##_impl))
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mark a variable as unused, so the compiler won't complain about it. I suspect
|
||||||
|
* there is a better way to do this.
|
||||||
|
*/
|
||||||
|
#define UNUSED(var) var = 0
|
||||||
|
@ -83,7 +83,7 @@ local subsystems =
|
|||||||
table.insert(package.files, matchfiles("testing/*.h", "testing/*.cpp", unittest.."/*"))
|
table.insert(package.files, matchfiles("testing/*.h", "testing/*.cpp", unittest.."/*"))
|
||||||
|
|
||||||
for k,m in subsystems do
|
for k,m in subsystems do
|
||||||
table.insert(package.files, matchfiles(m.."/tests/*.cpp"))
|
table.insert(package.files, matchfiles(m.."/tests/*.h", m.."/tests/*.cpp"))
|
||||||
end
|
end
|
||||||
|
|
||||||
if (windows) then
|
if (windows) then
|
||||||
|
@ -111,6 +111,18 @@ const char* project_get_guid(Project prj)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the programming language specified for a project.
|
||||||
|
* \param prj The project to query.
|
||||||
|
* \returns The programming language specified for the project.
|
||||||
|
*/
|
||||||
|
const char* project_get_language(Project prj)
|
||||||
|
{
|
||||||
|
prj = 0;
|
||||||
|
return "c++";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the output location (the relative path from the base directory to the
|
* Retrieve the output location (the relative path from the base directory to the
|
||||||
* target output directory) for this project.
|
* target output directory) for this project.
|
||||||
|
@ -33,6 +33,7 @@ void project_destroy(Project prj);
|
|||||||
const char* project_get_base_dir(Project prj);
|
const char* project_get_base_dir(Project prj);
|
||||||
const char* project_get_filename(Project prj, const char* basename, const char* ext);
|
const char* project_get_filename(Project prj, const char* basename, const char* ext);
|
||||||
const char* project_get_guid(Project prj);
|
const char* project_get_guid(Project prj);
|
||||||
|
const char* project_get_language(Project prj);
|
||||||
const char* project_get_location(Project prj);
|
const char* project_get_location(Project prj);
|
||||||
const char* project_get_name(Project prj);
|
const char* project_get_name(Project prj);
|
||||||
const char* project_get_value(Project prj, enum ProjectField field);
|
const char* project_get_value(Project prj, enum ProjectField field);
|
||||||
|
@ -27,6 +27,7 @@ struct FieldInfo SolutionFieldInfo[] =
|
|||||||
DEFINE_CLASS(Solution)
|
DEFINE_CLASS(Solution)
|
||||||
{
|
{
|
||||||
Fields fields;
|
Fields fields;
|
||||||
|
Array configs;
|
||||||
Array projects;
|
Array projects;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -39,6 +40,7 @@ Solution solution_create()
|
|||||||
{
|
{
|
||||||
Solution sln = ALLOC_CLASS(Solution);
|
Solution sln = ALLOC_CLASS(Solution);
|
||||||
sln->fields = fields_create(SolutionFieldInfo);
|
sln->fields = fields_create(SolutionFieldInfo);
|
||||||
|
sln->configs = array_create();
|
||||||
sln->projects = array_create();
|
sln->projects = array_create();
|
||||||
return sln;
|
return sln;
|
||||||
}
|
}
|
||||||
@ -54,6 +56,7 @@ void solution_destroy(Solution sln)
|
|||||||
|
|
||||||
assert(sln);
|
assert(sln);
|
||||||
fields_destroy(sln->fields);
|
fields_destroy(sln->fields);
|
||||||
|
array_destroy(sln->configs);
|
||||||
|
|
||||||
n = solution_num_projects(sln);
|
n = solution_num_projects(sln);
|
||||||
for (i = 0; i < n; ++i)
|
for (i = 0; i < n; ++i)
|
||||||
@ -67,6 +70,19 @@ void solution_destroy(Solution sln)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a configuration name to a solution.
|
||||||
|
* \param sln The solution to contain the project.
|
||||||
|
* \param config_name The name of the configuration add.
|
||||||
|
*/
|
||||||
|
void solution_add_config_name(Solution sln, const char* config_name)
|
||||||
|
{
|
||||||
|
assert(sln);
|
||||||
|
assert(config_name);
|
||||||
|
array_add(sln->configs, (void*)config_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a project to a solution.
|
* Add a project to a solution.
|
||||||
* \param sln The solution to contain the project.
|
* \param sln The solution to contain the project.
|
||||||
@ -92,6 +108,21 @@ const char* solution_get_base_dir(Solution sln)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the configuration name at a given index.
|
||||||
|
* \param sln The solution to query.
|
||||||
|
* \param index The configuration index to query.
|
||||||
|
* \returns The configuration name at the given index.
|
||||||
|
*/
|
||||||
|
const char* solution_get_config_name(Solution sln, int index)
|
||||||
|
{
|
||||||
|
const char* name;
|
||||||
|
assert(sln);
|
||||||
|
name = (const char*)array_item(sln->configs, index);
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the path to the solution output file, using the provided file extension.
|
* Get the path to the solution output file, using the provided file extension.
|
||||||
* \param sln The solution object to query.
|
* \param sln The solution object to query.
|
||||||
@ -179,6 +210,18 @@ const char* solution_get_value(Solution sln, enum SolutionField field)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the number of configurations contained by this solution.
|
||||||
|
* \param sln The solution to query.
|
||||||
|
* \returns The number of configurations contained by the solution.
|
||||||
|
*/
|
||||||
|
int solution_num_configs(Solution sln)
|
||||||
|
{
|
||||||
|
assert(sln);
|
||||||
|
return array_size(sln->configs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the number of projects contained by this solution.
|
* Return the number of projects contained by this solution.
|
||||||
* \param sln The solution to query.
|
* \param sln The solution to query.
|
||||||
|
@ -30,13 +30,16 @@ DECLARE_CLASS(Solution)
|
|||||||
Solution solution_create(void);
|
Solution solution_create(void);
|
||||||
void solution_destroy(Solution sln);
|
void solution_destroy(Solution sln);
|
||||||
|
|
||||||
|
void solution_add_config_name(Solution sln, const char* config_name);
|
||||||
void solution_add_project(Solution sln, Project prj);
|
void solution_add_project(Solution sln, Project prj);
|
||||||
const char* solution_get_base_dir(Solution sln);
|
const char* solution_get_base_dir(Solution sln);
|
||||||
|
const char* solution_get_config_name(Solution sln, int index);
|
||||||
const char* solution_get_filename(Solution sln, const char* basename, const char* ext);
|
const char* solution_get_filename(Solution sln, const char* basename, const char* ext);
|
||||||
const char* solution_get_location(Solution sln);
|
const char* solution_get_location(Solution sln);
|
||||||
const char* solution_get_name(Solution sln);
|
const char* solution_get_name(Solution sln);
|
||||||
Project solution_get_project(Solution sln, int index);
|
Project solution_get_project(Solution sln, int index);
|
||||||
const char* solution_get_value(Solution sln, enum SolutionField field);
|
const char* solution_get_value(Solution sln, enum SolutionField field);
|
||||||
|
int solution_num_configs(Solution sln);
|
||||||
int solution_num_projects(Solution sln);
|
int solution_num_projects(Solution sln);
|
||||||
void solution_set_base_dir(Solution sln, const char* base_dir);
|
void solution_set_base_dir(Solution sln, const char* base_dir);
|
||||||
void solution_set_location(Solution sln, const char* location);
|
void solution_set_location(Solution sln, const char* location);
|
||||||
|
@ -72,6 +72,31 @@ SUITE(project)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Configuration containment tests
|
||||||
|
**********************************************************************/
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxSolution, NumConfigs_IsZero_OnStartup)
|
||||||
|
{
|
||||||
|
int result = solution_num_configs(sln);
|
||||||
|
CHECK(result == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxSolution, AddConfig_IncrementsNumConfigs)
|
||||||
|
{
|
||||||
|
solution_add_config_name(sln, "Debug");
|
||||||
|
int result = solution_num_configs(sln);
|
||||||
|
CHECK(result == 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_FIXTURE(FxSolution, AddConfig_CanRoundtrip)
|
||||||
|
{
|
||||||
|
solution_add_config_name(sln, "Debug");
|
||||||
|
const char* result = solution_get_config_name(sln, 0);
|
||||||
|
CHECK_EQUAL("Debug", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Location tests
|
* Location tests
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
Loading…
Reference in New Issue
Block a user