mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-27 18:20:27 +00:00
279 lines
8.2 KiB
Bash
279 lines
8.2 KiB
Bash
#<maister> echo -n is broken on recent OSX btw
|
|
|
|
MAKEFILE_DEFINES='.MAKEFILE_DEFINES'
|
|
CONFIG_DEFINES='.CONFIG_DEFINES'
|
|
cat /dev/null > "$MAKEFILE_DEFINES" > "$CONFIG_DEFINES"
|
|
#cat /dev/null > "${MAKEFILE_DEFINES:=.MAKEFILE_DEFINES}" > "${CONFIG_DEFINES=.CONFIG_DEFINES}"
|
|
|
|
[ "$PREFIX" ] || PREFIX="/usr/local"
|
|
|
|
add_define_header()
|
|
{ echo "$1=$2" >> "$CONFIG_DEFINES";}
|
|
|
|
add_define_make()
|
|
{ echo "$1=$2" >> "$MAKEFILE_DEFINES";}
|
|
|
|
add_include_dirs()
|
|
{ while [ "$1" ]; do INCLUDE_DIRS="$INCLUDE_DIRS -I$1"; shift; done;}
|
|
|
|
add_library_dirs()
|
|
{ while [ "$1" ]; do LIBRARY_DIRS="$LIBRARY_DIRS -L$1"; shift; done;}
|
|
|
|
check_lib() #$1 = HAVE_$1 $2 = lib $3 = function in lib $4 = extralibs $5 = headers
|
|
{ tmpval="$(eval echo \$HAVE_$1)"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
|
|
if [ "$3" ]; then
|
|
ECHOBUF="Checking function $3 in ${2% }"
|
|
if [ "$5" ]; then
|
|
printf "$5\nint main(void) { void *p = (void*)$3; return 0; }" > $TEMP_C
|
|
else
|
|
echo "void $3(void); int main(void) { $3(); return 0; }" > $TEMP_C
|
|
fi
|
|
else
|
|
ECHOBUF="Checking existence of ${2% }"
|
|
echo "int main(void) { return 0; }" > $TEMP_C
|
|
fi
|
|
answer='no'
|
|
# echo -n "$ECHOBUF"
|
|
"$CC" -o "$TEMP_EXE" "$TEMP_C" $INCLUDE_DIRS $LIBRARY_DIRS $4 $CFLAGS $LDFLAGS $2 >>config.log 2>&1 && answer='yes'
|
|
eval HAVE_$1="$answer"; echo "$ECHOBUF ... $answer"
|
|
rm "$TEMP_C" "$TEMP_EXE" >/dev/null 2>&1
|
|
|
|
[ "$tmpval" = 'yes' ] && [ "$answer" = 'no' ] && {
|
|
echo "Forced to build with library $2, but cannot locate. Exiting ..."
|
|
exit 1
|
|
}
|
|
|
|
true
|
|
}
|
|
|
|
check_lib_cxx() #$1 = HAVE_$1 $2 = lib $3 = function in lib $4 = extralibs $5 = critical error message [checked only if non-empty]
|
|
{ tmpval="$(eval echo \$HAVE_$1)"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
|
|
if [ "$3" ]; then
|
|
ECHOBUF="Checking function $3 in ${2% }"
|
|
echo "extern \"C\" { void $3(void); } int main() { $3(); }" > $TEMP_CXX
|
|
else
|
|
ECHOBUF="Checking existence of ${2% }"
|
|
echo "int main() { return 0; }" > $TEMP_CXX
|
|
fi
|
|
answer='no'
|
|
# echo -n "$ECHOBUF"
|
|
"$CXX" -o "$TEMP_EXE" "$TEMP_CXX" $INCLUDE_DIRS $LIBRARY_DIRS $4 $CFLAGS $LDFLAGS $2 >>config.log 2>&1 && answer='yes'
|
|
eval HAVE_$1="$answer"; echo "$ECHOBUF ... $answer"
|
|
rm "$TEMP_CXX" "$TEMP_EXE" >/dev/null 2>&1
|
|
[ "$answer" = 'no' ] && {
|
|
[ "$5" ] && { echo "$5"; exit 1;}
|
|
[ "$tmpval" = 'yes' ] && {
|
|
echo "Forced to build with library $2, but cannot locate. Exiting ..."
|
|
exit 1
|
|
}
|
|
|
|
}
|
|
|
|
true
|
|
}
|
|
|
|
check_code_c()
|
|
{ tmpval="$(eval echo \$HAVE_$1)"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
|
|
ECHOBUF="Checking C code snippet \"$3\""
|
|
# echo -n "Checking C code snippet \"$3\""
|
|
answer='no'
|
|
"$CC" -o "$TEMP_EXE" "$TEMP_C" $INCLUDE_DIRS $LIBRARY_DIRS $2 $CFLAGS $LDFLAGS >>config.log 2>&1 && answer='yes'
|
|
eval HAVE_$1="$answer"; echo "$ECHOBUF ... $answer"
|
|
rm "$TEMP_C" "$TEMP_EXE" >/dev/null 2>&1
|
|
}
|
|
|
|
check_code_cxx()
|
|
{ tmpval="$(eval echo \$HAVE_$1)"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
|
|
ECHOBUF="Checking C++ code snippet \"$3\""
|
|
# echo -n "Checking C++ code snippet \"$3\""
|
|
answer='no'
|
|
"$CXX" -o "$TEMP_EXE" "$TEMP_CXX" $INCLUDE_DIRS $LIBRARY_DIRS $2 $CXXFLAGS $LDFLAGS >>config.log 2>&1 && answer='yes'
|
|
eval HAVE_$1="$answer"; echo "$ECHOBUF ... $answer"
|
|
rm "$TEMP_CXX" "$TEMP_EXE" >/dev/null 2>&1
|
|
}
|
|
|
|
check_pkgconf() #$1 = HAVE_$1 $2 = package $3 = version $4 = critical error message [checked only if non-empty]
|
|
{ tmpval="$(eval echo \$HAVE_$1)"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
|
|
ECHOBUF="Checking presence of package $2"
|
|
[ "$3" ] && ECHOBUF="$ECHOBUF >= $3"
|
|
|
|
[ "$PKG_CONF_PATH" = "none" ] && {
|
|
eval HAVE_$1="no"
|
|
echo "$ECHOBUF ... no"
|
|
return 0
|
|
}
|
|
|
|
answer='no'
|
|
version='no'
|
|
$PKG_CONF_PATH --atleast-version="${3:-0.0}" "$2" && {
|
|
answer='yes'
|
|
version=$($PKG_CONF_PATH --modversion "$2")
|
|
eval $1_CFLAGS=\"$($PKG_CONF_PATH $2 --cflags)\"
|
|
eval $1_LIBS=\"$($PKG_CONF_PATH $2 --libs)\"
|
|
}
|
|
|
|
eval HAVE_$1="$answer";
|
|
echo "$ECHOBUF ... $version"
|
|
PKG_CONF_USED="$PKG_CONF_USED $1"
|
|
[ "$answer" = 'no' ] && {
|
|
[ "$4" ] && { echo "$4"; exit 1;}
|
|
[ "$tmpval" = 'yes' ] && {
|
|
echo "Forced to build with package $2, but cannot locate. Exiting ..."
|
|
exit 1
|
|
}
|
|
}
|
|
}
|
|
|
|
check_header() #$1 = HAVE_$1 $2..$5 = header files
|
|
{ tmpval="$(eval echo \$HAVE_$1)"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
CHECKHEADER="$2"
|
|
# echo -n "Checking presence of header file $2"
|
|
echo "#include <$2>" > "$TEMP_C"
|
|
[ "$3" != "" ] && CHECKHEADER="$3" && echo "#include <$3>" >> "$TEMP_C"
|
|
[ "$4" != "" ] && CHECKHEADER="$4" && echo "#include <$4>" >> "$TEMP_C"
|
|
[ "$5" != "" ] && CHECKHEADER="$5" && echo "#include <$5>" >> "$TEMP_C"
|
|
echo "int main(void) { return 0; }" >> "$TEMP_C"
|
|
answer='no'
|
|
"$CC" -o "$TEMP_EXE" "$TEMP_C" $INCLUDE_DIRS >>config.log 2>&1 && answer='yes'
|
|
eval HAVE_$1="$answer"; echo "Checking presence of header file $CHECKHEADER ... $answer"
|
|
rm "$TEMP_C" "$TEMP_EXE" >/dev/null 2>&1
|
|
[ "$tmpval" = 'yes' ] && [ "$answer" = 'no' ] && {
|
|
echo "Build assumed that $2 exists, but cannot locate. Exiting ..."
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
check_macro() #$1 = HAVE_$1 $2 = macro name
|
|
{ tmpval="$(eval echo \$HAVE_$1)"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
ECHOBUF="Checking presence of predefined macro $2"
|
|
# echo -n "Checking presence of predefined macro $2"
|
|
cat << EOF > "$TEMP_C"
|
|
#ifndef $2
|
|
#error $2 is not defined
|
|
#endif
|
|
int main(void) { return 0; }
|
|
EOF
|
|
answer='no'
|
|
"$CC" -o "$TEMP_EXE" "$TEMP_C" $CFLAGS $INCLUDE_DIRS >>config.log 2>&1 && answer='yes'
|
|
eval HAVE_$1="$answer"; echo "$ECHOBUF ... $answer"
|
|
rm "$TEMP_C" "$TEMP_EXE" >/dev/null 2>&1
|
|
[ "$tmpval" = 'yes' ] && [ "$answer" = 'no' ] && {
|
|
echo "Build assumed that $2 is defined, but it's not. Exiting ..."
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
check_switch_c() #$1 = HAVE_$1 $2 = switch $3 = critical error message [checked only if non-empty]
|
|
{ ECHOBUF="Checking for availability of switch $2 in $CC"
|
|
# echo -n "Checking for availability of switch $2 in $CC "
|
|
echo "int main(void) { return 0; }" > $TEMP_C
|
|
answer='no'
|
|
"$CC" -o "$TEMP_EXE" "$TEMP_C" $2 >>config.log 2>&1 && answer='yes'
|
|
eval HAVE_$1="$answer"; echo "$ECHOBUF ... $answer"
|
|
rm "$TEMP_C" "$TEMP_EXE" >/dev/null 2>&1
|
|
[ "$answer" = 'no' ] && {
|
|
[ "$3" ] && { echo "$3"; exit 1;}
|
|
}
|
|
}
|
|
|
|
check_switch_cxx() #$1 = HAVE_$1 $2 = switch $3 = critical error message [checked only if non-empty]
|
|
{ ECHOBUF="Checking for availability of switch $2 in $CXX"
|
|
# echo -n "Checking for availability of switch $2 in $CXX"
|
|
echo "int main() { return 0; }" > $TEMP_CXX
|
|
answer='no'
|
|
"$CXX" -o "$TEMP_EXE" "$TEMP_CXX" "$2" >>config.log 2>&1 && answer='yes'
|
|
eval HAVE_$1="$answer"; echo "$ECHOBUF ... $answer"
|
|
rm "$TEMP_CXX" "$TEMP_EXE" >/dev/null 2>&1
|
|
[ "$answer" = 'no' ] && {
|
|
[ "$3" ] && { echo "$3"; exit 1;}
|
|
}
|
|
}
|
|
|
|
create_config_header()
|
|
{ outfile="$1"; shift
|
|
|
|
echo "Creating config header: $outfile"
|
|
name=$(echo "QB_${outfile}__" | tr '.[a-z]' '_[A-Z]')
|
|
{ echo "#ifndef $name"
|
|
echo "#define $name"
|
|
echo ""
|
|
echo "#define PACKAGE_NAME \"$PACKAGE_NAME\""
|
|
|
|
while [ "$1" ]; do
|
|
case $(eval echo \$HAVE_$1) in
|
|
'yes')
|
|
if [ "$(eval echo \$C89_$1)" = "no" ]; then echo "#if __cplusplus || __STDC_VERSION__ >= 199901L"; fi
|
|
echo "#define HAVE_$1 1"
|
|
if [ "$(eval echo \$C89_$1)" = "no" ]; then echo "#endif"; fi
|
|
;;
|
|
'no') echo "/* #undef HAVE_$1 */";;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
while IFS='=' read VAR VAL; do echo "#define $VAR $VAL"; done < "$CONFIG_DEFINES"
|
|
|
|
echo "#endif"
|
|
} > "$outfile"
|
|
}
|
|
|
|
create_config_make()
|
|
{ outfile="$1"; shift
|
|
|
|
echo "Creating make config: $outfile"
|
|
|
|
{ if [ "$USE_LANG_C" = 'yes' ]; then
|
|
echo "CC = $CC"
|
|
echo "CFLAGS = $CFLAGS"
|
|
fi
|
|
if [ "$USE_LANG_CXX" = 'yes' ]; then
|
|
echo "CXX = $CXX"
|
|
echo "CXXFLAGS = $CXXFLAGS"
|
|
fi
|
|
echo "WINDRES = $WINDRES"
|
|
echo "ASFLAGS = $ASFLAGS"
|
|
echo "LDFLAGS = $LDFLAGS"
|
|
echo "INCLUDE_DIRS = $INCLUDE_DIRS"
|
|
echo "LIBRARY_DIRS = $LIBRARY_DIRS"
|
|
echo "PACKAGE_NAME = $PACKAGE_NAME"
|
|
echo "PREFIX = $PREFIX"
|
|
|
|
while [ "$1" ]; do
|
|
case $(eval echo \$HAVE_$1) in
|
|
'yes')
|
|
if [ "$(eval echo \$C89_$1)" = "no" ]; then echo "ifneq (\$(C89_BUILD),1)"; fi
|
|
echo "HAVE_$1 = 1"
|
|
if [ "$(eval echo \$C89_$1)" = "no" ]; then echo "endif"; fi
|
|
;;
|
|
'no') echo "HAVE_$1 = 0";;
|
|
esac
|
|
|
|
case "$PKG_CONF_USED" in
|
|
*$1*)
|
|
echo "$1_CFLAGS = $(eval echo \$$1_CFLAGS)"
|
|
echo "$1_LIBS = $(eval echo \$$1_LIBS)"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
while IFS='=' read VAR VAL; do echo "$VAR = $VAL"; done < "$MAKEFILE_DEFINES"
|
|
|
|
} > "$outfile"
|
|
}
|
|
|
|
. qb/config.libs.sh
|
|
|
|
rm "$MAKEFILE_DEFINES" "$CONFIG_DEFINES"
|