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

Attachment: 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_

Reply via email to