#!/bin/sh # # QEmacs configure script # # Copyright (c) 2002 Fabrice Bellard # Copyright (c) 2002-2026 Charlie Gordon # # # set temporary file name if test ! -z "$TMPDIR" ; then TMPDIR1="${TMPDIR}" else if test ! -z "$TEMPDIR" ; then TMPDIR1="${TEMPDIR}" else TMPDIR1="/tmp" fi 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="cc" host_cc="cc" if test `which clang 2>/dev/null` ; then cc="clang" host_cc="clang" else if test `which gcc 2>/dev/null` ; then cc="gcc" host_cc="gcc" else if test `which tcc 2>/dev/null` ; then cc="tcc" host_cc="tcc" fi fi fi ar="ar" make="make" size="size" strip="strip" strip_args="-s -R .comment -R .note" cpu=`uname -m` case "$cpu" in i386|i486|i586|i686|i86pc|BePC) cpu="x86" ;; esac unlockio="no" ptsname="yes" gprof="no" network="yes" atari="no" win32="no" cygwin="no" darwin="no" linux="no" freebsd="no" openbsd="no" netbsd="no" haiku="no" lshared="no" dllibs="-ldl" extralibs="" simpleidct="yes" bigendian="no" tiny_only="no" tiny="yes" x11="no" xv="no" xshm="no" xrender="no" png="no" ffmpeg="no" html="no" doc="yes" plugins="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" ;; NetBSD) netbsd="yes" extralibs="-lm" unlockio="no" doc="no" plugins="no" dllibs= ;; OpenBSD) openbsd="yes" extralibs="-lm" make="gmake" doc="no" plugins="no" ptsname="no" dllibs= cc="cc" host_cc="cc" ;; FreeBSD) freebsd="yes" extralibs="-lm" make="gmake" doc="no" unlockio="no" plugins="no" ptsname="yes" cc="clang" host_cc="clang" ;; MINGW*) mingw="yes" ;; CYGWIN*) cygwin="yes" ;; Darwin) darwin="yes" CFLAGS="" unlockio="yes" plugins="no" extralibs="-lm" strip_args="-x -S" cc="clang" host_cc="clang" ;; 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" ;; Linux) linux="yes" extralibs="-lm" unlockio="yes" ;; *) 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 for x11path in /usr /opt/X11 /usr/X11R6; do if test -f "$x11path/include/X11/Xlib.h" ; then x11="yes" x11_libdir="$x11path/lib" x11_includedir="$x11path/include" html="yes" if test -f "$x11path/include/X11/extensions/Xv.h" ; then if test -f "$x11path/include/X11/extensions/Xvlib.h" ; then xv="yes" fi fi if test -f "$x11path/include/X11/extensions/Xshm.h" ; then xshm="yes" fi break fi done if test -z `which texi2html 2>/dev/null` ; 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-atari enable atari cross compile" 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-xshm disable XShm extension support" echo " --disable-xrender disable Xrender extension support" echo " --disable-tiny do not build the 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 " --tiny-only only build the very small version" 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 " --host-cc=CC use C host compiler CC [$host_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` ;; --host-cc=*) host_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=} ;; --tiny-only) tiny_only="yes" ;; --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-atari) atari="yes" ;; --enable-win32) win32="yes" ;; --enable-cygwin) cygwin="yes" ;; --enable-shared | --disable-shared) lshared="$value" ;; --enable-tiny | --disable-tiny) tiny="$value" ;; --enable-x11 | --disable-x11) x11="$value" ;; --enable-xv | --disable-xv) xv="$value" ;; --enable-xshm | --disable-xshm) xshm="$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 "$atari" = "yes" ; then if test "$cross_prefix" = ""; then cross_prefix="m68k-atari-mint-" fi if test "$cross_env" = ""; then cross_env="/opt/netsurf/${cross_prefix%-}/env" fi # LLONG_MIN needs C99, but other parts don't build with std=c99 CFLAGS="$CFLAGS -m68020-60 -I${cross_env}/include -std=gnu99" LDFLAGS="$LDFLAGS -Wl,--stack,256k -m68020-60 -L${cross_env}/lib" #extralibs="$extralibs -lgem" ptsname="no" network="no" doc="no" plugins="no" x11="no" mmap="no" cygwin="no" exe=".tos" cpu="m68k" targetos="MiNT" 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" 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" exe=".exe" fi if test "$mingw" = "yes" ; then doc="no" x11="no" png="no" ffmpeg="no" html="no" plugins="no" exe=".exe" fi if test "$x11" = "no" ; then xv="no" xshm="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" -o "$cpu" = "m68k"; then bigendian="yes" fi cc="${cross_prefix}${cc}" ar="${cross_prefix}${ar}" size="${cross_prefix}${size}" 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_only" = "yes" ; then tiny="yes" ffmpeg="no" x11="no" xv="no" xshm="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 if test "$x11" = "yes" ; then if test ! -z "$x11_libdir" ; then XLDFLAGS="$XLDFLAGS -L$x11_libdir" fi if test ! -z "$x11_includedir" ; then XCFLAGS="$XCFLAGS -I$x11_includedir" fi fi echo "VERSION " `head $source_path/VERSION` echo "Install prefix $prefix" echo "Shared data dir $datadir" echo "Manpages dir $mandir" echo "Source path $source_path" echo "C compiler $cc" echo " version " `$cc --version | head -n 1` echo " cpu $cpu" echo " targetos $targetos" echo "Tiny build $tiny" echo "X11 support $x11" if test "$x11" = "yes" ; then echo "Xvideo support $xv" echo "XShm support $xshm" #echo "Xrender support $xrender" fi echo "libpng support $png" echo "FFMPEG support $ffmpeg" echo "Graphical HTML $html" echo "Memory mapped files $mmap" echo "Unlocked I/O $unlockio" 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 "SIZE=$size" >> $TMPMAK echo "STRIP=$strip $strip_args" >> $TMPMAK echo "INSTALL=install" >> $TMPMAK echo "CFLAGS=$CFLAGS" >> $TMPMAK echo "LIBS=$LIBS" >> $TMPMAK echo "LDFLAGS=$LDFLAGS" >> $TMPMAK echo "XCFLAGS=$XCFLAGS" >> $TMPMAK echo "XLIBS=$XLIBS" >> $TMPMAK echo "XLDFLAGS=$XLDFLAGS" >> $TMPMAK echo "EXE=$exe" >> $TMPMAK echo "TARGET_OS=$targetos" >> $TMPMAK echo "TARGET_ARCH=$cpu" >> $TMPMAK case "$cpu" in x86) echo "TARGET_ARCH_X86=yes" >> $TMPMAK echo "#define ARCH_X86 1" >> $TMPH ;; x86_64) echo "TARGET_ARCH_X86_64=yes" >> $TMPMAK echo "#define ARCH_X86_64 1" >> $TMPH ;; esac 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 "$atari" = "yes" ; then echo "#define CONFIG_ATARI 1" >> $TMPH echo "CONFIG_ATARI=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 "$linux" = "yes" ; then echo "#define CONFIG_LINUX 1" >> $TMPH echo "CONFIG_LINUX=yes" >> $TMPMAK fi if test "$freebsd" = "yes" ; then echo "#define CONFIG_FREEBSD 1" >> $TMPH echo "CONFIG_FREEBSD=yes" >> $TMPMAK fi if test "$openbsd" = "yes" ; then echo "#define CONFIG_OPENBSD 1" >> $TMPH echo "CONFIG_OPENBSD=yes" >> $TMPMAK fi if test "$netbsd" = "yes" ; then echo "#define CONFIG_NETBSD 1" >> $TMPH echo "CONFIG_NETBSD=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 "$xshm" = "yes" ; then echo "#define CONFIG_XSHM 1" >> $TMPH echo "CONFIG_XSHM=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 "$tiny_only" = "yes" ; then #echo "#define CONFIG_TINY 1" >> $TMPH echo "CONFIG_TINY_ONLY=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 "$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 cp -f $TMPMAK config.mak else echo "config.mak is unchanged" fi diff $TMPH config.h >/dev/null 2>&1 if test $? -ne 0 ; then cp -f $TMPH config.h else echo "config.h is unchanged" fi rm -f $TMPC $TMPO $TMPS $TMPH $TMPE $TMPMAK