Browse Source

Update MKit to v0.0.28

Alois Mahdal 6 years ago
parent
commit
ab70b60c98

+ 64
- 79
utils/mkit/include/build.sh View File

6
 mkit_import facts
6
 mkit_import facts
7
 
7
 
8
 
8
 
9
-_build1() {
9
+__build1() {
10
     #
10
     #
11
     # Process one skeleton $1 of type $3 (or guessed) to path $2
11
     # Process one skeleton $1 of type $3 (or guessed) to path $2
12
     #
12
     #
14
     local dstpath=$2    # destination meaty animal path
14
     local dstpath=$2    # destination meaty animal path
15
     local ftype=$3      # file/builder type
15
     local ftype=$3      # file/builder type
16
     test -n "$dstpath"  || dstpath=${srcpath%.skel}
16
     test -n "$dstpath"  || dstpath=${srcpath%.skel}
17
-    test -n "$ftype"    || ftype=$(_guess_ftype "$dstpath")
17
+    test -n "$ftype"    || ftype=$(__guess_ftype "$dstpath")
18
     debug_var srcpath dstpath ftype
18
     debug_var srcpath dstpath ftype
19
-    <"$srcpath" _build1_ftype "$ftype" >"$dstpath"
20
-    mkdir -p "$MKIT_LOCAL"
21
-    echo "$dstpath" >> "$MKIT_LOCAL/built.lst"
19
+    <"$srcpath" __build1_ftype "$ftype" >"$dstpath"
20
+    rec_built "$dstpath"
22
 }
21
 }
23
 
22
 
24
-_build1_ftype() {
23
+__build1_ftype() {
25
     #
24
     #
26
     # Build a file of type $1; fom stdin to stdout
25
     # Build a file of type $1; fom stdin to stdout
27
     #
26
     #
28
     local ftype=$1      # file/builder type
27
     local ftype=$1      # file/builder type
29
     case $ftype in
28
     case $ftype in
30
-        MKIT_COMMON)    _expand_tokens "tokens" ;;
31
-        markdown)       _expand_includes | _expand_tokens "tokens" ;;
32
-        rpmstuff)       _expand_tokens "tokens" "rpmstuff:tokens" ;;
33
-        debstuff)       _expand_tokens "tokens" "debstuff:tokens" ;;
29
+        MKIT_COMMON)    __expand_tokens "tokens" ;;
30
+        rpmstuff)       __expand_tokens "tokens" "rpmstuff:tokens" ;;
31
+        debstuff)       __expand_tokens "tokens" "debstuff:tokens" ;;
34
         *)              die "unknown file type: $ftype" ;;
32
         *)              die "unknown file type: $ftype" ;;
35
     esac
33
     esac
36
 }
34
 }
37
 
35
 
38
-_expand_includes() {
39
-    #
40
-    # Expand include directives
41
-    #
42
-    # Expand e.g. `<!-- include4: foo.sh -->` to include code of foo.sh
43
-    #
44
-    perl -we '
45
-        use strict;
46
-        my $text;
47
-        while (<>) {
48
-            chomp;
49
-            if (m/<!-- include4: (\S+) -->/) {
50
-                open my $fh, $1 or warn "cannot find: $1";
51
-                my $text = do { local($/); <$fh> };
52
-                close $fh;
53
-                $text =~ s/^(.)/    $1/gm;
54
-                chomp $text;
55
-                print "$text\n";
56
-            } else {
57
-                print "$_\n";
58
-            }
59
-        }
60
-    '
61
-}
62
-
63
-_expand_tokens() {
36
+__expand_tokens() {
64
     #
37
     #
65
     # Read stdin, expanding tokens from sections $@
38
     # Read stdin, expanding tokens from sections $@
66
     #
39
     #
74
             debug_var section
47
             debug_var section
75
             ini lskeys "$section" \
48
             ini lskeys "$section" \
76
               | while read -r varname; do
49
               | while read -r varname; do
77
-                    varvalue="$(ini 1value "$section:$varname" | _qfs )"
50
+                    varvalue="$(ini 1value "$section:$varname" | __qfs )"
78
                     echo "s|$varname|$varvalue|g;"
51
                     echo "s|$varname|$varvalue|g;"
79
                     debug_var varname varvalue
52
                     debug_var varname varvalue
80
                 done
53
                 done
81
         done
54
         done
82
-        echo "s|__MKIT_PROJ_NAME__|$(ini 1value project:name | _qfs)|g;"
83
-        echo "s|__MKIT_PROJ_CODENAME__|$(ini 1value project:codename | _qfs)|g;"
84
-        echo "s|__MKIT_PROJ_LICENSE__|$(ini 1value project:license | _qfs)|g;"
85
-        echo "s|__MKIT_PROJ_PKGNAME__|$(ini 1value project:pkgname | _qfs)|g;"
86
-        echo "s|__MKIT_PROJ_TAGLINE__|$(ini 1value project:tagline | _qfs)|g;"
87
-        echo "s|__MKIT_PROJ_MAINTAINER__|$(ini 1value project:maintainer | _qfs)|g;"
88
-        echo "s|__MKIT_PROJ_VCS_BROWSER__|$(ini 1value project:vcs_browser | _qfs)|g;"
89
-        echo "s|__MKIT_PROJ_GIT_LASTHASH__|$(git_lasthash | _qfs)|g;"
90
-        echo "s|__MKIT_PROJ_VERSION__|$(semver | _qfs)|g;"
55
+        echo "s|__MKIT_PROJ_NAME__|$(ini 1value project:name | __qfs)|g;"
56
+        echo "s|__MKIT_PROJ_CODENAME__|$(ini 1value project:codename | __qfs)|g;"
57
+        echo "s|__MKIT_PROJ_LICENSE__|$(ini 1value project:license | __qfs)|g;"
58
+        echo "s|__MKIT_PROJ_PKGNAME__|$(ini 1value project:pkgname | __qfs)|g;"
59
+        echo "s|__MKIT_PROJ_TAGLINE__|$(ini 1value project:tagline | __qfs)|g;"
60
+        echo "s|__MKIT_PROJ_MAINTAINER__|$(ini 1value project:maintainer | __qfs)|g;"
61
+        echo "s|__MKIT_PROJ_VCS_BROWSER__|$(ini 1value project:vcs_browser | __qfs)|g;"
62
+        echo "s|__MKIT_PROJ_GIT_LASTHASH__|$(git_lasthash | __qfs)|g;"
63
+        echo "s|__MKIT_PROJ_VERSION__|$(semver | __qfs)|g;"
91
         echo "s|__MKIT_SELF_VERSION__|$MKIT_VERSION|g;"
64
         echo "s|__MKIT_SELF_VERSION__|$MKIT_VERSION|g;"
92
     } >> "$script"
65
     } >> "$script"
