summaryrefslogtreecommitdiff
path: root/Master/tlpkg/bin/tlpkg-ctan-check
blob: 708547b81015e03ae3854258e86372606319f8bd (plain)
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
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
#!/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 abnt abntex2 abraces abstract abstyles
    academicons accanthis accfonts achemso
    acmart acmconf acro acronym acroterm
    active-conf actuarialangle actuarialsymbol
    addfont addlines adfathesis adforn adhocfilelist adigraph
    adjmulticol adfsymbols adjustbox adobemapping
    adrconv adtrees advdate
    ae aecc aeguill afparticle afthesis
    aguplus aiaa aichej ajl akktex akletter alegreya alertmessage
    alg algobox algolrevived algorithm2e algorithmicx algorithms
    aligned-overset
    alkalami allrunes almfixed alnumsec alterqcm
    altfont ametsoc amiri amsaddr amscls amscls-doc 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 ascmac
    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
    auto-pst-pdf-lua autobreak autopdf
    authoraftertitle authorarchive authorindex
    auto-pst-pdf autoaligne autoarea automata autonum autosp avantgar avremu
    awesomebox axessibility axodraw2
  b1encoding babel
    babel-albanian babel-azerbaijani 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-indonesian babel-interlingua
    babel-irish babel-italian babel-japanese
    babel-kurmanji babel-latin babel-latvian babel-macedonian babel-malay
    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 bath-bst
    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-focus
    beamertheme-metropolis beamertheme-npbt
    beamertheme-phnompenh beamertheme-saintpetersburg beamertheme-upenn-bc
    beamerthemejltree
    beamerthemenirma
    beebe begingreek begriff beilstein belleek bengali
    bera berenisadf besjournals bestpapers betababel beton beuron
    bewerbung bez123 bezierplot bezos bgreek bgteubner bguq bhcexam
    bib-fr bib2gls bibarts biber bibhtml
    biblatex biblatex-abnt biblatex-anonymous biblatex-apa
    biblatex-archaeology biblatex-arthistory-bonn
    biblatex-bookinarticle biblatex-bookinother biblatex-bwl
    biblatex-caspervector biblatex-cheatsheet biblatex-chem
    biblatex-chicago biblatex-claves
    biblatex-dw biblatex-enc biblatex-ext
    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-oxref
    biblatex-philosophy biblatex-phys biblatex-publist
    biblatex-realauthor biblatex-sbl biblatex-science biblatex-shortfields
    biblatex-socialscienceshuberlin
    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 biochemistry-colors biocon biolett-bst
    bitelist bitpattern bizcard
    blacklettert1 blindtext blkarray
    blochsphere block blockdraw_mp bloques blowup blox
    bnumexpr bodegraph bohr boisik bold-extra
    boites boldtensors bondgraph bondgraphs
    bookcover bookdb bookest bookhands booklet bookman
    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 bredzenie breqn bropd brushscr
    bullcntr bundledoc burmese businesscard-qrcode bussproofs
    bxbase bxcalc bxcjkjatype bxdpx-beamer bxdvidriver
    bxjaprnind bxpapersize bxpdfver bxeepic bxenclose
    bxjalipsum bxjscls bxnewfont bxorigcapt bxtexlogo bytefield 
  c90 c-pascal cabin cachepic caladea calcage calctab calculation calculator
    calligra calligra-type1 callouts calrsfs cals calxxxx-yyyy cancel
    canoniclayout cantarell
    capt-of captcont captdef caption carbohydrates carlisle carlito carolmin-ps
    cascade cascadilla cases casyl
    catchfilebetweentags catcodes catechis catoptions
    cbcoptic cbfonts cbfonts-fd
    cc-pl ccaption ccfonts ccicons cclicenses
    cd cd-cover cdpbundl
    cell cellprops cellspace celtic censor cesenaexam cfr-initials cfr-lm
    changebar changelayout changepage changes chappg chapterfolder charter
    chbibref cheatsheet checkcites checklistings chem-journal
    chemarrow chembst chemcompounds chemcono chemexec
    chemfig chemformula chemgreek chemmacros
    chemnum chemschemex chemsec chemstyle cherokee
    chess chess-problem-diagrams chessboard chessfss chet chextras
    chicago chicago-annote chickenize childdoc chivo
    chkfloat chletter chngcntr chronology
    chronosys chs-physics-report chscite churchslavonic
    cinzel circ circuitikz
    cite citeall citeref cje cjhebrew cjk cjk-gs-integrate cjk-ko cjkpunct
    classics classpack classicthesis
    cleanthesis clearsans clefval cleveref clipboard
    clock cloze clrdblpg clrscode clrscode3e clrstrip
    cm cm-lgc cm-mf-extra-bold cm-super cm-unicode
    cmap cmarrows cmbright cmcyr
    cmdstring cmdtrack cmexb cmextra cmll cmpica cmpj cmsd cmsrb cmtiup
    cnbwp cnltx cntformats cntperchap
    cochineal codedoc codepage codesection codicefiscaleitaliano
    coelacanth collcell collectbox collref
    colophon colordoc colorinfo coloring colorsep colorspace colortab
    colortbl colorwav colorweb colourchange
    combelow combine combinedgraphics combofont comfortaa comicneue
    comma commado commath comment
    compactbib competences
    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-handlecsv 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 correctmathalign coseoul
    countriesofeurope counttexruns courier courier-scaled
    courseoutline coursepaper
    coverpage covington
    cprotect cqubeamer cquthesis
    crbox crimson crop
    crossreference crossreftools crossrefware crossword crosswrd
    cryptocode cryst
    cs csbulletin cslatex csplain csquotes csquotes-de
    css-colors cstypo csvsimple cstex
    ctan-o-mat ctan_chk ctanbib ctanify ctanupload
    ctable ctablestack ctex ctex-faq
    cursolatex cuisine
    currency 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 dehyph-exptl
    dejavu dejavu-otf
    delim delimseasy delimset delimtxt denisbdoc dhua
    diadia diagbox diagmac2 dialogl diagnose dice dichokey
    dickimaw dictsym diffcoeff digiconfigs dijkstra din1505
    dinat dinbrief dingbat directory dirtree dirtytalk disser dithesis
    dk-bib dlfltxb
    dnaseq dnp doc-pictex docbytex doclicense
    docmfp docmute docsurvey doctools documentation
    doi doipubmed
    dosepsbin dot2texi dotarrow dotseqn dottex
    doublestroke dowith download dox dozenal dpfloat dprogress
    drac draftcopy draftfigure
    draftwatermark dramatist dratex drawmatrix drawstack
    drm droid droit-fr drs drv dsptricks dsserif
    dtk dtxdescribe dtxgallery dtxgen
    dtxtut ducksay duckuments duerer duerer-latex duotenzor dutchcal
    dvdcoll dvgloss dviasm dviincl dviinfox
    dvipsconfig dynamicnumber dynblocks dynkin-diagrams dyntree
  e-french ean ean13isbn easy easy-todo easyfig easyformat easylist easyreview
    ebezier ebgaramond ebgaramond-maths ebong ebook ebproof ebsthesis
    ec ecc ecclesiastic ecltree eco ecobiblatex econometrics economic ecothesis
    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 endnotesj endofproofwd
    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 eqnalign eqname eqnarray eqnnumwarn eqparbox
    erdc erewhon errata erw-l3
    esami es-tex-faq 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 etsvthor
    euenc eukdate
    euler eulerpx eulervm euro euro-ce europasscv europecv eurosym
    everyhook everypage
    exam exam-n examdesign example examplep
    exceltex excludeonly exercise exercisebank exercises exp-testopt
    expdlist expex export expressg exsheets exsol extarrows exteps
    extpfeil extract extsizes
  facsimile factura facture faktor
    fancybox fancyhandout fancyhdr fancyhdr-it fancylabel fancynum fancypar
    fancyref fancyslides fancytabs fancytooltips fancyvrb fandol
    FAQ-en fast-diagram fbb fbithesis fbs
    fc fcavtex fcltxdoc fcolumn fdsymbol fduthesis featpost fei fenixpar
    fetamont fetchcls 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 fixjfm 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 fnspe fntproof fnumprint
    foekfont foilhtml fonetika
    font-change font-change-xetex
    fontawesome fontawesome5 fontaxes fontbook fontch fontinst
    fontloader-luaotfload 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 forms16be 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 gatherenum gauss
    gb4e gbt7714 gcard gchords gcite
    gender geschichtsfrkl genealogy genealogytree gene-logic
    genmisc genmpage gentium-tug gentle gentombow geometry geometry-de
    german germbib germkorr
    getfiledate getitems getmap getoptk gfnotation
    gfsartemisia gfsbaskerville gfsbodoni gfscomplutum gfsdidot
    gfsneohellenic gfsneohellenicmath
    gfsporson gfssolomos
    ghab ghsystem gillcm gillius gincltex ginpenc
    gitfile-info gitinfo gitinfo2 gitlog
    gloss glossaries
    glossaries-danish glossaries-dutch glossaries-english glossaries-extra
    glossaries-finnish 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 gotoh
    gradientframe gradstudentresume grafcet grant graph35 graphbox graphics
    graphics-cfg graphics-def graphics-pln
    graphicx-psmin graphicxbox graphicxpsd
    graphviz grayhints greek-fontenc greek-inputenc
    greekdates greektex greektonoi greenpoint gregoriotex grfpaste
    grid grid-system gridset gridslides grotesq grundgesetze
    gsemthesis gtl gtrlib-largetrees gtrcrd
    gu guitar guitarchordschemes guitartabs guitlogo gzt
  h2020proposal hackthefootline hacm hagenberg-thesis halloweenmath
    handin handout hands hang hanging hanoi
    happy4th har2nat hardwrap harmony harnon-cv harpoon
    harvard harveyballs harvmac hatching hausarbeit-jura havannah
    hc he-she hecthese helvetic hep hepnames
    hepparticles hepthesis hepunits here heuristica hexgame
    hf-tikz hfbright hfoldsty
    hhtensor histogr historische-zeitschrift hitec hithesis hletter hlist
    hobby hobete hook-pre-commit-pkg horoscop
    hpsdiss hrefhide hrlatex hulipsum hustthesis hvfloat hvindex
    hypdvips hyper hyperbar 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 ifptex ifsym
    iftex ifthenx ifxetex ifxptex
    iitem ijmart ijqc ijsra
    imac image-gallery imakeidx impatient impatient-cn impatient-fr
    imfellenglish impnattypo import imsproc imtekda
    incgraph includernw inconsolata index indextools
    initials inline-images inlinebib inlinedef
    inputtrc insbox installfont
    interactiveworkbook interchar interfaces interpreter interval intopdf
    intro-scientific
    inversepath invoice invoice2
    ionumbers iopart-num ipaex ipaex-type1 iscram iso
    iso10303 isodate isodoc isomath isonums isopt isorot isotope
    issuulinks istgame itnumpar
    iwhdp iwona
  jablantile jacow jamtimes japanese-otf japanese-otf-uptex jfmutil jigsaw
    jknapltx jkmath jlabels jlreq jmlr jneurosci jnuexam jpsj jsclasses
    jslectureplanner jumplines junicode
    jura juraabbrev jurabib juramisc jurarsp js-misc jvlisting
  kanaparser kantlipsum karnaugh karnaugh-map karnaughmap kastrup
    kdgdocs kerkis kerntest
    keycommand keyfloat keyreader keystroke keyval2e keyvaltable kix kixfont
    knitting knittingpattern knowledge knuth knuth-lib knuth-local
    koma-moderncvclassic koma-script koma-script-examples koma-script-sfs
    komacv komacv-rg kotex-oblivoir kotex-plain kotex-utf kotex-utils
    kpfonts ksfh_nat ksp-thesis
    ktv-texdata ku-template kurdishlipsum kurier
  l2picfaq l2tabu l2tabu-english l2tabu-french l2tabu-italian l2tabu-spanish
    l3build l3kernel l3packages l3experimental
    labbook labels labelschanged labyrinth ladder 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-mr latex-notes-zh-cn
    latex-papersize latex-referenz latex-refsheet latex-tabellen
    latex-tds latex-veryshortguide latex-via-exemplos 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
    lccaps 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
    libertinus-fonts libertinus-otf libertinus-type1 libertinust1math
    libgreek librarian librebaskerville librebodoni librecaslon
    libris lilyglyphs limap limecv linearA linegoal
    lineno ling-macros linguex linop
    lion-msc lipsum lisp-on-tex
    listbib listing listings listings-ext listlbls listliketab
    listofitems listofsymbols
    lithuanian liturg lkproof llncsconf lm lm-math lmake lni 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 ltb2bib
    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 lualatex-truncate lualibs
    luamesh luamplib luaotfload luapackageloader
    luasseq luatex85 luatexbase luatexja luatexko luatextra
    luatodonotes luavlna luaxml
    lwarp lxfonts ly1 lyluatex
  m-tx macros2e macroswap mafr magaz mailing mailmerge
    make4ht makebarcode makebase makebox makecell makecirc makecmds
    makedtx makeglos makeplot maker
    makeshape mandi manfnt manfnt-font manuscript manyind margbib
    marginfit marginfix marginnote markdown marvosym
    matc3 matc3mem match_parens
    math-e math-into-latex-4 mathabx mathabx-type1 mathalfa mathastext
    mathcomp mathdesign mathdots mathexam
    mathfam256 mathfixs mathfont mathpartir mathpazo mathpunctspace
    mathspec mathtools matlab-prettifier mathspic maths-symbols
    mattens maybemath mbenotes
    mcaption mceinleger mcexam mcf2graph mcite mciteplus mcmthesis
    mdframed mdputu mdsymbol mdwtools media9 medstarbeamer
    meetingmins memdesign memexsupp
    memoir MemoirChapStyles memory mendex-doc mentis
    mensa-tex 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 milsymb
    minibox minidocument minifp minipage-marginpar
    miniplot minitoc minorrevision
    minted mintspirit minutes missaali
    mkgrkindex mkjobtexmf mkpattern mkpic
    mla-paper mlist mmap mnotes mnras mnsymbol
    moderncv modernposter moderntimeline modiagram
    modref modroman modular modulus
    mongolian-babel montserrat
    monofill montex moodle
    moreenum morefloats morehype moresize
    moreverb morewrites morisawa movie15 mp3d
    mparhack mparrows mpattern mpcolornames mpgraphics
    mpman-ru mpostinl mptopdf mptrees ms msc msg mslapa msu-thesis mtgreek
    mucproc mugsthesis multenum
    multiaudience multibbl multibib multibibliography
    multicap multienv multiexpand multirow
    multidef multido multilang multiobjective munich
    musicography musikui musixguit
    musixtex musixtex-fonts musixtnt musuos muthesis
    mversion mwcls mwe mweights mxedruli
    mychemistry mycv mylatexformat mynsfc
  na-box na-position nag nameauth namespc nanumtype1 nar
    natbib natded nath nature
    navigator navydocs
    ncclatex ncctools ncntrsbk
    nddiss ndsu-thesis needspace nestquot neuralnetwork nevelok
    newcommand newenviron newfile newlfm newpx newsletr newspaper
    newtx newtxsf newtxtt newunicodechar newvbtm
    newverbs nextpage
    nfssext-cfr nicefilelist niceframe niceframe-type1 nicematrix nicetext
    nidanfloat nih nihbiosketch
    nimbus15 nkarta nlctdoc
    nmbib noconflict nodetree noindentafter noitcrul nolbreaks
    nomencl nomentbl nonfloat nonumonpart nopageno norasi-c90 normalcolor
    nostarch notes notes2bib notespages notestex
    notex-bst noto notoccite novel nowidow nox npp-for-context
    nrc ntgclass ntheorem ntheorem-vn nuc nucleardata
    numberedblock numericplots numname numnameru numprint numspell nwejm
  oberdiek objectz obnov
    ocg-p ocgx ocgx2 ocherokee ocr-b ocr-b-outline ocr-latex octave octavo
    odsfile ofs
    ogham oinuit old-arrows oldlatin oldstandard
    oldstyle olsak-misc
    onedown onlyamsmath onrannual opcit opensans oplotsymbl
    opteng optidef optional options
    ordinalpt orkhun oscola ot-tableau othello othelloboard
    oubraces outline outliner outlines outlining overlays overlock overpic
  pacioli padauk pagecolor pagecont padcount pagenote pagerange pageslts
    palatino 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 pdfoverlay
    pdfpagediff pdfpages pdfpc-movie pdfprivacy pdfreview
    pdfscreen pdfslide pdfsync
    pdftricks pdftricks2 pdfx pdfxup
    pecha pedigree-perl penrose 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 pgfornament-han 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 pixelart pkfix pkfix-helper pkgloader pkuthss
    pl placeat placeins placeins-plain
    plain-doc plainpkg plari plantslabels plantuml plates
    platex platex-tools platexcheat plautopatch
    play playfair plex plex-otf plipsum
    plnfss plstmary plweb pm-isomath pmgraph pmx pmxchords pnas2009
    poemscol poetry poetrytex polexpr polski poltawski
    polyglossia polynom polynomial
    polytable postage postcards poster-mac
    powerdot powerdot-FUBerlin powerdot-tuliplab
    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-antiprism pst-arrow pst-asr pst-bar
    pst-barcode pst-bezier pst-blur pst-bspline
    pst-calculate pst-calendar pst-cie pst-circ
    pst-coil pst-contourplot pst-cox
    pst-dart 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-geometrictools 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-poker pst-poly pst-pdf pst-pulley
    pst-qtree pst-rputover pst-rubans
    pst-shell pst-sigsys pst-slpe pst-solarsystem pst-solides3d pst-soroban
    pst-spectra pst-spinner pst-spirograph
    pst-stru pst-support pst-text pst-thick pst-tools pst-tree pst-tvz pst-uml
    pst-vectorian pst-vehicle pst-vowel pst-vue3d
    pst2pdf pstool pstricks pstricks-add pstricks_calcnotes pstring
    psu-thesis ptex-base ptex-fontmaps ptex-fonts ptex-manual
    ptex2pdf ptext ptptex
    punk punk-latex punknova purifyeps pxbase
    pxchfon pxcjkcat pxfonts pxgreeks pxjahyper
    pxpgfmark pxrubrica pxtatescale pxtxalfa pxufont
    pygmentex python pythonhighlight pythontex
  qcircuit qcm qobitree qrcode qstest qsymbols qtree
     quantikz quattrocento quicktype quotchap quoting quotmark quran
  r_und_s raleway ran_toks randbild randomlist randomwalk randtext
    rank-2-roots 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 returntogrid 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 rutitlepage
    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 scientific-thesis-cover
    scratch scratchx screenplay screenplay-pkg
    scrjrnl scrlttr2copy scsnowman
    sdrt sduthesis
    secdot section sectionbox sectionbreak 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 sesstime setdeck setspace seuthesis seuthesix sexam
    sf298 sffms sfg
    sfmath sgame shade shadethm shadow shadowtext shapepar shapes
    shdoc shipunov shobhika short-math-guide shorttoc
    show2e showcharinbox showdim showexpl showhyphens showlabels showtags
    shuffle
    sidecap sidenotes sides signchart silence
    simple-resume-cv simple-thesis-dissertation simplecd simplecv
    simpleinvoice simplekv 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 spark-otf sparklines spath3
    spectralsequences 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
    statex statex2 statistics statistik statmath staves
    stdclsdv stdpage stealcaps steinmetz
    stellenbosch stex
    stickstoo stix stix2-otf stix2-type1 stmaryrd storebox storecmd
    stringstrings structmech struktex
    sttools stubs studenthandouts 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
    symbol 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 tagpdf talk tamefloats
    tamethebeast tap tapir tasks tcldoc tcolorbox tdclock tdsfrmath
    technics ted templates-fenn templates-sommer templatetools tempora
    tengwarscript
    tensor termcal termcal-de termlist termmenu testhyphens testidx teubner
    tex-ewd tex-font-errors-cheatsheet tex-gyre tex-gyre-math tex-ini-files
    tex-label tex-locale tex-overview tex-ps tex-refs tex-virtual-academy-pl
    tex4ebook texapi texbytopic texcount
    texdate texdef texdiff texdirflatten texdoc texdraw
    texfot texilikechaps texilikecover
    texliveonfly texloganalyser texlogos texmate texments
    texosquery texpower texproposal texshade textualicomma texvc
    textcase textfit textglos textgreek textmerg textopo textpath textpos
    tfrupee thaienum thaispec thalie theatre theoremref
    thesis-ekf thesis-gwu thesis-titlepage-fhac
    thinsp thmbox thmtools threadcol threeddice threeparttable threeparttablex
    thucoursework thumb thumbpdf thumbs thumby thuthesis
    ticket ticollege
    tikz-bayesnet tikz-cd tikz-3dplot tikz-dependency tikz-dimline
    tikz-feynhand tikz-feynman tikz-inet
    tikz-kalender tikz-karnaugh tikz-ladder tikz-layers
    tikz-nef tikz-network tikz-opm tikz-optics tikz-palattice tikz-qtree
    tikz-relay tikz-sfc tikz-timing
    tikzcodeblocks tikzducks tikzinclude tikzmark tikzmarmots tikzorbital
    tikzpagenodes tikzpeople tikzpfeile tikzposter tikzscale tikzsymbols
    timbreicmc times 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
    tlc-article tlc2
    tocbibind tocdata tocloft tocvsec2 todo todonotes
    tokenizer toolbox tools topfloat topletter totcount totpages toptesi
    tpic2pdftex 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 translator
    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 txuprcal
    type1cm typed-checklist typeface typehtml typeoutfileinfo typewriter
    typicons typoaid typogrid
  uaclasses uafthesis uantwerpendocs uassign
    ucharcat ucharclasses ucbthesis ucdavisthesis ucs ucsmonograph
    ucthesis udesoftec uebungsblatt uestcthesis
    uhhassignment 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
    unitn-bimrep units unitsdef universa universalis univie-ling
    unravel unswcover
    uothesis uowthesis uowthesistitlepage
    upca uplatex upmethodology uppunctlm upquote
    uptex-base uptex-fonts upzhkinsoku
    uri url urlbst urcls urwchancal usebib ushort uspace uspatent
    ut-thesis utexasthesis utf8mex uwmslide uwthesis
  vak vancouver variablelm 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 wallcalendar wallpaper warning warpcol
    was wasy wasy2-ps wasysym webguide
    widetable williams withargs witharrows
    wnri wnri-latex wordcount wordlike worksheet
    wrapfig wsemclassic wsuipa wtref
  xargs xassoccnt xbmks xcharter xcite xcjk2uni xcntperchap
    xcolor xcolor-material xcolor-solarized
    xcomment xcookybooky xdoc xduthesis
    xebaposter xechangebar xecjk xecolor xecyr xeindex xellipsis
    xepersian xesearch xespotcolor
    xetex-devanagari xetex-itrans xetex-pstricks xetex-tibetan
    xetexfontinfo xetexko
    xetexref xevlna xfakebold xfor xgreek xhfill
    xifthen xii xii-lat xint xits
    xkeyval xlop xltabular xltxtra xmltex xmpincl xnewcommand
    xoptarg xpatch xpeek xpiano xpicture xpinyin xprintlen xpunctuate
    xq xsavebox xsim xskak xstring xtab xtuthesis xunicode xurl
    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
  zapfchan zapfding zebra-goodies zed-csp
    zhlipsum zhnumber zhmetrics zhmetrics-uptex zhspacing ziffer 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
  "ecgdraw",		# awaiting upload with trivial \CheckSum fix 2jul16
  "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
  "malayalam-latex",	# 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
  "texdoctk",		# maintained here
  "texinfo",		# tl-update-auto
  "texlive.infra",	# binary
  "texsis",		# too old to worry about
  "texware",		# binary
  "texworks",		# binary
  "tie",		# binary
  "tlaunch",		# w32 siep binary
  "tlcockpit",		# our binary
  "tlshell",		# our binary
  "ttfutils",		# binary
  "updmap-map",		# autogenerated map files
  "uhc",		# big tar files from 2005, don't worry until update
  "uptex",		# binary
  "utopia",		# afm differs, don't worry
  "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: