mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-28 02:30:35 +00:00
b67bb87c8d
This allows a user to use --datarootdir=PATH to configure the share directory used for pixmaps, desktop files, man pages and assets. By default this will be '/usr/local/share'. Assets and man page install paths can still be configured with: --with-man_dir=PATH and --with-assets_dir=PATH Some operating systems like Haiku use unconventional install paths and this should allow them to configure their build correctly.
269 lines
7.5 KiB
Bash
269 lines
7.5 KiB
Bash
MAKEFILE_DEFINES=''
|
|
CONFIG_DEFINES=''
|
|
|
|
PREFIX="${PREFIX:-/usr/local}"
|
|
SHARE_DIR="${SHARE_DIR:-${PREFIX}/share}"
|
|
|
|
add_define() # $1 = MAKEFILE or CONFIG $2 = define $3 = value
|
|
{ eval "${1}_DEFINES=\"\${${1}_DEFINES} $2=$3\""; }
|
|
|
|
add_dirs() # $1 = INCLUDE or LIBRARY $@ = include or library paths
|
|
{ ADD="$1"; LINK="${1%"${1#?}"}"; shift
|
|
while [ "$1" ]; do
|
|
eval "${ADD}_DIRS=\"\${${ADD}_DIRS} -${LINK}${1}\""
|
|
shift
|
|
done
|
|
eval "${ADD}_DIRS=\"\${${ADD}_DIRS# }\""
|
|
}
|
|
|
|
check_compiler() # $1 = language $2 = function in lib
|
|
{ if [ "$1" = cxx ]; then
|
|
COMPILER="$CXX"
|
|
TEMP_CODE="$TEMP_CXX"
|
|
TEST_C="extern \"C\" { void $2(void); } int main() { $2(); }"
|
|
else
|
|
COMPILER="$CC"
|
|
TEMP_CODE="$TEMP_C"
|
|
TEST_C="void $2(void); int main(void) { $2(); return 0; }"
|
|
fi
|
|
}
|
|
|
|
check_lib() # $1 = language $2 = HAVE_$2 $3 = lib $4 = function in lib $5 = extralibs $6 = headers $7 = critical error message [checked only if non-empty]
|
|
{ tmpval="$(eval "printf %s \"\$HAVE_$2\"")"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
|
|
check_compiler "$1" "$4"
|
|
|
|
if [ "$4" ]; then
|
|
ECHOBUF="Checking function $4 in ${3% }"
|
|
if [ "$6" ]; then
|
|
printf %s\\n "$6" "int main(void) { void *p = (void*)$4; return 0; }" > "$TEMP_CODE"
|
|
else
|
|
printf %s\\n "$TEST_C" > "$TEMP_CODE"
|
|
fi
|
|
else
|
|
ECHOBUF="Checking existence of ${3% }"
|
|
printf %s\\n 'int main(void) { return 0; }' > "$TEMP_CODE"
|
|
fi
|
|
|
|
val="$2"
|
|
lib="$3"
|
|
error="${7:-}"
|
|
answer='no'
|
|
eval "set -- $INCLUDE_DIRS $LIBRARY_DIRS $5 $CFLAGS $LDFLAGS $3"
|
|
"$COMPILER" -o "$TEMP_EXE" "$TEMP_CODE" "$@" >>config.log 2>&1 && answer='yes'
|
|
eval "HAVE_$val=\"$answer\""
|
|
printf %s\\n "$ECHOBUF ... $answer"
|
|
rm -f -- "$TEMP_CODE" "$TEMP_EXE"
|
|
|
|
if [ "$answer" = 'no' ]; then
|
|
[ "$error" ] && die 1 "$error"
|
|
[ "$tmpval" = 'yes' ] && {
|
|
die 1 "Forced to build with library $lib, but cannot locate. Exiting ..."
|
|
}
|
|
else
|
|
eval "${val}_LIBS=\"$lib\""
|
|
PKG_CONF_USED="$PKG_CONF_USED $val"
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
check_pkgconf() # $1 = HAVE_$1 $2 = package $3 = version $4 = critical error message [checked only if non-empty]
|
|
{ tmpval="$(eval "printf %s \"\$HAVE_$1\"")"
|
|
eval "TMP_$1=\$tmpval"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
|
|
ECHOBUF="Checking presence of package $2"
|
|
[ "$3" ] && ECHOBUF="$ECHOBUF >= $3"
|
|
|
|
[ "$PKG_CONF_PATH" = "none" ] && {
|
|
eval "HAVE_$1=no"
|
|
printf %s\\n "$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\""
|
|
printf %s\\n "$ECHOBUF ... $version"
|
|
if [ "$answer" = 'no' ]; then
|
|
[ "$4" ] && die 1 "$4"
|
|
[ "$tmpval" = 'yes' ] && \
|
|
die 1 "Forced to build with package $2, but cannot locate. Exiting ..."
|
|
else
|
|
PKG_CONF_USED="$PKG_CONF_USED $1"
|
|
fi
|
|
}
|
|
|
|
check_header() #$1 = HAVE_$1 $2..$5 = header files
|
|
{ tmpval="$(eval "printf %s \"\$HAVE_$1\"")"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
CHECKHEADER="$2"
|
|
printf %s\\n "#include <$2>" > "$TEMP_C"
|
|
[ "$3" != '' ] && CHECKHEADER="$3" && printf %s\\n "#include <$3>" >> "$TEMP_C"
|
|
[ "$4" != '' ] && CHECKHEADER="$4" && printf %s\\n "#include <$4>" >> "$TEMP_C"
|
|
[ "$5" != '' ] && CHECKHEADER="$5" && printf %s\\n "#include <$5>" >> "$TEMP_C"
|
|
printf %s\\n "int main(void) { return 0; }" >> "$TEMP_C"
|
|
answer='no'
|
|
val="$1"
|
|
header="$2"
|
|
eval "set -- $INCLUDE_DIRS"
|
|
"$CC" -o "$TEMP_EXE" "$TEMP_C" "$@" >>config.log 2>&1 && answer='yes'
|
|
eval "HAVE_$val=\"$answer\""
|
|
printf %s\\n "Checking presence of header file $CHECKHEADER ... $answer"
|
|
rm -f -- "$TEMP_C" "$TEMP_EXE"
|
|
[ "$tmpval" = 'yes' ] && [ "$answer" = 'no' ] && \
|
|
die 1 "Build assumed that $header exists, but cannot locate. Exiting ..."
|
|
}
|
|
|
|
check_macro() #$1 = HAVE_$1 $2 = macro name
|
|
{ tmpval="$(eval "printf %s \"\$HAVE_$1\"")"
|
|
[ "$tmpval" = 'no' ] && return 0
|
|
ECHOBUF="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'
|
|
val="$1"
|
|
macro="$2"
|
|
eval "set -- $CFLAGS $INCLUDE_DIRS"
|
|
"$CC" -o "$TEMP_EXE" "$TEMP_C" "$@" >>config.log 2>&1 && answer='yes'
|
|
eval "HAVE_$val=\"$answer\""
|
|
printf %s\\n "$ECHOBUF ... $answer"
|
|
rm -f -- "$TEMP_C" "$TEMP_EXE"
|
|
[ "$tmpval" = 'yes' ] && [ "$answer" = 'no' ] && \
|
|
die 1 "Build assumed that $macro is defined, but it's not. Exiting ..."
|
|
}
|
|
|
|
check_switch() # $1 = language $2 = HAVE_$2 $3 = switch $4 = critical error message [checked only if non-empty]
|
|
{ check_compiler "$1" ''
|
|
|
|
ECHOBUF="Checking for availability of switch $3 in $COMPILER"
|
|
printf %s\\n 'int main(void) { return 0; }' > "$TEMP_CODE"
|
|
answer='no'
|
|
"$COMPILER" -o "$TEMP_EXE" "$TEMP_CODE" "$3" >>config.log 2>&1 && answer='yes'
|
|
eval "HAVE_$2=\"$answer\""
|
|
printf %s\\n "$ECHOBUF ... $answer"
|
|
rm -f -- "$TEMP_CODE" "$TEMP_EXE"
|
|
[ "$answer" = 'no' ] && {
|
|
[ "$4" ] && die 1 "$4"
|
|
}
|
|
}
|
|
|
|
check_val() # $1 = language $2 = HAVE_$2 $3 = lib $4 = include directory [checked only if non-empty]
|
|
{ tmpval="$(eval "printf %s \"\$HAVE_$2\"")"
|
|
oldval="$(eval "printf %s \"\$TMP_$2\"")"
|
|
if [ "$tmpval" = 'no' ] && [ "$oldval" != 'no' ]; then
|
|
eval "HAVE_$2=auto"
|
|
check_lib "$1" "$2" "$3"
|
|
|
|
if [ "${4:-}" ] && [ "$answer" = 'yes' ]; then
|
|
val="$2"
|
|
include="$4"
|
|
eval "set -- $INCLUDES"
|
|
for dir do
|
|
[ -d "/$dir/$include" ] && { eval "${val}_CFLAGS=\"-I/$dir/$include\""; break; }
|
|
done
|
|
[ -z "$(eval "printf %s \"\${${val}_CFLAGS}\"")" ] && eval "HAVE_$val=no"
|
|
fi
|
|
|
|
if [ "$answer" = 'no' ] && [ "$oldval" = 'yes' ]; then
|
|
die 1 "Forced to build with library $lib, but cannot locate. Exiting ..."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
create_config_header()
|
|
{ outfile="$1"; shift
|
|
|
|
printf %s\\n "Creating config header: $outfile"
|
|
name="$(printf %s "QB_${outfile}__" | tr '.[a-z]' '_[A-Z]')"
|
|
|
|
{ printf %s\\n "#ifndef $name" "#define $name" '' \
|
|
"#define PACKAGE_NAME \"$PACKAGE_NAME\""
|
|
|
|
while [ "$1" ]; do
|
|
case "$(eval "printf %s \"\$HAVE_$1\"")" in
|
|
'yes')
|
|
if [ "$(eval "printf %s \"\$C89_$1\"")" = 'no' ]; then
|
|
printf %s\\n '#if __cplusplus || __STDC_VERSION__ >= 199901L' \
|
|
"#define HAVE_$1 1" '#endif'
|
|
else
|
|
printf %s\\n "#define HAVE_$1 1"
|
|
fi
|
|
;;
|
|
'no') printf %s\\n "/* #undef HAVE_$1 */";;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
eval "set -- $CONFIG_DEFINES"
|
|
for VAR do
|
|
printf %s\\n "#define ${VAR%%=*} ${VAR#*=}"
|
|
done
|
|
|
|
printf %s\\n '#endif'
|
|
} > "$outfile"
|
|
}
|
|
|
|
create_config_make()
|
|
{ outfile="$1"; shift
|
|
|
|
printf %s\\n "Creating make config: $outfile"
|
|
|
|
{ [ "$USE_LANG_C" = 'yes' ] && printf %s\\n "CC = $CC" "CFLAGS = $CFLAGS"
|
|
[ "$USE_LANG_CXX" = 'yes' ] && printf %s\\n "CXX = $CXX" "CXXFLAGS = $CXXFLAGS"
|
|
|
|
printf %s\\n "WINDRES = $WINDRES" \
|
|
"ASFLAGS = $ASFLAGS" \
|
|
"LDFLAGS = $LDFLAGS" \
|
|
"INCLUDE_DIRS = $INCLUDE_DIRS" \
|
|
"LIBRARY_DIRS = $LIBRARY_DIRS" \
|
|
"PACKAGE_NAME = $PACKAGE_NAME" \
|
|
"BUILD = $BUILD" \
|
|
"PREFIX = $PREFIX"
|
|
|
|
while [ "$1" ]; do
|
|
case "$(eval "printf %s \"\$HAVE_$1\"")" in
|
|
'yes')
|
|
if [ "$(eval "printf %s \"\$C89_$1\"")" = 'no' ]; then
|
|
printf %s\\n "ifneq (\$(C89_BUILD),1)" \
|
|
"HAVE_$1 = 1" 'endif'
|
|
else
|
|
printf %s\\n "HAVE_$1 = 1"
|
|
fi
|
|
;;
|
|
'no') printf %s\\n "HAVE_$1 = 0";;
|
|
esac
|
|
|
|
case "$PKG_CONF_USED" in
|
|
*$1*)
|
|
FLAG="$(eval "printf %s \"\$$1_CFLAGS\"")"
|
|
LIBS="$(eval "printf %s \"\$$1_LIBS\"")"
|
|
[ "${FLAG}" ] && printf %s\\n "$1_CFLAGS = ${FLAG%"${FLAG##*[! ]}"}"
|
|
[ "${LIBS}" ] && printf %s\\n "$1_LIBS = ${LIBS%"${LIBS##*[! ]}"}"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
eval "set -- $MAKEFILE_DEFINES"
|
|
for VAR do
|
|
printf %s\\n "${VAR%%=*} = ${VAR#*=}"
|
|
done
|
|
|
|
} > "$outfile"
|
|
}
|
|
|
|
. qb/config.libs.sh
|