Code: Select all
quix0r@quix0r:~$ export | grep FLAGS
declare -x CFLAGS="-g -O0 -fPIC"
declare -x CXXFLAGS="-g -O0 -fPIC"
quix0r@quix0r:~$
Wenn z.B. --enable-release=yes an configure uebergeben wird, so ueberschneiden sich hier -O0 aus den Umgebungsvariablen und -O3 aus dem configure Script.
Meine Idee waere hier, geziehlter auf CFLAGS/CXXFLAGS Ruecksicht zu nehmen, anstelle sie einfach einzubauen. Derzeit experimentiere ich hier mit einer kleinen Aenderung in configure.ac (welche von autogen.sh genommen wird, um configure zu erzeugen), welche den Umgebungsvariablen "ultimativ vertraut". Dies heisst im Klartext, dass falls in beiden Werte vorhanden sind, werden diese nur um -fopenmp erweitert, ist eines von beiden oder gar beide nicht gesetzt, werden Standard-Werte angenommen.
Hier nun mein Patch:
Code: Select all
Index: configure.ac
===================================================================
--- configure.ac (revision 9796)
+++ configure.ac (working copy)
@@ -25,6 +25,13 @@
AM_MAINTAINER_MODE
+#Probe for CFLAGS/CXXFLAGS
+if test "x$CFLAGS" != "x" && test "$CXXFLAGS" != "x";
+ USE_CFLAGS=yes
+else
+ USE_CFLAGS=no
+then
+
#kludge to keep autoconf from adding -g -O2
CFLAGS=" $CFLAGS"
CXXFLAGS=" $CXXFLAGS"
@@ -116,14 +123,26 @@
dnl Build with NDEBUG?
AC_ARG_ENABLE(debug,
[ --enable-debug Take out debug symbols, Asserts, Int3, etc ],,)
-if test x$enable_debug != xyes; then
+if test "x$enable_debug" != "xyes"; then
AC_DEFINE(NDEBUG,,[Define to disable asserts, int3, etc.])
- CFLAGS="-O3 $CFLAGS -fopenmp"
- CXXFLAGS="-O3 $CXXFLAGS -fopenmp"
+ if test "x$USE_CFLAGS" != "xno"; then
+ # Trust the CFLAGS ultimately
+ CFLAGS="$CFLAGS -fopenmp"
+ CXXFLAGS="$CXXFLAGS -fopenmp"
+ else
+ CFLAGS="-O3 $CFLAGS -fopenmp"
+ CXXFLAGS="-O3 $CXXFLAGS -fopenmp"
+ fi
# AC_DEFINE(OPENMP,,[Define to enable openmp code])
else
- CFLAGS="-g $CFLAGS -fopenmp"
- CXXFLAGS="-g $CXXFLAGS -fopenmp"
+ if test "x$USE_CFLAGS" != "xno"; then
+ # Trust the CFLAGS ultimately
+ CFLAGS="$CFLAGS -fopenmp"
+ CXXFLAGS="$CXXFLAGS -fopenmp"
+ else
+ CFLAGS="-g $CFLAGS -fopenmp"
+ CXXFLAGS="-g $CXXFLAGS -fopenmp"
+ fi
AC_DEFINE(_DEBUG,,[Define to enable asserts, int3, etc.])
D2X_FEATURES="debug ${D2X_FEATURES}"
fi
Auch empfiehlt es sich bei Debug-Releases -O0 zu verwenden, es hat jedoch Auswirkungen auf die Performance (was bei Release-Builds dann ja wichtig ist, von daher macht auch -O3 bei Release-Builds Sinn), da die Werte nicht mehr optimiert werden, sondern z.B. in Backtraces (gdb bt full) im Klartext gespeichert sind, was zum Debuggen sehr nuetzlich ist (unabdingbar schon fast).
Ich habe mir nun zweimal d2x-xl konfiguiert, einmal mit --enable-release=yes --enable-debug=no (zum Spielen) und einmal --enable-release=no --enable-debug=yes, dies hat bei oben vorgestelltem Patch keine Auswirkungen auf die CFLAGS/CXXFLAGS, sondern bindet nur D2X-XL-eigenen Debug-Code (Assertions) ein.
Wenn aber die Einstellungen aus CLFAGS/CXXFLAGS ignoriert werden sollen, so muessen diese temporaer (z.B. in einem kleinen Script, um ewiges Wiedereingeben sich zu ersparen) temporaer auf "leer" gesetzt werden:
Code: Select all
#!/bin/sh
export CFLAGS=""
export CXXFLAGS=""
../../d2x-xl/configure --prefix=/opt --with-sharepath=/opt/games/d2x-xl/ --enable-release=yes --enable-debug=no
Nach Verlassen des Scriptes (weil es geforkt und nicht "gesourcet" wird) sind dann die Umgebungsvariablen wieder hergestellt.
Edit: Hab das Patch nochmals ueberarbeiten muessen, nun sollte es wieder klappen.
