User:Sam/ebuild wrapper
From Gentoo Wiki
< User:Sam
Jump to:navigation
Jump to:search
I use a small wrapper for ebuild(1)
inspired by slyfox's e. It also makes use of gitify in /etc/portage/bashrc.
I create the following files and add ~/bin to PATH. I also have ~/bin/ebuild as a symlink to ~/bin/e.
FILE
~/bin/ebuild
#!/usr/bin/env bash
# Originally based on https://github.com/trofi/home/blob/ff297b2b6fe51fd0ab226f92c19b5717598b568d/bin%2Fe
# Note that this is used with https://github.com/gentoo-haskell/gentoo-haskell/blob/master/scripts/doc/hacking-tips.rst#gitify-your-ebuilds-in-prepare-phase
# WARNING: Note that there's some weird unicode characters around '!=' which I can't remove from mediawiki, please retype the if statement if copy/pasting!
if [[ $0 == *@(ebuild|/home/sam/bin/ebuild) ]] ; then
# Only gitify ${WORKDIR} if invoked as 'e', not 'ebuild'
export GITIFY=no
fi
# ln -s ~/bin/e ~/bin/e-{asan,ubsan,lto} && chmod +x ~/bin/e-{asan,ubsan,lto}
if [[ $0 == *@(e-asan|/home/sam/bin/e-asan) ]] ; then
export FEATURES="-sandbox -usersandbox nostrip -splitdebug"
export CFLAGS="$(portageq envvar CFLAGS) ${CFLAGS} -ggdb3 -fsanitize=address"
export CXXFLAGS="$(portageq envvar CXXFLAGS) ${CXXFLAGS} -ggdb3 -fsanitize=address"
export LDFLAGS="$(portageq envvar LDFLAGS) ${LDFLAGS} -fsanitize=address"
elif [[ $0 == *@(e-uban|/home/sam/bin/e-ubsan) ]] ; then
#export UBSAN_OPTIONS=print_stacktrace=1
export UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1
export FEATURES="-sandbox -usersandbox nostrip -splitdebug"
export CFLAGS="$(portageq envvar CFLAGS) ${CFLAGS} -ggdb3 -fsanitize=undefined"
export CXXFLAGS="$(portageq envvar CXXFLAGS) ${CXXFLAGS} -ggdb3 -fsanitize=undefined"
export LDFLAGS="$(portageq envvar LDFLAGS) ${LDFLAGS} -fsanitize=undefined"
elif [[ $0 == *@(e-lto|/home/sam/bin/e-lto) ]] ; then
export CFLAGS="$(portageq envvar CFLAGS) ${CFLAGS} -ggdb3 -flto -Werror=strict-aliasing -Werror=lto-type-mismatch"
export CXXFLAGS="$(portageq envvar CXXFLAGS) ${CXXFLAGS} -ggdb3 -flto -Werror=odr -Werror=strict-aliasing -Werror=lto-type-mismatch"
export LDFLAGS="$(portageq envvar LDFLAGS) ${LDFLAGS} -flto -Werror=odr -Werror=strict-aliasing -Werror=lto-type-mismatch"
fi
# https://sourceware.org/bugzilla/show_bug.cgi?id=28728
if [[ ${CC} == clang* ]] ; then
export E_DFLAGS="-ggdb3 -fdebug-default-version=4 -gdwarf-4 ${E_DFLAGS}"
fi
RUSTC_WRAPPER=/usr/bin/sccache \
SCCACHE_DIR=/var/cache/sccache \
SCCACHE_MAX_FRAME_LENGTH=104857600 \
PORTAGE_NICENESS=0 \
PORTAGE_IONICE_COMMAND="true" \
CCACHE_DIR="/var/cache/ccache" \
FEATURES="ccache -test-fail-continue splitdebug compressdebug installsources -nostrip ${FEATURES}" \
CFLAGS="$(portageq envvar CFLAGS) ${CFLAGS} ${E_DFLAGS--ggdb3}" \
CXXFLAGS="$(portageq envvar CXXFLAGS) ${CXXFLAGS} ${E_DFLAGS--ggdb3}" \
FFLAGS="$(portageq envvar FFLAGS) ${FFLAGS} ${E_DFLAGS--ggdb3}" \
FCFLAGS="$(portageq envvar FCFLAGS) ${FCFLAGS} ${E_DFLAGS--ggdb3}" \
LDFLAGS="$(portageq envvar LDFLAGS) ${LDFLAGS} ${E_DFLAGS--ggdb3}" \
GITIFY=${GITIFY-yes} \
PORTAGE_TMPDIR=${PORTAGE_TMPDIR:-/var/tmp} \
exec sudo --preserve-env ebuild "$@"
FILE
/etc/portage/bashrc
# From iwdevtools
source /usr/share/iwdevtools/bashrc
# gitify
# https://github.com/gentoo-haskell/gentoo-haskell/blob/master/scripts/doc/hacking-tips.rst#gitify-your-ebuilds-in-prepare-phase
git_commit_current_state() {
[[ -z ${GITIFY} || ${GITIFY} == "no" ]] && return
pushd "${S}" &> /dev/null
rm -f .gitignore &> /dev/null
git init -q . &> /dev/null
git config --add safe.directory ${PWD} &> /dev/null
git config user.name "Sam James" &> /dev/null
git config user.email "sam@gentoo.org" &> /dev/null
git add . &> /dev/null
git commit -q -a -s -m "$@" &> /dev/null
popd &> /dev/null
}
post_src_unpack() {
git_commit_current_state "state after src_unpack()"
}
post_src_prepare() {
git_commit_current_state "state after src_prepare()"
}