Blame view
tools/extras/check_dependencies.sh
7.01 KB
8dcb6dfcb first commit |
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 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 |
#!/usr/bin/env bash CXX=${CXX:-g++} status=0 # at some point we could try to add packages for Cywgin or macports(?) to this # script. redhat_packages= debian_packages= opensuse_packages= function add_packages { redhat_packages="$redhat_packages $1" debian_packages="$debian_packages ${2:-$1}" opensuse_packages="$opensuse_packages ${3:-$1}" } function have { type -t "$1" >/dev/null; } compiler_ver_info=$($CXX --version 2>/dev/null) case $compiler_ver_info in "") echo "$0: Compiler '$CXX' is not installed." echo "$0: You need g++ >= 4.8.3, Apple Xcode >= 5.0 or clang >= 3.3." add_packages gcc-c++ g++ status=1 ;; "g++ "* ) gcc_ver=$($CXX -dumpversion) gcc_ver_num=$(echo $gcc_ver | sed 's/\./ /g' | xargs printf "%d%02d%02d") if [ $gcc_ver_num -lt 40803 ]; then echo "$0: Compiler '$CXX' (g++-$gcc_ver) is not supported." echo "$0: You need g++ >= 4.8.3, Apple clang >= 5.0 or LLVM clang >= 3.3." status=1 fi ;; "Apple LLVM "* ) # See https://gist.github.com/yamaya/2924292 clang_ver=$(echo $compiler_ver_info | grep version | sed "s/.*version \([0-9\.]*\).*/\1/") clang_ver_num=$(echo $compiler_ver_info | grep version | sed "s/.*clang-\([0-9]*\).*/\1/") if [ $clang_ver_num -lt 500 ]; then echo "$0: Compiler '$CXX' (Apple clang-$clang_ver) is not supported." echo "$0: You need g++ >= 4.8.3, Apple clang >= 5.0 or LLVM clang >= 3.3." status=1 fi ;; "clang "* ) clang_ver=$(echo $compiler_ver_info | grep version | sed "s/.*version \([0-9\.]*\).*/\1/") clang_ver_num=$(echo $clang_ver | sed 's/\./ /g' | xargs printf "%d%02d") if [ $clang_ver_num -lt 303 ]; then echo "$0: Compiler '$CXX' (LLVM clang-$clang_ver) is not supported." echo "$0: You need g++ >= 4.8.3, Apple clang >= 5.0 or LLVM clang >= 3.3." status=1 fi ;; *) echo "$0: WARNING: unknown compiler $CXX." ;; esac # Cannot check this without a compiler. if have "$CXX" && ! echo "#include <zlib.h>" | $CXX -E - >&/dev/null; then echo "$0: zlib is not installed." add_packages zlib-devel zlib1g-dev fi for f in make automake autoconf patch grep bzip2 gzip unzip wget git sox; do if ! have $f; then echo "$0: $f is not installed." add_packages $f fi done if ! have libtoolize && ! have glibtoolize; then echo "$0: neither libtoolize nor glibtoolize is installed" add_packages libtool fi if ! have svn; then echo "$0: subversion is not installed" add_packages subversion fi if ! have awk; then echo "$0: awk is not installed" add_packages gawk fi pythonok=true if ! have python2.7; then echo "$0: python2.7 is not installed" add_packages python2.7 pythonok=false fi if ! have python3; then echo "$0: python3 is not installed" add_packages python3 pythonok=false fi ( #Use a subshell so that sourcing env.sh does not have an influence on the rest of the script [ -f ./env.sh ] && . ./env.sh if $pythonok && ! have python2; then mkdir -p $PWD/python echo "$0: python2.7 is installed, but the python2 binary does not exist." \ "Creating a symlink and adding this to tools/env.sh" ln -s $(command -v python2.7) $PWD/python/python2 echo "export PATH=$PWD/python:\${PATH}" >> env.sh fi if [[ -f $PWD/python/.use_default_python && -f $PWD/python/python ]]; then rm $PWD/python/python fi if $pythonok && have python && [[ ! -f $PWD/python/.use_default_python ]]; then version=$(python 2>&1 --version | awk '{print $2}') if [[ $version != "2.7"* ]] ; then echo "$0: WARNING python 2.7 is not the default python. We fixed this by" \ "adding a correct symlink more prominently on the path." echo " ... If you really want to use python $version as default, add an" \ "empty file $PWD/python/.use_default_python and run this script again." mkdir -p $PWD/python ln -s $(command -v python2.7) $PWD/python/python echo "export PATH=$PWD/python:\${PATH}" >> env.sh fi fi ) mathlib_missing=false case $(uname -m) in x86_64) # Suggest MKL on an Intel64 system (configure does not like i?86 hosts). # We do not know if compiler exists at this point, so double-check the # well-known mkl.h file location. The compiler test would still find it if # installed in an alternative location (this is unlikely). if [ ! -f /opt/intel/mkl/include/mkl.h ] && ! echo '#include <mkl.h>' | $CXX -I /opt/intel/mkl/include -E - >&/dev/null; then if [[ $(uname) == Linux ]]; then echo "$0: Intel MKL is not installed. Run extras/install_mkl.sh to install it." else echo "$0: Intel MKL is not installed. Download the installer package for your ... system from: https://software.intel.com/mkl/choose-download." fi mathlib_missing=true fi ;; *) # Suggest OpenBLAS on other hardware. if [ ! -f $(pwd)/OpenBLAS/install/include/openblas_config.h ] && ! echo '#include <openblas_config.h>' | $CXX -I $(pwd)/OpenBLAS/install/include -E - >&/dev/null; then echo "$0: OpenBLAS not detected. Run extras/install_openblas.sh ... to compile it for your platform, or configure with --openblas-root= if you ... have it installed in a location we could not guess. Note that packaged ... library may be significantly slower and/or older than the one the above ... would build." mathlib_missing=true fi ;; esac $mathlib_missing && echo "\ ... You can also use other matrix algebra libraries. For information, see: ... http://kaldi-asr.org/doc/matrixwrap.html" # Report missing programs and libraries. if [ -n "$debian_packages" ]; then install_pkg_command=$( # Guess package manager from user's distribution type. Use a subshell # because we are potentially importing a lot of dirt here. eval $(grep 2>/dev/null ^ID /etc/os-release) 2>/dev/null for rune in ${ID-} ${ID_LIKE-}; do # The case '(pattern)' syntax is necessary in subshell for bash 3.x. case $rune in (rhel|centos|redhat) echo "yum install $redhat_packages"; break;; (fedora) echo "dnx install $redhat_packages"; break;; (suse) echo "zypper install $opensuse_packages"; break;; (debian) echo "apt-get install $debian_packages"; break;; esac done ) # Print the suggestion to install missing packages. if [ -n "$install_pkg_command" ]; then echo "$0: Some prerequisites are missing; install them using the command:" echo " sudo" $install_pkg_command else echo "$0: The following prerequisites are missing; install them first:" echo " " $debian_packages fi status=1 fi if [ $(pwd | wc -w) -gt 1 ]; then echo "*** $0: Warning: Kaldi scripts will fail if the directory name contains a space." echo "*** (it's OK if you just want to compile a few tools -> disable this check)." status=1 fi if pwd | grep -E 'JOB|LMWT' >/dev/null; then echo "*** $0: Kaldi scripts will fail if the directory name contains" echo "*** either of the strings 'JOB' or 'LMWT'." status=1 fi if ! $mathlib_missing && [ $status -eq 0 ]; then echo "$0: all OK." fi exit $status |