diff options
-rw-r--r-- | Makefile.am | 6 | ||||
-rw-r--r-- | configure.ac | 17 | ||||
-rw-r--r-- | lib/block.sh | 23 | ||||
-rw-r--r-- | lib/local.mk | 1 | ||||
-rw-r--r-- | lib/vardata.sh | 56 | ||||
-rw-r--r-- | locale/en_US.sh | 8 | ||||
-rw-r--r-- | src/prokit.sh | 2 |
7 files changed, 101 insertions, 12 deletions
diff --git a/Makefile.am b/Makefile.am index b55f926..4d1657b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -56,6 +56,8 @@ pkgdatacmddir = $(pkgdatadir)/cmd pkgdataprofiledir = $(pkgdatadir)/profile pkgdatapackagedir = $(pkgdatadir)/package uninstall_dirs = \ + '$(DESTDIR)$(pkglocalstatedir)/mount' \ + '$(DESTDIR)$(pkglocalstatedir)' \ '$(DESTDIR)$(pkgdatapackagedir)' \ '$(DESTDIR)$(pkgdataprofiledir)' \ '$(DESTDIR)$(pkgdatacmddir)' \ @@ -92,6 +94,7 @@ do_subst = sed \ -e 's|[@]SH[@]|$(SH)|g' \ -e 's|[@]pkgdatadir[@]|$(pkgdatadir)|g' \ -e 's|[@]localedir[@]|$(localedir)|g' \ + -e 's|[@]pkglocalstatedir[@]|$(pkglocalstatedir)|g' \ -e "s|[@]cmds[@]|$(cmds)|g" \ -e "s|[@]profiles[@]|$(profiles)|g" \ -e "s|[@]textdomain[@]|$(textdomain)|g" @@ -150,6 +153,9 @@ wikiman: $(man1_MANS) $(man8_MANS) >"$${f}.mdwn"; \ done +install-exec-hook: + $(MKDIR_P) "$(DESTDIR)$(pkglocalstatedir)/mount" + install-data-local: $(locale_MESSAGES) @$(NORMAL_INSTALL) for f in $(locale_MESSAGES); do \ diff --git a/configure.ac b/configure.ac index a9e2c78..01d7dc1 100644 --- a/configure.ac +++ b/configure.ac @@ -27,6 +27,23 @@ AC_CONFIG_SRCDIR([src/prokit.sh]) AM_INIT_AUTOMAKE([gnu check-news dist-bzip2 dist-xz subdir-objects]) AM_SILENT_RULES([yes]) +if test "x${localstatedir}" = 'x${prefix}/var'; then + case "${prefix}" in + NONE | */local | */local/*) + pkglocalstatedir='/var/local/prokit' + ;; + /opt | /opt/*) + pkglocalstatedir='/var/opt/prokit' + ;; + *) + pkglocalstatedir='/var/lib/prokit' + ;; + esac +else + pkglocalstatedir='${localstatedir}/lib/prokit' +fi +AC_SUBST([pkglocalstatedir]) + AC_ARG_WITH( [sh], [AS_HELP_STRING([--with-sh], [POSIX-conformant shell with `local'])], diff --git a/lib/block.sh b/lib/block.sh index 7060690..d83572e 100644 --- a/lib/block.sh +++ b/lib/block.sh @@ -22,6 +22,7 @@ _BLOCK_SM=1 use rand +use vardata is_block() { @@ -31,25 +32,31 @@ is_block() return ${?} } -block_mount() +check_block() { local dev="${1}" - local dir= if ! [ -b "${dev}" ]; then error 2 "$(get_msg 'block_device_invalid')" fi +} + +block_mount() +{ + local dev="${1}" + local dir= + + check_block "${dev}" rand - # FIXME: Hardcoded tmpdir - dir="/tmp/prokit-block-$(printf '%010d' ${rand_x})" + dir="$(get_vardata_dir 'mount')/block-$(printf '%010d' ${rand_x})" if ! mkdir "${dir}"; then - error 2 "$(get_msg 'block_mkdir_fail' "${dir}")" + error 2 "$(get_msg 'block_mkdir_fail')" "${dir}" fi if ! mount "${dev}" "${dir}"; then rmdir "${dir}" - error 2 "$(get_msg 'block_mount_fail' "${dev}")" + error 2 "$(get_msg 'block_mount_fail')" "${dev}" fi printf '%s' "${dir}" @@ -74,11 +81,11 @@ block_umount() done if ${timed_out}; then - error 2 "$(get_msg 'block_umount_fail' "${dir}")" + error 2 "$(get_msg 'block_umount_fail')" "${dir}" fi if ! rmdir "${dir}"; then - error 2 "$(get_msg 'block_rmdir_fail' "${dir}")" + error 2 "$(get_msg 'block_rmdir_fail')" "${dir}" fi return 0 diff --git a/lib/local.mk b/lib/local.mk index 33127c2..a202aad 100644 --- a/lib/local.mk +++ b/lib/local.mk @@ -4,6 +4,7 @@ pkgdata_sources = \ lib/getopt.sh \ lib/fd.sh \ lib/dir.sh \ + lib/vardata.sh \ lib/archplat.sh \ lib/deps.sh \ lib/substvars.sh \ diff --git a/lib/vardata.sh b/lib/vardata.sh new file mode 100644 index 0000000..8800003 --- /dev/null +++ b/lib/vardata.sh @@ -0,0 +1,56 @@ +# Functions for getting variable/runtime data +# +# Copyright (C) 2015 Patrick "P. J." McDermott +# +# This file is part of the ProteanOS Development Kit. +# +# The ProteanOS Development Kit is free software: you can redistribute +# it and/or modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# The ProteanOS Development Kit is distributed in the hope that it +# will be useful, but WITHOUT ANY WARRANTY; without even the implied +# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with the ProteanOS Development Kit. If not, see +# <http://www.gnu.org/licenses/>. + +[ "x${_VARDATA_SM+set}" = 'xset' ] && return 0 +_VARDATA_SM=1 + +PKGLOCALSTATEDIR='@pkglocalstatedir@' +VARDATA_DIRS='mount' + +vardatadir= + +init_vardata() +{ + local dir= + + if ${in_place}; then + vardatadir="${builddir}/var" + for dir in ${VARDATA_DIRS}; do + mkdir -p "${vardatadir}/${dir}" + done + else + vardatadir="${PKGLOCALSTATEDIR}" + fi + + return 0 +} + +get_vardata_dir() +{ + local dir="${1}" + + case " ${VARDATA_DIRS} " in + *" ${dir} "*) + printf '%s/%s' "${vardatadir}" "${dir}" + ;; + esac + + return 0 +} diff --git a/locale/en_US.sh b/locale/en_US.sh index 441e32a..8731c3d 100644 --- a/locale/en_US.sh +++ b/locale/en_US.sh @@ -80,21 +80,21 @@ There is NO WARRANTY, to the extent permitted by law.' # lib/cmd/install.sh msg_prokit_cmd_install_summary='install a system into a directory' msg_prokit_cmd_install_usage='[-a <arch>] [-p <plat>] [-m <mirror>] [-F] '\ -'<suite> <root-dir>' +'<suite> <root>' # lib/cmd/shell.sh msg_prokit_cmd_shell_summary='run a shell in an isolated environment' -msg_prokit_cmd_shell_usage='<root-dir> [<command> [<argument> ...]]' +msg_prokit_cmd_shell_usage='<root> [<command> [<argument> ...]]' msg_prokit_cmd_shell_exiting='Exiting...' # lib/cmd/opkg.sh msg_prokit_cmd_opkg_summary='manage packages with opkg' -msg_prokit_cmd_opkg_usage='<root-dir> [<option> ...] <sub-command> '\ +msg_prokit_cmd_opkg_usage='<root> [<option> ...] <sub-command> '\ '[<argument> ...]' # lib/cmd/build.sh msg_prokit_cmd_build_summary='build a package' -msg_prokit_cmd_build_usage='<root-dir> [<option> ...] <pkg-dir>' +msg_prokit_cmd_build_usage='<root> [<option> ...] <pkg-dir>' msg_prokit_cmd_build_not_a_dir='Not a directory: %s' # lib/cmd/installer-pc.sh diff --git a/src/prokit.sh b/src/prokit.sh index 037c233..5cfdb53 100644 --- a/src/prokit.sh +++ b/src/prokit.sh @@ -62,6 +62,7 @@ use() use locale use cmd +use vardata use getopt use rand @@ -71,6 +72,7 @@ main() load_locale load_cmds + init_vardata if ! get_options "${@}"; then cmd_help_main >&2 |