blob: a4a2ad0225cc5820f97dcc2bd79c5bb28898cf36 [file] [log] [blame]
#!/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