diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index c866558..5134598 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -11,6 +11,9 @@
 Igor Afanasyev <afan@evernote.com>
 -Perl HttpClient and bugfixes
 
+Todd Berman <tberman@imeem.com>
+- MinGW port of the compiler.
+
 ----------------
 Release 20070917
 ----------------
diff --git a/compiler/cpp/Makefile.am b/compiler/cpp/Makefile.am
index 921a6a9..2c0368c 100644
--- a/compiler/cpp/Makefile.am
+++ b/compiler/cpp/Makefile.am
@@ -23,6 +23,7 @@
                  src/generate/t_st_generator.cc \
                  src/globals.h \
                  src/main.h \
+                 src/platform.h \
                  src/md5.h \
                  src/parse/t_doc.h \
                  src/parse/t_type.h \
diff --git a/compiler/cpp/src/generate/t_cocoa_generator.cc b/compiler/cpp/src/generate/t_cocoa_generator.cc
index fc85365..1356c35 100644
--- a/compiler/cpp/src/generate/t_cocoa_generator.cc
+++ b/compiler/cpp/src/generate/t_cocoa_generator.cc
@@ -8,6 +8,7 @@
 #include <sys/stat.h>
 #include <sstream>
 #include "t_cocoa_generator.h"
+#include "platform.h"
 using namespace std;
 
 /**
@@ -16,7 +17,7 @@
  */
 void t_cocoa_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
   cocoa_prefix_ = program_->get_cocoa_prefix();
 
   // we have a .h header file...
diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc
index c465426..620d09e 100644
--- a/compiler/cpp/src/generate/t_cpp_generator.cc
+++ b/compiler/cpp/src/generate/t_cpp_generator.cc
@@ -10,6 +10,7 @@
 #include <sstream>
 #include <boost/lexical_cast.hpp>
 #include "t_cpp_generator.h"
+#include "platform.h"
 using namespace std;
 
 /**
@@ -20,7 +21,7 @@
  */
 void t_cpp_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
 
   // Make output file
   string f_types_name = get_out_dir()+program_name_+"_types.h";
@@ -462,7 +463,7 @@
   // Isset struct has boolean fields, but only for non-required fields.
   bool has_nonrequired_fields = false;
   for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-    if ((*m_iter)->get_req() != t_field::REQUIRED)
+    if ((*m_iter)->get_req() != t_field::T_REQUIRED)
       has_nonrequired_fields = true;
   }
 
