Thrift: OCaml library and generator

Summary: Added (minimal) library and code generator for OCaml.
Reviewed by: mcslee
Test plan: Test client and server (included).
Revert plan: yes


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665163 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc
index 949558e..b2abb9b 100644
--- a/compiler/cpp/src/main.cc
+++ b/compiler/cpp/src/main.cc
@@ -35,6 +35,7 @@
 #include "generate/t_rb_generator.h"
 #include "generate/t_xsd_generator.h"
 #include "generate/t_perl_generator.h"
+#include "generate/t_ocaml_generator.h"
 #include "generate/t_erl_generator.h"
 
 using namespace std;
@@ -126,6 +127,7 @@
 bool gen_phpi = false;
 bool gen_rest = false;
 bool gen_perl = false;
+bool gen_ocaml = false;
 bool gen_erl = false;
 bool gen_recurse = false;
 
@@ -304,6 +306,7 @@
   fprintf(stderr, "  -rb         Generate Ruby output files\n");
   fprintf(stderr, "  -xsd        Generate XSD output files\n");
   fprintf(stderr, "  -perl       Generate Perl output files\n");
+  fprintf(stderr, "  -ocaml      Generate OCaml output files\n");
   fprintf(stderr, "  -erl        Generate Erlang output files\n");
   fprintf(stderr, "  -I dir      Add a directory to the list of directories \n");
   fprintf(stderr, "                searched for include directives\n");
@@ -567,6 +570,13 @@
       delete perl;
     }
 
+    if (gen_ocaml) {
+      pverbose("Generating OCaml\n");
+      t_ocaml_generator* ocaml = new t_ocaml_generator(program);
+      ocaml->generate_program();
+      delete ocaml;
+    }
+
     if (gen_erl) {
       pverbose("Generating Erlang\n");
       t_erl_generator* erl = new t_erl_generator(program);
@@ -574,6 +584,7 @@
       delete erl;
     }
 
+
   } catch (string s) {
     printf("Error: %s\n", s.c_str());
   } catch (const char* exc) {
@@ -638,6 +649,8 @@
         gen_xsd = true;
       } else if (strcmp(arg, "-perl") == 0) {
         gen_perl = true;
+      } else if (strcmp(arg, "-ocaml") == 0) {
+        gen_ocaml = true;
       } else if (strcmp(arg, "-erl") == 0) {
         gen_erl = true;
       } else if (strcmp(arg, "-I") == 0) {
@@ -660,7 +673,7 @@
   }
 
   // You gotta generate something!
-  if (!gen_cpp && !gen_java && !gen_php && !gen_phpi && !gen_py && !gen_rb && !gen_xsd && !gen_perl && !gen_erl) {
+  if (!gen_cpp && !gen_java && !gen_php && !gen_phpi && !gen_py && !gen_rb && !gen_xsd && !gen_perl && !gen_ocaml && !gen_erl) {
     fprintf(stderr, "!!! No output language(s) specified\n\n");
     usage();
   }