[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