View previous topic :: View next topic |
Author |
Message |
dreamer3 Guru
Joined: 24 Sep 2002 Posts: 553
|
Posted: Tue Dec 10, 2002 7:45 am Post subject: CFLAGS tool (query and re-compile pkgs based on CFLAGS) |
|
|
Ok, I've been meaning to upload this for a while, but just didn't get around to it until now. Every since I started with Gentoo until about a month ago I kept changing my CFLAGS all the time, and of course compiling things as i went with all different flags.
Well, the question has been asked, and I myself wondered... how do I only compile packages that haven't ALREADY been compiled with my existing CFLAGS? Or, how can I automatically re-compile all the packages I've compiled with -O3 to -O2 (my current pref). Going from -O3 to -O2 was my biggest push...
I wrote my own answer... try running it with no parameters to get the built in help... please provide feedback, thoughts, constructive critism, bug reports, etc... and let me know if you find this useful.
qcflags (http://elektron.its.tudelft.nl/~piguil09/cflags)
Code: | #!/bin/bash
source /etc/make.conf
NO="\x1b[0;0m"
BR="\x1b[0;01m"
CY="\x1b[36;01m"
RD="\x1b[31;01m"
GR="\x1b[32;01m"
YL="\x1b[33;01m"
BL="\x1b[34;01m"
T="\t"
verb=0
group="*"
if [ ${#} -eq 0 ]; then
usage=y;
fi
while [ ${#} -gt 0 ]
do
a=${1}
shift
case "${a}" in
-h|--help)
usage=y
break
;;
-p|--pretend)
emerge_pretend=y;
;;
--flags)
filter_flags=$1
shift
;;
--emerge)
emerge_go=y;
;;
-f|--fetch)
fetch=y
;;
-g|--group)
group=$1
shift
;;
-l|--list)
list=y;
;;
-n|--nice)
nice=nice
;;
-v|--verbose)
let $((verb++))
;;
-vv)
let $((verb++))
let $((verb++))
;;
-nc|--no-color|--nocolor|--no-colors|--nocolors)
nocolor=y
;;
-*)
echo -e ${CY}${PROG}${NO}:${YL} Invalid option ${RD}$a 1>&2
usage=y
break
;;
*)
if [ -n "${arg}" ]; then
echo -e ${CY}${PROG}: ${YL}Only one argument supported
usage=y
break
fi
# Kill a trailing slash
arg=${a%/}
;;
esac
done
if [ "${usage}" ]; then
echo -e "${CY}qcflags v0.10${NO}
${CY}qcflags${NO} is a tool that allows you to query packages
based on the CFLAGS with which they were compiled and re-emerge
packages based on this criteria.
${BR}Usage:
${T}${CY}${PROG}${NO} [${BR}options${NO}] [${YL}pkgname${NO}] [${BL}-g${YL} group${NO}]${NO} [${BL}--flags${YL} cflags${NO}]
${T}${CY}${PROG}${NO} ${BL}--help${NO}
${BR}Queries:
${BL}-g, --group${NO}${T}${T}Find by group (can be combined with other searches)
${BL}--flags${NO}${T}${T}Find based upon the CFLAGS used to compile
${BR}Actions:
${BL}-l, --list${NO}${T}${T}list packages
${BL}-p, --pretend${NO}${T}emerge --pretend the selected packages
${BL}-f, --fetch${NO}${T}${T}emerge --fetch the selected packages
${BL}--emerge${NO}${T}${T}emerge the selected packages
${BL}-n, --nice${NO}${T}${T}use nice to execute the above
${BR}Modifiers:"
# ${BL}-nc, --no-color${NO}${T}don't use colors
echo -e " ${BL}-v, --verbose${NO}${T}Be more verbose [ can be repeated twice ]
${BL}-vv${NO}${T}${T}${T}Same as ${BL}-v -v${NO}
${YL}Notes${NO}:
Some packages modify your custom CFLAGS for improved stability. It may
not be possible to get ${BR}_every_${NO} package on your system compiled
with your exact CFLAGS.
${YL}Examples${NO}:
${PROG} -l list packages not compiled with current CFLAGS
${PROG} -v same as above, but show the CFLAGS used to compile
${PROG} -vv \"\", but show pkgs compiled with current CFLAGS as well
${PROG} -g sys-apps show only packages in the sys-apps group
${PROG} bash show only packages that match \"bash\"
${PROG} --flags O3 show only pacakges compiled with O3 in the CFLAGS
"
exit
fi
if [[ ! ${emerge_pretend} && ! ${emerge_go} ]]; then
list=y
fi
echo -e "${BR}Your currently set CFLAGS are: ${NO}"
echo -e ${CFLAGS}
#echo
if [ ${list} ];then
echo
echo -e "${BR}Packages needed re-emerging...${NO}"
fi
ipak=`find /var/db/pkg -iname *.ebuild`
if [ ${arg} ]; then
ipak=`echo ${ipak} | sed -e "s: :\n:g" | grep ${arg}`
fi
if [ "${group}" != "*" ]; then
ipak=`echo ${ipak} | sed -e "s: :\n:g" | grep ${group}`
fi
for p in ${ipak};do
n=${p%.ebuild}
var_db_pkg="/var/db/pkg/"
n=${n/${var_db_pkg}/}
n=${n/\/*\//\/}
read p_cflags < /var/db/pkg/${n}/CFLAGS
# remove the includes and other stuff that are added by some builds
p_cflags=${p_cflags%% -I*}
p_cflags=${p_cflags/ -Wno-deprecated/}
# remove -g from end od gnome-common build
[ "${n#gnome-base/gnome-common}" ] && p_cflags=${p_cflags/ -g/}
#echo "${n} ... ${CFLAGS} == ${p_cflags}"
if [ "${CFLAGS}" != "${p_cflags}" ]; then
if [[ -z "${filter_flags}" || "${p_cflags/${filter_flags}/}" != "${p_cflags}" ]] ; then
[ ${list} ] && echo -en "${YL}${n}${NO}"
# add it to the list of builds to be emerged
nv=`echo ${n} | sed -e "s:-r[0-9]\+$::" -e "s:-[0-9][^-]*$::"`
# echo ${nv}
nv="^${nv}$"
in_world=`cat /var/cache/edb/world | grep ${nv}`
if [ "${in_world}" ]; then
world="${world} =${n}"
else
depen="${depen} =${n}"
fi
# if we're in verbose mode, show the cflags
if [[ ${list} && ${verb} -gt 0 ]]; then
echo ":"${p_cflags};
elif [ ${list} ]; then
echo
fi
elif [[ ${list} && ${verb} -gt 1 ]]; then
echo -en ${CY}${n}${NO}
echo ":"${p_cflags};
fi
else
if [[ ${list} && ${verb} -gt 1 ]]; then
echo -e ${GR}${n}${NO}
fi
fi
done
if [ ${verb} -gt 0 ]; then
echo
fi
# if pretend re-emerge
if [ ${emerge_pretend} ]; then
echo -e "${BR}Suggested Dependencies:${NO}"
if [ "${depen}" ]; then
command="emerge -p --oneshot ${depen}"
${command}
else
echo -e "${YL}No dependencies found.${NO}"
fi
echo -e "${BR}Suggested World:${NO}"
if [ "${world}" ]; then
command="emerge -p ${world}"
${command}
else
echo -e "${YL}No packages found for world.${NO}"
echo
fi
fi
# if fetch
if [ ${fetch} ]; then
if [ "${depen}" ]; then
${nice} emerge -f ${depen}
fi
if [ "${world}" ]; then
${nice} emerge -f ${world}
fi
fi
# if real emerge
if [ ${emerge_go} ]; then
if [ "${depen}" ]; then
${nice} emerge --oneshot ${depen}
fi
if [ "${world}" ]; then
${nice} emerge ${world}
fi
fi |
Last edited by dreamer3 on Thu Jan 02, 2003 4:44 pm; edited 1 time in total |
|
Back to top |
|
|
smart Guru
Joined: 19 Nov 2002 Posts: 455
|
Posted: Tue Dec 10, 2002 6:13 pm Post subject: |
|
|
i suggest adding this cutie to the gentoolkit |
|
Back to top |
|
|
dreamer3 Guru
Joined: 24 Sep 2002 Posts: 553
|
Posted: Wed Dec 11, 2002 12:11 am Post subject: |
|
|
smart wrote: | i suggest adding this cutie to the gentoolkit |
Fine by me. I'd be happy to officially maintain it as long as I can. I have a few ideas for improvements, but it currently does all I need. Though I'd be happy to add features based on suggestions of others.
I've always wanted a little proggy to maintain even if it isn't much... |
|
Back to top |
|
|
JohnY Guru
Joined: 26 Jul 2002 Posts: 305
|
Posted: Wed Dec 11, 2002 1:58 am Post subject: cflags -O3 to -02 |
|
|
dreamer3,
If you don't mind my asking what prompted your descision to go from -O3 to -O2 and what gcc version are you using?
Thanks,
JohnY |
|
Back to top |
|
|
dreamer3 Guru
Joined: 24 Sep 2002 Posts: 553
|
Posted: Wed Dec 11, 2002 3:18 am Post subject: Re: cflags -O3 to -02 |
|
|
JohnY wrote: | If you don't mind my asking what prompted your descision to go from -O3 to -O2 and what gcc version are you using? |
Using 3.2.1 now, just upgraded from 3.2... I decided that I didn't think gcc was making smart decisions with regard to inlining functions... to I went back to O2... system seems snappier. |
|
Back to top |
|
|
phong Bodhisattva
Joined: 16 Jul 2002 Posts: 778 Location: Michigan - 15 & Ryan
|
Posted: Wed Dec 11, 2002 4:01 am Post subject: |
|
|
This is a tip rather than a support question, so I'm moving it to Documentation, Tips & Tricks from Portage and Programming. _________________ "An empty head is not really empty; it is stuffed with rubbish. Hence the difficulty of forcing anything into an empty head."
-- Eric Hoffer |
|
Back to top |
|
|
BlackBart Apprentice
Joined: 07 Oct 2002 Posts: 252
|
Posted: Thu Dec 26, 2002 9:07 pm Post subject: |
|
|
can you attatch the script, i seem to be having trouble copying and pasting it into a text editor. |
|
Back to top |
|
|
idl Retired Dev
Joined: 24 Dec 2002 Posts: 1728 Location: Nottingham, UK
|
Posted: Thu Dec 26, 2002 9:27 pm Post subject: |
|
|
dreamer3, why not try -Os its basicly the same as -O2 but has a few flags to make binarys smaller. |
|
Back to top |
|
|
dreamer3 Guru
Joined: 24 Sep 2002 Posts: 553
|
Posted: Tue Dec 31, 2002 4:57 am Post subject: |
|
|
port001 wrote: | dreamer3, why not try -Os its basicly the same as -O2 but has a few flags to make binarys smaller. |
I'm happy with O2 for now...
wrote: | can you attatch the script, i seem to be having trouble copying and pasting it into a text editor. |
You can't "attach" files on this forum. You'll just have to try cutting and pasting again... sorry. |
|
Back to top |
|
|
H-Pi Apprentice
Joined: 26 Jun 2002 Posts: 175 Location: Delft (NL)
|
|
Back to top |
|
|
BlackBart Apprentice
Joined: 07 Oct 2002 Posts: 252
|
Posted: Thu Jan 02, 2003 3:21 am Post subject: |
|
|
i can copy and paste, my problem is that i get funny characters at the end of each line (^M) causing the script not to work. |
|
Back to top |
|
|
Forse Apprentice
Joined: 26 Dec 2002 Posts: 260 Location: /dev/random
|
Posted: Tue Jan 07, 2003 7:45 am Post subject: Nice |
|
|
A very nice script I must say But I am a little confused...I tied to use script with -l argument and it it showed that my current flags are:
Code: | -march=athlon-xp -mcpu=athlon-xp -O3 -pipe |
even I have this line in my make.conf:
Code: | CFLAGS="-march=athlon-xp -O3 -pipe -msse -m3dnow -m3dnowext -fomit-frame-pointer -fforce-addr -frerun-cse-after-loop -frerun-loop-opt -malign-functions=4 -
mmmx -mfpmath=fpu -maccumulate-outgoing-args" |
I know that it's not your script problem, but...anyway could you help me? Where should I make changes?
Thnx in advance _________________ [ My sites ]: UnixTutorials : AniFIND : AnimeYume |
|
Back to top |
|
|
dreamer3 Guru
Joined: 24 Sep 2002 Posts: 553
|
Posted: Tue Jan 07, 2003 9:29 am Post subject: Re: Nice |
|
|
Forse wrote: | A very nice script I must say But I am a little confused...I tied to use script with -l argument and it it showed that my current flags are:
Code: | -march=athlon-xp -mcpu=athlon-xp -O3 -pipe |
even I have this line in my make.conf:
Code: | CFLAGS="-march=athlon-xp -O3 -pipe -msse -m3dnow -m3dnowext -fomit-frame-pointer -fforce-addr -frerun-cse-after-loop -frerun-loop-opt -malign-functions=4 -
mmmx -mfpmath=fpu -maccumulate-outgoing-args" |
|
There is no fancy logic to detect your CFLAGS, it simple sources (includes) your make.conf file at the top of the script and then it prints the value of CFLAGS... check to make sure your make.conf isn't defining CFLAGS twice and it's the latter one that qcflags is printing (and all your programs are using to compile). |
|
Back to top |
|
|
|