Replace Asger's huge patch with the kludges needed to compile LyX with MSVC.

The good stuff is in the repository already.


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9559 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Angus Leeming 2005-01-31 16:35:16 +00:00
parent e22c5f4d97
commit 30e565bb29
3 changed files with 805 additions and 2221 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,9 +6,10 @@ To compile using MicroSoft Visual Studio 2003.NET, do this:
2) Make sure QTDIR is set in your global environment, and QTDIR\bin 2) Make sure QTDIR is set in your global environment, and QTDIR\bin
is in your path. Control panel, system, advanced, environment is in your path. Control panel, system, advanced, environment
variables in your friend on Windows XP. variables in your friend on Windows XP.
3) Apply the lyx-devel.patch using GNU patch. Download from 3) Apply the win32_kludge.diff using GNU patch. Download from
http://gnuwin32.sourceforge.net/packages/patch.htm http://gnuwin32.sourceforge.net/packages/patch.htm
and type "patch -p0 development\win32\lyx-devel.patch" in cmd box with current working directory right outside and type "patch -p0 < development\win32\win32_kludge.diff"
in cmd box with current working directory right outside
lyx-devel lyx-devel
4) Open the development\win32\lyx.sln file in Visual Studio, 4) Open the development\win32\lyx.sln file in Visual Studio,
compile and run. You can probably also use the free version compile and run. You can probably also use the free version

View File

