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/ogre/wizard.script

255 lines
9.6 KiB
Plaintext
Raw Permalink Normal View History

////////////////////////////////////////////////////////////////////////////////
//
// Ogre3D project wizard
//
// TODO: make it work with both available SDKs: MinGW & MSVS
//
////////////////////////////////////////////////////////////////////////////////
// globals
OgrePath <- _T("");
// we have two possible types of OGRE SDK installation:
// 1) Source distribution
// : identical configuration for both linux and windows (except link libs)
// 2) Pre-made SDK
// : in windows, small changes
// : in linux we use pkg-config for setting up everything
// This var is true for 1, false for 2.
OgreIsSource <- false;
function BeginWizard()
{
// intro text
local intro_msg = _T("Welcome to the new OGRE project wizard!\n\n" +
"This wizard will guide you to create a new project\n" +
"using the OGRE 3D rendering engine.\n\n" +
"When you 're ready to proceed, please click \"Next\"...");
// "select OGRE path" text
local ogrepath_descr = _T("Please select the location of OGRE on your computer.\n" +
"This is the top-level folder where OGRE was installed\n(unpacked).\n" +
"To help you, this folder must contain the subfolders\n" +
"\"include\" and \"lib\".\n" +
"If you have setup an environment variable named\n" +
"OGRE_HOME, it 'll automatically be used below.");
// source or SDK?
local sdk_descr = _T("OGRE might exist on your system as a source package\n" +
"(you built it yourself), or as a pre-made SDK which you installed.\n\n" +
"It is important for this wizard to know which SDK type is\n" +
"installed so that it can setup your project properly.");
// choices
local sdk_choices = _T("I have a folder with the OGRE source code;" +
"I have installed a pre-made OGRE SDK");
// compilers: GCC and MSVC for windows, GCC for linux
local compilers = PLATFORM == PLATFORM_MSW
? _T("gcc*;msv*")
: _T("gcc*");
Wizard.AddInfoPage(_T("OgreIntro"), intro_msg);
Wizard.AddProjectPathPage();
Wizard.AddGenericSingleChoiceListPage(_T("OgreSDKType"), sdk_descr, sdk_choices, OgreIsSource ? 0 : 1);
Wizard.AddGenericSelectPathPage(_T("OgrePath"), ogrepath_descr, _T("Please select OGRE's location:"), _T("$(OGRE_HOME)"));
Wizard.AddCompilerPage(_T(""), compilers, true, true);
}
////////////////////////////////////////////////////////////////////////////////
// OGRE SDK's type
////////////////////////////////////////////////////////////////////////////////
function OnGetNextPage_OgreSDKType()
{
// for pre-made SDK under linux, skip OGRE path selection
// we will use pkg-config for this ;)
OgreIsSource = Wizard.GetListboxSelection(_T("lstSelections")) == 0;
if (PLATFORM != PLATFORM_MSW && !OgreIsSource)
return _T("CompilerPage");
return _T("OgrePath");
}
////////////////////////////////////////////////////////////////////////////////
// OGRE's compiler
////////////////////////////////////////////////////////////////////////////////
function OnGetPrevPage_CompilerPage()
{
// for pre-made SDK under linux, skip OGRE path selection
// we will use pkg-config for this ;)
if (PLATFORM != PLATFORM_MSW && !OgreIsSource)
return _T("OgreSDKType");
return _T("OgrePath");
}
////////////////////////////////////////////////////////////////////////////////
// OGRE's path page
////////////////////////////////////////////////////////////////////////////////
function OnLeave_OgrePath(fwd)
{
if (fwd)
{
local dir = Wizard.GetTextControlValue(_T("txtFolder")); // txtFolder is the text control in GenericSelectPathPage
local dir_nomacro = ReplaceMacros(dir, true);
if ((OgreIsSource && !IO.FileExists(dir_nomacro + _T("/OgreMain/include/Ogre.h"))) ||
(!OgreIsSource && !IO.FileExists(dir_nomacro + _T("/include/Ogre.h"))))
{
ShowError(_T("The path you entered seems valid, but this wizard " +
"can't locate OGRE's files in it..."));
return false;
}
OgrePath = dir;
}
return true;
}
// return the files this project contains
function GetFilesDir()
{
return _T("ogre/files");
}
// setup the already created project
function SetupProject(project)
{
// set project options
// Windows platform
if (PLATFORM == PLATFORM_MSW)
{
if (!OgreIsSource) // SDK
{
// project.AddIncludeDir(OgrePath + _T("/stlport/stlport"));
project.AddIncludeDir(OgrePath + _T("/include"));
project.AddIncludeDir(OgrePath + _T("/samples/include"));
project.AddIncludeDir(OgrePath + _T("/samples/refapp/include"));
project.AddLibDir(OgrePath + _T("/lib"));
// project.AddCompilerOption(_T("-D_STLP_NO_CUSTOM_IO"));
// project.AddCompilerOption(_T("-D_STLP_USE_DYNAMIC_LIB"));
}
project.AddCompilerOption(_T("-mthreads"));
project.AddCompilerOption(_T("-fmessage-length=0"));
project.AddCompilerOption(_T("-fexceptions"));
project.AddCompilerOption(_T("-fident"));
project.AddCompilerOption(_T("-DWIN32"));
project.AddCompilerOption(_T("-D_WINDOWS"));
// project.AddLinkLib(_T("opengl32"));
// project.AddLinkLib(_T("gdi32"));
// project.AddLinkLib(_T("user32"));
// project.AddLinkLib(_T("kernel32"));
// help the linker
project.AddLinkerOption(_T("-Wl,--enable-runtime-pseudo-reloc"));
project.AddLinkerOption(_T("-Wl,--enable-auto-image-base"));
project.AddLinkerOption(_T("-Wl,--add-stdcall-alias"));
project.AddLinkerOption(_T("-mthreads"));
}
else
{
if (!OgreIsSource) // SDK
{
project.AddCompilerOption(_T("`pkg-config --cflags OGRE`"));
project.AddLinkerOption(_T("`pkg-config --libs OGRE`"));
}
project.AddLinkLib(_T("GL"));
}
if (OgreIsSource) // source: common for windows and linux
{
project.AddIncludeDir(OgrePath + _T("/OgreMain/include"));
project.AddIncludeDir(OgrePath + _T("/Samples/Common/include"));
// lib dirs are different based on Debug/Release targets
}
// enable compiler warnings (project-wide)
WarningsOn(project, Wizard.GetCompilerID());
// enable C++ exceptions (project-wide)
CppExceptionsOn(project, Wizard.GetCompilerID());
// Debug
local target = project.GetBuildTarget(Wizard.GetDebugName());
if (!IsNull(target))
{
target.SetTargetType(ttConsoleOnly); // ttConsoleOnly: console for debugging
if (OgreIsSource)
target.SetWorkingDir(OgrePath + _T("/Samples/Common/bin/Debug"));
else if (PLATFORM == PLATFORM_MSW)
target.SetWorkingDir(OgrePath + _T("/bin/Debug"));
project.AddLibDir(OgrePath + _T("/bin/Debug"));
// TODO: linux package contains samples?
if (target.GetWorkingDir().Matches(_T("")))
target.SetOutputFilename(target.SuggestOutputFilename());
else
target.SetOutputFilename(target.GetWorkingDir() + wxFILE_SEP_PATH + target.SuggestOutputFilename());
// target.SetOutputFilename(Wizard.GetDebugOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
if (PLATFORM == PLATFORM_MSW)
{
target.AddLinkLib(_T("OgreMain_d"));
target.AddLinkLib(_T("OIS_d"));
target.AddCompilerOption(_T("-D_DEBUG"));
// // windows SDK uses STLport
// if (!OgreIsSource)
// {
// target.AddCompilerOption(_T("-D_STLP_DEBUG"));
// target.AddLinkLib(_T("stlportstlg.5.0"));
// }
}
else
{
target.AddLinkLib(_T("OgreMain"));
target.AddLinkLib(_T("OIS"));
}
if (OgreIsSource)
target.AddLibDir(OgrePath + _T("/OgreMain/lib/Debug"));
// enable generation of debugging symbols for target
DebugSymbolsOn(target, Wizard.GetCompilerID());
}
// Release
target = project.GetBuildTarget(Wizard.GetReleaseName());
if (!IsNull(target))
{
target.SetTargetType(ttExecutable); // ttExecutable: no console
if (OgreIsSource)
target.SetWorkingDir(OgrePath + _T("/Samples/Common/bin/Release"));
else if (PLATFORM == PLATFORM_MSW)
target.SetWorkingDir(OgrePath + _T("/bin/Release"));
project.AddLibDir(OgrePath + _T("/bin/Release"));
// TODO: linux package contains samples?
if (target.GetWorkingDir().Matches(_T("")))
target.SetOutputFilename(target.SuggestOutputFilename());
else
target.SetOutputFilename(target.GetWorkingDir() + wxFILE_SEP_PATH + target.SuggestOutputFilename());
// target.SetOutputFilename(Wizard.GetReleaseOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
target.AddLinkLib(_T("OgreMain"));
target.AddLinkLib(_T("OIS"));
if (PLATFORM == PLATFORM_MSW)
{
target.AddCompilerOption(_T("-DNDEBUG"));
// // windows SDK uses STLport
// if (!OgreIsSource)
// target.AddLinkLib(_T("stlport.5.0"));
}
if (OgreIsSource)
target.AddLibDir(OgrePath + _T("/OgreMain/lib/Release"));
// enable optimizations for target
OptimizationsOn(target, Wizard.GetCompilerID());
}
return true;
}