scripts: sphinx-pre-install: fix the need of virtenv packages
The pip packages are only needed when the distro-provided Sphinx version is not good enough. Don't recommend installing it if not needed. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Link: https://lore.kernel.org/r/04ce53b77b37f1e495c3abc39c2d3dc407895dc0.1621949137.git.mchehab+huawei@kernel.org Signed-off-by: Jonathan Corbet <corbet@lwn.net>
This commit is contained in:
parent
e50899122f
commit
a5f785f102
|
@ -22,16 +22,18 @@ my $need = 0;
|
||||||
my $optional = 0;
|
my $optional = 0;
|
||||||
my $need_symlink = 0;
|
my $need_symlink = 0;
|
||||||
my $need_sphinx = 0;
|
my $need_sphinx = 0;
|
||||||
my $need_venv = 0;
|
my $need_pip = 0;
|
||||||
my $need_virtualenv = 0;
|
my $need_virtualenv = 0;
|
||||||
|
my $rec_sphinx_upgrade = 0;
|
||||||
my $install = "";
|
my $install = "";
|
||||||
my $virtenv_dir = "";
|
my $virtenv_dir = "";
|
||||||
my $python_cmd = "";
|
my $python_cmd = "";
|
||||||
|
my $activate_cmd;
|
||||||
my $min_version;
|
my $min_version;
|
||||||
my $cur_version;
|
my $cur_version;
|
||||||
my $rec_version = "1.7.9"; # PDF won't build here
|
my $rec_version = "1.7.9"; # PDF won't build here
|
||||||
my $min_pdf_version = "2.4.4"; # Min version where pdf builds
|
my $min_pdf_version = "2.4.4"; # Min version where pdf builds
|
||||||
|
my $latest_avail_ver;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Command line arguments
|
# Command line arguments
|
||||||
|
@ -700,11 +702,12 @@ sub deactivate_help()
|
||||||
|
|
||||||
sub get_virtenv()
|
sub get_virtenv()
|
||||||
{
|
{
|
||||||
|
my $ver;
|
||||||
my $min_activate = "$ENV{'PWD'}/${virtenv_prefix}${min_version}/bin/activate";
|
my $min_activate = "$ENV{'PWD'}/${virtenv_prefix}${min_version}/bin/activate";
|
||||||
my @activates = glob "$ENV{'PWD'}/${virtenv_prefix}*/bin/activate";
|
my @activates = glob "$ENV{'PWD'}/${virtenv_prefix}*/bin/activate";
|
||||||
|
|
||||||
@activates = sort {$b cmp $a} @activates;
|
@activates = sort {$b cmp $a} @activates;
|
||||||
my ($activate, $ver);
|
|
||||||
foreach my $f (@activates) {
|
foreach my $f (@activates) {
|
||||||
next if ($f lt $min_activate);
|
next if ($f lt $min_activate);
|
||||||
|
|
||||||
|
@ -722,6 +725,42 @@ sub get_virtenv()
|
||||||
return ("", "");
|
return ("", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub recommend_sphinx_upgrade()
|
||||||
|
{
|
||||||
|
my $venv_ver;
|
||||||
|
|
||||||
|
# Avoid running sphinx-builds from venv if $cur_version is good
|
||||||
|
if ($cur_version && ($cur_version ge $rec_version)) {
|
||||||
|
$latest_avail_ver = $cur_version;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get the highest version from sphinx_*/bin/sphinx-build and the
|
||||||
|
# corresponding command to activate the venv/virtenv
|
||||||
|
$activate_cmd = get_virtenv();
|
||||||
|
|
||||||
|
# Store the highest version from Sphinx existing virtualenvs
|
||||||
|
if (($activate_cmd ne "") && ($venv_ver gt $cur_version)) {
|
||||||
|
$latest_avail_ver = $venv_ver;
|
||||||
|
} else {
|
||||||
|
$latest_avail_ver = $cur_version if ($cur_version);
|
||||||
|
}
|
||||||
|
|
||||||
|
# As we don't know package version of Sphinx, and there's no
|
||||||
|
# virtual environments, don't check if upgrades are needed
|
||||||
|
if (!$virtualenv) {
|
||||||
|
return if (!$latest_avail_ver);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Either there are already a virtual env or a new one should be created
|
||||||
|
$need_pip = 1;
|
||||||
|
|
||||||
|
# Return if the reason is due to an upgrade or not
|
||||||
|
if ($latest_avail_ver lt $rec_version) {
|
||||||
|
$rec_sphinx_upgrade = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# The logic here is complex, as it have to deal with different versions:
|
# The logic here is complex, as it have to deal with different versions:
|
||||||
# - minimal supported version;
|
# - minimal supported version;
|
||||||
|
@ -732,30 +771,21 @@ sub recommend_sphinx_version($)
|
||||||
{
|
{
|
||||||
my $virtualenv_cmd = shift;
|
my $virtualenv_cmd = shift;
|
||||||
|
|
||||||
# Avoid running sphinx-builds from venv if $cur_version is good
|
if ($latest_avail_ver lt $min_pdf_version) {
|
||||||
return if ($cur_version && ($cur_version ge $rec_version));
|
print "note: If you want pdf, you need at least Sphinx $min_pdf_version.\n";
|
||||||
|
|
||||||
my $latest_avail_ver;
|
|
||||||
my $rec_sphinx_upgrade = 0;
|
|
||||||
|
|
||||||
# Get the highest version from sphinx_*/bin/sphinx-build and the
|
|
||||||
# corresponding command to activate the venv/virtenv
|
|
||||||
my ($activate, $venv_ver) = get_virtenv();
|
|
||||||
|
|
||||||
if (($activate ne "") && ($venv_ver gt $cur_version)) {
|
|
||||||
$latest_avail_ver = $venv_ver;
|
|
||||||
} else {
|
|
||||||
$latest_avail_ver = $cur_version if ($cur_version);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Version is OK. Nothing to do.
|
||||||
|
return if ($cur_version && ($cur_version ge $rec_version));
|
||||||
|
|
||||||
if (!$need_sphinx) {
|
if (!$need_sphinx) {
|
||||||
# sphinx-build is present and its version is >= $min_version
|
# sphinx-build is present and its version is >= $min_version
|
||||||
|
|
||||||
#only recommend enabling a newer virtenv version if makes sense.
|
#only recommend enabling a newer virtenv version if makes sense.
|
||||||
if ($latest_avail_ver gt $cur_version) {
|
if ($latest_avail_ver gt $cur_version) {
|
||||||
printf "\nYou may also use the newer Sphinx version $venv_ver with:\n";
|
printf "\nYou may also use the newer Sphinx version $latest_avail_ver with:\n";
|
||||||
printf "\tdeactivate\n" if ($ENV{'PWD'} =~ /${virtenv_prefix}/);
|
printf "\tdeactivate\n" if ($ENV{'PWD'} =~ /${virtenv_prefix}/);
|
||||||
printf "\t. $activate\n";
|
printf "\t. $activate_cmd\n";
|
||||||
deactivate_help();
|
deactivate_help();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -773,9 +803,9 @@ sub recommend_sphinx_version($)
|
||||||
# installed one via virtenv with a newer version.
|
# installed one via virtenv with a newer version.
|
||||||
# So, print commands to enable it
|
# So, print commands to enable it
|
||||||
if ($latest_avail_ver gt $cur_version) {
|
if ($latest_avail_ver gt $cur_version) {
|
||||||
printf "\nYou may also use the Sphinx virtualenv version $venv_ver with:\n";
|
printf "\nYou may also use the Sphinx virtualenv version $latest_avail_ver with:\n";
|
||||||
printf "\tdeactivate\n" if ($ENV{'PWD'} =~ /${virtenv_prefix}/);
|
printf "\tdeactivate\n" if ($ENV{'PWD'} =~ /${virtenv_prefix}/);
|
||||||
printf "\t. $activate\n";
|
printf "\t. $activate_cmd\n";
|
||||||
deactivate_help();
|
deactivate_help();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -789,8 +819,8 @@ sub recommend_sphinx_version($)
|
||||||
if ($latest_avail_ver && $cur_version ge $min_version) {
|
if ($latest_avail_ver && $cur_version ge $min_version) {
|
||||||
# If there's a good enough version, ask the user to enable it
|
# If there's a good enough version, ask the user to enable it
|
||||||
if ($latest_avail_ver ge $rec_version) {
|
if ($latest_avail_ver ge $rec_version) {
|
||||||
printf "\nNeed to activate Sphinx (version $venv_ver) on virtualenv with:\n";
|
printf "\nNeed to activate Sphinx (version $latest_avail_ver) on virtualenv with:\n";
|
||||||
printf "\t. $activate\n";
|
printf "\t. $activate_cmd\n";
|
||||||
deactivate_help();
|
deactivate_help();
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -801,10 +831,6 @@ sub recommend_sphinx_version($)
|
||||||
|
|
||||||
if ($latest_avail_ver lt $rec_version) {
|
if ($latest_avail_ver lt $rec_version) {
|
||||||
print "Warning: It is recommended at least Sphinx version $rec_version.\n";
|
print "Warning: It is recommended at least Sphinx version $rec_version.\n";
|
||||||
$rec_sphinx_upgrade = 1;
|
|
||||||
}
|
|
||||||
if ($latest_avail_ver lt $min_pdf_version) {
|
|
||||||
print "note: If you want pdf, you need at least $min_pdf_version.\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -823,11 +849,8 @@ sub recommend_sphinx_version($)
|
||||||
|
|
||||||
$python_cmd = find_python_no_venv();
|
$python_cmd = find_python_no_venv();
|
||||||
|
|
||||||
if ($need_venv) {
|
printf "\t$virtualenv_cmd $virtenv_dir\n";
|
||||||
printf "\t$python_cmd -m venv $virtenv_dir\n";
|
|
||||||
} else {
|
|
||||||
printf "\t$virtualenv_cmd $virtenv_dir\n";
|
|
||||||
}
|
|
||||||
printf "\t. $virtenv_dir/bin/activate\n";
|
printf "\t. $virtenv_dir/bin/activate\n";
|
||||||
printf "\tpip install -r $requirement_file\n";
|
printf "\tpip install -r $requirement_file\n";
|
||||||
deactivate_help();
|
deactivate_help();
|
||||||
|
@ -854,15 +877,14 @@ sub check_needs()
|
||||||
if ($virtualenv) {
|
if ($virtualenv) {
|
||||||
my $tmp = qx($python_cmd --version 2>&1);
|
my $tmp = qx($python_cmd --version 2>&1);
|
||||||
if ($tmp =~ m/(\d+\.)(\d+\.)/) {
|
if ($tmp =~ m/(\d+\.)(\d+\.)/) {
|
||||||
if ($1 >= 3 && $2 >= 3) {
|
|
||||||
$need_venv = 1; # python 3.3 or upper
|
|
||||||
} else {
|
|
||||||
$need_virtualenv = 1;
|
|
||||||
}
|
|
||||||
if ($1 < 3) {
|
if ($1 < 3) {
|
||||||
# Fail if it finds python2 (or worse)
|
# Fail if it finds python2 (or worse)
|
||||||
die "Python 3 is required to build the kernel docs\n";
|
die "Python 3 is required to build the kernel docs\n";
|
||||||
}
|
}
|
||||||
|
if ($1 == 3 && $2 < 3) {
|
||||||
|
# Need Python 3.3 or upper for venv
|
||||||
|
$need_virtualenv = 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
die "Warning: couldn't identify $python_cmd version!";
|
die "Warning: couldn't identify $python_cmd version!";
|
||||||
}
|
}
|
||||||
|
@ -871,14 +893,22 @@ sub check_needs()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Set virtualenv command line, if python < 3.3
|
recommend_sphinx_upgrade();
|
||||||
|
|
||||||
my $virtualenv_cmd;
|
my $virtualenv_cmd;
|
||||||
if ($need_virtualenv) {
|
|
||||||
$virtualenv_cmd = findprog("virtualenv-3");
|
if ($need_pip) {
|
||||||
$virtualenv_cmd = findprog("virtualenv-3.5") if (!$virtualenv_cmd);
|
# Set virtualenv command line, if python < 3.3
|
||||||
if (!$virtualenv_cmd) {
|
if ($need_virtualenv) {
|
||||||
check_program("virtualenv", 0);
|
$virtualenv_cmd = findprog("virtualenv-3");
|
||||||
$virtualenv_cmd = "virtualenv";
|
$virtualenv_cmd = findprog("virtualenv-3.5") if (!$virtualenv_cmd);
|
||||||
|
if (!$virtualenv_cmd) {
|
||||||
|
check_program("virtualenv", 0);
|
||||||
|
$virtualenv_cmd = "virtualenv";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$virtualenv_cmd = "$python_cmd -m venv";
|
||||||
|
check_python_module("ensurepip", 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,10 +925,6 @@ sub check_needs()
|
||||||
check_program("rsvg-convert", 2) if ($pdf);
|
check_program("rsvg-convert", 2) if ($pdf);
|
||||||
check_program("latexmk", 2) if ($pdf);
|
check_program("latexmk", 2) if ($pdf);
|
||||||
|
|
||||||
if ($need_venv) {
|
|
||||||
check_python_module("ensurepip", 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
# Do distro-specific checks and output distro-install commands
|
# Do distro-specific checks and output distro-install commands
|
||||||
check_distros();
|
check_distros();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue