File: version.src

package info (click to toggle)
wml 2.0.11ds2-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 2,024 kB
  • ctags: 48
  • sloc: perl: 4,757; sh: 3,663; makefile: 1,087
file content (155 lines) | stat: -rw-r--r-- 4,595 bytes parent folder | download | duplicates (11)
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
##
##  wml::mod::version - Checks software version numbers
##  Copyright (c) 1999-2001 Denis Barbier, All Rights Reserved.
##

#   WML version numbers:
#   they consist of 3 numbers separated by a dot, e.g. 1.3.2
#
#   But the last dot may be replaced by letters ``a'' (for alpha
#   release) and ``b'' (for beta release). In these cases, the last
#   number is different : for instance, after version 1.2.4 we want to
#   release an alpha version of 1.2.5. This version will be numbered
#   1.2a501. It means first alpha-release for version 1.2.5. We have
#   just 99 alpha releases before a beta release, so we must be careful ;-)
#
<define-tag require>
<set-var __result= />
<if <match %0 "^([0-9]+)\\.([0-9]+)([ab.])([0-9]+).*$" /> 
        "" <set-var __result="undef" /> />
<if <match "$(WML_VERSION)" "^([0-9]+)\\.([0-9]+)([ab.])([0-9]+).*$" />
        "" <set-var __result="undef" /> />
#
#   First compute the members of tne number version
#
<when <not <get-var __result /> />>
  <subst-in-string 
    <subst-in-string %0
      "^([0-9]+)\\.([0-9]+)([ab.])([0-9]+).*$"
        "<-set-var- __version=\\1 __revision=\\2 __type=\\3 __patch=\\4 />" />
  "-set-var-" "set-var" />
  <subst-in-string 
    <subst-in-string <get-var WML_VERSION />
      "^([0-9]+)\\.([0-9]+)([ab.])([0-9]+).*$"
        "<-set-var- __wml_version=\\1 __wml_revision=\\2 __wml_type=\\3 __wml_patch=\\4 />" />
  "-set-var-" "set-var" />
</when>
#
#   check wether version number differ
#
<when <not <get-var __result /> />>
<if <lt <get-var __version /> <get-var __wml_version /> />
    <set-var __result="ok" /> />
<if <gt <get-var __version /> <get-var __wml_version /> />
    <set-var __result="bad" /> />
</when>
#
#   check wether revision number differ
#
<when <not <get-var __result /> />>
<if <lt <get-var __revision /> <get-var __wml_revision /> />
    <set-var __result="ok" /> />
<if <gt <get-var __revision /> <get-var __wml_revision /> />
    <set-var __result="bad" /> />
</when>
#
#   the first 2 numbers are the same.
#   We have to check
#       - types (a, b or .)
#       - patch number
#   With types ``a'' and ``b'', patch numbers are multiplied by 100.
#   In other words, 1.7.2 = 1.7a300 < 1.7a333 < 1.7b301 < 1.7.3
#
<when <not <get-var __result /> />>
<ifeq <get-var __type /> "."
    <group
       <set-var __type="a" />
       <set-var __patch=<multiply <add <get-var __patch /> 1 /> 100 /> />
    />
/>
<ifeq <get-var __wml_type /> "."
    <group
       <set-var __wml_type="a" />
       <set-var __wml_patch=<multiply <add <get-var __wml_patch /> 1 /> 100 /> />
    />
/>
#
#   Check first digit of patch number
#
<if <lt <divide <get-var __patch /> 100 />
        <divide <get-var __wml_patch /> 100 /> />
    <set-var __result="ok" /> />
<if <gt <divide <get-var __patch /> 100 />
        <divide <get-var __wml_patch /> 100 /> />
    <set-var __result="bad" /> />
</when>
#
#   First digits are the same. We now test 1.7a3xx < 1.7b3yy
#
<when <not <get-var __result /> />>
<ifeq "<get-var __type /><get-var __wml_type />" "ab"
    <set-var __result="ok" /> />
<ifeq "<get-var __type /><get-var __wml_type />" "ba"
    <set-var __result="bad" /> />
</when>
#
#   Numbers may only dff by the last 2 digits.
#
<when <not <get-var __result /> />>
<if <gt <get-var __patch /> <get-var __wml_patch /> />
    <set-var __result="bad" />
    <set-var __result="ok" /> />
</when>
#   And now, writes an error message if version does not match
#   I would like to use pass 2, but can't yet.
<ifeq <get-var __result /> "bad"
  <exit message="Version %0 required.
Only WML version $(WML_VERSION) installed.
" /> />
<ifeq <get-var __result /> "undef"
  <exit message="Version %0 required.
Could not find whether your version of WML is newer or not.
" /> />
</define-tag>

##EOF##
__END__

=head1 NAME

wml::mod::version - Checks WML version number

=head1 SYNOPSIS

 #use wml::mod::version

 <require 1.7.1 />

=head1 DESCRIPTION

As WML evolves, some new features appear and some input files requires
new version to be processed. This include file provides the
C<E<lt>requireE<gt>> tag, which checks whether running WML program is
new enough to process input file.

=head1 ATTRIBUTES

The C<E<lt>requireE<gt>> tag takes an argument : the WML version number
needed to process the file in which this tag appears. This number is a
dot separated list of 3 numbers, from left to right : version, revision
and patchlevel. 

Comparison between numbers is numerical, so that 1.7.50 E<gt> 1.7.6

=head1 AUTHOR

 Denis Barbier
 barbier@engelschall.com

=head1 REQUIRES

 Internal: P2
 External: --

=cut