mirror of
https://github.com/libretro/RetroArch
synced 2024-12-28 18:31:05 +00:00
315 lines
7.1 KiB
Bash
315 lines
7.1 KiB
Bash
|
|
PKG_CONF_PATH=""
|
|
PKG_CONF_USED=""
|
|
CONFIG_DEFINES=""
|
|
MAKEFILE_DEFINES=""
|
|
INCLUDE_DIRS=""
|
|
LIBRARY_DIRS=""
|
|
[ -z "$PREFIX" ] && PREFIX="/usr/local"
|
|
|
|
add_define_header()
|
|
{
|
|
CONFIG_DEFINES="$CONFIG_DEFINES:@$1@$2@:"
|
|
}
|
|
|
|
add_define_make()
|
|
{
|
|
MAKEFILE_DEFINES="$MAKEFILE_DEFINES:@$1@$2@:"
|
|
}
|
|
|
|
add_include_dirs()
|
|
{
|
|
while [ ! -z "$1" ]
|
|
do
|
|
INCLUDE_DIRS="$INCLUDE_DIRS -I$1"
|
|
shift
|
|
done
|
|
}
|
|
|
|
add_library_dirs()
|
|
{
|
|
while [ ! -z "$1" ]
|
|
do
|
|
LIBRARY_DIRS="$LIBRARY_DIRS -L$1"
|
|
shift
|
|
done
|
|
}
|
|
|
|
check_lib()
|
|
{
|
|
tmpval="HAVE_$1"
|
|
eval tmpval=\$$tmpval
|
|
[ "$tmpval" = "no" ] && return 0
|
|
|
|
echo -n "Checking function $3 in $2 ... "
|
|
echo "void $3(void); int main(void) { $3(); return 0; }" > $TEMP_C
|
|
|
|
|
|
eval HAVE_$1=no
|
|
answer=no
|
|
|
|
extralibs="$4"
|
|
|
|
$CC -o $TEMP_EXE $TEMP_C $INCLUDE_DIRS $LIBRARY_DIRS $extralibs $2 2>/dev/null >/dev/null && answer=yes && eval HAVE_$1=yes
|
|
|
|
echo $answer
|
|
|
|
rm -rf $TEMP_C $TEMP_EXE
|
|
if [ "$tmpval" = "yes" ] && [ "$answer" = "no" ]; then
|
|
echo "Forced to build with library $2, but cannot locate. Exiting ..."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_lib_cxx()
|
|
{
|
|
tmpval="HAVE_$1"
|
|
eval tmpval=\$$tmpval
|
|
[ "$tmpval" = "no" ] && return 0
|
|
|
|
echo -n "Checking function $3 in $2 ... "
|
|
echo "extern \"C\" { void $3(void); } int main() { $3(); }" > $TEMP_CXX
|
|
|
|
eval HAVE_$1=no
|
|
answer=no
|
|
|
|
extralibs="$4"
|
|
|
|
$CXX -o $TEMP_EXE $TEMP_CXX $INCLUDE_DIRS $LIBRARY_DIRS $extralibs $2 2>/dev/null >/dev/null && answer=yes && eval HAVE_$1=yes
|
|
|
|
echo $answer
|
|
|
|
rm -rf $TEMP_CXX $TEMP_EXE
|
|
if [ "$tmpval" = "yes" ] && [ "$answer" = "no" ]; then
|
|
echo "Forced to build with library $2, but cannot locate. Exiting ..."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
locate_pkg_conf()
|
|
{
|
|
echo -n "Checking for pkg-config ... "
|
|
PKG_CONF_PATH="`which pkg-config | grep ^/ | head -n1`"
|
|
if [ -z $PKG_CONF_PATH ]; then
|
|
echo "not found"
|
|
echo "Cannot locate pkg-config. Exiting ..."
|
|
exit 1
|
|
fi
|
|
echo "$PKG_CONF_PATH"
|
|
}
|
|
|
|
check_pkgconf()
|
|
{
|
|
[ -z "$PKG_CONF_PATH" ] && locate_pkg_conf
|
|
|
|
tmpval="HAVE_$1"
|
|
eval tmpval=\$$tmpval
|
|
[ "$tmpval" = "no" ] && return 0
|
|
|
|
echo -n "Checking presence of package $2"
|
|
eval HAVE_$1=no
|
|
eval $1_CFLAGS=""
|
|
eval $1_LIBS=""
|
|
answer=no
|
|
minver=0.0
|
|
[ ! -z $3 ] && minver=$3 && echo -n " with minimum version $minver"
|
|
echo -n " ... "
|
|
pkg-config --atleast-version=$minver "$2" && eval HAVE_$1=yes && eval $1_CFLAGS='"`pkg-config $2 --cflags`"' && eval $1_LIBS='"`pkg-config $2 --libs`"' && answer=yes
|
|
echo $answer
|
|
|
|
PKG_CONF_USED="$PKG_CONF_USED $1"
|
|
|
|
if [ "$tmpval" = "yes" ] && [ "$answer" = "no" ]; then
|
|
echo "Forced to build with package $2, but cannot locate. Exiting ..."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_header()
|
|
{
|
|
tmpval="HAVE_$1"
|
|
eval tmpval=\$$tmpval
|
|
[ "$tmpval" = "no" ] && return 0
|
|
|
|
echo -n "Checking presence of header file $2 ... "
|
|
echo "#include<$2>" > $TEMP_C
|
|
echo "int main(void) { return 0; }" >> $TEMP_C
|
|
eval HAVE_$1=no
|
|
answer=no
|
|
|
|
$CC -o $TEMP_EXE $TEMP_C $INCLUDE_DIRS 2>/dev/null >/dev/null && answer=yes && eval HAVE_$1=yes
|
|
|
|
echo $answer
|
|
|
|
rm -rf $TEMP_C $TEMP_EXE
|
|
if [ "$tmpval" = "yes" ] && [ "$answer" = "no" ]; then
|
|
echo "Build assumed that $2 exists, but cannot locate. Exiting ..."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_switch_c()
|
|
{
|
|
echo -n "Checking for availability of switch $2 in $CC ... "
|
|
if [ -z "$CC" ]; then
|
|
echo "No C compiler, cannot check ..."
|
|
exit 1
|
|
fi
|
|
echo "int main(void) { return 0; }" > $TEMP_C
|
|
eval HAVE_$1=no
|
|
answer=no
|
|
$CC -o $TEMP_EXE $TEMP_C $2 2>/dev/null >/dev/null && answer=yes && eval HAVE_$1=yes
|
|
|
|
echo $answer
|
|
|
|
rm -rf $TEMP_C $TEMP_EXE
|
|
}
|
|
|
|
check_switch_cxx()
|
|
{
|
|
echo -n "Checking for availability of switch $2 in $CXX ... "
|
|
if [ -z "$CXX" ]; then
|
|
echo "No C++ compiler, cannot check ..."
|
|
exit 1
|
|
fi
|
|
echo "int main() { return 0; }" > $TEMP_CXX
|
|
eval HAVE_$1=no
|
|
answer=no
|
|
$CXX -o $TEMP_EXE $TEMP_CXX $2 2>/dev/null >/dev/null && answer=yes && eval HAVE_$1=yes
|
|
|
|
echo $answer
|
|
|
|
rm -rf $TEMP_CXX $TEMP_EXE
|
|
}
|
|
|
|
check_critical()
|
|
{
|
|
val=HAVE_$1
|
|
eval val=\$$val
|
|
if [ "$val" != "yes" ]; then
|
|
echo "$2"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
output_define_header()
|
|
{
|
|
arg1="`echo $2 | sed 's|^@\([^@]*\)@\([^@]*\)@$|\1|'`"
|
|
arg2="`echo $2 | sed 's|^@\([^@]*\)@\([^@]*\)@$|\2|'`"
|
|
|
|
echo "#define $arg1 $arg2" >> "$outfile"
|
|
}
|
|
|
|
create_config_header()
|
|
{
|
|
outfile="$1"
|
|
shift
|
|
|
|
echo "Creating config header: $outfile"
|
|
|
|
name="`echo __$outfile | sed 's|[\./]|_|g' | tr '[a-z]' '[A-Z]'`"
|
|
echo "#ifndef $name" > "$outfile"
|
|
echo "#define $name" >> "$outfile"
|
|
echo "" >> "$outfile"
|
|
echo "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >> "$outfile"
|
|
echo "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >> "$outfile"
|
|
|
|
while [ ! -z "$1" ]
|
|
do
|
|
tmpval="HAVE_$1"
|
|
eval tmpval=\$$tmpval
|
|
if [ "$tmpval" = "yes" ]; then
|
|
echo "#define HAVE_$1 1" >> "$outfile"
|
|
elif [ "$tmpval" = "no" ]; then
|
|
echo "/* #undef HAVE_$1 */" >> "$outfile"
|
|
fi
|
|
|
|
shift
|
|
done
|
|
|
|
echo "" >> "$outfile"
|
|
|
|
tmpdefs="$CONFIG_DEFINES"
|
|
while [ ! -z "$tmpdefs" ]
|
|
do
|
|
subdefs="`echo $tmpdefs | sed 's|^:\(@[^@]*@[^@]*@\):.*$|\1|'`"
|
|
tmpdefs="`echo $tmpdefs | sed 's|^\W*$||'`"
|
|
tmpdefs="`echo $tmpdefs | sed 's|^:\(@[^@]*@[^@]*@\):||'`"
|
|
output_define_header "$outfile" "$subdefs"
|
|
done
|
|
|
|
echo "#endif" >> "$outfile"
|
|
}
|
|
|
|
output_define_make()
|
|
{
|
|
arg1="`echo $2 | sed 's|^@\([^@]*\)@\([^@]*\)@$|\1|'`"
|
|
arg2="`echo $2 | sed 's|^@\([^@]*\)@\([^@]*\)@$|\2|'`"
|
|
|
|
echo "$arg1 = $arg2" >> "$outfile"
|
|
}
|
|
|
|
create_config_make()
|
|
{
|
|
|
|
outfile="$1"
|
|
shift
|
|
|
|
echo "Creating make config: $outfile"
|
|
|
|
rm -rf "$outfile"
|
|
touch "$outfile"
|
|
if [ "$USE_LANG_C" = "yes" ]; then
|
|
echo "CC = $CC" >> "$outfile"
|
|
echo "CFLAGS = $CFLAGS" >> "$outfile"
|
|
fi
|
|
if [ "$USE_LANG_CXX" = "yes" ]; then
|
|
echo "CXX = $CXX" >> "$outfile"
|
|
echo "CXXFLAGS = $CXXFLAGS" >> "$outfile"
|
|
fi
|
|
echo "LDFLAGS = $LDFLAGS" >> "$outfile"
|
|
echo "INCLUDE_DIRS = $INCLUDE_DIRS" >> "$outfile"
|
|
echo "LIBRARY_DIRS = $LIBRARY_DIRS" >> "$outfile"
|
|
echo "PACKAGE_NAME = $PACKAGE_NAME" >> "$outfile"
|
|
echo "PACKAGE_VERSION = $PACKAGE_VERSION" >> "$outfile"
|
|
echo "PREFIX = $PREFIX" >> "$outfile"
|
|
|
|
while [ ! -z "$1" ]
|
|
do
|
|
tmpval="HAVE_$1"
|
|
eval tmpval=\$$tmpval
|
|
if [ "$tmpval" = yes ]; then
|
|
echo "HAVE_$1 = 1" >> "$outfile"
|
|
elif [ "$tmpval" = no ]; then
|
|
echo "HAVE_$1 = 0" >> "$outfile"
|
|
fi
|
|
|
|
if [ ! -z "`echo $PKG_CONF_USED | grep $1`" ]; then
|
|
tmpval="$1_CFLAGS"
|
|
eval tmpval=\$$tmpval
|
|
echo "$1_CFLAGS = $tmpval" >> "$outfile"
|
|
|
|
tmpval="$1_LIBS"
|
|
eval tmpval=\$$tmpval
|
|
echo "$1_LIBS = $tmpval" >> "$outfile"
|
|
fi
|
|
|
|
|
|
shift
|
|
done
|
|
|
|
echo "" >> "$outfile"
|
|
|
|
tmpdefs="$MAKEFILE_DEFINES"
|
|
while [ ! -z "$tmpdefs" ]
|
|
do
|
|
subdefs="`echo $tmpdefs | sed 's|^:\(@[^@]*@[^@]*@\):.*$|\1|'`"
|
|
tmpdefs="`echo $tmpdefs | sed 's|^\W*$||'`"
|
|
tmpdefs="`echo $tmpdefs | sed 's|^:\(@[^@]*@[^@]*@\):||'`"
|
|
output_define_make "$outfile" "$subdefs"
|
|
done
|
|
|
|
}
|
|
|
|
|