This fixes issue5143 and includes a test.

Issue5143 notes that getpath.c and main.c pass a 'char*' where
a 'wchar_t*' is expected on OSX.
diff --git a/Modules/getpath.c b/Modules/getpath.c
index 064877c..b7f178e 100644
--- a/Modules/getpath.c
+++ b/Modules/getpath.c
@@ -457,6 +457,7 @@
 #else
     unsigned long nsexeclength = MAXPATHLEN;
 #endif
+	char execpath[MAXPATHLEN+1];
 #endif
 
     if (_path) {
@@ -486,8 +487,13 @@
       * will fail if a relative path was used. but in that case,
       * absolutize() should help us out below
       */
-     else if(0 == _NSGetExecutablePath(progpath, &nsexeclength) && progpath[0] == SEP)
-       ;
+	else if(0 == _NSGetExecutablePath(execpath, &nsexeclength) && execpath[0] == SEP) {
+		size_t r = mbstowcs(progpath, execpath, MAXPATHLEN+1);
+		if (r == (size_t)-1 || r > MAXPATHLEN) {
+			/* Could not convert execpath, or it's too long. */
+			progpath[0] = '\0';
+		}
+	}
 #endif /* __APPLE__ */
 	else if (path) {
 		while (1) {
diff --git a/Modules/main.c b/Modules/main.c
index 6de1523..8352e66 100644
--- a/Modules/main.c
+++ b/Modules/main.c
@@ -487,10 +487,23 @@
 	   so the actual executable path is passed in an environment variable.
 	   See Lib/plat-mac/bundlebuiler.py for details about the bootstrap
 	   script. */
-	if ((p = Py_GETENV("PYTHONEXECUTABLE")) && *p != '\0')
-		Py_SetProgramName(p);
-	else
+	if ((p = Py_GETENV("PYTHONEXECUTABLE")) && *p != '\0') {
+		wchar_t* buffer;
+		size_t len = strlen(p);
+		size_t r;
+
+		buffer = malloc(len * sizeof(wchar_t));
+		if (buffer == NULL) {
+			Py_FatalError(
+			   "not enough memory to copy PYTHONEXECUTABLE");
+		}
+
+		r = mbstowcs(buffer, p, len);
+		Py_SetProgramName(buffer);
+		/* buffer is now handed off - do not free */
+	} else {
 		Py_SetProgramName(argv[0]);
+	}
 #else
 	Py_SetProgramName(argv[0]);
 #endif