aboutsummaryrefslogblamecommitdiffstats
path: root/Game/Code/configure.ac
blob: 2c4e37f1a25e70906c9c76f2cf772c29e8d7732f (plain) (tree)


















































































































































































































































































































                                                                                                                                                                
#
# UltraStar-DX configure.in script
#
# by UltraStar Deluxe Team
#
# Call "aclocal -I m4" to create the aclocal.m4 file.
# Process this file with autoconf to produce a configure script.
#

# Require autoconf >= 2.61
AC_PREREQ(2.61)

# Init autoconf
AC_INIT([UltraStar Deluxe], [1.1], [TODO: send bugreport BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR(UltraStar.lpr)
AC_CONFIG_MACRO_DIR(m4)

# show features and packages in one list
AC_PRESERVE_HELP_ORDER

# -----------------------------------------
# define switches
# -----------------------------------------

# print library option header
AC_ARG_WITH([cfg-dummy1], [
External Libraries:])

# add lazarus option
AC_ARG_WITH([lazarus], 
    [AS_HELP_STRING([--with-lazarus=DIR],
      [Directory of lazarus directory @<:@LAZARUSDIR@:>@])],
    [with_lazarus=$withval], [with_lazarus="yes"])
if [[ $with_lazarus = "no" ]] ; then
    AC_MSG_ERROR("Lazarus is required. It is impossible to build without it.");
fi

# add portaudio option
AC_ARG_WITH([portaudio], 
    [AS_HELP_STRING([--with-portaudio=DIR],
      [Directory of portaudio library @<:@PORTAUDIODIR@:>@])],
    [with_portaudio=$withval], [with_portaudio="yes"])

# add portmixer option
AC_ARG_WITH([portmixer],
    [AS_HELP_STRING([--with-portmixer@<:@=DIR@:>@],
      [Enable portmixer audio-mixer support @<:@default=check@:>@])],
    [with_portmixer=$withval], [with_portmixer="check"])

# add projectM option
AC_ARG_WITH([projectM], 
    [AS_HELP_STRING([--with-projectM@<:@=DIR@:>@],
      [Enable projectM visualization support @<:@default=check@:>@])],
    [with_projectM=$withval], [with_projectM="check"])

# AC_ARG_ENABLE(foobar,
#         [  --enable-foobar         Dummy option],
#	    enable_foobar=$enableval, enable_foobar="no")


# -----------------------------------------
# macro declarations
# -----------------------------------------

# AC_SPLIT_VERSION(VARIABLE_PREFIX, VERSION)
# Splits version number ("major.minor.release") into its components.
# Sets
#   [$VARIABLE_PREFIX]_VERSION_MAJOR
#   [$VARIABLE_PREFIX]_VERSION_MINOR
#   [$VARIABLE_PREFIX]_VERSION_RELEASE
# This function calls
#   AC_SUBST([$VARIABLE_PREFIX]_VERSION_type] for each type
AC_DEFUN([AC_SPLIT_VERSION],
[
    # replace "." and "-" with " " and ignore trailing tokens.
    # 1.23.4-r2 will be splitted to [maj=1, min=23, rel=4].
    # In addition we delete every character which is not 0-9.
    # 1.3a4-r32 will be [maj=1, min=34, rel=32].
    # 
    # Note: We use a here-document (<<< here-strings not POSIX compatible)
    # Do NOT indent the eof-delimiter
    read major minor release ignore <<eof
        `echo [$2] | tr '.-' ' ' | sed s/[^0-9\ ].*//` 
eof

    # strip preceding 0s and set unset version-parts to 0
    [$1][_VERSION_MAJOR]=$(($major))
    [$1][_VERSION_MINOR]=$(($minor))
    [$1][_VERSION_RELEASE]=$(($release))

    AC_SUBST([$1][_VERSION_MAJOR])
    AC_SUBST([$1][_VERSION_MINOR])
    AC_SUBST([$1][_VERSION_RELEASE])
])

# AC_PKG_CHECK_VERSION(VARIABLE_PREFIX, MODULE, REQUIRED, PATH, MIN, MAX)
# Aborts if lib was not found and REQUIRED="yes".
# The PATH can be "check", "no" or "yes"
# Sets 
#   [$VARIABLE_PREFIX]_HAVE=("yes"|"no") and
#   [$VARIABLE_PREFIX]_VERSION=major.minor.release
#   [$VARIABLE_PREFIX]_VERSION_MAJOR
#   [$VARIABLE_PREFIX]_VERSION_MINOR
#   [$VARIABLE_PREFIX]_VERSION_RELEASE
AC_DEFUN([AC_PKG_CHECK_VERSION],
[
    have_lib=no
    if test x$4 != xno; then
	# on empty PATH or PATH="yes"/"check" use the default path
	if test x$4 = x -o x$4 = xyes -o x$4 = xcheck; then
            # search in default path if no path is given
	    lib_path=""	    
	else
	    # all PKG_* names are forbidden by pkg.m4 so we have to allow this first
	    m4_pattern_allow(PKG_CONFIG_LIBDIR)
            # search only in the path given
	    lib_path="PKG_CONFIG_LIBDIR=$4/pkgconfig"
        fi

	minmax_flags=""
	minmax_text=""

	# min version
	if test x$5 != x; then
	    minmax_flags="$minmax_flags --atleast-version=$5"
	    minmax_text="$minmax_text >= $5"
	fi

	# max version
	if test x$6 != x; then
	    minmax_flags="$minmax_flags --max-version=$6"
	    minmax_text="$minmax_text <= $6"
	fi

	# call pkg-config
        AC_MSG_CHECKING(for [$2]$minmax_text)
        [$1][_VERSION]=`eval $lib_path $PKG_CONFIG $minmax_flags --modversion [$2] --silence-errors`
	if test $? -eq 0; then
            have_lib=yes
	    [$1][_HAVE]="yes"
	    AC_SPLIT_VERSION([$1], $[$1][_VERSION])
	    AC_MSG_RESULT(yes @<:@$[$1][_VERSION]@:>@)
	fi
    else
        AC_MSG_CHECKING(for [$2])
    fi
    if test x$have_lib = xno; then
        [$1][_HAVE]="no"
        AC_SPLIT_VERSION([$1], [0.0.0])
        AC_MSG_RESULT(no)
	if test x$3 = xyes -o x$4 = xyes; then
	    AC_MSG_ERROR(["Could not find required library $2. Please install $2 and try again."]);
	fi
    fi
])

# -----------------------------------------
# check for compilers
# -----------------------------------------

# find and test the freepascal compiler
# sets PFLAGS, FPC_VERSION, FPC_DEBUG, etc.
AC_PROG_FPC
AC_SPLIT_VERSION(FPC, $FPC_VERSION)

# find and test the C compiler (for C-libs and wrappers)
AC_PROG_CC
AC_LANG([C])

# find and test the C++ compiler (for C-libs and wrappers)
AC_PROG_CXX
AC_LANG([C++])

# options for make command
AC_PROG_MAKE_SET
# find tool for ln -s
AC_LN_S
# find the best install tool
AC_PROG_INSTALL
# some other useful tools
#AC_PROG_AWK
#AC_PROG_SED
#AC_PROG_GREP
#AC_PROG_EGREP

# find pkg-config
PKG_PROG_PKG_CONFIG()
if [[ x$PKG_CONFIG = x ]]; then
   AC_MSG_ERROR([
!!! pkg-config was not found on your system. 
!!! It is needed to determine the versions of your libraries.
!!! Install it and try again.])
fi

# -----------------------------------------
# check for libraries
# -----------------------------------------

# set dirs to check for lazarus
if [[ x$with_lazarus = xyes ]]; then
   # use default path (ignore the standard path (PATH) because the lazarus executable might
   # be in /usr/bin, but what we want is the program directory with the libs)   
   LAZARUS_CHECK_DIRS="/usr/bin/lazarus:/usr/lib/lazarus:/usr/share/lazarus:/opt/lazarus:/usr/local/bin/lazarus:/usr/local/lib/lazarus:/usr/local/share/lazarus"
else
    # check if dir is valid
    if [[ -d $with_lazarus ]] ; then
        LAZARUS_CHECK_DIRS=$with_lazarus
    else
        AC_MSG_ERROR(["LAZARUSDIR is not a directory."]);
    fi
fi

# find lazarus 
AC_PATH_PROG(LAZARUS, lazarus, no, [$LAZARUS_CHECK_DIRS])
if [[ $LAZARUS = "no" ]] ; then
    AC_MSG_ERROR(["Could not find lazarus. Please install lazarus and try again."]);
fi
LAZARUS_DIR=`dirname "$LAZARUS"`

# get lazarus version
AC_MSG_CHECKING(for version of lazarus)
# (do this in a temporary shell to prevent a change of directory)
LAZARUS_VERSION=`(cd "$LAZARUS_DIR/tools/install"; ./get_lazarus_version.sh)`
#LAZARUS_VERSION=`cat ide/version.inc | tr -d "' \t"` 
AC_SPLIT_VERSION([LAZARUS], [$LAZARUS_VERSION])
AC_MSG_RESULT(@<:@$LAZARUS_VERSION@:>@)

# find sdl
AC_PKG_CHECK_VERSION(SDL, [sdl], yes)

# find sqlite3
AC_PKG_CHECK_VERSION(SQLITE3, [sqlite3], yes)

# find ffmpeg
AC_PKG_CHECK_VERSION(AVCODEC, [libavcodec], yes)
AC_CHECK_LIB(avcodec, avcodec_decode_audio)
AC_CHECK_LIB(avcodec, avcodec_decode_audio2)
AC_CHECK_LIB(avcodec, img_convert)
AC_PKG_CHECK_VERSION(AVFORMAT, [libavformat], yes)
AC_PKG_CHECK_VERSION(AVUTIL, [libavutil], yes)
AC_PKG_CHECK_VERSION(SWSCALE, [libswscale], no)

if [[ x$AVCODEC_HAVE = xyes -a x$AVFORMAT_HAVE = xyes -a x$AVUTIL_HAVE = xyes ]]; then
    FFMPEG_HAVE=yes
else
    FFMPEG_HAVE=no
fi

# find projectM version
AC_PKG_CHECK_VERSION(PROJECTM, [libprojectM], no, $with_projectM, [], 0.99)

# find portaudio version
AC_PKG_CHECK_VERSION(PORTAUDIO, [portaudio-2.0], yes, $with_portaudio)
AC_PKG_CHECK_VERSION(PORTMIXER, [portmixer], no, $with_portmixer)

# -----------------------------------------
# defines for config.inc 
# -----------------------------------------

# AC_SUBST_DEFINE(DEFINE_SUFFIX, IS_DEFINED)
AC_DEFUN([AC_SUBST_DEFINE],
[
    if [[ x$2 = xyes ]]; then
        DEFINE_[$1]=DEFINE
    else
	DEFINE_[$1]=UNDEF
    fi
    AC_SUBST(DEFINE_[$1])
])

AC_SUBST_DEFINE(DEBUG, $FPC_DEBUG)

AC_SUBST(AVCODEC_LIB)
AC_SUBST(AVFORMAT_LIB)
AC_SUBST(AVUTIL_LIB)
AC_SUBST_DEFINE(HAVE_FFMPEG, $FFMPEG_HAVE)

AC_SUBST(SWSCALE_LIB)
AC_SUBST_DEFINE(HAVE_SWSCALE, $SWSCALE_HAVE)

AC_SUBST(PROJECTM_LIB)
AC_SUBST_DEFINE(HAVE_PROJECTM, $PROJECTM_HAVE)

AC_SUBST(PORTAUDIO_LIB)
AC_SUBST_DEFINE(HAVE_PORTAUDIO, $PORTAUDIO_HAVE)

AC_SUBST(PORTMIXER_LIB)
AC_SUBST_DEFINE(HAVE_PORTMIXER, $PORTMIXER_HAVE)

AC_SUBST(LAZARUS_DIR)

# -----------------------------------------
# create output files
# -----------------------------------------

AC_CONFIG_FILES([config.inc Makefile])
AC_OUTPUT

# -----------------------------------------
# show results
# -----------------------------------------

AC_MSG_NOTICE([

!!! Configuration done!
!!! Type "make" to compile the program.
])