| #!/bin/bash | |
| ############################################################################### | |
| # 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-2023 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 <dave@mielke.cc>. | |
| ############################################################################### | |
| . "`dirname "${0}"`/brltty-prologue.sh" | |
| showProgramUsagePurpose() { | |
| cat <<END_OF_PROGRAM_USAGE_PURPOSE | |
| Configure a BRLTTY build for a specific ABI (application binary interface) of the Android platform. | |
| END_OF_PROGRAM_USAGE_PURPOSE | |
| } | |
| showProgramUsageNotes() { | |
| cat <<END_OF_PROGRAM_USAGE_NOTES | |
| This script is used by cfg-android, and is for internal use only. | |
| END_OF_PROGRAM_USAGE_NOTES | |
| } | |
| # Braille drivers already disabled: | |
| # lb (by --without-libbraille) | |
| # xw (by --disable-x) | |
| readonly configureOptions=( | |
| --disable-expat | |
| --disable-gpm | |
| --disable-iconv | |
| --disable-icu | |
| --disable-liblouis | |
| --disable-polkit | |
| --disable-x | |
| --without-libbraille | |
| --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 | |
| --without-swift | |
| --without-theta | |
| --with-speech-driver=an,-all | |
| --with-screen-driver=an,-all | |
| --without-pgmpath-package | |
| --without-pgmprivs-package | |
| --without-service-package | |
| --without-params-package | |
| --without-charset-package | |
| --without-rgx-package | |
| --without-hostcmd-package | |
| --without-mntpt-package | |
| --without-mntfs-package | |
| --without-bell-package | |
| --without-leds-package | |
| --without-beep-package | |
| --without-midi-package | |
| --without-fm-package | |
| --without-hid-package | |
| --without-ports-package | |
| --disable-emacs-bindings | |
| --disable-lua-bindings | |
| ) | |
| setProperties() { | |
| declare -g -A properties | |
| local ok=true | |
| local property | |
| for property in ARCH -CFLAGS -LDFLAGS NDK PLATFORM SOURCE SYSTEM TOOLCHAIN | |
| do | |
| local optional=false | |
| [ "${property:0:1}" != "-" ] || { | |
| optional=true | |
| property="${property:1}" | |
| } | |
| local variable="BRLTTY_ANDROID_${property}" | |
| local value="${!variable}" | |
| "${optional}" || { | |
| [ -n "${value}" ] || { | |
| logError "property not set: ${property}" | |
| ok=false | |
| } | |
| } | |
| properties["${property}"]="${value}" | |
| done | |
| "${ok}" || exit 9 | |
| } | |
| makeToolChain() { | |
| [ -d "${properties[TOOLCHAIN]}" ] || { | |
| logMessage task "installing tool chain for ABI: ${abiName}" | |
| VERBOSE=no "${properties[NDK]}/build/tools/make-standalone-toolchain.sh" \ | |
| --platform="${properties[PLATFORM]}" \ | |
| --arch="${properties[ARCH]}" \ | |
| --install-dir="${properties[TOOLCHAIN]}" || exit "${?}" | |
| } | |
| } | |
| linkMissingHeaders() { | |
| local buildInclude="/usr/include" | |
| local hostInclude="${properties[TOOLCHAIN]}/sysroot${buildInclude}" | |
| local header | |
| for header in bluetooth | |
| do | |
| local hostHeader="${hostInclude}/${header}" | |
| [ ! -e "${hostHeader}" ] || continue | |
| local buildHeader="${buildInclude}/${header}" | |
| [ -e "${buildHeader}" ] || continue | |
| logNote "adding symbolic link for header: ${abiName}: ${header}" | |
| ln -s "${buildHeader}" "${hostHeader}" || exit "${?}" | |
| done | |
| } | |
| findTool() { | |
| local variable="${1}" | |
| local name="${2}" | |
| logDetail "finding tool: ${name}" | |
| local path="${toolsDirectory}/${properties["SYSTEM"]}-${name}" | |
| [ -f "${path}" ] || { | |
| logError "tool not found: ${path}" | |
| exit 8 | |
| } | |
| logNote "tool found: ${path}" | |
| setVariable "${variable}" "${path}" | |
| export "${variable}" | |
| } | |
| addProgramOption f flag forceReconfigure "force a reconfigure" | |
| addProgramParameter ABI abiName "name of ABI to configure" "the source tree" | |
| parseProgramArguments "${@}" | |
| set -e | |
| abiRoot="${programDirectory}/Android/ABI/${abiName}" | |
| abiPropertiesFile="${abiRoot}/build.properties" | |
| [ -f "${abiPropertiesFile}" ] || syntaxError "unrecognized ABI: ${abiName}" | |
| . "${abiPropertiesFile}" | |
| setProperties | |
| makeToolChain | |
| linkMissingHeaders | |
| buildDirectory="$(pwd)" | |
| buildMakeFile="${buildDirectory}/Makefile" | |
| if [ -f "${buildMakeFile}" ] | |
| then | |
| if "${forceReconfigure}" | |
| then | |
| logWarning "reconfiguring build: ${buildDirectory}" | |
| else | |
| logNote "build already configured: ${buildDirectory}" | |
| exit 0 | |
| fi | |
| else | |
| logMessage task "configuring build: ${buildDirectory}" | |
| fi | |
| toolsDirectory="${properties[TOOLCHAIN]}/bin" | |
| export PATH="${PATH}:${toolsDirectory}" | |
| findTool CC gcc | |
| findTool LD ld | |
| findTool STRIP strip | |
| findTool RANLIB ranlib | |
| sysrootDirectory="${properties[TOOLCHAIN]}/sysroot" | |
| export PKG_CONFIG_SYSROOT_DIR="${sysrootDirectory}" | |
| export PKG_CONFIG_LIBDIR="${sysrootDirectory}/usr/lib/pkgconfig:${sysrootDirectory}/usr/share/pkgconfig" | |
| export PKG_CONFIG_PATH="" | |
| export CFLAGS="${properties[CFLAGS]}" | |
| export LDFLAGS="${properties[LDFLAGS]}" | |
| "${properties[SOURCE]}/configure" --quiet --host="${properties[SYSTEM]}" "${configureOptions[@]}" | |
| exit 0 |