Chris White wrote:

>Hi guys,
>
>       Well, I was working on my bashrc one day and thought, "gee, would be 
> nice for other people to know what the heck is going on too!".  Well, I 
> decided to go ahead and do that :P.  So, here we go, a mini bashrc HOWTO 
> (note this only works on the latest stable of portage.  You go grab cvs head 
> and try this, you can kiss yer but goodbye! :D).
>
>HOW DOES IT WORK
>
>if [ -f "${PORTAGE_BASHRC}" ]; then
>        source "${PORTAGE_BASHRC}"
>
>This little code in ebuild.sh pretty much sums it up.  Basically, when 
>ebuild.sh is run with various ebuild stages (unpack, compile, postinst, etc.. 
>etc.. etc.), it sources the bashrc file (located in /etc/portage/bashrc), 
>giving it the exact same environment as ebuild.sh has.  So, your bashrc file 
>pretty much ends up like a mini ebuild.  Now that we've explained that, let's 
>get down and dirty.
>
>LET'S USE IT
>
>        case "$*"  in
>                # stay really quiet here.
>                depend) : ;;
>                *)
>                        [ "$*" = "compile" ] && package-pre-compile
>                        [ "$*" = "postinst" ] && package-post-install
>                ;;
>        esac
>
>Here's some sample code for my small bashrc file.  This is something I pulled 
>from solar's bashrc and adjusted it a bit.  "$*" is all parameters passed to 
>the program.  This means the ebuild stage in this particular case.  So 
>package-pre-compile is run when the compile stage is hit, and 
>package-post-install is run when the postinst stage is hit.  Here, depend is 
>silenced, as ebuilds get depend'ed a LOT, things get kind of noisy.  Now that 
>we know what stages we can run stuff at, let's see what we can do with 
>environmental variables.
>
>ENVIRONMENTAL VARIABLES
>
>Well, first off portage is kind of restrictive.  That said, anything you need 
>to pull from /usr/bin  you're probably going to have to add it to PATH:
>
>        package-post-install() {
>                        PATH=$PATH:/usr/sbin:/usr/bin:/bin:/sbin
>
>As such.  If you have program not found errors, chances are you didn't do 
>this.  So now, what about FEATURES.  That's right,  you can actually use 
>FEATURES as well to cook up some nice stuff.  In my case, I had portage update 
>the whatis database when it's done installing.  This is nice because I'm 
>horribly lazy and wouldn't have the guts to do it manually/add a cron job.  
>Here we go:
>
>                        if has whatis ${FEATURES} && test -x 
> /usr/sbin/makewhatis ; then
>                                echo "*** whatis enabled.  Updating the whatis 
> database..."
>                                # update the whatis database
>                                `makewhatis -u`
>                        fi
>        }
>
>Alright so, remember how I said that bashrc is a mini-ebuild?  Note how you 
>can use the same "has" command that ebuilds can.  This is because we're being 
>sourced from ebuild.sh, and therefore have all its functions.  What does that 
>mean?  That means you get this:
>
>addread
>addwrite
>adddeny
>addpredict
>esyslog
>use
>usev
>useq
>has
>hasv
>hasq
>has_version
>portageq
>best_version
>use_with
>use_enable
>diefunc
>check_KV
>keepdir
>unpack
>strip_duplicate_slashes
>all the stuff described in man 5 ebuild (too lazy to list here)
>killparent
>remove_path_entry
>do_newdepend
>inherit (yes.. you can inherit eclasses.. weird ain't it...)
>debug-print-function
>debug-print-section
>
>And you also notice FEATURES.  It can even do all the nifty portage variables 
>too (default and in /etc/make.conf).  So that's it, with this nice little 
>touch you can do cool customizations to the portage process, without messing 
>with portage code ;).
>
>Chris White
>  
>
I gave this a quick look, and aren't you talking about bash scripts in
general rather then .bashrc files using /etc/portage/bashrc as reference
for this document.
Also I can't see the real use , that's why I started reading then
quickly scanned through it .. and now I'm writting this email ..
-- 
gentoo-dev@gentoo.org mailing list

Reply via email to