Skip to content

Commit a75737d

Browse files
authored
Merge pull request #25 from nexB/new-configure
New configure
2 parents 1c84e9e + d21aef3 commit a75737d

File tree

11 files changed

+337
-156
lines changed

11 files changed

+337
-156
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
# Ignore all Git auto CR/LF line endings conversions
22
* -text
3+
pyproject.toml export-subst

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ python:
1515
- "3.8"
1616

1717
# Scripts to run at install stage
18-
install: ./configure
18+
install: ./configure --dev
1919

2020
# Scripts to run at script stage
2121
script: tmp/bin/pytest

CHANGELOG.rst

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
Release notes
2-
-------------
3-
### Version 0.0.0
1+
Changelog
2+
=========
3+
4+
5+
v0.0.0
6+
------
47

58
*xxxx-xx-xx* -- Initial release.

README.rst

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,19 @@ Update an existing project
3232
git merge skeleton/main --allow-unrelated-histories
3333
3434
This is also the workflow to use when updating the skeleton files in any given repository.
35+
36+
37+
Customizing
38+
-----------
39+
40+
You typically want to perform these customizations:
41+
42+
- remove or update the src/README.rst and tests/README.rst files
43+
- check the configure and configure.bat defaults
44+
45+
46+
Release Notes
47+
-------------
48+
49+
- 2021-05-11: adopt new configure scripts from ScanCode TK that allows correct
50+
configuration of which Python version is used.

azure-pipelines.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,39 +7,39 @@
77

88
jobs:
99

10-
- template: etc/ci/azure-linux.yml
10+
- template: etc/ci/azure-posix.yml
1111
parameters:
1212
job_name: ubuntu16_cpython
1313
image_name: ubuntu-16.04
1414
python_versions: ['3.6', '3.7', '3.8', '3.9']
1515
test_suites:
1616
all: tmp/bin/pytest -vvs
1717

18-
- template: etc/ci/azure-linux.yml
18+
- template: etc/ci/azure-posix.yml
1919
parameters:
2020
job_name: ubuntu18_cpython
2121
image_name: ubuntu-18.04
2222
python_versions: ['3.6', '3.7', '3.8', '3.9']
2323
test_suites:
2424
all: tmp/bin/pytest -n 2 -vvs
2525

26-
- template: etc/ci/azure-linux.yml
26+
- template: etc/ci/azure-posix.yml
2727
parameters:
2828
job_name: ubuntu20_cpython
2929
image_name: ubuntu-20.04
3030
python_versions: ['3.6', '3.7', '3.8', '3.9']
3131
test_suites:
3232
all: tmp/bin/pytest -n 2 -vvs
3333

34-
- template: etc/ci/azure-mac.yml
34+
- template: etc/ci/azure-posix.yml
3535
parameters:
3636
job_name: macos1014_cpython
3737
image_name: macos-10.14
3838
python_versions: ['3.6', '3.7', '3.8', '3.9']
3939
test_suites:
4040
all: tmp/bin/pytest -n 2 -vvs
4141

42-
- template: etc/ci/azure-mac.yml
42+
- template: etc/ci/azure-posix.yml
4343
parameters:
4444
job_name: macos1015_cpython
4545
image_name: macos-10.15

configure

Lines changed: 145 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,169 @@
11
#!/usr/bin/env bash
22
#
3-
# Copyright (c) nexB Inc. and others.
3+
# Copyright (c) nexB Inc. and others. All rights reserved.
44
# 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.
58
#
69

710
set -e
811
#set -x
912

10-
# 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
1123

12-
CONFIGURE_ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
24+
################################
25+
# Defaults. Change these variables to customize this script
26+
################################
1327

28+
# Requirement arguments passed to pip and used by default or with --dev.
29+
REQUIREMENTS="--editable ."
30+
DEV_REQUIREMENTS="--editable .[testing]"
1431

15-
if [[ "$1" == "--clean" ]]; then
16-
rm -rf "$CONFIGURE_ROOT_DIR/tmp"
17-
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=" "
1858
fi
1959

2060

21-
if [[ "$PYTHON_EXE" == "" ]]; then
22-
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
2372
fi
2473

2574

26-
function setup {
27-
# create a virtualenv on Python
28-
mkdir -p $CONFIGURE_ROOT_DIR/tmp
29-
wget -O $CONFIGURE_ROOT_DIR/tmp/virtualenv.pyz https://bootstrap.pypa.io/virtualenv.pyz
30-
$PYTHON_EXE $CONFIGURE_ROOT_DIR/tmp/virtualenv.pyz --wheel embed --pip embed --setuptools embed --seeder pip $CONFIGURE_ROOT_DIR/tmp
31-
source $CONFIGURE_ROOT_DIR/tmp/bin/activate
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
3294
}
3395

3496

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+
}
36106

37-
$CONFIGURE_ROOT_DIR/tmp/bin/pip install -e .[testing]
38107

39-
if [ -f "$CONFIGURE_ROOT_DIR/tmp/bin/activate" ]; then
40-
source "$CONFIGURE_ROOT_DIR/tmp/bin/activate"
41-
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"
42168

43169
set +e

0 commit comments

Comments
 (0)