зеркало из https://github.com/mozilla/kaldi.git
172 строки
5.6 KiB
Bash
Executable File
172 строки
5.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#Copyright 2013 Ufal MFF UK; Ondrej Platek
|
|
#
|
|
#Licensed under the Apache License, Version 2.0 (the "License");
|
|
#you may not use this file except in compliance with the License.
|
|
#You may obtain a copy of the License at
|
|
#
|
|
#http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
#THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
#KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
|
|
#WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
|
|
#MERCHANTABLITY OR NON-INFRINGEMENT.
|
|
#See the Apache 2 License for the specific language governing permissions and
|
|
#limitations under the License.
|
|
#
|
|
# This script is attempting to install cffi a Python/C interface
|
|
# Cffi is used to call Kaldi from Python
|
|
# See the documentation at http://cffi.readthedocs.org/en/latest/
|
|
# This script is trying to install cffi 0.6(now the latest version
|
|
# Tell us if you need higher version(if it exists).
|
|
#
|
|
# Also dependencies are installed. Namely:
|
|
# * pycparser >= 2.06: http://code.google.com/p/pycparser/
|
|
# * py.test
|
|
#
|
|
# NOT INSTALLED DEPENDENCIES (We are letting you to install it!):
|
|
# * Cpython 2.6, 2.7 or PyPy(not tested for Kaldi setup)
|
|
# * python-dev (Python headers) and libffi-dev (ffi C library)
|
|
# * a C compiler is required to use CFFI during development, but not to run correctly-installed programs that use CFF
|
|
|
|
echo "**** Installing Cffi and dependencies"
|
|
|
|
echo "Checking for Python-Dev"
|
|
# copied from http://stackoverflow.com/questions/4848566/check-for-existence-of-python-dev-files-from-bash-script
|
|
if [ ! -e $(python -c 'from distutils.sysconfig import get_makefile_filename as m; print m()') ]; then
|
|
echo "On Debian/Ubuntu like system install by 'sudo apt-get python-dev' package."
|
|
echo "On Fedora by 'yum install python-devel'"
|
|
echo "On Mac OS X by 'brew install python'"
|
|
echo "Or obtain Python headers other way!"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Checking for libffi-dev"
|
|
exe_ffi=test_ffi
|
|
src_ffi=$exe_ffi.c
|
|
cat > $src_ffi <<CCODE
|
|
#include <stdio.h>
|
|
#include <ffi.h>
|
|
int main() {
|
|
ffi_cif cif; ffi_type *args[1]; void *values[1]; char *s; int rc;
|
|
/* Initialize the argument info vectors */
|
|
args[0] = &ffi_type_pointer;
|
|
values[0] = &s;
|
|
/* Initialize the cif */
|
|
if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_uint, args) == FFI_OK) {
|
|
s = "Hello World!- YOU HAVE ffi INSTALLED";
|
|
ffi_call(&cif, puts, &rc, values);
|
|
/* rc now holds the result of the call to puts */
|
|
/* values holds a pointer to the function's arg, so to
|
|
call puts() again all we need to do is change the
|
|
value of s */
|
|
s = "FFI works!";
|
|
ffi_call(&cif, puts, &rc, values);
|
|
}
|
|
return 0;
|
|
}
|
|
CCODE
|
|
rm -f $exe_ffi # clean previous attempts
|
|
gcc -o $exe_ffi $src_ffi -lffi # build
|
|
chmod u+x $exe_ffi # make it executable (gcc usually does it too)
|
|
|
|
# checking the exit status = ffi installed?
|
|
./$exe_ffi
|
|
if [ $? -ne 0 ] ; then
|
|
echo "You have not ffi installed!"
|
|
echo "On Debian/Ubuntu: sudo apt-get install libffi-dev"
|
|
echo "Fedora: sudo yum libffi-devel"
|
|
echo "Mac OS: brew install libffi"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
# names of the extracted directories
|
|
cffiname=cffi-0.6
|
|
pycparsername=pycparser-release_v2.09.1
|
|
pytestname=pytest-2.3.5
|
|
|
|
# helper function
|
|
function downloader {
|
|
file=$1; url=$2;
|
|
if [ ! -e "$file" ]; then
|
|
echo "Could not find $file"
|
|
echo "Trying to download it via wget!"
|
|
|
|
wget --version >/dev/null 2>&1 || \
|
|
{ echo "This script requires you to first install wget"
|
|
echo "You can also just download $file from $url"
|
|
exit 1; }
|
|
|
|
wget --no-check-certificate -T 10 -t 3 $url
|
|
|
|
if [ ! -e $file ]; then
|
|
echo "Download of $file - failed!"
|
|
echo "Aborting script. Please download and install $file manually!"
|
|
exit 1;
|
|
fi
|
|
fi
|
|
}
|
|
|
|
echo Downloading and extracting cffi
|
|
cffitar=$cffiname.tar.gz
|
|
cffiurl=http://pypi.python.org/packages/source/c/cffi/cffi-0.6.tar.gz
|
|
downloader $cffitar $cffiurl
|
|
tar -xovzf $cffitar || exit 1
|
|
|
|
echo Downloading and extracting pycparser
|
|
pycparsertar=release_v2.09.1.tar.gz
|
|
pycparserurl=https://github.com/eliben/pycparser/archive/release_v2.09.1.tar.gz
|
|
downloader $pycparsertar $pycparserurl
|
|
tar -xovzf $pycparsertar || exit 1
|
|
|
|
echo Downloading and extracting pytest
|
|
pytesttar=pytest-2.3.5.tar.gz
|
|
pytesturl=https://pypi.python.org/packages/source/p/pytest/pytest-2.3.5.tar.gz
|
|
downloader $pytesttar $pytesturl
|
|
tar -xovzf $pytesttar || exit 1
|
|
|
|
# Installing
|
|
prefix="$PWD/python"
|
|
|
|
python_version=`python -c 'import sys; p1, p2, _, _ , _= sys.version_info; print "python%d.%d" % (p1, p2)'`
|
|
new_ppath="$prefix/lib/$python_version/site-packages"
|
|
mkdir -p "$new_ppath"
|
|
export PYTHONPATH="$PYTHONPATH:$new_ppath"
|
|
echo; echo "Adding the $new_ppath to PYTHONPATH"
|
|
echo "DO THE SAME IN YOUR PERMANENT SETTINGS TO USE THE CFFI REGULARLY!"; echo
|
|
|
|
|
|
echo "*******Installing $pytestname"
|
|
pushd $pytestname
|
|
|
|
new_path="$prefix/bin"
|
|
export PATH="$PATH:$new_path"
|
|
echo "\nAdding the $new_path to PATH so I can launch the pytest"
|
|
echo "DO THE SAME IN YOUR PERMANENT SETTINGS TO USE THE pytest REGULARLY!\n"
|
|
|
|
python setup.py install --prefix="$prefix" || exit 1
|
|
popd
|
|
|
|
|
|
echo "*******Installing $pycparsername"
|
|
pushd $pycparsername
|
|
python setup.py install --prefix="$prefix" || exit 1
|
|
popd
|
|
|
|
|
|
echo "*******Installing $cffiname"
|
|
pushd $cffiname
|
|
# FIXME check the depencies
|
|
python setup.py install --prefix="$prefix" || exit 1
|
|
popd
|
|
|
|
|
|
echo "****** Last check "
|
|
if [ ! -e $(python -c 'import cffi') ]; then
|
|
echo "Installation failed. Please download and install $file manually!"
|
|
fi
|
|
|
|
echo; echo SUCCESS ; echo
|
|
echo "ADD the"; echo "$new_ppath"; echo "to PYTHONPATH for using cffi regularly!"; echo
|