summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2013-01-17 00:19:08 +0100
committerJose <jose@zeroc.com>2013-01-17 00:19:08 +0100
commit0fe0ab23fda0af323a26b29bc12d2a6a348fced3 (patch)
tree0e5d5873b7df9c7a73b3fa66b6ae8a910dde53bc /cpp
parentFixed (ICE-5187) - Glacier2 SessionHelpers cannot load IceSSL plug-in from cu... (diff)
downloadice-0fe0ab23fda0af323a26b29bc12d2a6a348fced3.tar.bz2
ice-0fe0ab23fda0af323a26b29bc12d2a6a348fced3.tar.xz
ice-0fe0ab23fda0af323a26b29bc12d2a6a348fced3.zip
Added OS X Frameworks
Diffstat (limited to 'cpp')
-rw-r--r--cpp/config/Framework_Info.plist14
-rw-r--r--cpp/config/Make.rules9
-rw-r--r--cpp/config/Make.rules.Darwin77
-rw-r--r--cpp/src/Freeze/Makefile1
-rw-r--r--cpp/src/Glacier2Lib/Makefile2
-rw-r--r--cpp/src/Ice/DynamicLibrary.cpp12
-rw-r--r--cpp/src/Ice/Makefile1
-rw-r--r--cpp/src/IceGridLib/Makefile1
-rw-r--r--cpp/src/IcePatch2Lib/Makefile1
-rw-r--r--cpp/src/IceSSL/Makefile2
-rw-r--r--cpp/src/IceStormLib/Makefile1
-rw-r--r--cpp/src/IceUtil/Makefile2
12 files changed, 116 insertions, 7 deletions
diff --git a/cpp/config/Framework_Info.plist b/cpp/config/Framework_Info.plist
new file mode 100644
index 00000000000..0d2da081c28
--- /dev/null
+++ b/cpp/config/Framework_Info.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>@VERSION@</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleExecutable</key>
+ <string>@EXECUTABLE@</string>
+</dict>
+</plist>
diff --git a/cpp/config/Make.rules b/cpp/config/Make.rules
index e2397656dbf..a6d5e6e107f 100644
--- a/cpp/config/Make.rules
+++ b/cpp/config/Make.rules
@@ -14,6 +14,11 @@
prefix ?= /opt/Ice-$(VERSION)
#
+# Select a directory to install OS X frameworks
+#
+frameworks_prefix ?= /Library/Frameworks
+
+#
# The "root directory" for runpath embedded in executables. Can be unset
# to avoid adding a runpath to Ice executables.
#
@@ -300,8 +305,8 @@ ifeq ($(ICESSL_LIBS),)
ICESSL_LIBS = -lIceSSL $(LIBS)
endif
-EVERYTHING = all depend clean install
-EVERYTHING_EXCEPT_ALL = depend clean install
+EVERYTHING = all depend clean framework install
+EVERYTHING_EXCEPT_ALL = depend clean framework install
.SUFFIXES:
.SUFFIXES: .cpp .c .o
diff --git a/cpp/config/Make.rules.Darwin b/cpp/config/Make.rules.Darwin
index 2b910881cdf..3354d5ba25d 100644
--- a/cpp/config/Make.rules.Darwin
+++ b/cpp/config/Make.rules.Darwin
@@ -44,7 +44,7 @@ ifneq ($(embedded_runpath_prefix),)
# Only use -rpath if OS X >= 10.5
release = $(shell uname -r)
ifeq ($(shell test $(firstword $(subst ., ,$(release))) -ge 9 && echo 0),0)
- LDPLATFORMFLAGS = -Wl,-rpath,$(runpath_libdir)
+ LDPLATFORMFLAGS = -Wl,-rpath,$(runpath_libdir)
endif
endif
@@ -88,6 +88,81 @@ ifeq ($(DB_HOME),)
endif
#
+# Create frameworks
+#
+ifneq ($(FRAMEWORK),)
+
+FRAMEWORK_DIR = $(libdir)/Frameworks/$(FRAMEWORK).framework
+FRAMEWORK_INSTALL_DIR = $(frameworks_prefix)/$(FRAMEWORK).framework
+FRAMEWORK_RUN_PATH = $(FRAMEWORK_INSTALL_DIR)/Versions/$(VERSION)/$(FRAMEWORK)
+
+ifeq ($(FRAMEWORK),Freeze)
+DB_LIBRARY_NAME = libdb_cxx-5.3$(CPP11LIBSUFFIX).dylib
+endif
+
+$(FRAMEWORK_DIR):: all
+ mkdir -p $(FRAMEWORK_DIR)/Versions/$(VERSION)/Headers
+ cd $(FRAMEWORK_DIR)/Versions/ && rm -f Current && ln -s $(VERSION) Current
+ cp -rf $(headerdir)/$(FRAMEWORK)/*.h $(FRAMEWORK_DIR)/Versions/$(VERSION)/Headers/
+ cp $(libdir)/$(LIBNAME) $(FRAMEWORK_DIR)/Versions/$(VERSION)/$(FRAMEWORK)
+ cd $(FRAMEWORK_DIR)/ && \
+ rm -f Headers && ln -s Versions/Current/Headers Headers && \
+ rm -f $(FRAMEWORK) && ln -s Versions/Current/$(FRAMEWORK) $(FRAMEWORK)
+
+ @if test ! -d $(FRAMEWORK_DIR)/Contents ; \
+ then \
+ mkdir -p $(FRAMEWORK_DIR)/Contents; \
+ fi
+
+ @if test -f $(FRAMEWORK_DIR)/Contents/Info.plist ; \
+ then \
+ rm -f $(FRAMEWORK_DIR)/Contents/Info.plist; \
+ fi
+
+ @sed -e "s,@VERSION@,$(VERSION),g" -e "s,@EXECUTABLE@,$(FRAMEWORK),g" \
+ $(top_srcdir)/config/Framework_Info.plist > $(FRAMEWORK_DIR)/Contents/Info.plist
+
+clean::
+ rm -fr $(FRAMEWORK_DIR)
+
+install:: $(FRAMEWORK_DIR)
+ cd $(FRAMEWORK_DIR)/ && install_name_tool -id $(FRAMEWORK_RUN_PATH) Versions/$(VERSION)/$(FRAMEWORK)
+ for component in IceUtil Ice IceSSL Glacier2 IcePatch2 IceStorm IceGrid; \
+ do \
+ install_name_tool -change $(runpath_libdir)/lib$$component.$(SOVERSION).dylib \
+ $(frameworks_prefix)/$$component.framework/Versions/$(VERSION)/$$component \
+ $(FRAMEWORK_DIR)/Versions/$(VERSION)/$(FRAMEWORK); \
+ done
+
+ @if test $(FRAMEWORK) = "Freeze" ; \
+ then \
+ mkdir -p $(FRAMEWORK_DIR)/Versions/$(VERSION)/usr/lib/; \
+ cp -rf $(DB_HOME)/lib/$(DB_LIBRARY_NAME) $(FRAMEWORK_DIR)/Versions/$(VERSION)/usr/lib/; \
+ install_name_tool -change $(firstword $(strip $(shell otool -L $(libdir)/$(LIBNAME) | grep libdb_cxx))) \
+ $(FRAMEWORK_INSTALL_DIR)/Versions/$(VERSION)/usr/lib/$(DB_LIBRARY_NAME) \
+ $(FRAMEWORK_DIR)/Versions/$(VERSION)/$(FRAMEWORK); \
+ cd $(FRAMEWORK_DIR) && rm -f usr && ln -s Versions/Current/usr usr; \
+ fi
+
+ @if test ! -d $(frameworks_prefix) ; \
+ then \
+ echo "Creating $(frameworks_prefix)..." ; \
+ $(call mkdir,$(frameworks_prefix), -p) ; \
+ fi
+
+ @echo "Installing $(FRAMEWORK).framework to $(frameworks_prefix)"; \
+ if test -d $(frameworks_prefix)/$(FRAMEWORK).framework; \
+ then \
+ rm -fr $(frameworks_prefix)/$(FRAMEWORK).framework; \
+ fi; \
+ cp -R $(FRAMEWORK_DIR) $(frameworks_prefix)
+else
+
+framework::
+
+endif
+
+#
# Avoid OpenSSL deprecation warnings on OS X
#
OPENSSL_FLAGS = -DMAC_OS_X_VERSION_MIN_REQUIRED=MAC_OS_X_VERSION_10_6
diff --git a/cpp/src/Freeze/Makefile b/cpp/src/Freeze/Makefile
index 7c1439d7286..419f956b0b3 100644
--- a/cpp/src/Freeze/Makefile
+++ b/cpp/src/Freeze/Makefile
@@ -12,6 +12,7 @@ top_srcdir = ../..
LIBFILENAME = $(call mklibfilename,Freeze,$(VERSION))
SONAME = $(call mksoname,Freeze,$(SOVERSION))
LIBNAME = $(call mklibname,Freeze)
+FRAMEWORK = Freeze
TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)/$(LIBNAME))
diff --git a/cpp/src/Glacier2Lib/Makefile b/cpp/src/Glacier2Lib/Makefile
index 32685bcad13..59ca9d5cd49 100644
--- a/cpp/src/Glacier2Lib/Makefile
+++ b/cpp/src/Glacier2Lib/Makefile
@@ -12,7 +12,7 @@ top_srcdir = ../..
LIBFILENAME = $(call mklibfilename,Glacier2,$(VERSION))
SONAME = $(call mksoname,Glacier2,$(SOVERSION))
LIBNAME = $(call mklibname,Glacier2)
-
+FRAMEWORK = Glacier2
TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)/$(LIBNAME))
diff --git a/cpp/src/Ice/DynamicLibrary.cpp b/cpp/src/Ice/DynamicLibrary.cpp
index b573a7f4388..7dd0ea2fcf3 100644
--- a/cpp/src/Ice/DynamicLibrary.cpp
+++ b/cpp/src/Ice/DynamicLibrary.cpp
@@ -170,8 +170,9 @@ IceInternal::DynamicLibrary::loadEntryPoint(const string& entryPoint, bool useIc
#ifdef __APPLE__
//
- // On OS X fallback to .so and .bundle extensions if the default
- // .dylib fails.
+ // On OS X fallback to .so and .bundle extensions, we also fallback
+ // to use the library name without an extesion in case is an OS X
+ // Framework, if the default .dylib fails.
//
if(!load(lib + ".dylib"))
{
@@ -182,7 +183,12 @@ IceInternal::DynamicLibrary::loadEntryPoint(const string& entryPoint, bool useIc
if(!load(lib + ".bundle"))
{
_err = errMsg + "; " + _err;
- return 0;
+
+ if(!load(libPath + libName))
+ {
+ _err = errMsg + "; " + _err;
+ return 0;
+ }
}
}
_err = "";
diff --git a/cpp/src/Ice/Makefile b/cpp/src/Ice/Makefile
index 60aa1f604c9..f9328196f52 100644
--- a/cpp/src/Ice/Makefile
+++ b/cpp/src/Ice/Makefile
@@ -13,6 +13,7 @@ LIBFILENAME = $(call mklibfilename,Ice,$(VERSION))
SONAME = $(call mksoname,Ice,$(SOVERSION))
LIBNAME = $(call mklibname,Ice)
TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)/$(LIBNAME))
+FRAMEWORK = Ice
OBJS = Acceptor.o \
Application.o \
diff --git a/cpp/src/IceGridLib/Makefile b/cpp/src/IceGridLib/Makefile
index abaf955cc19..f910bbcffcd 100644
--- a/cpp/src/IceGridLib/Makefile
+++ b/cpp/src/IceGridLib/Makefile
@@ -12,6 +12,7 @@ top_srcdir = ../..
LIBFILENAME = $(call mklibfilename,IceGrid,$(VERSION))
SONAME = $(call mksoname,IceGrid,$(SOVERSION))
LIBNAME = $(call mklibname,IceGrid)
+FRAMEWORK = IceGrid
LIBTARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)/$(LIBNAME))
TARGETS = $(LIBTARGETS) $(NODE_SERVER) $(REGISTRY_SERVER) $(ADMIN)
diff --git a/cpp/src/IcePatch2Lib/Makefile b/cpp/src/IcePatch2Lib/Makefile
index c39b03c227b..13e2849638b 100644
--- a/cpp/src/IcePatch2Lib/Makefile
+++ b/cpp/src/IcePatch2Lib/Makefile
@@ -12,6 +12,7 @@ top_srcdir = ../..
LIBFILENAME = $(call mklibfilename,IcePatch2,$(VERSION))
SONAME = $(call mksoname,IcePatch2,$(SOVERSION))
LIBNAME = $(call mklibname,IcePatch2)
+FRAMEWORK = IcePatch2
TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)/$(LIBNAME))
diff --git a/cpp/src/IceSSL/Makefile b/cpp/src/IceSSL/Makefile
index bbaaf3557ca..17fcd26cff8 100644
--- a/cpp/src/IceSSL/Makefile
+++ b/cpp/src/IceSSL/Makefile
@@ -13,6 +13,8 @@ top_srcdir = ../..
LIBFILENAME = $(call mklibfilename,IceSSL,$(VERSION))
SONAME = $(call mksoname,IceSSL,$(SOVERSION))
LIBNAME = $(call mklibname,IceSSL)
+FRAMEWORK = IceSSL
+
TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)/$(LIBNAME))
OBJS = AcceptorI.o \
diff --git a/cpp/src/IceStormLib/Makefile b/cpp/src/IceStormLib/Makefile
index aea2a06868a..b8d709e6571 100644
--- a/cpp/src/IceStormLib/Makefile
+++ b/cpp/src/IceStormLib/Makefile
@@ -12,6 +12,7 @@ top_srcdir = ../..
LIBFILENAME = $(call mklibfilename,IceStorm,$(VERSION))
SONAME = $(call mksoname,IceStorm,$(SOVERSION))
LIBNAME = $(call mklibname,IceStorm)
+FRAMEWORK = IceStorm
TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)/$(LIBNAME))
diff --git a/cpp/src/IceUtil/Makefile b/cpp/src/IceUtil/Makefile
index 9f889f4f69a..8c4086fab42 100644
--- a/cpp/src/IceUtil/Makefile
+++ b/cpp/src/IceUtil/Makefile
@@ -13,6 +13,8 @@ LIBFILENAME = $(call mklibfilename,IceUtil,$(VERSION))
SONAME = $(call mksoname,IceUtil,$(SOVERSION))
LIBNAME = $(call mklibname,IceUtil)
TARGETS = $(call mklibtargets,$(libdir)/$(LIBFILENAME),$(libdir)/$(SONAME),$(libdir)/$(LIBNAME))
+FRAMEWORK = IceUtil
+
OBJS = ArgVector.o \
Cond.o \