#!/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 <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 <tmp_find_type_with_size.cpp #include 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 <tmp_endianess_check.cpp #include #include 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