mkdir "${name}"
cp "${arch}-binary/ccache" "${name}"
chmod +x "${name}/ccache"
+ cp misc/install.sh "${name}"
cp misc/Makefile.posix-binary-release "${name}/Makefile"
cp misc/patch-binary.py "${name}"
cp GPL-3.0.txt README.md "${name}"
tar -C "${tmpdir}" -xf "${PWD}/release/${name}.tar.xz"
(
cd "${tmpdir}/${name}"
- make install prefix=/foo/bar DESTDIR=destdir
- destdir/foo/bar/bin/ccache --version
+ ./install.sh --prefix /foo/bar --destdir destdir1
+ destdir1/foo/bar/bin/ccache --version -p
+ make install prefix=/foo/bar DESTDIR=destdir2
+ destdir2/foo/bar/bin/ccache --version -p
)
rm -r "${tmpdir}"
}
prefix = /usr/local
-exec_prefix = $(prefix)
-bindir = $(exec_prefix)/bin
-datarootdir = $(prefix)/share
-docdir = $(datarootdir)/doc/ccache
-libexecdir = $(exec_prefix)/libexec
-mandir = $(datarootdir)/man
-man1dir = $(mandir)/man1
-sysconfdir = $(prefix)/etc
-
-doc_files = \
- GPL-3.0.txt \
- LICENSE.html \
- LICENSE.md \
- MANUAL.html \
- MANUAL.md \
- NEWS.html \
- NEWS.md \
- README.md
-
-PYTHON = python3
all:
@echo "Available make targets:"
@echo "Default prefix: $(prefix)"
install:
- mkdir -p "$(DESTDIR)$(bindir)"
- $(PYTHON) patch-binary.py "$(libexecdir)" "$(sysconfdir)" <ccache >"$(DESTDIR)$(bindir)/ccache"
- chmod +x "$(DESTDIR)$(bindir)/ccache"
-
- mkdir -p "$(DESTDIR)$(docdir)"
- cp $(doc_files) "$(DESTDIR)$(docdir)"
-
- mkdir -p "$(DESTDIR)$(man1dir)"
- cp ccache.1 "$(DESTDIR)$(man1dir)"
+ ./install.sh --prefix="$(prefix)" --destdir="$(DESTDIR)"
--- /dev/null
+#!/bin/sh
+
+set -eu
+
+script_dir="$(cd "$(dirname "$0")" && pwd)"
+
+prefix=/usr/local
+exec_prefix=
+bindir=
+datarootdir=
+docdir=
+libexecdir=
+mandir=
+man1dir=
+sysconfdir=
+destdir=
+PYTHON="${PYTHON:-python3}"
+
+doc_files="
+ GPL-3.0.txt
+ LICENSE.html
+ LICENSE.md
+ MANUAL.html
+ MANUAL.md
+ NEWS.html
+ NEWS.md
+ README.md
+"
+
+usage() {
+ cat <<EOF
+Usage: $0 [OPTIONS]
+
+Install ccache from a binary release.
+
+Installation directories (following GNU conventions):
+ --prefix=DIR Top-level installation prefix [${prefix}]
+ --exec-prefix=DIR Exec prefix [PREFIX]
+ --bindir=DIR User executables [EXEC_PREFIX/bin]
+ --datarootdir=DIR Read-only architecture-independent data [PREFIX/share]
+ --docdir=DIR Documentation [DATAROOTDIR/doc/ccache]
+ --libexecdir=DIR Program executables [EXEC_PREFIX/libexec]
+ --mandir=DIR Man documentation [DATAROOTDIR/man]
+ --sysconfdir=DIR Read-only single-machine data [PREFIX/etc]
+
+Other options:
+ --destdir=DIR Stage installation under DIR
+ -h, --help Print this help and exit
+
+Environment variables:
+ PYTHON Python interpreter to use [python3]
+EOF
+}
+
+error() {
+ printf '%s: error: %s\n' "$0" "$1" >&2
+ exit 1
+}
+
+while [ $# -gt 0 ]; do
+ arg=$1
+ case ${arg} in
+ --bindir=*) bindir=${arg#*=} ;;
+ --bindir) shift; bindir=$1 ;;
+ --datarootdir=*) datarootdir=${arg#*=} ;;
+ --datarootdir) shift; datarootdir=$1 ;;
+ --destdir=*) destdir=${arg#*=} ;;
+ --destdir) shift; destdir=$1 ;;
+ --docdir=*) docdir=${arg#*=} ;;
+ --docdir) shift; docdir=$1 ;;
+ --exec-prefix=*) exec_prefix=${arg#*=} ;;
+ --exec-prefix) shift; exec_prefix=$1 ;;
+ --libexecdir=*) libexecdir=${arg#*=} ;;
+ --libexecdir) shift; libexecdir=$1 ;;
+ --mandir=*) mandir=${arg#*=} ;;
+ --mandir) shift; mandir=$1 ;;
+ --prefix=*) prefix=${arg#*=} ;;
+ --prefix) shift; prefix=$1 ;;
+ --sysconfdir=*) sysconfdir=${arg#*=} ;;
+ --sysconfdir) shift; sysconfdir=$1 ;;
+ -h|--help) usage; exit 0 ;;
+ *) error "unknown option: ${arg}" ;;
+ esac
+ shift
+done
+
+: "${exec_prefix:=${prefix}}"
+: "${bindir:=${exec_prefix}/bin}"
+: "${datarootdir:=${prefix}/share}"
+: "${docdir:=${datarootdir}/doc/ccache}"
+: "${libexecdir:=${exec_prefix}/libexec}"
+: "${mandir:=${datarootdir}/man}"
+: "${man1dir:=${mandir}/man1}"
+: "${sysconfdir:=${prefix}/etc}"
+
+command -v "${PYTHON}" >/dev/null 2>&1 || error "Python interpreter not found: ${PYTHON}"
+
+echo "Installing binary: ${destdir}${bindir}/ccache"
+mkdir -p "${destdir}${bindir}"
+"${PYTHON}" "${script_dir}/patch-binary.py" "$libexecdir" "$sysconfdir" \
+ <"${script_dir}/ccache" >"${destdir}${bindir}/ccache"
+chmod 755 "${destdir}${bindir}/ccache"
+
+echo "Installing documentation: ${destdir}${docdir}"
+mkdir -p "${destdir}${docdir}"
+for f in ${doc_files}; do
+ cp "${script_dir}/${f}" "${destdir}${docdir}"
+done
+
+echo "Installing man page: ${destdir}${man1dir}/ccache.1"
+mkdir -p "${destdir}${man1dir}"
+cp "${script_dir}/ccache.1" "${destdir}${man1dir}"
+
+echo "Installation complete."