mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
- made configure check if we are building for win32
- made configure link to required system dll's if building for win32 - added diffs for libevent 1.1b - forced user to turn off eventdns if win32 is set - cleaned up tor_mmap_file()_win32 (not sure if it's stable) - cleaned up some warnings and typos svn:r8322
This commit is contained in:
Executable
+80
@@ -0,0 +1,80 @@
|
||||
Changes related to compilation under MinGW/any sane win32 gcc
|
||||
=============================================================
|
||||
|
||||
* event.c
|
||||
- If gcc include "WIN32-Code/misc.h" instead of "misc.h"
|
||||
|
||||
* WIN32-Code/misc.h
|
||||
- Add struct prototypes for timeval and timezone
|
||||
|
||||
* buffer.c
|
||||
- changed type of "i" from "u_int" to "unsigned int". My MinGW wasn't
|
||||
recognizing it. (u_int is normally typedef'ed to unsigned int, right?)
|
||||
|
||||
* evbuffer.c
|
||||
- removed incorrect win32 error checking, see bufferevent_writecb().
|
||||
(this needs to be fixed by anyone planning to use evbuffer on win32)
|
||||
|
||||
* log.c
|
||||
- If gcc include "WIN32-Code/misc.h" instead of "misc.h"
|
||||
|
||||
* WIN32-Code/misc.c
|
||||
- if gcc, include "misc.h"
|
||||
- added newline at end of file to shut up gcc
|
||||
|
||||
* WIN32-Code/win32.c
|
||||
- Altered the prototypes of win32_*() so their argument types didn't conflict
|
||||
with the function definitions.
|
||||
- Casted types of win32_* to void inside win32ops so that it didn't conflict
|
||||
with the definition of eventops (gcc doesn't like this)
|
||||
- Altered prototype of signal_handler to be static since definition is static
|
||||
(why wasn't it like this before)
|
||||
- Casted the second argument of signal() to be void*, some reason my MinGW
|
||||
doesn't have sighandler_t typedef'ed.
|
||||
|
||||
* configure.in
|
||||
- some code to check if we are compiling for WIN32.
|
||||
|
||||
* Makefile.am
|
||||
- if BUILD_WIN32 is defined, include WIN32-Code/misc.c and
|
||||
WIN32-Code/win32.c as source files.
|
||||
- if WIN32, do not build test stuff. (not windows friendly)
|
||||
- if WIN32, explicitly link to ws2_32.dll
|
||||
|
||||
Notes
|
||||
-----
|
||||
- We assume that if __GNUC__ is undefined we are building with MSVC
|
||||
- If the user wishes to build a dll, they are on their own, the syntax is
|
||||
compiler specific.
|
||||
- Getting this warning from libtool, no idea why
|
||||
"libtool: link: warning: undefined symbols not allowed in i686-pc-mingw32
|
||||
shared libraries"
|
||||
|
||||
|
||||
Changes related to "custom eventops"
|
||||
====================================
|
||||
|
||||
* configure.in
|
||||
- add argument --enable-custom-eventops, sets USE_CUSTOM_EVENTOPS in config.h
|
||||
- add argument --enable-custom-code, sets USE_CUSTOM_CODE in Makefile
|
||||
|
||||
* Makefile.am
|
||||
- if USE_CUSTOM_CODE, include custom/custom.c as a source file.
|
||||
(I can't think of a way to pass a string to Makefile.am, so I'm stuck naming
|
||||
the new source file custom.c. It just seems simpler this way, but I'm open
|
||||
to suggestions)
|
||||
|
||||
* event.c
|
||||
- if USE_CUSTOM_EVENTOPS, use eventops as defined in custom-eventops.h
|
||||
|
||||
Notes
|
||||
-----
|
||||
Just in case it isn't completely obvious, the goal of "custom eventops" is to
|
||||
allow the user to include their own event processing system without requiring a
|
||||
fork. This is accomplished through two parts. Firstly, by allowing the user to
|
||||
redefine eventops. (for example, the user may wish to use epoll() exclusively).
|
||||
Secondly, by allowing the user to include their own code to support a private
|
||||
eventop (note, this may not be necessary, as the user may choose to include
|
||||
already defined eventop's.
|
||||
|
||||
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
The current SVN version of Tor should compile with MinGW.
|
||||
|
||||
OpenSSL and libz both compile on MinGW out of the box.
|
||||
|
||||
libevent 1.1b will not build unless you apply the diff in this directory.
|
||||
|
||||
|
||||
|
||||
+338
@@ -0,0 +1,338 @@
|
||||
Only in libevent-1.1b: CHANGES
|
||||
Only in libevent-1.1b: Makefile
|
||||
diff -uwr libevent-1.1b-old/Makefile.am libevent-1.1b/Makefile.am
|
||||
--- libevent-1.1b-old/Makefile.am Wed Aug 9 22:16:35 2006
|
||||
+++ libevent-1.1b/Makefile.am Sat Sep 2 03:49:26 2006
|
||||
@@ -1,6 +1,5 @@
|
||||
AUTOMAKE_OPTIONS = foreign no-dependencies
|
||||
|
||||
-SUBDIRS = . sample test
|
||||
|
||||
EXTRA_DIST = acconfig.h event.h event-internal.h log.h evsignal.h event.3 \
|
||||
kqueue.c epoll_sub.c epoll.c select.c rtsig.c poll.c signal.c \
|
||||
@@ -20,8 +19,29 @@
|
||||
|
||||
lib_LTLIBRARIES = libevent.la
|
||||
|
||||
-libevent_la_SOURCES = event.c buffer.c evbuffer.c log.c
|
||||
-libevent_la_LIBADD = @LTLIBOBJS@
|
||||
+
|
||||
+if BUILD_WIN32
|
||||
+
|
||||
+SUBDIRS = . sample
|
||||
+SYS_LIBS = -lws2_32
|
||||
+SYS_SRC = WIN32-Code/misc.c WIN32-Code/win32.c
|
||||
+
|
||||
+else
|
||||
+
|
||||
+SUBDIRS = . sample test
|
||||
+SYS_LIBS =
|
||||
+SYS_SRC =
|
||||
+
|
||||
+endif
|
||||
+
|
||||
+if USE_CUSTOM_CODE
|
||||
+CUST_SRC = custom/custom.c
|
||||
+else
|
||||
+CUST_SRC =
|
||||
+endif
|
||||
+
|
||||
+libevent_la_SOURCES = event.c buffer.c evbuffer.c log.c $(CUST_SRC) $(SYS_SRC)
|
||||
+libevent_la_LIBADD = @LTLIBOBJS@ $(SYS_LIBS)
|
||||
libevent_la_LDFLAGS = -release @VERSION@ -version-info 1:2:0
|
||||
|
||||
include_HEADERS = event.h
|
||||
Only in libevent-1.1b: Makefile.in
|
||||
diff -uwr libevent-1.1b-old/WIN32-Code/misc.c libevent-1.1b/WIN32-Code/misc.c
|
||||
--- libevent-1.1b-old/WIN32-Code/misc.c Wed Aug 9 21:01:14 2006
|
||||
+++ libevent-1.1b/WIN32-Code/misc.c Fri Sep 1 22:21:31 2006
|
||||
@@ -4,6 +4,12 @@
|
||||
#include <sys/timeb.h>
|
||||
#include <time.h>
|
||||
|
||||
+#ifdef __GNUC__
|
||||
+/*our prototypes for timeval and timezone are in here, just in case the above
|
||||
+ headers don't have them*/
|
||||
+#include "misc.h"
|
||||
+#endif
|
||||
+
|
||||
/****************************************************************************
|
||||
*
|
||||
* Function: gettimeofday(struct timeval *, struct timezone *)
|
||||
diff -uwr libevent-1.1b-old/WIN32-Code/misc.h libevent-1.1b/WIN32-Code/misc.h
|
||||
--- libevent-1.1b-old/WIN32-Code/misc.h Wed Aug 9 21:01:14 2006
|
||||
+++ libevent-1.1b/WIN32-Code/misc.h Fri Sep 1 18:47:09 2006
|
||||
@@ -1,6 +1,9 @@
|
||||
#ifndef MISC_H
|
||||
#define MISC_H
|
||||
|
||||
+struct timezone;
|
||||
+struct timeval;
|
||||
+
|
||||
int gettimeofday(struct timeval *,struct timezone *);
|
||||
|
||||
#endif
|
||||
diff -uwr libevent-1.1b-old/WIN32-Code/win32.c libevent-1.1b/WIN32-Code/win32.c
|
||||
--- libevent-1.1b-old/WIN32-Code/win32.c Wed Aug 9 21:25:48 2006
|
||||
+++ libevent-1.1b/WIN32-Code/win32.c Sat Sep 2 00:45:55 2006
|
||||
@@ -60,7 +60,8 @@
|
||||
/* MSDN says this is required to handle SIGFPE */
|
||||
volatile double SIGFPE_REQ = 0.0f;
|
||||
|
||||
-int signal_handler(int sig);
|
||||
+static int signal_handler(int sig);
|
||||
+
|
||||
void signal_process(void);
|
||||
int signal_recalc(void);
|
||||
|
||||
@@ -77,20 +78,21 @@
|
||||
};
|
||||
|
||||
void *win32_init (void);
|
||||
-int win32_insert (void *, struct event *);
|
||||
-int win32_del (void *, struct event *);
|
||||
+int win32_insert (struct win32op *, struct event *);
|
||||
+int win32_del (struct win32op *, struct event *);
|
||||
int win32_recalc (struct event_base *base, void *, int);
|
||||
-int win32_dispatch (struct event_base *base, void *, struct timeval *);
|
||||
+int win32_dispatch (struct event_base *base, struct win32op *, struct timeval *);
|
||||
|
||||
struct eventop win32ops = {
|
||||
"win32",
|
||||
win32_init,
|
||||
- win32_insert,
|
||||
- win32_del,
|
||||
+ (int (*) (void*, struct event*)) win32_insert,
|
||||
+ (int (*) (void*, struct event*)) win32_del,
|
||||
win32_recalc,
|
||||
- win32_dispatch
|
||||
+ (int (*) (struct event_base*, void*, struct timeval*)) win32_dispatch
|
||||
};
|
||||
|
||||
+
|
||||
#define FD_SET_ALLOC_SIZE(n) ((sizeof(struct win_fd_set) + ((n)-1)*sizeof(SOCKET)))
|
||||
|
||||
static int
|
||||
@@ -213,7 +215,13 @@
|
||||
if (ev->ev_events & (EV_READ|EV_WRITE))
|
||||
event_errx(1, "%s: EV_SIGNAL incompatible use",
|
||||
__func__);
|
||||
+
|
||||
+#ifndef __GNUC__
|
||||
if((int)signal(EVENT_SIGNAL(ev), signal_handler) == -1)
|
||||
+#else
|
||||
+ if((int)signal(EVENT_SIGNAL(ev), (void*) signal_handler) == -1)
|
||||
+#endif
|
||||
+
|
||||
return (-1);
|
||||
|
||||
return (0);
|
||||
@@ -382,8 +390,13 @@
|
||||
|
||||
/* Reinstall our signal handler. */
|
||||
TAILQ_FOREACH(ev, &signalqueue, ev_signal_next) {
|
||||
+#ifndef __GNUC__
|
||||
if((int)signal(EVENT_SIGNAL(ev), signal_handler) == -1)
|
||||
+#else
|
||||
+ if((int)signal(EVENT_SIGNAL(ev), (void*) signal_handler) == -1)
|
||||
+#endif
|
||||
return (-1);
|
||||
+
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
Only in libevent-1.1b-old/: aclocal.m4
|
||||
Only in libevent-1.1b: autom4te.cache
|
||||
diff -uwr libevent-1.1b-old/buffer.c libevent-1.1b/buffer.c
|
||||
--- libevent-1.1b-old/buffer.c Wed Aug 9 22:01:40 2006
|
||||
+++ libevent-1.1b/buffer.c Fri Sep 1 18:52:56 2006
|
||||
@@ -197,7 +197,7 @@
|
||||
u_char *data = EVBUFFER_DATA(buffer);
|
||||
size_t len = EVBUFFER_LENGTH(buffer);
|
||||
char *line;
|
||||
- u_int i;
|
||||
+ unsigned int i;
|
||||
|
||||
for (i = 0; i < len; i++) {
|
||||
if (data[i] == '\r' || data[i] == '\n')
|
||||
Only in libevent-1.1b: config.guess
|
||||
Only in libevent-1.1b: config.h
|
||||
diff -uwr libevent-1.1b-old/config.h.in libevent-1.1b/config.h.in
|
||||
--- libevent-1.1b-old/config.h.in Wed Aug 9 21:27:37 2006
|
||||
+++ libevent-1.1b/config.h.in Sat Sep 2 02:23:17 2006
|
||||
@@ -223,6 +223,9 @@
|
||||
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
|
||||
#undef TIME_WITH_SYS_TIME
|
||||
|
||||
+/* Define to 1 if you want to use a custom eventops variable */
|
||||
+#undef USE_CUSTOM_EVENTOPS
|
||||
+
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
@@ -232,11 +235,9 @@
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
#undef const
|
||||
|
||||
-/* Define to `__inline__' or `__inline' if that's what the C compiler
|
||||
- calls it, or to nothing if 'inline' is not supported under any name. */
|
||||
-#ifndef __cplusplus
|
||||
+/* Define as `__inline' if that's what the C compiler calls it, or to nothing
|
||||
+ if it is not supported. */
|
||||
#undef inline
|
||||
-#endif
|
||||
|
||||
/* Define to `int' if <sys/types.h> does not define. */
|
||||
#undef pid_t
|
||||
Only in libevent-1.1b: config.h.in~
|
||||
Only in libevent-1.1b: config.log
|
||||
Only in libevent-1.1b: config.status
|
||||
Only in libevent-1.1b: configure
|
||||
diff -uwr libevent-1.1b-old/configure.in libevent-1.1b/configure.in
|
||||
--- libevent-1.1b-old/configure.in Wed Aug 9 22:05:17 2006
|
||||
+++ libevent-1.1b/configure.in Sat Sep 2 03:40:15 2006
|
||||
@@ -21,6 +21,18 @@
|
||||
CFLAGS="$CFLAGS -Wall"
|
||||
fi
|
||||
|
||||
+AC_ARG_ENABLE(custom-eventops,
|
||||
+ [ --enable-custom-eventops Use custom eventops variable],
|
||||
+ AC_DEFINE([USE_CUSTOM_EVENTOPS],[1],
|
||||
+ [Define to 1 to use a custom eventops variable])
|
||||
+ ,)
|
||||
+AC_ARG_ENABLE(custom-code,
|
||||
+ [ --enable-custom-code Use custom code from custom/],
|
||||
+ customcodev=true,
|
||||
+ customcodev=false)
|
||||
+
|
||||
+AM_CONDITIONAL(USE_CUSTOM_CODE, test x$customcodev = xtrue)
|
||||
+
|
||||
AC_PROG_LIBTOOL
|
||||
|
||||
dnl Uncomment "AC_DISABLE_SHARED" to make shared librraries not get
|
||||
@@ -110,6 +122,22 @@
|
||||
AC_MSG_RESULT(yes)] ,AC_MSG_RESULT(no)
|
||||
)
|
||||
fi
|
||||
+
|
||||
+dnl - check if the macro WIN32 is defined on this compiler.
|
||||
+dnl - (this is how we check for a windows version of GCC)
|
||||
+AC_MSG_CHECKING(for WIN32)
|
||||
+AC_TRY_COMPILE(,
|
||||
+ [
|
||||
+ #ifndef WIN32
|
||||
+ #error
|
||||
+ #endif
|
||||
+ ],
|
||||
+ bwin32=true; AC_MSG_RESULT(yes),
|
||||
+ bwin32=false; AC_MSG_RESULT(no),
|
||||
+)
|
||||
+
|
||||
+AM_CONDITIONAL(BUILD_WIN32, test x$bwin32 = xtrue)
|
||||
+
|
||||
|
||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
||||
AC_C_CONST
|
||||
diff -uwr libevent-1.1b-old/evbuffer.c libevent-1.1b/evbuffer.c
|
||||
--- libevent-1.1b-old/evbuffer.c Wed Aug 9 21:01:14 2006
|
||||
+++ libevent-1.1b/evbuffer.c Fri Sep 1 19:18:13 2006
|
||||
@@ -154,12 +154,20 @@
|
||||
if (EVBUFFER_LENGTH(bufev->output)) {
|
||||
res = evbuffer_write(bufev->output, fd);
|
||||
if (res == -1) {
|
||||
+#ifndef WIN32
|
||||
+/*todo. evbuffer uses WriteFile when WIN32 is set. WIN32 system calls do not
|
||||
+ *set errno. thus this error checking is not portable*/
|
||||
if (errno == EAGAIN ||
|
||||
errno == EINTR ||
|
||||
errno == EINPROGRESS)
|
||||
goto reschedule;
|
||||
/* error case */
|
||||
what |= EVBUFFER_ERROR;
|
||||
+
|
||||
+#else
|
||||
+ goto reschedule;
|
||||
+#endif
|
||||
+
|
||||
} else if (res == 0) {
|
||||
/* eof case */
|
||||
what |= EVBUFFER_EOF;
|
||||
@@ -181,6 +189,7 @@
|
||||
return;
|
||||
|
||||
reschedule:
|
||||
+
|
||||
if (EVBUFFER_LENGTH(bufev->output) != 0)
|
||||
bufferevent_add(&bufev->ev_write, bufev->timeout_write);
|
||||
return;
|
||||
diff -uwr libevent-1.1b-old/event.c libevent-1.1b/event.c
|
||||
--- libevent-1.1b-old/event.c Wed Aug 9 21:25:48 2006
|
||||
+++ libevent-1.1b/event.c Sat Sep 2 04:22:05 2006
|
||||
@@ -30,8 +30,14 @@
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
+
|
||||
+#ifdef __GNUC__
|
||||
+#include "WIN32-Code/misc.h"
|
||||
+#else
|
||||
#include "misc.h"
|
||||
#endif
|
||||
+
|
||||
+#endif
|
||||
#include <sys/types.h>
|
||||
#include <sys/tree.h>
|
||||
#ifdef HAVE_SYS_TIME_H
|
||||
@@ -53,6 +59,7 @@
|
||||
#include "event-internal.h"
|
||||
#include "log.h"
|
||||
|
||||
+
|
||||
#ifdef HAVE_SELECT
|
||||
extern const struct eventop selectops;
|
||||
#endif
|
||||
@@ -75,6 +82,8 @@
|
||||
extern const struct eventop win32ops;
|
||||
#endif
|
||||
|
||||
+#ifndef USE_CUSTOM_EVENTOPS
|
||||
+
|
||||
/* In order of preference */
|
||||
const struct eventop *eventops[] = {
|
||||
#ifdef HAVE_WORKING_KQUEUE
|
||||
@@ -101,6 +110,11 @@
|
||||
NULL
|
||||
};
|
||||
|
||||
+#else
|
||||
+#include "custom-eventops.h"
|
||||
+#endif //USE_CUSTOM_EVENTOPS
|
||||
+
|
||||
+
|
||||
/* Global state */
|
||||
struct event_list signalqueue;
|
||||
|
||||
Only in libevent-1.1b: libtool
|
||||
diff -uwr libevent-1.1b-old/log.c libevent-1.1b/log.c
|
||||
--- libevent-1.1b-old/log.c Wed Aug 9 21:01:14 2006
|
||||
+++ libevent-1.1b/log.c Fri Sep 1 19:09:45 2006
|
||||
@@ -45,8 +45,14 @@
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
#undef WIN32_LEAN_AND_MEAN
|
||||
+
|
||||
+#ifdef __GNUC__
|
||||
+#include "WIN32-Code/misc.h"
|
||||
+#else
|
||||
#include "misc.h"
|
||||
#endif
|
||||
+
|
||||
+#endif
|
||||
#include <sys/types.h>
|
||||
#include <sys/tree.h>
|
||||
#ifdef HAVE_SYS_TIME_H
|
||||
Only in libevent-1.1b/sample: Makefile
|
||||
Only in libevent-1.1b/sample: Makefile.in
|
||||
Only in libevent-1.1b: stamp-h1
|
||||
Only in libevent-1.1b/test: Makefile
|
||||
Only in libevent-1.1b/test: Makefile.in
|
||||
Reference in New Issue
Block a user