diff options
author | Mike Chiussi <chiussi@gmail.com> | 2006-09-06 01:49:55 +0000 |
---|---|---|
committer | Mike Chiussi <chiussi@gmail.com> | 2006-09-06 01:49:55 +0000 |
commit | 6ec9c1092afbed894e2c52328257aa295e2df6fc (patch) | |
tree | 2ed5fa131a4d9ebef8eb425d4a44d41a8f3d3090 /Win32Build/mingw | |
parent | 585ae267836326b50d33372f0129bc6fac1d1ad5 (diff) | |
download | tor-6ec9c1092afbed894e2c52328257aa295e2df6fc.tar tor-6ec9c1092afbed894e2c52328257aa295e2df6fc.tar.gz |
- 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
Diffstat (limited to 'Win32Build/mingw')
-rwxr-xr-x | Win32Build/mingw/CHANGES-libevent | 80 | ||||
-rwxr-xr-x | Win32Build/mingw/README | 8 | ||||
-rwxr-xr-x | Win32Build/mingw/libevent-1.1b-mingw-custom.diff | 338 |
3 files changed, 426 insertions, 0 deletions
diff --git a/Win32Build/mingw/CHANGES-libevent b/Win32Build/mingw/CHANGES-libevent new file mode 100755 index 000000000..3d24c1843 --- /dev/null +++ b/Win32Build/mingw/CHANGES-libevent @@ -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.
+
+
diff --git a/Win32Build/mingw/README b/Win32Build/mingw/README new file mode 100755 index 000000000..67e75cd27 --- /dev/null +++ b/Win32Build/mingw/README @@ -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. + + + diff --git a/Win32Build/mingw/libevent-1.1b-mingw-custom.diff b/Win32Build/mingw/libevent-1.1b-mingw-custom.diff new file mode 100755 index 000000000..350586e35 --- /dev/null +++ b/Win32Build/mingw/libevent-1.1b-mingw-custom.diff @@ -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 |