scripts: sphinx-pre-install: fix a bug when using with venv
authorMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 21 Apr 2020 14:31:08 +0000 (16:31 +0200)
committerJonathan Corbet <corbet@lwn.net>
Tue, 28 Apr 2020 18:52:02 +0000 (12:52 -0600)
When python3 creates a venv, it adds python into it!

This causes any upgrade recommendation to look like this:

/devel/v4l/docs/sphinx_1.7.9/bin/python3 -m venv sphinx_2.4.4
. sphinx_2.4.4/bin/activate
pip install -r ./Documentation/sphinx/requirements.txt

With is wrong (and it may not work). So, when recomending
an upgrade, exclude the venv dir from the search path, and
get the system's python.

Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Link: https://lore.kernel.org/r/aa622ff71bebf6960fc0262fb90e7ebc7a999a02.1587478901.git.mchehab+huawei@kernel.org
Signed-off-by: Jonathan Corbet <corbet@lwn.net>
scripts/sphinx-pre-install

index 938b65d..987aebf 100755 (executable)
@@ -148,6 +148,24 @@ sub findprog($)
        }
 }
 
+sub find_python_no_venv()
+{
+       my $prog = shift;
+
+       my $cur_dir = qx(pwd);
+       $cur_dir =~ s/\s+$//;
+
+       foreach my $dir (split(/:/, $ENV{PATH})) {
+               next if ($dir =~ m,($cur_dir)/sphinx,);
+               return "$dir/python3" if(-x "$dir/python3");
+       }
+       foreach my $dir (split(/:/, $ENV{PATH})) {
+               next if ($dir =~ m,($cur_dir)/sphinx,);
+               return "$dir/python" if(-x "$dir/python");
+       }
+       return "python";
+}
+
 sub check_program($$)
 {
        my $prog = shift;
@@ -814,6 +832,8 @@ sub check_needs()
 
                        print "To upgrade Sphinx, use:\n\n" if ($rec_sphinx_upgrade);
 
+                       $python_cmd = find_python_no_venv();
+
                        if ($need_venv) {
                                printf "\t$python_cmd -m venv $virtenv_dir\n";
                        } else {