| #!/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 |