summaryrefslogtreecommitdiffstats
path: root/lib/cmd/build.sh
diff options
context:
space:
mode:
Diffstat (limited to 'lib/cmd/build.sh')
-rw-r--r--lib/cmd/build.sh88
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}"
+}