User:Sam/ebuild wrapper

From Gentoo Wiki
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()"
}