mirror of
https://github.com/libretro/scummvm.git
synced 2024-11-30 12:50:51 +00:00
fa93fe294f
svn-id: r8272
474 lines
9.6 KiB
Bash
Executable File
474 lines
9.6 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 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
|
|
CFLAGS=""
|
|
|
|
# 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
|
|
_need_memalign=no
|
|
# more defaults
|
|
_backend=sdl
|
|
_ranlib=ranlib
|
|
_sdlconfig=sdl-config
|
|
|
|
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 <<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 -f 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 -f tmp_find_type_with_size tmp_find_type_with_size.cpp
|
|
echo $datatype
|
|
}
|
|
|
|
#
|
|
# Greet user
|
|
#
|
|
|
|
echo "Running ScummVM configure..."
|
|
|
|
|
|
#
|
|
# 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
|
|
--backend=BACKEND backend to build (sdl, x11, morphos, dc, gp32) [sdl]
|
|
|
|
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 ac_option in $@; do
|
|
case "$ac_option" 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 ;;
|
|
|
|
--backend=*)
|
|
_backend=`echo $ac_option | cut -d '=' -f 2`
|
|
;;
|
|
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 the compiler version
|
|
|
|
echocheck "compiler version"
|
|
|
|
cxx_name=`( $cc -v ) 2>&1 | tail -1 | cut -d ' ' -f 1`
|
|
cxx_version=`( $CXX -dumpversion ) 2>&1`
|
|
if test "$?" -gt 0; then
|
|
cxx_version="not found"
|
|
fi
|
|
|
|
case $cxx_version in
|
|
2.95.[2-9]|2.95.[2-9][-.]*|3.[0-9]|3.[0-9].[0-9])
|
|
_cxx_major=`echo $cxx_version | cut -d '.' -f 1`
|
|
_cxx_minor=`echo $cxx_version | cut -d '.' -f 2`
|
|
cxx_version="$cxx_version, ok"
|
|
cxx_verc_fail=no
|
|
;;
|
|
'not found')
|
|
cxx_verc_fail=yes
|
|
;;
|
|
*)
|
|
cxx_version="$cxx_version, bad"
|
|
cxx_verc_fail=yes
|
|
;;
|
|
esac
|
|
|
|
echo "$cxx_version"
|
|
|
|
if test "$cxx_verc_fail" = yes ; then
|
|
echo
|
|
echo "The version of your compiler is not supported at this time"
|
|
echo "Please ensure you are using GCC 2.95.x or GCC 3.x"
|
|
exit 1
|
|
fi
|
|
|
|
#
|
|
# Do CFLAGS now we know the compiler version
|
|
#
|
|
|
|
if test "$_cxx_major" -ge "3" ; then
|
|
CFLAGS="$CFLAGS -ansi -W -Wno-unused-parameter"
|
|
fi;
|
|
|
|
#
|
|
# Engine selection
|
|
#
|
|
if test "$_build_scumm" = no ; then
|
|
_def_scumm='#define DISABLE_SCUMM'
|
|
else
|
|
_def_scumm='#undef DISABLE_SCUMM'
|
|
fi
|
|
|
|
if test "$_build_simon" = no ; then
|
|
_def_simon='#define DISABLE_SIMON'
|
|
else
|
|
_def_simon='#undef DISABLE_SIMON'
|
|
fi
|
|
|
|
if test "$_build_sky" = no ; then
|
|
_def_sky='#define DISABLE_SKY'
|
|
else
|
|
_def_sky='#undef DISABLE_SKY'
|
|
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 | OpenBSD | FreeBSD | NetBSD | BSD/OS | SunOS | HP-UX)
|
|
_def_unix='/* #define UNIX */'
|
|
;;
|
|
IRIX)
|
|
_def_unix='/* #define UNIX */'
|
|
ranlib=ar -r
|
|
;;
|
|
Darwin)
|
|
_def_unix='/* #define UNIX */'
|
|
_def_macosx='#define MACOSX'
|
|
LIBS="$LIBS -framework QuickTime -framework AudioUnit"
|
|
;;
|
|
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)
|
|
_def_endianess='#define SCUMM_BIG_ENDIAN'
|
|
;;
|
|
little)
|
|
_def_endianess='#define SCUMM_LITTLE_ENDIAN'
|
|
;;
|
|
*)
|
|
exit 1
|
|
;;
|
|
esac
|
|
rm -f tmp_endianess_check tmp_endianess_check.cpp
|
|
|
|
#
|
|
# Check whether memory alignment is required
|
|
#
|
|
echo -n "Alignment required (don't worry if this shows a 'Bus error')... "
|
|
cat > $TMPC << EOF
|
|
int main(int argc, char **argv)
|
|
{
|
|
int i;
|
|
unsigned char buf[20];
|
|
for (i = 0; i < 20; i++)
|
|
buf[i] = 0xE7;
|
|
for (i = 0; i < 16; i++) {
|
|
if (*(int *)(&buf[i]) != 0xE7E7E7E7)
|
|
return 1;
|
|
*(int *)(&buf[i]) = 0xE7E7E7E7;
|
|
}
|
|
return 0;
|
|
}
|
|
EOF
|
|
_need_memalign=yes
|
|
# TODO: Hide the "Bus error" message, if possible...
|
|
trap true BUS
|
|
cc_check && ./$TMPO && _need_memalign=no
|
|
if test "$_need_memalign" = yes ; then
|
|
_def_align='#define SCUMM_NEED_ALIGNMENT'
|
|
else
|
|
_def_align='#undef SCUMM_NEED_ALIGNMENT'
|
|
fi
|
|
echo "$_need_memalign"
|
|
|
|
#
|
|
# 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"
|
|
|
|
|
|
echocheck "Ogg Vorbis"
|
|
if test "$_vorbis" = auto ; then
|
|
_vorbis=no
|
|
cat > $TMPC << EOF
|
|
#include <vorbis/codec.h>
|
|
int main(void) { vorbis_packet_blocksize(0,0); return 0; }
|
|
EOF
|
|
cc_check -lvorbis -logg -lm && _vorbis=yes
|
|
fi
|
|
if test "$_vorbis" = yes ; then
|
|
_def_vorbis='#define USE_VORBIS'
|
|
LIBS="$LIBS -lvorbisfile -lvorbis -logg"
|
|
else
|
|
_def_vorbis='#undef USE_VORBIS'
|
|
fi
|
|
echo "$_vorbis"
|
|
|
|
echocheck "MAD"
|
|
if test "$_mad" = auto ; then
|
|
_mad=no
|
|
cat > $TMPC << EOF
|
|
#include <mad.h>
|
|
int main(void) {return 0; }
|
|
EOF
|
|
cc_check -lmad && _mad=yes
|
|
fi
|
|
if test "$_mad" = yes ; then
|
|
_def_mad='#define USE_MAD'
|
|
LIBS="$LIBS -lmad"
|
|
else
|
|
_def_mad='#undef USE_MAD'
|
|
fi
|
|
echo "$_mad"
|
|
|
|
echocheck "ALSA 0.9"
|
|
if test "$_alsa" = auto ; then
|
|
_alsa=no
|
|
cat > $TMPC << EOF
|
|
#include <alsa/asoundlib.h>
|
|
int main(void) { return (!(SND_LIB_MAJOR==0 && SND_LIB_MINOR==9)); }
|
|
EOF
|
|
cc_check -lasound && _alsa=yes
|
|
fi
|
|
if test "$_alsa" = yes ; then
|
|
_def_alsa='#define USE_ALSA'
|
|
LIBS="$LIBS -lasound"
|
|
else
|
|
_def_alsa='#undef USE_ALSA'
|
|
fi
|
|
echo "$_alsa"
|
|
|
|
rm -f $TMPC $TMPO $TMPLOG
|
|
|
|
|
|
echo
|
|
echo "Engines:"
|
|
if test "$_build_scumm" = yes ; then
|
|
echo " SCUMM"
|
|
fi
|
|
if test "$_build_simon" = yes ; then
|
|
echo " Simon the Sorcerer"
|
|
fi
|
|
if test "$_build_sky" = yes ; then
|
|
echo " Beneath a Steel Sky"
|
|
fi
|
|
echo
|
|
|
|
echo -n "Backend... "
|
|
echo "$_backend"
|
|
echo
|
|
|
|
echo "Creating config.h"
|
|
cat > config.h << EOF
|
|
/* This file is automatically generated by configure */
|
|
/* DO NOT EDIT MANUALLY */
|
|
|
|
#ifndef CONFIG_H
|
|
#define CONFIG_H
|
|
|
|
$_def_scumm
|
|
$_def_simon
|
|
$_def_sky
|
|
|
|
$_def_unix
|
|
$_def_macosx
|
|
$_def_endianess
|
|
$_def_align
|
|
|
|
/* Data types */
|
|
typedef unsigned $type_1_byte byte;
|
|
typedef unsigned int uint;
|
|
typedef unsigned $type_1_byte uint8;
|
|
typedef unsigned $type_2_byte uint16;
|
|
typedef unsigned $type_4_byte uint32;
|
|
typedef signed $type_1_byte int8;
|
|
typedef signed $type_2_byte int16;
|
|
typedef signed $type_4_byte int32;
|
|
|
|
/* Libs */
|
|
$_def_vorbis
|
|
$_def_mad
|
|
$_def_alsa
|
|
|
|
#endif /* CONFIG_H */
|
|
EOF
|
|
|
|
echo "Creating config.mak"
|
|
cat > config.mak << EOF
|
|
# -------- Generated by configure -----------
|
|
|
|
CXX := $CXX
|
|
OPTFLAGS := $CFLAGS
|
|
LIBS := $LIBS
|
|
RANLIB := $_ranlib
|
|
BACKEND := $_backend
|
|
|
|
EOF
|