Author: martin.v.loewis
Date: Fri Aug 31 09:58:36 2007
New Revision: 57823
Modified:
python/branches/py3k/Lib/test/regrtest.py
python/branches/py3k/Modules/main.c
python/branches/py3k/PC/msvcrtmodule.c
python/branches/py3k/Tools/buildbot/test.bat
Log:
Revert 57722. Move error dialog APIs to msvcrt instead,
add -n option to regrtest, and use it on the buildbot.
Modified: python/branches/py3k/Lib/test/regrtest.py
==============================================================================
--- python/branches/py3k/Lib/test/regrtest.py (original)
+++ python/branches/py3k/Lib/test/regrtest.py Fri Aug 31 09:58:36 2007
@@ -28,6 +28,7 @@
-L: runleaks -- run the leaks(1) command just before exit
-R: huntrleaks -- search for reference leaks (needs debug build, v. slow)
-M: memlimit -- run very large memory-consuming tests
+-n: nowindows -- suppress error message boxes on Windows
If non-option arguments are present, they are names for tests to run,
unless -x is given, in which case they are names for tests not to run.
@@ -210,13 +211,13 @@
test_support.record_original_stdout(sys.stdout)
try:
- opts, args = getopt.getopt(sys.argv[1:], 'dhvgqxsS:rf:lu:t:TD:NLR:wM:',
+ opts, args = getopt.getopt(sys.argv[1:],
'dhvgqxsS:rf:lu:t:TD:NLR:wM:n',
['help', 'verbose', 'quiet', 'generate',
'exclude', 'single', 'random', 'fromfile',
'findleaks', 'use=', 'threshold=', 'trace',
'coverdir=', 'nocoverdir', 'runleaks',
'huntrleaks=', 'verbose2', 'memlimit=',
- 'debug', 'start='
+ 'debug', 'start=', "nowindows"
])
except getopt.error as msg:
usage(msg)
@@ -296,6 +297,21 @@
use_resources.remove(r)
elif r not in use_resources:
use_resources.append(r)
+ elif o in ('-n', '--nowindows'):
+ import msvcrt
+ msvcrt.SetErrorMode(msvcrt.SEM_FAILCRITICALERRORS|
+ msvcrt.SEM_NOALIGNMENTFAULTEXCEPT|
+ msvcrt.SEM_NOGPFAULTERRORBOX|
+ msvcrt.SEM_NOOPENFILEERRORBOX)
+ try:
+ msvcrt.CrtSetReportMode
+ except AttributeError:
+ # release build
+ pass
+ else:
+ for m in [msvcrt.CRT_WARN, msvcrt.CRT_ERROR,
msvcrt.CRT_ASSERT]:
+ msvcrt.CrtSetReportMode(m, msvcrt.CRTDBG_MODE_FILE)
+ msvcrt.CrtSetReportFile(m, msvcrt.CRTDBG_FILE_STDERR)
if generate and verbose:
usage("-g and -v don't go together!")
if single and fromfile:
Modified: python/branches/py3k/Modules/main.c
==============================================================================
--- python/branches/py3k/Modules/main.c (original)
+++ python/branches/py3k/Modules/main.c Fri Aug 31 09:58:36 2007
@@ -328,25 +328,6 @@
(p = Py_GETENV("PYTHONUNBUFFERED")) && *p != '\0')
unbuffered = 1;
-#ifdef MS_WINDOWS
- if ((p = Py_GETENV("PYTHONNOERRORWINDOW")) && *p != '\0') {
- /* Disable all error windows created by the sytem
- or the CRT. */
-#if defined(_DEBUG) && defined(_MSC_VER)
- int types[] = {_CRT_WARN, _CRT_ERROR, _CRT_ASSERT};
- int i;
- for (i = 0; i < sizeof(types)/sizeof(types[0]); i++) {
- _CrtSetReportFile(types[i], _CRTDBG_FILE_STDERR);
- _CrtSetReportMode(types[i], _CRTDBG_MODE_FILE);
- }
- _set_error_mode(_OUT_TO_STDERR);
-#endif
- SetErrorMode(SEM_FAILCRITICALERRORS |
SEM_NOALIGNMENTFAULTEXCEPT |
- SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX);
- }
-#endif
-
-
if (command == NULL && module == NULL && _PyOS_optind < argc &&
strcmp(argv[_PyOS_optind], "-") != 0)
{
Modified: python/branches/py3k/PC/msvcrtmodule.c
==============================================================================
--- python/branches/py3k/PC/msvcrtmodule.c (original)
+++ python/branches/py3k/PC/msvcrtmodule.c Fri Aug 31 09:58:36 2007
@@ -21,6 +21,8 @@
#include <io.h>
#include <conio.h>
#include <sys/locking.h>
+#include <crtdbg.h>
+#include <windows.h>
// Force the malloc heap to clean itself up, and free unused blocks
// back to the OS. (According to the docs, only works on NT.)
@@ -201,6 +203,60 @@
}
}
+#ifdef _DEBUG
+
+static PyObject*
+msvcrt_setreportfile(PyObject *self, PyObject *args)
+{
+ int type, file;
+ _HFILE res;
+
+ if (!PyArg_ParseTuple(args, "ii", &type, &file))
+ return NULL;
+ res = _CrtSetReportFile(type, (_HFILE)file);
+ return PyInt_FromLong((long)res);
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyObject*
+msvcrt_setreportmode(PyObject *self, PyObject *args)
+{
+ int type, mode;
+ int res;
+
+ if (!PyArg_ParseTuple(args, "ii", &type, &mode))
+ return NULL;
+ res = _CrtSetReportMode(type, mode);
+ if (res == -1)
+ return PyErr_SetFromErrno(PyExc_IOError);
+ return PyLong_FromLong(res);
+}
+
+static PyObject*
+msvcrt_seterrormode(PyObject *self, PyObject *args)
+{
+ int mode, res;
+
+ if (!PyArg_ParseTuple(args, "i", &mode))
+ return NULL;
+ res = _set_error_mode(mode);
+ return PyLong_FromLong(res);
+}
+
+#endif
+
+static PyObject*
+seterrormode(PyObject *self, PyObject *args)
+{
+ unsigned int mode, res;
+
+ if (!PyArg_ParseTuple(args, "I", &mode))
+ return NULL;
+ res = SetErrorMode(mode);
+ return PyLong_FromUnsignedLong(res);
+}
+
/* List of functions exported by this module */
static struct PyMethodDef msvcrt_functions[] = {
@@ -214,6 +270,12 @@
{"getche", msvcrt_getche, METH_VARARGS},
{"putch", msvcrt_putch, METH_VARARGS},
{"ungetch", msvcrt_ungetch, METH_VARARGS},
+ {"SetErrorMode", seterrormode, METH_VARARGS},
+#ifdef _DEBUG
+ {"CrtSetReportFile", msvcrt_setreportfile, METH_VARARGS},
+ {"CrtSetReportMode", msvcrt_setreportmode, METH_VARARGS},
+ {"set_error_mode", msvcrt_seterrormode, METH_VARARGS},
+#endif
{NULL, NULL}
};
@@ -232,4 +294,20 @@
insertint(d, "LK_NBRLCK", _LK_NBRLCK);
insertint(d, "LK_RLCK", _LK_RLCK);
insertint(d, "LK_UNLCK", _LK_UNLCK);
+ insertint(d, "SEM_FAILCRITICALERRORS", SEM_FAILCRITICALERRORS);
+ insertint(d, "SEM_NOALIGNMENTFAULTEXCEPT", SEM_NOALIGNMENTFAULTEXCEPT);
+ insertint(d, "SEM_NOGPFAULTERRORBOX", SEM_NOGPFAULTERRORBOX);
+ insertint(d, "SEM_NOOPENFILEERRORBOX", SEM_NOOPENFILEERRORBOX);
+#ifdef _DEBUG
+ insertint(d, "CRT_WARN", _CRT_WARN);
+ insertint(d, "CRT_ERROR", _CRT_ERROR);
+ insertint(d, "CRT_ASSERT", _CRT_ASSERT);
+ insertint(d, "CRTDBG_MODE_DEBUG", _CRTDBG_MODE_DEBUG);
+ insertint(d, "CRTDBG_MODE_FILE", _CRTDBG_MODE_FILE);
+ insertint(d, "CRTDBG_MODE_WNDW", _CRTDBG_MODE_WNDW);
+ insertint(d, "CRTDBG_REPORT_MODE", _CRTDBG_REPORT_MODE);
+ insertint(d, "CRTDBG_FILE_STDERR", (int)_CRTDBG_FILE_STDERR);
+ insertint(d, "CRTDBG_FILE_STDOUT", (int)_CRTDBG_FILE_STDOUT);
+ insertint(d, "CRTDBG_REPORT_FILE", (int)_CRTDBG_REPORT_FILE);
+#endif
}
Modified: python/branches/py3k/Tools/buildbot/test.bat
==============================================================================
--- python/branches/py3k/Tools/buildbot/test.bat (original)
+++ python/branches/py3k/Tools/buildbot/test.bat Fri Aug 31 09:58:36 2007
@@ -1,4 +1,3 @@
@rem Used by the buildbot "test" step.
cd PCbuild
-set PYTHONNOERRORWINDOW=1
-call rt.bat -d -q -uall -rw
+call rt.bat -d -q -uall -rw -n
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins