pthbs

Packaging Through Hashed Build Scripts
git clone https://ccx.te2000.cz/git/pthbs
Log | Files | Refs | Submodules | README

pthbs-enter-gen (2835B)


      1 #!/bin/sh -e
      2 
      3 if test $# != 1; then
      4 	printf >2 'usage: %s\n' "pthbs-enter-gen /path/to/env.hash"
      5 	printf >2 'Error: expected 1 argument, got%s\n' "$#"
      6 	exit 2
      7 fi
      8 envtop=$1
      9 envdir=$envtop/env
     10 envcommand=$envtop/command
     11 
     12 case $(basename "$envtop") in
     13 	(env.*) ;;
     14 	(*)
     15 		printf >&2 "Error: '%s' doesn't look like environment path!\n" "$envtop"
     16 		exit 1;;
     17 esac
     18 
     19 mkdir -p "$envdir"
     20 
     21 if ! test -d "$envcommand"; then
     22 	printf >&2 "Error: '%s' doesn't exist!\n" "$envcommand"
     23 fi
     24 printf '%s\n' "$envcommand" >"$envdir/PATH"
     25 
     26 if test -d "$envtop/zsh"; then
     27 	printf '%s\n' "$envtop/zsh/site-functions:$envtop/zsh/functions" >"$envdir/FPATH"
     28 fi
     29 
     30 if test -d "$envtop/library/pkgconfig"; then
     31 	printf '%s\n' "$envtop/library/pkgconfig" >"$envdir/PKG_CONFIG_LIBDIR"
     32 fi
     33 
     34 mkscript() {
     35 	exe=$envcommand/$1
     36 	cat >"$exe.new" 
     37 	chmod +x "$exe.new"
     38 	mv "$exe.new" "$exe"
     39 }
     40 
     41 exe=$envcommand/pthbs-enter
     42 if test -x "$envcommand/execlineb" && test -x "$envcommand/s6-envdir"; then
     43 	mkscript pthbs-enter <<EOF
     44 #!$envcommand/execlineb -S0
     45 "$envcommand/s6-envdir" "$envdir" "$envcommand/exec" \$@
     46 EOF
     47 	"$envcommand/pthbs-enter" true  # TODO: don't run executables without sandbox
     48 	mkscript pthbs-enter-execlineb <<EOF
     49 #!$envcommand/execlineb -S0
     50 "$envcommand/s6-envdir" "$envdir" "$envcommand/execlineb" \$@
     51 EOF
     52 	if test -x "$envcommand/sh"; then
     53 		mkscript pthbs-enter-sh <<EOF
     54 #!$envcommand/execlineb -S0
     55 "$envcommand/s6-envdir" "$envdir" "$envcommand/sh" \$@
     56 EOF
     57 	fi
     58 elif test -x "$envcommand/sh" && test -x "$envcommand/envdir"; then
     59 	mkscript pthbs-enter <<EOF
     60 #!$envcommand/sh
     61 exec "$envcommand/envdir" "$envdir" "$envcommand/env" -- "\$@"
     62 EOF
     63 	"$envcommand/pthbs-enter" true  # TODO: don't run executables without sandbox
     64 	mkscript pthbs-enter-sh <<EOF
     65 #!$envcommand/sh
     66 exec "$envcommand/envdir" "$envdir" "$envcommand/sh" "\$@"
     67 EOF
     68 fi
     69 
     70 if test -x "$envcommand/install-as-current-environment.postinstall"; then
     71 	mkscript install-as-current-environment <<EOF
     72 #!$envcommand/execlineb -P
     73 "$envcommand/s6-envdir" "$envdir" "$envcommand/exec"
     74 ifelse -n { test -L /run/current } {
     75 	if { ln -s -f -v "$envtop" /run/current }
     76 	"$envcommand/install-as-current-environment.postinstall"
     77 }
     78 foreground {
     79 	fdmove -c 1 2
     80 	printf "* Swapping /run/current from %s to " "$envtop"
     81 	readlink /run/command
     82 }
     83 getpid NS_PID
     84 importas -i NS_PID NS_PID
     85 if { mv -v /run/current /run/previous.\${NS_PID} }
     86 if { ln -s -f -v "$envtop" /run/current }
     87 ifelse {
     88 	"$envcommand/install-as-current-environment.postinstall" /run/previous.\${NS_PID}
     89 } { }
     90 foreground {
     91 	fdmove -c 1 2
     92 	printf "* %s returned error, reverting to " "$envcommand/install-as-current-environment.postinstall"
     93 	readlink /run/previous.\${NS_PID}
     94 }
     95 if { rm -v /run/current }
     96 if { mv -v /run/previous.\${NS_PID} /run/current }
     97 #foreground { /run/current/command/install-as-current-environment.postinstall }
     98 exit 1
     99 EOF
    100 fi