From 021d672689c5f70ad4b0ab1c1db578153f8cbadb Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Thu, 28 Aug 2014 23:20:20 -0400 Subject: build: New command --- (limited to 'lib/cmd') 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 +# . + +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 -- cgit v0.9.1