Mercurial > hg > xemacs-beta
view notes.txt @ 5940:c608d4b0b75e cygwin64 tip
rescue lost branch from 64bit.backup
author | Henry Thompson <ht@markup.co.uk> |
---|---|
date | Thu, 16 Dec 2021 18:48:58 +0000 |
parents | 2f34b59f451a |
children |
line wrap: on
line source
Brute-forced a set of changes which allowed make unicode-encapsulate to work 1) Patched make-mswin-unicode.pl to match macros with pointer return types; 2) Updated intl-encap-win32.c to deal with a) added functions; b) refactoring of w32api include files. Renamed DEVICE_TYPE to DEVICE_TYPE_X in device-impl.h and everywhere it is used to avoid collision with DEVICE_TYPE in winioctl.h Minimal fixes to get to compile wrt int vs. intptr_t in event-msw.c event-msw.c:67:3: error: #error Something is wrong -- you are neither Windows native (possibly MinGW) nor Cygwin. # error Something is wrong -- you are neither Windows native (possibly MinGW) nor Cygwin. Ah, need a more up-to-date config.{sub,guess}, got one from somewhere dated timestamp='2013-06-10' Copy src/s/cygwin32.h to cygwin64.h and src/m/intel386.h to x86_64.h And a configure.ac which recognises cygwin64 Remove cygwin_conv_to_posix_path from lib-src/gnuclient.c Replace calls to qxeGetWindowLong(... GWL_..) with qxeGetWindowLongPtr(... GWLP_...) (w. LONG_PTR result if used) after re-making unicode-encapsulate And one LONG l = qxeGetWindowLong (hwnd, XWL_FRAMEOBJ) to LONG_PTR l = qxeGetWindowLongPtr (hwnd, XWL_FRAMEOBJ) Ah, several bugs in new header files in w32api, required some additions to wfun_re in make-mswin-unicode.pl That's enough to get event-msw.c to compile, although there are some size-related warnings. similar problem in frame-msw.c: qxeSetClassLong (FRAME_MSWINDOWS_HANDLE (f), GCL_HICON and in glyphs-msw.c: qxeGetWindowLong (FRAME_MSWINDOWS_HANDLE (XFRAME (frame)), GWL_HINSTANCE), and scrollbar-msw.c also (void *) opaque = (void *)qxeGetWindowLong (SCROLLBAR_MSW_HANDLE (sb), GWL_USERDATA); LONG_PTR opaque = qxeGetWindowLongPtr (SCROLLBAR_MSW_HANDLE (sb), GWLP_USERDATA); and dialog-msw.c:197:31: error: ‘DWL_USER’ undeclared (first use in this function) qxeSetWindowLong (hwnd, DWL_USER, l_param); Compiles all the way through, links OK, temacs runs! Build completes xemacs -nw works but xemacs as such does not: > ./xemacs Fatal error: assertion failed, file event-msw.c, line 4149, !NILP (Vmswindows_frame_being_created) -------------- console-msw.c:116:3: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'DWORD' [-Wformat=] resolution: cast the DWORDs to long ---- event-msw.c: In function 'mswindows_wnd_proc': event-msw.c:2741:6: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] ((LCID) GetKeyboardLayout (0) & 0xFFFF), cast to intptr_t first event-msw.c:2825:50: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] virtual_key = qxeMapVirtualKeyEx (scan, 1, (HKL) lcid); cast to intptr_t first ^ event-msw.c:2839:6: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] (HKL) lcid); ^ ditto event-msw.c:2861:7: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] (HKL) lcid); ^ ditto [I _really_ don't understand the size hacking going on between LCIDs and HKLs here!] event-msw.c: In function 'emacs_mswindows_remove_timeout': event-msw.c:4200:6: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] (void *) id, MECR_DEALLOCATE_EVENT); ^ This is a hack!!! Use intptr_t instead, still a hack. frame-msw.c: In function ‘mswindows_init_frame_1’: frame-msw.c:274:41: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] qxeSetWindowLong (hwnd, XWL_FRAMEOBJ, (LONG)STORE_LISP_IN_VOID (frame_obj)); intptr_t frame-msw.c: In function ‘mswindows_get_mouse_position’: frame-msw.c:554:32: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] *frame = GET_LISP_FROM_VOID ((void *) qxeGetWindowLong (hwnd, XWL_FRAMEOBJ)); qxeGetWindowLongPtr (hwnd, XWL_FRAMEOBJ frame-msw.c: In function ‘mswindows_get_frame_parent’: frame-msw.c:822:36: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] parent = GET_LISP_FROM_VOID ((void *) qxeGetWindowLong (hwnd, XWL_FRAMEOBJ)); ditto glyphs-msw.c: In function 'mswindows_widget_instantiate': glyphs-msw.c:2261:8: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] (HMENU)id, /* No menu */ intptr_t id = -1; menubar-msw.c: In function 'empty_menu': menubar-msw.c:98:24: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] #define EMPTY_ITEM_ID ((UINT)STORE_LISP_IN_VOID (Qunbound)) menubar-msw.c:181:49: note: in expansion of macro 'EMPTY_ITEM_ID' qxeAppendMenu (menu, MF_STRING | MF_GRAYED, EMPTY_ITEM_ID, resolved:#define EMPTY_ITEM_ID ((UINT)STORE_LISP_IN_VOID (Qunbound)) intptr_t dialog-msw.c:764:9: warning: passing argument 4 of 'qxeCreateDialogIndirectParam' from incompatible pointer type [enabled by default] (LPARAM) STORE_LISP_IN_VOID (obj)); ^ intptr_t toolbar-msw.c: In function 'mswindows_clear_toolbar': toolbar-msw.c:100:55: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] qxeSendMessage (toolbarwnd, TB_GETIMAGELIST, 0, (LONG) &ilist); ^ intptr_t toolbar-msw.c: In function 'mswindows_output_toolbar': toolbar-msw.c:370:10: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] (HMENU)(TOOLBAR_ID_BIAS + pos), ^ (intptr_t) In file included from mule-coding.c:32:0: mule-coding.c: In function 'parse_charset_conversion_specs': win32.c: In function 'mswindows_lisp_error_1': win32.c:259:9: warning: format '%ld' expects argument of type 'long int', but argument 3 has type 'DWORD' [-Wformat=] errnum, GetLastError ()); ^ (long) win32.c: In function 'Fmswindows_shell_execute': win32.c:352:11: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] ret = (int) qxeShellExecute (NULL, opext, doc, parmext, path, ^ intptr-t win32.c: In function 'setitimer_helper': win32.c:847:7: warning: passing argument 3 of 'timeSetEvent' from incompatible pointer type [enabled by default] event_type); ^ resoluion: pblm is elsewhere? setitimer_helper_proc (UINT UNUSED (uID), UINT UNUSED (uMsg), DWORD[_PTR] dwUser, DWORD[_PTR] UNUSED (dw1), DWORD[_PTR] UNUSED (dw2)) > make clean, try again /usr/local/src/xemacs-21.5-64bit/lib-src/winclient.c: In function 'doFile': /usr/local/src/xemacs-21.5-64bit/lib-src/winclient.c:299:4: warning: pointer targ ets in passing argument 1 of 'DdeClientTransaction' differ in signedness [-Wpoint er-sign] 0, XTYP_EXECUTE, TRANSACTION_TIMEOUT, NULL); ^ In file included from /usr/local/src/xemacs-21.5-64bit/lib-src/winclient.c:27:0: /usr/include/w32api/ddeml.h:208:19: note: expected 'LPBYTE' but argument is of ty pe 'char *' HDDEDATA WINAPI DdeClientTransaction(LPBYTE pData,DWORD cbData,HCONV hConv,HSZ hszItem,UINT wFmt,UINT wType,DWORD dwTimeout,LPDWORD pdwResult); ^ [note it's arg1 that's the problem, cast to LPBYTE] event-msw.c:4200:6: warning: passing argument 4 of 'map_event_chain_remove' makes pointer from integer without a cast [enabled by default] (intptr_t)id, MECR_DEALLOCATE_EVENT); ^ In file included from event-msw.c:72:0: events.h:956:5: note: expected 'void *' but argument is of type 'long int' int map_event_chain_remove (int (*fn) (Lisp_Object ev, void *user_data), resolution: hack, but cast _again_, i.e. (void *)(intptr_t) dialog-msw.c:764:9: warning: passing argument 4 of 'qxeCreateDialogIndirectParam' from incompatible pointer type [enabled by default] (intptr_t) STORE_LISP_IN_VOID (obj)); ^ In file included from syswindows.h:642:0, from console-msw.h:39, from console-msw-impl.h:37, from dialog-msw.c:37: intl-auto-encap-win32.h:627:6: note: expected 'DLGPROC' but argument is of type 'BOOL (*)(struct HWND__ *, UINT, WPARAM, LPARAM)' HWND qxeCreateDialogIndirectParam (HINSTANCE hInstance, LPCDLGTEMPLATEW lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam); resolved by adding a cast: (DLGPROC)dialog_proc, but not at all sure that's right > make clean, try again intl-win32.c:1509:27: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] TranslateCharsetInfo ((DWORD *) (DWORD) old_logfont.lfCharSet, &info, ^ resolution: do nothing -- I think this is necessary because of extremely aggressive argument overloading by MS intl-auto-encap-win32.c:126:5: warning: passing argument 1 of 'ShellExecuteExA' from incompatible pointer type [enabled by default] return ShellExecuteExA (pExecInfo); ^ In file included from syswindows.h:220:0, from intl-auto-encap-win32.c:12: /usr/include/w32api/shellapi.h:345:22: note: expected 'struct SHELLEXECUTEINFOA *' but argument is of type 'struct SHELLEXECUTEINFOW *' SHSTDAPI_(WINBOOL) ShellExecuteExA (SHELLEXECUTEINFOA *pExecInfo); ^ resolution: ignored, never used, removed from intl-encap-win32.c intl-auto-encap-win32.c: In function 'qxeFreeEnvironmentStrings': intl-auto-encap-win32.c:1771:5: warning: passing argument 1 of 'FreeEnvironmentStringsA' from incompatible pointer type [enabled by default] return FreeEnvironmentStringsA (penv); ^ In file included from /usr/include/w32api/winbase.h:28:0, from /usr/include/w32api/windows.h:70, from syswindows.h:204, from intl-auto-encap-win32.c:12: /usr/include/w32api/processenv.h:29:29: note: expected 'LPCH' but argument is of type 'LPWCH' WINBASEAPI WINBOOL WINAPI FreeEnvironmentStringsA (LPCH penv); ^ intl-encap-win32.c: In function 'qxeUpdateICMRegKey': intl-encap-win32.c:1426:36: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] return UpdateICMRegKeyW (arg1, (DWORD) arg2, (LPWSTR) arg3, arg4); ^ intl-encap-win32.c:1426:5: warning: passing argument 2 of 'UpdateICMRegKeyW' makes pointer from integer without a cast [enabled by default] return UpdateICMRegKeyW (arg1, (DWORD) arg2, (LPWSTR) arg3, arg4); ^ In file included from /usr/include/w32api/windows.h:71:0, from syswindows.h:204, from console-msw.h:39, from intl-encap-win32.c:44: /usr/include/w32api/wingdi.h:3425:28: note: expected 'LPWSTR' but argument is of type 'unsigned int' WINGDIAPI WINBOOL WINAPI UpdateICMRegKeyW(DWORD reserved,LPWSTR lpszCMID,LPWSTR lpszFileName,UINT command); resolution: nothing, known problem Similarly wrt qxeEnumResourceTypes, qxeEnumResourceNames, qxeEnumResourceLanguages, qxeImmSetCompositionString --------- make clean, recompile, all looks OK, try to track down the problem -- the error in event-msw.c inside mswindow_find_frame, inside intercepted_wnd_proc (a signal handler?), where we have a window with no frame saved, appears to happen when the main thread is in mswindows_init_frame_1 at frame-msw.c:139 at recompute_all_cached_specifiers_in_frame at specifier.c:3483 at recompute_one_cached_specifier_in_frame at specifier.c:3444 around the sixth one --- April 2014 above here ---- After a tiny spark on interest on xemacs-beta, did pull -u, merge and commit, make distclean, configure '--with-pdump=yes' '--with-modules=no' '--with-mule=yes' '--with-ncurses=yes' '--with-msw=yes' '--without-png' '--without-xpm' '--without-jpeg' '--with-cflags-debugging=-ggdb' No change -- -nw works, w/o -nw gives the same assertion failed. ----- Trying again, make distclean followed by > didn't work!, had to add --without-x (why???) ------ Force debug printing on by debug_mswindows_events = 3; at the end of event-msw.c Added more printing, removed frame printing, from debug_output_mswin_message ditto Narrowed it down to the qxeSetWindowLong (hwnd, XWL_FRAMEOBJ, (intptr_t)STORE_LISP_IN_VOID (frame_obj)); at the end of mswindows_init_frame_1 in frame-msw.c a) Should be ...LongtPtr b) Not enough room allocated for a 64-bit long ptr -- fixed in console-msw-impl.h ---- Trying to get a clean diff to send to Vin Need Change log entries! Working with /c/C32/usr/local/src/xemacs-21.5-mine vs. -upstream (now pulled from xemacs, not xemacs-beta) _Only_ new files are src/s/cygwin64.h src/m/x86_64.h Changed files are > diff -rq --exclude=.hg --exclude=info --exclude=*.{o,i,exe,elc} xemacs-21.5-{upstream,mine}|egrep -v Only | cut -f 2 -d ' ' | cut -f 2- -d / ChangeLog README configure configure.ac lib-src/gnuclient.c lib-src/make-mswin-unicode.pl lib-src/winclient.c src/console-msw-impl.h src/console-msw.c src/device-impl.h src/device.c src/dialog-msw.c src/event-msw.c src/frame-msw.c src/frame.c src/glyphs-msw.c src/glyphs.c src/intl-auto-encap-win32.c src/intl-auto-encap-win32.h src/intl-encap-win32.c src/menubar-msw.c src/process-unix.c src/scrollbar-msw.c src/specifier.c src/toolbar-msw.c src/win32.c This version works with cygwin, is in /usr/local/bin as of 28 July. Subsequent edits are pbly abandoned rework of the cygwin/cygwin32/cygwin64 switch