93
-    sed -f "$script" || die "_expand_tokens failed"
66
+    sed -f "$script" || die "__expand_tokens failed"
94
     rm "$script"
67
     rm "$script"
95
 }
68
 }
96
 
69
 
97
-_guess_ftype() {
70
+__guess_ftype() {
98
     #
71
     #
99
     # Guess file type from destination path $1
72
     # Guess file type from destination path $1
100
     #
73
     #
101
     local dstpath=$1    # destination path
74
     local dstpath=$1    # destination path
102
     case $dstpath in
75
     case $dstpath in
103
-        *.md) echo markdown    ;;
104
         *)    echo MKIT_COMMON ;;
76
         *)    echo MKIT_COMMON ;;
105
     esac
77
     esac
106
 }
78
 }
107
 
79
 
108
-_qfs() {
80
+__qfs() {
109
     #
81
     #
110
     # Quote for our sed scipt's RHS
82
     # Quote for our sed scipt's RHS
111
     #
83
     #
115
     '
87
     '
116
 }
88
 }
117
 
89
 
90
+_mkit_data() {
91
+    #
92
+    # Build sampler showing all token values
93
+    #
94
+    local token
95
+    local section
96
+    local sections
97
+    sections=()
98
+    ini lskeys tokens | grep -q . && sections=(tokens)
99
+    sections+=( $(ini lssect | grep ':tokens$') )
100
+    {
101
+        echo "(builtin):"
102
+        echo "  x_MKIT_PROJ_NAME__ => '__MKIT_PROJ_NAME__'"
103
+        echo "  x_MKIT_PROJ_CODENAME__ => '__MKIT_PROJ_CODENAME__'"
104
+        echo "  x_MKIT_PROJ_LICENSE__ => '__MKIT_PROJ_LICENSE__'"
105
+        echo "  x_MKIT_PROJ_PKGNAME__ => '__MKIT_PROJ_PKGNAME__'"
106
+        echo "  x_MKIT_PROJ_TAGLINE__ => '__MKIT_PROJ_TAGLINE__'"
107
+        echo "  x_MKIT_PROJ_MAINTAINER__ => '__MKIT_PROJ_MAINTAINER__'"
108
+        echo "  x_MKIT_PROJ_VCS_BROWSER__ => '__MKIT_PROJ_VCS_BROWSER__'"
109
+        echo "  x_MKIT_PROJ_GIT_LASTHASH__ => '__MKIT_PROJ_GIT_LASTHASH__'"
110
+        echo "  x_MKIT_PROJ_VERSION__ => '__MKIT_PROJ_VERSION__'"
111
+        echo "  x_MKIT_SELF_VERSION__ => '__MKIT_SELF_VERSION__'"
112
+        for section in "${sections[@]}"; do
113
+            echo "$section:"
114
+            for token in $(ini lskeys "$section"); do
115
+                echo "  x${token:1} => '$token'"
116
+            done
117
+        done
118
+    } \
119
+      | __expand_tokens "MKIT_BUILTIN" "${sections[@]}" \
120
+      | sed '/^  x/ s|x|_|'
121
+}
122
+
118
 build() {
123
 build() {
119
     #
124
     #
120
     # Add meat to all skeletons
125
     # Add meat to all skeletons
121
     #
126
     #
122
     local srcpath   # each source path
127
     local srcpath   # each source path
123
-    find -type f -name '*.skel' \
128
+    semver >/dev/null
129
+    find . -type f -name '*.skel' \
124
      | while read -r srcpath; do
130
      | while read -r srcpath; do
125
-           _build1 "$srcpath"
131
+           __build1 "$srcpath"
126
        done
132
        done
127
 }
133
 }
128
 
134
 
129
-build_manpages() {
130
-    #
131
-    # Build manpages using ronn
132
-    #
133
-    local manfile   # each manual file listed in '[files:man]'
134
-    local mdfile    # each source markdown file
135
-    if command -v ronn >/dev/null; then
136
-        ini lskeys "files:man" \
137
-          | while read -r manfile; do
138
-                mdfile="$manfile.md"
139
-                ronn -r "$mdfile"
140
-                mkdir -p "$MKIT_LOCAL"
141
-                echo "$manfile" >> "$MKIT_LOCAL/built.lst"
142
-            done
143
-    else
144
-        echo "ronn is not installed"
145
-        return 1
146
-    fi
147
-}
148
-
149
 clean() {
135
 clean() {
150
     #
136
     #
151
     # Clean up tree after building
137
     # Clean up tree after building
174
     mv "${MKIT_PROJ_PKGNAME}-$version.tar.gz" \
160
     mv "${MKIT_PROJ_PKGNAME}-$version.tar.gz" \
175
        "${MKIT_PROJ_PKGNAME}_$version.orig.tar.gz" \
161
        "${MKIT_PROJ_PKGNAME}_$version.orig.tar.gz" \
176
      || die "could not rename tarball"
162
      || die "could not rename tarball"
177
-    echo "${MKIT_PROJ_PKGNAME}_$version.orig.tar.gz" >> "$MKIT_LOCAL/built.lst"
163
+    rec_built "${MKIT_PROJ_PKGNAME}_$version.orig.tar.gz"
178
 
164
 
179
     # read content of each mandatory file from debian_skel
165
     # read content of each mandatory file from debian_skel
180
     #
166
     #
186
       | while read -r dfsrc; do
172
       | while read -r dfsrc; do
187
             dftgt="debian/${dfsrc#$debian_skel}"
173
             dftgt="debian/${dfsrc#$debian_skel}"
188
             mkdir -p "$(dirname "$dftgt")"
174
             mkdir -p "$(dirname "$dftgt")"
189
-            _build1 "$dfsrc" "$dftgt" debstuff
175
+            __build1 "$dfsrc" "$dftgt" debstuff
190
         done
176
         done
191
-    echo debian >> "$MKIT_LOCAL/built.lst"
177
+    rec_built debian
192
 }
178
 }
193
 
179
 
