| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
 | require "formula"
class OpenZwave < Formula
  homepage "http://www.openzwave.com"
  url "http://old.openzwave.com/downloads/openzwave-1.2.919.tar.gz"
  sha1 "514fa8a9e8468d264a6e4fffc377f2e18368ef41"
  bottle do
    sha1 "0aea65c0a849243fd77171b8331670bec815c296" => :yosemite
    sha1 "bdc7fd5fe1a9bcd8a3d2f3a881120dbb5192c06e" => :mavericks
    sha1 "ab857cbb029a40ede770184e6262344db82f9832" => :mountain_lion
  end
  # Patch to build a .dylib instead of a .so
  # This patch has been merged upstream and can be removed after the next release:
  # https://code.google.com/p/open-zwave/source/detail?r=954
  patch :DATA
  def install
    ENV["BUILD"] = "release"
    ENV["PREFIX"] = prefix
    system "make", "install"
  end
  test do
    (testpath/"test.cpp").write <<-EOS.undent
      #include <iostream>
      #include "Options.h"
      int main() {
        OpenZWave::Options::Create("", "", "");
        return 0;
      }
    EOS
    system ENV.cxx, "-o", "test", "-I", prefix/"include/openzwave", "-lopenzwave", "test.cpp"
    system "./test"
  end
end
__END__
diff --git a/cpp/build/Makefile b/cpp/build/Makefile
index 24df4f5..b064029 100644
--- a/cpp/build/Makefile
+++ b/cpp/build/Makefile
@@ -23,16 +23,24 @@ top_srcdir := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))../../)
 
 include $(top_srcdir)/cpp/build/support.mk
 
+#Mac prefers a dylib, not a so
+ifeq ($(UNAME),Darwin)
+SHARED_LIB_NAME=libopenzwave-$(VERSION).dylib
+SHARED_LIB_UNVERSIONED=libopenzwave.dylib
+else
+SHARED_LIB_NAME=libopenzwave.so.$(VERSION)
+SHARED_LIB_UNVERSIONED=libopenzwave.so
+endif
 
 #if we are on a Mac, add these flags and libs to the compile and link phases 
 ifeq ($(UNAME),Darwin)
 CFLAGS	+= -c -DDARWIN -arch i386 -arch x86_64
-LDFLAGS += -arch i386 -arch x86_64
+LDFLAGS += -arch i386 -arch x86_64 -dynamiclib
 LIBS	+= -framework IOKit -framework CoreFoundation -arch i386 -arch x86_64
 else ifeq ($(UNAME),FreeBSD)
 CFLAGS += -I/usr/local/include
 else
-LDFLAGS += -Wl,-soname,libopenzwave.so.$(VERSION)
+LDFLAGS += -shared -Wl,-soname,$(SHARED_LIB_NAME)
 LIBS 	+= -ludev
 endif
 
