--- CMake.orig/HPHPFindLibs.cmake 2012-02-11 21:30:10.000000000 +0300 +++ CMake/HPHPFindLibs.cmake 2012-02-12 23:38:15.000000000 +0300 @@ -270,9 +270,13 @@ add_definitions(-DSKIP_IMAP_SSL=1) endif() -if (LINUX OR FREEBSD) +if (LINUX) + FIND_LIBRARY (CRYPT_LIB NAMES xcrypt crypt) + FIND_LIBRARY (RT_LIB rt) +elseif (FREEBSD) FIND_LIBRARY (CRYPT_LIB NAMES xcrypt crypt) FIND_LIBRARY (RT_LIB rt) + FIND_LIBRARY (ICONV_LIB iconv) elseif (APPLE) FIND_LIBRARY (CRYPT_LIB crypto) FIND_LIBRARY (ICONV_LIB iconv) @@ -370,9 +374,13 @@ target_link_libraries(${target} ${LIBMEMCACHED_LIBRARY}) - if (LINUX OR FREEBSD) + if (LINUX) target_link_libraries(${target} ${CRYPT_LIB}) target_link_libraries(${target} ${RT_LIB}) + elseif (FREEBSD) + target_link_libraries(${target} ${CRYPT_LIB}) + target_link_libraries(${target} ${RT_LIB}) + target_link_libraries(${target} ${ICONV_LIB}) elseif (APPLE) target_link_libraries(${target} ${CRYPTO_LIB}) target_link_libraries(${target} ${ICONV_LIB}) --- src.orig/hphp/main.cpp 2012-02-11 21:30:15.000000000 +0300 +++ src/hphp/main.cpp 2012-02-11 21:48:33.000000000 +0300 @@ -524,7 +524,7 @@ int process(const ProgramOptions &po) { if (po.coredump) { -#if defined(__APPLE__) +#if defined(__APPLE__)||defined(__FreeBSD__) struct rlimit rl; getrlimit(RLIMIT_CORE, &rl); rl.rlim_cur = 80000000LL; --- src.orig/runtime/base/builtin_functions.cpp 2012-02-11 21:30:15.000000000 +0300 +++ src/runtime/base/builtin_functions.cpp 2012-02-11 22:02:03.000000000 +0300 @@ -34,6 +34,12 @@ #include +#ifdef __FreeBSD__ +# ifdef isset +# undef isset +# endif +#endif + using namespace std; namespace HPHP { --- src.orig/runtime/base/builtin_functions.h 2012-02-11 21:30:15.000000000 +0300 +++ src/runtime/base/builtin_functions.h 2012-02-11 21:39:26.000000000 +0300 @@ -32,7 +32,7 @@ #include #include -#ifdef __APPLE__ +#if defined(__APPLE__)||defined(__FreeBSD__) # ifdef isset # undef isset # endif --- src.orig/runtime/base/util/thrift_buffer.h 2012-02-11 21:30:15.000000000 +0300 +++ src/runtime/base/util/thrift_buffer.h 2012-02-11 21:49:43.000000000 +0300 @@ -22,7 +22,7 @@ #include #include -#if defined(__FREEBSD__) +#if defined(__FreeBSD__) # include # elif defined(__APPLE__) # include @@ -34,7 +34,7 @@ #if !defined(htonll) && !defined(ntohll) #if __BYTE_ORDER == __LITTLE_ENDIAN -# if defined(__FREEBSD__) +# if defined(__FreeBSD__) # define htonll(x) bswap64(x) # define ntohll(x) bswap64(x) # elif defined(__APPLE__) --- src.orig/runtime/base/zend/zend_string.cpp 2012-02-11 21:30:15.000000000 +0300 +++ src/runtime/base/zend/zend_string.cpp 2012-02-11 21:49:51.000000000 +0300 @@ -2412,7 +2412,7 @@ // crypt #include -#if !defined(__APPLE__) && !defined(__FREEBSD__) +#if !defined(__APPLE__) && !defined(__FreeBSD__) # include #endif --- src.orig/runtime/eval/debugger/cmd/cmd_interrupt.h 2012-02-11 21:30:15.000000000 +0300 +++ src/runtime/eval/debugger/cmd/cmd_interrupt.h 2012-02-11 21:41:37.000000000 +0300 @@ -35,7 +35,7 @@ : DebuggerCommand(KindOfInterrupt), m_interrupt(interrupt), m_program(program ? program : ""), m_site(site), m_pendingJump(false) { - m_threadId = Process::GetThreadId(); + m_threadId = (int64)Process::GetThreadId(); if (error) m_errorMsg = error; } --- src.orig/runtime/eval/debugger/debugger_proxy.cpp 2012-02-11 21:30:15.000000000 +0300 +++ src/runtime/eval/debugger/debugger_proxy.cpp 2012-02-11 21:42:32.000000000 +0300 @@ -118,7 +118,7 @@ m_thread = 0; notify(); } else { - m_thread = Process::GetThreadId(); + m_thread = (int64)Process::GetThreadId(); } if (mode == Normal) { m_jump.reset(); @@ -576,7 +576,7 @@ DThreadInfoPtr DebuggerProxy::createThreadInfo(const std::string &desc) { DThreadInfoPtr info(new DThreadInfo()); - info->m_id = Process::GetThreadId(); + info->m_id = (int64)Process::GetThreadId(); info->m_desc = desc; Transport *transport = g_context->getTransport(); if (transport) { --- src.orig/runtime/ext/ext.h 2012-02-11 21:30:16.000000000 +0300 +++ src/runtime/ext/ext.h 2012-02-11 21:46:53.000000000 +0300 @@ -85,3 +85,9 @@ #include #include #include + +#ifdef __FreeBSD__ +# ifdef isset +# undef isset +# endif +#endif --- src.orig/runtime/ext/ext_hotprofiler.cpp 2012-02-11 21:30:16.000000000 +0300 +++ src/runtime/ext/ext_hotprofiler.cpp 2012-02-11 21:43:34.000000000 +0300 @@ -25,6 +25,7 @@ #ifdef __FreeBSD__ # include +# include # include # define cpu_set_t cpuset_t # define SET_AFFINITY(pid, size, mask) \ --- src.orig/runtime/ext/ext_iconv.cpp 2012-02-11 21:30:16.000000000 +0300 +++ src/runtime/ext/ext_iconv.cpp 2012-02-11 22:26:05.000000000 +0300 @@ -152,7 +152,7 @@ out_left = buf_growth - out_left; out_p = d.reserve(out_left); - if (iconv(cd, (char **)&in_p, &in_left, (char **)&out_p, &out_left) == + if (iconv(cd, (const char **)&in_p, &in_left, (char **)&out_p, &out_left) == (size_t)-1) { #if ICONV_SUPPORTS_ERRNO switch (errno) { @@ -239,7 +239,7 @@ out_buffer = (char *)malloc(out_size + 1); out_p = out_buffer; - result = iconv(cd, (char **)&in_p, &in_size, (char **)&out_p, &out_left); + result = iconv(cd, (const char **)&in_p, &in_size, (char **)&out_p, &out_left); if (result == (size_t)(-1)) { free(out_buffer); return PHP_ICONV_ERR_UNKNOWN; @@ -293,7 +293,7 @@ out_p = out_buf; while (in_left > 0) { - result = iconv(cd, (char **)&in_p, &in_left, (char **)&out_p, &out_left); + result = iconv(cd, (const char **)&in_p, &in_left, (char **)&out_p, &out_left); out_size = bsz - out_left; if (result == (size_t)(-1)) { if (errno == E2BIG && in_left > 0) { @@ -393,7 +393,7 @@ prev_in_left = in_left; - if (iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left) + if (iconv(cd, (const char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) { if (prev_in_left == in_left) { break; @@ -497,7 +497,7 @@ prev_in_left = in_left; - if (iconv(cd1, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == + if (iconv(cd1, (const char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) { if (prev_in_left == in_left) { break; @@ -619,7 +619,7 @@ prev_in_left = in_left; - if (iconv(cd, (char **)&in_p, &in_left, (char **) &out_p, &out_left) == + if (iconv(cd, (const char **)&in_p, &in_left, (char **) &out_p, &out_left) == (size_t)-1) { if (prev_in_left == in_left) { #if ICONV_SUPPORTS_ERRNO @@ -1408,7 +1408,7 @@ out_left = out_size - out_reserved; - if (iconv(cd, (char **)&in_p, &in_left, + if (iconv(cd, (const char **)&in_p, &in_left, (char **)&out_p, &out_left) == (size_t)-1) { #if ICONV_SUPPORTS_ERRNO switch (errno) { @@ -1503,7 +1503,7 @@ out_p = buf; out_left = out_size; - if (iconv(cd, (char **)&in_p, &in_left, + if (iconv(cd, (const char **)&in_p, &in_left, (char **)&out_p, &out_left) == (size_t)-1) { #if ICONV_SUPPORTS_ERRNO switch (errno) { --- src.orig/runtime/ext/ext_ipc.cpp 2012-02-11 21:30:16.000000000 +0300 +++ src/runtime/ext/ext_ipc.cpp 2012-02-11 21:49:08.000000000 +0300 @@ -28,10 +28,10 @@ using namespace std; -#if defined(__APPLE__) || defined(__FREEBSD__) +#if defined(__APPLE__) || defined(__FreeBSD__) #include #define MSGBUF_MTYPE(b) (b)->msg_magic -#define MSGBUF_MTEXT(b) (b)->msg_bufc +#define MSGBUF_MTEXT(b) (b)->msg_ptr #else #define MSGBUF_MTYPE(b) (b)->mtype #define MSGBUF_MTEXT(b) (b)->mtext @@ -207,7 +207,7 @@ int64 realflags = 0; if (flags != 0) { -#if !defined(__APPLE__) && !defined(__FREEBSD__) +#if !defined(__APPLE__) && !defined(__FreeBSD__) if (flags & k_MSG_EXCEPT) realflags |= MSG_EXCEPT; #endif if (flags & k_MSG_NOERROR) realflags |= MSG_NOERROR; --- src.orig/runtime/ext/ext_posix.cpp 2012-02-11 21:30:16.000000000 +0300 +++ src/runtime/ext/ext_posix.cpp 2012-02-11 21:49:18.000000000 +0300 @@ -229,7 +229,7 @@ ret.set("release", String(u.release, CopyString)); ret.set("version", String(u.version, CopyString)); ret.set("machine", String(u.machine, CopyString)); -#if defined(_GNU_SOURCE) && !defined(__APPLE__) && !defined(__FREEBSD__) +#if defined(_GNU_SOURCE) && !defined(__APPLE__) && !defined(__FreeBSD__) ret.set("domainname", String(u.domainname, CopyString)); #endif return ret; --- src.orig/runtime/ext/thrift/transport.h 2012-02-11 21:30:16.000000000 +0300 +++ src/runtime/ext/thrift/transport.h 2012-02-11 21:50:04.000000000 +0300 @@ -24,7 +24,7 @@ #include #include #include -#if defined(__FREEBSD__) +#if defined(__FreeBSD__) # include #elif defined(__APPLE__) # include @@ -36,7 +36,7 @@ #include #if __BYTE_ORDER == __LITTLE_ENDIAN -# if defined(__FREEBSD__) +# if defined(__FreeBSD__) # define htonll(x) bswap64(x) # define ntohll(x) bswap64(x) # elif defined(__APPLE__) --- src.orig/test/test_cpp_base.cpp 2012-02-11 21:30:16.000000000 +0300 +++ src/test/test_cpp_base.cpp 2012-02-11 22:58:04.000000000 +0300 @@ -29,6 +29,10 @@ #include #include +#if defined(__FreeBSD__) +# define s6_addr32 __u6_addr.__u6_addr32 +#endif + using namespace std; /////////////////////////////////////////////////////////////////////////////// --- src.orig/util/alloc.cpp 2012-02-11 21:30:17.000000000 +0300 +++ src/util/alloc.cpp 2012-02-12 22:57:11.000000000 +0300 @@ -14,6 +14,9 @@ +----------------------------------------------------------------------+ */ +#if defined(__FreeBSD__) +#include +#endif #include #include #include --- src.orig/util/async_func.h 2012-02-11 21:30:17.000000000 +0300 +++ src/util/async_func.h 2012-02-12 23:00:18.000000000 +0300 @@ -25,6 +25,10 @@ #include "exception.h" #include "alloc.h" +#if defined(__FreeBSD__) +#include +#endif + namespace HPHP { /////////////////////////////////////////////////////////////////////////////// @@ -108,7 +112,12 @@ size_t stacksize, guardsize; void *stackaddr; +#if defined(__FreeBSD__) + pthread_attr_init(&info); + pthread_attr_get_np(pthread_self(), &info); +#else pthread_getattr_np(pthread_self(), &info); +#endif pthread_attr_getstack(&info, &stackaddr, &stacksize); // Get the guard page's size, because the stack address returned @@ -117,6 +126,10 @@ if (pthread_attr_getguardsize(&info, &guardsize) != 0) guardsize = 0; +#if defined(__FreeBSD__) + pthread_attr_destroy(&info); +#endif + ASSERT(stackaddr != NULL); ASSERT(stacksize >= PTHREAD_STACK_MIN); Util::s_stackLimit = uintptr_t(stackaddr) + guardsize; --- src.orig/util/process.h 2012-02-11 21:30:17.000000000 +0300 +++ src/util/process.h 2012-02-14 13:54:24.000000000 +0300 @@ -20,6 +20,11 @@ #include "base.h" #include +#if defined(__FreeBSD__) +// this is kind of undocumented, but since everyone (even oracle) uses it... +extern "C" void thr_self(long *); +#endif + namespace HPHP { /////////////////////////////////////////////////////////////////////////////// // helper class @@ -119,7 +124,13 @@ * Thread's process identifier. */ static pid_t GetThreadPid() { +#if defined(__FreeBSD__) + long lwpid; + thr_self(&lwpid); + return (pid_t)lwpid; +#else return syscall(SYS_gettid); +#endif } /** --- src.orig/util/util.h 2012-02-11 21:30:17.000000000 +0300 +++ src/util/util.h 2012-02-11 21:48:01.000000000 +0300 @@ -22,6 +22,7 @@ #include #include #include +#include #include /**