+ global features
+ */
+
+/* GUI build by default */
+#if !defined(wxUSE_GUI)
+# define wxUSE_GUI 1
+#endif /* !defined(wxUSE_GUI) */
+
+/*
+ If we're compiling without support for threads/exceptions we have to
+ disable the corresponding features.
+ */
+#ifdef wxNO_THREADS
+# undef wxUSE_THREADS
+# define wxUSE_THREADS 0
+#endif /* wxNO_THREADS */
+
+#ifdef wxNO_EXCEPTIONS
+# undef wxUSE_EXCEPTIONS
+# define wxUSE_EXCEPTIONS 0
+#endif /* wxNO_EXCEPTIONS */
+
+/* we also must disable exceptions if compiler doesn't support them */
+#if defined(_MSC_VER) && !defined(_CPPUNWIND)
+# undef wxUSE_EXCEPTIONS
+# define wxUSE_EXCEPTIONS 0
+#endif /* VC++ without exceptions support */
+
+
+/*
+ tests for non GUI features
+ */
+
+#ifndef wxUSE_CRASHREPORT
+ /* this one is special: as currently it is Windows-only, don't force it
+ to be defined on other platforms */
+# if defined(wxABORT_ON_CONFIG_ERROR) && defined(__WXMSW__)
+# error "wxUSE_CRASHREPORT must be defined."
+# else
+# define wxUSE_CRASHREPORT 0
+# endif
+#endif /* !defined(wxUSE_CRASHREPORT) */
+
+#ifndef wxUSE_DYNLIB_CLASS
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_DYNLIB_CLASS must be defined."
+# else
+# define wxUSE_DYNLIB_CLASS 0
+# endif
+#endif /* !defined(wxUSE_DYNLIB_CLASS) */
+
+#ifndef wxUSE_EXCEPTIONS
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_EXCEPTIONS must be defined."
+# else
+# define wxUSE_EXCEPTIONS 0
+# endif
+#endif /* !defined(wxUSE_EXCEPTIONS) */
+
+#ifndef wxUSE_FILESYSTEM
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_FILESYSTEM must be defined."
+# else
+# define wxUSE_FILESYSTEM 0
+# endif
+#endif /* !defined(wxUSE_FILESYSTEM) */
+
+/* don't give an error about this one yet, it's not fully implemented */
+#ifndef wxUSE_FSVOLUME
+# define wxUSE_FSVOLUME 0
+#endif /* !defined(wxUSE_FSVOLUME) */
+
+#ifndef wxUSE_DYNAMIC_LOADER
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_DYNAMIC_LOADER must be defined."
+# else
+# define wxUSE_DYNAMIC_LOADER 0
+# endif
+#endif /* !defined(wxUSE_DYNAMIC_LOADER) */
+
+#ifndef wxUSE_LOG
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_LOG must be defined."
+# else
+# define wxUSE_LOG 0
+# endif
+#endif /* !defined(wxUSE_LOG) */
+
+#ifndef wxUSE_LONGLONG
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_LONGLONG must be defined."
+# else
+# define wxUSE_LONGLONG 0
+# endif
+#endif /* !defined(wxUSE_LONGLONG) */
+
+#ifndef wxUSE_MIMETYPE
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_MIMETYPE must be defined."
+# else
+# define wxUSE_MIMETYPE 0
+# endif
+#endif /* !defined(wxUSE_MIMETYPE) */
+
+#ifndef wxUSE_ON_FATAL_EXCEPTION
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_ON_FATAL_EXCEPTION must be defined."
+# else
+# define wxUSE_ON_FATAL_EXCEPTION 0
+# endif
+#endif /* !defined(wxUSE_ON_FATAL_EXCEPTION) */
+
+#ifndef wxUSE_PROTOCOL
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_PROTOCOL must be defined."
+# else
+# define wxUSE_PROTOCOL 0
+# endif
+#endif /* !defined(wxUSE_PROTOCOL) */
+
+/* we may not define wxUSE_PROTOCOL_XXX if wxUSE_PROTOCOL is set to 0 */
+#if !wxUSE_PROTOCOL
+# undef wxUSE_PROTOCOL_HTTP
+# undef wxUSE_PROTOCOL_FTP
+# undef wxUSE_PROTOCOL_FILE
+# define wxUSE_PROTOCOL_HTTP 0
+# define wxUSE_PROTOCOL_FTP 0
+# define wxUSE_PROTOCOL_FILE 0
+#endif /* wxUSE_PROTOCOL */
+
+#ifndef wxUSE_PROTOCOL_HTTP
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_PROTOCOL_HTTP must be defined."
+# else
+# define wxUSE_PROTOCOL_HTTP 0
+# endif
+#endif /* !defined(wxUSE_PROTOCOL_HTTP) */
+
+#ifndef wxUSE_PROTOCOL_FTP
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_PROTOCOL_FTP must be defined."
+# else
+# define wxUSE_PROTOCOL_FTP 0
+# endif
+#endif /* !defined(wxUSE_PROTOCOL_FTP) */
+
+#ifndef wxUSE_PROTOCOL_FILE
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_PROTOCOL_FILE must be defined."
+# else
+# define wxUSE_PROTOCOL_FILE 0
+# endif
+#endif /* !defined(wxUSE_PROTOCOL_FILE) */
+
+#ifndef wxUSE_REGEX
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_REGEX must be defined."
+# else
+# define wxUSE_REGEX 0
+# endif
+#endif /* !defined(wxUSE_REGEX) */
+
+#ifndef wxUSE_STDPATHS
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_STDPATHS must be defined."
+# else
+# define wxUSE_STDPATHS 1
+# endif
+#endif /* !defined(wxUSE_STDPATHS) */
+
+#ifndef wxUSE_XML
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_XML must be defined."
+# else
+# define wxUSE_XML 0
+# endif
+#endif /* !defined(wxUSE_XML) */
+
+#ifndef wxUSE_SOCKETS
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_SOCKETS must be defined."
+# else
+# define wxUSE_SOCKETS 0
+# endif
+#endif /* !defined(wxUSE_SOCKETS) */
+
+#ifndef wxUSE_STREAMS
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_STREAMS must be defined."
+# else
+# define wxUSE_STREAMS 0
+# endif
+#endif /* !defined(wxUSE_STREAMS) */
+
+#ifndef wxUSE_STOPWATCH
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_STOPWATCH must be defined."
+# else
+# define wxUSE_STOPWATCH 0
+# endif
+#endif /* !defined(wxUSE_STOPWATCH) */
+
+#ifndef wxUSE_TEXTBUFFER
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_TEXTBUFFER must be defined."
+# else
+# define wxUSE_TEXTBUFFER 0
+# endif
+#endif /* !defined(wxUSE_TEXTBUFFER) */
+
+#ifndef wxUSE_TEXTFILE
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_TEXTFILE must be defined."
+# else
+# define wxUSE_TEXTFILE 0
+# endif
+#endif /* !defined(wxUSE_TEXTFILE) */
+
+#ifndef wxUSE_UNICODE
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_UNICODE must be defined."
+# else
+# define wxUSE_UNICODE 0
+# endif
+#endif /* !defined(wxUSE_UNICODE) */
+
+#ifndef wxUSE_URL
+# ifdef wxABORT_ON_CONFIG_ERROR
+# error "wxUSE_URL must be defined."
+# else
+# define wxUSE_URL 0
+# endif
+#endif /* !defined(wxUSE_URL) */
+
+/*
+ all these tests are for GUI only