source: common/libs/func_check_version.sh@ 837362b

ablfs-more legacy trunk
Last change on this file since 837362b was 837362b, checked in by Pierre Labastie <pierre.labastie@…>, 3 years ago

Ticket #1732: add Docbook XSL and XML to check_alfs_tools

This is an oversight of when we moved to profiling and when we
removed the docbook xsl stylesheets from the LFS directory.
Docbook XML DTD and XSL stylesheets are needed, so test them
at start. This has the effect of removing the need for check_blfs_tools.

  • Property mode set to 100644
File size: 9.6 KB
Line 
1check_version() {
2: <<inline_doc
3 Tests for a minimum version level. Compares to version numbers and forces an
4 exit if minimum level not met.
5 NOTE: This test will fail on versions containing alpha chars. ie. jpeg 6b
6
7 usage: check_version "2.6.2" "`uname -r`" "KERNEL"
8 check_version "3.0" "$BASH_VERSION" "BASH"
9 check_version "3.0" "`gcc -dumpversion`" "GCC"
10
11 input vars: $1=min acceptable version
12 $2=version to check
13 $3=app name
14 externals: --
15 modifies: --
16 returns: nothing
17 on error: write text to console and dies
18 on success: write text to console and returns
19inline_doc
20
21 declare -i major minor revision change
22 declare -i ref_major ref_minor ref_revision ref_change
23 declare -r spaceSTR=" "
24 declare -r spaceSTR1=" "
25
26 shopt -s extglob #needed for ${x##*(0)} below
27
28 ref_version=$1
29 tst_version=$2
30 TXT=$3
31
32 # This saves us the save/restore hassle of the system IFS value
33 local IFS
34
35 write_error_and_die() {
36 echo -e "\n\t\t$TXT is missing or version -->${tst_version}<-- is too old.
37 This script requires ${ref_version} or greater\n"
38 # Ask the user instead of bomb, to make happy that packages which version
39 # ouput don't follow our expectations
40 echo "If you are sure that you have installed a proper version of ${BOLD}$TXT${OFF}"
41 echo "but jhalfs has failed to detect it, press 'c' and 'ENTER' keys to continue,"
42 echo -n "otherwise press 'ENTER' key to stop jhalfs. "
43 read ANSWER
44 if [ x$ANSWER != "xc" ] ; then
45 echo "${nl_}Please, install a proper $TXT version.${nl_}"
46 exit 1
47 else
48 minor=$ref_minor
49 revision=$ref_revision
50 fi
51 }
52
53 echo -ne "${TXT}${spaceSTR:${#TXT}} ${L_arrow}${BOLD}${tst_version}${OFF}${R_arrow}"
54
55 IFS=".-(pab" # Split up w.x.y.z as well as w.x.y-rc (catch release candidates)
56 set -- $ref_version # set positional parameters to minimum ver values
57 ref_major=$1; ref_minor=$2; ref_revision=$3
58 #
59 set -- $tst_version # Set positional parameters to test version values
60 # Values beginning with zero are taken as octal, so that for example
61 # 2.07.08 gives an error because 08 cannot be octal. The ## stuff supresses
62 # leading zero's
63 major=${1##*(0)}; minor=${2##*(0)}; revision=${3##*(0)}
64 #
65 # Compare against minimum acceptable version..
66 (( major > ref_major )) &&
67 echo " ${spaceSTR1:${#tst_version}}${GREEN}OK${OFF} (Min version: ${ref_version})" &&
68 return
69 (( major < ref_major )) && write_error_and_die
70 # major=ref_major
71 (( minor < ref_minor )) && write_error_and_die
72 (( minor > ref_minor )) &&
73 echo " ${spaceSTR1:${#tst_version}}${GREEN}OK${OFF} (Min version: ${ref_version})" &&
74 return
75 # minor=ref_minor
76 (( revision >= ref_revision )) &&
77 echo " ${spaceSTR1:${#tst_version}}${GREEN}OK${OFF} (Min version: ${ref_version})" &&
78 return
79
80 # oops.. write error msg and die
81 write_error_and_die
82}
83
84#----------------------------#
85check_prerequisites() { #
86#----------------------------#
87
88 HOSTREQS=$(find $BOOK -name hostreqs.xml)
89
90 eval $(xsltproc $COMMON_DIR/hostreqs.xsl $HOSTREQS)
91 # Avoid translation of version strings
92 local LC_ALL=C
93 export LC_ALL
94
95 # LFS/HLFS/CLFS prerequisites
96 if [ -n "$MIN_Linux_VER" ]; then
97 check_version "$MIN_Linux_VER" "`uname -r`" "KERNEL"
98 fi
99 if [ -n "$MIN_Bash_VER" ]; then
100 check_version "$MIN_Bash_VER" "$BASH_VERSION" "BASH"
101 fi
102 if [ ! -z $MIN_GCC_VER ]; then
103 check_version "$MIN_GCC_VER" "`gcc -dumpfullversion -dumpversion`" "GCC"
104 check_version "$MIN_GCC_VER" "`g++ -dumpfullversion -dumpversion`" "G++"
105 elif [ ! -z $MIN_Gcc_VER ]; then
106 check_version "$MIN_Gcc_VER" "`gcc -dumpfullversion -dumpversion`" "GCC"
107 fi
108 if [ -n "$MIN_Glibc_VER" ]; then
109 check_version "$MIN_Glibc_VER" "$(ldd --version | head -n1 | awk '{print $NF}')" "GLIBC"
110 fi
111 if [ -n "$MIN_Binutils_VER" ]; then
112 check_version "$MIN_Binutils_VER" "$(ld --version | head -n1 | awk '{print $NF}')" "BINUTILS"
113 fi
114 if [ -n "$MIN_Tar_VER" ]; then
115 check_version "$MIN_Tar_VER" "$(tar --version | head -n1 | cut -d" " -f4)" "TAR"
116 fi
117 if [ -n "$MIN_Bzip2_VER" ]; then
118 bzip2Ver="$(bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f8)"
119 check_version "$MIN_Bzip2_VER" "${bzip2Ver%%,*}" "BZIP2"
120 fi
121 if [ -n "$MIN_Bison_VER" ]; then
122 check_version "$MIN_Bison_VER" "$(bison --version | head -n1 | cut -d" " -f4)" "BISON"
123 fi
124 if [ -n "$MIN_Coreutils_VER" ]; then
125 check_version "$MIN_Coreutils_VER" "$(chown --version | head -n1 | cut -d" " -f4)" "COREUTILS"
126 fi
127 if [ -n "$MIN_Diffutils_VER" ]; then
128 check_version "$MIN_Diffutils_VER" "$(diff --version | head -n1 | cut -d" " -f4)" "DIFF"
129 fi
130 if [ -n "$MIN_Findutils_VER" ]; then
131 check_version "$MIN_Findutils_VER" "$(find --version | head -n1 | cut -d" " -f4)" "FIND"
132 fi
133 if [ -n "$MIN_Gawk_VER" ]; then
134 check_version "$MIN_Gawk_VER" "$(gawk --version | head -n1 | awk -F'[ ,]+' '{print $3}')" "GAWK"
135 fi
136 if [ -n "$MIN_Grep_VER" ]; then
137 check_version "$MIN_Grep_VER" "$(grep --version | head -n1 | awk '{print $NF}')" "GREP"
138 fi
139 if [ -n "$MIN_Gzip_VER" ]; then
140 check_version "$MIN_Gzip_VER" "$(gzip --version 2>&1 | head -n1 | cut -d" " -f2)" "GZIP"
141 fi
142 if [ -n "$MIN_M4_VER" ]; then
143 check_version "$MIN_M4_VER" "$(m4 --version 2>&1 | head -n1 | awk '{print $NF}')" "M4"
144 fi
145 if [ -n "$MIN_Make_VER" ]; then
146 check_version "$MIN_Make_VER" "$(make --version | head -n1 | cut -d " " -f3 | cut -c1-4)" "MAKE"
147 fi
148 if [ -n "$MIN_Patch_VER" ]; then
149 check_version "$MIN_Patch_VER" "$(patch --version | head -n1 | sed 's/.*patch //')" "PATCH"
150 fi
151 if [ -n "$MIN_Perl_VER" ]; then
152 check_version "$MIN_Perl_VER" "$(perl -V:version | cut -f2 -d\')" "PERL"
153 fi
154 if [ -n "$MIN_Sed_VER" ]; then
155 check_version "$MIN_Sed_VER" "$(sed --version | head -n1 | cut -d" " -f4)" "SED"
156 fi
157 if [ -n "$MIN_Texinfo_VER" ]; then
158 check_version "$MIN_Texinfo_VER" "$(makeinfo --version | head -n1 | awk '{ print$NF }')" "TEXINFO"
159 fi
160 if [ -n "$MIN_Xz_VER" ]; then
161 check_version "$MIN_Xz_VER" "$(xz --version | head -n1 | cut -d" " -f4)" "XZ"
162 fi
163 if [ -n "$MIN_Python_VER" ]; then
164 check_version "$MIN_Python_VER" "3.$(python3 -c"import sys; print(sys.version_info.minor,'.',sys.version_info.micro,sep='')")" "PYTHON"
165 fi
166}
167
168#----------------------------#
169check_alfs_tools() { #
170#----------------------------#
171: << inline_doc
172Those tools are needed for the proper operation of jhalfs
173inline_doc
174
175 # Avoid translation of version strings
176 local LC_ALL=C
177 export LC_ALL
178
179 # Check for minimum sudo version
180 SUDO_LOC="$(whereis -b sudo | cut -d" " -f2)"
181 if [ -x $SUDO_LOC ]; then
182 sudoVer="$(sudo -V | head -n1 | cut -d" " -f3)"
183 check_version "1.7.0" "${sudoVer}" "SUDO"
184 else
185 echo "${nl_}\"${RED}sudo${OFF}\" ${BOLD}must be installed on your system for jhalfs to run"
186 exit 1
187 fi
188
189 # Check for wget presence (using a dummy version)
190 WGET_LOC="$(whereis -b wget | cut -d" " -f2)"
191 if [ -x $WGET_LOC ]; then
192 wgetVer="$(wget --version | head -n1 | cut -d" " -f3)"
193 if echo "$wgetVer" | grep -q '^[[:digit:]]'; then
194 check_version "1.0.0" "${wgetVer}" "WGET"
195 else echo Wget detected, but no version found. Continuing anyway.
196 fi
197 else
198 echo "${nl_}\"${RED}wget${OFF}\" ${BOLD}must be installed on your system for jhalfs to run"
199 exit 1
200 fi
201
202 # Before checking libxml2 and libxslt version information, ensure tools
203 # needed from those packages are actually available. Avoids a small
204 # cosmetic bug of book version information not being retrieved if
205 # xmllint is unavailable, especially when on recent non-LFS hosts.
206
207 XMLLINT_LOC="$(whereis -b xmllint | cut -d" " -f2)"
208 XSLTPROC_LOC="$(whereis -b xsltproc | cut -d" " -f2)"
209
210 if [ ! -x $XMLLINT_LOC ]; then
211 echo "${nl_}\"${RED}xmllint${OFF}\" ${BOLD}must be installed on your system for jhalfs to run"
212 exit 1
213 fi
214
215 if [ -x $XSLTPROC_LOC ]; then
216
217 # Check for minimum libxml2 and libxslt versions
218 xsltprocVer=$(xsltproc -V | head -n1 )
219 libxmlVer=$(echo $xsltprocVer | cut -d " " -f3)
220 libxsltVer=$(echo $xsltprocVer | cut -d " " -f5)
221
222 # Version numbers are packed strings not xx.yy.zz format.
223 check_version "2.06.20" "${libxmlVer:0:1}.${libxmlVer:1:2}.${libxmlVer:3:2}" "LIBXML2"
224 check_version "1.01.14" "${libxsltVer:0:1}.${libxsltVer:1:2}.${libxsltVer:3:2}" "LIBXSLT"
225
226 else
227 echo "${nl_}\"${RED}xsltproc${OFF}\" ${BOLD}must be installed on your system for jhalfs to run"
228 exit 1
229 fi
230
231 # Now that we do profiling, we need the docbook DTD, and the docbook XSL
232 # stylesheets.
233 # Minimal docbook-xml code for testing
234 XML_FILE="<?xml version='1.0' encoding='ISO-8859-1'?>
235<?xml-stylesheet type='text/xsl' href='http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl'?>
236<!DOCTYPE article PUBLIC '-//OASIS//DTD DocBook XML V4.5//EN'
237 'http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd'>
238<article>
239 <title>Test file</title>
240 <sect1>
241 <title>Some title</title>
242 <para>Some text</para>
243 </sect1>
244</article>"
245
246 if echo $XML_FILE | xmllint -nonet -noout -postvalid - 2>/dev/null ; then
247 check_version "4.5" "4.5" "DocBook XML DTD"
248 else
249 echo "Error: you need the Docbook XML DTD for running jhalfs"
250 exit 1
251 fi
252
253 if echo $XML_FILE | xsltproc -nonet -noout - 2>/dev/null ; then
254 check_version "current" "current" "DocBook XSL stylesheets"
255 else
256 echo "Error: you need the Docbook XSL stylesheets for running jhalfs"
257 exit 1
258 fi
259}
Note: See TracBrowser for help on using the repository browser.