194
 dist() {
180
 dist() {
195
     #
181
     #
196
     # Create distributable tarball
182
     # Create distributable tarball
197
     #
183
     #
198
-    #FIXME: lacking Makefile skills, we do this step twice fot
184
+    #FIXME: lacking Makefile skills, we do this step twice for
199
     #       rpmstuff, hence -f hack for gzip
185
     #       rpmstuff, hence -f hack for gzip
200
     #
186
     #
201
     local version           # tarball version
187
     local version           # tarball version
211
     echo -n "$git_lasthash" > "$dirname/.mkit/git_lasthash"
197
     echo -n "$git_lasthash" > "$dirname/.mkit/git_lasthash"
212
     tar -cf "$dirname.tar" "$dirname"
198
     tar -cf "$dirname.tar" "$dirname"
213
     gzip -f "$dirname.tar"      # see above FIXME
199
     gzip -f "$dirname.tar"      # see above FIXME
214
-    mkdir -p "$MKIT_LOCAL"
215
-    echo "$dirname.tar.gz" >> "$MKIT_LOCAL/built.lst"
200
+    rec_built "$dirname.tar.gz"
216
     rm -rf "$dirname"
201
     rm -rf "$dirname"
217
 }
202
 }
218
 
203
 
225
     specsrc="$(ini 1value "dist:rpmstuff")"
210
     specsrc="$(ini 1value "dist:rpmstuff")"
226
     test -n "$specsrc" || die "dist:rpmstuff not specified"
211
     test -n "$specsrc" || die "dist:rpmstuff not specified"
227
     test -f "$specsrc" || die "specfile template not found: $specsrc"
212
     test -f "$specsrc" || die "specfile template not found: $specsrc"
228
-    _build1 "$specsrc" "$specname" rpmstuff
213
+    __build1 "$specsrc" "$specname" rpmstuff
229
 }
214
 }

+ 13
- 12
utils/mkit/include/deploy.sh View File

4
 
4
 
5
 mkit_import ini
5
 mkit_import ini
6
 
6
 
7
-_deploy_item() {
7
+__deploy_item() {
8
     #
8
     #
9
     # Deploy item and make it look like wanted
9
     # Deploy item and make it look like wanted
10
     #
10
     #
11
-    # usage: _deploy_item src dst [mode]
11
+    # usage: __deploy_item src dst [mode]
12
     #
12
     #
13
     # Both src and dst must be names of actual items[1],
13
     # Both src and dst must be names of actual items[1],
14
     # whereas dst must not exist.  On update, dst is
14
     # whereas dst must not exist.  On update, dst is
37
                 [[ $item =~ .skel$ ]] \
37
                 [[ $item =~ .skel$ ]] \
38
                  && grep -q "${item%.skel}" "$MKIT_LOCAL/built.lst" \
38
                  && grep -q "${item%.skel}" "$MKIT_LOCAL/built.lst" \
39
                  && continue
39
                  && continue
40
-                _deploy_item "$item" "$dst${item#$src}" "$mode"
40
+                __deploy_item "$item" "$dst${item#$src}" "$mode"
41
             done
41
             done
42
     else
42
     else
43
-        _maybe install -DTvm "$mode" "$src" "$dst"
43
+        test "$mode" == "SRC" && mode=$(stat -c "%a" "$src")
44
+        __maybe install -DTvm "$mode" "$src" "$dst"
44
     fi
45
     fi
45
 }
46
 }
46
 
47
 
47
-_get_dst() {
48
+__get_dst() {
48
     #
49
     #
49
     # Find out target path for src file $2 of group $1
50
     # Find out target path for src file $2 of group $1
50
     #
51
     #
52
     local src=$2        # each source
53
     local src=$2        # each source
53
     local dst=$3        # alternative destination name
54
     local dst=$3        # alternative destination name
54
     test -n "$dst" || dst=${src##*/}
55
     test -n "$dst" || dst=${src##*/}
55
-    echo "$(_get_root "$grp")/$dst"
56
+    echo "$(__get_root "$grp")/$dst"
56
 }
57
 }
57
 
58
 
58
-_get_root() {
59
+__get_root() {
59
     #
60
     #
60
     # Find out target root for group $1
61
     # Find out target root for group $1
61
     #
62
     #
72
     esac
73
     esac
73
 }
74
 }
74
 
75
 
75
-_maybe() {
76
+__maybe() {
76
     #
77
     #
77
     # Call the deploy command $1 $@ unless in dry mode
78
     # Call the deploy command $1 $@ unless in dry mode
78
     #
79
     #
101
             mode=$(ini 1value "modes:$group")
102
             mode=$(ini 1value "modes:$group")
102
             ini values "files:$group" \
103
             ini values "files:$group" \
103
               | while read -r src dst; do
104
               | while read -r src dst; do
104
-                    dst=$(_get_dst "$group" "$src" "$dst")
105
-                    _deploy_item "$src" "$dst" "$mode"
105
+                    dst=$(__get_dst "$group" "$src" "$dst")
106
+                    __deploy_item "$src" "$dst" "$mode"
106
                 done
107
                 done
107
         done
108
         done
108
     test -f "$MKIT_LOCAL/autoclean" && clean
109
     test -f "$MKIT_LOCAL/autoclean" && clean
122
       | while read -r group; do
123
       | while read -r group; do
123
             ini values "files:$group" \
124
             ini values "files:$group" \
124
               | while read -r src dst; do
125
               | while read -r src dst; do
125
-                    dst=$(_get_dst "$group" "$src" "$dst")
126
-                    _maybe rm -vrf "$dst"
126
+                    dst=$(__get_dst "$group" "$src" "$dst")
127
+                    __maybe rm -vrf "$dst"
127
                 done
128
                 done
128
         done
129
         done
129
 }
130
 }

+ 2
- 0
utils/mkit/include/facts.sh View File

154
     local commit        # commit indicator (CURRENT_BRANCH.gHASH)
154
     local commit        # commit indicator (CURRENT_BRANCH.gHASH)
155
     local dirty         # 0 if dirty, 1 if clean
155
     local dirty         # 0 if dirty, 1 if clean
156
     local suffix        # version suffix
156
     local suffix        # version suffix
157
+    local_get semver && return 0
157
     version=$(ini 1value project:version)
158
     version=$(ini 1value project:version)
158
     prerl=$(ini 1value project:prerl)
159
     prerl=$(ini 1value project:prerl)
159
     grep ":" <<<"$prerl" \
160
     grep ":" <<<"$prerl" \
178
         test -n "$prerl" && suffix="-$prerl$suffix"
179
         test -n "$prerl" && suffix="-$prerl$suffix"
179
         version="$version$suffix"
180
         version="$version$suffix"
180
     fi
181
     fi
182
+    local_putb semver <<<"$version"
181
     echo "$version"
183
     echo "$version"
182
 }
184
 }

