#!/bin/sh

# Copyright (c) 2009, Aleksey Cheusov <vle@gmx.net>
# All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 
# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

# usage: mkc_check_func <functionname> [libraries...]

set -e

LC_ALL=C
export LC_ALL

##################################################
# options
usage (){
    cat <<EOF
mkc_check_funclib detects presense of function in a library
by compiling and linking a test program.

Usage: mkc_check_funclib function [librarries...]

Examples:
   mkc_check_funclib dlopen dl
   mkc_check_funclib dlopen
   mkc_check_funclib strlcpy
   mkc_check_funclib select socket
EOF
}

if test $# -eq 0; then
    usage
    exit 1
fi
if test "$1" = '-h' -o "$1" = '--help'; then
    usage
    exit 0
fi

##################################################
# initializing

pathpart=`echo $* | tr '/. ' ___`

funcname=$1
shift

. mkc_check_common.sh

for i in "$@"; do
    LDADD="$LDADD -l$i"
    libs_msg="$libs_msg -l$i"
done

if test -n "$libs_msg"; then
    libs_msg=" ($libs_msg )"
fi

##################################################
# test

if test "$MKC_NOCACHE" != 1 && test -f "$cache"; then
    cached=1
    printme '%s' "checking for function ${funcname}${libs_msg}... (cached) " 1>&2
    ret=`cat "$cache"`
else
    printme '%s' "checking for function ${funcname}${libs_msg}... " 1>&2

    # preparations
    cat > "$tmpc" <<EOF
int main ()
{
   $funcname ();
   return 0;
}
EOF

    # test itself
    if $CC -o "$tmpexe" "$tmpc" $LDFLAGS $LDADD 2>"$tmperr"; then
	ret=1
    else
	ret=0
    fi
    echo "$ret" > "$cache"
fi

##################################################
# clean-ups

cleanup

##################################################
# finishing

if test "$ret" -eq 1; then
    printme 'yes\n' 1>&2
else
    printme 'no\n' 1>&2
fi

echo $ret
