Add argument --inherit-argv0 to replace use case --argv0 '$0'
. Fix wrapProgramBinary by using this new argument
This commit is contained in:
parent
e3c94f3d6b
commit
a47286f0a0
@ -14,6 +14,8 @@ assertExecutable() {
|
|||||||
# ARGS:
|
# ARGS:
|
||||||
# --argv0 NAME : set name of executed process to NAME
|
# --argv0 NAME : set name of executed process to NAME
|
||||||
# (otherwise it’s called …-wrapped)
|
# (otherwise it’s called …-wrapped)
|
||||||
|
# --inherit-argv0 : the executable inherits argv0 from the wrapper.
|
||||||
|
# (use instead of --argv0 '$0')
|
||||||
# --set VAR VAL : add VAR with value VAL to the executable’s
|
# --set VAR VAL : add VAR with value VAL to the executable’s
|
||||||
# environment
|
# environment
|
||||||
# --set-default VAR VAL : like --set, but only adds VAR if not already set in
|
# --set-default VAR VAL : like --set, but only adds VAR if not already set in
|
||||||
@ -45,7 +47,7 @@ wrapProgramBinary() {
|
|||||||
mv "$prog" "$hidden"
|
mv "$prog" "$hidden"
|
||||||
# Silence warning about unexpanded $0:
|
# Silence warning about unexpanded $0:
|
||||||
# shellcheck disable=SC2016
|
# shellcheck disable=SC2016
|
||||||
makeBinaryWrapper "$hidden" "$prog" --argv0 '$0' "${@:2}"
|
makeBinaryWrapper "$hidden" "$prog" --inherit-argv0 "${@:2}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Generate source code for the wrapper in such a way that the wrapper source code
|
# Generate source code for the wrapper in such a way that the wrapper source code
|
||||||
@ -63,7 +65,7 @@ makeDocumentedCWrapper() {
|
|||||||
# makeCWrapper EXECUTABLE ARGS
|
# makeCWrapper EXECUTABLE ARGS
|
||||||
# ARGS: same as makeBinaryWrapper
|
# ARGS: same as makeBinaryWrapper
|
||||||
makeCWrapper() {
|
makeCWrapper() {
|
||||||
local argv0 n params cmd main flagsBefore flags executable params length
|
local argv0 inherit_argv0 n params cmd main flagsBefore flags executable params length
|
||||||
local uses_prefix uses_suffix uses_assert uses_assert_success uses_stdio uses_asprintf
|
local uses_prefix uses_suffix uses_assert uses_assert_success uses_stdio uses_asprintf
|
||||||
executable=$(escapeStringLiteral "$1")
|
executable=$(escapeStringLiteral "$1")
|
||||||
params=("$@")
|
params=("$@")
|
||||||
@ -124,9 +126,14 @@ makeCWrapper() {
|
|||||||
;;
|
;;
|
||||||
--argv0)
|
--argv0)
|
||||||
argv0=$(escapeStringLiteral "${params[n + 1]}")
|
argv0=$(escapeStringLiteral "${params[n + 1]}")
|
||||||
|
inherit_argv0=
|
||||||
n=$((n + 1))
|
n=$((n + 1))
|
||||||
[ $n -ge "$length" ] && main="$main #error makeCWrapper: $p takes 1 argument"$'\n'
|
[ $n -ge "$length" ] && main="$main #error makeCWrapper: $p takes 1 argument"$'\n'
|
||||||
;;
|
;;
|
||||||
|
--inherit-argv0)
|
||||||
|
# Whichever comes last of --argv0 and --inherit-argv0 wins
|
||||||
|
inherit_argv0=1
|
||||||
|
;;
|
||||||
*) # Using an error macro, we will make sure the compiler gives an understandable error message
|
*) # Using an error macro, we will make sure the compiler gives an understandable error message
|
||||||
main="$main #error makeCWrapper: Uknown argument ${p}"$'\n'
|
main="$main #error makeCWrapper: Uknown argument ${p}"$'\n'
|
||||||
;;
|
;;
|
||||||
@ -134,7 +141,7 @@ makeCWrapper() {
|
|||||||
done
|
done
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
[ -z "$flagsBefore" ] || main="$main"${main:+$'\n'}$(addFlags $flagsBefore)$'\n'$'\n'
|
[ -z "$flagsBefore" ] || main="$main"${main:+$'\n'}$(addFlags $flagsBefore)$'\n'$'\n'
|
||||||
main="$main argv[0] = \"${argv0:-${executable}}\";"$'\n'
|
[ -z "$inherit_argv0" ] && main="$main argv[0] = \"${argv0:-${executable}}\";"$'\n'
|
||||||
main="$main return execv(\"${executable}\", argv);"$'\n'
|
main="$main return execv(\"${executable}\", argv);"$'\n'
|
||||||
|
|
||||||
[ -z "$uses_asprintf" ] || printf '%s\n' "#define _GNU_SOURCE /* See feature_test_macros(7) */"
|
[ -z "$uses_asprintf" ] || printf '%s\n' "#define _GNU_SOURCE /* See feature_test_macros(7) */"
|
||||||
|
Loading…
Reference in New Issue
Block a user