#!/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 askmaps aspectratio assignment assoccnt astro asyfig asymptote-faq-zh-cn asymptote-by-example-zh-cn asymptote-manual-zh-cn asypictureb attachfile aucklandthesis augie auncial-new aurical aurl autobreak autopdf authoraftertitle authorindex auto-pst-pdf autoaligne autoarea automata autonum autosp avantgar avremu awesomebox 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 bbcard bbding bbm bbm-macros bbold bbold-type1 bchart bclogo beamer beamer2thesis beamer-FUBerlin beamer-tut-pt beamer-verona beameraudience beamercolorthemeowl beamerdarkthemes beamerposter beamersubframe beamerswitch beamertheme-cuerna beamertheme-detlevcm beamertheme-epyt beamertheme-metropolis beamertheme-phnompenh beamertheme-saintpetersburg beamertheme-upenn-bc beamerthemejltree beamerthemenirma beebe begingreek begriff beilstein belleek bengali bera berenisadf besjournals bestpapers betababel beton beuron bewerbung bez123 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-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-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 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 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 cascadilla cases casyl catchfilebetweentags catcodes catechis catoptions cbcoptic cbfonts cbfonts-fd cc-pl ccaption ccfonts ccicons cclicenses cd cd-cover cdpbundl cell cellspace celtic censor cesenaexam cfr-initials cfr-lm changebar changelayout changepage changes chappg chapterfolder chbibref cheatsheet checkcites checklistings chem-journal chemarrow chembst chemcompounds chemcono chemexec chemfig chemformula chemgreek chemmacros chemnum chemschemex chemstyle cherokee chess chess-problem-diagrams chessboard chessfss chet chextras chicago chicago-annote chickenize childdoc chivo chkfloat chletter chngcntr chronology chronosys chscite churchslavonic cinzel circ circuitikz cite citeall cje cjhebrew cjk cjk-gs-integrate cjk-ko cjkpunct classics classpack classicthesis cleanthesis clearsans clefval cleveref clipboard clock cloze clrscode clrscode3e 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 colordoc colorinfo coloring colorsep colorspace colortab colortbl colorwav colorweb colourchange combelow combine combinedgraphics combofont comfortaa comicneue comma commado commath comment compactbib complexity components-of-TeX comprehensive computational-complexity concepts concmath concmath-fonts concprog concrete confproc constants conteq context-account context-algorithmic context-animation context-annotation context-bnf context-chromato context-cmscbf context-cmttbf context-construction-plan context-cyrillicnumbers context-degrade context-fancybreak context-filter context-french context-fullpage context-gantt context-gnuplot context-inifile context-layout context-letter context-lettrine context-mathsets context-notes-zh-cn context-rst context-ruby context-simplefonts context-simpleslides context-title context-transliterator context-typearea context-typescripts context-vim context-visualcounter continue contour contracard conv-xkv convbkmk cooking cooking-units cookingsymbols cool coollist coolstr coolthms cooltooltips coordsys copyedit copyrightbox cormorantgaramond correctmathalign coseoul countriesofeurope counttexruns courier-scaled courseoutline coursepaper coverpage covington cprotect 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 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-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 dtk dtxdescribe dtxgallery dtxgen dtxtut ducksay 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 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 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 errata esami es-tex-faq erdc erewhon esdiff esint esint-type1 esk eskd eskdx eso-pic esrelation esstix estcpmm esvect etaremune etdipa etex-pkg etextools ethiop ethiop-t1 etoc etoolbox etoolbox-de euenc eukdate euler eulerpx eulervm euro euro-ce europasscv europecv eurosym everyhook everypage exam exam-n examdesign example examplep exceltex excludeonly exercise exercises exp-testopt expdlist expex export expressg exsheets exsol extarrows exteps extpfeil extract extsizes facsimile factura facture faktor fancybox 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 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 gauss gb4e gcard gchords gcite gender geschichtsfrkl genealogy genealogytree gene-logic genmisc genmpage gentium-tug gentle geometry geometry-de german germbib germkorr getfiledate getitems getmap getoptk gfnotation gfsartemisia gfsbaskerville gfsbodoni gfscomplutum gfsdidot gfsneohellenic gfsporson gfssolomos ghab ghsystem gillcm gillius gincltex ginpenc gitfile-info gitinfo gitinfo2 gitlog gloss glossaries glossaries-danish glossaries-dutch glossaries-english glossaries-extra glossaries-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 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 guitlogo gzt h2020proposal hackthefootline hacm hagenberg-thesis halloweenmath handout hands hang hanging hanoi happy4th har2nat hardwrap harmony harnon-cv harpoon harvard harveyballs harvmac hatching hausarbeit-jura havannah hc he-she hecthese 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 hustthesis hvfloat hvindex hypdvips hyper hypernat hyperref hyperxmp hyph-utf8 hyphen-base hyphenat hyphenex hyplain ibycus-babel ibygrk icsv idxcmds idxlayout ieeepes ietfbibs ifetex iffont ifmslide ifmtarg ifnextok ifoddpage ifplatform 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 inconsolata index indextools initials inlinebib inlinedef inputtrc insbox installfont interactiveworkbook interchar interfaces interpreter interval 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 jknapltx jlabels jlreq jmlr jneurosci jpsj jsclasses jslectureplanner jumplines junicode jura juraabbrev jurabib juramisc jurarsp js-misc jvlisting kantlipsum karnaugh karnaugh-map karnaughmap kastrup kdgdocs kerkis kerntest keycommand keyfloat keyreader keystroke keyval2e keyvaltable kix kixfont knitting knittingpattern 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 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-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 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 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 lualibs luamesh luamplib luaotfload luapackageloader luasseq luatex85 luatexbase luatexja luatexko luatextra luatodonotes 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 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 mathpartir 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 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 mongolian-babel montserrat monofill montex moodle moreenum morefloats morehype moresize moreverb morewrites 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 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 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 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 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 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 pagenote pagerange pageslts paper papercdcase papermas papertex paracol parades paralist parallel paratype paresse parnotes parrun parselines parskip pas-cours pas-crosswords pas-cv pas-tableur passivetex patch patchcmd patgen2-tutorial path pauldoc pawpict pax pbibtex-base pbox pb-diagram pbsheet pdf14 pdf-trans pdfbook2 pdfcomment pdfcprot pdfcrop pdfjam pdflatexpicscale pdfmarginpar pdfpagediff pdfpages pdfprivacy pdfreview pdfscreen pdfslide pdfsync pdftricks pdftricks2 pdfx pdfxup pecha pedigree-perl perception perfectcut perltex permute persian-bib petiteannonce petri-nets pfarrei pgf pgf-blur pgf-soroban pgf-spectra pgf-umlcd pgf-umlsd pgfgantt pgfkeyx pgfmolbio pgfopts pgfornament pgfplots phaistos phffullpagefigure phfnote phfparen phfqit phfquotetext phfsvnwatermark phfthm philex philokalia philosophersimprint phonenumbers phonetic phonrule photo physics piano picinpar pict2e pictex pictex2 pictexsum piechartmp piff pigpen pinlabel pitex pittetd pixelart pkfix pkfix-helper pkgloader pkuthss pl placeat placeins placeins-plain plain-doc plainpkg plari plantslabels plates platex platex-tools platexcheat 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 postcards poster-mac powerdot powerdot-FUBerlin ppr-prv pracjourn preprint prerex present presentations presentations-en pressrelease prettyref preview prftree printlen proba probsoln procIAGssymp prodint productbox program progress progressbar proofread prooftrees proposal properties prosper protex protocol przechlewski-book psbao pseudocode psfrag psfrag-italian psfragx psgo psizzl pslatex psnfss pspicture pst-2dplot pst-3d pst-3dplot pst-abspos pst-am pst-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-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 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 quattrocento quicktype quotchap quoting quotmark quran r_und_s raleway ran_toks randbild randomlist randomwalk randtext rccol rcs rcs-multi rcsinfo readarray realboxes realscripts rec-thy recipe recipebook recipecard recycle rectopma refcheck refenums reflectgraphics refman refstyle regcount regexpatch register regstats reledmac relenc relsize reotex repeatindex repere repltext resphilosophica resumecls resumemac reverxii revquantum revtex ribbonproofs rjlparshap rlepsf rmathbr rmpage roboto robustcommand robustindex romanbar romanbarpagenumber romande romanneg romannum rosario rotfloat rotpages roundbox roundrect rrgtrees rsc rsfs rsfso rterface rtkinenc rtklage rubik ruhyphen rulercompass russ 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 statistik statex statex2 staves stdclsdv stdpage stealcaps steinmetz stellenbosch stex stix stmaryrd storebox storecmd stringstrings 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 sympytexpackage syntax synproof syntrace synttree systeme t-angles t2 tabfigures table-fct tableaux tablefootnote tableof tablestyles tablists tablor tabls tabriz-thesis tabstackengine tabto-generic tabto-ltx tabu tabularborder tabularcalc tabularew tabulars-e tabulary tabvar tagging tagpair talk tamefloats tamethebeast tap tapir tasks tcldoc tcolorbox tdclock tdsfrmath technics ted templates-fenn templates-sommer templatetools tempora tengwarscript tensor termcal termcal-de termlist termmenu testhyphens testidx teubner tex-ewd tex-font-errors-cheatsheet tex-gyre tex-gyre-math tex-ini-files tex-label tex-overview tex-ps tex-refs tex-virtual-academy-pl tex4ebook texapi texbytopic texcount texdef texdiff texdirflatten texdraw texfot texilikechaps texilikecover texliveonfly texloganalyser texlogos texmate texments texosquery texpower texproposal texshade textualicomma texvc textcase textfit textglos textgreek textmerg textopo textpath textpos tfrupee thaienum thalie theatre theoremref thesis-ekf thesis-gwu thesis-titlepage-fhac thinsp thmbox thmtools threadcol threeddice threeparttable threeparttablex thumb thumbpdf thumbs thumby thuthesis ticket ticollege tikz-bayesnet tikz-cd tikz-3dplot tikz-dependency tikz-dimline tikz-feynhand tikz-feynman tikz-inet tikz-kalender tikz-karnaugh tikz-ladder tikz-layers tikz-opm tikz-optics tikz-palattice tikz-qtree tikz-relay tikz-sfc tikz-timing tikzcodeblocks tikzducks tikzinclude tikzmark tikzorbital tikzpagenodes tikzpeople tikzpfeile tikzposter tikzscale tikzsymbols timbreicmc timetable timing-diagrams tinos tipa tipa-de tipfr titlecaps titlefoot titlepages titlepic titleref titlesec titling tkz-base tkz-berge tkz-doc tkz-euclide tkz-fct tkz-graph tkz-kiviat tkz-linknodes tkz-orm tikz-page tkz-tab tlc2 tocbibind tocdata tocloft tocvsec2 todo todonotes tokenizer toolbox tools topfloat totcount totpages toptesi tpslifonts tqft tracklang trajan tram translation-array-fr translation-arsclassica-de translation-biblatex-de translation-chemsym-de translation-dcolumn-fr translation-ecv-de translation-enumitem-de translation-europecv-de translation-filecontents-de translation-moreverb-de translation-natbib-fr translation-tabbing-fr translations 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 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 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 wrapfig wsemclassic wsuipa wtref xargs xassoccnt 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 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 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 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 "texdoc", # binary "texinfo", # tl-update-auto "texlive.infra", # binary "texsis", # too old to worry about "texware", # binary "texworks", # binary "tie", # binary "tlaunch", # w32 siep binary "tlcockpit", # our binary "tlshell", # our binary "ttfutils", # binary "tpic2pdftex", # ctan mirrors from us "updmap-map", # autogenerated map files "uhc", # big tar files from 2005, don't worry until update "uptex", # binary "vlna", # binary "web", # binary "xdvi", # binary "xetex", # binary "xetexconfig", # we maintain "xindy", # binary "xmltexconfig", # we maintain ); exit (&main ()); sub main { chomp ($Master = `cd $mydir/../.. && pwd`); $tlpdb = TeXLive::TLPDB->new ("root" => $Master); die "Cannot find tlpdb in $Master!" unless defined $tlpdb; $OPT{"verbose"} = 0; if ($ARGV[0] eq "--verbose" || $ARGV[0] eq "-v") { $OPT{"verbose"} = 1; shift @ARGV; } $OPT{"all"} = 0; if ($ARGV[0] eq "--all") { $OPT{"all"} = 1; shift @ARGV; } $OPT{"no-clean"} = 0; if ($ARGV[0] eq "--no-clean") { $OPT{"no-clean"} = 1; shift @ARGV; } if ($ARGV[0] eq "--list-not-treated") { my @not_checked = (); for my $b (&normal_tlps ()) { if (! grep ($b eq $_, @TLP_working, @TLP_no_check)) { push (@not_checked, $b); } } print "" . (@not_checked+0) . " TL packages not checked against CTAN:\n"; print "@not_checked\n"; @ARGV = (); # no normal checks } elsif ($ARGV[0] eq "--check") { # check all/only those packages we have actually run through this mill. @ARGV = @TLP_working; } elsif ($ARGV[0] eq "--check-all") { @ARGV = &normal_tlps (); } my $errcount = 0; for my $tlp (@ARGV) { print "checking $tlp..." if $OPT{"verbose"}; $errcount += &do_tlp ($tlp); } return $errcount; } # gives a list with only the 'normal' packages, # that is, excluding meta-packages and binary packages # (and hyphen for the moment) # sub normal_tlps { my @normal; my $non_normal = `ls $Master/bin`; $non_normal =~ s/\n/\$|/g; $non_normal .= '^0+texlive|^bin-|^collection-|^scheme-|^texlive-|^hyphen-'; foreach ($tlpdb->list_packages) { push (@normal, $_) unless (/$non_normal/); } return @normal; } # Return 1 if package TLPN needs updating (or error), 0 if ok. # sub do_tlp { my ($tlpn) = @_; my $needed = 0; my $tlp = $tlpdb->get_package($tlpn); if (!defined($tlp)) { warn "$0: no package $tlpn\n"; return 1; } chomp (my $ctan_dir = `$mydir/tlpkginfo --prepare '$tlpn'`); if (! $ctan_dir) { warn "$0: oops, no CTAN directory for $tlpn, fix fix\n"; return 1; } # csplain and cslatex have .tar.gz's that need to be unpacked for # comparison. (perhaps this should be done in tlpkginfo.) but don't # do any unpacking inside the ctan hierarchy. chomp (my $ctan_root = `$mydir/tlpkginfo --ctan-root`); if ($ctan_dir !~ m,^$ctan_root,) { for my $tgz (glob ("$ctan_dir/*.tar.gz")) { system ("tar -C $ctan_dir -xf $tgz"); } } # One more total kludge. We should probably put this into tlpkginfo # and factor it out from here and ctan2tds. if ($tlpn eq "cs") { $TMPDIR = $ENV{"TMPDIR"} || "/tmp"; my $pkgdir = "$TMPDIR/tl.$pkgname"; system ("rm -rf $pkgdir"); mkdir ($pkgdir, 0777) || die "mkdir($pkgdir) failed: $!"; # # unpack the multiple constituent tarballs. for my $tarbase ("csfonts-t1", "csfonts", "cspsfonts") { system ("tar -C $pkgdir -xf $ctan_dir/$tarbase.tar.gz"); } # look in the new dir we just created. $ctan_dir = $pkgdir; } my @tl_files = (); push @tl_files, $tlp->runfiles; push @tl_files, $tlp->docfiles; push @tl_files, $tlp->srcfiles; if ($tlp->relocated) { for (@tl_files) { s:^$RelocPrefix/:$RelocTree/:; } } # we don't push bin files. my @tl_basefiles = (); # compare with CTAN after the loop my @compared = (); for my $file (@tl_files) { (my $basefile = $file) =~ s,^.*/,,; # if file exists by multiple names in TL (e.g., README), only check # the first one we come across, since we'll only find the first one # on CTAN and we don't want to try to match subdir suffixes. next if grep { $_ eq $basefile } @tl_basefiles; #warn "checking tl file $file -> $basefile\n"; push (@tl_basefiles, $basefile); # No point in comparing our pdfs now, too many are different. # However, for lshort translations and mathdesign, pdf can be # all we have to compare. next if $file =~ /\.pdf$/ && $file !~ /short|mathdesign/; # knuth.tds.zip (from latex-tds) is wrong wrt to the actual # originals, which we installed by hand. Don't check them until fixes. next if $file =~ m,/(mf84.bug|tex82.bug|errorlog.tex)$,; # We install our own stub, not ConTeXt's. I guess. next if $basefile eq "mptopdf.exe"; # btxmac.tex symlinked on CTAN, but we may as well keep the copy # actually used in lollipop in TL (doc tree). next if $basefile eq "btxmac.tex" && $file =~ m,/lollipop/,; # Wrong README gets compared. next if $basefile eq "README" && $file =~ m,/(pmx|cs)/,; my $tl_file = "$Master/$file"; if (! -e $tl_file) { warn "$tl_file: TL file missing\n"; next; } chomp (my @ctan_files = `find $ctan_dir/ -name $basefile`); #warn "ctan find $basefile: @ctan_files\n"; # the trailing / is so we dereference a symlink on CTAN. next if @ctan_files > 1; # if more than one file by same name, skip my $ctan_file = $ctan_files[0]; #warn "ctan file is $ctan_file\n"; if (! -e $ctan_file) { # maybe it'll be there with a case change in the name chomp (@ctan_files = `find $ctan_dir/ -iname $basefile`); #warn "ctan ifind $basefile: @ctan_files\n"; next if @ctan_files > 1; # if more than one file by same name, skip $ctan_file = $ctan_files[0]; if (! -e $ctan_file) { # we generate lots of files, eg perlmacros.sty, so might skip. warn "$ctan_file: CTAN file missing\n" if $ctan_file && $ctan_file !~ /(cfg|dvi|sty|tex)$/; next; } } push (@compared, $basefile); if (&files_differ ($tl_file, $ctan_file)) { print "# $tlpn\ndiff $ctan_file $tl_file\n"; $needed = 1; last unless $OPT{"all"}; } } # unfortunately, we cannot do this. There are many PDF's on CTAN # which have no sources or otherwise problematic for TL. Perhaps one # day we could use the %moreclean hash from ctan2tds as an additional # filter, i.e., put all those ctan2tds tables in an external file. # # # check for PDF files on CTAN that we don't have. # my @ctan_pdf_needed = (); # chomp (my @ctan_files = `find $ctan_dir -name \*.pdf`); # for my $cfile (@ctan_files) { # (my $base_cfile = $cfile) =~ s,^.*/,,; # if (! grep { $_ eq $base_cfile } @tl_basefiles) { # push (@ctan_pdf_needed, $base_cfile); # } # } # if (@ctan_pdf_needed) { # if (! $needed) { # # if this is the first thing needed (no diffs), print package name. # print "# $tlpn\n"; # $needed = 1; # } # print "# new on ctan: @ctan_pdf_needed\n"; # } if (@compared == 0) { warn "\n$tlpn: no files to compare in $ctan_dir, fixme!\n"; warn " (tl_files = @tl_files)\n"; warn " (ctan_files = @ctan_files)\n"; } elsif ($needed == 0) { print "ok\n" if $OPT{"verbose"}; } print ((@compared + 0) . " compared (@compared)\n") if $OPT{"verbose"}; # clean up the tmpdir possibly created from tlpkginfo --prepare. chomp (my $ctan_root = `$mydir/tlpkginfo --ctan-root`); if ($ctan_dir !~ m,^$ctan_root, && ! $OPT{"no-clean"}) { system ("rm -rf $ctan_dir"); } return $needed; } # 0 if files are the same, 1 if they are different. # sub files_differ { my ($tl_file,$ctan_file) = @_; #warn "comparing $ctan_file $tl_file\n"; return system ("$mydir/cmp-textfiles $ctan_file $tl_file"); } # vim: set ts=8 sw=2 expandtab: