Minor fixes for MinGW64 build.
authorFabrice Popineau <fabrice.popineau@supelec.fr>
Tue, 31 Dec 2013 16:01:34 +0000 (18:01 +0200)
committerEli Zaretskii <eliz@gnu.org>
Tue, 31 Dec 2013 16:01:34 +0000 (18:01 +0200)
 configure.ac (canonical, C_SWITCH_SYSTEM): Support a 64-bit
 MinGW64 build on MS-Windows.

 nt/inc/ms-w32.h (sys_kill): Fix prototype.

 src/w32term.c (w32_initialize): Use LCID and LOWORD.
 src/w32proc.c (create_child): Use pid_t for 5th argument.
 (IsValidLocale): Don't provide prototype for MinGW64.
 (Fw32_get_valid_keyboard_layouts, Fw32_get_keyboard_layout)
 (Fw32_set_keyboard_layout): Use HKL and HIWORD/LOWORD.
 src/w32heap.c (allocate_heap) [_WIN64]: Use "ull", not "i64", which
 MinGW64 doesn't support.
 src/lisp.h (EMACS_INT) [_WIN64]: Define for the MinGW64 build.

ChangeLog
configure.ac
nt/ChangeLog
nt/inc/ms-w32.h
src/ChangeLog
src/lisp.h
src/w32heap.c
src/w32proc.c
src/w32term.c

index 906ce82..60f0614 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-12-31  Fabrice Popineau  <fabrice.popineau@supelec.fr>
+
+       * configure.ac (canonical, C_SWITCH_SYSTEM): Support a 64-bit
+       MinGW64 build on MS-Windows.
+
 2013-12-29  Jan Djärv  <jan.h.d@swipnet.se>
 
        * configure.ac (xcsdkdir): Only set if using xcrun.
index 059f04b..f0b1358 100644 (file)
@@ -622,6 +622,18 @@ case "${canonical}" in
     esac
   ;;
 
+  # MinGW64
+  x86_64-*-* )
+    case "${canonical}" in
+      *-mingw32 )
+               opsys=mingw32
+               # MinGW overrides and adds some system headers in nt/inc.
+               GCC_TEST_OPTIONS="-I $srcdir/nt/inc"
+               ;;
+      ## Otherwise, we'll fall through to the generic opsys code at the bottom.
+    esac
+  ;;
+
   * )
     unported=yes
   ;;
@@ -1215,7 +1227,12 @@ C_SWITCH_SYSTEM=
 ## additional optimization.  --nils@exp-math.uni-essen.de
 test "$opsys" = "aix4.2" && test "x$GCC" != "xyes" && \
   C_SWITCH_SYSTEM="-ma -qmaxmem=4000"
-test "$opsys" = "mingw32" && C_SWITCH_SYSTEM="-mtune=pentium4"
+if test "$opsys" = "mingw32"; then
+  case "$canonical" in
+    x86_64-*-mingw32) C_SWITCH_SYSTEM="-mtune=generic" ;;
+    *) C_SWITCH_SYSTEM="-mtune=pentium4" ;;
+  esac
+fi
 ## gnu-linux might need -D_BSD_SOURCE on old libc5 systems.
 ## It is redundant in glibc2, since we define _GNU_SOURCE.
 AC_SUBST(C_SWITCH_SYSTEM)
@@ -4802,7 +4819,7 @@ case "$opsys" in
    ## pass a different -entry switch to linker.  FIXME: It is better
    ## to make the entry points the same by changing unexw32.c.
    case "$canonical" in
-     x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-entry,_start -Wl,-Map,./temacs.map" ;;
+     x86_64-*-*) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
      *) LD_SWITCH_SYSTEM_TEMACS="-Wl,-stack,0x00800000 -Wl,-heap,0x00100000 -Wl,-image-base,0x01000000 -Wl,-entry,__start -Wl,-Map,./temacs.map" ;;
    esac
    ;;
