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