@ -0,0 +1,802 @@
Index: src/DepTable.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/DepTable.C,v
retrieving revision 1.41
diff -u -r1.41 DepTable.C
--- src/DepTable.C 13 Oct 2003 01:01:33 -0000 1.41
+++ src/DepTable.C 19 Jan 2005 10:35:54 -0000
@@ -26,7 +26,9 @@
#include <fstream>
#ifndef CXX_GLOBAL_CSTD
+# ifndef _WIN32
using std::time;
+# endif
#endif
using lyx::support::ltrim;
Index: src/buffer.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/buffer.C,v
retrieving revision 1.609
diff -u -r1.609 buffer.C
--- src/buffer.C 31 Jan 2005 10:42:17 -0000 1.609
+++ src/buffer.C 31 Jan 2005 11:08:10 -0000
@@ -77,7 +77,11 @@
#include <boost/bind.hpp>
#include <boost/filesystem/operations.hpp>
-#include <utime.h>
+#ifdef _WIN32
+# include <windows.h>
+#else
+# include <utime.h>
+#endif
#include <iomanip>
#include <stack>
Index: src/cursor.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/cursor.C,v
retrieving revision 1.119
diff -u -r1.119 cursor.C
--- src/cursor.C 18 Jan 2005 14:15:55 -0000 1.119
+++ src/cursor.C 31 Jan 2005 11:08:09 -0000
@@ -58,7 +58,9 @@
using std::vector;
using std::endl;
#ifndef CXX_GLOBAL_CSTD
+# ifndef _WIN32
using std::isalpha;
+# endif
#endif
using std::min;
using std::swap;
Index: src/ispell.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/ispell.C,v
retrieving revision 1.25
diff -u -r1.25 ispell.C
--- src/ispell.C 20 Jan 2005 16:17:36 -0000 1.25
+++ src/ispell.C 23 Jan 2005 12:09:37 -0000
@@ -24,11 +24,17 @@
#include "support/forkedcall.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>
+#ifndef _WIN32
+# include <sys/time.h>
+#endif
using boost::shared_ptr;
@@ -88,6 +94,7 @@
}
// child process
+#ifndef _WIN32
dup2(pipein[0], STDIN_FILENO);
dup2(pipeout[1], STDOUT_FILENO);
dup2(pipeerr[1], STDERR_FILENO);
@@ -180,6 +187,7 @@
lyxerr << "LyX: Failed to start ispell!" << endl;
_exit(0);
+#endif
}
@@ -191,6 +199,7 @@
{
lyxerr[Debug::GUI] << "Created ispell" << endl;
+#ifndef _WIN32
// static due to the setvbuf. Ugly.
static char o_buf[BUFSIZ];
@@ -275,6 +284,7 @@
close(pipeerr[1]);
child_->kill();
child_.reset(0);
+#endif
}
@@ -295,18 +305,23 @@
fclose(out);
}
+#ifndef _WIN32
close(pipein[0]);
close(pipein[1]);
close(pipeout[0]);
close(pipeout[1]);
close(pipeerr[0]);
close(pipeerr[1]);
+#endif
delete [] str;
}
bool ISpell::select(bool & err_read)
{
+#ifdef _WIN32
+ return false;
+#else
fd_set infds;
struct timeval tv;
int retval = 0;
@@ -316,11 +331,15 @@
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)
@@ -335,6 +354,7 @@
fgets(buf, BUFSIZ, in);
err_read = false;
return false;
+#endif
}
Index: src/lyx_cb.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyx_cb.C,v
retrieving revision 1.247
diff -u -r1.247 lyx_cb.C
--- src/lyx_cb.C 31 Jan 2005 10:42:18 -0000 1.247
+++ src/lyx_cb.C 31 Jan 2005 10:57:53 -0000
@@ -44,6 +44,10 @@
#include "support/path.h"
#include "support/systemcall.h"
+#ifdef _WIN32
+# include "support/os_win32.h" // fork()
+#endif
+
#include <boost/shared_ptr.hpp>
#include <boost/filesystem/operations.hpp>
Index: src/lyxserver.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxserver.C,v
retrieving revision 1.59
diff -u -r1.59 lyxserver.C
--- src/lyxserver.C 20 Jan 2005 15:07:36 -0000 1.59
+++ src/lyxserver.C 21 Jan 2005 09:47:31 -0000
@@ -54,6 +54,10 @@
#include <sys/stat.h>
#include <fcntl.h>
+#ifdef _WIN32
+# include "support/os_win32.h" // F_SETFL, O_NONBLOCK, fcntl
+#endif
+
#ifdef __EMX__
#include <cstdlib>
#include <io.h>
@@ -182,6 +186,8 @@
// Imported handles can be used both with OS/2 APIs and emx
// library functions.
fd = _imphandle(os2fd);
+#elif defined(_WIN32)
+
#else
if (::access(filename.c_str(), F_OK) == 0) {
lyxerr << "LyXComm: Pipe " << filename << " already exists.\n"
@@ -236,10 +242,12 @@
}
#endif
+#ifndef _WIN32
if (::close(fd) < 0) {
lyxerr << "LyXComm: Could not close pipe " << filename
<< '\n' << strerror(errno) << endl;
}
+#endif
// OS/2 pipes are deleted automatically
#ifndef __EMX__
@@ -275,7 +283,13 @@
errno = 0;
int status;
// the single = is intended here.
- while ((status = ::read(infd, charbuf, charbuf_size - 1))) {
+ while ((status =
+#ifndef _WIN32
+ ::read(infd, charbuf, charbuf_size - 1)
+#else
+ -1
+#endif
+ )) {
if (status > 0) {
charbuf[status] = '\0'; // turn it into a c string
@@ -332,6 +346,9 @@
if (pipename.empty()) return;
+#ifdef _WIN32
+ return;
+#else
if (!ready) {
lyxerr << "LyXComm: Pipes are closed. Could not send "
<< msg << endl;
@@ -342,6 +359,7 @@
closeConnection();
openConnection();
}
+#endif
#ifdef __EMX__
APIRET rc;
int errnum;
Index: src/lyxsocket.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxsocket.C,v
retrieving revision 1.6
diff -u -r1.6 lyxsocket.C
--- src/lyxsocket.C 23 Jul 2004 19:01:48 -0000 1.6
+++ src/lyxsocket.C 19 Jan 2005 11:18:01 -0000
@@ -68,7 +68,9 @@
LyXServerSocket::~LyXServerSocket()
{
lyx_gui::unregister_socket_callback(fd_);
+#ifndef _WIN32
::close(fd_);
+#endif
lyx::support::unlink(address_);
lyxerr[Debug::LYXSERVER] << "lyx: Server socket quitting" << endl;
}
@@ -155,7 +157,11 @@
{
string const linen(line + '\n');
int const size = linen.size();
+#ifndef _WIN32
int const written = ::write(fd_, linen.c_str(), size);
+#else
+ int const written = -1;
+#endif
if (written < size) { // Allways mean end of connection.
if ((written == -1) && (errno == EPIPE)) {
// The program will also receive a SIGPIPE
@@ -194,7 +200,9 @@
LyXDataSocket::~LyXDataSocket()
{
+#ifndef _WIN32
::close(fd_);
+#endif
lyx_gui::unregister_socket_callback(fd_);
lyxerr[Debug::LYXSERVER] << "lyx: Data socket " << fd_ << " quitting."
@@ -216,7 +224,13 @@
int count;
// read and store characters in buffer
- while ((count = ::read(fd_, charbuf, charbuf_size - 1)) > 0) {
+ while ((count =
+#ifndef _WIN32
+ ::read(fd_, charbuf, charbuf_size - 1)
+#else
+ 0
+#endif
+ ) > 0) {
buffer_.append(charbuf, charbuf + count);
}
@@ -250,7 +264,11 @@
{
string const linen(line + '\n');
int const size = linen.size();
+#ifndef _WIN32
int const written = ::write(fd_, linen.c_str(), size);
+#else
+ int const written = -1;
+#endif
if (written < size) { // Allways mean end of connection.
if ((written == -1) && (errno == EPIPE)) {
// The program will also receive a SIGPIPE
Index: src/client/client.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/client/client.C,v
retrieving revision 1.7
diff -u -r1.7 client.C
--- src/client/client.C 20 Jan 2005 15:38:13 -0000 1.7
+++ src/client/client.C 21 Jan 2005 09:43:09 -0000
@@ -25,12 +25,14 @@
# include <unistd.h>
#endif
+#ifndef _WIN32
// select()
-#include <sys/select.h>
+# include <sys/select.h>
// socket(), connect()
-#include <sys/socket.h>
-#include <sys/un.h>
+# include <sys/socket.h>
+# include <sys/un.h>
+#endif
// fcntl()
#include <fcntl.h>
Index: src/frontends/LyXView.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/LyXView.C,v
retrieving revision 1.49
diff -u -r1.49 LyXView.C
--- src/frontends/LyXView.C 20 Jan 2005 15:38:14 -0000 1.49
+++ src/frontends/LyXView.C 21 Jan 2005 09:43:10 -0000
@@ -39,7 +39,9 @@
#include <boost/bind.hpp>
-#include <sys/time.h>
+#ifndef _WIN32
+# include <sys/time.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
Index: src/support/filetools.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/filetools.C,v
retrieving revision 1.204
diff -u -r1.204 filetools.C
--- src/support/filetools.C 31 Jan 2005 10:42:23 -0000 1.204
+++ src/support/filetools.C 31 Jan 2005 11:08:10 -0000
@@ -1153,6 +1153,11 @@
cmd_ret const RunCommand(string const & cmd)
{
+#ifdef _WIN32
+ // TODO: Implement this, or merge it into forkedcall.
+ // Used for lyx2lyx in buffer.C, echo in math_extern and kpse in this file
+ return make_pair(-1, string());
+#else
// FIXME: replace all calls to RunCommand with ForkedCall
// (if the output is not needed) or the code in ispell.C
// (if the output is needed).
@@ -1193,6 +1198,7 @@
sigprocmask(SIG_SETMASK, &oldMask, 0);
return make_pair(pret, ret);
+#endif
}
Index: src/support/forkedcall.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcall.C,v
retrieving revision 1.21
diff -u -r1.21 forkedcall.C
--- src/support/forkedcall.C 20 Jan 2005 15:38:14 -0000 1.21
+++ src/support/forkedcall.C 25 Jan 2005 12:41:14 -0000
@@ -30,6 +30,10 @@
#include "support/lyxlib.h"
#include "support/filetools.h"
#include "support/os.h"
+#ifdef _WIN32
+#include "os_win32.h"
+#include <process.h>
+#endif
#include "debug.h"
@@ -41,7 +45,9 @@
#include <csignal>
#include <cstdlib>
#include <sys/types.h>
-#include <sys/wait.h>
+#ifndef _WIN32
+# include <sys/wait.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
@@ -70,7 +76,9 @@
if (secs > 0) {
new Murder(secs, pid);
} else if (pid != 0) {
+#ifdef SIGKILL
lyx::support::kill(pid, SIGKILL);
+#endif
}
}
@@ -78,7 +86,9 @@
void kill()
{
if (pid_ != 0) {
+#ifdef SIGKILL
lyx::support::kill(pid_, SIGKILL);
+#endif
}
lyxerr << "Killed " << pid_ << std::endl;
delete this;
@@ -152,14 +162,16 @@
if (!pid())
return false;
+#ifndef _WIN32
// Un-UNIX like, but we don't have much use for
// knowing if a zombie exists, so just reap it first.
int waitstatus;
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;
+#endif
return true;
}
@@ -178,6 +190,7 @@
Murder::killItDead(0, pid());
} else {
+#ifdef SIGHUP
int ret = lyx::support::kill(pid(), SIGHUP);
// The process is already dead if wait_for_death is false
@@ -186,6 +199,7 @@
if (wait_for_death) {
Murder::killItDead(tolerance, pid());
}
+#endif
}
}
@@ -195,6 +209,7 @@
{
// We'll pretend that the child returns 1 on all error conditions.
retval_ = 1;
+#ifndef _WIN32
int status;
bool wait = true;
while (wait) {
@@ -223,6 +238,7 @@
wait = false;
}
}
+#endif
return retval_;
}
@@ -299,7 +315,12 @@
std::cout << *ait << std::endl;
argv.push_back(0);
-#ifndef __EMX__
+#ifdef __EMX
+ pid_t const cpid = spawnvp(P_SESSION|P_DEFAULT|P_MINIMIZE|P_BACKGROUND,
+ argv[0], &*argv.begin());
+#elif defined(_WIN32)
+ pid_t const cpid = spawnvp(_P_NOWAIT, argv[0], &*argv.begin());
+#else
pid_t const cpid = ::fork();
if (cpid == 0) {
// Child
@@ -310,9 +331,6 @@
<< strerror(errno) << endl;
_exit(1);
}
-#else
- pid_t const cpid = spawnvp(P_SESSION|P_DEFAULT|P_MINIMIZE|P_BACKGROUND,
- argv[0], &*argv.begin());
#endif
if (cpid < 0) {
Index: src/support/forkedcall.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcall.h,v
retrieving revision 1.19
diff -u -r1.19 forkedcall.h
--- src/support/forkedcall.h 26 Sep 2004 14:19:47 -0000 1.19
+++ src/support/forkedcall.h 17 Jan 2005 12:17:09 -0000
@@ -31,6 +31,10 @@
#include <sys/types.h>
+#ifdef _WIN32
+typedef int pid_t;
+#endif
+
namespace lyx {
namespace support {
Index: src/support/forkedcontr.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcontr.C,v
retrieving revision 1.27
diff -u -r1.27 forkedcontr.C
--- src/support/forkedcontr.C 20 Jan 2005 15:38:14 -0000 1.27
+++ src/support/forkedcontr.C 21 Jan 2005 09:51:07 -0000
@@ -19,14 +19,22 @@
#include "debug.h"
+#ifdef _WIN32
+#include "os_win32.h"
+#include <windows.h>
+#endif
+
#include <boost/bind.hpp>
#include <cerrno>
#include <cstdlib>
+
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
-#include <sys/wait.h>
+#ifndef _WIN32
+# include <sys/wait.h>
+#endif
using boost::bind;
@@ -176,7 +184,9 @@
ForkedcallsController::Data & store =
fcc.reaped_children[++fcc.current_child];
// Clean up the child process.
+#ifndef _WIN32
store.pid = wait(&store.status);
+#endif
}
} // namespace anon
@@ -193,11 +203,12 @@
ForkedcallsController::ForkedcallsController()
: reaped_children(50), current_child(-1)
{
+#ifndef _WIN32
signal(SIGCHLD, child_handler);
-
sigemptyset(&oldMask);
sigemptyset(&newMask);
sigaddset(&newMask, SIGCHLD);
+#endif
}
@@ -206,7 +217,9 @@
// I want to print or something.
ForkedcallsController::~ForkedcallsController()
{
+#ifndef _WIN32
signal(SIGCHLD, SIG_DFL);
+#endif
}
@@ -215,6 +228,7 @@
forkedCalls.push_back(newcall.clone());
if (forkedCalls.size() > reaped_children.size()) {
+#ifndef _WIN32
// Block the SIGCHLD signal.
sigprocmask(SIG_BLOCK, &newMask, &oldMask);
@@ -222,6 +236,7 @@
// Unblock the SIGCHLD signal and restore the old mask.
sigprocmask(SIG_SETMASK, &oldMask, 0);
+#endif
}
}
@@ -255,8 +270,10 @@
if (current_child == -1)
return;
+#ifndef _WIN32
// Block the SIGCHLD signal.
sigprocmask(SIG_BLOCK, &newMask, &oldMask);
+#endif
for (int i = 0; i != 1 + current_child; ++i) {
Data & store = reaped_children[i];
@@ -312,8 +329,10 @@
// Reset the counter
current_child = -1;
+#ifndef _WIN32
// Unblock the SIGCHLD signal and restore the old mask.
sigprocmask(SIG_SETMASK, &oldMask, 0);
+#endif
}
} // namespace support
Index: src/support/forkedcontr.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/forkedcontr.h,v
retrieving revision 1.18
diff -u -r1.18 forkedcontr.h
--- src/support/forkedcontr.h 7 Nov 2004 13:22:51 -0000 1.18
+++ src/support/forkedcontr.h 23 Jan 2005 12:25:33 -0000
@@ -19,7 +19,10 @@
#include <boost/shared_ptr.hpp>
#include <csignal>
-//#include <sys/types.h> // needed for pid_t
+#ifdef _WIN32
+typedef int pid_t;
+#endif
+#include <sys/types.h> // needed for pid_t
#include <list>
#include <vector>
@@ -79,8 +82,10 @@
/// The child processes
ListType forkedCalls;
+#ifndef _WIN32
/// Used to block SIGCHLD signals.
sigset_t newMask, oldMask;
+#endif
};
} // namespace support
Index: src/support/socktools.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/socktools.C,v
retrieving revision 1.6
diff -u -r1.6 socktools.C
--- src/support/socktools.C 20 Jan 2005 15:38:14 -0000 1.6
+++ src/support/socktools.C 21 Jan 2005 09:43:42 -0000
@@ -15,8 +15,10 @@
#include "debug.h"
+#ifndef _WIN32
#include <sys/socket.h>
#include <sys/un.h>
+#endif
#include <fcntl.h>
#ifdef HAVE_UNISTD_H
# include <unistd.h>
@@ -48,6 +50,7 @@
// special file 'name' will be created in the filesystem.
int listen(string const & name, int queue)
{
+#ifndef _WIN32
int fd; // File descriptor for the socket
sockaddr_un addr; // Structure that hold the socket address
@@ -105,14 +108,17 @@
lyx::support::unlink(name);
return -1;
}
-
return fd;
+#else
+ return -1;
+#endif
}
// Returns a file descriptor for a new connection from the socket
// descriptor 'sd' (or -1 in case of error)
int accept(int sd)
{
+#ifndef _WIN32
int fd;
// Returns the new file descriptor or -1 in case of error
@@ -132,6 +138,9 @@
return -1;
}
return fd;
+#else
+ return -1;
+#endif
}
} // namespace socktools
Index: src/support/tempname.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/tempname.C,v
retrieving revision 1.25
diff -u -r1.25 tempname.C
--- src/support/tempname.C 20 Jan 2005 15:38:14 -0000 1.25
+++ src/support/tempname.C 24 Jan 2005 07:51:08 -0000
@@ -30,6 +30,10 @@
# include <sys/stat.h>
#endif
+#ifdef _WIN32
+# include <io.h>
+#endif
+
using boost::scoped_array;
using std::string;
@@ -42,6 +46,9 @@
{
#if defined(HAVE_MKSTEMP)
return ::mkstemp(templ);
+#elif defined(_WIN32)
+ ::_mktemp(templ);
+ return (int) ::fopen(templ, "w");
#elif defined(HAVE_MKTEMP)
// This probably just barely works...
::mktemp(templ);
@@ -58,7 +65,9 @@
{
string const tmpdir(dir.empty() ? package().temp_dir() : dir);
string tmpfl(AddName(tmpdir, mask));
+#ifndef _WIN32
tmpfl += convert<string>(getpid());
+#endif
tmpfl += "XXXXXX";
// The supposedly safe mkstemp version
@@ -69,7 +78,11 @@
int const tmpf = make_tempfile(tmpl.get());
if (tmpf != -1) {
string const t(tmpl.get());
+#ifdef _WIN32
+ ::fclose((FILE *) tmpf);
+#else
::close(tmpf);
+#endif
lyxerr[Debug::FILES] << "Temporary file `" << t
<< "' created." << endl;
return t;
Index: src/support/userinfo.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/support/userinfo.C,v
retrieving revision 1.9
diff -u -r1.9 userinfo.C
--- src/support/userinfo.C 20 Jan 2005 15:38:14 -0000 1.9
+++ src/support/userinfo.C 21 Jan 2005 09:43:42 -0000
@@ -15,7 +15,9 @@
#include <boost/assert.hpp>
-#include <pwd.h>
+#ifndef _WIN32
+# include <pwd.h>
+#endif
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
@@ -28,6 +30,7 @@
string const user_name()
{
+#ifndef _WIN32
struct passwd * pw(getpwuid(geteuid()));
BOOST_ASSERT(pw);
@@ -35,6 +38,9 @@
if (name.empty())
name = pw->pw_name;
return name;
+#else
+ return "dummy";
+#endif
}