~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/scripts/sphinx-pre-install

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /scripts/sphinx-pre-install (Version linux-6.12-rc7) and /scripts/sphinx-pre-install (Version policy-sample)


  1 #!/usr/bin/env perl                               
  2 # SPDX-License-Identifier: GPL-2.0-or-later       
  3 use strict;                                       
  4                                                   
  5 # Copyright (c) 2017-2020 Mauro Carvalho Cheha<    
  6 #                                                 
  7                                                   
  8 my $prefix = "./";                                
  9 $prefix = "$ENV{'srctree'}/" if ($ENV{'srctree    
 10                                                   
 11 my $conf = $prefix . "Documentation/conf.py";     
 12 my $requirement_file = $prefix . "Documentatio    
 13 my $virtenv_prefix = "sphinx_";                   
 14                                                   
 15 #                                                 
 16 # Static vars                                     
 17 #                                                 
 18                                                   
 19 my %missing;                                      
 20 my $system_release;                               
 21 my $need = 0;                                     
 22 my $optional = 0;                                 
 23 my $need_symlink = 0;                             
 24 my $need_sphinx = 0;                              
 25 my $need_pip = 0;                                 
 26 my $need_virtualenv = 0;                          
 27 my $rec_sphinx_upgrade = 0;                       
 28 my $verbose_warn_install = 1;                     
 29 my $install = "";                                 
 30 my $virtenv_dir = "";                             
 31 my $python_cmd = "";                              
 32 my $activate_cmd;                                 
 33 my $min_version;                                  
 34 my $cur_version;                                  
 35 my $rec_version = "3.4.3";                        
 36 my $latest_avail_ver;                             
 37                                                   
 38 #                                                 
 39 # Command line arguments                          
 40 #                                                 
 41                                                   
 42 my $pdf = 1;                                      
 43 my $virtualenv = 1;                               
 44 my $version_check = 0;                            
 45                                                   
 46 #                                                 
 47 # List of required texlive packages on Fedora     
 48 #                                                 
 49                                                   
 50 my %texlive = (                                   
 51         'amsfonts.sty'       => 'texlive-amsfo    
 52         'amsmath.sty'        => 'texlive-amsma    
 53         'amssymb.sty'        => 'texlive-amsfo    
 54         'amsthm.sty'         => 'texlive-amscl    
 55         'anyfontsize.sty'    => 'texlive-anyfo    
 56         'atbegshi.sty'       => 'texlive-oberd    
 57         'bm.sty'             => 'texlive-tools    
 58         'capt-of.sty'        => 'texlive-capt-    
 59         'cmap.sty'           => 'texlive-cmap'    
 60         'ecrm1000.tfm'       => 'texlive-ec',     
 61         'eqparbox.sty'       => 'texlive-eqpar    
 62         'eu1enc.def'         => 'texlive-euenc    
 63         'fancybox.sty'       => 'texlive-fancy    
 64         'fancyvrb.sty'       => 'texlive-fancy    
 65         'float.sty'          => 'texlive-float    
 66         'fncychap.sty'       => 'texlive-fncyc    
 67         'footnote.sty'       => 'texlive-mdwto    
 68         'framed.sty'         => 'texlive-frame    
 69         'luatex85.sty'       => 'texlive-luate    
 70         'multirow.sty'       => 'texlive-multi    
 71         'needspace.sty'      => 'texlive-needs    
 72         'palatino.sty'       => 'texlive-psnfs    
 73         'parskip.sty'        => 'texlive-parsk    
 74         'polyglossia.sty'    => 'texlive-polyg    
 75         'tabulary.sty'       => 'texlive-tabul    
 76         'threeparttable.sty' => 'texlive-three    
 77         'titlesec.sty'       => 'texlive-title    
 78         'ucs.sty'            => 'texlive-ucs',    
 79         'upquote.sty'        => 'texlive-upquo    
 80         'wrapfig.sty'        => 'texlive-wrapf    
 81         'ctexhook.sty'       => 'texlive-ctex'    
 82 );                                                
 83                                                   
 84 #                                                 
 85 # Subroutines that checks if a feature exists     
 86 #                                                 
 87                                                   
 88 sub check_missing(%)                              
 89 {                                                 
 90         my %map = %{$_[0]};                       
 91                                                   
 92         foreach my $prog (sort keys %missing)     
 93                 my $is_optional = $missing{$pr    
 94                                                   
 95                 # At least on some LTS distros    
 96                 # provide all packages we need    
 97                 # detected, we have to disable    
 98                 #                                 
 99                 # So, we need to ignore the pa    
100                 # need for LaTeX to work          
101                 if ($is_optional == 2 && !$pdf    
102                         $optional--;              
103                         next;                     
104                 }                                 
105                                                   
106                 if ($verbose_warn_install) {      
107                         if ($is_optional) {       
108                                 print "Warning    
109                         } else {                  
110                                 print "ERROR:     
111                         }                         
112                 }                                 
113                 if (defined($map{$prog})) {       
114                         $install .= " " . $map    
115                 } else {                          
116                         $install .= " " . $pro    
117                 }                                 
118         }                                         
119                                                   
120         $install =~ s/^\s//;                      
121 }                                                 
122                                                   
123 sub add_package($$)                               
124 {                                                 
125         my $package = shift;                      
126         my $is_optional = shift;                  
127                                                   
128         $missing{$package} = $is_optional;        
129         if ($is_optional) {                       
130                 $optional++;                      
131         } else {                                  
132                 $need++;                          
133         }                                         
134 }                                                 
135                                                   
136 sub check_missing_file($$$)                       
137 {                                                 
138         my $files = shift;                        
139         my $package = shift;                      
140         my $is_optional = shift;                  
141                                                   
142         for (@$files) {                           
143                 return if(-e $_);                 
144         }                                         
145                                                   
146         add_package($package, $is_optional);      
147 }                                                 
148                                                   
149 sub findprog($)                                   
150 {                                                 
151         foreach(split(/:/, $ENV{PATH})) {         
152                 return "$_/$_[0]" if(-x "$_/$_    
153         }                                         
154 }                                                 
155                                                   
156 sub find_python_no_venv()                         
157 {                                                 
158         my $prog = shift;                         
159                                                   
160         my $cur_dir = qx(pwd);                    
161         $cur_dir =~ s/\s+$//;                     
162                                                   
163         foreach my $dir (split(/:/, $ENV{PATH}    
164                 next if ($dir =~ m,($cur_dir)/    
165                 return "$dir/python3" if(-x "$    
166         }                                         
167         foreach my $dir (split(/:/, $ENV{PATH}    
168                 next if ($dir =~ m,($cur_dir)/    
169                 return "$dir/python" if(-x "$d    
170         }                                         
171         return "python";                          
172 }                                                 
173                                                   
174 sub check_program($$)                             
175 {                                                 
176         my $prog = shift;                         
177         my $is_optional = shift;                  
178                                                   
179         return $prog if findprog($prog);          
180                                                   
181         add_package($prog, $is_optional);         
182 }                                                 
183                                                   
184 sub check_perl_module($$)                         
185 {                                                 
186         my $prog = shift;                         
187         my $is_optional = shift;                  
188                                                   
189         my $err = system("perl -M$prog -e 1 2>    
190         return if ($err == 0);                    
191                                                   
192         add_package($prog, $is_optional);         
193 }                                                 
194                                                   
195 sub check_python_module($$)                       
196 {                                                 
197         my $prog = shift;                         
198         my $is_optional = shift;                  
199                                                   
200         return if (!$python_cmd);                 
201                                                   
202         my $err = system("$python_cmd -c 'impo    
203         return if ($err == 0);                    
204                                                   
205         add_package($prog, $is_optional);         
206 }                                                 
207                                                   
208 sub check_rpm_missing($$)                         
209 {                                                 
210         my @pkgs = @{$_[0]};                      
211         my $is_optional = $_[1];                  
212                                                   
213         foreach my $prog(@pkgs) {                 
214                 my $err = system("rpm -q '$pro    
215                 add_package($prog, $is_optiona    
216         }                                         
217 }                                                 
218                                                   
219 sub check_pacman_missing($$)                      
220 {                                                 
221         my @pkgs = @{$_[0]};                      
222         my $is_optional = $_[1];                  
223                                                   
224         foreach my $prog(@pkgs) {                 
225                 my $err = system("pacman -Q '$    
226                 add_package($prog, $is_optiona    
227         }                                         
228 }                                                 
229                                                   
230 sub check_missing_tex($)                          
231 {                                                 
232         my $is_optional = shift;                  
233         my $kpsewhich = findprog("kpsewhich");    
234                                                   
235         foreach my $prog(keys %texlive) {         
236                 my $package = $texlive{$prog};    
237                 if (!$kpsewhich) {                
238                         add_package($package,     
239                         next;                     
240                 }                                 
241                 my $file = qx($kpsewhich $prog    
242                 add_package($package, $is_opti    
243         }                                         
244 }                                                 
245                                                   
246 sub get_sphinx_fname()                            
247 {                                                 
248         my $fname = "sphinx-build";               
249         return $fname if findprog($fname);        
250                                                   
251         $fname = "sphinx-build-3";                
252         if (findprog($fname)) {                   
253                 $need_symlink = 1;                
254                 return $fname;                    
255         }                                         
256                                                   
257         return "";                                
258 }                                                 
259                                                   
260 sub get_sphinx_version($)                         
261 {                                                 
262         my $cmd = shift;                          
263         my $ver;                                  
264                                                   
265         open IN, "$cmd --version 2>&1 |";         
266         while (<IN>) {                            
267                 if (m/^\s*sphinx-build\s+([\d\    
268                         $ver=$1;                  
269                         last;                     
270                 }                                 
271                 # Sphinx 1.2.x uses a differen    
272                 if (m/^\s*Sphinx.*\s+([\d\.]+)    
273                         $ver=$1;                  
274                         last;                     
275                 }                                 
276         }                                         
277         close IN;                                 
278         return $ver;                              
279 }                                                 
280                                                   
281 sub check_sphinx()                                
282 {                                                 
283         open IN, $conf or die "Can't open $con    
284         while (<IN>) {                            
285                 if (m/^\s*needs_sphinx\s*=\s*[    
286                         $min_version=$1;          
287                         last;                     
288                 }                                 
289         }                                         
290         close IN;                                 
291                                                   
292         die "Can't get needs_sphinx version fr    
293                                                   
294         $virtenv_dir = $virtenv_prefix . "late    
295                                                   
296         my $sphinx = get_sphinx_fname();          
297         if ($sphinx eq "") {                      
298                 $need_sphinx = 1;                 
299                 return;                           
300         }                                         
301                                                   
302         $cur_version = get_sphinx_version($sph    
303         die "$sphinx didn't return its version    
304                                                   
305         if ($cur_version lt $min_version) {       
306                 printf "ERROR: Sphinx version     
307                        $cur_version, $min_vers    
308                 $need_sphinx = 1;                 
309                 return;                           
310         }                                         
311                                                   
312         return if ($cur_version lt $rec_versio    
313                                                   
314         # On version check mode, just assume S    
315         exit (0) if ($version_check);             
316 }                                                 
317                                                   
318 #                                                 
319 # Ancillary subroutines                           
320 #                                                 
321                                                   
322 sub catcheck($)                                   
323 {                                                 
324   my $res = "";                                   
325   $res = qx(cat $_[0]) if (-r $_[0]);             
326   return $res;                                    
327 }                                                 
328                                                   
329 sub which($)                                      
330 {                                                 
331         my $file = shift;                         
332         my @path = split ":", $ENV{PATH};         
333                                                   
334         foreach my $dir(@path) {                  
335                 my $name = $dir.'/'.$file;        
336                 return $name if (-x $name );      
337         }                                         
338         return undef;                             
339 }                                                 
340                                                   
341 #                                                 
342 # Subroutines that check distro-specific hints    
343 #                                                 
344                                                   
345 sub give_debian_hints()                           
346 {                                                 
347         my %map = (                               
348                 "python-sphinx"         => "py    
349                 "yaml"                  => "py    
350                 "ensurepip"             => "py    
351                 "virtualenv"            => "vi    
352                 "dot"                   => "gr    
353                 "convert"               => "im    
354                 "Pod::Usage"            => "pe    
355                 "xelatex"               => "te    
356                 "rsvg-convert"          => "li    
357         );                                        
358                                                   
359         if ($pdf) {                               
360                 check_missing_file(["/usr/shar    
361                                    "texlive-la    
362                                                   
363                 check_missing_file(["/usr/shar    
364                                    "fonts-deja    
365                                                   
366                 check_missing_file(["/usr/shar    
367                                     "/usr/shar    
368                                     "/usr/shar    
369                                    "fonts-noto    
370         }                                         
371                                                   
372         check_program("dvipng", 2) if ($pdf);     
373         check_missing(\%map);                     
374                                                   
375         return if (!$need && !$optional);         
376         printf("You should run:\n") if ($verbo    
377         printf("\n\tsudo apt-get install $inst    
378 }                                                 
379                                                   
380 sub give_redhat_hints()                           
381 {                                                 
382         my %map = (                               
383                 "python-sphinx"         => "py    
384                 "yaml"                  => "py    
385                 "virtualenv"            => "py    
386                 "dot"                   => "gr    
387                 "convert"               => "Im    
388                 "Pod::Usage"            => "pe    
389                 "xelatex"               => "te    
390                 "rsvg-convert"          => "li    
391         );                                        
392                                                   
393         my @fedora26_opt_pkgs = (                 
394                 "graphviz-gd",          # Fedo    
395         );                                        
396                                                   
397         my @fedora_tex_pkgs = (                   
398                 "texlive-collection-fontsrecom    
399                 "texlive-collection-latex",       
400                 "texlive-xecjk",                  
401                 "dejavu-sans-fonts",              
402                 "dejavu-serif-fonts",             
403                 "dejavu-sans-mono-fonts",         
404         );                                        
405                                                   
406         #                                         
407         # Checks valid for RHEL/CentOS version    
408         #                                         
409         my $old = 0;                              
410         my $rel;                                  
411         my $noto_sans_redhat = "google-noto-sa    
412         $rel = $1 if ($system_release =~ /rele    
413                                                   
414         if (!($system_release =~ /Fedora/)) {     
415                 $map{"virtualenv"} = "python-v    
416                                                   
417                 if ($rel && $rel < 8) {           
418                         $old = 1;                 
419                         $pdf = 0;                 
420                                                   
421                         printf("Note: texlive     
422                         printf("If you want to    
423                         printf("\thttps://www.    
424                 }                                 
425         } else {                                  
426                 if ($rel && $rel < 26) {          
427                         $old = 1;                 
428                 }                                 
429                 if ($rel && $rel >= 38) {         
430                         $noto_sans_redhat = "g    
431                 }                                 
432         }                                         
433         if (!$rel) {                              
434                 printf("Couldn't identify rele    
435                 $old = 1;                         
436                 $pdf = 0;                         
437         }                                         
438                                                   
439         if ($pdf) {                               
440                 check_missing_file(["/usr/shar    
441                                     "/usr/shar    
442                                    $noto_sans_    
443         }                                         
444                                                   
445         check_rpm_missing(\@fedora26_opt_pkgs,    
446         check_rpm_missing(\@fedora_tex_pkgs, 2    
447         check_missing_tex(2) if ($pdf);           
448         check_missing(\%map);                     
449                                                   
450         return if (!$need && !$optional);         
451                                                   
452         if (!$old) {                              
453                 # dnf, for Fedora 18+             
454                 printf("You should run:\n") if    
455                 printf("\n\tsudo dnf install -    
456         } else {                                  
457                 # yum, for RHEL (and clones) o    
458                 printf("You should run:\n") if    
459                 printf("\n\tsudo yum install -    
460         }                                         
461 }                                                 
462                                                   
463 sub give_opensuse_hints()                         
464 {                                                 
465         my %map = (                               
466                 "python-sphinx"         => "py    
467                 "yaml"                  => "py    
468                 "virtualenv"            => "py    
469                 "dot"                   => "gr    
470                 "convert"               => "Im    
471                 "Pod::Usage"            => "pe    
472                 "xelatex"               => "te    
473         );                                        
474                                                   
475         # On Tumbleweed, this package is also     
476         $map{"rsvg-convert"} = "rsvg-view" if     
477                                                   
478         my @suse_tex_pkgs = (                     
479                 "texlive-babel-english",          
480                 "texlive-caption",                
481                 "texlive-colortbl",               
482                 "texlive-courier",                
483                 "texlive-dvips",                  
484                 "texlive-helvetic",               
485                 "texlive-makeindex",              
486                 "texlive-metafont",               
487                 "texlive-metapost",               
488                 "texlive-palatino",               
489                 "texlive-preview",                
490                 "texlive-times",                  
491                 "texlive-zapfchan",               
492                 "texlive-zapfding",               
493         );                                        
494                                                   
495         $map{"latexmk"} = "texlive-latexmk-bin    
496                                                   
497         # FIXME: add support for installing CJ    
498         #                                         
499         # I tried hard, but was unable to find    
500         # "Noto Sans CJK SC" on openSUSE          
501                                                   
502         check_rpm_missing(\@suse_tex_pkgs, 2)     
503         check_missing_tex(2) if ($pdf);           
504         check_missing(\%map);                     
505                                                   
506         return if (!$need && !$optional);         
507         printf("You should run:\n") if ($verbo    
508         printf("\n\tsudo zypper install --no-r    
509 }                                                 
510                                                   
511 sub give_mageia_hints()                           
512 {                                                 
513         my %map = (                               
514                 "python-sphinx"         => "py    
515                 "yaml"                  => "py    
516                 "virtualenv"            => "py    
517                 "dot"                   => "gr    
518                 "convert"               => "Im    
519                 "Pod::Usage"            => "pe    
520                 "xelatex"               => "te    
521                 "rsvg-convert"          => "li    
522         );                                        
523                                                   
524         my @tex_pkgs = (                          
525                 "texlive-fontsextra",             
526         );                                        
527                                                   
528         $map{"latexmk"} = "texlive-collection-    
529                                                   
530         my $packager_cmd;                         
531         my $noto_sans;                            
532         if ($system_release =~ /OpenMandriva/)    
533                 $packager_cmd = "dnf install";    
534                 $noto_sans = "noto-sans-cjk-fo    
535                 @tex_pkgs = ( "texlive-collect    
536         } else {                                  
537                 $packager_cmd = "urpmi";          
538                 $noto_sans = "google-noto-sans    
539         }                                         
540                                                   
541                                                   
542         if ($pdf) {                               
543                 check_missing_file(["/usr/shar    
544                                     "/usr/shar    
545                                    $noto_sans,    
546         }                                         
547                                                   
548         check_rpm_missing(\@tex_pkgs, 2) if ($    
549         check_missing(\%map);                     
550                                                   
551         return if (!$need && !$optional);         
552         printf("You should run:\n") if ($verbo    
553         printf("\n\tsudo $packager_cmd $instal    
554 }                                                 
555                                                   
556 sub give_arch_linux_hints()                       
557 {                                                 
558         my %map = (                               
559                 "yaml"                  => "py    
560                 "virtualenv"            => "py    
561                 "dot"                   => "gr    
562                 "convert"               => "im    
563                 "xelatex"               => "te    
564                 "latexmk"               => "te    
565                 "rsvg-convert"          => "ex    
566         );                                        
567                                                   
568         my @archlinux_tex_pkgs = (                
569                 "texlive-core",                   
570                 "texlive-latexextra",             
571                 "ttf-dejavu",                     
572         );                                        
573         check_pacman_missing(\@archlinux_tex_p    
574                                                   
575         if ($pdf) {                               
576                 check_missing_file(["/usr/shar    
577                                    "noto-fonts    
578         }                                         
579                                                   
580         check_missing(\%map);                     
581                                                   
582         return if (!$need && !$optional);         
583         printf("You should run:\n") if ($verbo    
584         printf("\n\tsudo pacman -S $install\n"    
585 }                                                 
586                                                   
587 sub give_gentoo_hints()                           
588 {                                                 
589         my %map = (                               
590                 "yaml"                  => "de    
591                 "virtualenv"            => "de    
592                 "dot"                   => "me    
593                 "convert"               => "me    
594                 "xelatex"               => "de    
595                 "rsvg-convert"          => "gn    
596         );                                        
597                                                   
598         check_missing_file(["/usr/share/fonts/    
599                            "media-fonts/dejavu    
600                                                   
601         if ($pdf) {                               
602                 check_missing_file(["/usr/shar    
603                                     "/usr/shar    
604                                    "media-font    
605         }                                         
606                                                   
607         check_missing(\%map);                     
608                                                   
609         return if (!$need && !$optional);         
610                                                   
611         printf("You should run:\n") if ($verbo    
612         printf("\n");                             
613                                                   
614         my $imagemagick = "media-gfx/imagemagi    
615         my $cairo = "media-gfx/graphviz cairo     
616         my $portage_imagemagick = "/etc/portag    
617         my $portage_cairo = "/etc/portage/pack    
618                                                   
619         if (qx(grep imagemagick $portage_image    
620                 printf("\tsudo su -c 'echo \"$    
621         }                                         
622         if (qx(grep graphviz $portage_cairo 2>    
623                 printf("\tsudo su -c 'echo \"$    
624         }                                         
625                                                   
626         printf("\tsudo emerge --ask $install\n    
627                                                   
628 }                                                 
629                                                   
630 sub check_distros()                               
631 {                                                 
632         # Distro-specific hints                   
633         if ($system_release =~ /Red Hat Enterp    
634                 give_redhat_hints;                
635                 return;                           
636         }                                         
637         if ($system_release =~ /CentOS/) {        
638                 give_redhat_hints;                
639                 return;                           
640         }                                         
641         if ($system_release =~ /Scientific Lin    
642                 give_redhat_hints;                
643                 return;                           
644         }                                         
645         if ($system_release =~ /Oracle Linux S    
646                 give_redhat_hints;                
647                 return;                           
648         }                                         
649         if ($system_release =~ /Fedora/) {        
650                 give_redhat_hints;                
651                 return;                           
652         }                                         
653         if ($system_release =~ /Ubuntu/) {        
654                 give_debian_hints;                
655                 return;                           
656         }                                         
657         if ($system_release =~ /Debian/) {        
658                 give_debian_hints;                
659                 return;                           
660         }                                         
661         if ($system_release =~ /openSUSE/) {      
662                 give_opensuse_hints;              
663                 return;                           
664         }                                         
665         if ($system_release =~ /Mageia/) {        
666                 give_mageia_hints;                
667                 return;                           
668         }                                         
669         if ($system_release =~ /OpenMandriva/)    
670                 give_mageia_hints;                
671                 return;                           
672         }                                         
673         if ($system_release =~ /Arch Linux/) {    
674                 give_arch_linux_hints;            
675                 return;                           
676         }                                         
677         if ($system_release =~ /Gentoo/) {        
678                 give_gentoo_hints;                
679                 return;                           
680         }                                         
681                                                   
682         #                                         
683         # Fall-back to generic hint code for o    
684         # That's far from ideal, specially for    
685         #                                         
686         my %map = (                               
687                 "sphinx-build" => "sphinx"        
688         );                                        
689         check_missing_tex(2) if ($pdf);           
690         check_missing(\%map);                     
691         print "I don't know distro $system_rel    
692         print "So, I can't provide you a hint     
693         print "There are likely missing depend    
694 }                                                 
695                                                   
696 #                                                 
697 # Common dependencies                             
698 #                                                 
699                                                   
700 sub deactivate_help()                             
701 {                                                 
702         printf "\n    If you want to exit the     
703         printf "\tdeactivate\n";                  
704 }                                                 
705                                                   
706 sub get_virtenv()                                 
707 {                                                 
708         my $ver;                                  
709         my $min_activate = "$ENV{'PWD'}/${virt    
710         my @activates = glob "$ENV{'PWD'}/${vi    
711                                                   
712         @activates = sort {$b cmp $a} @activat    
713                                                   
714         foreach my $f (@activates) {              
715                 next if ($f lt $min_activate);    
716                                                   
717                 my $sphinx_cmd = $f;              
718                 $sphinx_cmd =~ s/activate/sphi    
719                 next if (! -f $sphinx_cmd);       
720                                                   
721                 my $ver = get_sphinx_version($    
722                                                   
723                 if (!$ver) {                      
724                         $f =~ s#/bin/activate#    
725                         print("Warning: virtua    
726                 }                                 
727                                                   
728                 if ($need_sphinx && ($ver ge $    
729                         return ($f, $ver);        
730                 } elsif ($ver gt $cur_version)    
731                         return ($f, $ver);        
732                 }                                 
733         }                                         
734         return ("", "");                          
735 }                                                 
736                                                   
737 sub recommend_sphinx_upgrade()                    
738 {                                                 
739         my $venv_ver;                             
740                                                   
741         # Avoid running sphinx-builds from ven    
742         if ($cur_version && ($cur_version ge $    
743                 $latest_avail_ver = $cur_versi    
744                 return;                           
745         }                                         
746                                                   
747         # Get the highest version from sphinx_    
748         # corresponding command to activate th    
749         ($activate_cmd, $venv_ver) = get_virte    
750                                                   
751         # Store the highest version from Sphin    
752         if (($activate_cmd ne "") && ($venv_ve    
753                 $latest_avail_ver = $venv_ver;    
754         } else {                                  
755                 $latest_avail_ver = $cur_versi    
756         }                                         
757                                                   
758         # As we don't know package version of     
759         # virtual environments, don't check if    
760         if (!$virtualenv) {                       
761                 return if (!$latest_avail_ver)    
762         }                                         
763                                                   
764         # Either there are already a virtual e    
765         $need_pip = 1;                            
766                                                   
767         return if (!$latest_avail_ver);           
768                                                   
769         # Return if the reason is due to an up    
770         if ($latest_avail_ver lt $rec_version)    
771                 $rec_sphinx_upgrade = 1;          
772         }                                         
773                                                   
774         return $latest_avail_ver;                 
775 }                                                 
776                                                   
777 #                                                 
778 # The logic here is complex, as it have to dea    
779 #       - minimal supported version;              
780 #       - minimal PDF version;                    
781 #       - recommended version.                    
782 # It also needs to work fine with both distro'    
783 sub recommend_sphinx_version($)                   
784 {                                                 
785         my $virtualenv_cmd = shift;               
786                                                   
787         # Version is OK. Nothing to do.           
788         if ($cur_version && ($cur_version ge $    
789                 return;                           
790         };                                        
791                                                   
792         if (!$need_sphinx) {                      
793                 # sphinx-build is present and     
794                                                   
795                 #only recommend enabling a new    
796                 if ($latest_avail_ver gt $cur_    
797                         printf "\nYou may also    
798                         printf "\tdeactivate\n    
799                         printf "\t. $activate_    
800                         deactivate_help();        
801                                                   
802                         return;                   
803                 }                                 
804                 return if ($latest_avail_ver g    
805         }                                         
806                                                   
807         if (!$virtualenv) {                       
808                 # No sphinx either via package    
809                 # Compare the versions here, j    
810                 # user to install it from the     
811                 return if (!$latest_avail_ver)    
812                                                   
813                 # User doesn't want a virtenv     
814                 # installed one via virtenv wi    
815                 # So, print commands to enable    
816                 if ($latest_avail_ver gt $cur_    
817                         printf "\nYou may also    
818                         printf "\tdeactivate\n    
819                         printf "\t. $activate_    
820                         deactivate_help();        
821                                                   
822                         return;                   
823                 }                                 
824                 print "\n";                       
825         } else {                                  
826                 $need++ if ($need_sphinx);        
827         }                                         
828                                                   
829         # Suggest newer versions if current on    
830         if ($latest_avail_ver && $latest_avail    
831                 # If there's a good enough ver    
832                 if ($latest_avail_ver ge $rec_    
833                         printf "\nNeed to acti    
834                         printf "\t. $activate_    
835                         deactivate_help();        
836                                                   
837                         return;                   
838                 }                                 
839                                                   
840                 # Version is above the minimal    
841                 # below the recommended one. S    
842                                                   
843                 if ($latest_avail_ver lt $rec_    
844                         print "Warning: It is     
845                 }                                 
846         }                                         
847                                                   
848         # At this point, either it needs Sphin    
849         # both via pip                            
850                                                   
851         if ($rec_sphinx_upgrade) {                
852                 if (!$virtualenv) {               
853                         print "Instead of inst    
854                 } else {                          
855                         print "To upgrade Sphi    
856                 }                                 
857         } else {                                  
858                 print "\nSphinx needs to be in    
859         }                                         
860                                                   
861         $python_cmd = find_python_no_venv();      
862                                                   
863         printf "\t$virtualenv_cmd $virtenv_dir    
864                                                   
865         printf "\t. $virtenv_dir/bin/activate\    
866         printf "\tpip install -r $requirement_    
867         deactivate_help();                        
868                                                   
869         printf "\n2) As a package with:\n";       
870                                                   
871         my $old_need = $need;                     
872         my $old_optional = $optional;             
873         %missing = ();                            
874         $pdf = 0;                                 
875         $optional = 0;                            
876         $install = "";                            
877         $verbose_warn_install = 0;                
878                                                   
879         add_package("python-sphinx", 0);          
880                                                   
881         check_distros();                          
882                                                   
883         $need = $old_need;                        
884         $optional = $old_optional;                
885                                                   
886         printf "\n    Please note that Sphinx     
887         printf "   warning when the same name     
888         printf "   structs, enums,...). This i    
889         printf "\thttps://github.com/sphinx-do    
890 }                                                 
891                                                   
892 sub check_needs()                                 
893 {                                                 
894         # Check if Sphinx is already accessibl    
895         check_sphinx();                           
896                                                   
897         if ($system_release) {                    
898                 print "Detected OS: $system_re    
899         } else {                                  
900                 print "Unknown OS\n";             
901         }                                         
902         printf "Sphinx version: %s\n\n", $cur_    
903                                                   
904         # Check python command line, trying fi    
905         $python_cmd = findprog("python3");        
906         $python_cmd = check_program("python",     
907                                                   
908         # Check the type of virtual env, depen    
909         if ($python_cmd) {                        
910                 if ($virtualenv) {                
911                         my $tmp = qx($python_c    
912                         if ($tmp =~ m/(\d+\.)(    
913                                 if ($1 < 3) {     
914                                         # Fail    
915                                         die "P    
916                                 }                 
917                                 if ($1 == 3 &&    
918                                         # Need    
919                                         $need_    
920                                 }                 
921                         } else {                  
922                                 die "Warning:     
923                         }                         
924                 } else {                          
925                         add_package("python-sp    
926                 }                                 
927         }                                         
928                                                   
929         my $venv_ver = recommend_sphinx_upgrad    
930                                                   
931         my $virtualenv_cmd;                       
932                                                   
933         if ($need_pip) {                          
934                 # Set virtualenv command line,    
935                 if ($need_virtualenv) {           
936                         $virtualenv_cmd = find    
937                         $virtualenv_cmd = find    
938                         if (!$virtualenv_cmd)     
939                                 check_program(    
940                                 $virtualenv_cm    
941                         }                         
942                 } else {                          
943                         $virtualenv_cmd = "$py    
944                         check_python_module("e    
945                 }                                 
946         }                                         
947                                                   
948         # Check for needed programs/tools         
949         check_perl_module("Pod::Usage", 0);       
950         check_python_module("yaml", 0);           
951         check_program("make", 0);                 
952         check_program("gcc", 0);                  
953         check_program("dot", 1);                  
954         check_program("convert", 1);              
955                                                   
956         # Extra PDF files - should use 2 for i    
957         check_program("xelatex", 2) if ($pdf);    
958         check_program("rsvg-convert", 2) if ($    
959         check_program("latexmk", 2) if ($pdf);    
960                                                   
961         # Do distro-specific checks and output    
962         check_distros();                          
963                                                   
964         if (!$python_cmd) {                       
965                 if ($need == 1) {                 
966                         die "Can't build as $n    
967                 } elsif ($need) {                 
968                         die "Can't build as $n    
969                 }                                 
970         }                                         
971                                                   
972         # Check if sphinx-build is called sphi    
973         if ($need_symlink) {                      
974                 printf "\tsudo ln -sf %s /usr/    
975                        which("sphinx-build-3")    
976         }                                         
977                                                   
978         recommend_sphinx_version($virtualenv_c    
979         printf "\n";                              
980                                                   
981         print "All optional dependencies are m    
982                                                   
983         if ($need == 1) {                         
984                 die "Can't build as $need mand    
985         } elsif ($need) {                         
986                 die "Can't build as $need mand    
987         }                                         
988                                                   
989         print "Needed package dependencies are    
990 }                                                 
991                                                   
992 #                                                 
993 # Main                                            
994 #                                                 
995                                                   
996 while (@ARGV) {                                   
997         my $arg = shift(@ARGV);                   
998                                                   
999         if ($arg eq "--no-virtualenv") {          
1000                 $virtualenv = 0;                 
1001         } elsif ($arg eq "--no-pdf"){            
1002                 $pdf = 0;                        
1003         } elsif ($arg eq "--version-check"){     
1004                 $version_check = 1;              
1005         } else {                                 
1006                 print "Usage:\n\t$0 <--no-vir    
1007                 print "Where:\n";                
1008                 print "\t--no-virtualenv\t- R    
1009                 print "\t--version-check\t- i    
1010                 print "\t--no-pdf\t- don't ch    
1011                 exit -1;                         
1012         }                                        
1013 }                                                
1014                                                  
1015 #                                                
1016 # Determine the system type. There's no stand    
1017 # work with all distros with a minimal packag    
1018 # methods are used here.                         
1019 #                                                
1020 # By default, it will use lsb_release functio    
1021 # fail back to reading the known different pl    
1022 # is stored                                      
1023 #                                                
1024                                                  
1025 $system_release = qx(lsb_release -d) if which    
1026 $system_release =~ s/Description:\s*// if ($s    
1027 $system_release = catcheck("/etc/system-relea    
1028 $system_release = catcheck("/etc/redhat-relea    
1029 $system_release = catcheck("/etc/lsb-release"    
1030 $system_release = catcheck("/etc/gentoo-relea    
1031                                                  
1032 # This seems more common than LSB these days     
1033 if (!$system_release) {                          
1034         my %os_var;                              
1035         if (open IN, "cat /etc/os-release|")     
1036                 while (<IN>) {                   
1037                         if (m/^([\w\d\_]+)=\"    
1038                                 $os_var{$1}=$    
1039                         }                        
1040                 }                                
1041                 $system_release = $os_var{"NA    
1042                 if (defined($os_var{"VERSION_    
1043                         $system_release .= "     
1044                 } else {                         
1045                         $system_release .= "     
1046                 }                                
1047         }                                        
1048 }                                                
1049 $system_release = catcheck("/etc/issue") if !    
1050 $system_release =~ s/\s+$//;                     
1051                                                  
1052 check_needs;                                     
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php