Browse Source

Update MKit to v0.0.28

Alois Mahdal 7 years ago
parent
commit
ab70b60c98

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

@@ -6,7 +6,7 @@ mkit_import ini
6 6
 mkit_import facts
7 7
 
8 8
 
9
-_build1() {
9
+__build1() {
10 10
     #
11 11
     # Process one skeleton $1 of type $3 (or guessed) to path $2
12 12
     #
@@ -14,53 +14,26 @@ _build1() {
14 14
     local dstpath=$2    # destination meaty animal path
15 15
     local ftype=$3      # file/builder type
16 16
     test -n "$dstpath"  || dstpath=${srcpath%.skel}
17
-    test -n "$ftype"    || ftype=$(_guess_ftype "$dstpath")
17
+    test -n "$ftype"    || ftype=$(__guess_ftype "$dstpath")
18 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 25
     # Build a file of type $1; fom stdin to stdout
27 26
     #
28 27
     local ftype=$1      # file/builder type
29 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 32
         *)              die "unknown file type: $ftype" ;;
35 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 38
     # Read stdin, expanding tokens from sections $@
66 39
     #
@@ -74,38 +47,37 @@ _expand_tokens() {
74 47
             debug_var section
75 48
             ini lskeys "$section" \
76 49
               | while read -r varname; do
77
-                    varvalue="$(ini 1value "$section:$varname" | _qfs )"
50
+                    varvalue="$(ini 1value "$section:$varname" | __qfs )"
78 51
                     echo "s|$varname|$varvalue|g;"
79 52
                     debug_var varname varvalue
80 53
                 done
81 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 64
         echo "s|__MKIT_SELF_VERSION__|$MKIT_VERSION|g;"
92 65
     } >> "$script"
93
-    sed -f "$script" || die "_expand_tokens failed"
66
+    sed -f "$script" || die "__expand_tokens failed"
94 67
     rm "$script"
95 68
 }
96 69
 
97
-_guess_ftype() {
70
+__guess_ftype() {
98 71
     #
99 72
     # Guess file type from destination path $1
100 73
     #
101 74
     local dstpath=$1    # destination path
102 75
     case $dstpath in
103
-        *.md) echo markdown    ;;
104 76
         *)    echo MKIT_COMMON ;;
105 77
     esac
106 78
 }
107 79
 
