source: common/libs/func_check_version.sh@ 0870a7c

ablfs-more legacy trunk
Last change on this file since 0870a7c 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
RevLine 
[877cc6a]1check_version() {
2: <<inline_doc
[045b2dc]3 Tests for a minimum version level. Compares to version numbers and forces an
[877cc6a]4 exit if minimum level not met.
5 NOTE: This test will fail on versions containing alpha chars. ie. jpeg 6b
[045b2dc]6
[877cc6a]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
[e57e029]23 declare -r spaceSTR=" "
24 declare -r spaceSTR1=" "
[877cc6a]25
[7072e1f]26 shopt -s extglob #needed for ${x##*(0)} below
27
[877cc6a]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() {
[6ed3dd7]36 echo -e "\n\t\t$TXT is missing or version -->${tst_version}<-- is too old.
[877cc6a]37 This script requires ${ref_version} or greater\n"
[cf829f0]38 # Ask the user instead of bomb, to make happy that packages which version
39 # ouput don't follow our expectations
[6ed3dd7]40 echo "If you are sure that you have installed a proper version of ${BOLD}$TXT${OFF}"
[cf829f0]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
[877cc6a]51 }
52
[72e9e68]53 echo -ne "${TXT}${spaceSTR:${#TXT}} ${L_arrow}${BOLD}${tst_version}${OFF}${R_arrow}"
[045b2dc]54
[b86876a]55 IFS=".-(pab" # Split up w.x.y.z as well as w.x.y-rc (catch release candidates)
[7072e1f]56 set -- $ref_version # set positional parameters to minimum ver values
[877cc6a]57 ref_major=$1; ref_minor=$2; ref_revision=$3
58 #
[7072e1f]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
[48acdd4]62 # leading zero's
[7072e1f]63 major=${1##*(0)}; minor=${2##*(0)}; revision=${3##*(0)}
[877cc6a]64 #
65 # Compare against minimum acceptable version..
[1cf621b]66 (( major > ref_major )) &&
[e57e029]67 echo " ${spaceSTR1:${#tst_version}}${GREEN}OK${OFF} (Min version: ${ref_version})" &&
[1cf621b]68 return
[877cc6a]69 (( major < ref_major )) && write_error_and_die
70 # major=ref_major
71 (( minor < ref_minor )) && write_error_and_die
[1cf621b]72 (( minor > ref_minor )) &&
[e57e029]73 echo " ${spaceSTR1:${#tst_version}}${GREEN}OK${OFF} (Min version: ${ref_version})" &&
[1cf621b]74 return
[877cc6a]75 # minor=ref_minor
[1cf621b]76 (( revision >= ref_revision )) &&
[e57e029]77 echo " ${spaceSTR1:${#tst_version}}${GREEN}OK${OFF} (Min version: ${ref_version})" &&
[1cf621b]78 return
[877cc6a]79
80 # oops.. write error msg and die
81 write_error_and_die
82}
[045b2dc]83
84#----------------------------#
85check_prerequisites() { #
86#----------------------------#
87
[061d54f]88 HOSTREQS=$(find $BOOK -name hostreqs.xml)
[92b7cb8]89
[061d54f]90 eval $(xsltproc $COMMON_DIR/hostreqs.xsl $HOSTREQS)
[56e487e]91 # Avoid translation of version strings
92 local LC_ALL=C
93 export LC_ALL
94
[045b2dc]95 # LFS/HLFS/CLFS prerequisites
[94744cd]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
[0f92d7f]102 if [ ! -z $MIN_GCC_VER ]; then
[49ba78d]103 check_version "$MIN_GCC_VER" "`gcc -dumpfullversion -dumpversion`" "GCC"
104 check_version "$MIN_GCC_VER" "`g++ -dumpfullversion -dumpversion`" "G++"
[0f92d7f]105 elif [ ! -z $MIN_Gcc_VER ]; then
[49ba78d]106 check_version "$MIN_Gcc_VER" "`gcc -dumpfullversion -dumpversion`" "GCC"
[0f92d7f]107 fi
[94744cd]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
[a4af9217]118 bzip2Ver="$(bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f8)"
[94744cd]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
[7a82194]163 if [ -n "$MIN_Python_VER" ]; then
[399058f]164 check_version "$MIN_Python_VER" "3.$(python3 -c"import sys; print(sys.version_info.minor,'.',sys.version_info.micro,sep='')")" "PYTHON"
[7a82194]165 fi
[6ed3dd7]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
[045b2dc]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)"
[6ed3dd7]183 check_version "1.7.0" "${sudoVer}" "SUDO"
[045b2dc]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
[6ed3dd7]189 # Check for wget presence (using a dummy version)
[4f700a9]190 WGET_LOC="$(whereis -b wget | cut -d" " -f2)"
191 if [ -x $WGET_LOC ]; then
192 wgetVer="$(wget --version | head -n1 | cut -d" " -f3)"
[2af991d]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
[4f700a9]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
[6ed3dd7]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.
[f445e26]206
207 XMLLINT_LOC="$(whereis -b xmllint | cut -d" " -f2)"
208 XSLTPROC_LOC="$(whereis -b xsltproc | cut -d" " -f2)"
[2e1c1c3]209
[f445e26]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
[6ed3dd7]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)
[045b2dc]221
[6ed3dd7]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"
[2e1c1c3]225
[f445e26]226 else
227 echo "${nl_}\"${RED}xsltproc${OFF}\" ${BOLD}must be installed on your system for jhalfs to run"
228 exit 1
229 fi
[6ed3dd7]230
[837362b]231 # Now that we do profiling, we need the docbook DTD, and the docbook XSL
232 # stylesheets.
[6ed3dd7]233 # Minimal docbook-xml code for testing
234 XML_FILE="<?xml version='1.0' encoding='ISO-8859-1'?>
[837362b]235<?xml-stylesheet type='text/xsl' href='http://docbook.sourceforge.net/release/xsl/current/xhtml/docbook.xsl'?>
[16938b0]236<!DOCTYPE article PUBLIC '-//OASIS//DTD DocBook XML V4.5//EN'
237 'http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd'>
[045b2dc]238<article>
239 <title>Test file</title>
240 <sect1>
241 <title>Some title</title>
242 <para>Some text</para>
243 </sect1>
244</article>"
245
[837362b]246 if echo $XML_FILE | xmllint -nonet -noout -postvalid - 2>/dev/null ; then
[6ed3dd7]247 check_version "4.5" "4.5" "DocBook XML DTD"
248 else
[837362b]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
[6ed3dd7]258 fi
[d4bbfe2]259}
Note: See TracBrowser for help on using the repository browser.