+ 27
- 18
utils/mkit/include/ini.sh View File

2
 # MKit - simple install helper
2
 # MKit - simple install helper
3
 # See LICENSE file for copyright and license details.
3
 # See LICENSE file for copyright and license details.
4
 
4
 
5
-_ini_cat() {
5
+__ini_cat() {
6
     #
6
     #
7
     # A no-op for text stream
7
     # A no-op for text stream
8
     #
8
     #
12
     done
12
     done
13
 }
13
 }
14
 
14
 
15
-_ini_expand() {
15
+__ini_expand() {
16
     #
16
     #
17
     # Expand reference value (prefix only)
17
     # Expand reference value (prefix only)
18
     #
18
     #
30
     done
30
     done
31
 }
31
 }
32
 
32
 
33
-_ini_grepkey() {
33
+__ini_grepkey() {
34
     #
34
     #
35
     # Read key from a section
35
     # Read key from a section
36
     #
36
     #
40
       | sed -e 's/ *= */=/; s/ +$//; s/^//;' \
40
       | sed -e 's/ *= */=/; s/ +$//; s/^//;' \
41
       | grep -e "^$wnt=" \
41
       | grep -e "^$wnt=" \
42
       | cut -d= -f2- \
42
       | cut -d= -f2- \
43
-      | _ini_maybe_expand
43
+      | __ini_maybe_expand
44
 }
44
 }
45
 
45
 
46
-_ini_greppath() {
46
+__ini_greppath() {
47
     #
47
     #
48
     # Read key from the right section
48
     # Read key from the right section
49
     #
49
     #
62
          && echo "$override" \
62
          && echo "$override" \
63
          && return
63
          && return
64
     fi
64
     fi
65
-    _ini_grepsec "$wntsec" | _ini_grepkey "$wntkey"
65
+    __ini_grepsec "$wntsec" | __ini_grepkey "$wntkey"
66
 }
66
 }
67
 
67
 
68
-_ini_grepsec() {
68
+__ini_grepsec() {
69
     #
69
     #
70
     # Read one INI section
70
     # Read one INI section
71
     #
71
     #
85
       | sed -e 's/ *= */=/; s/ +$//; s/^//;'
85
       | sed -e 's/ *= */=/; s/ +$//; s/^//;'
86
 }
86
 }
87
 
87
 
88
-_ini_lskeys() {
88
+__ini_lskeys() {
89
     #
89
     #
90
     # List keys from a section
90
     # List keys from a section
91
     #
91
     #
92
     local sct=$1    # section of interest
92
     local sct=$1    # section of interest
93
-    _ini_grepsec "$sct" | cut -d= -f1 | awk '!x[$0]++'
93
+    __ini_grepsec "$sct" | cut -d= -f1 | awk '!x[$0]++'
94
 }
94
 }
95
 
95
 
96
-_ini_maybe_expand() {
96
+__ini_lssect() {
97
+    #
98
+    # List all section names
99
+    #
100
+    local arg=$1    # unused argument
101
+    grep -x '\[.*\]' | sed 's/^.//; s/.$//'
102
+}
103
+
104
+__ini_maybe_expand() {
97
     #
105
     #
98
     # Decide whether or not to expand
106
     # Decide whether or not to expand
99
     #
107
     #
100
     if test "$MKIT_INI_EXPAND" -gt 0; then
108
     if test "$MKIT_INI_EXPAND" -gt 0; then
101
-        MKIT_INI_EXPAND=$(( --MKIT_INI_EXPAND )) _ini_expand
109
+        MKIT_INI_EXPAND=$(( --MKIT_INI_EXPAND )) __ini_expand
102
     else
110
     else
103
-        _ini_cat
111
+        __ini_cat
104
     fi
112
     fi
105
 }
113
 }
106
 
114
 
111
     local op=$1             # operator
119
     local op=$1             # operator
112
     local arg=$2            # argument
120
     local arg=$2            # argument
113
     local fn                # internal function implementing $op
121
     local fn                # internal function implementing $op
114
-    local limit=_ini_cat    # limiting internal function
122
+    local limit=__ini_cat    # limiting internal function
115
     case $op in
123
     case $op in
116
-        lskeys) fn=_ini_lskeys   ;;
117
-        sec)    fn=_ini_grepsec  ;;
118
-        values) fn=_ini_greppath ;;
119
-        1value) fn=_ini_greppath; limit="tail -1" ;;
124
+        lskeys) fn=__ini_lskeys   ;;
125
+        lssect) fn=__ini_lssect   ;;
126
+        sec)    fn=__ini_grepsec  ;;
127
+        values) fn=__ini_greppath ;;
128
+        1value) fn=__ini_greppath; limit="tail -1" ;;
120
         *)      die "incorrect use of \`ini()\`"
129
         *)      die "incorrect use of \`ini()\`"
121
     esac
130
     esac
122
     <"$MKIT_INI" $fn "$arg" | $limit
131
     <"$MKIT_INI" $fn "$arg" | $limit
124
 
133
 
