spread the extern "C" { } magic pixie dust around. Python itself builds now
using a C++ compiler. Still lots and lots of errors in the modules built by
setup.py, and a bunch of warnings from g++ in the core.
diff --git a/Modules/getpath.c b/Modules/getpath.c
index 40c3692..8eba730 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -91,6 +91,11 @@
  * process to find the installed Python tree.
  */
 
+#ifdef __cplusplus
+ extern "C" {
+#endif
+
+
 #ifndef VERSION
 #if defined(__VMS)
 #define VERSION "2_1"
@@ -681,3 +686,9 @@
         calculate_path();
     return progpath;
 }
+
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Modules/main.c b/Modules/main.c
index ceb5bed..28d3294 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -29,6 +29,10 @@
     "Type \"help\", \"copyright\", \"credits\" or \"license\" " \
     "for more information."
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* For Py_GetArgcArgv(); set by main() */
 static char **orig_argv;
 static int  orig_argc;
@@ -540,3 +544,8 @@
 	*argc = orig_argc;
 	*argv = orig_argv;
 }
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 4cd220e..e07021a 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -22,6 +22,10 @@
 #    include <unixio.h>
 #endif /* defined(__VMS) */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 PyDoc_STRVAR(posix__doc__,
 "This module provides access to operating system functionality that is\n\
 standardized by the C Standard and the POSIX standard (a thinly\n\
@@ -8253,3 +8257,8 @@
 	PyModule_AddObject(m, "statvfs_result",
 			   (PyObject*) &StatVFSResultType);
 }
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Objects/fileobject.c b/Objects/fileobject.c
index 20e71a3..185caa4 100644
--- a/Objects/fileobject.c
+++ b/Objects/fileobject.c
@@ -48,6 +48,10 @@
 #define NEWLINE_LF 2		/* \n newline seen */
 #define NEWLINE_CRLF 4		/* \r\n newline seen */
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 FILE *
 PyFile_AsFile(PyObject *f)
 {
@@ -2441,3 +2445,8 @@
 	f->f_skipnextlf = skipnextlf;
 	return dst - buf;
 }
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Objects/object.c b/Objects/object.c
index 0ce4332..d3dda1b 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -3,6 +3,10 @@
 
 #include "Python.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 #ifdef Py_REF_DEBUG
 Py_ssize_t _Py_RefTotal;
 
@@ -2112,3 +2116,8 @@
 		--_PyTrash_delete_nesting;
 	}
 }
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 1e0db15..30ae6f0 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -83,6 +83,11 @@
 
 */
 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Free list for Unicode objects */
 static PyUnicodeObject *unicode_freelist;
 static int unicode_freelist_size;
@@ -7418,6 +7423,11 @@
     unicode_freelist_size = 0;
 }
 
+#ifdef __cplusplus
+}
+#endif
+
+
 /*
 Local variables:
 c-basic-offset: 4
diff --git a/Python/errors.c b/Python/errors.c
index 7fc4c97..25deaa6 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -16,6 +16,11 @@
 
 #include <ctype.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
 void
 PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback)
 {
@@ -786,3 +791,8 @@
 	}
 	return NULL;
 }
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Python/getmtime.c b/Python/getmtime.c
index f0ac899..54edb53 100644
--- a/Python/getmtime.c
+++ b/Python/getmtime.c
@@ -6,6 +6,10 @@
 #include "Python.h"
 #include "pyconfig.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 time_t
 PyOS_GetLastModificationTime(char *path, FILE *fp)
 {
@@ -15,3 +19,8 @@
 	else
 		return st.st_mtime;
 }
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Python/getopt.c b/Python/getopt.c
index d80f607..5429fac5 100644
--- a/Python/getopt.c
+++ b/Python/getopt.c
@@ -27,6 +27,10 @@
 #include <stdio.h>
 #include <string.h>
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 int _PyOS_opterr = 1;          /* generate error messages */
 int _PyOS_optind = 1;          /* index into argv array   */
 char *_PyOS_optarg = NULL;     /* optional argument       */
@@ -81,3 +85,8 @@
 
 	return option;
 }
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Python/import.c b/Python/import.c
index c3bd275..81027d8 100644
--- a/Python/import.c
+++ b/Python/import.c
@@ -17,6 +17,9 @@
 #ifdef HAVE_FCNTL_H
 #include <fcntl.h>
 #endif
+#ifdef __cplusplus
+extern "C" { 
+#endif
 
 extern time_t PyOS_GetLastModificationTime(char *, FILE *);
 						/* In getmtime.c */
@@ -2947,3 +2950,7 @@
 
 	return PyImport_ExtendInittab(newtab);
 }
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/Python/pystate.c b/Python/pystate.c
index ca19b76..9c85b5c 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -37,6 +37,10 @@
 #define HEAD_LOCK() PyThread_acquire_lock(head_mutex, WAIT_LOCK)
 #define HEAD_UNLOCK() PyThread_release_lock(head_mutex)
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* The single PyInterpreterState used by this process'
    GILState implementation
 */
@@ -552,4 +556,11 @@
 	else if (oldstate == PyGILState_UNLOCKED)
 		PyEval_SaveThread();
 }
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* WITH_THREAD */
+
+
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 818c760..b98d6fb 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -37,6 +37,10 @@
 				   _Py_GetRefTotal())
 #endif
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 extern char *Py_GetPath(void);
 
 extern grammar _PyParser_Grammar; /* From graminit.c */
@@ -1692,3 +1696,8 @@
 {
 	return PyParser_SimpleParseStringFlags(str, start, 0);
 }
+
+#ifdef __cplusplus
+}
+#endif
+