#!/bin/sh

# Detects OS we're compiling on and generates build_config.mk,
# which in turn gets read while processing Makefile.

# build_config.mk will set the following variables:
# - PORT_CFLAGS will either set:
#               -DLEVELDB_PLATFORM_POSIX if cstatomic is present
#               -DLEVELDB_PLATFORM_NOATOMIC if it is not
# - PLATFORM_CFLAGS with compiler flags for the platform
# - PLATFORM_LDFLAGS with linker flags for the platform

# Delete existing build_config.mk
rm -f build_config.mk

if test -z "$CXX"; then
    CXX=g++
fi

# Detect OS
case `uname -s` in
    Darwin)
        PLATFORM=OS_MACOSX
        echo "PLATFORM_CFLAGS=-DOS_MACOSX" >> build_config.mk
        echo "PLATFORM_LDFLAGS="  >> build_config.mk
        ;;
    Linux)
        PLATFORM=OS_LINUX
        echo "PLATFORM_CFLAGS=-pthread -DOS_LINUX" >> build_config.mk
        echo "PLATFORM_LDFLAGS=-pthread"  >> build_config.mk
        ;;
    SunOS)
        PLATFORM=OS_SOLARIS
        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_SOLARIS"  >> build_config.mk
        echo "PLATFORM_LDFLAGS=-lpthread -lrt" >> build_config.mk
        ;;
    FreeBSD)
        PLATFORM=OS_FREEBSD
        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_FREEBSD"  >> build_config.mk
        echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk
        ;;
    NetBSD)
        PLATFORM=OS_NETBSD
        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_NETBSD"  >> build_config.mk
        echo "PLATFORM_LDFLAGS=-lpthread -lgcc_s" >> build_config.mk
        ;;
    OpenBSD)
        PLATFORM=OS_OPENBSD
        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_OPENBSD"  >> build_config.mk
        echo "PLATFORM_LDFLAGS=-pthread" >> build_config.mk
        ;;
    DragonFly)
        PLATFORM=OS_DRAGONFLYBSD
        echo "PLATFORM_CFLAGS=-D_REENTRANT -DOS_DRAGONFLYBSD"  >> build_config.mk
        echo "PLATFORM_LDFLAGS=-lpthread" >> build_config.mk
        ;;
    *)
        echo "Unknown platform!"
        exit 1
esac

echo "PLATFORM=$PLATFORM" >> build_config.mk

# On GCC, use libc's memcmp, not GCC's memcmp; and use PIE
PORT_CFLAGS="-fno-builtin-memcmp -fPIE"

# Detect C++0x -- this determines whether we'll use port_noatomic.h
# or port_posix.h by:
# 1. Rrying to compile with -std=c++0x and including <cstdatomic>.
# 2. If $CXX returns error code, we know to use port_posix.h
$CXX $CFLAGS -std=c++0x -x c++ - -o /dev/null 2>/dev/null  <<EOF
  #include <cstdatomic>
  int main() {}
EOF
if [ "$?" = 0 ]; then
    PORT_CFLAGS="$PORT_CFLAGS -DLEVELDB_PLATFORM_POSIX -DLEVELDB_CSTDATOMIC_PRESENT -std=c++0x"
else
    PORT_CFLAGS="$PORT_CFLAGS -DLEVELDB_PLATFORM_POSIX"
fi

# Test whether Snappy library is installed
# http://code.google.com/p/snappy/
$CXX $CFLAGS -x c++ - -o /dev/null 2>/dev/null  <<EOF
  #include <snappy.h>
  int main() {}
EOF
if [ "$?" = 0 ]; then
    echo "SNAPPY=1" >> build_config.mk
else
    echo "SNAPPY=0" >> build_config.mk
fi

echo "PORT_CFLAGS=$PORT_CFLAGS" >> build_config.mk