index 8eb601d..8083fc5 100644 (file)
@@ -1,3 +1,7 @@
+2013-12-31  Fabrice Popineau  <fabrice.popineau@supelec.fr>
+
+       * inc/ms-w32.h (sys_kill): Fix prototype.
+
 2013-12-30  Eli Zaretskii  <eliz@gnu.org>
 
        * inc/ms-w32.h (umask) [emacs]: Redirect to sys_umask.  (Bug#16299)
index 735f9a6..aa7690c 100644 (file)
@@ -394,7 +394,7 @@ extern int setpgrp (int, int);
 extern int sigaction (int, const struct sigaction *, struct sigaction *);
 extern int alarm (int);
 
-extern int sys_kill (int, int);
+extern int sys_kill (pid_t, int);
 
 
 /* For integration with MSDOS support.  */
index 356d0b7..d17191d 100644 (file)
@@ -1,5 +1,17 @@
 2013-12-31  Fabrice Popineau  <fabrice.popineau@supelec.fr>
 
+       * w32term.c (w32_initialize): Use LCID and LOWORD.
+
+       * w32proc.c (create_child): Use pid_t for 5th argument.
+       (IsValidLocale): Don't provide prototype for MinGW64.
+       (Fw32_get_valid_keyboard_layouts, Fw32_get_keyboard_layout)
+       (Fw32_set_keyboard_layout): Use HKL and HIWORD/LOWORD.
+
+       * w32heap.c (allocate_heap) [_WIN64]: Use "ull", not "i64", which
+       MinGW64 doesn't support.
+
+       * lisp.h (EMACS_INT) [_WIN64]: Define for the MinGW64 build.
+
        * w32.c (set_named_security_info): New function.
        (acl_set_file): Fall back on set_named_security_info if
        set_file_security fails.
index bb1c38e..0ae0e60 100644 (file)
@@ -62,7 +62,7 @@ INLINE_HEADER_BEGIN
    pI - printf length modifier for EMACS_INT
    EMACS_UINT - unsigned variant of EMACS_INT */
 #ifndef EMACS_INT_MAX
-# if LONG_MAX < LLONG_MAX && defined WIDE_EMACS_INT
+# if LONG_MAX < LLONG_MAX && (defined(WIDE_EMACS_INT) || defined(_WIN64))
 typedef long long int EMACS_INT;
 typedef unsigned long long int EMACS_UINT;
 #  define EMACS_INT_MAX LLONG_MAX
index 81206ce..405eccf 100644 (file)
@@ -78,7 +78,7 @@ allocate_heap (void)
   while (!ptr && (base < end))
     {
 #ifdef _WIN64
-      reserved_heap_size = min(end - base, 0x4000000000i64); /* Limit to 256Gb */
+      reserved_heap_size = min(end - base, 0x4000000000ull); /* Limit to 256Gb */
 #else
       reserved_heap_size = end - base;
 #endif
@@ -96,7 +96,7 @@ static char *
 allocate_heap (void)
 {
 #ifdef _WIN64
-  size_t size = 0x4000000000i64; /* start by asking for 32GB */
+  size_t size = 0x4000000000ull; /* start by asking for 32GB */
 #else
   /* We used to start with 2GB here, but on Windows 7 that would leave
      too little room in the address space for threads started by
index 2b583ef..aecf3e5 100644 (file)
@@ -43,8 +43,9 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 #undef kill
 
 #include <windows.h>
-#ifdef __GNUC__
-/* This definition is missing from mingw32 headers. */
+#if defined(__GNUC__) && !defined(__MINGW64__)
+/* This definition is missing from mingw.org headers, but not MinGW64
+   headers. */
 extern BOOL WINAPI IsValidLocale (LCID, DWORD);
 #endif
 
@@ -1066,7 +1067,7 @@ static char * process_dir;
 
 static BOOL
 create_child (char *exe, char *cmdline, char *env, int is_gui_app,
-             int * pPid, child_process *cp)
+             pid_t * pPid, child_process *cp)
 {
   STARTUPINFO start;
   SECURITY_ATTRIBUTES sec_attrs;
@@ -3084,10 +3085,10 @@ The return value is a list of pairs of language id and layout id.  */)
     {
       while (--num_layouts >= 0)
        {
-         DWORD kl = (DWORD) layouts[num_layouts];
+         HKL kl = layouts[num_layouts];
 
-         obj = Fcons (Fcons (make_number (kl & 0xffff),
-                             make_number ((kl >> 16) & 0xffff)),
+         obj = Fcons (Fcons (make_number (LOWORD (kl)),
+                             make_number (HIWORD (kl))),
                       obj);
        }
     }
@@ -3102,10 +3103,10 @@ DEFUN ("w32-get-keyboard-layout", Fw32_get_keyboard_layout,
 The return value is the cons of the language id and the layout id.  */)
   (void)
 {
-  DWORD kl = (DWORD) GetKeyboardLayout (dwWindowsThreadId);
+  HKL kl = GetKeyboardLayout (dwWindowsThreadId);
 
-  return Fcons (make_number (kl & 0xffff),
-               make_number ((kl >> 16) & 0xffff));
+  return Fcons (make_number (LOWORD (kl)),
+               make_number (HIWORD (kl)));
 }
 
 
@@ -3116,14 +3117,14 @@ The keyboard layout setting affects interpretation of keyboard input.
 If successful, the new layout id is returned, otherwise nil.  */)
   (Lisp_Object layout)
 {
-  DWORD kl;
+  HKL kl;
 
   CHECK_CONS (layout);
   CHECK_NUMBER_CAR (layout);
   CHECK_NUMBER_CDR (layout);
 
 kl = (XINT (XCAR (layout)) & 0xffff)
-    | (XINT (XCDR (layout)) << 16);
kl = (HKL) ((XINT (XCAR (layout)) & 0xffff)
+            | (XINT (XCDR (layout)) << 16));
 
   /* Synchronize layout with input thread.  */
   if (dwWindowsThreadId)
@@ -3138,7 +3139,7 @@ If successful, the new layout id is returned, otherwise nil.  */)
            return Qnil;
        }
     }
-  else if (!ActivateKeyboardLayout ((HKL) kl, 0))
+  else if (!ActivateKeyboardLayout (kl, 0))
     return Qnil;
 
   return Fw32_get_keyboard_layout ();
index 583e0eb..1753a9f 100644 (file)
@@ -6410,9 +6410,8 @@ w32_initialize (void)
   Fset_input_mode (Qnil, Qnil, make_number (2), Qnil);
 
   {
-    DWORD input_locale_id = ((DWORD_PTR) GetKeyboardLayout (0) & 0xffffffff);
-    w32_keyboard_codepage =
-      codepage_for_locale ((LCID) (input_locale_id & 0xffff));
+    LCID input_locale_id = LOWORD (GetKeyboardLayout (0));
+    w32_keyboard_codepage = codepage_for_locale (input_locale_id);
   }
 
   /* Create the window thread - it will terminate itself when the app