125
 update_version() {
134
 update_version() {
126
     #
135
     #
127
-    # Change project.version in mkit.ini at path $2 to version $1
136
+    # Change project:version in mkit.ini at path $2 to value $1
128
     #
137
     #
129
     local version=$1    # new version
138
     local version=$1    # new version
130
     local inifile=$2    # mkit.ini path
139
     local inifile=$2    # mkit.ini path

+ 43
- 10
utils/mkit/include/mkit.sh View File

30
 mkit_import release
30
 mkit_import release
31
 mkit_import ini
31
 mkit_import ini
32
 
32
 
33
-_valid_targets() {
33
+__valid_targets() {
34
     #
34
     #
35
     # List valid routes
35
     # List valid routes
36
     #
36
     #
37
+    echo _mkit_data
37
     echo build
38
     echo build
38
-    echo build_manpages
39
     echo clean
39
     echo clean
40
     echo debstuff
40
     echo debstuff
41
     echo dist
41
     echo dist
76
     done
76
     done
77
 }
77
 }
78
 
78
 
79
-_compver() {
79
+__compver() {
80
     #
80
     #
81
     # True if version $1 matches our version
81
     # True if version $1 matches our version
82
     #
82
     #
103
     return 0
103
     return 0
104
 }
104
 }
105
 
105
 
106
-_chkiniversion() {
106
+__chkiniversion() {
107
     #
107
     #
108
     # Check if ini version is supported
108
     # Check if ini version is supported
109
     #
109
     #
121
     test -n "$ver_line" \
121
     test -n "$ver_line" \
122
      || die "version mark ('#mkit version=x.y.z') not found in: $MKIT_INI"
122
      || die "version mark ('#mkit version=x.y.z') not found in: $MKIT_INI"
123
     their_ver="$(tr -d '[:blank:]v' <<<"${ver_line##*=}")"
123
     their_ver="$(tr -d '[:blank:]v' <<<"${ver_line##*=}")"
124
-    _compver "$their_ver" \
124
+    __compver "$their_ver" \
125
      || die "bad mkit.ini version: $their_ver does not match $MKIT_VERSION"
125
      || die "bad mkit.ini version: $their_ver does not match $MKIT_VERSION"
126
 }
126
 }
127
 
127
 
128
+local_putb() {
129
+    #
130
+    # Make file $1 in $MKIT_LOCAL from stdin and mark as built
131
+    #
132
+    local fpath=$1
133
+    local_put "$fpath" && rec_built "$MKIT_LOCAL/$fpath"
134
+}
135
+
136
+local_put() {
137
+    #
138
+    # Make file $1 in $MKIT_LOCAL from stdin
139
+    #
140
+    local fpath="$MKIT_LOCAL/$1"
141
+    { mkdir -p "${fpath%/*}" && cat >"$fpath"; } \
142
+     || die "cannot write to local cache: $fpath"
143
+}
144
+
145
+local_get() {
146
+    #
147
+    # Read file $1 in $MKIT_LOCAL
148
+    #
149
+    local fpath="$MKIT_LOCAL/$1"
150
+    cat "$fpath" 2>/dev/null
151
+}
152
+
128
 mkit_init() {
153
 mkit_init() {
129
     #
154
     #
130
     # Do basic initialization
155
     # Do basic initialization
132
     # Check for ini file and some variables
157
     # Check for ini file and some variables
133
     #
158
     #
134
     $MKIT_DRY && MKIT_DEBUG=true
159
     $MKIT_DRY && MKIT_DEBUG=true
160
+    #shellcheck disable=SC2034
135
     MKIT_PROJ_PKGNAME=$(ini 1value "project:pkgname")
161
     MKIT_PROJ_PKGNAME=$(ini 1value "project:pkgname")
136
     test -f "$MKIT_INI" || die "cannot find mkit.ini: $MKIT_INI"
162
     test -f "$MKIT_INI" || die "cannot find mkit.ini: $MKIT_INI"
137
-    _chkiniversion
138
-    test -n "$(tr -d '[:space:]' <<<"$MKIT_LOCAL")" \
139
-     || die "MKIT_LOCAL must be non-blank: '$MKIT_LOCAL'"
163
+    __chkiniversion
164
+}
165
+
166
+rec_built() {
167
+    #
168
+    # Record file $1 for deletion on `clean`
169
+    #
170
+    local file=$1
171
+    mkdir -p "$MKIT_LOCAL"
172
+    echo "$file" >> "$MKIT_LOCAL/built.lst"
140
 }
173
 }
141
 
174
 
142
 route() {
175
 route() {
143
     #
176
     #
144
     # Call correct function based on $1
177
     # Call correct function based on $1
145
     #
178
     #
146
-    if _valid_targets | grep -qwx "^$1"; then
179
+    if __valid_targets | grep -qwx "^$1"; then
147
         "$1"
180
         "$1"
148
     else
181
     else
149
         {
182
         {
150
             echo "usage: $(basename "$0") TARGET"
183
             echo "usage: $(basename "$0") TARGET"
151
             echo
184
             echo
152
             echo "valid targets:"
185
             echo "valid targets:"
153
-            _valid_targets | sed 's/^/    /'
186
+            __valid_targets | sed 's/^/    /'
154
         } >&2
187
         } >&2
155
     fi
188
     fi
156
 }
189
 }

+ 33
- 29
utils/mkit/include/release.sh View File

5
 mkit_import ini
5
 mkit_import ini
6
 mkit_import facts
6
 mkit_import facts
7
 
7
 
8
-_bump_version() {
8
+__bump_version() {
9
     #
9
     #
10
     # Bump version on stdin by level $1 (x, y or z)
10
     # Bump version on stdin by level $1 (x, y or z)
11
     #
11
     #
30
     echo "$new"
30
     echo "$new"
31
 }
31
 }
32
 
32
 
33
-_relck() {
33
+__relck() {
34
     #
34
     #
35
     # Die if blocking condition $1 is detected
35
     # Die if blocking condition $1 is detected
36
     #
36
     #
68
              && die "WIP commit since $(git_fact latest_tag)"
68
              && die "WIP commit since $(git_fact latest_tag)"
69
             ;;
69
             ;;
70
         ini_version)
70
         ini_version)
71
-            oracle=$(git_fact latest_version | _bump_version "$rlevel")
71
+            oracle=$(git_fact latest_version | __bump_version "$rlevel")
72
             ini 1value project:version  \
72
             ini 1value project:version  \
73
               | grep -qFx "$oracle" \
73
               | grep -qFx "$oracle" \
74
              || die "new version not in mkit.ini: $oracle"
74
              || die "new version not in mkit.ini: $oracle"
79
     esac
79
     esac
80
 }
80
 }
81
 
81
 
82
-_release() {
82
+__release() {
83
     #
83
     #
84
     # Prepare release
84
     # Prepare release
85
     #
85
     #
94
     local relsrc        # release source branch (if any)
94
     local relsrc        # release source branch (if any)
95
     local reldst        # release destination branch (if any)
95
     local reldst        # release destination branch (if any)
96
 
96
 
97
-    _relck git_present
98
-    _relck at_relsrc
99
-    _relck not_dirty
100
-    _relck tags_ok
101
-    _relck vbump_hot
102
-    _relck no_wip
103
-    _relck ini_version
97
+    __relck git_present
98
+    __relck at_relsrc
99
+    __relck not_dirty
100
+    __relck tags_ok
101
+    __relck vbump_hot
102
+    __relck no_wip
103
+    __relck ini_version
104
 
104
 
105
-    newtag=$(git_fact latest_version | _bump_version "$rlevel" | git_ver2tag )
105
+    newtag=$(git_fact latest_version | __bump_version "$rlevel" | git_ver2tag )
106
     set -e
106
     set -e
107
     debug_var newtag
107
     debug_var newtag
108
     $MKIT_DRY && return
108
     $MKIT_DRY && return
109
-    git tag -m "$(_release_msg)" "$newtag"
109
+    git tag -m "$(__release_msg)" "$newtag"
110
 
110
 
111
     relsrc=$(ini 1value project:relsrc)
111
     relsrc=$(ini 1value project:relsrc)
112
     reldst=$(ini 1value project:reldst)
112
     reldst=$(ini 1value project:reldst)
116
     fi
116
     fi
117
 }
117
 }
118
 
118
 
119
-_release_msg() {
119
+__release_msg() {
120
     #
120
     #
121
     # Generate message for annotated tag
121
     # Generate message for annotated tag
122
     #
122
     #
133
       | tail -n +3
133
       | tail -n +3
134
 }
134
 }
135
 
135
 
136
-_vbump() {
136
+__vbump() {
137
     #
137
     #
138
     # Do version bump at level $1
138
     # Do version bump at level $1
139
     #
139
     #
142
     #
142
     #
143
     local rlevel=$1     # bump level (x, y or z)
143
     local rlevel=$1     # bump level (x, y or z)
144
     local nextver       # version after the bump
144
     local nextver       # version after the bump
145
-    _relck git_present
146
-    _relck at_relsrc
147
-    _relck not_dirty
148
-    nextver=$(ini 1value project:version | _bump_version "$rlevel")
145
+    local cache         # cache for the message
146
+    __relck git_present
147
+    __relck at_relsrc
148
+    __relck not_dirty
149
+    nextver=$(ini 1value project:version | __bump_version "$rlevel")
149
     debug_var nextver
150
     debug_var nextver
150
     $MKIT_DRY && return
151
     $MKIT_DRY && return
151
     update_version "$nextver" mkit.ini \
152
     update_version "$nextver" mkit.ini \
152
       || die "failed to update version in mkit.ini"
153
       || die "failed to update version in mkit.ini"
153
     git add mkit.ini \
154
     git add mkit.ini \
154
       || die "failed to add mkit.ini to the index"
155
       || die "failed to add mkit.ini to the index"
155
-    git commit -e -m "$(_vbump_gitmsg)"
156
+    cache=$(mktemp -t "mkit._vbump_gitmsg.XXXXXXXX")
157
+    _vbump_gitmsg > "$cache"
158
+    git commit -e -F "$cache"   # note: reading from stdin will break vim
159
+    rm "$cache"
156
 }
160
 }
157
 
161
 
158
 _vbump_gitmsg() {
162
 _vbump_gitmsg() {
165
     echo ""
169
     echo ""
166
     git_fact reldiff \
170
     git_fact reldiff \
167
       | sed '
171
       | sed '
168
-            s/^[a-f0-9]\{7\} / *  &/; t PATHS
172
+            s/^[a-f0-9]\{7\} /\n *  &/; t PATHS
169
             s/^/        /
173
             s/^/        /
170
             :PATHS
174
             :PATHS
171
         '
175
         '
175
     #
179
     #
176
     # Perform release on Z level
180
     # Perform release on Z level
177
     #
181
     #
178
-    _release z
182
+    __release z
179
 }
183
 }
180
 
184
 
181
 release_x() {
185
 release_x() {
182
     #
186
     #
183
     # Perform release on X level
187
     # Perform release on X level
184
     #
188
     #
185
-    _release x
189
+    __release x
186
 }
190
 }
187
 
191
 
188
 release_y() {
192
 release_y() {
189
     #
193
     #
190
     # Perform release on Y level
194
     # Perform release on Y level
191
     #
195
     #
192
-    _release y
196
+    __release y
193
 }
197
 }
194
 
198
 
195
 release_z() {
199
 release_z() {
196
     #
200
     #
197
     # Perform release on Z level
201
     # Perform release on Z level
198
     #
202
     #
199
-    _release z
203
+    __release z
200
 }
204
 }
201
 
205
 
202
 vbump() {
206
 vbump() {
203
     #
207
     #
204
     # Perform version bump on Z level
208
     # Perform version bump on Z level
205
     #
209
     #
206
-    _vbump z
210
+    __vbump z
207
 }
211
 }
208
 
212
 
209
 vbump_x() {
213
 vbump_x() {
210
     #
214
     #
211
     # Perform version bump on X level
215
     # Perform version bump on X level
212
     #
216
     #
213
-    _vbump x
217
+    __vbump x
214
 }
218
 }
215
 
219
 
216
 vbump_y() {
220
 vbump_y() {
217
     #
221
     #
218
     # Perform version bump on Y level
222
     # Perform version bump on Y level
219
     #
223
     #
220
-    _vbump y
224
+    __vbump y
221
 }
225
 }
222
 
226
 
223
 vbump_z() {
227
 vbump_z() {
224
     #
228
     #
225
     # Perform version bump on Z level
229
     # Perform version bump on Z level
226
     #
230
     #
227
-    _vbump z
231
+    __vbump z
228
 }
232
 }

+ 2
- 1
utils/mkit/include/vars.sh View File

1
 #!/bin/bash
1
 #!/bin/bash
2
+#shellcheck disable=SC2034
2
 # MKit - simple install helper
3
 # MKit - simple install helper
3
 # See LICENSE file for copyright and license details.
4
 # See LICENSE file for copyright and license details.
4
 
5
 
57
 #
58
 #
58
 # This MKit version
59
 # This MKit version
59
 #
60
 #
60
-MKIT_VERSION=0.0.24
61
+MKIT_VERSION=0.0.28

+ 19
- 19
utils/mkit/mkit.mk View File

5
 
5
 
6
 all: build
6
 all: build
7
 
7
 
8
-build:
9
-	@$(MKIT_DIR)/make build
8
+_mkit_data:
9
+	@"$(MKIT_DIR)"/make _mkit_data
10
 
10
 
11
-manpages: build
12
-	@$(MKIT_DIR)/make build_manpages
11
+build:
12
+	@"$(MKIT_DIR)"/make build
13
 
13
 
14
 clean:
14
 clean:
15
-	@$(MKIT_DIR)/make clean
15
+	@"$(MKIT_DIR)"/make clean
16
 
16
 
17
 debstuff: dist
17
 debstuff: dist
18
-	@$(MKIT_DIR)/make debstuff
18
+	@"$(MKIT_DIR)"/make debstuff
19
 
19
 
20
 dist: clean
20
 dist: clean
21
-	@$(MKIT_DIR)/make dist
21
+	@"$(MKIT_DIR)"/make dist
22
 
22
 
23
 rpmstuff: dist
23
 rpmstuff: dist
24
-	@$(MKIT_DIR)/make rpmstuff
24
+	@"$(MKIT_DIR)"/make rpmstuff
25
 
25
 
26
 install: all
26
 install: all
27
-	@$(MKIT_DIR)/make install
27
+	@"$(MKIT_DIR)"/make install
28
 
28
 
29
 release:
29
 release:
30
-	@$(MKIT_DIR)/make release
30
+	@"$(MKIT_DIR)"/make release
31
 
31
 
32
 release_x:
32
 release_x:
33
-	@$(MKIT_DIR)/make release_x
33
+	@"$(MKIT_DIR)"/make release_x
34
 
34
 
35
 release_y:
35
 release_y:
36
-	@$(MKIT_DIR)/make release_y
36
+	@"$(MKIT_DIR)"/make release_y
37
 
37
 
38
 release_z:
38
 release_z:
39
-	@$(MKIT_DIR)/make release_z
39
+	@"$(MKIT_DIR)"/make release_z
40
 
40
 
41
 uninstall:
41
 uninstall:
42
-	@$(MKIT_DIR)/make uninstall
42
+	@"$(MKIT_DIR)"/make uninstall
43
 
43
 
44
 vbump:
44
 vbump:
45
-	@$(MKIT_DIR)/make vbump
45
+	@"$(MKIT_DIR)"/make vbump
46
 
46
 
47
 vbump_x:
47
 vbump_x:
48
-	@$(MKIT_DIR)/make vbump_x
48
+	@"$(MKIT_DIR)"/make vbump_x
49
 
49
 
50
 vbump_y:
50
 vbump_y:
51
-	@$(MKIT_DIR)/make vbump_y
51
+	@"$(MKIT_DIR)"/make vbump_y
52
 
52
 
53
 vbump_z:
53
 vbump_z:
54
-	@$(MKIT_DIR)/make vbump_z
54
+	@"$(MKIT_DIR)"/make vbump_z
55
 
55
 
56
-.PHONY: all clean dist rpmstuff install uninstall release release_x release_y release_z vbump vbump_x vbump_y vbump_z
56
+.PHONY: all _mkit_data clean dist rpmstuff install uninstall release release_x release_y release_z vbump vbump_x vbump_y vbump_z

+ 75
- 49
utils/mkit/stub View File

58
             echo "$any_name"
58
             echo "$any_name"
59
             tr -c '=\n' '=' <<<"$any_name"
59
             tr -c '=\n' '=' <<<"$any_name"
60
             echo ''
60
             echo ''
61
-            echo ''
62
             if test -n "$Tagline"; then
61
             if test -n "$Tagline"; then
63
                 echo "$Tagline"
62
                 echo "$Tagline"
64
             else
63
             else
68
 
67
 
69
         */mkit.ini|mkit.ini)
68
         */mkit.ini|mkit.ini)
