[arch-projects] [devtools] [PATCH] add ccache support
Dave Reisner
d at falconindy.com
Tue Jul 30 10:44:18 EDT 2013
On Tue, Jul 30, 2013 at 04:37:50PM +0200, Dominik Heidler wrote:
>
>
>
> On Tue, Jul 30, 2013 at 4:08 PM, Dave Reisner <d at falconindy.com> wrote:
>
> On Tue, Jul 30, 2013 at 03:55:26PM +0200, Dominik Heidler wrote:
> > Signed-off-by: Dominik Heidler <dheidler at gmail.com>
> > ---
> > makechrootpkg.in | 13 ++++++++++++-
> > 1 file changed, 12 insertions(+), 1 deletion(-)
> >
> > diff --git a/makechrootpkg.in b/makechrootpkg.in
> > index d7d3ecf..d4c6abe 100644
> > --- a/makechrootpkg.in
> > +++ b/makechrootpkg.in
> > @@ -21,6 +21,8 @@ run_namcap=false
> > temp_chroot=false
> > chrootdir=
> > passeddir=
> > +ccachedir=
> > +passedccdir=
> > declare -a install_pkgs
> > declare -i ret=0
> >
> > @@ -58,10 +60,11 @@ usage() {
> > echo " Default: $copy"
> > echo '-n Run namcap on the package'
> > echo '-T Build in a temporary directory'
> > + echo '-C <dir> The ccache directory to use'
> > exit 1
> > }
> >
> > -while getopts 'hcur:I:l:nT' arg; do
> > +while getopts 'hcur:I:l:C:nT' arg; do
> > case "$arg" in
> > h) usage ;;
> > c) clean_first=true ;;
> > @@ -71,6 +74,7 @@ while getopts 'hcur:I:l:nT' arg; do
> > l) copy="$OPTARG" ;;
> > n) run_namcap=true; makepkg_args="$makepkg_args -i" ;;
> > T) temp_chroot=true; copy+="-$$" ;;
> > + C) passedccdir="$OPTARG" ;;
> > *) makepkg_args="$makepkg_args -$arg $OPTARG" ;;
> > esac
> > done
> > @@ -84,6 +88,12 @@ chrootdir=$(readlink -e "$passeddir")
> > [[ ! -d $chrootdir ]] && die "No chroot dir defined, or invalid path
> '$passeddir'"
> > [[ ! -d $chrootdir/root ]] && die "Missing chroot dir root directory.
> Try using: mkarchroot $chrootdir/root base-devel"
> >
> > +# Canonicalize ccachedir, getting rid of trailing /
>
> Ok, but why is this necessary? Based on the comment, I'd say you just
> want to make the assignment dir=${dir%/} and readlink is overkill. But,
> I still don't understand why this is needed.
>
> Ranty/semi-offtopic: Comments should explain why, not what. If the
> "what" needs explaining, then your code is probably too complicated. I
> realize bash is an odd case and sometimes the syntax itself needs
> clarification, but that's clearly not the case here.
>
> > +if [[ "$passedccdir" != "" ]]; then
>
> if [[ -z $passedccdir ]]; then ...
>
> > + ccachedir=$(readlink -e "$passedccdir")
> > + [[ ! -d $ccachedir ]] && die "Invalid path '$passedccdir' given for
> ccache directory"
>
> die takes a format string and arguments. please don't inject code into
> the format string.
>
>
> doesn't seem to work here - and is not done that in the script at all
Hrmm... makechrootpkg.in has "m4_include(lib/common.sh)". lib/common.sh
has:
error() {
local mesg=$1; shift
printf "${RED}==> ERROR:${ALL_OFF}${BOLD} ${mesg}${ALL_OFF}\n" "$@" >&2
}
...
die() {
error "$*"
cleanup 1
}
Sigh. die's definition is wrong and must use "$@" instead of "$*". This
*should* work.
>
>
>
> > +fi
> > +
> > # Detect chrootdir filesystem type
> > chroottype=$(stat -f -c %T "$chrootdir")
> >
> > @@ -349,6 +359,7 @@ download_sources
> > if arch-nspawn "$copydir" \
> > --bind-ro="$PWD:/startdir_host" \
> > --bind-ro="$SRCDEST:/srcdest_host" \
> > + ${ccachedir:+"--bind=$ccachedir:/build/.ccache"} \
>
> Why do you modify the ccachedir path? What guarantee is there that this
> extra path exists on top of the user provided directory? I'm not a
> ccache user, but this seems rather unexpected at a glance.
>
>
> The build directory is created by makearchrootpkg and the
> .ccache subdir is automaticly created by systemd-nspawn.
>
> The paths are different, because nobody can't use root's
> .ccache dir and also this allows using different .ccache
> directories for different architectures.
Sorry, I misread this and mentally passed over the colon in the --bind
argument.
>
>
>
> > /chrootbuild
> > then
> > move_products
> > --
> > 1.8.3.4
> >
>
>
More information about the arch-projects
mailing list