[mythtv] [patch] automagic settings.pro (version 3)
Daniel Thor Kristjansson
danielk at mrl.nyu.edu
Fri Feb 25 15:53:34 UTC 2005
On Thu, 24 Feb 2005, Geoffrey Kruse wrote:
]$ cat /proc/cpuinfo | grep "model name" | head -n 1
]model name : VIA Samuel 2
]
]right now I just use -march = i586 but i suppose there are some other flags
]that would work better?
]note, pentiumpro or i686 causes illegal instruction segfaults even though this
]is technically an i686 class cpu
The C3's don't have the CMOV instruction, so it's more like a
pentium-mmx type CPU.
Attached is a patch that looks at /proc/cpuinfo for the cpu flags if it
exists. If "uname -p" fails or returns the same thing as "uname -m"
configure also sets the "model name" from /proc/cpuinfo.
This patch also adds compile flag checking. If the script finds
-march=C3 is the right flag, but your gcc 2.9x compiler rejects it, it
will now revert to using no -march flag.
Finally, I've modified configure so that mmx is no longer enabled for
by default for i386, i486, or i586 class processors. If processor_flags
is set, i.e. /proc/cpuinfo exits, then that is used to set the mmx flag
(which does the right thing for C3's and Pentium Pro cpu's).
BTW I know people want -ffast-math, -msse2, -mfpmath=sse, etc. but I'm
leaving flag changes out of the patch because Issac understandably
doesn't want to support every wacky compile option. If we get configure
working for cpu detection, we can test different flags later.
-- Daniel
-------------- next part --------------
Index: configure
===================================================================
RCS file: /var/lib/mythcvs/mythtv/configure,v
retrieving revision 1.31
diff -u -r1.31 configure
--- configure 8 Jan 2005 16:48:12 -0000 1.31
+++ configure 25 Feb 2005 15:39:29 -0000
@@ -42,7 +42,10 @@
#echo " --powerpc-perf-enable enable performance report on PPC (requires enabling PMC)"
#echo " --disable-mmx disable mmx usage"
#echo " --disable-altivec disable AltiVec usage"
-#echo " --disable-audio-oss disable OSS audio support [default=no]"
+echo " --disable-audio-oss disable OSS audio support [default=no]"
+echo " --disable-audio-alsa disable ALSA audio support [default=no]"
+echo " --disable-audio-arts disable aRts audio support [default=no]"
+echo " --disable-audio-jack disable JACK audio support [default=no]"
#echo " --disable-audio-beos disable BeOS audio support [default=no]"
#echo " --disable-v4l disable video4linux grabbing [default=no]"
#echo " --disable-dv1394 disable DV1394 grabbing [default=no]"
@@ -92,11 +95,22 @@
make="make"
strip="strip"
cpu=`uname -m`
+cpu_raw="$cpu"
+processor=`uname -p`
+processor_flags=""
tune="generic"
powerpc_perf="no"
mmx="default"
altivec="default"
mmi="default"
+
+if test -a /proc/cpuinfo ; then
+ if test "$processor" == "" -o "$processor" == "$cpu_raw" ; then
+ processor=`cat /proc/cpuinfo | grep "model name" | head -n 1`
+ fi
+ processor_flags=`cat /proc/cpuinfo | grep "flags" | head -n 1`
+fi
+
case "$cpu" in
i386|i486|i586|i686|i86pc|BePC)
cpu="x86"
@@ -138,6 +152,9 @@
gprof="no"
v4l="yes"
audio_oss="yes"
+audio_alsa="yes"
+audio_arts="yes"
+audio_jack="yes"
audio_beos="no"
dv1394="no"
dc1394="no"
@@ -210,7 +227,6 @@
esac
SHFLAGS=-nostart
# disable linux things
-audio_oss="no"
v4l="no"
dv1394="no"
# enable beos things
@@ -226,7 +242,6 @@
fi ;;
SunOS)
v4l="no"
-audio_oss="no"
dv1394="no"
make="gmake"
LDFLAGS=""
@@ -236,7 +251,6 @@
;;
FreeBSD)
v4l="no"
-audio_oss="yes"
dv1394="no"
make="gmake"
CFLAGS="-pthread"
@@ -244,7 +258,6 @@
;;
BSD/OS)
v4l="no"
-audio_oss="yes"
dv1394="no"
extralibs="-lpoll -lgnugetopt -lm"
make="gmake"
@@ -252,7 +265,6 @@
Darwin)
cc="cc"
v4l="no"
-audio_oss="no"
dv1394="no"
ffserver="no"
SHFLAGS="-dynamiclib"
@@ -269,7 +281,6 @@
;;
CYGWIN*)
v4l="no"
-audio_oss="yes"
dv1394="no"
extralibs=""
cygwin="yes"
@@ -285,7 +296,6 @@
IRIX*)
ranlib="echo ignoring ranlib"
v4l="no"
-audio_oss="no"
make="gmake"
;;
OS/2)
@@ -304,7 +314,6 @@
EXESUF=".exe"
extralibs=""
v4l="no"
-audio_oss="no"
dv1394="no"
network="no"
ffserver="no"
@@ -385,6 +394,12 @@
;;
--disable-audio-oss) audio_oss="no"
;;
+ --disable-audio-alsa) audio_alsa="no"
+ ;;
+ --disable-audio-arts) audio_arts="no"
+ ;;
+ --disable-audio-jack) audio_jack="no"
+ ;;
--disable-audio-beos) audio_beos="no"
;;
--disable-dv1394) dv1394="no"
@@ -510,12 +525,20 @@
fi
fi
-# compute mmx state
+# compute mmx state.
if test $mmx = "default"; then
- if test $cpu = "x86" -o $cpu = "x86_64"; then
+ # defaults to mmx="yes" with i686 (despite pentiumpro),
+ mmx="no"
+ if test $cpu_raw == "i686" -o $cpu == "x86_64"; then
mmx="yes"
- else
+ fi
+
+ # unless processor_flags is set, then do right thing.
+ if test "$processor_flags" != "" ; then
mmx="no"
+ if expr "$processor_flags" : ".*mmx" > /dev/null ; then
+ mmx="yes"
+ fi
fi
fi
@@ -616,6 +639,44 @@
esac
fi
+if test $tune == "generic" -a $cpu == "x86"; then
+ if expr "$processor" : ".*Intel(R) Pentium(R) 4" > /dev/null ; then
+ PCFLAGS="$CFLAGS -march=pentium4"
+ elif expr "$processor" : ".*Intel(R) Pentium(R) M" > /dev/null ; then
+ PCFLAGS="$CFLAGS -march=pentium4"
+ elif expr "$processor" : ".*AMD Athlon(tm)" > /dev/null ; then
+ PCFLAGS="$CFLAGS -march=pentiumpro -mmmx"
+ elif expr "$processor" : ".*VIA C3 Ezra" > /dev/null ; then
+ PCFLAGS="$CFLAGS -march=c3 -Os"
+ elif expr "$processor" : ".*VIA Samuel 2" > /dev/null ; then
+ PCFLAGS="$CFLAGS -march=c3 -Os"
+
+ elif test "$cpu_raw" = "i686" -a "$mmx" = "yes" ; then
+ PCFLAGS="$CFLAGS -march=pentium2"
+ elif test "$cpu_raw" = "i686" -a "$mmx" = "no" ; then
+ PCFLAGS="$CFLAGS -march=pentiumpro"
+ elif test "$cpu_raw" = "i586" -a "$mmx" = "yes" ; then
+ PCFLAGS="$CFLAGS -march=pentium-mmx"
+ elif test "$cpu_raw" = "i586" -a "$mmx" = "no" ; then
+ PCFLAGS="$CFLAGS -march=i586"
+ elif test "$cpu_raw" = "i486"; then
+ PCFLAGS="$CFLAGS -march=i486"
+ elif test "$cpu_raw" = "i386"; then
+ PCFLAGS="$CFLAGS -march=i386"
+ fi
+elif test $tune == "generic" -a $cpu == "x86_64"; then
+ PCFLAGS="$CFLAGS -march=k8"
+fi
+
+# See if we have these flags work
+cat > $TMPC << EOF
+int main( void ) { return 0; }
+EOF
+
+if $cc $PCFLAGS -o $TMPE $TMPC 2> /dev/null ; then
+CFLAGS="$PCFLAGS"
+fi
+
# AltiVec flags: The FSF version of GCC differs from the Apple version
if test $cpu = "powerpc"; then
if test $altivec = "yes"; then
@@ -1017,6 +1078,84 @@
fi
fi
+##########################################
+# OSS probe
+
+if test "$audio_oss" = "yes" ; then
+
+cat > $TMPC << EOF
+#include <sys/ioctl.h>
+#include <sys/soundcard.h>
+int main(void) { return (int) EV_SEQ_LOCAL; }
+EOF
+
+audio_oss=no
+if $cc -o $TMPE $TMPC > /dev/null 2>&1; then
+audio_oss=yes
+fi
+
+fi
+
+##########################################
+# ALSA probe
+
+if test "$audio_alsa" = "yes" ; then
+
+cat > $TMPC << EOF
+#include <alsa/asoundlib.h>
+int main(void) { return (int) SND_LIB_MAJOR; }
+EOF
+
+audio_alsa=no
+audio_alsa_libs="-lasound"
+if $cc -o $TMPE $TMPC $audio_alsa_libs > /dev/null 2>&1; then
+audio_alsa=yes
+fi
+
+fi
+
+##########################################
+# aRts probe
+
+if test "$audio_arts" = "yes" ; then
+
+cat > $TMPC << EOF
+#include <artsc/artsc.h>
+int main(void) { return (int) ARTS_P_BUFFER_SIZE; }
+EOF
+
+audio_arts=no
+if (artsc-config --version) > /dev/null 2>&1; then
+audio_arts_libs=`artsc-config --libs`
+audio_arts_tmp=`artsc-config --cflags`
+audio_arts_cflags=`echo $audio_arts_tmp | sed "s/include\/artsc/include/g"`
+if $cc -o $TMPE $TMPC $audio_arts_cflags $audio_arts_libs > /dev/null 2>&1; then
+audio_arts=yes
+fi
+fi
+
+fi
+
+##########################################
+# JACK probe
+
+if test "$audio_jack" = "yes" ; then
+
+cat > $TMPC << EOF
+#include <jack/jack.h>
+int main(void) { return (int) JACK_MAX_FRAMES; }
+EOF
+
+audio_jack=no
+audio_jack_libs="-ljack"
+if $cc -o $TMPE $TMPC $audio_jack_libs > /dev/null 2>&1; then
+audio_jack=yes
+fi
+
+fi
+
+
+
case "`$cc -v 2>&1 | grep version`" in
*gcc*)
CFLAGS="-Wall -Wno-switch $CFLAGS"
@@ -1109,7 +1248,10 @@
#else
#echo "License: GPL"
#fi
-
+echo "OSS support $audio_oss"
+echo "ALSA support $audio_alsa"
+echo "aRts support $audio_arts"
+echo "JACK support $audio_jack"
echo "Creating config.mak and config.h"
@@ -1346,6 +1488,25 @@
echo "CONFIG_AUDIO_OSS=yes" >> config.mak
fi
+if test "$audio_alsa" = "yes" ; then
+ echo "#define CONFIG_AUDIO_ALSA 1" >> $TMPH
+ echo "CONFIG_AUDIO_ALSA=yes" >> config.mak
+ echo "CONFIG_AUDIO_ALSA_LIBS=$audio_alsa_libs" >> config.mak
+fi
+
+if test "$audio_arts" = "yes" ; then
+ echo "#define CONFIG_AUDIO_ARTS 1" >> $TMPH
+ echo "CONFIG_AUDIO_ARTS=yes" >> config.mak
+ echo "CONFIG_AUDIO_ARTS_LIBS=$audio_arts_libs" >> config.mak
+ echo "CONFIG_AUDIO_ARTS_CFLAGS=$audio_arts_cflags" >> config.mak
+fi
+
+if test "$audio_jack" = "yes" ; then
+ echo "#define CONFIG_AUDIO_JACK 1" >> $TMPH
+ echo "CONFIG_AUDIO_JACK=yes" >> config.mak
+ echo "CONFIG_AUDIO_JACK_LIBS=$audio_jack_libs" >> config.mak
+fi
+
if test "$audio_beos" = "yes" ; then
echo "#define CONFIG_AUDIO_BEOS 1" >> $TMPH
echo "CONFIG_AUDIO_BEOS=yes" >> config.mak
@@ -1534,6 +1695,7 @@
echo
fi
+
fi
diff $TMPH config.h >/dev/null 2>&1
Index: settings.pro
===================================================================
RCS file: /var/lib/mythcvs/mythtv/settings.pro,v
retrieving revision 1.107
diff -u -r1.107 settings.pro
--- settings.pro 22 Feb 2005 15:09:57 -0000 1.107
+++ settings.pro 25 Feb 2005 15:39:29 -0000
@@ -1,6 +1,59 @@
+### Compile release, profile or debug version (pick one) ###
+
+#CONFIG += profile
#CONFIG += debug
CONFIG += release
+
+### Input Hardware ###
+
+# IVTV (PVR-x50) support
+CONFIG += using_ivtv
+# DVB support, you may need edit the path to your linux-dvb headers below
+#CONFIG += using_dvb
+# Firewire support
+#CONFIG += using_firewire
+
+
+### Remote control I/O ###
+
+# Native lirc support (infrared remotes)
+#CONFIG += using_lirc
+# Joystick menu support (Linux only)
+CONFIG += using_joystick_menu
+
+
+### Video Output ###
+
+# X11 support (Network friendly video terminal software)
+CONFIG += using_x11
+# Default Xv support (X11 color conversion acceleration)
+CONFIG += using_xv
+# XvMC support, other than epia (Linux/BSD specific MPEG-2 acceleration)
+#CONFIG += using_xvmc_normal
+# XvMC_VLD support, modify as necessary. Incompatible with normal XvMC support.
+# Used for hardware accelerated decoding on VIA EPIA-M (and other) boards.
+#CONFIG += using_xvmc_vld
+# DirectFB support (Linux non-X11 video output)
+#CONFIG += using_directfb
+# DirectX support (MS Windows video output)
+#CONFIG += using_directx
+# OpenGL support for vertical retrace sync
+#CONFIG += using_opengl_vsync
+# Allow use of X11 XrandR to change display resolutions
+#CONFIG += using_xrandr
+
+
+###
+### The configuration options above are implemented below,
+### hopefully you will not need to edit these.
+###
+
+profile {
+ CONFIG *= release
+ CONFIG -= debug
+}
+
isEmpty( PREFIX ) {
PREFIX = /usr/local
}
@@ -25,21 +78,21 @@
}
release {
- contains(TARGET_ARCH_X86, yes) {
- DEFINES += MMX
- QMAKE_CXXFLAGS_RELEASE = -O3 -march=pentiumpro -fomit-frame-pointer
- }
- contains(TARGET_ARCH_X86_64, yes) {
- DEFINES += MMX
- QMAKE_CXXFLAGS_RELEASE = -O3 -march=k8 -fomit-frame-pointer
- }
+ QMAKE_CXXFLAGS_RELEASE = $$OPTFLAGS -fomit-frame-pointer
+ contains( TARGET_MMX, yes ):DEFINES += MMX
+
contains( TARGET_ARCH_POWERPC, yes ) {
# Do not use -O3, it causes some Qt moc methods to go missing
- QMAKE_CXXFLAGS_RELEASE = -O2
+ QMAKE_CXXFLAGS_RELEASE = $$OPTFLAGS -O2
}
QMAKE_CFLAGS_RELEASE = $${QMAKE_CXXFLAGS_RELEASE}
}
+profile {
+ QMAKE_CXXFLAGS_RELEASE *= -g
+ LIBAVCODEC_CFLAGS *= -g
+}
+
LOCAL_LIBDIR_X11 =
!isEmpty( QMAKE_LIBDIR_X11 ) {
LOCAL_LIBDIR_X11 = -L$$QMAKE_LIBDIR_X11
@@ -55,79 +108,74 @@
CONFIG += freebsd backend
}
-# X11 support
-CONFIG += using_x11
+contains( CONFIG_AUDIO_OSS, yes ):CONFIG += using_oss
+contains( CONFIG_AUDIO_ALSA, yes ) {
+ CONFIG += using_alsa
+ EXTRA_LIBS += $$CONFIG_AUDIO_ALSA_LIBS
+}
+contains( CONFIG_AUDIO_ARTS, yes ) {
+ CONFIG += using_arts
+ QMAKE_CXXFLAGS += $$CONFIG_AUDIO_ARTS_CFLAGS
+ EXTRA_LIBS += $$CONFIG_AUDIO_ARTS_LIBS
+}
+contains( CONFIG_AUDIO_JACK, yes ) {
+ CONFIG += using_jack
+ EXTRA_LIBS += $$CONFIG_AUDIO_JACK_LIBS
+}
-# Default Xv support
-CONFIG += using_xv
-EXTRA_LIBS += $$LOCAL_LIBDIR_X11 -lXinerama -lXv -lX11 -lXext -lXxf86vm
+using_ivtv {
+ DEFINES += USING_IVTV
+ # Use the installed ivtv header instead of the local copy (needs >= v0.2)
+ #DEFINES += USING_IVTV_HEADER
+}
-# IVTV (PVR-x50) support
-CONFIG += using_ivtv
-DEFINES += USING_IVTV
-# Use the installed ivtv header instead of the local copy (needs >= v0.2)
-#DEFINES += USING_IVTV_HEADER
-
-# Default audio output, OSS.
-# Do NOT disable unless compiling on a non-linux platform.
-CONFIG += using_oss
-
-# Native ALSA support
-#CONFIG += using_alsa
-#ALSA_LIBS = -lasound
-
-# Native ARTS support
-#CONFIG += using_arts
-#ARTS_LIBS = -L/opt/kde3/lib -ldl -lartsc -lpthread
-#EXTRA_LIBS += -L/opt/kde3/lib -ldl -lartsc -lpthread
-#INCLUDEPATH += /opt/kde3/include
-# For Mandrake, use the following:
-#ARTS_LIBS = -ldl -lartsc -lpthread
-#EXTRA_LIBS += -ldl -lartsc -lpthread
-#INCLUDEPATH += /usr/include/artsc
-
-# Native JACK support
-#CONFIG += using_jack
-#JACK_LIBS += -ljack
+using_dvb {
+ DEFINES += USING_DVB
+ # Note: INCLUDEPATH should point to the directory with
+ # 'linux/dvb/frontend.h', not the directory with frontend.h
+ # Note: This _must not_ be your linux kernel source includes. Copy the dvb
+ # includes into a separate directory for now.
+ INCLUDEPATH += /cvs/myth/dvb-kernel/linux/include
+ #define the following if you want On Air Guide information
+ #DEFINES += USING_DVB_EIT
+}
-# DVB support
-#CONFIG += using_dvb
-#DEFINES += USING_DVB
-# Note: INCLUDEPATH should point to the directory with
-# 'linux/dvb/frontend.h', not the directory with frontend.h
-# Note: This _must not_ be your linux kernel source includes. Copy the dvb
-# includes into a separate directory for now.
-#INCLUDEPATH += /usr/src/linuxtv-dvb-1.0.1/include
-#define the following if you want On Air Guide information
-#DEFINES += USING_DVB_EIT
+using_firewire {
+ DEFINES += USING_FIREWIRE
+ EXTRA_LIBS += -lraw1394 -liec61883
+}
-# Firewire support
-#CONFIG += using_firewire
-#DEFINES += USING_FIREWIRE
-#EXTRA_LIBS += -lraw1394 -liec61883
+using_lirc {
+ LIRC_LIBS = -llirc_client
+}
-# Joystick menu support
-CONFIG += using_joystick_menu
+using_xv {
+ EXTRA_LIBS += $$LOCAL_LIBDIR_X11 -lXinerama -lXv -lX11 -lXext -lXxf86vm
+}
-# Native lirc support
-#CONFIG += using_lirc
-#LIRC_LIBS = -llirc_client
+using_xvmc_vld:using_xvmc_normal {
+ message(You have enabled both normal XvMC and EPIA XvMC.)
+ message(Unfortunately you must pick one.)
+ error(Unsupported configuration)
+ }
+}
-# XvMC support, modify as necessary.
-#CONFIG += using_xvmc
-#DEFINES += USING_XVMC
-#EXTRA_LIBS += -lXvMCNVIDIA -lXvMC
+using_xvmc_vld {
+ CONFIG += using_xvmc
+ DEFINES += USING_XVMC USING_XVMC_VLD
+ EXTRA_LIBS += -lviaXvMC -lXvMC
+}
-# XvMC_VLD support, modify as necessary. Incompatible with normal XvMC support.
-# Used for hardware accelerated decoding on VIA EPIA-M (and other) boards.
-#CONFIG += using_xvmc using_xvmc_vld
-#DEFINES += USING_XVMC USING_XVMC_VLD
-#EXTRA_LIBS += -lviaXvMC -lXvMC
+using_xvmc_normal {
+ CONFIG += using_xvmc
+ DEFINES += USING_XVMC
+ EXTRA_LIBS += -lXvMCNVIDIA -lXvMC
+}
-# DirectFB support
-#CONFIG += using_directfb
-#EXTRA_LIBS += `directfb-config --libs`
-#QMAKE_CXXFLAGS += `directfb-config --cflags`
+using_directfb {
+ EXTRA_LIBS += `directfb-config --libs`
+ QMAKE_CXXFLAGS += `directfb-config --cflags`
+}
# Windows support
win32 {
@@ -146,18 +194,18 @@
}
}
-# DirectX support
-#CONFIG += using_directx
-#DEFINES += USING_DIRECTX
+using_directx {
+ DEFINES += USING_DIRECTX
+}
-# OpenGL support for vertical retrace sync
-#DEFINES += USING_OPENGL_VSYNC
-#EXTRA_LIBS += -lGL -lGLU
-#CONFIG += using_opengl
+using_opengl_vsync {
+ DEFINES += USING_OPENGL_VSYNC
+ EXTRA_LIBS += -lGL -lGLU
+}
-# Allow use of XrandR to change display resolutions
-#CONFIG += using_xrandr
-#DEFINES += USING_XRANDR
+using_xrandr {
+ DEFINES += USING_XRANDR
+}
################################################################
# Please keep these CONFIG blocks as the last part of this file!
@@ -172,7 +220,6 @@
EXTRA_LIBS -= $${LOCAL_LIBDIR_X11} -lXinerama -lXv -lX11 -lXext -lXxf86vm
CONFIG -= using_ivtv
DEFINES -= USING_IVTV
- CONFIG -= using_oss
CONFIG -= using_joystick_menu
}
win32 {
@@ -181,7 +228,6 @@
EXTRA_LIBS -= $${LOCAL_LIBDIR_X11} -lXinerama -lXv -lX11 -lXext -lXxf86vm
CONFIG -= using_ivtv
DEFINES -= USING_IVTV
- CONFIG -= using_oss
CONFIG -= using_joystick_menu
}
freebsd {
Index: libs/libmythtv/libmythtv.pro
===================================================================
RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/libmythtv.pro,v
retrieving revision 1.86
diff -u -r1.86 libmythtv.pro
--- libs/libmythtv/libmythtv.pro 2 Feb 2005 07:11:10 -0000 1.86
+++ libs/libmythtv/libmythtv.pro 25 Feb 2005 15:39:29 -0000
@@ -146,7 +146,7 @@
HEADERS += videoout_dx.h
}
-using_opengl {
+using_opengl_vsync {
CONFIG += opengl
}
More information about the mythtv-dev
mailing list