сам боюсь, но есть вот такое для icc и прочего - по поводу env.d хочу сделать по-другому, но потом
#!/bin/bash
#CFLAGS
if [ "$counttt" != "1" ]; then
if [ -f /etc/portage/env.d/${CATEGORY}/${PN} ]; then
for MY_ENV in ${PN} ${P} ${PF}; do
if [ -f /etc/portage/env.d/${CATEGORY}/${MY_ENV} ]; then
. /etc/portage/env.d/${CATEGORY}/${MY_ENV}
export CXXFLAGS="${CFLAGS}"
fi
done
fi
export counttt="1"
fi
#PGO
PROFILE_GEN="$CFLAGS -fprofile-generate -fprofile-arcs -ftest-coverage -fprofile-dir=/var/tmp/PGO/$CATEGORY/$PF"
PROFILE_USE="$CFLAGS -fprofile-use -fprofile-correction -lgcov -Wcoverage-mismatch -fprofile-dir=/var/tmp/PGO/$CATEGORY/$PF"
if [ -f /etc/portage/package.pgo ]; then
while read -a target; do
if [ "${target}" = "${CATEGORY}/${PN}" ]; then
if [ -d "/var/tmp/PGO/$CATEGORY/$PF" ]; then
if [ "$count" != "1" ]; then
if [ "$countt" != "1" ]; then export CFLAGS="$PROFILE_USE" && export CXXFLAGS="$PROFILE_USE"&& export countt="1"
fi
fi
else
if [ "$count" != "1" ]; then
if [ "$countt" != "1" ]; then export CFLAGS="$PROFILE_GEN" && export CXXFLAGS="$PROFILE_GEN"&& export count="1"
fi
fi
fi
fi
done < /etc/portage/package.pgo
fi
#ICC
if [ -f /etc/portage/package.icc ]; then
[ -r ${ROOT}/etc/portage/package.icc ] || return 0
while read -a target; do
if [ "${target}" = "${CATEGORY}/${PN}" ]; then
export OCC="icc"
export OCXX="icpc"
export CFLAGS="${ICCCFLAGS}"
export CXXFLAGS="${ICCCXXFLAGS}"
if [ -r ${ROOT}/etc/portage/package.icc-cflags ]; then
while read target flags; do
if [ "${target}" = "${CATEGORY}/${PN}" ]; then
export CFLAGS="$flags"
export CXXFLAGS="$flags"
break
fi
done < ${ROOT}/etc/portage/package.icc-cflags
fi
export CC_FOR_BUILD="${OCC}"
return 0
fi
done < ${ROOT}/etc/portage/package.icc
fi
#PATCHES
pre_src_configure() {
src_autopatcher
}
src_autopatcher() {
# Specify a directory for patches.
PATCH_DIR="/var/portage/patches"
PATCH_OPTS="-g0 -E --no-backup-if-mismatch"
local count=0
if [ -d "${PATCH_DIR}/${CATEGORY}/${PN}" ]; then
for PATCH in $(find "${PATCH_DIR}/${CATEGORY}/${PN}" -type f -name "*.patch"|sort)
do
einfo "Patching ${PATCH/*\//} ..."
while [[ ${count} -lt 5 ]]; do
if (patch -p${count} ${PATCH_OPTS} --dry-run -f < "${PATCH}") >/dev/null; then
patch -p${count} ${PATCH_OPTS} < "${PATCH}" >/dev/null
break
fi
(( count++ ))
done
if [[ ${count} -ge 5 ]] ; then
eerror "Failed Patch: ${PATCH/*\//} !"
die "Failed Patch: ${PATCH/*\//} !"
fi
done
fi
}
#STUFF
post_src_configure() {
echo -e "\n \n \n \n \n\033[0;0;1;33mCFLAGS=\033[0;0;1;32m\"$(echo $CFLAGS)\"\033[0m \n"
echo -e "\n\033[0;0;1;33mCXXFLAGS=\033[0;0;1;32m\"$(echo $CXXFLAGS)\"\033[0m \n \n \n \n \n"
}
MAKEOPTS="-j1" для PGO только нужно еще, это не строго обязательно, но если собираются какие-нибудь программы и запускаются в процессе сборки пакета, то будут коллизии.
#!/bin/bash
#CFLAGS
if [ "$counttt" != "1" ]; then
if [ -f /etc/portage/env.d/${CATEGORY}/${PN} ]; then
for MY_ENV in ${PN} ${P} ${PF}; do
if [ -f /etc/portage/env.d/${CATEGORY}/${MY_ENV} ]; then
. /etc/portage/env.d/${CATEGORY}/${MY_ENV}
export CXXFLAGS="${CFLAGS}"
fi
done
fi
export counttt="1"
fi
#PGO
PROFILE_GEN="$CFLAGS -fprofile-generate -ftest-coverage -fprofile-dir=/var/tmp/PGO/$CATEGORY/$PF"
PROFILE_USE="$CFLAGS -fprofile-use -fprofile-correction -Wcoverage-mismatch -fprofile-dir=/var/tmp/PGO/$CATEGORY/$PF"
if [ -f /etc/portage/package.pgo ]; then
while read -a target; do
if [ "${target}" = "${CATEGORY}/${PN}" ]; then
if [ -d "/var/tmp/PGO/$CATEGORY/$PF" ]; then
if [ "$count" != "1" ]; then
if [ "$countt" != "1" ]; then export CFLAGS="$PROFILE_USE" && export CXXFLAGS="$PROFILE_USE" && export MAKEOPTS="-j1" && export countt="1"
fi
fi
else
if [ "$count" != "1" ]; then
if [ "$countt" != "1" ]; then export CFLAGS="$PROFILE_GEN" && export CXXFLAGS="$PROFILE_GEN" && export MAKEOPTS="-j1" && export count="1"
fi
fi
fi
fi
done < /etc/portage/package.pgo
fi
#ICC
if [ -f /etc/portage/package.icc ]; then
[ -r ${ROOT}/etc/portage/package.icc ] || return 0
while read -a target; do
if [ "${target}" = "${CATEGORY}/${PN}" ]; then
export OCC="icc"
export OCXX="icpc"
export CFLAGS="${ICCCFLAGS}"
export CXXFLAGS="${ICCCXXFLAGS}"
if [ -r ${ROOT}/etc/portage/package.icc-cflags ]; then
while read target flags; do
if [ "${target}" = "${CATEGORY}/${PN}" ]; then
export CFLAGS="$flags"
export CXXFLAGS="$flags"
break
fi
done < ${ROOT}/etc/portage/package.icc-cflags
fi
export CC_FOR_BUILD="${OCC}"
return 0
fi
done < ${ROOT}/etc/portage/package.icc
fi
#PATCHES
pre_src_configure() {
src_autopatcher
}
src_autopatcher() {
# Specify a directory for patches.
PATCH_DIR="/var/portage/patches"
PATCH_OPTS="-g0 -E --no-backup-if-mismatch"
local count=0
if [ -d "${PATCH_DIR}/${CATEGORY}/${PN}" ]; then
for PATCH in $(find "${PATCH_DIR}/${CATEGORY}/${PN}" -type f -name "*.patch"|sort)
do
einfo "Patching ${PATCH/*\//} ..."
while [[ ${count} -lt 5 ]]; do
if (patch -p${count} ${PATCH_OPTS} --dry-run -f < "${PATCH}") >/dev/null; then
patch -p${count} ${PATCH_OPTS} < "${PATCH}" >/dev/null
break
fi
(( count++ ))
done
if [[ ${count} -ge 5 ]] ; then
eerror "Failed Patch: ${PATCH/*\//} !"
die "Failed Patch: ${PATCH/*\//} !"
fi
done
fi
}
#COMPILERS
if [ -r ${ROOT}/etc/portage/package.compilers ]; then
while read target ver; do
if [ "${target}" = "${CATEGORY}/${PN}" ]; then
export PATH="/usr/i686-pc-linux-gnu/gcc-bin/$ver:$PATH"
fi
done < ${ROOT}/etc/portage/package.compilers
fi
#STUFF
post_src_configure() {
echo -e "\n \n \n \n \n\033[0;0;1;33mCFLAGS=\033[0;0;1;32m\"$(echo $CFLAGS)\"\033[0m \n"
echo -e "\n\033[0;0;1;33mCXXFLAGS=\033[0;0;1;32m\"$(echo $CXXFLAGS)\"\033[0m \n \n \n \n \n"
}