PDA

View Full Version : FreeBSD compile fix


erde
05-07-2009, 03:38 AM
Tested with Freebsd 7.0.1 i386 and OS X


Index: common/Mutex.cpp
================================================== =================
--- common/Mutex.cpp (Revision 473)
+++ common/Mutex.cpp (Arbeitskopie)
@@ -74,7 +74,7 @@
#else
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
-#if defined(__CYGWIN__) || defined(__APPLE__)
+#if defined(__CYGWIN__) || defined(__APPLE__) || defined(FREEBSD)
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
#else
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
Index: zone/client.cpp
================================================== =================
--- zone/client.cpp (Revision 473)
+++ zone/client.cpp (Arbeitskopie)
@@ -40,7 +40,7 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include "../common/unix.h"
-#define abs64 abs
+#define abs64 labs
#endif

extern volatile bool RunLoops;

erde
10-02-2009, 02:18 PM
Hi

tested this patch with FreeBSD-7.2 still works fine and is needed ;)

amraist
10-14-2009, 01:43 PM
I've been running on my server on FreeBSD 7.2(amd64&i386) for a few months now thanks to your autobuild script, and yes this patch is required to compile. However it will not run without an additional fix. The fix is below. The problem is that when it tries load the shared memory stuff, there is a undefined reference, which returns an error. If I remember correctly, the reference is to 'nss_cache_cycle_prevention_func', or something similar. I don't understand the details of where this error is originating, or why, so I wasn't able to fix this properly. This patch simply skips checking for errors,
so I wouldn't recommend it. And for some reason the emu code checks for an error, but does not log it, which made tracking this down fun. Maybe someone else can shed some light on how to write a proper fix.


--- common/SharedLibrary.cpp 2009-09-01 18:00:13.000000000 +0000
+++ common/SharedLibrary.cpp.new 2009-09-01 18:08:17.000000000 +0000
@@ -83,10 +83,10 @@
return(NULL);

void *r = GetProcAddress(hDLL, name);
-
+#ifndef FREEBSD
if(GetError() != NULL)
r = NULL;
-
+#endif
return(r);
}

amraist
10-19-2009, 12:19 PM
Actually my first patch is ok, but this is probably a better one. @@ -83,10 +83,10 @@
return(NULL);

void *r = GetProcAddress(hDLL, name);
-
- if(GetError() != NULL)
- r = NULL;
-
+ if ( r == NULL ) {
+ const char *load_error = GetError();
+ fprintf(stderr, "[Error] Shared Library GetSym: '%s' failed. Error=%s\n", name, load_error?load_error:"Null Return, no error");
+ }
return(r);
}