# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PLOCALES="af ar ast be bg bn bs ca ckb cs da de el en_AU en_CA en_GB eo es et eu fa fi fr ga gl grc he hi hr hu ia id ie it ja ka kk kn ko ku ky lt lv ml ms my nb nds nl nn pl pt pt_BR ro ru se si sk sl sq sr sv ta te th tr ug uk uz vi yi zh_CN zh_TW"
DISTUTILS_USE_PEP517=setuptools
PYTHON_COMPAT=( python3_{13..14} )
PYTHON_REQ_USE="sqlite(+)"
DISTUTILS_SINGLE_IMPL=1
inherit desktop distutils-r1 plocale git-r3 virtualx
DESCRIPTION="Clean junk to free disk space and to maintain privacy"
HOMEPAGE="https://www.bleachbit.org/"
EGIT_REPO_URI="https://github.com/${PN}/${PN}.git"
LICENSE="GPL-3"
SLOT="0"
KEYWORDS=""
RDEPEND="
$(python_gen_cond_dep '
dev-python/chardet[${PYTHON_USEDEP}]
dev-python/psutil[${PYTHON_USEDEP}]
dev-python/pygobject:3[${PYTHON_USEDEP}]
')
x11-libs/gtk+:3
"
BDEPEND="
sys-devel/gettext
"
distutils_enable_tests unittest
python_prepare_all() {
distutils-r1_python_prepare_all
if use test; then
sed -e "s:'strings':'$(tc-getSTRINGS)':g" \
-i tests/TestWipePath.py || die
# avoid tests requiring internet access
rm tests/Test{Chaff,GuiChaff,Network,Update}.py || die
sed -e "s/test_chaff(self)/_&/" \
-i tests/TestGUI.py || die
# fails due to non-existent $HOME/.profile
rm tests/TestInit.py || die
# fails due to permission error on /proc
sed -e "s/test_make_self_oom_target_linux(self)/_&/" \
-i tests/TestMemory.py || die
# only applicable to Windows
rm tests/{TestNsisUtilities,TestWindows}.py || die
# slow test (50s)
sed -e "s/test_notify(self)/_&/" \
-i tests/TestGUI.py || die
# random failures, some also on upstream CI
sed -e "s/test_get_proc_swaps(self)/_&/" \
-i tests/TestMemory.py || die
sed -e "s/test_is_process_running(self)/_&/" \
-i tests/TestUnix.py || die
# Fails if user has filesystems outside of the accepted subset
# ['btrfs', 'ext4', 'ext3', 'squashfs', 'unknown']
# This is an issue for example if you use xfs.
# Instead of adding every possible filesystem lets just skip it.
sed -e "s/test_get_filesystem_type(self)/_&/" \
-i tests/TestFileUtilities.py || die
# Assumes loginshell is the uid.
sed -e "s/test_get_real_uid(self)/_&/" \
-i tests/TestGeneral.py || die
fi
rem_locale() {
rm -fv "po/${1}.po" || die "removing of ${1}.po failed"
}
plocale_find_changes po "" ".po"
plocale_for_each_disabled_locale rem_locale
}
python_compile_all() {
emake -C po local
}
python_test() {
# use a hardcoded valid code, some tests may fail with accent (pt, fr, ck ...)
# tests.TestGuiStartup.GuiStartupTestCase.test_first_start_message_clears_flag
# tests.TestGuiStartup.GuiStartupTestCase.test_upgrade_message_shown_for_pre_510
# tests.TestWinapp.WinappTestCase.test_section_not_found
export LC_ALL="C.UTF-8"
virtx eunittest -p Test*.py
}
python_install() {
distutils-r1_python_install
python_newscript ${PN}.py ${PN}
}
python_install_all() {
# reproduce the install phase from Makefile, not adapted for python_sitedir
distutils-r1_python_install_all
emake -C po DESTDIR="${D}" install
insinto /usr/share/${PN}/cleaners
doins cleaners/*.xml
insinto /usr/share/${PN}
doins share/*
insinto /usr/share/metainfo
doins org.${PN}.BleachBit.metainfo.xml
insinto /usr/share/polkit-1/actions
doins org.${PN}.policy
dodoc doc/*
doicon ${PN}.png
domenu org.${PN}.BleachBit.desktop
}