70
             echo "[project]"
69
             echo "[project]"
71
-            echo "    version     = $Version"
72
-            test -n "$Codename"     && echo "    codename    = $Codename"
73
-            test -n "$NiceName"     && echo "    name        = $NiceName"
74
-            test -n "$Tagline"      && echo "    tagline     = $Tagline"
75
-            test -n "$PackageName"  && echo "    pkgname     = $PackageName"
76
-            test -n "$Maintainer"   && echo "    maintainer  = $Maintainer"
77
-            test -n "$VcsBrowser"   && echo "    vcs_browser = $VcsBrowser"
78
-            test -n "$RelSrc"       && echo "    relsrc      = $RelSrc"
79
-            test -n "$RelDst"       && echo "    reldst      = $RelDst"
70
+            {
71
+                echo "version = $Version"
72
+                test -n "$Codename"     && echo "codename    = $Codename"
73
+                test -n "$NiceName"     && echo "name        = $NiceName"
74
+                test -n "$Tagline"      && echo "tagline     = $Tagline"
75
+                test -n "$PackageName"  && echo "pkgname     = $PackageName"
76
+                test -n "$Maintainer"   && echo "maintainer  = $Maintainer"
77
+                test -n "$VcsBrowser"   && echo "vcs_browser = $VcsBrowser"
78
+                test -n "$RelSrc"       && echo "relsrc      = $RelSrc"
79
+                test -n "$RelDst"       && echo "reldst      = $RelDst"
80
+            } | reformat_section
80
             if updating; then
