X-Git-Url: http://git.hcoop.net/bpt/emacs.git/blobdiff_plain/ed7f1a6c5caaf4159125c08db5d18c5471fdd032..71f88e00a23bc38dc6a15bd65bc1e64981546313:/src/s/ms-w32.h diff --git a/src/s/ms-w32.h b/src/s/ms-w32.h index bf6cc66798..bcc4c4235e 100644 --- a/src/s/ms-w32.h +++ b/src/s/ms-w32.h @@ -1,6 +1,6 @@ /* System description file for Windows NT. -Copyright (C) 1993-1995, 2001-2011 Free Software Foundation, Inc. +Copyright (C) 1993-1995, 2001-2012 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -27,6 +27,8 @@ along with GNU Emacs. If not, see . */ #define DOS_NT /* MSDOS or WINDOWSNT */ #endif +/* #undef const */ + /* If you are compiling with a non-C calling convention but need to declare vararg routines differently, put it here. */ #define _VARARGS_ __cdecl @@ -36,23 +38,10 @@ along with GNU Emacs. If not, see . */ convention must be whatever standard the libraries expect. */ #define _CALLBACK_ __cdecl -/* SYSTEM_TYPE should indicate the kind of system you are using. - It sets the Lisp variable system-type. */ -#define SYSTEM_TYPE "windows-nt" - -#define NO_MATHERR 1 - -/* Letter to use in finding device name of first pty, - if system supports pty's. 'a' means it is /dev/ptya0 */ -#define FIRST_PTY_LETTER 'a' - /* Define HAVE_TIMEVAL if the system supports the BSD style clock values. Look in for a timeval structure. */ #define HAVE_TIMEVAL 1 -/* NT supports Winsock which is close enough (with some hacks). */ -#define HAVE_SOCKETS 1 - /* But our select implementation doesn't allow us to make non-blocking connects. So until that is fixed, this is necessary: */ #define BROKEN_NON_BLOCKING_CONNECT 1 @@ -61,14 +50,25 @@ along with GNU Emacs. If not, see . */ for received packets, so datagrams are broken too. */ #define BROKEN_DATAGRAM_SOCKETS 1 -#define MAIL_USE_POP 1 #define MAIL_USE_SYSTEM_LOCK 1 /* If the character used to separate elements of the executable path is not ':', #define this to be the appropriate character constant. */ #define SEPCHAR ';' -#define ORDINARY_LINK 1 +/* Define to 1 if GCC-style __attribute__ ((__aligned__ (expr))) works. */ +#ifdef __GNUC__ +#define HAVE_ATTRIBUTE_ALIGNED 1 +#endif + +/* Define to 1 if strtold conforms to C99. */ +#ifdef __GNUC__ +#define HAVE_C99_STRTOLD 1 +#endif + +#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)) +#define HAVE___BUILTIN_UNWIND_INIT 1 +#endif /* ============================================================ */ @@ -85,7 +85,53 @@ along with GNU Emacs. If not, see . */ #define IS_DIRECTORY_SEP(_c_) ((_c_) == '/' || (_c_) == '\\') #define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_) || IS_DEVICE_SEP (_c_)) +#ifdef __GNUC__ +#ifndef __cplusplus +#undef inline +#endif +#else /* MSVC */ +#define inline __inline +#endif + +#ifdef __GNUC__ +# define restrict __restrict__ +#else +# define restrict +#endif + +/* `mode_t' is not defined for MSVC. Define. */ +#ifdef _MSC_VER +typedef unsigned short mode_t; +#endif + +/* A va_copy replacement for MSVC. */ +#ifdef _MSC_VER +# ifdef _WIN64 +# ifndef va_copy /* Need to be checked (?) */ +# define va_copy(d,s) ((d) = (s)) +# endif +# else /* not _WIN64 */ +# define va_copy(d,s) ((d) = (s)) +# endif /* not _WIN64 */ +#endif /* _MSC_VER */ + +#ifndef WINDOWSNT +/* Some of the files of Emacs which are intended for use with other + programs assume that if you have a config.h file, you must declare + the type of getenv. */ +extern char *getenv (); +#endif + +#ifdef HAVE_STRINGS_H +#include "strings.h" +#endif #include + +#ifdef _MSC_VER +typedef unsigned long sigset_t; +typedef int ssize_t; +#endif + struct sigaction { int sa_flags; void (*sa_handler)(int); @@ -102,80 +148,6 @@ struct sigaction { #define MAXPATHLEN _MAX_PATH #endif -#define HAVE_SOUND 1 -#define LISP_FLOAT_TYPE 1 - -#define HAVE_SYS_TIMEB_H 1 -#define HAVE_SYS_TIME_H 1 -#define HAVE_UNISTD_H 1 -#undef HAVE_UTIME_H -#undef HAVE_LINUX_VERSION_H -#undef HAVE_SYS_SYSTEMINFO_H -#define HAVE_LIMITS_H 1 -#define HAVE_STRING_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_PWD_H 1 -#define STDC_HEADERS 1 -#define TIME_WITH_SYS_TIME 1 - -#define HAVE_GETTIMEOFDAY 1 -#define HAVE_GETHOSTNAME 1 -#undef HAVE_GETDOMAINNAME -#define HAVE_DUP2 1 -#define HAVE_RENAME 1 -#define HAVE_CLOSEDIR 1 -#define HAVE_FSYNC 1 /* fsync is called _commit in MSVC. */ - -#undef TM_IN_SYS_TIME -#undef HAVE_TM_ZONE - -#define HAVE_LONG_FILE_NAMES 1 - -#define HAVE_MKDIR 1 -#define HAVE_RMDIR 1 -#define HAVE_RANDOM 1 -#undef HAVE_SYSINFO -#undef HAVE_LRAND48 -#define HAVE_MEMCMP 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMSET 1 -#define HAVE_LOGB 1 -#define HAVE_FREXP 1 -#define HAVE_FMOD 1 -#undef HAVE_RINT -#undef HAVE_CBRT -#define HAVE_FTIME 1 -#undef HAVE_RES_INIT /* For -lresolv on Suns. */ -#undef HAVE_SETSID -#undef HAVE_FPATHCONF -#define HAVE_SELECT 1 -#undef HAVE_EUIDACCESS -#define HAVE_GETPAGESIZE 1 -#define HAVE_TZSET 1 -#define HAVE_SETLOCALE 1 -#undef HAVE_UTIMES -#undef HAVE_SETRLIMIT -#undef HAVE_SETPGID -#undef HAVE_GETCWD -#define HAVE_SHUTDOWN 1 - -#define LOCALTIME_CACHE -#define HAVE_INET_SOCKETS 1 - -#undef HAVE_AIX_SMT_EXP -#define USE_TOOLKIT_SCROLL_BARS 1 - -/* Define if you have the ANSI `strerror' function. - Otherwise you must have the variable `char *sys_errlist[]'. */ -#define HAVE_STRERROR 1 - -/* Define if `struct utimbuf' is declared by . */ -#undef HAVE_STRUCT_UTIMBUF - -#define HAVE_MOUSE 1 -#define HAVE_H_ERRNO 1 - #ifdef HAVE_NTGUI #define HAVE_WINDOW_SYSTEM 1 #define HAVE_MENUS 1 @@ -185,6 +157,17 @@ struct sigaction { #ifdef emacs +#ifdef _MSC_VER +#include +#include +#include + +/* MSVC gets link-time errors without these redirections. */ +#define fstat(a, b) sys_fstat(a, b) +#define stat(a, b) sys_stat(a, b) +#define utime sys_utime +#endif + /* Calls that are emulated or shadowed. */ #undef access #define access sys_access @@ -216,6 +199,7 @@ struct sigaction { #define rename sys_rename #define rmdir sys_rmdir #define select sys_select +#define pselect sys_select #define sleep sys_sleep #define strerror sys_strerror #undef unlink @@ -254,6 +238,8 @@ struct sigaction { #define getpid _getpid #ifdef _MSC_VER typedef int pid_t; +#define snprintf _snprintf +#define strtoll _strtoi64 #endif #define isatty _isatty #define logb _logb @@ -262,18 +248,36 @@ typedef int pid_t; #define popen _popen #define pclose _pclose #define umask _umask +#ifndef _MSC_VER #define utimbuf _utimbuf +#endif #define strdup _strdup #define strupr _strupr #define strnicmp _strnicmp #define stricmp _stricmp #define tzset _tzset -#if !defined (_MSC_VER) || (_MSC_VER < 1400) +/* Include time.h before redirecting tzname, since MSVC's time.h + defines _tzname to call a function, but also declares tzname a + 2-element array. Having the redirection before including the + header thus has the effect of declaring a function that returns an + array, and triggers an error message. */ +#include #define tzname _tzname +#if !defined (_MSC_VER) || (_MSC_VER < 1400) +#undef utime #define utime _utime #endif +/* 'struct timespec' is used by time-related functions in lib/ and + elsewhere, but we don't use lib/time.h where the structure is + defined. */ +struct timespec +{ + time_t tv_sec; /* seconds */ + long int tv_nsec; /* nanoseconds */ +}; + /* This is hacky, but is necessary to avoid warnings about macro redefinitions using the SDK compilers. */ #ifndef __STDC__ @@ -320,14 +324,35 @@ extern char *get_emacs_configuration_options (void); #define _WINSOCKAPI_ 1 #define _WINSOCK_H +/* Prevent accidental use of features unavailable in + older Windows versions we still support. */ +#define _WIN32_WINNT 0x0400 + +/* Make a leaner executable. */ +#define WIN32_LEAN_AND_MEAN 1 + /* Defines size_t and alloca (). */ -#ifdef USE_CRT_DLL +#ifdef emacs #define malloc e_malloc #define free e_free #define realloc e_realloc #define calloc e_calloc #endif +#ifdef _MSC_VER +#define alloca _alloca +#else #include +#endif + +/* stdlib.h must be included after redefining malloc & friends, but + before redefining abort. Isn't library redefinition funny? */ +#include + +/* Redefine abort. */ +#ifdef HAVE_NTGUI +#define abort w32_abort +extern _Noreturn void w32_abort (void); +#endif #include @@ -341,17 +366,42 @@ extern char *get_emacs_configuration_options (void); #endif /* For proper declaration of environ. */ -#include #ifndef sys_nerr #define sys_nerr _sys_nerr #endif -#include extern int getloadavg (double *, int); +#if defined (__MINGW32__) || _MSC_VER >= 1400 + +/* Define to 1 if the system has the type `long long int'. */ +# define HAVE_LONG_LONG_INT 1 + +/* Define to 1 if the system has the type `unsigned long long int'. */ +# define HAVE_UNSIGNED_LONG_LONG_INT 1 + +#elif _MSC_VER >= 1200 + +/* Temporarily disable wider-than-pointer integers until they're tested more. + Build with CFLAGS='-DWIDE_EMACS_INT' to try them out. */ + +# ifdef WIDE_EMACS_INT + +/* Use pre-C99-style 64-bit integers. */ +typedef __int64 EMACS_INT; +typedef unsigned __int64 EMACS_UINT; +# define EMACS_INT_MAX _I64_MAX +# define pI "I64" + +# endif + +#endif + /* We need a little extra space, see ../../lisp/loadup.el. */ #define SYSTEM_PURESIZE_EXTRA 50000 +#define DATA_START get_data_start () + /* For unexec to work on Alpha systems, we need to put Emacs' initialized data into a separate section from the CRT initialized data (because the Alpha linker freely reorders data variables, even @@ -384,6 +434,4 @@ extern void _DebPrint (const char *fmt, ...); #define DebPrint(stuff) #endif - /* ============================================================ */ -