#!/bin/sh # # QEmacs configure script # # Copyright (c) 2002 Fabrice Bellard # Copyright (c) 2002-2013 Charlie Gordon # # set temporary file name if test ! -z "$TMPDIR" ; then TMPDIR1="${TMPDIR}" elif test ! -z "$TEMPDIR" ; then TMPDIR1="${TEMPDIR}" else TMPDIR1="/tmp" fi TMPC="${TMPDIR1}/qemacs-conf-${RANDOM}-$$-${RANDOM}.c" TMPO="${TMPDIR1}/qemacs-conf-${RANDOM}-$$-${RANDOM}.o" TMPS="${TMPDIR1}/qemacs-conf-${RANDOM}-$$-${RANDOM}.S" TMPH="${TMPDIR1}/qemacs-conf-${RANDOM}-$$-${RANDOM}.h" TMPMAK="${TMPDIR1}/qemacs-conf-${RANDOM}-$$-${RANDOM}.mak" # default parameters prefix="/usr/local" cross_prefix="" cc="gcc" host_cc="gcc" ar="ar" make="make" strip="strip" strip_args="-s -R .comment -R .note" cpu=`uname -m` case "$cpu" in i386|i486|i586|i686|i86pc|BePC) cpu="x86" ;; x86_64) cpu="x86_64" ;; armv4l) cpu="armv4l" ;; alpha) cpu="alpha" ;; *) cpu="unknown" ;; esac unlockio="no" ptsname="yes" gprof="no" network="yes" win32="no" cygwin="no" darwin="no" haiku="no" lshared="no" dllibs="-ldl" extralibs="" simpleidct="yes" bigendian="no" mpegaudio_hp="yes" tiny="no" x11="no" xv="no" xrender="no" png="no" ffmpeg="no" html="no" doc="yes" plugins="yes" initcalls="yes" mmap="yes" kmaps="yes" modes="yes" bidir="yes" exe="" # OS specific targetos=`uname -s` case $targetos in BeOS) prefix="/boot/home/config" # helps building libavcodec CFLAGS="-O2 -DPIC" # no need for libm, but the inet stuff # Check for BONE if (echo $BEINCLUDES|grep 'headers/be/bone' >/dev/null); then extralibs="-lbind -lsocket" else echo "Not sure building for net_server will succeed... good luck." extralibs="-lsocket" fi ;; BSD/OS) extralibs="-lpoll -lgnugetopt -lm" make="gmake" doc="no" plugins="no" ptsname="no" ;; OpenBSD) extralibs="-lm" make="gmake" doc="no" plugins="no" ptsname="no" ;; CYGWIN*) cygwin="yes" ;; Darwin) darwin="yes" CFLAGS="" initcalls="no" unlockio="no" plugins="no" extralibs="-lm" strip_args="-x -S" ;; Haiku) prefix="`finddir B_COMMON_DIRECTORY`" # no need for libm, but the network stuff extralibs="-lnetwork" # dlopen() is in libroot already dllibs="" # use Haiku GUI; avoid building for X11 even if there are headers around haiku="yes" html="yes" png="yes" x11="no" xv="no" ;; *) extralibs="-lm" unlockio="yes" ;; esac # find source path # XXX: we assume an absolute path is given when launching configure, # except in './configure' case. source_path=${0%configure} source_path=${source_path%/} source_path_used="yes" if test -z "$source_path" -o "$source_path" = "." ; then source_path=`pwd` source_path_used="no" fi if test -d "./ffmpeg" ; then ffmpeg="yes" ffmpeg_srcdir="./ffmpeg" fi if test -f "/usr/include/png.h" ; then png="yes" fi if test -f "/usr/include/X11/Xlib.h" ; then x11="yes" html="yes" if test -f "/usr/include/X11/extensions/Xv.h" ; then xv="yes" fi fi if test -f "/opt/X11/include/X11/Xlib.h" ; then CFLAGS="$CFLAGS -I/opt/X11/include" x11="yes" html="yes" if test -f "/opt/X11/include/X11/extensions/Xv.h" ; then xv="yes" fi fi if test -z `which texi2html` ; then doc="no" fi usage () { cat << EOF Usage: configure [options] Options: [defaults in brackets after descriptions] EOF echo "Standard options:" echo " --help print this message" echo " --prefix=PREFIX install in PREFIX [$prefix]" echo " --enable-win32 enable win32 cross compile" echo " --enable-cygwin compile for cygwin systems" echo " --disable-x11 disable Xwindow support" echo " --disable-xv disable Xvideo extension support" echo " --disable-xrender disable Xrender extension support" echo " --enable-tiny build a very small version" echo " --disable-html disable graphical html support" echo " --disable-png disable png support" echo " --disable-plugins disable plugins support" echo " --disable-ffmpeg disable ffmpeg support" echo " --with-ffmpegdir=DIR find ffmpeg sources and libraries in DIR" echo " for audio/video/image support" echo "" echo "Advanced options (experts only):" echo " --source-path=PATH path of source code [$source_path]" echo " --cross-prefix=PREFIX use PREFIX for compile tools [$cross_prefix]" echo " --cc=CC use C compiler CC [$cc]" echo " --make=MAKE use specified make [$make]" echo " --with-ffmpeglibdir=DIR set ffmpeg object files directory" echo "" echo "NOTE: The object files are built at the place where configure is launched" exit 1 } for opt do value="none" case "$opt" in --prefix=*) prefix=`echo $opt | cut -d '=' -f 2` ;; --datadir=*) datadir=`echo $opt | cut -d '=' -f 2` ;; --mandir=*) mandir=`echo $opt | cut -d '=' -f 2` ;; --source-path=*) source_path=`echo $opt | cut -d '=' -f 2` ;; --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2` ;; --cc=*) cc=`echo $opt | cut -d '=' -f 2` ;; --make=*) make=`echo $opt | cut -d '=' -f 2` ;; --extra-cflags=*) CFLAGS="$CFLAGS ${opt#--extra-cflags=}" ;; --extra-ldflags=*) LDFLAGS="$LDFLAGS ${opt#--extra-ldflags=}" ;; --extra-libs=*) extralibs=${opt#--extra-libs=} ;; --cpu=*) cpu=`echo $opt | cut -d '=' -f 2` ;; --with-ffmpegdir=*) ffmpeg_srcdir=${opt#--with-ffmpegdir=} ; ffmpeg="yes" ;; --with-ffmpeglibdir=*) ffmpeg_libdir=${opt#--with-ffmpeglibdir=} ;; --disable-*) value="no" ;; --enable-*) value="yes" ;; --help|-h|-?) usage ;; *) echo "unknown option: $opt" exit 1 ;; esac case "$opt" in --disable-gprof | --enable-gprof) gprof="$value" ;; --enable-network | --disable-network) network="$value" ;; --enable-win32) win32="yes" ;; --enable-cygwin) cygwin="yes" ;; --enable-shared | --disable-shared) lshared="$value" ;; --enable-mpegaudio-hp | --disable-mpegaudio-hp) mpegaudio_hp="$value" ;; --enable-tiny | --disable-tiny) tiny="$value" ;; --enable-x11 | --disable-x11) x11="$value" ;; --enable-xv | --disable-xv) xv="$value" ;; --enable-xrender | --disable-xrender) xrender="$value" ;; --enable-png | --disable-png) png="$value" ;; --enable-html | --disable-html) html="$value" ;; --enable-plugins | --disable-plugins) plugins="$value" ;; --enable-ffmpeg | --disable-ffmpeg) ffmpeg="$value" ;; --enable-* | --disable-*) echo "unknown option: $opt" exit 1 ;; esac done if test -z "$datadir"; then datadir="${prefix}/share" fi if test -z "$mandir"; then mandir="${prefix}/man" fi # Checking for CFLAGS if test -z "$CFLAGS"; then CFLAGS="-O2" fi if test "$win32" = "yes" ; then if test "$cygwin" = "yes" ; then cross_prefix="i686-pc-mingw32-" gcc_major="3" CFLAGS="$CFLAGS -I/usr/include/mingw -I/usr/include/w32api" LDFLAGS="$LDFLAGS -L/usr/lib/mingw" else cross_prefix="i586-mingw32msvc-" CFLAGS="$CFLAGS -I/usr/i586-mingw32msvc/include" extralibs="$extralibs -lws2_32" fi network="no" doc="no" plugins="no" initcalls="no" x11="no" mmap="no" cygwin="no" exe=".exe" fi if test "$cygwin" = "yes" ; then doc="no" x11="no" png="no" ffmpeg="no" html="no" plugins="no" initcalls="no" exe=".exe" fi if test "$x11" = "no" ; then xv="no" xrender="no" fi if test "$x11" = "no" -a "$haiku" = "no" ; then png="no" ffmpeg="no" html="no" fi # endianness: guess with cpu type. Should also use prefix if test "$cpu" = "powerpc"; then bigendian="yes" fi cc="${cross_prefix}${cc}" ar="${cross_prefix}${ar}" strip="${cross_prefix}${strip}" # --- # check availability of some header files cat > $TMPC << EOF #include int main( void ) { return 0; } EOF _memalign=no _malloc_h=no if $cc -o $TMPO $TMPC 2> /dev/null ; then _malloc_h=yes _memalign=yes # check for memalign - atmos cat > $TMPC << EOF #include int main (void) { char *string = NULL; string = memalign(64, sizeof(char)); return 0; } EOF $cc -o $TMPO $TMPC 2> /dev/null || _memalign=no fi if test "$ffmpeg" = "yes" ; then if test -z "$ffmpeg_libdir" ; then ffmpeg_libdir="$ffmpeg_srcdir" fi fi if test "$tiny" = "yes" ; then ffmpeg="no" x11="no" xv="no" xrender="no" png="no" html="no" plugins="no" kmaps="no" modes="no" bidir="no" fi if test -z "$CFLAGS"; then CFLAGS="-O2" fi # check gcc version cat > $TMPC < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2) return 0; #else #error gcc < 3.2 #endif } EOF gcc_major="2" if $cc -o $TMPO $TMPC 2> /dev/null ; then gcc_major="3" fi # check typeof support cat > $TMPC < /dev/null ; then has_typeof="yes" fi echo "Install prefix $prefix" echo "Shared data dir $datadir" echo "Manpages dir $mandir" echo "Source path $source_path" echo "C compiler $cc" echo "Tiny build $tiny" echo "X11 support $x11" echo "Xvideo support $xv" #echo "Xrender support $xrender" echo "libpng support $png" echo "FFMPEG support $ffmpeg" echo "Graphical HTML $html" echo "Memory mapped files $mmap" echo "Initcall support $initcalls" echo "Plugins support $plugins" echo "Bidir support $bidir" echo "All kmaps $kmaps" echo "All modes $modes" echo "Build doc files $doc" echo "" echo "Creating config.mak and config.h" echo "# Automatically generated by configure - do not modify" > $TMPMAK echo "/* Automatically generated by configure - do not modify */" > $TMPH echo "prefix=$prefix" >> $TMPMAK echo "#define CONFIG_QE_PREFIX \"$prefix\"" >> $TMPH echo "datadir=$datadir" >> $TMPMAK echo "#define CONFIG_QE_DATADIR \"$datadir\"" >> $TMPH echo "mandir=$mandir" >> $TMPMAK echo "#define CONFIG_QE_MANDIR \"$mandir\"" >> $TMPH echo "MAKE=$make" >> $TMPMAK echo "CC=$cc" >> $TMPMAK echo "GCC_MAJOR=$gcc_major" >> $TMPMAK echo "HOST_CC=$host_cc" >> $TMPMAK echo "AR=$ar" >> $TMPMAK echo "STRIP=$strip $strip_args" >> $TMPMAK echo "INSTALL=install" >> $TMPMAK echo "CFLAGS=$CFLAGS" >> $TMPMAK echo "LDFLAGS=$LDFLAGS" >> $TMPMAK echo "EXE=$exe" >> $TMPMAK if test "$cpu" = "x86" ; then echo "TARGET_ARCH_X86=yes" >> $TMPMAK echo "#define ARCH_X86 1" >> $TMPH elif test "$cpu" = "x86_64" ; then echo "TARGET_ARCH_X86_64=yes" >> $TMPMAK echo "#define ARCH_X86_64 1" >> $TMPH elif test "$cpu" = "armv4l" ; then echo "TARGET_ARCH_ARMV4L=yes" >> $TMPMAK echo "#define ARCH_ARMV4L 1" >> $TMPH elif test "$cpu" = "alpha" ; then echo "TARGET_ARCH_ALPHA=yes" >> $TMPMAK echo "#define ARCH_ALPHA 1" >> $TMPH elif test "$cpu" = "powerpc" ; then echo "TARGET_ARCH_POWERPC=yes" >> $TMPMAK echo "#define ARCH_POWERPC 1" >> $TMPH fi if test "$has_typeof" = "yes" ; then echo "CONFIG_HAS_TYPEOF=yes" >> $TMPMAK echo "#define CONFIG_HAS_TYPEOF 1" >> $TMPH fi if test "$bigendian" = "yes" ; then echo "WORDS_BIGENDIAN=yes" >> $TMPMAK echo "#define WORDS_BIGENDIAN 1" >> $TMPH fi if test "$unlockio" = "yes" ; then echo "CONFIG_UNLOCKIO=yes" >> $TMPMAK echo "#define CONFIG_UNLOCKIO 1" >> $TMPH fi if test "$ptsname" = "yes" ; then echo "CONFIG_PTSNAME=yes" >> $TMPMAK echo "#define CONFIG_PTSNAME 1" >> $TMPH fi if test "$gprof" = "yes" ; then echo "TARGET_GPROF=yes" >> $TMPMAK echo "#define HAVE_GPROF 1" >> $TMPH fi if test "$lshared" = "yes" ; then echo "BUILD_SHARED=yes" >> $TMPMAK echo "PIC=-fPIC" >> $TMPMAK fi echo "DLLIBS=$dllibs" >> $TMPMAK echo "EXTRALIBS=$extralibs" >> $TMPMAK version=`head $source_path/VERSION` echo "VERSION=$version" >> $TMPMAK echo "#define QE_VERSION \"$version\"" >> $TMPH if test "$network" = "yes" ; then echo "#define CONFIG_NETWORK 1" >> $TMPH echo "CONFIG_NETWORK=yes" >> $TMPMAK fi if test "$win32" = "yes" ; then echo "#define CONFIG_WIN32 1" >> $TMPH echo "CONFIG_WIN32=yes" >> $TMPMAK fi if test "$cygwin" = "yes" ; then echo "#define CONFIG_CYGWIN 1" >> $TMPH echo "CONFIG_CYGWIN=yes" >> $TMPMAK fi if test "$darwin" = "yes" ; then echo "#define CONFIG_DARWIN 1" >> $TMPH echo "CONFIG_DARWIN=yes" >> $TMPMAK fi if test "$haiku" = "yes" ; then echo "#define CONFIG_HAIKU 1" >> $TMPH echo "CONFIG_HAIKU=yes" >> $TMPMAK fi if test "$x11" = "yes" ; then echo "#define CONFIG_X11 1" >> $TMPH echo "CONFIG_X11=yes" >> $TMPMAK fi if test "$xv" = "yes" ; then echo "#define CONFIG_XV 1" >> $TMPH echo "CONFIG_XV=yes" >> $TMPMAK fi if test "$xrender" = "yes" ; then echo "#define CONFIG_XRENDER 1" >> $TMPH echo "CONFIG_XRENDER=yes" >> $TMPMAK fi if test "$tiny" = "yes" ; then echo "#define CONFIG_TINY 1" >> $TMPH echo "CONFIG_TINY=yes" >> $TMPMAK fi if test "$html" = "yes" ; then echo "#define CONFIG_HTML 1" >> $TMPH echo "CONFIG_HTML=yes" >> $TMPMAK fi if test "$plugins" = "yes" ; then echo "#define CONFIG_DLL 1" >> $TMPH echo "CONFIG_DLL=yes" >> $TMPMAK fi if test "$initcalls" = "yes" ; then echo "#define CONFIG_INIT_CALLS 1" >> $TMPH echo "CONFIG_INIT_CALLS=yes" >> $TMPMAK fi if test "$png" = "yes" ; then echo "#define CONFIG_PNG_OUTPUT 1" >> $TMPH echo "CONFIG_PNG_OUTPUT=yes" >> $TMPMAK fi if test "$ffmpeg" = "yes" ; then echo "#define CONFIG_FFMPEG 1" >> $TMPH echo "CONFIG_FFMPEG=yes" >> $TMPMAK echo "FFMPEG_SRCDIR=$ffmpeg_srcdir" >> $TMPMAK echo "FFMPEG_LIBDIR=$ffmpeg_libdir" >> $TMPMAK fi if test "$kmaps" = "yes" ; then echo "#define CONFIG_ALL_KMAPS 1" >> $TMPH echo "CONFIG_ALL_KMAPS=yes" >> $TMPMAK fi if test "$mmap" = "yes" ; then echo "#define CONFIG_MMAP 1" >> $TMPH echo "CONFIG_MMAP=yes" >> $TMPMAK fi if test "$modes" = "yes" ; then echo "#define CONFIG_ALL_MODES 1" >> $TMPH echo "CONFIG_ALL_MODES=yes" >> $TMPMAK fi if test "$bidir" = "yes" ; then echo "#define CONFIG_UNICODE_JOIN 1" >> $TMPH echo "CONFIG_UNICODE_JOIN=yes" >> $TMPMAK fi if test "$doc" = "yes" ; then echo "#define CONFIG_DOC 1" >> $TMPH echo "CONFIG_DOC=yes" >> $TMPMAK fi # build tree in object directory if source path is different from current one if test "$source_path_used" = "yes" ; then DIRS="tests" FILES="Makefile tests/Makefile" for dir in $DIRS ; do mkdir -p $dir done for f in $FILES ; do ln -sf $source_path/$f $f done fi echo "SRC_PATH=$source_path" >> $TMPMAK diff $TMPMAK config.mak >/dev/null 2>&1 if test $? -ne 0 ; then mv -f $TMPMAK config.mak else echo "config.mak is unchanged" fi diff $TMPH config.h >/dev/null 2>&1 if test $? -ne 0 ; then mv -f $TMPH config.h else echo "config.h is unchanged" fi rm -f $TMPC $TMPO $TMPS $TMPH $TMPE $TMPMAK