#!/bin/sh

# Check for NLopt library
echo "Checking for NLopt library..."

# Try to compile a test program
cat > conftest.cpp <<EOF
#include <nlopt.hpp>
int main() {
    return 0;
}
EOF

NLOPT_FOUND=0
NLOPT_CXXFLAGS=""
NLOPT_LIBS=""

# Try pkg-config first (most reliable, handles lib vs lib64 correctly)
if [ $NLOPT_FOUND -eq 0 ]; then
    if command -v pkg-config >/dev/null 2>&1; then
        if pkg-config --exists nlopt 2>/dev/null; then
            PKG_CFLAGS="`pkg-config --cflags nlopt`"
            PKG_LFLAGS="`pkg-config --libs nlopt`"
            ${CXX} ${CXXFLAGS} ${PKG_CFLAGS} conftest.cpp ${PKG_LFLAGS} -o conftest 2>/dev/null
            if [ $? -eq 0 ]; then
                NLOPT_FOUND=1
                NLOPT_CXXFLAGS="${PKG_CFLAGS} -DHAVE_NLOPT"
                NLOPT_LIBS="${PKG_LFLAGS}"
                echo "NLopt found via pkg-config"
            fi
        fi
    fi
fi

# Fall back to checking standard locations
if [ $NLOPT_FOUND -eq 0 ]; then
    for NLOPT_PREFIX in /usr /usr/local /opt/local /opt/homebrew /usr/local/opt/nlopt; do
        if [ -f "${NLOPT_PREFIX}/include/nlopt.hpp" ] || [ -f "${NLOPT_PREFIX}/include/nlopt.h" ]; then

            # Determine the correct library directory
            # On many 64-bit Linux systems, libraries are in lib64
            NLOPT_LIBDIR=""
            for LIBDIR in lib64 lib; do
                if [ -f "${NLOPT_PREFIX}/${LIBDIR}/libnlopt.so" ] || \
                   [ -f "${NLOPT_PREFIX}/${LIBDIR}/libnlopt.dylib" ] || \
                   [ -f "${NLOPT_PREFIX}/${LIBDIR}/libnlopt.a" ]; then
                    NLOPT_LIBDIR="${NLOPT_PREFIX}/${LIBDIR}"
                    break
                fi
            done

            # For standard system paths (/usr), don't add -I/-L flags
            # since the compiler and linker already search these paths.
            # Adding -L/usr/lib on 64-bit systems causes "skipping
            # incompatible" warnings when 32-bit libraries are present.
            if [ "${NLOPT_PREFIX}" = "/usr" ]; then
                TEST_CFLAGS=""
                TEST_LFLAGS="-lnlopt"
            else
                TEST_CFLAGS="-I${NLOPT_PREFIX}/include"
                if [ -n "${NLOPT_LIBDIR}" ]; then
                    TEST_LFLAGS="-L${NLOPT_LIBDIR} -lnlopt"
                else
                    TEST_LFLAGS="-L${NLOPT_PREFIX}/lib -lnlopt"
                fi
            fi

            ${CXX} ${CXXFLAGS} ${TEST_CFLAGS} conftest.cpp ${TEST_LFLAGS} -o conftest 2>/dev/null
            if [ $? -eq 0 ]; then
                NLOPT_FOUND=1
                NLOPT_CXXFLAGS="${TEST_CFLAGS} -DHAVE_NLOPT"
                NLOPT_LIBS="${TEST_LFLAGS}"
                echo "NLopt found in ${NLOPT_PREFIX}"
                break
            fi
        fi
    done
fi

# Clean up
rm -f conftest conftest.cpp conftest.o
rm -rf conftest.dSYM

if [ $NLOPT_FOUND -eq 0 ]; then
    echo "NLopt not found. Package will compile without NLopt support."
    echo "To enable NLopt support, install NLopt library:"
    echo "  - Ubuntu/Debian: sudo apt-get install libnlopt-dev"
    echo "  - macOS: brew install nlopt"
    echo "  - Fedora/RHEL: sudo dnf install NLopt-devel"
    NLOPT_CXXFLAGS=""
    NLOPT_LIBS=""
fi

# Write to Makevars
sed -e "s|@NLOPT_CXXFLAGS@|${NLOPT_CXXFLAGS}|" \
    -e "s|@NLOPT_LIBS@|${NLOPT_LIBS}|" \
    src/Makevars.in > src/Makevars

echo "Configuration complete."
