mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-27 04:07:05 +00:00
166ea5bcee
svn-id: r6284
218 lines
4.8 KiB
Bash
Executable File
218 lines
4.8 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# THIS SCRIPT DOESN'T DO ANYTHING YET!
|
|
#
|
|
# Some things this script could/should do when finished
|
|
#
|
|
# * detect the compiler name (g++/c++/...)
|
|
# * detect whether its a GNU compiler or not (for compiler settings)
|
|
# * detect the host platform and base settings on this:
|
|
# - #defines like -DUNIX and -DMACOSX
|
|
# - required libs like -lmingw32
|
|
# * command line options to...
|
|
# - override the host settings (for cross compiles
|
|
# - select the desired backend (sdl, x11, ...)
|
|
# - whether mad should be used (--enabled-mad) -> set LIBS/DEFINES
|
|
# - whether to do a debug build (with -g) or an optimized build (-O3 etc.)
|
|
# * detect whether the chosen backend is available (e.g. call sdl-config)
|
|
# * detect whether mad/ALSA/vorbis/... are available
|
|
# * ....
|
|
|
|
|
|
#
|
|
# Check whether the given command is a working C++ compiler
|
|
#
|
|
test_compiler ()
|
|
{
|
|
cat <<EOF >tmp_cxx_compiler.cpp
|
|
class Foo {
|
|
int a;
|
|
};
|
|
int main(int argc, char **argv)
|
|
{
|
|
Foo *a = new Foo();
|
|
delete a;
|
|
return 0;
|
|
}
|
|
EOF
|
|
eval "$1 -o tmp_cxx_compiler tmp_cxx_compiler.cpp 2> /dev/null" && eval "./tmp_cxx_compiler 2> /dev/null" && rm tmp_cxx_compiler tmp_cxx_compiler.cpp
|
|
}
|
|
|
|
#
|
|
# Determine a data type with the given length
|
|
#
|
|
find_type_with_size ()
|
|
{
|
|
cat <<EOF >tmp_find_type_with_size.cpp
|
|
#include <stdio.h>
|
|
int main(int argc, char **argv)
|
|
{
|
|
int size = argv[1][0] - '0';
|
|
if (size == sizeof(int))
|
|
printf("int\n");
|
|
else if (size == sizeof(short))
|
|
printf("short\n");
|
|
else if (size == sizeof(char))
|
|
printf("char\n");
|
|
else if (size == sizeof(long))
|
|
printf("long\n");
|
|
else {
|
|
printf("unknown\n");
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
EOF
|
|
if eval "$CXX -o tmp_find_type_with_size tmp_find_type_with_size.cpp"; then
|
|
datatype=`./tmp_find_type_with_size $1`
|
|
if test "$datatype" = "unknown"; then
|
|
echo "couldn't find data type with $1 bytes"
|
|
exit 1
|
|
fi
|
|
fi
|
|
rm tmp_find_type_with_size tmp_find_type_with_size.cpp
|
|
echo $datatype
|
|
}
|
|
|
|
#
|
|
# Greet user
|
|
#
|
|
|
|
echo "Running ScummVM configure..."
|
|
echo "/* This file is automatically generated by configure */" > config.h
|
|
echo "/* DO NOT EDIT MANUALLY */" >> config.h
|
|
echo "" >> config.h
|
|
echo "#ifndef CONFIG_H" >> config.h
|
|
echo "#define CONFIG_H" >> config.h
|
|
echo "" >> config.h
|
|
|
|
|
|
#
|
|
# Check any parameters we received
|
|
#
|
|
# TOOD: allow for multi value params, e.g. --target=dreamcast or --backend=morphos
|
|
#
|
|
|
|
for x in $@; do
|
|
case x$x in
|
|
x--with-alsa)
|
|
echo "#define USE_ALSA" >> config.h
|
|
LIBS="$LIBS -lasound"
|
|
;;
|
|
x--with-vorbis)
|
|
echo "#define USE_VORBIS" >> config.h
|
|
LIBS="$LIBS -lvorbisfile -lvorbis"
|
|
;;
|
|
x--with-mad)
|
|
echo "#define USE_MAD" >> config.h
|
|
LIBS="$LIBS -lmad"
|
|
;;
|
|
esac;
|
|
done;
|
|
|
|
#
|
|
# Determine the C++ compiler
|
|
#
|
|
printf "Looking for C++ compiler... "
|
|
compilers="$CXX g++ c++"
|
|
CXX=
|
|
for compiler in $compilers; do
|
|
if test_compiler $compiler; then
|
|
CXX=$compiler
|
|
echo $CXX
|
|
break
|
|
fi
|
|
done
|
|
if test -z $CXX; then
|
|
echo "none found!"
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# Determine hosttype
|
|
#
|
|
# TODO - also add an command line option to override this?!?
|
|
# TODO - recognize more systems, e.g. *BSD
|
|
printf "Checking hosttype... "
|
|
hosttype=`uname -s`
|
|
echo $hosttype
|
|
case $hosttype in
|
|
Linux)
|
|
echo "#define UNIX" >> config.h
|
|
;;
|
|
Darwin)
|
|
echo "#define UNIX" >> config.h
|
|
echo "#define MACOSX" >> config.h
|
|
;;
|
|
esac
|
|
|
|
#
|
|
# Check for endianess
|
|
#
|
|
printf "Checking endianess... "
|
|
cat <<EOF >tmp_endianess_check.cpp
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
int main(int argc, char **argv)
|
|
{
|
|
unsigned int data = 0x01234567;
|
|
char *ptr = (char *)&data;
|
|
if (ptr[0] == 0x01 && ptr[1] == 0x23 && ptr[2] == 0x45 && ptr[3] == 0x67)
|
|
printf("big\n");
|
|
else if (ptr[3] == 0x01 && ptr[2] == 0x23 && ptr[1] == 0x45 && ptr[0] == 0x67)
|
|
printf("little\n");
|
|
else
|
|
printf("unknown\n");
|
|
return 0;
|
|
}
|
|
EOF
|
|
$CXX -o tmp_endianess_check tmp_endianess_check.cpp
|
|
endianess=`./tmp_endianess_check`
|
|
echo $endianess;
|
|
case $endianess in
|
|
big)
|
|
echo "#define SCUMM_BIG_ENDIAN" >> config.h
|
|
;;
|
|
little)
|
|
echo "#define SCUMM_LITTLE_ENDIAN" >> config.h
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|
|
rm tmp_endianess_check tmp_endianess_check.cpp
|
|
|
|
#
|
|
# Determine data type sizes
|
|
# TODO: proper error checking
|
|
#
|
|
printf "Type with 1 byte... "
|
|
type_1_byte=`find_type_with_size 1`
|
|
echo "$type_1_byte"
|
|
|
|
printf "Type with 2 bytes... "
|
|
type_2_byte=`find_type_with_size 2`
|
|
echo "$type_2_byte"
|
|
|
|
printf "Type with 4 bytes... "
|
|
type_4_byte=`find_type_with_size 4`
|
|
echo "$type_4_byte"
|
|
|
|
echo >> config.h
|
|
echo "/* Data types */" >> config.h
|
|
echo "typedef unsigned $type_1_byte byte;" >> config.h
|
|
echo "typedef unsigned int uint;" >> config.h
|
|
echo "typedef unsigned $type_1_byte uint8;" >> config.h
|
|
echo "typedef unsigned $type_2_byte uint16;" >> config.h
|
|
echo "typedef unsigned $type_4_byte uint32;" >> config.h
|
|
echo "typedef signed $type_1_byte int8;" >> config.h
|
|
echo "typedef signed $type_2_byte int16;" >> config.h
|
|
echo "typedef signed $type_4_byte int32;" >> config.h
|
|
|
|
#
|
|
# End of config.h
|
|
#
|
|
echo "" >> config.h
|
|
echo "#endif /* CONFIG_H */" >> config.h
|