commit:     683a12b88aafd0832e8ac60e7421e8a9c3e8b4bc
Author:     Nicolas PARLANT <nicolas.parlant <AT> parhuet <DOT> fr>
AuthorDate: Mon Jan 12 13:22:28 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Jan 14 13:43:44 2026 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=683a12b8

app-accessibility/brltty: add 6.8

license is LGPL-2.1+

useflags/deps :
add lua for lua bindings
add emacs for emacs bindings
add caps w/ libcap
make pcre optional
make hid optional (needs libudev and linux-headers)
policykit requires api
add xorg-proto for X (keysyms.h)
make at-spi2-core optional with X requirement
remove doc, always installed

caps is not enabled by default: it requires many capabilities and the default
behavior just works by dropping privileges after being launched as root.

brltty checks the kernel modules pcspkr and uinput, so add CONFIG_CHECK

export LD is no longer required
define ldconfig instead of ldconfig -n to fix musl
remove egg-info files

patch the tmpfile if api is not enabled

call udev_reload for rules provided

new initd with the PIDFILE owned by root
use install-extras to install locales, udev, polkit, systemd, metainfo files

Closes: https://bugs.gentoo.org/732614
Closes: https://bugs.gentoo.org/805287
Closes: https://bugs.gentoo.org/830239
Closes: https://bugs.gentoo.org/845207
Closes: https://bugs.gentoo.org/878203
Closes: https://bugs.gentoo.org/923275
Signed-off-by: Nicolas PARLANT <nicolas.parlant <AT> parhuet.fr>
Part-of: https://github.com/gentoo/gentoo/pull/45371
Closes: https://github.com/gentoo/gentoo/pull/45371
Signed-off-by: Sam James <sam <AT> gentoo.org>

 app-accessibility/brltty/Manifest                  |   1 +
 app-accessibility/brltty/brltty-6.8.ebuild         | 284 +++++++++++++++++++++
 .../brltty/files/brltty-6.8-atspi2_optional.patch  |  46 ++++
 app-accessibility/brltty/files/brltty.initd-r1     |  13 +
 app-accessibility/brltty/metadata.xml              |   1 +
 5 files changed, 345 insertions(+)

diff --git a/app-accessibility/brltty/Manifest 
b/app-accessibility/brltty/Manifest
index b129bc335344..df89fbc83513 100644
--- a/app-accessibility/brltty/Manifest
+++ b/app-accessibility/brltty/Manifest
@@ -1 +1,2 @@
 DIST brltty-6.7.tar.xz 3727940 BLAKE2B 
61ef2d5e54a53132fe9e864c6c7c8c5ee7af4974fb1a090d9366fbdf7fe0735ca0a4c462cef2fa820d07335f442471af148707a191bb1d631f203ddc5e8f5d2e
 SHA512 
68ef75369ce2a23dff17b212aec0844b5e3e416cc730bdf872d68f32b0d8398f86d1e91f076dcb1730543c3d47266a40d7d61842524076d2fd4e82ef95bc34bb
+DIST brltty-6.8.tar.xz 3901252 BLAKE2B 
ba37436d159ead52a4c78b078bc7291f618f864f87fe2368ef833134876a6bde36a36753c8cfd0c9ed36484f74cf69dd3d47876cbba08e29c2ec1258c1a6cc43
 SHA512 
08540cdf09eaa1caabd8400cb6e589f99f5f2b8aaaf8c031e5165e9b0605858e90dc9dd72f2095347f4860714214ecf184e3675422df880f1bf06bb4cc6f42ee

diff --git a/app-accessibility/brltty/brltty-6.8.ebuild 
b/app-accessibility/brltty/brltty-6.8.ebuild
new file mode 100644
index 000000000000..8f60c3f083eb
--- /dev/null
+++ b/app-accessibility/brltty/brltty-6.8.ebuild
@@ -0,0 +1,284 @@
+# 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 ~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
+}

