Asger Ottar Alstrup wrote: > Angus Leeming wrote: >> Incidentally, has an experienced Windows hand like yourself not got any >> suggestions for what I should do to handle SIGINT on Windows? > > I say, forget about it. I do not think Ctrl+C normally sends an > interrupt for Windows applications. I think it only happens for console > applications, or in extreme situations where some malicious process > sends such a signal intentionally. > > I have some questions for you: > > The intl\ folder contains a gnu gettext library. However, I need some > generated files like "libintl.h" and probably more before that compiles. > Could I have a copy?
Certainly. Attached is intl.tar.gz which contains all the files that aren't .o or .a files: charset.alias libgnuintl.h libintl.h ref-add.sed ref-del.sed > In globbing.C, you include <glob.h>. This does not exist on Windows. > What is this? Globbing? `ls *.cpp` returns "foo.cpp bar.cpp". That's globbing. globbing.[Ch] are used only by the XForms frontend. You don't need them. > In gzstream.C, we require zlib, but it does not seem we have any checks > for that. That's one for Lars. > In forkedcontr.h and forkedcall.h, we use the pid_t type, which does not > exist on Windows. Any ideas? I guess, this is stuff for the os_win32.h > header. In general, all that forking and signal stuff needs a reworking, > but I guess that was on your plate. > > In FileInfo, we use a bunch of Unix specific things, like mode_t and all > the permission constants R_OK, W_OK, X_OK and F_OK. Any ideas for those? Sure. Attached is the kludge file that is needed to compile LyX 1.3.x on Windows with g++ 3.4 under MinGW/MinSYS. os_win32.h should help you out a bit. > Incidentally, I'm at 411 errors and 180 warnings now. Should keep you busy when you're not changing nappies ;-) -- Angus
intl.tar.gz
Description: GNU Zip compressed data
Index: src/ispell.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ispell.C,v retrieving revision 1.5.2.5 diff -u -p -r1.5.2.5 ispell.C --- src/ispell.C 7 Dec 2004 10:48:23 -0000 1.5.2.5 +++ src/ispell.C 18 Jan 2005 12:45:30 -0000 @@ -21,12 +21,20 @@ #include "support/forkedcall.h" #include "support/lstrings.h" +#ifdef _WIN32 +# include "support/os_win32.h" +#endif + // HP-UX 11.x doesn't have this header #ifdef HAVE_SYS_SELECT_H #include <sys/select.h> #endif #include <sys/time.h> +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + #ifndef CXX_GLOBAL_CSTD using std::strcpy; using std::strlen; @@ -309,11 +317,15 @@ bool ISpell::select(bool & err_read) tv.tv_sec = 2; tv.tv_usec = 0; +#ifdef HAVE_SELECT retval = ::select(SELECT_TYPE_ARG1 (max(pipeout[0], pipeerr[0]) + 1), SELECT_TYPE_ARG234 (&infds), 0, 0, SELECT_TYPE_ARG5 (&tv)); +#else + retval = -1; +#endif // error if (retval <= 0) Index: src/lyx_cb.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyx_cb.C,v retrieving revision 1.190.2.3 diff -u -p -r1.190.2.3 lyx_cb.C --- src/lyx_cb.C 10 Jan 2005 19:17:24 -0000 1.190.2.3 +++ src/lyx_cb.C 18 Jan 2005 12:45:31 -0000 @@ -37,6 +37,10 @@ #include "support/systemcall.h" #include "support/lstrings.h" +#ifdef _WIN32 +# include "support/os_win32.h" // fork() +#endif + #include "BoostFormat.h" #include <fstream> Index: src/lyx_main.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyx_main.C,v retrieving revision 1.134.2.10 diff -u -p -r1.134.2.10 lyx_main.C --- src/lyx_main.C 13 Jan 2005 10:09:46 -0000 1.134.2.10 +++ src/lyx_main.C 18 Jan 2005 12:45:32 -0000 @@ -36,6 +36,10 @@ #include "support/package.h" #include "support/path.h" +#ifdef _WIN32 +# include "support/os_win32.h" // SIGHUP +#endif + #include "BoostFormat.h" #include <boost/function.hpp> Index: src/lyxserver.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxserver.C,v retrieving revision 1.48.2.2 diff -u -p -r1.48.2.2 lyxserver.C --- src/lyxserver.C 10 Jan 2005 19:17:27 -0000 1.48.2.2 +++ src/lyxserver.C 18 Jan 2005 12:45:32 -0000 @@ -49,6 +49,10 @@ #include "support/lyxlib.h" #include "frontends/lyx_gui.h" +#ifdef _WIN32 +# include "support/os_win32.h" // F_SETFL, O_NONBLOCK, fcntl +#endif + #ifdef __EMX__ #include <cstdlib> #include <io.h> Index: src/support/forkedcall.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcall.C,v retrieving revision 1.11.2.2 diff -u -p -r1.11.2.2 forkedcall.C --- src/support/forkedcall.C 7 Dec 2004 10:50:09 -0000 1.11.2.2 +++ src/support/forkedcall.C 18 Jan 2005 12:45:35 -0000 @@ -30,6 +30,9 @@ #include "lyxlib.h" #include "filetools.h" #include "os.h" +#ifdef _WIN32 +#include "os_win32.h" +#endif #include "debug.h" #include "frontends/Timeout.h" @@ -37,7 +40,9 @@ #include <cerrno> #include <sys/types.h> -#include <sys/wait.h> +#ifdef HAVE_SYS_WAIT_H +# include <sys/wait.h> +#endif #include <csignal> #include <cstdlib> #include <unistd.h> @@ -155,7 +160,7 @@ bool ForkedProcess::running() const waitpid(pid(), &waitstatus, WNOHANG); // Racy of course, but it will do. - if (::kill(pid(), 0) && errno == ESRCH) + if (lyx::kill(pid(), 0) && errno == ESRCH) return false; return true; } @@ -269,7 +274,7 @@ int Forkedcall::generateChild() } argv[index] = 0; -#ifndef __EMX__ +#if !defined(__EMX__) && !defined(_WIN32) pid_t const cpid = ::fork(); if (cpid == 0) { // Child @@ -280,9 +285,12 @@ int Forkedcall::generateChild() << strerror(errno) << endl; _exit(1); } -#else +#elif __EMX__ pid_t const cpid = spawnvp(P_SESSION|P_DEFAULT|P_MINIMIZE|P_BACKGROUND, argv[0], argv); +#else //_WIN32 + pid_t cpid = spawnvp(_P_NOWAIT, + argv[0], argv); #endif if (cpid < 0) { Index: src/support/forkedcontr.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcontr.C,v retrieving revision 1.6.2.3 diff -u -p -r1.6.2.3 forkedcontr.C --- src/support/forkedcontr.C 7 Dec 2004 10:50:09 -0000 1.6.2.3 +++ src/support/forkedcontr.C 18 Jan 2005 12:45:35 -0000 @@ -19,6 +19,10 @@ #include "lyxfunctional.h" #include "debug.h" +#ifdef _WIN32 +#include "os_win32.h" +#endif + #include "frontends/Timeout.h" #include <boost/bind.hpp> @@ -26,7 +30,10 @@ #include <cerrno> #include <cstdlib> #include <unistd.h> -#include <sys/wait.h> + +#ifdef HAVE_SYS_WAIT_H +# include <sys/wait.h> +#endif using std::vector; using std::endl; Index: src/support/kill.C =================================================================== RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/kill.C,v retrieving revision 1.7 diff -u -p -r1.7 kill.C --- src/support/kill.C 10 Jun 2002 17:31:57 -0000 1.7 +++ src/support/kill.C 18 Jan 2005 12:45:35 -0000 @@ -5,7 +5,40 @@ #include <sys/types.h> #include <csignal> +#ifdef _WIN32 +#include "debug.h" +#include "os.h" + +#include <windows.h> +#include <errno.h> + +using std::endl; +#endif //_WIN32 + int lyx::kill(int pid, int sig) { +#ifdef _WIN32 + if (pid == (int)GetCurrentProcessId()) + return -(raise(sig)); + else{ + HANDLE hProcess; + if (!(hProcess = + OpenProcess(PROCESS_ALL_ACCESS, TRUE, pid))) { + lyxerr << "kill OpenProcess failed!" << endl; + return -1; + } + else { + if (!TerminateProcess(hProcess, sig)){ + lyxerr << "kill process failed!" << endl; + CloseHandle(hProcess); + return -1; + } + CloseHandle(hProcess); + } + } + return 0; + +#else return ::kill(pid, sig); +#endif } Index: src/support/os_win32.h =================================================================== RCS file: src/support/os_win32.h diff -N src/support/os_win32.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/support/os_win32.h 18 Jan 2005 12:45:35 -0000 @@ -0,0 +1,76 @@ +// os_win32.h copyright "Ruurd A. Reitsma" <[EMAIL PROTECTED]> + +#ifndef _OS_WIN32_H_ +#define _OS_WIN32_H_ + +//Avoid zillions of windows includes +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +//fcntl.h +#define FD_CLOEXEC 1 /* posix */ +#define F_DUPFD 0 /* Duplicate fildes */ +#define F_GETFD 1 /* Get fildes flags (close on exec) */ +#define F_SETFD 2 /* Set fildes flags (close on exec) */ +#define F_GETFL 3 /* Get file flags */ +#define F_SETFL 4 /* Set file flags */ +#define O_NONBLOCK 0x4000 +inline int fcntl (int, int, ...) {return -1;} + +//signal.h +#define SIGHUP 1 +#define SIGKILL 9 + +//sys/time.h +//struct timeval { +// long tv_sec; +// long tv_usec; +//}; + +//unistd.h +inline int fork () {return -1;} +#define pipe(a) _pipe(a,0,0) + + +//sys/wait.h +#define waitpid(a,b,c) cwait(b,a,c) +#define WNOHANG 1 +#define WUNTRACED 2 +#define WIFEXITED(a) 0 +#define WEXITSTATUS(a) 0 +#define WIFSIGNALED(a) 0 +#define WTERMSIG(a) 0 +#define WIFSTOPPED(a) 0 +#define WSTOPSIG(a) 0 + +//sys/types.h +#define fd_set int + +//sys/select.h +//#define select(a,b,c,d,e) -1 +#define FD_ZERO(a) +#define FD_SET(a,b) +#define FD_ISSET(fd, set) 0 + +#ifndef __MINGW32__ //already defined in mingw headers + +#define _S_IFBLK 0x3000 +#define S_IFIFO _S_IFIFO +#define S_IFBLK _S_IFBLK +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define popen(a,b) _popen(a,b) +#define pclose(a) _pclose(a) + +#endif //!__MINGW32 + +#ifdef __cplusplus +} +#endif + +#endif //_OS_WIN32_H_