summaryrefslogtreecommitdiff
path: root/build-aux/increment-serial
blob: cff9ac04cdb7e3a48a86b4a7f00023575c7dbe55 (plain)
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#!/bin/sh
# Increment serial number in Autoconf *.m4 files.

# Copyright (C) 2021-2023 Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

scriptversion=2022-01-27

copyright_year=`echo "$scriptversion" | sed -e 's/[^0-9].*//'`
copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc.
License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law."

usage="Usage: $0 [FILE...]

Increments the serial number, if present, in each of the files.

Options:
  --version                output version information and exit
  --help                   print this help text and exit

Send patches and bug reports to <bug-gnulib@gnu.org>."

# Based on
# <https://www.gnu.org/software/sed/manual/html_node/Increment-a-number.html>
sed_inc_serial='1,10 {
  /serial *[0-9]/ {
    s/\(serial *[0-9][0-9]*\)/\1~/
    :a
    s/\(serial *[0-9]*\)9\(_*\)~/\1_\2~/
    ta
    s/\(serial *\)\(_*\)~/\11\2~/
    tb
    s/\(serial *[0-9]*\)8\(_*\)~/\19\2~/
    tb
    s/\(serial *[0-9]*\)7\(_*\)~/\18\2~/
    tb
    s/\(serial *[0-9]*\)6\(_*\)~/\17\2~/
    tb
    s/\(serial *[0-9]*\)5\(_*\)~/\16\2~/
    tb
    s/\(serial *[0-9]*\)4\(_*\)~/\15\2~/
    tb
    s/\(serial *[0-9]*\)3\(_*\)~/\14\2~/
    tb
    s/\(serial *[0-9]*\)2\(_*\)~/\13\2~/
    tb
    s/\(serial *[0-9]*\)1\(_*\)~/\12\2~/
    tb
    s/\(serial *[0-9]*\)0\(_*\)~/\11\2~/
    tb
    :b
    s/\(serial *[0-9]*\)_/\10/
    tb
    s/\(serial *[0-9]*\)~/\1/
  }
}'

# func_process FILE
func_process ()
{
  sed -i -e "$sed_inc_serial" "$1" || exit 1
}

while test $# -gt 0; do
  case "$1" in
    --version)
      set -e
      echo "increment-serial $scriptversion"
      echo "$copyright"
      echo
      printf 'Written by %s.\n' "Bruno Haible"
      exit 0
      ;;
    --help)
      set -e
      echo "$usage"
      exit 0
      ;;
    --)
      shift
      while test $# -gt 0; do
        case "$1" in
          -*) func_process "./$1" ;;
          *)  func_process "$1" ;;
        esac
        shift
      done
      break
      ;;
    -*)
      echo "$0: Unknown option '$1', try '$0 --help'" 1>&2
      exit 1
      ;;
    *)
      func_process "$1"
      ;;
  esac
  shift
done
exit 0