https://github.com/scummvm/scummvm
Raw File
Tip revision: a089a3e92bd6d74b89dbfdd63e1546806eb75d96 authored by Travis Howell on 06 August 2003, 13:53:25 UTC
Tip revision: a089a3e
configure
#!/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
# * ....

# TODO: We should really use mktemp(1) to determine a random tmp file name.
# However, that tool might not be available everywhere.
TMPO=/tmp/scummvm-conf
TMPC=${TMPO}.cpp
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 sdl-config
#
# TODO: small bit of code to test sdl useability
find_sdlconfig()
{
printf "Looking for sdl-config... "
sdlconfigs="$_sdlconfig sdl-config sdl11-config sdl12-config"
for sdlconfig in $sdlconfigs; do
  if test "-e $sdlconfig" ; then
    _sdlconfig=$sdlconfig
    echo $_sdlconfig
    break
  else
    echo "none found!"
    exit 1
  fi
done
}

#
# 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..."
echo "Configure run on" `date` > $TMPLOG

#
# Check any parameters we received
#
# TODO:
# * Change --disable-mad / --enable-mad to the way it's done in autoconf:
#  That is, --without-mad / --with-mad=/prefix/to/mad. Useful for people
#  who have Mad/Vorbis/ALSA installed in a non-standard locations.
#

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, sdlgl, 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
		;;
	# whacky beos version strings
	2.9-beos-991026*|2.9-beos-000224*)	
		_cxx_major=2
		_cxx_minor=95
		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)
		DEFINES="$DEFINES -DUNIX"
		;;
	IRIX)
		DEFINES="$DEFINES -DUNIX"
		ranlib=ar -r
		;;
	Darwin)
		DEFINES="$DEFINES -DUNIX -DMACOSX"
		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... "
cat > $TMPC << EOF
#include <stdlib.h>
#include <signal.h>
int main(int argc, char **argv)
{
	unsigned char test[8] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 };
	signal(SIGBUS, exit);
	signal(SIGABRT, exit);
	signal(SIGSEGV, exit);
	if (*((unsigned int *)(test + 1)) != 0x55443322 && *((unsigned int *)(test + 1)) != 0x22334455) {
		return 1;
	}
	return 0;
}
EOF
_need_memalign=yes
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


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"

#
# Backend related stuff
#
case $_backend in
  sdl)
    find_sdlconfig
    INCLUDES="$INCLUDES `$_sdlconfig --cflags`"
    LIBS="$LIBS `$_sdlconfig --libs`"
    OBJS="$OBJS backends/sdl/sdl-common.o backends/sdl/sdl.o"
    MODULES="$MODULES backends/sdl"
    ;;
  sdlgl)
    find_sdlconfig
    INCLUDES="$INCLUDES `$_sdlconfig --cflags`"
    LIBS="$LIBS `$_sdlconfig --libs` -lGL"
    OBJS="$OBJS backends/sdl/sdl-common.o backends/sdl/sdl_gl.o"
    MODULES="$MODULES backends/sdl"
    ;;
  x11)
    INCLUDES="$INCLUDES -I/usr/X11R6/include"
    LIBS="$LIBS -lpthread -lXext -lX11"
    LDFLAGS="$LDFLAGS -L/usr/X11R6/lib -L/usr/local/lib"
    OBJS="$OBJS backends/x11/x11.o"
    DEFINES="$DEFINES -DX11_BACKEND"
    MODULES="$MODULES backends/x11"
    ;;
  *)
    echo "support for $_backend backend not implemented in configure script yet"
    exit 1
  ;;
esac

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_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

MODULES += $MODULES
INCLUDES += $INCLUDES
OBJS += $OBJS
DEFINES += $DEFINES
LDFLAGS += $LDFLAGS
EOF
back to top