#!/bin/bash set -e shopt -s extglob nullglob if [[ $# == 0 ]]; then echo "usage: $0 <package>" exit fi export PKG_MAKE=$0 export PKG_NAME=${1%_} export PKG_BASE=$(realpath "$(dirname "$0")") . "${PKG_BASE}/helper.sh" if [[ ! -x ${PKG_BASE}/util/arid || ${PKG_BASE}/util/arid -ot ${PKG_BASE}/util/arid.cpp ]]; then g++ -I ~/menes -o "${PKG_BASE}"/util/arid{,.cpp} fi if [[ ! -x ${PKG_BASE}/util/ldid || ${PKG_BASE}/util/ldid -ot ${PKG_BASE}/util/ldid.cpp ]]; then g++ -I ~/menes -o "${PKG_BASE}"/util/ldid{,.cpp} -x c "${PKG_BASE}"/util/{lookup2,sha1}.c fi for DEP_NAME in "${PKG_DEPS[@]}"; do "${PKG_MAKE}" "${DEP_NAME}" done export PKG_HASH=$({ "${PKG_BASE}"/util/catdir.sh "${PKG_DATA}" -L \( -name '.svn' -o -name '_*' \) -prune -o for DEP_NAME in "${PKG_DEPS[@]}"; do "${PKG_BASE}"/util/catdir.sh "$(PKG_DEST_ "${DEP_NAME}")" done } | md5sum | cut -d ' ' -f 1) echo "hashed data ${PKG_NAME} to: ${PKG_HASH}" if [[ -e "${PKG_STAT}/data-md5" && ${PKG_HASH} == $(cat "${PKG_STAT}/data-md5") ]]; then echo "skipping re-build of ${PKG_NAME}" exit fi mkdir -p "${PKG_STAT}" rm -f "${PKG_STAT}/data-md5" rm -rf "${PKG_DEST}" mkdir -p "${PKG_DEST}" rm -rf "${PKG_WORK}" mkdir -p "${PKG_WORK}" function pkg:patch() { pkg:libtool_ libtool pkg:libtool_ ltmain.sh for diff in "${PKG_DATA}"/*.diff; do echo "patching with ${diff}..." patch -p1 <"${diff}" done } export -f pkg:patch function pkg:bin() { if [[ $# -eq 0 ]]; then pushd "${PKG_DEST}/usr/bin" set $(ls) popd fi mkdir -p "${PKG_DEST}/bin" for bin in "$@"; do mv -v "${PKG_DEST}/usr/bin/${bin}" "${PKG_DEST}/bin/${bin}" done rmdir --ignore-fail-on-non-empty -p "${PKG_DEST}/usr/bin" } export -f pkg:bin function pkg:autoconf() { for m4 in $(find -name "*.m4"); do patch -r/dev/null "${m4}" "${PKG_BASE}/util/libtool.m4.diff" || true done autoconf } export -f pkg:autoconf export PKG_CONF=./configure function pkg:libtool_() { for ltmain in $(find -name "$1"); do patch -r/dev/null "${ltmain}" "${PKG_BASE}/util/libtool.diff" || true done } export -f pkg:libtool_ function pkg:setup() { pkg:extract cd * pkg:patch } export -f pkg:setup function pkg:configure() { PKG_CONFIG="$(realpath "${PKG_BASE}/util/pkg-config.sh")" \ ac_cv_prog_cc_g=no \ ac_cv_prog_cxx_g=no \ "${PKG_CONF}" \ --build=x86_64-unknown-linux-gnu \ --host="${PKG_TARG}" \ --enable-static=no \ --enable-shared=yes \ --prefix=$(cat "${PKG_BASE}/arch/${PKG_ARCH}/prefix") \ --localstatedir="/var/cache/${PKG_NAME}" \ "$@" } export -f pkg:configure function pkg:install() { make install DESTDIR="${PKG_DEST}" "$@" } export -f pkg:install function pkg:extract() { for tgz in "${PKG_DATA}"/{*.tar.gz,*.tgz}; do tar -zxf "${tgz}" done for zip in "${PKG_DATA}"/*.zip; do unzip "${zip}" done for tbz2 in "${PKG_DATA}"/*.tar.bz2; do tar -jxf "${tbz2}" done } export -f pkg:extract function pkg:usrbin() { pkg: mkdir -p /usr/bin pkg: cp -a "$@" /usr/bin } export -f pkg:usrbin cd "${PKG_WORK}" "${PKG_BASE}/exec.sh" "${PKG_NAME}" . "${PKG_DATA}/make.sh" function rmdir_() { if [[ -d "$1" ]]; then rmdir --ignore-fail-on-non-empty "$1" fi } rm -rf "${PKG_DEST}/usr/share/locale" rm -rf "${PKG_DEST}/usr/share/man" rm -rf "${PKG_DEST}/usr/share/info" rm -rf "${PKG_DEST}/usr/share/gtk-doc" rm -rf "${PKG_DEST}/usr/share/doc" rm -rf "${PKG_DEST}/usr/man" rm -rf "${PKG_DEST}/usr/local/share/man" rm -rf "${PKG_DEST}/usr/local/OpenSourceVersions" rm -rf "${PKG_DEST}/usr/local/OpenSourceLicenses" rm -f "${PKG_DEST}/usr/lib/charset.alias" rm -rf "${PKG_DEST}/usr/info" rm -rf "${PKG_DEST}/usr/docs" rm -rf "${PKG_DEST}/usr/doc" rmdir_ "${PKG_DEST}/usr/share" rmdir_ "${PKG_DEST}/usr/local/share" rmdir_ "${PKG_DEST}/usr/local" rmdir_ "${PKG_DEST}/usr/lib" rmdir_ "${PKG_DEST}/usr" if [[ -e "${PKG_BASE}/arch/${PKG_ARCH}/strip" ]]; then . "${PKG_BASE}/arch/${PKG_ARCH}/strip" fi find "${PKG_DEST}" -type f -name '*.elc' -print0 | while read -r -d $'\0' bin; do sed -i -e ' s/^;;; Compiled by .*$// s/^;;; from file .*$// s/^;;; in Emacs version .*$// s/^;;; with .*$// ' "${bin}" done find "${PKG_DEST}" -type f -name '*.a' -print0 | while read -r -d $'\0' bin; do "${PKG_BASE}/util/arid" "${bin}" done cp -a "${PKG_DATA}/_metadata/version" "${PKG_STAT}/data-ver" echo "${PKG_HASH}" >"${PKG_STAT}/data-md5"