aboutsummaryrefslogtreecommitdiff
path: root/Win32Build/mingw
diff options
context:
space:
mode:
authorMike Chiussi <chiussi@gmail.com>2006-09-06 01:49:55 +0000
committerMike Chiussi <chiussi@gmail.com>2006-09-06 01:49:55 +0000
commit6ec9c1092afbed894e2c52328257aa295e2df6fc (patch)
tree2ed5fa131a4d9ebef8eb425d4a44d41a8f3d3090 /Win32Build/mingw
parent585ae267836326b50d33372f0129bc6fac1d1ad5 (diff)
downloadtor-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-xWin32Build/mingw/CHANGES-libevent80
-rwxr-xr-xWin32Build/mingw/README8
-rwxr-xr-xWin32Build/mingw/libevent-1.1b-mingw-custom.diff338
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