View Raw Ebuild
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
FINDLIB_USE="ocaml"
JAVA_PKG_WANT_SOURCE="1.8"
JAVA_PKG_WANT_TARGET="1.8"
LUA_COMPAT=( lua5-4 )
PYTHON_COMPAT=( python3_{11..14} )
inherit autotools elisp-common findlib java-pkg-opt-2 linux-info lua-single python-r1 tmpfiles toolchain-funcs udev
DESCRIPTION="Daemon that provides access to the Linux/Unix console for a blind person"
HOMEPAGE="https://brltty.app/"
SRC_URI="https://brltty.app/archive/${P}.tar.xz"
LICENSE="LGPL-2.1+"
SLOT="0"
KEYWORDS="~alpha amd64 ~arm arm64 ~loong ~ppc ppc64 ~riscv ~sparc x86"
BINDINGS="emacs java lua ocaml python tcl"
IUSE="+api +beeper bluetooth caps +fm gpm +hid iconv icu louis +midi
ncurses nls +pcm policykit +pcre usb systemd +speech xml X ${BINDINGS}"
REQUIRED_USE="
emacs? ( api )
java? ( api )
lua? ( api ${LUA_REQUIRED_USE} )
ocaml? ( api )
policykit? ( api )
python? ( api ${PYTHON_REQUIRED_USE} )
tcl? ( api )
"
COMMON_DEPEND="
acct-group/brltty
acct-user/brltty
bluetooth? (
net-wireless/bluez:=
sys-apps/dbus
)
caps? ( sys-libs/libcap )
emacs? ( app-editors/emacs:* )
gpm? ( >=sys-libs/gpm-1.20 )
hid? ( virtual/libudev:= )
iconv? ( virtual/libiconv )
icu? ( dev-libs/icu:= )
louis? ( dev-libs/liblouis:= )
midi? ( media-libs/alsa-lib )
ncurses? ( sys-libs/ncurses:0= )
lua? ( ${LUA_DEPS} )
pcm? ( media-libs/alsa-lib )
pcre? ( dev-libs/libpcre2:=[pcre32] )
policykit? (
dev-libs/glib:2
sys-auth/polkit
)
python? (
${PYTHON_DEPS}
dev-python/setuptools[${PYTHON_USEDEP}]
)
speech? (
app-accessibility/espeak-ng
app-accessibility/flite
app-accessibility/speech-dispatcher
)
systemd? ( sys-apps/systemd )
tcl? ( >=dev-lang/tcl-8.6.13-r1:= )
usb? ( virtual/libusb:1 )
xml? ( dev-libs/expat )
X? (
app-accessibility/at-spi2-core:2
dev-libs/glib:2
sys-apps/dbus
x11-libs/libX11
x11-libs/libXaw
x11-libs/libXfixes
x11-libs/libXt
api? ( x11-libs/libXtst )
)
"
DEPEND="
${COMMON_DEPEND}
hid? ( sys-kernel/linux-headers )
java? ( >=virtual/jdk-1.8:* )
X? ( x11-base/xorg-proto )
"
RDEPEND="
${COMMON_DEPEND}
java? ( >=virtual/jre-1.8:* )
"
BDEPEND="
>=dev-lang/tcl-8.6.13-r1
virtual/pkgconfig
nls? ( virtual/libintl )
python? ( dev-python/cython[${PYTHON_USEDEP}] )
"
CONFIG_CHECK="
~INPUT_UINPUT
~INPUT_PCSPKR
"
PATCHES=(
"${FILESDIR}"/${PN}-6.4-respect-AR.patch
"${FILESDIR}"/${PN}-6.8-atspi2_optional.patch
)
pkg_setup() {
linux-info_pkg_setup
# bindings
java-pkg-opt-2_pkg_setup
use lua && lua-single_pkg_setup
use python && python_setup
}
src_prepare() {
default
# api-socket-api is not defined/used if api is not enabled, see bug #878203
if ! use api; then
sed -e '/^d @BRLAPI_SOCKETPATH@/s/^/#/' \
-i Autostart/Systemd/tmpfiles.in || die
fi
java-pkg-opt-2_src_prepare
# We run eautoconf instead of using eautoreconf because brltty uses
# a custom build system that uses autoconf without the rest of the
# autotools.
eautoconf
use python && python_copy_sources
}
src_configure() {
tc-export AR PKG_CONFIG
export JAVAC=
export JAVA_JNI_FLAGS=
if use java; then
export JAVA_HOME="$(java-config -g JAVA_HOME)"
export JAVAC_HOME="${JAVA_HOME}/bin"
export JAVA_JNI_FLAGS="$(java-pkg_get-jni-cflags)"
export JAVAC="$(java-pkg_get-javac) -encoding UTF-8 $(java-pkg_javac-args)"
fi
# see bug #830239, '-n' arg not handled by musl
export brltty_cv_prog_conflibdir="ldconfig"
# Override bindir for backward compatibility.
# Also override localstatedir so that the lib/brltty directory is installed
# correctly.
# Disable stripping since we do that ourselves.
local myconf=(
--bindir="${EPREFIX}"/bin
--htmldir="${EPREFIX}"/usr/share/doc/"${PF}"/html
--localstatedir="${EPREFIX}"/var
--runstatedir="${EPREFIX}"/run
# Python bindings are built separately per-impl
--disable-python-bindings
--disable-stripping
--with-updatable-directory="${EPREFIX}"/var/lib/brltty
--with-writable-directory="${EPREFIX}"/run/brltty
--with-privilege-parameters=lx:user=brltty
$(use_enable api)
$(use_with beeper beep-package)
$(use_with caps pgmprivs-package)
$(use_enable emacs emacs-bindings)
$(use_with fm fm-package)
$(use_enable gpm)
$(use_with hid hid-package)
$(use_enable iconv)
$(use_enable icu)
$(use_enable java java-bindings)
$(use_enable louis liblouis)
$(use_enable lua lua-bindings)
$(use_with midi midi-package)
$(use_enable nls i18n)
$(use_enable ocaml ocaml-bindings)
$(use_with pcm pcm-package)
$(use_enable policykit polkit)
$(use_with pcre rgx-package)
$(use_enable speech speech-support)
$(use_with systemd service-package)
$(use_enable tcl tcl-bindings)
$(use_enable xml expat)
$(use_enable X x)
$(use_with bluetooth bluetooth-package)
$(use_with ncurses curses)
$(use_with usb usb-package)
)
# disable espeak since we use espeak-ng
use speech && myconf+=( --with-speech-driver=-es )
econf "${myconf[@]}"
if use python; then
python_configure() {
econf "${myconf[@]}" --enable-python-bindings PYTHON="${PYTHON}"
}
python_foreach_impl run_in_build_dir python_configure
fi
}
src_compile() {
emake -j1 JAVA_JNI_FLAGS="${JAVA_JNI_FLAGS}" JAVAC="${JAVAC}"
use emacs && elisp-compile Bindings/Emacs/add_directory.el
if use python; then
python_build() {
emake -C "${BUILD_DIR}"/Bindings/Python -j1
}
python_foreach_impl run_in_build_dir python_build
fi
}
src_install() {
use ocaml && findlib_src_preinst
# install-extras for locales, metainfo, polkit rules, systemd-files, udev rules
emake -j1 INSTALL_ROOT="${D}" OCAML_LDCONF= install install-extras
use emacs && elisp-install ${PN} Bindings/Emacs/add_directory.el{,c}
if use python; then
python_install() {
emake -C "${BUILD_DIR}"/Bindings/Python -j1 INSTALL_ROOT="${D}" install
rm -r "${D}/$(python_get_sitedir)"/*.egg-info || die
}
python_foreach_impl run_in_build_dir python_install
fi
if use java; then
java-pkg_doso Bindings/Java/libbrlapi_java.so
java-pkg_dojar Bindings/Java/brlapi.jar
fi
insinto /etc
doins Documents/brltty.conf
newinitd "${FILESDIR}"/brltty.initd-r1 brltty
local DOCS=( Documents/{CONTRIBUTORS,ChangeLog,HISTORY,README*,TODO} doc/Manual-BRLTTY )
local HTML_DOCS=( doc/*.html )
use api && DOCS+=( Documents/Manual-BrlAPI/English/BrlAPI.sgml )
einstalldocs
keepdir /var/lib/BrlAPI
rm -fr "${ED}/run" || die
find "${ED}" -name '*.a' -delete || die
}
pkg_postinst() {
use emacs && elisp-site-regen
tmpfiles_process ${PN}.conf
udev_reload
elog "please be sure ${EROOT}/etc/brltty.conf is correct for your system."
elog
if use systemd; then
elog "To make brltty start on boot on systemd system, type these commands:"
elog "# systemctl daemon-reload"
elog "# systemctl enable brltty.path"
elog "To launch manually:"
elog "# systemctl start brltty.path"
elog "Don't try brltty.service"
else
elog "To make brltty start on boot on an OpenRC system, type this command:"
elog "# rc-update add brltty boot"
elog "To launch manually:"
elog "# rc-service brltty start"
fi
if use caps; then
elog "To launch brltty as an unprivileged user, please refer to:"
elog "${EROOT}/usr/share/doc/${PF}/README.Linux#Assigning Capabilities to the Executable"
fi
}
pkg_postrm() {
udev_reload
}