108
-_qfs() {
80
+__qfs() {
109 81
     #
110 82
     # Quote for our sed scipt's RHS
111 83
     #
@@ -115,37 +87,51 @@ _qfs() {
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 123
 build() {
119 124
     #
120 125
     # Add meat to all skeletons
121 126
     #
122 127
     local srcpath   # each source path
123
-    find -type f -name '*.skel' \
128
+    semver >/dev/null
129
+    find . -type f -name '*.skel' \
124 130
      | while read -r srcpath; do
125
-           _build1 "$srcpath"
131
+           __build1 "$srcpath"
126 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 135
 clean() {
150 136
     #
151 137
     # Clean up tree after building
@@ -174,7 +160,7 @@ debstuff() {
174 160
     mv "${MKIT_PROJ_PKGNAME}-$version.tar.gz" \
175 161
        "${MKIT_PROJ_PKGNAME}_$version.orig.tar.gz" \
176 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 165
     # read content of each mandatory file from debian_skel
180 166
     #
@@ -186,16 +172,16 @@ debstuff() {
186 172
       | while read -r dfsrc; do
187 173
             dftgt="debian/${dfsrc#$debian_skel}"
188 174
             mkdir -p "$(dirname "$dftgt")"
189
-            _build1 "$dfsrc" "$dftgt" debstuff
175
+            __build1 "$dfsrc" "$dftgt" debstuff
190 176
         done
191
-    echo debian >> "$MKIT_LOCAL/built.lst"
177
+    rec_built debian
192 178
 }
193 179
 
194 180
 dist() {
195 181
     #
196 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 185
     #       rpmstuff, hence -f hack for gzip
200 186
     #
201 187
     local version           # tarball version
@@ -211,8 +197,7 @@ dist() {
211 197
     echo -n "$git_lasthash" > "$dirname/.mkit/git_lasthash"
212 198
     tar -cf "$dirname.tar" "$dirname"
213 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 201
     rm -rf "$dirname"
217 202
 }
218 203
 
@@ -225,5 +210,5 @@ rpmstuff() {
225 210
     specsrc="$(ini 1value "dist:rpmstuff")"
226 211
     test -n "$specsrc" || die "dist:rpmstuff not specified"
227 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,11 +4,11 @@
4 4
 
5 5
 mkit_import ini
6 6
 
7
-_deploy_item() {
7
+__deploy_item() {
8 8
     #
9 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 13
     # Both src and dst must be names of actual items[1],
14 14
     # whereas dst must not exist.  On update, dst is
@@ -37,14 +37,15 @@ _deploy_item() {
37 37
                 [[ $item =~ .skel$ ]] \
38 38
                  && grep -q "${item%.skel}" "$MKIT_LOCAL/built.lst" \
39 39
                  && continue
40
-                _deploy_item "$item" "$dst${item#$src}" "$mode"
40
+                __deploy_item "$item" "$dst${item#$src}" "$mode"
41 41
             done
42 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 45
     fi
45 46
 }
46 47
 
47
-_get_dst() {
48
+__get_dst() {
48 49
     #
49 50
     # Find out target path for src file $2 of group $1
50 51
     #
@@ -52,10 +53,10 @@ _get_dst() {
52 53
     local src=$2        # each source
53 54
     local dst=$3        # alternative destination name
54 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 61
     # Find out target root for group $1
61 62
     #
@@ -72,7 +73,7 @@ _get_root() {
72 73
     esac
73 74
 }
74 75
 
75
-_maybe() {
76
+__maybe() {
76 77
     #
77 78
     # Call the deploy command $1 $@ unless in dry mode
78 79
     #
@@ -101,8 +102,8 @@ install() {
101 102
             mode=$(ini 1value "modes:$group")
102 103
             ini values "files:$group" \
103 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 107
                 done
107 108
         done
108 109
     test -f "$MKIT_LOCAL/autoclean" && clean
@@ -122,8 +123,8 @@ uninstall() {
122 123
       | while read -r group; do
123 124
             ini values "files:$group" \
124 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 128
                 done
128 129
         done
129 130
 }

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

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

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

@@ -2,7 +2,7 @@
2 2
 # MKit - simple install helper
3 3
 # See LICENSE file for copyright and license details.
4 4
 
5
-_ini_cat() {
5
+__ini_cat() {
6 6
     #
7 7
     # A no-op for text stream
8 8
     #
@@ -12,7 +12,7 @@ _ini_cat() {
12 12
     done
13 13
 }
14 14
 
15
-_ini_expand() {
15
+__ini_expand() {
16 16
     #
17 17
     # Expand reference value (prefix only)
18 18
     #
@@ -30,7 +30,7 @@ _ini_expand() {
30 30
     done
31 31
 }
32 32
 
33
-_ini_grepkey() {
33
+__ini_grepkey() {
34 34
     #
35 35
     # Read key from a section
36 36
     #
@@ -40,10 +40,10 @@ _ini_grepkey() {
40 40
       | sed -e 's/ *= */=/; s/ +$//; s/^//;' \
41 41
       | grep -e "^$wnt=" \
42 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 48
     # Read key from the right section
49 49
     #
@@ -62,10 +62,10 @@ _ini_greppath() {
62 62
          && echo "$override" \
63 63
          && return
64 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 70
     # Read one INI section
71 71
     #
@@ -85,22 +85,30 @@ _ini_grepsec() {
85 85
       | sed -e 's/ *= */=/; s/ +$//; s/^//;'
86 86
 }
87 87
 
88
-_ini_lskeys() {
88
+__ini_lskeys() {
89 89
     #
90 90
     # List keys from a section
91 91
     #
92 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 106
     # Decide whether or not to expand
99 107
     #
100 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 110
     else
103
-        _ini_cat
111
+        __ini_cat
104 112
     fi
105 113
 }
106 114
 
@@ -111,12 +119,13 @@ ini() {
111 119
     local op=$1             # operator
112 120
     local arg=$2            # argument
113 121
     local fn                # internal function implementing $op
114
-    local limit=_ini_cat    # limiting internal function
122
+    local limit=__ini_cat    # limiting internal function
115 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 129
         *)      die "incorrect use of \`ini()\`"
121 130
     esac
122 131
     <"$MKIT_INI" $fn "$arg" | $limit
@@ -124,7 +133,7 @@ ini() {
124 133
 
125 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 138
     local version=$1    # new version
130 139
     local inifile=$2    # mkit.ini path

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

@@ -30,12 +30,12 @@ mkit_import deploy
30 30
 mkit_import release
31 31
 mkit_import ini
32 32
 
33
-_valid_targets() {
33
+__valid_targets() {
34 34
     #
35 35
     # List valid routes
36 36
     #
37
+    echo _mkit_data
37 38
     echo build
38
-    echo build_manpages
39 39
     echo clean
40 40
     echo debstuff
41 41
     echo dist
@@ -76,7 +76,7 @@ debug_var() {
76 76
     done
77 77
 }
78 78
 
79
-_compver() {
79
+__compver() {
80 80
     #
81 81
     # True if version $1 matches our version
82 82
     #
@@ -103,7 +103,7 @@ _compver() {
103 103
     return 0
104 104
 }
105 105
 
106
-_chkiniversion() {
106
+__chkiniversion() {
107 107
     #
108 108
     # Check if ini version is supported
109 109
     #
@@ -121,10 +121,35 @@ _chkiniversion() {
121 121
     test -n "$ver_line" \
122 122
      || die "version mark ('#mkit version=x.y.z') not found in: $MKIT_INI"
123 123
     their_ver="$(tr -d '[:blank:]v' <<<"${ver_line##*=}")"
124
-    _compver "$their_ver" \
124
+    __compver "$their_ver" \
125 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 153
 mkit_init() {
129 154
     #
130 155
     # Do basic initialization
@@ -132,25 +157,33 @@ mkit_init() {
132 157
     # Check for ini file and some variables
133 158
     #
134 159
     $MKIT_DRY && MKIT_DEBUG=true
160
+    #shellcheck disable=SC2034
135 161
     MKIT_PROJ_PKGNAME=$(ini 1value "project:pkgname")
136 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 175
 route() {
143 176
     #
144 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 180
         "$1"
148 181
     else
149 182
         {
150 183
             echo "usage: $(basename "$0") TARGET"
151 184
             echo
152 185
             echo "valid targets:"
153
-            _valid_targets | sed 's/^/    /'
186
+            __valid_targets | sed 's/^/    /'
154 187
         } >&2
155 188
     fi
156 189
 }

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

@@ -5,7 +5,7 @@
5 5
 mkit_import ini
6 6
 mkit_import facts
7 7
 
8
-_bump_version() {
8
+__bump_version() {
9 9
     #
10 10
     # Bump version on stdin by level $1 (x, y or z)
11 11
     #
@@ -30,7 +30,7 @@ _bump_version() {
30 30
     echo "$new"
31 31
 }
32 32
 
33
-_relck() {
33
+__relck() {
34 34
     #
35 35
     # Die if blocking condition $1 is detected
36 36
     #
@@ -68,7 +68,7 @@ _relck() {
68 68
              && die "WIP commit since $(git_fact latest_tag)"
69 69
             ;;
70 70
         ini_version)
71
-            oracle=$(git_fact latest_version | _bump_version "$rlevel")
71
+            oracle=$(git_fact latest_version | __bump_version "$rlevel")
72 72
             ini 1value project:version  \
73 73
               | grep -qFx "$oracle" \
74 74
              || die "new version not in mkit.ini: $oracle"
@@ -79,7 +79,7 @@ _relck() {
79 79
     esac
80 80
 }
81 81
 
82
-_release() {
82
+__release() {
83 83
     #
84 84
     # Prepare release
85 85
     #
@@ -94,19 +94,19 @@ _release() {
94 94
     local relsrc        # release source branch (if any)
95 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 106
     set -e
107 107
     debug_var newtag
108 108
     $MKIT_DRY && return
109
-    git tag -m "$(_release_msg)" "$newtag"
109
+    git tag -m "$(__release_msg)" "$newtag"
110 110
 
111 111
     relsrc=$(ini 1value project:relsrc)
112 112
     reldst=$(ini 1value project:reldst)
@@ -116,7 +116,7 @@ _release() {
116 116
     fi
117 117
 }
118 118
 
119
-_release_msg() {
119
+__release_msg() {
120 120
     #
121 121
     # Generate message for annotated tag
122 122
     #
@@ -133,7 +133,7 @@ _release_msg() {
133 133
       | tail -n +3
134 134
 }
135 135
 
136
-_vbump() {
136
+__vbump() {
137 137
     #
138 138
     # Do version bump at level $1
139 139
     #
@@ -142,17 +142,21 @@ _vbump() {
142 142
     #
143 143
     local rlevel=$1     # bump level (x, y or z)
144 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 150
     debug_var nextver
150 151
     $MKIT_DRY && return
151 152
     update_version "$nextver" mkit.ini \
152 153
       || die "failed to update version in mkit.ini"
153 154
     git add mkit.ini \
154 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 162
 _vbump_gitmsg() {
@@ -165,7 +169,7 @@ _vbump_gitmsg() {
165 169
     echo ""
166 170
     git_fact reldiff \
167 171
       | sed '
168
-            s/^[a-f0-9]\{7\} / *  &/; t PATHS
172
+            s/^[a-f0-9]\{7\} /\n *  &/; t PATHS
169 173
             s/^/        /
170 174
             :PATHS
171 175
         '
@@ -175,54 +179,54 @@ release() {
175 179
     #
176 180
     # Perform release on Z level
177 181
     #
178
-    _release z
182
+    __release z
179 183
 }
180 184
 
181 185
 release_x() {
182 186
     #
183 187
     # Perform release on X level
184 188
     #
185
-    _release x
189
+    __release x
186 190
 }
187 191
 
188 192
 release_y() {
189 193
     #
190 194
     # Perform release on Y level
191 195
     #
192
-    _release y
196
+    __release y
193 197
 }
194 198
 
195 199
 release_z() {
196 200
     #
197 201
     # Perform release on Z level
198 202
     #
199
-    _release z
203
+    __release z
200 204
 }
201 205
 
202 206
 vbump() {
203 207
     #
204 208
     # Perform version bump on Z level
205 209
     #
206
-    _vbump z
210
+    __vbump z
207 211
 }
208 212
 
209 213
 vbump_x() {
210 214
     #
211 215
     # Perform version bump on X level
212 216
     #
213
-    _vbump x
217
+    __vbump x
214 218
 }
215 219
 
216 220
 vbump_y() {
217 221
     #
218 222
     # Perform version bump on Y level
219 223
     #
220
-    _vbump y
224
+    __vbump y
221 225
 }
222 226
 
223 227
 vbump_z() {
224 228
     #
225 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,4 +1,5 @@
1 1
 #!/bin/bash
2
+#shellcheck disable=SC2034
2 3
 # MKit - simple install helper
3 4
 # See LICENSE file for copyright and license details.
4 5
 
@@ -57,4 +58,4 @@ MKIT_PROJ_PKGNAME=""
57 58
 #
58 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,52 +5,52 @@ export MKIT_DIR
5 5
 
6 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 14
 clean:
15
-	@$(MKIT_DIR)/make clean
15
+	@"$(MKIT_DIR)"/make clean
16 16
 
17 17
 debstuff: dist
18
-	@$(MKIT_DIR)/make debstuff
18
+	@"$(MKIT_DIR)"/make debstuff
19 19
 
20 20
 dist: clean
21
-	@$(MKIT_DIR)/make dist
21
+	@"$(MKIT_DIR)"/make dist
22 22
 
23 23
 rpmstuff: dist
24
-	@$(MKIT_DIR)/make rpmstuff
24
+	@"$(MKIT_DIR)"/make rpmstuff
25 25
 
26 26
 install: all
27
-	@$(MKIT_DIR)/make install
27
+	@"$(MKIT_DIR)"/make install
28 28
 
29 29
 release:
30
-	@$(MKIT_DIR)/make release
30
+	@"$(MKIT_DIR)"/make release
31 31
 
32 32
 release_x:
33
-	@$(MKIT_DIR)/make release_x
33
+	@"$(MKIT_DIR)"/make release_x
34 34
 
35 35
 release_y:
36
-	@$(MKIT_DIR)/make release_y
36
+	@"$(MKIT_DIR)"/make release_y
37 37
 
38 38
 release_z:
39
-	@$(MKIT_DIR)/make release_z
39
+	@"$(MKIT_DIR)"/make release_z
40 40
 
41 41
 uninstall:
42
-	@$(MKIT_DIR)/make uninstall
42
+	@"$(MKIT_DIR)"/make uninstall
43 43
 
44 44
 vbump:
45
-	@$(MKIT_DIR)/make vbump
45
+	@"$(MKIT_DIR)"/make vbump
46 46
 
47 47
 vbump_x:
48
-	@$(MKIT_DIR)/make vbump_x
48
+	@"$(MKIT_DIR)"/make vbump_x
49 49
 
50 50
 vbump_y:
51
-	@$(MKIT_DIR)/make vbump_y
51
+	@"$(MKIT_DIR)"/make vbump_y
52 52
 
53 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,7 +58,6 @@ deploy() {
58 58
             echo "$any_name"
59 59
             tr -c '=\n' '=' <<<"$any_name"
60 60
             echo ''
61
-            echo ''
62 61
             if test -n "$Tagline"; then
63 62
                 echo "$Tagline"
64 63
             else
@@ -68,15 +67,17 @@ deploy() {
68 67
 
69 68
         */mkit.ini|mkit.ini)
70 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 81
             if updating; then
81 82
                 remake_section dist
82 83
                 remake_section ENV
@@ -87,53 +88,64 @@ deploy() {
87 88
             else
88 89
                 echo ""
89 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 103
                 echo ""
101 104
                 echo "[ENV]"
102
-                echo "    PREFIX = /usr/local"
105
+                {
106
+                    echo "    PREFIX = /usr/local"
107
+                } | reformat_section
103 108
                 echo ""
104 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 114
                 echo ""
108 115
                 echo "[tokens]"
109
-                echo "    __${PackageName^^}_FOO__ = Barr.."
116
+                {
117
+                    echo "__${PackageName^^}_FOO__ = Barr.."
118
+                } | reformat_section
110 119
                 echo ""
111 120
                 echo "[modes]"
112
-                echo "    bin     = 755"
113
-                echo "    doc     = 644"
121
+                {
122
+                    echo "bin = 755"
123
+                    echo "doc = 644"
124
+                } | reformat_section
114 125
                 echo ""
115 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 132
             fi
120 133
             echo ""
121 134
             echo "#mkit version=$MKIT_VERSION"
122 135
             ;;
123 136
 
124 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 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 147
             echo ''
148
+            echo 'Requires: MKIT_STUB_REQUIRES'
137 149
             echo '%description'
138 150
             echo 'MKIT_STUB_DESCRIPTION'
139 151
             echo ''
@@ -198,17 +210,13 @@ deploy() {
198 210
             echo 'override_dh_auto_install:'
199 211
             echo ''
200 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 215
         packaging/debian/source/format)
208 216
             echo '3.0 (quilt)'
209 217
             ;;
210 218
 
211
-        packaging/debian/*.install)
219
+        packaging/debian/install)
212 220
             echo MKIT_STUB_FILELIST
213 221
             ;;
214 222
 
@@ -318,9 +326,9 @@ deploy() {
318 326
             echo "     *  \`MKIT_STUB_FILELIST\` - List of full paths to"
319 327
             echo "        your files after installation."
320 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 332
             echo ""
325 333
             echo "        In case of Fedora-based distro, you should make use"
326 334
             echo "        of RPM macros:"
@@ -551,9 +559,9 @@ deploy_packaging() {
551 559
     deploy packaging/debian/control
552 560
     deploy packaging/debian/changelog
553 561
     deploy packaging/debian/compat
562
+    deploy packaging/debian/install
554 563
     deploy packaging/debian/rules
555 564
     deploy packaging/debian/source/format
556
-    deploy packaging/debian/"$PackageName".install
557 565
 }
558 566
 
559 567
 init_from_existing() {
@@ -615,7 +623,25 @@ remake_section() {
615 623
                     echo "$key = $value"
616 624
                 done
617 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 645
       | sed 's/^/    /'
620 646
 }
621 647