Revert "Better support C++ types in generated structs (#577)"

This reverts commit c0a2034f3ef111b6a8c08e17c675434bf8e080fd.

Failed to build on clang due to "offsetof used on non-POD object".
Have to think about this, and also fix the travis build that is for
some reason not showing up on pull requests anymore.
diff --git a/generator/nanopb_generator.py b/generator/nanopb_generator.py
index e778593..a63703f 100755
--- a/generator/nanopb_generator.py
+++ b/generator/nanopb_generator.py
@@ -1541,12 +1541,8 @@
         yield '\n'
 
         for incfile in self.file_options.include:
-            # allow including system headers
-            if (incfile.startswith('<')):
-                yield '#include %s\n' % incfile
-            else:
-                yield options.genformat % incfile
-                yield '\n'
+            yield options.genformat % incfile
+            yield '\n'
 
         for incfile in includes:
             noext = os.path.splitext(incfile)[0]
@@ -1563,6 +1559,10 @@
         yield '#endif\n'
         yield '\n'
 
+        yield '#ifdef __cplusplus\n'
+        yield 'extern "C" {\n'
+        yield '#endif\n\n'
+
         if self.enums:
             yield '/* Enum definitions */\n'
             for enum in self.enums:
@@ -1587,10 +1587,6 @@
                     yield enum.auxiliary_defines() + '\n'
                 yield '\n'
 
-        yield '#ifdef __cplusplus\n'
-        yield 'extern "C" {\n'
-        yield '#endif\n\n'
-
         if self.messages:
             yield '/* Initializer values for message structs */\n'
             for msg in self.messages:
diff --git a/tests/cxx_callback_datatype/SConscript b/tests/cxx_callback_datatype/SConscript
deleted file mode 100644
index bd6fa63..0000000
--- a/tests/cxx_callback_datatype/SConscript
+++ /dev/null
@@ -1,25 +0,0 @@
-Import('env')
-
-import os
-
-base_env = env.Clone()
-base_env.Replace(NANOPBFLAGS = '--cpp-descriptor')
-base_env.NanopbProtoCpp('message')
-
-for std in ["c++03", "c++11", "c++14", "c++17", "c++20"]:
-    e = base_env.Clone()
-    e.Append(CXXFLAGS = '-std={}'.format(std))
-
-    # Make sure compiler supports this version of C++ before we actually run the
-    # test.
-    conf = Configure(e)
-    compiler_valid = conf.CheckCXX()
-    e = conf.Finish()
-    if not compiler_valid:
-        print("Skipping {} test - compiler doesn't support it".format(std))
-        continue
-
-    sources = [ 'cxx_callback_datatype.cpp', 'message.pb.cpp', '$NANOPB/pb_decode.c', '$NANOPB/pb_encode.c', '$NANOPB/pb_common.c' ]
-    objects = [ e.Object('{}_{}'.format(os.path.basename(s), std), s) for s in sources ]
-    p = e.Program(target = 'cxx_callback_datatype_{}'.format(std), source = objects)
-    e.RunTest(p)
diff --git a/tests/cxx_callback_datatype/cxx_callback_datatype.cpp b/tests/cxx_callback_datatype/cxx_callback_datatype.cpp
deleted file mode 100644
index da76bc7..0000000
--- a/tests/cxx_callback_datatype/cxx_callback_datatype.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-#include "message.pb.hpp"
-
-#include <pb_encode.h>
-#include <pb_decode.h>
-
-#include <cstdio>
-
-// See tests/alltypes_callback, tests/oneoff_callback and examples/network_server for more...
-bool TestMessage_submessages_callback(pb_istream_t *istream, pb_ostream_t *ostream, const pb_field_t *field)
-{
-	if (ostream != NULL) {
-		const std::vector<int> &v = *(const std::vector<int> *)field->pData;
-		for (std::vector<int>::const_iterator i = v.begin(); i != v.end(); ++i) {
-			if (!pb_encode_tag_for_field(ostream, field)) {
-				return false;
-			}
-			SubMessage tmp;
-			tmp.actual_value = *i;
-			if (!pb_encode_submessage(ostream, SubMessage_fields, &tmp)) {
-				return false;
-			}
-		}
-	} else if (istream != NULL) {
-		std::vector<int> &v = *(std::vector<int> *)field->pData;
-		SubMessage tmp;
-		if (!pb_decode(istream, SubMessage_fields, &tmp)) {
-			return false;
-		}
-		v.push_back(tmp.actual_value);
-	}
-	return true;
-}
-
-extern "C"
-bool TestMessage_callback(pb_istream_t *istream, pb_ostream_t *ostream, const pb_field_t *field)
-{
-	if (field->tag == TestMessage_submessages_tag) {
-		return TestMessage_submessages_callback(istream, ostream, field);
-	}
-	return true;
-}
-
-extern "C"
-int main() {
-	std::vector<int> source;
-	source.push_back(5);
-	source.push_back(4);
-	source.push_back(3);
-	source.push_back(2);
-	source.push_back(1);
-
-
-	std::vector<uint8_t> serialized;
-	pb_ostream_t sizestream = {0};
-	pb_encode(&sizestream, TestMessage_fields, &source);
-	serialized.resize(sizestream.bytes_written);
-	pb_ostream_t outstream = pb_ostream_from_buffer(&serialized.front(), serialized.size());
-	if (!pb_encode(&outstream, TestMessage_fields, &source)) {
-		fprintf(stderr, "Failed to encode: %s\n", PB_GET_ERROR(&outstream));
-		return 1;
-	}
-
-
-	std::vector<int> destination;
-	pb_istream_t instream = pb_istream_from_buffer(&serialized.front(), outstream.bytes_written);
-	if (!pb_decode(&instream, TestMessage_fields, &destination)) {
-		fprintf(stderr, "Failed to decode: %s\n", PB_GET_ERROR(&instream));
-		return 2;
-	}
-	if (source != destination) {
-		fprintf(stderr, "Result does not match\n");
-		fprintf(stderr, "source(%lu): ", source.size());
-		for (std::vector<int>::iterator i = source.begin(); i != source.end(); ++i)
-		{
-			fprintf(stderr, "%d, ", *i);
-		}
-		fprintf(stderr, "\nencoded(%lu): ", serialized.size());
-		for (unsigned i = 0; i != std::min(serialized.size(), outstream.bytes_written); ++i) {
-			fprintf(stderr, "%#06x ", serialized[i]);
-		}
-		fprintf(stderr, "\ndestination(%lu): ", destination.size());
-		for (std::vector<int>::iterator i = destination.begin(); i != destination.end(); ++i)
-		{
-			fprintf(stderr, "%d, ", *i);
-		}
-		fprintf(stderr, "\n");
-		return 3;
-	}
-
-	return 0;
-}
diff --git a/tests/cxx_callback_datatype/message.proto b/tests/cxx_callback_datatype/message.proto
deleted file mode 100644
index 605f289..0000000
--- a/tests/cxx_callback_datatype/message.proto
+++ /dev/null
@@ -1,14 +0,0 @@
-syntax = "proto3";
-
-import "nanopb.proto";
-
-option(nanopb_fileopt).include = '<vector>';
-
-message SubMessage {
-  sint32 actual_value = 1;
-}
-
-message TestMessage {
-  // Instead of std::vector<SubMessage> callback handles wrapping/unwrapping of the int.
-  repeated SubMessage submessages = 1 [(nanopb).callback_datatype = "std::vector<int>"];
-}
diff --git a/tests/site_scons/site_tools/nanopb.py b/tests/site_scons/site_tools/nanopb.py
index de30b3e..f0f386c 100644
--- a/tests/site_scons/site_tools/nanopb.py
+++ b/tests/site_scons/site_tools/nanopb.py
@@ -137,23 +137,18 @@
         if not os.path.isabs(d): d = os.path.relpath(d, prefix)
         include_dirs += ' -I' + esc(d)
 