81
             if updating; then
81
                 remake_section dist
82
                 remake_section dist
82
                 remake_section ENV
83
                 remake_section ENV
87
             else
88
             else
88
                 echo ""
89
                 echo ""
89
                 echo "[dist]"
90
                 echo "[dist]"
90
-                $MkLicense  && echo "    tarball = LICENSE.md"
91
-                $MkMakefile && echo "    tarball = Makefile"
92
-                $MkReadme   && echo "    tarball = README.md"
93
-                echo "    tarball = mkit.ini"
94
-                $MkPackaging && echo "    tarball = packaging"
95
-                echo "    tarball = src"
96
-                echo "    tarball = tests"
97
-                echo "    tarball = utils"
98
-                $MkPackaging && echo "    rpmstuff = packaging/template.spec"
99
-                $MkPackaging && echo "    debstuff = packaging/debian"
91
+                {
92
+                    $MkLicense  && echo "tarball = LICENSE.md"
93
+                    $MkMakefile && echo "tarball = Makefile"
94
+                    $MkReadme   && echo "tarball = README.md"
95
+                    echo "tarball = mkit.ini"
96
+                    $MkPackaging && echo "tarball = packaging"
97
+                    echo "tarball = src"
98
+                    echo "tarball = tests"
99
+                    echo "tarball = utils"
100
+                    $MkPackaging && echo "rpmstuff = packaging/template.spec"
101
+                    $MkPackaging && echo "debstuff = packaging/debian"
102
+                } | reformat_section
100
                 echo ""
103
                 echo ""
101
                 echo "[ENV]"
104
                 echo "[ENV]"
102
-                echo "    PREFIX = /usr/local"
105
+                {
106
+                    echo "    PREFIX = /usr/local"
107
+                } | reformat_section
103
                 echo ""
108
                 echo ""
104
                 echo "[roots]"
109
                 echo "[roots]"
105
-                echo "    bin     = [ENV:PREFIX]/bin"
106
-                echo "    doc     = [ENV:PREFIX]/share/doc/$PackageName"
110
+                {
111
+                    echo "bin = [ENV:PREFIX]/bin"
112
+                    echo "doc = [ENV:PREFIX]/share/doc/$PackageName"
113
+                } | reformat_section
107
                 echo ""
