This adds a -bindep option to the key development library install
functions. With this option the bindep.txt file will be referenced
and the relevant packages installed.
Change-Id: I856f1f59fca49b6020920d8f859b797f3b904300
| ... | ... |
@@ -1381,6 +1381,35 @@ function zypper_install {
|
| 1381 | 1381 |
zypper --non-interactive install --auto-agree-with-licenses --no-recommends "$@" |
| 1382 | 1382 |
} |
| 1383 | 1383 |
|
| 1384 |
+# Run bindep and install packages it outputs |
|
| 1385 |
+# |
|
| 1386 |
+# Usage: |
|
| 1387 |
+# install_bindep <path-to-bindep.txt> [profile,profile] |
|
| 1388 |
+# |
|
| 1389 |
+# Note unlike the bindep command itself, profile(s) specified should |
|
| 1390 |
+# be a single, comma-separated string, no spaces. |
|
| 1391 |
+function install_bindep {
|
|
| 1392 |
+ local file=$1 |
|
| 1393 |
+ local profiles=${2:-""}
|
|
| 1394 |
+ local pkgs |
|
| 1395 |
+ |
|
| 1396 |
+ if [[ ! -f $file ]]; then |
|
| 1397 |
+ die $LINENO "Can not find bindep file: $file" |
|
| 1398 |
+ fi |
|
| 1399 |
+ |
|
| 1400 |
+ # converting here makes it much easier to work with passing |
|
| 1401 |
+ # arguments |
|
| 1402 |
+ profiles=${profiles/,/ /}
|
|
| 1403 |
+ |
|
| 1404 |
+ # Note bindep returns 1 when packages need to be installed, so we |
|
| 1405 |
+ # have to ignore it's return for "-e" |
|
| 1406 |
+ pkgs=$($DEST/bindep-venv/bin/bindep -b --file $file $profiles || true) |
|
| 1407 |
+ |
|
| 1408 |
+ if [[ -n "${pkgs}" ]]; then
|
|
| 1409 |
+ install_package ${pkgs}
|
|
| 1410 |
+ fi |
|
| 1411 |
+} |
|
| 1412 |
+ |
|
| 1384 | 1413 |
function write_user_unit_file {
|
| 1385 | 1414 |
local service=$1 |
| 1386 | 1415 |
local command="$2" |
| ... | ... |
@@ -445,7 +445,14 @@ function setup_lib {
|
| 445 | 445 |
# another project. |
| 446 | 446 |
# |
| 447 | 447 |
# use this for non namespaced libraries |
| 448 |
+# |
|
| 449 |
+# setup_dev_lib [-bindep] <name> |
|
| 448 | 450 |
function setup_dev_lib {
|
| 451 |
+ local bindep |
|
| 452 |
+ if [[ $1 == -bindep* ]]; then |
|
| 453 |
+ bindep="${1}"
|
|
| 454 |
+ shift |
|
| 455 |
+ fi |
|
| 449 | 456 |
local name=$1 |
| 450 | 457 |
local dir=${GITDIR[$name]}
|
| 451 | 458 |
if python3_enabled; then |
| ... | ... |
@@ -455,10 +462,10 @@ function setup_dev_lib {
|
| 455 | 455 |
# of Python. |
| 456 | 456 |
echo "Installing $name again without Python 3 enabled" |
| 457 | 457 |
USE_PYTHON3=False |
| 458 |
- setup_develop $dir |
|
| 458 |
+ setup_develop $bindep $dir |
|
| 459 | 459 |
USE_PYTHON3=True |
| 460 | 460 |
fi |
| 461 |
- setup_develop $dir |
|
| 461 |
+ setup_develop $bindep $dir |
|
| 462 | 462 |
} |
| 463 | 463 |
|
| 464 | 464 |
# this should be used if you want to install globally, all libraries should |
| ... | ... |
@@ -469,11 +476,17 @@ function setup_dev_lib {
|
| 469 | 469 |
# extras: comma-separated list of optional dependencies to install |
| 470 | 470 |
# (e.g., ldap,memcache). |
| 471 | 471 |
# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
| 472 |
+# bindep: Set "-bindep" as first argument to install bindep.txt packages |
|
| 472 | 473 |
# The command is like "pip install <project_dir>[<extras>]" |
| 473 | 474 |
function setup_install {
|
| 475 |
+ local bindep |
|
| 476 |
+ if [[ $1 == -bindep* ]]; then |
|
| 477 |
+ bindep="${1}"
|
|
| 478 |
+ shift |
|
| 479 |
+ fi |
|
| 474 | 480 |
local project_dir=$1 |
| 475 | 481 |
local extras=$2 |
| 476 |
- _setup_package_with_constraints_edit $project_dir "" $extras |
|
| 482 |
+ _setup_package_with_constraints_edit $bindep $project_dir "" $extras |
|
| 477 | 483 |
} |
| 478 | 484 |
|
| 479 | 485 |
# this should be used for projects which run services, like all services |
| ... | ... |
@@ -485,9 +498,14 @@ function setup_install {
|
| 485 | 485 |
# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
| 486 | 486 |
# The command is like "pip install -e <project_dir>[<extras>]" |
| 487 | 487 |
function setup_develop {
|
| 488 |
+ local bindep |
|
| 489 |
+ if [[ $1 == -bindep* ]]; then |
|
| 490 |
+ bindep="${1}"
|
|
| 491 |
+ shift |
|
| 492 |
+ fi |
|
| 488 | 493 |
local project_dir=$1 |
| 489 | 494 |
local extras=$2 |
| 490 |
- _setup_package_with_constraints_edit $project_dir -e $extras |
|
| 495 |
+ _setup_package_with_constraints_edit $bindep $project_dir -e $extras |
|
| 491 | 496 |
} |
| 492 | 497 |
|
| 493 | 498 |
# ``pip install -e`` the package, which processes the dependencies |
| ... | ... |
@@ -506,6 +524,11 @@ function setup_develop {
|
| 506 | 506 |
# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
| 507 | 507 |
# The command is like "pip install <flags> <project_dir>[<extras>]" |
| 508 | 508 |
function _setup_package_with_constraints_edit {
|
| 509 |
+ local bindep |
|
| 510 |
+ if [[ $1 == -bindep* ]]; then |
|
| 511 |
+ bindep="${1}"
|
|
| 512 |
+ shift |
|
| 513 |
+ fi |
|
| 509 | 514 |
local project_dir=$1 |
| 510 | 515 |
local flags=$2 |
| 511 | 516 |
local extras=$3 |
| ... | ... |
@@ -526,7 +549,7 @@ function _setup_package_with_constraints_edit {
|
| 526 | 526 |
"$flags file://$project_dir#egg=$name" |
| 527 | 527 |
fi |
| 528 | 528 |
|
| 529 |
- setup_package $project_dir "$flags" $extras |
|
| 529 |
+ setup_package $bindep $project_dir "$flags" $extras |
|
| 530 | 530 |
|
| 531 | 531 |
# If this project is in LIBS_FROM_GIT, verify it was actually installed |
| 532 | 532 |
# correctly. This helps catch errors caused by constraints mismatches. |
| ... | ... |
@@ -538,17 +561,30 @@ function _setup_package_with_constraints_edit {
|
| 538 | 538 |
} |
| 539 | 539 |
|
| 540 | 540 |
# ``pip install -e`` the package, which processes the dependencies |
| 541 |
-# using pip before running `setup.py develop` |
|
| 541 |
+# using pip before running `setup.py develop`. The command is like |
|
| 542 |
+# "pip install <flags> <project_dir>[<extras>]" |
|
| 542 | 543 |
# |
| 543 | 544 |
# Uses globals ``STACK_USER`` |
| 544 |
-# setup_package project_dir [flags] [extras] |
|
| 545 |
-# project_dir: directory of project repo (e.g., /opt/stack/keystone) |
|
| 546 |
-# flags: pip CLI options/flags |
|
| 547 |
-# extras: comma-separated list of optional dependencies to install |
|
| 548 |
-# (e.g., ldap,memcache). |
|
| 549 |
-# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
|
| 550 |
-# The command is like "pip install <flags> <project_dir>[<extras>]" |
|
| 545 |
+# |
|
| 546 |
+# Usage: |
|
| 547 |
+# setup_package [-bindep[=profile,profile]] <project_dir> <flags> [extras] |
|
| 548 |
+# |
|
| 549 |
+# -bindep : Use bindep to install dependencies; select extra profiles |
|
| 550 |
+# as comma separated arguments after "=" |
|
| 551 |
+# project_dir : directory of project repo (e.g., /opt/stack/keystone) |
|
| 552 |
+# flags : pip CLI options/flags |
|
| 553 |
+# extras : comma-separated list of optional dependencies to install |
|
| 554 |
+# (e.g., ldap,memcache). |
|
| 555 |
+# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
|
| 551 | 556 |
function setup_package {
|
| 557 |
+ local bindep=0 |
|
| 558 |
+ local bindep_flag="" |
|
| 559 |
+ local bindep_profiles="" |
|
| 560 |
+ if [[ $1 == -bindep* ]]; then |
|
| 561 |
+ bindep=1 |
|
| 562 |
+ IFS="=" read bindep_flag bindep_profiles <<< ${1}
|
|
| 563 |
+ shift |
|
| 564 |
+ fi |
|
| 552 | 565 |
local project_dir=$1 |
| 553 | 566 |
local flags=$2 |
| 554 | 567 |
local extras=$3 |
| ... | ... |
@@ -564,6 +600,11 @@ function setup_package {
|
| 564 | 564 |
extras="[$extras]" |
| 565 | 565 |
fi |
| 566 | 566 |
|
| 567 |
+ # install any bindep packages |
|
| 568 |
+ if [[ $bindep == 1 ]]; then |
|
| 569 |
+ install_bindep $project_dir/bindep.txt $bindep_profiles |
|
| 570 |
+ fi |
|
| 571 |
+ |
|
| 567 | 572 |
pip_install $flags "$project_dir$extras" |
| 568 | 573 |
# ensure that further actions can do things like setup.py sdist |
| 569 | 574 |
if [[ "$flags" == "-e" ]]; then |
| ... | ... |
@@ -801,6 +801,11 @@ fi |
| 801 | 801 |
# Install required infra support libraries |
| 802 | 802 |
install_infra |
| 803 | 803 |
|
| 804 |
+# Install bindep |
|
| 805 |
+$VIRTUALENV_CMD $DEST/bindep-venv |
|
| 806 |
+# TODO(ianw) : optionally install from zuul checkout? |
|
| 807 |
+$DEST/bindep-venv/bin/pip install bindep |
|
| 808 |
+ |
|
| 804 | 809 |
# Extras Pre-install |
| 805 | 810 |
# ------------------ |
| 806 | 811 |
# Phase: pre-install |
| ... | ... |
@@ -149,6 +149,13 @@ export PYTHON3_VERSION=${PYTHON3_VERSION:-${_DEFAULT_PYTHON3_VERSION:-3.5}}
|
| 149 | 149 |
_DEFAULT_PYTHON2_VERSION="$(_get_python_version python2)" |
| 150 | 150 |
export PYTHON2_VERSION=${PYTHON2_VERSION:-${_DEFAULT_PYTHON2_VERSION:-2.7}}
|
| 151 | 151 |
|
| 152 |
+# Create a virtualenv with this |
|
| 153 |
+if [[ ${USE_PYTHON3} == True ]]; then
|
|
| 154 |
+ export VIRTUALENV_CMD="python3 -m venv" |
|
| 155 |
+else |
|
| 156 |
+ export VIRTUALENV_CMD="virtualenv " |
|
| 157 |
+fi |
|
| 158 |
+ |
|
| 152 | 159 |
# allow local overrides of env variables, including repo config |
| 153 | 160 |
if [[ -f $RC_DIR/localrc ]]; then |
| 154 | 161 |
# Old-style user-supplied config |