diff options
Diffstat (limited to 'lib/cmd/build.sh')
-rw-r--r-- | lib/cmd/build.sh | 88 |
1 files changed, 88 insertions, 0 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}" +} |