Archived
This forum has been archived. Please start a new discussion on GitHub.
Build support for Mac 10.4 in Ice 3.4b
I ran into several issues while trying to get 3.4b to compile on 10.4:
Though 10.4's not supported, is it possible to include the following patch to allow it to compile?
Thanks,
~Josh
- execinfo.h is not available. This can be solved by adding another guard around the use of backtraces in IceUtil/Exception.cpp.
- _SC_NPROCESSORS_ONLN is not defined. On 10.5, ONLN is defined as "57". Using "-D_SC_NPROCESSORS_ONLN=57" compiles properly, but returns "-1".
- prefix handling in IceStorm didn't work for me. Specifically, it was necessary to symlink SRC/cpp/lib to /opt/Ice-3.4b/lib to get IceStorm to compile (not handled in patch)
Though 10.4's not supported, is it possible to include the following patch to allow it to compile?
Thanks,
~Josh
diff -u -r ../Ice-3.4b.orig/cpp/config/Make.rules.Darwin ./cpp/config/Make.rules.Darwin
--- ../Ice-3.4b.orig/cpp/config/Make.rules.Darwin 2010-01-16 15:49:18.000000000 +0100
+++ ./cpp/config/Make.rules.Darwin 2010-01-20 11:47:13.000000000 +0100
@@ -27,15 +27,22 @@
#
CXXLIBS =
-ifneq ($(embedded_runpath_prefix),)
+release = $(shell uname -r)
+
+# 10.5 and above
+ifeq ($(shell test $(firstword $(subst ., ,$(release))) -ge 9 && echo 0),0)
# Only use -rpath if Mac OS X >= 10.5
- release = $(shell uname -r)
- ifeq ($(shell test $(firstword $(subst ., ,$(release))) -ge 9 && echo 0),0)
- LDPLATFORMFLAGS = -Wl,-rpath,$(runpath_libdir)
+ ifneq ($(embedded_runpath_prefix),)
+ LDPLATFORMFLAGS = -Wl,-rpath,$(runpath_libdir)
endif
+ LDPLATFORMFLAGS += -rdynamic
+# 10.4
+else
+ # 10.4 is missing some headers and definitions
+ # Also, -rdynamic is not recognized
+ CXXFLAGS := $(CXXFLAGS) -DMAC10_4 -D_SC_NPROCESSORS_ONLN=57
endif
-LDPLATFORMFLAGS += -rdynamic
ifdef ice_src_dist
shlibldflags = $(CXXFLAGS) -L$(libdir)
diff -u -r ../Ice-3.4b.orig/cpp/src/IceUtil/Exception.cpp ./cpp/src/IceUtil/Exception.cpp
--- ../Ice-3.4b.orig/cpp/src/IceUtil/Exception.cpp 2010-01-16 15:49:19.000000000 +0100
+++ ./cpp/src/IceUtil/Exception.cpp 2010-01-20 09:08:10.000000000 +0100
@@ -14,7 +14,7 @@
#include <ostream>
#include <cstdlib>
-#if defined(__GNUC__) && !defined(__sun)
+#if defined(__GNUC__) && !defined(__sun) && !defined(MAC10_4)
# include <execinfo.h>
# include <cxxabi.h>
#endif
@@ -52,7 +52,7 @@
Init init;
-#if defined(__GNUC__) && !defined(__sun)
+#if defined(__GNUC__) && !defined(__sun) && !defined(MAC10_4)
string
getStackTrace()
{
@@ -183,7 +183,7 @@
IceUtil::Exception::Exception() :
_file(0),
_line(0)
-#if defined(__GNUC__) && !defined(__sun)
+#if defined(__GNUC__) && !defined(__sun) && !defined(MAC10_4)
, _stackTrace(getStackTrace())
#endif
{
@@ -192,7 +192,7 @@
IceUtil::Exception::Exception(const char* file, int line) :
_file(file),
_line(line)
-#if defined(__GNUC__) && !defined(__sun)
+#if defined(__GNUC__) && !defined(__sun) && !defined(MAC10_4)
, _stackTrace(getStackTrace())
#endif
{
0
Comments
-
On my PowerBook booted into 10.4 running this program
#include <unistd.h> #include <iostream> #ifndef _SC_NPROCESSORS_CONF #define _SC_NPROCESSORS_CONF 57 #endif #ifndef _SC_NPROCESSORS_ONLN #define _SC_NPROCESSORS_ONLN 58 #endif int main() { std::cout << "_SC_NPROCESSORS_CONF " << sysconf(_SC_NPROCESSORS_CONF) << '\n'; std::cout << "_SC_NPROCESSORS_ONLN " << sysconf(_SC_NPROCESSORS_ONLN) << '\n'; return 0; }
I get_SC_NPROCESSORS_CONF -1
_SC_NPROCESSORS_ONLN -1
So a better patch would add code that defines _SC_NPROCESSORS_ONLN if it isn't set to 58 and then have the code check for a -1 return from sysconf() and use 1 then.0
