commit 72788f64e9603639ea2d72a8de2b8b4849831836 Author: CentOS Sources Date: Tue May 7 06:19:07 2019 -0400 import brltty-5.6-28.el8 diff --git a/.brltty.metadata b/.brltty.metadata new file mode 100644 index 0000000..ca1af6b --- /dev/null +++ b/.brltty.metadata @@ -0,0 +1 @@ +bc148de37b3f8bb93bebaa83008b712e427a8baf SOURCES/brltty-5.6.tar.xz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..12ed6b4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/brltty-5.6.tar.xz diff --git a/SOURCES/0001-Add-support-for-eSpeak-NG.patch b/SOURCES/0001-Add-support-for-eSpeak-NG.patch new file mode 100644 index 0000000..9fcb4de --- /dev/null +++ b/SOURCES/0001-Add-support-for-eSpeak-NG.patch @@ -0,0 +1,549 @@ +From 6df30ecf05440a1a0f197817d3e39c15d04f15c0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= +Date: Wed, 28 Feb 2018 22:49:07 +0100 +Subject: [PATCH] Add support for eSpeak-NG + +It is mostly a copy of the eSpeak driver. + +Squashed with Dave Mielke's commit: +Some modifications to the introduction of the eSpeak-NG speech driver: (dm) + +Fix the order of lists that are alphabetically sorted by driver code. +Undo the changes to the derived Portuguese documents. +--- + Documents/CONTRIBUTORS | 1 + + Documents/Manual-BRLTTY/English/driver-codes.sgml | 1 + + .../Manual-BRLTTY/English/speech-drivers.sgml | 2 + + Documents/Manual-BRLTTY/French/driver-codes.sgml | 1 + + Documents/Manual-BRLTTY/French/speech-drivers.sgml | 2 + + Documents/README.DOS | 5 +- + Documents/brltty.1.in | 3 + + Documents/brltty.conf.in | 7 + + Documents/speech-driver.csv | 1 + + Drivers/Speech/eSpeak-NG/Makefile.in | 29 ++++ + Drivers/Speech/eSpeak-NG/README | 34 ++++ + Drivers/Speech/eSpeak-NG/speech.c | 174 +++++++++++++++++++++ + README | 1 + + brltty.spec.in | 25 +++ + cfg-android | 1 + + cfg-darwin | 1 + + cfg-dos | 1 + + config.mk.in | 1 + + configure.ac | 4 + + 19 files changed, 292 insertions(+), 2 deletions(-) + create mode 100644 Drivers/Speech/eSpeak-NG/Makefile.in + create mode 100644 Drivers/Speech/eSpeak-NG/README + create mode 100644 Drivers/Speech/eSpeak-NG/speech.c + +diff --git a/Documents/CONTRIBUTORS b/Documents/CONTRIBUTORS +index 5a3af85b8..282ea193a 100644 +--- a/Documents/CONTRIBUTORS ++++ b/Documents/CONTRIBUTORS +@@ -50,6 +50,7 @@ Nikita Tseykovets + Ole Guldberg + Olivier Bert + Ollie Mallard ++olysonek + Oscar Fernandez + Pete De Vasto + Peter Lundblad +diff --git a/Documents/Manual-BRLTTY/English/driver-codes.sgml b/Documents/Manual-BRLTTY/English/driver-codes.sgml +index 09eae4039..870cde7e3 100644 +--- a/Documents/Manual-BRLTTY/English/driver-codes.sgml ++++ b/Documents/Manual-BRLTTY/English/driver-codes.sgml +@@ -10,6 +10,7 @@ bm|Baum (Native, HT, PB1, PB2)@ + bn|BrailleNote@ + cb|CombiBraille@ + ec|EcoBraille@ ++en|eSpeak-NG@ + es|eSpeak@ + eu|EuroBraille@ + fl|FestivalLite@ +diff --git a/Documents/Manual-BRLTTY/English/speech-drivers.sgml b/Documents/Manual-BRLTTY/English/speech-drivers.sgml +index 49caa060f..66c66e850 100644 +--- a/Documents/Manual-BRLTTY/English/speech-drivers.sgml ++++ b/Documents/Manual-BRLTTY/English/speech-drivers.sgml +@@ -8,6 +8,8 @@ CombiBraille + |@ + eSpeak + |text to speech engine@ ++eSpeak-NG ++ |text to speech engine@ + ExternalSpeech + |runs /usr/local/bin/externalspeech@ + Festival +diff --git a/Documents/Manual-BRLTTY/French/driver-codes.sgml b/Documents/Manual-BRLTTY/French/driver-codes.sgml +index 09eae4039..870cde7e3 100644 +--- a/Documents/Manual-BRLTTY/French/driver-codes.sgml ++++ b/Documents/Manual-BRLTTY/French/driver-codes.sgml +@@ -10,6 +10,7 @@ bm|Baum (Native, HT, PB1, PB2)@ + bn|BrailleNote@ + cb|CombiBraille@ + ec|EcoBraille@ ++en|eSpeak-NG@ + es|eSpeak@ + eu|EuroBraille@ + fl|FestivalLite@ +diff --git a/Documents/Manual-BRLTTY/French/speech-drivers.sgml b/Documents/Manual-BRLTTY/French/speech-drivers.sgml +index 9d079b6c6..ede82d398 100644 +--- a/Documents/Manual-BRLTTY/French/speech-drivers.sgml ++++ b/Documents/Manual-BRLTTY/French/speech-drivers.sgml +@@ -6,6 +6,8 @@ CombiBraille + |@ + eSpeak + |text to speech engine@ ++eSpeak-NG ++ |text to speech engine@ + ExternalSpeech + |runs /usr/local/bin/externalspeech@ + Festival +diff --git a/Documents/README.DOS b/Documents/README.DOS +index eca9540ec..5b5de15c4 100644 +--- a/Documents/README.DOS ++++ b/Documents/README.DOS +@@ -285,8 +285,9 @@ You should be able to use a configure command like this one:: + --disable-api --disable-icu --disable-x \ + --without-usb-package --without-bluetooth-package \ + --without-libbraille --with-braille-driver=-vr,all \ +- --without-espeak --without-flite \ +- --without-speechd --with-speech-driver=all \ ++ --without-espeak --without-espeak-ng \ ++ --without-flite --without-speechd \ ++ --with-speech-driver=all \ + --with-screen-driver=pb,-all + + The ``cfg-dos`` Script +diff --git a/Documents/brltty.1.in b/Documents/brltty.1.in +index ab7b3c1db..b95aaa964 100644 +--- a/Documents/brltty.1.in ++++ b/Documents/brltty.1.in +@@ -714,6 +714,9 @@ CombiBraille + .B ec + EcoBraille + .TP 4 ++.B en ++eSpeak-NG ++.TP 4 + .B es + eSpeak + .TP 4 +diff --git a/Documents/brltty.conf.in b/Documents/brltty.conf.in +index e11273674..80967177a 100644 +--- a/Documents/brltty.conf.in ++++ b/Documents/brltty.conf.in +@@ -343,6 +343,7 @@ + #speech-driver an # Android (text to speech engine) + #speech-driver bl # BrailleLite + #speech-driver cb # CombiBraille ++#speech-driver en # eSpeak-NG (text to speech engine) + #speech-driver es # eSpeak (text to speech engine) + #speech-driver fl # FestivalLite (text to speech engine) + #speech-driver fv # Festival (text to speech engine) +@@ -383,6 +384,12 @@ + #speech-parameters es:PunctList= + #speech-parameters es:Voice=default + ++# eSpeak-NG Speech Driver Parameters ++#speech-parameters en:MaxRate=450 # [80-] ++#speech-parameters en:Path= ++#speech-parameters en:PunctList= ++#speech-parameters en:Voice=en ++ + # ExternalSpeech Speech Driver Parameters + #speech-parameters xs:Program=/usr/local/bin/externalspeech + #speech-parameters xs:Uid=65534 +diff --git a/Documents/speech-driver.csv b/Documents/speech-driver.csv +index 2e339a6bf..b56e85cbf 100644 +--- a/Documents/speech-driver.csv ++++ b/Documents/speech-driver.csv +@@ -4,6 +4,7 @@ + "bl","BrailleLite" + "cb","CombiBraille" + "es","eSpeak (text to speech engine)" ++"en","eSpeak-NG (text to speech engine)" + "fl","FestivalLite (text to speech engine)" + "fv","Festival (text to speech engine)" + "gs","GenericSay (pipes to /usr/local/bin/say)" +diff --git a/Drivers/Speech/eSpeak-NG/Makefile.in b/Drivers/Speech/eSpeak-NG/Makefile.in +new file mode 100644 +index 000000000..d91f9c59d +--- /dev/null ++++ b/Drivers/Speech/eSpeak-NG/Makefile.in +@@ -0,0 +1,29 @@ ++############################################################################### ++# BRLTTY - A background process providing access to the console screen (when in ++# text mode) for a blind person using a refreshable braille display. ++# ++# Copyright (C) 1995-2018 by The BRLTTY Developers. ++# ++# BRLTTY comes with ABSOLUTELY NO WARRANTY. ++# ++# This is free software, placed under the terms of the ++# GNU Lesser General Public License, as published by the Free Software ++# Foundation; either version 2.1 of the License, or (at your option) any ++# later version. Please see the file LICENSE-LGPL for details. ++# ++# Web Page: http://brltty.com/ ++# ++# This software is maintained by Dave Mielke . ++############################################################################### ++ ++DRIVER_CODE = en ++DRIVER_NAME = eSpeak-NG ++DRIVER_COMMENT = text to speech engine ++DRIVER_VERSION = 0.1 ++DRIVER_DEVELOPERS = Nicolas Pitre , Ondřej Lysoněk ++SPK_OBJS = @speech_libraries_en@ ++include $(SRC_TOP)speech.mk ++ ++speech.$O: ++ $(CC) $(SPK_CFLAGS) -I$(ESPEAK_NG_ROOT)/include -c $(SRC_DIR)/speech.c ++ +diff --git a/Drivers/Speech/eSpeak-NG/README b/Drivers/Speech/eSpeak-NG/README +new file mode 100644 +index 000000000..825848aa0 +--- /dev/null ++++ b/Drivers/Speech/eSpeak-NG/README +@@ -0,0 +1,34 @@ ++This directory contains the BRLTTY speech driver for the eSpeak-NG text to ++speech engine. The eSpeak-NG web site is ++https://github.com/espeak-ng/espeak-ng/. ++ ++eSpeak-NG comes with a simple command-line tool called espeak-ng which can be ++used to test it, and to recompile modified dictionaries, etc. Please see ++the espeak-ng man page for more information. ++ ++BRLTTY's configure script automatically includes this driver if the ++eSpeak-NG development library is installed. ++ ++This driver recognizes the following parameters: ++ ++path ++ ++ Specifies the directory containing the espeak-ng-data directory. ++ If not specified, the default location is used. ++ ++punctlist ++ ++ Specified a list of punctuation characters whose names are to be ++ spoken when the speech punctuation parameter is set to "Some". ++ If not specified, a default list is used. ++ ++voice ++ ++ Specifies a voice/language to use. The complete list of available ++ voices may be obtained with the command 'espeak-ng --voices'. ++ ++maxrate ++ ++ Overrides the maximum speech rate value. The default is 450. ++ This cannot be lower than 80. ++ +diff --git a/Drivers/Speech/eSpeak-NG/speech.c b/Drivers/Speech/eSpeak-NG/speech.c +new file mode 100644 +index 000000000..af918c971 +--- /dev/null ++++ b/Drivers/Speech/eSpeak-NG/speech.c +@@ -0,0 +1,174 @@ ++/* ++ * BRLTTY - A background process providing access to the console screen (when in ++ * text mode) for a blind person using a refreshable braille display. ++ * ++ * Copyright (C) 1995-2018 by The BRLTTY Developers. ++ * ++ * BRLTTY comes with ABSOLUTELY NO WARRANTY. ++ * ++ * This is free software, placed under the terms of the ++ * GNU Lesser General Public License, as published by the Free Software ++ * Foundation; either version 2.1 of the License, or (at your option) any ++ * later version. Please see the file LICENSE-LGPL for details. ++ * ++ * Web Page: http://brltty.com/ ++ * ++ * This software is maintained by Dave Mielke . ++ */ ++ ++#include "prologue.h" ++ ++#include ++#include ++#include ++ ++#include "log.h" ++#include "parse.h" ++ ++typedef enum { ++ PARM_PATH, ++ PARM_PUNCTLIST, ++ PARM_VOICE, ++ PARM_MAXRATE ++} DriverParameter; ++#define SPKPARMS "path", "punctlist", "voice", "maxrate" ++ ++#include "spk_driver.h" ++ ++#include ++ ++static int maxrate = espeakRATE_MAXIMUM; ++ ++static void ++spk_say(volatile SpeechSynthesizer *spk, const unsigned char *buffer, size_t length, size_t count, const unsigned char *attributes) ++{ ++ int result; ++ ++ /* add 1 to the length in order to pass along the trailing zero */ ++ result = espeak_Synth(buffer, length+1, 0, POS_CHARACTER, 0, ++ espeakCHARS_UTF8, NULL, (void *)spk); ++ if (result != EE_OK) ++ logMessage(LOG_ERR, "eSpeak-NG: Synth() returned error %d", result); ++} ++ ++static void ++spk_mute(volatile SpeechSynthesizer *spk) ++{ ++ espeak_Cancel(); ++} ++ ++static int SynthCallback(short *audio, int numsamples, espeak_EVENT *events) ++{ ++ volatile SpeechSynthesizer *spk = events->user_data; ++ ++ while (events->type != espeakEVENT_LIST_TERMINATED) { ++ if (events->type == espeakEVENT_WORD) ++ tellSpeechLocation(spk, events->text_position - 1); ++ if (events->type == espeakEVENT_MSG_TERMINATED) ++ tellSpeechFinished(spk); ++ events++; ++ } ++ return 0; ++} ++ ++static void ++spk_drain(volatile SpeechSynthesizer *spk) ++{ ++ espeak_Synchronize(); ++} ++ ++static void ++spk_setVolume(volatile SpeechSynthesizer *spk, unsigned char setting) ++{ ++ int volume = getIntegerSpeechVolume(setting, 50); ++ espeak_SetParameter(espeakVOLUME, volume, 0); ++} ++ ++static void ++spk_setRate(volatile SpeechSynthesizer *spk, unsigned char setting) ++{ ++ int h_range = (maxrate - espeakRATE_MINIMUM)/2; ++ int rate = getIntegerSpeechRate(setting, h_range) + espeakRATE_MINIMUM; ++ espeak_SetParameter(espeakRATE, rate, 0); ++} ++ ++static void ++spk_setPitch(volatile SpeechSynthesizer *spk, unsigned char setting) ++{ ++ int pitch = getIntegerSpeechPitch(setting, 50); ++ espeak_SetParameter(espeakPITCH, pitch, 0); ++} ++ ++static void ++spk_setPunctuation(volatile SpeechSynthesizer *spk, SpeechPunctuation setting) ++{ ++ espeak_PUNCT_TYPE punct; ++ if (setting <= SPK_PUNCTUATION_NONE) ++ punct = espeakPUNCT_NONE; ++ else if (setting >= SPK_PUNCTUATION_ALL) ++ punct = espeakPUNCT_ALL; ++ else ++ punct = espeakPUNCT_SOME; ++ espeak_SetParameter(espeakPUNCTUATION, punct, 0); ++} ++ ++static int spk_construct(volatile SpeechSynthesizer *spk, char **parameters) ++{ ++ char *data_path, *voicename, *punctlist; ++ int result; ++ ++ spk->setVolume = spk_setVolume; ++ spk->setRate = spk_setRate; ++ spk->setPitch = spk_setPitch; ++ spk->setPunctuation = spk_setPunctuation; ++ spk->drain = spk_drain; ++ ++ logMessage(LOG_INFO, "eSpeak-NG version %s", espeak_Info(NULL)); ++ ++ data_path = parameters[PARM_PATH]; ++ if (data_path && !*data_path) ++ data_path = NULL; ++ result = espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, data_path, 0); ++ if (result < 0) { ++ logMessage(LOG_ERR, "eSpeak-NG: initialization failed"); ++ return 0; ++ } ++ ++ voicename = parameters[PARM_VOICE]; ++ if(!voicename || !*voicename) ++ voicename = "en"; ++ result = espeak_SetVoiceByName(voicename); ++ if (result != EE_OK) { ++ espeak_VOICE voice_select; ++ memset(&voice_select, 0, sizeof(voice_select)); ++ voice_select.languages = voicename; ++ result = espeak_SetVoiceByProperties(&voice_select); ++ } ++ if (result != EE_OK) { ++ logMessage(LOG_ERR, "eSpeak-NG: unable to load voice '%s'", voicename); ++ return 0; ++ } ++ ++ punctlist = parameters[PARM_PUNCTLIST]; ++ if (punctlist && *punctlist) { ++ wchar_t w_punctlist[strlen(punctlist) + 1]; ++ int i = 0; ++ while ((w_punctlist[i] = punctlist[i]) != 0) i++; ++ espeak_SetPunctuationList(w_punctlist); ++ } ++ ++ if (parameters[PARM_MAXRATE]) { ++ int val = atoi(parameters[PARM_MAXRATE]); ++ if (val > espeakRATE_MINIMUM) maxrate = val; ++ } ++ ++ espeak_SetSynthCallback(SynthCallback); ++ ++ return 1; ++} ++ ++static void spk_destruct(volatile SpeechSynthesizer *spk) ++{ ++ espeak_Cancel(); ++ espeak_Terminate(); ++} +diff --git a/README b/README +index 5fcd8c221..9fd946eb5 100644 +--- a/README ++++ b/README +@@ -210,6 +210,7 @@ The following speech synthesizers are supported: + - BrailleLite + - CombiBraille + - eSpeak [text to speech engine] ++- eSpeak-NG [text to speech engine] + - ExternalSpeech [runs /usr/local/bin/externalspeech] + - Festival [text to speech engine] + - FestivalLite [text to speech engine] +diff --git a/brltty.spec.in b/brltty.spec.in +index 8a4986c5d..f5aa33dc2 100644 +--- a/brltty.spec.in ++++ b/brltty.spec.in +@@ -144,6 +144,27 @@ Install this package if you would like to be able to use the + eSpeak text-to-speech engine. + + ++%package -n brltty-speech-espeak-ng ++Version: @PACKAGE_VERSION@ ++Release: 1 ++Group: System Environment/Daemons ++License: GPL ++ ++Requires: espeak-ng ++ ++BuildRequires: espeak-ng-devel ++ ++AutoProv: no ++AutoReq: yes ++ ++Summary: eSpeak-NG speech driver for BRLTTY. ++%description -n brltty-speech-espeak-ng ++This package provides the eSpeak-NG speech driver for BRLTTY. ++ ++Install this package if you would like to be able to use the ++eSpeak-NG text-to-speech engine. ++ ++ + %package -n brltty-speech-festival + Version: @PACKAGE_VERSION@ + Release: 1 +@@ -512,6 +533,7 @@ rm -fr "${RPM_BUILD_ROOT}" + %{_libdir}/brltty + %exclude %{_libdir}/brltty/libbrlttybba.so + %exclude %{_libdir}/brltty/libbrlttybxw.so ++%exclude %{_libdir}/brltty/libbrlttysen.so + %exclude %{_libdir}/brltty/libbrlttyses.so + %exclude %{_libdir}/brltty/libbrlttysfl.so + %exclude %{_libdir}/brltty/libbrlttysfv.so +@@ -541,6 +563,9 @@ rm -fr "${RPM_BUILD_ROOT}" + %files -n brltty-speech-espeak + %{_libdir}/brltty/libbrlttyses.so + ++%files -n brltty-speech-espeak-ng ++%{_libdir}/brltty/libbrlttysen.so ++ + %files -n brltty-speech-festival + %{_libdir}/brltty/libbrlttysfv.so + +diff --git a/cfg-android b/cfg-android +index 1c9ad3e14..db83a28a6 100755 +--- a/cfg-android ++++ b/cfg-android +@@ -89,6 +89,7 @@ export LDFLAGS="-Wl,--fix-cortex-a8" + --with-braille-driver=-ba,-bg,-tt,-vr,al,at,bm,bn,ce,eu,fs,hm,ht,hw,ic,ir,md,mm,mt,np,pg,pm,sk,vo \ + \ + --without-espeak \ ++ --without-espeak-ng \ + --without-flite \ + --without-mikropuhe \ + --without-speechd \ +diff --git a/cfg-darwin b/cfg-darwin +index 13741c371..992292717 100755 +--- a/cfg-darwin ++++ b/cfg-darwin +@@ -25,6 +25,7 @@ + --without-libbraille \ + \ + --without-espeak \ ++ --without-espeak-ng \ + --without-flite \ + --without-mikropuhe \ + --without-speechd \ +diff --git a/cfg-dos b/cfg-dos +index 82277980b..55427b7b2 100755 +--- a/cfg-dos ++++ b/cfg-dos +@@ -57,6 +57,7 @@ export LDFLAGS="" + --with-braille-driver=-vr,all \ + \ + --without-espeak \ ++ --without-espeak-ng \ + --without-flite \ + --without-mikropuhe \ + --without-speechd \ +diff --git a/config.mk.in b/config.mk.in +index ead6ca348..89af949de 100644 +--- a/config.mk.in ++++ b/config.mk.in +@@ -370,6 +370,7 @@ SCREEN_DRIVER_LIBRARIES = @screen_driver_libraries@ + SCREEN_DRIVERS = @screen_drivers@ + + ESPEAK_ROOT = @espeak_root@ ++ESPEAK_NG_ROOT = @espeak_ng_root@ + FLITE_ROOT = @flite_root@ + FLITE_LANGUAGE = @flite_language@ + FLITE_LEXICON = @flite_lexicon@ +diff --git a/configure.ac b/configure.ac +index 39eb98390..b86f85209 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1742,6 +1742,10 @@ BRLTTY_ARG_DISABLE( + BRLTTY_SPEECH_DRIVER([bl], [BrailleLite]) + BRLTTY_SPEECH_DRIVER([cb], [CombiBraille]) + ++ BRLTTY_IF_PACKAGE([eSpeak-NG], [espeak_ng], [include/espeak-ng/speak_lib.h], [dnl ++ BRLTTY_SPEECH_DRIVER([en], [eSpeak-NG], [-L$(ESPEAK_NG_ROOT)/lib -lespeak-ng]) ++ ]) ++ + BRLTTY_IF_PACKAGE([eSpeak], [espeak], [include/espeak/speak_lib.h], [dnl + BRLTTY_SPEECH_DRIVER([es], [eSpeak], [-L$(ESPEAK_ROOT)/lib -lespeak]) + ]) +-- +2.14.3 + diff --git a/SOURCES/brltty-5.0-libspeechd.patch b/SOURCES/brltty-5.0-libspeechd.patch new file mode 100644 index 0000000..06909e0 --- /dev/null +++ b/SOURCES/brltty-5.0-libspeechd.patch @@ -0,0 +1,13 @@ +diff --git a/Drivers/Speech/SpeechDispatcher/speech.c b/Drivers/Speech/SpeechDispatcher/speech.c +index d73250a..df92708 100644 +--- a/Drivers/Speech/SpeechDispatcher/speech.c ++++ b/Drivers/Speech/SpeechDispatcher/speech.c +@@ -34,7 +34,7 @@ typedef enum { + + #include "spk_driver.h" + +-#include ++#include + + static SPDConnection *connectionHandle = NULL; + static const char *moduleName; diff --git a/SOURCES/brltty-5.6-add-dracut-support.patch b/SOURCES/brltty-5.6-add-dracut-support.patch new file mode 100644 index 0000000..2d2e239 --- /dev/null +++ b/SOURCES/brltty-5.6-add-dracut-support.patch @@ -0,0 +1,1279 @@ +diff --git a/Headers/datafile.h b/Headers/datafile.h +index f22457e..eec692c 100644 +--- a/Headers/datafile.h ++++ b/Headers/datafile.h +@@ -43,6 +43,7 @@ typedef enum { + + typedef struct { + DataOperandsProcessor *processOperands; ++ void (*logFileName) (const char *name, void *data); + void *data; + unsigned char options; + } DataFileParameters; +diff --git a/Initramfs/Dracut/Makefile.in b/Initramfs/Dracut/Makefile.in +new file mode 100644 +index 0000000..8a7f6de +--- /dev/null ++++ b/Initramfs/Dracut/Makefile.in +@@ -0,0 +1,34 @@ ++MODULE_NAME = 99brltty ++MODULES_DIRECTORY = /usr/lib/dracut/modules.d ++MODULE_DIRECTORY = $(INSTALL_ROOT)$(MODULES_DIRECTORY)/$(MODULE_NAME) ++ ++install: install-module install-documentation install-configuration-files ++ ++install-module: install-module-directory ++ for file in *.sh; \ ++ do $(INSTALL_SCRIPT) $$file $(MODULE_DIRECTORY); \ ++ done ++ ++install-documentation: install-module-directory ++ $(INSTALL_DATA) README $(MODULE_DIRECTORY) ++ ++install-module-directory: ++ $(INSTALL_DIRECTORY) $(MODULE_DIRECTORY) ++ ++OPTIONS_FILE = cmdline ++CONFIGURATION_FILE = dracut.conf ++INITRAMFS_SUBDIRECTORY = Initramfs ++INITRAMFS_DIRECTORY = $(TABLES_DIRECTORY)/$(INITRAMFS_SUBDIRECTORY) ++INSTALL_INITRAMFS_DIRECTORY = $(INSTALL_ROOT)$(INITRAMFS_DIRECTORY) ++ ++install-initramfs-directory: ++ $(INSTALL_DIRECTORY) $(INSTALL_INITRAMFS_DIRECTORY) ++ ++install-configuration-files: install-initramfs-directory ++ $(INSTALL_DATA) $(OPTIONS_FILE) $(INSTALL_INITRAMFS_DIRECTORY) ++ $(INSTALL_DATA) $(CONFIGURATION_FILE) $(INSTALL_INITRAMFS_DIRECTORY) ++ sed -e '/^ *BRLTTY_DRACUT_LOCALE *= *"/s/".*"/"${LANG}"/' -i $(INSTALL_INITRAMFS_DIRECTORY)/$(CONFIGURATION_FILE) ++ ++uninstall: ++ -rm -f -r $(MODULE_DIRECTORY) ++ +diff --git a/Initramfs/Dracut/README b/Initramfs/Dracut/README +new file mode 100644 +index 0000000..ccf6baa +--- /dev/null ++++ b/Initramfs/Dracut/README +@@ -0,0 +1,215 @@ ++Braille Support for Dracut ++========================== ++ ++This module implements braille accessibility within the initramfs (initial ++ramdisk file system). If BRLTTY is installed (``/usr/bin/brltty`` exists) then ++it is added to the image. The braille drivers, text tables, attributes tables, ++contraction tables, keyboard tables, speech drivers, and preferences file ++configured via ``/etc/brltty.conf`` are included. Local customizations within ++``/etc/xdg/brltty/`` are also included. ++ ++BRLTTY is started as early as possible by the initramfs so that braille ++accessibility will be active when (should the need arise) control is ++transferred to the emergency shell due to a problem preparing the root file ++system. Additionally, braille accessibility is active at any of the specifiable ++initramfs breakpoints (see the ``rd.break`` kernel parameter) except for the ++one named ``cmdline`` because it occurs earlier than the point at which BRLTTY ++is started. ++ ++The braille driver can start immediately if either serial or USB communication ++is being used. If Bluetooth communication is being used then the braille driver ++won't start until the ``initqueue`` phase because the Systemd service manager ++isn't available until then. ++ ++Bluetooth support within the initramfs is disabled by default because it's ++insecure. The reason for this is that the link keys for those devices that have ++already been paired on the full system are copied into the initramfs image so ++that repairing won't be necessary. If you absolutely must use Bluetooth ++communication, or if you just want to and this issue is of no concern to you, ++then enable the ``BRLTTY_DRACUT_BLUETOOTH_SUPPORT`` option within the file ++``dracut.conf`` (which is in ``/etc/brltty/Initramfs/``). ++ ++Environment Variables ++--------------------- ++ ++A number of environment variables may be used to influence how BRLTTY is ++installed into the initramfs image. Their names all begin with the ++``BRLTTY_DRACUT_`` prefix. In addition to exporting them from the current ++environment, they may be defined within the optional file ``dracut.conf`` ++(which is in ``/etc/brltty/Initramfs/``). Within this file: ++ ++* Blank lines are ignored. ++* Lines that start with a hash [``#``] are comments. ++* All other lines should be simple shell-style assignments. For example:: ++ ++ NAME="string" ++ ++The following environment variables are supported: ++ ++BRLTTY_DRACUT_LOCALE ++ The preferred locale (used to determine the default text and contraction ++ tables). For example:: ++ ++ BRLTTY_DRACUT_LOCALE=cs_CZ.UTF-8 ++ ++ If needed, i.e. if the text and contraction tables haven't both been ++ configured via ``/etc/brltty.conf``, this information must be explicitly set ++ because it can't be determined from the system configuration when building ++ the image (see ``_). ++ ++BRLTTY_DRACUT_BRAILLE_DRIVERS ++ A space-separated list of additional braille drivers to include. For ++ example:: ++ ++ BRLTTY_DRACUT_BRAILLE_DRIVERS="pm eu" ++ ++BRLTTY_DRACUT_BLUETOOTH_SUPPORT ++ Whether or not Bluetooth support should be included within the initramfs. For ++ example:: ++ ++ BRLTTY_DRACUT_BLUETOOTH_SUPPORT=no ++ ++ Set this variable to ``yes`` if communication with your braille device is via ++ Bluetooth. Note that this option is insecure because the link keys for all of ++ your paired Bluetooth devices will be stored within the initramfs image. ++ ++BRLTTY_DRACUT_TEXT_TABLES ++ A space-separated list of additional text tables to include. For example:: ++ ++ BRLTTY_DRACUT_TEXT_TABLES="de fr" ++ ++BRLTTY_DRACUT_ATTRIBUTES_TABLES ++ A space-separated list of additional attributes tables to include. For ++ example:: ++ ++ BRLTTY_DRACUT_ATTRIBUTES_TABLES="upper_lower left_right" ++ ++BRLTTY_DRACUT_CONTRACTION_TABLES ++ A space-separated list of additional contraction tables to include. For ++ example:: ++ ++ BRLTTY_DRACUT_CONTRACTION_TABLES="de-kurzschrift fr-abrege" ++ ++BRLTTY_DRACUT_KEYBOARD_TABLES ++ A space-separated list of additional keyboard tables to include. For ++ example:: ++ ++ BRLTTY_DRACUT_KEYBOARD_TABLES="keypad desktop" ++ ++BRLTTY_DRACUT_SPEECH_DRIVERS ++ A space-separated list of additional speech drivers to include. For example:: ++ ++ BRLTTY_DRACUT_SPEECH_DRIVERS="es fl" ++ ++Kernel Command Line Parameters ++------------------------------ ++ ++This module interprets kernel command line parameters that begin with the ++``rd.brltty.`` prefix. Explicit values for these parameters can, of course, be ++specified on the kernel command line (e.g. within ``grub.cfg`` or within ++``/etc/default/grub``). In addition, default values for them can be defined ++within the optional file ``cmdline`` (which is in ``/etc/brltty/Initramfs/``). ++ ++The order of precedence, from lowest to highest, for a value is: ++ ++* BRLTTY built-in default ++* ``/etc/brltty.conf`` ++* initramfs override ++* ``/etc/brltty/Initramfs/cmdline`` ++* kernel command line ++ ++Blank lines are ignored. A hash [``#``] anywhere on a line begins a comment ++which continues till the end of that line - only those characters before it are ++significant. Any number of space-separated options may be specified on a line. ++The syntax for an option is ``name=value`` (without the ``rd.brltty.`` prefix). ++The ``=value`` part is optional - if there's no ``=`` then the value is ++``yes``. ++ ++Disabling BRLTTY ++```````````````` ++ ++Given that BRLTTY is a rather complex application, there are a number of kernel ++parameters that can be used to selectively disable a number of its components. ++In all cases, if any of these parameters isn't specified then it defaults to ++``1`` (enabled). They are: ++ ++ ========================= ========================================= ++ Kernel Parameter Effect ++ ------------------------- ----------------------------------------- ++ ``rd.brltty=0`` Completely disable BRLTTY. ++ ``rd.brltty.bluetooth=0`` Disable Bluetooth support. ++ ``rd.brltty.sound=0`` Disable speech drivers and sound support. ++ ``rd.brltty.pulse=0`` Disable the Pulse Audio server. ++ ``rd.brltty.speechd=0`` Disable the Speech Dispatcher server. ++ ========================= ========================================= ++ ++Specifying BRLTTY options ++````````````````````````` ++ ++All of BRLTTY's options that can be specified via environment variables (see ++``man brltty`` for the full list) can be specified via kernel parameters. For ++example, the kernel parameter ``rd.brltty.braille_driver=vo`` is mapped to the ++environment variable assignment ``BRLTTY_BRAILLE_DRIVER=vo``. Some of the more ++interesting ones are: ++ ++ ================================ =============================== ++ Kernel Parameter Default Value ++ -------------------------------- ------------------------------- ++ ``rd.brltty.braille_driver`` setting in ``/etc/brltty.conf`` ++ ``rd.brltty.braille_parameters`` setting in ``/etc/brltty.conf`` ++ ``rd.brltty.braille_device`` setting in ``/etc/brltty.conf`` ++ ``rd.brltty.text_table`` setting in ``/etc/brltty.conf`` ++ ``rd.brltty.attributes_table`` setting in ``/etc/brltty.conf`` ++ ``rd.brltty.contraction_table`` setting in ``/etc/brltty.conf`` ++ ``rd.brltty.keyboard_table`` setting in ``/etc/brltty.conf`` ++ ``rd.brltty.speech_driver`` setting in ``/etc/brltty.conf`` ++ ``rd.brltty.speech_parameters`` setting in ``/etc/brltty.conf`` ++ ``rd.brltty.log_file`` ``/run/initramfs/brltty.log`` ++ ``rd.brltty.log_level`` setting in ``/etc/brltty.conf`` ++ ================================ =============================== ++ ++Speech Drivers ++-------------- ++ ++Since speech drivers, by their very nature, require sound: ++ ++* None of them can start until the ``initqueue`` hook has been executed. ++ ++* None of them can start if sound has been disabled (via the rd.brltty.sound=0 ++ kernel parameter). ++ ++Speech defaults to being off even if a speech driver has been configured via ++``/etc/brltty.conf``. This is because your preferred speech driver may not work ++all that well, or may even cause problems, when used within the more primitive ++initramfs environment. If you'd like to use speech then you need to explicitly ++set the driver. While you can do so via the ``rd.brltty.speech_driver`` kernel ++command line parameter, the easiest way to configure a persistent setting is ++via the ``speech_driver`` option in ``/etc/brltty/Initramfs/cmdline``. ++ ++Here's how well each of the speech drivers works: ++ ++en ++ The ``en`` [eSpeak-NG] speech driver works. ++ ++es ++ The ``es`` [eSpeak] speech driver works. It requires Pulse Audio, so: ++ ++ * It doesn't start until the ``initqueue`` hook has been executed. ++ ++ * It can't start if Pulse Audio fails to start or has been disabled (via ++ the rd.brltty.pulse=0 kernel parameter). ++ ++fl ++ The ``fl`` [Festival Lite] speech driver doesn't work - it runs but doesn't ++ speak. This appears to be due to a bug within Festival Lite itself because ++ it also remains silent when tested on the full system. ++ ++fv ++ The ``fv`` [Festival] speech driver doesn't work - it crashes. This appears ++ to be due to a bug within Festival itself because it also crashes when tested ++ on the full system. ++ ++sd ++ The ``sd`` [Speech Dispatcher] speech driver hasn't been tested and probably ++ won't work. ++ +diff --git a/Initramfs/Dracut/alsa-start.sh b/Initramfs/Dracut/alsa-start.sh +new file mode 100755 +index 0000000..26ab4a1 +--- /dev/null ++++ b/Initramfs/Dracut/alsa-start.sh +@@ -0,0 +1,5 @@ ++#!/bin/bash ++ ++getargbool 1 rd.brltty && getargbool 1 rd.brltty.sound && { ++ alsaunmute ++} +diff --git a/Initramfs/Dracut/bluetooth-start.sh b/Initramfs/Dracut/bluetooth-start.sh +new file mode 100755 +index 0000000..0d574d1 +--- /dev/null ++++ b/Initramfs/Dracut/bluetooth-start.sh +@@ -0,0 +1,7 @@ ++#!/bin/bash ++ ++getargbool 1 rd.brltty && getargbool 1 rd.brltty.bluetooth && { ++ systemctl -q is-active bluetooth || { ++ systemctl --no-block start bluetooth ++ } ++} +diff --git a/Initramfs/Dracut/brltty-start.sh b/Initramfs/Dracut/brltty-start.sh +new file mode 100755 +index 0000000..ea51437 +--- /dev/null ++++ b/Initramfs/Dracut/brltty-start.sh +@@ -0,0 +1,78 @@ ++#!/bin/bash ++ ++export BRLTTY_START_MESSAGE="initramfs starting" ++export BRLTTY_STOP_MESSAGE="initramfs finished" ++ ++BRLTTY_OVERRIDE_PREFERENCE="braille-keyboard-enabled=yes" ++BRLTTY_OVERRIDE_PREFERENCE+=",braille-input-mode=text" ++export BRLTTY_OVERRIDE_PREFERENCE ++ ++export BRLTTY_SCREEN_DRIVER="lx" ++export BRLTTY_SPEECH_DRIVER="no" ++ ++export BRLTTY_WRITABLE_DIRECTORY="/run" ++export BRLTTY_PID_FILE="${BRLTTY_WRITABLE_DIRECTORY}/brltty.pid" ++export BRLTTY_LOG_FILE="${BRLTTY_WRITABLE_DIRECTORY}/initramfs/brltty.log" ++ ++export BRLTTY_UPDATABLE_DIRECTORY="/etc" ++export BRLTTY_PREFERENCES_FILE="${BRLTTY_UPDATABLE_DIRECTORY}/brltty.prefs" ++ ++brlttySetOption() { ++ local option="${1}" ++ local name="${option%%=*}" ++ ++ if [ "${name}" = "${option}" ] ++ then ++ local value="yes" ++ else ++ local value="${option#*=}" ++ fi ++ ++ [ -z "${name}" ] || { ++ name="${name^^?}" ++ export "BRLTTY_${name}=${value}" ++ } ++} ++ ++brlttySetConfiguredOptions() { ++ local file="/etc/brltty/Initramfs/cmdline" ++ ++ [ -f "${file}" ] && [ -r "${file}" ] && { ++ local line ++ ++ while read line ++ do ++ set -- ${line%%#*} ++ local option ++ ++ for option ++ do ++ brlttySetOption "${option}" ++ done ++ done <"${file}" ++ } ++} ++ ++brlttySetExplicitOptions() { ++ local option ++ ++ for option ++ do ++ [[ "${option}" =~ ^"rd.brltty."(.*) ]] && { ++ brlttySetOption "${BASH_REMATCH[1]}" ++ } ++ done ++} ++ ++brlttySetConfiguredOptions ++brlttySetExplicitOptions $(getcmdline) ++getargbool 1 rd.brltty.sound || export BRLTTY_SPEECH_DRIVER="no" ++ ++getargbool 1 rd.brltty && ( ++ # Give the kernel a bit of time to finish creating the /dev/input/ devices ++ # (e.g. so that brltty can perform keyboard discovery for keyboard tables) ++ # without delaying the boot. ++ ++ sleep 1 ++ brltty -E +n ++) & +diff --git a/Initramfs/Dracut/brltty-stop.sh b/Initramfs/Dracut/brltty-stop.sh +new file mode 100755 +index 0000000..27611ab +--- /dev/null ++++ b/Initramfs/Dracut/brltty-stop.sh +@@ -0,0 +1,3 @@ ++#!/bin/bash ++ ++brltty -E -C +diff --git a/Initramfs/Dracut/cmdline b/Initramfs/Dracut/cmdline +new file mode 100644 +index 0000000..39aefd3 +--- /dev/null ++++ b/Initramfs/Dracut/cmdline +@@ -0,0 +1,16 @@ ++# This file is where you can specify any rd.brltty. kernel parameters that are ++# to be included within the initramfs image and applied as default values. ++ ++# The order of precedence, from lowest to highest, for an option's value is: ++# * BRLTTY built-in default ++# * /etc/brltty.conf ++# * initramfs override ++# * this file ++# * kernel command line ++ ++# Blank lines are ignored. A hash [#] anywhere on a line begins a comment which ++# continues till the end of that line - only those characters before it are ++# significant. Any number of space-separated options may be specified on a ++# line. The syntax for an option is name=value (without the rd.brltty. prefix). ++# The =value part is optional - if there's no = then the value is yes. ++ +diff --git a/Initramfs/Dracut/dbus-start.sh b/Initramfs/Dracut/dbus-start.sh +new file mode 100755 +index 0000000..fd9e210 +--- /dev/null ++++ b/Initramfs/Dracut/dbus-start.sh +@@ -0,0 +1,7 @@ ++#!/bin/bash ++ ++getargbool 1 rd.brltty && getargbool 1 rd.brltty.bluetooth && { ++ systemctl -q is-active dbus || { ++ systemctl --no-block start dbus ++ } ++} +diff --git a/Initramfs/Dracut/dracut.conf b/Initramfs/Dracut/dracut.conf +new file mode 100644 +index 0000000..2d03996 +--- /dev/null ++++ b/Initramfs/Dracut/dracut.conf +@@ -0,0 +1,27 @@ ++# The preferred locale (used to determine the default text and contraction tables). ++BRLTTY_DRACUT_LOCALE="" ++ ++# A space-separated list of additional braille drivers to include. ++BRLTTY_DRACUT_BRAILLE_DRIVERS="" ++ ++# Whether or not Bluetooth support should be included within the initramfs. ++# Set this variable to yes if communication with your braille device is via ++# Bluetooth. Note that this option is insecure because the link keys for all of ++# your paired Bluetooth devices will be stored within the initramfs image. ++BRLTTY_DRACUT_BLUETOOTH_SUPPORT=no ++ ++# A space-separated list of additional text tables to include. ++BRLTTY_DRACUT_TEXT_TABLES="" ++ ++# A space-separated list of additional attributes tables to include. ++BRLTTY_DRACUT_ATTRIBUTES_TABLES="" ++ ++# A space-separated list of additional contraction tables to include. ++BRLTTY_DRACUT_CONTRACTION_TABLES="" ++ ++# A space-separated list of additional keyboard tables to include. ++BRLTTY_DRACUT_KEYBOARD_TABLES="" ++ ++# A space-separated list of additional speech drivers to include. ++BRLTTY_DRACUT_SPEECH_DRIVERS="" ++ +diff --git a/Initramfs/Dracut/module-setup.sh b/Initramfs/Dracut/module-setup.sh +new file mode 100755 +index 0000000..8f6e5ca +--- /dev/null ++++ b/Initramfs/Dracut/module-setup.sh +@@ -0,0 +1,326 @@ ++#!/bin/bash ++ ++# called by dracut ++check() { ++ require_binaries brltty brltty-lsinc || return 1 ++ return 0 ++} ++ ++# called by dracut ++depends() { ++ return 0 ++} ++ ++# called by dracut ++installkernel() { ++ instmods pcspkr uinput ++ [ -d "${initdir}/etc/bluetooth" ] && instmods =drivers/bluetooth =net/bluetooth ++ [ -d "${initdir}/etc/alsa" ] && instmods =sound ++ return 0 ++} ++ ++# called by dracut ++install() { ++ brlttyImportInstallOptions ++ local -A includedDrivers ++ ++ local BRLTTY_EXECUTABLE_PATH="/usr/bin/brltty" ++ inst_binary "${BRLTTY_EXECUTABLE_PATH}" ++ local brlttyLog="$(LC_ALL="${BRLTTY_DRACUT_LOCALE:-${LANG}}" "${BRLTTY_EXECUTABLE_PATH}" -E -v -e -ldebug 2>&1)" ++ ++ export BRLTTY_CONFIGURATION_FILE="/etc/brltty.conf" ++ brlttyIncludeDataFiles "${BRLTTY_CONFIGURATION_FILE}" ++ ++ brlttyIncludeDataFiles $(brlttyGetProperty "including data file") ++ brlttyIncludeScreenDrivers lx ++ ++ brlttyIncludeBrailleDrivers $(brlttyGetConfiguredDrivers braille) ++ brlttyIncludeBrailleDrivers ${BRLTTY_DRACUT_BRAILLE_DRIVERS} ++ ++ brlttyIncludeSpeechDrivers $(brlttyGetConfiguredDrivers speech) ++ brlttyIncludeSpeechDrivers ${BRLTTY_DRACUT_SPEECH_DRIVERS} ++ ++ brlttyIncludeTables Text ttb ${BRLTTY_DRACUT_TEXT_TABLES} ++ brlttyIncludeTables Attributes atb ${BRLTTY_DRACUT_ATTRIBUTES_TABLES} ++ brlttyIncludeTables Contraction ctb ${BRLTTY_DRACUT_CONTRACTION_TABLES} ++ brlttyIncludeTables Keyboard ktb ${BRLTTY_DRACUT_KEYBOARD_TABLES} ++ ++ brlttyInstallPreferencesFile "/etc/brltty.prefs" ++ brlttyInstallDirectories "/etc/xdg/brltty" ++ inst_simple "/etc/brltty/Initramfs/cmdline" ++ ++ if [ "${BRLTTY_DRACUT_BLUETOOTH_SUPPORT}" = "yes" ] ++ then ++ brlttyIncludeBluetoothSupport ++ fi ++ ++ inst_hook cmdline 05 "${moddir}/brltty-start.sh" ++ inst_hook cleanup 95 "${moddir}/brltty-stop.sh" ++ ++ dracut_need_initqueue ++} ++ ++brlttyInstallPreferencesFile() { ++ local path="${1}" ++ local file=$(brlttyGetProperty "Preferences File") ++ ++ if [ -n "${file}" ] ++ then ++ if [ "${file}" = "${file#/}" ] ++ then ++ local directory=$(brlttyGetProperty "Updatable Directory") ++ ++ if [ -n "${directory}" ] ++ then ++ file="${directory}/${file}" ++ fi ++ fi ++ ++ if [ -f "${file}" ] ++ then ++ inst_simple "${file}" "${path}" ++ fi ++ fi ++} ++ ++brlttyIncludeBrailleDrivers() { ++ local code ++ ++ for code ++ do ++ brlttyIncludeDriver b "${code}" || continue ++ ++ local directory="/etc/brltty/Input/${code}" ++ brlttyIncludeDataFiles "${directory}/"*.ktb ++ inst_multiple -o "${directory}/"*.txt ++ done ++} ++ ++brlttyIncludeSpeechDrivers() { ++ local code ++ ++ for code ++ do ++ brlttyIncludeDriver s "${code}" || continue ++ ++ case "${code}" ++ in ++ en) ++ inst_binary espeak-ng ++ brlttyInstallDirectories "/usr/share/espeak-ng-data" ++ ;; ++ ++ es) ++ inst_binary espeak ++ brlttyInstallDirectories "/usr/share/espeak-data" ++ brlttyIncludePulseAudioSupport ++ ;; ++ ++ fl) ++ inst_binary flite ++ ;; ++ ++ fv) ++ inst_binary festival ++ brlttyInstallDirectories /etc/festival ++ brlttyInstallDirectories /usr/lib*/festival ++ brlttyInstallDirectories /usr/share/festival/lib ++ ;; ++ ++ sd) ++ inst_binary speech-dispatcher ++ brlttyInstallDirectories /etc/speech-dispatcher ++ brlttyInstallDirectories /usr/lib*/speech-dispatcher ++ brlttyInstallDirectories /usr/lib*/speech-dispatcher-modules ++ brlttyInstallDirectories /usr/share/speech-dispatcher ++ brlttyInstallDirectories /usr/share/sounds/speech-dispatcher ++ brlttyInstallSystemdUnits speech-dispatcherd.service ++ inst_hook initqueue 98 "${moddir}/speechd-start.sh" ++ ;; ++ esac ++ ++ brlttyIncludeAlsaSupport ++ done ++} ++ ++brlttyIncludeScreenDrivers() { ++ local code ++ ++ for code ++ do ++ brlttyIncludeDriver x "${code}" || continue ++ done ++} ++ ++brlttyIncludeDriver() { ++ local type="${1}" ++ local code="${2}" ++ ++ [ "${code}" = "no" ] && return 1 ++ local driver="${type}${code}" ++ ++ [ -n "${includedDrivers[${driver}]}" ] && return 2 ++ includedDrivers[${driver}]=1 ++ ++ inst_libdir_file "brltty/libbrltty${driver}.so*" ++ return 0 ++} ++ ++brlttyIncludeTables() { ++ local subdirectory="${1}" ++ local extension="${2}" ++ shift 2 ++ local name ++ ++ for name ++ do ++ brlttyIncludeDataFiles "/etc/brltty/${subdirectory}/${name}.${extension}" ++ done ++} ++ ++brlttyIncludeDataFiles() { ++ local file ++ ++ while read -r file ++ do ++ inst_simple "${file}" ++ done < <(brltty-lsinc "${@}") ++} ++ ++brlttyGetConfiguredDrivers() { ++ local category="${1}" ++ brlttyGetProperty "checking for ${category} driver" ++} ++ ++brlttyGetProperty() { ++ local name="${1}" ++ echo "${brlttyLog}" | awk "/: *${name} *:/ {print \$NF}" ++} ++ ++brlttyImportInstallOptions() { ++ local file="/etc/brltty/Initramfs/dracut.conf" ++ [ -f "${file}" ] && [ -r "${file}" ] && . "${file}" ++} ++ ++brlttyIncludePulseAudioSupport() { ++ [ -d "${initdir}/etc/pulse" ] && return 0 ++ ++ brlttyInstallDirectories /etc/pulse ++ brlttyInstallDirectories /usr/share/pulseaudio ++ brlttyInstallDirectories /usr/lib*/pulseaudio ++ brlttyInstallDirectories /usr/lib*/pulse-* ++ brlttyInstallDirectories /usr/libexec/pulse ++ ++ inst_multiple -o pulseaudio pactl pacmd ++ inst_multiple -o pamon paplay parec parecord ++ ++ brlttyAddUserEntries pulse ++ brlttyAddGroupEntries pulse pulse-access pulse-rt ++ ++ brlttyIncludeAlsaSupport ++ brlttyIncludeMessageBusSupport ++ inst_simple /etc/dbus-1/system.d/pulseaudio-system.conf ++ ++ inst_binary chmod ++ inst_hook initqueue 97 "${moddir}/pulse-start.sh" ++ inst_hook cleanup 98 "${moddir}/pulse-stop.sh" ++} ++ ++brlttyIncludeAlsaSupport() { ++ [ -d "${initdir}/etc/alsa" ] && return 0; ++ ++ brlttyInstallDirectories /etc/alsa ++ rm -f "${initdir}/etc/alsa/conf.d/"* ++ ++ brlttyInstallDirectories /usr/share/alsa ++ brlttyInstallDirectories /usr/lib/alsa ++ brlttyInstallDirectories /usr/lib*/alsa-lib ++ ++ inst_multiple -o alsactl alsaucm alsamixer amixer aplay ++ inst_script alsaunmute ++ ++ inst_hook initqueue 96 "${moddir}/alsa-start.sh" ++} ++ ++brlttyIncludeBluetoothSupport() { ++ [ -d "${initdir}/etc/bluetooth" ] && return 0 ++ ++ brlttyInstallDirectories /etc/bluetooth ++ brlttyInstallDirectories /var/lib/bluetooth ++ ++ inst_multiple -o bluetoothctl hciconfig hcitool sdptool ++ inst_binary /usr/libexec/bluetooth/bluetoothd ++ brlttyInstallSystemdUnits bluetooth.service bluetooth.target ++ ++ inst_hook initqueue 97 "${moddir}/bluetooth-start.sh" ++ brlttyIncludeMessageBusSupport ++} ++ ++brlttyIncludeMessageBusSupport() { ++ [ -d "${initdir}/etc/dbus-1" ] && return 0 ++ ++ brlttyAddMessageBusUsers /usr/share/dbus-1/system.d/* ++ brlttyAddMessageBusUsers /etc/dbus-1/system.d/* ++ ++ brlttyInstallDirectories /etc/dbus-1 ++ brlttyInstallDirectories /usr/share/dbus-1 ++ brlttyInstallDirectories /usr/libexec/dbus-1 ++ ++ inst_multiple dbus-daemon dbus-send dbus-cleanup-sockets dbus-monitor ++ brlttyInstallSystemdUnits dbus.service dbus.socket ++ ++ inst_hook initqueue 96 "${moddir}/dbus-start.sh" ++} ++ ++brlttyAddMessageBusUsers() { ++ set -- dbus $(sed -n -r -e 's/^.* user="([^"]*)".*$/\1/p' "${@}" | sort -u) ++ brlttyAddUserEntries "${@}" ++ brlttyAddGroupEntries "${@}" ++} ++ ++brlttyAddUserEntries() { ++ brlttyAddEntries passwd "${@}" ++} ++ ++brlttyAddGroupEntries() { ++ brlttyAddEntries group "${@}" ++} ++ ++brlttyAddEntries() { ++ local file="${1}" ++ shift 1 ++ ++ local source="/etc/${file}" ++ local target="${initdir}${source}" ++ local name ++ ++ for name ++ do ++ grep -q -e "^${name}:" "${target}" || { ++ local line="$(grep "^${name}:" "${source}")" ++ [ -n "${line}" ] && echo >>"${target}" "${line}" ++ } ++ done ++} ++ ++brlttyInstallSystemdUnits() { ++ local unit ++ ++ for unit ++ do ++ inst_simple "/usr/lib/systemd/system/${unit}" ++ done ++} ++ ++brlttyInstallDirectories() { ++ local directory ++ ++ for directory ++ do ++ [ -d "${directory}" ] && { ++ eval set -- $(find "${directory}" -printf "'%p'\n") ++ inst_multiple "${@}" ++ } ++ done ++} ++ +diff --git a/Initramfs/Dracut/pulse-start.sh b/Initramfs/Dracut/pulse-start.sh +new file mode 100755 +index 0000000..ed9af36 +--- /dev/null ++++ b/Initramfs/Dracut/pulse-start.sh +@@ -0,0 +1,5 @@ ++#!/bin/bash ++ ++getargbool 1 rd.brltty && getargbool 1 rd.brltty.sound && getargbool 1 rd.brltty.pulse && { ++ chmod a+w /tmp && pulseaudio --daemonize=yes --system --disallow-exit --disallow-module-loading --disable-shm ++} +diff --git a/Initramfs/Dracut/pulse-stop.sh b/Initramfs/Dracut/pulse-stop.sh +new file mode 100755 +index 0000000..5f2b033 +--- /dev/null ++++ b/Initramfs/Dracut/pulse-stop.sh +@@ -0,0 +1,3 @@ ++#!/bin/bash ++ ++read . + ############################################################################### + +-all: all-brltty all-brltty-trtxt all-brltty-ttb all-brltty-atb $(ALL_BRLTTY_CTB) all-brltty-ktb all-brltty-tune $(ALL_XBRLAPI) $(ALL_API_BINDINGS) ++all: all-brltty all-brltty-lsinc all-brltty-trtxt all-brltty-ttb all-brltty-atb $(ALL_BRLTTY_CTB) all-brltty-ktb all-brltty-tune $(ALL_XBRLAPI) $(ALL_API_BINDINGS) + all-brltty: brltty$X $(BRAILLE_DRIVERS) $(SPEECH_DRIVERS) $(SCREEN_DRIVERS) ++all-brltty-lsinc: brltty-lsinc$X + all-brltty-trtxt: brltty-trtxt$X + all-brltty-ttb: brltty-ttb$X + all-brltty-atb: brltty-atb$X +@@ -805,6 +806,16 @@ brltty-trtxt.$O: + + ############################################################################### + ++BRLTTY_LSINC_OBJECTS = brltty-lsinc.$O $(PROGRAM_OBJECTS) ++ ++brltty-lsinc$X: $(BRLTTY_LSINC_OBJECTS) ++ $(CC) $(LDFLAGS) -o $@ $(BRLTTY_LSINC_OBJECTS) $(LDLIBS) ++ ++brltty-lsinc.$O: ++ $(CC) $(CFLAGS) -c $(SRC_DIR)/brltty-lsinc.c ++ ++############################################################################### ++ + BRLTEST_OBJECTS = brltest.$O $(PROGRAM_OBJECTS) report.$O $(TTB_OBJECTS) $(KTB_OBJECTS) dataarea.$O cmd.$O cmd_queue.$O drivers.$O driver.$O $(BRAILLE_OBJECTS) $(PREFS_OBJECTS) hidkeys.$O learn.$O + + brltest$X: $(BRLTEST_OBJECTS) +@@ -949,8 +960,9 @@ check-all: check-text-tables check-attributes-tables check-contraction-tables ch + + install:: install-programs install-tables $(INSTALL_DRIVERS) install-core-headers $(INSTALL_MESSAGES) install-manpages $(INSTALL_API) + +-install-programs: brltty$X brltty-trtxt$X brltty-ttb$X brltty-atb$X $(INSTALL_BRLTTY_CTB) brltty-ktb$X brltty-tune$X install-program-directory install-writable-directory ++install-programs: brltty$X brltty-lsinc$X brltty-trtxt$X brltty-ttb$X brltty-atb$X $(INSTALL_BRLTTY_CTB) brltty-ktb$X brltty-tune$X install-program-directory install-writable-directory + $(INSTALL_PROGRAM) brltty$X $(INSTALL_PROGRAM_DIRECTORY) ++ $(INSTALL_PROGRAM) brltty-lsinc$X $(INSTALL_PROGRAM_DIRECTORY) + $(INSTALL_PROGRAM) brltty-trtxt$X $(INSTALL_PROGRAM_DIRECTORY) + $(INSTALL_PROGRAM) brltty-ttb$X $(INSTALL_PROGRAM_DIRECTORY) + $(INSTALL_PROGRAM) brltty-atb$X $(INSTALL_PROGRAM_DIRECTORY) +@@ -1136,6 +1148,7 @@ distclean clean:: + + clean:: + -rm -f brltty$X brltty-trtxt$X brltty-ttb$X brltty-atb$X brltty-ctb$X brltty-tune$X xbrlapi$X ++ -rm -f brltty$X brltty-lsinc$X brltty-trtxt$X brltty-ttb$X brltty-atb$X brltty-ctb$X brltty-tune$X xbrlapi$X + -rm -f tbl2hex$(X_FOR_BUILD) *test$X *-static$X + -rm -f brlapi_constants.h *.$(LIB_EXT) *.$(LIB_EXT).* *.$(ARC_EXT) *.def *.class *.jar + -rm -f $(BLD_TOP)$(DRV_DIR)/* +diff --git a/Programs/brltty-lsinc.c b/Programs/brltty-lsinc.c +new file mode 100644 +index 0000000..9d2b026 +--- /dev/null ++++ b/Programs/brltty-lsinc.c +@@ -0,0 +1,119 @@ ++/* ++ * BRLTTY - A background process providing access to the console screen (when in ++ * text mode) for a blind person using a refreshable braille display. ++ * ++ * Copyright (C) 1995-2018 by The BRLTTY Developers. ++ * ++ * BRLTTY comes with ABSOLUTELY NO WARRANTY. ++ * ++ * This is free software, placed under the terms of the ++ * GNU Lesser General Public License, as published by the Free Software ++ * Foundation; either version 2.1 of the License, or (at your option) any ++ * later version. Please see the file LICENSE-LGPL for details. ++ * ++ * Web Page: http://brltty.app/ ++ * ++ * This software is maintained by Dave Mielke . ++ */ ++ ++#include "prologue.h" ++ ++#include ++#include ++#include ++ ++#include "log.h" ++#include "program.h" ++#include "options.h" ++#include "file.h" ++ ++BEGIN_OPTION_TABLE(programOptions) ++END_OPTION_TABLE ++ ++static void ++noMemory (void) { ++ fprintf(stderr, "%s: insufficient memory\n", programName); ++ exit(PROG_EXIT_FATAL); ++} ++ ++static int ++compareStrings (const void *string1, const void *string2) { ++ return strcmp(string1, string2); ++} ++ ++static void ++logFileName (const char *name, void *data) { ++ static void *namesTree = NULL; ++ ++ if (!tfind(name, &namesTree, compareStrings)) { ++ name = strdup(name); ++ if (!name) noMemory(); ++ if (!tsearch(name, &namesTree, compareStrings)) noMemory(); ++ printf("%s\n", name); ++ } ++} ++ ++static DATA_CONDITION_TESTER(testConditionOperand) { ++ return 1; ++} ++ ++static DATA_OPERANDS_PROCESSOR(processUnknownDirective) { ++ DataOperand directive; ++ ++ if (getDataOperand(file, &directive, NULL)) { ++ if (directive.length >= 2) { ++ if (isKeyword(WS_C("if"), directive.characters, 2)) { ++ return processConditionOperands(file, testConditionOperand, 0, NULL, data); ++ } ++ } ++ } ++ ++ return 1; ++} ++ ++static DATA_OPERANDS_PROCESSOR(processOperands) { ++ BEGIN_DATA_DIRECTIVE_TABLE ++ DATA_NESTING_DIRECTIVES, ++ DATA_CONDITION_DIRECTIVES, ++ DATA_VARIABLE_DIRECTIVES, ++ {NULL, processUnknownDirective}, ++ END_DATA_DIRECTIVE_TABLE ++ ++ return processDirectiveOperand(file, &directives, "attributes table directive", data); ++} ++ ++int ++main (int argc, char *argv[]) { ++ { ++ static const OptionsDescriptor descriptor = { ++ OPTION_TABLE(programOptions), ++ .applicationName = "brltty-lsinc", ++ .argumentsSummary = "[file ...]" ++ }; ++ ++ PROCESS_OPTIONS(descriptor, argc, argv); ++ } ++ ++ if (argc == 0) { ++ logMessage(LOG_ERR, "missing table file."); ++ return PROG_EXIT_SYNTAX; ++ } ++ ++ do { ++ const char *path = *argv++; ++ argc -= 1; ++ ++ const DataFileParameters parameters = { ++ .processOperands = processOperands, ++ .logFileName = logFileName ++ }; ++ ++ if (testProgramPath(path)) { ++ logFileName(path, parameters.data); ++ } else { ++ processDataFile(path, ¶meters); ++ } ++ } while (argc); ++ ++ return PROG_EXIT_SUCCESS; ++} +diff --git a/Programs/datafile.c b/Programs/datafile.c +index e70deb5..48235e6 100644 +--- a/Programs/datafile.c ++++ b/Programs/datafile.c +@@ -1262,9 +1262,14 @@ processDataStream ( + FILE *stream, const char *name, + const DataFileParameters *parameters + ) { +- logMessage(LOG_DEBUG, "including data file: %s", name); + int ok = 0; + ++ if (parameters->logFileName) { ++ parameters->logFileName(name, parameters->data); ++ } else { ++ logMessage(LOG_DEBUG, "including data file: %s", name); ++ } ++ + DataFile file = { + .name = name, + .parameters = parameters, +diff --git a/brltty.spec.in b/brltty.spec.in +index f5aa33d..1ac2ebf 100644 +--- a/brltty.spec.in ++++ b/brltty.spec.in +@@ -339,6 +339,7 @@ BuildArch: noarch + + AutoProv: no + AutoReq: yes ++Requires: systemd + + Summary: Systemd units and wrappers for BRLTTY. + %description -n brltty-systemd +@@ -356,6 +357,7 @@ BuildArch: noarch + + AutoProv: no + AutoReq: yes ++Requires: systemd-udev + + Summary: Udev rules for BRLTTY. + %description -n brltty-udev +@@ -364,6 +366,25 @@ This package provides the rules and wrapper for managing BRLTTY via Udev. + Install this package if you'd like to manage BRLTTY processes via Udev. + + ++%package -n brltty-dracut ++Version: @PACKAGE_VERSION@ ++Release: 1 ++Group: System Environment/Daemons ++License: LGPL ++BuildArch: noarch ++ ++AutoProv: no ++AutoReq: yes ++Requires: dracut ++Requires: brltty-utils ++ ++Summary: Dracut module for BRLTTY. ++%description -n brltty-dracut ++This package provides the module for adding BRLTTY to an initial ramdisk image. ++ ++Install this package if you'd like to have braille accessibility BRLTTY processes via Udev. ++ ++ + %package -n brlapi + Version: @api_release@ + Release: 1 +@@ -382,6 +403,26 @@ Install this package if you have an application + which directly accesses a refreshable braille display. + + ++%package -n brlapi-utils ++Version: @api_release@ ++Release: 1 ++Group: Applications/System ++License: LGPL ++ ++Requires: libX11 ++ ++BuildRequires: xorg-x11-proto-devel ++BuildRequires: libX11-devel ++BuildRequires: libXtst-devel ++ ++AutoProv: no ++AutoReq: yes ++ ++Summary: Appliation Programming Interface for BRLTTY. ++%description -n brlapi-utils ++This package provides a set of commands that use the BrlAPI interface. ++ ++ + %package -n brlapi-devel + Version: @api_release@ + Release: 1 +@@ -489,26 +530,6 @@ Install this package if you have a Tcl application + which directly accesses a refreshable braille display. + + +-%package -n brlapi-utils +-Version: @api_release@ +-Release: 1 +-Group: Applications/System +-License: LGPL +- +-Requires: libX11 +- +-BuildRequires: xorg-x11-proto-devel +-BuildRequires: libX11-devel +-BuildRequires: libXtst-devel +- +-AutoProv: no +-AutoReq: yes +- +-Summary: Appliation Programming Interface for BRLTTY. +-%description -n brlapi-utils +-This package provides a set of commands for maintaining BRLTTY's datafiles. +- +- + %prep + # %setup -n %{name}-%{version} + %setup -n @PACKAGE_TARNAME@-@PACKAGE_VERSION@ +@@ -518,8 +539,13 @@ This package provides a set of commands for maintaining BRLTTY's datafiles. + make + + %install +-make install install-documents install-messages +-make install-systemd install-udev install-appstream ++make install ++make install-documents ++make install-messages ++make install-appstream ++make install-systemd ++make install-udev ++make install-dracut + install -m 644 Documents/brltty.conf "${RPM_BUILD_ROOT}%{_sysconfdir}" + %find_lang %{name} + +@@ -542,6 +568,7 @@ rm -fr "${RPM_BUILD_ROOT}" + %exclude %{_libdir}/brltty/libbrlttyxa2.so + %exclude %{_libdir}/brltty/libbrlttyxsc.so + %{_sysconfdir}/brltty ++%exclude %{_sysconfdir}/brltty/dracut.conf + %{_datadir}/metainfo/org.a11y.brltty.metainfo.xml + %doc %{_mandir}/man1/brltty.1.gz + %doc %{_docdir}/*/LICENSE* +@@ -598,12 +625,36 @@ rm -fr "${RPM_BUILD_ROOT}" + %{_udevlibdir}/* + %{_udevrulesdir}/* + ++%files -n brltty-dracut ++/usr/lib/dracut/modules.d/99brltty ++%config(noreplace) %verify(not size md5 mtime) %{_sysconfdir}/brltty/Initramfs/dracut.conf ++%config(noreplace) %verify(not size md5 mtime) %{_sysconfdir}/brltty/Initramfs/cmdline ++ + %files -n brlapi + %defattr(-,root,root) + %{_libdir}/libbrlapi.so.* + %{_datadir}/polkit-1/actions/org.a11y.brlapi.policy + %doc %{_docdir}/*/Manual-BrlAPI + ++%files -n brlapi-utils ++%{_bindir}/xbrlapi ++%doc %{_mandir}/man1/xbrlapi.1.gz ++%{_datadir}/gdm/greeter/autostart/xbrlapi.desktop ++%{_sysconfdir}/X11/Xsession.d/60xbrlapi ++%{_bindir}/eutp ++%doc %{_mandir}/man1/eutp.1.gz ++%{_bindir}/vstp ++%doc %{_mandir}/man1/vstp.1.gz ++ ++%files -n brlapi-devel ++%defattr(-,root,root) ++%{_libdir}/libbrlapi.a ++%{_libdir}/libbrlapi.so ++%{_includedir}/brlapi.h ++%{_includedir}/brlapi_*.h ++%doc %{_mandir}/man3/* ++%doc %{_docdir}/*/BrlAPIref ++ + %files -n java-brlapi + @JAVA_JAR_DIR@/* + @JAVA_JNI_DIR@/* +@@ -618,25 +669,6 @@ rm -fr "${RPM_BUILD_ROOT}" + @TCL_DIR@/brlapi-@api_release@/libbrlapi_tcl.so + @TCL_DIR@/brlapi-@api_release@/pkgIndex.tcl + +-%files -n brlapi-devel +-%defattr(-,root,root) +-%{_libdir}/libbrlapi.a +-%{_libdir}/libbrlapi.so +-%{_includedir}/brlapi.h +-%{_includedir}/brlapi_*.h +-%doc %{_mandir}/man3/* +-%doc %{_docdir}/*/BrlAPIref +- +-%files -n brlapi-utils +-%{_bindir}/xbrlapi +-%{_bindir}/eutp +-%{_bindir}/vstp +-%doc %{_mandir}/man1/xbrlapi.1.gz +-%doc %{_mandir}/man1/eutp.1.gz +-%doc %{_mandir}/man1/vstp.1.gz +-%{_sysconfdir}/X11/Xsession.d/60xbrlapi +-%{_datadir}/gdm/greeter/autostart/xbrlapi.desktop +- + + %changelog + * Mon Feb 5 2018 Dave Mielke 5.6 +diff --git a/configure.ac b/configure.ac +index 8938c6b..b09fda8 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -38,15 +38,18 @@ AC_DEFINE_UNQUOTED([BRLAPI_REVISION], [${api_revision}], + [Define this to be the API library revision number.]) + + BRLTTY_SUMMARY_BEGIN +-brltty_build_directories=". Programs Documents Messages Android/Core Android/Application" ++brltty_build_directories=". Programs Documents Messages" + brltty_source_directory="`dirname "${0}"`" + brltty_manual_directories="" + +-for brltty_autostart_directory in `(cd "${brltty_source_directory}" && echo Autostart/*)` ++for brltty_directory in Autostart Initramfs Android + do +- test -f "${brltty_source_directory}/${brltty_autostart_directory}/Makefile.in" && { +- brltty_build_directories="${brltty_build_directories} ${brltty_autostart_directory}" +- } ++ for brltty_subdirectory in `echo "${brltty_source_directory}/${brltty_directory}/"*` ++ do ++ test -f "${brltty_subdirectory}/Makefile.in" && { ++ brltty_build_directories="${brltty_build_directories} ${brltty_subdirectory}" ++ } ++ done + done + + for brltty_manual_directory in `(cd "${brltty_source_directory}" && echo Documents/Manual-*/*)` +@@ -1957,7 +1960,7 @@ AC_OUTPUT([ + Documents/BrlAPIref.doxy + Bindings/Lisp/brlapi.lisp + Bindings/Python/setup.py +- Android/Application/res/values/configured.xml:Android/Application/res.strings.in + Autostart/Systemd/brltty@.service ++ Android/Application/res/values/configured.xml:Android/Application/res.strings.in + ${brltty_make_files} + ]) diff --git a/SOURCES/brltty-5.6-libs-add-ldflags.patch b/SOURCES/brltty-5.6-libs-add-ldflags.patch new file mode 100644 index 0000000..661658a --- /dev/null +++ b/SOURCES/brltty-5.6-libs-add-ldflags.patch @@ -0,0 +1,110 @@ +diff --git a/configure.ac b/configure.ac +index 7d93d8b..8938c6b 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -377,7 +377,7 @@ in + solaris* ) LDFLAGS_DYNAMIC="";; + *) AC_MSG_ERROR([dynamic linkage not supported for ${host_os}]);; + esac +-LDFLAGS_DYNAMIC="${LDFLAGS} BRLTTY_OPTIONS_LD2CC([${LDFLAGS_DYNAMIC}])" ++LDFLAGS_DYNAMIC="BRLTTY_OPTIONS_LD2CC([${LDFLAGS_DYNAMIC}])" + + if test "${GCC}" = "yes" + then +@@ -404,6 +404,7 @@ else + fi + + pkgconfig_flags_libs="--libs" ++ + BRLTTY_ARG_ENABLE( + [standalone-programs], + [statically linked executables], +@@ -429,40 +430,42 @@ test "${DOXYGEN}" = "false" && can_make_BrlAPIref=no || can_make_BrlAPIref=yes + AC_SUBST([can_make_BrlAPIref]) + + AC_CACHE_CHECK([for shared object creation command], [brltty_cv_prog_make_object_shared], [dnl +-case "${host_os}" +-in +- linux*|gnu*|openbsd*|freebsd*|kfreebsd*|netbsd*|*qnx*|cygwin*|mingw*|elf*) +- brltty_mkshr_ld_make="-shared" +- ;; +- solaris*) +- brltty_mkshr_ld_make="-G" +- ;; +- hpux*) +- brltty_mkshr_ld_make="-b" +- ;; +- osf*) +- brltty_mkshr_ld_make="-shared" +- ;; +- darwin*) +- brltty_mkshr_ld_make="-bundle" +- brltty_mkshr_ld_options="-flat_namespace -undefined suppress" +- brltty_mkshr_gcc_make="-bundle" +- ;; +- msdos*) +- brltty_mkshr_ld_make="not_supported_on_msdos" +- brltty_mkshr_ld_options="not_supported_on_msdos" +- brltty_mkshr_gcc_make="not_supported_on_msdos" +- ;; +- *) +- AC_MSG_ERROR([loadable module creation command not configured for ${host_os}]) +- ;; +-esac +-if test "${GCC}" = "yes" +-then +- brltty_cv_prog_make_object_shared="\$(CC) ${brltty_mkshr_gcc_make=-shared} BRLTTY_OPTIONS_LD2CC([${brltty_mkshr_ld_options}]) -o" +-else +- brltty_cv_prog_make_object_shared="\$(LD) ${brltty_mkshr_ld_make} ${brltty_mkshr_ld_options} -o" +-fi]) ++ case "${host_os}" ++ in ++ linux*|gnu*|openbsd*|freebsd*|kfreebsd*|netbsd*|*qnx*|cygwin*|mingw*|elf*) ++ brltty_mkshr_ld_make="-shared" ++ ;; ++ solaris*) ++ brltty_mkshr_ld_make="-G" ++ ;; ++ hpux*) ++ brltty_mkshr_ld_make="-b" ++ ;; ++ osf*) ++ brltty_mkshr_ld_make="-shared" ++ ;; ++ darwin*) ++ brltty_mkshr_ld_make="-bundle" ++ brltty_mkshr_ld_options="-flat_namespace -undefined suppress" ++ brltty_mkshr_gcc_make="-bundle" ++ ;; ++ *) ++ AC_MSG_ERROR([loadable module creation command not configured for ${host_os}]) ++ brltty_mkshr_ld_make="NOT_SUPPORTED" ++ brltty_mkshr_ld_options="NOT_SUPPORTED" ++ brltty_mkshr_gcc_make="NOT_SUPPORTED" ++ ;; ++ esac ++ ++ if test "${GCC}" = "yes" ++ then ++ brltty_cv_prog_make_object_shared="\$(CC) ${brltty_mkshr_gcc_make=-shared} BRLTTY_OPTIONS_LD2CC([${brltty_mkshr_ld_options}])" ++ else ++ brltty_cv_prog_make_object_shared="\$(LD) ${brltty_mkshr_ld_make} ${brltty_mkshr_ld_options}" ++ fi ++ ++ brltty_cv_prog_make_object_shared="${brltty_cv_prog_make_object_shared} ${LDFLAGS} -o" ++]) + AC_SUBST([MKSHR], ["${brltty_cv_prog_make_object_shared}"]) + + AC_CACHE_CHECK([for make relocatable object command], [brltty_cv_prog_make_object_relocatable], [dnl +@@ -541,9 +544,9 @@ in + esac + if test "${GCC}" = "yes" + then +- brltty_cv_prog_mklib="\$(CC) ${brltty_mklib_gcc_make=-shared} BRLTTY_OPTIONS_LD2CC([${brltty_mklib_ld_options+${brltty_mklib_ld_options} }]) -o" ++ brltty_cv_prog_mklib="\$(CC) \$(LDFLAGS) ${brltty_mklib_gcc_make=-shared} BRLTTY_OPTIONS_LD2CC([${brltty_mklib_ld_options+${brltty_mklib_ld_options} }]) -o" + else +- brltty_cv_prog_mklib="\$(LD) ${brltty_mklib_ld_make} ${brltty_mklib_ld_options+${brltty_mklib_ld_options} } -o" ++ brltty_cv_prog_mklib="\$(LD) \$(LDFLAGS) ${brltty_mklib_ld_make} ${brltty_mklib_ld_options+${brltty_mklib_ld_options} } -o" + fi]) + AC_SUBST([MKLIB], ["${brltty_cv_prog_mklib}"]) + diff --git a/SOURCES/brltty-5.6-ocaml-add-flags.patch b/SOURCES/brltty-5.6-ocaml-add-flags.patch new file mode 100644 index 0000000..5794380 --- /dev/null +++ b/SOURCES/brltty-5.6-ocaml-add-flags.patch @@ -0,0 +1,37 @@ +diff --git a/Bindings/OCaml/Makefile.in b/Bindings/OCaml/Makefile.in +index 47f7201..a97f55c 100644 +--- a/Bindings/OCaml/Makefile.in ++++ b/Bindings/OCaml/Makefile.in +@@ -55,25 +55,25 @@ OCAML_FILES = $(OCAML_MISC) $(OCAML_CLIBS) $(OCAML_BCLIB) $(OCAML_NCLIB) + all : $(OCAML_FILES) + + $(OCAML_CLIBS) : brlapi_stubs.$O brlapi +- $(OCAMLMKLIB) $(API_LDFLAGS) -oc $(OCAML_LIB)_stubs brlapi_stubs.$O ++ $(OCAMLMKLIB) -ldopt "$(LDFLAGS)" $(API_LDFLAGS) -oc $(OCAML_LIB)_stubs brlapi_stubs.$O + + $(OCAML_BCLIB) : $(OCAML_CLIBS) brlapi.cmo +- $(OCAMLC) -a $(OCAMLMKLIB_FLAGS) -o $(OCAML_LIB).cma brlapi.cmo ++ $(OCAMLC) -ccopt "$(CFLAGS)" -a $(OCAMLMKLIB_FLAGS) -o $(OCAML_LIB).cma brlapi.cmo + + $(OCAML_NCLIB) : $(OCAML_CLIBS) brlapi.cmx +- $(OCAMLMKLIB) $(OCAMLMKLIBOPT_FLAGS) -o $(OCAML_LIB) brlapi.cmx ++ $(OCAMLMKLIB) -ldopt "$(LDFLAGS)" $(OCAMLMKLIBOPT_FLAGS) -o $(OCAML_LIB) brlapi.cmx + + brlapi.cmi: brlapi.mli +- $(OCAMLC) -o $@ -c brlapi.mli ++ $(OCAMLC) -ccopt "$(CFLAGS)" -o $@ -c brlapi.mli + + brlapi.cmo: brlapi.ml brlapi.cmi +- $(OCAMLC) -o $@ -c brlapi.ml ++ $(OCAMLC) -ccopt "$(CFLAGS)" -o $@ -c brlapi.ml + + brlapi.cmx: brlapi.ml brlapi.cmi +- $(OCAMLOPT) -o $@ -c brlapi.cmx brlapi.ml ++ $(OCAMLOPT) -ccopt "$(CFLAGS)" -o $@ -c brlapi.cmx brlapi.ml + + brlapi_stubs.$O: $(SRC_DIR)/brlapi_stubs.c +- $(OCAMLC) -I $(BLD_TOP)$(PGM_DIR) -I $(SRC_TOP)$(PGM_DIR) -c $(SRC_DIR)/brlapi_stubs.c ++ $(OCAMLC) -ccopt "$(CFLAGS)" -I $(BLD_TOP)$(PGM_DIR) -I $(SRC_TOP)$(PGM_DIR) -c $(SRC_DIR)/brlapi_stubs.c + + brlapi.mli : $(SRC_DIR)/main.mli constants.mli + cat $(SRC_DIR)/main.mli constants.mli > $@ diff --git a/SOURCES/brltty-loadLibrary.patch b/SOURCES/brltty-loadLibrary.patch new file mode 100644 index 0000000..11ac936 --- /dev/null +++ b/SOURCES/brltty-loadLibrary.patch @@ -0,0 +1,21 @@ +diff --git a/Bindings/Java/Native.java b/Bindings/Java/Native.java +index 8a3b003..c404bf2 100644 +--- a/Bindings/Java/Native.java ++++ b/Bindings/Java/Native.java +@@ -21,7 +21,15 @@ package org.a11y.BrlAPI; + + public class Native { + static { +- System.loadLibrary("brlapi_java"); ++ try { ++ System.load( "/usr/lib64/brltty/libbrlapi_java.so" ); ++ } catch( UnsatisfiedLinkError e ) { ++ try { ++ System.load( "/usr/lib/brltty/libbrlapi_java.so" ); ++ } catch( UnsatisfiedLinkError f ) { ++ throw new UnsatisfiedLinkError("brlapi_java library load failed"); ++ } ++ } + } + + protected long handle; diff --git a/SOURCES/brltty.service b/SOURCES/brltty.service new file mode 100644 index 0000000..259b9ca --- /dev/null +++ b/SOURCES/brltty.service @@ -0,0 +1,10 @@ +[Unit] +Description=Braille display driver for Linux/Unix +Before=getty.target display-manager.service + +[Service] +Type=forking +ExecStart=/usr/bin/brltty + +[Install] +WantedBy=default.target emergency.target rescue.target diff --git a/SPECS/brltty.spec b/SPECS/brltty.spec new file mode 100644 index 0000000..e3cf925 --- /dev/null +++ b/SPECS/brltty.spec @@ -0,0 +1,1078 @@ +%define pkg_version 5.6 +%define api_version 0.6.7 + +%if 0%{?rhel} && 0%{?rhel} <= 7 +# disable python3 by default +%bcond_with python3 +%else +%bcond_without python3 +%endif + +%if 0%{?rhel} > 7 || 0%{?fedora} > 28 +# disable python2 by default +%bcond_with python2 +%else +%bcond_without python2 +%endif + +%{!?tcl_version: %global tcl_version %(echo 'puts $tcl_version' | tclsh)} +%{!?tcl_sitearch: %global tcl_sitearch %{_prefix}/%{_lib}/tcl%{tcl_version}} + +# with speech dispatcher iff on Fedora: +%define with_speech_dispatcher 0%{?fedora} + +# with espeak support iff on Fedora: +%define with_espeak 0%{?fedora} + +%global with_ocaml 1 + +# Filter private libraries +%global _privatelibs libbrltty.+\.so.* +%global __provides_exclude ^(%{_privatelibs})$ +%global __requires_exclude ^(%{_privatelibs})$ + +Name: brltty +Version: %{pkg_version} +Release: 28%{?dist} +License: LGPLv2+ +URL: http://brltty.app/ +Source0: http://brltty.app/archive/%{name}-%{version}.tar.xz +Source1: brltty.service +Patch1: brltty-loadLibrary.patch +# libspeechd.h moved in latest speech-dispatch (NOT sent upstream) +Patch2: brltty-5.0-libspeechd.patch +# Upstream patch (commits 9476bc50dc8 and 796fb282e3): +Patch3: 0001-Add-support-for-eSpeak-NG.patch +# Upstreamed +Patch4: brltty-5.6-libs-add-ldflags.patch +Patch5: brltty-5.6-ocaml-add-flags.patch +Patch6: brltty-5.6-add-dracut-support.patch +Summary: Braille display driver for Linux/Unix +BuildRequires: byacc, glibc-kernheaders, bluez-libs-devel, systemd +BuildRequires: gettext, at-spi2-core-devel, alsa-lib-devel +%if %{with_espeak} +BuildRequires: espeak-devel +%endif +BuildRequires: espeak-ng-devel +BuildRequires: /usr/bin/2to3 +BuildRequires: autoconf + +Requires: brlapi%{?_isa} = %{api_version}-%{release} +# work around a bug in the install process: +Requires(post): coreutils +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +%description +BRLTTY is a background process (daemon) which provides +access to the Linux/Unix console (when in text mode) +for a blind person using a refreshable braille display. +It drives the braille display and provides complete +screen review functionality. +%if %{with_speech_dispatcher} +BRLTTY can also work with speech synthesizers; if you want to use it with +Speech Dispatcher, please install also package %{name}-speech-dispatcher. + +%package speech-dispatcher +Summary: Speech Dispatcher driver for BRLTTY +License: LGPLv2+ +BuildRequires: speech-dispatcher-devel +Requires: %{name}%{?_isa} = %{pkg_version}-%{release} +%description speech-dispatcher +This package provides the Speech Dispatcher driver for BRLTTY. +%endif + +%package docs +Summary: Documentation for BRLTTY +License: LGPLv2+ +Requires: %{name} = %{pkg_version}-%{release} +BuildArch: noarch +%description docs +This package provides the documentation for BRLTTY. + +%package xw +Summary: XWindow driver for BRLTTY +License: LGPLv2+ +BuildRequires: libSM-devel libICE-devel libX11-devel libXaw-devel libXext-devel libXt-devel libXtst-devel +Requires: %{name}%{?_isa} = %{pkg_version}-%{release} +Requires: xorg-x11-fonts-misc, ucs-miscfixed-fonts +%description xw +This package provides the XWindow driver for BRLTTY. + +%package at-spi2 +Summary: AtSpi2 driver for BRLTTY +License: LGPLv2+ +Requires: %{name}%{?_isa} = %{pkg_version}-%{release} +%description at-spi2 +This package provides the AtSpi2 driver for BRLTTY. + +%if %{with_espeak} +%package espeak +Summary: eSpeak driver for BRLTTY +License: LGPLv2+ +Requires: %{name}%{?_isa} = %{pkg_version}-%{release} +%description espeak +This package provides the eSpeak driver for BRLTTY. +%endif + +%package espeak-ng +Summary: eSpeak-NG driver for BRLTTY +License: LGPLv2+ +Requires: %{name}%{?_isa} = %{pkg_version}-%{release} +%if ! %{with_espeak} +Obsoletes: brltty-espeak <= 5.6-5 +%endif +%description espeak-ng +This package provides the eSpeak-NG driver for BRLTTY. + +%package -n brlapi +Version: %{api_version} +License: LGPLv2+ +Summary: Application Programming Interface for BRLTTY +Requires: %{name}%{?_isa} = %{pkg_version}-%{release} +Requires(pre): glibc-common, shadow-utils +Requires(post): coreutils, util-linux +%description -n brlapi +This package provides the run-time support for the Application +Programming Interface to BRLTTY. + +Install this package if you have an application which directly accesses +a refreshable braille display. + +%package -n brlapi-devel +Version: %{api_version} +License: LGPLv2+ +Requires: brlapi%{?_isa} = %{api_version}-%{release} +Summary: Headers, static archive, and documentation for BrlAPI + +%description -n brlapi-devel +This package provides the header files, static archive, shared object +linker reference, and reference documentation for BrlAPI (the +Application Programming Interface to BRLTTY). It enables the +implementation of applications which take direct advantage of a +refreshable braille display in order to present information in ways +which are more appropriate for blind users and/or to provide user +interfaces which are more specifically attuned to their needs. + +Install this package if you are developing or maintaining an application +which directly accesses a refreshable braille display. + +%package -n tcl-brlapi +Version: %{api_version} +License: LGPLv2+ +Requires: brlapi%{?_isa} = %{api_version}-%{release} +BuildRequires: tcl-devel +Summary: Tcl binding for BrlAPI +%description -n tcl-brlapi +This package provides the Tcl binding for BrlAPI. + +%if %{with python2} +%package -n python2-brlapi +%{?python_provide:%python_provide python2-brlapi} +Version: %{api_version} +License: LGPLv2+ +Requires: brlapi%{?_isa} = %{api_version}-%{release} +BuildRequires: Cython +BuildRequires: python2-devel +BuildRequires: python2-setuptools +Summary: Python binding for BrlAPI +%description -n python2-brlapi +This package provides the Python 2 binding for BrlAPI. +%endif + +%if %{with python3} +%package -n python3-brlapi +%{?python_provide:%python_provide python3-brlapi} +Version: %{api_version} +License: LGPLv2+ +Requires: brlapi%{?_isa} = %{api_version}-%{release} +BuildRequires: python3-Cython +BuildRequires: python3-devel +%if %{without python2} +Obsoletes: python2-brlapi < %{api_version}-%{release} +Obsoletes: python-brlapi < %{api_version}-%{release} +%endif +Summary: Python 3 binding for BrlAPI +%description -n python3-brlapi +This package provides the Python 3 binding for BrlAPI. +%endif + +%package -n brlapi-java +Version: %{api_version} +License: LGPLv2+ +Requires: brlapi%{?_isa} = %{api_version}-%{release} +BuildRequires: jpackage-utils +BuildRequires: java-devel +Summary: Java binding for BrlAPI +%description -n brlapi-java +This package provides the Java binding for BrlAPI. + +%if 0%{?with_ocaml} +%package -n ocaml-brlapi +Version: %{api_version} +License: LGPLv2+ +Requires: brlapi%{?_isa} = %{api_version}-%{release} +BuildRequires: ocaml +Summary: OCaml binding for BrlAPI +%description -n ocaml-brlapi +This package provides the OCaml binding for BrlAPI. +%endif + +%package dracut +Summary: brltty module for Dracut +Requires: %{name}%{?_isa} = %{pkg_version}-%{release} +Requires: dracut +%description dracut +This package provides brltty module for Dracut. + +%define version %{pkg_version} + +%prep +%setup -qc +mv %{name}-%{version} python2 + +pushd python2 +%patch1 -p1 -b .loadLibrary +%patch2 -p1 -b .libspeechd +%patch3 -p1 -b .espeak-ng +%patch4 -p1 -b .libs-add-ldflags +%patch5 -p1 -b .ocaml-add-flags +%patch6 -p1 -b .add-dracut-support + +# remove packaged binary file +rm -f Programs/brltty-ktb +popd + +# Make a copy of the source tree for building the Python 3 module +# Make it all time, we just gonna ignore python2 or python3 when not needed +cp -a python2 python3 + + +%build +# If MAKEFLAGS=-jN is set it would break local builds. +unset MAKEFLAGS + +# Add the openjdk include directories to CPPFLAGS +for i in -I/usr/lib/jvm/java/include{,/linux}; do + java_inc="$java_inc $i" +done +export CPPFLAGS="$java_inc" + +export LDFLAGS="%{?build_ldflags}" +export CFLAGS="%{optflags} -fno-strict-aliasing $LDFLAGS" +export CXXFLAGS="%{optflags} -fno-strict-aliasing $LDFLAGS" + +# there is no curses packages in BuildRequires, so the package builds +# without them in mock; let's express this decision explicitly +configure_opts=" \ + --disable-stripping \ + --without-curses \ +%if %{with_speech_dispatcher} + --with-speechd=%{_prefix} \ +%endif +%if ! %{with_espeak} + --without-espeak \ +%endif + --with-install-root=$RPM_BUILD_ROOT + JAVA_JAR_DIR=%{_jnidir} \ + JAVA_JNI_DIR=%{_libdir}/brltty \ + JAVA_JNI=yes" + +export PYTHONCOERCECLOCALE=0 + +PYTHONS= + +%if %{with python2} +# First build everything with Python 2 support +pushd python2 +./autogen +%configure $configure_opts PYTHON=%{__python2} +# Parallel build seems broken, thus disabling it +make +popd +PYTHONS="$PYTHONS python2" +%endif + +%if %{with python3} +# ... and then do it again for the Python 3 module +pushd python3 +./autogen +%configure $configure_opts PYTHON=%{__python3} CYTHON=%{_bindir}/cython +make +popd +PYTHONS="$PYTHONS python3" +%endif + + +for python in $PYTHONS + do pushd $python + find . -name '*.sgml' | + while read file; do + iconv -f iso8859-1 -t utf-8 $file > $file.conv && mv -f $file.conv $file + done + find . -name '*.txt' | + while read file; do + iconv -f iso8859-1 -t utf-8 $file > $file.conv && mv -f $file.conv $file + done + find . -name 'README*' | + while read file; do + iconv -f iso8859-1 -t utf-8 $file > $file.conv && mv -f $file.conv $file + done + + find . \( -path ./doc -o -path ./Documents \) -prune -o \ + \( -name 'README*' -o -name '*.txt' -o -name '*.html' -o \ + -name '*.sgml' -o -name '*.patch' -o \ + \( -path './Bootdisks/*' -type f -perm /ugo=x \) \) -print | + while read file; do + mkdir -p ../doc/${file%/*} && cp -rp $file ../doc/$file || exit 1 + done + popd +done + +%install +%if 0%{?with_ocaml} +mkdir -p $RPM_BUILD_ROOT%{_libdir}/ocaml/stublibs +%endif + +%if %{with python2} +# Python 2 +pushd python2 +make install JAVA_JAR_DIR=%{_jnidir} \ + JAVA_JNI_DIR=%{_libdir}/brltty \ + JAVA_JNI=yes +popd +%endif + +%if %{with python3} +# Python 3 +pushd python3 +make install JAVA_JAR_DIR=%{_jnidir} \ + JAVA_JNI_DIR=%{_libdir}/brltty \ + JAVA_JNI=yes +popd +%endif + +%if %{with python3} +# just use the higher number here +pushd python3 +%else +pushd python2 +%endif + +install -d -m 755 "${RPM_BUILD_ROOT}%{_sysconfdir}" "$RPM_BUILD_ROOT%{_mandir}/man5" +install -m 644 Documents/brltty.conf "${RPM_BUILD_ROOT}%{_sysconfdir}" +echo ".so man1/brltty.1" > $RPM_BUILD_ROOT%{_mandir}/man5/brltty.conf.5 + +install -Dpm 644 %{SOURCE1} $RPM_BUILD_ROOT%{_unitdir}/brltty.service + +cp -p LICENSE* ../ + +# clean up the manuals: +rm Documents/Manual-*/*/{*.mk,*.made,Makefile*} +mv Documents/BrlAPIref/{html,BrlAPIref} + +for i in Drivers/Speech/SpeechDispatcher/README \ + Documents/ChangeLog Documents/TODO \ + Documents/Manual-BRLTTY \ + Drivers/Braille/XWindow/README \ + Drivers/Braille/XWindow/README \ + Documents/Manual-BrlAPI \ + Documents/BrlAPIref/BrlAPIref \ +; do + mkdir -p ../${i%/*} && cp -rp $i ../$i || exit 1 +done + +# Don't want static lib +rm -rf $RPM_BUILD_ROOT/%{_libdir}/libbrlapi.a + +# ghost brlapi.key +touch ${RPM_BUILD_ROOT}%{_sysconfdir}/brlapi.key + +# disable xbrlapi gdm autostart, there is already orca +rm -f ${RPM_BUILD_ROOT}%{_datadir}/gdm/greeter/autostart/xbrlapi.desktop + +# make brltty-config executable +chmod 755 ${RPM_BUILD_ROOT}%{_bindir}/brltty-config + +# handle locales +%find_lang %{name} +cp -p %{name}.lang ../ + +#Use python 3 for latex-access, BZ 1465657. +/usr/bin/2to3 -wn ${RPM_BUILD_ROOT}/etc/brltty/Contraction/latex-access.ctb +sed -i 's|/usr/bin/python|%{__python3}|g' ${RPM_BUILD_ROOT}/etc/brltty/Contraction/latex-access.ctb + +# install dracut module +make install-dracut + +popd + +# drop documentation already instaled by the dracut subpackage +rm -f doc/Initramfs/Dracut/README* +rmdir doc/Initramfs/Dracut doc/Initramfs + +%post +%systemd_post brltty.service + +%preun +%systemd_preun brltty.service + +%postun +%systemd_postun_with_restart brltty.service + +%pre -n brlapi +getent group brlapi >/dev/null || groupadd -r brlapi >/dev/null + +%post -n brlapi +if [ ! -e %{_sysconfdir}/brlapi.key ]; then + mcookie > %{_sysconfdir}/brlapi.key + chgrp brlapi %{_sysconfdir}/brlapi.key + chmod 0640 %{_sysconfdir}/brlapi.key +fi +/sbin/ldconfig + +%postun -n brlapi -p /sbin/ldconfig + +%files -f %{name}.lang +%config(noreplace) %{_sysconfdir}/brltty.conf +%{_sysconfdir}/brltty/ +%exclude %{_sysconfdir}/brltty/Initramfs +%{_unitdir}/brltty.service +%{_bindir}/brltty +%{_bindir}/brltty-* +%{_libdir}/brltty/ +%exclude %{_libdir}/brltty/libbrlttybba.so +%exclude %{_libdir}/brltty/libbrlttybxw.so +%exclude %{_libdir}/brltty/libbrlttyxa2.so +%exclude %{_libdir}/brltty/libbrlttysen.so +%exclude %{_libdir}/brltty/libbrlttyses.so +%exclude %{_libdir}/brltty/libbrlapi_java.so +%if %{with_speech_dispatcher} +%exclude %{_libdir}/brltty/libbrlttyssd.so +%endif +%license LICENSE-GPL LICENSE-LGPL +%doc %{_mandir}/man[15]/brltty.* +%{_sysconfdir}/X11/Xsession.d/60xbrlapi +#%%{_datadir}/metainfo/org.a11y.brltty.metainfo.xml +%{_datadir}/polkit-1/actions/org.a11y.brlapi.policy + + +%if %{with_speech_dispatcher} +%files speech-dispatcher +%doc Drivers/Speech/SpeechDispatcher/README +%{_libdir}/brltty/libbrlttyssd.so +%endif + +%files docs +%doc Documents/ChangeLog Documents/TODO +%doc Documents/Manual-BRLTTY/ +%doc doc/* + +%files xw +%doc Drivers/Braille/XWindow/README +%{_libdir}/brltty/libbrlttybxw.so + +%files at-spi2 +%{_libdir}/brltty/libbrlttyxa2.so + +%if %{with_espeak} +%files espeak +%{_libdir}/brltty/libbrlttyses.so +%endif + +%files espeak-ng +%{_libdir}/brltty/libbrlttysen.so + +%files -n brlapi +%{_bindir}/vstp +%{_bindir}/eutp +%{_bindir}/xbrlapi +%{_libdir}/brltty/libbrlttybba.so +%{_libdir}/libbrlapi.so.* +%ghost %{_sysconfdir}/brlapi.key +%doc Drivers/Braille/XWindow/README +%doc Documents/Manual-BrlAPI/ +%doc %{_mandir}/man1/xbrlapi.* +%doc %{_mandir}/man1/vstp.* +%doc %{_mandir}/man1/eutp.* + +%files -n brlapi-devel +%{_libdir}/libbrlapi.so +%{_includedir}/brltty +%{_includedir}/brlapi*.h +%doc %{_mandir}/man3/brlapi_*.3* +%doc Documents/BrlAPIref/BrlAPIref/ + +%files -n tcl-brlapi +%{tcl_sitearch}/brlapi-%{api_version} + +%if %{with python2} +%files -n python2-brlapi +%{python2_sitearch}/brlapi.so +%{python2_sitearch}/Brlapi-%{api_version}-*.egg-info +%endif + +%if %{with python3} +%files -n python3-brlapi +%{python3_sitearch}/brlapi.cpython-*.so +%{python3_sitearch}/Brlapi-%{api_version}-*.egg-info +%endif + +%files -n brlapi-java +%{_libdir}/brltty/libbrlapi_java.so +%{_jnidir}/brlapi.jar + +%if 0%{?with_ocaml} +%files -n ocaml-brlapi +%{_libdir}/ocaml/brlapi/ +%{_libdir}/ocaml/stublibs/ +%endif + +%files dracut +%{_prefix}/lib/dracut/modules.d/99brltty/ +%dir %{_sysconfdir}/brltty/Initramfs +%config(noreplace) %verify(not size md5 mtime) %{_sysconfdir}/brltty/Initramfs/dracut.conf +%config(noreplace) %verify(not size md5 mtime) %{_sysconfdir}/brltty/Initramfs/cmdline + +%changelog +* Tue Dec 11 2018 Jaroslav Škarvada - 5.6-28 +- Do not package documentation for dracut module twice + Related: rhbz#1655345 + +* Tue Dec 11 2018 Jaroslav Škarvada - 5.6-27 +- Rebased dracut support to upstream version + Resolves: rhbz#1655345 + +* Wed Dec 5 2018 Jaroslav Škarvada - 5.6-26 +- Improved CFLAGS handling when building Ocaml bindings + Related: rhbz#1655344 + +* Wed Dec 5 2018 Jaroslav Škarvada - 5.6-25 +- Built OCaml bindings with distribution CFLAGS and consolidated patches + Resolves: rhbz#1655344 + +* Sun Dec 2 2018 Jaroslav Škarvada - 5.6-24 +- Fixed CI gating settings + Resolves: rhbz#1648292 + +* Thu Aug 9 2018 Jaroslav Škarvada - 5.6-23 +- Fixed FTBFS + Resolves: rhbz#1611708 + +* Wed Jun 20 2018 Tomas Orsava - 5.6-22 +- Switch hardcoded python3 shebangs into the %%{__python3} macro + +* Mon Jun 11 2018 Jaroslav Škarvada - 5.6-21 +- Improved brltty service to start before display manager and getty + +* Fri Jun 8 2018 Jaroslav Škarvada - 5.6-20 +- Fixed installation of multiple drivers and text tables in Dracut module + if environment variables are used + +* Mon Jun 4 2018 Jaroslav Škarvada - 5.6-19 +- Fixed Dracut module requirements + +* Mon Jun 4 2018 Jaroslav Škarvada - 5.6-18 +- Improved Dracut module to support more boot command line arguments + +* Fri Jun 1 2018 Jaroslav Škarvada - 5.6-17 +- Updated URL and Source + +* Thu May 31 2018 Tomas Korbar - 5.6-16 +- Added Dracut module + +* Tue May 29 2018 Jaroslav Škarvada - 5.6-15 +- Added support for ALSA + +* Thu May 24 2018 Jaroslav Škarvada - 5.6-14 +- Also enabled systemd service in rescue target + +* Thu May 24 2018 Jaroslav Škarvada - 5.6-13 +- Systemd service is now installed to default and emergency targets, + because assistive technology should be available there + +* Tue May 22 2018 Jaroslav Škarvada - 5.6-12 +- Switched to upstream patch adding LDFLAGS to more libraries + Related: rhbz#1543490 + +* Mon May 21 2018 Jaroslav Škarvada - 5.6-11 +- Added LDFLAGS to more libraries + Related: rhbz#1543490 + +* Thu Apr 26 2018 Richard W.M. Jones - 5.6-10 +- OCaml 4.07.0-beta2 rebuild. + +* Wed Apr 25 2018 Jaroslav Škarvada - 5.6-9 +- Switched to upstream patch fixing building with distro's LDFLAGS + Related: rhbz#1543490 + +* Tue Apr 24 2018 Jaroslav Škarvada - 5.6-8 +- Build with distro's LDFLAGS + Related: rhbz#1543490 + +* Fri Mar 16 2018 Miro Hrončok - 5.6-7 +- Don't build Python 2 subpackage on EL > 7 and Fedora > 28 +- Use bconditionals + +* Thu Mar 08 2018 Ondřej Lysoněk - 5.6-6 +- Build with espeak support only on Fedora + +* Tue Mar 06 2018 Ondřej Lysoněk - 5.6-5 +- Add support for eSpeak-NG + +* Tue Mar 06 2018 Ondřej Lysoněk - 5.6-4 +- Fix the License tags. The license of whole brltty is LGPLv2+ since + the 5.6 release. + +* Mon Feb 26 2018 Ondřej Lysoněk - 5.6-3 +- Fix generating the brltty-debugsource package + +* Mon Feb 12 2018 Gwyn Ciesla - 5.6-2 +- Flag fixes. + +* Tue Feb 06 2018 Gwyn Ciesla - 5.6-1 +- 5.6 + +* Fri Dec 15 2017 Iryna Shcherbina - 5.5-12 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Fri Nov 17 2017 Richard W.M. Jones - 5.5-11 +- OCaml 4.06.0 rebuild. + +* Wed Oct 04 2017 Troy Dawson - 5.5-10 +- Cleanup spec file conditionals + +* Sat Aug 19 2017 Zbigniew Jędrzejewski-Szmek - 5.5-9 +- Python 2 binary package renamed to python2-brltty + See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3 + +* Tue Aug 08 2017 Richard W.M. Jones - 5.5-8 +- OCaml 4.05.0 rebuild. + +* Wed Aug 02 2017 Fedora Release Engineering - 5.5-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 5.5-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Jul 11 2017 Gwyn Ciesla - 5.5-5 +- Use python 3 for latex-access, BZ 1465657. + +* Tue Jun 27 2017 Gwyn Ciesla - 5.5-4 +- OCaml 4.04.2 rebuild. + +* Thu Jun 22 2017 Gwyn Ciesla - 5.5-3 +- Fix Python-related FTBFS. + +* Fri May 12 2017 Richard W.M. Jones - 5.5-2 +- OCaml 4.04.1 rebuild. + +* Wed Apr 19 2017 Gwyn Ciesla - 5.5-1 +- 5.5, BZ 1443262. + +* Fri Mar 17 2017 Stephen Gallagher - 5.4-8 +- Don't pass unnecessary -Wno-format to Python bindings +- Fixes FTBFS on gcc7 + +* Fri Feb 10 2017 Fedora Release Engineering - 5.4-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Dec 19 2016 Miro Hrončok - 5.4-6 +- Rebuild for Python 3.6 + +* Wed Nov 9 2016 Jaroslav Škarvada - 5.4-5 +- Used upstream fix for OCaml 4.04 + +* Tue Nov 08 2016 Richard W.M. Jones - 5.4-4 +- Add fix for OCaml 4.04 (thanks: Jaroslav Škarvada). + +* Sat Nov 05 2016 Richard W.M. Jones - 5.4-3 +- Rebuild for OCaml 4.04.0. + +* Tue Jul 19 2016 Fedora Release Engineering - 5.4-2 +- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages + +* Wed Jun 29 2016 Jaroslav Škarvada - 5.4-1 +- New version + Resolves: rhbz#1350990 +- Dropped xw-fonts-fix and async-wait patches (both upstreamed) + +* Fri May 13 2016 Jaroslav Škarvada - 5.3.1-8 +- Fixed async wait to handle zero timeouts (by async-wait patch) + +* Wed May 4 2016 Jaroslav Škarvada - 5.3.1-7 +- Made brltty-config executable, currently useless, but FHS compliant + Resolves: rhbz#1332981 + +* Mon Apr 11 2016 Jaroslav Škarvada - 5.3.1-6 +- Improved fix for XW driver not showing Braille characters + Related: rhbz#1324669 + +* Thu Apr 7 2016 Jaroslav Škarvada - 5.3.1-5 +- Fixed XW driver to show Braille characters + Related: rhbz#1324669 +- No need to explicitly harden +- Added architecture to subpackages requirements +- Made brltty main package to explicitly requires specific brlapi version +- Renumbered patches + +* Tue Apr 5 2016 Jaroslav Škarvada - 5.3.1-4 +- Dropped man-fix patch (upstreamed) +- Hardened build + Related: rhbz#1092547 + +* Wed Feb 03 2016 Fedora Release Engineering - 5.3.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Wed Dec 23 2015 Jon Ciesla - 5.3.1-2 +- Bump rel, api is the same. + +* Wed Dec 23 2015 Jon Ciesla - 5.3.1-1 +- 5.3.1, BZ 1293612. + +* Tue Dec 15 2015 Jon Ciesla - 5.3-1 +- 5.3, BZ 1291657. +- Man fix upstreamed. + +* Tue Nov 10 2015 Fedora Release Engineering - 5.2-12 +- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5 + +* Tue Jul 28 2015 Richard W.M. Jones - 5.2-11 +- OCaml 4.02.3 rebuild. + +* Wed Jun 24 2015 Richard W.M. Jones - 5.2-10 +- ocaml-4.02.2 final rebuild. + +* Wed Jun 17 2015 Richard W.M. Jones - 5.2-9 +- ocaml-4.02.2 rebuild. + +* Wed Jun 17 2015 Fedora Release Engineering - 5.2-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Mon May 25 2015 Jaroslav Škarvada - 5.2-7 +- Fixed manual page + Resolves: rhbz#1224661 + +* Mon Mar 23 2015 Jaroslav Škarvada - 5.2-6 +- Dropped AtSpi driver + Related: rhbz#1204462 + +* Mon Mar 23 2015 Jaroslav Škarvada - 5.2-5 +- Added support for AtSpi2 driver + Resolves: rhbz#1204462 +- Added support for eSpeak driver +- Filtered private libraries from provides/requires + +* Tue Feb 17 2015 Richard W.M. Jones - 5.2-4 +- ocaml-4.02.1 rebuild. + +* Tue Feb 17 2015 Jaroslav Škarvada - 5.2-3 +- Rebuilt for new ocaml + +* Mon Jan 26 2015 David Tardon - 5.2-2 +- rebuild for ICU 54.1 + +* Wed Nov 12 2014 Jon Ciesla - 5.2-1 +- 5.2, BZ 1163112. + +* Sun Aug 31 2014 Richard W.M. Jones - 5.1-12 +- ocaml-4.02.0 final rebuild. + +* Tue Aug 26 2014 David Tardon - 5.1-11 +- rebuild for ICU 53.1 + +* Sat Aug 23 2014 Richard W.M. Jones - 5.1-10 +- ocaml-4.02.0+rc1 rebuild. + +* Fri Aug 15 2014 Fedora Release Engineering - 5.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Aug 02 2014 Richard W.M. Jones - 5.1-8 +- ocaml-4.02.0-0.8.git10e45753.fc22 rebuild. + +* Mon Jul 21 2014 Richard W.M. Jones - 5.1-7 +- OCaml 4.02.0 beta rebuild (with fixed compiler). + +* Mon Jul 14 2014 Jaroslav Škarvada - 5.1-6 +- Rebuilt for new ocaml + +* Sat Jun 07 2014 Fedora Release Engineering - 5.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Tue May 27 2014 Kalev Lember - 5.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Changes/Python_3.4 + +* Tue May 20 2014 Jaroslav Škarvada - 5.1-3 +- Rebuilt for tcl/tk8.6 + +* Tue Apr 15 2014 Richard W.M. Jones - 5.1-2 +- Remove ocaml_arches macro (RHBZ#1087794). + +* Thu Mar 27 2014 Jon Ciesla - 5.1-1 +- 5.1, BZ 1081459. +- Fixed Source URL. + +* Thu Feb 20 2014 Jaroslav Škarvada - 5.0-1 +- New version + Resolves: rhbz#1067337 +- Dropped man-fix patch (upstreamed) +- De-fuzzified libspeechd patch +- Handled locales +- Switched to xz compressed sources + +* Thu Feb 13 2014 Jon Ciesla - 4.5-10 +- libicu rebuild. +- Add python-setuptools BR. + +* Mon Sep 23 2013 Jaroslav Škarvada - 4.5-9 +- The brlapi.key is now preset, users in the brlapi group have access + Resolves: rhbz#1010656 + +* Sat Sep 14 2013 Richard W.M. Jones - 4.5-8 +- Rebuild for OCaml 4.01.0. +- Create stublibs directory for OCaml, else install fails. +- Unset MAKEFLAGS so that MAKEFLAGS=-j does not break local builds. +- In new speech-dispatcher, has moved to a subdirectory. + +* Sat Aug 03 2013 Fedora Release Engineering - 4.5-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Jul 15 2013 Jaroslav Škarvada - 4.5-6 +- Updated man page + +* Fri May 10 2013 Jon Ciesla - 4.5-5 +- Add systemd unit file, BZ 916628. +- Drop spurious post scripts. +- Move eveything but man pages and license files top -docs. + +* Thu May 9 2013 Jaroslav Škarvada - 4.5-4 +- Conditionally build python3 + +* Tue Apr 30 2013 Jon Ciesla - 4.5-3 +- Add bluetooth support, BZ 916628. + +* Thu Apr 04 2013 Kalev Lember - 4.5-2 +- Don't install the library in /lib now that we have UsrMove + +* Thu Apr 04 2013 Kalev Lember - 4.5-1 +- Update to 4.5 +- Add Python 3 support (python3-brlapi) + +* Wed Feb 13 2013 Fedora Release Engineering - 4.3-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Tue Jan 8 2013 Jaroslav Škarvada - 4.3-12 +- Build with -fno-strict-aliasing + +* Wed Dec 19 2012 Stanislav Ochotnicky - 4.3-11 +- revbump after jnidir change + +* Wed Dec 12 2012 Jaroslav Škarvada - 4.3-10 +- Fixed directories, install to /usr prefix + +* Wed Dec 12 2012 Stanislav Ochotnicky - 4.3-9 +- Fix up java subpackage installation directories +- Fix java JNI loading code + +* Wed Oct 17 2012 Jon Ciesla - 4.3-8 +- Bump and rebuild for new ocaml. + +* Wed Jul 18 2012 Fedora Release Engineering - 4.3-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Fri Jun 08 2012 Jon Ciesla - 4.3-6 +- Bump and rebuild for ocaml 4.00.0. + +* Fri Mar 23 2012 Dan Horák - 4.3-5 +- conditionalize ocaml support +- fix build on 64-bit arches + +* Mon Feb 06 2012 Jon Ciesla - 4.3-4 +- Added ocaml subpackage, BZ 702724. + +* Fri Feb 03 2012 Jon Ciesla - 4.3-3 +- Fixed libbrlapi.so symlink, BZ 558132. + +* Thu Jan 12 2012 Fedora Release Engineering - 4.3-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Oct 18 2011 Jon Ciesla - 4.3-1 +- New upstream. +- S_ISCHR patch upstreamed. +- parallel patch updated. +- Cleaned up some file encodings. + +* Mon Feb 07 2011 Fedora Release Engineering - 4.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Wed Jul 21 2010 David Malcolm - 4.2-3 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Fri May 21 2010 Tom "spot" Callaway - 4.2-2 +- rework parallel patch slightly and reapply + +* Fri May 21 2010 Tom "spot" Callaway - 4.2-1 +- update to 4.2 +- drop static lib (bz 556041) +- fix undefined S_ISCHR call + +* Wed Jan 20 2010 Stepan Kasal - 4.1-5 +- requires(post): coreutils to work around an installator bug +- Resolves: #540437 + +* Wed Jan 13 2010 Stepan Kasal - 4.1-4 +- limit building against speech-dispatcher to Fedora +- Resolves: rhbz#553795 + +* Sun Nov 1 2009 Stepan Kasal - 4.1-3 +- build the TTY driver (it was disabled since it first appered in 3.7.2-1) +- build with speech-dispatcher, packed into a separate sub-package + +* Fri Oct 30 2009 Stepan Kasal - 4.1-2 +- move data-directory back to default: /etc/brltty +- move brltty to /bin and /lib, so that it can be used to repair the system + without /usr mounted (#276181) +- move vstp and libbrlttybba.so to brlapi +- brltty no longer requires brlapi +- brlapi now requires brltty from the same build + +* Wed Oct 28 2009 Stepan Kasal - 4.1-1 +- new upstream version +- use --disable-stripping instead of make variable override +- install the default brltty-pm.conf to docdir only (#526168) +- remove the duplicate copies of rhmkboot and rhmkroot from docdir +- patch configure so that the dirs in summary are not garbled: + brltty-autoconf-quote.patch +- move data-directory to ${datadir}/brltty + +* Tue Oct 20 2009 Stepan Kasal - 4.0-2 +- escape rpm macros in the rpm change log +- add requires to bind subpackages from one build together + +* Wed Oct 7 2009 Stepan Kasal - 4.0-1 +- new upstream version +- drop upstreamed patches; ./autogen not needed anymore +- pack the xbrlapi server; move its man page to brlapi package +- add man-page for brltty.conf (#526168) + +* Fri Jul 24 2009 Fedora Release Engineering - 3.10-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild + +* Tue May 12 2009 Stepan Kasal - 3.10-5 +- rebuild after java-1.5.0-gcj rebuild + +* Thu Apr 30 2009 Stepan Kasal - 3.10-4 +- own the tcl subdirectory (#474032) +- set CPPFLAGS to java include dirs, so that the java bindings build with + any java implementation (#498964) +- add --without-curses; there is no curses package BuildRequired anyway + +* Mon Feb 23 2009 Fedora Release Engineering - 3.10-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild + +* Sat Nov 29 2008 Ignacio Vazquez-Abrams - 3.10-2 +- Rebuild for Python 2.6 + +* Sat Sep 13 2008 Stepan Kasal - 3.10-1 +- new upstream release +- drop brltty-3.9-java-svn.patch, brltty-3.9-tcl85path.patch, + and brltty-3.9-pyxfix.patch, they are upstream +- fix BuildRoot +- fix many sub-packages' Requires on brlapi + +* Wed Sep 10 2008 Stepan Kasal - 3.9-3 +- add brltty-3.9-autoconf.patch to fix to build with Autoconf 2.62 +- add brltty-3.9-parallel.patch to fix race condition with parallel make +- add brltty-3.9-pyxfix.patch to fix build with current pyrex +- Summary lines shall not end with a dot + +* Thu Feb 28 2008 Tomas Janousek - 3.9-2.2 +- glibc build fixes +- applied java reorganisations from svn + +* Wed Feb 20 2008 Fedora Release Engineering - 3.9-2.1 +- Autorebuild for GCC 4.3 + +* Wed Jan 09 2008 Tomas Janousek - 3.9-1.1 +- specfile update to comply with tcl packaging guidelines + +* Mon Jan 07 2008 Tomas Janousek - 3.9-1 +- update to latest upstream (3.9) + +* Tue Sep 18 2007 Tomas Janousek - 3.8-2.svn3231 +- update to r3231 from svn +- added java binding subpackage + +* Wed Aug 29 2007 Tomas Janousek - 3.8-2.svn3231 +- update to r3231 from svn + +* Tue Aug 21 2007 Tomas Janousek - 3.8-1 +- update to latest upstream +- added the at-spi driver, tcl and python bindings +- fixed the license tags + +* Mon Mar 05 2007 Tomas Janousek - 3.7.2-3 +- added the XWindow driver +- build fix for newer byacc + +* Tue Jan 30 2007 Tomas Janousek - 3.7.2-2.1 +- quiet postinstall scriptlet, really fixes #224570 + +* Tue Jan 30 2007 Tomas Janousek - 3.7.2-2 +- failsafe postinstall script, fixes #224570 +- makefile fix - debuginfo extraction now works + +* Thu Jan 25 2007 Tomas Janousek - 3.7.2-1.1 +- fix building with newer kernel-headers (#224149) + +* Wed Jul 12 2006 Petr Rockai - 3.7.2-1 +- upgrade to latest upstream version +- split off brlapi and brlapi-devel packages + +* Wed Jul 12 2006 Jesse Keating - 3.2-12.1 +- rebuild + +* Sun Jul 02 2006 Florian La Roche +- for the post script require coreutils + +* Mon Jun 05 2006 Jesse Keating - 3.2-11 +- Added byacc BuildRequires, removed prereq, coreutils is always there + +* Fri Feb 10 2006 Jesse Keating - 3.2-10.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 3.2-10.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Mar 16 2005 Bill Nottingham 3.2-10 +- rebuild + +* Fri Nov 26 2004 Florian La Roche +- add a %%clean into .spec + +* Thu Oct 14 2004 Adrian Havill 3.2-5 +- chmod a-x for conf file (#116244) + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Tue Sep 30 2003 Florian La Roche +- prereq coreutils for mknod/chown/chmod + +* Mon Jul 07 2003 Adrian Havill 3.2-2 +- changed spec "Copyright" to "License" +- use %%configure macro, %%{_libdir} for non-ia32 archs +- removed unnecessary set and unset, assumed/default spec headers +- fixed unpackaged man page, duplicate /bin and /lib entries +- use plain install vs scripts for non-i386 buildsys