@@ -476,7 +477,7 @@
         "__isset() : ";
       bool first = true;
       for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-        if ((*m_iter)->get_req() == t_field::REQUIRED) {
+        if ((*m_iter)->get_req() == t_field::T_REQUIRED) {
           continue;
         }
         if (first) {
@@ -491,7 +492,7 @@
       out << " {}" << endl;
 
       for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
-        if ((*m_iter)->get_req() != t_field::REQUIRED) {
+        if ((*m_iter)->get_req() != t_field::T_REQUIRED) {
           indent(out) <<
             "bool " << (*m_iter)->get_name() << ";" << endl;
         }
@@ -513,7 +514,7 @@
     for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
       // Most existing Thrift code does not use isset or optional/required,
       // so we treat "default" fields as required.
-      if ((*m_iter)->get_req() != t_field::OPTIONAL) {
+      if ((*m_iter)->get_req() != t_field::T_OPTIONAL) {
         out <<
           indent() << "if (!(" << (*m_iter)->get_name()
                    << " == rhs." << (*m_iter)->get_name() << "))" << endl <<
@@ -638,7 +639,7 @@
       indent_up();
       for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
         indent(out) << "{ " << (*m_iter)->get_key() << ", " <<
-          (((*m_iter)->get_req() == t_field::OPTIONAL) ? "true" : "false") <<
+          (((*m_iter)->get_req() == t_field::T_OPTIONAL) ? "true" : "false") <<
           " }," << endl;
       }
       // Zero for the T_STOP marker.
@@ -751,7 +752,7 @@
 
   // Required variables aren't in __isset, so we need tmp vars to check them.
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if ((*f_iter)->get_req() == t_field::REQUIRED)
+    if ((*f_iter)->get_req() == t_field::T_REQUIRED)
       indent(out) << "bool isset_" << (*f_iter)->get_name() << " = false;" << endl;
   }
   out << endl;
@@ -788,7 +789,7 @@
         indent_up();
 
         const char *isset_prefix =
-          ((*f_iter)->get_req() != t_field::REQUIRED) ? "this->__isset." : "isset_";
+          ((*f_iter)->get_req() != t_field::T_REQUIRED) ? "this->__isset." : "isset_";
 
 #if 0
         // This code throws an exception if the same field is encountered twice.
@@ -842,7 +843,7 @@
   // there might possibly be a chance of continuing.
   out << endl;
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if ((*f_iter)->get_req() == t_field::REQUIRED)
+    if ((*f_iter)->get_req() == t_field::T_REQUIRED)
       out <<
         indent() << "if (!isset_" << (*f_iter)->get_name() << ')' << endl <<
         indent() << "  throw TProtocolException(TProtocolException::INVALID_DATA);" << endl;
@@ -878,7 +879,7 @@
   indent(out) <<
     "xfer += oprot->writeStructBegin(\"" << name << "\");" << endl;
   for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
-    if ((*f_iter)->get_req() == t_field::OPTIONAL) {
+    if ((*f_iter)->get_req() == t_field::T_OPTIONAL) {
       indent(out) << "if (this->__isset." << (*f_iter)->get_name() << ") {" << endl;
       indent_up();
     }
@@ -897,7 +898,7 @@
     // Write field closer
     indent(out) <<
       "xfer += oprot->writeFieldEnd();" << endl;
-    if ((*f_iter)->get_req() == t_field::OPTIONAL) {
+    if ((*f_iter)->get_req() == t_field::T_OPTIONAL) {
       indent_down();
       indent(out) << '}' << endl;
     }
diff --git a/compiler/cpp/src/generate/t_erl_generator.cc b/compiler/cpp/src/generate/t_erl_generator.cc
index 44683cd..02d7361 100644
--- a/compiler/cpp/src/generate/t_erl_generator.cc
+++ b/compiler/cpp/src/generate/t_erl_generator.cc
@@ -9,6 +9,7 @@
 #include <sys/types.h>
 #include <sstream>
 #include "t_erl_generator.h"
+#include "platform.h"
 
 using namespace std;
 
@@ -20,7 +21,7 @@
  */
 void t_erl_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
 
   // setup export lines
   export_lines_first_ = true;
diff --git a/compiler/cpp/src/generate/t_hs_generator.cc b/compiler/cpp/src/generate/t_hs_generator.cc
index 8746ba4..6ef7a95 100644
--- a/compiler/cpp/src/generate/t_hs_generator.cc
+++ b/compiler/cpp/src/generate/t_hs_generator.cc
@@ -9,6 +9,7 @@
 #include <sys/types.h>
 #include <sstream>
 #include "t_hs_generator.h"
+#include "platform.h"
 using namespace std;
 
 /*
@@ -72,7 +73,7 @@
  */
 void t_hs_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
 
   // Make output file
 
diff --git a/compiler/cpp/src/generate/t_java_generator.cc b/compiler/cpp/src/generate/t_java_generator.cc
index e0a1be2..cd4b873 100644
--- a/compiler/cpp/src/generate/t_java_generator.cc
+++ b/compiler/cpp/src/generate/t_java_generator.cc
@@ -8,6 +8,7 @@
 #include <sys/stat.h>
 #include <sstream>
 #include "t_java_generator.h"
+#include "platform.h"
 using namespace std;
 
 /**
@@ -18,7 +19,7 @@
  */
 void t_java_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
   package_name_ = program_->get_java_package();
 
   string dir = package_name_;
@@ -26,12 +27,12 @@
   string::size_type loc;
   while ((loc = dir.find(".")) != string::npos) {
     subdir = subdir + "/" + dir.substr(0, loc);
-    mkdir(subdir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+    MKDIR(subdir.c_str());
     dir = dir.substr(loc+1);
   }
   if (dir.size() > 0) {
     subdir = subdir + "/" + dir;
-    mkdir(subdir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+    MKDIR(subdir.c_str());
   }
 
   package_dir_ = subdir;
@@ -565,7 +566,7 @@
         indent() << "if (this." << (*f_iter)->get_name() << " != null) {" << endl;
       indent_up();
     }
-    bool optional = bean_style_ && (*f_iter)->get_req() == t_field::OPTIONAL;
+    bool optional = bean_style_ && (*f_iter)->get_req() == t_field::T_OPTIONAL;
     if (optional) {
       out <<
         indent() << "if (this.__isset." << (*f_iter)->get_name() << ") {" << endl;
diff --git a/compiler/cpp/src/generate/t_ocaml_generator.cc b/compiler/cpp/src/generate/t_ocaml_generator.cc
index 8bf6457..f4f5c4a 100644
--- a/compiler/cpp/src/generate/t_ocaml_generator.cc
+++ b/compiler/cpp/src/generate/t_ocaml_generator.cc
@@ -9,6 +9,7 @@
 #include <sys/types.h>
 #include <sstream>
 #include "t_ocaml_generator.h"
+#include "platform.h"
 using namespace std;
 
 /*
@@ -72,7 +73,7 @@
  */
 void t_ocaml_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
 
   // Make output file
   string f_types_name = get_out_dir()+program_name_+"_types.ml";
diff --git a/compiler/cpp/src/generate/t_perl_generator.cc b/compiler/cpp/src/generate/t_perl_generator.cc
index ee6b5b4..fe55418 100644
--- a/compiler/cpp/src/generate/t_perl_generator.cc
+++ b/compiler/cpp/src/generate/t_perl_generator.cc
@@ -8,6 +8,7 @@
 #include <sys/stat.h>
 #include <sstream>
 #include "t_perl_generator.h"
+#include "platform.h"
 using namespace std;
 
 /**
@@ -18,13 +19,13 @@
  */
 void t_perl_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
 
   string outdir = get_out_dir();
   std::string ns = program_->get_perl_package();
   if (ns.length() > 0) {
     outdir += ns + "/";
-    mkdir(outdir.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+    MKDIR(outdir.c_str());
   }
 
   // Make output file
diff --git a/compiler/cpp/src/generate/t_php_generator.cc b/compiler/cpp/src/generate/t_php_generator.cc
index 5b3c979..1f4ed1f 100644
--- a/compiler/cpp/src/generate/t_php_generator.cc
+++ b/compiler/cpp/src/generate/t_php_generator.cc
@@ -8,6 +8,7 @@
 #include <sys/stat.h>
 #include <sstream>
 #include "t_php_generator.h"
+#include "platform.h"
 using namespace std;
 
 /**
@@ -18,7 +19,7 @@
  */
 void t_php_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
 
   // Make output file
   string f_types_name = get_out_dir()+program_name_+"_types.php";
diff --git a/compiler/cpp/src/generate/t_py_generator.cc b/compiler/cpp/src/generate/t_py_generator.cc
index 7f3507f..ca192ce 100644
--- a/compiler/cpp/src/generate/t_py_generator.cc
+++ b/compiler/cpp/src/generate/t_py_generator.cc
@@ -10,6 +10,7 @@
 #include <sstream>
 #include <algorithm>
 #include "t_py_generator.h"
+#include "platform.h"
 using namespace std;
 
 /**
@@ -24,7 +25,7 @@
   package_dir_ = get_out_dir();
   while (true) {
     // TODO: Do better error checking here.
-    mkdir(package_dir_.c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+    MKDIR(package_dir_.c_str());
     std::ofstream init_py((package_dir_+"/__init__.py").c_str());
     init_py.close();
     if (module.empty()) {
@@ -1030,13 +1031,16 @@
 
   // Make file executable, love that bitwise OR action
   chmod(f_remote_name.c_str(),
-        S_IRUSR |
-        S_IWUSR |
-        S_IXUSR |
-        S_IRGRP |
-        S_IXGRP |
-        S_IROTH |
-        S_IXOTH);
+          S_IRUSR
+        | S_IWUSR
+        | S_IXUSR
+#ifndef MINGW
+        | S_IRGRP
+        | S_IXGRP
+        | S_IROTH
+        | S_IXOTH
+#endif
+		);
 }
 
 /**
diff --git a/compiler/cpp/src/generate/t_rb_generator.cc b/compiler/cpp/src/generate/t_rb_generator.cc
index 59f25de..56690e8 100644
--- a/compiler/cpp/src/generate/t_rb_generator.cc
+++ b/compiler/cpp/src/generate/t_rb_generator.cc
@@ -9,6 +9,7 @@
 #include <sys/types.h>
 #include <sstream>
 #include "t_rb_generator.h"
+#include "platform.h"
 using namespace std;
 
 /**
@@ -19,7 +20,7 @@
  */
 void t_rb_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
 
   // Make output file
   string f_types_name = get_out_dir()+program_name_+"_types.rb";
diff --git a/compiler/cpp/src/generate/t_st_generator.cc b/compiler/cpp/src/generate/t_st_generator.cc
index c8456bc..fa7d851 100644
--- a/compiler/cpp/src/generate/t_st_generator.cc
+++ b/compiler/cpp/src/generate/t_st_generator.cc
@@ -11,6 +11,7 @@
 #include <sys/types.h>
 #include <sstream>
 #include "t_st_generator.h"
+#include "platform.h"
 using namespace std;
 
 /**
@@ -21,7 +22,7 @@
  */
 void t_st_generator::init_generator() {
   // Make output directory
-  mkdir(T_ST_DIR, S_IREAD | S_IWRITE | S_IEXEC);
+  MKDIR(T_ST_DIR);
 
   temporary_var = 0;
 
@@ -560,7 +561,7 @@
   indent_up();
 
   for (fld_iter = fields.begin(); fld_iter != fields.end(); ++fld_iter) {
-    bool optional = (*fld_iter)->get_req() == t_field::OPTIONAL;
+    bool optional = (*fld_iter)->get_req() == t_field::T_OPTIONAL;
     string fname = (*fld_iter)->get_name();
     string accessor = sname + " " + sanitize(fname);
 
diff --git a/compiler/cpp/src/generate/t_xsd_generator.cc b/compiler/cpp/src/generate/t_xsd_generator.cc
index 04645d2..7bab56d 100644
--- a/compiler/cpp/src/generate/t_xsd_generator.cc
+++ b/compiler/cpp/src/generate/t_xsd_generator.cc
@@ -8,11 +8,12 @@
 #include <sys/stat.h>
 #include <sstream>
 #include "t_xsd_generator.h"
+#include "platform.h"
 using namespace std;
 
 void t_xsd_generator::init_generator() {
   // Make output directory
-  mkdir(get_out_dir().c_str(), S_IRWXU | S_IRWXG | S_IRWXO);
+  MKDIR(get_out_dir().c_str());
 
   // Make output file
   string f_php_name = get_out_dir()+program_->get_name()+"_xsd.php";
diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc
index ac5fa04..4877431 100644
--- a/compiler/cpp/src/main.cc
+++ b/compiler/cpp/src/main.cc
@@ -23,6 +23,11 @@
 #include <sys/stat.h>
 #include <errno.h>
 
+#ifdef MINGW
+# include <windows.h> /* for GetFullPathName */
+# include <limits.h>
+#endif
+
 // Careful: must include globals first for extern definitions
 #include "globals.h"
 
@@ -155,6 +160,28 @@
 bool gen_recurse = false;
 
 /**
+ * MinGW doesn't have realpath, so use fallback implementation in that case,
+ * otherwise this just calls through to realpath
+ */
+char *saferealpath(const char *path, char *resolved_path) {
+#ifdef MINGW
+  char buf[MAX_PATH];
+  char* basename;
+  DWORD len = GetFullPathName(path, MAX_PATH, buf, &basename);
+  if (len == 0 || len > MAX_PATH - 1){
+    strcpy(resolved_path, path);
+  } else {
+    CharLowerBuff(buf, len);
+    strcpy(resolved_path, buf);
+  }
+  return resolved_path;
+#else
+  return realpath(path, resolved_path);
+#endif
+}
+
+
+/**
  * Report an error to the user. This is called yyerror for historical
  * reasons (lex and yacc expect the error reporting routine to be called
  * this). Call this function to report any errors to the user.
@@ -276,7 +303,7 @@
   if (filename[0] == '/') {
     // Realpath!
     char rp[PATH_MAX];
-    if (realpath(filename.c_str(), rp) == NULL) {
+    if (saferealpath(filename.c_str(), rp) == NULL) {
       pwarning(0, "Cannot open include file %s\n", filename.c_str());
       return std::string();
     }
@@ -298,7 +325,7 @@
 
       // Realpath!
       char rp[PATH_MAX];
-      if (realpath(sfilename.c_str(), rp) == NULL) {
+      if (saferealpath(sfilename.c_str(), rp) == NULL) {
         continue;
       }
 
@@ -754,7 +781,7 @@
     parse(*iter, program);
   }
 
-  // Parse the program the file
+  // Parse the program file
   g_parse_mode = PROGRAM;
   g_program = program;
   g_scope = program->scope();
@@ -1011,6 +1038,16 @@
           usage();
         }
         out_path = arg;
+
+#ifdef MINGW
+        //strip out trailing \ on Windows
+        int last = out_path.length()-1;
+        if (out_path[last] == '\\')
+        {
+          out_path.erase(last);
+        }
+#endif
+
         struct stat sb;
         if (stat(out_path.c_str(), &sb) < 0) {
           fprintf(stderr, "Output directory %s is unusable: %s\n", out_path.c_str(), strerror(errno));
@@ -1038,8 +1075,8 @@
 
   // Real-pathify it
   char rp[PATH_MAX];
-  if (realpath(argv[i], rp) == NULL) {
-    failure("Could not open input file: %s", argv[i]);
+  if (saferealpath(argv[i], rp) == NULL) {
+    failure("Could not open input file with realpath: %s", argv[i]);
   }
   string input_file(rp);
 
diff --git a/compiler/cpp/src/parse/t_field.h b/compiler/cpp/src/parse/t_field.h
index 35ee1a2..fb882a9 100644
--- a/compiler/cpp/src/parse/t_field.h
+++ b/compiler/cpp/src/parse/t_field.h
@@ -34,7 +34,7 @@
     type_(type),
     name_(name),
     key_(key),
-    req_(OPT_IN_REQ_OUT),
+    req_(T_OPT_IN_REQ_OUT),
     value_(NULL),
     xsd_optional_(false),
     xsd_nillable_(false),
@@ -55,9 +55,9 @@
   }
 
   enum e_req {
-    REQUIRED,
-    OPTIONAL,
-    OPT_IN_REQ_OUT
+    T_REQUIRED,
+    T_OPTIONAL,
+    T_OPT_IN_REQ_OUT,
   };
 
   void set_req(e_req req) {
@@ -117,7 +117,7 @@
   // but it does the same thing.
   std::string get_fingerprint_material() const {
     return boost::lexical_cast<std::string>(key_) + ":" +
-      (req_ == OPTIONAL ? "opt-" : "") +
+      ((req_ == T_OPTIONAL) ? "opt-" : "") +
       type_->get_fingerprint_material();
   }
 
diff --git a/compiler/cpp/src/platform.h b/compiler/cpp/src/platform.h
new file mode 100644
index 0000000..df64e9a
--- /dev/null
+++ b/compiler/cpp/src/platform.h
@@ -0,0 +1,22 @@
+// Distributed under the Thrift Software License
+//
+// See accompanying file LICENSE or visit the Thrift site at:
+// http://developers.facebook.com/thrift/
+
+/**
+ * define for mkdir,since the method signature 
+ * is different for the non-POSIX MinGW
+ */
+
+#ifdef MINGW
+#include <io.h>
+#else
+#include <sys/types.h>
+#include <sys/stat.h>
+#endif
+
+#if defined MINGW
+#define MKDIR(x) mkdir(x)
+#else
+#define MKDIR(x) mkdir(x, S_IRWXU | S_IRWXG | S_IRWXO)
+#endif
diff --git a/compiler/cpp/src/thrifty.yy b/compiler/cpp/src/thrifty.yy
index e46d0ef..9475adf 100644
--- a/compiler/cpp/src/thrifty.yy
+++ b/compiler/cpp/src/thrifty.yy
@@ -825,9 +825,9 @@
         if (g_parse_mode == PROGRAM) {
           pwarning(1, "required keyword is ignored in argument lists.\n");
         }
-        $$ = t_field::OPT_IN_REQ_OUT;
+        $$ = t_field::T_OPT_IN_REQ_OUT;
       } else {
-        $$ = t_field::REQUIRED;
+        $$ = t_field::T_REQUIRED;
       }
     }
 | tok_optional
@@ -836,14 +836,14 @@
         if (g_parse_mode == PROGRAM) {
           pwarning(1, "optional keyword is ignored in argument lists.\n");
         }
-        $$ = t_field::OPT_IN_REQ_OUT;
+        $$ = t_field::T_OPT_IN_REQ_OUT;
       } else {
-        $$ = t_field::OPTIONAL;
+        $$ = t_field::T_OPTIONAL;
       }
     }
 |
     {
-      $$ = t_field::OPT_IN_REQ_OUT;
+      $$ = t_field::T_OPT_IN_REQ_OUT;
     }
 
 FieldValue:
