1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
|
#!/usr/bin/env perl
# $Id$
# Public domain. Originally written 2005, Karl Berry.
# Check if a package in TL has any changes on CTAN.
BEGIN {
chomp ($mydir = `dirname $0`); # we are in Master/tlpkg/bin
unshift (@INC, "$mydir/..");
}
use TeXLive::TLConfig qw/$RelocPrefix $RelocTree/;
use TeXLive::TLPOBJ;
use TeXLive::TLPDB;
use File::Basename;
my $tlpdb;
my $Master;
our %OPT;
my @TLP_working = qw(
12many 2up
Asana-Math ESIEEcv GS1 HA-prosper IEEEconf IEEEtran
SIstyle SIunits Tabbing Type1fonts
a0poster a2ping a4wide a5comb
aastex abbr abc abntex2 abraces abstract abstyles
academicons accanthis accfonts achemso
acmart acmconf acro acronym acroterm
active-conf actuarialangle
addfont addlines adfathesis adforn adhocfilelist
adjmulticol adfsymbols adjustbox adobemapping
adrconv adtrees advdate
ae aecc aeguill afparticle afthesis
aguplus aiaa aichej ajl akktex akletter alegreya alertmessage
alg algorithm2e algorithmicx algorithms allrunes almfixed alnumsec alterqcm
altfont ametsoc amiri amsaddr amscls amsfonts amslatex-primer
amsldoc-it amsldoc-vn
amsmath amsmath-it amsrefs amstex amsthdoc-it
animate anonchap anonymouspro answers antiqua antomega antt anufinalexam
anyfontsize anysize
aobs-tikz aomart apa apa6 apa6e apacite apalike2 apalike-german apnum
appendix appendixnumberbeamer apprends-latex apptools apxproof
arabi arabi-add arabluatex arabtex arabxetex
aramaic-serto arara archaeologie archaic arcs arev arimo armtex
around-the-bend arphic arphic-ttf arrayjobx arraysort arsclassica
arydshln articleingud
asaetr asapsym ascelike ascii-chart ascii-font asciilist
askmaps aspectratio
assignment assoccnt astro asyfig
asymptote-faq-zh-cn asymptote-by-example-zh-cn asymptote-manual-zh-cn
asypictureb attachfile
aucklandthesis augie auncial-new aurical aurl autobreak autopdf
authoraftertitle authorindex
auto-pst-pdf autoaligne autoarea automata autonum autosp avantgar avremu
awesomebox
b1encoding babel
babel-albanian babel-bahasa babel-basque
babel-belarusian babel-bosnian babel-breton
babel-bulgarian babel-catalan babel-croatian babel-czech
babel-danish babel-dutch babel-english babel-esperanto
babel-estonian babel-finnish babel-french babel-friulan
babel-galician babel-german babel-georgian babel-greek
babel-hebrew babel-hungarian
babel-icelandic babel-interlingua babel-irish babel-italian babel-japanese
babel-kurmanji babel-latin babel-latvian babel-macedonian
babel-norsk babel-occitan babel-piedmontese
babel-polish babel-portuges babel-romanian babel-romansh
babel-russian babel-samin babel-scottish babel-serbian
babel-serbianc babel-slovak babel-slovenian babel-sorbian babel-spanglish
babel-spanish babel-swedish babel-thai babel-turkish babel-ukrainian
babel-vietnamese babel-welsh
babelbib background backnaur baekmuk
bagpipe bangorcsthesis bangorexam bangtex bankstatement
barcodes bardiag barr bartel-chess-fonts bashful basicarith
baskervald baskervaldx baskervillef
basque-book basque-date
bbcard bbding bbm bbm-macros bbold bbold-type1 bchart bclogo
beamer beamer2thesis beamer-FUBerlin beamer-tut-pt beamer-verona
beameraudience beamercolorthemeowl beamerdarkthemes beamerposter
beamersubframe beamerswitch beamertheme-cuerna
beamertheme-detlevcm beamertheme-epyt beamertheme-metropolis
beamertheme-phnompenh beamertheme-upenn-bc
beamerthemejltree
beamerthemenirma
beebe begingreek begriff belleek bengali
bera berenisadf besjournals bestpapers betababel beton beuron
bewerbung bez123 bezos bgreek bgteubner bguq bhcexam
bib-fr bibarts biber bibhtml
biblatex biblatex-abnt biblatex-anonymous biblatex-apa
biblatex-bookinarticle biblatex-bookinother biblatex-bwl
biblatex-caspervector biblatex-chem biblatex-chicago biblatex-claves
biblatex-dw biblatex-fiwi biblatex-gb7714-2015 biblatex-gost
biblatex-historian
biblatex-ieee biblatex-ijsra biblatex-iso690 biblatex-juradiss
biblatex-lni biblatex-luh-ipw biblatex-manuscripts-philology
biblatex-mla biblatex-morenames biblatex-multiple-dm biblatex-musuos
biblatex-nature biblatex-nejm biblatex-nottsclassic
biblatex-opcit-booktitle
biblatex-philosophy biblatex-phys biblatex-publist
biblatex-realauthor biblatex-sbl biblatex-science
biblatex-source-division biblatex-subseries biblatex-swiss-legal
biblatex-trad biblatex-true-citepages-omit
bibleref bibleref-french bibleref-german bibleref-lds bibleref-mouth
bibleref-parse bibletext
biblist bibtex bibtexperllibs bibtopic
bibtopicprefix bibexport bibunits
bidi bidi-atbegshi bidicontour bidihl
bidipagegrid bidipresentation bidishadowtext
bigfoot bigints binarytree binomexp biocon biolett-bst
bitelist bitpattern bizcard
blacklettert1 blindtext blkarray
blochsphere block blockdraw_mp bloques blox
bnumexpr bodegraph bohr boisik bold-extra
boites boldtensors bondgraph bondgraphs
bookcover bookdb bookest bookhands booklet
booktabs booktabs-de booktabs-fr boolexpr boondox bophook
borceux bosisio
boxedminipage boxedminipage2e boxhandler bpchem bpolynomial
br-lex bracketkey braids braille braket brandeis-dissertation
breakcites breakurl breqn bropd brushscr
bullcntr bundledoc burmese bussproofs
bxbase bxcjkjatype bxdpx-beamer bxdvidriver
bxpapersize bxpdfver bxeepic bxenclose
bxjalipsum bxjscls bxnewfont bytefield
c90 c-pascal cabin cachepic caladea calcage calctab calculation calculator
calligra calligra-type1 calrsfs cals calxxxx-yyyy cancel
canoniclayout cantarell
capt-of captcont captdef caption carbohydrates carlisle carlito carolmin-ps
cascadilla cases casyl
catchfilebetweentags catcodes catechis catoptions
cbcoptic cbfonts cbfonts-fd
cc-pl ccaption ccfonts ccicons cclicenses
cd cd-cover cdpbundl
cell cellspace celtic censor cfr-initials cfr-lm
changebar changelayout changepage changes chappg chapterfolder
chbibref checkcites checklistings chem-journal
chemarrow chembst chemcompounds chemcono chemexec
chemfig chemformula chemgreek chemmacros
chemnum chemschemex chemstyle cherokee
chess chess-problem-diagrams chessboard chessfss chet chextras
chicago chicago-annote chickenize chivo
chkfloat chletter chngcntr chronology
chronosys chscite churchslavonic
cinzel circ circuitikz
cite citeall cjhebrew cjk cjk-gs-integrate cjk-ko cjkpunct
classics classpack classicthesis
cleanthesis clearsans clefval cleveref clipboard
clock cloze clrscode clrscode3e cm-lgc cm-super cm-unicode
cmap cmarrows cmbright cmcyr
cmdstring cmdtrack cmexb cmextra cmll cmpica cmpj cmsd cmtiup
cnbwp cnltx cntformats cntperchap
cochineal codedoc codepage codesection codicefiscaleitaliano
collcell collectbox collref
colordoc colorinfo coloring colorsep colorspace colortab
colortbl colorwav colorweb colourchange
combelow combine combinedgraphics comfortaa comicneue
comma commado commath comment
compactbib
complexity components-of-TeX comprehensive computational-complexity
concepts concmath concmath-fonts concprog concrete confproc constants conteq
context-account context-algorithmic context-animation context-annotation
context-bnf context-chromato context-cmscbf context-cmttbf
context-construction-plan context-cyrillicnumbers
context-degrade context-fancybreak context-filter
context-french context-fullpage
context-gantt context-gnuplot context-inifile
context-layout context-letter context-lettrine context-mathsets
context-notes-zh-cn context-rst context-ruby
context-simplefonts context-simpleslides context-title
context-transliterator context-typearea context-typescripts context-vim
context-visualcounter
continue contour contracard conv-xkv convbkmk
cooking cooking-units cookingsymbols
cool coollist coolstr coolthms cooltooltips
coordsys copyedit copyrightbox cormorantgaramond coseoul
countriesofeurope counttexruns courier-scaled courseoutline coursepaper
coverpage covington
cprotect cquthesis
crbox crimson crop
crossreference crossrefware crossword crosswrd cryptocode cryst
cs csbulletin cslatex csplain csquotes csquotes-de
css-colors cstypo csvsimple cstex
ctan_chk ctanify ctanupload ctable ctablestack ctex ctex-faq
cursolatex cuisine
currfile currvita curve curve2e curves
custom-bib cutwin cv cv4tw cweb-latex
cyber cybercic cyklop cyrillic cyrplain
dad dancers dantelogo dashbox dashrule dashundergaps dataref datatool
dateiliste datenumber
datetime datetime2 datetime2-bahasai datetime2-basque
datetime2-breton datetime2-bulgarian datetime2-catalan
datetime2-croatian datetime2-czech datetime2-danish datetime2-dutch
datetime2-en-fulltext datetime2-english datetime2-esperanto
datetime2-estonian
datetime2-finnish datetime2-french datetime2-galician
datetime2-german datetime2-greek datetime2-hebrew
datetime2-icelandic datetime2-irish datetime2-italian datetime2-it-fulltext
datetime2-latin datetime2-lsorbian datetime2-magyar datetime2-norsk
datetime2-polish datetime2-portuges datetime2-romanian
datetime2-russian datetime2-samin datetime2-scottish
datetime2-serbian datetime2-slovak datetime2-slovene
datetime2-spanish datetime2-swedish datetime2-turkish datetime2-ukrainian
datetime2-usorbian datetime2-welsh
dblfloatfix dccpaper dcpic de-macro decimal decorule dehyph-exptl
dejavu
delim delimseasy delimset delimtxt denisbdoc dhua
diadia diagbox diagmac2 dialogl diagnose dice dichokey
dickimaw dictsym diffcoeff digiconfigs din1505
dinat dinbrief dingbat directory dirtree dirtytalk disser dithesis
dk-bib dlfltxb
dnaseq dnp doc-pictex docbytex doclicense
docmfp docmute doctools documentation
doi doipubmed
dosepsbin dot2texi dotarrow dotseqn dottex
doublestroke dowith download dox dozenal dpfloat dprogress drac draftcopy
draftwatermark dramatist dratex drawmatrix drawstack
drm droid droit-fr drs drv dsptricks
dtk dtxdescribe dtxgallery dtxgen
dtxtut duerer duerer-latex duotenzor dutchcal
dvdcoll dvgloss dviasm dviincl
dvipsconfig dynamicnumber dynblocks dyntree
e-french ean ean13isbn easy easy-todo easyfig easylist easyreview
ebezier ebgaramond ebgaramond-maths ebong ebook ebproof ebsthesis
ec ecc ecclesiastic ecgdraw ecltree eco ecobiblatex econometrics economic
ecv ed edfnotes edmac edmargin ednotes eemeir eepic efbox egameps
egplot eiad eiad-ltx eijkhout einfuehrung einfuehrung2 ejpecp ekaia
elbioimp electrum eledform eledmac elements ellipse ellipsis
elmath elocalloc elpres elsarticle
elteikthesis eltex elvish elzcards
emarks embedall embrac emf emisa emptypage emulateapj emp
enctex encxvlna endfloat endheads endiagram endnotes
engpron engrec engtlc enigma enotez
enumitem enumitem-zref envbig environ envlab
epigrafica epigram epigraph epiolmec eplain
epsdice epsf epsf-dvipdfmx epsincl epslatex-fr
epspdf epspdfconversion epstopdf
eqell eqlist eqname eqnarray eqparbox errata esami es-tex-faq
erdc erewhon esdiff esint esint-type1 esk eskd eskdx
eso-pic esrelation esstix estcpmm esvect
etaremune etdipa etex-pkg etextools ethiop ethiop-t1
etoc etoolbox etoolbox-de
euenc eukdate
euler eulerpx eulervm euro euro-ce europasscv europecv eurosym
everyhook everypage
exam exam-n examdesign example examplep
exceltex excludeonly exercise exercises exp-testopt
expdlist expex export expressg exsheets exsol extarrows exteps
extpfeil extract extsizes
facsimile factura facture faktor
fancybox fancyhdr fancyhdr-it fancylabel fancynum fancypar
fancyref fancyslides fancytabs fancytooltips fancyvrb fandol
FAQ-en fast-diagram fbb fbithesis fbs
fc fcavtex fcltxdoc fcolumn fdsymbol featpost fei fenixpar
fetamont feupphdteses feyn feynmf feynmp-auto ffslides fge fgruler
fibeamer fifinddo-info fifo-stack fig4latex figbas figbib figflow figsize
filecontents filecontentsdef filedate filehook fileinfo filemod
findhyph fink finstrut fira first-latex-doc fitbox fithesis
fix2col fixcmex fixfoot fixlatvian fixltxhyph fixme fixmetodonotes
fixpdfmag
fjodor
flabels flacards flagderiv flashcards flashmovie flipbook flippdf
float floatflt floatrow
flowchart flowfram fltpoint
fmp fmtcount
fn2end fnbreak fncychap fncylab fnpara fnpct fntproof fnumprint
foekfont foilhtml fonetika
fontawesome font-change font-change-xetex fontaxes fontbook fontch fontinst
fontmfizz fontools
fonts-churchslavonic fonts-tlwg fontspec fonttable fontwrap
footbib footmisc footmisx footnotebackref footnotehyper
footnoterange footnpag
forarray foreign forest forest-quickstart forloop
formlett formation-latex-ul formular
fouridx fourier fouriernc
fp fpl
fragmaster fragments frame framed francais-bst frankenstein frcursive
frederika2016 frege frletter frontespizio ftcap ftnxtra
fullblck fullminipage fullwidth
functan fundus-calligra fundus-cyr fundus-sueterlin fvextra fwlw
g-brief gaceta galois gamebook garuda-c90
garrigues gastex gatech-thesis gates gauss
gb4e gcard gchords gcite
gender geschichtsfrkl genealogy genealogytree gene-logic
genmisc genmpage gentium-tug gentle geometry geometry-de
german germbib germkorr
getfiledate getitems getmap getoptk gfnotation
gfsartemisia gfsbaskerville gfsbodoni gfscomplutum gfsdidot gfsneohellenic
gfsporson gfssolomos
ghab ghsystem gillcm gillius gincltex ginpenc
gitfile-info gitinfo gitinfo2 gitlog
gloss glossaries
glossaries-danish glossaries-dutch glossaries-english glossaries-extra
glossaries-french
glossaries-german glossaries-irish glossaries-italian glossaries-magyar
gloss-occitan glossaries-polish glossaries-portuges
glossaries-serbian glossaries-spanish
gmdoc gmdoc-enhance
gmiflink gmp gmutils gmverb gmverse gnuplottex
go gobble gofonts gost gothic
gradientframe gradstudentresume grafcet grant graphbox graphics
graphics-cfg graphics-def graphics-pln
graphicx-psmin graphicxbox graphviz greek-fontenc greek-inputenc
greekdates greektex greektonoi greenpoint gregoriotex grfpaste
grid grid-system gridset grotesq grundgesetze
gsemthesis gtl gtrcrd gu guitar guitarchordschemes guitlogo gzt
h2020proposal hacm halloweenmath handout hands hang hanging hanoi
happy4th har2nat hardwrap harmony harnon-cv harpoon
harvard harveyballs harvmac hatching hausarbeit-jura havannah
hc he-she hep hepnames
hepparticles hepthesis hepunits here heuristica hexgame
hf-tikz hfbright hfoldsty
hhtensor histogr historische-zeitschrift hitec hletter
hobby hobete hook-pre-commit-pkg horoscop
hpsdiss hrefhide hrlatex hustthesis hvfloat hvindex
hypdvips hyper hypernat hyperref hyperxmp hyph-utf8 hyphen-base
hyphenat hyphenex hyplain
ibycus-babel ibygrk icsv idxcmds idxlayout ieeepes ietfbibs
ifetex iffont ifmslide ifmtarg ifnextok ifoddpage ifplatform ifsym
iftex ifthenx ifxetex
iitem ijmart ijqc ijsra
imac image-gallery imakeidx impatient impatient-cn impatient-fr
imfellenglish impnattypo import imsproc imtekda
incgraph inconsolata index indextools initials inlinebib inlinedef
inputtrc insbox installfont
interactiveworkbook interchar interfaces interpreter interval
intro-scientific
inversepath invoice
ionumbers iopart-num ipaex ipaex-type1 iscram iso
iso10303 isodate isodoc isomath isonums isorot isotope issuulinks itnumpar
iwhdp iwona
jablantile jacow jamtimes japanese-otf japanese-otf-uptex
jknapltx jlabels jlreq jmlr jneurosci jpsj jsclasses
jslectureplanner jumplines junicode
jura juraabbrev jurabib juramisc jurarsp js-misc jvlisting
kantlipsum karnaugh karnaugh-map karnaughmap kastrup kdgdocs kerkis kerntest
keycommand keyfloat keyreader keystroke keyval2e keyvaltable kix kixfont
knitting knittingpattern knuth knuth-lib knuth-local
koma-moderncvclassic koma-script koma-script-examples koma-script-sfs
komacv kotex-oblivoir kotex-plain kotex-utf kotex-utils
kpfonts ksfh_nat ksp-thesis
ktv-texdata kurier
l2picfaq l2tabu l2tabu-english l2tabu-french l2tabu-italian l2tabu-spanish
l3build l3kernel l3packages l3experimental
labbook labels labyrinth lambda-lists langcode langsci
lapdf lastpackage lastpage
latex latex-bib-ex latex-bib2-ex latex-brochure
latex-course latex-doc-ptr latex-fonts
latex-git-log latex-graphics-companion latex-make latex-notes-zh-cn
latex-papersize latex-referenz latex-tabellen
latex-tds latex-veryshortguide latex-web-companion
latex2e-help-texinfo latex2e-help-texinfo-fr
latex2e-help-texinfo-spanish latex2man latex2nemeth
latex4wp latex4wp-it latexbangla latexbug
latexcheat latexcheat-de latexcheat-esmx latexcheat-ptbr latexcourse-rug
latexdemo latexdiff latexfileinfo-pkgs latexfileversion
latexgit latexindent
latexmk latexmp latexpand
lato layaureo layouts lazylist
lcd lcg lcyw leading leadsheets leaflet
lecturer ledmac leftidx leipzig lengthconvert
lettre lettrine levy lewis lexikon lexref lfb lgreek lh lhcyr lhelp
libertine libertinegc libertinus libertinust1math
libgreek librarian librebaskerville librebodoni librecaslon
libris lilyglyphs limap linearA linegoal
lineno ling-macros linguex linop
lipsum lisp-on-tex
listbib listing listings listings-ext listlbls listliketab
listofitems listofsymbols
lithuanian liturg lkproof lm lm-math lmake lobster2
locality localloc logbox logical-markup-utils logicproof logicpuzzle
logpap logreq lollipop
longdivision longfbox longfigure longnamefilelist loops
lpform lpic lplfitch lps
lroundrect lsc
lshort-bulgarian lshort-chinese lshort-czech lshort-dutch lshort-english
lshort-estonian lshort-finnish lshort-french lshort-german lshort-italian
lshort-japanese lshort-korean lshort-mongol lshort-persian
lshort-polish lshort-portuguese lshort-russian lshort-slovak
lshort-slovenian lshort-spanish lshort-thai lshort-turkish lshort-ukr
lshort-vietnamese lstaddons lstbayes lt3graph ltablex ltabptch
ltxdockit ltxfileinfo ltximg ltxindex ltxkeys ltxmisc ltxnew ltxtools
lua-alt-getopt lua-check-hyphen lua-visual-debug
lua2dox luabibentry luabidi luacode luahyphenrules
luaindex luainputenc luaintro lualatex-doc lualatex-doc-de
lualatex-math lualibs
luamplib luaotfload
luasseq luatex85 luatexbase luatexja luatexko luatextra
luatodonotes luaxml
lxfonts ly1
m-tx macros2e macroswap mafr magaz mailing mailmerge
make4ht makebarcode makebase makebox makecell makecirc makecmds
makedtx makeglos makeplot
makeshape mandi manfnt manfnt-font manuscript margbib
marginfix marginnote markdown marvosym
matc3 matc3mem match_parens
math-e math-into-latex-4 mathabx mathabx-type1 mathalfa mathastext
mathcomp mathdesign mathdots mathexam mathpartir
mathspec mathtools matlab-prettifier mathspic maths-symbols
mattens maybemath mbenotes
mcaption mceinleger mcf2graph mcite mciteplus mcmthesis
mdframed mdputu mdsymbol mdwtools media9 medstarbeamer
meetingmins memdesign memexsupp
memoir MemoirChapStyles memory mendex-doc mentis
menu menukeys merriweather
metafont-beginners metago metalogo metaobj metaplot
metapost-examples metatex metatype1 metauml
method metre metrix
mf2pt1 mfirstuc mflogo mflogo-font mfnfss mfpic mfpic4ode mftinc
mgltex mhchem
mhequ miama microtype microtype-de midnight midpage miller milog
minibox minifp minipage-marginpar miniplot minitoc minorrevision
minted mintspirit minutes missaali
mkgrkindex mkjobtexmf mkpattern mkpic
mla-paper mlist mmap mnotes mnras mnsymbol
moderncv moderntimeline modiagram modref modroman
mongolian-babel montserrat
monofill montex moodle
moreenum morefloats morehype moresize
moreverb morewrites movie15 mp3d
mparhack mparrows mpattern mpcolornames mpgraphics
mpman-ru mpostinl mptopdf ms msc msg mslapa msu-thesis mtgreek
mugsthesis multenum multiaudience multibbl multibib multibibliography
multicap multienv multiexpand multirow
multidef multido multiobjective munich musixguit
musixtex musixtex-fonts musixtnt musuos muthesis
mversion mwcls mwe mweights mxedruli
mychemistry mycv mylatexformat mynsfc
nag nameauth namespc nanumtype1 nar natbib natded nath nature
navigator navydocs
ncclatex ncctools
nddiss ndsu-thesis needspace nestquot neuralnetwork nevelok
newcommand newenviron newfile newlfm newpx newsletr newspaper
newtx newtxsf newtxtt newunicodechar newvbtm
newverbs nextpage
nfssext-cfr niceframe nicefilelist nicetext nih nihbiosketch
nimbus15 nkarta nlctdoc
nmbib noconflict nodetree noindentafter noitcrul nolbreaks
nomencl nomentbl nonfloat nonumonpart nopageno norasi-c90 normalcolor
nostarch notes notes2bib notespages notex-bst noto notoccite nowidow nox
nrc ntgclass ntheorem ntheorem-vn nuc nucleardata
numberedblock numericplots numname numprint nwejm
oberdiek objectz obnov
ocg-p ocgx ocgx2 ocherokee ocr-b ocr-b-outline ocr-latex octavo
odsfile ofs
ogham oinuit old-arrows oldlatin oldstandard
oldstyle olsak-misc
onlyamsmath onrannual opcit opensans oplotsymbl
opteng optidef optional options
ordinalpt orkhun oscola ot-tableau othello othelloboard
oubraces outline outliner outlines overlays overlock overpic
pacioli padauk pagecolor pagecont pagenote pagerange pageslts
paper papercdcase papermas papertex
paracol parades paralist parallel paratype
paresse parnotes parrun parselines parskip
pas-cours pas-crosswords pas-cv pas-tableur passivetex
patch patchcmd patgen2-tutorial path pauldoc pawpict pax
pbibtex-base pbox pb-diagram pbsheet
pdf14
pdf-trans pdfbook2 pdfcomment pdfcprot pdfcrop pdfjam
pdflatexpicscale pdfmarginpar
pdfpagediff pdfpages pdfscreen pdfslide pdfsync
pdftricks pdftricks2 pdfx pdfxup
pecha pedigree-perl perception perfectcut perltex
permute persian-bib
petiteannonce petri-nets pfarrei
pgf pgf-blur pgf-soroban pgf-spectra pgf-umlcd pgf-umlsd
pgfgantt pgfkeyx pgfmolbio
pgfopts pgfornament pgfplots
phaistos phffullpagefigure phfnote phfparen phfqit phfquotetext
phfsvnwatermark phfthm
philex philokalia philosophersimprint
phonenumbers phonetic phonrule photo physics piano picinpar pict2e
pictex pictex2 pictexsum piechartmp piff pigpen
pinlabel pitex pittetd pkfix pkfix-helper pkgloader pkuthss
pl placeat placeins placeins-plain
plain-doc plainpkg plari plantslabels plates
platex platex-tools platexcheat play playfair plipsum
plnfss plstmary plweb pmgraph pmx pmxchords pnas2009
poemscol poetrytex polski poltawski
polyglossia polynom polynomial
polytable postcards poster-mac powerdot powerdot-FUBerlin
ppr-prv pracjourn preprint prerex present presentations presentations-en
pressrelease prettyref preview prftree printlen proba probsoln procIAGssymp
prodint productbox program
progress progressbar proofread prooftrees proposal properties
prosper protex protocol przechlewski-book
psbao pseudocode psfrag psfrag-italian psfragx
psgo psizzl pslatex psnfss pspicture
pst-2dplot pst-3d pst-3dplot pst-abspos pst-am pst-arrow pst-asr pst-bar
pst-barcode pst-bezier pst-blur pst-bspline
pst-calendar pst-cie pst-circ pst-coil pst-cox pst-dbicons pst-diffraction
pst-electricfield pst-eps pst-eucl pst-eucl-translation-bg pst-exa
pst-fill pst-fit pst-fr3d pst-fractal pst-fun pst-func
pst-gantt pst-geo pst-gr3d pst-grad pst-graphicx
pst-infixplot pst-intersect pst-jtree pst-knot pst-labo pst-layout
pst-lens pst-light3d pst-magneticfield pst-math pst-mirror pst-node
pst-ob3d pst-ode pst-optexp pst-optic
pst-osci pst-ovl
pst-pad pst-pdgr pst-perspective
pst-platon pst-plot pst-poly pst-pdf pst-pulley
pst-qtree pst-rubans
pst-shell pst-sigsys pst-slpe pst-solarsystem pst-solides3d pst-soroban
pst-spectra pst-spirograph
pst-stru pst-support pst-text pst-thick pst-tools pst-tree pst-tvz pst-uml
pst-vectorian pst-vowel pst-vue3d
pst2pdf pstool pstricks pstricks-add pstricks_calcnotes pstring
psu-thesis ptex-base ptex-fontmaps ptex-fonts ptex2pdf ptext ptptex
punk punk-latex punknova purifyeps pxbase
pxchfon pxcjkcat pxfonts pxgreeks pxjahyper
pxpgfmark pxrubrica pxtatescale pxtxalfa pygmentex python pythontex
qcircuit qcm qobitree qrcode qstest qsymbols qtree
quattrocento quicktype quotchap quoting quotmark quran
r_und_s raleway ran_toks randbild randomlist randomwalk randtext
rccol rcs rcs-multi rcsinfo
readarray realboxes realscripts rec-thy
recipe recipebook recipecard recycle rectopma
refcheck refenums reflectgraphics refman refstyle
regcount regexpatch register regstats
reledmac relenc relsize reotex repeatindex repere repltext resphilosophica
resumecls resumemac reverxii revquantum revtex
ribbonproofs rjlparshap rlepsf rmathbr rmpage
roboto robustcommand robustindex
romanbar romanbarpagenumber romande romanneg romannum
rosario rotfloat rotpages roundbox roundrect
rrgtrees rsc rsfs rsfso
rterface rtkinenc rtklage rubik ruhyphen rulercompass russ
rviewport rvwrite ryethesis
sa-tikz sageep sanitize-umlaut
sanskrit sanskrit-t1 sansmath sansmathaccent sansmathfonts
sapthesis sasnrdisplay sauerj
sauter sauterfonts savefnmark savesym savetrees
scale scalebar scalerel scanpages
schemabloc schemata sclang-prettifier schule schulschriften schwalbe-chess
sciposter screenplay screenplay-pkg scrjrnl scrlttr2copy scsnowman
sdrt sduthesis
secdot section sectionbox sectsty seealso
selectp selnolig semantic semantic-markup semaphor
seminar semioneside semproc sepfootnotes sepnum seqsplit
serbian-apostrophe serbian-date-lat serbian-def-cyr serbian-lig
sesamanuel setdeck setspace seuthesis seuthesix
sf298 sffms sfg
sfmath sgame shade shadethm shadow shadowtext shapepar shapes
shdoc shipunov shorttoc
show2e showcharinbox showdim showexpl showhyphens showlabels showtags
shuffle
sidecap sidenotes sides signchart silence
simple-resume-cv simple-thesis-dissertation simplecd simplecv
simpler-wick simplewick simplified-latex simurgh
sitem siunitx
skak skaknew skb skdoc skeycommand skeyval skmath skrapport skull
slantsc slideshow smalltableof smartdiagram smartref smartunits
snapshot snotez
songbook songs sort-by-letters soton soul soup sourcecodepro sourcesanspro
sourceserifpro
spalign spanish-mx sparklines spath3 spelling spie
sphack sphdthesis splines splitbib splitindex
spot spotcolor spreadtab spverbatim
sr-vorl srbook-mem srcltx srcredact sseq sslides
stack stackengine stage standalone stanli starfont startex
statistik statex statex2 staves
stdclsdv stdpage steinmetz
stellenbosch stex stix stmaryrd storebox storecmd stringstrings struktex
sttools stubs sty2dtx suanpan subdepth subeqn subeqnarray
subfig subfigmat subfigure subfiles subfloat substances
substitutefont substr subsupscripts
sudoku sudokubundle suftesi sugconf
superiors supertabular susy svg svg-inkscape svgcolor
svn svn-multi svn-prov svninfo svrsymbols
swebib swimgraf syllogism sympytexpackage syntax synproof syntrace synttree
systeme
t-angles t2
tabfigures table-fct tableaux tablefootnote tableof tablestyles
tablists tablor tabls
tabriz-thesis tabstackengine tabto-generic tabto-ltx
tabu tabularborder tabularcalc tabularew
tabulars-e tabulary tabvar tagging tagpair talk tamefloats
tamethebeast tap tapir tasks tcldoc tcolorbox tdclock tdsfrmath
technics ted templates-fenn templates-sommer templatetools tempora
tengwarscript
tensor termcal termlist termmenu testhyphens testidx teubner
tex-ewd tex-font-errors-cheatsheet tex-gyre tex-gyre-math tex-ini-files
tex-label tex-overview tex-ps tex-refs tex-virtual-academy-pl
tex4ebook texapi texbytopic texcount
texdef texdiff texdirflatten texdraw texfot texilikechaps texilikecover
texliveonfly texloganalyser texlogos texmate texments
texosquery texpower texproposal texshade texvc
textcase textfit textglos textgreek textmerg textopo textpath textpos
tfrupee thalie theoremref thesis-ekf thesis-titlepage-fhac
thinsp thmbox thmtools threadcol threeddice threeparttable threeparttablex
thumb thumbpdf thumbs thumby thuthesis
ticket ticollege
tikz-bayesnet tikz-cd tikz-3dplot tikz-dependency tikz-dimline
tikz-feynman tikz-inet tikz-kalender
tikz-opm tikz-optics tikz-palattice tikz-qtree tikz-timing
tikzinclude tikzmark tikzorbital
tikzpagenodes tikzpeople tikzpfeile tikzposter tikzscale tikzsymbols
timetable timing-diagrams tinos tipa tipa-de tipfr
titlecaps titlefoot titlepages titlepic titleref titlesec titling
tkz-base tkz-berge tkz-doc tkz-euclide tkz-fct tkz-graph
tkz-kiviat tkz-linknodes tkz-orm tikz-page tkz-tab
tlc2
tocbibind tocdata tocloft tocvsec2 todo todonotes
tokenizer toolbox tools topfloat totcount totpages toptesi
tpslifonts tqft
tracklang trajan tram
translation-array-fr
translation-arsclassica-de translation-biblatex-de translation-chemsym-de
translation-dcolumn-fr
translation-ecv-de translation-enumitem-de translation-europecv-de
translation-filecontents-de translation-moreverb-de
translation-natbib-fr translation-tabbing-fr
translations
tree-dvips treetex trfsigns
trigonometry trimspaces trivfloat trsym truncate
tsemlines
tucv tudscr tufte-latex tugboat tugboat-plain
tui turabian turabian-formatting turkmen turnstile turnthepage
twoinone twoup
txfonts txfontsb txgreeks
type1cm typed-checklist typeface typehtml typeoutfileinfo typicons typogrid
uaclasses uafthesis uantwerpendocs uassign
ucharcat ucharclasses ucbthesis ucdavisthesis ucs
ucthesis udesoftec uebungsblatt uestcthesis
uhrzeit uiucredborder uiucthesis
ukrhyph ulem ulqda ulthese
umbclegislation umich-thesis uml umlaute umoline
umthesis umtypewriter
unamth-template unamthesis
undergradmath underlin underoverlap underscore undolabl
unfonts-core unfonts-extra
uni-wtal-ger uni-wtal-lin unicode-data unicode-bidi unicode-math unisugar
units unitsdef universa universalis
unravel unswcover
uothesis uowthesis uowthesistitlepage
upca uplatex upmethodology uppunctlm upquote
uptex-base uptex-fonts
uri url urlbst urcls urwchancal usebib ushort uspace uspatent
ut-thesis utf8mex uwmslide uwthesis
vak vancouver variations varindex varisize
varsfromjobname varwidth vaucanson-g vdmlisting
velthuis venn venndiagram venturisadf
verbasef verbatimbox verbatimcopy verbdef
verbments verse version versions versonotes vertbars vgrid
vhistory visualfaq visualpstricks visualtikz
vmargin vntex vocaltract volumes
voss-mathcol
vpe vruler vwcol
wadalab wallpaper warning warpcol was wasy wasy2-ps wasysym webguide
widetable williams withargs
wnri wnri-latex wordcount wordlike
wrapfig wsemclassic wsuipa wtref
xargs xassoccnt xcharter xcite xcjk2uni xcntperchap
xcolor xcolor-material xcolor-solarized
xcomment xcookybooky xdoc xduthesis
xebaposter xecjk xecolor xecyr xeindex xellipsis
xepersian xesearch xespotcolor
xetex-devanagari xetex-itrans xetex-pstricks xetex-tibetan
xetexfontinfo xetexko
xetexref xevlna xfor xgreek xhfill
xii xifthen xint xits
xkeyval xlop xltxtra xmltex xmpincl xnewcommand
xoptarg xpatch xpeek xpiano xpicture xpinyin xprintlen xpunctuate
xq xsavebox xskak xstring xtab xunicode
xwatermark xyling xymtex xypic xypic-tut-pt xytree
yafoot yagusylo yaletter yannisgr yathesis yax
ycbook ydoc yfonts yfonts-t1 yhmath
yinit-otf york-thesis youngtab yplan ytableau
zed-csp zhnumber ziffer zhmetrics zhmetrics-uptex zhspacing zlmtt
zwgetfdate zwpagelayout
zxjafbfont zxjafont zxjatype
);
# these packages we do not expect to check. Once this list is complete,
# we can start working on tlmgr list | grep shortdesc.
my @TLP_no_check = (
"afm2pl", # not on ctan
"aleph", # binary
"asymptote", # binary
"autosp", # binary
"bibtex", # binary
"bibtex8", # binary
"bibtexu", # binary
"chktex", # binary
"cjkutils", # binary
"cns", # old unchanging font under CJK on ctan
"context", # binary+taco/mojca
"cs", # multiple .tar.gz, too painful to unpack
"ctib", # binary
"ctie", # binary
"cweb", # binary
"cyrillic-bin", # binary
"detex", # binary
"devnag", # binary
"dtl", # binary
"dvi2tty", # binary
"dvicopy", # binary
"dvidvi", # binary
"dviljk", # binary
"dvipdfm", # binary
"dvipdfmx", # binary
"dvipng", # binary
"dvipos", # binary
"dvips", # binary
"dvisvgm", # binary
"enctex", # binary
"etex", # binary
"euxm", # knuth, old, not on ctan
"finbib", # not on ctan
"fontname", # tl-update-auto
"fontware", # binary
"glyphlist", # not on ctan, handled in tlpkg/dev/srclist.txt
"gnu-freefont", # no files to compare, distributed as tarballs
"groff", # binary
"gsftopk", # binary
"gustlib", # not on ctan, requested from gust
"gustprog", # not on ctan, gust
"guide-to-latex", # not on ctan, book examples, ok
"hyperref-docsrc", # not on ctan, awaiting hyperref doc volunteer
"ifluatex", # part of oberdiek
"jadetex", # too old to owrry about
"jmn", # part of context
"kluwer", # not on ctan, old lppl, not worth pursuing or removing
"kpathsea", # binary
"lacheck", # binary
"lambda", # not on ctan, too old to worry about
"latex-bin", # binary
"latexconfig", # we maintain
"lcdftypetools", # binary
"luatex", # binary
"makeindex", # binary
"metafont", # binary
"metapost", # binary
"mex", # gust, requested 2013
"mflua", # binary
"mfware", # binary
"mltex", # binary
"omega", # binary
"omegaware", # binary
"otibet", # not on ctan, too old to worry about
"patgen", # binary
"pdftex", # binary
"pdftools", # binary
"pdfwin", # not on ctan, too old to worry about
"plain", # mostly our .ini files, plus well-known plain.tex
"powerdot", # stale generated files on ctan
"ps2pk", # binary
"pst-ghsb", # not on ctan, replaced by pst-slpe, keep for compat
"pstools", # binary
"psutils", # binary
"ptex", # binary
"qpxqtx", # gust, requested feb 2013
"revtex4", # APS declines to keep compatibility, but we have to
"roex", # gust, requested 2012
"seetexk", # binary
"synctex", # binary
"t1utils", # binary
"tds", # stable, don't worry until next update
"tetex", # we maintain
"tex", # binary
"tex4ht", # binary
"texconfig", # we maintain
"texdoc", # binary
"texinfo", # tl-update-auto
"texlive.infra", # binary
"texsis", # too old to worry about
"texware", # binary
"texworks", # binary
"tie", # binary
"tlaunch", # w32 siep binary
"ttfutils", # binary
"tpic2pdftex", # ctan mirrors from us
"updmap-map", # autogenerated map files
"uhc", # big tar files from 2005, don't worry until update
"uptex", # binary
"vlna", # binary
"web", # binary
"xdvi", # binary
"xetex", # binary
"xetexconfig", # we maintain
"xindy", # binary
"xmltexconfig", # we maintain
);
exit (&main ());
sub main {
chomp ($Master = `cd $mydir/../.. && pwd`);
$tlpdb = TeXLive::TLPDB->new ("root" => $Master);
die "Cannot find tlpdb in $Master!" unless defined $tlpdb;
$OPT{"verbose"} = 0;
if ($ARGV[0] eq "--verbose" || $ARGV[0] eq "-v") {
$OPT{"verbose"} = 1;
shift @ARGV;
}
$OPT{"all"} = 0;
if ($ARGV[0] eq "--all") {
$OPT{"all"} = 1;
shift @ARGV;
}
$OPT{"no-clean"} = 0;
if ($ARGV[0] eq "--no-clean") {
$OPT{"no-clean"} = 1;
shift @ARGV;
}
if ($ARGV[0] eq "--list-not-treated") {
my @not_checked = ();
for my $b (&normal_tlps ()) {
if (! grep ($b eq $_, @TLP_working, @TLP_no_check)) {
push (@not_checked, $b);
}
}
print "" . (@not_checked+0) . " TL packages not checked against CTAN:\n";
print "@not_checked\n";
@ARGV = (); # no normal checks
} elsif ($ARGV[0] eq "--check") {
# check all/only those packages we have actually run through this mill.
@ARGV = @TLP_working;
} elsif ($ARGV[0] eq "--check-all") {
@ARGV = &normal_tlps ();
}
my $errcount = 0;
for my $tlp (@ARGV) {
print "checking $tlp..." if $OPT{"verbose"};
$errcount += &do_tlp ($tlp);
}
return $errcount;
}
# gives a list with only the 'normal' packages,
# that is, excluding meta-packages and binary packages
# (and hyphen for the moment)
#
sub normal_tlps {
my @normal;
my $non_normal = `ls $Master/bin`;
$non_normal =~ s/\n/\$|/g;
$non_normal .= '^0+texlive|^bin-|^collection-|^scheme-|^texlive-|^hyphen-';
foreach ($tlpdb->list_packages) {
push (@normal, $_) unless (/$non_normal/);
}
return @normal;
}
# Return 1 if package TLPN needs updating (or error), 0 if ok.
#
sub do_tlp {
my ($tlpn) = @_;
my $needed = 0;
my $tlp = $tlpdb->get_package($tlpn);
if (!defined($tlp)) {
warn "$0: no package $tlpn\n";
return 1;
}
chomp (my $ctan_dir = `$mydir/tlpkginfo --prepare '$tlpn'`);
if (! $ctan_dir) {
warn "$0: oops, no CTAN directory for $tlpn, fix fix\n";
return 1;
}
# csplain and cslatex have .tar.gz's that need to be unpacked for
# comparison. (perhaps this should be done in tlpkginfo.) but don't
# do any unpacking inside the ctan hierarchy.
chomp (my $ctan_root = `$mydir/tlpkginfo --ctan-root`);
if ($ctan_dir !~ m,^$ctan_root,) {
for my $tgz (glob ("$ctan_dir/*.tar.gz")) {
system ("tar -C $ctan_dir -xf $tgz");
}
}
# One more total kludge. We should probably put this into tlpkginfo
# and factor it out from here and ctan2tds.
if ($tlpn eq "cs") {
$TMPDIR = $ENV{"TMPDIR"} || "/tmp";
my $pkgdir = "$TMPDIR/tl.$pkgname";
system ("rm -rf $pkgdir");
mkdir ($pkgdir, 0777) || die "mkdir($pkgdir) failed: $!";
#
# unpack the multiple constituent tarballs.
for my $tarbase ("csfonts-t1", "csfonts", "cspsfonts") {
system ("tar -C $pkgdir -xf $ctan_dir/$tarbase.tar.gz");
}
# look in the new dir we just created.
$ctan_dir = $pkgdir;
}
my @tl_files = ();
push @tl_files, $tlp->runfiles;
push @tl_files, $tlp->docfiles;
push @tl_files, $tlp->srcfiles;
if ($tlp->relocated) { for (@tl_files) { s:^$RelocPrefix/:$RelocTree/:; } }
# we don't push bin files.
my @tl_basefiles = (); # compare with CTAN after the loop
my @compared = ();
for my $file (@tl_files) {
(my $basefile = $file) =~ s,^.*/,,;
# if file exists by multiple names in TL (e.g., README), only check
# the first one we come across, since we'll only find the first one
# on CTAN and we don't want to try to match subdir suffixes.
next if grep { $_ eq $basefile } @tl_basefiles;
#warn "checking tl file $file -> $basefile\n";
push (@tl_basefiles, $basefile);
# No point in comparing our pdfs now, too many are different.
# However, for lshort translations and mathdesign, pdf can be
# all we have to compare.
next if $file =~ /\.pdf$/ && $file !~ /short|mathdesign/;
# knuth.tds.zip (from latex-tds) is wrong wrt to the actual
# originals, which we installed by hand. Don't check them until fixes.
next if $file =~ m,/(mf84.bug|tex82.bug|errorlog.tex)$,;
# We install our own stub, not ConTeXt's. I guess.
next if $basefile eq "mptopdf.exe";
# btxmac.tex symlinked on CTAN, but we may as well keep the copy
# actually used in lollipop in TL (doc tree).
next if $basefile eq "btxmac.tex" && $file =~ m,/lollipop/,;
# Wrong README gets compared.
next if $basefile eq "README" && $file =~ m,/(pmx|cs)/,;
my $tl_file = "$Master/$file";
if (! -e $tl_file) {
warn "$tl_file: TL file missing\n";
next;
}
chomp (my @ctan_files = `find $ctan_dir/ -name $basefile`);
#warn "ctan find $basefile: @ctan_files\n";
# the trailing / is so we dereference a symlink on CTAN.
next if @ctan_files > 1; # if more than one file by same name, skip
my $ctan_file = $ctan_files[0];
#warn "ctan file is $ctan_file\n";
if (! -e $ctan_file) {
# maybe it'll be there with a case change in the name
chomp (@ctan_files = `find $ctan_dir/ -iname $basefile`);
#warn "ctan ifind $basefile: @ctan_files\n";
next if @ctan_files > 1; # if more than one file by same name, skip
$ctan_file = $ctan_files[0];
if (! -e $ctan_file) {
# we generate lots of files, eg perlmacros.sty, so might skip.
warn "$ctan_file: CTAN file missing\n"
if $ctan_file && $ctan_file !~ /(cfg|dvi|sty|tex)$/;
next;
}
}
push (@compared, $basefile);
if (&files_differ ($tl_file, $ctan_file)) {
print "# $tlpn\ndiff $ctan_file $tl_file\n";
$needed = 1;
last unless $OPT{"all"};
}
}
# unfortunately, we cannot do this. There are many PDF's on CTAN
# which have no sources or otherwise problematic for TL. Perhaps one
# day we could use the %moreclean hash from ctan2tds as an additional
# filter, i.e., put all those ctan2tds tables in an external file.
#
# # check for PDF files on CTAN that we don't have.
# my @ctan_pdf_needed = ();
# chomp (my @ctan_files = `find $ctan_dir -name \*.pdf`);
# for my $cfile (@ctan_files) {
# (my $base_cfile = $cfile) =~ s,^.*/,,;
# if (! grep { $_ eq $base_cfile } @tl_basefiles) {
# push (@ctan_pdf_needed, $base_cfile);
# }
# }
# if (@ctan_pdf_needed) {
# if (! $needed) {
# # if this is the first thing needed (no diffs), print package name.
# print "# $tlpn\n";
# $needed = 1;
# }
# print "# new on ctan: @ctan_pdf_needed\n";
# }
if (@compared == 0) {
warn "\n$tlpn: no files to compare in $ctan_dir, fixme!\n";
warn " (tl_files = @tl_files)\n";
warn " (ctan_files = @ctan_files)\n";
} elsif ($needed == 0) {
print "ok\n" if $OPT{"verbose"};
}
print ((@compared + 0) . " compared (@compared)\n") if $OPT{"verbose"};
# clean up the tmpdir possibly created from tlpkginfo --prepare.
chomp (my $ctan_root = `$mydir/tlpkginfo --ctan-root`);
if ($ctan_dir !~ m,^$ctan_root, && ! $OPT{"no-clean"}) {
system ("rm -rf $ctan_dir");
}
return $needed;
}
# 0 if files are the same, 1 if they are different.
#
sub files_differ {
my ($tl_file,$ctan_file) = @_;
#warn "comparing $ctan_file $tl_file\n";
return system ("$mydir/cmp-textfiles $ctan_file $tl_file");
}
# vim: set ts=8 sw=2 expandtab:
|