//////////////////////////////////////////////////////////////////////////////// // // Code::Blocks new project wizard script // // Project: Console application // Author: based on original script by Yiannis Mandravellos, // adjusting for DJGPP: adalbert // // Wizard scripts documentation can be found at: // http://wiki.codeblocks.org/index.php?title=Wizard_scripts // //////////////////////////////////////////////////////////////////////////////// multi_thread_dynamic <- true; //Default to Multi-thread. For MSVC only. ConsoleLang <- 1; // default to C++ WizardType <- 0; // 0 - Project, 1 - Target // //------------------------------------------------------------------------------ // function BeginWizard() { local wiz_type = Wizard.GetWizardType(); if (wiz_type == wizProject) { // this is the text that will appear in the start (intro) page local intro_msg = _T("Welcome to the new console application wizard!\n" + "This wizard will guide you to create a new console application.\n\n" + "When you 're ready to proceed, please click \"Next\"..."); // intro Wizard.AddInfoPage(_T("ConsoleIntro"), intro_msg); // select language Wizard.AddGenericSingleChoiceListPage(_T("ConsoleLanguagePage"), _T("Please select the language you want to use."), _T("C;C++"), ConsoleLang); // select language // select project name and path Wizard.AddProjectPathPage(); // select compiler and configurations Wizard.AddCompilerPage((GetCompilerFactory().GetCompilerIDByName(_T("DJGPP"))), _T("*"), true, true); } else if (wiz_type == wizTarget) { WizardType = 1; local intro_msg = _T("Welcome to the new console build target wizard!\n" + "This wizard will guide you to create a new console build target.\n\n" + "When you 're ready to proceed, please click \"Next\"..."); Wizard.AddInfoPage(_T("ConsoleIntro"), intro_msg); Wizard.AddBuildTargetPage(_T(""), false, true, (GetCompilerFactory().GetCompilerIDByName(_T("DJGPP"))), _T("*"), true); } } function OnEnter_CompilerPage(forward) { // we only care to initialize if going forward if (forward) { // This is kind of a hack, but tries to suggest the best default compiler for given configuration // Even if this function breaks, nothing terrible should happen // ID_CHECKBOX1 = debug checkbox local i = 0; for (i = 0; i < 99; i++) { Wizard.SetComboboxSelection( _T("ID_COMBOBOX1"), i ); local currCompiler = Wizard.GetComboboxStringSelection( _T("ID_COMBOBOX1") ); if (currCompiler == _T("DJGPP")) i = 100; Wizard.CheckCheckbox( _T("ID_CHECKBOX1") , false) // Disable debug, won't work anyway } } } function OnEnter_BuildTargetPage(forward) { // we only care to initialize if going forward if (forward) { // This is kind of a hack, but tries to suggest the best default compiler for given configuration // Even if this function breaks, nothing terrible should happen // ID_CHECKBOX1 = debug checkbox local i = 0; for (i = 0; i < 99; i++) { Wizard.SetComboboxSelection( _T("ID_COMBOBOX1"), i ); local currCompiler = Wizard.GetComboboxStringSelection( _T("ID_COMBOBOX1") ); if (currCompiler == _T("DJGPP")) i = 100; //Wizard.CheckCheckbox( _T("ID_CHECKBOX1") , false) // Disable debug, won't work anyway } } } //------------------------------------------------------------------------------ // Function OnEnter_ConsoleLanguagePage //------------------------------------------------------------------------------ function OnEnter_ConsoleLanguagePage(fwd) { Wizard.SetListboxSelection(_T("GenericChoiceList"), ConsoleLang); return true; } //------------------------------------------------------------------------------ // Function OnLeave_ConsoleLanguagePage //------------------------------------------------------------------------------ function OnLeave_ConsoleLanguagePage(fwd) { if (fwd) { ConsoleLang = Wizard.GetListboxSelection(_T("GenericChoiceList")); } return true; } // //------------------------------------------------------------------------------ // function OnLeave_CompilerPage(fwd) { if (fwd) { if (GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerID(), _T("msvctk")) || GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerID(), _T("msvc8")) || GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerID(), _T("msvc10"))) { local msg = _T("Wizard will setup the Project in Multi-threaded Dynamic CRT mode by default.\n\n"); msg = msg + _T("Click Yes to continue with Multi-threaded Dynamic CRT mode\n\n"); msg = msg + _T("Click No to continue with Multi-threaded Static CRT mode"); local thread = Message(msg, _T("Console Wizard"), wxICON_QUESTION | wxYES_NO); if (thread == wxID_YES) multi_thread_dynamic = true; else multi_thread_dynamic = false; } } return true; } // //------------------------------------------------------------------------------ // function GetFilesDir() { local result; // depending on the source type setting, return the appropriate value. if (ConsoleLang == 0) // C source file result = _T("console/c"); else // C++ source file result = _T("console/cpp"); return result; } // //------------------------------------------------------------------------------ // function SetupProject(project) { // NOTE: Major compiler system drawback here. // Until it is redesigned to allow easier compiler settings, // we have to check the compiler's ID and set options for different compilers... // We make things easier for scripts, by providing a few predefined functions // to setup common settings like "debug", "warnings", etc. // These functions are located in /common_functions.script. // If you add other commonly used functions or bug-fix anything in that file, // please share it with us :) // enable compiler warnings (project-wide) WarningsOn(project, Wizard.GetCompilerID()); /* // add additional libs for special compilers if (GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerIDByName(), _T("bcc"))) { project.AddLinkLib(_T("cw32mt.lib")); project.AddLinkLib(_T("import32.lib")); } */ // We setup the targets using SetupTarget() which is conveniently called by Code::Blocks // if we register this wizard as wizTarget type :) // This means that this very wizard can be used both as wizProject *and* as wizTarget ;) // Debug build target local target = project.GetBuildTarget(Wizard.GetDebugName()); if (!IsNull(target)) SetupTarget(target, true); // Release build target target = project.GetBuildTarget(Wizard.GetReleaseName()); if (!IsNull(target)) SetupTarget(target, false); //Add CPP Exception handling support if (ConsoleLang == 1) CppExceptionsOn(project, Wizard.GetCompilerID()); // all done! // try to open sample file in the editor local mainfile = ::wxString(); if (ConsoleLang==0) mainfile = _T("main.c"); else mainfile = _T("main.cpp"); local ed = GetEditorManager().Open( Wizard.GetProjectPath() + Wizard.GetProjectName() + wxFILE_SEP_PATH + mainfile ); /* if (IsNull(ed)) ShowError(_T("Could not open: " + Wizard.GetProjectPath() + Wizard.GetProjectName() + wxFILE_SEP_PATH + mainfile )); */ return true; } // //------------------------------------------------------------------------------ // function SetupTarget(target,is_debug) { if (IsNull(target)) return false; // if target wizard if (WizardType == 1) { target.SetOptionRelation(ortCompilerOptions, orUseTargetOptionsOnly); target.SetOptionRelation(ortLinkerOptions, orUseTargetOptionsOnly); } // Post-build commands to prepare exe file without dependencies local pb_exe2coff = ::wxString(); local pb_copycw = ::wxString(); local pb_deltemp = ::wxString(); pb_exe2coff = _T("$(APPPATH)\\utils\\exe2coff.exe \"$(PROJECT_DIR)$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).exe\""); pb_copycw = _T("cmd /C \"copy /B \"$(APPPATH)\\utils\\cwsdstub.exe\" + \"$(PROJECT_DIR)$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME)\" \"$(PROJECT_DIR)$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).exe\""); pb_deltemp = _T("cmd /C \"del \"$(PROJECT_DIR)$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME)\"\""); // Post-build commands to run built exe in DOSbox local pb_rundosbox = ::wxString(); pb_rundosbox = _T("\"$(APPPATH)\\dosboxx\\dbxlauncher.bat\" \"$(PROJECT_DIR)$(TARGET_OUTPUT_DIR)$(TARGET_OUTPUT_BASENAME).exe\""); // Add post-build commands to target target.AddCommandsAfterBuild(pb_exe2coff); target.AddCommandsAfterBuild(pb_copycw); target.AddCommandsAfterBuild(pb_deltemp); target.AddCommandsAfterBuild(pb_rundosbox); // This will run all above on each build (prepare EXE and run test in DOSbox) target.SetAlwaysRunPostBuildSteps(true); target.SetTargetType(ttConsoleOnly); // TODO (Biplab#9#): Wizard.GetProjectName() returns file extension when the wizard is of Target type. This bug needs to be fixed local ProjectName = (WizardType == 0) ? Wizard.GetProjectName() : target.GetParentProject().GetTitle(); target.SetUseConsoleRunner(false); if (is_debug) { local TargetName = (WizardType == 0) ? Wizard.GetDebugOutputDir() : Wizard.GetTargetOutputDir(); if (target.GetWorkingDir().Matches(_T(""))) target.SetOutputFilename(target.SuggestOutputFilename()); else //target.SetOutputFilename(Wizard.GetDebugOutputDir() + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE); target.SetOutputFilename(TargetName + ProjectName + DOT_EXT_EXECUTABLE); // enable debugging symbols for this target // DebugSymbolsOn(target, Wizard.GetTargetCompilerID()); // TODO: doesn't seem to work? DebugSymbolsOn(target, Wizard.GetCompilerID()); //Special consideration for MSVC 7.1 if (GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerID(), _T("msvctk")) || GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerID(), _T("msvc8")) || GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerID(), _T("msvc10"))) { if (!multi_thread_dynamic) { target.AddCompilerOption(_T("/MTd")); target.AddLinkLib(_T("libcmtd.lib")); target.AddLinkLib(_T("libcpmtd.lib")); } else { target.AddCompilerOption(_T("/MDd")); target.AddLinkLib(_T("msvcrtd.lib")); target.AddLinkLib(_T("msvcprtd.lib")); } } } else { local TargetName = (WizardType == 0) ? Wizard.GetReleaseOutputDir() : Wizard.GetTargetOutputDir(); if (target.GetWorkingDir().Matches(_T(""))) target.SetOutputFilename(target.SuggestOutputFilename()); else //target.SetOutputFilename(TargetName + Wizard.GetProjectName() + DOT_EXT_EXECUTABLE); target.SetOutputFilename(TargetName + ProjectName + DOT_EXT_EXECUTABLE); // enable optimizations for this target // OptimizationsOn(target, Wizard.GetTargetCompilerID()); // TODO: doesn't seem to work? OptimizationsOn(target, Wizard.GetCompilerID()); //Special consideration for MSVC 7.1 if (GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerID(), _T("msvctk")) || GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerID(), _T("msvc8")) || GetCompilerFactory().CompilerInheritsFrom(Wizard.GetCompilerID(), _T("msvc10"))) { if (!multi_thread_dynamic) { target.AddCompilerOption(_T("/MT")); target.AddLinkLib(_T("libcmt.lib")); target.AddLinkLib(_T("libcpmt.lib")); } else { target.AddCompilerOption(_T("/MD")); target.AddLinkLib(_T("msvcrt.lib")); target.AddLinkLib(_T("msvcprt.lib")); } } } // all done! return true; }