summary refs log tree commit diff
path: root/pkgs/build-support/substitute/substitute.sh
blob: c1a32488e1d74d1fc2cad7e26b6d0b04c3604499 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
substitute() {
    input=$1
    output=$2

    params=("$@")

    sedArgs=()
    
    for ((n = 2; n < ${#params[*]}; n += 1)); do
        p=${params[$n]}

        if test "$p" = "--replace"; then
            pattern=${params[$((n + 1))]}
            replacement=${params[$((n + 2))]}
            n=$((n + 2))
            sedArgs=("${sedArgs[@]}" "-e" "s^$pattern^$replacement^g")
        fi

        if test "$p" = "--subst-var"; then
            varName=${params[$((n + 1))]}
            n=$((n + 1))
            sedArgs=("${sedArgs[@]}" "-e" "s^@${varName}@^${!varName}^g")
        fi

        if test "$p" = "--subst-var-by"; then
            varName=${params[$((n + 1))]}
            replacement=${params[$((n + 2))]}
            n=$((n + 2))
            sedArgs=("${sedArgs[@]}" "-e" "s^@${varName}@^$replacement^g")
        fi

    done

    sed "${sedArgs[@]}" < "$input" > "$output".tmp
    if test -x "$output"; then
        chmod +x "$output".tmp
    fi
    mv -f "$output".tmp "$output"
}


substituteInPlace() {
    fileName="$1"
    shift
    substitute "$fileName" "$fileName" "$@"
}