@@ -74,10 +82,10 @@ indep := $(notdir $(filter-out $(top_srcdir)/cpp/src/vers.cpp, $(wildcard $(top_
 aes := $(notdir $(wildcard $(top_srcdir)/cpp/src/aes/*.c))
 
 
-default: $(LIBDIR)/libopenzwave.a $(LIBDIR)/libopenzwave.so.$(VERSION)
+default: $(LIBDIR)/libopenzwave.a $(LIBDIR)/$(SHARED_LIB_NAME)
 
 clean:
-	@rm -rf $(DEPDIR) $(OBJDIR) $(LIBDIR)/libopenzwave.so* $(LIBDIR)/libopenzwave.a $(top_builddir)/libopenzwave.pc $(top_builddir)/docs/api $(top_builddir)/Doxyfile
+	@rm -rf $(DEPDIR) $(OBJDIR) $(LIBDIR)/libopenzwave.so* $(LIBDIR)/libopenzwave-*.dylib $(LIBDIR)/libopenzwave.a $(top_builddir)/libopenzwave.pc $(top_builddir)/docs/api $(top_builddir)/Doxyfile
 
 
 -include $(patsubst %.cpp,$(DEPDIR)/%.d,$(tinyxml))
@@ -110,7 +118,7 @@ $(LIBDIR)/libopenzwave.a:	$(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml)) \
 	@$(AR) $@ $+
 	@$(RANLIB) $@
 
-$(LIBDIR)/libopenzwave.so.$(VERSION):	$(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml)) \
+$(LIBDIR)/$(SHARED_LIB_NAME):	$(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml)) \
 			$(patsubst %.c,$(OBJDIR)/%.o,$(hidapi)) \
 			$(patsubst %.c,$(OBJDIR)/%.o,$(aes)) \
 			$(patsubst %.cpp,$(OBJDIR)/%.o,$(cclasses)) \
@@ -120,7 +128,7 @@ $(LIBDIR)/libopenzwave.so.$(VERSION):	$(patsubst %.cpp,$(OBJDIR)/%.o,$(tinyxml))
 			$(OBJDIR)/vers.o
 	@echo "Linking Shared Library"
-	@$(LD) $(LDFLAGS) -shared  -o $@ $+ $(LIBS)
-	@ln -sf libopenzwave.so.$(VERSION) $(LIBDIR)/libopenzwave.so
+	@$(LD) $(LDFLAGS) -o $@ $+ $(LIBS)
+	@ln -sf $(SHARED_LIB_NAME) $(LIBDIR)/$(SHARED_LIB_UNVERSIONED)
 
 ifeq ($(PKGCONFIG),)
 $(top_builddir)/libopenzwave.pc: $(top_srcdir)/cpp/build/libopenzwave.pc.in
@@ -155,10 +163,10 @@ doc: $(top_builddir)/Doxyfile
 	@cd $(top_builddir); $(DOXYGEN)
 endif
 
-install: $(LIBDIR)/libopenzwave.so.$(VERSION) doc $(top_builddir)/libopenzwave.pc 
+install: $(LIBDIR)/$(SHARED_LIB_NAME) doc $(top_builddir)/libopenzwave.pc 
 	install -d $(DESTDIR)/$(instlibdir)/
-	cp  $(LIBDIR)/libopenzwave.so.$(VERSION) $(DESTDIR)/$(instlibdir)/libopenzwave.so.$(VERSION)
-	ln -sf libopenzwave.so.$(VERSION) $(DESTDIR)/$(instlibdir)/libopenzwave.so
+	cp  $(LIBDIR)/$(SHARED_LIB_NAME) $(DESTDIR)/$(instlibdir)/$(SHARED_LIB_NAME)
+	ln -sf $(SHARED_LIB_NAME) $(DESTDIR)/$(instlibdir)/$(SHARED_LIB_UNVERSIONED)
 	install -d $(DESTDIR)/$(includedir)
 	install -m 0644 $(top_srcdir)/cpp/src/*.h $(DESTDIR)/$(includedir)
 	install -d $(DESTDIR)/$(includedir)/command_classes/
diff --git a/cpp/examples/MinOZW/Makefile b/cpp/examples/MinOZW/Makefile
index 0f1fd50..3805a39 100644
--- a/cpp/examples/MinOZW/Makefile
+++ b/cpp/examples/MinOZW/Makefile
@@ -19,7 +19,7 @@ top_srcdir := $(abspath $(dir $(lastword $(MAKEFILE_LIST)))../../../)
 
 
 INCLUDES	:= -I $(top_srcdir)/cpp/src -I $(top_srcdir)/cpp/tinyxml/ -I $(top_srcdir)/cpp/hidapi/hidapi/
-LIBS =  $(wildcard $(LIBDIR)/*.so $(top_builddir)/*.so $(top_builddir)/cpp/build/*.so )
+LIBS =  $(wildcard $(LIBDIR)/*.so $(LIBDIR)/*.dylib $(top_builddir)/*.so $(top_builddir)/*.dylib $(top_builddir)/cpp/build/*.so $(top_builddir)/cpp/build/*.dylib )
 LIBSDIR = $(abspath $(dir $(firstword $(LIBS))))
 minozwsrc := $(notdir $(wildcard $(top_srcdir)/cpp/examples/MinOZW/*.cpp))
 VPATH := $(top_srcdir)/cpp/examples/MinOZW
 |