#!/bin/sh -Cefux set -Cefux cd /root/files/embedded/make || exit 1 dry_run= use_kern_conf_dir= cpus="`sysctl -n hw.ncpu`" jobs="$(($cpus * 2))" machine="$1" type="$2" action="$3" case "$type" in cur) long_type=current ;; rel) long_type=release ;; *) exit 1 ;; esac pool=zroot base_dir=/root/files base_dir_make="$base_dir/embedded/make" base_dir_fbsd="$base_dir/fbsd" src_dir_cur="$base_dir_fbsd/current/src" src_dir_rel=/usr/src make_conf="$base_dir_make/make.$machine.$type.conf" src_conf="$base_dir_make/src.$machine.$type.conf" kern_conf_dir="$base_dir_make/kernconf" make_obj_dir_prefix="$base_dir_fbsd/$long_type/obj/$machine" dest_dir="$base_dir_fbsd/$long_type/dist/$machine" if [ -d "$base_dir" -a -d "$base_dir_make" -a -d "$base_dir_fbsd" \ -a -d "$src_dir_cur" -a -d "$src_dir_rel" -a -r "$make_conf" \ -a -r "$src_conf" -a -d "$kern_conf_dir" -a -d "$make_obj_dir_prefix" \ -a -d "$dest_dir" ] then else exit 1 fi case "$action" in r) rm_dir="$make_obj_dir_prefix" ;; c) rm_dir="$dest_dir" ;; esac _make() { eval "local make_dir=\$src_dir_$type" local make_extra_args= if [ "$use_kern_conf_dir" ] then make_extra_args=" KERNCONFDIR=$kern_conf_dir" fi ${dry_run}time -h env "MAKEOBJDIRPREFIX=$make_obj_dir_prefix" make \ -C "$make_dir" -j "$jobs" "__MAKE_CONF=$make_conf" \ "SRCCONF=$src_conf$make_extra_args" "DESTDIR=$dest_dir" $@ } _rm() { ${dry_run}rm -vfr "$rm_dir" || true } _rm_obj_and_dest() { ${dry_run}rm -vfr "$make_obj_dir_prefix" "$dest_dir" || true } _zfs_rotate_dest() { local base="$1" ${dry_run}zfs set readonly=on "$base" ${dry_run}zfs destroy "$base.working.prev" ${dry_run}zfs rename "$base.working" "$base.working.prev" ${dry_run}zfs rename "$base" "$base.working" ${dry_run}zfs create "$base" } _all() { _rm_obj_and_dest _make buildworld buildkernel installworld installkernel distribution _zfs_rotate_dest "$pool$dest_dir" _rm_obj_and_dest } case "$action" in b) _make buildworld buildkernel ;; bw) _make buildworld ;; k-t) _make kernel-toolchain ;; bk) _make buildkernel ;; bk-nm) _make NO_MODULES=yes buildkernel ;; bk-nc) _make NO_CLEAN=yes buildkernel ;; bk-n) _make NO_CLEAN=yes NO_MODULES=yes buildkernel ;; bk-f) _make KERNFAST=1 buildkernel ;; bk-nf) _make KERNFAST=1 NO_MODULES=yes buildkernel ;; i) _make installworld installkernel distribution ;; ik) _make installkernel ;; ik-nm) _make NO_MODULES=yes installkernel ;; r|c) _rm ;; a) _all ;; *) exit 1 ;; esac