114
                 echo ""
108
                 echo "[tokens]"
115
                 echo "[tokens]"
109
-                echo "    __${PackageName^^}_FOO__ = Barr.."
116
+                {
117
+                    echo "__${PackageName^^}_FOO__ = Barr.."
118
+                } | reformat_section
110
                 echo ""
119
                 echo ""
111
                 echo "[modes]"
120
                 echo "[modes]"
112
-                echo "    bin     = 755"
113
-                echo "    doc     = 644"
121
+                {
122
+                    echo "bin = 755"
123
+                    echo "doc = 644"
124
+                } | reformat_section
114
                 echo ""
125
                 echo ""
115
                 echo "[files]"
126
                 echo "[files]"
116
-                echo "    bin      = src/$PackageName"
117
-                $MkLicense && echo "    doc      = LICENSE.md"
118
-                $MkReadme  && echo "    doc      = README.md"
127
+                {
128
+                    echo "bin = src/$PackageName"
129
+                    $MkLicense && echo "doc = LICENSE.md"
130
+                    $MkReadme  && echo "doc = README.md"
131
+                } | reformat_section
119
             fi
132
             fi
120
             echo ""
133
             echo ""
121
             echo "#mkit version=$MKIT_VERSION"
134
             echo "#mkit version=$MKIT_VERSION"
122
             ;;
135
             ;;
123
 
136
 
124
         packaging/template.spec)
137
         packaging/template.spec)
125
-            echo 'Name:		__MKIT_PROJ_PKGNAME__'
126
-            echo 'Version:	__MKIT_PROJ_VERSION__'
127
-            echo 'Release:	1%{?dist}'
128
-            echo 'Summary:	__MKIT_PROJ_NAME__ - __MKIT_PROJ_TAGLINE__'
129
-            echo ''
130
-            $MkLicense && echo "License:	$License"
131
-            echo 'Source0:	%{name}-%{version}.tar.gz'
138
+            echo 'Name:       __MKIT_PROJ_PKGNAME__'
139
+            echo 'Version:    __MKIT_PROJ_VERSION__'
140
+            echo 'Release:    1%{?dist}'
141
+            echo 'Summary:    __MKIT_PROJ_NAME__ - __MKIT_PROJ_TAGLINE__'
142
+            test -n "$VcsBrowser" && echo 'URL:        __MKIT_PROJ_VCS_BROWSER__'
143
+            $MkLicense && echo "License:    $License"
132
             echo ''
144
             echo ''
133
-            echo 'BuildArch:	noarch'
134
-            echo 'BuildRequires:	coreutils git'
135
-            echo 'Requires:	MKIT_STUB_REQUIRES'
145
+            echo 'Source0:    %{name}-%{version}.tar.gz'
146
+            echo 'BuildArch:  noarch'
136
             echo ''
147
             echo ''
148
+            echo 'Requires: MKIT_STUB_REQUIRES'
137
             echo '%description'
149
             echo '%description'
138
             echo 'MKIT_STUB_DESCRIPTION'
150
             echo 'MKIT_STUB_DESCRIPTION'
139
             echo ''
151
             echo ''
198
             echo 'override_dh_auto_install:'
210
             echo 'override_dh_auto_install:'
199
             echo ''
211
             echo ''
200
             echo '	make install PREFIX=/usr DESTDIR=debian/tmp'
212
             echo '	make install PREFIX=/usr DESTDIR=debian/tmp'
201
-            echo ''
202
-            echo 'override_dh_usrlocal:'
203
-            echo ''
204
-            echo '	@true'
205
             ;;
213
             ;;
206
 
214
 
207
         packaging/debian/source/format)
215
         packaging/debian/source/format)
208
             echo '3.0 (quilt)'
216
             echo '3.0 (quilt)'
209
             ;;
217
             ;;
210
 
218
 
211
-        packaging/debian/*.install)
219
+        packaging/debian/install)
212
             echo MKIT_STUB_FILELIST
220
             echo MKIT_STUB_FILELIST
213
             ;;
221
             ;;
214
 
222
 
318
             echo "     *  \`MKIT_STUB_FILELIST\` - List of full paths to"
326
             echo "     *  \`MKIT_STUB_FILELIST\` - List of full paths to"
319
             echo "        your files after installation."
327
             echo "        your files after installation."
320
             echo ""
328
             echo ""
321
-            echo "        Note that in case of debian/package.install files,"
322
-            echo "        PREFIX based paths (eg. /usr/bin) in this file should"
323
-            echo "        should be as if PREFIX was /usr."
329
+            echo "        Note that in case of debian/install files, PREFIX"
330
+            echo "        based paths (eg. /usr/bin) in this file should be as"
331
+            echo "        if PREFIX was /usr."
324
             echo ""
332
             echo ""
325
             echo "        In case of Fedora-based distro, you should make use"
333
             echo "        In case of Fedora-based distro, you should make use"
326
             echo "        of RPM macros:"
334
             echo "        of RPM macros:"
551
     deploy packaging/debian/control
559
     deploy packaging/debian/control
552
     deploy packaging/debian/changelog
560
     deploy packaging/debian/changelog
553
     deploy packaging/debian/compat
561
     deploy packaging/debian/compat
562
+    deploy packaging/debian/install
554
     deploy packaging/debian/rules
563
     deploy packaging/debian/rules
555
     deploy packaging/debian/source/format
564
     deploy packaging/debian/source/format
556
-    deploy packaging/debian/"$PackageName".install
557
 }
565
 }
558
 
566
 
559
 init_from_existing() {
567
 init_from_existing() {
615
                     echo "$key = $value"
623
                     echo "$key = $value"
616
                 done
624
                 done
617
         done \
625
         done \
618
-      | column -to' ' \
626
+      | reformat_section
627
+}
628
+
629
+reformat_section() {
630
+    #
631
+    # Re-format "k = v" on stdin as "nice" ini section
632
+    #
633
+    local key
634
+    local eq
635
+    local value
636
+    while read -r key eq value; do
637
+        test "$eq" == "=" || {
638
+            warn "ignoring malformed ini line: $key $eq $value"
639
+            continue
640
+        }
641
+        echo "$key = $value"
642
+    done \
643
+      | sed 's/ *= */=/; s/^ *//; s/ *$//' \
644
+      | column -t -s= -o' = ' \
619
       | sed 's/^/    /'
645
       | sed 's/^/    /'
620
 }
646
 }
621
 
647