1
1
#! /usr/bin/env bash
2
2
#
3
- # Copyright (c) nexB Inc. http://www.nexb.com/ - All rights reserved.
3
+ # Copyright (c) nexB Inc. and others. All rights reserved.
4
+ # SPDX-License-Identifier: Apache-2.0
5
+ # See http://www.apache.org/licenses/LICENSE-2.0 for the license text.
6
+ # See https://github.com/nexB/ for support or download.
7
+ # See https://aboutcode.org for more information about nexB OSS projects.
4
8
#
5
9
6
10
set -e
7
11
# set -x
8
12
9
- # source this script for a basic setup and configuration for local development
13
+ # ###############################
14
+ # A configuration script to set things up:
15
+ # create a virtualenv and install or update thirdparty packages.
16
+ # Source this script for initial configuration
17
+ # Use configure --help for details
18
+ #
19
+ # This script will search for a virtualenv.pyz app in etc/thirdparty/virtualenv.pyz
20
+ # Otherwise it will download the latest from the VIRTUALENV_PYZ_URL default
21
+ # ###############################
22
+ CLI_ARGS=$1
10
23
11
- CONFIGURE_ROOT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd ) "
24
+ # ###############################
25
+ # Defaults. Change these variables to customize this script
26
+ # ###############################
12
27
28
+ # Requirement arguments passed to pip and used by default or with --dev.
29
+ REQUIREMENTS=" --editable ."
30
+ DEV_REQUIREMENTS=" --editable .[testing]"
13
31
14
- if [[ " $1 " == " --clean" ]]; then
15
- rm -rf " $CONFIGURE_ROOT_DIR /tmp"
16
- exit
32
+ # where we create a virtualenv
33
+ VIRTUALENV_DIR=tmp
34
+
35
+ # Cleanable files and directories with the --clean option
36
+ CLEANABLE="
37
+ build
38
+ tmp"
39
+
40
+ # extra arguments passed to pip
41
+ PIP_EXTRA_ARGS=" "
42
+
43
+ # the URL to download virtualenv.pyz if needed
44
+ VIRTUALENV_PYZ_URL=https://bootstrap.pypa.io/virtualenv.pyz
45
+ # ###############################
46
+
47
+
48
+ # ###############################
49
+ # Current directory where this script lives
50
+ CFG_ROOT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd ) "
51
+ CFG_BIN_DIR=$CFG_ROOT_DIR /$VIRTUALENV_DIR /bin
52
+
53
+
54
+ # ###############################
55
+ # Set the quiet flag to empty if not defined
56
+ if [[ " $CFG_QUIET " == " " ]]; then
57
+ CFG_QUIET=" "
17
58
fi
18
59
19
60
20
- if [[ " $PYTHON_EXE " == " " ]]; then
21
- PYTHON_EXE=python3
61
+ # ###############################
62
+ # find a proper Python to run
63
+ # Use environment variables or a file if available.
64
+ # Otherwise the latest Python by default.
65
+ if [[ " $PYTHON_EXECUTABLE " == " " ]]; then
66
+ # check for a file named PYTHON_EXECUTABLE
67
+ if [ -f " $CFG_ROOT_DIR /PYTHON_EXECUTABLE" ]; then
68
+ PYTHON_EXECUTABLE=$( cat " $CFG_ROOT_DIR /PYTHON_EXECUTABLE" )
69
+ else
70
+ PYTHON_EXECUTABLE=python3
71
+ fi
22
72
fi
23
73
24
74
25
- function setup {
26
- # create a virtualenv on Python
27
- mkdir -p $CONFIGURE_ROOT_DIR /tmp
28
- wget -O $CONFIGURE_ROOT_DIR /tmp/virtualenv.pyz https://bootstrap.pypa.io/virtualenv.pyz
29
- $PYTHON_EXE $CONFIGURE_ROOT_DIR /tmp/virtualenv.pyz $CONFIGURE_ROOT_DIR /tmp
30
- source $CONFIGURE_ROOT_DIR /tmp/bin/activate
31
- $CONFIGURE_ROOT_DIR /tmp/bin/pip install --upgrade pip virtualenv setuptools wheel
75
+ # ###############################
76
+ cli_help () {
77
+ echo An initial configuration script
78
+ echo " usage: ./configure [options]"
79
+ echo
80
+ echo The default is to configure for regular use. Use --dev for development.
81
+ echo
82
+ echo The options are:
83
+ echo " --clean: clean built and installed files and exit."
84
+ echo " --dev: configure the environment for development."
85
+ echo " --help: display this help message and exit."
86
+ echo
87
+ echo By default, the python interpreter version found in the path is used.
88
+ echo Alternatively, the PYTHON_EXECUTABLE environment variable can be set to
89
+ echo configure another Python executable interpreter to use. If this is not
90
+ echo set, a file named PYTHON_EXECUTABLE containing a single line with the
91
+ echo path of the Python executable to use will be checked last.
92
+ set +e
93
+ exit
32
94
}
33
95
34
96
35
- setup
97
+ clean () {
98
+ # Remove cleanable file and directories and files from the root dir.
99
+ echo " * Cleaning ..."
100
+ for cln in $CLEANABLE ;
101
+ do rm -rf " ${CFG_ROOT_DIR:? } /${cln:? } " ;
102
+ done
103
+ set +e
104
+ exit
105
+ }
36
106
37
- $CONFIGURE_ROOT_DIR /tmp/bin/pip install -e .[testing]
38
- $CONFIGURE_ROOT_DIR /tmp/bin/pip install fetchcode
39
107
40
- if [ -f " $CONFIGURE_ROOT_DIR /tmp/bin/activate" ]; then
41
- source " $CONFIGURE_ROOT_DIR /tmp/bin/activate"
42
- fi
108
+ create_virtualenv () {
109
+ # create a virtualenv for Python
110
+ # Note: we do not use the bundled Python 3 "venv" because its behavior and
111
+ # presence is not consistent across Linux distro and sometimes pip is not
112
+ # included either by default. The virtualenv.pyz app cures all these issues.
113
+
114
+ VENV_DIR=" $1 "
115
+ if [ ! -f " $CFG_BIN_DIR /python" ]; then
116
+
117
+ mkdir -p " $CFG_ROOT_DIR /$VENV_DIR "
118
+
119
+ if [ -f " $CFG_ROOT_DIR /etc/thirdparty/virtualenv.pyz" ]; then
120
+ VIRTUALENV_PYZ=" $CFG_ROOT_DIR /etc/thirdparty/virtualenv.pyz"
121
+ else
122
+ VIRTUALENV_PYZ=" $CFG_ROOT_DIR /$VENV_DIR /virtualenv.pyz"
123
+ wget -O " $VIRTUALENV_PYZ " " $VIRTUALENV_PYZ_URL "
124
+ fi
125
+
126
+ $PYTHON_EXECUTABLE " $VIRTUALENV_PYZ " \
127
+ --wheel embed --pip embed --setuptools embed \
128
+ --seeder pip \
129
+ --never-download \
130
+ --no-periodic-update \
131
+ --no-vcs-ignore \
132
+ $CFG_QUIET \
133
+ " $CFG_ROOT_DIR /$VENV_DIR "
134
+ fi
135
+ }
136
+
137
+
138
+ install_packages () {
139
+ # install requirements in virtualenv
140
+ # note: --no-build-isolation means that pip/wheel/setuptools will not
141
+ # be reinstalled a second time and reused from the virtualenv and this
142
+ # speeds up the installation.
143
+ # We always have the PEP517 build dependencies installed already.
144
+
145
+ " $CFG_BIN_DIR /pip" install \
146
+ --upgrade \
147
+ --no-build-isolation \
148
+ $CFG_QUIET \
149
+ $PIP_EXTRA_ARGS \
150
+ $1
151
+ }
152
+
153
+
154
+ # ###############################
155
+ # Main command line entry point
156
+ CFG_DEV_MODE=0
157
+ CFG_REQUIREMENTS=$REQUIREMENTS
158
+
159
+ case " $CLI_ARGS " in
160
+ --help) cli_help;;
161
+ --clean) clean;;
162
+ --dev) CFG_REQUIREMENTS=" $DEV_REQUIREMENTS " && CFG_DEV_MODE=1;;
163
+ esac
164
+
165
+ create_virtualenv " $VIRTUALENV_DIR "
166
+ install_packages " $CFG_REQUIREMENTS "
167
+ . " $CFG_BIN_DIR /activate"
43
168
44
- set +e
169
+ set +e
0 commit comments