docopt / docopt.cpp

C++11 port of docopt
Boost Software License 1.0
1.05k stars 146 forks source link

Building with gcc 4.8 #42

Closed Luthaf closed 8 years ago

Luthaf commented 8 years ago

I needed to build docopt using GCC 4.8, because this is default compiler in CentOS 7.

GCC 4.8 C++11 support is good, but all the <regex> functionalities are missing. So I created a fallback to Boost.Regex when building with GCC 4.8, and used C++11 regex in all other cases.

I used the following diff:

diff --git a/docopt.cpp b/docopt.cpp
index 2fd5f42..ce983c5 100644
--- a/docopt.cpp
+++ b/docopt.cpp
@@ -17,9 +17,24 @@
 #include <unordered_map>
 #include <map>
 #include <string>
-#include <regex>
 #include <iostream>
 #include <cassert>
 #include <cstddef>

+#ifdef DOCOPT_USES_BOOST_REGEX
+#include <boost/regex.hpp>
+namespace std {
+   using boost::regex;
+   using boost::sregex_iterator;
+   using boost::smatch;
+   using boost::regex_search;
+   namespace regex_constants {
+       using boost::regex_constants::match_not_null;
+   }
+}
+#else
+#include <regex>
+#endif

If you want to include this in docopt, I can do a PR.

jaredgrubb commented 8 years ago

Does it work well enough?

Luthaf commented 8 years ago

Works well enough for me, with most of the docopt features. I did not ran the test suite, but I can if you are willing to integrate this.

jaredgrubb commented 8 years ago

Yes, please do. "Working mostly" is still better than "not at all" but if we advertise that it works, I'd like a little more confidence at least.

Luthaf commented 8 years ago

Ok, I only got one failure on the test suite. Please see #43 for the changes.

rhd commented 8 years ago

I'd like to see the boost fallback on gcc 4.8 as well.