#!/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 aaai-named aalok aastex abbr abc abnt abntex2 abraces abstract abstyles academicons accanthis accents accessibility accfonts accsupp achemso acmart acmconf acro acronym acroterm active-conf actuarialangle actuarialsymbol addfont addliga addlines adfathesis adforn adhocfilelist adigraph adjmulticol adfsymbols adjustbox adobemapping adrconv adtrees advdate ae aeguill aesupp afparticle afthesis aguplus aiaa aichej ajl akktex akletter akshar albatross alegreya alertmessage alfaslabone alg algobox algolrevived algorithm2e algorithmicx algorithms algpseudocodex algxpar aligned-overset alkalami allrunes almendra almfixed alnumsec alpha-persian alphalph alterqcm altfont ametsoc amiri amiweb2c-guide amsaddr amscdx amscls amscls-doc amsfonts amslatex-primer amsldoc-it amsldoc-vn amsmath amsmath-it amsrefs amstex amsthdoc-it annee-scolaire animate annotate anonchap anonymous-acm anonymouspro answers antanilipsum antiqua antomega antt anufinalexam anyfontsize anysize aobs-tikz aomart apa apa6 apa6e apa7 apacite apalike2 apalike-german apnum appendix appendixnumberbeamer apprendre-a-programmer-en-tex apprends-latex apptools apxproof arabi arabicfront arabi-add arabluatex arabtex arabxetex aramaic-serto arara archaeologie archaic archivo arcs arev arimo armtex around-the-bend arphic arphic-ttf arraycols arrayjobx arraysort arsclassica arvo arydshln articleingud asaetr asapsym ascelike ascii-chart ascii-font asciilist ascmac askinclude askmaps asmeconf asmejour aspectratio assignment association-matrix assoccnt astro asyfig asymptote-faq-zh-cn asymptote-by-example-zh-cn asymptote-manual-zh-cn asypictureb atbegshi atenddvi atkinson atveryend attachfile attachfile2 aucklandthesis augie auncial-new aurical aurl auto-pst-pdf-lua autobreak autopdf authoraftertitle authorarchive authordate authorindex auto-pst-pdf autoaligne autoarea autofancyhdr automata autonum autosp auxhook 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-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 barracuda 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-rl beamer-tut-pt beamer-verona beamerappendixnote beameraudience beamerauxtheme beamercolorthemeowl beamerdarkthemes beamerposter beamersubframe beamerswitch beamertheme-cuerna beamertheme-detlevcm beamertheme-epyt beamertheme-focus beamertheme-light beamertheme-metropolis beamertheme-npbt beamertheme-phnompenh beamertheme-pure-minimalistic beamertheme-saintpetersburg beamertheme-trigon beamertheme-upenn-bc beamerthemejltree beamerthemelalic beamerthemenirma beamerthemenord bearwear beaulivre beebe begingreek begriff beilstein belleek bengali bera berenisadf besjournals bestpapers betababel beton beuron bewerbung bez123 bezierplot bgteubner bguq bhcexam bib-fr bib2gls bibarts biber bibhtml biblatex biblatex-abnt biblatex-ajc2020unofficial biblatex-anonymous biblatex-apa biblatex-apa6 biblatex-archaeology biblatex-arthistory-bonn biblatex-bath biblatex-bookinarticle biblatex-bookinother biblatex-bwl biblatex-caspervector biblatex-cheatsheet biblatex-chem biblatex-chicago biblatex-claves biblatex-cv biblatex-dw biblatex-enc biblatex-ext biblatex-fiwi biblatex-gb7714-2015 biblatex-german-legal biblatex-gost biblatex-historian biblatex-ieee biblatex-ijsra biblatex-iso690 biblatex-jura2 biblatex-juradiss biblatex-license 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-software biblatex-source-division biblatex-subseries biblatex-swiss-legal biblatex-trad biblatex-true-citepages-omit biblatex-unified biblatex-vancouver biblatex2bibitem 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 bigintcalc bigints binarytree binomexp biochemistry-colors biocon biolett-bst bitelist bithesis bitpattern bitset bitter bizcard bjfuthesis blacklettert1 blindtext blkarray blochsphere block blockdraw_mp bloques blowup blox bmstu-iu8 bnumexpr bodegraph bohr boisik bold-extra boites boldtensors bondgraph bondgraphs bookcover bookdb bookest bookhands booklet bookman bookmark bookshelf booktabs booktabs-de booktabs-fr boolexpr boondox bophook borceux bosisio boxedminipage boxhandler bpchem bpolynomial br-lex bracketkey braids braille braket brandeis-dissertation brandeis-problemset brandeis-thesis breakcites breakurl bredzenie breqn bropd brushscr bubblesort buctthesis bullcntr bundledoc burmese businesscard-qrcode bussproofs bussproofs-extra bxbase bxcalc bxcjkjatype bxdpx-beamer bxdvidriver bxghost bxjaholiday bxjaprnind bxjatoucs bxpapersize bxpdfver bxeepic bxenclose bxjalipsum bxjscls bxnewfont bxorigcapt bxtexlogo bxwareki byo-twemojis 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 cascadia-code cascadilla cases casyl catchfile catchfilebetweentags catcodes catechis catoptions causets cbcoptic cbfonts cbfonts-fd cc-pl ccaption ccfonts ccicons cclicenses ccool cd cd-cover cdpbundl cell cellprops cellspace celtic censor centeredline centerlastline cesenaexam cfr-initials cfr-lm changebar changelayout changelog changepage changes chappg chapterfolder charissil charter chbibref cheatsheet checkcites checkend checklistings chem-journal chemarrow chembst chemcompounds chemcono chemexec chemfig chemformula chemgreek chemmacros chemnum chemplants chemschemex chemsec chemstyle cherokee chess chess-problem-diagrams chessboard chessfss chet chextras chhaya chicago chicagoa chicago-annote chickenize chifoot childdoc chinese-jfm chivo chkfloat chklref chletter chngcntr chordbars chordbox chronology chronosys chs-physics-report chscite churchslavonic cinzel circ circledsteps circuit-macros circuitikz cite citeall citeref cje cjhebrew cjk cjk-gs-integrate cjk-ko cjkpunct clara classics classpack classicthesis cleanthesis clearsans clefval cleveref clipboard clock clojure-pamphlet cloze clrdblpg clrscode clrscode3e clrstrip cluttex cm cm-lgc cm-mf-extra-bold cm-super cm-unicode cmap cmarrows cmathbb cmbright cmcyr cmdstring cmdtrack cmexb cmextra cmll cmpica cmpj cmsd cmsrb cmtiup cmupint cnbwp cnltx cntformats cntperchap cochineal codeanatomy codedoc codehigh codepage codesection codicefiscaleitaliano coelacanth coffeestains collcell collectbox collref colophon color-edits colordoc colorinfo coloring colorist colorprofiles colorsep colorspace colortab colortbl colorwav colorweb colourchange combelow combine combinedgraphics combofont comfortaa comicneue comma commado commath commedit comment commutative-diagrams compactbib compare competences complexity components-of-TeX comprehensive computational-complexity concepts concmath concmath-fonts concprog concrete conditext 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 courierten courseoutline coursepaper coverpage covington cprotect cqubeamer cquthesis crbox crimson crimsonpro crop crossreference crossreftools crossrefware crossword crosswrd cryptocode cryst cs csbulletin cslatex csplain csquotes csquotes-de css-colors cstex cstypo csvmerge csvsimple ctan-o-mat ctan_chk ctanbib ctanify ctanupload ctable ctablestack ctex ctex-faq cuprum 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 datax 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 ddphonism de-macro decimal decision-table decorule dehyph dehyph-exptl dejavu dejavu-otf delim delimseasy delimset delimtxt denisbdoc derivative dhua diabetes-logbook diadia diagbox diagmac2 dialogl diagnose dice dichokey dickimaw dictsym diffcoeff digiconfigs dijkstra dimnum din1505 dinat dinbrief dingbat directory dirtree dirtytalk disser ditaa dithesis dk-bib dlfltxb dnaseq dnp doc-pictex docbytex doclicense docmfp docmute docsurvey doctools documentation docutils doi doipubmed domitian dosepsbin dotlessi dot2texi dotarrow dotseqn dottex doublestroke doulossil dowith download dox dozenal dpcircling dpfloat dprogress drac draftcopy draftfigure draftwatermark dramatist dratex drawmatrix drawstack drm droid droit-fr drs drv dsptricks dsserif dtk dtk-bibliography 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 easybook easyfig easyfloats easyformat easylist easyreview ebezier ebgaramond ebgaramond-maths ebong ebook ebproof ebsthesis ec ecc ecclesiastic ecltree eco ecobiblatex econ-bst econlipsum econometrics economic ecothesis ecv eczar ed edfnotes edichokey edmac edmargin ednotes eemeir eepic efbox egameps egplot ehhline eiad eiad-ltx eijkhout einfart ejpecp ekaia ekdosis ektype-tanka elbioimp electrum eledform eledmac elegantbook elegantnote elegantpaper elements ellipse ellipsis elmath elocalloc elpres els-cas-templates elsarticle elteikthesis eltex elvish elzcards emarks embedall embedfile embrac emf emisa emoji emojicite emptypage emulateapj emp enctex encxvlna endfloat endheads endiagram endnotes endnotes-hy endnotesj endofproofwd engpron engrec engtlc enigma enotez enumitem enumitem-zref envbig environ envlab epigrafica epigram epigraph epigraph-keys epiolmec eplain epsdice epsf epsf-dvipdfmx epsincl epslatex-fr epspdfconversion epstopdf epstopdf-pkg eq-pin2corr eqell eqexpl eqlist eqnalign eqname eqnarray eqnnumwarn eqparbox erdc erewhon erewhon-math errata erw-l3 esami es-tex-faq esdiff esindex esint esint-type1 esk eskd eskdx eso-pic esrelation esstix estcpmm esvect etaremune etbb etdipa etex-pkg etexcmds etextools ethiop ethiop-t1 etoc etoolbox etoolbox-de etsvthor euclideangeometry euenc euflag eukdate euler eulerpx eulervm euro euro-ce europasscv europecv eurosym everyhook everypage everysel everyshi exam exam-n exam-randomizechoices examdesign example examplep exceltex excludeonly exercise exercisebank exercisepoints exercises exesheet exframe exp-testopt expdlist expex expkv expkv-cs expkv-def expkv-opt export expose-expl3-dunkerque-2019 expressg exsheets exsol extarrows exteps extpfeil extract extsizes facsimile factura facture facture-belge-simple-sans-tva faktor fancybox fancyhandout fancyhdr fancyhdr-it fancylabel fancynum fancypar fancyref fancyslides fancytabs fancytooltips fancyvrb fandol fascicules fast-diagram fbb fbithesis fbox fbs fc fcavtex fcltxdoc fcolumn fdsymbol fduthesis featpost fei fenixpar fetamont fetchcls feupphdteses fewerfloatpages feyn feynmf feynmp-auto ffcode ffslides fge fgruler fibeamer fifinddo-info fifo-stack fig4latex figbas figbib figchild figflow figsize filecontents filecontentsdef filedate filehook fileinfo filemod findhyph fink finstrut fira firamath firamath-otf first-latex-doc firstaid fitbox fithesis fix2col fixcmex fixfoot fixjfm fixlatvian fixltxhyph fixme fixmetodonotes fixpdfmag fiziko 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 foliono fonetika font-change font-change-xetex fontawesome fontawesome5 fontaxes fontbook fontch fontinst fontmfizz fontools fonts-churchslavonic fonts-tlwg fontsetup fontsize fontspec fonttable fontwrap footbib footmisc footmisx footnotebackref footnotehyper footnoterange footnpag forarray foreign forest forest-quickstart forloop formlett formation-latex-ul forms16be formular forum fouridx fourier fouriernc fp fpl fragmaster fragments frame framed francais-bst frankenstein frcursive frederika2016 frege frenchmath frimurer frletter frontespizio froufrou frpseudocode ftc-notebook ftcap ftnxtra fullblck fullminipage fullwidth functan fundus-calligra fundus-cyr fundus-sueterlin fvextra fwlw g-brief gaceta galois gamebook gammas garamond-libre garamond-math garuda-c90 garrigues gastex gatech-thesis gates gatherenum gauss gb4e gbt7714 gcard gchords gcite gckanbun gender geschichtsfrkl genealogy genealogytree gene-logic genmpage gentium-tug gentle gentombow geometry german germbib germkorr getfiledate getitems getmap getoptk gettitlestring gfnotation gfsartemisia gfsbaskerville gfsbodoni gfscomplutum gfsdidot gfsdidotclassic gfsneohellenic gfsneohellenicmath gfsporson gfssolomos ghab ghsystem gillcm gillius gincltex gindex ginpenc git-latexdiff gitfile-info gitinfo gitinfo2 gitlog gitver globalvals glosmathtools gloss glossaries glossaries-danish glossaries-dutch glossaries-english glossaries-estonian glossaries-extra glossaries-finnish glossaries-french glossaries-german glossaries-irish glossaries-italian glossaries-magyar glossaries-nynorsk gloss-occitan glossaries-polish glossaries-portuges glossaries-serbian glossaries-slovene glossaries-spanish gmdoc gmdoc-enhance gmiflink gmp gmutils gmverb gmverse gnuplottex go gobble gofonts gost gothic gotoh grabbox gradientframe gradstudentresume grafcet grant graph35 graphbox graphics graphics-cfg graphics-def graphics-pln graphicx-psmin graphicxbox graphicxpsd graphpaper graphviz grayhints greek-fontenc greek-inputenc greekdates greektex greektonoi greenpoint gregoriotex grfext grffile grfpaste grid grid-system gridpapers gridset gridslides grotesq grundgesetze gsemthesis gtl gtrlib-largetrees gtrcrd gu gudea guitar guitarchordschemes guitartabs guitlogo gzt h2020proposal hackthefootline hacm hagenberg-thesis halloweenmath handin handout hands hang hanging hanoi happy4th har2nat haranoaji haranoaji-extra hardwrap harmony harnon-cv harpoon harvard harveyballs harvmac hatching hausarbeit-jura havannah hc he-she hecthese helmholtz-ellis-ji-notation helvetic hep hep-paper hepnames hepparticles hepthesis hepunits here heuristica hexgame hf-tikz hfbright hfoldsty hhtensor highlightlatex hindawi-latex-template hindmadurai histogr historische-zeitschrift hitec hitreport hitszthesis hitszbeamer hithesis hletter hlist hmtrump hobby hobete hobsub hologo hook-pre-commit-pkg hopatch horoscop hpsdiss hrefhide hrlatex hu-berlin-bundle huawei hulipsum hustthesis hvarabic hvfloat hvindex hvqrurl hycolor hypdestopt hypdvips hyper hyperbar hypernat hyperref hyperxmp hyph-utf8 hyphen-base hyphenat hyphenex hyplain ibarra ibycus-babel ibygrk icite icsv identkey idxcmds idxlayout ieeepes ietfbibs iffont ifmslide ifmtarg ifnextok ifoddpage ifplatform ifptex ifsym iftex ifthenx ifxptex iitem ijmart ijqc ijsra imac image-gallery imakeidx impatient impatient-cn imfellenglish impnattypo import imsproc imtekda incgraph includernw inconsolata index indextools infwarerr initials inkpaper inline-images inlinebib inlinedef innerscript inputenx inputtrc inriafonts insbox install-latex-guide-zh-cn installfont intcalc inter interactiveworkbook interchar interfaces interpreter interval intopdf intro-scientific inversepath invoice invoice-class invoice2 iodhbwm ionumbers iopart-num ipaex ipaex-type1 is-bst iscram iso iso10303 isodate isodoc isomath isonums isopt isorot isotope issuulinks istgame itnumpar iwhdp iwona jablantile jacow jamtimes japanese-otf japanese-otf-uptex jbact jfmutil jigsaw jknapltx jkmath jlabels jlreq jlreq-deluxe jmb jmlr jneurosci jnuexam josefin jpsj jsclasses jslectureplanner jumplines junicode jupynotex jura juraabbrev jurabib juramisc jurarsp js-misc jvlisting kalendarium kanaparser kantlipsum karnaugh karnaugh-map karnaughmap kastrup kblocks kdgdocs kdpbook kerkis kerntest ketcindy keycommand keyfloat keyindex keyreader keystroke keyval2e keyvaltable kix kixfont knitting knittingpattern knowledge knuth-errata knuth-lib knuth-local knuth-pdf koma-moderncvclassic koma-script koma-script-examples koma-script-sfs komacv komacv-rg kotex-oblivoir kotex-plain kotex-utf kotex-utils kpfonts kpfonts-otf ksfh_nat ksp-thesis ktv-texdata ku-template kurdishlipsum kurier kvdefinekeys kvmap kvoptions kvsetkeys l2picfaq l2tabu l2tabu-english l2tabu-french l2tabu-italian l2tabu-spanish l3backend l3build l3kernel l3packages l3experimental labbook labels labels4easylist labelschanged labyrinth ladder lambda-lists langcode langsci langsci-avm lapdf lastpackage lastpage latex latex-amsmath-dev latex-base-dev latex-brochure latex-course latex-doc-ptr latex-firstaid-dev latex-fonts latex-git-log latex-graphics-companion latex-graphics-dev latex-make latex-mr latex-notes-zh-cn latex-papersize latex-refsheet latex-tools-dev latex-uni8 latex-veryshortguide latex-via-exemplos latex-web-companion latex2e-help-texinfo latex2e-help-texinfo-fr latex2e-help-texinfo-spanish latex2man latex2nemeth latex4musicians latex4wp latex4wp-it latexbangla latexbug latexcheat latexcheat-de latexcheat-esmx latexcheat-ptbr latexcolors latexcourse-rug latexdemo latexdiff latexfileinfo-pkgs latexfileversion latexgit latexindent latexmk latexmp latexpand latino-sine-flexione lato layaureo layouts lazylist lccaps lcd lcg lcyw leading leadsheets leaflet lebhart lecturer lectures lectureslides ledmac leftidx leftindex leipzig lengthconvert letltxmacro letterspacing letterswitharrows lettre lettrine levy lewis lexend lexikon lexref lfb lgreek lh lhcyr lhelp libertine libertinegc libertinus libertinus-fonts libertinus-otf libertinus-type1 libertinust1math libgreek librarian librebaskerville librebodoni librecaslon librefranklin libris lie-hasse light-latex-make lilyglyphs limap limecv linearA linegoal lineno ling-macros linguex linguisticspro linop lion-msc lipsum lisp-on-tex listbib listing listings listings-ext listingsutf8 listlbls listliketab listofitems listofsymbols lithuanian liturg lkproof llncsconf lm lm-math lmake lni lobster2 locality localloc logbox logical-markup-utils logicproof logicpuzzle logix 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 lstfiracode lt3graph ltablex ltabptch ltb2bib ltxcmds ltxdockit ltxfileinfo ltxguidex ltximg ltxkeys ltxmisc ltxnew ltxtools lua-alt-getopt lua-check-hyphen lua-physical lua-typo lua-uca lua-ul lua-uni-algos lua-visual-debug luabibentry luabidi luacode luacolor luahyphenrules luaimageembed luaindex luainputenc luaintro luakeys lualatex-doc lualatex-doc-de lualatex-math lualatex-truncate lualibs luamesh luamplib luaotfload luapackageloader luaprogtable luarandom luasseq luatex85 luatexbase luatexja luatexko luatextra luatodonotes luavlna luaxml lwarp lxfonts ly1 lyluatex m-tx macros2e macroswap mafr magaz magicnum magra mahjong mailing mailmerge make4ht makebarcode makebase makebox makecell makecirc makecmds makecookbook makedtx makeglos makeplot maker makerobust makeshape mandi manfnt manfnt-font manuscript manyind marathi marcellus margbib marginfit marginfix marginnote markdown marvosym matapli matc3 matc3mem match_parens math-into-latex-4 mathabx mathabx-type1 mathalpha mathastext mathcommand mathcomp mathdesign mathdots mathexam mathfam256 mathfixs mathfont mathlig mathpartir mathpazo mathpunctspace mathspec mathtools matlab-prettifier mathspic maths-symbols matrix-skeleton mattens maybemath mcaption mceinleger mcexam mcf2graph mcite mciteplus mcmthesis mdframed mdputu mdsymbol mdwtools media4svg media9 medstarbeamer meetingmins membranecomputing memdesign memexsupp memoir MemoirChapStyles memory memorygraphs mendex-doc mentis mensa-tex menu menucard menukeys mercatormap merriweather metafont-beginners metago metalogo metalogox metanorma metaobj metaplot metapost-colorbrewer metapost-examples metastr metatex metatype1 metauml method metre metrix mf2pt1 mfirstuc mflogo mflogo-font mfnfss mfpic mfpic4ode mftinc mgltex mhchem mhequ miama mi-solns microtype microtype-de midnight midpage miller milog milsymb mindflow minibox minidocument minifp minim minim-hatching minim-math minim-mp minim-pdf minimalist minipage-marginpar miniplot minitoc minorrevision minted mintspirit minutes mismath missaali mkgrkindex mkjobtexmf mkpattern mkpic mla-paper mlacls mleftright mlist mlmodern mluexercise mmap mnotes mnras mnsymbol modeles-factures-belges-assocs moderncv modernposter moderntimeline modes modiagram modref modroman modular modulus mongolian-babel montserrat monofill montex moodle moreenum morefloats morehype moresize moreverb morewrites morisawa movie15 mp3d mparhack mparrows mpattern mpcolornames mpfonts mpgraphics mpman-ru mpostinl mptopdf mptrees ms msc msg mslapa msu-thesis mtgreek mucproc mugsthesis muling multenum multiaudience multibbl multibib multibibliography multicap multicolrule multidef multido multienv multiexpand multilang multiobjective multirow munich musical musicography musikui musixguit musixtex musixtex-fonts musixtnt musuos muthesis mversion mwcls mwe mweights mxedruli mycv mylatex mylatexformat mynsfc na-box na-position nag nameauth namedef namespc nanicolle nanumtype1 nar natbib natded nath nature navigator navydocs ncclatex ncctools ncntrsbk nddiss ndsu-thesis needspace nestquot neuralnetwork nevelok newcommand newcomputermodern newenviron newfile newfloat newlfm newpax newpx newsletr newspaper newtx newtxsf newtxtt newunicodechar newvbtm newverbs nextpage nfssext-cfr nicefilelist niceframe niceframe-type1 nicematrix nicetext nidanfloat nih nihbiosketch nimbus15 nimsticks ninecolors njurepo nkarta nl-interval nlctdoc nmbib nnext noconflict nodetree noindentafter noitcrul nolbreaks nomencl nomentbl nonfloat nonumonpart nopageno norasi-c90 normalcolor nostarch notes notes2bib notespages notestex notex-bst noto noto-emoji notoccite notomath novel nowidow nox npp-for-context nrc ntgclass nth ntheorem ntheorem-vn nuc nucleardata numberedblock numberpt numerica numericplots numname numnameru numprint numspell nunito 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 optex optidef optional options orcidlink ordinalpt orientation orkhun oscola oswald ot-tableau othello othelloboard oubraces oup-authoring-template outerhbox outline outliner outlines outlining overlays overlock overpic pacioli padauk padcount pagecolor pagecont pagenote pagerange pagesel pageslts palatino paper papercdcase papermas papertex paracol parades paralist parallel paratype paresse parnotes parrun parsa parselines parskip pas-cours pas-crosswords pas-cv pas-tableur passivetex patch patchcmd patgen2-tutorial path pauldoc pawpict pax pbalance pbibtex-base pbox pb-diagram pbsheet pdf14 pdf-trans pdfarticle pdfbook2 pdfcolmk pdfcomment pdfcprot pdfcrop pdfescape pdfextra pdfjam pdflatexpicscale pdflscape pdfmanagement-testphase pdfmarginpar pdfoverlay pdfpagediff pdfpages pdfpc pdfpc-movie pdfprivacy pdfreview pdfscreen pdfslide pdfsync pdftex-quiet pdftexcmds pdftricks pdftricks2 pdfx pdfxup pecha pedigree-perl penrose perception perfectcut perltex permute persian-bib petiteannonce petri-nets pfarrei pgf pgf-blur pgf-cmykshadings pgf-pie pgf-soroban pgf-spectra pgf-umlcd pgf-umlsd pgfgantt pgfkeyx pgfmath-xfp pgfmolbio pgfmorepages pgfopts pgfornament pgfornament-han pgfplots phaistos phffullpagefigure phfnote phfparen phfqit phfquotetext phfsvnwatermark phfthm philex philokalia philosophersimprint phonenumbers phonetic phonrule photo physconst physics physunits piano picinpar pict2e pictex pictex2 pictexsum picture piechartmp piff pigpen pinlabel pinoutikz pitex pittetd pixelart pkfix pkfix-helper pkgloader pkuthss pl placeat placeins placeins-plain plain-doc plainpkg plainyr plari plantslabels plantuml plates platex platex-tools platexcheat plautopatch play playfair plex plex-otf plimsoll plipsum plnfss plstmary plweb pm-isomath pmboxdraw pmgraph pmhanguljamo pmx pmxchords pnas2009 poemscol poetry poetrytex poiretone polexpr polski poltawski polyglossia polynom polynomial polytable poormanlog postage postcards poster-mac powerdot powerdot-fuberlin powerdot-tuliplab ppr-prv pracjourn practicalreports prelim2e preprint prerex present pressrelease prettyref preview prftree principia printlen proba probsoln procIAGssymp prodint productbox profcollege program progress progressbar projlib proof-at-the-end proofread prooftrees proposal properties prosper protex protocol prtec przechlewski-book psbao pseudo 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-feyn 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-lsystem pst-magneticfield pst-marble pst-math pst-mirror pst-moire 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-stru pst-support pst-text pst-thick pst-tools pst-tree pst-turtle pst-tvz pst-uml pst-vectorian pst-vehicle pst-venn pst-vowel pst2pdf pstool pstricks pstricks-add pstricks_calcnotes pstring ptex-base ptex-fontmaps ptex-fonts ptex-manual ptex2pdf ptext ptolemaicastronomy ptptex punk punk-latex punknova purifyeps puyotikz pwebmac pxbase pxchfon pxcjkcat pxfonts pxgreeks pxjahyper pxjodel pxpgfmark pxpic pxrubrica pxtatescale pxtxalfa pxufont pygmentex python pythonhighlight pythontex qcircuit qcm qobitree qrbill qrcode qsharp qstest qsymbols qtree qualitype quantikz quantumarticle quattrocento quicktype quiz2socrative quotchap quoting quotmark quran quran-bn quran-de quran-ur qyxf-book r_und_s ragged2e raleway ran_toks randbild random randomlist randomwalk randtext rank-2-roots rccol rcs rcs-multi rcsinfo readablecv readarray realboxes realhats realscripts realtranspose rec-thy recipe recipebook recipecard recycle rectopma refcheck refcount refenums reflectgraphics refman refstyle regcount regexpatch register regstats reledmac relenc relsize reotex repeatindex repere repltext rerunfilecheck resphilosophica rest-api resumecls resumemac returntogrid reverxii revquantum revtex revtex4-1 rgltxdoc ribbonproofs rjlparshap rlepsf rmathbr rmpage roboto robustcommand robustindex rojud romanbar romanbarpagenumber romande romanneg romannum rosario rotfloat rotpages roundbox roundrect rrgtrees rsc rsfs rsfso rterface rtkinenc rtklage rubik ruhyphen ruler rulerbox rulercompass runcode russ rutitlepage rviewport rvwrite ryersonsgsthesis ryethesis sa-tikz sageep sanitize-umlaut sankey sanskrit sanskrit-t1 sansmath sansmathaccent sansmathfonts sapthesis sasnrdisplay sauerj sauter sauterfonts savefnmark savesym savetrees scale scalebar scalerel scanpages schedule schemabloc schemata scholax schooldocs schulmathematik sclang-prettifier schule schulschriften schwalbe-chess sciposter scientific-thesis-cover scontents scratch scratch3 scratchx screenplay screenplay-pkg scrjrnl scrlayer-fancyhdr scrlttr2copy scsnowman sdaps sdrt sduthesis secdot secnum section sectionbox sectionbreak sectsty seealso selectp selinput selnolig semantex semantic semantic-markup semaphor semesterplanner seminar semioneside semproc semtex 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 shortmathj shorttoc show2e showcharinbox showdim showexpl showhyphens showlabels showtags shtthesis shuffle sidecap sidenotes sides signchart silence simple-resume-cv simple-thesis-dissertation simplebnf simplecd simplecv simpleinvoice simplekv simpleoptics simpler-wick simplewick simplified-latex simplivre simurgh sitem siunitx skak skaknew skb skdoc skeldoc skeycommand skeyval skills skmath skrapport skull slantsc slideshow smalltableof smartdiagram smartref smartunits smflatex snapshot snotez songbook songs sort-by-letters soton soul soulutf8 soulpos soup sourcecodepro sourcesanspro sourceserifpro spacingtricks spalign spark-otf sparklines spath3 spectral spectralsequences spelling spie spix sphack sphdthesis splines splitbib splitindex spot spotcolor spreadtab spverbatim sr-vorl srbook-mem srcltx srdp-mathematik srcredact sseq sslides stack stackengine stage standalone stanli starfont startex startlatex2e statex statex2 statistics statistik statmath staves stdclsdv stdpage stealcaps steinmetz stellenbosch step stepgreek stex stickstoo stix stix2-otf stix2-type1 stmaryrd storebox storecmd stricttex stringenc stringstrings structmech struktex sttools stubs studenthandouts sty2dtx suanpan subdocs subdepth subeqn subeqnarray subfig subfigmat subfigure subfiles subfloat substances substitutefont substr subsupscripts subtext sudoku sudokubundle suftesi sugconf superiors supertabular suppose susy svg svg-inkscape svgcolor svn svn-multi svn-prov svninfo svrsymbols swebib swfigure swimgraf swrule syllogism symbol sympytexpackage syntax synproof syntaxdi syntrace synttree systeme t-angles t2 tabfigures table-fct tableaux tablefootnote tableof tablestyles tablists tablor tabls tablvar tabriz-thesis tabstackengine tabto-generic tabto-ltx tabu tabularborder tabularray tabularcalc tabularew tabulary tabvar tagging tagpair tagpdf talk tamefloats tamethebeast tap tapir tasks tcldoc tcolorbox tdclock tdsfrmath technics technion-thesis-template ted templates-fenn templates-sommer templatetools tempora tengwarscript tensind tensor termcal termcal-de termlist termmenu testhyphens testidx tetragonos teubner tex-ewd tex-font-errors-cheatsheet tex-gyre tex-gyre-math tex-ini-files tex-label tex-locale tex-nutshell 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 texnegar texonly texosquery texplate texpower texproposal texshade textualicomma texvc textcase textfit textglos textgreek textmerg textopo textpath textpos tfrupee thaienum thaispec thalie theanodidot theanomodern theanooldstyle theatre theoremref thesis-ekf thesis-gwu thesis-qom thesis-titlepage-fhac thinsp thmbox thmtools threadcol threeddice threeparttable threeparttablex thuaslogos thucoursework thumb thumbpdf thumbs thumby thuthesis ticket ticollege tikz-3dplot tikz-among-us tikz-bayesnet tikz-bbox tikz-cd tikz-dependency tikz-dimline tikz-feynhand tikz-feynman tikz-imagelabels tikz-inet tikz-kalender tikz-karnaugh tikz-ladder tikz-lake-fig tikz-layers tikz-nef tikz-network tikz-opm tikz-optics tikz-palattice tikz-planets tikz-qtree tikz-relay tikz-sfc tikz-timing tikz-trackschematic tikz-truchet tikzcodeblocks tikzducks tikzinclude tikzlings tikzmark tikzmarmots tikzorbital tikzpackets tikzpagenodes tikzpeople tikzpfeile tikzposter tikzscale tikzsymbols tikztosvg tile-graphic timbreicmc times timetable timing-diagrams tinos tipa tipa-de tipauni tipfr tiscreen titlecaps titlefoot titlepages titlepic titleref titlesec titling tkz-base tkz-berge tkz-doc tkz-euclide tkz-fct tkz-graph tkz-tab tkz-orm tikz-page tlc-article tlc2 tlcockpit tlmgr-intro-zh-cn tlmgrbasics tocbibind tocdata tocloft tocvsec2 todo todonotes tokcycle tokenizer toolbox tools topfloat topiclongtable topletter totalcount 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 transparent tree-dvips treetex trfsigns trigonometry trimspaces trivfloat trsym truncate tsemlines tucv tuda-ci tudscr tufte-latex tugboat tugboat-plain tui turabian turabian-formatting turkmen turnstile turnthepage twemoji-colr twoinone twoup txfonts txfontsb txgreeks txuprcal type1cm typed-checklist typeface typehtml typeoutfileinfo typewriter typicons typoaid typogrid tzplot uaclasses uafthesis uantwerpendocs uassign ucalgmthesis 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 unam-thesis unamth-template unamthesis undergradmath underlin underoverlap underscore undolabl unfonts-core unfonts-extra uni-wtal-ger uni-wtal-lin unicode-alphabets unicode-data unicode-bidi unicode-math unifith uninormalize uniquecounter unisugar unitconv unitipa unitn-bimrep units unitsdef universa universalis univie-ling unizgklasa 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 utf8add utf8mex utfsym uwmslide uwthesis vak vancouver variablelm variations varindex varisize varsfromjobname varwidth vaucanson-g vcell vdmlisting velthuis venn venndiagram venturisadf verbasef verbatimbox verbatimcopy verbdef verbments verifica verifiche verse version versions versonotes vertbars vgrid vhistory visualfaq visualpstricks visualtikz vmargin vntex vocaltract volumes voss-mathcol vpe vruler vtable vwcol wadalab wallcalendar wallpaper warning warpcol was wasy wasy-type1 wasysym webguide webquiz widetable widows-and-orphans williams willowtreebook windycity withargs witharrows wnri wnri-latex wordcount wordlike worldflags worksheet wrapfig wsemclassic wsuipa wtref xargs xassoccnt xbmks xcharter xcite xcjk2uni xcntperchap xcolor xcolor-material xcolor-solarized xcomment xcookybooky xcpdftips xdoc xduthesis xebaposter xechangebar xecjk xecolor xecyr xecyrmongolian xeindex xellipsis xepersian xepersian-hm xesearch xespotcolor xetex-devanagari xetex-itrans xetex-pstricks xetex-tibetan xetexfontinfo xetexko xetexref xevlna xfakebold xfor xgreek xhfill xifthen xii xii-lat xindex xindy-persian xint xintsession xits xkcdcolors xkeyval xlop xltabular xltxtra xml2pmx xmltex xmpincl xmuthesis 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 yazd-thesis ycbook ydoc yfonts yfonts-t1 yhmath yinit-otf york-thesis youngtab yplan yquant ytableau zapfchan zapfding zbmath-review-template zebra-goodies zed-csp zhlineskip zhlipsum zhnumber zhmetrics zhmetrics-uptex zhspacing ziffer zlmtt zootaxa-bst zref zwgetfdate zwpagelayout zxjafbfont zxjafont zxjatype zztex ); # 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 "cweb-old", # our files "cyrillic-bin", # binary "detex", # binary "devnag", # binary "dtl", # binary "dvi2tty", # binary "dvicopy", # binary "dvidvi", # binary "dviljk", # binary "dviout-util", # binary "dvipdfm", # binary "dvipdfmx", # binary "dvipng", # binary "dvipos", # binary "dvips", # binary "dvisvgm", # binary "ecgdraw", # awaiting upload with trivial \CheckSum fix 2jul16 "enctex", # binary "epspdf", # siep does it "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 "impatient-fr", # has one spurious blank line difference; if ever updated again, hopefully we'll notice "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 "latex-bin-dev", # binary "latexconfig", # we maintain "lcdftypetools", # binary "luatex", # binary "luahbtex", # binary "luajittex", # 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 "pdftosrc", # 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 "ps2eps", # binary "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 "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 "xelatex-dev", # binary "xetex", # binary "xetexconfig", # we maintain "xindy", # binary "xmltexconfig", # we maintain "xpdfopen", # binary ); 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; } # don't want to run svn update individually for every catalogue file. my $env = "env TLPKGINFO_CATALOGUE_NO_UPDATE=1"; chomp (my $ctan_dir = `$env $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.$tlpn"; 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 @ctan_files = (); 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/; # seems mathpazo files were updated in TL and not CTAN. # Too old to worry about. next if $basefile =~ m,(pazofnst.tex|Makefile)$, && $file =~ m,/mathpazo/,; # 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/,; # Different cluttex.lua gets installed. next if $basefile eq "cluttex.lua"; # Wrong README gets compared. next if $basefile eq "README" && $file =~ m,/(pmx|cs)/,; # Upstream README is gratuitously different. next if $basefile =~ /^README/ && $file =~ m,/(curve2e|marathi)/,; my $tl_file = "$Master/$file"; if (! -e $tl_file) { warn "$tl_file: TL file missing\n"; next; } chomp (@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. 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: