aboutsummaryrefslogtreecommitdiffstats
path: root/src/tools/ivigenerator/deploy-virtualenv.sh
blob: 2059c304994887368d46ca1b12340825a08ce057 (plain)
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
#!/bin/bash

#############################################################################
##
## Copyright (C) 2019 Luxoft Sweden AB
# Copyright (C) 2018 Pelagicore AG
## Contact: https://www.qt.io/licensing/
##
## This file is part of the QtIvi module of the Qt Toolkit.
##
## $QT_BEGIN_LICENSE:GPL-EXCEPT-QTAS$
## Commercial License Usage
## Licensees holding valid commercial Qt Automotive Suite licenses may use
## this file in accordance with the commercial license agreement provided
## with the Software or, alternatively, in accordance with the terms
## contained in a written agreement between you and The Qt Company.  For
## licensing terms and conditions see https://www.qt.io/terms-conditions.
## For further information use the contact form at https://www.qt.io/contact-us.
##
## GNU General Public License Usage
## Alternatively, this file may be used under the terms of the GNU
## General Public License version 3 as published by the Free Software
## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
## included in the packaging of this file. Please review the following
## information to ensure the GNU General Public License requirements will
## be met: https://www.gnu.org/licenses/gpl-3.0.html.
##
## $QT_END_LICENSE$
##
#############################################################################

SCRIPT=$(dirname $0)
usage()
{
     echo "deploy-virtualenv.sh <virtualenv>"
     exit 1
}

[ "$#" -lt 1 ] && usage
VIRTUALENV="${@: -1}"
[ ! -d "$VIRTUALENV" ] && usage
[ ! -d "$VIRTUALENV/lib" ] && usage
VIRTUALENV_LIB=$VIRTUALENV/lib
for file in "$VIRTUALENV_LIB"/python* ; do
    if [[ -d $file ]] ; then
        LIB_FOLDER=$file
        PYTHON_VERSION=$(basename "$file")
        break
    fi
done
[ ! -d "$LIB_FOLDER" ] && usage
if [[ -e "$LIB_FOLDER/orig-prefix.txt" ]] ; then
    ORIG_PREFIX=$(<"$LIB_FOLDER"/orig-prefix.txt)
else
    if [[  -e "$VIRTUALENV/pyvenv.cfg" ]] ; then
        ORIG_PREFIX=$(awk -F " = " '/base-prefix/ {print $2}' $VIRTUALENV/pyvenv.cfg)
    else
        echo "Neither $LIB_FOLDER/orig-prefix.txt or $VIRTUALENV/pyvenv.cfg exists";
        exit 1
    fi
fi

if [ "$(uname)" == "Darwin" ]; then
    PLATFORM="darwin"
else
    PLATFORM="linux"
fi

if [ "$PLATFORM" == "linux" ]; then
    # If the python executable has a dependency towards a libpython
    # copy the file and add it as LD_LIBRARY_PATH to the activate script
    LIBPYTHON=`ldd $VIRTUALENV/bin/python | awk '{print $3}' | grep python`
    if [[ -e "$LIBPYTHON" ]] ; then
       echo "copying $LIBPYTHON"
       cp -Lf "$LIBPYTHON" "$VIRTUALENV/bin"
    fi
fi

# Find all the locations used for the system python files
# They are located in prefix, but we don't know the sub-folder (it is lib on most systems, but lib64 on some others)
ORIG_LIBS=`$VIRTUALENV/bin/python3 -c "import sys; print ('\n'.join(path for path in sys.path))" | grep $ORIG_PREFIX`

if [[ ! -e "$SCRIPT/deploy-virtualenv-files.txt" ]] ; then
    echo "$SCRIPT/deploy-virtualenv-files.txt doesn't exist";
    exit 1
fi

for ORIG_LIB in ${ORIG_LIBS} ; do
        echo "copying files from $ORIG_LIB to $LIB_FOLDER"
        FILES=$(<$SCRIPT/deploy-virtualenv-files.txt)
        for file in ${FILES} ; do
            expand_wildcard=($ORIG_LIB/$file)
            [ ! -e "$expand_wildcard" ] && continue;
            cp -RLfn "$ORIG_LIB"/$file "$LIB_FOLDER/"
        done
done

# random.py is needed in order to generate temp directories from python
# It is based on hashlib, which needs libcrypto and libssl to work.
# As there is no compatibility for openssl libs, we need to copy
# them to the bin folder similar to libpython
if [ "$PLATFORM" == "linux" ]; then
    #TODO This also needs to be fixed for mac

    HASHLIB=`find $LIB_FOLDER/lib-dynload -iname '_hashlib*'`
    if [[ -e "$HASHLIB" ]] ; then
        LIBCRYPTO=`ldd $HASHLIB | awk '{print $3}' | grep libcrypto`
        echo "copying $LIBCRYPTO"
        cp -Lf "$LIBCRYPTO" "$VIRTUALENV/bin"
        LIBSSL=`ldd $HASHLIB | awk '{print $3}' | grep libssl`
        echo "copying $LIBSSL"
        cp -Lf "$LIBSSL" "$VIRTUALENV/bin"
    fi
fi

# some files might have wrong permissions, e.g. readonly
chmod -R ug+rw $VIRTUALENV

if [ "$(readlink -- "$VIRTUALENV/lib64")" != "lib" ] ; then
    cp -a "$VIRTUALENV/lib64"/* "$VIRTUALENV/lib/"
    rm -rf "$VIRTUALENV/lib64"
    cd "$VIRTUALENV"
    ln -s lib lib64
    cd -
fi

echo "done"