#! /usr/bin/env bash # # libutf8proc-EastAsianWidth.sh # # Copyright (c) 2020-2024 Akinori Hattori # # SPDX-License-Identifier: MIT # # # usage: libutf8proc-EastAsianWidth.sh [] # requirements: # - curl # - gcc # - make # - ruby # - xz-utils # set -eo pipefail TMPDIR="$(mktemp -d)" trap "rm -rf \"${TMPDIR}\"" EXIT PN="libutf8proc" if [[ -n "${1}" ]]; then PV="tags/v${1//v}" else PV="latest" fi S="${TMPDIR}/${PN}" T="${TMPDIR}/temp" D="$(pwd)" JQ_PV="jq-1.7.1" if [[ $(uname -m) = "x86_64" ]]; then JQ_BIN="jq-linux-amd64" JL_ARCH="x64" JL_PLAT="linux-x86_64" else JQ_BIN="jq-linux-i386" JL_ARCH="x86" JL_PLAT="linux-i686" fi einfo() { echo -e " \e[32;1m*\e[0m ${@}" } setup() { mkdir -p "${T}"/bin export PATH="${T}/bin:${PATH}" einfo "install jq" curl -sSo "${T}"/bin/jq "https://github.com/jqlang/jq/releases/download/${JQ_PV}/${JQ_BIN}" chmod +x "${T}"/bin/jq einfo "install Julia" curl -sS "https://api.github.com/repos/JuliaLang/julia/releases/latest" \ | jq -r --arg arch "${JL_ARCH}" --arg plat "${JL_PLAT}" '"https://julialang-s3.julialang.org/bin/linux/\($arch)/\((.tag_name[1:] | split("."))[:2] | join("."))/julia-\(.tag_name[1:])-\($plat).tar.gz"' \ | xargs curl -sS \ | tar -zxC "${T}" --strip-components 1 } unpack() { mkdir -p "${S}" curl -sS "https://api.github.com/repos/juliastrings/${PN#lib}/releases/${PV}" \ | jq -r '.tarball_url' \ | xargs curl -sSL \ | tar -zxC "${S}" --strip-components 1 } prepare() { sed -i '/# wide or full/s/#/|| width=="A" #/' data/charwidths.jl } compile() { make ${PN}.so make update } pack() { local eaw="EastAsianWidth-$(grep "^UNICODE_VERSION=" data/Makefile | cut -d = -f 2)" xz -c ${PN#lib}_data.c >"${D}"/${PN}-${eaw}.xz touch -r ${PN#lib}.c "${D}"/${PN}-${eaw}.xz } for func in setup unpack prepare compile pack; do echo ">>> ${func}" case "${func}" in prepare|compile|pack) cd "${S}" ;; *) cd "${TMPDIR}" ;; esac ${func} done echo echo "... done!"