1#!/bin/sh
2set -o xtrace   # Write all commands first to stderr
3set -o errexit  # Exit the script with error if any of the commands fail
4
5# Supported/used environment variables:
6#   BUILD_MONGOC_WITH_CMAKE    Build mongoc with CMake. Default: use Autotools.
7#   LINK_STATIC                Whether to statically link to libmongoc
8#   BUILD_SAMPLE_WITH_CMAKE    Link program w/ CMake. Default: use pkg-config.
9#   ENABLE_SSL                 Set -DENABLE_SSL or --enable-ssl.
10
11
12echo "BUILD_MONGOC_WITH_CMAKE=$BUILD_MONGOC_WITH_CMAKE LINK_STATIC=$LINK_STATIC BUILD_SAMPLE_WITH_CMAKE=$BUILD_SAMPLE_WITH_CMAKE"
13
14CMAKE=${CMAKE:-/opt/cmake/bin/cmake}
15
16if command -v gtar 2>/dev/null; then
17  TAR=gtar
18else
19  TAR=tar
20fi
21
22if [ $(uname) = "Darwin" ]; then
23  SO=dylib
24  LIB_SO=libmongoc-1.0.0.dylib
25  LDD="otool -L"
26else
27  SO=so
28  LIB_SO=libmongoc-1.0.so.0
29  LDD=ldd
30fi
31
32SRCROOT=`pwd`
33
34BUILD_DIR=$(pwd)/build-dir
35rm -rf $BUILD_DIR
36mkdir $BUILD_DIR
37
38INSTALL_DIR=$(pwd)/install-dir
39rm -rf $INSTALL_DIR
40mkdir -p $INSTALL_DIR
41
42cd $BUILD_DIR
43$TAR xf ../../mongoc.tar.gz -C . --strip-components=1
44
45if [ "$ENABLE_SSL" ]; then
46  SSL_CONFIGURE_OPTION="--enable-ssl"
47  SSL_CMAKE_OPTION="-DENABLE_SSL:BOOL=ON"
48else
49  SSL_CONFIGURE_OPTION="--disable-ssl"
50  SSL_CMAKE_OPTION="-DENABLE_SSL:BOOL=OFF"
51fi
52
53
54if [ "$LINK_STATIC" ]; then
55  STATIC_CONFIGURE_OPTION="--enable-static"
56  STATIC_CMAKE_OPTION="-DENABLE_STATIC=ON -DENABLE_TESTS=ON"
57else
58  STATIC_CMAKE_OPTION="-DENABLE_STATIC=OFF -DENABLE_TESTS=OFF"
59fi
60
61
62if [ "$BUILD_MONGOC_WITH_CMAKE" ]; then
63  # Our CMake script doesn't build bundled libbson (CDRIVER-1948) so fake it.
64  cd src/libbson
65  $CMAKE -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR $STATIC_CMAKE_OPTION .
66  make
67  make install
68  cd ../..
69
70  $CMAKE -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR -DCMAKE_PREFIX_PATH=$INSTALL_DIR/lib/cmake $SSL_CMAKE_OPTION $STATIC_CMAKE_OPTION .
71  make
72  make install
73else
74  ./configure --prefix=$INSTALL_DIR --disable-examples $SSL_CONFIGURE_OPTION $STATIC_CONFIGURE_OPTION --with-libbson=bundled
75  make
76  make install
77fi
78
79
80LIB=$INSTALL_DIR/lib/libmongoc-1.0.$SO
81if test ! -L $LIB; then
82   echo "$LIB should be a symlink"
83   exit 1
84fi
85
86TARGET=$(readlink $LIB)
87if test ! -f $INSTALL_DIR/lib/$TARGET; then
88  echo "$LIB target $INSTALL_DIR/lib/$TARGET is missing!"
89  exit 1
90else
91  echo "$LIB target $INSTALL_DIR/lib/$TARGET check ok"
92fi
93
94
95if test ! -f $INSTALL_DIR/lib/$LIB_SO; then
96  echo "$LIB_SO missing!"
97  exit 1
98else
99  echo "$LIB_SO check ok"
100fi
101
102if test ! -f $INSTALL_DIR/lib/pkgconfig/libmongoc-1.0.pc; then
103  echo "libmongoc-1.0.pc missing!"
104  exit 1
105else
106  echo "libmongoc-1.0.pc check ok"
107fi
108if test ! -f $INSTALL_DIR/lib/cmake/libmongoc-1.0/libmongoc-1.0-config.cmake; then
109  echo "libmongoc-1.0-config.cmake missing!"
110  exit 1
111else
112  echo "libmongoc-1.0-config.cmake check ok"
113fi
114if test ! -f $INSTALL_DIR/lib/cmake/libmongoc-1.0/libmongoc-1.0-config-version.cmake; then
115  echo "libmongoc-1.0-config-version.cmake missing!"
116  exit 1
117else
118  echo "libmongoc-1.0-config-version.cmake check ok"
119fi
120
121
122if [ "$LINK_STATIC" ]; then
123  if test ! -f $INSTALL_DIR/lib/libmongoc-static-1.0.a; then
124    echo "libmongoc-static-1.0.a missing!"
125    exit 1
126  else
127    echo "libmongoc-static-1.0.a check ok"
128  fi
129  if test ! -f $INSTALL_DIR/lib/pkgconfig/libmongoc-static-1.0.pc; then
130    echo "libmongoc-static-1.0.pc missing!"
131    exit 1
132  else
133    echo "libmongoc-static-1.0.pc check ok"
134  fi
135  if test ! -f $INSTALL_DIR/lib/cmake/libmongoc-static-1.0/libmongoc-static-1.0-config.cmake; then
136    echo "libmongoc-static-1.0-config.cmake missing!"
137    exit 1
138  else
139    echo "libmongoc-static-1.0-config.cmake check ok"
140  fi
141  if test ! -f $INSTALL_DIR/lib/cmake/libmongoc-static-1.0/libmongoc-static-1.0-config-version.cmake; then
142    echo "libmongoc-static-1.0-config-version.cmake missing!"
143    exit 1
144  else
145    echo "libmongoc-static-1.0-config-version.cmake check ok"
146  fi
147else
148  if test -f $INSTALL_DIR/lib/libmongoc-static-1.0.a; then
149    echo "libmongoc-static-1.0.a shouldn't have been installed"
150    exit 1
151  fi
152  if test -f $INSTALL_DIR/lib/libmongoc-1.0.a; then
153    echo "libmongoc-1.0.a shouldn't have been installed"
154    exit 1
155  fi
156  if test -f $INSTALL_DIR/lib/pkgconfig/libmongoc-static-1.0.pc; then
157    echo "libmongoc-static-1.0.pc shouldn't have been installed"
158    exit 1
159  fi
160  if test -f $INSTALL_DIR/lib/cmake/libmongoc-static-1.0/libmongoc-static-1.0-config.cmake; then
161    echo "libmongoc-static-1.0-config.cmake shouldn't have been installed"
162    exit 1
163  fi
164  if test -f $INSTALL_DIR/lib/cmake/libmongoc-static-1.0/libmongoc-static-1.0-config-version.cmake; then
165    echo "libmongoc-static-1.0-config-version.cmake shouldn't have been installed"
166    exit 1
167  fi
168fi
169
170cd $SRCROOT
171
172if [ "$BUILD_SAMPLE_WITH_CMAKE" ]; then
173  # Test our CMake package config file with CMake's find_package command.
174  EXAMPLE_DIR=$SRCROOT/examples/cmake/find_package
175
176  if [ "$LINK_STATIC" ]; then
177    EXAMPLE_DIR="${EXAMPLE_DIR}_static"
178  fi
179
180  cd $EXAMPLE_DIR
181  $CMAKE -DCMAKE_PREFIX_PATH=$INSTALL_DIR/lib/cmake .
182  make
183else
184  # Test our pkg-config file.
185  export PKG_CONFIG_PATH=$INSTALL_DIR/lib/pkgconfig
186  cd $SRCROOT/examples
187
188  if [ "$LINK_STATIC" ]; then
189    echo "pkg-config output:"
190    echo $(pkg-config --libs --cflags libmongoc-static-1.0)
191    sh compile-with-pkg-config-static.sh
192  else
193    echo "pkg-config output:"
194    echo $(pkg-config --libs --cflags libmongoc-1.0)
195    sh compile-with-pkg-config.sh
196  fi
197fi
198
199if [ ! "$LINK_STATIC" ]; then
200  if [ $(uname) = "Darwin" ]; then
201    export DYLD_LIBRARY_PATH=$INSTALL_DIR/lib
202  else
203    export LD_LIBRARY_PATH=$INSTALL_DIR/lib
204  fi
205fi
206
207echo "ldd hello_mongoc:"
208$LDD hello_mongoc
209
210./hello_mongoc
211