diff options
-rw-r--r-- | lib/cmd/build.sh | 88 | ||||
-rw-r--r-- | lib/cmd/local.mk | 3 | ||||
-rw-r--r-- | locale/en_US.sh | 5 |
3 files changed, 95 insertions, 1 deletions
diff --git a/lib/cmd/build.sh b/lib/cmd/build.sh new file mode 100644 index 0000000..61f6612 --- /dev/null +++ b/lib/cmd/build.sh @@ -0,0 +1,88 @@ +# "build" command +# +# Copyright (C) 2014 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/>. + +use profile +use chroot +use rand + +cmd_build_main() +{ + local root= + local first_arg= + local prev_arg= + local arg= + local dir= + local uname_s= + local f= + + if [ ${#} -lt 2 ]; then + print_cmd_usage 'build' >&2 + exit 1 + fi + + root="${1}" + shift 1 + + first_arg=true + prev_arg= + for arg in "${@}"; do + if ${first_arg}; then + set -- + first_arg=false + else + set -- "${@}" "${prev_arg}" + fi + prev_arg="${arg}" + done + + . "${root}/etc/os-release" + profile_set "${ID}" + + if ! [ -d "${prev_arg}" ]; then + error 2 "$(get_msg 'cmd_build_not_a_dir')" + fi + + rand + dir="/prokit/build.${rand_x}" + uname_s="$( (uname -s) 2>/dev/null)" || uname_s='unknown' + mkdir -p "${root}${dir}/pkg" + case "${uname_s}" in + 'Linux') + mount -o bind "${prev_arg}" "${root}${dir}/pkg" + ;; + esac + + chroot_exec "${root}" sh <<-EOF + cd '${dir}/pkg' + opkbuild ${@} + EOF + + case "${uname_s}" in + 'Linux') + umount "${root}${dir}/pkg" + ;; + esac + rmdir "${root}${dir}/pkg" + for f in "${root}${dir}/"*; do + [ -e "${f}" ] || continue + mv "${f}" .. + done + rmdir "${root}${dir}" +} diff --git a/lib/cmd/local.mk b/lib/cmd/local.mk index 1c77e63..8c56946 100644 --- a/lib/cmd/local.mk +++ b/lib/cmd/local.mk @@ -3,4 +3,5 @@ pkgdatacmd_sources = \ lib/cmd/version.sh \ lib/cmd/install.sh \ lib/cmd/shell.sh \ - lib/cmd/opkg.sh + lib/cmd/opkg.sh \ + lib/cmd/build.sh diff --git a/locale/en_US.sh b/locale/en_US.sh index dbf518d..c8e2fc9 100644 --- a/locale/en_US.sh +++ b/locale/en_US.sh @@ -91,5 +91,10 @@ msg_prokit_cmd_opkg_summary='manage packages with opkg' msg_prokit_cmd_opkg_usage='<root-dir> [<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_not_a_dir='Not a directory: %s' + # lib/profile.sh msg_prokit_profile_not_found='Profile "%s" not found' |