MsDevWizardAw.cpp
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:9k
- // MsDevWizardaw.cpp : implementation file
- //
- #include "stdafx.h"
- #include "MsDevWizard.h"
- #include "MsDevWizardaw.h"
- #include "chooser.h"
- #include <comdef.h>
- #include <atlbase.h>
- #include <fstream.h>
- #include <string.h>
- #ifdef _PSEUDO_DEBUG
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- // This is called immediately after the custom AppWizard is loaded. Initialize
- // the state of the custom AppWizard here.
- void CMsDevWizardAppWiz::InitCustomAppWiz()
- {
- // Create a new dialog chooser; CDialogChooser's constructor initializes
- // its internal array with pointers to the steps.
- m_pChooser = new CDialogChooser;
- // Set the maximum number of steps.
- SetNumberOfSteps(LAST_DLG);
- // TODO: Add any other custom AppWizard-wide initialization here.
- }
- static void MakeCustomBuild(const char * config, ostream & out)
- {
- out << "IF "$(CFG)" == "" << MsDevWizardaw.m_Dictionary["Root"] << " - Win32 " << config << ""n"
- "n"
- "# Begin Custom Build - Building event log resources.n"
- "InputDir=.n"
- "IntDir=.\Releasen"
- "TargetName=" << MsDevWizardaw.m_Dictionary["Root"] << "n"
- "InputPath=.\messages.mcn"
- "InputName=messagesn"
- "n"
- "BuildCmds= \n"
- "tmc -h $(IntDir) -r $(IntDir) $(InputPath) \n"
- "techo 1 ICON $(InputDir)\$(TargetName).ico >> $(IntDir)\$(InputName).rc \n";
- if (MsDevWizardaw.m_has_http)
- out << "techo RCINCLUDE $(InputDir)\custom.cxx >> $(IntDir)\$(InputName).rc \n";
- out << "trc -i$(IntDir) -fo$(IntDir)\$(InputName).res $(IntDir)\$(InputName).rc \n"
- "n"
- "n"
- ""$(IntDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
- "t$(BuildCmds)n"
- "n"
- ""$(IntDir)\$(InputName).rc" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
- "t$(BuildCmds)n"
- "n"
- ""$(IntDir)\MSG00001.bin" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
- "t$(BuildCmds)n"
- "n"
- ""$(IntDir)\$(InputName).res" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
- "t$(BuildCmds)n"
- "# End Custom Buildnn";
- }
- static void MakeResourceBuild(const char * config, ostream & out)
- {
- out << "IF "$(CFG)" == "" << MsDevWizardaw.m_Dictionary["Root"] << " - Win32 " << config << ""n"
- "n"
- "# Begin Custom Build - Building resources.n"
- "InputDir=.n"
- "IntDir=.\Releasen"
- "InputPath=.\resources.prcn"
- "InputName=resourcesn"
- "n"
- "BuildCmds= \n"
- "tpwrc -I "$(Include)" "
- "-o $(IntDir)\$(InputName).res "
- "-b $(InputName) $(InputPath)n"
- "n"
- ""$(InputDir)\$(InputName).h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
- "t$(BuildCmds)n"
- "n"
- ""$(InputDir)\$(InputName).cxx" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
- "t$(BuildCmds)n"
- "n"
- ""$(IntDir)\$(InputName).res" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"n"
- "t$(BuildCmds)n"
- "# End Custom Buildnn";
- }
- // This is called just before the custom AppWizard is unloaded.
- void CMsDevWizardAppWiz::ExitCustomAppWiz()
- {
- // Deallocate memory used for the dialog chooser
- ASSERT(m_pChooser != NULL);
- delete m_pChooser;
- m_pChooser = NULL;
- CString dsp_name = m_Dictionary["FULL_DIR_PATH"];
- if (dsp_name[dsp_name.GetLength()-1] != '\')
- dsp_name += "\";
- dsp_name += m_Dictionary["Root"] + ".dsp";
- CString dsp_name2 = dsp_name + "$";
- ifstream in = dsp_name;
- ofstream out = dsp_name2;
- if (!in.is_open() || !out.is_open()) {
- AfxMessageBox(IDS_PROJ_REWRITE);
- return;
- }
- char line[1000];
- while (!in.eof()) {
- in.getline(line, sizeof(line));
- if (strcmp(line, "# PROP BASE Use_MFC 2") == 0)
- out << "# PROP BASE Use_MFC 0n";
- else if (strcmp(line, "# PROP Use_MFC 2") == 0)
- out << "# PROP Use_MFC 0n";
- else if (strcmp(line, "SOURCE=.\precompile.cxx") == 0)
- out << line << "n# ADD CPP /Yc"" + m_Dictionary["HEADER_FILE"] + ""n";
- else if (strcmp(line, "SOURCE=.\custom.cxx") == 0)
- out << line << "n# SUBTRACT CPP /YX /Yc /Yun";
- else if (strcmp(line, "SOURCE=.\messages.mc") == 0) {
- out << line << "nn!";
- MakeCustomBuild("Release", out);
- out << "!ELSE";
- MakeCustomBuild("Debug", out);
- out << "!ENDIFnn";
- }
- else if (strcmp(line, "SOURCE=.\resources.prc") == 0) {
- out << "SOURCE=.\resources.cxxn"
- "# End Source Filen"
- "# Begin Source Filen"
- "n"
- << line << "nn!";
- MakeResourceBuild("Release", out);
- out << "!ELSE";
- MakeResourceBuild("Debug", out);
- out << "!ENDIFnn";
- }
- else
- out << line << 'n';
- }
- out.flush();
- out.close();
- in.close();
- if (remove(dsp_name) < 0)
- AfxMessageBox(IDS_PROJ_REWRITE);
- else if (rename(dsp_name2, dsp_name) < 0)
- AfxMessageBox(IDS_PROJ_REWRITE);
- }
- // This is called when the user clicks "Create..." on the New Project dialog
- // or "Next" on one of the custom AppWizard's steps.
- CAppWizStepDlg* CMsDevWizardAppWiz::Next(CAppWizStepDlg* pDlg)
- {
- // Delegate to the dialog chooser
- return m_pChooser->Next(pDlg);
- }
- // This is called when the user clicks "Back" on one of the custom
- // AppWizard's steps.
- CAppWizStepDlg* CMsDevWizardAppWiz::Back(CAppWizStepDlg* pDlg)
- {
- // Delegate to the dialog chooser
- return m_pChooser->Back(pDlg);
- }
- #import "idedevbld.pkg"
- void CMsDevWizardAppWiz::CustomizeProject(IBuildProject* pProject)
- {
- CString c_settings = "/Yu"" + m_Dictionary["HEADER_FILE"] + "" /W4 ";
- CString l_settings = "comdlg32.lib winspool.lib wsock32.lib mpr.lib "
- "kernel32.lib user32.lib gdi32.lib shell32.lib advapi32.lib ";
- if (!m_pwlib_dir.IsEmpty()) {
- if (m_pwlib_dir[m_pwlib_dir.GetLength()-1] != '\')
- m_pwlib_dir += "\";
- c_settings += "/I "" + m_pwlib_dir + "include\pwlib\mswin" "
- "/I "" + m_pwlib_dir + "include\ptlib\msos" "
- "/I "" + m_pwlib_dir + "include" ";
- l_settings += "/libpath:" + m_pwlib_dir + "lib ";
- }
- if (!m_has_gui && !m_is_service)
- l_settings += " /subsystem:console";
- // Needed to convert IBuildProject to the DSProjectSystem namespace
- using namespace DSProjectSystem;
- IBuildProjectPtr pProj;
- pProj.Attach((DSProjectSystem::IBuildProject*)pProject, true);
- IConfigurationsPtr pConfigs;
- if (pProj->get_Configurations(&pConfigs) != S_OK) {
- AfxMessageBox(IDS_PROJ_ERROR);
- return;
- }
- long count;
- if (pConfigs->get_Count(&count) != S_OK) {
- AfxMessageBox(IDS_PROJ_ERROR);
- return;
- }
- while (count > 0) {
- COleVariant index = count;
- IConfigurationPtr pConfig = pConfigs->Item(index);
- BSTR name;
- pConfig->get_Name(&name);
- static _bstr_t debug_str = "Debug";
- BOOL is_debug = wcsstr(name, debug_str) != NULL;
- COleVariant reserved(0L, VT_ERROR);
- reserved.scode = DISP_E_PARAMNOTFOUND;
- static _bstr_t cl_exe = "cl.exe";
- _bstr_t settings_bstr = "/D "_AFXDLL"";
- if (pConfig->RemoveToolSettings(cl_exe, settings_bstr, reserved) != S_OK) {
- AfxMessageBox(IDS_PROJ_ERROR);
- return;
- }
- settings_bstr = c_settings;
- if (pConfig->AddToolSettings(cl_exe, settings_bstr, reserved) != S_OK) {
- AfxMessageBox(IDS_PROJ_ERROR);
- return;
- }
- CString settings;
- if (m_has_gui) {
- settings = "pwclib";
- if (is_debug) // Debug configuration
- settings += "d";
- settings += ".lib pwlib";
- if (!m_use_dlls)
- settings += "s";
- if (is_debug) // Debug configuration
- settings += "d";
- settings += ".lib ";
- }
- settings += "ptclib";
- if (is_debug) // Debug configuration
- settings += "d";
- settings += ".lib ptlib";
- if (!m_use_dlls)
- settings += "s";
- if (is_debug) // Debug configuration
- settings += "d";
- settings += ".lib " + l_settings;
- static _bstr_t link_exe = "link.exe";
- settings_bstr = settings;
- if (pConfig->AddToolSettings(link_exe, settings_bstr, reserved) != S_OK) {
- AfxMessageBox(IDS_PROJ_ERROR);
- return;
- }
- count--;
- }
- }
- // Here we define one instance of the CMsDevWizardAppWiz class. You can access
- // m_Dictionary and any other public members of this class through the
- // global MsDevWizardaw.
- CMsDevWizardAppWiz MsDevWizardaw;