diff --git a/app-accessibility/brltty/files/brltty-6.8-atspi2_optional.patch 
b/app-accessibility/brltty/files/brltty-6.8-atspi2_optional.patch
new file mode 100644
index 000000000000..48520b7cf841
--- /dev/null
+++ b/app-accessibility/brltty/files/brltty-6.8-atspi2_optional.patch
@@ -0,0 +1,46 @@
+Avoid automagic for atspi-2
+PR pending https://github.com/brltty/brltty/pull/513
+--- a/configure.ac
++++ b/configure.ac
+@@ -1921,27 +1921,27 @@ then
+          ])
+       ])
+    ], [:])
+-fi
+ 
+-BRLTTY_IF_DBUS([dnl
+-   AC_CHECK_HEADER([X11/keysym.h], [dnl
+-      BRLTTY_HAVE_PACKAGE([atspi2], [atspi-2], [dnl
+-         brltty_cppflags_save="${CPPFLAGS}"
+-         CPPFLAGS="${CPPFLAGS} ${atspi2_cflags}"
+-         BRLTTY_SCREEN_DRIVER([a2], [AtSpi2], [$(DBUS_LIBS) $(ATSPI2_LIBS) 
$(GLIB2_LIBS) $(X11_LIBS) $(XFIXES_LIBS)])
++   BRLTTY_IF_DBUS([dnl
++      AC_CHECK_HEADER([X11/keysym.h], [dnl
++         BRLTTY_HAVE_PACKAGE([atspi2], [atspi-2], [dnl
++            brltty_cppflags_save="${CPPFLAGS}"
++            CPPFLAGS="${CPPFLAGS} ${atspi2_cflags}"
++            BRLTTY_SCREEN_DRIVER([a2], [AtSpi2], [$(DBUS_LIBS) $(ATSPI2_LIBS) 
$(GLIB2_LIBS) $(X11_LIBS) $(XFIXES_LIBS)])
+ 
+-         brltty_libs_save="${LIBS}"
+-         LIBS="${atspi2_libs} ${LIBS}"
++            brltty_libs_save="${LIBS}"
++            LIBS="${atspi2_libs} ${LIBS}"
+ 
+-         AC_CHECK_FUNCS([atspi_get_a11y_bus])
++            AC_CHECK_FUNCS([atspi_get_a11y_bus])
+ 
+-         CPPFLAGS="${brltty_cppflags_save}"
+-         LIBS="${brltty_libs_save}"
++            CPPFLAGS="${brltty_cppflags_save}"
++            LIBS="${brltty_libs_save}"
+ 
+-         BRLTTY_HAVE_PACKAGE([glib2], [glib-2.0])
++            BRLTTY_HAVE_PACKAGE([glib2], [glib-2.0])
++         ])
+       ])
+    ])
+-])
++fi
+ 
+ BRLTTY_ARG_DRIVER([screen], [Screen])
+ BRLTTY_SUMMARY_ITEM([screen-driver], [default_screen_driver])

diff --git a/app-accessibility/brltty/files/brltty.initd-r1 
b/app-accessibility/brltty/files/brltty.initd-r1
new file mode 100644
index 000000000000..8b53a43f4a4b
--- /dev/null
+++ b/app-accessibility/brltty/files/brltty.initd-r1
@@ -0,0 +1,13 @@
+#!/sbin/openrc-run
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+command=/bin/brltty
+command_args="--no-daemon --quiet ${EXTRA_OPTS}"
+command_background=true
+pidfile="/run/${RC_SVCNAME}.pid"
+retry="TERM/60/KILL/5"
+
+depend() {
+       after dbus localmount udev
+}

diff --git a/app-accessibility/brltty/metadata.xml 
b/app-accessibility/brltty/metadata.xml
index 7a6c5b4307bf..0f7c4cbd67aa 100644
--- a/app-accessibility/brltty/metadata.xml
+++ b/app-accessibility/brltty/metadata.xml
@@ -9,6 +9,7 @@
   <flag name="api">build brltty's application program interface</flag>
   <flag name="beeper">support the console tone generator</flag>
   <flag name="fm">support for the sound card synthesizer</flag>
+  <flag name="hid">support for opening and closing a HID device</flag>
   <flag name="louis">Use braille translator <pkg>dev-libs/liblouis</pkg></flag>
   <flag name="midi">support the musical instrument digital interface</flag>
   <flag name="pcm">support for sound card digital audio</flag>

Reply via email to