#ifdef __WXMSW__
// this compiler is valid only in windows
#include <sdk.h>
#include "compilerOW.h"
#include <wx/log.h>
#include <wx/intl.h>
#include <wx/regex.h>
#include <wx/config.h>
#include <wx/utils.h>
#ifdef __WXMSW__
#include <wx/msw/registry.h>
#endif
#include <configmanager.h>
#include <messagemanager.h>
#include <manager.h>
#include <wx/utils.h>
#include <wx/filefn.h>
CompilerOW::CompilerOW()
: Compiler(wxT("OpenWatcom (W32) Compiler"))
{
Reset();
}
CompilerOW::~CompilerOW()
{
//dtor
}
Compiler * CompilerOW::CreateCopy()
{
return new CompilerOW(*this);
}
void CompilerOW::Reset()
{
/*
* Define compiler suite programs. I have chosen to use wcl386 for all
* to provide as consistent a set of options as possible.
*/
m_Programs.C = wxT("wcl386.exe");
m_Programs.CPP = wxT("wcl386.exe");
m_Programs.LD = wxT("wcl386.exe");
m_Programs.LIB = wxT("wlib.exe");
m_Programs.WINDRES = wxT("wrc.exe");
m_Programs.MAKE = wxT("mingw32-make.exe");
m_Switches.includeDirs = wxT("-i");
m_Switches.libDirs = wxT("-L");
m_Switches.linkLibs = wxT("");
m_Switches.libPrefix = wxT("");
m_Switches.libExtension = wxT("lib");
m_Switches.defines = wxT("-d");
m_Switches.genericSwitch = wxT("-");
m_Switches.objectExtension = wxT("obj");
m_Switches.needDependencies = false;
m_Switches.forceCompilerUseQuotes = false;
m_Switches.forceLinkerUseQuotes = false;
m_Switches.logging = clogSimple;
m_Switches.buildMethod = cbmDirect;
m_Switches.linkerNeedsLibPrefix = false;
m_Switches.linkerNeedsLibExtension = true;
m_Options.ClearOptions();
// m_Options.AddOption(_("Produce debugging symbols"),
// "-g",
// _("Debugging"),
// "",
// true,
// "-o -o+space",
// _("You have optimizations enabled. This is Not A Good Thing(tm) when producing debugging symbols..."));
wxString category = wxT("General");
m_Options.AddOption(wxT("treat source files as C code"), wxT("-cc"), category);
m_Options.AddOption(wxT("treat source files as C++ code"), wxT("-cc++"), category);
m_Options.AddOption(wxT("ignore the WCL386 environment variable"), wxT("-y"), category);
category = wxT("Processor options");
m_Options.AddOption(wxT("386 register calling conventions"), wxT("-3r"), category);
m_Options.AddOption(wxT("386 stack calling conventions"), wxT("-3s"), category);
m_Options.AddOption(wxT("486 register calling conventions"), wxT("-4r"), category);
m_Options.AddOption(wxT("486 stack calling conventions"), wxT("-4s"), category);
m_Options.AddOption(wxT("Pentium register calling conventions"), wxT("-5r"), category);
m_Options.AddOption(wxT("Pentium stack calling conventions"), wxT("-5s"), category);
m_Options.AddOption(wxT("Pentium Pro register call conventions"), wxT("-6r"), category);
m_Options.AddOption(wxT("Pentium Pro stack call conventions"), wxT("-6s"), category);
category = wxT("Floating-point processor options");
m_Options.AddOption(wxT("calls to floating-point library"), wxT("-fpc"), category);
m_Options.AddOption(wxT("enable Pentium FDIV check"), wxT("-fpd"), category);
m_Options.AddOption(wxT("inline 80x87 with emulation"), wxT("-fpi"), category);
m_Options.AddOption(wxT("inline 80x87"), wxT("-fpi87"), category);
m_Options.AddOption(wxT("use old floating-point conventions"), wxT("-fpr"), category);
m_Options.AddOption(wxT("generate 287 floating-point code"), wxT("-fp2"), category);
m_Options.AddOption(wxT("generate 387 floating-point code"), wxT("-fp3"), category);
m_Options.AddOption(wxT("optimize floating-point for Pentium"), wxT("-fp5"), category);
m_Options.AddOption(wxT("optimize floating-point for Pentium Pro"), wxT("-fp6"), category);
category = wxT("Compiler options");
m_Options.AddOption(wxT("compile and link for DOS"), wxT("-bcl=dos"), category);
m_Options.AddOption(wxT("compile and link for Linux"), wxT("-bcl=linux"), category);
m_Options.AddOption(wxT("compile and link for NT (includes Win32)"), wxT("-bcl=nt"), category);
m_Options.AddOption(wxT("compile and link for OS/2"), wxT("-bcl=os2"), category);
m_Options.AddOption(wxT("compile and link for QNX"), wxT("-bcl=qnx"), category);
m_Options.AddOption(wxT("compile and link for Windows"), wxT("-bcl=windows"), category);
m_Options.AddOption(wxT("compile for DOS"), wxT("-bt=dos"), category);
m_Options.AddOption(wxT("compile for Linux"), wxT("-bt=linux"), category);
m_Options.AddOption(wxT("compile for NetWare"), wxT("-bt=netware"), category);
m_Options.AddOption(wxT("compile for NetWare 5 and later"), wxT("-bt=netware5"), category);
m_Options.AddOption(wxT("compile for NT (includes Win32)"), wxT("-bt=nt"), category);
m_Options.AddOption(wxT("compile for OS/2"), wxT("-bt=os2"), category);
m_Options.AddOption(wxT("compile for QNX"), wxT("-bt=qnx"), category);
m_Options.AddOption(wxT("compile for Windows"), wxT("-bt=windows"), category);
m_Options.AddOption(wxT("generate browsing information"), wxT("-db"), category);
m_Options.AddOption(wxT("set error limit number (set ERROR_LIMIT in custom variables)"), wxT("-e=$(ERROR_LIMIT)"), category);
m_Options.AddOption(wxT("call epilogue hook routine"), wxT("-ee"), category);
m_Options.AddOption(wxT("full paths in messages"), wxT("-ef"), category);
m_Options.AddOption(wxT("force enums to be type int"), wxT("-ei"), category);
m_Options.AddOption(wxT("minimum base type for enum is int"), wxT("-em"), category);
m_Options.AddOption(wxT("emit routine names in the code"), wxT("-en"), category);
m_Options.AddOption(wxT("call prologue hook routine"), wxT("-ep"), category);
m_Options.AddOption(wxT("call prologue hook routine with n bytes of stack (set PROLOGUE_STACK in custom variables)"), wxT("-ep=$(PROLOGUE_STACK)"), category);
m_Options.AddOption(wxT("do not display error messages"), wxT("-eq"), category);
m_Options.AddOption(wxT("P5 profiling"), wxT("-et"), category);
m_Options.AddOption(wxT("generate PharLap EZ-OMF object"), wxT("-ez"), category);
m_Options.AddOption(wxT("generate pre-compiled header (set PCH_FILE in custom variables)"), wxT("-fh=$(PCH_FILE)"), category);
m_Options.AddOption(wxT("generate pre-compiled header (Quiet) (set PCH_FILE in custom variables)"), wxT("-fhq=$(PCH_FILE)"), category);
m_Options.AddOption(wxT("(C++) only read PCH"), wxT("-fhr"), category);
m_Options.AddOption(wxT("(C++) only write PCH"), wxT("-fhw"), category);
m_Options.AddOption(wxT("(C++) don't count PCH warnings"), wxT("-fhwe"), category);
// This should be a multiple option. We can define multiple force includes
m_Options.AddOption(wxT("force include of file (define FORCE_INCLUDE in custom variables)"), wxT("-fi=$(FORCE_INCLUDE)"), category);
// This one is mandatory in the ctCompileObjectCmd
//m_Options.AddOption(wxT("set object file name"), wxT("-fo=<file>"), category);
m_Options.AddOption(wxT("set error file name (define ERROR_FILE in custom variables)"), wxT("-fr=$(ERROR_FILE)"), category);
m_Options.AddOption(wxT("(C++) check for 8.3 file names"), wxT("-ft"), category);
m_Options.AddOption(wxT("(C++) no check for 8.3 file names"), wxT("-fx"), category);
m_Options.AddOption(wxT("set code group name (define CODEGROUP in custom variables)"), wxT("-g=$(CODEGROUP)"), category);
m_Options.AddOption(wxT("codeview debug format"), wxT("-hc"), category);
m_Options.AddOption(wxT("dwarf debug format"), wxT("-hd"), category);
m_Options.AddOption(wxT("watcom debug format"), wxT("-hw"), category);
m_Options.AddOption(wxT("change char default to signed"), wxT("-j"), category);
m_Options.AddOption(wxT("memory model flat"), wxT("-mf"), category);
m_Options.AddOption(wxT("memory model small"), wxT("-ms"), category);
m_Options.AddOption(wxT("memory model medium"), wxT("-mm"), category);
m_Options.AddOption(wxT("memory model compact"), wxT("-mc"), category);
m_Options.AddOption(wxT("memory model large"), wxT("-ml"), category);
m_Options.AddOption(wxT("memory model huge"), wxT("-mh"), category);
m_Options.AddOption(wxT("set CODE class name (define CODECLASS in custom variables)"), wxT("-nc=$(CODECLASS)"), category);
m_Options.AddOption(wxT("set data segment name (define DATANAME in custom variables)"), wxT("-nd=$(DATANAME)"), category);
m_Options.AddOption(wxT("set module name (define MODULENAME in custom variables)"), wxT("-nm=$(MODULENAME)"), category);
m_Options.AddOption(wxT("set text segment name (define TEXTNAME in custom variables)"), wxT("-nt=$(TEXTNAME)"), category);
m_Options.AddOption(wxT("save/restore segregs across calls"), wxT("-r"), category);
m_Options.AddOption(wxT("promote function args/rets to int"), wxT("-ri"), category);
m_Options.AddOption(wxT("remove stack overflow checks"), wxT("-s"), category);
m_Options.AddOption(wxT("generate calls to grow the stack"), wxT("-sg"), category);
m_Options.AddOption(wxT("touch stack through SS first"), wxT("-st"), category);
m_Options.AddOption(wxT("output func declarations to .def"), wxT("-v"), category);
m_Options.AddOption(wxT("VC++ compat: alloca allowed in arg lists"), wxT("-vcap"), category);
m_Options.AddOption(wxT("set warning level to 0 (suppress warnings)"), wxT("=w=0"), category);
m_Options.AddOption(wxT("set warning level to 1"), wxT("-w=1"), category);
m_Options.AddOption(wxT("set warning level to 2"), wxT("-w=2"), category);
m_Options.AddOption(wxT("set warning level to 3"), wxT("-w=3"), category);
m_Options.AddOption(wxT("disable warning message (define DIS_WARN in custom variables)"), wxT("-wcd=$(DIS_WARN)"), category);
m_Options.AddOption(wxT("enable warning message (define ENA_WARN in custom variables)"), wxT("-wce=$(ENA_WARN)"), category);
m_Options.AddOption(wxT("treat all warnings as errors"), wxT("-we"), category);
m_Options.AddOption(wxT("set warning level to max"), wxT("-wx"), category);
m_Options.AddOption(wxT("(C++) enable RTTI"), wxT("-xr"), category);
m_Options.AddOption(wxT("disable language extensions (ANSI/ISO compliance)"), wxT("-za"), category);
m_Options.AddOption(wxT("enable language extensions"), wxT("-ze"), category);
m_Options.AddOption(wxT("place strings in CODE segment"), wxT("-zc"), category);
m_Options.AddOption(wxT("DS not pegged to DGROUP"), wxT("-zdf"), category);
m_Options.AddOption(wxT("DS pegged to DGROUP"), wxT("-zdp"), category);
m_Options.AddOption(wxT("load DS directly from DGROUP"), wxT("-zdl"), category);
m_Options.AddOption(wxT("Allow code-generator to use FS"), wxT("-zff"), category);
m_Options.AddOption(wxT("Do not allow code-generator to use FS"), wxT("-zfp"), category);
m_Options.AddOption(wxT("Allow code-generator to use GS"), wxT("-zgf"), category);
m_Options.AddOption(wxT("Do not allow code-generator to use GS"), wxT("-zgp"), category);
m_Options.AddOption(wxT("Allow arithmetic on void derived type"), wxT("-zev"), category);
m_Options.AddOption(wxT("function prototype using base type"), wxT("-zg"), category);
// Duplicate to -zk0
//m_Options.AddOption(wxT("Double byte chars in strings (Japanese DBCS)"), wxT("-zk"), category);
m_Options.AddOption(wxT("Double byte chars in strings (Japanese DBCS)"), wxT("-zk0"), category);
m_Options.AddOption(wxT("Double byte chars in strings (Japanese DBCS - translate to Unicode)"), wxT("-zk0u"), category);
m_Options.AddOption(wxT("Double byte chars in strings (Trad Chinese or Taiwanese DBCS)"), wxT("-zk1"), category);
m_Options.AddOption(wxT("Double byte chars in strings (Korean Hangeul) DBCS)"), wxT("-zk2"), category);
m_Options.AddOption(wxT("Double byte chars in strings (Use current code page)"), wxT("-zkl"), category);
m_Options.AddOption(wxT("Translate characters to Unicode (specify UNI_CP in custom variables)"), wxT("-zku=$(UNI_CP)"), category);
m_Options.AddOption(wxT("remove default library information"), wxT("-zl"), category);
m_Options.AddOption(wxT("remove file dependency information"), wxT("-zld"), category);
m_Options.AddOption(wxT("place functions in separate segments"), wxT("-zm"), category);
m_Options.AddOption(wxT("(C++) zm with near calls allowed"), wxT("-zmf"), category);
m_Options.AddOption(wxT("struct packing align 1 byte"), wxT("-zp1"), category);
m_Options.AddOption(wxT("struct packing align 2 byte"), wxT("-zp2"), category);
m_Options.AddOption(wxT("struct packing align 4 byte"), wxT("-zp4"), category);
m_Options.AddOption(wxT("struct packing align 8 byte"), wxT("-zp8"), category);
m_Options.AddOption(wxT("struct packing align 16 byte"), wxT("-zp16"), category);
m_Options.AddOption(wxT("warning when padding a struct"), wxT("-zpw"), category);
m_Options.AddOption(wxT("operate quietly"), wxT("-zq"), category);
m_Options.AddOption(wxT("check syntax only"), wxT("-zs"), category);
m_Options.AddOption(wxT("set data threshold (set DATA_THRESHOLD in custom variables)"), wxT("-zt=$(DATA_THRESHOLD)"), category);
m_Options.AddOption(wxT("Do not assume SS contains DGROUP"), wxT("-zu"), category);
m_Options.AddOption(wxT("(C++) enable virt. fun. removal opt"), wxT("-zv"), category);
m_Options.AddOption(wxT("generate code for MS Windows"), wxT("-zw"), category);
m_Options.AddOption(wxT("remove @size from __stdcall func."), wxT("-zz"), category);
category = wxT("Debugging options");
m_Options.AddOption(wxT("no debugging information"), wxT("-d0"), category);
m_Options.AddOption(wxT("line number debugging information"), wxT("-d1"), category);
m_Options.AddOption(wxT("(C) line number debugging information plus typing information for global symbols and local structs and arrays"), wxT("-d1+"), category);
m_Options.AddOption(wxT("full symbolic debugging information"), wxT("-d2"), category);
m_Options.AddOption(wxT("(C++) d2 and debug inlines; emit inlines as external out-of-line functions"), wxT("-d2i"), category);
m_Options.AddOption(wxT("(C++) d2 and debug inlines; emit inlines as static out-of-line functions"), wxT("-d2s"), category);
m_Options.AddOption(wxT("(C++) d2 but without type names"), wxT("-d2t"), category);
m_Options.AddOption(wxT("full symbolic debugging with unreferenced type names"), wxT("-d3"), category);
m_Options.AddOption(wxT("(C++) d3 plus debug inlines; emit inlines as external out-of-line functions"), wxT("-d3i"), category);
m_Options.AddOption(wxT("(C++) d3 plus debug inlines; emit inlines as static out-of-line functions"), wxT("-d3s"), category);
category = wxT("Optimization options");
m_Options.AddOption(wxT("relax alias checking"), wxT("-oa"), category);
m_Options.AddOption(wxT("branch prediction"), wxT("-ob"), category);
m_Options.AddOption(wxT("disable call/ret optimization"), wxT("-oc"), category);
m_Options.AddOption(wxT("disable optimizations"), wxT("-od"), category);
m_Options.AddOption(wxT("expand functions inline (specify INLINE_NUM in custom variables)"), wxT("-oe=$(INLINE_NUM)"), category);
m_Options.AddOption(wxT("generate traceable stack frames"), wxT("-of"), category);
m_Options.AddOption(wxT("always generate traceable stack frames"), wxT("-of+"), category);
m_Options.AddOption(wxT("enable repeated optimizations"), wxT("-oh"), category);
m_Options.AddOption(wxT("inline intrinsic functions"), wxT("-oi"), category);
m_Options.AddOption(wxT("(C++) oi with max inlining depth"), wxT("-oi+"), category);
m_Options.AddOption(wxT("control flow entry/exit sequence"), wxT("-ok"), category);
m_Options.AddOption(wxT("perform loop optimizations"), wxT("-ol"), category);
m_Options.AddOption(wxT("ol with loop unrolling"), wxT("-ol+"), category);
m_Options.AddOption(wxT("generate inline math functions"), wxT("-om"), category);
m_Options.AddOption(wxT("numerically unstable floating-point"), wxT("-on"), category);
m_Options.AddOption(wxT("continue compile when low on memory"), wxT("-oo"), category);
m_Options.AddOption(wxT("improve floating-point consistency"), wxT("-op"), category);
m_Options.AddOption(wxT("re-order instructions to avoid stalls"), wxT("-or"), category);
m_Options.AddOption(wxT("optimize for space"), wxT("-os"), category);
m_Options.AddOption(wxT("optimize for time"), wxT("-ot"), category);
m_Options.AddOption(wxT("ensure unique addresses for functions"), wxT("-ou"), category);
m_Options.AddOption(wxT("maximum optimization (-obmiler -s)"), wxT("-ox"), category);
category = wxT("C++ exception handling options");
m_Options.AddOption(wxT("no exception handling"), wxT("-xd"), category);
m_Options.AddOption(wxT("no exception handling: space"), wxT("-xds"), category);
// duplicate to -xd
//m_Options.AddOption(wxT("no exception handling"), wxT("-xdt"), category);
m_Options.AddOption(wxT("exception handling: balanced"), wxT("-xs"), category);
m_Options.AddOption(wxT("exception handling: space"), wxT("-xss"), category);
m_Options.AddOption(wxT("exception handling: time"), wxT("-xst"), category);
category = wxT("Preprocessor options");
// defined in m_Switches.defines
// m_Options.AddOption(wxT("Define macro"), wxT("-d"), category);
// difficult to support
// m_Options.AddOption(wxT("Extend -d syntax"), wxT(""), category);
// This one is mandatory in the ctCompileObjectCmd
// m_Options.AddOption(wxT("set object file name"), wxT("-fo=<file>"), category);
// Specified by m_Switches.includeDirs
// m_Options.AddOption(wxT("include directory"), wxT("-i"), category);
m_Options.AddOption(wxT("number of spaces in tab stop (set TAB_STOP in custom variables)"), wxT("-t=$(TAB_STOP)"), category);
// multi-option
//m_Options.AddOption(wxT("set #pragma on"), wxT("-tp=$(PRAGMA_NAMES)"), category);
// multi-option
//m_Options.AddOption(wxT("undefine macro name"), wxT("-u"), category);
/*
* options are -pcelw=n
*/
m_Options.AddOption(wxT("preprocess source file"), wxT("-p"), category);
m_Options.AddOption(wxT("preprocess source file (preserve comments)"), wxT("-pc"), category);
m_Options.AddOption(wxT("preprocess source file (insert #line directives)"), wxT("-pl"), category);
m_Options.AddOption(wxT("(C++) preprocess file (encrypt identifiers)"), wxT("-pe"), category);
//
category = wxT("Linker options");
m_Options.AddOption(wxT("build Dynamic link library"), wxT("-bd"), category);
m_Options.AddOption(wxT("build Multi-thread application"), wxT("-bm"), category);
m_Options.AddOption(wxT("build with dll run-time library"), wxT("-br"), category);
m_Options.AddOption(wxT("build default Windowing appllication"), wxT("-bw"), category);
m_Options.AddOption(wxT("write directives"), wxT("-fd"), category);
m_Options.AddOption(wxT("write directives (define DIRECTIVE_FILE in custom variables)"), wxT("-fd=$(DIRECTIVE_FILE)"), category);
// mandatory in link commands
//m_Options.AddOption(wxT("name executable file"), wxT("-fe=<file>"), category);
m_Options.AddOption(wxT("generate map file"), wxT("-fm"), category);
m_Options.AddOption(wxT("generate map file (define MAP_FILE in custom variables)"), wxT("-fm=$(MAP_FILE)"), category);
m_Options.AddOption(wxT("set stack size (define STACK_SIZE in custom variables)"), wxT("-k$(STACK_SIZE)"), category);
m_Options.AddOption(wxT("link for the specified OS (define TARGET_OS in custom variables)"), wxT("-l=$(TARGET_OS)"), category);
m_Options.AddOption(wxT("make names case sensitive"), wxT("-x"), category);
m_Options.AddOption(wxT("additional directive file (specify LINK_DIRECTIVES in custom variables)"), wxT("@$(LINK_VARIABLES)"), category);
// ????
// m_Options.AddOption(wxT("following parameters are linker options"), wxT("-"), category);
m_Commands[(int)ctCompileObjectCmd]
= wxT("$compiler -c $options $includes -fo=$object $file");
m_Commands[(int)ctCompileResourceCmd]
= wxT("$rescomp -fo=$resource_output $res_includes $file");
m_Commands[(int)ctLinkExeCmd]
= wxT("$linker $link_options $libdirs $link_objects -fe=$exe_output $libs $link_resobjects");
m_Commands[(int)ctLinkConsoleExeCmd]
= wxT("$linker $link_options $libdirs $link_objects -fe=$exe_output $libs $link_resobjects");
m_Commands[(int)ctLinkDynamicCmd]
= wxT("$linker -$libdirs -fe=$exe_output $libs $link_objects $link_options");
m_Commands[(int)ctLinkStaticCmd]
= wxT("$lib_linker $static_output $link_objects");
LoadDefaultRegExArray();
m_CompilerOptions.Clear();
m_LinkerOptions.Clear();
m_LinkLibs.Clear();
m_CmdsBefore.Clear();
m_CmdsAfter.Clear();
}
void CompilerOW::LoadDefaultRegExArray()
{
m_RegExes.Clear();
m_RegExes.Add(RegExStruct(_("Note"), cltError, wxT("([A-Za-z0-9_:/\\.-]+)\\(([0-9]+)\\): Note! (.+)"), 3, 1, 2));
m_RegExes.Add(RegExStruct(_("Compiler error"), cltError, wxT("([A-Za-z0-9_:/\\.-]+)\\(([0-9]+)\\): Error! (.+)"), 3, 1, 2));
m_RegExes.Add(RegExStruct(_("Compiler warning"), cltWarning, wxT("([A-Za-z0-9_:/\\.-]+)\\(([0-9]+)\\): Warning! (.+)"), 3, 1, 2));
}
AutoDetectResult CompilerOW::AutoDetectInstallationDir()
{
#ifdef __WXMSW__
wxLogNull ln;
wxRegKey key; // defaults to HKCR
key.SetName(wxT("HKEY_LOCAL_MACHINE\\Software\\Open Watcom\\c_1.0"));
if (key.Open())
// found; read it
key.QueryValue(wxT("Install Location"), m_MasterPath);
if (m_MasterPath.IsEmpty())
// just a guess; the default installation dir
m_MasterPath = wxT("C:\\watcom");
if (!m_MasterPath.IsEmpty())
{
AddIncludeDir(m_MasterPath + wxFILE_SEP_PATH + wxT("h"));
AddIncludeDir(m_MasterPath + wxFILE_SEP_PATH + wxT("h") + wxFILE_SEP_PATH + wxT("nt"));
m_ExtraPaths.Add(m_MasterPath + wxFILE_SEP_PATH + wxT("binnt"));
m_ExtraPaths.Add(m_MasterPath + wxFILE_SEP_PATH + wxT("binw"));
}
#endif
wxSetEnv(wxT("WATCOM"), m_MasterPath);
return wxFileExists(m_MasterPath + wxFILE_SEP_PATH + wxT("binnt") + wxFILE_SEP_PATH + m_Programs.C) ? adrDetected : adrGuessed;
}
void CompilerOW::LoadSettings(const wxString& baseKey)
{
Compiler::LoadSettings(baseKey);
wxSetEnv(wxT("WATCOM"), m_MasterPath);
}
void CompilerOW::SetMasterPath(const wxString& path)
{
Compiler::SetMasterPath(path);
wxSetEnv(wxT("WATCOM"), m_MasterPath);
}
#endif // __WXMSW__
syntax highlighted by Code2HTML, v. 0.9.1