223 lines
9.1 KiB
Plaintext
223 lines
9.1 KiB
Plaintext
////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// OpenCV project wizard
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// globals (Windows platform only)
|
|
// This is the value string/macro be set as the initial value
|
|
// for the AddGenericSelectPathPage page when selecting the OpenCV root folder
|
|
OpenCVPathDefault <- _T("$(#cv)");
|
|
OpenCVPath <- _T("");
|
|
// default paths
|
|
OpenCVPathDefaultInc <- _T("$(#cv.include)");
|
|
OpenCVPathDefaultLib <- _T("$(#cv.lib)");
|
|
OpenCVPathDefaultBin <- _T("$(#cv.bin)");
|
|
// If there are already saved in configure file, read them, otherwise, use default values
|
|
OpenCVPathInc <- GetConfigManager().Read(_T("/opencv_project_wizard/options/inc"), OpenCVPathDefaultInc);
|
|
OpenCVPathLib <- GetConfigManager().Read(_T("/opencv_project_wizard/options/lib"), OpenCVPathDefaultLib);
|
|
OpenCVPathBin <- GetConfigManager().Read(_T("/opencv_project_wizard/options/bin"), OpenCVPathDefaultBin);
|
|
// OpenCV version
|
|
MajorVersion <- GetConfigManager().Read(_T("/opencv_project_wizard/versions/major"), 2);
|
|
MinorVersion <- GetConfigManager().Read(_T("/opencv_project_wizard/versions/minor"), 4);
|
|
RevisionVersion <- GetConfigManager().Read(_T("/opencv_project_wizard/versions/revision"), 4);
|
|
//For OpenCV 2.4.4, this string is "244"
|
|
VersionString <- _T("")
|
|
|
|
function BeginWizard()
|
|
{
|
|
local intro_msg = _T("Welcome to the new OpenCV project wizard!\n\n" +
|
|
"This wizard will guide you to create a new project\n" +
|
|
"using the OpenCV C++ library.\n\n" +
|
|
"When you 're ready to proceed, please click \"Next\"...");
|
|
|
|
local opencv_path_descr = _T("Please select the location of OpenCV library on your computer.\n" +
|
|
"This is the top-level folder where OpenCV was installed (unpacked).\n" +
|
|
"To help you, this folder must contain the subfolders\n" +
|
|
"\"include\" and \"lib\".");
|
|
|
|
Wizard.AddInfoPage(_T("OpenCVIntro"), intro_msg);
|
|
|
|
// select the directory where you place the new project files
|
|
Wizard.AddProjectPathPage();
|
|
|
|
// Note, here OpenCVPathDefault is just "$(#cv)"
|
|
// Get the values (major, minor, and revision number), and construct a version string
|
|
if (PLATFORM == PLATFORM_MSW)
|
|
{
|
|
Wizard.AddGenericSelectPathPage(_T("OpenCVPath"), opencv_path_descr, _T("Please select OpenCV's location:"), OpenCVPathDefault);
|
|
Wizard.AddPage(_T("VersionSelection"));
|
|
}
|
|
|
|
// default setting for debug/release options
|
|
Wizard.AddCompilerPage(_T(""), _T("*"), true, true);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// OpenCV's path page
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
function OnLeave_OpenCVPath(fwd)
|
|
{
|
|
if (fwd)
|
|
{
|
|
// txtFolder is the text control in GenericSelectPathPage
|
|
local dir = Wizard.GetTextControlValue(_T("txtFolder"));
|
|
local dir_nomacro = VerifyDirectory(dir); //expand macros
|
|
|
|
if (dir_nomacro.IsEmpty())
|
|
return false;
|
|
|
|
OpenCVPath = dir; // Remember the original selection.
|
|
LogDebug(dir);
|
|
LogDebug(dir_nomacro);
|
|
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
// Select the OpenCV version, because different OpenCV have different library names
|
|
function OnEnter_VersionSelection(forward)
|
|
{
|
|
// we only care to initialize if going forward
|
|
if (forward)
|
|
{
|
|
if (PLATFORM == PLATFORM_MSW)
|
|
{
|
|
Wizard.SetSpinControlValue(_T("ID_SPINCTRL1"), MajorVersion);
|
|
Wizard.SetSpinControlValue(_T("ID_SPINCTRL2"), MinorVersion);
|
|
Wizard.SetSpinControlValue(_T("ID_SPINCTRL3"), RevisionVersion);
|
|
Wizard.SetTextControlValue(_T("ID_TEXTCTRL1"), OpenCVPathInc);
|
|
Wizard.SetTextControlValue(_T("ID_TEXTCTRL2"), OpenCVPathLib);
|
|
Wizard.SetTextControlValue(_T("ID_TEXTCTRL3"), OpenCVPathBin);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
function OnLeave_VersionSelection(fwd)
|
|
{
|
|
if (fwd)
|
|
{
|
|
local Major = Wizard.GetSpinControlValue(_T("ID_SPINCTRL1"));
|
|
local Minor = Wizard.GetSpinControlValue(_T("ID_SPINCTRL2"));
|
|
local Revision = Wizard.GetSpinControlValue(_T("ID_SPINCTRL3"));
|
|
VersionString = _T(""); // set to empty string, then append three version numbers
|
|
VersionString += Major;
|
|
VersionString += Minor;
|
|
VersionString += Revision;
|
|
OpenCVPathInc = Wizard.GetTextControlValue(_T("ID_TEXTCTRL1"));
|
|
OpenCVPathLib = Wizard.GetTextControlValue(_T("ID_TEXTCTRL2"));
|
|
OpenCVPathBin = Wizard.GetTextControlValue(_T("ID_TEXTCTRL3"));
|
|
|
|
// check whether include file exist
|
|
local inc_nomacro = ReplaceMacros(OpenCVPathInc, true);
|
|
local test_inc_file = inc_nomacro + _T("\\opencv2\\opencv.hpp");
|
|
if (!IO.FileExists(test_inc_file))
|
|
{
|
|
ShowError(_T("The include path you entered seems invalid: File ")
|
|
+ test_inc_file + _T(" not found"));
|
|
return false;
|
|
}
|
|
|
|
// check whether lib file exist
|
|
local lib_nomacro = ReplaceMacros(OpenCVPathLib, true);
|
|
// first we check whether a release OpenCV library exists, which could have the name libopencv_core244.dll.a
|
|
// if we can't find a release version of OpenCV library, check a debug version exists, which
|
|
// may have the name libopencv_core244d.dll.a
|
|
local test_release_lib_file = lib_nomacro + _T("\\libopencv_core") + VersionString + _T(".dll.a");
|
|
local test_debug_lib_file = lib_nomacro + _T("\\libopencv_core") + VersionString + _T("d.dll.a");
|
|
if (IO.FileExists(test_release_lib_file))
|
|
{
|
|
; // find release version of OpenCV library
|
|
}
|
|
else if (IO.FileExists(test_debug_lib_file))
|
|
{
|
|
VersionString = VersionString + _T("d"); //find debug version of OpenCV library
|
|
}
|
|
else
|
|
{
|
|
ShowError(_T("The lib path you entered seems invalid: File ")
|
|
+ test_release_lib_file + _T(" or ") + test_debug_lib_file + _T(" not found"));
|
|
return false;
|
|
}
|
|
|
|
// save them in the configure file
|
|
GetConfigManager().Write(_T("/opencv_project_wizard/options/inc"), OpenCVPathInc);
|
|
GetConfigManager().Write(_T("/opencv_project_wizard/options/lib"), OpenCVPathLib);
|
|
GetConfigManager().Write(_T("/opencv_project_wizard/options/bin"), OpenCVPathBin);
|
|
GetConfigManager().Write(_T("/opencv_project_wizard/versions/major"), Major);
|
|
GetConfigManager().Write(_T("/opencv_project_wizard/versions/minor"), Minor);
|
|
GetConfigManager().Write(_T("/opencv_project_wizard/versions/revision"), Revision);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// return the files this project contains
|
|
function GetFilesDir()
|
|
{
|
|
return _T("opencv/files");
|
|
}
|
|
|
|
// setup the already created project
|
|
function SetupProject(project)
|
|
{
|
|
if (PLATFORM == PLATFORM_MSW)
|
|
{
|
|
// set project options
|
|
project.AddIncludeDir(OpenCVPathInc);
|
|
project.AddLibDir(OpenCVPathLib);
|
|
|
|
// This folder contains Dll files, when C::B start an App, it will
|
|
// automatically add the LibDir to PATH variable, so those Dll files
|
|
// can be find by the App.
|
|
project.AddLibDir(OpenCVPathBin);
|
|
|
|
project.SetVar(_T("CV_VERSION"), VersionString, false);
|
|
// add link libraries (basically, three libraries)
|
|
// For example, "opencv_core244.dll"
|
|
local prefix = _T("opencv_")
|
|
project.AddLinkLib(prefix + _T("imgproc") + _T("$(CV_VERSION).dll"));
|
|
project.AddLinkLib(prefix + _T("core") + _T("$(CV_VERSION).dll"));
|
|
project.AddLinkLib(prefix + _T("highgui") + _T("$(CV_VERSION).dll"));
|
|
}
|
|
else // PLATFORM != PLATFORM_MSW
|
|
{
|
|
// opencv-config based: things are ultra-simple :)
|
|
project.AddCompilerOption(_T("`opencv-config --cxxflags`"));
|
|
project.AddLinkerOption(_T("`opencv-config --ldstaticflags`"));
|
|
}
|
|
|
|
|
|
// Debug
|
|
local target = project.GetBuildTarget(Wizard.GetDebugName());
|
|
if (!IsNull(target))
|
|
{
|
|
target.SetTargetType(ttConsoleOnly); // ttConsoleOnly: console for debugging
|
|
target.SetOutputFilename(Wizard.GetDebugOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
|
|
if (Wizard.GetCompilerID().Matches(_T("gcc")))
|
|
{
|
|
// enable generation of debugging symbols for target
|
|
// Note: DebugSymbolsOn() won't work because -Wall produces far too many warnings
|
|
target.AddCompilerOption(_T("-g"));
|
|
}
|
|
}
|
|
|
|
// Release
|
|
target = project.GetBuildTarget(Wizard.GetReleaseName());
|
|
if (!IsNull(target))
|
|
{
|
|
target.SetTargetType(ttExecutable); // ttExecutable: no console
|
|
target.SetOutputFilename(Wizard.GetReleaseOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE);
|
|
if (Wizard.GetCompilerID().Matches(_T("gcc")))
|
|
{
|
|
// enable optimizations for target.
|
|
// Note: OptimizationsOn() won't work because of -I-!
|
|
target.AddCompilerOption(_T("-O2"));
|
|
target.AddCompilerOption(_T("-s"));
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|