-    # when generating .pb.cpp sources, instead of pb.h generate .pb.hpp headers
-    source_extension = os.path.splitext(str(target[0]))[1]
-    header_extension = '.h' + source_extension[2:]
     nanopb_flags = env['NANOPBFLAGS']
     if nanopb_flags:
-      nanopb_flags = '--source-extension=%s,--header-extension=%s,%s:.' % (source_extension, header_extension, nanopb_flags)
+      nanopb_flags = '%s:.' % nanopb_flags
     else:
-      nanopb_flags = '--source-extension=%s,--header-extension=%s:.' % (source_extension, header_extension)
+      nanopb_flags = '.'
 
     return SCons.Action.CommandAction('$PROTOC $PROTOCFLAGS %s --nanopb_out=%s %s' % (include_dirs, nanopb_flags, srcfile),
                                       chdir = prefix)
 
 def _nanopb_proto_emitter(target, source, env):
     basename = os.path.splitext(str(source[0]))[0]
-    source_extension = os.path.splitext(str(target[0]))[1]
-    header_extension = '.h' + source_extension[2:]
-    target.append(basename + '.pb' + header_extension)
+    target.append(basename + '.pb.h')
 
     # This is a bit of a hack. protoc include paths work the sanest
     # when the working directory is the same as the source root directory.
@@ -172,12 +167,6 @@
     src_suffix = '.proto',
     emitter = _nanopb_proto_emitter)
 
-_nanopb_proto_cpp_builder = SCons.Builder.Builder(
-    generator = _nanopb_proto_actions,
-    suffix = '.pb.cpp',
-    src_suffix = '.proto',
-    emitter = _nanopb_proto_emitter)
-
 def generate(env):
     '''Add Builder for nanopb protos.'''
 
@@ -192,7 +181,6 @@
 
     env.SetDefault(NANOPB_PROTO_CMD = '$PROTOC $PROTOCFLAGS --nanopb_out=$NANOPBFLAGS:. $SOURCES')
     env['BUILDERS']['NanopbProto'] = _nanopb_proto_builder
-    env['BUILDERS']['NanopbProtoCpp'] = _nanopb_proto_cpp_builder
 
 def exists(env):
     return _detect_protoc(env) and _detect_protoc_opts(env)