... | ... |
@@ -1389,6 +1389,35 @@ function zypper_install { |
1389 | 1389 |
zypper --non-interactive install --auto-agree-with-licenses --no-recommends "$@" |
1390 | 1390 |
} |
1391 | 1391 |
|
1392 |
+# Run bindep and install packages it outputs |
|
1393 |
+# |
|
1394 |
+# Usage: |
|
1395 |
+# install_bindep <path-to-bindep.txt> [profile,profile] |
|
1396 |
+# |
|
1397 |
+# Note unlike the bindep command itself, profile(s) specified should |
|
1398 |
+# be a single, comma-separated string, no spaces. |
|
1399 |
+function install_bindep { |
|
1400 |
+ local file=$1 |
|
1401 |
+ local profiles=${2:-""} |
|
1402 |
+ local pkgs |
|
1403 |
+ |
|
1404 |
+ if [[ ! -f $file ]]; then |
|
1405 |
+ die $LINENO "Can not find bindep file: $file" |
|
1406 |
+ fi |
|
1407 |
+ |
|
1408 |
+ # converting here makes it much easier to work with passing |
|
1409 |
+ # arguments |
|
1410 |
+ profiles=${profiles/,/ /} |
|
1411 |
+ |
|
1412 |
+ # Note bindep returns 1 when packages need to be installed, so we |
|
1413 |
+ # have to ignore it's return for "-e" |
|
1414 |
+ pkgs=$($DEST/bindep-venv/bin/bindep -b --file $file $profiles || true) |
|
1415 |
+ |
|
1416 |
+ if [[ -n "${pkgs}" ]]; then |
|
1417 |
+ install_package ${pkgs} |
|
1418 |
+ fi |
|
1419 |
+} |
|
1420 |
+ |
|
1392 | 1421 |
function write_user_unit_file { |
1393 | 1422 |
local service=$1 |
1394 | 1423 |
local command="$2" |
... | ... |
@@ -428,7 +428,14 @@ function setup_lib { |
428 | 428 |
# another project. |
429 | 429 |
# |
430 | 430 |
# use this for non namespaced libraries |
431 |
+# |
|
432 |
+# setup_dev_lib [-bindep] <name> |
|
431 | 433 |
function setup_dev_lib { |
434 |
+ local bindep |
|
435 |
+ if [[ $1 == -bindep* ]]; then |
|
436 |
+ bindep="${1}" |
|
437 |
+ shift |
|
438 |
+ fi |
|
432 | 439 |
local name=$1 |
433 | 440 |
local dir=${GITDIR[$name]} |
434 | 441 |
if python3_enabled; then |
... | ... |
@@ -438,10 +445,10 @@ function setup_dev_lib { |
438 | 438 |
# of Python. |
439 | 439 |
echo "Installing $name again without Python 3 enabled" |
440 | 440 |
USE_PYTHON3=False |
441 |
- setup_develop $dir |
|
441 |
+ setup_develop $bindep $dir |
|
442 | 442 |
USE_PYTHON3=True |
443 | 443 |
fi |
444 |
- setup_develop $dir |
|
444 |
+ setup_develop $bindep $dir |
|
445 | 445 |
} |
446 | 446 |
|
447 | 447 |
# this should be used if you want to install globally, all libraries should |
... | ... |
@@ -452,11 +459,17 @@ function setup_dev_lib { |
452 | 452 |
# extras: comma-separated list of optional dependencies to install |
453 | 453 |
# (e.g., ldap,memcache). |
454 | 454 |
# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
455 |
+# bindep: Set "-bindep" as first argument to install bindep.txt packages |
|
455 | 456 |
# The command is like "pip install <project_dir>[<extras>]" |
456 | 457 |
function setup_install { |
458 |
+ local bindep |
|
459 |
+ if [[ $1 == -bindep* ]]; then |
|
460 |
+ bindep="${1}" |
|
461 |
+ shift |
|
462 |
+ fi |
|
457 | 463 |
local project_dir=$1 |
458 | 464 |
local extras=$2 |
459 |
- _setup_package_with_constraints_edit $project_dir "" $extras |
|
465 |
+ _setup_package_with_constraints_edit $bindep $project_dir "" $extras |
|
460 | 466 |
} |
461 | 467 |
|
462 | 468 |
# this should be used for projects which run services, like all services |
... | ... |
@@ -468,9 +481,14 @@ function setup_install { |
468 | 468 |
# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
469 | 469 |
# The command is like "pip install -e <project_dir>[<extras>]" |
470 | 470 |
function setup_develop { |
471 |
+ local bindep |
|
472 |
+ if [[ $1 == -bindep* ]]; then |
|
473 |
+ bindep="${1}" |
|
474 |
+ shift |
|
475 |
+ fi |
|
471 | 476 |
local project_dir=$1 |
472 | 477 |
local extras=$2 |
473 |
- _setup_package_with_constraints_edit $project_dir -e $extras |
|
478 |
+ _setup_package_with_constraints_edit $bindep $project_dir -e $extras |
|
474 | 479 |
} |
475 | 480 |
|
476 | 481 |
# ``pip install -e`` the package, which processes the dependencies |
... | ... |
@@ -489,6 +507,11 @@ function setup_develop { |
489 | 489 |
# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
490 | 490 |
# The command is like "pip install <flags> <project_dir>[<extras>]" |
491 | 491 |
function _setup_package_with_constraints_edit { |
492 |
+ local bindep |
|
493 |
+ if [[ $1 == -bindep* ]]; then |
|
494 |
+ bindep="${1}" |
|
495 |
+ shift |
|
496 |
+ fi |
|
492 | 497 |
local project_dir=$1 |
493 | 498 |
local flags=$2 |
494 | 499 |
local extras=$3 |
... | ... |
@@ -509,7 +532,7 @@ function _setup_package_with_constraints_edit { |
509 | 509 |
"$flags file://$project_dir#egg=$name" |
510 | 510 |
fi |
511 | 511 |
|
512 |
- setup_package $project_dir "$flags" $extras |
|
512 |
+ setup_package $bindep $project_dir "$flags" $extras |
|
513 | 513 |
|
514 | 514 |
# If this project is in LIBS_FROM_GIT, verify it was actually installed |
515 | 515 |
# correctly. This helps catch errors caused by constraints mismatches. |
... | ... |
@@ -521,17 +544,30 @@ function _setup_package_with_constraints_edit { |
521 | 521 |
} |
522 | 522 |
|
523 | 523 |
# ``pip install -e`` the package, which processes the dependencies |
524 |
-# using pip before running `setup.py develop` |
|
524 |
+# using pip before running `setup.py develop`. The command is like |
|
525 |
+# "pip install <flags> <project_dir>[<extras>]" |
|
525 | 526 |
# |
526 | 527 |
# Uses globals ``STACK_USER`` |
527 |
-# setup_package project_dir [flags] [extras] |
|
528 |
-# project_dir: directory of project repo (e.g., /opt/stack/keystone) |
|
529 |
-# flags: pip CLI options/flags |
|
530 |
-# extras: comma-separated list of optional dependencies to install |
|
531 |
-# (e.g., ldap,memcache). |
|
532 |
-# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
|
533 |
-# The command is like "pip install <flags> <project_dir>[<extras>]" |
|
528 |
+# |
|
529 |
+# Usage: |
|
530 |
+# setup_package [-bindep[=profile,profile]] <project_dir> <flags> [extras] |
|
531 |
+# |
|
532 |
+# -bindep : Use bindep to install dependencies; select extra profiles |
|
533 |
+# as comma separated arguments after "=" |
|
534 |
+# project_dir : directory of project repo (e.g., /opt/stack/keystone) |
|
535 |
+# flags : pip CLI options/flags |
|
536 |
+# extras : comma-separated list of optional dependencies to install |
|
537 |
+# (e.g., ldap,memcache). |
|
538 |
+# See https://docs.openstack.org/pbr/latest/user/using.html#extra-requirements |
|
534 | 539 |
function setup_package { |
540 |
+ local bindep=0 |
|
541 |
+ local bindep_flag="" |
|
542 |
+ local bindep_profiles="" |
|
543 |
+ if [[ $1 == -bindep* ]]; then |
|
544 |
+ bindep=1 |
|
545 |
+ IFS="=" read bindep_flag bindep_profiles <<< ${1} |
|
546 |
+ shift |
|
547 |
+ fi |
|
535 | 548 |
local project_dir=$1 |
536 | 549 |
local flags=$2 |
537 | 550 |
local extras=$3 |
... | ... |
@@ -547,6 +583,11 @@ function setup_package { |
547 | 547 |
extras="[$extras]" |
548 | 548 |
fi |
549 | 549 |
|
550 |
+ # install any bindep packages |
|
551 |
+ if [[ $bindep == 1 ]]; then |
|
552 |
+ install_bindep $project_dir/bindep.txt $bindep_profiles |
|
553 |
+ fi |
|
554 |
+ |
|
550 | 555 |
pip_install $flags "$project_dir$extras" |
551 | 556 |
# ensure that further actions can do things like setup.py sdist |
552 | 557 |
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 |
... | ... |
@@ -143,6 +143,13 @@ export PYTHON3_VERSION=${PYTHON3_VERSION:-${_DEFAULT_PYTHON3_VERSION:-3.5}} |
143 | 143 |
_DEFAULT_PYTHON2_VERSION="$(_get_python_version python2)" |
144 | 144 |
export PYTHON2_VERSION=${PYTHON2_VERSION:-${_DEFAULT_PYTHON2_VERSION:-2.7}} |
145 | 145 |
|
146 |
+# Create a virtualenv with this |
|
147 |
+if [[ ${USE_PYTHON3} == True ]]; then |
|
148 |
+ export VIRTUALENV_CMD="python3 -m venv" |
|
149 |
+else |
|
150 |
+ export VIRTUALENV_CMD="virtualenv " |
|
151 |
+fi |
|
152 |
+ |
|
146 | 153 |
# allow local overrides of env variables, including repo config |
147 | 154 |
if [[ -f $RC_DIR/localrc ]]; then |
148 | 155 |
# Old-style user-supplied config |