--- portage-2.2_rc87-orig/bin/ebuild.sh	2010-09-26 21:50:19 +0900
+++ portage-2.2_rc87/bin/ebuild.sh	2010-09-26 21:50:50 +0900
@@ -749,6 +749,19 @@
 	ebuild_phase pre_src_unpack
 	vecho ">>> Unpacking source..."
 	ebuild_phase src_unpack
+	if [ "${EAPI-0}" -lt 2 -a -n "${PORTAGE_PATCHDIR}" -a -d "${PORTAGE_PATCHDIR}/${CATEGORY}/${PN}" ]; then
+		if [ "$(type -t epatch)" == "function" ]; then (
+			vecho ">>> Applying custom patches..."
+			cd "$S"
+			for patch in "${PORTAGE_PATCHDIR}/${CATEGORY}/${PN}"/* \
+	                             "${PORTAGE_PATCHDIR}/${CATEGORY}/${PN}/${PV}"/*; do
+				[ -f "${patch}" ] || continue
+				epatch "${patch}" || die "Failed to apply patch ${patch}"
+			done
+		); else
+			ewarn "Cannot apply custom patches because eutils.eclass is not inherited by the ebuild."
+		fi
+	fi
 	touch "${PORTAGE_BUILDDIR}/.unpacked" || die "IO Failure -- Failed 'touch .unpacked' in ${PORTAGE_BUILDDIR}"
 	vecho ">>> Source unpacked in ${WORKDIR}"
 	ebuild_phase post_src_unpack
@@ -994,6 +1007,19 @@
 	ebuild_phase pre_src_prepare
 	vecho ">>> Preparing source in $PWD ..."
 	ebuild_phase src_prepare
+	if [ "${EAPI-0}" -ge 2 -a -n "${PORTAGE_PATCHDIR}" -a -d "${PORTAGE_PATCHDIR}/${CATEGORY}/${PN}" ]; then
+		if [ "$(type -t epatch)" == "function" ]; then (
+			vecho ">>> Applying custom patches..."
+			cd "$S"
+			for patch in "${PORTAGE_PATCHDIR}/${CATEGORY}/${PN}"/* \
+	                             "${PORTAGE_PATCHDIR}/${CATEGORY}/${PN}/${PV}"/*; do
+				[ -f "${patch}" ] || continue
+				epatch "${patch}" || die "Failed to apply patch ${patch}"
+			done
+		); else
+			ewarn "Cannot apply custom patches because eutils.eclass is not inherited by the ebuild."
+		fi
+	fi
 	touch "$PORTAGE_BUILDDIR"/.prepared
 	vecho ">>> Source prepared."
 	ebuild_phase post_src_prepare
