#!/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 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) # * generate a config.mak file for use in makefiles # * .... TMPC=scummvm-conf.cpp TMPO=scummvm-conf TMPLOG=config.log # default lib behaviour yes/no/auto _vorbis=auto _mad=auto _alsa=auto # default option behaviour yes/no _build_scumm=yes _build_simon=yes _build_sky=yes # binary names _ranlib=ranlib cc_check() { echo >> "$TMPLOG" cat "$TMPC" >> "$TMPLOG" echo >> "$TMPLOG" echo "$CXX $TMPC -o $TMPO $@" >> "$TMPLOG" rm -f "$TMPO" ( $CXX "$TMPC" -o "$TMPO" "$@" ) >> "$TMPLOG" 2>&1 TMP="$?" echo >> "$TMPLOG" return "$TMP" } echocheck () { echo -n "Checking for $@... " } # # 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 -f 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 -f 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 parm in "$@" ; do if test "$parm" = "--help" || test "$parm" = "-help" || test "$parm" = "-h" ; then cat << EOF Usage: $0 [OPTIONS]... Configuration: -h, --help display this help and exit Optional Features: --disable-scumm don't build the SCUMM engine --disable-simon don't build the simon engine --disable-sky don't build the Beneath a Steel Sky engine Optional Libraries: --disable-alsa disable ALSA midi sound support [autodetect] --disable-vorbis disable Ogg Vorbis support [autodetect] --disable-mad disable libmad (MP3) support [autodetect] EOF exit 0 fi done # for parm in ... for x in $@; do case $x in --disable-scumm) _build_scumm=no ;; --disable-simon) _build_simon=no ;; --disable-sky) _build_sky=no ;; --enable-alsa) _alsa=yes ;; --disable-alsa) _alsa=no ;; --enable-vorbis) _vorbis=yes ;; --disable-vorbis) _vorbis=no ;; --enable-mad) _mad=yes ;; --disable-mad) _mad=no ;; 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 # Engine selection if test "$_build_scumm" = no ; then echo "#define DISABLE_SCUMM" >> config.h else echo "#undef DISABLE_SCUMM" >> config.h fi if test "$_build_simon" = no ; then echo "#define DISABLE_SIMON" >> config.h else echo "#undef DISABLE_SIMON" >> config.h fi if test "$_build_sky" = no ; then echo "#define DISABLE_SKY" >> config.h else echo "#undef DISABLE_SKY" >> config.h fi echo >> config.h # # 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 | OpenBSD | FreeBSD | NetBSD | BSD/OS | SunOS | HP-UX) echo "/* #define UNIX */" >> config.h ;; IRIX) echo "/* #define UNIX */" >> config.h ranlib=ar -r ;; Darwin) echo "/* #define UNIX */" >> config.h echo "#define MACOSX" >> config.h LIBS="$LIBS -framework QuickTime -framework AudioUnit" ;; 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 -f 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 echo >> config.h echo "/* Libs */" >> config.h echocheck "Ogg Vorbis" if test "$_vorbis" = auto ; then _vorbis=no cat > $TMPC << EOF #include int main(void) { vorbis_packet_blocksize(0,0); return 0; } EOF cc_check -lvorbis -logg -lm && _vorbis=yes fi if test "$_vorbis" = yes ; then echo "#define USE_VORBIS" >> config.h LIBS="$LIBS -lvorbisfile -lvorbis" else echo "#undef USE_VORBIS" >> config.h fi echo "$_vorbis" echocheck "MAD" if test "$_mad" = auto ; then _mad=no cat > $TMPC << EOF #include int main(void) {return 0; } EOF cc_check -lmad && _mad=yes fi if test "$_mad" = yes ; then echo "#define USE_MAD" >> config.h LIBS="$LIBS -lmad" else echo "#undef USE_MAD" >> config.h fi echo "$_mad" echocheck "ALSA 0.9" if test "$_alsa" = auto ; then _alsa=no cat > $TMPC << EOF #include int main(void) { return (!(SND_LIB_MAJOR==0 && SND_LIB_MINOR==9)); } EOF cc_check -lasound && _alsa=yes fi if test "$_alsa" = yes ; then echo "#define USE_ALSA" >> config.h LIBS="$LIBS -lasound" else echo "#undef USE_ALSA" >> config.h fi echo "$_alsa" rm -f $TMPC $TMPO $TMPLOG # # End of config.h # echo "" >> config.h echo "#endif /* CONFIG_H */" >> config.h echo "Creating config.mak" cat > config.mak << EOF # -------- Generated by configure ----------- CXX = $CXX LIBS = $LIBS RANLIB = $_ranlib EOF