This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/share/CodeBlocks/templates/wizard/lf/wizard.script

240 lines
7.8 KiB
Plaintext

////////////////////////////////////////////////////////////////////////////////
//
// Lightfeather project wizard
//
////////////////////////////////////////////////////////////////////////////////
// globals
LFPath <- _T("");
LFQuickProject <- false;
//options
LF_NVidiaCg <- GetConfigManager().Read(_T("/lf_project_wizard/options/cgshaders"), true);
LF_NGPlant <- GetConfigManager().Read(_T("/lf_project_wizard/options/ngplant"), true);
LF_Net <- GetConfigManager().Read(_T("/lf_project_wizard/options/net"), false);
LF_WxCanvas <- GetConfigManager().Read(_T("/lf_project_wizard/options/wxcanvas"), false);
LF_LocalConfig <- GetConfigManager().Read(_T("/lf_project_wizard/options/localconfig"), false);
// TODO: lf-static
function BeginWizard()
{
// intro text
local intro_msg = _T("Welcome to the new Lightfeather project wizard!\n\n" +
"This wizard will guide you to create a new project\n" +
"using the Lightfeather 3D rendering engine.\n\n" +
"When you 're ready to proceed, please click \"Next\"...");
// "select LF path" text
local lfpath_descr = _T("Please select the location of Lightfeather on your computer.\n" +
"This is the top-level folder where Lightfeather was installed\n(unpacked).\n");
// "select LF project to generate" text
local lfprjtype_descr = _T("Please select the type of project to generate.");
local lfprj_choices = _T("Structured with C++ classes;Quick single-file testbed");
Wizard.AddInfoPage(_T("LFIntro"), intro_msg);
Wizard.AddProjectPathPage();
Wizard.AddGenericSelectPathPage(_T("LFPath"), lfpath_descr, _T("Please select Lightfeather's location:"), _T(""));
Wizard.AddGenericSingleChoiceListPage(_T("LFPrjType"), lfprjtype_descr, lfprj_choices, 0);
Wizard.AddPage(_T("LfOptions"));
// Wizard.AddCompilerPage(_T(""), _T("gcc*"), true, false); // no target selections
Wizard.SetCompilerDefault(_T("gcc"));
Wizard.SetDebugTargetDefaults(true, _T("Debug"), _T("Debug/"), _T("Debug/"));
Wizard.SetReleaseTargetDefaults(false, _T(""), _T(""), _T(""));
}
////////////////////////////////////////////////////////////////////////////////
// Lightfeather's path page
////////////////////////////////////////////////////////////////////////////////
function OnLeave_LFPath(fwd)
{
if (fwd)
{
// error string
local error =_T("The path you entered seems valid, but this wizard " +
"can't locate Lightfeather's files in it...");
local dir = Wizard.GetTextControlValue(_T("txtFolder")); // txtFolder is the text control in GenericSelectPathPage
local dir_nomacro = ReplaceMacros(dir, true);
// check for include files
if (!IO.FileExists(dir_nomacro + _T("/include/lf/Lightfeather.h")))
{
ShowError(error);
return false;
}
LFPath = dir;
}
return true;
}
////////////////////////////////////////////////////////////////////////////////
// Project type to create
////////////////////////////////////////////////////////////////////////////////
function OnLeave_LFPrjType(fwd)
{
if (fwd)
{
LFQuickProject = Wizard.GetListboxSelection(_T("GenericChoiceList")) == 1;
}
return true;
}
////////////////////////////////////////////////////////////////////////////////
// Lightfeather options
////////////////////////////////////////////////////////////////////////////////
function OnEnter_LfOptions(fwd)
{
Wizard.CheckCheckbox(_T("chkCG"), LF_NVidiaCg);
Wizard.CheckCheckbox(_T("chkNG"), LF_NGPlant);
Wizard.CheckCheckbox(_T("chkNet"), LF_Net);
Wizard.CheckCheckbox(_T("chkWx"), LF_WxCanvas);
Wizard.CheckCheckbox(_T("chkLocalConfig"), LF_LocalConfig);
}
function OnLeave_LfOptions(fwd)
{
LF_NVidiaCg = Wizard.IsCheckboxChecked(_T("chkCG"));
LF_NGPlant = Wizard.IsCheckboxChecked(_T("chkNG"));
LF_Net = Wizard.IsCheckboxChecked(_T("chkNet"));
LF_WxCanvas = Wizard.IsCheckboxChecked(_T("chkWx"));
LF_LocalConfig = Wizard.IsCheckboxChecked(_T("chkLocalConfig"));
GetConfigManager().Write(_T("/lf_project_wizard/options/cgshaders"), LF_NVidiaCg);
GetConfigManager().Write(_T("/lf_project_wizard/options/ngplant"), LF_NGPlant);
GetConfigManager().Write(_T("/lf_project_wizard/options/net"), LF_Net);
GetConfigManager().Write(_T("/lf_project_wizard/options/wxcanvas"), LF_WxCanvas);
GetConfigManager().Write(_T("/lf_project_wizard/options/localconfig"), LF_LocalConfig);
return true;
}
// return the files this project contains
function GetFilesDir()
{
local ret = _T("lf/files/common;");
if (LFQuickProject)
ret = ret + _T("lf/files/quick");
else
ret = ret + _T("lf/files/structured");
return ret;
}
// setup the already created project
function SetupProject(project)
{
// set a variable to reference lf's dir
project.SetVar(_T("lf"), LFPath, false);
// set defaults for all targets
if (PLATFORM != PLATFORM_MSW)
{
project.AddCompilerOption(_T("-fPIC"));
project.AddCompilerOption(_T("-DPIC"));
}
project.AddCompilerOption(_T("-DPNG_NO_ASSEMBLER_CODE"));
if (LF_NVidiaCg)
{
if (PLATFORM == PLATFORM_MSW)
{
project.AddIncludeDir(_T("$(lf)/ext/Cg/include"));
project.AddLibDir(_T("$(lf)/ext/Cg/lib/windows"));
}
project.AddCompilerOption(_T("-DHAVE_CG"));
}
if (LF_NGPlant)
{
if (PLATFORM == PLATFORM_MSW)
project.AddLibDir(_T("$(lf)/ext/ngplant/lib/devcpp"));
else if (PLATFORM == PLATFORM_GTK)
{
project.AddLibDir(_T("$(lf)/ext/ngplant/lib/linux"));
project.AddLibDir(_T("$(lf)/ext/ngplant/lib/linux64"));
}
else
project.AddLibDir(_T("$(lf)/ext/ngplant/lib/mac"));
project.AddIncludeDir(_T("$(lf)/ext/ngplant/include"));
project.AddCompilerOption(_T("-DHAVE_NGPLANT"));
}
if (LF_Net)
project.AddCompilerOption(_T("-DHAVE_NETWORK"));
if (LF_WxCanvas)
{
if (PLATFORM == PLATFORM_GTK)
{
project.AddCompilerOption(_T("`wx-config --cxxflags`"));
project.AddLinkerOption(_T("`wx-config --libs gl`"));
}
project.AddCompilerOption(_T("-DLF_HAVE_WX"));
}
if (LF_LocalConfig)
project.AddCompilerOption(_T("-DHAVE_LOCAL_LF_CONFIG"));
project.AddIncludeDir(_T("$(lf)/include"));
// first rename "default" target (index 0 - could do it by name too) to "Debug"
project.RenameBuildTarget(0, _T("Debug"));
local debugTarget = project.GetBuildTarget(0);
debugTarget.SetTargetType(ttConsoleOnly);
// and now duplicate it to create the rest of the targets
// (easier than creating new targets and adding files manually)
project.DuplicateBuildTarget(0, _T("Release"));
project.DuplicateBuildTarget(0, _T("Standard"));
local releaseTarget = project.GetBuildTarget(1);
local standardTarget = project.GetBuildTarget(2);
// Debug
TargetFinalSetup(debugTarget, "Debug", true, false);
// Release
TargetFinalSetup(releaseTarget, "Release", false, false);
// Standard
TargetFinalSetup(standardTarget, "Standard", true, false);
return true;
}
function TargetFinalSetup(target, dir, isDebug, isLib)
{
// just setup the different things per-target
target.SetOutputFilename(_T("bin/" + dir + "/") + Wizard.GetProjectTitle());
target.SetObjectOutput(_T("bin/obj/" + dir));
target.AddLibDir(_T("$(lf)/bin/" + dir));
target.AddLinkLib(_T("Lightfeather"));
if (isDebug)
{
target.AddCompilerOption(_T("-g"));
target.AddCompilerOption(_T("-DDEBUG"));
}
else
{
target.AddCompilerOption(_T("-O2"));
target.AddCompilerOption(_T("-s"));
}
if (isLib)
{
if (LF_NVidiaCg)
{
target.AddLinkLib(_T("Cg"));
target.AddLinkLib(_T("CgGL"));
}
target.AddLinkLib(_T("GL"));
target.AddLinkLib(_T("GLU"));
target.AddLinkLib(_T("Xxf86vm"));
target.AddLinkLib(_T("pthread"));
}
}