Adding upstream version 1.25.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
parent
0d12e1c796
commit
9591974d25
1449 changed files with 620551 additions and 0 deletions
1
.tarball-version
Normal file
1
.tarball-version
Normal file
|
@ -0,0 +1 @@
|
|||
1.25.0
|
1
.version
Normal file
1
.version
Normal file
|
@ -0,0 +1 @@
|
|||
1.25.0
|
1
ABOUT-NLS
Normal file
1
ABOUT-NLS
Normal file
|
@ -0,0 +1 @@
|
|||
<https://www.gnu.org/software/gettext/manual/html_node/Users.html>
|
366
AUTHORS
Normal file
366
AUTHORS
Normal file
|
@ -0,0 +1,366 @@
|
|||
Authors of GNU Wget.
|
||||
Thank you very much for spending your time !
|
||||
|
||||
|
||||
This list of contributors is maintained in
|
||||
(more or less) the order of date of first commit.
|
||||
Those with the "ASSGN" tag have assigned the copyrights
|
||||
of their patches to the FSF.
|
||||
|
||||
The list was generated on 14.05.23 by parsing the ChangeLog
|
||||
file until 2014 and the git commit history after that.
|
||||
|
||||
Current Maintainers:
|
||||
|
||||
[ASSGN] Darshit Shah *darnir [at] gnu.org*
|
||||
[ASSGN] Tim Rühsen *tim.ruehsen [at] gmx.de*
|
||||
|
||||
Contributors:
|
||||
|
||||
|
||||
[ASSGN] Hrvoje Niksic *hniksic [at] srce.hr*
|
||||
Designed and implemented Wget.
|
||||
[ ] Hrvoje Lacko *hlacko [at] fly.cc.fer.hr*
|
||||
[ ] Antonio Rosella *antonio.rosella [at] agip.it*
|
||||
[ ] Drazen Kacar *dave [at] fly.cc.fer.hr*
|
||||
[ ] Tage Stabell-Kulo *tage [at] acm.org*
|
||||
[ ] Shawn McHorse *riffraff [at] txdirect.net*
|
||||
[ ] Mark Boyns *boyns [at] sdsu.edu*
|
||||
[ ] Dieter Baron *dillo [at] danbala.tuwien.ac.at*
|
||||
[ ] Gregor Hoffleit *flight [at] mathi.uni-heidelberg.DE*
|
||||
[ ] Kaveh R. Ghazi *ghazi [at] caip.rutgers.edu*
|
||||
[ASSGN] Gordon Matzigkeit *gord [at] gnu.ai.mit.edu*
|
||||
Wrote netrc.c and netrc.h.
|
||||
[ASSGN] Darko Budor *dbudor [at] zems.fer.hr*
|
||||
Wrote initial support for Windows, wrote wsstartup.c,
|
||||
wsstartup.h and windecl.h.(The files were later renamed,
|
||||
but his code and ideas remained present.)
|
||||
[ ] Roger Beeman *beeman [at] cisco.com*
|
||||
[ ] Marin Purgar *pmc [at] asgard.hr*
|
||||
[ ] gilles Cedoc *gilles [at] cedocar.fr*
|
||||
[ ] Karl Eichwalder *ke [at] ke.Central.DE*
|
||||
[ ] Fila Kolodny *fila [at] ibi.com*
|
||||
[ ] Andreas Schwab *schwab [at] issan.informatik.uni-dortmund.de*
|
||||
[ ] Mike Thomas *mthomas [at] reality.ctron.com*
|
||||
[ ] Francois Pinard *pinard [at] iro.umontreal.ca*
|
||||
[ ] Jordan Mendelson *jordy [at] wserv.com*
|
||||
[ ] Karl Heuer *kwzh [at] gnu.org*
|
||||
[ ] Andy Eskilsson *andy.eskilsson [at] telelogic.se*
|
||||
[ ] Karl Eichwalder *ke [at] suse.de*
|
||||
[ ] Simon Josefsson *jas [at] pdc.kth.se*
|
||||
[ ] Karl Eichwalder *karl [at] suse.de*
|
||||
[ASSGN] Junio Hamano *junio [at] twinsun.com*
|
||||
Added support for FTP Opie and HTTP digest authentication.
|
||||
[ ] Tim Adam *tma [at] osa.com.au*
|
||||
[ ] Wanderlei Cavassin *cavassin [at] conectiva.com.br*
|
||||
[ASSGN] Jan Prikryl *prikryl [at] cg.tuwien.ac.at*
|
||||
[ ] John *john [at] futuresguide.com*
|
||||
[ ] Tim Charron *tcharron [at] interlog.com*
|
||||
[ ] Robert Schmidt *rsc [at] vingmed.no*
|
||||
[ ] Stefan Hornburg *racke [at] gundel.han.de*
|
||||
[ ] Giovanni Bortolozzo *borto [at] dei.unipd.it*
|
||||
[ ] Gregor Hoffleit *flight [at] mathi.uni-heidelberg.de*
|
||||
[ ] Douglas E. Wegscheid *wegscd [at] whirlpool.com*
|
||||
[ ] Toomas Soome *tsoome [at] ut.ee*
|
||||
[ ] Simos KSenitellis *simos [at] teiath.gr*
|
||||
[ ] Juan Jose Rodriguez *jcnsoft [at] jal1.telmex.net.mx*
|
||||
[ ] Dominique Delamarre *dominique.delamarre [at] hol.fr*
|
||||
[ ] Martin Kraemer *Martin.Kraemer [at] mch.sni.de*
|
||||
[ ] Mathieu Guillaume *mat [at] cythere.com*
|
||||
[ ] Alexander Kourakos *awk [at] bnt.com*
|
||||
[ ] Dave Love *d.love [at] dl.ac.uk*
|
||||
[ ] Heinz Salzmann *heinz.salzmann [at] intermetall.de*
|
||||
[ ] Adam D. Moss *adam [at] foxbox.org*
|
||||
[ ] Howard Gayle *howard [at] fjst.com*
|
||||
[ ] Hans Grobler *grobh [at] conde.ee.sun.ac.za*
|
||||
[ ] Szakacsits Szabolcs *szaka [at] sienet.hu*
|
||||
[ ] Simon Munton *simonm [at] m4data.co.uk*
|
||||
[ ] Edward J. Sabol *sabol [at] alderaan.gsfc.nasa.gov*
|
||||
[ ] "R. K. Owen" *rkowen [at] Nersc.GOV*
|
||||
[ ] Alexander V. Lukyanov *lav [at] yars.free.net*
|
||||
[ ] andrew deryabin *djsf [at] softhome.net*
|
||||
[ ] Heiko Herold *Heiko.Herold [at] previnet.it*
|
||||
[ ] Dan Berger *dberger [at] ix.netcom.com*
|
||||
[ ] Charles G Waldman *cgw [at] fnal.gov*
|
||||
[ ] Damir Dzeko *ddzeko [at] zesoi.fer.hr*
|
||||
[ASSGN] Dan Harkless *wget [at] harkless.org*
|
||||
Added --backup-converted, --follow-tags, --html-extension,
|
||||
--ignore-tags, and --page-requisites;
|
||||
improved documentation; etc. Was the principle maintainer
|
||||
of GNU Wget for some time.
|
||||
[ ] Daniel S. Lewart *d-lewart [at] uiuc.edu*
|
||||
[ ] HIROSE Masaaki *hirose31 [at] t3.rim.or.jp*
|
||||
[ ] Const Kaplinsky *const [at] ce.cctpu.edu.ru*
|
||||
[ ] John Daily *jdaily [at] cyberdude.com*
|
||||
[ ] Adrian Aichner *adrian [at] xemacs.org*
|
||||
[ ] Matthew Seaman *m.seaman [at] inpharmatica.co.uk*
|
||||
[ ] Tyler Riddle *triddle [at] liquidmarket.com*
|
||||
[ ] John Summerfield *summer [at] OS2.ami.com.au*
|
||||
[ ] Csaba Raduly *csaba.raduly [at] sophos.com*
|
||||
[ ] Igor Khristophorov *igor [at] atdot.org*
|
||||
[ ] Adrian Aichner *Adrian.Aichner [at] t-online.de*
|
||||
[ ] Jonas Jensen *bones [at] huleboer.dk*
|
||||
[ ] Tim Mooney *mooney [at] dogbert.cc.ndsu.NoDak.edu*
|
||||
[ ] Hack Kampbjørn *hack [at] hackdata.com*
|
||||
[ ] Philipp Thomas *pthomas [at] suse.de*
|
||||
[ ] Nicolas Lichtmaier *nick [at] debian.org*
|
||||
[ ] KOJIMA Hajime *kjm [at] rins.ryukoku.ac.jp*
|
||||
[ ] Paul Bludov *paul [at] ozero.net*
|
||||
[ ] Trond Eivind Glomsrod *teg [at] redhat.com*
|
||||
[ASSGN] Ian Abbott *abbotti [at] mev.co.uk*
|
||||
Contributed bugfixes, Windows-related fixes, provided a
|
||||
prototype implementation of the new recursive code, and more.
|
||||
Co-maintained Wget during the 1.8 release cycle.
|
||||
[ASSGN] Maciej W. Rozycki *macro [at] ds2.pg.gda.pl*
|
||||
[ ] R.I.P. Deaddog *maddog [at] linuxhall.org*
|
||||
[ ] Adam J. Richter *adam [at] yggdrasil.com*
|
||||
[ ] Dave Turner *dct25 [at] hermes.cam.ac.uk*
|
||||
[ASSGN] Christian Fraenkel *c.fraenkel [at] gmx.net*
|
||||
Initially implemented SSL support.
|
||||
[ ] Daniel BODEA *dali [at] dali-designs.com*
|
||||
[ ] Alan Eldridge *alane [at] geeksrus.net*
|
||||
[ ] Chris Seawood *cls [at] seawood.org*
|
||||
[ ] Peter Farmer *peter.farmer [at] zveno.com*
|
||||
[ ] Jochen Hein *jochen [at] jochen.org*
|
||||
[ ] Lemble Gregory *gregory.lemble [at] st.com*
|
||||
[ ] Ingo T. Storm *tux-sparc [at] computerbild.de*
|
||||
[ ] T. Bharath *TBharath [at] responsenetworks.com*
|
||||
[ ] Andre Majorel *amajorel [at] teaser.fr*
|
||||
[ ] Christian Lackas *delta [at] lackas.net*
|
||||
[ ] Andreas Damm *andreas-sourceforge [at] radab.org*
|
||||
[ ] Chin-yuan Kuo *sr1111111 [at] yahoo.com.tw*
|
||||
[ASSGN] Thomas Lussnig *thomas.lussnig [at] bewegungsmelder.de*
|
||||
Initially implemented IPv6 support.
|
||||
[ ] Bill Richardson *bill [at] riverstonenet.com*
|
||||
[ASSGN] Nicolas Schodet *contact [at] ni.fr.eu.org*
|
||||
Contributed to cookie code and documentation.
|
||||
[ ] Ahmon Dancy *dancy [at] dancysoft.com*
|
||||
[ ] Noel Kothe *noel [at] debian.org*
|
||||
[ ] Aurelien Marchand *artaxerxes [at] users.sf.net*
|
||||
[ ] Aaron S. Hawley *Aaron.Hawley [at] uvm.edu*
|
||||
[ ] Bertrand Demiddelaer *bert [at] b3rt.org*
|
||||
[ ] Matthew J. Mellon *mellon [at] tymenet.com*
|
||||
[ASSGN] Gisle Vanem *giva [at] bgnett.no*
|
||||
Contributed Windows and MS-DOS improvements, including a
|
||||
port of run_with_timeout to Windows, additions to Makefiles,
|
||||
and many bug reports and fixes.
|
||||
[ ] Philip Stadermann *philip.stadermann [at] credativ.de*
|
||||
[ ] Dennis Smit *ds [at] nerds-incorporated.org*
|
||||
[ ] Christian Biere *christianbiere [at] gmx.de*
|
||||
[ ] David Fritz *zeroxdf [at] att.net*
|
||||
[ ] Jens Roesner *jens.roesner [at] gmx.de*
|
||||
[ ] Nico R. *n-roeser [at] gmx.net*
|
||||
[ ] Larry Jones *lawrence.jones [at] ugsplm.com*
|
||||
[ ] YAMAZAKI Makoto *Yamazaki.Makoto [at] fujixerox.co.jp*
|
||||
[ ] Hans-Andreas Engel *engel [at] node.ch*
|
||||
[ ] Leonid Petrov *nouser [at] lpetrov.net*
|
||||
[ ] Ulf Harnhammar *ulf.harnhammar.9485 [at] student.uu.se*
|
||||
[ASSGN] Mauro Tortonesi *mauro [at] ferrara.linux.it*
|
||||
Improved IPv6 support, adding support for dual
|
||||
family systems. Refactored and enhanced FTP IPv6 code.
|
||||
Maintained GNU Wget from 2004-2007.
|
||||
[ ] Marco Colombo *m.colombo [at] ed.ac.uk*
|
||||
[ ] Joseph Caretto *jcaretto [at] pitt.edu*
|
||||
[ ] FUJISHIMA Satsuki *sf [at] FreeBSD.org*
|
||||
[ ] Charles C.Fu *ccwf [at] bacchus.com*
|
||||
[ ] Andreas Beckmann *debian [at] abeckmann.de*
|
||||
[ ] Keith Moore *keithmo [at] exmsft.com*
|
||||
[ ] Benno Schulenberg *benno [at] nietvergeten.nl*
|
||||
[ ] Giuseppe Bonacci *g.bonacci [at] libero.it*
|
||||
[ ] Vasil Dimov *vd [at] datamax.bg*
|
||||
[ ] Albert Chin *wget [at] mlists.thewrittenword.com*
|
||||
[ ] Jeremy Shapiro *jnshapiro [at] gmail.com*
|
||||
[ ] Stepan Kasal *kasal [at] ucw.cz*
|
||||
[ ] Russ Allbery *rra [at] stanford.edu*
|
||||
[ASSGN] Daniel Stenberg *daniel [at] haxx.se*
|
||||
NTLM authentication in http-ntlm.c and http-ntlm.h
|
||||
originally written for curl donated for use in GNU Wget.
|
||||
[ ] Lawrence Jones *lawrence.jones [at] ugs.com*
|
||||
[ ] CHEN Peng *chenpeng [at] alumni.nus.edu.sg*
|
||||
[ASSGN] Tony Lewis *tlewis [at] exelana.com*
|
||||
[ ] KJKHyperion *hackbunny [at] reactos.com*
|
||||
[ ] Daniel Richard G. *skunk [at] iSKUNK.ORG*
|
||||
[ ] Mike Grant *mggr [at] pml.ac.uk*
|
||||
[ASSGN] Micah Cowan *micah [at] cowan.name*
|
||||
Maintained Wget from mid-2007 to mid-2010.
|
||||
[ASSGN] Joshua David Williams *yurimxpxman [at] gmail.com*
|
||||
[ASSGN] Ralf Wildenhues *Ralf.Wildenhues [at] gmx.de*
|
||||
Contributed patches to convert Wget to use Automake as
|
||||
part of its build process, and various bugfixes.
|
||||
[ ] Jochen Roderburg *roderburg [at] uni-koeln.de*
|
||||
[ ] Stephen Gildea *stepheng+wget [at] gildea.com*
|
||||
[ ] Benno Schulenberg *bensberg [at] justemail.net*
|
||||
[ ] Alexander Dergachev *cy6erbr4in [at] gmail.com*
|
||||
[ASSGN] Rabin Vincent *rabin [at] rab.in*
|
||||
[ASSGN] Steven Schubiger *schubiger [at] gmail.com*
|
||||
Many helpful patches, bugfixes and improvements.
|
||||
Notably, conversion of Wget to use the Gnulib quotes and
|
||||
quoteargs modules, and the addition of password prompts
|
||||
at the console, via the Gnulib getpasswd-gnu module.
|
||||
[ ] Alain Guibert *alguibert+bts [at] free.fr*
|
||||
[ ] Jim Paris *jim [at] jtan.com*
|
||||
[ASSGN] Mike Frysinger *vapier [at] gentoo.org*
|
||||
[ ] Pranab Shenoy *pranab.loosinit.shenoy [at] gmail.com*
|
||||
[ASSGN] Ted Mielczarek *ted.mielczarek [at] gmail.com*
|
||||
Support for parsing links from CSS.
|
||||
[ASSGN] Joao Ferreira *joao [at] joaoff.com*
|
||||
[ ] Kenny Parnell *k.parnell [at] gmail.com*
|
||||
[ ] Henri Häkkinen *henux [at] users.sourceforge.net*
|
||||
[ASSGN] Madhusudan Hosaagrahara *com.gmail.hrmadhu*
|
||||
[ASSGN] Xavier Saint *wget [at] sxav.eu*
|
||||
Support for IRIs (RFC 3987).
|
||||
[ ] Michael Kessler *kessler.michael [at] aon.at*
|
||||
[ ] Alexander Drozdov *dzal_mail [at] mtu-net.ru*
|
||||
[ ] Alexander Belopolsky *alexander.belopolsky [at] gmail.com*
|
||||
[ASSGN] Gerardo E. Gidoni *gerel [at] gnu.org*
|
||||
[ ] Benjamin Wolsey *bwy [at] benjaminwolsey.de*
|
||||
[ ] Xin Zou *zouxin2008 [at] gmail.com*
|
||||
[ ] Julien Pichon *julienpichon7 [at] gmail.com*
|
||||
[ ] Phil Pennock *mutt-dev [at] spodhuis.org*
|
||||
[ ] Jay Krell *jay.krell [at] cornell.edu*
|
||||
[ASSGN] Steven Schweda *sms [at] antinode.info*
|
||||
[ASSGN] Petr Pisar *petr.pisar [at] atlas.cz*
|
||||
[ ] Marcel Telka *marcel [at] telka.sk*
|
||||
[ ] Michael Baeuerle *michael.baeuerle [at] gmx.net*
|
||||
[ASSGN] Arvind Jamuna Dixit *ardsrk [at] gmail.com*
|
||||
[ ] Peter Rosin *peda [at] lysator.liu.se*
|
||||
[ ] David Holman *holman.david [at] gmail.com*
|
||||
[ ] Jeremy Olexa *darkside [at] gentoo.org*
|
||||
[ ] Paul Townsend *aab [at] purdue.edu*
|
||||
[ASSGN] Giuseppe Scrivano *gscrivano [at] gnu.org*
|
||||
Added support for HTTP/1.1.
|
||||
Active Wget Maintainer from 2010-2015.
|
||||
[ ] Muthu Subramanian K *muthusuba [at] gmail.com*
|
||||
[ ] Alan Jenkins *alan-jenkins [at] tuffmail.co.uk*
|
||||
[ ] John Trengrove *jtrengrove [at] gmail.com*
|
||||
[ ] Alon Bar-Lev *alon.barlev [at] gmail.com*
|
||||
[ASSGN] Reza Snowdon *vivi [at] mage.me.uk*
|
||||
[ASSGN] Dennis, CHENG Renquan *crquan [at] fedoraproject.org*
|
||||
[ASSGN] Merinov Nikolay *kim.roader [at] gmail.com*
|
||||
[ ] Ivanov Anton *x86mail [at] gmail.com*
|
||||
[ ] Manfred Koizar *mkoi-pg [at] aon.at*
|
||||
[ASSGN] Jessica McKellar *jesstess [at] mit.edu*
|
||||
[ ] Filipe Brandenburger *filbranden [at] gmail.com*
|
||||
[ ] Evgeniy Philippov *egphilippov [at] googlemail.com*
|
||||
[ ] Adrien Nader *adrien [at] notk.org*
|
||||
[ ] Gilles Carry *gilles.carry [at] st.com*
|
||||
[ ] Tomasz Buchert *tomek.buchert [at] gmail.com*
|
||||
[ASSGN] Ray Satiro *raysatiro [at] yahoo.com*
|
||||
[ ] Cristian Rodríguez *crrodriguez [at] opensuse.org*
|
||||
[ASSGN] Daniel Manrique *roadmr [at] tomechangosubanana.com*
|
||||
[ ] Carlos Martín Nieto *carlos [at] cmartin.tk*
|
||||
[ ] Jochen Roderburg *Roderburg [at] Uni-Koeln.DE*
|
||||
[ ] Mojca Miklavec *mojca.miklavec.lists [at] gmail.com*
|
||||
[ ] Alan Hourihane *alanh [at] fairlite.co.uk*
|
||||
[ ] Christian Jullien *eligis [at] orange.fr*
|
||||
[ ] Jakob Matthes *jakob.matthes [at] gmail.com*
|
||||
[ ] Karl Berry *karl [at] freefriends.org*
|
||||
[ ] Henrik Holst *henrik.holst [at] millistream.com*
|
||||
[ASSGN] Gijs van Tulder *gvtulder [at] gmail.com*
|
||||
[ASSGN] Sasikantha Babu *sasikanth.v19 [at] gmail.com*
|
||||
[ ] Ángel González *keisial [at] gmail.com*
|
||||
[ ] Daniel Kahn Gillmor *dkg [at] fifthhorseman.net*
|
||||
[ ] illusionoflife *illusion.of.life92 [at] gmail.com*
|
||||
[ ] mancha *mancha [at] mac.hush.com*
|
||||
[ ] *y-iida [at] secom.co.jp*
|
||||
[ ] Rohit Mathulla *rohit_mathulla [at] yahoo.com*
|
||||
[ ] Nguyễn Thái Ngọc Duy *pclouds [at] gmail.com*
|
||||
[ ] Stefano Lattarini *stefano.lattarini [at] gmail.com*
|
||||
[ ] Michael Stapelberg *michael [at] stapelberg.de*
|
||||
[ ] Pavel Mateja *pavel [at] netsafe.cz*
|
||||
[ASSGN] Darshit Shah *darnir [at] gnu.org*
|
||||
[ ] Tomas Hozza *thozza [at] redhat.com*
|
||||
[ ] mancha *mancha1 [at] hush.com*
|
||||
[ASSGN] Bykov Aleksey *gnfalex [at] rambler.ru*
|
||||
[ ] Dave Reisner *dreisner [at] archlinux.org*
|
||||
[ ] Ciprian Vieru *devel.php [at] gmail.com*
|
||||
[ ] Karsten Hopp *karsten [at] redhat.com*
|
||||
[ ] Will Dietz *w [at] wdtz.org*
|
||||
[ ] Andrea Urbani *matfanjol [at] mail.com*
|
||||
[ ] Håkon Vågsether *hauk142 [at] gmail.com*
|
||||
[ ] Lars Wendler *polynomial-c [at] gentoo.org*
|
||||
[ASSGN] Yousong Zhou *yszhou4tech [at] gmail.com*
|
||||
[ ] Vladimír Pýcha *vpycha [at] gmail.com*
|
||||
[ASSGN] Zihang Chen *chsc4698 [at] gmail.com*
|
||||
[ ] Benjamin Goose *gans+wget [at] tngtech.com*
|
||||
[ ] Nikita Vetrov *admin [at] kanaria.ru*
|
||||
[ ] Nikolay Morozov *n.morozov [at] securitycode.ru*
|
||||
[ ] Matthew Atkinson *mutley456 [at] ntlworld.com*
|
||||
[ ] Peter Meiser *meiser [at] gmx-topmail.de*
|
||||
[ ] Pär Karlsson *feinorgh [at] gmail.com*
|
||||
[ ] Jakub Čajka *jcajka [at] redhat.com*
|
||||
[ ] Witchakorn Kamolpornwijit *witchakk [at] mit.edu*
|
||||
[ ] Tom Li *biergaizi2009 [at] gmail.com*
|
||||
[ ] Jérémie Courrèges-Anglas *jca [at] wxcvbn.org*
|
||||
[ ] Cong Ma *cma [at] pmo.ac.cn*
|
||||
[ ] Yuriy M. Kaminskiy *yumkam [at] gmail.com*
|
||||
[ASSGN] Eli Zaretskii *eliz [at] gnu.org*
|
||||
[ ] Mathieu Parent *math.parent [at] gmail.com*
|
||||
[ ] Dagobert Michelsen *dam [at] opencsw.org*
|
||||
[ ] Gisle Vanem *gvanem [at] yahoo.no*
|
||||
[ ] Anderson Goulart *global [at] kokre.com*
|
||||
[ASSGN] Ander Juaristi Alamos *ajuaristi [at] gmx.es*
|
||||
[ ] Rohan Prinja *rohan.prinja [at] gmail.com*
|
||||
[ASSGN] Hubert Tarasiuk *hubert.tarasiuk [at] gmail.com*
|
||||
[ASSGN] Miquel Llobet *mllobet.cm [at] gmail.com*
|
||||
[ ] Romain Bentz *romain.bentz [at] dataiku.com*
|
||||
[ ] Alex Henrie *alexhenrie24 [at] gmail.com*
|
||||
[ASSGN] Jookia *166291 [at] gmail.com*
|
||||
[ ] Daniele Calore *daniele.calore [at] tin.it*
|
||||
[ ] Christian Neukirchen *chneukirchen [at] gmail.com*
|
||||
[ ] christian fafard *cfaf [at] hotmail.com*
|
||||
[ ] Ikey Doherty *michael.i.doherty [at] intel.com*
|
||||
[ ] Ygal Blum *ygal.blum [at] technicolor.com*
|
||||
[ ] Jernej Simončič *jernej|s-wget [at] eternallybored.org*
|
||||
[ ] Maks Orlovich *morlovich [at] google.com*
|
||||
[ASSGN] moparisthebest *admin [at] moparisthebest.com*
|
||||
[ ] Sergio Gelato *sergio.gelato [at] astro.su.se*
|
||||
[ ] Sean Burford *sburford [at] google.com*
|
||||
[ASSGN] Matthew White *mehw.is.me [at] inventati.org*
|
||||
[ ] Jeffery To *jeffery.to [at] gmail.com*
|
||||
[ ] Tobias Stoeckmann *tobias [at] stoeckmann.org*
|
||||
[ASSGN] Dale R. Worley *worley [at] ariadne.com*
|
||||
[ ] Liam R. Howlett *Liam.Howlett [at] WindRiver.com*
|
||||
[ ] losgrandes *pwajda [at] gmail.net.pl*
|
||||
[ ] Rahul Bedarkar *rahul.bedarkar [at] imgtec.com*
|
||||
[ ] Nikos Mavrogiannopoulos *nmav [at] gnutls.org*
|
||||
[ASSGN] vijeth-aradhya *vijthaaa [at] gmail.com*
|
||||
[ASSGN] Tom Szilagyi *tomszilagyi [at] gmail.com*
|
||||
[ASSGN] YX Hao *lifenjoiner [at] 163.com*
|
||||
[ ] Benjamin Esham *benjamin [at] esham.io*
|
||||
[ ] Christof Horschitz *christof [at] nimbusec.com*
|
||||
[ASSGN] Vijo Cherian *codervijo [at] gmail.com*
|
||||
[ ] klemens *ka7 [at] github.com*
|
||||
[ ] Anton Yuzhaninov *citrin+github [at] citrin.ru*
|
||||
[ASSGN] Tim Schlueter *schlueter.tim [at] linux.com*
|
||||
[ASSGN] Josef Moellers *jmoellers [at] suse.de*
|
||||
[ ] Peter Wu *peter [at] lekensteyn.nl*
|
||||
[ ] Reiji *gey3dr [at] gmail.com*
|
||||
[ ] Loganaden Velvindron *logan [at] hackers.mu*
|
||||
[ ] ethus3h *kolubat [at] gmail.com*
|
||||
[ ] Tomas Korbar *tkorbar [at] redhat.com*
|
||||
[ ] Nikos Mavrogiannopoulos *nmav [at] redhat.com*
|
||||
[ ] Luiz Angelo Daros de Luca *luizluca [at] gmail.com*
|
||||
[ ] Kapus, Timotej *timotej.kapus13 [at] imperial.ac.uk*
|
||||
[ ] Rosen Penev *rosenp [at] gmail.com*
|
||||
[ ] André Wolski *andre [at] dena-design.de*
|
||||
[ ] Leon Klingele *git [at] leonklingele.de*
|
||||
[ASSGN] Jeffrey Walton *noloader [at] gmail.com*
|
||||
[ ] raminfp *ramin.blackhat [at] gmail.com*
|
||||
[ ] Leif Ryge *leif [at] synthesize.us*
|
||||
[ ] Eneas U de Queiroz *cote2004-github [at] yahoo.com*
|
||||
[ ] AviSoomirtee *avi [at] cyberstorm.mu*
|
||||
[ASSGN] sulfastor *torresmoisesa [at] gmail.com*
|
||||
[ ] Lauri Nurmi *lanurmi [at] iki.fi*
|
||||
[ASSGN] Вячеслав Петрищев *vyachemail [at] gmail.com*
|
||||
[ ] Matt Whitlock *gentoo [at] mattwhitlock.name*
|
||||
[ ] Shamil Gumirov *shamil [at] gumirov.com*
|
||||
[ ] Nils *nils [at] nilsand.re*
|
||||
[ ] Nekun *nekokun [at] firemail.cc*
|
||||
[ ] jmoellers *josef.moellers [at] suse.com*
|
||||
[ ] WB *3572564-wadersgeek [at] users.noreply.gitlab.com*
|
||||
[ ] Thomas Niederberger *thomas [at] niederb.ch*
|
||||
[ ] Nik Soggia *wget [at] niksoggia.it*
|
||||
[ ] Aarni Koskela *akx [at] iki.fi*
|
||||
[ ] jinfuchiang *jinfuchiang [at] outlook.com*
|
||||
[ ] Jan-Michael Brummer *jan-michael.brummer1 [at] volkswagen.de*
|
674
COPYING
Normal file
674
COPYING
Normal file
|
@ -0,0 +1,674 @@
|
|||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007, 2023 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/philosophy/why-not-lgpl.html>.
|
127
GNUmakefile
Normal file
127
GNUmakefile
Normal file
|
@ -0,0 +1,127 @@
|
|||
# Having a separate GNUmakefile lets me 'include' the dynamically
|
||||
# generated rules created via cfg.mk (package-local configuration)
|
||||
# as well as maint.mk (generic maintainer rules).
|
||||
# This makefile is used only if you run GNU Make.
|
||||
# It is necessary if you want to build targets usually of interest
|
||||
# only to the maintainer.
|
||||
|
||||
# Copyright (C) 2001, 2003, 2006-2024 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# If the user runs GNU make but has not yet run ./configure,
|
||||
# give them a diagnostic.
|
||||
_gl-Makefile := $(wildcard [M]akefile)
|
||||
ifneq ($(_gl-Makefile),)
|
||||
|
||||
# Make tar archive easier to reproduce.
|
||||
export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner --sort=name
|
||||
|
||||
# Allow the user to add to this in the Makefile.
|
||||
ALL_RECURSIVE_TARGETS =
|
||||
|
||||
include Makefile
|
||||
|
||||
# Some projects override e.g., _autoreconf here.
|
||||
-include $(srcdir)/cfg.mk
|
||||
|
||||
# Allow cfg.mk to override these.
|
||||
_build-aux ?= build-aux
|
||||
_autoreconf ?= autoreconf -v
|
||||
|
||||
include $(srcdir)/maint.mk
|
||||
|
||||
# Ensure that $(VERSION) is up to date for dist-related targets, but not
|
||||
# for others: rerunning autoreconf and recompiling everything isn't cheap.
|
||||
_have-git-version-gen := \
|
||||
$(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes)
|
||||
ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL))
|
||||
_is-dist-target ?= $(filter-out %clean, \
|
||||
$(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS)))
|
||||
_is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS)))
|
||||
ifneq (,$(_is-dist-target)$(_is-install-target))
|
||||
_curr-ver := $(shell cd $(srcdir) \
|
||||
&& $(_build-aux)/git-version-gen \
|
||||
.tarball-version \
|
||||
$(git-version-gen-tag-sed-script))
|
||||
ifneq ($(_curr-ver),$(VERSION))
|
||||
ifeq ($(_curr-ver),UNKNOWN)
|
||||
$(info WARNING: unable to verify if $(VERSION) is the correct version)
|
||||
else
|
||||
ifneq (,$(_is-install-target))
|
||||
# GNU Coding Standards state that 'make install' should not cause
|
||||
# recompilation after 'make all'. But as long as changing the version
|
||||
# string alters config.h, the cost of having 'make all' always have an
|
||||
# up-to-date version is prohibitive. So, as a compromise, we merely
|
||||
# warn when installing a version string that is out of date; the user
|
||||
# should run 'autoreconf' (or something like 'make distcheck') to
|
||||
# fix the version, 'make all' to propagate it, then 'make install'.
|
||||
$(info WARNING: version string $(VERSION) is out of date;)
|
||||
$(info run '$(MAKE) _version' to fix it)
|
||||
else
|
||||
$(info INFO: running autoreconf for new version string: $(_curr-ver))
|
||||
GNUmakefile: _version
|
||||
touch GNUmakefile
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
.PHONY: _version
|
||||
_version:
|
||||
cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf)
|
||||
$(MAKE) $(AM_MAKEFLAGS) Makefile
|
||||
|
||||
else
|
||||
|
||||
.DEFAULT_GOAL := abort-due-to-no-makefile
|
||||
srcdir = .
|
||||
|
||||
# The package can override .DEFAULT_GOAL to run actions like autoreconf.
|
||||
-include ./cfg.mk
|
||||
|
||||
# Allow cfg.mk to override these.
|
||||
_build-aux ?= build-aux
|
||||
_autoreconf ?= autoreconf -v
|
||||
|
||||
include ./maint.mk
|
||||
|
||||
ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
|
||||
$(MAKECMDGOALS): abort-due-to-no-makefile
|
||||
endif
|
||||
|
||||
abort-due-to-no-makefile:
|
||||
@echo There seems to be no Makefile in this directory. 1>&2
|
||||
@echo "You must run ./configure before running '$(MAKE)'." 1>&2
|
||||
@exit 1
|
||||
|
||||
endif
|
||||
|
||||
# Tell version 3.79 and up of GNU make to not build goals in this
|
||||
# directory in parallel, in case someone tries to build multiple
|
||||
# targets, and one of them can cause a recursive target to be invoked.
|
||||
|
||||
# Only set this if Automake doesn't provide it.
|
||||
AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \
|
||||
$(RECURSIVE_CLEAN_TARGETS:-recursive=) \
|
||||
dist distcheck tags ctags
|
||||
|
||||
ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS)
|
||||
|
||||
ifneq ($(word 2, $(MAKECMDGOALS)), )
|
||||
ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), )
|
||||
.NOTPARALLEL:
|
||||
endif
|
||||
endif
|
365
INSTALL
Normal file
365
INSTALL
Normal file
|
@ -0,0 +1,365 @@
|
|||
Installation Instructions
|
||||
*************************
|
||||
|
||||
Basic Installation
|
||||
==================
|
||||
|
||||
The following shell commands:
|
||||
|
||||
test -f configure || ./bootstrap
|
||||
./configure
|
||||
make
|
||||
make install
|
||||
|
||||
should configure, build, and install this package. The first line,
|
||||
which bootstraps, is intended for developers; when building from
|
||||
distribution tarballs it does nothing and can be skipped.
|
||||
|
||||
The following more-detailed instructions are generic; see the
|
||||
‘README’ file for instructions specific to this package. Some packages
|
||||
provide this ‘INSTALL’ file but do not implement all of the features
|
||||
documented below. The lack of an optional feature in a given package is
|
||||
not necessarily a bug. More recommendations for GNU packages can be
|
||||
found in the GNU Coding Standards.
|
||||
|
||||
Many packages have scripts meant for developers instead of ordinary
|
||||
builders, as they may use developer tools that are less commonly
|
||||
installed, or they may access the network, which has privacy
|
||||
implications. If the ‘bootstrap’ shell script exists, it attempts to
|
||||
build the ‘configure’ shell script and related files, possibly using
|
||||
developer tools or the network. Because the output of ‘bootstrap’ is
|
||||
system-independent, it is normally run by a package developer so that
|
||||
its output can be put into the distribution tarball and ordinary
|
||||
builders and users need not run ‘bootstrap’. Some packages have
|
||||
commands like ‘./autopull.sh’ and ‘./autogen.sh’ that you can run
|
||||
instead of ‘./bootstrap’, for more fine-grained control over
|
||||
bootstrapping.
|
||||
|
||||
The ‘configure’ shell script attempts to guess correct values for
|
||||
various system-dependent variables used during compilation. It uses
|
||||
those values to create a ‘Makefile’ in each directory of the package.
|
||||
It may also create one or more ‘.h’ files containing system-dependent
|
||||
definitions. Finally, it creates a shell script ‘config.status’ that
|
||||
you can run in the future to recreate the current configuration, and a
|
||||
file ‘config.log’ containing output useful for debugging ‘configure’.
|
||||
|
||||
It can also use an optional file (typically called ‘config.cache’ and
|
||||
enabled with ‘--cache-file=config.cache’ or simply ‘-C’) that saves the
|
||||
results of its tests to speed up reconfiguring. Caching is disabled by
|
||||
default to prevent problems with accidental use of stale cache files.
|
||||
|
||||
If you need to do unusual things to compile the package, please try
|
||||
to figure out how ‘configure’ could check whether to do them, and mail
|
||||
diffs or instructions to the address given in the ‘README’ so they can
|
||||
be considered for the next release. If you are using the cache, and at
|
||||
some point ‘config.cache’ contains results you don’t want to keep, you
|
||||
may remove or edit it.
|
||||
|
||||
The ‘autoconf’ program generates ‘configure’ from the file
|
||||
‘configure.ac’. Normally you should edit ‘configure.ac’ instead of
|
||||
editing ‘configure’ directly.
|
||||
|
||||
The simplest way to compile this package is:
|
||||
|
||||
1. ‘cd’ to the directory containing the package’s source code.
|
||||
|
||||
2. If this is a developer checkout and file ‘configure’ does not yet
|
||||
exist, type ‘./bootstrap’ to create it. You may need special
|
||||
developer tools and network access to bootstrap, and the network
|
||||
access may have privacy implications.
|
||||
|
||||
3. Type ‘./configure’ to configure the package for your system. This
|
||||
might take a while. While running, ‘configure’ prints messages
|
||||
telling which features it is checking for.
|
||||
|
||||
4. Type ‘make’ to compile the package.
|
||||
|
||||
5. Optionally, type ‘make check’ to run any self-tests that come with
|
||||
the package, generally using the just-built uninstalled binaries.
|
||||
|
||||
6. Type ‘make install’ to install the programs and any data files and
|
||||
documentation. When installing into a prefix owned by root, it is
|
||||
recommended that the package be configured and built as a regular
|
||||
user, and only the ‘make install’ phase executed with root
|
||||
privileges.
|
||||
|
||||
7. Optionally, type ‘make installcheck’ to repeat any self-tests, but
|
||||
this time using the binaries in their final installed location.
|
||||
This target does not install anything. Running this target as a
|
||||
regular user, particularly if the prior ‘make install’ required
|
||||
root privileges, verifies that the installation completed
|
||||
correctly.
|
||||
|
||||
8. You can remove the program binaries and object files from the
|
||||
source code directory by typing ‘make clean’. To also remove the
|
||||
files that ‘configure’ created (so you can compile the package for
|
||||
a different kind of computer), type ‘make distclean’. There is
|
||||
also a ‘make maintainer-clean’ target, but that is intended mainly
|
||||
for the package’s developers. If you use it, you may have to
|
||||
bootstrap again.
|
||||
|
||||
9. If the package follows the GNU Coding Standards, you can type ‘make
|
||||
uninstall’ to remove the installed files.
|
||||
|
||||
Compilers and Options
|
||||
=====================
|
||||
|
||||
Some systems require unusual options for compilation or linking that
|
||||
the ‘configure’ script does not know about. Run ‘./configure --help’
|
||||
for details on some of the pertinent environment variables.
|
||||
|
||||
You can give ‘configure’ initial values for configuration parameters
|
||||
by setting variables in the command line or in the environment. Here is
|
||||
an example:
|
||||
|
||||
./configure CC=gcc CFLAGS=-g LIBS=-lposix
|
||||
|
||||
See “Defining Variables” for more details.
|
||||
|
||||
Compiling For Multiple Architectures
|
||||
====================================
|
||||
|
||||
You can compile the package for more than one kind of computer at the
|
||||
same time, by placing the object files for each system in their own
|
||||
directory. To do this, you can use GNU ‘make’. ‘cd’ to the directory
|
||||
where you want the object files and executables to go and run the
|
||||
‘configure’ script. ‘configure’ automatically checks for the source
|
||||
code in the directory that ‘configure’ is in and in ‘..’. This is known
|
||||
as a “VPATH” build.
|
||||
|
||||
With a non-GNU ‘make’, it is safer to compile the package for one
|
||||
system at a time in the source code directory. After you have installed
|
||||
the package for one system, use ‘make distclean’ before reconfiguring
|
||||
for another system.
|
||||
|
||||
Some platforms, notably macOS, support “fat” or “universal” binaries,
|
||||
where a single binary can execute on different architectures. On these
|
||||
platforms you can configure and compile just once, with options specific
|
||||
to that platform.
|
||||
|
||||
Installation Names
|
||||
==================
|
||||
|
||||
By default, ‘make install’ installs the package’s commands under
|
||||
‘/usr/local/bin’, include files under ‘/usr/local/include’, etc. You
|
||||
can specify an installation prefix other than ‘/usr/local’ by giving
|
||||
‘configure’ the option ‘--prefix=PREFIX’, where PREFIX must be an
|
||||
absolute file name.
|
||||
|
||||
You can specify separate installation prefixes for
|
||||
architecture-specific files and architecture-independent files. If you
|
||||
pass the option ‘--exec-prefix=PREFIX’ to ‘configure’, the package uses
|
||||
PREFIX as the prefix for installing programs and libraries.
|
||||
Documentation and other data files still use the regular prefix.
|
||||
|
||||
In addition, if you use an unusual directory layout you can give
|
||||
options like ‘--bindir=DIR’ to specify different values for particular
|
||||
kinds of files. Run ‘configure --help’ for a list of the directories
|
||||
you can set and what kinds of files go in them. In general, the default
|
||||
for these options is expressed in terms of ‘${prefix}’, so that
|
||||
specifying just ‘--prefix’ will affect all of the other directory
|
||||
specifications that were not explicitly provided.
|
||||
|
||||
The most portable way to affect installation locations is to pass the
|
||||
correct locations to ‘configure’; however, many packages provide one or
|
||||
both of the following shortcuts of passing variable assignments to the
|
||||
‘make install’ command line to change installation locations without
|
||||
having to reconfigure or recompile.
|
||||
|
||||
The first method involves providing an override variable for each
|
||||
affected directory. For example, ‘make install
|
||||
prefix=/alternate/directory’ will choose an alternate location for all
|
||||
directory configuration variables that were expressed in terms of
|
||||
‘${prefix}’. Any directories that were specified during ‘configure’,
|
||||
but not in terms of ‘${prefix}’, must each be overridden at install time
|
||||
for the entire installation to be relocated. The approach of makefile
|
||||
variable overrides for each directory variable is required by the GNU
|
||||
Coding Standards, and ideally causes no recompilation. However, some
|
||||
platforms have known limitations with the semantics of shared libraries
|
||||
that end up requiring recompilation when using this method, particularly
|
||||
noticeable in packages that use GNU Libtool.
|
||||
|
||||
The second method involves providing the ‘DESTDIR’ variable. For
|
||||
example, ‘make install DESTDIR=/alternate/directory’ will prepend
|
||||
‘/alternate/directory’ before all installation names. The approach of
|
||||
‘DESTDIR’ overrides is not required by the GNU Coding Standards, and
|
||||
does not work on platforms that have drive letters. On the other hand,
|
||||
it does better at avoiding recompilation issues, and works well even
|
||||
when some directory options were not specified in terms of ‘${prefix}’
|
||||
at ‘configure’ time.
|
||||
|
||||
Optional Features
|
||||
=================
|
||||
|
||||
If the package supports it, you can cause programs to be installed
|
||||
with an extra prefix or suffix on their names by giving ‘configure’ the
|
||||
option ‘--program-prefix=PREFIX’ or ‘--program-suffix=SUFFIX’.
|
||||
|
||||
Some packages pay attention to ‘--enable-FEATURE’ and
|
||||
‘--disable-FEATURE’ options to ‘configure’, where FEATURE indicates an
|
||||
optional part of the package. They may also pay attention to
|
||||
‘--with-PACKAGE’ and ‘--without-PACKAGE’ options, where PACKAGE is
|
||||
something like ‘gnu-ld’. ‘./configure --help’ should mention the
|
||||
‘--enable-...’ and ‘--with-...’ options that the package recognizes.
|
||||
|
||||
Some packages offer the ability to configure how verbose the
|
||||
execution of ‘make’ will be. For these packages, running ‘./configure
|
||||
--enable-silent-rules’ sets the default to minimal output, which can be
|
||||
overridden with ‘make V=1’; while running ‘./configure
|
||||
--disable-silent-rules’ sets the default to verbose, which can be
|
||||
overridden with ‘make V=0’.
|
||||
|
||||
Specifying a System Type
|
||||
========================
|
||||
|
||||
By default ‘configure’ builds for the current system. To create
|
||||
binaries that can run on a different system type, specify a
|
||||
‘--host=TYPE’ option along with compiler variables that specify how to
|
||||
generate object code for TYPE. For example, to create binaries intended
|
||||
to run on a 64-bit ARM processor:
|
||||
|
||||
./configure --host=aarch64-linux-gnu \
|
||||
CC=aarch64-linux-gnu-gcc \
|
||||
CXX=aarch64-linux-gnu-g++
|
||||
|
||||
If done on a machine that can execute these binaries (e.g., via
|
||||
‘qemu-aarch64’, ‘$QEMU_LD_PREFIX’, and Linux’s ‘binfmt_misc’
|
||||
capability), the build behaves like a native build. Otherwise it is a
|
||||
cross-build: ‘configure’ will make cross-compilation guesses instead of
|
||||
running test programs, and ‘make check’ will not work.
|
||||
|
||||
A system type can either be a short name like ‘mingw64’, or a
|
||||
canonical name like ‘x86_64-pc-linux-gnu’. Canonical names have the
|
||||
form CPU-COMPANY-SYSTEM where SYSTEM is either OS or KERNEL-OS. To
|
||||
canonicalize and validate a system type, you can run the command
|
||||
‘config.sub’, which is often squirreled away in a subdirectory like
|
||||
‘build-aux’. For example:
|
||||
|
||||
$ build-aux/config.sub arm64-linux
|
||||
aarch64-unknown-linux-gnu
|
||||
$ build-aux/config.sub riscv-lnx
|
||||
Invalid configuration 'riscv-lnx': OS 'lnx' not recognized
|
||||
|
||||
You can look at the ‘config.sub’ file to see which types are recognized.
|
||||
If the file is absent, this package does not need the system type.
|
||||
|
||||
If ‘configure’ fails with the diagnostic “cannot guess build type”.
|
||||
‘config.sub’ did not recognize your system’s type. In this case, first
|
||||
fetch the newest versions of these files from the GNU config package
|
||||
(https://savannah.gnu.org/projects/config). If that fixes things,
|
||||
please report it to the maintainers of the package containing
|
||||
‘configure’. Otherwise, you can try the configure option ‘--build=TYPE’
|
||||
where TYPE comes close to your system type; also, please report the
|
||||
problem to <config-patches@gnu.org>.
|
||||
|
||||
For more details about configuring system types, see the Autoconf
|
||||
documentation.
|
||||
|
||||
Sharing Defaults
|
||||
================
|
||||
|
||||
If you want to set default values for ‘configure’ scripts to share,
|
||||
you can create a site shell script called ‘config.site’ that gives
|
||||
default values for variables like ‘CC’, ‘cache_file’, and ‘prefix’.
|
||||
‘configure’ looks for ‘PREFIX/share/config.site’ if it exists, then
|
||||
‘PREFIX/etc/config.site’ if it exists. Or, you can set the
|
||||
‘CONFIG_SITE’ environment variable to the location of the site script.
|
||||
A warning: not all ‘configure’ scripts look for a site script.
|
||||
|
||||
Defining Variables
|
||||
==================
|
||||
|
||||
Variables not defined in a site shell script can be set in the
|
||||
environment passed to ‘configure’. However, some packages may run
|
||||
configure again during the build, and the customized values of these
|
||||
variables may be lost. In order to avoid this problem, you should set
|
||||
them in the ‘configure’ command line, using ‘VAR=value’. For example:
|
||||
|
||||
./configure CC=/usr/local2/bin/gcc
|
||||
|
||||
causes the specified ‘gcc’ to be used as the C compiler (unless it is
|
||||
overridden in the site shell script).
|
||||
|
||||
Unfortunately, this technique does not work for ‘CONFIG_SHELL’ due to an
|
||||
Autoconf limitation. Until the limitation is lifted, you can use this
|
||||
workaround:
|
||||
|
||||
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
|
||||
|
||||
‘configure’ Invocation
|
||||
======================
|
||||
|
||||
‘configure’ recognizes the following options to control how it
|
||||
operates.
|
||||
|
||||
‘--help’
|
||||
‘-h’
|
||||
Print a summary of all of the options to ‘configure’, and exit.
|
||||
|
||||
‘--help=short’
|
||||
‘--help=recursive’
|
||||
Print a summary of the options unique to this package’s
|
||||
‘configure’, and exit. The ‘short’ variant lists options used only
|
||||
in the top level, while the ‘recursive’ variant lists options also
|
||||
present in any nested packages.
|
||||
|
||||
‘--version’
|
||||
‘-V’
|
||||
Print the version of Autoconf used to generate the ‘configure’
|
||||
script, and exit.
|
||||
|
||||
‘--cache-file=FILE’
|
||||
Enable the cache: use and save the results of the tests in FILE,
|
||||
traditionally ‘config.cache’. FILE defaults to ‘/dev/null’ to
|
||||
disable caching.
|
||||
|
||||
‘--config-cache’
|
||||
‘-C’
|
||||
Alias for ‘--cache-file=config.cache’.
|
||||
|
||||
‘--srcdir=DIR’
|
||||
Look for the package’s source code in directory DIR. Usually
|
||||
‘configure’ can determine that directory automatically.
|
||||
|
||||
‘--prefix=DIR’
|
||||
Use DIR as the installation prefix. See “Installation Names” for
|
||||
more details, including other options available for fine-tuning the
|
||||
installation locations.
|
||||
|
||||
‘--host=TYPE’
|
||||
Build binaries for system TYPE. See “Specifying a System Type”.
|
||||
|
||||
‘--enable-FEATURE’
|
||||
‘--disable-FEATURE’
|
||||
Enable or disable the optional FEATURE. See “Optional Features”.
|
||||
|
||||
‘--with-PACKAGE’
|
||||
‘--without-PACKAGE’
|
||||
Use or omit PACKAGE when building. See “Optional Features”.
|
||||
|
||||
‘--quiet’
|
||||
‘--silent’
|
||||
‘-q’
|
||||
Do not print messages saying which checks are being made. To
|
||||
suppress all normal output, redirect it to ‘/dev/null’ (any error
|
||||
messages will still be shown).
|
||||
|
||||
‘--no-create’
|
||||
‘-n’
|
||||
Run the configure checks, but stop before creating any output
|
||||
files.
|
||||
|
||||
‘configure’ also recognizes several environment variables, and accepts
|
||||
some other, less widely useful, options. Run ‘configure --help’ for
|
||||
more details.
|
||||
|
||||
Copyright notice
|
||||
================
|
||||
|
||||
Copyright © 1994–1996, 1999–2002, 2004–2017, 2020–2024 Free Software
|
||||
Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved. This file is offered as-is,
|
||||
without warranty of any kind.
|
30
MAILING-LIST
Normal file
30
MAILING-LIST
Normal file
|
@ -0,0 +1,30 @@
|
|||
Mailing Lists
|
||||
=============
|
||||
|
||||
Primary List
|
||||
------------
|
||||
|
||||
The primary mailinglist for discussion, bug-reports, or questions about
|
||||
GNU Wget is at <bug-wget@gnu.org>. To subscribe, send an email to
|
||||
<bug-wget-join@gnu.org>, or visit
|
||||
`https://lists.gnu.org/mailman/listinfo/bug-wget'.
|
||||
|
||||
You do not need to subscribe to send a message to the list; however,
|
||||
please note that unsubscribed messages are moderated, and may take a
|
||||
while before they hit the list--*usually around a day*. If you want
|
||||
your message to show up immediately, please subscribe to the list
|
||||
before posting. Archives for the list may be found at
|
||||
`https://lists.gnu.org/pipermail/bug-wget/'.
|
||||
|
||||
Obsolete Lists
|
||||
--------------
|
||||
|
||||
Previously, the mailing list <wget@sunsite.dk> was used as the main
|
||||
discussion list, and another list, <wget-patches@sunsite.dk> was used
|
||||
for submitting and discussing patches to GNU Wget.
|
||||
|
||||
Messages from <wget@sunsite.dk> are archived at
|
||||
`https://www.mail-archive.com/wget%40sunsite.dk/' and at
|
||||
|
||||
Messages from <wget-patches@sunsite.dk> are archived at
|
||||
`https://news.gmane.org/gmane.comp.web.wget.patches'.
|
109
Makefile.am
Normal file
109
Makefile.am
Normal file
|
@ -0,0 +1,109 @@
|
|||
# Makefile for `Wget' utility
|
||||
# Copyright (C) 1995-1997, 2006-2024 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Additional permission under GNU GPL version 3 section 7
|
||||
|
||||
# If you modify this program, or any covered work, by linking or
|
||||
# combining it with the OpenSSL project's OpenSSL library (or a
|
||||
# modified version of that library), containing parts covered by the
|
||||
# terms of the OpenSSL or SSLeay licenses, the Free Software Foundation
|
||||
# grants you additional permission to convey the resulting work.
|
||||
# Corresponding Source for a non-source form of such a combination
|
||||
# shall include the source code for the parts of OpenSSL used as well
|
||||
# as that of the covered work.
|
||||
|
||||
#
|
||||
# Version: @VERSION@
|
||||
#
|
||||
|
||||
|
||||
# We can't help that installing wget.info leaves /usr/share/info/dir
|
||||
# around, and we need to prevent uninstallation of the possibly
|
||||
# previously-existing /etc/wgetrc.
|
||||
distuninstallcheck_listfiles = find . -type f | \
|
||||
grep -Ev '(/share/info/dir|/etc/wgetrc)$$'
|
||||
|
||||
# Search for macros in the m4 subdirectory:
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
# subdirectories in the distribution
|
||||
SUBDIRS = lib src doc po gnulib_po util fuzz tests testenv
|
||||
|
||||
EXTRA_DIST = MAILING-LIST \
|
||||
msdos/config.h msdos/Makefile.DJ \
|
||||
msdos/Makefile.WC ABOUT-NLS \
|
||||
build-aux/build_info.pl build-aux/git-version-gen .version
|
||||
|
||||
CLEANFILES = *~ *.bak $(DISTNAME).tar.gz
|
||||
DISTCLEANFILES = po/stamp-po gnulib_po/stamp-po
|
||||
|
||||
BUILT_SOURCES = .version
|
||||
|
||||
clean-generic:
|
||||
rm -f install-info
|
||||
|
||||
.version:
|
||||
echo $(VERSION) > $@-t && mv $@-t $@
|
||||
|
||||
# Arrange so that .tarball-version appears only in the distribution
|
||||
# tarball, and never in a checked-out repository.
|
||||
dist-hook: gen-ChangeLog
|
||||
$(AM_V_GEN)echo $(VERSION) > $(distdir)/.tarball-version
|
||||
|
||||
gen_start_date = 2014-12-10
|
||||
.PHONY: gen-ChangeLog
|
||||
gen-ChangeLog:
|
||||
$(AM_V_GEN)if test -d .git; then \
|
||||
log_fix="$(srcdir)/build-aux/git-log-fix"; \
|
||||
test -e "$$log_fix" \
|
||||
|| amend_git_log=; \
|
||||
$(top_srcdir)/build-aux/gitlog-to-changelog \
|
||||
$$amend_git_log --since=$(gen_start_date) > $(distdir)/cl-t && \
|
||||
echo >> $(distdir)/cl-t && \
|
||||
cat ChangeLog-2014-12-10 >> $(distdir)/cl-t && \
|
||||
{ rm -f $(distdir)/ChangeLog && \
|
||||
mv $(distdir)/cl-t $(distdir)/ChangeLog; } \
|
||||
fi
|
||||
|
||||
check-valgrind:
|
||||
TESTS_ENVIRONMENT="VALGRIND_TESTS=1" $(MAKE) check
|
||||
|
||||
LCOV_INFO=wget.info
|
||||
|
||||
clean-lcov:
|
||||
rm -rf $(LCOV_INFO) */*.gc?? */.libs/*.gc?? lcov/
|
||||
lcov --zerocounters --directory src/
|
||||
|
||||
check-coverage: clean clean-lcov
|
||||
$(MAKE) CFLAGS="$(CFLAGS) --coverage" LDFLAGS="$(LDFLAGS) --coverage"
|
||||
lcov --capture --initial --ignore-errors source,range --directory src/ --output-file $(LCOV_INFO)
|
||||
$(MAKE) CFLAGS="$(CFLAGS) --coverage" LDFLAGS="$(LDFLAGS) --coverage" VALGRIND_TESTS=0 check
|
||||
lcov --capture --ignore-errors source,range --directory src/ --output-file $(LCOV_INFO)
|
||||
lcov --remove $(LCOV_INFO) --ignore-errors source,range,unused '/usr/include/*' '*/lib/*' '*/src/css.l' -o $(LCOV_INFO)
|
||||
genhtml --prefix . --ignore-errors source,range,unmapped $(LCOV_INFO) --legend --title "Wget" --output-directory=lcov
|
||||
@echo
|
||||
@echo "You can now view the coverage report with 'xdg-open lcov/index.html'"
|
||||
|
||||
fuzz-coverage: clean clean-lcov
|
||||
$(MAKE) -C lib
|
||||
$(MAKE) -C src CFLAGS="$(CFLAGS) --coverage" LDFLAGS="$(LDFLAGS) --coverage"
|
||||
$(MAKE) -C fuzz check CFLAGS="$(CFLAGS) --coverage" LDFLAGS="$(LDFLAGS) --coverage"
|
||||
lcov --capture --initial --ignore-errors source,range --directory fuzz --directory src --output-file $(LCOV_INFO)
|
||||
lcov --capture --ignore-errors source,range --directory fuzz --directory src --output-file $(LCOV_INFO)
|
||||
lcov --remove $(LCOV_INFO) --ignore-errors source,range '/usr/include/*' '*/lib/*' '*/src/css.l' -o $(LCOV_INFO)
|
||||
genhtml --prefix . --ignore-errors source,range $(LCOV_INFO) --legend --title "Wget-fuzz" --output-directory=lcov
|
||||
@echo
|
||||
@echo "You can now view the coverage report with 'xdg-open lcov/index.html'"
|
2678
Makefile.in
Normal file
2678
Makefile.in
Normal file
File diff suppressed because it is too large
Load diff
92
README
Normal file
92
README
Normal file
|
@ -0,0 +1,92 @@
|
|||
-*- text -*-
|
||||
GNU Wget
|
||||
========
|
||||
Current Web home: https://www.gnu.org/software/wget/
|
||||
|
||||
GNU Wget is a free utility for non-interactive download of files from
|
||||
the Web. It supports HTTP, HTTPS, and FTP protocols, as well as
|
||||
retrieval through HTTP proxies.
|
||||
|
||||
It can follow links in HTML pages and create local versions of remote
|
||||
web sites, fully recreating the directory structure of the original
|
||||
site. This is sometimes referred to as "recursive downloading."
|
||||
While doing that, Wget respects the Robot Exclusion Standard
|
||||
(/robots.txt). Wget can be instructed to convert the links in
|
||||
downloaded HTML files to the local files for offline viewing.
|
||||
|
||||
Recursive downloading also works with FTP, where Wget can retrieve a
|
||||
hierarchy of directories and files.
|
||||
|
||||
With both HTTP and FTP, Wget can check whether a remote file has
|
||||
changed on the server since the previous run, and only download the
|
||||
newer files.
|
||||
|
||||
Wget has been designed for robustness over slow or unstable network
|
||||
connections; if a download fails due to a network problem, it will
|
||||
keep retrying until the whole file has been retrieved. If the server
|
||||
supports regetting, it will instruct the server to continue the
|
||||
download from where it left off.
|
||||
|
||||
If you are behind a firewall that requires the use of a socks style
|
||||
gateway, you can get the socks library and compile wget with support
|
||||
for socks.
|
||||
|
||||
Most of the features are configurable, either through command-line
|
||||
options, or via initialization file .wgetrc. Wget allows you to
|
||||
install a global startup file (/usr/local/etc/wgetrc by default) for
|
||||
site settings.
|
||||
|
||||
Wget works under almost all Unix variants in use today and, unlike
|
||||
many of its historical predecessors, is written entirely in C, thus
|
||||
requiring no additional software, such as Perl. The external software
|
||||
it does work with, such as OpenSSL, is optional. As Wget uses the GNU
|
||||
Autoconf, it is easily built on and ported to new Unix-like systems.
|
||||
The installation procedure is described in the INSTALL file.
|
||||
|
||||
As with other GNU software, the latest version of Wget can be found at
|
||||
the master GNU archive site ftp.gnu.org, and its mirrors. Wget
|
||||
resides at <ftp://ftp.gnu.org/pub/gnu/wget/>.
|
||||
|
||||
Please report bugs in Wget to <bug-wget@gnu.org>.
|
||||
|
||||
See the file `MAILING-LIST' for information about Wget mailing lists.
|
||||
Wget's home page is at <https://www.gnu.org/software/wget/>.
|
||||
|
||||
If you would like to contribute code for Wget, please read
|
||||
CONTRIBUTING.md.
|
||||
|
||||
Wget is offered under the terms of the GNU GPLv3 license. Please see the
|
||||
COPYING file for a full text of the license terms.
|
||||
|
||||
Wget was originally written and mainained by Hrvoje Niksic. Please see
|
||||
the file AUTHORS for a list of major contributors, and the ChangeLogs
|
||||
for a detailed listing of all contributions.
|
||||
|
||||
|
||||
Copyright (C) 1995-2024 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
A copy of the GNU General Public License can be found in the file LICENSE
|
||||
in the top directory of the official source distribution. The license is
|
||||
also available in several formats through the World Wide Web, or
|
||||
via http://www.gnu.org/licenses/licenses.html#GPL .
|
||||
|
||||
Additional permission under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this program, or any covered work, by linking or
|
||||
combining it with the OpenSSL project's OpenSSL library (or a
|
||||
modified version of that library), containing parts covered by the
|
||||
terms of the OpenSSL or SSLeay licenses, the Free Software Foundation
|
||||
grants you additional permission to convey the resulting work.
|
||||
Corresponding Source for a non-source form of such a combination
|
||||
shall include the source code for the parts of OpenSSL used as well
|
||||
as that of the covered work.
|
3550
aclocal.m4
vendored
Normal file
3550
aclocal.m4
vendored
Normal file
File diff suppressed because it is too large
Load diff
705
build-aux/announce-gen
Executable file
705
build-aux/announce-gen
Executable file
|
@ -0,0 +1,705 @@
|
|||
#!/bin/sh
|
||||
#! -*-perl-*-
|
||||
|
||||
# Generate a release announcement message.
|
||||
|
||||
# Copyright (C) 2002-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Written by Jim Meyering
|
||||
|
||||
# This is a prologue that allows to run a perl script as an executable
|
||||
# on systems that are compliant to a POSIX version before POSIX:2017.
|
||||
# On such systems, the usual invocation of an executable through execlp()
|
||||
# or execvp() fails with ENOEXEC if it is a script that does not start
|
||||
# with a #! line. The script interpreter mentioned in the #! line has
|
||||
# to be /bin/sh, because on GuixSD systems that is the only program that
|
||||
# has a fixed file name. The second line is essential for perl and is
|
||||
# also useful for editing this file in Emacs. The next two lines below
|
||||
# are valid code in both sh and perl. When executed by sh, they re-execute
|
||||
# the script through the perl program found in $PATH. The '-x' option
|
||||
# is essential as well; without it, perl would re-execute the script
|
||||
# through /bin/sh. When executed by perl, the next two lines are a no-op.
|
||||
eval 'exec perl -wSx "$0" "$@"'
|
||||
if 0;
|
||||
|
||||
my $VERSION = '2024-07-17 02:16'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
(my $copyright_year = $VERSION) =~ s/^(\d*)-.*$/$1/;
|
||||
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
use POSIX qw(strftime);
|
||||
|
||||
(my $ME = $0) =~ s|.*/||;
|
||||
|
||||
my %valid_release_types = map {$_ => 1} qw (alpha beta stable);
|
||||
my @archive_suffixes = qw (tar.gz tar.bz2 tar.lz tar.lzma tar.xz);
|
||||
my $srcdir = '.';
|
||||
|
||||
sub usage ($)
|
||||
{
|
||||
my ($exit_code) = @_;
|
||||
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||
if ($exit_code != 0)
|
||||
{
|
||||
print $STREAM "Try '$ME --help' for more information.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
my @types = sort keys %valid_release_types;
|
||||
print $STREAM <<EOF;
|
||||
Usage: $ME [OPTIONS]
|
||||
Generate an announcement message. Run this from builddir.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
These options must be specified:
|
||||
|
||||
--release-type=TYPE TYPE must be one of @types
|
||||
--package-name=PACKAGE_NAME
|
||||
--previous-version=VER
|
||||
--current-version=VER
|
||||
--gpg-key-id=ID The GnuPG ID of the key used to sign the tarballs
|
||||
--url-directory=URL_DIR
|
||||
|
||||
The following are optional:
|
||||
|
||||
--news=NEWS_FILE include the NEWS section about this release
|
||||
from this NEWS_FILE; accumulates.
|
||||
--srcdir=DIR where to find the NEWS_FILEs (default: $srcdir)
|
||||
--bootstrap-tools=TOOL_LIST a comma-separated list of tools, e.g.,
|
||||
autoconf,automake,bison,gnulib
|
||||
--gnulib-version=VERSION report VERSION as the gnulib version, where
|
||||
VERSION is the result of running git describe
|
||||
in the gnulib source directory.
|
||||
required if gnulib is in TOOL_LIST.
|
||||
--gpg-key-email=EMAIL The email address of the key used to
|
||||
sign the tarballs
|
||||
--gpg-keyring-url=URL URL pointing to keyring containing the key used
|
||||
to sign the tarballs
|
||||
--no-print-checksums do not emit SHA1 or SHA256 checksums
|
||||
--archive-suffix=SUF add SUF to the list of archive suffixes
|
||||
--mail-headers=HEADERS a space-separated list of mail headers, e.g.,
|
||||
To: x\@example.com Cc: y-announce\@example.com,...
|
||||
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
Send patches and bug reports to <bug-gnulib\@gnu.org>.
|
||||
EOF
|
||||
}
|
||||
exit $exit_code;
|
||||
}
|
||||
|
||||
|
||||
=item C<%size> = C<sizes (@file)>
|
||||
|
||||
Compute the sizes of the C<@file> and return them as a hash. Return
|
||||
C<undef> if one of the computation failed.
|
||||
|
||||
=cut
|
||||
|
||||
sub sizes (@)
|
||||
{
|
||||
my (@file) = @_;
|
||||
|
||||
my $fail = 0;
|
||||
my %res;
|
||||
foreach my $f (@file)
|
||||
{
|
||||
my $cmd = "du -h $f";
|
||||
my $t = `$cmd`;
|
||||
# FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS
|
||||
$@
|
||||
and (warn "command failed: '$cmd'\n"), $fail = 1;
|
||||
chomp $t;
|
||||
$t =~ s/^\s*([\d.]+[MkK]).*/${1}B/;
|
||||
$res{$f} = $t;
|
||||
}
|
||||
return $fail ? undef : %res;
|
||||
}
|
||||
|
||||
=item C<print_locations ($title, \@url, \%size, @file)
|
||||
|
||||
Print a section C<$title> dedicated to the list of <@file>, which
|
||||
sizes are stored in C<%size>, and which are available from the C<@url>.
|
||||
|
||||
=cut
|
||||
|
||||
sub print_locations ($\@\%@)
|
||||
{
|
||||
my ($title, $url, $size, @file) = @_;
|
||||
print "Here are the $title:\n";
|
||||
foreach my $url (@{$url})
|
||||
{
|
||||
for my $file (@file)
|
||||
{
|
||||
print " $url/$file";
|
||||
print " (", $$size{$file}, ")"
|
||||
if exists $$size{$file};
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
|
||||
=item C<print_checksums (@file)
|
||||
|
||||
Print the SHA1 and SHA256 signature section for each C<@file>.
|
||||
|
||||
=cut
|
||||
|
||||
# This digest function omits the "=" padding that is required by cksum,
|
||||
# so add the 0..2 bytes of padding required for each of Digest's algorithms.
|
||||
sub digest_file_base64_wrap ($$)
|
||||
{
|
||||
my ($file, $alg) = @_;
|
||||
my $h = digest_file_base64($file, $alg);
|
||||
$alg =~ tr{-}{}d;
|
||||
my %pad = (MD5 => 2, SHA1 => 1, SHA256 => 1, SHA384 => 0, SHA512 => 2);
|
||||
return $h . '=' x $pad{$alg};
|
||||
}
|
||||
|
||||
sub print_checksums (@)
|
||||
{
|
||||
my (@file) = @_;
|
||||
|
||||
print "Here are the SHA1 and SHA256 checksums:\n";
|
||||
print "\n";
|
||||
|
||||
use Digest::file qw(digest_file_hex digest_file_base64);
|
||||
|
||||
foreach my $f (@file)
|
||||
{
|
||||
print ' ', digest_file_hex ($f, "SHA-1"), " $f\n";
|
||||
print ' ', digest_file_base64_wrap ($f, "SHA-256"), " $f\n";
|
||||
}
|
||||
print "\nVerify the base64 SHA256 checksum with cksum -a sha256 --check\n";
|
||||
print "from coreutils-9.2 or OpenBSD's cksum since 2007.\n\n";
|
||||
}
|
||||
|
||||
=item C<print_news_deltas ($news_file, $prev_version, $curr_version)
|
||||
|
||||
Print the section of the NEWS file C<$news_file> addressing changes
|
||||
between versions C<$prev_version> and C<$curr_version>.
|
||||
|
||||
=cut
|
||||
|
||||
sub print_news_deltas ($$$)
|
||||
{
|
||||
my ($news_file, $prev_version, $curr_version) = @_;
|
||||
|
||||
my $news_name = $news_file;
|
||||
$news_name =~ s|^\Q$srcdir\E/||;
|
||||
|
||||
print "\n$news_name\n\n";
|
||||
|
||||
# Print all lines from $news_file, starting with the first one
|
||||
# that mentions $curr_version up to but not including
|
||||
# the first occurrence of $prev_version.
|
||||
my $in_items;
|
||||
|
||||
my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/;
|
||||
|
||||
my $found_news;
|
||||
open NEWS, '<', $news_file
|
||||
or die "$ME: $news_file: cannot open for reading: $!\n";
|
||||
while (defined (my $line = <NEWS>))
|
||||
{
|
||||
if ( ! $in_items)
|
||||
{
|
||||
# Match lines like these:
|
||||
# * Major changes in release 5.0.1:
|
||||
# * Noteworthy changes in release 6.6 (2006-11-22) [stable]
|
||||
$line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o
|
||||
or next;
|
||||
$in_items = 1;
|
||||
print $line;
|
||||
}
|
||||
else
|
||||
{
|
||||
# This regexp must not match version numbers in NEWS items.
|
||||
# For example, they might well say "introduced in 4.5.5",
|
||||
# and we don't want that to match.
|
||||
$line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o
|
||||
and last;
|
||||
print $line;
|
||||
$line =~ /\S/
|
||||
and $found_news = 1;
|
||||
}
|
||||
}
|
||||
close NEWS;
|
||||
|
||||
$in_items
|
||||
or die "$ME: $news_file: no matching lines for '$curr_version'\n";
|
||||
$found_news
|
||||
or die "$ME: $news_file: no news item found for '$curr_version'\n";
|
||||
}
|
||||
|
||||
sub print_changelog_deltas ($$)
|
||||
{
|
||||
my ($package_name, $prev_version) = @_;
|
||||
|
||||
# Print new ChangeLog entries.
|
||||
|
||||
# First find all CVS-controlled ChangeLog files.
|
||||
use File::Find;
|
||||
my @changelog;
|
||||
find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS'
|
||||
and push @changelog, $File::Find::name}},
|
||||
'.');
|
||||
|
||||
# If there are no ChangeLog files, we're done.
|
||||
@changelog
|
||||
or return;
|
||||
my %changelog = map {$_ => 1} @changelog;
|
||||
|
||||
# Reorder the list of files so that if there are ChangeLog
|
||||
# files in the specified directories, they're listed first,
|
||||
# in this order:
|
||||
my @dir = qw ( . src lib m4 config doc );
|
||||
|
||||
# A typical @changelog array might look like this:
|
||||
# ./ChangeLog
|
||||
# ./po/ChangeLog
|
||||
# ./m4/ChangeLog
|
||||
# ./lib/ChangeLog
|
||||
# ./doc/ChangeLog
|
||||
# ./config/ChangeLog
|
||||
my @reordered;
|
||||
foreach my $d (@dir)
|
||||
{
|
||||
my $dot_slash = $d eq '.' ? $d : "./$d";
|
||||
my $target = "$dot_slash/ChangeLog";
|
||||
delete $changelog{$target}
|
||||
and push @reordered, $target;
|
||||
}
|
||||
|
||||
# Append any remaining ChangeLog files.
|
||||
push @reordered, sort keys %changelog;
|
||||
|
||||
# Remove leading './'.
|
||||
@reordered = map { s!^\./!!; $_ } @reordered;
|
||||
|
||||
print "\nChangeLog entries:\n\n";
|
||||
# print join ("\n", @reordered), "\n";
|
||||
|
||||
$prev_version =~ s/\./_/g;
|
||||
my $prev_cvs_tag = "\U$package_name\E-$prev_version";
|
||||
|
||||
my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered";
|
||||
open DIFF, '-|', $cmd
|
||||
or die "$ME: cannot run '$cmd': $!\n";
|
||||
# Print two types of lines, making minor changes:
|
||||
# Lines starting with '+++ ', e.g.,
|
||||
# +++ ChangeLog 22 Feb 2003 16:52:51 -0000 1.247
|
||||
# and those starting with '+'.
|
||||
# Don't print the others.
|
||||
my $prev_printed_line_empty = 1;
|
||||
while (defined (my $line = <DIFF>))
|
||||
{
|
||||
if ($line =~ /^\+\+\+ /)
|
||||
{
|
||||
my $separator = "*"x70 ."\n";
|
||||
$line =~ s///;
|
||||
$line =~ s/\s.*//;
|
||||
$prev_printed_line_empty
|
||||
or print "\n";
|
||||
print $separator, $line, $separator;
|
||||
}
|
||||
elsif ($line =~ /^\+/)
|
||||
{
|
||||
$line =~ s///;
|
||||
print $line;
|
||||
$prev_printed_line_empty = ($line =~ /^$/);
|
||||
}
|
||||
}
|
||||
close DIFF;
|
||||
|
||||
# The exit code should be 1.
|
||||
# Allow in case there are no modified ChangeLog entries.
|
||||
$? == 256 || $? == 128
|
||||
or warn "warning: '$cmd' had unexpected exit code or signal ($?)\n";
|
||||
}
|
||||
|
||||
sub get_tool_versions ($$)
|
||||
{
|
||||
my ($tool_list, $gnulib_version) = @_;
|
||||
@$tool_list
|
||||
or return ();
|
||||
|
||||
my $fail;
|
||||
my @tool_version_pair;
|
||||
foreach my $t (@$tool_list)
|
||||
{
|
||||
if ($t eq 'gnulib')
|
||||
{
|
||||
push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version;
|
||||
next;
|
||||
}
|
||||
# Assume that the last "word" on the first line of
|
||||
# 'tool --version' output is the version string.
|
||||
my ($first_line, undef) = split ("\n", `$t --version`);
|
||||
if ($first_line =~ /.* (\d[\w.-]+)$/)
|
||||
{
|
||||
$t = ucfirst $t;
|
||||
push @tool_version_pair, "$t $1";
|
||||
}
|
||||
else
|
||||
{
|
||||
defined $first_line
|
||||
and $first_line = '';
|
||||
warn "$t: unexpected --version output\n:$first_line";
|
||||
$fail = 1;
|
||||
}
|
||||
}
|
||||
|
||||
$fail
|
||||
and exit 1;
|
||||
|
||||
return @tool_version_pair;
|
||||
}
|
||||
|
||||
# Print a more human-friendly representation of $SEC seconds.
|
||||
sub readable_interval0($)
|
||||
{
|
||||
my $sec = shift;
|
||||
$sec < 60 and return "$sec seconds";
|
||||
|
||||
my $min = int($sec / 60); $sec %= 60;
|
||||
30 < $sec and $min++;
|
||||
$min < 60 and return "$min minutes";
|
||||
|
||||
my $hr = int($min / 60); $min %= 60;
|
||||
30 < $min and $hr++;
|
||||
$hr < 24 and return "$hr hours";
|
||||
|
||||
my $day = int($hr / 24); $hr %= 24;
|
||||
12 < $hr and $day++;
|
||||
$day < 50 and return "$day days";
|
||||
|
||||
my $wk = int($day / 7); $day %= 7;
|
||||
4 < $day and $wk++;
|
||||
return "$wk weeks";
|
||||
}
|
||||
|
||||
# Convert e.g., "1 weeks", to "1 week".
|
||||
sub readable_interval($)
|
||||
{
|
||||
my $interval_str = shift;
|
||||
my $i = readable_interval0 $interval_str;
|
||||
$i =~ m{^1 \w+s$} and chop $i;
|
||||
return $i;
|
||||
}
|
||||
|
||||
{
|
||||
# Use the C locale so that, for instance, "du" does not
|
||||
# print "1,2" instead of "1.2", which would confuse our regexps.
|
||||
$ENV{LC_ALL} = "C";
|
||||
|
||||
my $mail_headers;
|
||||
my $release_type;
|
||||
my $package_name;
|
||||
my $prev_version;
|
||||
my $curr_version;
|
||||
my $gpg_key_id;
|
||||
my @url_dir_list;
|
||||
my @news_file;
|
||||
my $bootstrap_tools;
|
||||
my $gnulib_version;
|
||||
my $print_checksums_p = 1;
|
||||
my $gpg_key_email;
|
||||
my $gpg_keyring_url;
|
||||
|
||||
# Reformat the warnings before displaying them.
|
||||
local $SIG{__WARN__} = sub
|
||||
{
|
||||
my ($msg) = @_;
|
||||
# Warnings from GetOptions.
|
||||
$msg =~ s/Option (\w)/option --$1/;
|
||||
warn "$ME: $msg";
|
||||
};
|
||||
|
||||
GetOptions
|
||||
(
|
||||
'mail-headers=s' => \$mail_headers,
|
||||
'release-type=s' => \$release_type,
|
||||
'package-name=s' => \$package_name,
|
||||
'previous-version=s' => \$prev_version,
|
||||
'current-version=s' => \$curr_version,
|
||||
'gpg-key-id=s' => \$gpg_key_id,
|
||||
'gpg-key-email=s' => \$gpg_key_email,
|
||||
'gpg-keyring-url=s' => \$gpg_keyring_url,
|
||||
'url-directory=s' => \@url_dir_list,
|
||||
'news=s' => \@news_file,
|
||||
'srcdir=s' => \$srcdir,
|
||||
'bootstrap-tools=s' => \$bootstrap_tools,
|
||||
'gnulib-version=s' => \$gnulib_version,
|
||||
'print-checksums!' => \$print_checksums_p,
|
||||
'archive-suffix=s' => \@archive_suffixes,
|
||||
|
||||
help => sub { usage 0 },
|
||||
version =>
|
||||
sub
|
||||
{
|
||||
print "$ME version $VERSION\n";
|
||||
print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n";
|
||||
print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n"
|
||||
. "This is free software: you are free to change and redistribute it.\n"
|
||||
. "There is NO WARRANTY, to the extent permitted by law.\n";
|
||||
print "\n";
|
||||
my $author = "Jim Meyering";
|
||||
print "Written by $author.\n";
|
||||
exit
|
||||
},
|
||||
) or usage 1;
|
||||
|
||||
my $fail = 0;
|
||||
# Ensure that each required option is specified.
|
||||
$release_type
|
||||
or (warn "release type not specified\n"), $fail = 1;
|
||||
$package_name
|
||||
or (warn "package name not specified\n"), $fail = 1;
|
||||
$prev_version
|
||||
or (warn "previous version string not specified\n"), $fail = 1;
|
||||
$curr_version
|
||||
or (warn "current version string not specified\n"), $fail = 1;
|
||||
$gpg_key_id
|
||||
or (warn "GnuPG key ID not specified\n"), $fail = 1;
|
||||
@url_dir_list
|
||||
or (warn "URL directory name(s) not specified\n"), $fail = 1;
|
||||
|
||||
my @tool_list = split ',', $bootstrap_tools
|
||||
if $bootstrap_tools;
|
||||
|
||||
grep (/^gnulib$/, @tool_list) && ! defined $gnulib_version
|
||||
and (warn "when specifying gnulib as a tool, you must also specify\n"
|
||||
. "--gnulib-version=V, where V is the result of running git describe\n"
|
||||
. "in the gnulib source directory.\n"), $fail = 1;
|
||||
|
||||
! grep (/^gnulib$/, @tool_list) && defined $gnulib_version
|
||||
and (warn "with --gnulib-version=V you must use --bootstrap-tools=...\n"
|
||||
. "including gnulib in that list"), $fail = 1;
|
||||
|
||||
!$release_type || exists $valid_release_types{$release_type}
|
||||
or (warn "'$release_type': invalid release type\n"), $fail = 1;
|
||||
|
||||
@ARGV
|
||||
and (warn "too many arguments:\n", join ("\n", @ARGV), "\n"),
|
||||
$fail = 1;
|
||||
$fail
|
||||
and usage 1;
|
||||
|
||||
my $my_distdir = "$package_name-$curr_version";
|
||||
|
||||
my $xd = "$package_name-$prev_version-$curr_version.xdelta";
|
||||
|
||||
my @candidates = map { "$my_distdir.$_" } @archive_suffixes;
|
||||
my @tarballs = grep {-f $_} @candidates;
|
||||
|
||||
@tarballs
|
||||
or die "$ME: none of " . join(', ', @candidates) . " were found\n";
|
||||
my @sizable = @tarballs;
|
||||
-f $xd
|
||||
and push @sizable, $xd;
|
||||
my %size = sizes (@sizable);
|
||||
%size
|
||||
or exit 1;
|
||||
|
||||
my $headers = '';
|
||||
if (defined $mail_headers)
|
||||
{
|
||||
($headers = $mail_headers) =~ s/\s+(\S+:)/\n$1/g;
|
||||
$headers .= "\n";
|
||||
}
|
||||
|
||||
# The markup is escaped as <\# so that when this script is sent by
|
||||
# mail (or part of a diff), Gnus is not triggered.
|
||||
print <<EOF;
|
||||
|
||||
${headers}Subject: $my_distdir released [$release_type]
|
||||
|
||||
<\#secure method=pgpmime mode=sign>
|
||||
This is to announce $package_name-$curr_version, a $release_type release.
|
||||
|
||||
FIXME: put comments here
|
||||
|
||||
EOF
|
||||
|
||||
my $v0 = $prev_version;
|
||||
my $v1 = $curr_version;
|
||||
|
||||
(my $first_name = `git config user.name|cut -d' ' -f1`)
|
||||
=~ m{\S} or die "no name? set user.name in ~/.gitconfig\n";
|
||||
|
||||
chomp (my $n_ci = `git rev-list "v$v0..v$v1" | wc -l`);
|
||||
chomp (my $n_p = `git shortlog "v$v0..v$v1" | grep -c '^[^ ]'`);
|
||||
|
||||
my $prev_release_date = `git log --pretty=%ct -1 "v$v0"`;
|
||||
my $this_release_date = `git log --pretty=%ct -1 "v$v1"`;
|
||||
my $n_seconds = $this_release_date - $prev_release_date;
|
||||
my $time_since_prev = readable_interval $n_seconds;
|
||||
my $names = `git shortlog "v$v0..v$v1"|perl -lne '/^(\\w.*):/ and print " ".\$1'`;
|
||||
|
||||
print <<EOF;
|
||||
There have been $n_ci commits by $n_p people in the $time_since_prev since $v0.
|
||||
|
||||
See the NEWS below for a brief summary.
|
||||
|
||||
Thanks to everyone who has contributed!
|
||||
The following people contributed changes to this release:
|
||||
|
||||
$names
|
||||
$first_name [on behalf of the $package_name maintainers]
|
||||
==================================================================
|
||||
|
||||
Here is the GNU $package_name home page:
|
||||
https://gnu.org/s/$package_name/
|
||||
|
||||
For a summary of changes and contributors, see:
|
||||
https://git.sv.gnu.org/gitweb/?p=$package_name.git;a=shortlog;h=v$v1
|
||||
or run this command from a git-cloned $package_name directory:
|
||||
git shortlog v$v0..v$v1
|
||||
|
||||
EOF
|
||||
|
||||
if (@url_dir_list == 1 && @tarballs == 1)
|
||||
{
|
||||
# When there's only one tarball and one URL, use a more concise form.
|
||||
my $m = "$url_dir_list[0]/$tarballs[0]";
|
||||
print "Here are the compressed sources and a GPG detached signature:\n"
|
||||
. " $m\n"
|
||||
. " $m.sig\n\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print_locations ("compressed sources", @url_dir_list, %size, @tarballs);
|
||||
-f $xd
|
||||
and print_locations ("xdelta diffs (useful? if so, "
|
||||
. "please tell bug-gnulib\@gnu.org)",
|
||||
@url_dir_list, %size, $xd);
|
||||
my @sig_files = map { "$_.sig" } @tarballs;
|
||||
print_locations ("GPG detached signatures", @url_dir_list, %size,
|
||||
@sig_files);
|
||||
}
|
||||
|
||||
if ($url_dir_list[0] =~ "gnu\.org")
|
||||
{
|
||||
print "Use a mirror for higher download bandwidth:\n";
|
||||
if (@tarballs == 1 && $url_dir_list[0] =~ m!https://ftp\.gnu\.org/gnu/!)
|
||||
{
|
||||
(my $m = "$url_dir_list[0]/$tarballs[0]")
|
||||
=~ s!https://ftp\.gnu\.org/gnu/!https://ftpmirror\.gnu\.org/!;
|
||||
print " $m\n"
|
||||
. " $m.sig\n\n";
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
print " https://www.gnu.org/order/ftp.html\n\n";
|
||||
}
|
||||
}
|
||||
|
||||
$print_checksums_p
|
||||
and print_checksums (@sizable);
|
||||
|
||||
print <<EOF;
|
||||
Use a .sig file to verify that the corresponding file (without the
|
||||
.sig suffix) is intact. First, be sure to download both the .sig file
|
||||
and the corresponding tarball. Then, run a command like this:
|
||||
|
||||
gpg --verify $tarballs[0].sig
|
||||
|
||||
EOF
|
||||
my $gpg_fingerprint = `LC_ALL=C gpg --fingerprint $gpg_key_id | grep -v ^sub`;
|
||||
if ($gpg_fingerprint =~ /^pub/)
|
||||
{
|
||||
chop $gpg_fingerprint;
|
||||
$gpg_fingerprint =~ s/ \[expires:.*//mg;
|
||||
$gpg_fingerprint =~ s/^uid \[ultimate\]/uid /mg;
|
||||
$gpg_fingerprint =~ s/^/ /mg;
|
||||
print<<EOF
|
||||
The signature should match the fingerprint of the following key:
|
||||
|
||||
$gpg_fingerprint
|
||||
EOF
|
||||
}
|
||||
print <<EOF;
|
||||
If that command fails because you don't have the required public key,
|
||||
or that public key has expired, try the following commands to retrieve
|
||||
or refresh it, and then rerun the 'gpg --verify' command.
|
||||
EOF
|
||||
if ($gpg_key_email) {
|
||||
print <<EOF;
|
||||
|
||||
gpg --locate-external-key $gpg_key_email
|
||||
EOF
|
||||
}
|
||||
print <<EOF;
|
||||
|
||||
gpg --recv-keys $gpg_key_id
|
||||
EOF
|
||||
if ($gpg_keyring_url) {
|
||||
print <<EOF;
|
||||
|
||||
wget -q -O- '$gpg_keyring_url' | gpg --import -
|
||||
EOF
|
||||
}
|
||||
print <<EOF;
|
||||
|
||||
As a last resort to find the key, you can try the official GNU
|
||||
keyring:
|
||||
|
||||
wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg
|
||||
gpg --keyring gnu-keyring.gpg --verify $tarballs[0].sig
|
||||
EOF
|
||||
|
||||
my @tool_versions = get_tool_versions (\@tool_list, $gnulib_version);
|
||||
@tool_versions
|
||||
and print "\nThis release was bootstrapped with the following tools:",
|
||||
join ('', map {"\n $_"} @tool_versions), "\n";
|
||||
|
||||
print_news_deltas ($_, $prev_version, $curr_version)
|
||||
foreach @news_file;
|
||||
|
||||
$release_type eq 'stable'
|
||||
or print_changelog_deltas ($package_name, $prev_version);
|
||||
|
||||
exit 0;
|
||||
}
|
||||
|
||||
### Setup "GNU" style for perl-mode and cperl-mode.
|
||||
## Local Variables:
|
||||
## mode: perl
|
||||
## perl-indent-level: 2
|
||||
## perl-continued-statement-offset: 2
|
||||
## perl-continued-brace-offset: 0
|
||||
## perl-brace-offset: 0
|
||||
## perl-brace-imaginary-offset: 0
|
||||
## perl-label-offset: -2
|
||||
## perl-extra-newline-before-brace: t
|
||||
## perl-merge-trailing-else: nil
|
||||
## eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
## time-stamp-line-limit: 50
|
||||
## time-stamp-start: "my $VERSION = '"
|
||||
## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||
## time-stamp-time-zone: "UTC0"
|
||||
## time-stamp-end: "'; # UTC"
|
||||
## End:
|
140
build-aux/build_info.pl
Executable file
140
build-aux/build_info.pl
Executable file
|
@ -0,0 +1,140 @@
|
|||
#!/usr/bin/env perl
|
||||
|
||||
# Generate build_info.c.
|
||||
|
||||
# Copyright (C) 2009-2011, 2018-2024 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Carp qw(croak);
|
||||
|
||||
my $file = shift @ARGV;
|
||||
|
||||
{
|
||||
my $data = parse_config();
|
||||
output_code($data);
|
||||
}
|
||||
|
||||
sub parse_config
|
||||
{
|
||||
my $features = [];
|
||||
my $choice_key;
|
||||
my $choice = [];
|
||||
my $list = $features;
|
||||
|
||||
open(my $fh, '<', "$file.in") or die "Cannot open $file.in: $!";
|
||||
|
||||
while (<$fh>) {
|
||||
next if /^\s*$/;
|
||||
|
||||
if ($list eq $choice) {
|
||||
unless (s/^\s+//) {
|
||||
$list = $features;
|
||||
push @$features, [$choice_key, $choice];
|
||||
$choice = [];
|
||||
undef $choice_key;
|
||||
}
|
||||
} elsif (/^([A-Za-z0-9_-]+) \s+ choice:\s*$/x) {
|
||||
$choice_key = $1;
|
||||
$list = $choice;
|
||||
next;
|
||||
}
|
||||
|
||||
if (/^([A-Za-z0-9_-]+) \s+ (.*)$/x) {
|
||||
push @$list, [$1, $2];
|
||||
} else {
|
||||
croak "Can't parse line: $_";
|
||||
}
|
||||
}
|
||||
|
||||
if ($list eq $choice) {
|
||||
push @$features, [$choice_key, $choice];
|
||||
}
|
||||
|
||||
close($fh);
|
||||
|
||||
return $features;
|
||||
}
|
||||
|
||||
sub output_code
|
||||
{
|
||||
my $features = shift;
|
||||
|
||||
open(my $fh, '>', "$file") or die "Cannot open $file: $!";
|
||||
|
||||
print $fh do { local $/; <DATA> }, "\n";
|
||||
print $fh <<EOC;
|
||||
const char *compiled_features[] =
|
||||
{
|
||||
|
||||
EOC
|
||||
foreach my $feature (sort { $a->[0] cmp $b->[0] } @$features) {
|
||||
my ($name, $check) = @$feature;
|
||||
|
||||
if (ref $check eq 'ARRAY') {
|
||||
my ($ch_name, $ch_check) = @{ shift @$check };
|
||||
print $fh <<EOC;
|
||||
#if $ch_check
|
||||
"+$name/$ch_name",
|
||||
EOC
|
||||
foreach my $choice (@$check) {
|
||||
($ch_name, $ch_check) = @$choice;
|
||||
|
||||
print $fh <<EOC;
|
||||
#elif $ch_check
|
||||
"+$name/$ch_name",
|
||||
EOC
|
||||
}
|
||||
print $fh <<EOC;
|
||||
#else
|
||||
"-$name",
|
||||
#endif
|
||||
|
||||
EOC
|
||||
} else {
|
||||
print $fh <<EOC;
|
||||
#if $check
|
||||
"+$name",
|
||||
#else
|
||||
"-$name",
|
||||
#endif
|
||||
|
||||
EOC
|
||||
}
|
||||
}
|
||||
print $fh <<EOC;
|
||||
|
||||
/* sentinel value */
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
EOC
|
||||
}
|
||||
|
||||
__DATA__
|
||||
/* Autogenerated by build_info.pl - DO NOT EDIT */
|
||||
|
||||
/* This stores global variables that are initialized with
|
||||
preprocessor declarations for output with the --version flag.
|
||||
|
||||
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
|
||||
2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. */
|
||||
|
||||
#include "wget.h"
|
||||
#include <stdio.h>
|
||||
#include "version.h"
|
351
build-aux/compile
Executable file
351
build-aux/compile
Executable file
|
@ -0,0 +1,351 @@
|
|||
#! /bin/sh
|
||||
# Wrapper for compilers which do not understand '-c -o'.
|
||||
|
||||
scriptversion=2024-06-19.01; # UTC
|
||||
|
||||
# Copyright (C) 1999-2024 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
nl='
|
||||
'
|
||||
|
||||
# We need space, tab and new line, in precisely that order. Quoting is
|
||||
# there to prevent tools from complaining about whitespace usage.
|
||||
IFS=" "" $nl"
|
||||
|
||||
file_conv=
|
||||
|
||||
# func_file_conv build_file lazy
|
||||
# Convert a $build file to $host form and store it in $file
|
||||
# Currently only supports Windows hosts. If the determined conversion
|
||||
# type is listed in (the comma separated) LAZY, no conversion will
|
||||
# take place.
|
||||
func_file_conv ()
|
||||
{
|
||||
file=$1
|
||||
case $file in
|
||||
/ | /[!/]*) # absolute file, and not a UNC file
|
||||
if test -z "$file_conv"; then
|
||||
# lazily determine how to convert abs files
|
||||
case `uname -s` in
|
||||
MINGW*)
|
||||
file_conv=mingw
|
||||
;;
|
||||
CYGWIN* | MSYS*)
|
||||
file_conv=cygwin
|
||||
;;
|
||||
*)
|
||||
file_conv=wine
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
case $file_conv/,$2, in
|
||||
*,$file_conv,*)
|
||||
;;
|
||||
mingw/*)
|
||||
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
||||
;;
|
||||
cygwin/* | msys/*)
|
||||
file=`cygpath -m "$file" || echo "$file"`
|
||||
;;
|
||||
wine/*)
|
||||
file=`winepath -w "$file" || echo "$file"`
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# func_cl_dashL linkdir
|
||||
# Make cl look for libraries in LINKDIR
|
||||
func_cl_dashL ()
|
||||
{
|
||||
func_file_conv "$1"
|
||||
if test -z "$lib_path"; then
|
||||
lib_path=$file
|
||||
else
|
||||
lib_path="$lib_path;$file"
|
||||
fi
|
||||
linker_opts="$linker_opts -LIBPATH:$file"
|
||||
}
|
||||
|
||||
# func_cl_dashl library
|
||||
# Do a library search-path lookup for cl
|
||||
func_cl_dashl ()
|
||||
{
|
||||
lib=$1
|
||||
found=no
|
||||
save_IFS=$IFS
|
||||
IFS=';'
|
||||
for dir in $lib_path $LIB
|
||||
do
|
||||
IFS=$save_IFS
|
||||
if $shared && test -f "$dir/$lib.dll.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.dll.lib
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/$lib.lib"; then
|
||||
found=yes
|
||||
lib=$dir/$lib.lib
|
||||
break
|
||||
fi
|
||||
if test -f "$dir/lib$lib.a"; then
|
||||
found=yes
|
||||
lib=$dir/lib$lib.a
|
||||
break
|
||||
fi
|
||||
done
|
||||
IFS=$save_IFS
|
||||
|
||||
if test "$found" != yes; then
|
||||
lib=$lib.lib
|
||||
fi
|
||||
}
|
||||
|
||||
# func_cl_wrapper cl arg...
|
||||
# Adjust compile command to suit cl
|
||||
func_cl_wrapper ()
|
||||
{
|
||||
# Assume a capable shell
|
||||
lib_path=
|
||||
shared=:
|
||||
linker_opts=
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.lo | *.[oO][bB][jJ])
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fo"$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
func_file_conv "$2"
|
||||
set x "$@" -Fe"$file"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
-I)
|
||||
eat=1
|
||||
func_file_conv "$2" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-I*)
|
||||
func_file_conv "${1#-I}" mingw
|
||||
set x "$@" -I"$file"
|
||||
shift
|
||||
;;
|
||||
-l)
|
||||
eat=1
|
||||
func_cl_dashl "$2"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-l*)
|
||||
func_cl_dashl "${1#-l}"
|
||||
set x "$@" "$lib"
|
||||
shift
|
||||
;;
|
||||
-L)
|
||||
eat=1
|
||||
func_cl_dashL "$2"
|
||||
;;
|
||||
-L*)
|
||||
func_cl_dashL "${1#-L}"
|
||||
;;
|
||||
-static)
|
||||
shared=false
|
||||
;;
|
||||
-Wl,*)
|
||||
arg=${1#-Wl,}
|
||||
save_ifs="$IFS"; IFS=','
|
||||
for flag in $arg; do
|
||||
IFS="$save_ifs"
|
||||
linker_opts="$linker_opts $flag"
|
||||
done
|
||||
IFS="$save_ifs"
|
||||
;;
|
||||
-Xlinker)
|
||||
eat=1
|
||||
linker_opts="$linker_opts $2"
|
||||
;;
|
||||
-*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
|
||||
func_file_conv "$1"
|
||||
set x "$@" -Tp"$file"
|
||||
shift
|
||||
;;
|
||||
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
|
||||
func_file_conv "$1" mingw
|
||||
set x "$@" "$file"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
if test -n "$linker_opts"; then
|
||||
linker_opts="-link$linker_opts"
|
||||
fi
|
||||
exec "$@" $linker_opts
|
||||
exit 1
|
||||
}
|
||||
|
||||
eat=
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Wrapper for compilers which do not understand '-c -o'.
|
||||
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
|
||||
arguments, and rename the output as expected.
|
||||
|
||||
If you are trying to build a whole package this is not the
|
||||
right script to run: please start by reading the file 'INSTALL'.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||
General help using GNU software: <https://www.gnu.org/gethelp/>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "compile (GNU Automake) $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
|
||||
clang-cl | *[/\\]clang-cl | clang-cl.exe | *[/\\]clang-cl.exe | \
|
||||
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
|
||||
func_cl_wrapper "$@" # Doesn't return...
|
||||
;;
|
||||
esac
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
|
||||
for arg
|
||||
do
|
||||
if test -n "$eat"; then
|
||||
eat=
|
||||
else
|
||||
case $1 in
|
||||
-o)
|
||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
||||
# So we strip '-o arg' only if arg is an object.
|
||||
eat=1
|
||||
case $2 in
|
||||
*.o | *.obj)
|
||||
ofile=$2
|
||||
;;
|
||||
*)
|
||||
set x "$@" -o "$2"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set x "$@" "$1"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no '-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# '.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$@"
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$@"
|
||||
ret=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
|
||||
elif test -f "${cofile}bj"; then
|
||||
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir "$lockdir"
|
||||
exit $ret
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
1812
build-aux/config.guess
vendored
Executable file
1812
build-aux/config.guess
vendored
Executable file
File diff suppressed because it is too large
Load diff
684
build-aux/config.rpath
Executable file
684
build-aux/config.rpath
Executable file
|
@ -0,0 +1,684 @@
|
|||
#! /bin/sh
|
||||
# Output a system dependent set of variables, describing how to set the
|
||||
# run time search path of shared libraries in an executable.
|
||||
#
|
||||
# Copyright 1996-2024 Free Software Foundation, Inc.
|
||||
# Taken from GNU libtool, 2001
|
||||
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||
#
|
||||
# This file is free software; the Free Software Foundation gives
|
||||
# unlimited permission to copy and/or distribute it, with or without
|
||||
# modifications, as long as this notice is preserved.
|
||||
#
|
||||
# The first argument passed to this file is the canonical host specification,
|
||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||
# or
|
||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
|
||||
# should be set by the caller.
|
||||
#
|
||||
# The set of defined variables is at the end of this script.
|
||||
|
||||
# Known limitations:
|
||||
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
|
||||
# than 256 bytes, otherwise the compiler driver will dump core. The only
|
||||
# known workaround is to choose shorter directory names for the build
|
||||
# directory and/or the installation directory.
|
||||
|
||||
# All known linkers require a '.a' archive for static linking (except MSVC,
|
||||
# which needs '.lib').
|
||||
libext=a
|
||||
shrext=.so
|
||||
|
||||
host="$1"
|
||||
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
||||
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
||||
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
||||
|
||||
# Code taken from libtool.m4's _LT_CC_BASENAME.
|
||||
|
||||
for cc_temp in $CC""; do
|
||||
case $cc_temp in
|
||||
compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
|
||||
distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
|
||||
\-*) ;;
|
||||
*) break;;
|
||||
esac
|
||||
done
|
||||
cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
|
||||
|
||||
# Code taken from libtool.m4's _LT_COMPILER_PIC.
|
||||
|
||||
wl=
|
||||
if test "$GCC" = yes; then
|
||||
wl='-Wl,'
|
||||
else
|
||||
case "$host_os" in
|
||||
aix*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
mingw* | cygwin* | pw32* | os2* | cegcc*)
|
||||
;;
|
||||
hpux9* | hpux10* | hpux11*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
irix5* | irix6* | nonstopux*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||
case $cc_basename in
|
||||
ecc*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
icc* | ifort*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
lf95*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
nagfor*)
|
||||
wl='-Wl,-Wl,,'
|
||||
;;
|
||||
pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
ccc*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
xl* | bgxl* | bgf* | mpixl*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
como)
|
||||
wl='-lopt='
|
||||
;;
|
||||
*)
|
||||
case `$CC -V 2>&1 | sed 5q` in
|
||||
*Sun\ F* | *Sun*Fortran*)
|
||||
wl=
|
||||
;;
|
||||
*Sun\ C*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
newsos6)
|
||||
;;
|
||||
*nto* | *qnx*)
|
||||
;;
|
||||
osf3* | osf4* | osf5*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
rdos*)
|
||||
;;
|
||||
solaris*)
|
||||
case $cc_basename in
|
||||
f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
|
||||
wl='-Qoption ld '
|
||||
;;
|
||||
*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
sunos4*)
|
||||
wl='-Qoption ld '
|
||||
;;
|
||||
sysv4 | sysv4.2uw2* | sysv4.3*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
sysv4*MP*)
|
||||
;;
|
||||
sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
unicos*)
|
||||
wl='-Wl,'
|
||||
;;
|
||||
uts4*)
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
|
||||
|
||||
hardcode_libdir_flag_spec=
|
||||
hardcode_libdir_separator=
|
||||
hardcode_direct=no
|
||||
hardcode_minus_L=no
|
||||
|
||||
case "$host_os" in
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
if test "$GCC" != yes; then
|
||||
with_gnu_ld=no
|
||||
fi
|
||||
;;
|
||||
interix*)
|
||||
# we just hope/assume this is gcc and not c89 (= MSVC++)
|
||||
with_gnu_ld=yes
|
||||
;;
|
||||
openbsd*)
|
||||
with_gnu_ld=no
|
||||
;;
|
||||
esac
|
||||
|
||||
ld_shlibs=yes
|
||||
if test "$with_gnu_ld" = yes; then
|
||||
# Set some defaults for GNU ld with shared library support. These
|
||||
# are reset later if shared libraries are not supported. Putting them
|
||||
# here allows them to be overridden if necessary.
|
||||
# Unlike libtool, we use -rpath here, not --rpath, since the documented
|
||||
# option of GNU ld is called -rpath, not --rpath.
|
||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||
case "$host_os" in
|
||||
aix[3-9]*)
|
||||
# On AIX/PPC, the GNU linker is very broken
|
||||
if test "$host_cpu" != ia64; then
|
||||
ld_shlibs=no
|
||||
fi
|
||||
;;
|
||||
amigaos*)
|
||||
case "$host_cpu" in
|
||||
powerpc)
|
||||
;;
|
||||
m68k)
|
||||
hardcode_libdir_flag_spec='-L$libdir'
|
||||
hardcode_minus_L=yes
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
beos*)
|
||||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||
:
|
||||
else
|
||||
ld_shlibs=no
|
||||
fi
|
||||
;;
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||
# no search path for DLLs.
|
||||
hardcode_libdir_flag_spec='-L$libdir'
|
||||
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
||||
:
|
||||
else
|
||||
ld_shlibs=no
|
||||
fi
|
||||
;;
|
||||
haiku*)
|
||||
;;
|
||||
interix[3-9]*)
|
||||
hardcode_direct=no
|
||||
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||
;;
|
||||
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||
:
|
||||
else
|
||||
ld_shlibs=no
|
||||
fi
|
||||
;;
|
||||
netbsd*)
|
||||
;;
|
||||
solaris*)
|
||||
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
|
||||
ld_shlibs=no
|
||||
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||
:
|
||||
else
|
||||
ld_shlibs=no
|
||||
fi
|
||||
;;
|
||||
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
|
||||
case `$LD -v 2>&1` in
|
||||
*\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
|
||||
ld_shlibs=no
|
||||
;;
|
||||
*)
|
||||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
|
||||
else
|
||||
ld_shlibs=no
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
sunos4*)
|
||||
hardcode_direct=yes
|
||||
;;
|
||||
*)
|
||||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||
:
|
||||
else
|
||||
ld_shlibs=no
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
if test "$ld_shlibs" = no; then
|
||||
hardcode_libdir_flag_spec=
|
||||
fi
|
||||
else
|
||||
case "$host_os" in
|
||||
aix3*)
|
||||
# Note: this linker hardcodes the directories in LIBPATH if there
|
||||
# are no directories specified by -L.
|
||||
hardcode_minus_L=yes
|
||||
if test "$GCC" = yes; then
|
||||
# Neither direct hardcoding nor static linking is supported with a
|
||||
# broken collect2.
|
||||
hardcode_direct=unsupported
|
||||
fi
|
||||
;;
|
||||
aix[4-9]*)
|
||||
if test "$host_cpu" = ia64; then
|
||||
# On IA64, the linker does run time linking by default, so we don't
|
||||
# have to do anything special.
|
||||
aix_use_runtimelinking=no
|
||||
else
|
||||
aix_use_runtimelinking=no
|
||||
# Test if we are trying to use run time linking or normal
|
||||
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
|
||||
# need to do runtime linking.
|
||||
case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
|
||||
for ld_flag in $LDFLAGS; do
|
||||
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
|
||||
aix_use_runtimelinking=yes
|
||||
break
|
||||
fi
|
||||
done
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
hardcode_direct=yes
|
||||
hardcode_libdir_separator=':'
|
||||
if test "$GCC" = yes; then
|
||||
case $host_os in aix4.[012]|aix4.[012].*)
|
||||
collect2name=`${CC} -print-prog-name=collect2`
|
||||
if test -f "$collect2name" && \
|
||||
strings "$collect2name" | grep resolve_lib_name >/dev/null
|
||||
then
|
||||
# We have reworked collect2
|
||||
:
|
||||
else
|
||||
# We have old collect2
|
||||
hardcode_direct=unsupported
|
||||
hardcode_minus_L=yes
|
||||
hardcode_libdir_flag_spec='-L$libdir'
|
||||
hardcode_libdir_separator=
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
# Begin _LT_AC_SYS_LIBPATH_AIX.
|
||||
echo 'int main () { return 0; }' > conftest.c
|
||||
${CC} ${LDFLAGS} conftest.c -o conftest
|
||||
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||
}'`
|
||||
if test -z "$aix_libpath"; then
|
||||
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||
}'`
|
||||
fi
|
||||
if test -z "$aix_libpath"; then
|
||||
aix_libpath="/usr/lib:/lib"
|
||||
fi
|
||||
rm -f conftest.c conftest
|
||||
# End _LT_AC_SYS_LIBPATH_AIX.
|
||||
if test "$aix_use_runtimelinking" = yes; then
|
||||
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||
else
|
||||
if test "$host_cpu" = ia64; then
|
||||
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
|
||||
else
|
||||
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||
fi
|
||||
fi
|
||||
;;
|
||||
amigaos*)
|
||||
case "$host_cpu" in
|
||||
powerpc)
|
||||
;;
|
||||
m68k)
|
||||
hardcode_libdir_flag_spec='-L$libdir'
|
||||
hardcode_minus_L=yes
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
bsdi[45]*)
|
||||
;;
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
# When not using gcc, we currently assume that we are using
|
||||
# Microsoft Visual C++.
|
||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||
# no search path for DLLs.
|
||||
hardcode_libdir_flag_spec=' '
|
||||
libext=lib
|
||||
;;
|
||||
darwin* | rhapsody*)
|
||||
hardcode_direct=no
|
||||
if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
|
||||
:
|
||||
else
|
||||
ld_shlibs=no
|
||||
fi
|
||||
;;
|
||||
dgux*)
|
||||
hardcode_libdir_flag_spec='-L$libdir'
|
||||
;;
|
||||
freebsd2.[01]*)
|
||||
hardcode_direct=yes
|
||||
hardcode_minus_L=yes
|
||||
;;
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
hardcode_libdir_flag_spec='-R$libdir'
|
||||
hardcode_direct=yes
|
||||
;;
|
||||
hpux9*)
|
||||
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||
hardcode_libdir_separator=:
|
||||
hardcode_direct=yes
|
||||
# hardcode_minus_L: Not really in the search PATH,
|
||||
# but as the default location of the library.
|
||||
hardcode_minus_L=yes
|
||||
;;
|
||||
hpux10*)
|
||||
if test "$with_gnu_ld" = no; then
|
||||
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||
hardcode_libdir_separator=:
|
||||
hardcode_direct=yes
|
||||
# hardcode_minus_L: Not really in the search PATH,
|
||||
# but as the default location of the library.
|
||||
hardcode_minus_L=yes
|
||||
fi
|
||||
;;
|
||||
hpux11*)
|
||||
if test "$with_gnu_ld" = no; then
|
||||
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||
hardcode_libdir_separator=:
|
||||
case $host_cpu in
|
||||
hppa*64*|ia64*)
|
||||
hardcode_direct=no
|
||||
;;
|
||||
*)
|
||||
hardcode_direct=yes
|
||||
# hardcode_minus_L: Not really in the search PATH,
|
||||
# but as the default location of the library.
|
||||
hardcode_minus_L=yes
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
irix5* | irix6* | nonstopux*)
|
||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||
hardcode_libdir_separator=:
|
||||
;;
|
||||
netbsd*)
|
||||
hardcode_libdir_flag_spec='-R$libdir'
|
||||
hardcode_direct=yes
|
||||
;;
|
||||
newsos6)
|
||||
hardcode_direct=yes
|
||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||
hardcode_libdir_separator=:
|
||||
;;
|
||||
*nto* | *qnx*)
|
||||
;;
|
||||
openbsd*)
|
||||
if test -f /usr/libexec/ld.so; then
|
||||
hardcode_direct=yes
|
||||
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
||||
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||
else
|
||||
case "$host_os" in
|
||||
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
||||
hardcode_libdir_flag_spec='-R$libdir'
|
||||
;;
|
||||
*)
|
||||
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
else
|
||||
ld_shlibs=no
|
||||
fi
|
||||
;;
|
||||
os2*)
|
||||
hardcode_libdir_flag_spec='-L$libdir'
|
||||
hardcode_minus_L=yes
|
||||
;;
|
||||
osf3*)
|
||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||
hardcode_libdir_separator=:
|
||||
;;
|
||||
osf4* | osf5*)
|
||||
if test "$GCC" = yes; then
|
||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||
else
|
||||
# Both cc and cxx compiler support -rpath directly
|
||||
hardcode_libdir_flag_spec='-rpath $libdir'
|
||||
fi
|
||||
hardcode_libdir_separator=:
|
||||
;;
|
||||
solaris*)
|
||||
hardcode_libdir_flag_spec='-R$libdir'
|
||||
;;
|
||||
sunos4*)
|
||||
hardcode_libdir_flag_spec='-L$libdir'
|
||||
hardcode_direct=yes
|
||||
hardcode_minus_L=yes
|
||||
;;
|
||||
sysv4)
|
||||
case $host_vendor in
|
||||
sni)
|
||||
hardcode_direct=yes # is this really true???
|
||||
;;
|
||||
siemens)
|
||||
hardcode_direct=no
|
||||
;;
|
||||
motorola)
|
||||
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
sysv4.3*)
|
||||
;;
|
||||
sysv4*MP*)
|
||||
if test -d /usr/nec; then
|
||||
ld_shlibs=yes
|
||||
fi
|
||||
;;
|
||||
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
|
||||
;;
|
||||
sysv5* | sco3.2v5* | sco5v6*)
|
||||
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
|
||||
hardcode_libdir_separator=':'
|
||||
;;
|
||||
uts4*)
|
||||
hardcode_libdir_flag_spec='-L$libdir'
|
||||
;;
|
||||
*)
|
||||
ld_shlibs=no
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Check dynamic linker characteristics
|
||||
# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
|
||||
# Unlike libtool.m4, here we don't care about _all_ names of the library, but
|
||||
# only about the one the linker finds when passed -lNAME. This is the last
|
||||
# element of library_names_spec in libtool.m4, or possibly two of them if the
|
||||
# linker has special search rules.
|
||||
library_names_spec= # the last element of library_names_spec in libtool.m4
|
||||
libname_spec='lib$name'
|
||||
case "$host_os" in
|
||||
aix3*)
|
||||
library_names_spec='$libname.a'
|
||||
;;
|
||||
aix[4-9]*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
amigaos*)
|
||||
case "$host_cpu" in
|
||||
powerpc*)
|
||||
library_names_spec='$libname$shrext' ;;
|
||||
m68k)
|
||||
library_names_spec='$libname.a' ;;
|
||||
esac
|
||||
;;
|
||||
beos*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
bsdi[45]*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
cygwin* | mingw* | pw32* | cegcc*)
|
||||
shrext=.dll
|
||||
library_names_spec='$libname.dll.a $libname.lib'
|
||||
;;
|
||||
darwin* | rhapsody*)
|
||||
shrext=.dylib
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
dgux*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
freebsd[23].*)
|
||||
library_names_spec='$libname$shrext$versuffix'
|
||||
;;
|
||||
freebsd* | dragonfly* | midnightbsd*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
gnu*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
haiku*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
hpux9* | hpux10* | hpux11*)
|
||||
case $host_cpu in
|
||||
ia64*)
|
||||
shrext=.so
|
||||
;;
|
||||
hppa*64*)
|
||||
shrext=.sl
|
||||
;;
|
||||
*)
|
||||
shrext=.sl
|
||||
;;
|
||||
esac
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
interix[3-9]*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
irix5* | irix6* | nonstopux*)
|
||||
library_names_spec='$libname$shrext'
|
||||
case "$host_os" in
|
||||
irix5* | nonstopux*)
|
||||
libsuff= shlibsuff=
|
||||
;;
|
||||
*)
|
||||
case $LD in
|
||||
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
|
||||
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
|
||||
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
|
||||
*) libsuff= shlibsuff= ;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
linux*oldld* | linux*aout* | linux*coff*)
|
||||
;;
|
||||
linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
knetbsd*-gnu)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
netbsd*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
newsos6)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
*nto* | *qnx*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
openbsd*)
|
||||
library_names_spec='$libname$shrext$versuffix'
|
||||
;;
|
||||
os2*)
|
||||
libname_spec='$name'
|
||||
shrext=.dll
|
||||
library_names_spec='$libname.a'
|
||||
;;
|
||||
osf3* | osf4* | osf5*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
rdos*)
|
||||
;;
|
||||
solaris*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
sunos4*)
|
||||
library_names_spec='$libname$shrext$versuffix'
|
||||
;;
|
||||
sysv4 | sysv4.3*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
sysv4*MP*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
tpf*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
uts4*)
|
||||
library_names_spec='$libname$shrext'
|
||||
;;
|
||||
esac
|
||||
|
||||
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
|
||||
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
|
||||
escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||
escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||
|
||||
LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
|
||||
|
||||
# How to pass a linker flag through the compiler.
|
||||
wl="$escaped_wl"
|
||||
|
||||
# Static library suffix (normally "a").
|
||||
libext="$libext"
|
||||
|
||||
# Shared library suffix (normally "so").
|
||||
shlibext="$shlibext"
|
||||
|
||||
# Format of library name prefix.
|
||||
libname_spec="$escaped_libname_spec"
|
||||
|
||||
# Library names that the linker finds when passed -lNAME.
|
||||
library_names_spec="$escaped_library_names_spec"
|
||||
|
||||
# Flag to hardcode \$libdir into a binary during linking.
|
||||
# This must work even if \$libdir does not exist.
|
||||
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
|
||||
|
||||
# Whether we need a single -rpath flag with a separated argument.
|
||||
hardcode_libdir_separator="$hardcode_libdir_separator"
|
||||
|
||||
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
|
||||
# resulting binary.
|
||||
hardcode_direct="$hardcode_direct"
|
||||
|
||||
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
||||
# resulting binary.
|
||||
hardcode_minus_L="$hardcode_minus_L"
|
||||
|
||||
EOF
|
1971
build-aux/config.sub
vendored
Executable file
1971
build-aux/config.sub
vendored
Executable file
File diff suppressed because it is too large
Load diff
792
build-aux/depcomp
Executable file
792
build-aux/depcomp
Executable file
|
@ -0,0 +1,792 @@
|
|||
#! /bin/sh
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
|
||||
scriptversion=2024-06-19.01; # UTC
|
||||
|
||||
# Copyright (C) 1999-2024 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
||||
|
||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
||||
as side-effects.
|
||||
|
||||
Environment variables:
|
||||
depmode Dependency tracking mode.
|
||||
source Source file read by 'PROGRAMS ARGS'.
|
||||
object Object file output by 'PROGRAMS ARGS'.
|
||||
DEPDIR directory where to store dependencies.
|
||||
depfile Dependency file to output.
|
||||
tmpdepfile Temporary file to use when outputting dependencies.
|
||||
libtool Whether libtool is used (yes/no).
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||
General help using GNU software: <https://www.gnu.org/gethelp/>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "depcomp (GNU Automake) $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
# Get the directory component of the given path, and save it in the
|
||||
# global variables '$dir'. Note that this directory component will
|
||||
# be either empty or ending with a '/' character. This is deliberate.
|
||||
set_dir_from ()
|
||||
{
|
||||
case $1 in
|
||||
*/*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
|
||||
*) dir=;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Get the suffix-stripped basename of the given path, and save it the
|
||||
# global variable '$base'.
|
||||
set_base_from ()
|
||||
{
|
||||
base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
|
||||
}
|
||||
|
||||
# If no dependency file was actually created by the compiler invocation,
|
||||
# we still have to create a dummy depfile, to avoid errors with the
|
||||
# Makefile "include basename.Plo" scheme.
|
||||
make_dummy_depfile ()
|
||||
{
|
||||
echo "#dummy" > "$depfile"
|
||||
}
|
||||
|
||||
# Factor out some common post-processing of the generated depfile.
|
||||
# Requires the auxiliary global variable '$tmpdepfile' to be set.
|
||||
aix_post_process_depfile ()
|
||||
{
|
||||
# If the compiler actually managed to produce a dependency file,
|
||||
# post-process it.
|
||||
if test -f "$tmpdepfile"; then
|
||||
# Each line is of the form 'foo.o: dependency.h'.
|
||||
# Do two passes, one to just change these to
|
||||
# $object: dependency.h
|
||||
# and one to simply output
|
||||
# dependency.h:
|
||||
# which is needed to avoid the deleted-header problem.
|
||||
{ sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
|
||||
sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
|
||||
} > "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
else
|
||||
make_dummy_depfile
|
||||
fi
|
||||
}
|
||||
|
||||
# A tabulation character.
|
||||
tab=' '
|
||||
# A newline character.
|
||||
nl='
|
||||
'
|
||||
# Character ranges might be problematic outside the C locale.
|
||||
# These definitions help.
|
||||
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||
lower=abcdefghijklmnopqrstuvwxyz
|
||||
alpha=${upper}${lower}
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
||||
depfile=${depfile-`echo "$object" |
|
||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Avoid interference from the environment.
|
||||
gccflag= dashmflag=
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
cygpath_u="cygpath -u -f -"
|
||||
if test "$depmode" = msvcmsys; then
|
||||
# This is just like msvisualcpp but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u='sed s,\\\\,/,g'
|
||||
depmode=msvisualcpp
|
||||
fi
|
||||
|
||||
if test "$depmode" = msvc7msys; then
|
||||
# This is just like msvc7 but w/o cygpath translation.
|
||||
# Just convert the backslash-escaped backslashes to single forward
|
||||
# slashes to satisfy depend.m4
|
||||
cygpath_u='sed s,\\\\,/,g'
|
||||
depmode=msvc7
|
||||
fi
|
||||
|
||||
if test "$depmode" = xlc; then
|
||||
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
|
||||
gccflag=-qmakedep=gcc,-MF
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc3)
|
||||
## gcc 3 implements dependency tracking that does exactly what
|
||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
||||
## the command line argument order; so add the flags where they
|
||||
## appear in depend2.am. Note that the slowdown incurred here
|
||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
||||
*) set fnord "$@" "$arg" ;;
|
||||
esac
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
done
|
||||
"$@"
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
mv "$tmpdepfile" "$depfile"
|
||||
;;
|
||||
|
||||
gcc)
|
||||
## Note that this doesn't just cater to obsolete pre-3.x GCC compilers.
|
||||
## but also to in-use compilers like IBM xlc/xlC and the HP C compiler.
|
||||
## (see the conditional assignment to $gccflag above).
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say). Also, it might not be
|
||||
## supported by the other compilers which use the 'gcc' depmode.
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
# The second -e expression handles DOS-style file names with drive
|
||||
# letters.
|
||||
sed -e 's/^[^:]*: / /' \
|
||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the "deleted header file" problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
## Some versions of gcc put a space before the ':'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well. hp depmode also adds that space, but also prefixes the VPATH
|
||||
## to the object. Take care to not repeat it in the output.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
|
||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
||||
echo "$object : \\" > "$depfile"
|
||||
# Clip off the initial element (the dependent). Don't try to be
|
||||
# clever and replace this with sed code, as IRIX sed won't handle
|
||||
# lines with more than a fixed number of characters (4096 in
|
||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
||||
# the IRIX cc adds comments like '#:fec' to the end of the
|
||||
# dependency line.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
|
||||
| tr "$nl" ' ' >> "$depfile"
|
||||
echo >> "$depfile"
|
||||
# The second pass generates a dummy entry for each header file.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
||||
>> "$depfile"
|
||||
else
|
||||
make_dummy_depfile
|
||||
fi
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
xlc)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
aix)
|
||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
||||
# in a .u file. In older versions, this file always lives in the
|
||||
# current directory. Also, the AIX compiler puts '$object:' at the
|
||||
# start of each line; $object doesn't have directory information.
|
||||
# Version 6 uses the directory in both cases.
|
||||
set_dir_from "$object"
|
||||
set_base_from "$object"
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$base.u
|
||||
tmpdepfile3=$dir.libs/$base.u
|
||||
"$@" -Wc,-M
|
||||
else
|
||||
tmpdepfile1=$dir$base.u
|
||||
tmpdepfile2=$dir$base.u
|
||||
tmpdepfile3=$dir$base.u
|
||||
"$@" -M
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
aix_post_process_depfile
|
||||
;;
|
||||
|
||||
tcc)
|
||||
# tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
|
||||
# FIXME: That version still under development at the moment of writing.
|
||||
# Make that this statement remains true also for stable, released
|
||||
# versions.
|
||||
# It will wrap lines (doesn't matter whether long or short) with a
|
||||
# trailing '\', as in:
|
||||
#
|
||||
# foo.o : \
|
||||
# foo.c \
|
||||
# foo.h \
|
||||
#
|
||||
# It will put a trailing '\' even on the last line, and will use leading
|
||||
# spaces rather than leading tabs (at least since its commit 0394caf7
|
||||
# "Emit spaces for -MD").
|
||||
"$@" -MD -MF "$tmpdepfile"
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
|
||||
# We have to change lines of the first kind to '$object: \'.
|
||||
sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
|
||||
# And for each line of the second kind, we have to emit a 'dep.h:'
|
||||
# dummy dependency, to avoid the deleted-header problem.
|
||||
sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
## The order of this option in the case statement is important, since the
|
||||
## shell code in configure will try each of these formats in the order
|
||||
## listed in this file. A plain '-MD' option would be understood by many
|
||||
## compilers, so we must ensure this comes after the gcc and icc options.
|
||||
pgcc)
|
||||
# Portland's C compiler understands '-MD'.
|
||||
# Will always output deps to 'file.d' where file is the root name of the
|
||||
# source file under compilation, even if file resides in a subdirectory.
|
||||
# The object file name does not affect the name of the '.d' file.
|
||||
# pgcc 10.2 will output
|
||||
# foo.o: sub/foo.c sub/foo.h
|
||||
# and will wrap long lines using '\' :
|
||||
# foo.o: sub/foo.c ... \
|
||||
# sub/foo.h ... \
|
||||
# ...
|
||||
set_dir_from "$object"
|
||||
# Use the source, not the object, to determine the base name, since
|
||||
# that's sadly what pgcc will do too.
|
||||
set_base_from "$source"
|
||||
tmpdepfile=$base.d
|
||||
|
||||
# For projects that build the same source file twice into different object
|
||||
# files, the pgcc approach of using the *source* file root name can cause
|
||||
# problems in parallel builds. Use a locking strategy to avoid stomping on
|
||||
# the same $tmpdepfile.
|
||||
lockdir=$base.d-lock
|
||||
trap "
|
||||
echo '$0: caught signal, cleaning up...' >&2
|
||||
rmdir '$lockdir'
|
||||
exit 1
|
||||
" 1 2 13 15
|
||||
numtries=100
|
||||
i=$numtries
|
||||
while test $i -gt 0; do
|
||||
# mkdir is a portable test-and-set.
|
||||
if mkdir "$lockdir" 2>/dev/null; then
|
||||
# This process acquired the lock.
|
||||
"$@" -MD
|
||||
stat=$?
|
||||
# Release the lock.
|
||||
rmdir "$lockdir"
|
||||
break
|
||||
else
|
||||
# If the lock is being held by a different process, wait
|
||||
# until the winning process is done or we timeout.
|
||||
while test -d "$lockdir" && test $i -gt 0; do
|
||||
sleep 1
|
||||
i=`expr $i - 1`
|
||||
done
|
||||
fi
|
||||
i=`expr $i - 1`
|
||||
done
|
||||
trap - 1 2 13 15
|
||||
if test $i -le 0; then
|
||||
echo "$0: failed to acquire lock after $numtries attempts" >&2
|
||||
echo "$0: check lockdir '$lockdir'" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
# Each line is of the form `foo.o: dependent.h',
|
||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
||||
# Do two passes, one to just change these to
|
||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp2)
|
||||
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
||||
# compilers, which have integrated preprocessors. The correct option
|
||||
# to use with these is +Maked; it writes dependencies to a file named
|
||||
# 'foo.d', which lands next to the object file, wherever that
|
||||
# happens to be.
|
||||
# Much of this is similar to the tru64 case; see comments there.
|
||||
set_dir_from "$object"
|
||||
set_base_from "$object"
|
||||
if test "$libtool" = yes; then
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir.libs/$base.d
|
||||
"$@" -Wc,+Maked
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
"$@" +Maked
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
if test -f "$tmpdepfile"; then
|
||||
sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
|
||||
# Add 'dependent.h:' lines.
|
||||
sed -ne '2,${
|
||||
s/^ *//
|
||||
s/ \\*$//
|
||||
s/$/:/
|
||||
p
|
||||
}' "$tmpdepfile" >> "$depfile"
|
||||
else
|
||||
make_dummy_depfile
|
||||
fi
|
||||
rm -f "$tmpdepfile" "$tmpdepfile2"
|
||||
;;
|
||||
|
||||
tru64)
|
||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
||||
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
|
||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
||||
# dependencies in 'foo.d' instead, so we check for that too.
|
||||
# Subdirectories are respected.
|
||||
set_dir_from "$object"
|
||||
set_base_from "$object"
|
||||
|
||||
if test "$libtool" = yes; then
|
||||
# Libtool generates 2 separate objects for the 2 libraries. These
|
||||
# two compilations output dependencies in $dir.libs/$base.o.d and
|
||||
# in $dir$base.o.d. We have to check for both files, because
|
||||
# one of the two compilations can be disabled. We should prefer
|
||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
||||
# the former would cause a distcleancheck panic.
|
||||
tmpdepfile1=$dir$base.o.d # libtool 1.5
|
||||
tmpdepfile2=$dir.libs/$base.o.d # Likewise.
|
||||
tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
|
||||
"$@" -Wc,-MD
|
||||
else
|
||||
tmpdepfile1=$dir$base.d
|
||||
tmpdepfile2=$dir$base.d
|
||||
tmpdepfile3=$dir$base.d
|
||||
"$@" -MD
|
||||
fi
|
||||
|
||||
stat=$?
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
exit $stat
|
||||
fi
|
||||
|
||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
||||
do
|
||||
test -f "$tmpdepfile" && break
|
||||
done
|
||||
# Same post-processing that is required for AIX mode.
|
||||
aix_post_process_depfile
|
||||
;;
|
||||
|
||||
msvc7)
|
||||
if test "$libtool" = yes; then
|
||||
showIncludes=-Wc,-showIncludes
|
||||
else
|
||||
showIncludes=-showIncludes
|
||||
fi
|
||||
"$@" $showIncludes > "$tmpdepfile"
|
||||
stat=$?
|
||||
grep -v '^Note: including file: ' "$tmpdepfile"
|
||||
if test $stat -ne 0; then
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
# The first sed program below extracts the file names and escapes
|
||||
# backslashes for cygpath. The second sed program outputs the file
|
||||
# name when reading, but also accumulates all include files in the
|
||||
# hold buffer in order to output them again at the end. This only
|
||||
# works with sed implementations that can handle large buffers.
|
||||
sed < "$tmpdepfile" -n '
|
||||
/^Note: including file: *\(.*\)/ {
|
||||
s//\1/
|
||||
s/\\/\\\\/g
|
||||
p
|
||||
}' | $cygpath_u | sort -u | sed -n '
|
||||
s/ /\\ /g
|
||||
s/\(.*\)/'"$tab"'\1 \\/p
|
||||
s/.\(.*\) \\/\1:/
|
||||
H
|
||||
$ {
|
||||
s/.*/'"$tab"'/
|
||||
G
|
||||
p
|
||||
}' >> "$depfile"
|
||||
echo >> "$depfile" # make sure the fragment doesn't end with a backslash
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvc7msys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout, regardless of -o.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove '-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
# Require at least two characters before searching for ':'
|
||||
# in the target name. This is to cope with DOS-style filenames:
|
||||
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
|
||||
"$@" $dashmflag |
|
||||
sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process this sed invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
tr ' ' "$nl" < "$tmpdepfile" \
|
||||
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
"$@" || exit $?
|
||||
# Remove any Libtool call
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
# X makedepend
|
||||
shift
|
||||
cleared=no eat=no
|
||||
for arg
|
||||
do
|
||||
case $cleared in
|
||||
no)
|
||||
set ""; shift
|
||||
cleared=yes ;;
|
||||
esac
|
||||
if test $eat = yes; then
|
||||
eat=no
|
||||
continue
|
||||
fi
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
# Strip any option that makedepend may not understand. Remove
|
||||
# the object too, otherwise makedepend will parse it as a source file.
|
||||
-arch)
|
||||
eat=yes ;;
|
||||
-*|$object)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift ;;
|
||||
esac
|
||||
done
|
||||
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
rm -f "$depfile"
|
||||
# makedepend may prepend the VPATH from the source file name to the object.
|
||||
# No need to regex-escape $object, excess matching of '.' is harmless.
|
||||
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
|
||||
# Some versions of the HPUX 10.20 sed can't process the last invocation
|
||||
# correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed '1,2d' "$tmpdepfile" \
|
||||
| tr ' ' "$nl" \
|
||||
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
||||
| sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
# Remove '-o $object'.
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case $arg in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # $arg
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
"$@" -E \
|
||||
| sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
||||
| sed '$ s: \\$::' > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
cat < "$tmpdepfile" >> "$depfile"
|
||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvisualcpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the preprocessed file to stdout.
|
||||
"$@" || exit $?
|
||||
|
||||
# Remove the call to Libtool.
|
||||
if test "$libtool" = yes; then
|
||||
while test "X$1" != 'X--mode=compile'; do
|
||||
shift
|
||||
done
|
||||
shift
|
||||
fi
|
||||
|
||||
IFS=" "
|
||||
for arg
|
||||
do
|
||||
case "$arg" in
|
||||
-o)
|
||||
shift
|
||||
;;
|
||||
$object)
|
||||
shift
|
||||
;;
|
||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
||||
set fnord "$@"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
done
|
||||
"$@" -E 2>/dev/null |
|
||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
|
||||
echo "$tab" >> "$depfile"
|
||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
msvcmsys)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
179
build-aux/do-release-commit-and-tag
Executable file
179
build-aux/do-release-commit-and-tag
Executable file
|
@ -0,0 +1,179 @@
|
|||
#!/bin/sh
|
||||
# In a git/autoconf/automake-enabled project with a NEWS file and a version-
|
||||
# controlled .prev-version file, automate the procedure by which we record
|
||||
# the date, release-type and version string in the NEWS file. That commit
|
||||
# will serve to identify the release, so apply a signed tag to it as well.
|
||||
VERSION=2024-07-04.10 # UTC
|
||||
|
||||
# Note: this is a bash script (could be zsh or dash)
|
||||
|
||||
# Copyright (C) 2009-2024 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Written by Jim Meyering
|
||||
|
||||
ME=$(basename "$0")
|
||||
warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
|
||||
die() { warn "$*"; exit 1; }
|
||||
|
||||
help()
|
||||
{
|
||||
cat <<EOF
|
||||
Usage: $ME [OPTION...] VERSION RELEASE_TYPE
|
||||
|
||||
Run this script from top_srcdir to perform the final pre-release NEWS
|
||||
update in which the date, release-type and version string are
|
||||
recorded. Commit that result with a log entry marking the release,
|
||||
and apply a signed tag. Run it from your project's top-level
|
||||
directory.
|
||||
|
||||
Requirements:
|
||||
- you use git for version-control
|
||||
- a version-controlled .prev-version file
|
||||
- a NEWS file, with line 3 identical to this:
|
||||
$noteworthy_stub
|
||||
|
||||
Options:
|
||||
--branch=BRANCH set release branch (default: $branch)
|
||||
-C, --builddir=DIR location of (configured) Makefile (default: $builddir)
|
||||
--help print this help, then exit
|
||||
--version print version number, then exit
|
||||
|
||||
EXAMPLE:
|
||||
To update NEWS and tag the beta 8.1 release of coreutils, I would run this:
|
||||
|
||||
$ME 8.1 beta
|
||||
|
||||
Report bugs and patches to <bug-gnulib@gnu.org>.
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
version()
|
||||
{
|
||||
year=$(echo "$VERSION" | sed 's/[^0-9].*//')
|
||||
cat <<EOF
|
||||
$ME $VERSION
|
||||
Copyright (C) $year Free Software Foundation, Inc,
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
## ------ ##
|
||||
## Main. ##
|
||||
## ------ ##
|
||||
|
||||
# Constants.
|
||||
noteworthy='* Noteworthy changes in release'
|
||||
noteworthy_stub="$noteworthy ?.? (????-??-??) [?]"
|
||||
|
||||
# Variables.
|
||||
branch=$(git branch | sed -ne '/^\* /{s///;p;q;}')
|
||||
builddir=.
|
||||
|
||||
while test $# != 0
|
||||
do
|
||||
# Handle --option=value by splitting apart and putting back on argv.
|
||||
case $1 in
|
||||
--*=*)
|
||||
opt=$(echo "$1" | sed -e 's/=.*//')
|
||||
val=$(echo "$1" | sed -e 's/[^=]*=//')
|
||||
shift
|
||||
set dummy "$opt" "$val" "$@"; shift
|
||||
;;
|
||||
esac
|
||||
|
||||
case $1 in
|
||||
--help|--version) ${1#--};;
|
||||
--branch) shift; branch=$1; shift ;;
|
||||
-C|--builddir) shift; builddir=$1; shift ;;
|
||||
--*) die "unrecognized option: $1";;
|
||||
*) break;;
|
||||
esac
|
||||
done
|
||||
|
||||
test $# = 2 \
|
||||
|| die "Usage: $ME [OPTION...] VERSION TYPE"
|
||||
|
||||
ver=$1
|
||||
type=$2
|
||||
|
||||
|
||||
## ---------------------- ##
|
||||
## First, sanity checks. ##
|
||||
## ---------------------- ##
|
||||
|
||||
# Verify that $ver looks like a version number, and...
|
||||
echo "$ver"|grep -E '^[0-9][0-9.]*[0-9]$' > /dev/null \
|
||||
|| die "invalid version: $ver"
|
||||
prev_ver=$(cat .prev-version) \
|
||||
|| die 'failed to determine previous version number from .prev-version'
|
||||
|
||||
# Verify that $ver is sensible (> .prev-version).
|
||||
case $(printf "%s\n%s\n" "$prev_ver" "$ver"|sort -V -u|tr '\n' ':') in
|
||||
"$prev_ver:$ver:") ;;
|
||||
*) die "invalid version: $ver (<= $prev_ver)";;
|
||||
esac
|
||||
|
||||
case $type in
|
||||
alpha|beta|stable) ;;
|
||||
*) die "invalid release type: $type";;
|
||||
esac
|
||||
|
||||
# No local modifications allowed.
|
||||
case $(git diff-index --name-only HEAD) in
|
||||
'') ;;
|
||||
*) die 'this tree is dirty; commit your changes first';;
|
||||
esac
|
||||
|
||||
# Ensure the current branch name is correct:
|
||||
curr_br=$(git rev-parse --symbolic-full-name HEAD)
|
||||
test "$curr_br" = "refs/heads/$branch" || die not on branch $branch
|
||||
|
||||
# Extract package name from Makefile.
|
||||
Makefile=$builddir/Makefile
|
||||
pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' "$Makefile") \
|
||||
|| die "failed to determine package name from $Makefile"
|
||||
|
||||
# Check that line 3 of NEWS is the stub line about to be replaced.
|
||||
test "$(sed -n 3p NEWS)" = "$noteworthy_stub" \
|
||||
|| die "line 3 of NEWS must be exactly '$noteworthy_stub'"
|
||||
|
||||
## --------------- ##
|
||||
## Then, changes. ##
|
||||
## --------------- ##
|
||||
|
||||
# Update NEWS to have today's date, plus desired version number and $type.
|
||||
perl -MPOSIX -ni -e 'my $today = strftime "%F", localtime time;' \
|
||||
-e 'my ($type, $ver) = qw('"$type $ver"');' \
|
||||
-e 'my $pfx = "'"$noteworthy"'";' \
|
||||
-e 'print $.==3 ? "$pfx $ver ($today) [$type]\n" : $_' \
|
||||
NEWS || die 'failed to update NEWS'
|
||||
|
||||
printf "version %s\n\n* NEWS: Record release date.\n" "$ver" \
|
||||
| git commit -F - -a || die 'git commit failed'
|
||||
git tag -s -m "$pkg $ver" v$ver HEAD || die 'git tag failed'
|
||||
|
||||
# Local variables:
|
||||
# indent-tabs-mode: nil
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
# time-stamp-start: "VERSION="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: " # UTC"
|
||||
# End:
|
562
build-aux/gendocs.sh
Executable file
562
build-aux/gendocs.sh
Executable file
|
@ -0,0 +1,562 @@
|
|||
#!/bin/sh -e
|
||||
# gendocs.sh -- generate a GNU manual in many formats. This script is
|
||||
# mentioned in maintain.texi. See the help message below for usage details.
|
||||
|
||||
scriptversion=2024-07-04.03
|
||||
|
||||
# Copyright 2003-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Original author: Mohit Agarwal.
|
||||
# Send bug reports and any other correspondence to bug-gnulib@gnu.org.
|
||||
#
|
||||
# The latest version of this script, and the companion template, is
|
||||
# available from the Gnulib repository:
|
||||
#
|
||||
# https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh
|
||||
# https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template
|
||||
|
||||
# TODO:
|
||||
# - image importing was only implemented for HTML generated by
|
||||
# makeinfo. But it should be simple enough to adjust.
|
||||
# - images are not imported in the source tarball. All the needed
|
||||
# formats (PDF, PNG, etc.) should be included.
|
||||
|
||||
prog=`basename "$0"`
|
||||
srcdir=`pwd`
|
||||
|
||||
scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh"
|
||||
templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template"
|
||||
|
||||
: "${SETLANG="env LANG= LC_TIME= LC_MESSAGES= LC_ALL= LANGUAGE="}"
|
||||
: "${MAKEINFO="makeinfo"}"
|
||||
: "${TEXI2DVI="texi2dvi"}"
|
||||
: "${DOCBOOK2HTML="docbook2html"}"
|
||||
: "${DOCBOOK2PDF="docbook2pdf"}"
|
||||
: "${DOCBOOK2TXT="docbook2txt"}"
|
||||
: "${GENDOCS_TEMPLATE_DIR="."}"
|
||||
: "${PERL="perl"}"
|
||||
: "${TEXI2HTML="texi2html"}"
|
||||
unset CDPATH
|
||||
unset use_texi2html
|
||||
|
||||
MANUAL_TITLE=
|
||||
PACKAGE=
|
||||
EMAIL=webmasters@gnu.org # please override with --email
|
||||
commonarg= # passed to all makeinfo/texi2html invocations.
|
||||
dirargs= # passed to all tools (-I dir).
|
||||
dirs= # -I directories.
|
||||
htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual"
|
||||
default_htmlarg=true
|
||||
infoarg=--no-split
|
||||
generate_ascii=true
|
||||
generate_html=true
|
||||
generate_info=true
|
||||
generate_tex=true
|
||||
outdir=manual
|
||||
unset source_extra
|
||||
split=node
|
||||
srcfile=
|
||||
texarg="-t @finalout"
|
||||
|
||||
version="gendocs.sh $scriptversion
|
||||
|
||||
Copyright 2024 Free Software Foundation, Inc.
|
||||
There is NO warranty. You may redistribute this software
|
||||
under the terms of the GNU General Public License.
|
||||
For more information about these matters, see the files named COPYING."
|
||||
|
||||
usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE
|
||||
|
||||
Generate output in various formats from PACKAGE.texinfo (or .texi or
|
||||
.txi) source. See the GNU Maintainers document for a more extensive
|
||||
discussion:
|
||||
https://www.gnu.org/prep/maintain_toc.html
|
||||
|
||||
Options:
|
||||
--email ADR use ADR as contact in generated web pages; always give this.
|
||||
|
||||
-s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi}
|
||||
-o OUTDIR write files into OUTDIR, instead of manual/.
|
||||
-I DIR append DIR to the Texinfo search path.
|
||||
--common ARG pass ARG in all invocations.
|
||||
--html ARG pass ARG to makeinfo or texi2html for HTML targets,
|
||||
instead of '$htmlarg'.
|
||||
--info ARG pass ARG to makeinfo for Info, instead of --no-split.
|
||||
--no-ascii skip generating the plain text output.
|
||||
--no-html skip generating the html output.
|
||||
--no-info skip generating the info output.
|
||||
--no-tex skip generating the dvi and pdf output.
|
||||
--source ARG include ARG in tar archive of sources.
|
||||
--split HOW make split HTML by node, section, chapter; default node.
|
||||
--tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout.
|
||||
|
||||
--texi2html use texi2html to make HTML target, with all split versions.
|
||||
--docbook convert through DocBook too (xml, txt, html, pdf).
|
||||
|
||||
--help display this help and exit successfully.
|
||||
--version display version information and exit successfully.
|
||||
|
||||
Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\"
|
||||
|
||||
Typical sequence:
|
||||
cd PACKAGESOURCE/doc
|
||||
wget \"$scripturl\"
|
||||
wget \"$templateurl\"
|
||||
$prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\"
|
||||
|
||||
Output will be in a new subdirectory \"manual\" (by default;
|
||||
use -o OUTDIR to override). Move all the new files into your web CVS
|
||||
tree, as explained in the Web Pages node of maintain.texi.
|
||||
|
||||
Please use the --email ADDRESS option so your own bug-reporting
|
||||
address will be used in the generated HTML pages.
|
||||
|
||||
MANUAL-TITLE is included as part of the HTML <title> of the overall
|
||||
manual/index.html file. It should include the name of the package being
|
||||
documented. manual/index.html is created by substitution from the file
|
||||
$GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the
|
||||
generic template for your own purposes.)
|
||||
|
||||
If you have several manuals, you'll need to run this script several
|
||||
times with different MANUAL values, specifying a different output
|
||||
directory with -o each time. Then write (by hand) an overall index.html
|
||||
with links to them all.
|
||||
|
||||
If a manual's Texinfo sources are spread across several directories,
|
||||
first copy or symlink all Texinfo sources into a single directory.
|
||||
(Part of the script's work is to make a tar.gz of the sources.)
|
||||
|
||||
As implied above, by default monolithic Info files are generated.
|
||||
If you want split Info, or other Info options, use --info to override.
|
||||
|
||||
You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML,
|
||||
and PERL to control the programs that get executed, and
|
||||
GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is
|
||||
looked for. With --docbook, the environment variables DOCBOOK2HTML,
|
||||
DOCBOOK2PDF, and DOCBOOK2TXT are also consulted.
|
||||
|
||||
By default, makeinfo and texi2dvi are run in the default (English)
|
||||
locale, since that's the language of most Texinfo manuals. If you
|
||||
happen to have a non-English manual and non-English web site, see the
|
||||
SETLANG setting in the source.
|
||||
|
||||
Email bug reports or enhancement requests to bug-gnulib@gnu.org.
|
||||
"
|
||||
|
||||
while test $# -gt 0; do
|
||||
case $1 in
|
||||
-s) shift; srcfile=$1;;
|
||||
-o) shift; outdir=$1;;
|
||||
-I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";;
|
||||
--common) shift; commonarg=$1;;
|
||||
--docbook) docbook=yes;;
|
||||
--email) shift; EMAIL=$1;;
|
||||
--html) shift; default_htmlarg=false; htmlarg=$1;;
|
||||
--info) shift; infoarg=$1;;
|
||||
--no-ascii) generate_ascii=false;;
|
||||
--no-html) generate_html=false;;
|
||||
--no-info) generate_info=false;;
|
||||
--no-tex) generate_tex=false;;
|
||||
--source) shift; source_extra=$1;;
|
||||
--split) shift; split=$1;;
|
||||
--tex) shift; texarg=$1;;
|
||||
--texi2html) use_texi2html=1;;
|
||||
|
||||
--help) echo "$usage"; exit 0;;
|
||||
--version) echo "$version"; exit 0;;
|
||||
-*)
|
||||
echo "$0: Unknown option \`$1'." >&2
|
||||
echo "$0: Try \`--help' for more information." >&2
|
||||
exit 1;;
|
||||
*)
|
||||
if test -z "$PACKAGE"; then
|
||||
PACKAGE=$1
|
||||
elif test -z "$MANUAL_TITLE"; then
|
||||
MANUAL_TITLE=$1
|
||||
else
|
||||
echo "$0: extra non-option argument \`$1'." >&2
|
||||
exit 1
|
||||
fi;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# makeinfo uses the dirargs, but texi2dvi doesn't.
|
||||
commonarg=" $dirargs $commonarg"
|
||||
|
||||
# For most of the following, the base name is just $PACKAGE
|
||||
base=$PACKAGE
|
||||
|
||||
if $default_htmlarg && test -n "$use_texi2html"; then
|
||||
# The legacy texi2html doesn't support TOP_NODE_UP_URL
|
||||
htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css"
|
||||
fi
|
||||
|
||||
if test -n "$srcfile"; then
|
||||
# but here, we use the basename of $srcfile
|
||||
base=`basename "$srcfile"`
|
||||
case $base in
|
||||
*.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;;
|
||||
esac
|
||||
PACKAGE=$base
|
||||
elif test -s "$srcdir/$PACKAGE.texinfo"; then
|
||||
srcfile=$srcdir/$PACKAGE.texinfo
|
||||
elif test -s "$srcdir/$PACKAGE.texi"; then
|
||||
srcfile=$srcdir/$PACKAGE.texi
|
||||
elif test -s "$srcdir/$PACKAGE.txi"; then
|
||||
srcfile=$srcdir/$PACKAGE.txi
|
||||
else
|
||||
echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then
|
||||
echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2
|
||||
echo "$0: it is available from $templateurl." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Function to return size of $1 in something resembling kilobytes.
|
||||
calcsize()
|
||||
{
|
||||
size=`ls -ksl $1 | awk '{print $1}'`
|
||||
echo $size
|
||||
}
|
||||
|
||||
# copy_images OUTDIR HTML-FILE...
|
||||
# -------------------------------
|
||||
# Copy all the images needed by the HTML-FILEs into OUTDIR.
|
||||
# Look for them in . and the -I directories; this is simpler than what
|
||||
# makeinfo supports with -I, but hopefully it will suffice.
|
||||
copy_images()
|
||||
{
|
||||
local odir
|
||||
odir=$1
|
||||
shift
|
||||
$PERL -n -e "
|
||||
BEGIN {
|
||||
\$me = '$prog';
|
||||
\$odir = '$odir';
|
||||
@dirs = qw(. $dirs);
|
||||
}
|
||||
" -e '
|
||||
/<img src="(.*?)"/g && ++$need{$1};
|
||||
|
||||
END {
|
||||
#print "$me: @{[sort keys %need]}\n"; # for debugging, show images found.
|
||||
FILE: for my $f (sort keys %need) {
|
||||
for my $d (@dirs) {
|
||||
if (-f "$d/$f") {
|
||||
use File::Basename;
|
||||
my $dest = dirname ("$odir/$f");
|
||||
#
|
||||
use File::Path;
|
||||
-d $dest || mkpath ($dest)
|
||||
|| die "$me: cannot mkdir $dest: $!\n";
|
||||
#
|
||||
use File::Copy;
|
||||
copy ("$d/$f", $dest)
|
||||
|| die "$me: cannot copy $d/$f to $dest: $!\n";
|
||||
next FILE;
|
||||
}
|
||||
}
|
||||
die "$me: $ARGV: cannot find image $f\n";
|
||||
}
|
||||
}
|
||||
' -- "$@" || exit 1
|
||||
}
|
||||
|
||||
case $outdir in
|
||||
/*) abs_outdir=$outdir;;
|
||||
*) abs_outdir=$srcdir/$outdir;;
|
||||
esac
|
||||
|
||||
echo "Making output for $srcfile"
|
||||
echo " in `pwd`"
|
||||
mkdir -p "$outdir/"
|
||||
|
||||
#
|
||||
if $generate_info; then
|
||||
cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\""
|
||||
echo "Generating info... ($cmd)"
|
||||
rm -f $PACKAGE.info* # get rid of any strays
|
||||
eval "$cmd"
|
||||
tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info*
|
||||
ls -l "$outdir/$PACKAGE.info.tar.gz"
|
||||
info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"`
|
||||
# do not mv the info files, there's no point in having them available
|
||||
# separately on the web.
|
||||
fi # end info
|
||||
|
||||
#
|
||||
if $generate_tex; then
|
||||
cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\""
|
||||
printf "\nGenerating dvi... (%s)\n" "$cmd"
|
||||
eval "$cmd"
|
||||
# compress/finish dvi:
|
||||
gzip -f -9 $PACKAGE.dvi
|
||||
dvi_gz_size=`calcsize $PACKAGE.dvi.gz`
|
||||
mv $PACKAGE.dvi.gz "$outdir/"
|
||||
ls -l "$outdir/$PACKAGE.dvi.gz"
|
||||
|
||||
cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\""
|
||||
printf "\nGenerating pdf... (%s)\n" "$cmd"
|
||||
eval "$cmd"
|
||||
pdf_size=`calcsize $PACKAGE.pdf`
|
||||
mv $PACKAGE.pdf "$outdir/"
|
||||
ls -l "$outdir/$PACKAGE.pdf"
|
||||
fi # end tex (dvi + pdf)
|
||||
|
||||
#
|
||||
if $generate_ascii; then
|
||||
opt="-o $PACKAGE.txt --no-split --no-headers $commonarg"
|
||||
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
|
||||
printf "\nGenerating ascii... (%s)\n" "$cmd"
|
||||
eval "$cmd"
|
||||
ascii_size=`calcsize $PACKAGE.txt`
|
||||
gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz"
|
||||
ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"`
|
||||
mv $PACKAGE.txt "$outdir/"
|
||||
ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz"
|
||||
fi
|
||||
|
||||
#
|
||||
|
||||
if $generate_html; then
|
||||
# Split HTML at level $1. Used for texi2html.
|
||||
html_split()
|
||||
{
|
||||
opt="--split=$1 --node-files $commonarg $htmlarg"
|
||||
cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\""
|
||||
printf "\nGenerating html by %s... (%s)\n" "$1" "$cmd"
|
||||
eval "$cmd"
|
||||
split_html_dir=$PACKAGE.html
|
||||
(
|
||||
cd ${split_html_dir} || exit 1
|
||||
ln -sf ${PACKAGE}.html index.html
|
||||
tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html
|
||||
)
|
||||
eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"`
|
||||
rm -f "$outdir"/html_$1/*.html
|
||||
mkdir -p "$outdir/html_$1/"
|
||||
mv ${split_html_dir}/*.html "$outdir/html_$1/"
|
||||
rmdir ${split_html_dir}
|
||||
}
|
||||
|
||||
if test -z "$use_texi2html"; then
|
||||
opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg"
|
||||
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
|
||||
printf "\nGenerating monolithic html... (%s)\n" "$cmd"
|
||||
rm -rf $PACKAGE.html # in case a directory is left over
|
||||
eval "$cmd"
|
||||
html_mono_size=`calcsize $PACKAGE.html`
|
||||
gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
|
||||
html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
|
||||
copy_images "$outdir/" $PACKAGE.html
|
||||
mv $PACKAGE.html "$outdir/"
|
||||
ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz"
|
||||
|
||||
# Before Texinfo 5.0, makeinfo did not accept a --split=HOW option,
|
||||
# it just always split by node. So if we're splitting by node anyway,
|
||||
# leave it out.
|
||||
if test "x$split" = xnode; then
|
||||
split_arg=
|
||||
else
|
||||
split_arg=--split=$split
|
||||
fi
|
||||
#
|
||||
opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg"
|
||||
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\""
|
||||
printf "\nGenerating html by %s... (%s)\n" "$split" "$cmd"
|
||||
eval "$cmd"
|
||||
split_html_dir=$PACKAGE.html
|
||||
copy_images $split_html_dir/ $split_html_dir/*.html
|
||||
(
|
||||
cd $split_html_dir || exit 1
|
||||
tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- *
|
||||
)
|
||||
eval \
|
||||
html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"`
|
||||
rm -rf "$outdir/html_$split/"
|
||||
mv $split_html_dir "$outdir/html_$split/"
|
||||
du -s "$outdir/html_$split/"
|
||||
ls -l "$outdir/$PACKAGE.html_$split.tar.gz"
|
||||
|
||||
else # use texi2html:
|
||||
opt="--output $PACKAGE.html $commonarg $htmlarg"
|
||||
cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\""
|
||||
printf "\nGenerating monolithic html with texi2html... (%s)\n" "$cmd"
|
||||
rm -rf $PACKAGE.html # in case a directory is left over
|
||||
eval "$cmd"
|
||||
html_mono_size=`calcsize $PACKAGE.html`
|
||||
gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz"
|
||||
html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"`
|
||||
mv $PACKAGE.html "$outdir/"
|
||||
|
||||
html_split node
|
||||
html_split chapter
|
||||
html_split section
|
||||
fi
|
||||
fi # end html
|
||||
|
||||
#
|
||||
printf "\nMaking .tar.gz for sources...\n"
|
||||
d=`dirname $srcfile`
|
||||
(
|
||||
cd "$d" || exit
|
||||
|
||||
# Set PATS to a list of globbing patterns that expand to
|
||||
# file names to be put into the .tar.gz for sources.
|
||||
# Omit patterns that do not expand to file names.
|
||||
pats=
|
||||
|
||||
if case `$MAKEINFO --version | sed -e 's/^[^0-9]*//' -e 1q` in \
|
||||
[1-6]* | 7.[01]*) false;; \
|
||||
*) true;; \
|
||||
esac \
|
||||
; then
|
||||
|
||||
for pat in '*.eps'; do
|
||||
for file in $pat; do
|
||||
test "$file" = "$pat" && test ! -e "$file" || pats="$pats $pat"
|
||||
break
|
||||
done
|
||||
done
|
||||
|
||||
# if $MAKEINFO is recent enough, use --trace-includes on the
|
||||
# $srcfile to get the included files of the targeted manual only
|
||||
base=`basename "$srcfile"`
|
||||
|
||||
cmd="$SETLANG $MAKEINFO $commonarg --trace-includes \"$base\""
|
||||
eval "$cmd" \
|
||||
| tar -czhf "$abs_outdir/$PACKAGE.texi.tar.gz" \
|
||||
--verbatim-files-from -T- -- "$base" $pats \
|
||||
${source_extra+"$source_extra"} \
|
||||
&& ls -l "$abs_outdir/$PACKAGE.texi.tar.gz"
|
||||
else
|
||||
for pat in '*.texinfo' '*.texi' '*.txi' '*.eps'; do
|
||||
for file in $pat; do
|
||||
test "$file" = "$pat" && test ! -e "$file" || pats="$pats $pat"
|
||||
break
|
||||
done
|
||||
done
|
||||
|
||||
tar -czhf "$abs_outdir/$PACKAGE.texi.tar.gz" \
|
||||
-- $pats ${source_extra+"$source_extra"} \
|
||||
&& ls -l "$abs_outdir/$PACKAGE.texi.tar.gz"
|
||||
fi
|
||||
) || exit
|
||||
texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"`
|
||||
|
||||
#
|
||||
# Do everything again through docbook.
|
||||
if test -n "$docbook"; then
|
||||
opt="-o - --docbook $commonarg"
|
||||
cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml"
|
||||
printf "\nGenerating docbook XML... (%s)\n" "$cmd"
|
||||
eval "$cmd"
|
||||
docbook_xml_size=`calcsize $PACKAGE-db.xml`
|
||||
gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz"
|
||||
docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"`
|
||||
mv $PACKAGE-db.xml "$outdir/"
|
||||
|
||||
split_html_db_dir=html_node_db
|
||||
opt="$commonarg -o $split_html_db_dir"
|
||||
cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\""
|
||||
printf "\nGenerating docbook HTML... (%s)\n" "$cmd"
|
||||
eval "$cmd"
|
||||
(
|
||||
cd ${split_html_db_dir} || exit 1
|
||||
tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html
|
||||
)
|
||||
html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"`
|
||||
rm -f "$outdir"/html_node_db/*.html
|
||||
mkdir -p "$outdir/html_node_db"
|
||||
mv ${split_html_db_dir}/*.html "$outdir/html_node_db/"
|
||||
rmdir ${split_html_db_dir}
|
||||
|
||||
cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\""
|
||||
printf "\nGenerating docbook ASCII... (%s)\n" "$cmd"
|
||||
eval "$cmd"
|
||||
docbook_ascii_size=`calcsize $PACKAGE-db.txt`
|
||||
mv $PACKAGE-db.txt "$outdir/"
|
||||
|
||||
cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\""
|
||||
printf "\nGenerating docbook PDF... (%s)\n" "$cmd"
|
||||
eval "$cmd"
|
||||
docbook_pdf_size=`calcsize $PACKAGE-db.pdf`
|
||||
mv $PACKAGE-db.pdf "$outdir/"
|
||||
fi
|
||||
|
||||
#
|
||||
printf "\nMaking index.html for %s...\n" "$PACKAGE"
|
||||
if test -z "$use_texi2html"; then
|
||||
if test x$split = xnode; then
|
||||
CONDS="/%%IF *HTML_NODE%%/d;/%%ENDIF *HTML_NODE%%/d;\
|
||||
/%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d;\
|
||||
/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;"
|
||||
elif test x$split = xchapter; then
|
||||
CONDS="/%%IF *HTML_CHAPTER%%/d;/%%ENDIF *HTML_CHAPTER%%/d;\
|
||||
/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\
|
||||
/%%IF *HTML_NODE%%/,/%%ENDIF *HTML_NODE%%/d;"
|
||||
elif test x$split = xsection; then
|
||||
CONDS="/%%IF *HTML_SECTION%%/d;/%%ENDIF *HTML_SECTION%%/d;\
|
||||
/%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d;\
|
||||
/%%IF *HTML_NODE%%/,/%%ENDIF *HTML_NODE%%/d;"
|
||||
else
|
||||
CONDS="/%%IF.*%%/d;/%%ENDIF.*%%/d;" # invalid split argument
|
||||
fi
|
||||
else
|
||||
# for texi2html, we do not take account of --split and simply output
|
||||
# all variants
|
||||
CONDS="/%%IF.*%%/d;/%%ENDIF.*%%/d;"
|
||||
fi
|
||||
|
||||
curdate=`$SETLANG date '+%B %d, %Y'`
|
||||
sed \
|
||||
-e "s!%%TITLE%%!$MANUAL_TITLE!g" \
|
||||
-e "s!%%EMAIL%%!$EMAIL!g" \
|
||||
-e "s!%%PACKAGE%%!$PACKAGE!g" \
|
||||
-e "s!%%DATE%%!$curdate!g" \
|
||||
-e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \
|
||||
-e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \
|
||||
-e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \
|
||||
-e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \
|
||||
-e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \
|
||||
-e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \
|
||||
-e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \
|
||||
-e "s!%%PDF_SIZE%%!$pdf_size!g" \
|
||||
-e "s!%%ASCII_SIZE%%!$ascii_size!g" \
|
||||
-e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \
|
||||
-e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \
|
||||
-e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \
|
||||
-e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \
|
||||
-e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \
|
||||
-e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \
|
||||
-e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \
|
||||
-e "s,%%SCRIPTURL%%,$scripturl,g" \
|
||||
-e "s!%%SCRIPTNAME%%!$prog!g" \
|
||||
-e "$CONDS" \
|
||||
$GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html"
|
||||
|
||||
echo "Done, see $outdir/ subdirectory for new files."
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
227
build-aux/git-version-gen
Executable file
227
build-aux/git-version-gen
Executable file
|
@ -0,0 +1,227 @@
|
|||
#!/bin/sh
|
||||
# Print a version string.
|
||||
scriptversion=2024-07-04.10; # UTC
|
||||
|
||||
# Copyright (C) 2007-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/.
|
||||
# It may be run two ways:
|
||||
# - from a git repository in which the "git describe" command below
|
||||
# produces useful output (thus requiring at least one signed tag)
|
||||
# - from a non-git-repo directory containing a .tarball-version file, which
|
||||
# presumes this script is invoked like "./git-version-gen .tarball-version".
|
||||
|
||||
# In order to use intra-version strings in your project, you will need two
|
||||
# separate generated version string files:
|
||||
#
|
||||
# .tarball-version - present only in a distribution tarball, and not in
|
||||
# a checked-out repository. Created with contents that were learned at
|
||||
# the last time autoconf was run, and used by git-version-gen. Must not
|
||||
# be present in either $(srcdir) or $(builddir) for git-version-gen to
|
||||
# give accurate answers during normal development with a checked out tree,
|
||||
# but must be present in a tarball when there is no version control system.
|
||||
# Therefore, it cannot be used in any dependencies. GNUmakefile has
|
||||
# hooks to force a reconfigure at distribution time to get the value
|
||||
# correct, without penalizing normal development with extra reconfigures.
|
||||
#
|
||||
# .version - present in a checked-out repository and in a distribution
|
||||
# tarball. Usable in dependencies, particularly for files that don't
|
||||
# want to depend on config.h but do want to track version changes.
|
||||
# Delete this file prior to any autoconf run where you want to rebuild
|
||||
# files to pick up a version string change; and leave it stale to
|
||||
# minimize rebuild time after unrelated changes to configure sources.
|
||||
#
|
||||
# As with any generated file in a VC'd directory, you should add
|
||||
# /.version to .gitignore, so that you don't accidentally commit it.
|
||||
# .tarball-version is never generated in a VC'd directory, so needn't
|
||||
# be listed there.
|
||||
#
|
||||
# Use the following line in your configure.ac, so that $(VERSION) will
|
||||
# automatically be up-to-date each time configure is run (and note that
|
||||
# since configure.ac no longer includes a version string, Makefile rules
|
||||
# should not depend on configure.ac for version updates).
|
||||
#
|
||||
# AC_INIT([GNU project],
|
||||
# m4_esyscmd([build-aux/git-version-gen .tarball-version]),
|
||||
# [bug-project@example])
|
||||
#
|
||||
# Then use the following lines in your Makefile.am, so that .version
|
||||
# will be present for dependencies, and so that .version and
|
||||
# .tarball-version will exist in distribution tarballs.
|
||||
#
|
||||
# EXTRA_DIST = $(top_srcdir)/.version
|
||||
# BUILT_SOURCES = $(top_srcdir)/.version
|
||||
# $(top_srcdir)/.version:
|
||||
# echo '$(VERSION)' > $@-t
|
||||
# mv $@-t $@
|
||||
# dist-hook:
|
||||
# echo '$(VERSION)' > $(distdir)/.tarball-version
|
||||
|
||||
|
||||
me=$0
|
||||
|
||||
year=`expr "$scriptversion" : '\([^-]*\)'`
|
||||
version="git-version-gen $scriptversion
|
||||
|
||||
Copyright (C) ${year} Free Software Foundation, Inc.
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law."
|
||||
|
||||
usage="\
|
||||
Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT]
|
||||
Print a version string.
|
||||
|
||||
Options:
|
||||
|
||||
--prefix PREFIX prefix of git tags (default 'v')
|
||||
--fallback VERSION
|
||||
fallback version to use if \"git --version\" fails
|
||||
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
Send patches and bug reports to <bug-gnulib@gnu.org>."
|
||||
|
||||
prefix=v
|
||||
fallback=
|
||||
|
||||
while test $# -gt 0; do
|
||||
case $1 in
|
||||
--help) echo "$usage"; exit 0;;
|
||||
--version) echo "$version"; exit 0;;
|
||||
--prefix) shift; prefix=${1?};;
|
||||
--fallback) shift; fallback=${1?};;
|
||||
-*)
|
||||
echo "$0: Unknown option '$1'." >&2
|
||||
echo "$0: Try '--help' for more information." >&2
|
||||
exit 1;;
|
||||
*)
|
||||
if test "x$tarball_version_file" = x; then
|
||||
tarball_version_file="$1"
|
||||
elif test "x$tag_sed_script" = x; then
|
||||
tag_sed_script="$1"
|
||||
else
|
||||
echo "$0: extra non-option argument '$1'." >&2
|
||||
exit 1
|
||||
fi;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test "x$tarball_version_file" = x; then
|
||||
echo "$usage"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
tag_sed_script="${tag_sed_script:-s/x/x/}"
|
||||
|
||||
nl='
|
||||
'
|
||||
|
||||
# Avoid meddling by environment variable of the same name.
|
||||
v=
|
||||
v_from_git=
|
||||
|
||||
# First see if there is a tarball-only version file.
|
||||
# then try "git describe", then default.
|
||||
if test -f $tarball_version_file
|
||||
then
|
||||
v=`cat $tarball_version_file` || v=
|
||||
case $v in
|
||||
*$nl*) v= ;; # reject multi-line output
|
||||
esac
|
||||
test "x$v" = x \
|
||||
&& echo "$0: WARNING: $tarball_version_file is damaged" 1>&2
|
||||
fi
|
||||
|
||||
if test "x$v" != x
|
||||
then
|
||||
: # use $v
|
||||
# Otherwise, if there is at least one git commit involving the working
|
||||
# directory, and "git describe" output looks sensible, use that to
|
||||
# derive a version string.
|
||||
elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
|
||||
&& v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \
|
||||
|| git describe --abbrev=4 HEAD 2>/dev/null` \
|
||||
&& v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
|
||||
&& case $v in
|
||||
$prefix[0-9]*) ;;
|
||||
*) (exit 1) ;;
|
||||
esac
|
||||
then
|
||||
# Is this a new git that lists number of commits since the last
|
||||
# tag or the previous older version that did not?
|
||||
# Newer: v6.10-77-g0f8faeb
|
||||
# Older: v6.10-g0f8faeb
|
||||
vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v
|
||||
case $vprefix in
|
||||
*-*) : git describe is probably okay three part flavor ;;
|
||||
*)
|
||||
: git describe is older two part flavor
|
||||
# Recreate the number of commits and rewrite such that the
|
||||
# result is the same as if we were using the newer version
|
||||
# of git describe.
|
||||
vtag=`echo "$v" | sed 's/-.*//'`
|
||||
commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
|
||||
|| { commit_list=failed;
|
||||
echo "$0: WARNING: git rev-list failed" 1>&2; }
|
||||
numcommits=`echo "$commit_list" | wc -l`
|
||||
v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
|
||||
test "$commit_list" = failed && v=UNKNOWN
|
||||
;;
|
||||
esac
|
||||
|
||||
# Change the penultimate "-" to ".", for version-comparing tools.
|
||||
# Remove the "g" to save a byte.
|
||||
v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`;
|
||||
v_from_git=1
|
||||
elif test "x$fallback" = x || git --version >/dev/null 2>&1; then
|
||||
v=UNKNOWN
|
||||
else
|
||||
v=$fallback
|
||||
fi
|
||||
|
||||
v=`echo "$v" |sed "s/^$prefix//"`
|
||||
|
||||
# Test whether to append the "-dirty" suffix only if the version
|
||||
# string we're using came from git. I.e., skip the test if it's "UNKNOWN"
|
||||
# or if it came from .tarball-version.
|
||||
if test "x$v_from_git" != x; then
|
||||
# Don't declare a version "dirty" merely because a timestamp has changed.
|
||||
git update-index --refresh > /dev/null 2>&1
|
||||
|
||||
dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
|
||||
case "$dirty" in
|
||||
'') ;;
|
||||
*) # Append the suffix only if there isn't one already.
|
||||
case $v in
|
||||
*-dirty) ;;
|
||||
*) v="$v-dirty" ;;
|
||||
esac ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Omit the trailing newline, so that m4_esyscmd can use the result directly.
|
||||
printf %s "$v"
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
550
build-aux/gitlog-to-changelog
Executable file
550
build-aux/gitlog-to-changelog
Executable file
|
@ -0,0 +1,550 @@
|
|||
#!/bin/sh
|
||||
#! -*-perl-*-
|
||||
|
||||
# Convert git log output to ChangeLog format.
|
||||
|
||||
# Copyright (C) 2008-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Written by Jim Meyering
|
||||
|
||||
# This is a prologue that allows running a perl script as an executable
|
||||
# on systems that are compliant to a POSIX version before POSIX:2017.
|
||||
# On such systems, the usual invocation of an executable through execlp()
|
||||
# or execvp() fails with ENOEXEC if it is a script that does not start
|
||||
# with a #! line. The script interpreter mentioned in the #! line has
|
||||
# to be /bin/sh, because on GuixSD systems that is the only program that
|
||||
# has a fixed file name. The second line is essential for perl and is
|
||||
# also useful for editing this file in Emacs. The next two lines below
|
||||
# are valid code in both sh and perl. When executed by sh, they re-execute
|
||||
# the script through the perl program found in $PATH. The '-x' option
|
||||
# is essential as well; without it, perl would re-execute the script
|
||||
# through /bin/sh. When executed by perl, the next two lines are a no-op.
|
||||
eval 'exec perl -wSx "$0" "$@"'
|
||||
if 0;
|
||||
|
||||
my $VERSION = '2024-07-17 02:20'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
(my $copyright_year = $VERSION) =~ s/^(\d*)-.*$/$1/;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
use POSIX qw(strftime);
|
||||
|
||||
(my $ME = $0) =~ s|.*/||;
|
||||
|
||||
# use File::Coda; # https://meyering.net/code/Coda/
|
||||
END {
|
||||
defined fileno STDOUT or return;
|
||||
close STDOUT and return;
|
||||
warn "$ME: failed to close standard output: $!\n";
|
||||
$? ||= 1;
|
||||
}
|
||||
|
||||
sub usage ($)
|
||||
{
|
||||
my ($exit_code) = @_;
|
||||
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||
if ($exit_code != 0)
|
||||
{
|
||||
print $STREAM "Try '$ME --help' for more information.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print $STREAM <<EOF;
|
||||
Usage: $ME [OPTIONS] [ARGS]
|
||||
|
||||
Convert git log output to ChangeLog format. If present, any ARGS
|
||||
are passed to "git log". To avoid ARGS being parsed as options to
|
||||
$ME, they may be preceded by '--'.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
--amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
|
||||
makes a change to SHA1's commit log text or metadata.
|
||||
--append-dot append a dot to the first line of each commit message if
|
||||
there is no other punctuation or blank at the end.
|
||||
--no-cluster never cluster commit messages under the same date/author
|
||||
header; the default is to cluster adjacent commit messages
|
||||
if their headers are the same and neither commit message
|
||||
contains multiple paragraphs.
|
||||
--srcdir=DIR the root of the source tree, from which the .git/
|
||||
directory can be derived.
|
||||
--since=DATE convert only the logs since DATE;
|
||||
the default is to convert all log entries.
|
||||
--until=DATE convert only the logs older than DATE.
|
||||
--ignore-matching=PAT ignore commit messages whose first lines match PAT.
|
||||
--ignore-line=PAT ignore lines of commit messages that match PAT.
|
||||
--format=FMT set format string for commit subject and body;
|
||||
see 'man git-log' for the list of format metacharacters;
|
||||
the default is '%s%n%b%n'
|
||||
--strip-tab remove one additional leading TAB from commit message lines.
|
||||
--strip-cherry-pick remove data inserted by "git cherry-pick";
|
||||
this includes the "cherry picked from commit ..." line,
|
||||
and the possible final "Conflicts:" paragraph.
|
||||
--commit-timezone use dates respecting the timezone commits were made in.
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
$ME --since=2008-01-01 > ChangeLog
|
||||
$ME -- -n 5 foo > last-5-commits-to-branch-foo
|
||||
|
||||
SPECIAL SYNTAX:
|
||||
|
||||
The following types of strings are interpreted specially when they appear
|
||||
at the beginning of a log message line. They are not copied to the output.
|
||||
|
||||
Copyright-paperwork-exempt: Yes
|
||||
Append the "(tiny change)" notation to the usual "date name email"
|
||||
ChangeLog header to mark a change that does not require a copyright
|
||||
assignment.
|
||||
Co-authored-by: Joe User <user\@example.com>
|
||||
List the specified name and email address on a second
|
||||
ChangeLog header, denoting a co-author.
|
||||
Signed-off-by: Joe User <user\@example.com>
|
||||
These lines are simply elided.
|
||||
|
||||
In a FILE specified via --amend, comment lines (starting with "#") are ignored.
|
||||
FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
|
||||
a line) referring to a commit in the current project, and CODE refers to one
|
||||
or more consecutive lines of Perl code. Pairs must be separated by one or
|
||||
more blank line.
|
||||
|
||||
Here is sample input for use with --amend=FILE, from coreutils:
|
||||
|
||||
3a169f4c5d9159283548178668d2fae6fced3030
|
||||
# fix typo in title:
|
||||
s/all tile types/all file types/
|
||||
|
||||
1379ed974f1fa39b12e2ffab18b3f7a607082202
|
||||
# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
|
||||
# Change the author to be Paul. Note the escaped "@":
|
||||
s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
|
||||
|
||||
Send patches and bug reports to <bug-gnulib\@gnu.org>.
|
||||
EOF
|
||||
}
|
||||
exit $exit_code;
|
||||
}
|
||||
|
||||
sub print_version ()
|
||||
{
|
||||
print "$ME version $VERSION\n";
|
||||
print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n";
|
||||
print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>\n"
|
||||
. "This is free software: you are free to change and redistribute it.\n"
|
||||
. "There is NO WARRANTY, to the extent permitted by law.\n";
|
||||
print "\n";
|
||||
my $author = "Jim Meyering";
|
||||
print "Written by $author.\n";
|
||||
}
|
||||
|
||||
# If the string $S is a well-behaved file name, simply return it.
|
||||
# If it contains white space, quotes, etc., quote it, and return the new string.
|
||||
sub shell_quote($)
|
||||
{
|
||||
my ($s) = @_;
|
||||
if ($s =~ m![^\w+/.,-]!)
|
||||
{
|
||||
# Convert each single quote to '\''
|
||||
$s =~ s/\'/\'\\\'\'/g;
|
||||
# Then single quote the string.
|
||||
$s = "'$s'";
|
||||
}
|
||||
return $s;
|
||||
}
|
||||
|
||||
sub quoted_cmd(@)
|
||||
{
|
||||
return join (' ', map {shell_quote $_} @_);
|
||||
}
|
||||
|
||||
# Parse file F.
|
||||
# Comment lines (starting with "#") are ignored.
|
||||
# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
|
||||
# (alone on a line) referring to a commit in the current project, and
|
||||
# CODE refers to one or more consecutive lines of Perl code.
|
||||
# Pairs must be separated by one or more blank line.
|
||||
sub parse_amend_file($)
|
||||
{
|
||||
my ($f) = @_;
|
||||
|
||||
open F, '<', $f
|
||||
or die "$ME: $f: failed to open for reading: $!\n";
|
||||
|
||||
my $fail;
|
||||
my $h = {};
|
||||
my $in_code = 0;
|
||||
my $sha;
|
||||
while (defined (my $line = <F>))
|
||||
{
|
||||
$line =~ /^\#/
|
||||
and next;
|
||||
chomp $line;
|
||||
$line eq ''
|
||||
and $in_code = 0, next;
|
||||
|
||||
if (!$in_code)
|
||||
{
|
||||
$line =~ /^([[:xdigit:]]{40})$/
|
||||
or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
|
||||
$fail = 1, next;
|
||||
$sha = lc $1;
|
||||
$in_code = 1;
|
||||
exists $h->{$sha}
|
||||
and (warn "$ME: $f:$.: duplicate SHA1\n"),
|
||||
$fail = 1, next;
|
||||
}
|
||||
else
|
||||
{
|
||||
$h->{$sha} ||= '';
|
||||
$h->{$sha} .= "$line\n";
|
||||
}
|
||||
}
|
||||
close F;
|
||||
|
||||
$fail
|
||||
and exit 1;
|
||||
|
||||
return $h;
|
||||
}
|
||||
|
||||
# git_dir_option $SRCDIR
|
||||
#
|
||||
# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
|
||||
# is undef). Return as a list (0 or 1 element).
|
||||
sub git_dir_option($)
|
||||
{
|
||||
my ($srcdir) = @_;
|
||||
my @res = ();
|
||||
if (defined $srcdir)
|
||||
{
|
||||
my $qdir = shell_quote $srcdir;
|
||||
my $cmd = "cd $qdir && git rev-parse --show-toplevel";
|
||||
my $qcmd = shell_quote $cmd;
|
||||
my $git_dir = qx($cmd);
|
||||
defined $git_dir
|
||||
or die "$ME: cannot run $qcmd: $!\n";
|
||||
$? == 0
|
||||
or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
|
||||
chomp $git_dir;
|
||||
push @res, "--git-dir=$git_dir/.git";
|
||||
}
|
||||
@res;
|
||||
}
|
||||
|
||||
{
|
||||
my $since_date;
|
||||
my $until_date;
|
||||
my $format_string = '%s%n%b%n';
|
||||
my $amend_file;
|
||||
my $append_dot = 0;
|
||||
my $cluster = 1;
|
||||
my $ignore_matching;
|
||||
my $ignore_line;
|
||||
my $strip_tab = 0;
|
||||
my $strip_cherry_pick = 0;
|
||||
my $commit_timezone = 0;
|
||||
my $srcdir;
|
||||
GetOptions
|
||||
(
|
||||
help => sub { usage 0 },
|
||||
version => sub { print_version; exit },
|
||||
'since=s' => \$since_date,
|
||||
'until=s' => \$until_date,
|
||||
'format=s' => \$format_string,
|
||||
'amend=s' => \$amend_file,
|
||||
'append-dot' => \$append_dot,
|
||||
'cluster!' => \$cluster,
|
||||
'ignore-matching=s' => \$ignore_matching,
|
||||
'ignore-line=s' => \$ignore_line,
|
||||
'strip-tab' => \$strip_tab,
|
||||
'strip-cherry-pick' => \$strip_cherry_pick,
|
||||
'commit-timezone' => \$commit_timezone,
|
||||
'srcdir=s' => \$srcdir,
|
||||
) or usage 1;
|
||||
|
||||
defined $since_date
|
||||
and unshift @ARGV, "--since=$since_date";
|
||||
defined $until_date
|
||||
and unshift @ARGV, "--until=$until_date";
|
||||
|
||||
# This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
|
||||
# that makes a correction in the log or attribution of that commit.
|
||||
my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
|
||||
|
||||
my $commit_time_format = $commit_timezone ? '%cI' : '%ct';
|
||||
my @cmd = ('git',
|
||||
git_dir_option $srcdir,
|
||||
qw(log --log-size),
|
||||
("--pretty=format:%H:$commit_time_format"
|
||||
. ' %an <%ae>%n%n'.$format_string, @ARGV));
|
||||
open PIPE, '-|', @cmd
|
||||
or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
|
||||
. "(Is your Git too old? Version 1.5.1 or later is required.)\n");
|
||||
|
||||
my $prev_multi_paragraph;
|
||||
my $prev_date_line = '';
|
||||
my @prev_coauthors = ();
|
||||
my @skipshas = ();
|
||||
while (1)
|
||||
{
|
||||
defined (my $in = <PIPE>)
|
||||
or last;
|
||||
$in =~ /^log size (\d+)$/
|
||||
or die "$ME:$.: Invalid line (expected log size):\n$in";
|
||||
my $log_nbytes = $1;
|
||||
|
||||
my $log;
|
||||
my $n_read = read PIPE, $log, $log_nbytes;
|
||||
$n_read == $log_nbytes
|
||||
or die "$ME:$.: unexpected EOF\n";
|
||||
|
||||
# Extract leading hash.
|
||||
my ($sha, $rest) = split ':', $log, 2;
|
||||
defined $sha
|
||||
or die "$ME:$.: malformed log entry\n";
|
||||
$sha =~ /^[[:xdigit:]]{40}$/
|
||||
or die "$ME:$.: invalid SHA1: $sha\n";
|
||||
|
||||
my $skipflag = 0;
|
||||
if (@skipshas)
|
||||
{
|
||||
foreach(@skipshas)
|
||||
{
|
||||
if ($sha =~ /^$_/)
|
||||
{
|
||||
$skipflag = $_;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# If this commit's log requires any transformation, do it now.
|
||||
my $code = $amend_code->{$sha};
|
||||
if (defined $code)
|
||||
{
|
||||
eval 'use Safe';
|
||||
my $s = new Safe;
|
||||
# Put the unpreprocessed entry into "$_".
|
||||
$_ = $rest;
|
||||
|
||||
# Let $code operate on it, safely.
|
||||
my $r = $s->reval("$code")
|
||||
or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
|
||||
|
||||
# Note that we've used this entry.
|
||||
delete $amend_code->{$sha};
|
||||
|
||||
# Update $rest upon success.
|
||||
$rest = $_;
|
||||
}
|
||||
|
||||
# Remove lines inserted by "git cherry-pick".
|
||||
if ($strip_cherry_pick)
|
||||
{
|
||||
$rest =~ s/^\s*Conflicts:\n.*//sm;
|
||||
$rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
|
||||
}
|
||||
|
||||
my @line = split /[ \t]*\n/, $rest;
|
||||
my $author_line = shift @line;
|
||||
defined $author_line
|
||||
or die "$ME:$.: unexpected EOF\n";
|
||||
$author_line =~ /^(\S+) (.*>)$/
|
||||
or die "$ME:$.: Invalid line "
|
||||
. "(expected date/author/email):\n$author_line\n";
|
||||
|
||||
# Author <email>
|
||||
my $author = $2;
|
||||
|
||||
my $commit_date = $1;
|
||||
if (! $commit_timezone)
|
||||
{
|
||||
# Seconds since the Epoch.
|
||||
$commit_date = strftime "%Y-%m-%d", localtime ($commit_date);
|
||||
}
|
||||
else
|
||||
{
|
||||
# ISO 8601 date.
|
||||
$commit_date =~ s/T.*$//;
|
||||
}
|
||||
|
||||
# Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
|
||||
# '(tiny change)' annotation.
|
||||
my $tiny = (grep (/^(?:Copyright-paperwork-exempt|Tiny-change):\s+[Yy]es$/, @line)
|
||||
? ' (tiny change)' : '');
|
||||
|
||||
my $date_line = "$commit_date $author$tiny\n";
|
||||
|
||||
my @coauthors = grep /^Co-authored-by:.*$/, @line;
|
||||
# Omit meta-data lines we've already interpreted.
|
||||
@line = grep !/^(?:Signed-off-by:[ ].*>$
|
||||
|Co-authored-by:[ ]
|
||||
|Copyright-paperwork-exempt:[ ]
|
||||
|Tiny-change:[ ]
|
||||
)/x, @line;
|
||||
|
||||
# Remove leading and trailing blank lines.
|
||||
if (@line)
|
||||
{
|
||||
while ($line[0] =~ /^\s*$/) { shift @line; }
|
||||
while ($line[$#line] =~ /^\s*$/) { pop @line; }
|
||||
}
|
||||
|
||||
# Handle Emacs gitmerge.el "skipped" commits.
|
||||
# Yes, this should be controlled by an option. So sue me.
|
||||
if ( grep /^(; )?Merge from /, @line )
|
||||
{
|
||||
my $found = 0;
|
||||
foreach (@line)
|
||||
{
|
||||
if (grep /^The following commit.*skipped:$/, $_)
|
||||
{
|
||||
$found = 1;
|
||||
## Reset at each merge to reduce chance of false matches.
|
||||
@skipshas = ();
|
||||
next;
|
||||
}
|
||||
if ($found && $_ =~ /^([[:xdigit:]]{7,}) [^ ]/)
|
||||
{
|
||||
push ( @skipshas, $1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Ignore commits that match the --ignore-matching pattern, if specified.
|
||||
if (defined $ignore_matching && @line && $line[0] =~ /$ignore_matching/)
|
||||
{
|
||||
$skipflag = 1;
|
||||
}
|
||||
elsif ($skipflag)
|
||||
{
|
||||
## Perhaps only warn if a pattern matches more than once?
|
||||
warn "$ME: warning: skipping $sha due to $skipflag\n";
|
||||
}
|
||||
|
||||
if (! $skipflag)
|
||||
{
|
||||
if (defined $ignore_line && @line)
|
||||
{
|
||||
@line = grep ! /$ignore_line/, @line;
|
||||
while ($line[$#line] =~ /^\s*$/) { pop @line; }
|
||||
}
|
||||
|
||||
# Record whether there are two or more paragraphs.
|
||||
my $multi_paragraph = grep /^\s*$/, @line;
|
||||
|
||||
# Format 'Co-authored-by: A U Thor <email@example.com>' lines in
|
||||
# standard multi-author ChangeLog format.
|
||||
for (@coauthors)
|
||||
{
|
||||
s/^Co-authored-by:\s*/\t /;
|
||||
s/\s*</ </;
|
||||
|
||||
/<.*?@.*\..*>/
|
||||
or warn "$ME: warning: missing email address for "
|
||||
. substr ($_, 5) . "\n";
|
||||
}
|
||||
|
||||
# If clustering of commit messages has been disabled, if this header
|
||||
# would be different from the previous date/name/etc. header,
|
||||
# or if this or the previous entry consists of two or more paragraphs,
|
||||
# then print the header.
|
||||
if ( ! $cluster
|
||||
|| $date_line ne $prev_date_line
|
||||
|| "@coauthors" ne "@prev_coauthors"
|
||||
|| $multi_paragraph
|
||||
|| $prev_multi_paragraph)
|
||||
{
|
||||
$prev_date_line eq ''
|
||||
or print "\n";
|
||||
print $date_line;
|
||||
@coauthors
|
||||
and print join ("\n", @coauthors), "\n";
|
||||
}
|
||||
$prev_date_line = $date_line;
|
||||
@prev_coauthors = @coauthors;
|
||||
$prev_multi_paragraph = $multi_paragraph;
|
||||
|
||||
# If there were any lines
|
||||
if (@line == 0)
|
||||
{
|
||||
warn "$ME: warning: empty commit message:\n"
|
||||
. " commit $sha\n $date_line\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($append_dot)
|
||||
{
|
||||
# If the first line of the message has enough room, then
|
||||
if (length $line[0] < 72)
|
||||
{
|
||||
# append a dot if there is no other punctuation or blank
|
||||
# at the end.
|
||||
$line[0] =~ /[[:punct:]\s]$/
|
||||
or $line[0] .= '.';
|
||||
}
|
||||
}
|
||||
|
||||
# Remove one additional leading TAB from each line.
|
||||
$strip_tab
|
||||
and map { s/^\t// } @line;
|
||||
|
||||
# Prefix each non-empty line with a TAB.
|
||||
@line = map { length $_ ? "\t$_" : '' } @line;
|
||||
|
||||
print "\n", join ("\n", @line), "\n";
|
||||
}
|
||||
}
|
||||
|
||||
defined ($in = <PIPE>)
|
||||
or last;
|
||||
$in ne "\n"
|
||||
and die "$ME:$.: unexpected line:\n$in";
|
||||
}
|
||||
|
||||
close PIPE
|
||||
or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
|
||||
# FIXME-someday: include $PROCESS_STATUS in the diagnostic
|
||||
|
||||
# Complain about any unused entry in the --amend=F specified file.
|
||||
my $fail = 0;
|
||||
foreach my $sha (sort keys %$amend_code)
|
||||
{
|
||||
warn "$ME:$amend_file: unused entry: $sha\n";
|
||||
$fail = 1;
|
||||
}
|
||||
|
||||
exit $fail;
|
||||
}
|
||||
|
||||
# Local Variables:
|
||||
# mode: perl
|
||||
# indent-tabs-mode: nil
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
# time-stamp-line-limit: 50
|
||||
# time-stamp-start: "my $VERSION = '"
|
||||
# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "'; # UTC"
|
||||
# End:
|
216
build-aux/gnu-web-doc-update
Executable file
216
build-aux/gnu-web-doc-update
Executable file
|
@ -0,0 +1,216 @@
|
|||
#!/bin/sh
|
||||
# Run this after each non-alpha release, to update the web documentation at
|
||||
# https://www.gnu.org/software/$pkg/manual/
|
||||
|
||||
VERSION=2024-07-04.10; # UTC
|
||||
|
||||
# Copyright (C) 2009-2024 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
ME=$(basename "$0")
|
||||
warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
|
||||
die() { warn "$*"; exit 1; }
|
||||
|
||||
help()
|
||||
{
|
||||
cat <<EOF
|
||||
Usage: $ME
|
||||
|
||||
Run this script from top_srcdir (no arguments) after each non-alpha
|
||||
release, to update the web documentation at
|
||||
https://www.gnu.org/software/\$pkg/manual/
|
||||
|
||||
This script assumes you're using git for revision control, and
|
||||
requires a .prev-version file as well as a Makefile, from which it
|
||||
extracts the version number and package name, respectively. Also, it
|
||||
assumes all documentation is in the doc/ sub-directory.
|
||||
|
||||
Options:
|
||||
-C, --builddir=DIR location of (configured) Makefile (default: .)
|
||||
-n, --dry-run don't actually commit anything
|
||||
-m, --mirror remove out of date files from document server
|
||||
-u, --user the name of the CVS user on Savannah
|
||||
--help print this help, then exit
|
||||
--version print version number, then exit
|
||||
|
||||
Report bugs and patches to <bug-gnulib@gnu.org>.
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
version()
|
||||
{
|
||||
year=$(echo "$VERSION" | sed 's/[^0-9].*//')
|
||||
cat <<EOF
|
||||
$ME $VERSION
|
||||
Copyright (C) $year Free Software Foundation, Inc,
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
EOF
|
||||
exit
|
||||
}
|
||||
|
||||
# find_tool ENVVAR NAMES...
|
||||
# -------------------------
|
||||
# Search for a required program. Use the value of ENVVAR, if set,
|
||||
# otherwise find the first of the NAMES that can be run (i.e.,
|
||||
# supports --version). If found, set ENVVAR to the program name,
|
||||
# die otherwise.
|
||||
#
|
||||
# FIXME: code duplication, see also bootstrap.
|
||||
find_tool ()
|
||||
{
|
||||
find_tool_envvar=$1
|
||||
shift
|
||||
find_tool_names=$@
|
||||
eval "find_tool_res=\$$find_tool_envvar"
|
||||
if test x"$find_tool_res" = x; then
|
||||
for i
|
||||
do
|
||||
if ($i --version </dev/null) >/dev/null 2>&1; then
|
||||
find_tool_res=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
else
|
||||
find_tool_error_prefix="\$$find_tool_envvar: "
|
||||
fi
|
||||
test x"$find_tool_res" != x \
|
||||
|| die "one of these is required: $find_tool_names"
|
||||
($find_tool_res --version </dev/null) >/dev/null 2>&1 \
|
||||
|| die "${find_tool_error_prefix}cannot run $find_tool_res --version"
|
||||
eval "$find_tool_envvar=\$find_tool_res"
|
||||
eval "export $find_tool_envvar"
|
||||
}
|
||||
|
||||
## ------ ##
|
||||
## Main. ##
|
||||
## ------ ##
|
||||
|
||||
# Requirements: everything required to bootstrap your package, plus
|
||||
# these.
|
||||
find_tool CVS cvs
|
||||
find_tool GIT git
|
||||
find_tool RSYNC rsync
|
||||
find_tool XARGS gxargs xargs
|
||||
|
||||
builddir=.
|
||||
dryrun=
|
||||
rm_stale='echo'
|
||||
cvs_user="$USER"
|
||||
while test $# != 0
|
||||
do
|
||||
# Handle --option=value by splitting apart and putting back on argv.
|
||||
case $1 in
|
||||
--*=*)
|
||||
opt=$(echo "$1" | sed -e 's/=.*//')
|
||||
val=$(echo "$1" | sed -e 's/[^=]*=//')
|
||||
shift
|
||||
set dummy "$opt" "$val" "$@"; shift
|
||||
;;
|
||||
esac
|
||||
|
||||
case $1 in
|
||||
--help|--version) ${1#--};;
|
||||
-C|--builddir) shift; builddir=$1; shift ;;
|
||||
-n|--dry-run) dryrun=echo; shift;;
|
||||
-m|--mirror) rm_stale=''; shift;;
|
||||
-u|--user) shift; cvs_user=$1; shift ;;
|
||||
--*) die "unrecognized option: $1";;
|
||||
*) break;;
|
||||
esac
|
||||
done
|
||||
|
||||
test $# = 0 \
|
||||
|| die "too many arguments"
|
||||
|
||||
prev=.prev-version
|
||||
version=$(cat $prev) || die "no $prev file?"
|
||||
pkg=$(sed -n 's/^PACKAGE = \(.*\)/\1/p' $builddir/Makefile) \
|
||||
|| die "no Makefile?"
|
||||
tmp_branch=web-doc-$version-$$
|
||||
current_branch=$($GIT branch | sed -ne '/^\* /{s///;p;q;}')
|
||||
|
||||
cleanup()
|
||||
{
|
||||
__st=$?
|
||||
$dryrun rm -rf "$tmp"
|
||||
$GIT checkout "$current_branch"
|
||||
$GIT submodule update --recursive
|
||||
$GIT branch -d $tmp_branch
|
||||
exit $__st
|
||||
}
|
||||
trap cleanup EXIT
|
||||
trap 'exit $?' HUP INT PIPE TERM
|
||||
|
||||
# We must build using sources for which --version reports the
|
||||
# just-released version number, not some string like 7.6.18-20761.
|
||||
# That version string propagates into all documentation.
|
||||
set -e
|
||||
$GIT checkout -b $tmp_branch v$version
|
||||
$GIT submodule update --recursive
|
||||
./bootstrap
|
||||
srcdir=$(pwd)
|
||||
cd "$builddir"
|
||||
builddir=$(pwd)
|
||||
./config.status --recheck
|
||||
./config.status
|
||||
make
|
||||
make web-manual
|
||||
cd "$srcdir"
|
||||
set +e
|
||||
|
||||
tmp=$(mktemp -d web-doc-update.XXXXXX) || exit 1
|
||||
( cd $tmp \
|
||||
&& $CVS -d $cvs_user@cvs.savannah.gnu.org:/webcvs/$pkg co $pkg )
|
||||
$RSYNC -avP "$builddir"/doc/manual/ $tmp/$pkg/manual
|
||||
|
||||
(
|
||||
cd $tmp/$pkg
|
||||
test -d manual/CVS || $dryrun $CVS add -ko manual
|
||||
|
||||
cd manual
|
||||
|
||||
# Add all the files. This is simpler than trying to add only the
|
||||
# new ones because of new directories
|
||||
# First add non empty dirs individually
|
||||
find . -name CVS -prune -o -type d \! -empty -print \
|
||||
| $XARGS -n1 --no-run-if-empty -- $dryrun $CVS add -ko
|
||||
# Now add all files
|
||||
find . -name CVS -prune -o -type f -print \
|
||||
| $XARGS --no-run-if-empty -- $dryrun $CVS add -ko
|
||||
|
||||
# Report/Remove stale files
|
||||
# excluding doc server specific files like CVS/* and .symlinks
|
||||
if test -n "$rm_stale"; then
|
||||
echo 'Consider the --mirror option if all of the manual is generated,' >&2
|
||||
echo 'which will run `cvs remove` to remove stale files.' >&2
|
||||
fi
|
||||
{ find . \( -name CVS -o -type f -name '.*' \) -prune -o -type f -print
|
||||
(cd "$builddir"/doc/manual/ && find . -type f -print | sed p)
|
||||
} | sort | uniq -u \
|
||||
| $XARGS --no-run-if-empty -- ${rm_stale:-$dryrun} $CVS remove -f
|
||||
|
||||
$dryrun $CVS ci -m $version
|
||||
)
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
# time-stamp-start: "VERSION="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
480
build-aux/gnupload
Executable file
480
build-aux/gnupload
Executable file
|
@ -0,0 +1,480 @@
|
|||
#!/bin/sh
|
||||
# Sign files and upload them.
|
||||
|
||||
scriptversion=2024-07-04.10; # UTC
|
||||
|
||||
# Copyright (C) 2004-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Originally written by Alexandre Duret-Lutz <adl@gnu.org>.
|
||||
# The master copy of this file is maintained in the gnulib Git repository.
|
||||
# Please send bug reports and feature requests to bug-gnulib@gnu.org.
|
||||
|
||||
set -e
|
||||
|
||||
GPG=gpg
|
||||
# Choose the proper version of gpg, so as to avoid a
|
||||
# "gpg-agent is not available in this session" error
|
||||
# when gpg-agent is version 2 but gpg is still version 1.
|
||||
# FIXME-2020: remove, once all major distros ship gpg version 2 as /usr/bin/gpg
|
||||
gpg_agent_version=`(gpg-agent --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'`
|
||||
case "$gpg_agent_version" in
|
||||
2.*)
|
||||
gpg_version=`(gpg --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'`
|
||||
case "$gpg_version" in
|
||||
1.*)
|
||||
if (type gpg2) >/dev/null 2>/dev/null; then
|
||||
# gpg2 is present.
|
||||
GPG=gpg2
|
||||
else
|
||||
# gpg2 is missing. Ubuntu users should install the package 'gnupg2'.
|
||||
echo "WARNING: Using 'gpg', which is too old. You should install 'gpg2'." 1>&2
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
GPG="${GPG} --batch --no-tty"
|
||||
conffile=.gnuploadrc
|
||||
to=
|
||||
dry_run=false
|
||||
replace=
|
||||
symlink_files=
|
||||
delete_files=
|
||||
delete_symlinks=
|
||||
collect_var=
|
||||
dbg=
|
||||
nl='
|
||||
'
|
||||
|
||||
usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...]
|
||||
|
||||
Sign all FILES, and process them at the destinations specified with --to.
|
||||
If CMD is not given, it defaults to uploading. See examples below.
|
||||
|
||||
Commands:
|
||||
--delete delete FILES from destination
|
||||
--symlink create symbolic links
|
||||
--rmsymlink remove symbolic links
|
||||
-- treat the remaining arguments as files to upload
|
||||
|
||||
Options:
|
||||
--to DEST specify a destination DEST for FILES
|
||||
(multiple --to options are allowed)
|
||||
--user NAME sign with key NAME
|
||||
--replace allow replacements of existing files
|
||||
--symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names
|
||||
-n, --dry-run do nothing, show what would have been done
|
||||
(including the constructed directive file)
|
||||
--version output version information and exit
|
||||
-h, --help print this help text and exit
|
||||
|
||||
If --symlink-regex is given without EXPR, then the link target name
|
||||
is created by replacing the version information with '-latest', e.g.:
|
||||
foo-1.3.4.tar.gz -> foo-latest.tar.gz
|
||||
|
||||
Recognized destinations are:
|
||||
alpha.gnu.org:DIRECTORY
|
||||
savannah.gnu.org:DIRECTORY
|
||||
savannah.nongnu.org:DIRECTORY
|
||||
ftp.gnu.org:DIRECTORY
|
||||
build directive files and upload files by FTP
|
||||
download.gnu.org.ua:{alpha|ftp}/DIRECTORY
|
||||
build directive files and upload files by SFTP
|
||||
[user@]host:DIRECTORY upload files with scp
|
||||
|
||||
Options and commands are applied in order. If the file $conffile exists
|
||||
in the current working directory, its contents are prepended to the
|
||||
actual command line options. Use this to keep your defaults. Comments
|
||||
(#) and empty lines in $conffile are allowed.
|
||||
|
||||
<https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html>
|
||||
gives some further background.
|
||||
|
||||
Examples:
|
||||
1. Upload foobar-1.0.tar.gz to ftp.gnu.org:
|
||||
gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz
|
||||
|
||||
2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org:
|
||||
gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz
|
||||
|
||||
3. Same as above, and also create symbolic links to foobar-latest.tar.*:
|
||||
gnupload --to ftp.gnu.org:foobar \\
|
||||
--symlink-regex \\
|
||||
foobar-1.0.tar.gz foobar-1.0.tar.xz
|
||||
|
||||
4. Create a symbolic link foobar-latest.tar.gz -> foobar-1.0.tar.gz
|
||||
and likewise for the corresponding .sig file:
|
||||
gnupload --to ftp.gnu.org:foobar \\
|
||||
--symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\
|
||||
foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig
|
||||
or (equivalent):
|
||||
gnupload --to ftp.gnu.org:foobar \\
|
||||
--symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\
|
||||
--symlink foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig
|
||||
|
||||
5. Upload foobar-0.9.90.tar.gz to two sites:
|
||||
gnupload --to alpha.gnu.org:foobar \\
|
||||
--to sources.redhat.com:~ftp/pub/foobar \\
|
||||
foobar-0.9.90.tar.gz
|
||||
|
||||
6. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz
|
||||
(the -- terminates the list of files to delete):
|
||||
gnupload --to alpha.gnu.org:foobar \\
|
||||
--to sources.redhat.com:~ftp/pub/foobar \\
|
||||
--delete oopsbar-0.9.91.tar.gz \\
|
||||
-- foobar-0.9.91.tar.gz
|
||||
|
||||
gnupload executes a program ncftpput to do the transfers; if you don't
|
||||
happen to have an ncftp package installed, the ncftpput-ftp script in
|
||||
the build-aux/ directory of the gnulib package
|
||||
(https://savannah.gnu.org/projects/gnulib) may serve as a replacement.
|
||||
|
||||
Send patches and bug reports to <bug-gnulib@gnu.org>."
|
||||
|
||||
copyright_year=`echo "$scriptversion" | sed -e 's/[^0-9].*//'`
|
||||
copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc.
|
||||
License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>.
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law."
|
||||
|
||||
# Read local configuration file
|
||||
if test -r "$conffile"; then
|
||||
echo "$0: Reading configuration file $conffile"
|
||||
conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '`
|
||||
eval set x "$conf \"\$@\""
|
||||
shift
|
||||
fi
|
||||
|
||||
while test -n "$1"; do
|
||||
case $1 in
|
||||
-*)
|
||||
collect_var=
|
||||
case $1 in
|
||||
-h | --help)
|
||||
echo "$usage"
|
||||
exit $?
|
||||
;;
|
||||
--to)
|
||||
if test -z "$2"; then
|
||||
echo "$0: Missing argument for --to" 1>&2
|
||||
exit 1
|
||||
elif echo "$2" | grep 'ftp-upload\.gnu\.org' >/dev/null; then
|
||||
echo "$0: Use ftp.gnu.org:PKGNAME or alpha.gnu.org:PKGNAME" >&2
|
||||
echo "$0: for the destination, not ftp-upload.gnu.org (which" >&2
|
||||
echo "$0: is used for direct ftp uploads, not with gnupload)." >&2
|
||||
echo "$0: See --help and its examples if need be." >&2
|
||||
exit 1
|
||||
else
|
||||
to="$to $2"
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
--user)
|
||||
if test -z "$2"; then
|
||||
echo "$0: Missing argument for --user" 1>&2
|
||||
exit 1
|
||||
else
|
||||
GPG="$GPG --local-user $2"
|
||||
shift
|
||||
fi
|
||||
;;
|
||||
--delete)
|
||||
collect_var=delete_files
|
||||
;;
|
||||
--replace)
|
||||
replace="replace: true"
|
||||
;;
|
||||
--rmsymlink)
|
||||
collect_var=delete_symlinks
|
||||
;;
|
||||
--symlink-regex=*)
|
||||
symlink_expr=`expr "$1" : '[^=]*=\(.*\)'`
|
||||
;;
|
||||
--symlink-regex)
|
||||
symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|'
|
||||
;;
|
||||
--symlink)
|
||||
collect_var=symlink_files
|
||||
;;
|
||||
-n | --dry-run)
|
||||
dry_run=:
|
||||
;;
|
||||
--version)
|
||||
echo "gnupload $scriptversion"
|
||||
echo "$copyright"
|
||||
exit 0
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
-*)
|
||||
echo "$0: Unknown option '$1', try '$0 --help'" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
if test -z "$collect_var"; then
|
||||
break
|
||||
else
|
||||
eval "$collect_var=\"\$$collect_var $1\""
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
dprint()
|
||||
{
|
||||
echo "Running $* ..."
|
||||
}
|
||||
|
||||
if $dry_run; then
|
||||
dbg=dprint
|
||||
fi
|
||||
|
||||
if test -z "$to"; then
|
||||
echo "$0: Missing destination sites" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -n "$symlink_files"; then
|
||||
x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'`
|
||||
if test -n "$x"; then
|
||||
echo "$0: Odd number of symlink arguments" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $# = 0; then
|
||||
if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then
|
||||
echo "$0: No file to upload" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# Make sure all files exist. We don't want to ask
|
||||
# for the passphrase if the script will fail.
|
||||
for file
|
||||
do
|
||||
if test ! -f $file; then
|
||||
echo "$0: Cannot find '$file'" 1>&2
|
||||
exit 1
|
||||
elif test -n "$symlink_expr"; then
|
||||
linkname=`echo $file | sed "$symlink_expr"`
|
||||
if test -z "$linkname"; then
|
||||
echo "$0: symlink expression produces empty results" >&2
|
||||
exit 1
|
||||
elif test "$linkname" = $file; then
|
||||
echo "$0: symlink expression does not alter file name" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Make sure passphrase is not exported in the environment.
|
||||
unset passphrase
|
||||
unset passphrase_fd_0
|
||||
GNUPGHOME=${GNUPGHOME:-$HOME/.gnupg}
|
||||
|
||||
# Reset PATH to be sure that echo is a built-in. We will later use
|
||||
# 'echo $passphrase' to output the passphrase, so it is important that
|
||||
# it is a built-in (third-party programs tend to appear in 'ps'
|
||||
# listings with their arguments...).
|
||||
# Remember this script runs with 'set -e', so if echo is not built-in
|
||||
# it will exit now.
|
||||
if $dry_run || grep -q "^use-agent" $GNUPGHOME/gpg.conf; then :; else
|
||||
PATH=/empty echo -n "Enter GPG passphrase: "
|
||||
stty -echo
|
||||
read -r passphrase
|
||||
stty echo
|
||||
echo
|
||||
passphrase_fd_0="--passphrase-fd 0"
|
||||
fi
|
||||
|
||||
if test $# -ne 0; then
|
||||
for file
|
||||
do
|
||||
echo "Signing $file ..."
|
||||
rm -f $file.sig
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 -ba -o $file.sig $file
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# mkdirective DESTDIR BASE FILE STMT
|
||||
# Arguments: See upload, below
|
||||
mkdirective ()
|
||||
{
|
||||
stmt="$4"
|
||||
if test -n "$3"; then
|
||||
stmt="
|
||||
filename: $3$stmt"
|
||||
fi
|
||||
|
||||
cat >${2}.directive<<EOF
|
||||
version: 1.2
|
||||
directory: $1
|
||||
comment: gnupload v. $scriptversion$stmt
|
||||
EOF
|
||||
if $dry_run; then
|
||||
echo "File ${2}.directive:"
|
||||
cat ${2}.directive
|
||||
echo "File ${2}.directive:" | sed 's/./-/g'
|
||||
fi
|
||||
}
|
||||
|
||||
mksymlink ()
|
||||
{
|
||||
while test $# -ne 0
|
||||
do
|
||||
echo "symlink: $1 $2"
|
||||
shift
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
# upload DEST DESTDIR BASE FILE STMT FILES
|
||||
# Arguments:
|
||||
# DEST Destination site;
|
||||
# DESTDIR Destination directory;
|
||||
# BASE Base name for the directive file;
|
||||
# FILE Name of the file to distribute (may be empty);
|
||||
# STMT Additional statements for the directive file;
|
||||
# FILES List of files to upload.
|
||||
upload ()
|
||||
{
|
||||
dest=$1
|
||||
destdir=$2
|
||||
base=$3
|
||||
file=$4
|
||||
stmt=$5
|
||||
files=$6
|
||||
|
||||
rm -f $base.directive $base.directive.asc
|
||||
case $dest in
|
||||
alpha.gnu.org:*)
|
||||
mkdirective "$destdir" "$base" "$file" "$stmt"
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
|
||||
$dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc
|
||||
;;
|
||||
ftp.gnu.org:*)
|
||||
mkdirective "$destdir" "$base" "$file" "$stmt"
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
|
||||
$dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc
|
||||
;;
|
||||
savannah.gnu.org:*)
|
||||
if test -z "$files"; then
|
||||
echo "$0: warning: standalone directives not applicable for $dest" >&2
|
||||
fi
|
||||
$dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files
|
||||
;;
|
||||
savannah.nongnu.org:*)
|
||||
if test -z "$files"; then
|
||||
echo "$0: warning: standalone directives not applicable for $dest" >&2
|
||||
fi
|
||||
$dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files
|
||||
;;
|
||||
download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*)
|
||||
destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'`
|
||||
destdir_topdir=`echo "$destdir" | sed 's,/.*,,'`
|
||||
mkdirective "$destdir_p1" "$base" "$file" "$stmt"
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
|
||||
for f in $files $base.directive.asc
|
||||
do
|
||||
echo put $f
|
||||
done | $dbg sftp -b - download.gnu.org.ua:/incoming/$destdir_topdir
|
||||
;;
|
||||
/*)
|
||||
dest_host=`echo "$dest" | sed 's,:.*,,'`
|
||||
mkdirective "$destdir" "$base" "$file" "$stmt"
|
||||
echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive
|
||||
$dbg cp $files $base.directive.asc $dest_host
|
||||
;;
|
||||
*)
|
||||
if test -z "$files"; then
|
||||
echo "$0: warning: standalone directives not applicable for $dest" >&2
|
||||
fi
|
||||
$dbg scp $files $dest
|
||||
;;
|
||||
esac
|
||||
rm -f $base.directive $base.directive.asc
|
||||
}
|
||||
|
||||
#####
|
||||
# Process any standalone directives
|
||||
stmt=
|
||||
if test -n "$symlink_files"; then
|
||||
stmt="$stmt
|
||||
`mksymlink $symlink_files`"
|
||||
fi
|
||||
|
||||
for file in $delete_files
|
||||
do
|
||||
stmt="$stmt
|
||||
archive: $file"
|
||||
done
|
||||
|
||||
for file in $delete_symlinks
|
||||
do
|
||||
stmt="$stmt
|
||||
rmsymlink: $file"
|
||||
done
|
||||
|
||||
if test -n "$stmt"; then
|
||||
for dest in $to
|
||||
do
|
||||
destdir=`echo $dest | sed 's/[^:]*://'`
|
||||
upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt"
|
||||
done
|
||||
fi
|
||||
|
||||
# Process actual uploads
|
||||
for dest in $to
|
||||
do
|
||||
for file
|
||||
do
|
||||
echo "Uploading $file to $dest ..."
|
||||
stmt=
|
||||
#
|
||||
# allowing file replacement is all or nothing.
|
||||
if test -n "$replace"; then stmt="$stmt
|
||||
$replace"
|
||||
fi
|
||||
#
|
||||
files="$file $file.sig"
|
||||
destdir=`echo $dest | sed 's/[^:]*://'`
|
||||
if test -n "$symlink_expr"; then
|
||||
linkname=`echo $file | sed "$symlink_expr"`
|
||||
stmt="$stmt
|
||||
symlink: $file $linkname
|
||||
symlink: $file.sig $linkname.sig"
|
||||
fi
|
||||
upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files"
|
||||
done
|
||||
done
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
541
build-aux/install-sh
Executable file
541
build-aux/install-sh
Executable file
|
@ -0,0 +1,541 @@
|
|||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2024-06-19.01; # UTC
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# 'make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch.
|
||||
|
||||
tab=' '
|
||||
nl='
|
||||
'
|
||||
IFS=" $tab$nl"
|
||||
|
||||
# Set DOITPROG to "echo" to test this script.
|
||||
|
||||
doit=${DOITPROG-}
|
||||
doit_exec=${doit:-exec}
|
||||
|
||||
# Put in absolute file names if you don't have them in your path;
|
||||
# or use environment vars.
|
||||
|
||||
chgrpprog=${CHGRPPROG-chgrp}
|
||||
chmodprog=${CHMODPROG-chmod}
|
||||
chownprog=${CHOWNPROG-chown}
|
||||
cmpprog=${CMPPROG-cmp}
|
||||
cpprog=${CPPROG-cp}
|
||||
mkdirprog=${MKDIRPROG-mkdir}
|
||||
mvprog=${MVPROG-mv}
|
||||
rmprog=${RMPROG-rm}
|
||||
stripprog=${STRIPPROG-strip}
|
||||
|
||||
posix_mkdir=
|
||||
|
||||
# Desired mode of installed file.
|
||||
mode=0755
|
||||
|
||||
# Create dirs (including intermediate dirs) using mode 755.
|
||||
# This is like GNU 'install' as of coreutils 8.32 (2020).
|
||||
mkdir_umask=22
|
||||
|
||||
backupsuffix=
|
||||
chgrpcmd=
|
||||
chmodcmd=$chmodprog
|
||||
chowncmd=
|
||||
mvcmd=$mvprog
|
||||
rmcmd="$rmprog -f"
|
||||
stripcmd=
|
||||
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dst_arg=
|
||||
|
||||
copy_on_change=false
|
||||
is_target_a_directory=possibly
|
||||
|
||||
usage="\
|
||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
-c (ignored)
|
||||
-C install only if different (preserve data modification time)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-p pass -p to $cpprog.
|
||||
-s $stripprog installed files.
|
||||
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
||||
RMPROG STRIPPROG
|
||||
|
||||
By default, rm is invoked with -f; when overridden with RMPROG,
|
||||
it's up to you to specify -f if you want it.
|
||||
|
||||
If -S is not specified, no backups are attempted.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||
General help using GNU software: <https://www.gnu.org/gethelp/>."
|
||||
|
||||
while test $# -ne 0; do
|
||||
case $1 in
|
||||
-c) ;;
|
||||
|
||||
-C) copy_on_change=true;;
|
||||
|
||||
-d) dir_arg=true;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) mode=$2
|
||||
case $mode in
|
||||
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
|
||||
echo "$0: invalid mode: $mode" >&2
|
||||
exit 1;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift;;
|
||||
|
||||
-p) cpprog="$cpprog -p";;
|
||||
|
||||
-s) stripcmd=$stripprog;;
|
||||
|
||||
-S) backupsuffix="$2"
|
||||
shift;;
|
||||
|
||||
-t)
|
||||
is_target_a_directory=always
|
||||
dst_arg=$2
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
shift;;
|
||||
|
||||
-T) is_target_a_directory=never;;
|
||||
|
||||
--version) echo "$0 (GNU Automake) $scriptversion"; exit $?;;
|
||||
|
||||
--) shift
|
||||
break;;
|
||||
|
||||
-*) echo "$0: invalid option: $1" >&2
|
||||
exit 1;;
|
||||
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# We allow the use of options -d and -T together, by making -d
|
||||
# take the precedence; this is for compatibility with GNU install.
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
if test -n "$dst_arg"; then
|
||||
echo "$0: target directory not allowed when installing a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
||||
# When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dst_arg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dst_arg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dst_arg=$arg
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $dst_arg in
|
||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call 'install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
if test $# -gt 1 || test "$is_target_a_directory" = always; then
|
||||
if test ! -d "$dst_arg"; then
|
||||
echo "$0: $dst_arg: Is not a directory." >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -z "$dir_arg"; then
|
||||
do_exit='(exit $ret); exit $ret'
|
||||
trap "ret=129; $do_exit" 1
|
||||
trap "ret=130; $do_exit" 2
|
||||
trap "ret=141; $do_exit" 13
|
||||
trap "ret=143; $do_exit" 15
|
||||
|
||||
# Set umask so as not to create temps with too-generous modes.
|
||||
# However, 'strip' requires both read and write access to temps.
|
||||
case $mode in
|
||||
# Optimize common cases.
|
||||
*644) cp_umask=133;;
|
||||
*755) cp_umask=22;;
|
||||
|
||||
*[0-7])
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw='% 200'
|
||||
fi
|
||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
||||
*)
|
||||
if test -z "$stripcmd"; then
|
||||
u_plus_rw=
|
||||
else
|
||||
u_plus_rw=,u+rw
|
||||
fi
|
||||
cp_umask=$mode$u_plus_rw;;
|
||||
esac
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names problematic for 'test' and other utilities.
|
||||
case $src in
|
||||
-* | [=\(\)!]) src=./$src;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
dstdir=$dst
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
# Don't chown directories that already exist.
|
||||
if test $dstdir_status = 0; then
|
||||
chowncmd=""
|
||||
fi
|
||||
else
|
||||
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dst_arg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst_arg
|
||||
|
||||
# If destination is a directory, append the input filename.
|
||||
if test -d "$dst"; then
|
||||
if test "$is_target_a_directory" = never; then
|
||||
echo "$0: $dst_arg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dstdir=$dst
|
||||
dstbase=`basename "$src"`
|
||||
case $dst in
|
||||
*/) dst=$dst$dstbase;;
|
||||
*) dst=$dst/$dstbase;;
|
||||
esac
|
||||
dstdir_status=0
|
||||
else
|
||||
dstdir=`dirname "$dst"`
|
||||
test -d "$dstdir"
|
||||
dstdir_status=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
case $dstdir in
|
||||
*/) dstdirslash=$dstdir;;
|
||||
*) dstdirslash=$dstdir/;;
|
||||
esac
|
||||
|
||||
obsolete_mkdir_used=false
|
||||
|
||||
if test $dstdir_status != 0; then
|
||||
case $posix_mkdir in
|
||||
'')
|
||||
# With -d, create the new directory with the user-specified mode.
|
||||
# Otherwise, rely on $mkdir_umask.
|
||||
if test -n "$dir_arg"; then
|
||||
mkdir_mode=-m$mode
|
||||
else
|
||||
mkdir_mode=
|
||||
fi
|
||||
|
||||
posix_mkdir=false
|
||||
# The $RANDOM variable is not portable (e.g., dash). Use it
|
||||
# here however when possible just to lower collision chance.
|
||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
||||
|
||||
trap '
|
||||
ret=$?
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
|
||||
exit $ret
|
||||
' 0
|
||||
|
||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
||||
# directly in world-writable /tmp, make sure that the '$tmpdir'
|
||||
# directory is successfully created first before we actually test
|
||||
# 'mkdir -p'.
|
||||
if (umask $mkdir_umask &&
|
||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
||||
then
|
||||
if test -z "$dir_arg" || {
|
||||
# Check for POSIX incompatibility with -m.
|
||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
||||
# other-writable bit of parent directory when it shouldn't.
|
||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
||||
test_tmpdir="$tmpdir/a"
|
||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
||||
case $ls_ld_tmpdir in
|
||||
d????-?r-*) different_mode=700;;
|
||||
d????-?--*) different_mode=755;;
|
||||
*) false;;
|
||||
esac &&
|
||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
||||
}
|
||||
}
|
||||
then posix_mkdir=:
|
||||
fi
|
||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
||||
else
|
||||
# Remove any dirs left behind by ancient mkdir implementations.
|
||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
||||
fi
|
||||
trap '' 0;;
|
||||
esac
|
||||
|
||||
if
|
||||
$posix_mkdir && (
|
||||
umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
||||
)
|
||||
then :
|
||||
else
|
||||
|
||||
# mkdir does not conform to POSIX,
|
||||
# or it failed possibly due to a race condition. Create the
|
||||
# directory the slow way, step by step, checking for races as we go.
|
||||
|
||||
case $dstdir in
|
||||
/*) prefix='/';;
|
||||
[-=\(\)!]*) prefix='./';;
|
||||
*) prefix='';;
|
||||
esac
|
||||
|
||||
oIFS=$IFS
|
||||
IFS=/
|
||||
set -f
|
||||
set fnord $dstdir
|
||||
shift
|
||||
set +f
|
||||
IFS=$oIFS
|
||||
|
||||
prefixes=
|
||||
|
||||
for d
|
||||
do
|
||||
test X"$d" = X && continue
|
||||
|
||||
prefix=$prefix$d
|
||||
if test -d "$prefix"; then
|
||||
prefixes=
|
||||
else
|
||||
if $posix_mkdir; then
|
||||
(umask $mkdir_umask &&
|
||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
||||
# Don't fail if two instances are running concurrently.
|
||||
test -d "$prefix" || exit 1
|
||||
else
|
||||
case $prefix in
|
||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
||||
*) qprefix=$prefix;;
|
||||
esac
|
||||
prefixes="$prefixes '$qprefix'"
|
||||
fi
|
||||
fi
|
||||
prefix=$prefix/
|
||||
done
|
||||
|
||||
if test -n "$prefixes"; then
|
||||
# Don't fail if two instances are running concurrently.
|
||||
(umask $mkdir_umask &&
|
||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
||||
test -d "$dstdir" || exit 1
|
||||
obsolete_mkdir_used=true
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
||||
else
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=${dstdirslash}_inst.$$_
|
||||
rmtmp=${dstdirslash}_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
(umask $cp_umask &&
|
||||
{ test -z "$stripcmd" || {
|
||||
# Create $dsttmp read-write so that cp doesn't create it read-only,
|
||||
# which would cause strip to fail.
|
||||
if test -z "$doit"; then
|
||||
: >"$dsttmp" # No need to fork-exec 'touch'.
|
||||
else
|
||||
$doit touch "$dsttmp"
|
||||
fi
|
||||
}
|
||||
} &&
|
||||
$doit_exec $cpprog "$src" "$dsttmp") &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
||||
|
||||
# If -C, don't bother to copy if it wouldn't change the file.
|
||||
if $copy_on_change &&
|
||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
||||
set -f &&
|
||||
set X $old && old=:$2:$4:$5:$6 &&
|
||||
set X $new && new=:$2:$4:$5:$6 &&
|
||||
set +f &&
|
||||
test "$old" = "$new" &&
|
||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
||||
then
|
||||
rm -f "$dsttmp"
|
||||
else
|
||||
# If $backupsuffix is set, and the file being installed
|
||||
# already exists, attempt a backup. Don't worry if it fails,
|
||||
# e.g., if mv doesn't support -f.
|
||||
if test -n "$backupsuffix" && test -f "$dst"; then
|
||||
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
|
||||
fi
|
||||
|
||||
# Rename the file to the real destination.
|
||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
||||
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
{
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
test ! -f "$dst" ||
|
||||
$doit $rmcmd "$dst" 2>/dev/null ||
|
||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
||||
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
|
||||
} ||
|
||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dst"
|
||||
}
|
||||
fi || exit 1
|
||||
|
||||
trap '' 0
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
230
build-aux/mdate-sh
Executable file
230
build-aux/mdate-sh
Executable file
|
@ -0,0 +1,230 @@
|
|||
#!/bin/sh
|
||||
# Get modification time of a file or directory and pretty-print it.
|
||||
|
||||
scriptversion=2024-06-19.01; # UTC
|
||||
|
||||
# Copyright (C) 1995-2024 Free Software Foundation, Inc.
|
||||
# written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
|
||||
emulate sh
|
||||
NULLCMD=:
|
||||
# Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
|
||||
# is contrary to our usage. Disable this feature.
|
||||
alias -g '${1+"$@"}'='"$@"'
|
||||
setopt NO_GLOB_SUBST
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
'')
|
||||
echo "$0: No file. Try '$0 --help' for more information." 1>&2
|
||||
exit 1;
|
||||
;;
|
||||
-h | --h*)
|
||||
cat <<\EOF
|
||||
Usage: mdate-sh [--help] [--version] FILE
|
||||
|
||||
Pretty-print the modification day of FILE, in the format:
|
||||
1 January 1970
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||
General help using GNU software: <https://www.gnu.org/gethelp/>.
|
||||
EOF
|
||||
exit $?
|
||||
;;
|
||||
-v | --v*)
|
||||
echo "mdate-sh (GNU Automake) $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
esac
|
||||
|
||||
error ()
|
||||
{
|
||||
echo "$0: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
# Prevent date giving response in another language.
|
||||
LANG=C
|
||||
export LANG
|
||||
LC_ALL=C
|
||||
export LC_ALL
|
||||
LC_TIME=C
|
||||
export LC_TIME
|
||||
|
||||
# Use UTC to get reproducible result.
|
||||
TZ=UTC0
|
||||
export TZ
|
||||
|
||||
# GNU ls changes its time format in response to the TIME_STYLE
|
||||
# variable. Since we cannot assume 'unset' works, revert this
|
||||
# variable to its documented default.
|
||||
if test "${TIME_STYLE+set}" = set; then
|
||||
TIME_STYLE=posix-long-iso
|
||||
export TIME_STYLE
|
||||
fi
|
||||
|
||||
save_arg1=$1
|
||||
|
||||
# Find out how to get the extended ls output of a file or directory.
|
||||
if ls -L /dev/null 1>/dev/null 2>&1; then
|
||||
ls_command='ls -L -l -d'
|
||||
else
|
||||
ls_command='ls -l -d'
|
||||
fi
|
||||
# Avoid user/group names that might have spaces, when possible.
|
||||
if ls -n /dev/null 1>/dev/null 2>&1; then
|
||||
ls_command="$ls_command -n"
|
||||
fi
|
||||
|
||||
# A 'ls -l' line looks as follows on OS/2.
|
||||
# drwxrwx--- 0 Aug 11 2001 foo
|
||||
# This differs from Unix, which adds ownership information.
|
||||
# drwxrwx--- 2 root root 4096 Aug 11 2001 foo
|
||||
#
|
||||
# To find the date, we split the line on spaces and iterate on words
|
||||
# until we find a month. This cannot work with files whose owner is a
|
||||
# user named "Jan", or "Feb", etc. However, it's unlikely that '/'
|
||||
# will be owned by a user whose name is a month. So we first look at
|
||||
# the extended ls output of the root directory to decide how many
|
||||
# words should be skipped to get the date.
|
||||
|
||||
# On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below.
|
||||
set x`$ls_command /`
|
||||
|
||||
# Find which argument is the month.
|
||||
month=
|
||||
command=
|
||||
until test $month
|
||||
do
|
||||
test $# -gt 0 || error "failed parsing '$ls_command /' output"
|
||||
shift
|
||||
# Add another shift to the command.
|
||||
command="$command shift;"
|
||||
case $1 in
|
||||
Jan) month=January; nummonth=1;;
|
||||
Feb) month=February; nummonth=2;;
|
||||
Mar) month=March; nummonth=3;;
|
||||
Apr) month=April; nummonth=4;;
|
||||
May) month=May; nummonth=5;;
|
||||
Jun) month=June; nummonth=6;;
|
||||
Jul) month=July; nummonth=7;;
|
||||
Aug) month=August; nummonth=8;;
|
||||
Sep) month=September; nummonth=9;;
|
||||
Oct) month=October; nummonth=10;;
|
||||
Nov) month=November; nummonth=11;;
|
||||
Dec) month=December; nummonth=12;;
|
||||
esac
|
||||
done
|
||||
|
||||
test -n "$month" || error "failed parsing '$ls_command /' output"
|
||||
|
||||
# Get the extended ls output of the file or directory.
|
||||
set dummy x`eval "$ls_command \"\\\$save_arg1\""`
|
||||
|
||||
# Remove all preceding arguments
|
||||
eval $command
|
||||
|
||||
# Because of the dummy argument above, month is in $2.
|
||||
#
|
||||
# On a POSIX system, we should have
|
||||
#
|
||||
# $# = 5
|
||||
# $1 = file size
|
||||
# $2 = month
|
||||
# $3 = day
|
||||
# $4 = year or time
|
||||
# $5 = filename
|
||||
#
|
||||
# On Darwin 7.7.0 and 7.6.0, we have
|
||||
#
|
||||
# $# = 4
|
||||
# $1 = day
|
||||
# $2 = month
|
||||
# $3 = year or time
|
||||
# $4 = filename
|
||||
|
||||
# Get the month.
|
||||
case $2 in
|
||||
Jan) month=January; nummonth=1;;
|
||||
Feb) month=February; nummonth=2;;
|
||||
Mar) month=March; nummonth=3;;
|
||||
Apr) month=April; nummonth=4;;
|
||||
May) month=May; nummonth=5;;
|
||||
Jun) month=June; nummonth=6;;
|
||||
Jul) month=July; nummonth=7;;
|
||||
Aug) month=August; nummonth=8;;
|
||||
Sep) month=September; nummonth=9;;
|
||||
Oct) month=October; nummonth=10;;
|
||||
Nov) month=November; nummonth=11;;
|
||||
Dec) month=December; nummonth=12;;
|
||||
esac
|
||||
|
||||
case $3 in
|
||||
???*) day=$1;;
|
||||
*) day=$3; shift;;
|
||||
esac
|
||||
|
||||
# Here we have to deal with the problem that the ls output gives either
|
||||
# the time of day or the year.
|
||||
case $3 in
|
||||
*:*) set `date`; eval year=\$$#
|
||||
case $2 in
|
||||
Jan) nummonthtod=1;;
|
||||
Feb) nummonthtod=2;;
|
||||
Mar) nummonthtod=3;;
|
||||
Apr) nummonthtod=4;;
|
||||
May) nummonthtod=5;;
|
||||
Jun) nummonthtod=6;;
|
||||
Jul) nummonthtod=7;;
|
||||
Aug) nummonthtod=8;;
|
||||
Sep) nummonthtod=9;;
|
||||
Oct) nummonthtod=10;;
|
||||
Nov) nummonthtod=11;;
|
||||
Dec) nummonthtod=12;;
|
||||
esac
|
||||
# For the first six month of the year the time notation can also
|
||||
# be used for files modified in the last year.
|
||||
if (expr $nummonth \> $nummonthtod) > /dev/null;
|
||||
then
|
||||
year=`expr $year - 1`
|
||||
fi;;
|
||||
*) year=$3;;
|
||||
esac
|
||||
|
||||
# The result.
|
||||
echo $day $month $year
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
236
build-aux/missing
Executable file
236
build-aux/missing
Executable file
|
@ -0,0 +1,236 @@
|
|||
#! /bin/sh
|
||||
# Common wrapper for a few potentially missing GNU and other programs.
|
||||
|
||||
scriptversion=2024-06-07.14; # UTC
|
||||
|
||||
# shellcheck disable=SC2006,SC2268 # we must support pre-POSIX shells
|
||||
|
||||
# Copyright (C) 1996-2024 Free Software Foundation, Inc.
|
||||
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
|
||||
--is-lightweight)
|
||||
# Used by our autoconf macros to check whether the available missing
|
||||
# script is modern enough.
|
||||
exit 0
|
||||
;;
|
||||
|
||||
--run)
|
||||
# Back-compat with the calling convention used by older automake.
|
||||
shift
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
|
||||
to PROGRAM being missing or too old.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal autoconf autogen autoheader autom4te automake autoreconf
|
||||
bison flex help2man lex makeinfo perl yacc
|
||||
|
||||
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
|
||||
'g' are ignored when checking the name.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||
General help using GNU software: <https://www.gnu.org/gethelp/>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing (GNU Automake) $scriptversion"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: unknown '$1' option"
|
||||
echo 1>&2 "Try '$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# Run the given program, remember its exit status.
|
||||
"$@"; st=$?
|
||||
|
||||
# If it succeeded, we are done.
|
||||
test $st -eq 0 && exit 0
|
||||
|
||||
# Also exit now if we it failed (or wasn't found), and '--version' was
|
||||
# passed; such an option is passed most likely to detect whether the
|
||||
# program is present and works.
|
||||
case $2 in --version|--help) exit $st;; esac
|
||||
|
||||
# Exit code 63 means version mismatch. This often happens when the user
|
||||
# tries to use an ancient version of a tool on a file that requires a
|
||||
# minimum version.
|
||||
if test $st -eq 63; then
|
||||
msg="probably too old"
|
||||
elif test $st -eq 127; then
|
||||
# Program was missing.
|
||||
msg="missing on your system"
|
||||
else
|
||||
# Program was found and executed, but failed. Give up.
|
||||
exit $st
|
||||
fi
|
||||
|
||||
perl_URL=https://www.perl.org/
|
||||
flex_URL=https://github.com/westes/flex
|
||||
gnu_software_URL=https://www.gnu.org/software
|
||||
|
||||
program_details ()
|
||||
{
|
||||
case $1 in
|
||||
aclocal|automake|autoreconf)
|
||||
echo "The '$1' program is part of the GNU Automake package:"
|
||||
echo "<$gnu_software_URL/automake>"
|
||||
echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
|
||||
echo "<$gnu_software_URL/autoconf>"
|
||||
echo "<$gnu_software_URL/m4/>"
|
||||
echo "<$perl_URL>"
|
||||
;;
|
||||
autoconf|autom4te|autoheader)
|
||||
echo "The '$1' program is part of the GNU Autoconf package:"
|
||||
echo "<$gnu_software_URL/autoconf/>"
|
||||
echo "It also requires GNU m4 and Perl in order to run:"
|
||||
echo "<$gnu_software_URL/m4/>"
|
||||
echo "<$perl_URL>"
|
||||
;;
|
||||
*)
|
||||
:
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
give_advice ()
|
||||
{
|
||||
# Normalize program name to check for.
|
||||
normalized_program=`echo "$1" | sed '
|
||||
s/^gnu-//; t
|
||||
s/^gnu//; t
|
||||
s/^g//; t'`
|
||||
|
||||
printf '%s\n' "'$1' is $msg."
|
||||
|
||||
configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
|
||||
autoheader_deps="'acconfig.h'"
|
||||
automake_deps="'Makefile.am'"
|
||||
aclocal_deps="'acinclude.m4'"
|
||||
case $normalized_program in
|
||||
aclocal*)
|
||||
echo "You should only need it if you modified $aclocal_deps or"
|
||||
echo "$configure_deps."
|
||||
;;
|
||||
autoconf*)
|
||||
echo "You should only need it if you modified $configure_deps."
|
||||
;;
|
||||
autogen*)
|
||||
echo "You should only need it if you modified a '.def' or '.tpl' file."
|
||||
echo "You may want to install the GNU AutoGen package:"
|
||||
echo "<$gnu_software_URL/autogen/>"
|
||||
;;
|
||||
autoheader*)
|
||||
echo "You should only need it if you modified $autoheader_deps or"
|
||||
echo "$configure_deps."
|
||||
;;
|
||||
automake*)
|
||||
echo "You should only need it if you modified $automake_deps or"
|
||||
echo "$configure_deps."
|
||||
;;
|
||||
autom4te*)
|
||||
echo "You might have modified some maintainer files that require"
|
||||
echo "the 'autom4te' program to be rebuilt."
|
||||
;;
|
||||
autoreconf*)
|
||||
echo "You should only need it if you modified $aclocal_deps or"
|
||||
echo "$automake_deps or $autoheader_deps or $automake_deps or"
|
||||
echo "$configure_deps."
|
||||
;;
|
||||
bison*|yacc*)
|
||||
echo "You should only need it if you modified a '.y' file."
|
||||
echo "You may want to install the GNU Bison package:"
|
||||
echo "<$gnu_software_URL/bison/>"
|
||||
;;
|
||||
help2man*)
|
||||
echo "You should only need it if you modified a dependency" \
|
||||
"of a man page."
|
||||
echo "You may want to install the GNU Help2man package:"
|
||||
echo "<$gnu_software_URL/help2man/>"
|
||||
;;
|
||||
lex*|flex*)
|
||||
echo "You should only need it if you modified a '.l' file."
|
||||
echo "You may want to install the Fast Lexical Analyzer package:"
|
||||
echo "<$flex_URL>"
|
||||
;;
|
||||
makeinfo*)
|
||||
echo "You should only need it if you modified a '.texi' file, or"
|
||||
echo "any other file indirectly affecting the aspect of the manual."
|
||||
echo "You might want to install the Texinfo package:"
|
||||
echo "<$gnu_software_URL/texinfo/>"
|
||||
echo "The spurious makeinfo call might also be the consequence of"
|
||||
echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
|
||||
echo "want to install GNU make:"
|
||||
echo "<$gnu_software_URL/make/>"
|
||||
;;
|
||||
perl*)
|
||||
echo "You should only need it to run GNU Autoconf, GNU Automake, "
|
||||
echo " assorted other tools, or if you modified a Perl source file."
|
||||
echo "You may want to install the Perl 5 language interpreter:"
|
||||
echo "<$perl_URL>"
|
||||
;;
|
||||
*)
|
||||
echo "You might have modified some files without having the proper"
|
||||
echo "tools for further handling them. Check the 'README' file, it"
|
||||
echo "often tells you about the needed prerequisites for installing"
|
||||
echo "this package. You may also peek at any GNU archive site, in"
|
||||
echo "case some other package contains this missing '$1' program."
|
||||
;;
|
||||
esac
|
||||
program_details "$normalized_program"
|
||||
}
|
||||
|
||||
give_advice "$1" | sed -e '1s/^/WARNING: /' \
|
||||
-e '2,$s/^/ /' >&2
|
||||
|
||||
# Propagate the correct exit status (expected to be 127 for a program
|
||||
# not found, 63 for a program that failed due to version mismatch).
|
||||
exit $st
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
160
build-aux/test-driver
Executable file
160
build-aux/test-driver
Executable file
|
@ -0,0 +1,160 @@
|
|||
#! /bin/sh
|
||||
# test-driver - basic testsuite driver script.
|
||||
|
||||
scriptversion=2024-06-19.01; # UTC
|
||||
|
||||
# Copyright (C) 2011-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# This file is maintained in Automake, please report
|
||||
# bugs to <bug-automake@gnu.org> or send patches to
|
||||
# <automake-patches@gnu.org>.
|
||||
|
||||
# Make unconditional expansion of undefined variables an error. This
|
||||
# helps a lot in preventing typo-related bugs.
|
||||
set -u
|
||||
|
||||
usage_error ()
|
||||
{
|
||||
echo "$0: $*" >&2
|
||||
print_usage >&2
|
||||
exit 2
|
||||
}
|
||||
|
||||
print_usage ()
|
||||
{
|
||||
cat <<END
|
||||
Usage:
|
||||
test-driver --test-name NAME --log-file PATH --trs-file PATH
|
||||
[--expect-failure {yes|no}] [--color-tests {yes|no}]
|
||||
[--collect-skipped-logs {yes|no}]
|
||||
[--enable-hard-errors {yes|no}] [--]
|
||||
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
|
||||
|
||||
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
|
||||
See the GNU Automake documentation for information.
|
||||
|
||||
Report bugs to <bug-automake@gnu.org>.
|
||||
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||
General help using GNU software: <https://www.gnu.org/gethelp/>.
|
||||
END
|
||||
}
|
||||
|
||||
test_name= # Used for reporting.
|
||||
log_file= # Where to save the output of the test script.
|
||||
trs_file= # Where to save the metadata of the test run.
|
||||
expect_failure=no
|
||||
color_tests=no
|
||||
collect_skipped_logs=yes
|
||||
enable_hard_errors=yes
|
||||
while test $# -gt 0; do
|
||||
case $1 in
|
||||
--help) print_usage; exit $?;;
|
||||
--version) echo "test-driver (GNU Automake) $scriptversion"; exit $?;;
|
||||
--test-name) test_name=$2; shift;;
|
||||
--log-file) log_file=$2; shift;;
|
||||
--trs-file) trs_file=$2; shift;;
|
||||
--color-tests) color_tests=$2; shift;;
|
||||
--collect-skipped-logs) collect_skipped_logs=$2; shift;;
|
||||
--expect-failure) expect_failure=$2; shift;;
|
||||
--enable-hard-errors) enable_hard_errors=$2; shift;;
|
||||
--) shift; break;;
|
||||
-*) usage_error "invalid option: '$1'";;
|
||||
*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
missing_opts=
|
||||
test x"$test_name" = x && missing_opts="$missing_opts --test-name"
|
||||
test x"$log_file" = x && missing_opts="$missing_opts --log-file"
|
||||
test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
|
||||
if test x"$missing_opts" != x; then
|
||||
usage_error "the following mandatory options are missing:$missing_opts"
|
||||
fi
|
||||
|
||||
if test $# -eq 0; then
|
||||
usage_error "missing argument"
|
||||
fi
|
||||
|
||||
if test $color_tests = yes; then
|
||||
# Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
|
||||
red='[0;31m' # Red.
|
||||
grn='[0;32m' # Green.
|
||||
lgn='[1;32m' # Light green.
|
||||
blu='[1;34m' # Blue.
|
||||
mgn='[0;35m' # Magenta.
|
||||
std='[m' # No color.
|
||||
else
|
||||
red= grn= lgn= blu= mgn= std=
|
||||
fi
|
||||
|
||||
do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
|
||||
trap "st=129; $do_exit" 1
|
||||
trap "st=130; $do_exit" 2
|
||||
trap "st=141; $do_exit" 13
|
||||
trap "st=143; $do_exit" 15
|
||||
|
||||
# Test script is run here. We create the file first, then append to it,
|
||||
# to ameliorate tests themselves also writing to the log file. Our tests
|
||||
# don't, but others can (automake bug#35762).
|
||||
: >"$log_file"
|
||||
"$@" >>"$log_file" 2>&1
|
||||
estatus=$?
|
||||
|
||||
if test $enable_hard_errors = no && test $estatus -eq 99; then
|
||||
tweaked_estatus=1
|
||||
else
|
||||
tweaked_estatus=$estatus
|
||||
fi
|
||||
|
||||
case $tweaked_estatus:$expect_failure in
|
||||
0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
|
||||
0:*) col=$grn res=PASS recheck=no gcopy=no;;
|
||||
77:*) col=$blu res=SKIP recheck=no gcopy=$collect_skipped_logs;;
|
||||
99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
|
||||
*:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
|
||||
*:*) col=$red res=FAIL recheck=yes gcopy=yes;;
|
||||
esac
|
||||
|
||||
# Report the test outcome and exit status in the logs, so that one can
|
||||
# know whether the test passed or failed simply by looking at the '.log'
|
||||
# file, without the need of also peaking into the corresponding '.trs'
|
||||
# file (automake bug#11814).
|
||||
echo "$res $test_name (exit status: $estatus)" >>"$log_file"
|
||||
|
||||
# Report outcome to console.
|
||||
echo "${col}${res}${std}: $test_name"
|
||||
|
||||
# Register the test result, and other relevant metadata.
|
||||
echo ":test-result: $res" > $trs_file
|
||||
echo ":global-test-result: $res" >> $trs_file
|
||||
echo ":recheck: $recheck" >> $trs_file
|
||||
echo ":copy-in-global-log: $gcopy" >> $trs_file
|
||||
|
||||
# Local Variables:
|
||||
# mode: shell-script
|
||||
# sh-indentation: 2
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
11954
build-aux/texinfo.tex
Normal file
11954
build-aux/texinfo.tex
Normal file
File diff suppressed because it is too large
Load diff
307
build-aux/update-copyright
Executable file
307
build-aux/update-copyright
Executable file
|
@ -0,0 +1,307 @@
|
|||
#!/bin/sh
|
||||
#! -*-perl-*-
|
||||
|
||||
# Update an FSF copyright year list to include the current year.
|
||||
|
||||
# Copyright (C) 2009-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Written by Jim Meyering and Joel E. Denny
|
||||
|
||||
# This script updates an FSF copyright year list to include the current year.
|
||||
# Usage: update-copyright [FILE...]
|
||||
#
|
||||
# The arguments to this script should be names of files that contain
|
||||
# copyright statements to be updated. The copyright holder's name
|
||||
# defaults to "Free Software Foundation, Inc." but may be changed to
|
||||
# any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment
|
||||
# variable.
|
||||
#
|
||||
# For example, you might wish to use the update-copyright target rule
|
||||
# in maint.mk from gnulib's maintainer-makefile module.
|
||||
#
|
||||
# Iff a copyright statement is recognized in a file and the final
|
||||
# year is not the current year, then the statement is updated for the
|
||||
# new year and it is reformatted to:
|
||||
#
|
||||
# 1. Fit within 72 columns.
|
||||
# 2. Convert 2-digit years to 4-digit years by prepending "19".
|
||||
# 3. Expand copyright year intervals. (See "Environment variables"
|
||||
# below.)
|
||||
#
|
||||
# A warning is printed for every file for which no copyright
|
||||
# statement is recognized.
|
||||
#
|
||||
# Each file's copyright statement must be formatted correctly in
|
||||
# order to be recognized. For example, each of these is fine:
|
||||
#
|
||||
# Copyright @copyright{} 1990-2005, 2007-2009 Free Software
|
||||
# Foundation, Inc.
|
||||
#
|
||||
# # Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# # Foundation, Inc.
|
||||
#
|
||||
# /*
|
||||
# * Copyright © 90,2005,2007-2009
|
||||
# * Free Software Foundation, Inc.
|
||||
# */
|
||||
#
|
||||
# However, the following format is not recognized because the line
|
||||
# prefix changes after the first line:
|
||||
#
|
||||
# ## Copyright (C) 1990-2005, 2007-2009 Free Software
|
||||
# # Foundation, Inc.
|
||||
#
|
||||
# However, any correctly formatted copyright statement following
|
||||
# a non-matching copyright statements would be recognized.
|
||||
#
|
||||
# The exact conditions that a file's copyright statement must meet
|
||||
# to be recognized are:
|
||||
#
|
||||
# 1. It is the first copyright statement that meets all of the
|
||||
# following conditions. Subsequent copyright statements are
|
||||
# ignored.
|
||||
# 2. Its format is "Copyright (C)", then a list of copyright years,
|
||||
# and then the name of the copyright holder.
|
||||
# 3. The "(C)" takes one of the following forms or is omitted
|
||||
# entirely:
|
||||
#
|
||||
# A. (C)
|
||||
# B. (c)
|
||||
# C. @copyright{}
|
||||
# D. ©
|
||||
# E. ©
|
||||
#
|
||||
# 4. The "Copyright" appears at the beginning of a line, except that it
|
||||
# may be prefixed by any sequence (e.g., a comment) of no more than
|
||||
# 5 characters -- including white space.
|
||||
# 5. Iff such a prefix is present, the same prefix appears at the
|
||||
# beginning of each remaining line within the FSF copyright
|
||||
# statement. There is one exception in order to support C-style
|
||||
# comments: if the first line's prefix contains nothing but
|
||||
# whitespace surrounding a "/*", then the prefix for all subsequent
|
||||
# lines is the same as the first line's prefix except with each of
|
||||
# "/" and possibly "*" replaced by a " ". The replacement of "*"
|
||||
# by " " is consistent throughout all subsequent lines.
|
||||
# 6. Blank lines, even if preceded by the prefix, do not appear
|
||||
# within the FSF copyright statement.
|
||||
# 7. Each copyright year is 2 or 4 digits, and years are separated by
|
||||
# commas, "-", "--", or "\(en" (for troff). Whitespace may appear
|
||||
# after commas.
|
||||
#
|
||||
# Environment variables:
|
||||
#
|
||||
# 1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement
|
||||
# is reformatted even if it does not need updating for the new
|
||||
# year. If unset or set to 0, only updated FSF copyright
|
||||
# statements are reformatted.
|
||||
# 2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive
|
||||
# copyright years (such as 90, 1991, 1992-2007, 2008) in a
|
||||
# reformatted FSF copyright statement is collapsed to a single
|
||||
# interval (such as 1990-2008). If unset or set to 0, all existing
|
||||
# copyright year intervals in a reformatted FSF copyright statement
|
||||
# are expanded instead.
|
||||
# If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps
|
||||
# to the minimal containing range. For example, convert
|
||||
# 2000, 2004-2007, 2009 to 2000-2009.
|
||||
# 3. For testing purposes, you can set the assumed current year in
|
||||
# UPDATE_COPYRIGHT_YEAR.
|
||||
# 4. The default maximum line length for a copyright line is 72.
|
||||
# Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length.
|
||||
# 5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other
|
||||
# than "Free Software Foundation, Inc.".
|
||||
|
||||
# This is a prologue that allows running a perl script as an executable
|
||||
# on systems that are compliant to a POSIX version before POSIX:2017.
|
||||
# On such systems, the usual invocation of an executable through execlp()
|
||||
# or execvp() fails with ENOEXEC if it is a script that does not start
|
||||
# with a #! line. The script interpreter mentioned in the #! line has
|
||||
# to be /bin/sh, because on GuixSD systems that is the only program that
|
||||
# has a fixed file name. The second line is essential for perl and is
|
||||
# also useful for editing this file in Emacs. The next two lines below
|
||||
# are valid code in both sh and perl. When executed by sh, they re-execute
|
||||
# the script through the perl program found in $PATH. The '-x' option
|
||||
# is essential as well; without it, perl would re-execute the script
|
||||
# through /bin/sh. When executed by perl, the next two lines are a no-op.
|
||||
eval 'exec perl -wSx -0777 -pi "$0" "$@"'
|
||||
if 0;
|
||||
|
||||
my $VERSION = '2024-07-04.10:56'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use re 'eval';
|
||||
|
||||
my $copyright_re = 'Copyright';
|
||||
my $circle_c_re = '(?:\([cC]\)|@copyright\{}|\\\\\(co|©|©)';
|
||||
my $ndash_re = '(?:--?|\\\\\(en)';
|
||||
my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER};
|
||||
$holder ||= 'Free Software Foundation, Inc.';
|
||||
my $prefix_max = 5;
|
||||
my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH};
|
||||
!$margin || $margin !~ m/^\d+$/
|
||||
and $margin = 72;
|
||||
|
||||
my $tab_width = 8;
|
||||
|
||||
my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR};
|
||||
if (!$this_year || $this_year !~ m/^\d{4}$/)
|
||||
{
|
||||
my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ());
|
||||
$this_year = $year + 1900;
|
||||
}
|
||||
|
||||
# Unless the file consistently uses "\r\n" as the EOL, use "\n" instead.
|
||||
my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n";
|
||||
|
||||
my $stmt_re;
|
||||
my $found;
|
||||
while (/(^|\n)(.{0,$prefix_max})$copyright_re/cg)
|
||||
{
|
||||
my $pos=pos();
|
||||
my $leading = "$1$2";
|
||||
my $prefix = $2;
|
||||
if ($prefix =~ /^(\s*\/)\*(\s*)$/)
|
||||
{
|
||||
$prefix =~ s,/, ,;
|
||||
my $prefix_ws = $prefix;
|
||||
$prefix_ws =~ s/\*/ /; # Only whitespace.
|
||||
if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/)
|
||||
{
|
||||
$prefix = $prefix_ws;
|
||||
}
|
||||
}
|
||||
my $ws_re = '[ \t\r\f]'; # \s without \n
|
||||
$ws_re =
|
||||
"(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)";
|
||||
my $holder_re = $holder;
|
||||
$holder_re =~ s/\s/$ws_re/g;
|
||||
my $stmt_remainder_re =
|
||||
"(?:$ws_re$circle_c_re)?"
|
||||
. "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|$ndash_re))*"
|
||||
. "((?:\\d\\d)?\\d\\d)$ws_re$holder_re";
|
||||
if (/\G$stmt_remainder_re/)
|
||||
{
|
||||
$found = 1;
|
||||
$stmt_re =
|
||||
quotemeta($leading) . "($copyright_re$stmt_remainder_re)";
|
||||
|
||||
/$stmt_re/ or die; # Should never die.
|
||||
my $stmt = $1;
|
||||
my $final_year_orig = $2;
|
||||
|
||||
# Handle two-digit year numbers like "98" and "99".
|
||||
my $final_year = $final_year_orig;
|
||||
$final_year <= 99
|
||||
and $final_year += 1900;
|
||||
|
||||
if ($final_year != $this_year)
|
||||
{
|
||||
# Update the year.
|
||||
$stmt =~ s/(^|[^\d])$final_year_orig\b/$1$final_year, $this_year/;
|
||||
}
|
||||
if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'})
|
||||
{
|
||||
# Normalize all whitespace including newline-prefix sequences.
|
||||
$stmt =~ s/$ws_re/ /g;
|
||||
|
||||
# Put spaces after commas.
|
||||
$stmt =~ s/, ?/, /g;
|
||||
|
||||
# Convert 2-digit to 4-digit years.
|
||||
$stmt =~ s/(\b\d\d\b)/19$1/g;
|
||||
|
||||
# Make the use of intervals consistent.
|
||||
if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS})
|
||||
{
|
||||
$stmt =~ s/(\d{4})$ndash_re(\d{4})/join(', ', $1..$2)/eg;
|
||||
}
|
||||
else
|
||||
{
|
||||
my $ndash = ($ARGV =~ /\.tex(i(nfo)?)?$/ ? "--"
|
||||
: $ARGV =~ /\.(\d[a-z]*|man)$/ ? "\\(en"
|
||||
: "-");
|
||||
|
||||
$stmt =~
|
||||
s/
|
||||
(\d{4})
|
||||
(?:
|
||||
(,\ |$ndash_re)
|
||||
((??{
|
||||
if ($2 ne ', ') { '\d{4}'; }
|
||||
elsif (!$3) { $1 + 1; }
|
||||
else { $3 + 1; }
|
||||
}))
|
||||
)+
|
||||
/$1$ndash$3/gx;
|
||||
|
||||
# When it's 2, emit a single range encompassing all year numbers.
|
||||
$ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2
|
||||
and $stmt =~ s/(^|[^\d])(\d{4})\b.*(?:[^\d])(\d{4})\b/$1$2$ndash$3/;
|
||||
}
|
||||
|
||||
# Format within margin.
|
||||
my $stmt_wrapped;
|
||||
my $text_margin = $margin - length($prefix);
|
||||
if ($prefix =~ /^(\t+)/)
|
||||
{
|
||||
$text_margin -= length($1) * ($tab_width - 1);
|
||||
}
|
||||
while (length $stmt)
|
||||
{
|
||||
if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//)
|
||||
|| ($stmt =~ s/^([\S]+)(?: |$)//))
|
||||
{
|
||||
my $line = $1;
|
||||
$stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading;
|
||||
$stmt_wrapped .= $line;
|
||||
}
|
||||
else
|
||||
{
|
||||
# Should be unreachable, but we don't want an infinite
|
||||
# loop if it can be reached.
|
||||
die;
|
||||
}
|
||||
}
|
||||
|
||||
# Replace the old copyright statement.
|
||||
my $p = pos();
|
||||
s/$stmt_re/$stmt_wrapped/g;
|
||||
pos() = $p;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$found)
|
||||
{
|
||||
print STDERR "$ARGV: warning: copyright statement not found\n";
|
||||
}
|
||||
|
||||
# Hey Emacs!
|
||||
# Local variables:
|
||||
# coding: utf-8
|
||||
# mode: perl
|
||||
# indent-tabs-mode: nil
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
# time-stamp-line-limit: 200
|
||||
# time-stamp-start: "my $VERSION = '"
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H:%02M"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "'; # UTC"
|
||||
# End:
|
241
build-aux/useless-if-before-free
Executable file
241
build-aux/useless-if-before-free
Executable file
|
@ -0,0 +1,241 @@
|
|||
#!/bin/sh
|
||||
#! -*-perl-*-
|
||||
|
||||
# Detect instances of "if (p) free (p);".
|
||||
# Likewise "if (p != 0)", "if (0 != p)", or with NULL; and with braces.
|
||||
|
||||
# Copyright (C) 2008-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Written by Jim Meyering
|
||||
|
||||
# This is a prologue that allows to run a perl script as an executable
|
||||
# on systems that are compliant to a POSIX version before POSIX:2017.
|
||||
# On such systems, the usual invocation of an executable through execlp()
|
||||
# or execvp() fails with ENOEXEC if it is a script that does not start
|
||||
# with a #! line. The script interpreter mentioned in the #! line has
|
||||
# to be /bin/sh, because on GuixSD systems that is the only program that
|
||||
# has a fixed file name. The second line is essential for perl and is
|
||||
# also useful for editing this file in Emacs. The next two lines below
|
||||
# are valid code in both sh and perl. When executed by sh, they re-execute
|
||||
# the script through the perl program found in $PATH. The '-x' option
|
||||
# is essential as well; without it, perl would re-execute the script
|
||||
# through /bin/sh. When executed by perl, the next two lines are a no-op.
|
||||
eval 'exec perl -wSx "$0" "$@"'
|
||||
if 0;
|
||||
|
||||
my $VERSION = '2024-07-17 02:10'; # UTC
|
||||
# The definition above must lie within the first 8 lines in order
|
||||
# for the Emacs time-stamp write hook (at end) to update it.
|
||||
# If you change this file with Emacs, please let the write hook
|
||||
# do its job. Otherwise, update this string manually.
|
||||
|
||||
(my $copyright_year = $VERSION) =~ s/^(\d*)-.*$/$1/;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
use Getopt::Long;
|
||||
|
||||
(my $ME = $0) =~ s|.*/||;
|
||||
|
||||
# use File::Coda; # https://meyering.net/code/Coda/
|
||||
END {
|
||||
defined fileno STDOUT or return;
|
||||
close STDOUT and return;
|
||||
warn "$ME: failed to close standard output: $!\n";
|
||||
$? ||= 1;
|
||||
}
|
||||
|
||||
sub usage ($)
|
||||
{
|
||||
my ($exit_code) = @_;
|
||||
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||
if ($exit_code != 0)
|
||||
{
|
||||
print $STREAM "Try '$ME --help' for more information.\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
print $STREAM <<EOF;
|
||||
Usage: $ME [OPTIONS] FILE...
|
||||
|
||||
Detect any instance in FILE of a useless "if" test before a free call, e.g.,
|
||||
"if (p) free (p);". Any such test may be safely removed without affecting
|
||||
the semantics of the C code in FILE. Use --name=FOO --name=BAR to also
|
||||
detect free-like functions named FOO and BAR.
|
||||
|
||||
OPTIONS:
|
||||
|
||||
--list print only the name of each matching FILE (\\0-terminated)
|
||||
--name=N add name N to the list of \'free\'-like functions to detect;
|
||||
may be repeated
|
||||
|
||||
--help display this help and exit
|
||||
--version output version information and exit
|
||||
|
||||
Exit status:
|
||||
|
||||
0 one or more matches
|
||||
1 no match
|
||||
2 an error
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
For example, this command prints all removable "if" tests before "free"
|
||||
and "kfree" calls in the linux kernel sources:
|
||||
|
||||
git ls-files -z |xargs -0 $ME --name=kfree
|
||||
|
||||
Send patches and bug reports to <bug-gnulib\@gnu.org>.
|
||||
EOF
|
||||
}
|
||||
exit $exit_code;
|
||||
}
|
||||
|
||||
sub is_NULL ($)
|
||||
{
|
||||
my ($expr) = @_;
|
||||
return ($expr eq 'NULL' || $expr eq 'nullptr' || $expr eq '0');
|
||||
}
|
||||
|
||||
{
|
||||
sub EXIT_MATCH {0}
|
||||
sub EXIT_NO_MATCH {1}
|
||||
sub EXIT_ERROR {2}
|
||||
my $err = EXIT_NO_MATCH;
|
||||
|
||||
my $list;
|
||||
my @name = qw(free);
|
||||
GetOptions
|
||||
(
|
||||
help => sub { usage 0 },
|
||||
version =>
|
||||
sub
|
||||
{
|
||||
print "$ME version $VERSION\n";
|
||||
print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n";
|
||||
print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n"
|
||||
. "This is free software: you are free to change and redistribute it.\n"
|
||||
. "There is NO WARRANTY, to the extent permitted by law.\n";
|
||||
print "\n";
|
||||
my $author = "Jim Meyering";
|
||||
print "Written by $author.\n";
|
||||
exit
|
||||
},
|
||||
list => \$list,
|
||||
'name=s@' => \@name,
|
||||
) or usage 1;
|
||||
|
||||
# Make sure we have the right number of non-option arguments.
|
||||
# Always tell the user why we fail.
|
||||
@ARGV < 1
|
||||
and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR;
|
||||
|
||||
my $or = join '|', @name;
|
||||
my $regexp = qr/(?:$or)/;
|
||||
|
||||
# Set the input record separator.
|
||||
# Note: this makes it impractical to print line numbers.
|
||||
$/ = '"';
|
||||
|
||||
my $found_match = 0;
|
||||
FILE:
|
||||
foreach my $file (@ARGV)
|
||||
{
|
||||
open FH, '<', $file
|
||||
or (warn "$ME: can't open '$file' for reading: $!\n"),
|
||||
$err = EXIT_ERROR, next;
|
||||
while (defined (my $line = <FH>))
|
||||
{
|
||||
# Skip non-matching lines early to save time
|
||||
$line =~ /\bif\b/
|
||||
or next;
|
||||
while ($line =~
|
||||
/\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\)
|
||||
# 1 2 3
|
||||
(?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;|
|
||||
\s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg)
|
||||
{
|
||||
my $all = $1;
|
||||
my ($lhs, $rhs) = ($2, $3);
|
||||
my ($free_opnd, $braced_free_opnd) = ($4, $5);
|
||||
my $non_NULL;
|
||||
if (!defined $rhs) { $non_NULL = $lhs }
|
||||
elsif (is_NULL $rhs) { $non_NULL = $lhs }
|
||||
elsif (is_NULL $lhs) { $non_NULL = $rhs }
|
||||
else { next }
|
||||
|
||||
# Compare the non-NULL part of the "if" expression and the
|
||||
# free'd expression, without regard to white space.
|
||||
$non_NULL =~ tr/ \t//d;
|
||||
my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd;
|
||||
$e2 =~ tr/ \t//d;
|
||||
if ($non_NULL eq $e2)
|
||||
{
|
||||
$found_match = 1;
|
||||
$list
|
||||
and (print "$file\0"), next FILE;
|
||||
print "$file: $all\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
continue
|
||||
{
|
||||
close FH;
|
||||
}
|
||||
|
||||
$found_match && $err == EXIT_NO_MATCH
|
||||
and $err = EXIT_MATCH;
|
||||
|
||||
exit $err;
|
||||
}
|
||||
|
||||
my $foo = <<'EOF';
|
||||
# The above is to *find* them.
|
||||
# This adjusts them, removing the unnecessary "if (p)" part.
|
||||
|
||||
# FIXME: do something like this as an option (doesn't do braces):
|
||||
free=xfree
|
||||
git grep -l -z "$free *(" \
|
||||
| xargs -0 useless-if-before-free -l --name="$free" \
|
||||
| xargs -0 perl -0x3b -pi -e \
|
||||
's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL|nullptr))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s'
|
||||
|
||||
# Use the following to remove redundant uses of kfree inside braces.
|
||||
# Note that -0777 puts perl in slurp-whole-file mode;
|
||||
# but we have plenty of memory, these days...
|
||||
free=kfree
|
||||
git grep -l -z "$free *(" \
|
||||
| xargs -0 useless-if-before-free -l --name="$free" \
|
||||
| xargs -0 perl -0777 -pi -e \
|
||||
's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL|nullptr))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms'
|
||||
|
||||
Be careful that the result of the above transformation is valid.
|
||||
If the matched string is followed by "else", then obviously, it won't be.
|
||||
|
||||
When modifying files, refuse to process anything other than a regular file.
|
||||
EOF
|
||||
|
||||
## Local Variables:
|
||||
## mode: perl
|
||||
## indent-tabs-mode: nil
|
||||
## eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
## time-stamp-line-limit: 50
|
||||
## time-stamp-start: "my $VERSION = '"
|
||||
## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||
## time-stamp-time-zone: "UTC0"
|
||||
## time-stamp-end: "'; # UTC"
|
||||
## End:
|
113
build-aux/vc-list-files
Executable file
113
build-aux/vc-list-files
Executable file
|
@ -0,0 +1,113 @@
|
|||
#!/bin/sh
|
||||
# List version-controlled file names.
|
||||
|
||||
# Print a version string.
|
||||
scriptversion=2024-07-04.10; # UTC
|
||||
|
||||
# Copyright (C) 2006-2024 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
# List the specified version-controlled files.
|
||||
# With no argument, list them all. With a single DIRECTORY argument,
|
||||
# list the version-controlled files in that directory.
|
||||
|
||||
# If there's an argument, it must be a single, "."-relative directory name.
|
||||
# cvsu is part of the cvsutils package: https://www.red-bean.com/cvsutils/
|
||||
|
||||
postprocess=
|
||||
case $1 in
|
||||
--help) cat <<EOF
|
||||
Usage: $0 [-C SRCDIR] [DIR...]
|
||||
|
||||
Output a list of version-controlled files in DIR (default .), relative to
|
||||
SRCDIR (default .). SRCDIR must be the top directory of a checkout.
|
||||
|
||||
Options:
|
||||
--help print this help, then exit
|
||||
--version print version number, then exit
|
||||
-C SRCDIR change directory to SRCDIR before generating list
|
||||
|
||||
Report bugs and patches to <bug-gnulib@gnu.org>.
|
||||
EOF
|
||||
exit ;;
|
||||
|
||||
--version)
|
||||
year=`echo "$scriptversion" | sed 's/[^0-9].*//'`
|
||||
cat <<EOF
|
||||
vc-list-files $scriptversion
|
||||
Copyright (C) $year Free Software Foundation, Inc,
|
||||
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
|
||||
This is free software: you are free to change and redistribute it.
|
||||
There is NO WARRANTY, to the extent permitted by law.
|
||||
EOF
|
||||
exit ;;
|
||||
|
||||
-C)
|
||||
test "$2" = . || postprocess="| sed 's|^|$2/|'"
|
||||
cd "$2" || exit 1
|
||||
shift; shift ;;
|
||||
esac
|
||||
|
||||
test $# = 0 && set .
|
||||
|
||||
for dir
|
||||
do
|
||||
if test -d .git || test -f .git; then
|
||||
test "x$dir" = x. \
|
||||
&& dir= sed_esc= \
|
||||
|| { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; }
|
||||
# Ignore git symlinks - either they point into the tree, in which case
|
||||
# we don't need to visit the target twice, or they point somewhere
|
||||
# else (often into a submodule), in which case the content does not
|
||||
# belong to this package.
|
||||
eval exec git ls-tree -r 'HEAD:"$dir"' \
|
||||
\| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess
|
||||
elif test -d .hg; then
|
||||
eval exec hg locate '"$dir/*"' $postprocess
|
||||
elif test -d .bzr; then
|
||||
test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
|
||||
eval exec bzr ls -R --versioned '"$dir"' $postprocess
|
||||
elif test -d CVS; then
|
||||
test "$postprocess" = '' && postprocess="| sed 's|^\./||'"
|
||||
if test -x build-aux/cvsu; then
|
||||
eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess
|
||||
elif (cvsu --help) >/dev/null 2>&1; then
|
||||
eval cvsu --find --types=AFGM '"$dir"' $postprocess
|
||||
else
|
||||
eval awk -F/ \''{ \
|
||||
if (!$1 && $3 !~ /^-/) { \
|
||||
f=FILENAME; \
|
||||
if (f ~ /CVS\/Entries$/) \
|
||||
f = substr(f, 1, length(f)-11); \
|
||||
print f $2; \
|
||||
}}'\'' \
|
||||
`find "$dir" -name Entries -print` /dev/null' $postprocess
|
||||
fi
|
||||
elif test -d .svn; then
|
||||
eval exec svn list -R '"$dir"' $postprocess
|
||||
else
|
||||
echo "$0: Failed to determine type of version control used in `pwd`" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'before-save-hook 'time-stamp nil t)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-time-zone: "UTC0"
|
||||
# time-stamp-end: "; # UTC"
|
||||
# End:
|
1043
configure.ac
Normal file
1043
configure.ac
Normal file
File diff suppressed because it is too large
Load diff
119
doc/Makefile.am
Normal file
119
doc/Makefile.am
Normal file
|
@ -0,0 +1,119 @@
|
|||
# Makefile for `wget' utility
|
||||
# Copyright (C) 1995-1997, 2007-2011, 2015, 2018-2024 Free Software
|
||||
# Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#
|
||||
# Version: @VERSION@
|
||||
#
|
||||
|
||||
# Program to convert DVI files to PostScript
|
||||
DVIPS = dvips -D 300
|
||||
# Program to convert texinfo files to html
|
||||
TEXI2HTML = texi2html -expandinfo -split_chapter
|
||||
|
||||
manext = 1
|
||||
RM = rm -f
|
||||
|
||||
TEXI2POD = $(srcdir)/texi2pod.pl
|
||||
POD2MAN = @POD2MAN@
|
||||
MAN = wget.$(manext)
|
||||
WGETRC = $(sysconfdir)/wgetrc
|
||||
SAMPLERCTEXI = sample.wgetrc.munged_for_texi_inclusion
|
||||
|
||||
#
|
||||
# Dependencies for building
|
||||
#
|
||||
|
||||
man_MANS = $(MAN)
|
||||
|
||||
all: wget.info @COMMENT_IF_NO_POD2MAN@$(MAN)
|
||||
|
||||
everything: all wget_us.ps wget_a4.ps wget_toc.html
|
||||
|
||||
$(SAMPLERCTEXI): $(srcdir)/sample.wgetrc
|
||||
sed s/@/@@/g $? > $@
|
||||
|
||||
info_TEXINFOS = wget.texi
|
||||
wget_TEXINFOS = fdl.texi sample.wgetrc.munged_for_texi_inclusion
|
||||
|
||||
EXTRA_DIST = sample.wgetrc \
|
||||
$(SAMPLERCTEXI) \
|
||||
texi2pod.pl
|
||||
|
||||
wget.pod: $(srcdir)/wget.texi version.texi
|
||||
$(TEXI2POD) -D VERSION="$(VERSION)" $(srcdir)/wget.texi $@
|
||||
|
||||
$(MAN): wget.pod
|
||||
$(POD2MAN) --center="GNU Wget" --release="GNU Wget @VERSION@" --utf8 $? > $@ || \
|
||||
$(POD2MAN) --center="GNU Wget" --release="GNU Wget @VERSION@" $? > $@
|
||||
|
||||
#wget.cat: $(MAN)
|
||||
# nroff -man $? > $@
|
||||
|
||||
wget_us.ps: wget.dvi
|
||||
$(DVIPS) -t letter -o $@ wget.dvi
|
||||
|
||||
wget_a4.ps: wget.dvi
|
||||
$(DVIPS) -t a4 -o $@ wget.dvi
|
||||
|
||||
wget_toc.html: $(srcdir)/wget.texi
|
||||
$(TEXI2HTML) $(srcdir)/wget.texi
|
||||
|
||||
#
|
||||
# Dependencies for installing
|
||||
#
|
||||
|
||||
# install all the documentation
|
||||
install-data-local: install.wgetrc @COMMENT_IF_NO_POD2MAN@install.man
|
||||
|
||||
# uninstall all the documentation
|
||||
uninstall-local: @COMMENT_IF_NO_POD2MAN@uninstall.man
|
||||
|
||||
|
||||
# install man page, creating install directory if necessary
|
||||
install.man: $(MAN)
|
||||
$(mkinstalldirs) $(DESTDIR)$(mandir)/man$(manext)
|
||||
$(INSTALL_DATA) $(MAN) $(DESTDIR)$(mandir)/man$(manext)/$(MAN)
|
||||
|
||||
# install sample.wgetrc
|
||||
install.wgetrc: $(srcdir)/sample.wgetrc
|
||||
$(mkinstalldirs) $(DESTDIR)$(sysconfdir)
|
||||
@if test -f $(DESTDIR)$(WGETRC); then \
|
||||
if cmp -s $(srcdir)/sample.wgetrc $(DESTDIR)$(WGETRC); then echo ""; \
|
||||
else \
|
||||
echo ' $(INSTALL_DATA) $(srcdir)/sample.wgetrc $(DESTDIR)$(WGETRC).new'; \
|
||||
$(INSTALL_DATA) $(srcdir)/sample.wgetrc $(DESTDIR)$(WGETRC).new; \
|
||||
echo; \
|
||||
echo "WARNING: Differing \`$(DESTDIR)$(WGETRC)'"; \
|
||||
echo " exists and has been spared. You might want to"; \
|
||||
echo " consider merging in the new lines from"; \
|
||||
echo " \`$(DESTDIR)$(WGETRC).new'."; \
|
||||
echo; \
|
||||
fi; \
|
||||
else \
|
||||
$(INSTALL_DATA) $(srcdir)/sample.wgetrc $(DESTDIR)$(WGETRC); \
|
||||
fi
|
||||
|
||||
# uninstall man page
|
||||
uninstall.man:
|
||||
$(RM) $(DESTDIR)$(mandir)/man$(manext)/$(MAN)
|
||||
|
||||
#
|
||||
# Dependencies for cleanup
|
||||
#
|
||||
|
||||
CLEANFILES = *~ *.bak *.cat *.pod
|
||||
DISTCLEANFILES = $(MAN)
|
2641
doc/Makefile.in
Normal file
2641
doc/Makefile.in
Normal file
File diff suppressed because it is too large
Load diff
506
doc/fdl.texi
Normal file
506
doc/fdl.texi
Normal file
|
@ -0,0 +1,506 @@
|
|||
@c The GNU Free Documentation License.
|
||||
@center Version 1.3, 3 November 2008
|
||||
|
||||
@c This file is intended to be included within another document,
|
||||
@c hence no sectioning command or @node.
|
||||
|
||||
@display
|
||||
Copyright @copyright{} 2000--2002, 2007--2008, 2015, 2018--2024 Free
|
||||
Software Foundation, Inc.
|
||||
@uref{http://fsf.org/}
|
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
@end display
|
||||
|
||||
@enumerate 0
|
||||
@item
|
||||
PREAMBLE
|
||||
|
||||
The purpose of this License is to make a manual, textbook, or other
|
||||
functional and useful document @dfn{free} in the sense of freedom: to
|
||||
assure everyone the effective freedom to copy and redistribute it,
|
||||
with or without modifying it, either commercially or noncommercially.
|
||||
Secondarily, this License preserves for the author and publisher a way
|
||||
to get credit for their work, while not being considered responsible
|
||||
for modifications made by others.
|
||||
|
||||
This License is a kind of ``copyleft'', which means that derivative
|
||||
works of the document must themselves be free in the same sense. It
|
||||
complements the GNU General Public License, which is a copyleft
|
||||
license designed for free software.
|
||||
|
||||
We have designed this License in order to use it for manuals for free
|
||||
software, because free software needs free documentation: a free
|
||||
program should come with manuals providing the same freedoms that the
|
||||
software does. But this License is not limited to software manuals;
|
||||
it can be used for any textual work, regardless of subject matter or
|
||||
whether it is published as a printed book. We recommend this License
|
||||
principally for works whose purpose is instruction or reference.
|
||||
|
||||
@item
|
||||
APPLICABILITY AND DEFINITIONS
|
||||
|
||||
This License applies to any manual or other work, in any medium, that
|
||||
contains a notice placed by the copyright holder saying it can be
|
||||
distributed under the terms of this License. Such a notice grants a
|
||||
world-wide, royalty-free license, unlimited in duration, to use that
|
||||
work under the conditions stated herein. The ``Document'', below,
|
||||
refers to any such manual or work. Any member of the public is a
|
||||
licensee, and is addressed as ``you''. You accept the license if you
|
||||
copy, modify or distribute the work in a way requiring permission
|
||||
under copyright law.
|
||||
|
||||
A ``Modified Version'' of the Document means any work containing the
|
||||
Document or a portion of it, either copied verbatim, or with
|
||||
modifications and/or translated into another language.
|
||||
|
||||
A ``Secondary Section'' is a named appendix or a front-matter section
|
||||
of the Document that deals exclusively with the relationship of the
|
||||
publishers or authors of the Document to the Document's overall
|
||||
subject (or to related matters) and contains nothing that could fall
|
||||
directly within that overall subject. (Thus, if the Document is in
|
||||
part a textbook of mathematics, a Secondary Section may not explain
|
||||
any mathematics.) The relationship could be a matter of historical
|
||||
connection with the subject or with related matters, or of legal,
|
||||
commercial, philosophical, ethical or political position regarding
|
||||
them.
|
||||
|
||||
The ``Invariant Sections'' are certain Secondary Sections whose titles
|
||||
are designated, as being those of Invariant Sections, in the notice
|
||||
that says that the Document is released under this License. If a
|
||||
section does not fit the above definition of Secondary then it is not
|
||||
allowed to be designated as Invariant. The Document may contain zero
|
||||
Invariant Sections. If the Document does not identify any Invariant
|
||||
Sections then there are none.
|
||||
|
||||
The ``Cover Texts'' are certain short passages of text that are listed,
|
||||
as Front-Cover Texts or Back-Cover Texts, in the notice that says that
|
||||
the Document is released under this License. A Front-Cover Text may
|
||||
be at most 5 words, and a Back-Cover Text may be at most 25 words.
|
||||
|
||||
A ``Transparent'' copy of the Document means a machine-readable copy,
|
||||
represented in a format whose specification is available to the
|
||||
general public, that is suitable for revising the document
|
||||
straightforwardly with generic text editors or (for images composed of
|
||||
pixels) generic paint programs or (for drawings) some widely available
|
||||
drawing editor, and that is suitable for input to text formatters or
|
||||
for automatic translation to a variety of formats suitable for input
|
||||
to text formatters. A copy made in an otherwise Transparent file
|
||||
format whose markup, or absence of markup, has been arranged to thwart
|
||||
or discourage subsequent modification by readers is not Transparent.
|
||||
An image format is not Transparent if used for any substantial amount
|
||||
of text. A copy that is not ``Transparent'' is called ``Opaque''.
|
||||
|
||||
Examples of suitable formats for Transparent copies include plain
|
||||
ASCII without markup, Texinfo input format, La@TeX{} input
|
||||
format, SGML or XML using a publicly available
|
||||
DTD, and standard-conforming simple HTML,
|
||||
PostScript or PDF designed for human modification. Examples
|
||||
of transparent image formats include PNG, XCF and
|
||||
JPG@. Opaque formats include proprietary formats that can be
|
||||
read and edited only by proprietary word processors, SGML or
|
||||
XML for which the DTD and/or processing tools are
|
||||
not generally available, and the machine-generated HTML,
|
||||
PostScript or PDF produced by some word processors for
|
||||
output purposes only.
|
||||
|
||||
The ``Title Page'' means, for a printed book, the title page itself,
|
||||
plus such following pages as are needed to hold, legibly, the material
|
||||
this License requires to appear in the title page. For works in
|
||||
formats which do not have any title page as such, ``Title Page'' means
|
||||
the text near the most prominent appearance of the work's title,
|
||||
preceding the beginning of the body of the text.
|
||||
|
||||
The ``publisher'' means any person or entity that distributes copies
|
||||
of the Document to the public.
|
||||
|
||||
A section ``Entitled XYZ'' means a named subunit of the Document whose
|
||||
title either is precisely XYZ or contains XYZ in parentheses following
|
||||
text that translates XYZ in another language. (Here XYZ stands for a
|
||||
specific section name mentioned below, such as ``Acknowledgements'',
|
||||
``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
|
||||
of such a section when you modify the Document means that it remains a
|
||||
section ``Entitled XYZ'' according to this definition.
|
||||
|
||||
The Document may include Warranty Disclaimers next to the notice which
|
||||
states that this License applies to the Document. These Warranty
|
||||
Disclaimers are considered to be included by reference in this
|
||||
License, but only as regards disclaiming warranties: any other
|
||||
implication that these Warranty Disclaimers may have is void and has
|
||||
no effect on the meaning of this License.
|
||||
|
||||
@item
|
||||
VERBATIM COPYING
|
||||
|
||||
You may copy and distribute the Document in any medium, either
|
||||
commercially or noncommercially, provided that this License, the
|
||||
copyright notices, and the license notice saying this License applies
|
||||
to the Document are reproduced in all copies, and that you add no other
|
||||
conditions whatsoever to those of this License. You may not use
|
||||
technical measures to obstruct or control the reading or further
|
||||
copying of the copies you make or distribute. However, you may accept
|
||||
compensation in exchange for copies. If you distribute a large enough
|
||||
number of copies you must also follow the conditions in section 3.
|
||||
|
||||
You may also lend copies, under the same conditions stated above, and
|
||||
you may publicly display copies.
|
||||
|
||||
@item
|
||||
COPYING IN QUANTITY
|
||||
|
||||
If you publish printed copies (or copies in media that commonly have
|
||||
printed covers) of the Document, numbering more than 100, and the
|
||||
Document's license notice requires Cover Texts, you must enclose the
|
||||
copies in covers that carry, clearly and legibly, all these Cover
|
||||
Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
|
||||
the back cover. Both covers must also clearly and legibly identify
|
||||
you as the publisher of these copies. The front cover must present
|
||||
the full title with all words of the title equally prominent and
|
||||
visible. You may add other material on the covers in addition.
|
||||
Copying with changes limited to the covers, as long as they preserve
|
||||
the title of the Document and satisfy these conditions, can be treated
|
||||
as verbatim copying in other respects.
|
||||
|
||||
If the required texts for either cover are too voluminous to fit
|
||||
legibly, you should put the first ones listed (as many as fit
|
||||
reasonably) on the actual cover, and continue the rest onto adjacent
|
||||
pages.
|
||||
|
||||
If you publish or distribute Opaque copies of the Document numbering
|
||||
more than 100, you must either include a machine-readable Transparent
|
||||
copy along with each Opaque copy, or state in or with each Opaque copy
|
||||
a computer-network location from which the general network-using
|
||||
public has access to download using public-standard network protocols
|
||||
a complete Transparent copy of the Document, free of added material.
|
||||
If you use the latter option, you must take reasonably prudent steps,
|
||||
when you begin distribution of Opaque copies in quantity, to ensure
|
||||
that this Transparent copy will remain thus accessible at the stated
|
||||
location until at least one year after the last time you distribute an
|
||||
Opaque copy (directly or through your agents or retailers) of that
|
||||
edition to the public.
|
||||
|
||||
It is requested, but not required, that you contact the authors of the
|
||||
Document well before redistributing any large number of copies, to give
|
||||
them a chance to provide you with an updated version of the Document.
|
||||
|
||||
@item
|
||||
MODIFICATIONS
|
||||
|
||||
You may copy and distribute a Modified Version of the Document under
|
||||
the conditions of sections 2 and 3 above, provided that you release
|
||||
the Modified Version under precisely this License, with the Modified
|
||||
Version filling the role of the Document, thus licensing distribution
|
||||
and modification of the Modified Version to whoever possesses a copy
|
||||
of it. In addition, you must do these things in the Modified Version:
|
||||
|
||||
@enumerate A
|
||||
@item
|
||||
Use in the Title Page (and on the covers, if any) a title distinct
|
||||
from that of the Document, and from those of previous versions
|
||||
(which should, if there were any, be listed in the History section
|
||||
of the Document). You may use the same title as a previous version
|
||||
if the original publisher of that version gives permission.
|
||||
|
||||
@item
|
||||
List on the Title Page, as authors, one or more persons or entities
|
||||
responsible for authorship of the modifications in the Modified
|
||||
Version, together with at least five of the principal authors of the
|
||||
Document (all of its principal authors, if it has fewer than five),
|
||||
unless they release you from this requirement.
|
||||
|
||||
@item
|
||||
State on the Title page the name of the publisher of the
|
||||
Modified Version, as the publisher.
|
||||
|
||||
@item
|
||||
Preserve all the copyright notices of the Document.
|
||||
|
||||
@item
|
||||
Add an appropriate copyright notice for your modifications
|
||||
adjacent to the other copyright notices.
|
||||
|
||||
@item
|
||||
Include, immediately after the copyright notices, a license notice
|
||||
giving the public permission to use the Modified Version under the
|
||||
terms of this License, in the form shown in the Addendum below.
|
||||
|
||||
@item
|
||||
Preserve in that license notice the full lists of Invariant Sections
|
||||
and required Cover Texts given in the Document's license notice.
|
||||
|
||||
@item
|
||||
Include an unaltered copy of this License.
|
||||
|
||||
@item
|
||||
Preserve the section Entitled ``History'', Preserve its Title, and add
|
||||
to it an item stating at least the title, year, new authors, and
|
||||
publisher of the Modified Version as given on the Title Page. If
|
||||
there is no section Entitled ``History'' in the Document, create one
|
||||
stating the title, year, authors, and publisher of the Document as
|
||||
given on its Title Page, then add an item describing the Modified
|
||||
Version as stated in the previous sentence.
|
||||
|
||||
@item
|
||||
Preserve the network location, if any, given in the Document for
|
||||
public access to a Transparent copy of the Document, and likewise
|
||||
the network locations given in the Document for previous versions
|
||||
it was based on. These may be placed in the ``History'' section.
|
||||
You may omit a network location for a work that was published at
|
||||
least four years before the Document itself, or if the original
|
||||
publisher of the version it refers to gives permission.
|
||||
|
||||
@item
|
||||
For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
|
||||
the Title of the section, and preserve in the section all the
|
||||
substance and tone of each of the contributor acknowledgements and/or
|
||||
dedications given therein.
|
||||
|
||||
@item
|
||||
Preserve all the Invariant Sections of the Document,
|
||||
unaltered in their text and in their titles. Section numbers
|
||||
or the equivalent are not considered part of the section titles.
|
||||
|
||||
@item
|
||||
Delete any section Entitled ``Endorsements''. Such a section
|
||||
may not be included in the Modified Version.
|
||||
|
||||
@item
|
||||
Do not retitle any existing section to be Entitled ``Endorsements'' or
|
||||
to conflict in title with any Invariant Section.
|
||||
|
||||
@item
|
||||
Preserve any Warranty Disclaimers.
|
||||
@end enumerate
|
||||
|
||||
If the Modified Version includes new front-matter sections or
|
||||
appendices that qualify as Secondary Sections and contain no material
|
||||
copied from the Document, you may at your option designate some or all
|
||||
of these sections as invariant. To do this, add their titles to the
|
||||
list of Invariant Sections in the Modified Version's license notice.
|
||||
These titles must be distinct from any other section titles.
|
||||
|
||||
You may add a section Entitled ``Endorsements'', provided it contains
|
||||
nothing but endorsements of your Modified Version by various
|
||||
parties---for example, statements of peer review or that the text has
|
||||
been approved by an organization as the authoritative definition of a
|
||||
standard.
|
||||
|
||||
You may add a passage of up to five words as a Front-Cover Text, and a
|
||||
passage of up to 25 words as a Back-Cover Text, to the end of the list
|
||||
of Cover Texts in the Modified Version. Only one passage of
|
||||
Front-Cover Text and one of Back-Cover Text may be added by (or
|
||||
through arrangements made by) any one entity. If the Document already
|
||||
includes a cover text for the same cover, previously added by you or
|
||||
by arrangement made by the same entity you are acting on behalf of,
|
||||
you may not add another; but you may replace the old one, on explicit
|
||||
permission from the previous publisher that added the old one.
|
||||
|
||||
The author(s) and publisher(s) of the Document do not by this License
|
||||
give permission to use their names for publicity for or to assert or
|
||||
imply endorsement of any Modified Version.
|
||||
|
||||
@item
|
||||
COMBINING DOCUMENTS
|
||||
|
||||
You may combine the Document with other documents released under this
|
||||
License, under the terms defined in section 4 above for modified
|
||||
versions, provided that you include in the combination all of the
|
||||
Invariant Sections of all of the original documents, unmodified, and
|
||||
list them all as Invariant Sections of your combined work in its
|
||||
license notice, and that you preserve all their Warranty Disclaimers.
|
||||
|
||||
The combined work need only contain one copy of this License, and
|
||||
multiple identical Invariant Sections may be replaced with a single
|
||||
copy. If there are multiple Invariant Sections with the same name but
|
||||
different contents, make the title of each such section unique by
|
||||
adding at the end of it, in parentheses, the name of the original
|
||||
author or publisher of that section if known, or else a unique number.
|
||||
Make the same adjustment to the section titles in the list of
|
||||
Invariant Sections in the license notice of the combined work.
|
||||
|
||||
In the combination, you must combine any sections Entitled ``History''
|
||||
in the various original documents, forming one section Entitled
|
||||
``History''; likewise combine any sections Entitled ``Acknowledgements'',
|
||||
and any sections Entitled ``Dedications''. You must delete all
|
||||
sections Entitled ``Endorsements.''
|
||||
|
||||
@item
|
||||
COLLECTIONS OF DOCUMENTS
|
||||
|
||||
You may make a collection consisting of the Document and other documents
|
||||
released under this License, and replace the individual copies of this
|
||||
License in the various documents with a single copy that is included in
|
||||
the collection, provided that you follow the rules of this License for
|
||||
verbatim copying of each of the documents in all other respects.
|
||||
|
||||
You may extract a single document from such a collection, and distribute
|
||||
it individually under this License, provided you insert a copy of this
|
||||
License into the extracted document, and follow this License in all
|
||||
other respects regarding verbatim copying of that document.
|
||||
|
||||
@item
|
||||
AGGREGATION WITH INDEPENDENT WORKS
|
||||
|
||||
A compilation of the Document or its derivatives with other separate
|
||||
and independent documents or works, in or on a volume of a storage or
|
||||
distribution medium, is called an ``aggregate'' if the copyright
|
||||
resulting from the compilation is not used to limit the legal rights
|
||||
of the compilation's users beyond what the individual works permit.
|
||||
When the Document is included in an aggregate, this License does not
|
||||
apply to the other works in the aggregate which are not themselves
|
||||
derivative works of the Document.
|
||||
|
||||
If the Cover Text requirement of section 3 is applicable to these
|
||||
copies of the Document, then if the Document is less than one half of
|
||||
the entire aggregate, the Document's Cover Texts may be placed on
|
||||
covers that bracket the Document within the aggregate, or the
|
||||
electronic equivalent of covers if the Document is in electronic form.
|
||||
Otherwise they must appear on printed covers that bracket the whole
|
||||
aggregate.
|
||||
|
||||
@item
|
||||
TRANSLATION
|
||||
|
||||
Translation is considered a kind of modification, so you may
|
||||
distribute translations of the Document under the terms of section 4.
|
||||
Replacing Invariant Sections with translations requires special
|
||||
permission from their copyright holders, but you may include
|
||||
translations of some or all Invariant Sections in addition to the
|
||||
original versions of these Invariant Sections. You may include a
|
||||
translation of this License, and all the license notices in the
|
||||
Document, and any Warranty Disclaimers, provided that you also include
|
||||
the original English version of this License and the original versions
|
||||
of those notices and disclaimers. In case of a disagreement between
|
||||
the translation and the original version of this License or a notice
|
||||
or disclaimer, the original version will prevail.
|
||||
|
||||
If a section in the Document is Entitled ``Acknowledgements'',
|
||||
``Dedications'', or ``History'', the requirement (section 4) to Preserve
|
||||
its Title (section 1) will typically require changing the actual
|
||||
title.
|
||||
|
||||
@item
|
||||
TERMINATION
|
||||
|
||||
You may not copy, modify, sublicense, or distribute the Document
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense, or distribute it is void, and
|
||||
will automatically terminate your rights under this License.
|
||||
|
||||
However, if you cease all violation of this License, then your license
|
||||
from a particular copyright holder is reinstated (a) provisionally,
|
||||
unless and until the copyright holder explicitly and finally
|
||||
terminates your license, and (b) permanently, if the copyright holder
|
||||
fails to notify you of the violation by some reasonable means prior to
|
||||
60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, receipt of a copy of some or all of the same material does
|
||||
not give you any rights to use it.
|
||||
|
||||
@item
|
||||
FUTURE REVISIONS OF THIS LICENSE
|
||||
|
||||
The Free Software Foundation may publish new, revised versions
|
||||
of the GNU Free Documentation License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns. See
|
||||
@uref{http://www.gnu.org/copyleft/}.
|
||||
|
||||
Each version of the License is given a distinguishing version number.
|
||||
If the Document specifies that a particular numbered version of this
|
||||
License ``or any later version'' applies to it, you have the option of
|
||||
following the terms and conditions either of that specified version or
|
||||
of any later version that has been published (not as a draft) by the
|
||||
Free Software Foundation. If the Document does not specify a version
|
||||
number of this License, you may choose any version ever published (not
|
||||
as a draft) by the Free Software Foundation. If the Document
|
||||
specifies that a proxy can decide which future versions of this
|
||||
License can be used, that proxy's public statement of acceptance of a
|
||||
version permanently authorizes you to choose that version for the
|
||||
Document.
|
||||
|
||||
@item
|
||||
RELICENSING
|
||||
|
||||
``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
|
||||
World Wide Web server that publishes copyrightable works and also
|
||||
provides prominent facilities for anybody to edit those works. A
|
||||
public wiki that anybody can edit is an example of such a server. A
|
||||
``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
|
||||
site means any set of copyrightable works thus published on the MMC
|
||||
site.
|
||||
|
||||
``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
|
||||
license published by Creative Commons Corporation, a not-for-profit
|
||||
corporation with a principal place of business in San Francisco,
|
||||
California, as well as future copyleft versions of that license
|
||||
published by that same organization.
|
||||
|
||||
``Incorporate'' means to publish or republish a Document, in whole or
|
||||
in part, as part of another Document.
|
||||
|
||||
An MMC is ``eligible for relicensing'' if it is licensed under this
|
||||
License, and if all works that were first published under this License
|
||||
somewhere other than this MMC, and subsequently incorporated in whole
|
||||
or in part into the MMC, (1) had no cover texts or invariant sections,
|
||||
and (2) were thus incorporated prior to November 1, 2008.
|
||||
|
||||
The operator of an MMC Site may republish an MMC contained in the site
|
||||
under CC-BY-SA on the same site at any time before August 1, 2009,
|
||||
provided the MMC is eligible for relicensing.
|
||||
|
||||
@end enumerate
|
||||
|
||||
@page
|
||||
@heading ADDENDUM: How to use this License for your documents
|
||||
|
||||
To use this License in a document you have written, include a copy of
|
||||
the License in the document and put the following copyright and
|
||||
license notices just after the title page:
|
||||
|
||||
@smallexample
|
||||
@group
|
||||
Copyright (C) @var{year} @var{your name}.
|
||||
Permission is granted to copy, distribute and/or modify this document
|
||||
under the terms of the GNU Free Documentation License, Version 1.3
|
||||
or any later version published by the Free Software Foundation;
|
||||
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
|
||||
Texts. A copy of the license is included in the section entitled ``GNU
|
||||
Free Documentation License''.
|
||||
@end group
|
||||
@end smallexample
|
||||
|
||||
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
|
||||
replace the ``with@dots{}Texts.''@: line with this:
|
||||
|
||||
@smallexample
|
||||
@group
|
||||
with the Invariant Sections being @var{list their titles}, with
|
||||
the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
|
||||
being @var{list}.
|
||||
@end group
|
||||
@end smallexample
|
||||
|
||||
If you have Invariant Sections without Cover Texts, or some other
|
||||
combination of the three, merge those two alternatives to suit the
|
||||
situation.
|
||||
|
||||
If your document contains nontrivial examples of program code, we
|
||||
recommend releasing these examples in parallel under your choice of
|
||||
free software license, such as the GNU General Public License,
|
||||
to permit their use in free software.
|
||||
|
||||
@c Local Variables:
|
||||
@c ispell-local-pdict: "ispell-dict"
|
||||
@c End:
|
137
doc/sample.wgetrc
Normal file
137
doc/sample.wgetrc
Normal file
|
@ -0,0 +1,137 @@
|
|||
###
|
||||
### Sample Wget initialization file .wgetrc
|
||||
###
|
||||
|
||||
## You can use this file to change the default behaviour of wget or to
|
||||
## avoid having to type many many command-line options. This file does
|
||||
## not contain a comprehensive list of commands -- look at the manual
|
||||
## to find out what you can put into this file. You can find this here:
|
||||
## $ info wget.info 'Startup File'
|
||||
## Or online here:
|
||||
## https://www.gnu.org/software/wget/manual/wget.html#Startup-File
|
||||
##
|
||||
## Wget initialization file can reside in /usr/local/etc/wgetrc
|
||||
## (global, for all users) or $HOME/.wgetrc (for a single user).
|
||||
##
|
||||
## To use the settings in this file, you will have to uncomment them,
|
||||
## as well as change them, in most cases, as the values on the
|
||||
## commented-out lines are the default values (e.g. "off").
|
||||
##
|
||||
## Command are case-, underscore- and minus-insensitive.
|
||||
## For example ftp_proxy, ftp-proxy and ftpproxy are the same.
|
||||
|
||||
|
||||
##
|
||||
## Global settings (useful for setting up in /usr/local/etc/wgetrc).
|
||||
## Think well before you change them, since they may reduce wget's
|
||||
## functionality, and make it behave contrary to the documentation:
|
||||
##
|
||||
|
||||
# You can set retrieve quota for beginners by specifying a value
|
||||
# optionally followed by 'K' (kilobytes) or 'M' (megabytes). The
|
||||
# default quota is unlimited.
|
||||
#quota = inf
|
||||
|
||||
# You can lower (or raise) the default number of retries when
|
||||
# downloading a file (default is 20).
|
||||
#tries = 20
|
||||
|
||||
# Lowering the maximum depth of the recursive retrieval is handy to
|
||||
# prevent newbies from going too "deep" when they unwittingly start
|
||||
# the recursive retrieval. The default is 5.
|
||||
#reclevel = 5
|
||||
|
||||
# By default Wget uses "passive FTP" transfer where the client
|
||||
# initiates the data connection to the server rather than the other
|
||||
# way around. That is required on systems behind NAT where the client
|
||||
# computer cannot be easily reached from the Internet. However, some
|
||||
# firewalls software explicitly supports active FTP and in fact has
|
||||
# problems supporting passive transfer. If you are in such
|
||||
# environment, use "passive_ftp = off" to revert to active FTP.
|
||||
#passive_ftp = off
|
||||
|
||||
# The "wait" command below makes Wget wait between every connection.
|
||||
# If, instead, you want Wget to wait only between retries of failed
|
||||
# downloads, set waitretry to maximum number of seconds to wait (Wget
|
||||
# will use "linear backoff", waiting 1 second after the first failure
|
||||
# on a file, 2 seconds after the second failure, etc. up to this max).
|
||||
#waitretry = 10
|
||||
|
||||
|
||||
##
|
||||
## Local settings (for a user to set in his $HOME/.wgetrc). It is
|
||||
## *highly* undesirable to put these settings in the global file, since
|
||||
## they are potentially dangerous to "normal" users.
|
||||
##
|
||||
## Even when setting up your own ~/.wgetrc, you should know what you
|
||||
## are doing before doing so.
|
||||
##
|
||||
|
||||
# Set this to on to use timestamping by default:
|
||||
#timestamping = off
|
||||
|
||||
# It is a good idea to make Wget send your email address in a `From:'
|
||||
# header with your request (so that server administrators can contact
|
||||
# you in case of errors). Wget does *not* send `From:' by default.
|
||||
#header = From: Your Name <username@site.domain>
|
||||
|
||||
# You can set up other headers, like Accept-Language. Accept-Language
|
||||
# is *not* sent by default.
|
||||
#header = Accept-Language: en
|
||||
|
||||
# You can set the default proxies for Wget to use for http, https, and ftp.
|
||||
# They will override the value in the environment.
|
||||
#https_proxy = http://proxy.yoyodyne.com:18023/
|
||||
#http_proxy = http://proxy.yoyodyne.com:18023/
|
||||
#ftp_proxy = http://proxy.yoyodyne.com:18023/
|
||||
|
||||
# If you do not want to use proxy at all, set this to off.
|
||||
#use_proxy = on
|
||||
|
||||
# You can customize the retrieval outlook. Valid options are default,
|
||||
# binary, mega and micro.
|
||||
#dot_style = default
|
||||
|
||||
# Setting this to off makes Wget not download /robots.txt. Be sure to
|
||||
# know *exactly* what /robots.txt is and how it is used before changing
|
||||
# the default!
|
||||
#robots = on
|
||||
|
||||
# It can be useful to make Wget wait between connections. Set this to
|
||||
# the number of seconds you want Wget to wait.
|
||||
#wait = 0
|
||||
|
||||
# You can force creating directory structure, even if a single is being
|
||||
# retrieved, by setting this to on.
|
||||
#dirstruct = off
|
||||
|
||||
# You can turn on recursive retrieving by default (don't do this if
|
||||
# you are not sure you know what it means) by setting this to on.
|
||||
#recursive = off
|
||||
|
||||
# To always back up file X as X.orig before converting its links (due
|
||||
# to -k / --convert-links / convert_links = on having been specified),
|
||||
# set this variable to on:
|
||||
#backup_converted = off
|
||||
|
||||
# To have Wget follow FTP links from HTML files by default, set this
|
||||
# to on:
|
||||
#follow_ftp = off
|
||||
|
||||
# To try ipv6 addresses first:
|
||||
#prefer-family = IPv6
|
||||
|
||||
# Set default IRI support state
|
||||
#iri = off
|
||||
|
||||
# Force the default system encoding
|
||||
#localencoding = UTF-8
|
||||
|
||||
# Force the default remote server encoding
|
||||
#remoteencoding = UTF-8
|
||||
|
||||
# Turn on to prevent following non-HTTPS links when in recursive mode
|
||||
#httpsonly = off
|
||||
|
||||
# Tune HTTPS security (auto, SSLv2, SSLv3, TLSv1, PFS)
|
||||
#secureprotocol = auto
|
137
doc/sample.wgetrc.munged_for_texi_inclusion
Normal file
137
doc/sample.wgetrc.munged_for_texi_inclusion
Normal file
|
@ -0,0 +1,137 @@
|
|||
###
|
||||
### Sample Wget initialization file .wgetrc
|
||||
###
|
||||
|
||||
## You can use this file to change the default behaviour of wget or to
|
||||
## avoid having to type many many command-line options. This file does
|
||||
## not contain a comprehensive list of commands -- look at the manual
|
||||
## to find out what you can put into this file. You can find this here:
|
||||
## $ info wget.info 'Startup File'
|
||||
## Or online here:
|
||||
## https://www.gnu.org/software/wget/manual/wget.html#Startup-File
|
||||
##
|
||||
## Wget initialization file can reside in /usr/local/etc/wgetrc
|
||||
## (global, for all users) or $HOME/.wgetrc (for a single user).
|
||||
##
|
||||
## To use the settings in this file, you will have to uncomment them,
|
||||
## as well as change them, in most cases, as the values on the
|
||||
## commented-out lines are the default values (e.g. "off").
|
||||
##
|
||||
## Command are case-, underscore- and minus-insensitive.
|
||||
## For example ftp_proxy, ftp-proxy and ftpproxy are the same.
|
||||
|
||||
|
||||
##
|
||||
## Global settings (useful for setting up in /usr/local/etc/wgetrc).
|
||||
## Think well before you change them, since they may reduce wget's
|
||||
## functionality, and make it behave contrary to the documentation:
|
||||
##
|
||||
|
||||
# You can set retrieve quota for beginners by specifying a value
|
||||
# optionally followed by 'K' (kilobytes) or 'M' (megabytes). The
|
||||
# default quota is unlimited.
|
||||
#quota = inf
|
||||
|
||||
# You can lower (or raise) the default number of retries when
|
||||
# downloading a file (default is 20).
|
||||
#tries = 20
|
||||
|
||||
# Lowering the maximum depth of the recursive retrieval is handy to
|
||||
# prevent newbies from going too "deep" when they unwittingly start
|
||||
# the recursive retrieval. The default is 5.
|
||||
#reclevel = 5
|
||||
|
||||
# By default Wget uses "passive FTP" transfer where the client
|
||||
# initiates the data connection to the server rather than the other
|
||||
# way around. That is required on systems behind NAT where the client
|
||||
# computer cannot be easily reached from the Internet. However, some
|
||||
# firewalls software explicitly supports active FTP and in fact has
|
||||
# problems supporting passive transfer. If you are in such
|
||||
# environment, use "passive_ftp = off" to revert to active FTP.
|
||||
#passive_ftp = off
|
||||
|
||||
# The "wait" command below makes Wget wait between every connection.
|
||||
# If, instead, you want Wget to wait only between retries of failed
|
||||
# downloads, set waitretry to maximum number of seconds to wait (Wget
|
||||
# will use "linear backoff", waiting 1 second after the first failure
|
||||
# on a file, 2 seconds after the second failure, etc. up to this max).
|
||||
#waitretry = 10
|
||||
|
||||
|
||||
##
|
||||
## Local settings (for a user to set in his $HOME/.wgetrc). It is
|
||||
## *highly* undesirable to put these settings in the global file, since
|
||||
## they are potentially dangerous to "normal" users.
|
||||
##
|
||||
## Even when setting up your own ~/.wgetrc, you should know what you
|
||||
## are doing before doing so.
|
||||
##
|
||||
|
||||
# Set this to on to use timestamping by default:
|
||||
#timestamping = off
|
||||
|
||||
# It is a good idea to make Wget send your email address in a `From:'
|
||||
# header with your request (so that server administrators can contact
|
||||
# you in case of errors). Wget does *not* send `From:' by default.
|
||||
#header = From: Your Name <username@@site.domain>
|
||||
|
||||
# You can set up other headers, like Accept-Language. Accept-Language
|
||||
# is *not* sent by default.
|
||||
#header = Accept-Language: en
|
||||
|
||||
# You can set the default proxies for Wget to use for http, https, and ftp.
|
||||
# They will override the value in the environment.
|
||||
#https_proxy = http://proxy.yoyodyne.com:18023/
|
||||
#http_proxy = http://proxy.yoyodyne.com:18023/
|
||||
#ftp_proxy = http://proxy.yoyodyne.com:18023/
|
||||
|
||||
# If you do not want to use proxy at all, set this to off.
|
||||
#use_proxy = on
|
||||
|
||||
# You can customize the retrieval outlook. Valid options are default,
|
||||
# binary, mega and micro.
|
||||
#dot_style = default
|
||||
|
||||
# Setting this to off makes Wget not download /robots.txt. Be sure to
|
||||
# know *exactly* what /robots.txt is and how it is used before changing
|
||||
# the default!
|
||||
#robots = on
|
||||
|
||||
# It can be useful to make Wget wait between connections. Set this to
|
||||
# the number of seconds you want Wget to wait.
|
||||
#wait = 0
|
||||
|
||||
# You can force creating directory structure, even if a single is being
|
||||
# retrieved, by setting this to on.
|
||||
#dirstruct = off
|
||||
|
||||
# You can turn on recursive retrieving by default (don't do this if
|
||||
# you are not sure you know what it means) by setting this to on.
|
||||
#recursive = off
|
||||
|
||||
# To always back up file X as X.orig before converting its links (due
|
||||
# to -k / --convert-links / convert_links = on having been specified),
|
||||
# set this variable to on:
|
||||
#backup_converted = off
|
||||
|
||||
# To have Wget follow FTP links from HTML files by default, set this
|
||||
# to on:
|
||||
#follow_ftp = off
|
||||
|
||||
# To try ipv6 addresses first:
|
||||
#prefer-family = IPv6
|
||||
|
||||
# Set default IRI support state
|
||||
#iri = off
|
||||
|
||||
# Force the default system encoding
|
||||
#localencoding = UTF-8
|
||||
|
||||
# Force the default remote server encoding
|
||||
#remoteencoding = UTF-8
|
||||
|
||||
# Turn on to prevent following non-HTTPS links when in recursive mode
|
||||
#httpsonly = off
|
||||
|
||||
# Tune HTTPS security (auto, SSLv2, SSLv3, TLSv1, PFS)
|
||||
#secureprotocol = auto
|
4
doc/stamp-vti
Normal file
4
doc/stamp-vti
Normal file
|
@ -0,0 +1,4 @@
|
|||
@set UPDATED 10 November 2024
|
||||
@set UPDATED-MONTH November 2024
|
||||
@set EDITION 1.25.0
|
||||
@set VERSION 1.25.0
|
453
doc/texi2pod.pl
Executable file
453
doc/texi2pod.pl
Executable file
|
@ -0,0 +1,453 @@
|
|||
#! /usr/bin/env perl
|
||||
|
||||
# Copyright (C) 1999-2001, 2003, 2007, 2009-2011, 2015, 2018-2024 Free
|
||||
# Software Foundation, Inc.
|
||||
|
||||
# This file is part of GCC.
|
||||
|
||||
# GCC is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 3, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# GCC is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with GCC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# This does trivial (and I mean _trivial_) conversion of Texinfo
|
||||
# markup to Perl POD format. It's intended to be used to extract
|
||||
# something suitable for a manpage from a Texinfo document.
|
||||
|
||||
use warnings;
|
||||
BEGIN { eval { require warnings; } and warnings->import; }
|
||||
|
||||
$output = 0;
|
||||
$skipping = 0;
|
||||
%sects = ();
|
||||
$section = "";
|
||||
@icstack = ();
|
||||
@endwstack = ();
|
||||
@skstack = ();
|
||||
@instack = ();
|
||||
$shift = "";
|
||||
%defs = ();
|
||||
$fnno = 1;
|
||||
$inf = "";
|
||||
$ibase = "";
|
||||
|
||||
while ($_ = shift) {
|
||||
if (/^-D(.*)$/) {
|
||||
if ($1 ne "") {
|
||||
$flag = $1;
|
||||
} else {
|
||||
$flag = shift;
|
||||
}
|
||||
$value = "";
|
||||
($flag, $value) = ($flag =~ /^([^=]+)(?:=(.+))?/);
|
||||
die "no flag specified for -D\n"
|
||||
unless $flag ne "";
|
||||
die "flags may only contain letters, digits, hyphens, dashes and underscores\n"
|
||||
unless $flag =~ /^[a-zA-Z0-9_-]+$/;
|
||||
$defs{$flag} = $value;
|
||||
} elsif (/^-/) {
|
||||
usage();
|
||||
} else {
|
||||
$in = $_, next unless defined $in;
|
||||
$out = $_, next unless defined $out;
|
||||
usage();
|
||||
}
|
||||
}
|
||||
|
||||
if (defined $in) {
|
||||
$inf = gensym();
|
||||
open($inf, "<$in") or die "opening \"$in\": $!\n";
|
||||
$ibase = $1 if $in =~ m|^(.+)/[^/]+$|;
|
||||
} else {
|
||||
$inf = \*STDIN;
|
||||
}
|
||||
|
||||
if (defined $out) {
|
||||
open(STDOUT, ">$out") or die "opening \"$out\": $!\n";
|
||||
}
|
||||
|
||||
while(defined $inf) {
|
||||
while(<$inf>) {
|
||||
# Certain commands are discarded without further processing.
|
||||
/^\@(?:
|
||||
[a-z]+index # @*index: useful only in complete manual
|
||||
|need # @need: useful only in printed manual
|
||||
|(?:end\s+)?group # @group .. @end group: ditto
|
||||
|page # @page: ditto
|
||||
|node # @node: useful only in .info file
|
||||
|(?:end\s+)?ifnottex # @ifnottex .. @end ifnottex: use contents
|
||||
)\b/x and next;
|
||||
|
||||
chomp;
|
||||
|
||||
# Look for filename and title markers.
|
||||
/^\@setfilename\s+([^.]+)/ and $fn = $1, next;
|
||||
/^\@settitle\s+([^.]+)/ and $tl = postprocess($1), next;
|
||||
|
||||
# Identify a man title but keep only the one we are interested in.
|
||||
/^\@c\s+man\s+title\s+([A-Za-z0-9-]+)\s+(.+)/ and do {
|
||||
if (exists $defs{$1}) {
|
||||
$fn = $1;
|
||||
$tl = postprocess($2);
|
||||
}
|
||||
next;
|
||||
};
|
||||
|
||||
# Look for blocks surrounded by @c man begin SECTION ... @c man end.
|
||||
# This really oughta be @ifman ... @end ifman and the like, but such
|
||||
# would require rev'ing all other Texinfo translators.
|
||||
/^\@c\s+man\s+begin\s+([A-Z]+)\s+([A-Za-z0-9-]+)/ and do {
|
||||
$output = 1 if exists $defs{$2};
|
||||
$sect = $1;
|
||||
next;
|
||||
};
|
||||
/^\@c\s+man\s+begin\s+([A-Z]+)/ and $sect = $1, $output = 1, next;
|
||||
/^\@c\s+man\s+end/ and do {
|
||||
$sects{$sect} = "" unless exists $sects{$sect};
|
||||
$sects{$sect} .= postprocess($section);
|
||||
$section = "";
|
||||
$output = 0;
|
||||
next;
|
||||
};
|
||||
|
||||
# handle variables
|
||||
/^\@set\s+([a-zA-Z0-9_-]+)\s*(.*)$/ and do {
|
||||
$defs{$1} = $2;
|
||||
next;
|
||||
};
|
||||
/^\@clear\s+([a-zA-Z0-9_-]+)/ and do {
|
||||
delete $defs{$1};
|
||||
next;
|
||||
};
|
||||
|
||||
next unless $output;
|
||||
|
||||
# Discard comments. (Can't do it above, because then we'd never see
|
||||
# @c man lines.)
|
||||
/^\@c\b/ and next;
|
||||
|
||||
# End-block handler goes up here because it needs to operate even
|
||||
# if we are skipping.
|
||||
/^\@end\s+([a-z]+)/ and do {
|
||||
# Ignore @end foo, where foo is not an operation which may
|
||||
# cause us to skip, if we are presently skipping.
|
||||
my $ended = $1;
|
||||
next if $skipping && $ended !~ /^(?:ifset|ifclear|ignore|menu|iftex|copying)$/;
|
||||
|
||||
die "\@end $ended without \@$ended at line $.\n" unless defined $endw;
|
||||
die "\@$endw ended by \@end $ended at line $.\n" unless $ended eq $endw;
|
||||
|
||||
$endw = pop @endwstack;
|
||||
|
||||
if ($ended =~ /^(?:ifset|ifclear|ignore|menu|iftex)$/) {
|
||||
$skipping = pop @skstack;
|
||||
next;
|
||||
} elsif ($ended =~ /^(?:example|smallexample|display)$/) {
|
||||
$shift = "";
|
||||
$_ = ""; # need a paragraph break
|
||||
} elsif ($ended =~ /^(?:itemize|enumerate|[fv]?table)$/) {
|
||||
$_ = "\n=back\n";
|
||||
$ic = pop @icstack;
|
||||
} else {
|
||||
die "unknown command \@end $ended at line $.\n";
|
||||
}
|
||||
};
|
||||
|
||||
# We must handle commands which can cause skipping even while we
|
||||
# are skipping, otherwise we will not process nested conditionals
|
||||
# correctly.
|
||||
/^\@ifset\s+([a-zA-Z0-9_-]+)/ and do {
|
||||
push @endwstack, $endw;
|
||||
push @skstack, $skipping;
|
||||
$endw = "ifset";
|
||||
$skipping = 1 unless exists $defs{$1};
|
||||
next;
|
||||
};
|
||||
|
||||
/^\@ifclear\s+([a-zA-Z0-9_-]+)/ and do {
|
||||
push @endwstack, $endw;
|
||||
push @skstack, $skipping;
|
||||
$endw = "ifclear";
|
||||
$skipping = 1 if exists $defs{$1};
|
||||
next;
|
||||
};
|
||||
|
||||
/^\@(ignore|menu|iftex|copying)\b/ and do {
|
||||
push @endwstack, $endw;
|
||||
push @skstack, $skipping;
|
||||
$endw = $1;
|
||||
$skipping = 1;
|
||||
next;
|
||||
};
|
||||
|
||||
next if $skipping;
|
||||
|
||||
# Character entities. First the ones that can be replaced by raw text
|
||||
# or discarded outright:
|
||||
s/\@copyright\{\}/(c)/g;
|
||||
s/\@dots\{\}/.../g;
|
||||
s/\@enddots\{\}/..../g;
|
||||
s/\@([.!? ])/$1/g;
|
||||
s/\@[:-]//g;
|
||||
s/\@bullet(?:\{\})?/*/g;
|
||||
s/\@TeX\{\}/TeX/g;
|
||||
s/\@pounds\{\}/\#/g;
|
||||
s/\@minus(?:\{\})?/-/g;
|
||||
s/\\,/,/g;
|
||||
|
||||
# Now the ones that have to be replaced by special escapes
|
||||
# (which will be turned back into text by unmunge())
|
||||
s/&/&/g;
|
||||
s/\@\@/&at;/g;
|
||||
s/\@\{/{/g;
|
||||
s/\@\}/}/g;
|
||||
|
||||
# Inside a verbatim block, handle @var specially.
|
||||
if ($shift ne "") {
|
||||
s/\@var\{([^\}]*)\}/<$1>/g;
|
||||
}
|
||||
|
||||
# POD doesn't interpret E<> inside a verbatim block.
|
||||
if ($shift eq "") {
|
||||
s/</</g;
|
||||
s/>/>/g;
|
||||
} else {
|
||||
s/</</g;
|
||||
s/>/>/g;
|
||||
}
|
||||
|
||||
# Single line command handlers.
|
||||
|
||||
/^\@include\s+(.+)$/ and do {
|
||||
push @instack, $inf;
|
||||
$inf = gensym();
|
||||
$file = postprocess($1);
|
||||
|
||||
# Try cwd and $ibase.
|
||||
open($inf, "<" . $file)
|
||||
or open($inf, "<" . $ibase . "/" . $file)
|
||||
or die "cannot open $file or $ibase/$file: $!\n";
|
||||
next;
|
||||
};
|
||||
|
||||
/^\@(?:section|unnumbered|unnumberedsec|center)\s+(.+)$/
|
||||
and $_ = "\n=head2 $1\n";
|
||||
/^\@subsection\s+(.+)$/
|
||||
and $_ = "\n=head3 $1\n";
|
||||
|
||||
# Block command handlers:
|
||||
/^\@itemize(?:\s+(\@[a-z]+|\*|-))?/ and do {
|
||||
push @endwstack, $endw;
|
||||
push @icstack, $ic;
|
||||
if (defined $1) {
|
||||
$ic = $1;
|
||||
} else {
|
||||
$ic = '@bullet';
|
||||
}
|
||||
$_ = "\n=over 4\n";
|
||||
$endw = "itemize";
|
||||
};
|
||||
|
||||
/^\@enumerate(?:\s+([a-zA-Z0-9]+))?/ and do {
|
||||
push @endwstack, $endw;
|
||||
push @icstack, $ic;
|
||||
if (defined $1) {
|
||||
$ic = $1 . ".";
|
||||
} else {
|
||||
$ic = "1.";
|
||||
}
|
||||
$_ = "\n=over 4\n";
|
||||
$endw = "enumerate";
|
||||
};
|
||||
|
||||
/^\@([fv]?table)\s+(\@[a-z]+)/ and do {
|
||||
push @endwstack, $endw;
|
||||
push @icstack, $ic;
|
||||
$endw = $1;
|
||||
$ic = $2;
|
||||
$ic =~ s/\@(?:samp|strong|key|gcctabopt|env)/B/;
|
||||
$ic =~ s/\@(?:code|kbd)/C/;
|
||||
$ic =~ s/\@(?:dfn|var|emph|cite|i)/I/;
|
||||
$ic =~ s/\@(?:file)/F/;
|
||||
$_ = "\n=over 4\n";
|
||||
};
|
||||
|
||||
/^\@((?:small)?example|display)/ and do {
|
||||
push @endwstack, $endw;
|
||||
$endw = $1;
|
||||
$shift = "\t";
|
||||
$_ = ""; # need a paragraph break
|
||||
};
|
||||
|
||||
/^\@itemx?\s*(.+)?$/ and do {
|
||||
if (defined $1) {
|
||||
my $thing = $1;
|
||||
if ($ic =~ /\@asis/) {
|
||||
$_ = "\n=item C<$thing>\n";
|
||||
} else {
|
||||
# Entity escapes prevent munging by the <> processing below.
|
||||
$_ = "\n=item $ic\<$thing\>\n";
|
||||
}
|
||||
} else {
|
||||
$_ = "\n=item $ic\n";
|
||||
$ic =~ y/A-Ya-y/B-Zb-z/;
|
||||
$ic =~ s/(\d+)/$1 + 1/eg;
|
||||
}
|
||||
};
|
||||
|
||||
$section .= $shift.$_."\n";
|
||||
}
|
||||
# End of current file.
|
||||
close($inf);
|
||||
$inf = pop @instack;
|
||||
}
|
||||
|
||||
die "No filename or title\n" unless defined $fn && defined $tl;
|
||||
|
||||
$sects{NAME} = "$fn \- $tl\n";
|
||||
$sects{FOOTNOTES} .= "=back\n" if exists $sects{FOOTNOTES};
|
||||
|
||||
print "=encoding utf-8\n\n";
|
||||
|
||||
for $sect (qw(NAME SYNOPSIS DESCRIPTION OPTIONS ENVIRONMENT EXITSTATUS
|
||||
FILES BUGS NOTES FOOTNOTES SEEALSO AUTHOR COPYRIGHT)) {
|
||||
if(exists $sects{$sect}) {
|
||||
$head = $sect;
|
||||
$head =~ s/SEEALSO/SEE ALSO/;
|
||||
$head =~ s/EXITSTATUS/EXIT STATUS/;
|
||||
print "=head1 $head\n\n";
|
||||
print scalar unmunge ($sects{$sect});
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub usage
|
||||
{
|
||||
die "usage: $0 [-D toggle...] [infile [outfile]]\n";
|
||||
}
|
||||
|
||||
sub postprocess
|
||||
{
|
||||
local $_ = $_[0];
|
||||
|
||||
# @value{foo} is replaced by whatever 'foo' is defined as.
|
||||
while (m/(\@value\{([a-zA-Z0-9_-]+)\})/g) {
|
||||
if (! exists $defs{$2}) {
|
||||
print STDERR "Option $2 not defined\n";
|
||||
s/\Q$1\E//;
|
||||
} else {
|
||||
$value = $defs{$2};
|
||||
s/\Q$1\E/$value/;
|
||||
}
|
||||
}
|
||||
|
||||
# Formatting commands.
|
||||
# Temporary escape for @r.
|
||||
s/\@r\{([^\}]*)\}/R<$1>/g;
|
||||
s/\@(?:dfn|var|emph|cite|i)\{([^\}]*)\}/I<$1>/g;
|
||||
s/\@(?:code|kbd)\{([^\}]*)\}/C<$1>/g;
|
||||
s/\@(?:gccoptlist|samp|strong|key|option|env|command|b)\{([^\}]*)\}/B<$1>/g;
|
||||
s/\@sc\{([^\}]*)\}/\U$1/g;
|
||||
s/\@file\{([^\}]*)\}/F<$1>/g;
|
||||
s/\@w\{([^\}]*)\}/S<$1>/g;
|
||||
s/\@(?:dmn|math)\{([^\}]*)\}/$1/g;
|
||||
|
||||
# keep references of the form @ref{...}, print them bold
|
||||
s/\@(?:ref)\{([^\}]*)\}/B<$1>/g;
|
||||
|
||||
# Change double single quotes to double quotes.
|
||||
s/''/"/g;
|
||||
s/``/"/g;
|
||||
|
||||
# Cross references are thrown away, as are @noindent and @refill.
|
||||
# (@noindent is impossible in .pod, and @refill is unnecessary.)
|
||||
# @* is also impossible in .pod; we discard it and any newline that
|
||||
# follows it. Similarly, our macro @gol must be discarded.
|
||||
|
||||
s/\(?\@xref\{(?:[^\}]*)\}(?:[^.<]|(?:<[^<>]*>))*\.\)?//g;
|
||||
s/\s+\(\@pxref\{(?:[^\}]*)\}\)//g;
|
||||
s/;\s+\@pxref\{(?:[^\}]*)\}//g;
|
||||
s/\@noindent\s*//g;
|
||||
s/\@refill//g;
|
||||
s/\@gol//g;
|
||||
s/\@\*\s*\n?//g;
|
||||
|
||||
# @uref can take one, two, or three arguments, with different
|
||||
# semantics each time. @url and @email are just like @uref with
|
||||
# one argument, for our purposes.
|
||||
s/\@(?:uref|url|email)\{([^\},]*)\}/<B<$1>>/g;
|
||||
s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g;
|
||||
s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g;
|
||||
|
||||
# Un-escape <> at this point.
|
||||
s/</</g;
|
||||
s/>/>/g;
|
||||
|
||||
# Now un-nest all B<>, I<>, R<>. Theoretically we could have
|
||||
# indefinitely deep nesting; in practice, one level suffices.
|
||||
1 while s/([BIR])<([^<>]*)([BIR])<([^<>]*)>/$1<$2>$3<$4>$1</g;
|
||||
|
||||
# Replace R<...> with bare ...; eliminate empty markup, B<>;
|
||||
# shift white space at the ends of [BI]<...> expressions outside
|
||||
# the expression.
|
||||
s/R<([^<>]*)>/$1/g;
|
||||
s/[BI]<>//g;
|
||||
s/([BI])<(\s+)([^>]+)>/$2$1<$3>/g;
|
||||
s/([BI])<([^>]+?)(\s+)>/$1<$2>$3/g;
|
||||
|
||||
# Extract footnotes. This has to be done after all other
|
||||
# processing because otherwise the regexp will choke on formatting
|
||||
# inside @footnote.
|
||||
while (/\@footnote/g) {
|
||||
s/\@footnote\{([^\}]+)\}/[$fnno]/;
|
||||
add_footnote($1, $fnno);
|
||||
$fnno++;
|
||||
}
|
||||
|
||||
return $_;
|
||||
}
|
||||
|
||||
sub unmunge
|
||||
{
|
||||
# Replace escaped symbols with their equivalents.
|
||||
local $_ = $_[0];
|
||||
|
||||
s/</E<lt>/g;
|
||||
s/>/E<gt>/g;
|
||||
s/{/\{/g;
|
||||
s/}/\}/g;
|
||||
s/&at;/\@/g;
|
||||
s/&/&/g;
|
||||
return $_;
|
||||
}
|
||||
|
||||
sub add_footnote
|
||||
{
|
||||
unless (exists $sects{FOOTNOTES}) {
|
||||
$sects{FOOTNOTES} = "\n=over 4\n\n";
|
||||
}
|
||||
|
||||
$sects{FOOTNOTES} .= "=item $fnno.\n\n"; $fnno++;
|
||||
$sects{FOOTNOTES} .= $_[0];
|
||||
$sects{FOOTNOTES} .= "\n\n";
|
||||
}
|
||||
|
||||
# stolen from Symbol.pm
|
||||
{
|
||||
my $genseq = 0;
|
||||
sub gensym
|
||||
{
|
||||
my $name = "GEN" . $genseq++;
|
||||
my $ref = \*{$name};
|
||||
delete $::{$name};
|
||||
return $ref;
|
||||
}
|
||||
}
|
4
doc/version.texi
Normal file
4
doc/version.texi
Normal file
|
@ -0,0 +1,4 @@
|
|||
@set UPDATED 10 November 2024
|
||||
@set UPDATED-MONTH November 2024
|
||||
@set EDITION 1.25.0
|
||||
@set VERSION 1.25.0
|
5100
doc/wget.info
Normal file
5100
doc/wget.info
Normal file
File diff suppressed because it is too large
Load diff
4694
doc/wget.texi
Normal file
4694
doc/wget.texi
Normal file
File diff suppressed because it is too large
Load diff
122
fuzz/Makefile.am
Normal file
122
fuzz/Makefile.am
Normal file
|
@ -0,0 +1,122 @@
|
|||
AM_CFLAGS = $(WERROR_CFLAGS) $(WARN_CFLAGS) $(CODE_COVERAGE_CFLAGS)
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/src -I$(srcdir) -I$(top_builddir)/lib -I$(top_srcdir)/lib \
|
||||
$(CODE_COVERAGE_CPPFLAGS) \
|
||||
-DSRCDIR=\"$(abs_srcdir)\"
|
||||
LDADD = ../lib/libgnu.a \
|
||||
$(CLOCK_TIME_LIB) \
|
||||
$(GETADDRINFO_LIB) \
|
||||
$(GETRANDOM_LIB) \
|
||||
$(HARD_LOCALE_LIB) \
|
||||
$(HOSTENT_LIB) \
|
||||
$(INET_NTOP_LIB) \
|
||||
$(LIBSOCKET) \
|
||||
$(LIBTHREAD) \
|
||||
$(LIB_CRYPTO) \
|
||||
$(LIBC32CONV) \
|
||||
$(LIBICONV) \
|
||||
$(LIBINTL) \
|
||||
$(LIBUNISTRING) \
|
||||
$(MBRTOWC_LIB) \
|
||||
$(NANOSLEEP_LIB) \
|
||||
$(POSIX_SPAWN_LIB) \
|
||||
$(PTHREAD_SIGMASK_LIB) \
|
||||
$(SELECT_LIB) \
|
||||
$(SERVENT_LIB) \
|
||||
$(SETLOCALE_NULL_LIB) \
|
||||
$(FUZZ_LIBS) $(CODE_COVERAGE_LIBS)
|
||||
|
||||
WGET_TESTS = \
|
||||
wget_cookie_fuzzer$(EXEEXT) \
|
||||
wget_css_fuzzer$(EXEEXT) \
|
||||
wget_ftpls_fuzzer$(EXEEXT) \
|
||||
wget_html_fuzzer$(EXEEXT) \
|
||||
wget_netrc_fuzzer$(EXEEXT) \
|
||||
wget_options_fuzzer$(EXEEXT) \
|
||||
wget_progress_fuzzer$(EXEEXT) \
|
||||
wget_read_hunk_fuzzer$(EXEEXT) \
|
||||
wget_robots_fuzzer$(EXEEXT) \
|
||||
wget_url_fuzzer$(EXEEXT)
|
||||
|
||||
EXTRA_DIST = test-runner.sh
|
||||
|
||||
if WITH_NTLM
|
||||
WGET_TESTS += wget_ntlm_fuzzer$(EXEEXT)
|
||||
endif
|
||||
|
||||
if FUZZING
|
||||
bin_PROGRAMS = $(WGET_TESTS)
|
||||
LDADD += $(LIB_FUZZING_ENGINE)
|
||||
MAIN = fuzzer.h
|
||||
# AM_LDFLAGS = -no-install -all-static
|
||||
else
|
||||
AM_CPPFLAGS += -DTEST_RUN
|
||||
AM_TESTS_ENVIRONMENT = export VALGRIND_TESTS"=@VALGRIND_TESTS@";
|
||||
LOG_COMPILER = $(top_srcdir)/fuzz/test-runner.sh
|
||||
TESTS = $(WGET_TESTS)
|
||||
check_PROGRAMS = $(WGET_TESTS)
|
||||
MAIN = main.c fuzzer.h
|
||||
endif
|
||||
|
||||
# Make libunittest "PHONY" so we're always sure we're up-to-date.
|
||||
.PHONY: ../src/libunittest.a
|
||||
../src/libunittest.a:
|
||||
$(MAKE) $(AM_MAKEFLAGS) -C ../src libunittest.a
|
||||
|
||||
wget_cookie_fuzzer_SOURCES = wget_cookie_fuzzer.c $(MAIN)
|
||||
wget_cookie_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_css_fuzzer_SOURCES = wget_css_fuzzer.c $(MAIN)
|
||||
wget_css_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_ftpls_fuzzer_SOURCES = wget_ftpls_fuzzer.c $(MAIN)
|
||||
wget_ftpls_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_html_fuzzer_SOURCES = wget_html_fuzzer.c $(MAIN)
|
||||
wget_html_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_netrc_fuzzer_SOURCES = wget_netrc_fuzzer.c $(MAIN)
|
||||
wget_netrc_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_ntlm_fuzzer_SOURCES = wget_ntlm_fuzzer.c $(MAIN)
|
||||
wget_ntlm_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_options_fuzzer_SOURCES = wget_options_fuzzer.c $(MAIN)
|
||||
wget_options_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_progress_fuzzer_SOURCES = wget_progress_fuzzer.c $(MAIN)
|
||||
wget_progress_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_read_hunk_fuzzer_SOURCES = wget_read_hunk_fuzzer.c $(MAIN)
|
||||
wget_read_hunk_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_robots_fuzzer_SOURCES = wget_robots_fuzzer.c $(MAIN)
|
||||
wget_robots_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
wget_url_fuzzer_SOURCES = wget_url_fuzzer.c $(MAIN)
|
||||
wget_url_fuzzer_LDADD = ../src/libunittest.a $(LDADD)
|
||||
|
||||
#EXTRA_DIST = $(wildcard *.options) $(wildcard *.dict) \
|
||||
# $(wildcard *.in) $(wildcard *.repro)
|
||||
|
||||
dist-hook:
|
||||
find $(srcdir) -name '*.options' -exec cp -v '{}' $(distdir) ';'
|
||||
find $(srcdir) -name '*.dict' -exec cp -v '{}' $(distdir) ';'
|
||||
# find $(srcdir) -name '*.in' -exec cp -vr '{}' $(distdir) ';'
|
||||
find $(srcdir) -name '*.repro' -exec cp -vr '{}' $(distdir) ';'
|
||||
|
||||
clean-local:
|
||||
rm -rf *.gc?? *.log lcov
|
||||
|
||||
oss-fuzz:
|
||||
if test "$$OUT" != ""; then \
|
||||
XLIBS="-lpsl -lgnutls -lhogweed -lnettle -lgmp -lidn2 -lunistring -lz"; \
|
||||
for ccfile in wget*_fuzzer.c; do \
|
||||
fuzzer=$$(basename $$ccfile .c); \
|
||||
$$CC $$CFLAGS -I$(top_srcdir)/src -I$(top_srcdir) -I$(top_srcdir)/lib \
|
||||
"$${fuzzer}.c" -o "$${fuzzer}" \
|
||||
../src/libunittest.a ../lib/libgnu.a $${LIB_FUZZING_ENGINE} \
|
||||
-Wl,-Bstatic $${XLIBS} -Wl,-Bdynamic; \
|
||||
done; \
|
||||
fi
|
||||
|
||||
.PHONY: oss-fuzz
|
3113
fuzz/Makefile.in
Normal file
3113
fuzz/Makefile.in
Normal file
File diff suppressed because it is too large
Load diff
83
fuzz/README.md
Normal file
83
fuzz/README.md
Normal file
|
@ -0,0 +1,83 @@
|
|||
# Fuzzers
|
||||
|
||||
These are fuzzers designed for use with `libFuzzer` or `afl`. They can
|
||||
be used to run on Google's OSS-Fuzz (https://github.com/google/oss-fuzz/).
|
||||
|
||||
The convention used here is that the initial values for each parser fuzzer
|
||||
are taken from the $NAME.in directory.
|
||||
|
||||
Crash reproducers from OSS-Fuzz are put into $NAME.repro directory for
|
||||
regression testing with top dir 'make check' or 'make check-valgrind'.
|
||||
|
||||
|
||||
# Running a fuzzer using clang
|
||||
|
||||
Use the following commands on top dir:
|
||||
```
|
||||
export CC=clang
|
||||
# address sanitizer:
|
||||
#export CFLAGS="-O1 -g -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=undefined,integer,nullability -fsanitize=address -fsanitize-address-use-after-scope -fsanitize-coverage=trace-pc-guard,trace-cmp"
|
||||
export CFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=undefined -fsanitize=address -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link"
|
||||
# undefined sanitizer;
|
||||
export CFLAGS="-O1 -fno-omit-frame-pointer -gline-tables-only -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=bool,array-bounds,float-divide-by-zero,function,integer-divide-by-zero,return,shift,signed-integer-overflow,vla-bound,vptr -fno-sanitize-recover=bool,array-bounds,float-divide-by-zero,function,integer-divide-by-zero,return,shift,signed-integer-overflow,vla-bound,vptr -fsanitize=fuzzer-no-link"
|
||||
export LIB_FUZZING_ENGINE="-lFuzzer -lstdc++"
|
||||
./configure --enable-fuzzing --without-metalink --without-zlib --disable-pcre --without-libuuid --enable-assert
|
||||
make clean
|
||||
make -j$(nproc)
|
||||
cd fuzz
|
||||
|
||||
# run wget_options_fuzzer
|
||||
UBSAN_OPTIONS=print_stacktrace=1 ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer \
|
||||
./run-clang.sh wget_options_fuzzer
|
||||
```
|
||||
|
||||
If you see a crash, then a crash corpora is written that can be used for further
|
||||
investigation. E.g.
|
||||
```
|
||||
==2410==ERROR: AddressSanitizer: heap-use-after-free on address 0x602000004e90 at pc 0x00000049cf9c bp 0x7fffb5543f70 sp 0x7fffb5543720
|
||||
...
|
||||
Test unit written to ./crash-adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
|
||||
```
|
||||
|
||||
To reproduce the crash:
|
||||
```
|
||||
./wget_options_fuzzer < ./crash-adc83b19e793491b1c6ea0fd8b46cd9f32e592fc
|
||||
```
|
||||
|
||||
You can also copy/move that file into wget_options_fuzzer.repro/
|
||||
and re-build the project without fuzzing for a valgrind run, if you like that better.
|
||||
Just a `./configure` and a `make check-valgrind` should reproduce it.
|
||||
|
||||
|
||||
# Running a fuzzer using AFL
|
||||
|
||||
Use the following commands on top dir:
|
||||
|
||||
```
|
||||
$ export LIB_FUZZING_ENGINE=""
|
||||
$ CC=afl-clang-fast ./configure --enable-fuzzing
|
||||
$ make -j$(nproc) clean all
|
||||
$ cd fuzz
|
||||
$ ./run-afl.sh wget_options_fuzzer
|
||||
```
|
||||
|
||||
# Fuzz code coverage using the corpus directories *.in/
|
||||
|
||||
Code coverage reports currently work best with gcc+lcov+genhtml.
|
||||
|
||||
In the top directory:
|
||||
```
|
||||
CC=gcc CFLAGS="-O0 -g" ./configure
|
||||
make fuzz-coverage
|
||||
xdg-open lcov/index.html
|
||||
```
|
||||
|
||||
To work on corpora for better coverage, `cd fuzz` and use e.g.
|
||||
`./view-coverage.sh wget_options_fuzzer`.
|
||||
|
||||
|
||||
# Creating wget_options_fuzzer.dict
|
||||
|
||||
```
|
||||
for i in `../src/wget --help|tr ' ' '\n'|grep ^--|cut -c 3-|sort`;do echo \"$i\"; done >wget_options_fuzzer.dict
|
||||
```
|
42
fuzz/fuzzer.h
Normal file
42
fuzz/fuzzer.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stddef.h> // size_t
|
||||
#include <stdint.h> // uint8_t
|
||||
|
||||
#if defined __clang__ || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
|
||||
#pragma GCC diagnostic ignored "-Wunused"
|
||||
#pragma GCC diagnostic ignored "-Wunused-parameter"
|
||||
#pragma GCC diagnostic ignored "-Wpedantic"
|
||||
#endif
|
||||
|
||||
#define CLOSE_STDERR \
|
||||
int bak = dup(STDERR_FILENO); \
|
||||
int fd = open("/dev/null", O_WRONLY); \
|
||||
dup2(fd, STDERR_FILENO); \
|
||||
close(fd);
|
||||
|
||||
#define RESTORE_STDERR \
|
||||
dup2(bak, STDERR_FILENO); \
|
||||
close(bak);
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
|
140
fuzz/main.c
Normal file
140
fuzz/main.c
Normal file
|
@ -0,0 +1,140 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
#include "fuzzer.h"
|
||||
#include "utils.h"
|
||||
|
||||
#ifdef TEST_RUN
|
||||
|
||||
#include <dirent.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
# define SLASH '\\'
|
||||
#else
|
||||
# define SLASH '/'
|
||||
#endif
|
||||
|
||||
static int test_all_from(const char *dirname)
|
||||
{
|
||||
DIR *dirp;
|
||||
|
||||
if ((dirp = opendir(dirname))) {
|
||||
struct dirent *dp;
|
||||
|
||||
while ((dp = readdir(dirp))) {
|
||||
if (*dp->d_name == '.') continue;
|
||||
|
||||
char fname[strlen(dirname) + strlen(dp->d_name) + 2];
|
||||
snprintf(fname, sizeof(fname), "%s/%s", dirname, dp->d_name);
|
||||
|
||||
struct file_memory *fmem;
|
||||
if ((fmem = wget_read_file(fname))) {
|
||||
printf("testing %ld bytes from '%s'\n", fmem->length, fname);
|
||||
fflush(stdout);
|
||||
LLVMFuzzerTestOneInput((uint8_t *)fmem->content, fmem->length);
|
||||
wget_read_file_free(fmem);
|
||||
}
|
||||
}
|
||||
closedir(dirp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const char *target;
|
||||
size_t target_len;
|
||||
|
||||
if ((target = strrchr(argv[0], SLASH))) {
|
||||
if (strrchr(target, '/'))
|
||||
target = strrchr(target, '/');
|
||||
} else
|
||||
target = strrchr(argv[0], '/');
|
||||
|
||||
target = target ? target + 1 : argv[0];
|
||||
|
||||
if (strncmp(target, "lt-", 3) == 0)
|
||||
target += 3;
|
||||
|
||||
target_len = strlen(target);
|
||||
|
||||
#ifdef _WIN32
|
||||
target_len -= 4; // ignore .exe
|
||||
#endif
|
||||
|
||||
{
|
||||
int rc;
|
||||
char corporadir[sizeof(SRCDIR) + 1 + target_len + 8];
|
||||
snprintf(corporadir, sizeof(corporadir), SRCDIR "/%.*s.in", (int) target_len, target);
|
||||
|
||||
rc = test_all_from(corporadir);
|
||||
if (rc)
|
||||
fprintf(stderr, "Failed to find %s\n", corporadir);
|
||||
|
||||
snprintf(corporadir, sizeof(corporadir), SRCDIR "/%.*s.repro", (int) target_len, target);
|
||||
if (test_all_from(corporadir) && rc)
|
||||
return 77; // SKIP
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#ifndef __AFL_LOOP
|
||||
static int __AFL_LOOP(int n)
|
||||
{
|
||||
static int first = 1;
|
||||
|
||||
if (first) {
|
||||
first = 0;
|
||||
return n && --n > 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
int ret;
|
||||
unsigned char buf[64 * 1024];
|
||||
|
||||
while (__AFL_LOOP(10000)) { // only works with clang - we have to use 1 because static/global vars in wget
|
||||
ret = fread(buf, 1, sizeof(buf), stdin);
|
||||
if (ret < 0)
|
||||
return 0;
|
||||
|
||||
LLVMFuzzerTestOneInput(buf, ret);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* #ifdef TEST_RUN */
|
9
fuzz/test-runner.sh
Executable file
9
fuzz/test-runner.sh
Executable file
|
@ -0,0 +1,9 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
WRAPPER=""
|
||||
|
||||
if [ -n "$VALGRIND_TESTS" ]; then
|
||||
WRAPPER="valgrind --error-exitcode=301 --leak-check=yes --show-reachable=yes --track-origins=yes"
|
||||
fi
|
||||
|
||||
exec $WRAPPER "$@"
|
92
fuzz/wget_cookie_fuzzer.c
Normal file
92
fuzz/wget_cookie_fuzzer.c
Normal file
|
@ -0,0 +1,92 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h> // opendir, readdir
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
|
||||
#include "wget.h"
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "cookies.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
struct cookie_jar *cookie_jar;
|
||||
char *set_cookie;
|
||||
|
||||
if (size > 1024) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
set_cookie = (char *) malloc(size + 1);
|
||||
memcpy(set_cookie, data, size);
|
||||
set_cookie[size] = 0;
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
cookie_jar = cookie_jar_new();
|
||||
cookie_handle_set_cookie(cookie_jar, "x", 81, "p", set_cookie);
|
||||
cookie_handle_set_cookie(cookie_jar, "x", 81, "p", set_cookie);
|
||||
cookie_handle_set_cookie(cookie_jar, "x", 80, "p/d/", set_cookie);
|
||||
cookie_jar_delete(cookie_jar);
|
||||
|
||||
RESTORE_STDERR
|
||||
|
||||
free(set_cookie);
|
||||
|
||||
return 0;
|
||||
}
|
6
fuzz/wget_cookie_fuzzer.dict
Normal file
6
fuzz/wget_cookie_fuzzer.dict
Normal file
|
@ -0,0 +1,6 @@
|
|||
tag1="expires="
|
||||
tag2="path="
|
||||
tag3="domain="
|
||||
tag4="httponly"
|
||||
tag5="secure"
|
||||
tag6="max-age"
|
121
fuzz/wget_css_fuzzer.c
Normal file
121
fuzz/wget_css_fuzzer.c
Normal file
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h> // opendir, readdir
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
#include <setjmp.h> // longjmp, setjmp
|
||||
|
||||
#include "wget.h"
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "html-url.h"
|
||||
#include "css-url.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
static const uint8_t *g_data;
|
||||
static size_t g_size;
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
#ifdef HAVE_FMEMOPEN
|
||||
return fmemopen((void *) g_data, g_size, mode);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static int do_jump;
|
||||
static jmp_buf jmpbuf;
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
longjmp(jmpbuf, 1);
|
||||
}
|
||||
#elif defined HAVE_DLFCN_H
|
||||
#include <dlfcn.h> // dlsym
|
||||
#ifndef RTLD_NEXT
|
||||
#define RTLD_NEXT RTLD_GLOBAL
|
||||
#endif
|
||||
void exit(int status)
|
||||
{
|
||||
if (do_jump) {
|
||||
longjmp(jmpbuf, 1);
|
||||
} else {
|
||||
void (*libc_exit)(int) = (void(*)(int)) dlsym (RTLD_NEXT, "exit");
|
||||
libc_exit(status);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
if (size > 4096) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
struct map_context ctx = {
|
||||
.text = (char *) data,
|
||||
.parent_base = strdup("https://x.y"),
|
||||
.document_file = NULL,
|
||||
};
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
do_jump = 1;
|
||||
|
||||
if (setjmp(jmpbuf))
|
||||
goto done;
|
||||
|
||||
get_urls_css(&ctx, 0, size);
|
||||
free_urlpos(ctx.head);
|
||||
free((void *) ctx.parent_base);
|
||||
|
||||
done:
|
||||
do_jump = 0;
|
||||
|
||||
RESTORE_STDERR
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
#/*url( */ url()
|
|
@ -0,0 +1 @@
|
|||
@import
|
BIN
fuzz/wget_css_fuzzer.repro/slowness-6275836549267456
Normal file
BIN
fuzz/wget_css_fuzzer.repro/slowness-6275836549267456
Normal file
Binary file not shown.
127
fuzz/wget_ftpls_fuzzer.c
Normal file
127
fuzz/wget_ftpls_fuzzer.c
Normal file
|
@ -0,0 +1,127 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h> // opendir, readdir
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
#include <setjmp.h> // longjmp, setjmp
|
||||
|
||||
#include "wget.h"
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "ftp.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int do_jump;
|
||||
static jmp_buf jmpbuf;
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
longjmp(jmpbuf, 1);
|
||||
}
|
||||
#elif defined HAVE_DLFCN_H
|
||||
#include <dlfcn.h> // dlsym
|
||||
#ifndef RTLD_NEXT
|
||||
#define RTLD_NEXT RTLD_GLOBAL
|
||||
#endif
|
||||
void exit(int status)
|
||||
{
|
||||
if (do_jump) {
|
||||
longjmp(jmpbuf, 1);
|
||||
} else {
|
||||
void (*libc_exit)(int) = (void(*)(int)) dlsym (RTLD_NEXT, "exit");
|
||||
libc_exit(status);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
#ifdef HAVE_FMEMOPEN
|
||||
FILE *fp;
|
||||
struct fileinfo *fi;
|
||||
|
||||
if (size > 4096) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
fp = fmemopen((void *) data, size, "r");
|
||||
if (!fp) return 0;
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
do_jump = 1;
|
||||
|
||||
if (setjmp(jmpbuf))
|
||||
goto done;
|
||||
|
||||
fi = ftp_parse_ls_fp(fp, ST_UNIX);
|
||||
freefileinfo(fi);
|
||||
rewind(fp);
|
||||
|
||||
fi = ftp_parse_ls_fp(fp, ST_VMS);
|
||||
freefileinfo(fi);
|
||||
rewind(fp);
|
||||
|
||||
fi = ftp_parse_ls_fp(fp, ST_WINNT);
|
||||
freefileinfo(fi);
|
||||
rewind(fp);
|
||||
|
||||
fi = ftp_parse_ls_fp(fp, ST_MACOS);
|
||||
|
||||
done:
|
||||
freefileinfo(fi);
|
||||
fclose(fp);
|
||||
|
||||
do_jump = 0;
|
||||
|
||||
RESTORE_STDERR
|
||||
#endif
|
||||
return 0;
|
||||
}
|
20
fuzz/wget_ftpls_fuzzer.dict
Normal file
20
fuzz/wget_ftpls_fuzzer.dict
Normal file
|
@ -0,0 +1,20 @@
|
|||
"Jan"
|
||||
"Feb"
|
||||
"Mar"
|
||||
"Apr"
|
||||
"May"
|
||||
"Jun"
|
||||
"Jul"
|
||||
"Aug"
|
||||
"Sep"
|
||||
"Oct"
|
||||
"Nov"
|
||||
"Dec"
|
||||
"total"
|
||||
"0644"
|
||||
"0755"
|
||||
" -> "
|
||||
".."
|
||||
"Total of "
|
||||
".DIR"
|
||||
".DIR;1"
|
97
fuzz/wget_html_fuzzer.c
Normal file
97
fuzz/wget_html_fuzzer.c
Normal file
|
@ -0,0 +1,97 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h> // opendir, readdir
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
#include <setjmp.h> // longjmp, setjmp
|
||||
|
||||
#include "wget.h"
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "utils.h"
|
||||
#include "html-url.h"
|
||||
#include "css-url.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
static const uint8_t *g_data;
|
||||
static size_t g_size;
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
#ifdef HAVE_FMEMOPEN
|
||||
return fmemopen((void *) g_data, g_size, mode);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
struct urlpos *urls;
|
||||
struct file_memory fm;
|
||||
|
||||
if (size > 4096) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
fm.content = (char *) data;
|
||||
fm.length = size;
|
||||
fm.mmap_p = 0;
|
||||
|
||||
urls = get_urls_html_fm("xxx", &fm, "https://x.y", NULL, NULL);
|
||||
free_urlpos(urls);
|
||||
|
||||
RESTORE_STDERR
|
||||
|
||||
return 0;
|
||||
}
|
22
fuzz/wget_html_fuzzer.dict
Normal file
22
fuzz/wget_html_fuzzer.dict
Normal file
|
@ -0,0 +1,22 @@
|
|||
"<base"
|
||||
"<link"
|
||||
"<meta"
|
||||
"action"
|
||||
"href"
|
||||
"src"
|
||||
"srcset"
|
||||
"style"
|
||||
"follow"
|
||||
"nofollow"
|
||||
"all"
|
||||
"none"
|
||||
"robots="
|
||||
"name=\"robots\""
|
||||
"content="
|
||||
"http-equiv=\"Content-Type\""
|
||||
"charset="
|
||||
"style="
|
||||
"rel=\"shortcut icon\""
|
||||
"rel=\"stylesheet\""
|
||||
"rel=\"preload\""
|
||||
"srcset="
|
124
fuzz/wget_netrc_fuzzer.c
Normal file
124
fuzz/wget_netrc_fuzzer.c
Normal file
|
@ -0,0 +1,124 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <setjmp.h> // longjmp, setjmp
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
|
||||
#include "wget.h"
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "netrc.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int do_jump;
|
||||
static jmp_buf jmpbuf;
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
longjmp(jmpbuf, 1);
|
||||
}
|
||||
#elif defined HAVE_DLFCN_H
|
||||
#include <dlfcn.h> // dlsym
|
||||
#ifndef RTLD_NEXT
|
||||
#define RTLD_NEXT RTLD_GLOBAL
|
||||
#endif
|
||||
void exit(int status)
|
||||
{
|
||||
if (do_jump) {
|
||||
longjmp(jmpbuf, 1);
|
||||
} else {
|
||||
void (*libc_exit)(int) = (void(*)(int)) dlsym (RTLD_NEXT, "exit");
|
||||
libc_exit(status);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
#ifdef HAVE_FMEMOPEN
|
||||
FILE *fp;
|
||||
struct fileinfo *fi;
|
||||
const char *user = NULL, *pw = NULL;
|
||||
|
||||
if (size > 4096) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
fp = fmemopen((void *) data, size, "r");
|
||||
if (!fp) return 0;
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
do_jump = 1;
|
||||
|
||||
if (setjmp(jmpbuf))
|
||||
goto done;
|
||||
|
||||
opt.netrc = 1;
|
||||
|
||||
user = NULL; // get first entry
|
||||
search_netrc("x", &user, &pw, 1, fp);
|
||||
netrc_cleanup();
|
||||
|
||||
user = "u"; // get entry for user 'u'
|
||||
search_netrc("x", &user, &pw, 1, fp);
|
||||
|
||||
done:
|
||||
netrc_cleanup();
|
||||
|
||||
fclose(fp);
|
||||
|
||||
do_jump = 0;
|
||||
|
||||
RESTORE_STDERR
|
||||
|
||||
#endif
|
||||
return 0;
|
||||
}
|
8
fuzz/wget_netrc_fuzzer.dict
Normal file
8
fuzz/wget_netrc_fuzzer.dict
Normal file
|
@ -0,0 +1,8 @@
|
|||
"machine"
|
||||
"default"
|
||||
"login"
|
||||
"password"
|
||||
"macdef"
|
||||
"account"
|
||||
"port"
|
||||
"force"
|
101
fuzz/wget_ntlm_fuzzer.c
Normal file
101
fuzz/wget_ntlm_fuzzer.c
Normal file
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2019, 2021-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h> // opendir, readdir
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
#include <setjmp.h> // longjmp, setjmp
|
||||
#include <assert.h> // assert
|
||||
|
||||
#include "wget.h"
|
||||
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "http-ntlm.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
(void) pathname;
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
(void) pathname;
|
||||
(void) mode;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
(void) status;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
if (size > 128) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
// CLOSE_STDERR
|
||||
|
||||
struct ntlmdata *ntlm = (struct ntlmdata *) calloc(1, sizeof(struct ntlmdata));
|
||||
char *data0 = (char *) malloc(size + 4 + 1);
|
||||
bool ready;
|
||||
|
||||
assert(ntlm && data0);
|
||||
|
||||
memcpy(data0, "NTLM", 4);
|
||||
memcpy(data0 + 4, data, size);
|
||||
data0[size + 4] = 0;
|
||||
|
||||
if (ntlm_input(ntlm, data0))
|
||||
free(ntlm_output(ntlm, data0 + 4, data0 + 4, &ready));
|
||||
|
||||
free(data0);
|
||||
free(ntlm);
|
||||
|
||||
// RESTORE_STDERR
|
||||
|
||||
return 0;
|
||||
}
|
137
fuzz/wget_options_fuzzer.c
Normal file
137
fuzz/wget_options_fuzzer.c
Normal file
|
@ -0,0 +1,137 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h> // opendir, readdir
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
#include <setjmp.h> // longjmp, setjmp
|
||||
#include <stdbool.h> // longjmp, setjmp
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
static const uint8_t *g_data;
|
||||
static size_t g_size;
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
#ifdef HAVE_FMEMOPEN
|
||||
return fmemopen((void *) g_data, g_size, mode);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool fuzzing;
|
||||
static jmp_buf jmpbuf;
|
||||
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
longjmp(jmpbuf, 1);
|
||||
}
|
||||
#endif
|
||||
#if defined HAVE_DLFCN_H
|
||||
#include <dlfcn.h> // dlsym
|
||||
#include <dlfcn.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netdb.h>
|
||||
#if defined __OpenBSD__ || defined __FreeBSD__
|
||||
#include <netinet/in.h>
|
||||
#endif
|
||||
#ifndef RTLD_NEXT
|
||||
#define RTLD_NEXT RTLD_GLOBAL
|
||||
#endif
|
||||
void exit(int status)
|
||||
{
|
||||
if (fuzzing) {
|
||||
longjmp(jmpbuf, 1);
|
||||
} else {
|
||||
void (*libc_exit)(int) = (void(*)(int)) dlsym (RTLD_NEXT, "exit");
|
||||
libc_exit(status);
|
||||
}
|
||||
}
|
||||
// Work-around linker issue "multiple definition of `getaddrinfo'"
|
||||
#ifdef _WIN32
|
||||
__attribute__ ((weak))
|
||||
#endif
|
||||
int getaddrinfo(const char *node, const char *service, const struct addrinfo *hints, struct addrinfo **res)
|
||||
{
|
||||
if (fuzzing) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
int(*libc_getaddrinfo)(const char *, const char *, const struct addrinfo *, struct addrinfo **) =
|
||||
(int(*)(const char *, const char *, const struct addrinfo *, struct addrinfo **)) dlsym (RTLD_NEXT, "getaddrinfo");
|
||||
|
||||
return libc_getaddrinfo(node, service, hints, res);
|
||||
}
|
||||
#endif
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
static const char *argv[] = { "wget", "-q" };
|
||||
|
||||
if (size > 2048) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
g_data = data;
|
||||
g_size = size;
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
fuzzing = true;
|
||||
|
||||
if (setjmp(jmpbuf)) {
|
||||
cleanup();
|
||||
goto done;
|
||||
}
|
||||
|
||||
main_wget(sizeof(argv)/sizeof(argv[0]), argv);
|
||||
|
||||
done:
|
||||
fuzzing = false;
|
||||
|
||||
RESTORE_STDERR
|
||||
|
||||
return 0;
|
||||
}
|
195
fuzz/wget_options_fuzzer.dict
Normal file
195
fuzz/wget_options_fuzzer.dict
Normal file
|
@ -0,0 +1,195 @@
|
|||
"--"
|
||||
"no-"
|
||||
"on"
|
||||
"off"
|
||||
"="
|
||||
"PEM"
|
||||
"DER"
|
||||
"ASN1"
|
||||
"INF"
|
||||
"INFINITY"
|
||||
"1"
|
||||
"1k"
|
||||
"1m"
|
||||
"1g"
|
||||
"1t"
|
||||
"1s"
|
||||
"1m"
|
||||
"1h"
|
||||
"1d"
|
||||
"hard"
|
||||
"soft"
|
||||
"none"
|
||||
"ipv4"
|
||||
"ipv6"
|
||||
"bar"
|
||||
"posix"
|
||||
"pcre"
|
||||
"bytes"
|
||||
"bits"
|
||||
"human"
|
||||
"csv"
|
||||
"json"
|
||||
"accept="
|
||||
"accept-regex="
|
||||
"adjust-extension="
|
||||
"append-output="
|
||||
"ask-password="
|
||||
"auth-no-challenge="
|
||||
"backup-converted="
|
||||
"backups="
|
||||
"base="
|
||||
"bind-address="
|
||||
"ca-certificate="
|
||||
"cache="
|
||||
"ca-directory="
|
||||
"certificate="
|
||||
"certificate-type="
|
||||
"check-certificate="
|
||||
"check-hostname="
|
||||
"chunk-size="
|
||||
"clobber="
|
||||
"config="
|
||||
"connect-timeout="
|
||||
"content-disposition="
|
||||
"content-on-error="
|
||||
"continue="
|
||||
"convert-links="
|
||||
"cookies="
|
||||
"cookie-suffixes="
|
||||
"crl-file="
|
||||
"cut-dirs="
|
||||
"cut-file-get-vars="
|
||||
"cut-url-get-vars="
|
||||
"debug="
|
||||
"default-page="
|
||||
"delete-after="
|
||||
"directories="
|
||||
"directory-prefix="
|
||||
"dns-caching="
|
||||
"dns-timeout="
|
||||
"domains="
|
||||
"egd-file="
|
||||
"exclude-domains="
|
||||
"execute="
|
||||
"filter-mime-type="
|
||||
"filter-urls="
|
||||
"follow-tags="
|
||||
"force-atom="
|
||||
"force-css="
|
||||
"force-directories="
|
||||
"force-html="
|
||||
"force-metalink="
|
||||
"force-progress="
|
||||
"force-rss="
|
||||
"force-sitemap="
|
||||
"fsync-policy="
|
||||
"gnupg-homedir="
|
||||
"gnutls-options="
|
||||
"header="
|
||||
"help="
|
||||
"host-directories="
|
||||
"hpkp="
|
||||
"hpkp-file="
|
||||
"hsts="
|
||||
"hsts-file="
|
||||
"html-extension="
|
||||
"http2="
|
||||
"http2-request-window="
|
||||
"http-keep-alive="
|
||||
"http-password="
|
||||
"http-proxy="
|
||||
"http-proxy-password="
|
||||
"http-proxy-user="
|
||||
"https-enforce="
|
||||
"https-only="
|
||||
"https-proxy="
|
||||
"http-user="
|
||||
"ignore-case="
|
||||
"ignore-tags="
|
||||
"inet4-only="
|
||||
"inet6-only="
|
||||
"input-encoding="
|
||||
"input-file="
|
||||
"iri="
|
||||
"keep-session-cookies="
|
||||
"level="
|
||||
"list-plugins="
|
||||
"load-cookies="
|
||||
"local-db="
|
||||
"local-encoding="
|
||||
"local-plugin="
|
||||
"max-redirect="
|
||||
"max-threads="
|
||||
"metalink="
|
||||
"mirror="
|
||||
"netrc="
|
||||
"netrc-file="
|
||||
"no-quiet="
|
||||
"ocsp="
|
||||
"ocsp-file="
|
||||
"ocsp-stapling="
|
||||
"output-document="
|
||||
"output-file="
|
||||
"page-requisites="
|
||||
"parent="
|
||||
"password="
|
||||
"plugin="
|
||||
"plugin-dirs="
|
||||
"plugin-help="
|
||||
"plugin-opt="
|
||||
"post-data="
|
||||
"post-file="
|
||||
"prefer-family="
|
||||
"private-key="
|
||||
"private-key-type="
|
||||
"progress="
|
||||
"protocol-directories="
|
||||
"proxy="
|
||||
"quiet="
|
||||
"quota="
|
||||
"random-file="
|
||||
"random-wait="
|
||||
"read-timeout="
|
||||
"recursive="
|
||||
"referer="
|
||||
"regex-type="
|
||||
"reject="
|
||||
"reject-regex="
|
||||
"remote-encoding="
|
||||
"report-speed="
|
||||
"restrict-file-names="
|
||||
"robots="
|
||||
"save-cookies="
|
||||
"save-headers="
|
||||
"secure-protocol="
|
||||
"server-response="
|
||||
"signature-extension="
|
||||
"span-hosts="
|
||||
"spider="
|
||||
"stats-all="
|
||||
"stats-dns="
|
||||
"stats-ocsp="
|
||||
"stats-server="
|
||||
"stats-site="
|
||||
"stats-tls="
|
||||
"strict-comments="
|
||||
"tcp-fastopen="
|
||||
"timeout="
|
||||
"timestamping="
|
||||
"tls-false-start="
|
||||
"tls-resume="
|
||||
"tls-session-file="
|
||||
"tries="
|
||||
"trust-server-names="
|
||||
"use-askpass="
|
||||
"user="
|
||||
"user-agent="
|
||||
"use-server-timestamps="
|
||||
"verbose="
|
||||
"verify-save-failed="
|
||||
"verify-sig="
|
||||
"version="
|
||||
"wait="
|
||||
"waitretry="
|
||||
"xattr="
|
142
fuzz/wget_progress_fuzzer.c
Normal file
142
fuzz/wget_progress_fuzzer.c
Normal file
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2019, 2021-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h> // opendir, readdir
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
#include <setjmp.h> // longjmp, setjmp
|
||||
|
||||
#include "wget.h"
|
||||
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "progress.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
(void) pathname;
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
(void) pathname;
|
||||
(void) mode;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
(void) status;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#define NAMEPOS (2 * sizeof(wgint) + sizeof(double))
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
void *progress;
|
||||
|
||||
if (size > 4096) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
if (size < NAMEPOS)
|
||||
return 0;
|
||||
|
||||
// CLOSE_STDERR
|
||||
|
||||
wgint start = ((wgint *) data)[0];
|
||||
wgint end = ((wgint *) data)[1];
|
||||
double dltime = ((wgint *) data)[2];
|
||||
|
||||
if (start < 0 || end < 0)
|
||||
return 0;
|
||||
|
||||
if (start > end) {
|
||||
wgint x = start;
|
||||
start = end;
|
||||
end = x;
|
||||
}
|
||||
|
||||
// double dltime = ((double *) (data + 2 * sizeof(wgint)))[0];
|
||||
|
||||
char *filename = strndup((char *) (data + NAMEPOS), size - NAMEPOS);
|
||||
|
||||
// printf("%ld %ld %lf %s\n", start, end, dltime, filename);
|
||||
|
||||
set_progress_implementation("bar:force"); // [:force][:noscroll]
|
||||
|
||||
progress = progress_create (filename, start, end);
|
||||
progress_update (progress, 0, dltime);
|
||||
progress_update (progress, end - start, dltime);
|
||||
progress_finish (progress, dltime);
|
||||
|
||||
set_progress_implementation("dot:default");// [:default|:binary|:mega|:giga]
|
||||
progress = progress_create (filename, start, end);
|
||||
progress_update (progress, 0, dltime);
|
||||
progress_update (progress, end - start, dltime);
|
||||
progress_finish (progress, dltime);
|
||||
|
||||
set_progress_implementation("dot:binary");// [:default|:binary|:mega|:giga]
|
||||
progress = progress_create (filename, start, end);
|
||||
progress_update (progress, 0, dltime);
|
||||
progress_update (progress, end - start, dltime);
|
||||
progress_finish (progress, dltime);
|
||||
|
||||
set_progress_implementation("dot:mega");// [:default|:binary|:mega|:giga]
|
||||
progress = progress_create (filename, start, end);
|
||||
progress_update (progress, 0, dltime);
|
||||
progress_update (progress, end - start, dltime);
|
||||
progress_finish (progress, dltime);
|
||||
|
||||
set_progress_implementation("dot:giga");// [:default|:binary|:mega|:giga]
|
||||
progress = progress_create (filename, start, end);
|
||||
progress_update (progress, 0, dltime);
|
||||
progress_update (progress, end - start, dltime);
|
||||
progress_finish (progress, dltime);
|
||||
|
||||
free(filename);
|
||||
|
||||
// RESTORE_STDERR
|
||||
|
||||
return 0;
|
||||
}
|
206
fuzz/wget_read_hunk_fuzzer.c
Normal file
206
fuzz/wget_read_hunk_fuzzer.c
Normal file
|
@ -0,0 +1,206 @@
|
|||
/*
|
||||
* Copyright (c) 2019-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <unistd.h> // close
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
#include <unistd.h> // close
|
||||
|
||||
#include "wget.h"
|
||||
#include "connect.h"
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "retr.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
// FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
// FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
static const uint8_t *g_data;
|
||||
static size_t g_size, g_read;
|
||||
|
||||
struct my_context {
|
||||
int peeklen;
|
||||
char peekbuf[512];
|
||||
};
|
||||
|
||||
static int my_peek (int fd _GL_UNUSED, char *buf, int bufsize, void *arg, double d)
|
||||
{
|
||||
(void) d;
|
||||
if (g_read < g_size) {
|
||||
struct my_context *ctx = (struct my_context *) arg;
|
||||
int n = rand() % (g_size - g_read);
|
||||
if (n > bufsize)
|
||||
n = bufsize;
|
||||
if (n > (int) sizeof(ctx->peekbuf))
|
||||
n = sizeof(ctx->peekbuf);
|
||||
memcpy(buf, g_data + g_read, n);
|
||||
memcpy(ctx->peekbuf, g_data + g_read, n);
|
||||
g_read += n;
|
||||
ctx->peeklen=n;
|
||||
return n;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static int my_read (int fd _GL_UNUSED, char *buf, int bufsize, void *arg, double d)
|
||||
{
|
||||
(void) d;
|
||||
struct my_context *ctx = (struct my_context *) arg;
|
||||
|
||||
if (ctx->peeklen) {
|
||||
/* If we have any peek data, simply return that. */
|
||||
int copysize = MIN (bufsize, ctx->peeklen);
|
||||
memcpy (buf, ctx->peekbuf, copysize);
|
||||
ctx->peeklen -= copysize;
|
||||
if (ctx->peeklen)
|
||||
memmove (ctx->peekbuf, ctx->peekbuf + copysize, ctx->peeklen);
|
||||
|
||||
return copysize;
|
||||
}
|
||||
|
||||
if (g_read < g_size) {
|
||||
int n = rand() % (g_size - g_read);
|
||||
if (n > bufsize)
|
||||
n = bufsize;
|
||||
memcpy(buf, g_data + g_read, n);
|
||||
g_read += n;
|
||||
return n;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int my_write (int fd _GL_UNUSED, char *buf _GL_UNUSED, int bufsize, void *arg _GL_UNUSED)
|
||||
{
|
||||
return bufsize;
|
||||
}
|
||||
static int my_poll (int fd _GL_UNUSED, double timeout _GL_UNUSED, int wait_for _GL_UNUSED, void *arg)
|
||||
{
|
||||
struct my_context *ctx = (struct my_context *) arg;
|
||||
|
||||
return ctx->peeklen || g_read < g_size;
|
||||
}
|
||||
static const char *my_errstr (int fd _GL_UNUSED, void *arg _GL_UNUSED)
|
||||
{
|
||||
return "Success";
|
||||
}
|
||||
static void my_close (int fd _GL_UNUSED, void *arg _GL_UNUSED)
|
||||
{
|
||||
}
|
||||
|
||||
static struct transport_implementation my_transport =
|
||||
{
|
||||
my_read, my_write, my_poll,
|
||||
my_peek, my_errstr, my_close
|
||||
};
|
||||
|
||||
/* copied from wget's http.c */
|
||||
static const char *
|
||||
response_head_terminator (const char *start, const char *peeked, int peeklen)
|
||||
{
|
||||
const char *p, *end;
|
||||
|
||||
/* If at first peek, verify whether HUNK starts with "HTTP". If
|
||||
not, this is a HTTP/0.9 request and we must bail out without
|
||||
reading anything. */
|
||||
if (start == peeked && 0 != memcmp (start, "HTTP", MIN (peeklen, 4)))
|
||||
return start;
|
||||
|
||||
/* Look for "\n[\r]\n", and return the following position if found.
|
||||
Start two chars before the current to cover the possibility that
|
||||
part of the terminator (e.g. "\n\r") arrived in the previous
|
||||
batch. */
|
||||
p = peeked - start < 2 ? start : peeked - 2;
|
||||
end = peeked + peeklen;
|
||||
|
||||
/* Check for \n\r\n or \n\n anywhere in [p, end-2). */
|
||||
for (; p < end - 2; p++)
|
||||
if (*p == '\n')
|
||||
{
|
||||
if (p[1] == '\r' && p[2] == '\n')
|
||||
return p + 3;
|
||||
else if (p[1] == '\n')
|
||||
return p + 2;
|
||||
}
|
||||
/* p==end-2: check for \n\n directly preceding END. */
|
||||
if (peeklen >= 2 && p[0] == '\n' && p[1] == '\n')
|
||||
return p + 2;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
char *hunk;
|
||||
|
||||
if (size > 4096) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
// CLOSE_STDERR
|
||||
|
||||
g_data = data;
|
||||
g_size = size;
|
||||
g_read = 0;
|
||||
|
||||
struct my_context *ctx = (struct my_context *) calloc(1, sizeof(struct my_context));
|
||||
fd_register_transport(99, &my_transport, ctx);
|
||||
|
||||
while ((hunk = fd_read_hunk(99, response_head_terminator, 512, 65536)))
|
||||
free(hunk);
|
||||
|
||||
connect_cleanup();
|
||||
free(ctx);
|
||||
|
||||
// RESTORE_STDERR
|
||||
|
||||
return 0;
|
||||
}
|
90
fuzz/wget_robots_fuzzer.c
Normal file
90
fuzz/wget_robots_fuzzer.c
Normal file
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h> // opendir, readdir
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
#include <setjmp.h> // longjmp, setjmp
|
||||
|
||||
#include "wget.h"
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "res.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
struct robot_specs *specs;
|
||||
|
||||
if (size > 4096) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
specs = res_parse((char *) data, (int) size);
|
||||
if (!specs)
|
||||
return 0;
|
||||
|
||||
res_match_path(specs, "a%ff%a");
|
||||
|
||||
res_register_specs("host", 80, specs);
|
||||
|
||||
res_cleanup();
|
||||
|
||||
RESTORE_STDERR
|
||||
|
||||
return 0;
|
||||
}
|
105
fuzz/wget_url_fuzzer.c
Normal file
105
fuzz/wget_url_fuzzer.c
Normal file
|
@ -0,0 +1,105 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2024 Free Software Foundation, Inc.
|
||||
*
|
||||
* This file is part of GNU Wget.
|
||||
*
|
||||
* GNU Wget is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNU Wget is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Wget. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdint.h> // uint8_t
|
||||
#include <stdio.h> // fmemopen
|
||||
#include <string.h> // strncmp
|
||||
#include <stdlib.h> // free
|
||||
#include <unistd.h> // close
|
||||
#include <fcntl.h> // open flags
|
||||
#include <unistd.h> // close
|
||||
|
||||
#include "wget.h"
|
||||
#undef fopen_wgetrc
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "url.h"
|
||||
|
||||
// declarations for wget internal functions
|
||||
int main_wget(int argc, const char **argv);
|
||||
void cleanup(void);
|
||||
FILE *fopen_wget(const char *pathname, const char *mode);
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode);
|
||||
void exit_wget(int status);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#include "fuzzer.h"
|
||||
|
||||
FILE *fopen_wget(const char *pathname, const char *mode)
|
||||
{
|
||||
return fopen("/dev/null", mode);
|
||||
}
|
||||
|
||||
FILE *fopen_wgetrc(const char *pathname, const char *mode)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef FUZZING
|
||||
void exit_wget(int status)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||
{
|
||||
struct url *url;
|
||||
struct iri iri;
|
||||
char *in;
|
||||
|
||||
if (size > 4096) // same as max_len = ... in .options file
|
||||
return 0;
|
||||
|
||||
CLOSE_STDERR
|
||||
|
||||
in = (char *) malloc(size + 1);
|
||||
memcpy(in, data, size);
|
||||
in[size] = 0;
|
||||
|
||||
iri.uri_encoding = (char *) "iso-8859-1";
|
||||
iri.orig_url = NULL;
|
||||
|
||||
iri.utf8_encode = 0;
|
||||
url = url_parse(in, NULL, &iri, 0);
|
||||
url_free(url);
|
||||
|
||||
url = url_parse(in, NULL, &iri, 1);
|
||||
url_free(url);
|
||||
|
||||
iri.utf8_encode = 1;
|
||||
url = url_parse(in, NULL, &iri, 0);
|
||||
url_free(url);
|
||||
|
||||
url = url_parse(in, NULL, &iri, 1);
|
||||
url_free(url);
|
||||
|
||||
free(iri.orig_url);
|
||||
free(in);
|
||||
|
||||
RESTORE_STDERR
|
||||
|
||||
return 0;
|
||||
}
|
40
gnulib_po/LINGUAS
Normal file
40
gnulib_po/LINGUAS
Normal file
|
@ -0,0 +1,40 @@
|
|||
# Set of available languages.
|
||||
af
|
||||
be
|
||||
bg
|
||||
ca
|
||||
cs
|
||||
da
|
||||
de
|
||||
el
|
||||
eo
|
||||
es
|
||||
et
|
||||
eu
|
||||
fi
|
||||
fr
|
||||
ga
|
||||
gl
|
||||
hu
|
||||
it
|
||||
ja
|
||||
ka
|
||||
ko
|
||||
ms
|
||||
nb
|
||||
nl
|
||||
pl
|
||||
pt
|
||||
pt_BR
|
||||
ro
|
||||
ru
|
||||
rw
|
||||
sk
|
||||
sl
|
||||
sr
|
||||
sv
|
||||
tr
|
||||
uk
|
||||
vi
|
||||
zh_CN
|
||||
zh_TW
|
514
gnulib_po/Makefile.in.in
Normal file
514
gnulib_po/Makefile.in.in
Normal file
|
@ -0,0 +1,514 @@
|
|||
# Makefile for PO directory in any package using GNU gettext.
|
||||
# Copyright (C) 1995-2000 Ulrich Drepper <drepper@gnu.ai.mit.edu>
|
||||
# Copyright (C) 2000-2023 Free Software Foundation, Inc.
|
||||
#
|
||||
# Copying and distribution of this file, with or without modification,
|
||||
# are permitted in any medium without royalty provided the copyright
|
||||
# notice and this notice are preserved. This file is offered as-is,
|
||||
# without any warranty.
|
||||
#
|
||||
# Origin: gettext-0.22
|
||||
GETTEXT_MACRO_VERSION = 0.20
|
||||
|
||||
PACKAGE = @PACKAGE@
|
||||
VERSION = @VERSION@
|
||||
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
|
||||
|
||||
SED = @SED@
|
||||
SHELL = /bin/sh
|
||||
@SET_MAKE@
|
||||
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
prefix = @prefix@
|
||||
exec_prefix = @exec_prefix@
|
||||
datarootdir = @datarootdir@
|
||||
datadir = @datadir@
|
||||
localedir = @localedir@
|
||||
gettextsrcdir = $(datadir)/gettext/po
|
||||
|
||||
INSTALL = @INSTALL@
|
||||
INSTALL_DATA = @INSTALL_DATA@
|
||||
|
||||
# We use $(mkdir_p).
|
||||
# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
|
||||
# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
|
||||
# @install_sh@ does not start with $(SHELL), so we add it.
|
||||
# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
|
||||
# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
|
||||
# versions, $(mkinstalldirs) and $(install_sh) are unused.
|
||||
mkinstalldirs = $(SHELL) @install_sh@ -d
|
||||
install_sh = $(SHELL) @install_sh@
|
||||
MKDIR_P = @MKDIR_P@
|
||||
mkdir_p = @mkdir_p@
|
||||
|
||||
# When building gettext-tools, we prefer to use the built programs
|
||||
# rather than installed programs. However, we can't do that when we
|
||||
# are cross compiling.
|
||||
CROSS_COMPILING = @CROSS_COMPILING@
|
||||
|
||||
GMSGFMT_ = @GMSGFMT@
|
||||
GMSGFMT_no = @GMSGFMT@
|
||||
GMSGFMT_yes = @GMSGFMT_015@
|
||||
GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
|
||||
XGETTEXT_ = @XGETTEXT@
|
||||
XGETTEXT_no = @XGETTEXT@
|
||||
XGETTEXT_yes = @XGETTEXT_015@
|
||||
XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
|
||||
MSGMERGE = @MSGMERGE@
|
||||
MSGMERGE_UPDATE = @MSGMERGE@ --update
|
||||
MSGMERGE_FOR_MSGFMT_OPTION = @MSGMERGE_FOR_MSGFMT_OPTION@
|
||||
MSGINIT = msginit
|
||||
MSGCONV = msgconv
|
||||
MSGFILTER = msgfilter
|
||||
|
||||
POFILES = @POFILES@
|
||||
GMOFILES = @GMOFILES@
|
||||
UPDATEPOFILES = @UPDATEPOFILES@
|
||||
DUMMYPOFILES = @DUMMYPOFILES@
|
||||
DISTFILES.common = Makefile.in.in remove-potcdate.sin \
|
||||
$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
|
||||
DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
|
||||
$(POFILES) $(GMOFILES) \
|
||||
$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
|
||||
|
||||
POTFILES = \
|
||||
|
||||
CATALOGS = @CATALOGS@
|
||||
|
||||
POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot
|
||||
POFILESDEPS_yes = $(POFILESDEPS_)
|
||||
POFILESDEPS_no =
|
||||
POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT))
|
||||
|
||||
DISTFILESDEPS_ = update-po
|
||||
DISTFILESDEPS_yes = $(DISTFILESDEPS_)
|
||||
DISTFILESDEPS_no =
|
||||
DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO))
|
||||
|
||||
# Makevars gets inserted here. (Don't remove this line!)
|
||||
|
||||
all: all-@USE_NLS@
|
||||
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .po .gmo .sed .sin .nop .po-create .po-update
|
||||
|
||||
# The .pot file, stamp-po, .po files, and .gmo files appear in release tarballs.
|
||||
# The GNU Coding Standards say in
|
||||
# <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html>:
|
||||
# "GNU distributions usually contain some files which are not source files
|
||||
# ... . Since these files normally appear in the source directory, they
|
||||
# should always appear in the source directory, not in the build directory.
|
||||
# So Makefile rules to update them should put the updated files in the
|
||||
# source directory."
|
||||
# Therefore we put these files in the source directory, not the build directory.
|
||||
|
||||
# During .po -> .gmo conversion, take into account the most recent changes to
|
||||
# the .pot file. This eliminates the need to update the .po files when the
|
||||
# .pot file has changed, which would be troublesome if the .po files are put
|
||||
# under version control.
|
||||
$(GMOFILES): $(srcdir)/$(DOMAIN).pot
|
||||
.po.gmo:
|
||||
@lang=`echo $* | sed -e 's,.*/,,'`; \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}rm -f $${lang}.gmo && $(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.1po && rm -f $${lang}.1po"; \
|
||||
cd $(srcdir) && \
|
||||
rm -f $${lang}.gmo && \
|
||||
$(MSGMERGE) $(MSGMERGE_FOR_MSGFMT_OPTION) -o $${lang}.1po $${lang}.po $(DOMAIN).pot && \
|
||||
$(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.1po && \
|
||||
mv t-$${lang}.gmo $${lang}.gmo && \
|
||||
rm -f $${lang}.1po
|
||||
|
||||
.sin.sed:
|
||||
sed -e '/^#/d' $< > t-$@
|
||||
mv t-$@ $@
|
||||
|
||||
|
||||
all-yes: $(srcdir)/stamp-po
|
||||
all-no:
|
||||
|
||||
# Ensure that the gettext macros and this Makefile.in.in are in sync.
|
||||
CHECK_MACRO_VERSION = \
|
||||
test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
|
||||
|| { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
|
||||
exit 1; \
|
||||
}
|
||||
|
||||
# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
|
||||
# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
|
||||
# we don't want to bother translators with empty POT files). We assume that
|
||||
# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
|
||||
# In this case, $(srcdir)/stamp-po is a nop (i.e. a phony target).
|
||||
|
||||
# $(srcdir)/stamp-po is a timestamp denoting the last time at which the CATALOGS
|
||||
# have been loosely updated. Its purpose is that when a developer or translator
|
||||
# checks out the package from a version control system, and the $(DOMAIN).pot
|
||||
# file is not under version control, "make" will update the $(DOMAIN).pot and
|
||||
# the $(CATALOGS), but subsequent invocations of "make" will do nothing. This
|
||||
# timestamp would not be necessary if updating the $(CATALOGS) would always
|
||||
# touch them; however, the rule for $(POFILES) has been designed to not touch
|
||||
# files that don't need to be changed.
|
||||
$(srcdir)/stamp-po: $(srcdir)/$(DOMAIN).pot
|
||||
@$(CHECK_MACRO_VERSION)
|
||||
test ! -f $(srcdir)/$(DOMAIN).pot || \
|
||||
test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
|
||||
@test ! -f $(srcdir)/$(DOMAIN).pot || { \
|
||||
echo "touch $(srcdir)/stamp-po" && \
|
||||
echo timestamp > $(srcdir)/stamp-poT && \
|
||||
mv $(srcdir)/stamp-poT $(srcdir)/stamp-po; \
|
||||
}
|
||||
|
||||
# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
|
||||
# otherwise packages like GCC can not be built if only parts of the source
|
||||
# have been downloaded.
|
||||
|
||||
# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
|
||||
# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
|
||||
# The determination of whether the package xyz is a GNU one is based on the
|
||||
# heuristic whether some file in the top level directory mentions "GNU xyz".
|
||||
# If GNU 'find' is available, we avoid grepping through monster files.
|
||||
$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
|
||||
package_gnu="$(PACKAGE_GNU)"; \
|
||||
test -n "$$package_gnu" || { \
|
||||
if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \
|
||||
LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f -size -10000000c -exec grep -i 'GNU @PACKAGE@' /dev/null '{}' ';' 2>/dev/null; \
|
||||
else \
|
||||
LC_ALL=C grep -i 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \
|
||||
fi; \
|
||||
} | grep -v 'libtool:' >/dev/null; then \
|
||||
package_gnu=yes; \
|
||||
else \
|
||||
package_gnu=no; \
|
||||
fi; \
|
||||
}; \
|
||||
if test "$$package_gnu" = "yes"; then \
|
||||
package_prefix='GNU '; \
|
||||
else \
|
||||
package_prefix=''; \
|
||||
fi; \
|
||||
if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
|
||||
msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
|
||||
else \
|
||||
msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
|
||||
fi; \
|
||||
case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
|
||||
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
|
||||
--add-comments=TRANSLATORS: \
|
||||
--files-from=$(srcdir)/POTFILES.in \
|
||||
--copyright-holder='$(COPYRIGHT_HOLDER)' \
|
||||
--msgid-bugs-address="$$msgid_bugs_address" \
|
||||
$(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
|
||||
;; \
|
||||
*) \
|
||||
$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
|
||||
--add-comments=TRANSLATORS: \
|
||||
--files-from=$(srcdir)/POTFILES.in \
|
||||
--copyright-holder='$(COPYRIGHT_HOLDER)' \
|
||||
--package-name="$${package_prefix}@PACKAGE@" \
|
||||
--package-version='@VERSION@' \
|
||||
--msgid-bugs-address="$$msgid_bugs_address" \
|
||||
$(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
|
||||
;; \
|
||||
esac
|
||||
test ! -f $(DOMAIN).po || { \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot-header; then \
|
||||
sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \
|
||||
cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po && \
|
||||
rm -f $(DOMAIN).1po \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot; then \
|
||||
sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
|
||||
sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
|
||||
if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
|
||||
rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
|
||||
else \
|
||||
rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
|
||||
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||
fi; \
|
||||
else \
|
||||
mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
|
||||
fi; \
|
||||
}
|
||||
|
||||
# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
|
||||
# every "make" invocation, only create it when it is missing.
|
||||
# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
|
||||
$(srcdir)/$(DOMAIN).pot:
|
||||
$(MAKE) $(DOMAIN).pot-update
|
||||
|
||||
# This target rebuilds a PO file if $(DOMAIN).pot has changed.
|
||||
# Note that a PO file is not touched if it doesn't need to be changed.
|
||||
$(POFILES): $(POFILESDEPS)
|
||||
@test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot
|
||||
@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
|
||||
if test -f "$(srcdir)/$${lang}.po"; then \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}$(MSGMERGE_UPDATE) --quiet $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot"; \
|
||||
cd $(srcdir) \
|
||||
&& { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.10 | 0.10.*) \
|
||||
$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
|
||||
0.1[1-5] | 0.1[1-5].*) \
|
||||
$(MSGMERGE_UPDATE) --quiet $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \
|
||||
0.1[6-7] | 0.1[6-7].*) \
|
||||
$(MSGMERGE_UPDATE) --quiet $(MSGMERGE_OPTIONS) --previous $${lang}.po $(DOMAIN).pot;; \
|
||||
*) \
|
||||
$(MSGMERGE_UPDATE) --quiet $(MSGMERGE_OPTIONS) --lang=$${lang} --previous $${lang}.po $(DOMAIN).pot;; \
|
||||
esac; \
|
||||
}; \
|
||||
else \
|
||||
$(MAKE) $${lang}.po-create; \
|
||||
fi
|
||||
|
||||
|
||||
install: install-exec install-data
|
||||
install-exec:
|
||||
install-data: install-data-@USE_NLS@
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
$(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
|
||||
for file in $(DISTFILES.common) Makevars.template; do \
|
||||
$(INSTALL_DATA) $(srcdir)/$$file \
|
||||
$(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
for file in Makevars; do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
install-data-no: all
|
||||
install-data-yes: all
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||
$(mkdir_p) $(DESTDIR)$$dir; \
|
||||
if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
|
||||
$(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
|
||||
echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
|
||||
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
if test -n "$$lc"; then \
|
||||
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||
for file in *; do \
|
||||
if test -f $$file; then \
|
||||
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||
fi; \
|
||||
done); \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
else \
|
||||
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||
:; \
|
||||
else \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
fi; \
|
||||
fi; \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||
ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
|
||||
cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
|
||||
fi; \
|
||||
done; \
|
||||
done
|
||||
|
||||
install-strip: install
|
||||
|
||||
installdirs: installdirs-exec installdirs-data
|
||||
installdirs-exec:
|
||||
installdirs-data: installdirs-data-@USE_NLS@
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
$(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
installdirs-data-no:
|
||||
installdirs-data-yes:
|
||||
@catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
dir=$(localedir)/$$lang/LC_MESSAGES; \
|
||||
$(mkdir_p) $(DESTDIR)$$dir; \
|
||||
for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
if test -n "$$lc"; then \
|
||||
if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
|
||||
link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
|
||||
mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
(cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
|
||||
for file in *; do \
|
||||
if test -f $$file; then \
|
||||
ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
|
||||
fi; \
|
||||
done); \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
|
||||
else \
|
||||
if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
|
||||
:; \
|
||||
else \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
|
||||
fi; \
|
||||
fi; \
|
||||
fi; \
|
||||
done; \
|
||||
done
|
||||
|
||||
# Define this as empty until I found a useful application.
|
||||
installcheck:
|
||||
|
||||
uninstall: uninstall-exec uninstall-data
|
||||
uninstall-exec:
|
||||
uninstall-data: uninstall-data-@USE_NLS@
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
for file in $(DISTFILES.common) Makevars.template; do \
|
||||
rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
|
||||
done; \
|
||||
else \
|
||||
: ; \
|
||||
fi
|
||||
uninstall-data-no:
|
||||
uninstall-data-yes:
|
||||
catalogs='$(CATALOGS)'; \
|
||||
for cat in $$catalogs; do \
|
||||
cat=`basename $$cat`; \
|
||||
lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
|
||||
for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
|
||||
rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
|
||||
done; \
|
||||
done
|
||||
|
||||
check: all
|
||||
|
||||
info dvi ps pdf html tags TAGS ctags CTAGS ID:
|
||||
|
||||
install-dvi install-ps install-pdf install-html:
|
||||
|
||||
mostlyclean:
|
||||
rm -f remove-potcdate.sed
|
||||
rm -f $(srcdir)/stamp-poT
|
||||
rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
|
||||
rm -fr *.o
|
||||
|
||||
clean: mostlyclean
|
||||
|
||||
distclean: clean
|
||||
rm -f Makefile Makefile.in POTFILES
|
||||
|
||||
maintainer-clean: distclean
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
rm -f $(srcdir)/$(DOMAIN).pot $(srcdir)/stamp-po $(GMOFILES)
|
||||
|
||||
distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
|
||||
dist distdir:
|
||||
test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS)
|
||||
@$(MAKE) dist2
|
||||
# This is a separate target because 'update-po' must be executed before.
|
||||
dist2: $(srcdir)/stamp-po $(DISTFILES)
|
||||
@dists="$(DISTFILES)"; \
|
||||
if test "$(PACKAGE)" = "gettext-tools"; then \
|
||||
dists="$$dists Makevars.template"; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/$(DOMAIN).pot; then \
|
||||
dists="$$dists $(DOMAIN).pot stamp-po"; \
|
||||
else \
|
||||
case $(XGETTEXT) in \
|
||||
:) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because a suitable 'xgettext' program was not found in PATH." 1>&2;; \
|
||||
*) echo "Warning: Creating a tarball without '$(DOMAIN).pot', because 'xgettext' found no strings to extract. Check the contents of the POTFILES.in file and the XGETTEXT_OPTIONS in the Makevars file." 1>&2;; \
|
||||
esac; \
|
||||
fi; \
|
||||
if test -f $(srcdir)/ChangeLog; then \
|
||||
dists="$$dists ChangeLog"; \
|
||||
fi; \
|
||||
for i in 0 1 2 3 4 5 6 7 8 9; do \
|
||||
if test -f $(srcdir)/ChangeLog.$$i; then \
|
||||
dists="$$dists ChangeLog.$$i"; \
|
||||
fi; \
|
||||
done; \
|
||||
if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
|
||||
for file in $$dists; do \
|
||||
if test -f $$file; then \
|
||||
cp -p $$file $(distdir) || exit 1; \
|
||||
else \
|
||||
cp -p $(srcdir)/$$file $(distdir) || exit 1; \
|
||||
fi; \
|
||||
done
|
||||
|
||||
update-po: Makefile
|
||||
$(MAKE) $(DOMAIN).pot-update
|
||||
test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
|
||||
$(MAKE) update-gmo
|
||||
|
||||
# General rule for creating PO files.
|
||||
|
||||
.nop.po-create:
|
||||
@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
|
||||
echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
|
||||
exit 1
|
||||
|
||||
# General rule for updating PO files.
|
||||
|
||||
.nop.po-update:
|
||||
@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
|
||||
if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \
|
||||
tmpdir=`pwd`; \
|
||||
echo "$$lang:"; \
|
||||
test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
|
||||
echo "$${cdcmd}$(MSGMERGE) --quiet $(MSGMERGE_OPTIONS) --lang=$$lang --previous $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
|
||||
cd $(srcdir); \
|
||||
if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.10 | 0.10.*) \
|
||||
$(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
0.1[1-5] | 0.1[1-5].*) \
|
||||
$(MSGMERGE) --quiet $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
0.1[6-7] | 0.1[6-7].*) \
|
||||
$(MSGMERGE) --quiet $(MSGMERGE_OPTIONS) --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
*) \
|
||||
$(MSGMERGE) --quiet $(MSGMERGE_OPTIONS) --lang=$$lang --previous -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \
|
||||
esac; \
|
||||
}; then \
|
||||
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
else \
|
||||
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
|
||||
:; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
else \
|
||||
echo "msgmerge for $$lang.po failed!" 1>&2; \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
fi
|
||||
|
||||
$(DUMMYPOFILES):
|
||||
|
||||
update-gmo: Makefile $(GMOFILES)
|
||||
@:
|
||||
|
||||
# Recreate Makefile by invoking config.status. Explicitly invoke the shell,
|
||||
# because execution permission bits may not work on the current file system.
|
||||
# Use @SHELL@, which is the shell determined by autoconf for the use by its
|
||||
# scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient.
|
||||
Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
|
||||
cd $(top_builddir) \
|
||||
&& @SHELL@ ./config.status $(subdir)/$@.in po-directories
|
||||
|
||||
force:
|
||||
|
||||
# Tell versions [3.59,3.63) of GNU make not to export all variables.
|
||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
||||
.NOEXPORT:
|
69
gnulib_po/Makevars
Normal file
69
gnulib_po/Makevars
Normal file
|
@ -0,0 +1,69 @@
|
|||
## DO NOT EDIT! GENERATED AUTOMATICALLY!
|
||||
# Copyright (C) 2002-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This file is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this file. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception to the GNU General Public License,
|
||||
# this file may be distributed as part of a program that
|
||||
# contains a configuration script generated by Autoconf, under
|
||||
# the same distribution terms as the rest of that program.
|
||||
#
|
||||
# Generated by gnulib-tool.
|
||||
|
||||
# Usually the message domain is the same as the package name.
|
||||
# But here it has a '-gnulib' suffix.
|
||||
DOMAIN = wget-gnulib
|
||||
|
||||
# These two variables depend on the location of this directory.
|
||||
subdir = gnulib_po
|
||||
top_builddir = ..
|
||||
|
||||
# These options get passed to xgettext.
|
||||
XGETTEXT_OPTIONS = \
|
||||
--keyword=_ --flag=_:1:pass-c-format \
|
||||
--keyword=N_ --flag=N_:1:pass-c-format \
|
||||
--keyword='proper_name:1,"This is a proper name. See the gettext manual, section Names."' \
|
||||
--keyword='proper_name_lite:1,"This is a proper name. See the gettext manual, section Names."' \
|
||||
--keyword='proper_name_utf8:1,"This is a proper name. See the gettext manual, section Names."' \
|
||||
--flag=error:3:c-format --flag=error_at_line:5:c-format
|
||||
|
||||
# This is the copyright holder that gets inserted into the header of the
|
||||
# $(DOMAIN).pot file. gnulib is copyrighted by the FSF.
|
||||
COPYRIGHT_HOLDER = Free Software Foundation, Inc.
|
||||
|
||||
# This is the email address or URL to which the translators shall report
|
||||
# bugs in the untranslated strings:
|
||||
# - Strings which are not entire sentences, see the maintainer guidelines
|
||||
# in the GNU gettext documentation, section 'Preparing Strings'.
|
||||
# - Strings which use unclear terms or require additional context to be
|
||||
# understood.
|
||||
# - Strings which make invalid assumptions about notation of date, time or
|
||||
# money.
|
||||
# - Pluralisation problems.
|
||||
# - Incorrect English spelling.
|
||||
# - Incorrect formatting.
|
||||
# It can be your email address, or a mailing list address where translators
|
||||
# can write to without being subscribed, or the URL of a web page through
|
||||
# which the translators can contact you.
|
||||
MSGID_BUGS_ADDRESS = bug-gnulib@gnu.org
|
||||
|
||||
# This is the list of locale categories, beyond LC_MESSAGES, for which the
|
||||
# message catalogs shall be used. It is usually empty.
|
||||
EXTRA_LOCALE_CATEGORIES =
|
||||
|
||||
# This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt'
|
||||
# context. Possible values are "yes" and "no". Set this to yes if the
|
||||
# package uses functions taking also a message context, like pgettext(), or
|
||||
# if in $(XGETTEXT_OPTIONS) you define keywords with a context argument.
|
||||
USE_MSGCTXT = no
|
575
gnulib_po/POTFILES.in
Normal file
575
gnulib_po/POTFILES.in
Normal file
|
@ -0,0 +1,575 @@
|
|||
## DO NOT EDIT! GENERATED AUTOMATICALLY!
|
||||
# Copyright (C) 2002-2024 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This file is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this file. If not, see <https://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception to the GNU General Public License,
|
||||
# this file may be distributed as part of a program that
|
||||
# contains a configuration script generated by Autoconf, under
|
||||
# the same distribution terms as the rest of that program.
|
||||
#
|
||||
# Generated by gnulib-tool.
|
||||
|
||||
# List of files which contain translatable strings.
|
||||
lib/_Noreturn.h
|
||||
lib/accept.c
|
||||
lib/access.c
|
||||
lib/af_alg.c
|
||||
lib/af_alg.h
|
||||
lib/alloca.c
|
||||
lib/alloca.in.h
|
||||
lib/arg-nonnull.h
|
||||
lib/arpa_inet.c
|
||||
lib/arpa_inet.in.h
|
||||
lib/array-mergesort.h
|
||||
lib/asnprintf.c
|
||||
lib/asprintf.c
|
||||
lib/assert.in.h
|
||||
lib/assure.h
|
||||
lib/at-func.c
|
||||
lib/attribute.h
|
||||
lib/base32.c
|
||||
lib/base32.h
|
||||
lib/basename-lgpl.c
|
||||
lib/basename-lgpl.h
|
||||
lib/basename.c
|
||||
lib/binary-io.c
|
||||
lib/binary-io.h
|
||||
lib/bind.c
|
||||
lib/bitrotate.c
|
||||
lib/bitrotate.h
|
||||
lib/btoc32.c
|
||||
lib/btowc.c
|
||||
lib/byteswap.c
|
||||
lib/byteswap.in.h
|
||||
lib/c++defs.h
|
||||
lib/c-ctype.c
|
||||
lib/c-ctype.h
|
||||
lib/c-strcase.h
|
||||
lib/c-strcasecmp.c
|
||||
lib/c-strcaseeq.h
|
||||
lib/c-strcasestr.c
|
||||
lib/c-strcasestr.h
|
||||
lib/c-strncasecmp.c
|
||||
lib/c32_apply_type_test.c
|
||||
lib/c32_get_type_test.c
|
||||
lib/c32is-impl.h
|
||||
lib/c32isalnum.c
|
||||
lib/c32isalpha.c
|
||||
lib/c32isblank.c
|
||||
lib/c32iscntrl.c
|
||||
lib/c32isdigit.c
|
||||
lib/c32isgraph.c
|
||||
lib/c32islower.c
|
||||
lib/c32isprint.c
|
||||
lib/c32ispunct.c
|
||||
lib/c32isspace.c
|
||||
lib/c32isupper.c
|
||||
lib/c32isxdigit.c
|
||||
lib/c32to-impl.h
|
||||
lib/c32tolower.c
|
||||
lib/c32width.c
|
||||
lib/calloc.c
|
||||
lib/canonicalize-lgpl.c
|
||||
lib/canonicalize.c
|
||||
lib/canonicalize.h
|
||||
lib/cdefs.h
|
||||
lib/chdir-long.c
|
||||
lib/chdir-long.h
|
||||
lib/cloexec.c
|
||||
lib/cloexec.h
|
||||
lib/close.c
|
||||
lib/closedir.c
|
||||
lib/concat-filename.c
|
||||
lib/concat-filename.h
|
||||
lib/connect.c
|
||||
lib/ctype.in.h
|
||||
lib/dirent-private.h
|
||||
lib/dirent.in.h
|
||||
lib/dirfd.c
|
||||
lib/dirname-lgpl.c
|
||||
lib/dirname.c
|
||||
lib/dirname.h
|
||||
lib/dup-safer-flag.c
|
||||
lib/dup-safer.c
|
||||
lib/dup.c
|
||||
lib/dup2.c
|
||||
lib/dynarray.h
|
||||
lib/eloop-threshold.h
|
||||
lib/errno.in.h
|
||||
lib/error.c
|
||||
lib/error.in.h
|
||||
lib/exitfail.c
|
||||
lib/exitfail.h
|
||||
lib/fatal-signal.c
|
||||
lib/fatal-signal.h
|
||||
lib/fchdir.c
|
||||
lib/fcntl.c
|
||||
lib/fcntl.in.h
|
||||
lib/fd-hook.c
|
||||
lib/fd-hook.h
|
||||
lib/fd-safer-flag.c
|
||||
lib/fd-safer.c
|
||||
lib/fdopendir.c
|
||||
lib/fflush.c
|
||||
lib/file-set.c
|
||||
lib/file-set.h
|
||||
lib/filename.h
|
||||
lib/filenamecat-lgpl.c
|
||||
lib/filenamecat.h
|
||||
lib/findprog-in.c
|
||||
lib/findprog.h
|
||||
lib/flexmember.h
|
||||
lib/float+.h
|
||||
lib/float.c
|
||||
lib/float.in.h
|
||||
lib/flock.c
|
||||
lib/fnmatch.c
|
||||
lib/fnmatch.in.h
|
||||
lib/fnmatch_loop.c
|
||||
lib/fopen.c
|
||||
lib/fpurge.c
|
||||
lib/freading.c
|
||||
lib/freading.h
|
||||
lib/free.c
|
||||
lib/fseek.c
|
||||
lib/fseeko.c
|
||||
lib/fstat.c
|
||||
lib/fstatat.c
|
||||
lib/ftell.c
|
||||
lib/ftello.c
|
||||
lib/futimens.c
|
||||
lib/gai_strerror.c
|
||||
lib/getaddrinfo.c
|
||||
lib/getcwd-lgpl.c
|
||||
lib/getcwd.c
|
||||
lib/getdelim.c
|
||||
lib/getdtablesize.c
|
||||
lib/getgroups.c
|
||||
lib/getline.c
|
||||
lib/getopt-cdefs.in.h
|
||||
lib/getopt-core.h
|
||||
lib/getopt-ext.h
|
||||
lib/getopt-pfx-core.h
|
||||
lib/getopt-pfx-ext.h
|
||||
lib/getopt.c
|
||||
lib/getopt.in.h
|
||||
lib/getopt1.c
|
||||
lib/getopt_int.h
|
||||
lib/getpass.c
|
||||
lib/getpass.h
|
||||
lib/getpeername.c
|
||||
lib/getprogname.c
|
||||
lib/getprogname.h
|
||||
lib/getrandom.c
|
||||
lib/getsockname.c
|
||||
lib/gettext.h
|
||||
lib/gettime.c
|
||||
lib/gettimeofday.c
|
||||
lib/gl_openssl.h
|
||||
lib/glthread/lock.c
|
||||
lib/glthread/lock.h
|
||||
lib/glthread/once.c
|
||||
lib/glthread/once.h
|
||||
lib/glthread/threadlib.c
|
||||
lib/group-member.c
|
||||
lib/hard-locale.c
|
||||
lib/hard-locale.h
|
||||
lib/hash-pjw.c
|
||||
lib/hash-pjw.h
|
||||
lib/hash-triple-simple.c
|
||||
lib/hash-triple.h
|
||||
lib/hash.c
|
||||
lib/hash.h
|
||||
lib/ialloc.c
|
||||
lib/ialloc.h
|
||||
lib/iconv.in.h
|
||||
lib/idx.h
|
||||
lib/inet_ntop.c
|
||||
lib/intprops-internal.h
|
||||
lib/intprops.h
|
||||
lib/inttypes.in.h
|
||||
lib/ioctl.c
|
||||
lib/isblank.c
|
||||
lib/iswblank.c
|
||||
lib/iswctype-impl.h
|
||||
lib/iswctype.c
|
||||
lib/iswdigit.c
|
||||
lib/iswpunct.c
|
||||
lib/iswxdigit.c
|
||||
lib/itold.c
|
||||
lib/langinfo.in.h
|
||||
lib/lc-charset-dispatch.c
|
||||
lib/lc-charset-dispatch.h
|
||||
lib/libc-config.h
|
||||
lib/libunistring.valgrind
|
||||
lib/limits.in.h
|
||||
lib/link.c
|
||||
lib/listen.c
|
||||
lib/localcharset.c
|
||||
lib/localcharset.h
|
||||
lib/locale.in.h
|
||||
lib/localeconv.c
|
||||
lib/lseek.c
|
||||
lib/lstat.c
|
||||
lib/malloc.c
|
||||
lib/malloc/dynarray-skeleton.c
|
||||
lib/malloc/dynarray.h
|
||||
lib/malloc/dynarray_at_failure.c
|
||||
lib/malloc/dynarray_emplace_enlarge.c
|
||||
lib/malloc/dynarray_finalize.c
|
||||
lib/malloc/dynarray_resize.c
|
||||
lib/malloc/dynarray_resize_clear.c
|
||||
lib/malloc/scratch_buffer.h
|
||||
lib/malloc/scratch_buffer_grow.c
|
||||
lib/malloc/scratch_buffer_grow_preserve.c
|
||||
lib/malloc/scratch_buffer_set_array_size.c
|
||||
lib/malloca.c
|
||||
lib/malloca.h
|
||||
lib/mbchar.c
|
||||
lib/mbchar.h
|
||||
lib/mbiter.c
|
||||
lib/mbiter.h
|
||||
lib/mbrtoc32.c
|
||||
lib/mbrtowc-impl-utf8.h
|
||||
lib/mbrtowc-impl.h
|
||||
lib/mbrtowc.c
|
||||
lib/mbsinit.c
|
||||
lib/mbsrtoc32s-state.c
|
||||
lib/mbsrtoc32s.c
|
||||
lib/mbsrtowcs-impl.h
|
||||
lib/mbsrtowcs-state.c
|
||||
lib/mbsrtowcs.c
|
||||
lib/mbszero.c
|
||||
lib/mbtowc-impl.h
|
||||
lib/mbtowc-lock.c
|
||||
lib/mbtowc-lock.h
|
||||
lib/mbtowc.c
|
||||
lib/md2-stream.c
|
||||
lib/md2.c
|
||||
lib/md2.h
|
||||
lib/md4-stream.c
|
||||
lib/md4.c
|
||||
lib/md4.h
|
||||
lib/md5-stream.c
|
||||
lib/md5.c
|
||||
lib/md5.h
|
||||
lib/memchr.c
|
||||
lib/memchr.valgrind
|
||||
lib/mempcpy.c
|
||||
lib/memrchr.c
|
||||
lib/minmax.h
|
||||
lib/mkdir.c
|
||||
lib/mkostemp.c
|
||||
lib/mkstemp.c
|
||||
lib/mktime-internal.h
|
||||
lib/mktime.c
|
||||
lib/msvc-inval.c
|
||||
lib/msvc-inval.h
|
||||
lib/msvc-nothrow.c
|
||||
lib/msvc-nothrow.h
|
||||
lib/nanosleep.c
|
||||
lib/netdb.in.h
|
||||
lib/netinet_in.in.h
|
||||
lib/nl_langinfo-lock.c
|
||||
lib/nl_langinfo.c
|
||||
lib/open.c
|
||||
lib/openat-die.c
|
||||
lib/openat-priv.h
|
||||
lib/openat-proc.c
|
||||
lib/openat.c
|
||||
lib/openat.h
|
||||
lib/opendir.c
|
||||
lib/os2-spawn.c
|
||||
lib/os2-spawn.h
|
||||
lib/pathmax.h
|
||||
lib/pipe-safer.c
|
||||
lib/pipe.c
|
||||
lib/pipe2-safer.c
|
||||
lib/pipe2.c
|
||||
lib/printf-args.c
|
||||
lib/printf-args.h
|
||||
lib/printf-parse.c
|
||||
lib/printf-parse.h
|
||||
lib/pselect.c
|
||||
lib/pthread-once.c
|
||||
lib/pthread.in.h
|
||||
lib/pthread_sigmask.c
|
||||
lib/quote.h
|
||||
lib/quotearg.c
|
||||
lib/quotearg.h
|
||||
lib/raise.c
|
||||
lib/rawmemchr.c
|
||||
lib/rawmemchr.valgrind
|
||||
lib/readdir.c
|
||||
lib/readlink.c
|
||||
lib/realloc.c
|
||||
lib/reallocarray.c
|
||||
lib/recv.c
|
||||
lib/regcomp.c
|
||||
lib/regex.c
|
||||
lib/regex.h
|
||||
lib/regex_internal.c
|
||||
lib/regex_internal.h
|
||||
lib/regexec.c
|
||||
lib/rename.c
|
||||
lib/rewinddir.c
|
||||
lib/rmdir.c
|
||||
lib/same-inode.c
|
||||
lib/same-inode.h
|
||||
lib/save-cwd.c
|
||||
lib/save-cwd.h
|
||||
lib/sched.in.h
|
||||
lib/scratch_buffer.h
|
||||
lib/secure_getenv.c
|
||||
lib/select.c
|
||||
lib/send.c
|
||||
lib/setlocale-lock.c
|
||||
lib/setlocale_null-unlocked.c
|
||||
lib/setlocale_null.c
|
||||
lib/setlocale_null.h
|
||||
lib/setsockopt.c
|
||||
lib/sha1-stream.c
|
||||
lib/sha1.c
|
||||
lib/sha1.h
|
||||
lib/sha256-stream.c
|
||||
lib/sha256.c
|
||||
lib/sha256.h
|
||||
lib/sha512-stream.c
|
||||
lib/sha512.c
|
||||
lib/sha512.h
|
||||
lib/sig-handler.c
|
||||
lib/sig-handler.h
|
||||
lib/sigaction.c
|
||||
lib/signal.in.h
|
||||
lib/sigprocmask.c
|
||||
lib/size_max.h
|
||||
lib/snprintf.c
|
||||
lib/socket.c
|
||||
lib/sockets.c
|
||||
lib/sockets.h
|
||||
lib/spawn-pipe.c
|
||||
lib/spawn-pipe.h
|
||||
lib/spawn.c
|
||||
lib/spawn.in.h
|
||||
lib/spawn_faction_addchdir.c
|
||||
lib/spawn_faction_addclose.c
|
||||
lib/spawn_faction_adddup2.c
|
||||
lib/spawn_faction_addopen.c
|
||||
lib/spawn_faction_destroy.c
|
||||
lib/spawn_faction_init.c
|
||||
lib/spawn_int.h
|
||||
lib/spawnattr_destroy.c
|
||||
lib/spawnattr_init.c
|
||||
lib/spawnattr_setflags.c
|
||||
lib/spawnattr_setpgroup.c
|
||||
lib/spawnattr_setsigmask.c
|
||||
lib/spawni.c
|
||||
lib/spawnp.c
|
||||
lib/stat-time.c
|
||||
lib/stat-time.h
|
||||
lib/stat-w32.c
|
||||
lib/stat-w32.h
|
||||
lib/stat.c
|
||||
lib/stdckdint.in.h
|
||||
lib/stddef.in.h
|
||||
lib/stdint.in.h
|
||||
lib/stdio-impl.h
|
||||
lib/stdio-read.c
|
||||
lib/stdio-write.c
|
||||
lib/stdio.in.h
|
||||
lib/stdlib.c
|
||||
lib/stdlib.in.h
|
||||
lib/stpcpy.c
|
||||
lib/str-two-way.h
|
||||
lib/strcasecmp.c
|
||||
lib/strchrnul.c
|
||||
lib/strchrnul.valgrind
|
||||
lib/strdup.c
|
||||
lib/streq.h
|
||||
lib/strerror-override.c
|
||||
lib/strerror-override.h
|
||||
lib/strerror.c
|
||||
lib/strerror_r.c
|
||||
lib/string.in.h
|
||||
lib/strings.in.h
|
||||
lib/stripslash.c
|
||||
lib/strncasecmp.c
|
||||
lib/strndup.c
|
||||
lib/strnlen.c
|
||||
lib/strnlen1.c
|
||||
lib/strnlen1.h
|
||||
lib/strpbrk.c
|
||||
lib/strptime.c
|
||||
lib/strtok_r.c
|
||||
lib/strtol.c
|
||||
lib/strtoll.c
|
||||
lib/symlink.c
|
||||
lib/sys-limits.h
|
||||
lib/sys_file.in.h
|
||||
lib/sys_ioctl.in.h
|
||||
lib/sys_random.in.h
|
||||
lib/sys_select.in.h
|
||||
lib/sys_socket.c
|
||||
lib/sys_socket.in.h
|
||||
lib/sys_stat.in.h
|
||||
lib/sys_time.in.h
|
||||
lib/sys_types.in.h
|
||||
lib/sys_uio.in.h
|
||||
lib/sys_wait.in.h
|
||||
lib/tempname.c
|
||||
lib/tempname.h
|
||||
lib/thread-optim.h
|
||||
lib/time.in.h
|
||||
lib/time_r.c
|
||||
lib/timegm.c
|
||||
lib/timespec.c
|
||||
lib/timespec.h
|
||||
lib/tmpdir.c
|
||||
lib/tmpdir.h
|
||||
lib/u64.c
|
||||
lib/u64.h
|
||||
lib/uchar.in.h
|
||||
lib/unicase.in.h
|
||||
lib/unicase/cased.c
|
||||
lib/unicase/cased.h
|
||||
lib/unicase/caseprop.h
|
||||
lib/unicase/context.h
|
||||
lib/unicase/empty-prefix-context.c
|
||||
lib/unicase/empty-suffix-context.c
|
||||
lib/unicase/ignorable.c
|
||||
lib/unicase/ignorable.h
|
||||
lib/unicase/simple-mapping.h
|
||||
lib/unicase/special-casing-table.gperf
|
||||
lib/unicase/special-casing.c
|
||||
lib/unicase/special-casing.in.h
|
||||
lib/unicase/tolower.c
|
||||
lib/unicase/tolower.h
|
||||
lib/unicase/u-casemap.h
|
||||
lib/unicase/u8-casemap.c
|
||||
lib/unicase/u8-tolower.c
|
||||
lib/unicase/unicasemap.h
|
||||
lib/unictype.in.h
|
||||
lib/unictype/bitmap.h
|
||||
lib/unictype/combiningclass.c
|
||||
lib/unictype/combiningclass.h
|
||||
lib/unictype/ctype_alnum.c
|
||||
lib/unictype/ctype_alnum.h
|
||||
lib/unictype/ctype_alpha.c
|
||||
lib/unictype/ctype_alpha.h
|
||||
lib/unictype/ctype_blank.c
|
||||
lib/unictype/ctype_blank.h
|
||||
lib/unictype/ctype_cntrl.c
|
||||
lib/unictype/ctype_cntrl.h
|
||||
lib/unictype/ctype_digit.c
|
||||
lib/unictype/ctype_digit.h
|
||||
lib/unictype/ctype_graph.c
|
||||
lib/unictype/ctype_graph.h
|
||||
lib/unictype/ctype_lower.c
|
||||
lib/unictype/ctype_lower.h
|
||||
lib/unictype/ctype_print.c
|
||||
lib/unictype/ctype_print.h
|
||||
lib/unictype/ctype_punct.c
|
||||
lib/unictype/ctype_punct.h
|
||||
lib/unictype/ctype_space.c
|
||||
lib/unictype/ctype_space.h
|
||||
lib/unictype/ctype_upper.c
|
||||
lib/unictype/ctype_upper.h
|
||||
lib/unictype/ctype_xdigit.c
|
||||
lib/unictype/ctype_xdigit.h
|
||||
lib/unictype/pr_soft_dotted.c
|
||||
lib/unictype/pr_soft_dotted.h
|
||||
lib/uninorm.in.h
|
||||
lib/uninorm/decompose-internal.c
|
||||
lib/uninorm/decompose-internal.h
|
||||
lib/uninorm/normalize-internal.h
|
||||
lib/uninorm/u-normalize-internal.h
|
||||
lib/uninorm/u8-normalize.c
|
||||
lib/unistd--.h
|
||||
lib/unistd-safer.h
|
||||
lib/unistd.c
|
||||
lib/unistd.in.h
|
||||
lib/unistr.in.h
|
||||
lib/unistr/u-cpy.h
|
||||
lib/unistr/u-pcpy.h
|
||||
lib/unistr/u-strcat.h
|
||||
lib/unistr/u-strlen.h
|
||||
lib/unistr/u32-chr.c
|
||||
lib/unistr/u32-cpy.c
|
||||
lib/unistr/u32-pcpy.c
|
||||
lib/unistr/u32-strcat.c
|
||||
lib/unistr/u32-strlen.c
|
||||
lib/unistr/u8-cpy.c
|
||||
lib/unistr/u8-mbtouc-unsafe-aux.c
|
||||
lib/unistr/u8-mbtouc-unsafe.c
|
||||
lib/unistr/u8-strlen.c
|
||||
lib/unistr/u8-uctomb-aux.c
|
||||
lib/unistr/u8-uctomb.c
|
||||
lib/unitypes.in.h
|
||||
lib/uniwidth.in.h
|
||||
lib/uniwidth/cjk.h
|
||||
lib/uniwidth/width.c
|
||||
lib/uniwidth/width0.h
|
||||
lib/uniwidth/width2.h
|
||||
lib/unlink.c
|
||||
lib/unlocked-io.h
|
||||
lib/utime.c
|
||||
lib/utime.in.h
|
||||
lib/utimens.c
|
||||
lib/utimens.h
|
||||
lib/vasnprintf.c
|
||||
lib/vasnprintf.h
|
||||
lib/vasprintf.c
|
||||
lib/verify.h
|
||||
lib/vsnprintf.c
|
||||
lib/vsnzprintf.c
|
||||
lib/w32sock.h
|
||||
lib/wait-process.c
|
||||
lib/wait-process.h
|
||||
lib/waitpid.c
|
||||
lib/warn-on-use.h
|
||||
lib/wchar.in.h
|
||||
lib/wcrtomb.c
|
||||
lib/wctype-h.c
|
||||
lib/wctype-impl.h
|
||||
lib/wctype.c
|
||||
lib/wctype.in.h
|
||||
lib/wcwidth.c
|
||||
lib/windows-initguard.h
|
||||
lib/windows-mutex.c
|
||||
lib/windows-mutex.h
|
||||
lib/windows-once.c
|
||||
lib/windows-once.h
|
||||
lib/windows-path.c
|
||||
lib/windows-path.h
|
||||
lib/windows-recmutex.c
|
||||
lib/windows-recmutex.h
|
||||
lib/windows-rwlock.c
|
||||
lib/windows-rwlock.h
|
||||
lib/windows-spawn.c
|
||||
lib/windows-spawn.h
|
||||
lib/wmemchr-impl.h
|
||||
lib/wmemchr.c
|
||||
lib/wmempcpy.c
|
||||
lib/write.c
|
||||
lib/xalloc-die.c
|
||||
lib/xalloc-oversized.h
|
||||
lib/xalloc.h
|
||||
lib/xmalloc.c
|
||||
lib/xmemdup0.c
|
||||
lib/xmemdup0.h
|
||||
lib/xsize.c
|
||||
lib/xsize.h
|
||||
lib/xstrndup.c
|
||||
lib/xstrndup.h
|
62
gnulib_po/Rules-quot
Normal file
62
gnulib_po/Rules-quot
Normal file
|
@ -0,0 +1,62 @@
|
|||
# Special Makefile rules for English message catalogs with quotation marks.
|
||||
#
|
||||
# Copyright (C) 2001-2017 Free Software Foundation, Inc.
|
||||
# This file, Rules-quot, and its auxiliary files (listed under
|
||||
# DISTFILES.common.extra1) are free software; the Free Software Foundation
|
||||
# gives unlimited permission to use, copy, distribute, and modify them.
|
||||
|
||||
DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot
|
||||
|
||||
.SUFFIXES: .insert-header .po-update-en
|
||||
|
||||
en@quot.po-create:
|
||||
$(MAKE) en@quot.po-update
|
||||
en@boldquot.po-create:
|
||||
$(MAKE) en@boldquot.po-update
|
||||
|
||||
en@quot.po-update: en@quot.po-update-en
|
||||
en@boldquot.po-update: en@boldquot.po-update-en
|
||||
|
||||
.insert-header.po-update-en:
|
||||
@lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
|
||||
if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
|
||||
tmpdir=`pwd`; \
|
||||
echo "$$lang:"; \
|
||||
ll=`echo $$lang | sed -e 's/@.*//'`; \
|
||||
LC_ALL=C; export LC_ALL; \
|
||||
cd $(srcdir); \
|
||||
if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \
|
||||
| $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \
|
||||
{ case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
|
||||
'' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \
|
||||
$(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \
|
||||
;; \
|
||||
*) \
|
||||
$(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \
|
||||
;; \
|
||||
esac } 2>/dev/null > $$tmpdir/$$lang.new.po \
|
||||
; then \
|
||||
if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
else \
|
||||
if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
|
||||
:; \
|
||||
else \
|
||||
echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
else \
|
||||
echo "creation of $$lang.po failed!" 1>&2; \
|
||||
rm -f $$tmpdir/$$lang.new.po; \
|
||||
fi
|
||||
|
||||
en@quot.insert-header: insert-header.sin
|
||||
sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header
|
||||
|
||||
en@boldquot.insert-header: insert-header.sin
|
||||
sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header
|
||||
|
||||
mostlyclean: mostlyclean-quot
|
||||
mostlyclean-quot:
|
||||
rm -f *.insert-header
|
BIN
gnulib_po/af.gmo
Normal file
BIN
gnulib_po/af.gmo
Normal file
Binary file not shown.
582
gnulib_po/af.po
Normal file
582
gnulib_po/af.po
Normal file
|
@ -0,0 +1,582 @@
|
|||
# coreutils-5.2.1.af.po.
|
||||
# Copyright (C) 2004 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# Petri Jooste <rkwjpj@puknet.puk.ac.za>, 2004.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: coreutils 5.2.1\n"
|
||||
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
|
||||
"POT-Creation-Date: 2024-11-10 22:29+0100\n"
|
||||
"PO-Revision-Date: 2004-03-17 11:58+0200\n"
|
||||
"Last-Translator: Petri Jooste <rkwjpj@puk.ac.za>\n"
|
||||
"Language-Team: Afrikaans <i18n@af.org.za>\n"
|
||||
"Language: af\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=iso-8859-1\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Bugs: Report translation errors to the Language-Team address.\n"
|
||||
|
||||
#: lib/error.c:208
|
||||
msgid "Unknown system error"
|
||||
msgstr "Onbekende stelselfout"
|
||||
|
||||
#: lib/gai_strerror.c:57
|
||||
#, fuzzy
|
||||
msgid "Address family for hostname not supported"
|
||||
msgstr "fifo-lêers word nie ondersteun nie"
|
||||
|
||||
#: lib/gai_strerror.c:58
|
||||
msgid "Temporary failure in name resolution"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:59
|
||||
msgid "Bad value for ai_flags"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:60
|
||||
msgid "Non-recoverable failure in name resolution"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:61
|
||||
#, fuzzy
|
||||
msgid "ai_family not supported"
|
||||
msgstr "fifo-lêers word nie ondersteun nie"
|
||||
|
||||
#: lib/gai_strerror.c:62
|
||||
msgid "Memory allocation failure"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:63
|
||||
msgid "No address associated with hostname"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:64
|
||||
msgid "Name or service not known"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:65
|
||||
msgid "Servname not supported for ai_socktype"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:66
|
||||
#, fuzzy
|
||||
msgid "ai_socktype not supported"
|
||||
msgstr "fifo-lêers word nie ondersteun nie"
|
||||
|
||||
#: lib/gai_strerror.c:67
|
||||
#, fuzzy
|
||||
msgid "System error"
|
||||
msgstr "skryffout"
|
||||
|
||||
#: lib/gai_strerror.c:68
|
||||
msgid "Argument buffer too small"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:70
|
||||
msgid "Processing request in progress"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:71
|
||||
msgid "Request canceled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:72
|
||||
msgid "Request not canceled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:73
|
||||
msgid "All requests done"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:74
|
||||
msgid "Interrupted by a signal"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:75
|
||||
msgid "Parameter string not correctly encoded"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:87
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "Onbekende stelselfout"
|
||||
|
||||
#: lib/getopt.c:282
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%s' is ambiguous\n"
|
||||
msgid "%s: option '%s%s' is ambiguous\n"
|
||||
msgstr "%s: opsie `%s' is dubbelsinnig\n"
|
||||
|
||||
#: lib/getopt.c:288
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%s' is ambiguous\n"
|
||||
msgid "%s: option '%s%s' is ambiguous; possibilities:"
|
||||
msgstr "%s: opsie `%s' is dubbelsinnig\n"
|
||||
|
||||
#: lib/getopt.c:322
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: unrecognized option `%c%s'\n"
|
||||
msgid "%s: unrecognized option '%s%s'\n"
|
||||
msgstr "%s: onbekende opsie `%c%s'\n"
|
||||
|
||||
#: lib/getopt.c:348
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%c%s' doesn't allow an argument\n"
|
||||
msgid "%s: option '%s%s' doesn't allow an argument\n"
|
||||
msgstr "%s: opsie `%c%s' laat nie 'n parameter toe nie\n"
|
||||
|
||||
#: lib/getopt.c:363
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%s' requires an argument\n"
|
||||
msgid "%s: option '%s%s' requires an argument\n"
|
||||
msgstr "%s: opsie `%s' benodig 'n parameter\n"
|
||||
|
||||
#: lib/getopt.c:624
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: invalid option -- %c\n"
|
||||
msgid "%s: invalid option -- '%c'\n"
|
||||
msgstr "%s: ongeldige opsie -- %c\n"
|
||||
|
||||
#: lib/getopt.c:639 lib/getopt.c:685
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option requires an argument -- %c\n"
|
||||
msgid "%s: option requires an argument -- '%c'\n"
|
||||
msgstr "%s: opsie benodig 'n parameter -- %c\n"
|
||||
|
||||
#: lib/openat-die.c:38
|
||||
#, fuzzy, c-format
|
||||
msgid "unable to record current working directory"
|
||||
msgstr "kon nie na aanvanklike werkgids terugkeer nie"
|
||||
|
||||
#: lib/openat-die.c:57
|
||||
#, c-format
|
||||
msgid "failed to return to initial working directory"
|
||||
msgstr "kon nie na aanvanklike werkgids terugkeer nie"
|
||||
|
||||
#: lib/os2-spawn.c:51
|
||||
#, c-format
|
||||
msgid "_open_osfhandle failed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/os2-spawn.c:88
|
||||
#, c-format
|
||||
msgid "cannot restore fd %d: dup2 failed"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS:
|
||||
#. Get translations for open and closing quotation marks.
|
||||
#. The message catalog should translate "`" to a left
|
||||
#. quotation mark suitable for the locale, and similarly for
|
||||
#. "'". For example, a French Unicode local should translate
|
||||
#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), respectively.
|
||||
#.
|
||||
#. If the catalog has no translation, we will try to
|
||||
#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
|
||||
#. current locale is not Unicode, locale_quoting_style
|
||||
#. will quote 'like this', and clocale_quoting_style will
|
||||
#. quote "like this". You should always include translations
|
||||
#. for "`" and "'" even if U+2018 and U+2019 are appropriate
|
||||
#. for your locale.
|
||||
#.
|
||||
#. If you don't know what to put here, please see
|
||||
#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
|
||||
#. and use glyphs suitable for your language.
|
||||
#: lib/quotearg.c:354
|
||||
msgid "`"
|
||||
msgstr "`"
|
||||
|
||||
#: lib/quotearg.c:355
|
||||
msgid "'"
|
||||
msgstr "'"
|
||||
|
||||
#: lib/regcomp.c:122
|
||||
msgid "Success"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:125
|
||||
msgid "No match"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:128
|
||||
#, fuzzy
|
||||
msgid "Invalid regular expression"
|
||||
msgstr "%s: ongeldige reëlmatige uitdrukking: %s"
|
||||
|
||||
#: lib/regcomp.c:131
|
||||
#, fuzzy
|
||||
msgid "Invalid collation character"
|
||||
msgstr "ongeldige karakterklas `%s'"
|
||||
|
||||
#: lib/regcomp.c:134
|
||||
#, fuzzy
|
||||
msgid "Invalid character class name"
|
||||
msgstr "ongeldige karakterklas `%s'"
|
||||
|
||||
#: lib/regcomp.c:137
|
||||
msgid "Trailing backslash"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:140
|
||||
msgid "Invalid back reference"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:143
|
||||
msgid "Unmatched [, [^, [:, [., or [="
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:146
|
||||
msgid "Unmatched ( or \\("
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:149
|
||||
msgid "Unmatched \\{"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:152
|
||||
msgid "Invalid content of \\{\\}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:155
|
||||
#, fuzzy
|
||||
msgid "Invalid range end"
|
||||
msgstr "%s: ongeldige reëlmatige uitdrukking: %s"
|
||||
|
||||
#: lib/regcomp.c:158
|
||||
#, fuzzy
|
||||
msgid "Memory exhausted"
|
||||
msgstr "geheue uitgeput"
|
||||
|
||||
#: lib/regcomp.c:161
|
||||
#, fuzzy
|
||||
msgid "Invalid preceding regular expression"
|
||||
msgstr "%s: ongeldige reëlmatige uitdrukking: %s"
|
||||
|
||||
#: lib/regcomp.c:164
|
||||
#, fuzzy
|
||||
msgid "Premature end of regular expression"
|
||||
msgstr "fout in soektog met reëlmatige uitdrukking"
|
||||
|
||||
#: lib/regcomp.c:167
|
||||
#, fuzzy
|
||||
msgid "Regular expression too big"
|
||||
msgstr "%s: ongeldige reëlmatige uitdrukking: %s"
|
||||
|
||||
#: lib/regcomp.c:170
|
||||
msgid "Unmatched ) or \\)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:650
|
||||
#, fuzzy
|
||||
msgid "No previous regular expression"
|
||||
msgstr "fout in soektog met reëlmatige uitdrukking"
|
||||
|
||||
#: lib/spawn-pipe.c:218 lib/spawn-pipe.c:221
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot create pipe"
|
||||
msgstr "kan nie die skakel %s skep nie"
|
||||
|
||||
#: lib/spawn-pipe.c:599 lib/wait-process.c:326 lib/wait-process.c:400
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess failed"
|
||||
msgstr "%s: seek het misluk"
|
||||
|
||||
#: lib/wait-process.c:267 lib/wait-process.c:299 lib/wait-process.c:361
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess"
|
||||
msgstr "%s: seek het misluk"
|
||||
|
||||
#: lib/wait-process.c:318 lib/wait-process.c:390
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess got fatal signal %d"
|
||||
msgstr "%s: seek het misluk"
|
||||
|
||||
#: lib/xalloc-die.c:34
|
||||
msgid "memory exhausted"
|
||||
msgstr "geheue uitgeput"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid argument %s for %s"
|
||||
#~ msgstr "ongeldige parameter %s vir %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ambiguous argument %s for %s"
|
||||
#~ msgstr "dubbelsinnige parameter %s vir %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Valid arguments are:"
|
||||
#~ msgstr "Geldige parameters is soos volg:"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid ""
|
||||
#~ "Mandatory or optional arguments to long options are also mandatory or "
|
||||
#~ "optional for any corresponding short options."
|
||||
#~ msgstr ""
|
||||
#~ "Verpligte parameters vir langformaat opsies is ook verpligtend vir "
|
||||
#~ "kortformaat opsies.\n"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid " [OPTION...]"
|
||||
#~ msgstr "Gebruik so: %s [OPSIE]...\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
|
||||
#~ msgstr "Probeer `%s --help' vir meer inligting.\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Report bugs to %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Rapporteer foute aan <%s>.\n"
|
||||
|
||||
#~ msgid "NAME"
|
||||
#~ msgstr "NAAM"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "%s: Too many arguments\n"
|
||||
#~ msgstr "te veel parameters\n"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "program error"
|
||||
#~ msgstr "leesfout"
|
||||
|
||||
#~ msgid "write error"
|
||||
#~ msgstr "skryffout"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error while opening \"%s\" for reading"
|
||||
#~ msgstr "kan nie %s oopmaak om te lees nie"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "cannot open backup file \"%s\" for writing"
|
||||
#~ msgstr "kan nie %s oopmaak om te lees nie"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error reading \"%s\""
|
||||
#~ msgstr "fout met die les van %s"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error writing \"%s\""
|
||||
#~ msgstr "fout met die skryf na %s"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error after reading \"%s\""
|
||||
#~ msgstr "fout met die les van %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "fdopen() failed"
|
||||
#~ msgstr "'open' het gefaal"
|
||||
|
||||
#~ msgid "regular empty file"
|
||||
#~ msgstr "gewone leë lêer"
|
||||
|
||||
#~ msgid "regular file"
|
||||
#~ msgstr "gewone lêer"
|
||||
|
||||
#~ msgid "directory"
|
||||
#~ msgstr "lêergids"
|
||||
|
||||
#~ msgid "block special file"
|
||||
#~ msgstr "spesiale bloklêer"
|
||||
|
||||
#~ msgid "character special file"
|
||||
#~ msgstr "spesiale karakterlêer"
|
||||
|
||||
#~ msgid "fifo"
|
||||
#~ msgstr "fifo"
|
||||
|
||||
#~ msgid "symbolic link"
|
||||
#~ msgstr "simboliese skakel"
|
||||
|
||||
#~ msgid "socket"
|
||||
#~ msgstr "sok"
|
||||
|
||||
#~ msgid "message queue"
|
||||
#~ msgstr "boodskapwagtou"
|
||||
|
||||
#~ msgid "semaphore"
|
||||
#~ msgstr "semafoor"
|
||||
|
||||
#~ msgid "shared memory object"
|
||||
#~ msgstr "gedeeldegeheue-objek"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "typed memory object"
|
||||
#~ msgstr "gedeeldegeheue-objek"
|
||||
|
||||
#~ msgid "weird file"
|
||||
#~ msgstr "vreemde lêer"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option `--%s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: opsie `--%s' laat nie 'n parameter toe nie\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: unrecognized option `--%s'\n"
|
||||
#~ msgstr "%s: onbekende opsie `--%s'\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: illegal option -- %c\n"
|
||||
#~ msgstr "%s: onwettige opsie -- %c\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option `-W %s' is ambiguous\n"
|
||||
#~ msgstr "%s: opsie `-W %s' is dubbelsinnig\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: opsie `-W %s' laat nie 'n parameter toe nie\n"
|
||||
|
||||
#~ msgid "block size"
|
||||
#~ msgstr "blokgrootte"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s exists but is not a directory"
|
||||
#~ msgstr "%s bestaan maar is nie 'n lêergids nie"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot change owner and/or group of %s"
|
||||
#~ msgstr "kan nie die eienaar en/of groep van %s verander nie"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create directory %s"
|
||||
#~ msgstr "Kan nie lêergids %s skep nie."
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot chdir to directory %s"
|
||||
#~ msgstr "kan nie chdir doen om na gids %s te gaan nie"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot change permissions of %s"
|
||||
#~ msgstr "kan nie toegangsregte van %s verander nie"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Failed to open /dev/zero for read"
|
||||
#~ msgstr "magtigings vir %s kon nie behou word nie"
|
||||
|
||||
#~ msgid "^[yY]"
|
||||
#~ msgstr "^[jJ]"
|
||||
|
||||
#~ msgid "^[nN]"
|
||||
#~ msgstr "^[nN]"
|
||||
|
||||
#~ msgid "iconv function not usable"
|
||||
#~ msgstr "iconv-funksie onbruikbaar"
|
||||
|
||||
#~ msgid "iconv function not available"
|
||||
#~ msgstr "iconv-funksie is nie beskikbaar nie"
|
||||
|
||||
#~ msgid "character out of range"
|
||||
#~ msgstr "karakter is buite die grense"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set"
|
||||
#~ msgstr "kan nie U+%04X omskakel na 'n plaaslike karakterstel nie"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set: %s"
|
||||
#~ msgstr "kan nie U+%04X omskakel na 'n plaaslike karakterstel nie: %s"
|
||||
|
||||
#~ msgid "invalid user"
|
||||
#~ msgstr "ongeldige gebruiker"
|
||||
|
||||
#~ msgid "invalid group"
|
||||
#~ msgstr "ongeldige groep "
|
||||
|
||||
#~ msgid "cannot get the login group of a numeric UID"
|
||||
#~ msgstr "kan nie die aantekengroep van 'n numeriese UID verkry nie"
|
||||
|
||||
# TRANSLATORS: %s denotes an author name.
|
||||
# TRANSLATORS: %s denotes an author name.
|
||||
#, c-format
|
||||
#~ msgid "Written by %s.\n"
|
||||
#~ msgstr "Geskryf deur %s.\n"
|
||||
|
||||
# TRANSLATORS: Each %s denotes an author name.
|
||||
# TRANSLATORS: Each %s denotes an author name.
|
||||
#, c-format
|
||||
#~ msgid "Written by %s and %s.\n"
|
||||
#~ msgstr "Geskryf deur %s en %s.\n"
|
||||
|
||||
# TRANSLATORS: Each %s denotes an author name.
|
||||
#, c-format
|
||||
#~ msgid "Written by %s, %s, and %s.\n"
|
||||
#~ msgstr "Geskryf deur %s, %s en %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Geskryf deur %s, %s, %s \n"
|
||||
#~ "en %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Geskryf deur %s, %s, %s, \n"
|
||||
#~ "%s en %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Geskryf deur %s, %s, %s, \n"
|
||||
#~ "%s, %s en %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Geskryf deur %s, %s, %s, \n"
|
||||
#~ "%s, %s, %s en %s.\n"
|
||||
|
||||
# TRANSLATORS: Each %s denotes an author name.
|
||||
# You can use line breaks, estimating that each author name occupies
|
||||
# ca. 16 screen columns and that a screen line has ca. 80 columns.
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Geskryf deur %s, %s, %s, \n"
|
||||
#~ "%s, %s, %s, %s\n"
|
||||
#~ "en %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Geskryf deur %s, %s, %s, \n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s en %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s, and others.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Geskryf deur %s, %s, %s, \n"
|
||||
#~ "%s, %s, %s, %s\n"
|
||||
#~ "%s, %s en ander.\n"
|
||||
|
||||
#~ msgid "string comparison failed"
|
||||
#~ msgstr "stringvergelyking het gefaal"
|
||||
|
||||
#~ msgid "Set LC_ALL='C' to work around the problem."
|
||||
#~ msgstr "Stel LC_ALL='C' om die probleem te systap"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "The strings compared were %s and %s."
|
||||
#~ msgstr "Die stringe wat vergelyk is, is %s en %s."
|
BIN
gnulib_po/be.gmo
Normal file
BIN
gnulib_po/be.gmo
Normal file
Binary file not shown.
526
gnulib_po/be.po
Normal file
526
gnulib_po/be.po
Normal file
|
@ -0,0 +1,526 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the coreutils package.
|
||||
# Ales Nyakhaychyk <nab@mail.by>, 2002, 2003.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: coreutils 5.0.91\n"
|
||||
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
|
||||
"POT-Creation-Date: 2024-11-10 22:29+0100\n"
|
||||
"PO-Revision-Date: 2003-10-30 01:10+0200\n"
|
||||
"Last-Translator: Ales Nyakhaychyk <nab@mail.by>\n"
|
||||
"Language-Team: Belarusian <i18n@mova.org>\n"
|
||||
"Language: be\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Bugs: Report translation errors to the Language-Team address.\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"X-Generator: KBabel 1.0.2\n"
|
||||
|
||||
#: lib/error.c:208
|
||||
msgid "Unknown system error"
|
||||
msgstr "Невядомая сыстэмная памылка"
|
||||
|
||||
#: lib/gai_strerror.c:57
|
||||
#, fuzzy
|
||||
msgid "Address family for hostname not supported"
|
||||
msgstr "fifo файлы непадтрымліваюцца"
|
||||
|
||||
#: lib/gai_strerror.c:58
|
||||
msgid "Temporary failure in name resolution"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:59
|
||||
msgid "Bad value for ai_flags"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:60
|
||||
msgid "Non-recoverable failure in name resolution"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:61
|
||||
#, fuzzy
|
||||
msgid "ai_family not supported"
|
||||
msgstr "fifo файлы непадтрымліваюцца"
|
||||
|
||||
#: lib/gai_strerror.c:62
|
||||
msgid "Memory allocation failure"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:63
|
||||
msgid "No address associated with hostname"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:64
|
||||
msgid "Name or service not known"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:65
|
||||
msgid "Servname not supported for ai_socktype"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:66
|
||||
#, fuzzy
|
||||
msgid "ai_socktype not supported"
|
||||
msgstr "fifo файлы непадтрымліваюцца"
|
||||
|
||||
#: lib/gai_strerror.c:67
|
||||
#, fuzzy
|
||||
msgid "System error"
|
||||
msgstr "памылка запісу"
|
||||
|
||||
#: lib/gai_strerror.c:68
|
||||
msgid "Argument buffer too small"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:70
|
||||
msgid "Processing request in progress"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:71
|
||||
msgid "Request canceled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:72
|
||||
msgid "Request not canceled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:73
|
||||
msgid "All requests done"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:74
|
||||
msgid "Interrupted by a signal"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:75
|
||||
msgid "Parameter string not correctly encoded"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:87
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "Невядомая сыстэмная памылка"
|
||||
|
||||
#: lib/getopt.c:282
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%s' is ambiguous\n"
|
||||
msgid "%s: option '%s%s' is ambiguous\n"
|
||||
msgstr "%s: выбар `%s' неадназначны\n"
|
||||
|
||||
#: lib/getopt.c:288
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%s' is ambiguous\n"
|
||||
msgid "%s: option '%s%s' is ambiguous; possibilities:"
|
||||
msgstr "%s: выбар `%s' неадназначны\n"
|
||||
|
||||
#: lib/getopt.c:322
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: unrecognized option `%c%s'\n"
|
||||
msgid "%s: unrecognized option '%s%s'\n"
|
||||
msgstr "%s: нераспазнаны выбар `%c%s'\n"
|
||||
|
||||
#: lib/getopt.c:348
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%c%s' doesn't allow an argument\n"
|
||||
msgid "%s: option '%s%s' doesn't allow an argument\n"
|
||||
msgstr "%s: выбар `%c%s' не дазваляе довад\n"
|
||||
|
||||
#: lib/getopt.c:363
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%s' requires an argument\n"
|
||||
msgid "%s: option '%s%s' requires an argument\n"
|
||||
msgstr "%s: выбар `%s' патрабуе довад\n"
|
||||
|
||||
#: lib/getopt.c:624
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: invalid option -- %c\n"
|
||||
msgid "%s: invalid option -- '%c'\n"
|
||||
msgstr "%s: нерэчаісны выбар -- %c\n"
|
||||
|
||||
#: lib/getopt.c:639 lib/getopt.c:685
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option requires an argument -- %c\n"
|
||||
msgid "%s: option requires an argument -- '%c'\n"
|
||||
msgstr "%s: выбар патрабуе довад -- %c\n"
|
||||
|
||||
#: lib/openat-die.c:38
|
||||
#, fuzzy, c-format
|
||||
msgid "unable to record current working directory"
|
||||
msgstr "немагчыма вярнуцца ў пачатковую працоўную тэчку"
|
||||
|
||||
#: lib/openat-die.c:57
|
||||
#, c-format
|
||||
msgid "failed to return to initial working directory"
|
||||
msgstr "немагчыма вярнуцца ў пачатковую працоўную тэчку"
|
||||
|
||||
#: lib/os2-spawn.c:51
|
||||
#, c-format
|
||||
msgid "_open_osfhandle failed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/os2-spawn.c:88
|
||||
#, c-format
|
||||
msgid "cannot restore fd %d: dup2 failed"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS:
|
||||
#. Get translations for open and closing quotation marks.
|
||||
#. The message catalog should translate "`" to a left
|
||||
#. quotation mark suitable for the locale, and similarly for
|
||||
#. "'". For example, a French Unicode local should translate
|
||||
#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), respectively.
|
||||
#.
|
||||
#. If the catalog has no translation, we will try to
|
||||
#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
|
||||
#. current locale is not Unicode, locale_quoting_style
|
||||
#. will quote 'like this', and clocale_quoting_style will
|
||||
#. quote "like this". You should always include translations
|
||||
#. for "`" and "'" even if U+2018 and U+2019 are appropriate
|
||||
#. for your locale.
|
||||
#.
|
||||
#. If you don't know what to put here, please see
|
||||
#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
|
||||
#. and use glyphs suitable for your language.
|
||||
#: lib/quotearg.c:354
|
||||
msgid "`"
|
||||
msgstr "`"
|
||||
|
||||
#: lib/quotearg.c:355
|
||||
msgid "'"
|
||||
msgstr "'"
|
||||
|
||||
#: lib/regcomp.c:122
|
||||
msgid "Success"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:125
|
||||
msgid "No match"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:128
|
||||
#, fuzzy
|
||||
msgid "Invalid regular expression"
|
||||
msgstr "%s: нерэчаісны звычайны выраз: %s"
|
||||
|
||||
#: lib/regcomp.c:131
|
||||
#, fuzzy
|
||||
msgid "Invalid collation character"
|
||||
msgstr "нерэчаісны знак %s у радку рэжыму %s"
|
||||
|
||||
#: lib/regcomp.c:134
|
||||
#, fuzzy
|
||||
msgid "Invalid character class name"
|
||||
msgstr "нерэчаісны знак %s у радку рэжыму %s"
|
||||
|
||||
#: lib/regcomp.c:137
|
||||
msgid "Trailing backslash"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:140
|
||||
msgid "Invalid back reference"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:143
|
||||
msgid "Unmatched [, [^, [:, [., or [="
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:146
|
||||
msgid "Unmatched ( or \\("
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:149
|
||||
msgid "Unmatched \\{"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:152
|
||||
msgid "Invalid content of \\{\\}"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:155
|
||||
#, fuzzy
|
||||
msgid "Invalid range end"
|
||||
msgstr "%s: нерэчаісны звычайны выраз: %s"
|
||||
|
||||
#: lib/regcomp.c:158
|
||||
#, fuzzy
|
||||
msgid "Memory exhausted"
|
||||
msgstr "памяць вычарпана"
|
||||
|
||||
#: lib/regcomp.c:161
|
||||
#, fuzzy
|
||||
msgid "Invalid preceding regular expression"
|
||||
msgstr "%s: нерэчаісны звычайны выраз: %s"
|
||||
|
||||
#: lib/regcomp.c:164
|
||||
#, fuzzy
|
||||
msgid "Premature end of regular expression"
|
||||
msgstr "памылка ў пошуку звычайнага выразу"
|
||||
|
||||
#: lib/regcomp.c:167
|
||||
#, fuzzy
|
||||
msgid "Regular expression too big"
|
||||
msgstr "%s: нерэчаісны звычайны выраз: %s"
|
||||
|
||||
#: lib/regcomp.c:170
|
||||
msgid "Unmatched ) or \\)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:650
|
||||
#, fuzzy
|
||||
msgid "No previous regular expression"
|
||||
msgstr "памылка ў пошуку звычайнага выразу"
|
||||
|
||||
#: lib/spawn-pipe.c:218 lib/spawn-pipe.c:221
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot create pipe"
|
||||
msgstr "немагчыма стварыць лучыва %s"
|
||||
|
||||
#: lib/spawn-pipe.c:599 lib/wait-process.c:326 lib/wait-process.c:400
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess failed"
|
||||
msgstr "%s: збой seek"
|
||||
|
||||
#: lib/wait-process.c:267 lib/wait-process.c:299 lib/wait-process.c:361
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess"
|
||||
msgstr "%s: збой seek"
|
||||
|
||||
#: lib/wait-process.c:318 lib/wait-process.c:390
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess got fatal signal %d"
|
||||
msgstr "%s: збой seek"
|
||||
|
||||
#: lib/xalloc-die.c:34
|
||||
msgid "memory exhausted"
|
||||
msgstr "памяць вычарпана"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid argument %s for %s"
|
||||
#~ msgstr "нерэчаісны довад %s для %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ambiguous argument %s for %s"
|
||||
#~ msgstr "неадназначны довад %s для %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Valid arguments are:"
|
||||
#~ msgstr "Рэчаісныя довады:"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid ""
|
||||
#~ "Mandatory or optional arguments to long options are also mandatory or "
|
||||
#~ "optional for any corresponding short options."
|
||||
#~ msgstr ""
|
||||
#~ "Довады, абавязковыя для доўгіх выбараў, абавязковыя й для кароткіх.\n"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid " [OPTION...]"
|
||||
#~ msgstr "Выкарыстаньне: %s [ВЫБАР]...\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
|
||||
#~ msgstr "Паспрабуйце \"%s --help\" для больш падрабязных зьвестак.\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Report bugs to %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Паведамляйце пра памылкі на <%s>.\n"
|
||||
|
||||
#~ msgid "NAME"
|
||||
#~ msgstr "НАЗВА"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "%s: Too many arguments\n"
|
||||
#~ msgstr "зашмат довадаў\n"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "program error"
|
||||
#~ msgstr "памылка чытаньня"
|
||||
|
||||
#~ msgid "write error"
|
||||
#~ msgstr "памылка запісу"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error while opening \"%s\" for reading"
|
||||
#~ msgstr "немагыма адчыніць %s для чытаньня"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "cannot open backup file \"%s\" for writing"
|
||||
#~ msgstr "немагыма адчыніць %s для чытаньня"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error reading \"%s\""
|
||||
#~ msgstr "памылка чытаньня %s"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error writing \"%s\""
|
||||
#~ msgstr "памылка запісу %s"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error after reading \"%s\""
|
||||
#~ msgstr "памылка чытаньня %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "fdopen() failed"
|
||||
#~ msgstr "памылка адкрыцьця"
|
||||
|
||||
#~ msgid "regular empty file"
|
||||
#~ msgstr "звычайны парожні файл"
|
||||
|
||||
#~ msgid "regular file"
|
||||
#~ msgstr "звычайны файл"
|
||||
|
||||
#~ msgid "directory"
|
||||
#~ msgstr "тэчка"
|
||||
|
||||
#~ msgid "block special file"
|
||||
#~ msgstr "асаблівы кавалкавы файл"
|
||||
|
||||
#~ msgid "character special file"
|
||||
#~ msgstr "асаблівы знакавы файл"
|
||||
|
||||
#~ msgid "fifo"
|
||||
#~ msgstr "fifo"
|
||||
|
||||
#~ msgid "symbolic link"
|
||||
#~ msgstr "знакавае лучыва"
|
||||
|
||||
#~ msgid "socket"
|
||||
#~ msgstr "socket"
|
||||
|
||||
#~ msgid "message queue"
|
||||
#~ msgstr "чарга паведамленьняў"
|
||||
|
||||
#~ msgid "semaphore"
|
||||
#~ msgstr "сэмафор"
|
||||
|
||||
#~ msgid "shared memory object"
|
||||
#~ msgstr "абьект з агульнай памяцьцю"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "typed memory object"
|
||||
#~ msgstr "абьект з агульнай памяцьцю"
|
||||
|
||||
#~ msgid "weird file"
|
||||
#~ msgstr "лёсавы файл"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option `--%s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: выбар `--%s' не дазваляе довад\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: unrecognized option `--%s'\n"
|
||||
#~ msgstr "%s: нераспазнаны выбар `--%s'\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: illegal option -- %c\n"
|
||||
#~ msgstr "%s: недапушчальны выраб -- %c\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option `-W %s' is ambiguous\n"
|
||||
#~ msgstr "%s: выбар `-W %s' неадназначыны\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: выбар `-W %s' не дазваляе довад\n"
|
||||
|
||||
#~ msgid "block size"
|
||||
#~ msgstr "памер кавалку"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s exists but is not a directory"
|
||||
#~ msgstr "%s існуе, але гэта ня тэчка"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot change owner and/or group of %s"
|
||||
#~ msgstr "немагчыма зьмяніць уладальніка й/ці групу %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create directory %s"
|
||||
#~ msgstr "немагчыма стварыць тэчку %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot chdir to directory %s"
|
||||
#~ msgstr "немагчыма перайсьці да тэчкі %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot change permissions of %s"
|
||||
#~ msgstr "немагчыма зьмяніць правы %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Failed to open /dev/zero for read"
|
||||
#~ msgstr "збой пры захаваньні правоў для %s"
|
||||
|
||||
#~ msgid "^[yY]"
|
||||
#~ msgstr "^[тТ]"
|
||||
|
||||
#~ msgid "^[nN]"
|
||||
#~ msgstr "^[нН]"
|
||||
|
||||
#~ msgid "iconv function not usable"
|
||||
#~ msgstr "функцыя iconv непрыгодна для выкарыстаньня"
|
||||
|
||||
#~ msgid "iconv function not available"
|
||||
#~ msgstr "недаступна функцыя iconv"
|
||||
|
||||
#~ msgid "character out of range"
|
||||
#~ msgstr "знак па за дапушчальнымі межамі"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set"
|
||||
#~ msgstr "немагчыма пераўтварыць U+%04X у мясцовы набор знакаў"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set: %s"
|
||||
#~ msgstr "немагчыма пераўтварыць U+%04X у мясцовы набор знакаў: %s"
|
||||
|
||||
#~ msgid "invalid user"
|
||||
#~ msgstr "нерэчаісны карыстальнік"
|
||||
|
||||
#~ msgid "invalid group"
|
||||
#~ msgstr "нерэчаісная група"
|
||||
|
||||
#~ msgid "cannot get the login group of a numeric UID"
|
||||
#~ msgstr "немагчыма атрымаць уліковую групу лічбавага UID"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s.\n"
|
||||
#~ msgstr "Стваральнік %s.\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Written by %s and %s.\n"
|
||||
#~ msgstr "Стваральнік %s.\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Written by %s, %s, and %s.\n"
|
||||
#~ msgstr "Стваральнік %s.\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr "Стваральнік %s.\n"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr "Стваральнік %s.\n"
|
||||
|
||||
#~ msgid "string comparison failed"
|
||||
#~ msgstr "памылка параўнаньня радку"
|
||||
|
||||
#~ msgid "Set LC_ALL='C' to work around the problem."
|
||||
#~ msgstr "Усталюйце LC_ALL='C' каб працаваць без пытаньняў."
|
||||
|
||||
#, c-format
|
||||
#~ msgid "The strings compared were %s and %s."
|
||||
#~ msgstr "Радкі былі параўнаны тут %s і тут %s."
|
BIN
gnulib_po/bg.gmo
Normal file
BIN
gnulib_po/bg.gmo
Normal file
Binary file not shown.
985
gnulib_po/bg.po
Normal file
985
gnulib_po/bg.po
Normal file
|
@ -0,0 +1,985 @@
|
|||
# Bulgarian translation of GNU gnulib po-file.
|
||||
# Copyright (C) 2019 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the gnulib package.
|
||||
# Alexander Shopov <ash@kambanaria.org>, 2019.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnulib 4.0.0.2567\n"
|
||||
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
|
||||
"POT-Creation-Date: 2024-11-10 22:29+0100\n"
|
||||
"PO-Revision-Date: 2023-06-18 17:55+0300\n"
|
||||
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
|
||||
"Language-Team: Bulgarian <dict@ludost.net>\n"
|
||||
"Language: bg\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
"X-Bugs: Report translation errors to the Language-Team address.\n"
|
||||
|
||||
#: lib/error.c:208
|
||||
msgid "Unknown system error"
|
||||
msgstr "Неизвестна системна грешка"
|
||||
|
||||
#: lib/gai_strerror.c:57
|
||||
msgid "Address family for hostname not supported"
|
||||
msgstr "Този вид адреси за името на хоста не се поддържат"
|
||||
|
||||
#: lib/gai_strerror.c:58
|
||||
msgid "Temporary failure in name resolution"
|
||||
msgstr "Временен проблем при намиране на IP-адреса на хост"
|
||||
|
||||
#: lib/gai_strerror.c:59
|
||||
msgid "Bad value for ai_flags"
|
||||
msgstr "Неправилна стойност за „ai_flags“"
|
||||
|
||||
#: lib/gai_strerror.c:60
|
||||
msgid "Non-recoverable failure in name resolution"
|
||||
msgstr "Окончателен неуспех при намиране на IP-адреса на хост"
|
||||
|
||||
#: lib/gai_strerror.c:61
|
||||
msgid "ai_family not supported"
|
||||
msgstr "посочването на вид адреси („ai_family“) не се поддържа"
|
||||
|
||||
#: lib/gai_strerror.c:62
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "Неуспешно заделяне на памет"
|
||||
|
||||
#: lib/gai_strerror.c:63
|
||||
msgid "No address associated with hostname"
|
||||
msgstr "Няма IP-адрес с посоченото име на хост"
|
||||
|
||||
#: lib/gai_strerror.c:64
|
||||
msgid "Name or service not known"
|
||||
msgstr "Името или услугата са непознати"
|
||||
|
||||
#: lib/gai_strerror.c:65
|
||||
msgid "Servname not supported for ai_socktype"
|
||||
msgstr ""
|
||||
"Името на услугата не се поддържа за използвания вид гнездо („ai_socktype“)"
|
||||
|
||||
#: lib/gai_strerror.c:66
|
||||
msgid "ai_socktype not supported"
|
||||
msgstr "посочването на вид гнездо („ai_socktype“) не се поддържа"
|
||||
|
||||
#: lib/gai_strerror.c:67
|
||||
msgid "System error"
|
||||
msgstr "Системна грешка"
|
||||
|
||||
#: lib/gai_strerror.c:68
|
||||
msgid "Argument buffer too small"
|
||||
msgstr "Буферът за аргументите е твърде малък"
|
||||
|
||||
#: lib/gai_strerror.c:70
|
||||
msgid "Processing request in progress"
|
||||
msgstr "Заявката е в процес на изпълнение"
|
||||
|
||||
#: lib/gai_strerror.c:71
|
||||
msgid "Request canceled"
|
||||
msgstr "Заявката е отменена"
|
||||
|
||||
#: lib/gai_strerror.c:72
|
||||
msgid "Request not canceled"
|
||||
msgstr "Заявката не е отменена"
|
||||
|
||||
#: lib/gai_strerror.c:73
|
||||
msgid "All requests done"
|
||||
msgstr "Изпълнени са всички заявки"
|
||||
|
||||
#: lib/gai_strerror.c:74
|
||||
msgid "Interrupted by a signal"
|
||||
msgstr "Прекъснат със сигнал"
|
||||
|
||||
#: lib/gai_strerror.c:75
|
||||
msgid "Parameter string not correctly encoded"
|
||||
msgstr "Неправилно кодиран низ на аргумент"
|
||||
|
||||
#: lib/gai_strerror.c:87
|
||||
msgid "Unknown error"
|
||||
msgstr "Неизвестна грешка"
|
||||
|
||||
#: lib/getopt.c:282
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' is ambiguous\n"
|
||||
msgstr "%s: опцията „%s%s“ не е еднозначна\n"
|
||||
|
||||
#: lib/getopt.c:288
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' is ambiguous; possibilities:"
|
||||
msgstr "%s: опцията „%s%s“ не е еднозначна. Възможности:"
|
||||
|
||||
#: lib/getopt.c:322
|
||||
#, c-format
|
||||
msgid "%s: unrecognized option '%s%s'\n"
|
||||
msgstr "%s: непозната опция „%s%s“\n"
|
||||
|
||||
#: lib/getopt.c:348
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' doesn't allow an argument\n"
|
||||
msgstr "%s: опцията „%s%s“ се използва без аргументи\n"
|
||||
|
||||
#: lib/getopt.c:363
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' requires an argument\n"
|
||||
msgstr "%s: опцията „%s%s“ изисква аргумент\n"
|
||||
|
||||
#: lib/getopt.c:624
|
||||
#, c-format
|
||||
msgid "%s: invalid option -- '%c'\n"
|
||||
msgstr "%s: неправилна опция — „%c“\n"
|
||||
|
||||
#: lib/getopt.c:639 lib/getopt.c:685
|
||||
#, c-format
|
||||
msgid "%s: option requires an argument -- '%c'\n"
|
||||
msgstr "%s: опцията изисква аргумент — „%c“\n"
|
||||
|
||||
#: lib/openat-die.c:38
|
||||
#, c-format
|
||||
msgid "unable to record current working directory"
|
||||
msgstr "не може да се запише коя е текущата работна директория"
|
||||
|
||||
#: lib/openat-die.c:57
|
||||
#, c-format
|
||||
msgid "failed to return to initial working directory"
|
||||
msgstr "не може да се върне към първоначалната работна директория"
|
||||
|
||||
#: lib/os2-spawn.c:51
|
||||
#, c-format
|
||||
msgid "_open_osfhandle failed"
|
||||
msgstr "неуспешно изпълнение на „_open_osfhandle“"
|
||||
|
||||
#: lib/os2-spawn.c:88
|
||||
#, c-format
|
||||
msgid "cannot restore fd %d: dup2 failed"
|
||||
msgstr ""
|
||||
"файловият дескриптор %d не може да се възстанови: неуспешно изпълнение на "
|
||||
"функцията „dup2“"
|
||||
|
||||
#. TRANSLATORS:
|
||||
#. Get translations for open and closing quotation marks.
|
||||
#. The message catalog should translate "`" to a left
|
||||
#. quotation mark suitable for the locale, and similarly for
|
||||
#. "'". For example, a French Unicode local should translate
|
||||
#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), respectively.
|
||||
#.
|
||||
#. If the catalog has no translation, we will try to
|
||||
#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
|
||||
#. current locale is not Unicode, locale_quoting_style
|
||||
#. will quote 'like this', and clocale_quoting_style will
|
||||
#. quote "like this". You should always include translations
|
||||
#. for "`" and "'" even if U+2018 and U+2019 are appropriate
|
||||
#. for your locale.
|
||||
#.
|
||||
#. If you don't know what to put here, please see
|
||||
#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
|
||||
#. and use glyphs suitable for your language.
|
||||
#: lib/quotearg.c:354
|
||||
msgid "`"
|
||||
msgstr "„"
|
||||
|
||||
#: lib/quotearg.c:355
|
||||
msgid "'"
|
||||
msgstr "“"
|
||||
|
||||
#: lib/regcomp.c:122
|
||||
msgid "Success"
|
||||
msgstr "Успех"
|
||||
|
||||
#: lib/regcomp.c:125
|
||||
msgid "No match"
|
||||
msgstr "Няма съвпадения"
|
||||
|
||||
#: lib/regcomp.c:128
|
||||
msgid "Invalid regular expression"
|
||||
msgstr "Неправилен регулярен израз"
|
||||
|
||||
#: lib/regcomp.c:131
|
||||
msgid "Invalid collation character"
|
||||
msgstr "Неправилен знак за подредба"
|
||||
|
||||
#: lib/regcomp.c:134
|
||||
msgid "Invalid character class name"
|
||||
msgstr "Неправилно име на клас знаци"
|
||||
|
||||
#: lib/regcomp.c:137
|
||||
msgid "Trailing backslash"
|
||||
msgstr "Самотна „\\“ накрая"
|
||||
|
||||
#: lib/regcomp.c:140
|
||||
msgid "Invalid back reference"
|
||||
msgstr "Неправилна препратка към съвпадение"
|
||||
|
||||
#: lib/regcomp.c:143
|
||||
msgid "Unmatched [, [^, [:, [., or [="
|
||||
msgstr "„[“, „[^“, „[:“, „[.“ или „[=“ без еш"
|
||||
|
||||
#: lib/regcomp.c:146
|
||||
msgid "Unmatched ( or \\("
|
||||
msgstr "„(“ или „\\(“ без еш"
|
||||
|
||||
#: lib/regcomp.c:149
|
||||
msgid "Unmatched \\{"
|
||||
msgstr "„\\{“ без еш"
|
||||
|
||||
#: lib/regcomp.c:152
|
||||
msgid "Invalid content of \\{\\}"
|
||||
msgstr "Неправилно съдържание в „\\{\\}“"
|
||||
|
||||
#: lib/regcomp.c:155
|
||||
msgid "Invalid range end"
|
||||
msgstr "Неправилен край на диапазон"
|
||||
|
||||
#: lib/regcomp.c:158
|
||||
msgid "Memory exhausted"
|
||||
msgstr "Паметта свърши"
|
||||
|
||||
#: lib/regcomp.c:161
|
||||
msgid "Invalid preceding regular expression"
|
||||
msgstr "Предхождащият регулярен израз е неправилен"
|
||||
|
||||
#: lib/regcomp.c:164
|
||||
msgid "Premature end of regular expression"
|
||||
msgstr "Ранен край на регулярен израз"
|
||||
|
||||
#: lib/regcomp.c:167
|
||||
msgid "Regular expression too big"
|
||||
msgstr "Регулярният израз е прекалено голям"
|
||||
|
||||
#: lib/regcomp.c:170
|
||||
msgid "Unmatched ) or \\)"
|
||||
msgstr "„)“ или „\\)“ без еш"
|
||||
|
||||
#: lib/regcomp.c:650
|
||||
msgid "No previous regular expression"
|
||||
msgstr "Няма предхождащ регулярен израз"
|
||||
|
||||
#: lib/spawn-pipe.c:218 lib/spawn-pipe.c:221
|
||||
#, c-format
|
||||
msgid "cannot create pipe"
|
||||
msgstr "не може да се създаде програмен канал"
|
||||
|
||||
#: lib/spawn-pipe.c:599 lib/wait-process.c:326 lib/wait-process.c:400
|
||||
#, c-format
|
||||
msgid "%s subprocess failed"
|
||||
msgstr "дъщерният процес „%s“ завърши неуспешно"
|
||||
|
||||
#: lib/wait-process.c:267 lib/wait-process.c:299 lib/wait-process.c:361
|
||||
#, c-format
|
||||
msgid "%s subprocess"
|
||||
msgstr "дъщерен процес „%s“"
|
||||
|
||||
#: lib/wait-process.c:318 lib/wait-process.c:390
|
||||
#, c-format
|
||||
msgid "%s subprocess got fatal signal %d"
|
||||
msgstr "дъщерният процес „%s“ получи фатален сигнал %d"
|
||||
|
||||
#: lib/xalloc-die.c:34
|
||||
msgid "memory exhausted"
|
||||
msgstr "паметта е изчерпана"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid argument %s for %s"
|
||||
#~ msgstr "аргументът „%s“ на опцията „%s“ е неправилен"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ambiguous argument %s for %s"
|
||||
#~ msgstr "аргументът „%s“ на опцията „%s“ не е еднозначен"
|
||||
|
||||
#~ msgid "Valid arguments are:"
|
||||
#~ msgstr "Възможните аргументи са:"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
|
||||
#~ msgstr "„ARGP_HELP_FMT“: стойността %s е по-малка или равна на %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
|
||||
#~ msgstr "%.*s: параметърът „ARGP_HELP_FMT“ изисква стойност"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
|
||||
#~ msgstr "%.*s: непознат параметър „ARGP_HELP_FMT“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Garbage in ARGP_HELP_FMT: %s"
|
||||
#~ msgstr "Грешки в „ARGP_HELP_FMT“: %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Mandatory or optional arguments to long options are also mandatory or "
|
||||
#~ "optional for any corresponding short options."
|
||||
#~ msgstr ""
|
||||
#~ "Аргументите, задължителните или незадължителни за дългите опции, са "
|
||||
#~ "съответно задължителни или незадължителни и за кратките опции."
|
||||
|
||||
#~ msgid "Usage:"
|
||||
#~ msgstr "Използване:"
|
||||
|
||||
#~ msgid " or: "
|
||||
#~ msgstr " или: "
|
||||
|
||||
#~ msgid " [OPTION...]"
|
||||
#~ msgstr " [ОПЦИЯ…]"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
|
||||
#~ msgstr "За повече информация използвайте „%s --help“ или „%s --usage“.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report bugs to %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Съобщавайте за програмни грешки на %s.\n"
|
||||
#~ "За грешки в българския превод на <dict@fsa-bg.org>.\n"
|
||||
|
||||
#~ msgid "give this help list"
|
||||
#~ msgstr "извеждане на тази справка"
|
||||
|
||||
#~ msgid "give a short usage message"
|
||||
#~ msgstr "извеждане на кратко съобщение за използването"
|
||||
|
||||
#~ msgid "NAME"
|
||||
#~ msgstr "ИМЕ"
|
||||
|
||||
#~ msgid "set the program name"
|
||||
#~ msgstr "задаване на името на програмата"
|
||||
|
||||
#~ msgid "SECS"
|
||||
#~ msgstr "СЕКУНДИ"
|
||||
|
||||
#~ msgid "hang for SECS seconds (default 3600)"
|
||||
#~ msgstr "спиране за толкова СЕКУНДИ (стандартно е 3600)"
|
||||
|
||||
#~ msgid "print program version"
|
||||
#~ msgstr "извеждане на версията на програмата"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) No version known!?"
|
||||
#~ msgstr "(ДЕФЕКТ В ПРОГРАМАТА) Неизвестна версия!"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: Too many arguments\n"
|
||||
#~ msgstr "%s: Твърде много аргументи\n"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
|
||||
#~ msgstr "(ДЕФЕКТ В ПРОГРАМАТА) Опцията би трябвало да е била разпозната!"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
|
||||
#~ msgstr "%u побитови заделяния, освободени са %u (%.2f%%).\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
|
||||
#~ msgstr "%u побитови задавания, кеширани са %u (%.2f%%)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
|
||||
#~ msgstr "%u побитови изчиствания, кеширани са %u (%.2f%%)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
|
||||
#~ msgstr "%u побитови проби, кеширани са %u (%.2f%%)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_lists\n"
|
||||
#~ msgstr "%u побитови извеждания\n"
|
||||
|
||||
#~ msgid "count log histogram\n"
|
||||
#~ msgstr "логаритмична хистограма по брой\n"
|
||||
|
||||
#~ msgid "size log histogram\n"
|
||||
#~ msgstr "логаритмична хистограма по размер\n"
|
||||
|
||||
#~ msgid "density histogram\n"
|
||||
#~ msgstr "хистограма по плътност\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Bitset statistics:\n"
|
||||
#~ "\n"
|
||||
#~ msgstr ""
|
||||
#~ "Побитова статистика:\n"
|
||||
#~ "\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Accumulated runs = %u\n"
|
||||
#~ msgstr "Натрупани изпълнения = %u\n"
|
||||
|
||||
#~ msgid "cannot read stats file"
|
||||
#~ msgstr "файлът със статистиките не може да се прочете"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "bad stats file size\n"
|
||||
#~ msgstr "неправилен размер на файла със статистиките\n"
|
||||
|
||||
#~ msgid "cannot write stats file"
|
||||
#~ msgstr "файлът със статистиките не може да се запише"
|
||||
|
||||
#~ msgid "cannot open stats file for writing"
|
||||
#~ msgstr "файлът със статистиките не може да се отвори за запис"
|
||||
|
||||
#~ msgid "program error"
|
||||
#~ msgstr "програмна грешка"
|
||||
|
||||
#~ msgid "stack overflow"
|
||||
#~ msgstr "препълване на стека"
|
||||
|
||||
#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
|
||||
#~ msgstr ""
|
||||
#~ "липсва временна директория, пробвайте да укажете такава в променливата "
|
||||
#~ "„TMPDIR“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create a temporary directory using template \"%s\""
|
||||
#~ msgstr "не може да се създаде временна директория по шаблона „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot remove temporary file %s"
|
||||
#~ msgstr "временният файл „%s“ не може да се изтрие"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot remove temporary directory %s"
|
||||
#~ msgstr "временната директория „%s“ не може да се изтрие"
|
||||
|
||||
#~ msgid "error closing file"
|
||||
#~ msgstr "грешка при затваряне на файл"
|
||||
|
||||
#~ msgid "write error"
|
||||
#~ msgstr "грешка при запис"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "preserving permissions for %s"
|
||||
#~ msgstr "запазване на правата за „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error while opening %s for reading"
|
||||
#~ msgstr "„%s“ не може да се отвори за четене"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot open backup file %s for writing"
|
||||
#~ msgstr "резервният файл „%s“ не може да се отвори за запис"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error reading %s"
|
||||
#~ msgstr "грешка при четене на „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error writing %s"
|
||||
#~ msgstr "грешка при записа на „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error after reading %s"
|
||||
#~ msgstr "грешка след четене на „%s“"
|
||||
|
||||
#~ msgid "fdopen() failed"
|
||||
#~ msgstr "неуспешно отваряне с „fdopen()“"
|
||||
|
||||
#~ msgid "C# compiler not found, try installing mono"
|
||||
#~ msgstr "Липсва компилатор за C#, инсталирайте „mono“"
|
||||
|
||||
#~ msgid "C# virtual machine not found, try installing mono"
|
||||
#~ msgstr "Липсва виртуална машина за C#, инсталирайте „mono“"
|
||||
|
||||
#~ msgid "unbalanced ["
|
||||
#~ msgstr "„[“ без еш"
|
||||
|
||||
#~ msgid "invalid character class"
|
||||
#~ msgstr "неправилен клас знаци"
|
||||
|
||||
#~ msgid "character class syntax is [[:space:]], not [:space:]"
|
||||
#~ msgstr "клас знаци се указва чрез „[[:ИМЕ:]]“, а не „[:ИМЕ:]“"
|
||||
|
||||
#~ msgid "unfinished \\ escape"
|
||||
#~ msgstr "незавършена екранираща последователност чрез „\\“"
|
||||
|
||||
#~ msgid "invalid content of \\{\\}"
|
||||
#~ msgstr "неправилно съдържание в „\\{\\}“"
|
||||
|
||||
#~ msgid "regular expression too big"
|
||||
#~ msgstr "прекалено голям регулярен израз"
|
||||
|
||||
#~ msgid "unbalanced ("
|
||||
#~ msgstr "„(“ без еш"
|
||||
|
||||
#~ msgid "no syntax specified"
|
||||
#~ msgstr "не е зададен синтаксис"
|
||||
|
||||
#~ msgid "unbalanced )"
|
||||
#~ msgstr "„)“ без еш"
|
||||
|
||||
#~ msgid "regular empty file"
|
||||
#~ msgstr "празен, обикновен файл"
|
||||
|
||||
#~ msgid "regular file"
|
||||
#~ msgstr "обикновен файл"
|
||||
|
||||
#~ msgid "directory"
|
||||
#~ msgstr "директория"
|
||||
|
||||
#~ msgid "symbolic link"
|
||||
#~ msgstr "символна връзка"
|
||||
|
||||
#~ msgid "message queue"
|
||||
#~ msgstr "опашка за съобщения"
|
||||
|
||||
#~ msgid "semaphore"
|
||||
#~ msgstr "семафор"
|
||||
|
||||
#~ msgid "shared memory object"
|
||||
#~ msgstr "споделен обект в паметта"
|
||||
|
||||
#~ msgid "typed memory object"
|
||||
#~ msgstr "типов обект в паметта"
|
||||
|
||||
#~ msgid "block special file"
|
||||
#~ msgstr "блоков специален файл"
|
||||
|
||||
#~ msgid "character special file"
|
||||
#~ msgstr "знаков специален файл"
|
||||
|
||||
#~ msgid "contiguous data"
|
||||
#~ msgstr "последователни данни"
|
||||
|
||||
#~ msgid "fifo"
|
||||
#~ msgstr "програмен канал"
|
||||
|
||||
#~ msgid "door"
|
||||
#~ msgstr "порта"
|
||||
|
||||
#~ msgid "multiplexed block special file"
|
||||
#~ msgstr "мултиплексиран блоков специален файл"
|
||||
|
||||
#~ msgid "multiplexed character special file"
|
||||
#~ msgstr "мултиплексиран знаков специален файл"
|
||||
|
||||
#~ msgid "multiplexed file"
|
||||
#~ msgstr "мултиплексиран файл"
|
||||
|
||||
#~ msgid "named file"
|
||||
#~ msgstr "именован файл"
|
||||
|
||||
#~ msgid "network special file"
|
||||
#~ msgstr "мрежов специален файл"
|
||||
|
||||
#~ msgid "migrated file with data"
|
||||
#~ msgstr "мигриран файл с данни"
|
||||
|
||||
#~ msgid "migrated file without data"
|
||||
#~ msgstr "мигриран файл без данни"
|
||||
|
||||
#~ msgid "port"
|
||||
#~ msgstr "порт"
|
||||
|
||||
#~ msgid "socket"
|
||||
#~ msgstr "гнездо"
|
||||
|
||||
#~ msgid "whiteout"
|
||||
#~ msgstr "припокриващо изтриване"
|
||||
|
||||
#~ msgid "weird file"
|
||||
#~ msgstr "странен файл"
|
||||
|
||||
#~ msgid "invalid source_version argument to compile_java_class"
|
||||
#~ msgstr ""
|
||||
#~ "неправилен аргумент „source_version“ за версията на кода към командата "
|
||||
#~ "„compile_java_class“"
|
||||
|
||||
#~ msgid "invalid target_version argument to compile_java_class"
|
||||
#~ msgstr ""
|
||||
#~ "неправилен аргумент „target_version“ за версията на целта към командата "
|
||||
#~ "„compile_java_class“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "failed to create \"%s\""
|
||||
#~ msgstr "„%s“ не може да се създаде"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error while writing \"%s\" file"
|
||||
#~ msgstr "грешка при записа на „%s“"
|
||||
|
||||
#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
|
||||
#~ msgstr ""
|
||||
#~ "Липсва компилатор за Java, инсталирайте „gcj“ или задайте такъв с "
|
||||
#~ "променливата „JAVAC“"
|
||||
|
||||
#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
|
||||
#~ msgstr ""
|
||||
#~ "Липсва виртуална машина за Java, инсталирайте „gcj“ или задайте такава с "
|
||||
#~ "променливата „JAVA“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s subprocess I/O error"
|
||||
#~ msgstr "%s: вх./изх. грешка в дъщерен процес"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot stat %s"
|
||||
#~ msgstr "не може да се получи информация със „stat“ за „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot change permissions of %s"
|
||||
#~ msgstr "правата за достъп до „%s“ не може да се сменят"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create directory %s"
|
||||
#~ msgstr "директорията „%s“ не може да се създаде"
|
||||
|
||||
#~ msgid "Failed to open /dev/zero for read"
|
||||
#~ msgstr "„/dev/zero“ не може да се отвори за запис"
|
||||
|
||||
#~ msgid "creation of reading thread failed"
|
||||
#~ msgstr "неуспешно създаване на четяща нишка"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot set up nonblocking I/O to %s subprocess"
|
||||
#~ msgstr "не може да се зададе вх./изх. без блокиране за подпроцеса „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "communication with %s subprocess failed"
|
||||
#~ msgstr "неуспешна комуникация с дъщерния процес „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "write to %s subprocess failed"
|
||||
#~ msgstr "неуспешен запис към дъщерния процес „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "read from %s subprocess failed"
|
||||
#~ msgstr "неуспешно четене от дъщерния процес „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "subprocess %s terminated with exit code %d"
|
||||
#~ msgstr "подпроцесът „%s“ завърши с код за състояние %d"
|
||||
|
||||
#~ msgid "creation of threads failed"
|
||||
#~ msgstr "неуспешно създаване н нишки"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s subprocess terminated with exit code %d"
|
||||
#~ msgstr "подпроцесът на „%s“ завърши с код за състояние %d\""
|
||||
|
||||
# RECHECK
|
||||
#~ msgid "^[yY]"
|
||||
#~ msgstr "^[yYдДщЩ]"
|
||||
|
||||
# RECHECK
|
||||
#~ msgid "^[nN]"
|
||||
#~ msgstr "^[nNнНхХ]"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "setting permissions for %s"
|
||||
#~ msgstr "задаване на права на „%s“"
|
||||
|
||||
#~ msgid "Hangup"
|
||||
#~ msgstr "Прекъсване на връзката"
|
||||
|
||||
#~ msgid "Interrupt"
|
||||
#~ msgstr "Прекъсване"
|
||||
|
||||
#~ msgid "Quit"
|
||||
#~ msgstr "Спиране"
|
||||
|
||||
#~ msgid "Illegal instruction"
|
||||
#~ msgstr "Неправилна инструкция"
|
||||
|
||||
#~ msgid "Trace/breakpoint trap"
|
||||
#~ msgstr "Прекъсване за трасиране"
|
||||
|
||||
#~ msgid "Aborted"
|
||||
#~ msgstr "Преустановяване"
|
||||
|
||||
#~ msgid "Floating point exception"
|
||||
#~ msgstr "Изключение от плаваща запетая"
|
||||
|
||||
#~ msgid "Killed"
|
||||
#~ msgstr "Убит"
|
||||
|
||||
#~ msgid "Bus error"
|
||||
#~ msgstr "Грешка в шината"
|
||||
|
||||
#~ msgid "Segmentation fault"
|
||||
#~ msgstr "Грешка в разделянето"
|
||||
|
||||
#~ msgid "Broken pipe"
|
||||
#~ msgstr "Прекъснат програмен канал"
|
||||
|
||||
#~ msgid "Alarm clock"
|
||||
#~ msgstr "Аларма"
|
||||
|
||||
#~ msgid "Terminated"
|
||||
#~ msgstr "Прекратен"
|
||||
|
||||
#~ msgid "Urgent I/O condition"
|
||||
#~ msgstr "Спешно вх./изх. състояние"
|
||||
|
||||
#~ msgid "Stopped (signal)"
|
||||
#~ msgstr "Спрян (сигнал)"
|
||||
|
||||
#~ msgid "Stopped"
|
||||
#~ msgstr "Спрян"
|
||||
|
||||
#~ msgid "Continued"
|
||||
#~ msgstr "Продължен"
|
||||
|
||||
#~ msgid "Child exited"
|
||||
#~ msgstr "Преустановен дъщерен процес"
|
||||
|
||||
#~ msgid "Stopped (tty input)"
|
||||
#~ msgstr "Спиране (вход от tty)"
|
||||
|
||||
#~ msgid "Stopped (tty output)"
|
||||
#~ msgstr "Спиране (изход към tty)"
|
||||
|
||||
#~ msgid "I/O possible"
|
||||
#~ msgstr "Възможен вх./изх."
|
||||
|
||||
#~ msgid "CPU time limit exceeded"
|
||||
#~ msgstr "Надвишаване на процесорното време"
|
||||
|
||||
#~ msgid "File size limit exceeded"
|
||||
#~ msgstr "Надвишаване на размера на файл"
|
||||
|
||||
#~ msgid "Virtual timer expired"
|
||||
#~ msgstr "Изтекъл виртуален таймер"
|
||||
|
||||
#~ msgid "Profiling timer expired"
|
||||
#~ msgstr "Изтекъл профилиращ таймер"
|
||||
|
||||
#~ msgid "Window changed"
|
||||
#~ msgstr "Преоразмерен прозорец"
|
||||
|
||||
#~ msgid "User defined signal 1"
|
||||
#~ msgstr "Потребителски сигнал 1"
|
||||
|
||||
#~ msgid "User defined signal 2"
|
||||
#~ msgstr "Потребителски сигнал 2"
|
||||
|
||||
#~ msgid "EMT trap"
|
||||
#~ msgstr "Емулирана инструкция"
|
||||
|
||||
#~ msgid "Bad system call"
|
||||
#~ msgstr "Грешно системно извикване"
|
||||
|
||||
#~ msgid "Stack fault"
|
||||
#~ msgstr "Грешка в разделянето"
|
||||
|
||||
#~ msgid "Information request"
|
||||
#~ msgstr "Заявка за информация"
|
||||
|
||||
#~ msgid "Power failure"
|
||||
#~ msgstr "Проблем в захранването"
|
||||
|
||||
#~ msgid "Resource lost"
|
||||
#~ msgstr "Загубен ресурс"
|
||||
|
||||
#~ msgid "error writing to a closed pipe or socket"
|
||||
#~ msgstr "грешка при запис във вече затворен програмен канал или гнездо"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Real-time signal %d"
|
||||
#~ msgstr "Сигнал за реално време %d"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Unknown signal %d"
|
||||
#~ msgstr "Непознат сигнал %d"
|
||||
|
||||
#~ msgid "Execution times (seconds)"
|
||||
#~ msgstr "Време за изпълнение [секунди]"
|
||||
|
||||
#~ msgid "CPU user"
|
||||
#~ msgstr "потребителско време"
|
||||
|
||||
#~ msgid "CPU system"
|
||||
#~ msgstr "системно време"
|
||||
|
||||
#~ msgid "wall clock"
|
||||
#~ msgstr "общо време"
|
||||
|
||||
#~ msgid "iconv function not usable"
|
||||
#~ msgstr "функцията „iconv“ е неизползваема"
|
||||
|
||||
#~ msgid "iconv function not available"
|
||||
#~ msgstr "функцията „iconv“ е недостъпна"
|
||||
|
||||
#~ msgid "character out of range"
|
||||
#~ msgstr "знак извън диапазона"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set"
|
||||
#~ msgstr "„U+%04X“ не може да се конвертира в локалното кодиране"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set: %s"
|
||||
#~ msgstr "„U+%04X“ не може да се конвертира в локалното кодиране: %s"
|
||||
|
||||
#~ msgid "invalid user"
|
||||
#~ msgstr "несъществуващ потребител"
|
||||
|
||||
#~ msgid "invalid group"
|
||||
#~ msgstr "несъществуваща група"
|
||||
|
||||
#~ msgid "invalid spec"
|
||||
#~ msgstr "неправилна спецификация"
|
||||
|
||||
#~ msgid "unable to display error message"
|
||||
#~ msgstr "съобщението за грешка не може да се изведе"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Packaged by %s (%s)\n"
|
||||
#~ msgstr "Пакетирано от %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Packaged by %s\n"
|
||||
#~ msgstr "Пакетирано от %s\n"
|
||||
|
||||
#~ msgid "(C)"
|
||||
#~ msgstr "©"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\n"
|
||||
#~ "This is free software: you are free to change and redistribute it.\n"
|
||||
#~ "There is NO WARRANTY, to the extent permitted by law.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Лиценз GPLv3+: GNU GPL — версия 3 или по-късна версия <%s>.\n"
|
||||
#~ "Тази програма е свободен софтуер. Може да я променяте и/или "
|
||||
#~ "разпространявате.\n"
|
||||
#~ "Тя се разпространява БЕЗ НИКАКВИ ГАРАНЦИИ доколкото е позволено от "
|
||||
#~ "закона.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s.\n"
|
||||
#~ msgstr "Създадено от %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s and %s.\n"
|
||||
#~ msgstr "Създадено от %s и %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s, %s, and %s.\n"
|
||||
#~ msgstr "Създадено от %s, %s и %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Създадено от %s, %s, %s\n"
|
||||
#~ "и %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Създадено от %s, %s, %s,\n"
|
||||
#~ "%s и %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Създадено от %s, %s, %s,\n"
|
||||
#~ "%s, %s и %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Създадено от %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s и %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Създадено от %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s\n"
|
||||
#~ "и %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Създадено от %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s и %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s, and others.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Създадено от %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s и др.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report bugs to: %s\n"
|
||||
#~ msgstr ""
|
||||
#~ "Докладвайте грешки в програмата на адрес: %s\n"
|
||||
#~ "Докладвайте грешки в превода на адрес: <dict@ludost.net>\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report %s bugs to: %s\n"
|
||||
#~ msgstr "Докладвайте грешки в „%s“ на адрес: %s\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s home page: <%s>\n"
|
||||
#~ msgstr "Уеб страница на „%s“: <%s>\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "General help using GNU software: <%s>\n"
|
||||
#~ msgstr "Обща помощ за програмите на GNU: <%s>\n"
|
||||
|
||||
#~ msgid "failed to set file descriptor text/binary mode"
|
||||
#~ msgstr "неуспешно задаване на вид на файла като текстов/двоичен"
|
||||
|
||||
#~ msgid "stdin"
|
||||
#~ msgstr "стандартен вход"
|
||||
|
||||
#~ msgid "stdout"
|
||||
#~ msgstr "стандартен изход"
|
||||
|
||||
#~ msgid "stderr"
|
||||
#~ msgstr "стандартна грешка"
|
||||
|
||||
#~ msgid "unknown stream"
|
||||
#~ msgstr "непознат поток"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "failed to reopen %s with mode %s"
|
||||
#~ msgstr "файлът „%s“ не може да се отвори наново с режим „%s“"
|
||||
|
||||
#~ msgid "string comparison failed"
|
||||
#~ msgstr "неуспешно сравнение на низове"
|
||||
|
||||
#~ msgid "Set LC_ALL='C' to work around the problem."
|
||||
#~ msgstr "Използвайте „LC_ALL='C'“, за да заобиколите този проблем."
|
||||
|
||||
#, c-format
|
||||
#~ msgid "The strings compared were %s and %s."
|
||||
#~ msgstr "Сравняваните низове бяха %s и %s."
|
||||
|
||||
#~ msgid "cannot perform formatted output"
|
||||
#~ msgstr "невъзможно форматиране на изхода"
|
||||
|
||||
#~ msgid "standard file descriptors"
|
||||
#~ msgstr "стандартни файлови дескриптори"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid %s%s argument '%s'"
|
||||
#~ msgstr "неправилен аргумент „%3$s“ за опцията „%1$s%2$s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid suffix in %s%s argument '%s'"
|
||||
#~ msgstr "неправилен суфикс в аргумента „%3$s“ за опцията „%1$s%2$s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s%s argument '%s' too large"
|
||||
#~ msgstr "прекалено дълъг аргумент „%3$s“ за опцията „%1$s%2$s“"
|
10
gnulib_po/boldquot.sed
Normal file
10
gnulib_po/boldquot.sed
Normal file
|
@ -0,0 +1,10 @@
|
|||
s/"\([^"]*\)"/“\1”/g
|
||||
s/`\([^`']*\)'/‘\1’/g
|
||||
s/ '\([^`']*\)' / ‘\1’ /g
|
||||
s/ '\([^`']*\)'$/ ‘\1’/g
|
||||
s/^'\([^`']*\)' /‘\1’ /g
|
||||
s/“”/""/g
|
||||
s/“/“[1m/g
|
||||
s/”/[0m”/g
|
||||
s/‘/‘[1m/g
|
||||
s/’/[0m’/g
|
BIN
gnulib_po/ca.gmo
Normal file
BIN
gnulib_po/ca.gmo
Normal file
Binary file not shown.
657
gnulib_po/ca.po
Normal file
657
gnulib_po/ca.po
Normal file
|
@ -0,0 +1,657 @@
|
|||
# GNU Mailutils Catalan translation.
|
||||
# Copyright © 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the mailutils package.
|
||||
# Jordi Mallach <jordi@gnu.org>, 2002, 2003, 2004, 2005.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: mailutils 0.6.90\n"
|
||||
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
|
||||
"POT-Creation-Date: 2024-11-10 22:29+0100\n"
|
||||
"PO-Revision-Date: 2005-05-21 04:10+0200\n"
|
||||
"Last-Translator: Jordi Mallach <jordi@gnu.org>\n"
|
||||
"Language-Team: Catalan <ca@dodds.net>\n"
|
||||
"Language: ca\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Bugs: Report translation errors to the Language-Team address.\n"
|
||||
"Plural-Forms: nplurals=2; plural=n!=1;\n"
|
||||
|
||||
#: lib/error.c:208
|
||||
msgid "Unknown system error"
|
||||
msgstr "S'ha produït un error desconegut del sistema"
|
||||
|
||||
#: lib/gai_strerror.c:57
|
||||
#, fuzzy
|
||||
msgid "Address family for hostname not supported"
|
||||
msgstr "els fitxers FIFO no són suportats"
|
||||
|
||||
#: lib/gai_strerror.c:58
|
||||
msgid "Temporary failure in name resolution"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:59
|
||||
msgid "Bad value for ai_flags"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:60
|
||||
msgid "Non-recoverable failure in name resolution"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:61
|
||||
#, fuzzy
|
||||
msgid "ai_family not supported"
|
||||
msgstr "els fitxers FIFO no són suportats"
|
||||
|
||||
#: lib/gai_strerror.c:62
|
||||
#, fuzzy
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "L'operació ha fallat"
|
||||
|
||||
#: lib/gai_strerror.c:63
|
||||
msgid "No address associated with hostname"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:64
|
||||
msgid "Name or service not known"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:65
|
||||
msgid "Servname not supported for ai_socktype"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:66
|
||||
#, fuzzy
|
||||
msgid "ai_socktype not supported"
|
||||
msgstr "els fitxers FIFO no són suportats"
|
||||
|
||||
#: lib/gai_strerror.c:67
|
||||
#, fuzzy
|
||||
msgid "System error"
|
||||
msgstr "error d'escriptura"
|
||||
|
||||
#: lib/gai_strerror.c:68
|
||||
msgid "Argument buffer too small"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:70
|
||||
msgid "Processing request in progress"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:71
|
||||
#, fuzzy
|
||||
msgid "Request canceled"
|
||||
msgstr "No es troba l'element sol·licitat"
|
||||
|
||||
#: lib/gai_strerror.c:72
|
||||
#, fuzzy
|
||||
msgid "Request not canceled"
|
||||
msgstr "No es troba l'element sol·licitat"
|
||||
|
||||
#: lib/gai_strerror.c:73
|
||||
msgid "All requests done"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:74
|
||||
msgid "Interrupted by a signal"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:75
|
||||
msgid "Parameter string not correctly encoded"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:87
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "S'ha produït un error desconegut del sistema"
|
||||
|
||||
#: lib/getopt.c:282
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%s' is ambiguous\n"
|
||||
msgid "%s: option '%s%s' is ambiguous\n"
|
||||
msgstr "%s: l'opció «%s» és ambigua\n"
|
||||
|
||||
#: lib/getopt.c:288
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%s' is ambiguous\n"
|
||||
msgid "%s: option '%s%s' is ambiguous; possibilities:"
|
||||
msgstr "%s: l'opció «%s» és ambigua\n"
|
||||
|
||||
#: lib/getopt.c:322
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: unrecognized option `%c%s'\n"
|
||||
msgid "%s: unrecognized option '%s%s'\n"
|
||||
msgstr "%s: l'opció «%c%s» no es reconeix\n"
|
||||
|
||||
#: lib/getopt.c:348
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%c%s' doesn't allow an argument\n"
|
||||
msgid "%s: option '%s%s' doesn't allow an argument\n"
|
||||
msgstr "%s: l'opció «%c%s» no accepta arguments\n"
|
||||
|
||||
#: lib/getopt.c:363
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option `%s' requires an argument\n"
|
||||
msgid "%s: option '%s%s' requires an argument\n"
|
||||
msgstr "%s: l'opció «%s» requereix un argument\n"
|
||||
|
||||
#: lib/getopt.c:624
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: invalid option -- %c\n"
|
||||
msgid "%s: invalid option -- '%c'\n"
|
||||
msgstr "%s: l'opció no és vàlida -- %c\n"
|
||||
|
||||
#: lib/getopt.c:639 lib/getopt.c:685
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option requires an argument -- %c\n"
|
||||
msgid "%s: option requires an argument -- '%c'\n"
|
||||
msgstr "%s: l'opció requereix un argument -- %c\n"
|
||||
|
||||
#: lib/openat-die.c:38
|
||||
#, fuzzy, c-format
|
||||
msgid "unable to record current working directory"
|
||||
msgstr "openat: no s'ha pogut registrar el directori de treball actual"
|
||||
|
||||
#: lib/openat-die.c:57
|
||||
#, c-format
|
||||
msgid "failed to return to initial working directory"
|
||||
msgstr "no s'ha pogut tornar al directori inicial de treball"
|
||||
|
||||
#: lib/os2-spawn.c:51
|
||||
#, c-format
|
||||
msgid "_open_osfhandle failed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/os2-spawn.c:88
|
||||
#, c-format
|
||||
msgid "cannot restore fd %d: dup2 failed"
|
||||
msgstr ""
|
||||
|
||||
#. TRANSLATORS:
|
||||
#. Get translations for open and closing quotation marks.
|
||||
#. The message catalog should translate "`" to a left
|
||||
#. quotation mark suitable for the locale, and similarly for
|
||||
#. "'". For example, a French Unicode local should translate
|
||||
#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), respectively.
|
||||
#.
|
||||
#. If the catalog has no translation, we will try to
|
||||
#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
|
||||
#. current locale is not Unicode, locale_quoting_style
|
||||
#. will quote 'like this', and clocale_quoting_style will
|
||||
#. quote "like this". You should always include translations
|
||||
#. for "`" and "'" even if U+2018 and U+2019 are appropriate
|
||||
#. for your locale.
|
||||
#.
|
||||
#. If you don't know what to put here, please see
|
||||
#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
|
||||
#. and use glyphs suitable for your language.
|
||||
#: lib/quotearg.c:354
|
||||
msgid "`"
|
||||
msgstr "«"
|
||||
|
||||
#: lib/quotearg.c:355
|
||||
msgid "'"
|
||||
msgstr "»"
|
||||
|
||||
#: lib/regcomp.c:122
|
||||
msgid "Success"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:125
|
||||
msgid "No match"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:128
|
||||
#, fuzzy
|
||||
msgid "Invalid regular expression"
|
||||
msgstr "%s: l'expressió regular no és vàlida: %s"
|
||||
|
||||
#: lib/regcomp.c:131
|
||||
#, fuzzy
|
||||
msgid "Invalid collation character"
|
||||
msgstr "la classe de caràcters «%s» no és vàlida"
|
||||
|
||||
#: lib/regcomp.c:134
|
||||
#, fuzzy
|
||||
msgid "Invalid character class name"
|
||||
msgstr "la classe de caràcters «%s» no és vàlida"
|
||||
|
||||
#: lib/regcomp.c:137
|
||||
msgid "Trailing backslash"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:140
|
||||
#, fuzzy
|
||||
msgid "Invalid back reference"
|
||||
msgstr "El número no és vàlid"
|
||||
|
||||
#: lib/regcomp.c:143
|
||||
msgid "Unmatched [, [^, [:, [., or [="
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:146
|
||||
msgid "Unmatched ( or \\("
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:149
|
||||
msgid "Unmatched \\{"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:152
|
||||
#, fuzzy
|
||||
msgid "Invalid content of \\{\\}"
|
||||
msgstr "L'opció no és vàlida -- %s"
|
||||
|
||||
#: lib/regcomp.c:155
|
||||
#, fuzzy
|
||||
msgid "Invalid range end"
|
||||
msgstr "el rang de pàgines no és vàlid: «%s»"
|
||||
|
||||
#: lib/regcomp.c:158
|
||||
#, fuzzy
|
||||
msgid "Memory exhausted"
|
||||
msgstr "la memòria s'ha exhaurit"
|
||||
|
||||
#: lib/regcomp.c:161
|
||||
#, fuzzy
|
||||
msgid "Invalid preceding regular expression"
|
||||
msgstr "%s: l'expressió regular no és vàlida: %s"
|
||||
|
||||
#: lib/regcomp.c:164
|
||||
#, fuzzy
|
||||
msgid "Premature end of regular expression"
|
||||
msgstr "error en la recerca de l'expressió regular"
|
||||
|
||||
#: lib/regcomp.c:167
|
||||
#, fuzzy
|
||||
msgid "Regular expression too big"
|
||||
msgstr "%s: l'expressió regular no és vàlida: %s"
|
||||
|
||||
#: lib/regcomp.c:170
|
||||
msgid "Unmatched ) or \\)"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:650
|
||||
#, fuzzy
|
||||
msgid "No previous regular expression"
|
||||
msgstr "error en la recerca de l'expressió regular"
|
||||
|
||||
#: lib/spawn-pipe.c:218 lib/spawn-pipe.c:221
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot create pipe"
|
||||
msgstr "No es pot crear la llista"
|
||||
|
||||
#: lib/spawn-pipe.c:599 lib/wait-process.c:326 lib/wait-process.c:400
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess failed"
|
||||
msgstr "%s: ha fallat el desplaçament"
|
||||
|
||||
#: lib/wait-process.c:267 lib/wait-process.c:299 lib/wait-process.c:361
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess"
|
||||
msgstr "%s: ha fallat el desplaçament"
|
||||
|
||||
#: lib/wait-process.c:318 lib/wait-process.c:390
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess got fatal signal %d"
|
||||
msgstr "%s: ha fallat el desplaçament"
|
||||
|
||||
#: lib/xalloc-die.c:34
|
||||
msgid "memory exhausted"
|
||||
msgstr "la memòria s'ha exhaurit"
|
||||
|
||||
# Usa quote() en els 2 args. ivb
|
||||
#, c-format
|
||||
#~ msgid "invalid argument %s for %s"
|
||||
#~ msgstr "l'argument %s no és vàlid per %s"
|
||||
|
||||
# Usa quote() en els 2 args. ivb
|
||||
#, c-format
|
||||
#~ msgid "ambiguous argument %s for %s"
|
||||
#~ msgstr "l'argument %s és ambigu per %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Valid arguments are:"
|
||||
#~ msgstr "Els arguments vàlids són:"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
|
||||
#~ msgstr "%.*s: El paràmetre ARGP_HELP_FMT requereix un valor"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
|
||||
#~ msgstr "%.*s: El paràmetre d'ARGP_HELP_FMT és desconegut"
|
||||
|
||||
# pfft, escombraries... jm
|
||||
#, c-format
|
||||
#~ msgid "Garbage in ARGP_HELP_FMT: %s"
|
||||
#~ msgstr "Hi ha escombraries en ARGP_HELP_FMT: %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Mandatory or optional arguments to long options are also mandatory or "
|
||||
#~ "optional for any corresponding short options."
|
||||
#~ msgstr ""
|
||||
#~ "Els arguments necessaris o opcionals per a les opcions llargues també són "
|
||||
#~ "necessaris o opcionals per a qualsevol opció curta corresponent."
|
||||
|
||||
#~ msgid "Usage:"
|
||||
#~ msgstr "Forma d'ús:"
|
||||
|
||||
#~ msgid " or: "
|
||||
#~ msgstr " ó: "
|
||||
|
||||
#~ msgid " [OPTION...]"
|
||||
#~ msgstr " [OPCIÓ...]"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
|
||||
#~ msgstr "Proveu «%s --help» o «%s --usage» per a obtindre més informació.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report bugs to %s.\n"
|
||||
#~ msgstr "Informeu dels errors a %s.\n"
|
||||
|
||||
#~ msgid "Give this help list"
|
||||
#~ msgstr "Mostra aquesta llista d'ajuda"
|
||||
|
||||
#~ msgid "Give a short usage message"
|
||||
#~ msgstr "Mostra un curt missatge sobre l'ús"
|
||||
|
||||
#~ msgid "NAME"
|
||||
#~ msgstr "NOM"
|
||||
|
||||
#~ msgid "Set the program name"
|
||||
#~ msgstr "Estableix el nom del programa"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "SECS"
|
||||
#~ msgstr "SEGONS"
|
||||
|
||||
#~ msgid "Hang for SECS seconds (default 3600)"
|
||||
#~ msgstr "Penja durant SEGS segons (per defecte 3600)"
|
||||
|
||||
#~ msgid "Print program version"
|
||||
#~ msgstr "Mostra la versió del programa"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) No version known!?"
|
||||
#~ msgstr "(ERROR DEL PROGRAMA) Cap versió coneguda!?"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: Too many arguments\n"
|
||||
#~ msgstr "%s: Massa arguments\n"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
|
||||
#~ msgstr "(ERROR DEL PROGRAMA) L'opció s'hauria d'haver reconegut!?"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "program error"
|
||||
#~ msgstr "error de lectura"
|
||||
|
||||
# "underflow", bonico el paraulo.. jm
|
||||
#, fuzzy
|
||||
#~ msgid "stack overflow"
|
||||
#~ msgstr "pila buida"
|
||||
|
||||
#~ msgid "write error"
|
||||
#~ msgstr "error d'escriptura"
|
||||
|
||||
# Usa quote(). ivb
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error while opening \"%s\" for reading"
|
||||
#~ msgstr "no s'ha pogut obrir %s per llegir"
|
||||
|
||||
# Usa quote(). ivb
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "cannot open backup file \"%s\" for writing"
|
||||
#~ msgstr "no s'ha pogut obrir %s per a escriure"
|
||||
|
||||
# uniq no usa quote(). ivb
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error reading \"%s\""
|
||||
#~ msgstr "error en llegir %s"
|
||||
|
||||
# uniq no usa quote(). ivb
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error writing \"%s\""
|
||||
#~ msgstr "error en escriure %s"
|
||||
|
||||
# uniq no usa quote(). ivb
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error after reading \"%s\""
|
||||
#~ msgstr "error en llegir %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "fdopen() failed"
|
||||
#~ msgstr "no s'ha pogut obrir"
|
||||
|
||||
#~ msgid "regular empty file"
|
||||
#~ msgstr "fitxer ordinari buit"
|
||||
|
||||
#~ msgid "regular file"
|
||||
#~ msgstr "fitxer ordinari"
|
||||
|
||||
#~ msgid "directory"
|
||||
#~ msgstr "directori"
|
||||
|
||||
#~ msgid "block special file"
|
||||
#~ msgstr "fitxer especial de blocs"
|
||||
|
||||
#~ msgid "character special file"
|
||||
#~ msgstr "fitxer especial de caràcters"
|
||||
|
||||
#~ msgid "fifo"
|
||||
#~ msgstr "cua FIFO"
|
||||
|
||||
#~ msgid "symbolic link"
|
||||
#~ msgstr "enllaç simbòlic"
|
||||
|
||||
#~ msgid "socket"
|
||||
#~ msgstr "connector"
|
||||
|
||||
#~ msgid "message queue"
|
||||
#~ msgstr "cua de missatges"
|
||||
|
||||
#~ msgid "semaphore"
|
||||
#~ msgstr "semàfor"
|
||||
|
||||
#~ msgid "shared memory object"
|
||||
#~ msgstr "objecte de memòria compartida"
|
||||
|
||||
#~ msgid "typed memory object"
|
||||
#~ msgstr "objecte de memòria amb tipus"
|
||||
|
||||
#~ msgid "weird file"
|
||||
#~ msgstr "fitxer estrany"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option `--%s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: l'opció «--%s» no accepta arguments\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: unrecognized option `--%s'\n"
|
||||
#~ msgstr "%s: l'opció «--%s» no es reconeix\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: illegal option -- %c\n"
|
||||
#~ msgstr "%s: l'opció és il·legal -- %c\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option `-W %s' is ambiguous\n"
|
||||
#~ msgstr "%s: l'opció «-W %s» és ambigua\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option `-W %s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: l'opció «-W %s» no accepta arguments\n"
|
||||
|
||||
# FIXME: xmalloc.h: _STRTOL_ERROR lacks i18n. ivb
|
||||
# Açò quedarà com «invalid mida de bloc `MIDA'» mentre no ho facen. ivb
|
||||
#~ msgid "block size"
|
||||
#~ msgstr "mida de bloc"
|
||||
|
||||
# Els 4 usen quote(). ivb
|
||||
#, c-format
|
||||
#~ msgid "%s exists but is not a directory"
|
||||
#~ msgstr "%s existeix però no és un directori"
|
||||
|
||||
# Els 3 usen quote(). ivb
|
||||
#, c-format
|
||||
#~ msgid "cannot change owner and/or group of %s"
|
||||
#~ msgstr "no s'ha pogut canviar el propietari o grup de %s"
|
||||
|
||||
# Els 3 usen quote(). ivb
|
||||
#, c-format
|
||||
#~ msgid "cannot create directory %s"
|
||||
#~ msgstr "no s'ha pogut crear el directori %s"
|
||||
|
||||
# Usa quote(). ivb
|
||||
#, c-format
|
||||
#~ msgid "cannot chdir to directory %s"
|
||||
#~ msgstr "no s'ha pogut canviar al directori %s"
|
||||
|
||||
# Els 2 usen quote(). ivb
|
||||
#, c-format
|
||||
#~ msgid "cannot change permissions of %s"
|
||||
#~ msgstr "no s'han pogut canviar els permisos de %s"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid "Failed to open /dev/zero for read"
|
||||
#~ msgstr "%s: no s'ha pogut obrir per a escriure"
|
||||
|
||||
#~ msgid "^[yY]"
|
||||
#~ msgstr "^[sS]"
|
||||
|
||||
#~ msgid "^[nN]"
|
||||
#~ msgstr "^[nN]"
|
||||
|
||||
#~ msgid "iconv function not usable"
|
||||
#~ msgstr "la funció iconv() no és útil"
|
||||
|
||||
#~ msgid "iconv function not available"
|
||||
#~ msgstr "la funció iconv() no es troba disponible"
|
||||
|
||||
#~ msgid "character out of range"
|
||||
#~ msgstr "el caràcter es troba fora del rang"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set"
|
||||
#~ msgstr "no s'ha pogut convertir U+%04X al joc de caràcters local"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set: %s"
|
||||
#~ msgstr "no s'ha pogut convertir U+%04X al joc de caràcters local: %s"
|
||||
|
||||
#~ msgid "invalid user"
|
||||
#~ msgstr "l'usuari no és vàlid"
|
||||
|
||||
#~ msgid "invalid group"
|
||||
#~ msgstr "el grup no és vàlid"
|
||||
|
||||
#~ msgid "cannot get the login group of a numeric UID"
|
||||
#~ msgstr "no s'ha pogut obtenir el grup d'entrada d'un UID numèric"
|
||||
|
||||
#, fuzzy
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "This is free software. You may redistribute copies of it under the terms "
|
||||
#~ "of\n"
|
||||
#~ "the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n"
|
||||
#~ "There is NO WARRANTY, to the extent permitted by law.\n"
|
||||
#~ "\n"
|
||||
#~ msgstr ""
|
||||
#~ "Aquest és programari lliure; podeu redistribuir-lo i/o modificar-lo sota "
|
||||
#~ "els\n"
|
||||
#~ "termes de la Llicència Pública General GNU tal i com ha estat publicada "
|
||||
#~ "per la\n"
|
||||
#~ "Free Software Foundation; bé sota la versió 2 de la Llicència o bé (si "
|
||||
#~ "ho\n"
|
||||
#~ "preferiu) sota qualsevol versió posterior.\n"
|
||||
#~ "\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s.\n"
|
||||
#~ msgstr "Escrit per %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s and %s.\n"
|
||||
#~ msgstr "Escrit per %s i %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s, %s, and %s.\n"
|
||||
#~ msgstr "Escrit per %s, %s i %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Escrit per %s, %s, %s\n"
|
||||
#~ "i %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Escrit per %s, %s, %s,\n"
|
||||
#~ "%s i %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Escrit per %s, %s, %s,\n"
|
||||
#~ "%s, %s i %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Escrit per %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s i %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Escrit per %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "i %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Escrit per %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s i %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s, and others.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Escrit per %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s i d'altres.\n"
|
||||
|
||||
#~ msgid "string comparison failed"
|
||||
#~ msgstr "ha fallat la comparació de cadenes"
|
||||
|
||||
#~ msgid "Set LC_ALL='C' to work around the problem."
|
||||
#~ msgstr "Establiu la variable LC_ALL a «C» per evitar el problema."
|
||||
|
||||
# Usa quote() en les 2. ivb
|
||||
#, c-format
|
||||
#~ msgid "The strings compared were %s and %s."
|
||||
#~ msgstr "Les cadenes comparades eren %s i %s."
|
BIN
gnulib_po/cs.gmo
Normal file
BIN
gnulib_po/cs.gmo
Normal file
Binary file not shown.
894
gnulib_po/cs.po
Normal file
894
gnulib_po/cs.po
Normal file
|
@ -0,0 +1,894 @@
|
|||
# Czech translations for GNU textutils
|
||||
# This file is distributed under the same license as the gnulib package.
|
||||
# Copyright (C) 1996 Free Software Foundation, Inc.
|
||||
#
|
||||
# Vladimir Michl <Vladimir.Michl@seznam.cz>, 1996.
|
||||
# Marek Černocký <marek@manet.cz>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
|
||||
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
|
||||
"POT-Creation-Date: 2024-11-10 22:29+0100\n"
|
||||
"PO-Revision-Date: 2011-12-04 08:50+0100\n"
|
||||
"Last-Translator: Marek Černocký <marek@manet.cz>\n"
|
||||
"Language-Team: Czech <translation-team-cs@lists.sourceforge.net>\n"
|
||||
"Language: cs\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Bugs: Report translation errors to the Language-Team address.\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
|
||||
#: lib/error.c:208
|
||||
msgid "Unknown system error"
|
||||
msgstr "Neznámá chyba systému"
|
||||
|
||||
#: lib/gai_strerror.c:57
|
||||
msgid "Address family for hostname not supported"
|
||||
msgstr "Pro název počítače není rodina adres podporována"
|
||||
|
||||
#: lib/gai_strerror.c:58
|
||||
msgid "Temporary failure in name resolution"
|
||||
msgstr "Dočasné selhání při překladu názvu"
|
||||
|
||||
#: lib/gai_strerror.c:59
|
||||
msgid "Bad value for ai_flags"
|
||||
msgstr "Špatná hodnota pro příznaky ai_flags"
|
||||
|
||||
#: lib/gai_strerror.c:60
|
||||
msgid "Non-recoverable failure in name resolution"
|
||||
msgstr "Nenapravitelné selhání při překladu názvu"
|
||||
|
||||
#: lib/gai_strerror.c:61
|
||||
msgid "ai_family not supported"
|
||||
msgstr "ai_family není podporována"
|
||||
|
||||
#: lib/gai_strerror.c:62
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "Selhalo přidělení paměti"
|
||||
|
||||
#: lib/gai_strerror.c:63
|
||||
msgid "No address associated with hostname"
|
||||
msgstr "K názvu počítače není přiřazena žádná adresa"
|
||||
|
||||
#: lib/gai_strerror.c:64
|
||||
msgid "Name or service not known"
|
||||
msgstr "Název nebo služba nejsou známy"
|
||||
|
||||
#: lib/gai_strerror.c:65
|
||||
msgid "Servname not supported for ai_socktype"
|
||||
msgstr "Název služby není podporován pro ai_socktype"
|
||||
|
||||
#: lib/gai_strerror.c:66
|
||||
msgid "ai_socktype not supported"
|
||||
msgstr "ai_socktype není podporován"
|
||||
|
||||
#: lib/gai_strerror.c:67
|
||||
msgid "System error"
|
||||
msgstr "Chyba systému"
|
||||
|
||||
#: lib/gai_strerror.c:68
|
||||
msgid "Argument buffer too small"
|
||||
msgstr "Vyrovnávací paměť argumentů je příliš malá"
|
||||
|
||||
#: lib/gai_strerror.c:70
|
||||
msgid "Processing request in progress"
|
||||
msgstr "Probíhá zpracování požadavku"
|
||||
|
||||
#: lib/gai_strerror.c:71
|
||||
msgid "Request canceled"
|
||||
msgstr "Požadavek byl zrušen"
|
||||
|
||||
#: lib/gai_strerror.c:72
|
||||
msgid "Request not canceled"
|
||||
msgstr "Požadavek nebyl zrušen"
|
||||
|
||||
#: lib/gai_strerror.c:73
|
||||
msgid "All requests done"
|
||||
msgstr "Všechny požadavky dokončeny"
|
||||
|
||||
#: lib/gai_strerror.c:74
|
||||
msgid "Interrupted by a signal"
|
||||
msgstr "Přerušeno signálem"
|
||||
|
||||
#: lib/gai_strerror.c:75
|
||||
msgid "Parameter string not correctly encoded"
|
||||
msgstr "Řetězec s parametry není správně kódován"
|
||||
|
||||
#: lib/gai_strerror.c:87
|
||||
msgid "Unknown error"
|
||||
msgstr "Neznámá chyba"
|
||||
|
||||
#: lib/getopt.c:282
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option '-W %s' is ambiguous\n"
|
||||
msgid "%s: option '%s%s' is ambiguous\n"
|
||||
msgstr "%s: přepínač „-W %s“ není jednoznačný\n"
|
||||
|
||||
#: lib/getopt.c:288
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option '%s' is ambiguous; possibilities:"
|
||||
msgid "%s: option '%s%s' is ambiguous; possibilities:"
|
||||
msgstr "%s: přepínač „%s“ není jednoznačný; možnosti:"
|
||||
|
||||
#: lib/getopt.c:322
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: unrecognized option '%c%s'\n"
|
||||
msgid "%s: unrecognized option '%s%s'\n"
|
||||
msgstr "%s: neznámý přepínač „%c%s“\n"
|
||||
|
||||
#: lib/getopt.c:348
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option '%c%s' doesn't allow an argument\n"
|
||||
msgid "%s: option '%s%s' doesn't allow an argument\n"
|
||||
msgstr "%s: přepínač „%c%s“ musí být zadán bez argumentu\n"
|
||||
|
||||
#: lib/getopt.c:363
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option '--%s' requires an argument\n"
|
||||
msgid "%s: option '%s%s' requires an argument\n"
|
||||
msgstr "%s: přepínač „--%s“ vyžaduje argument\n"
|
||||
|
||||
#: lib/getopt.c:624
|
||||
#, c-format
|
||||
msgid "%s: invalid option -- '%c'\n"
|
||||
msgstr "%s: neplatný přepínač -- „%c“\n"
|
||||
|
||||
#: lib/getopt.c:639 lib/getopt.c:685
|
||||
#, c-format
|
||||
msgid "%s: option requires an argument -- '%c'\n"
|
||||
msgstr "%s: přepínač vyžaduje argument -- „%c“\n"
|
||||
|
||||
#: lib/openat-die.c:38
|
||||
#, c-format
|
||||
msgid "unable to record current working directory"
|
||||
msgstr "nelze zaznamenat aktuální pracovní složku"
|
||||
|
||||
#: lib/openat-die.c:57
|
||||
#, c-format
|
||||
msgid "failed to return to initial working directory"
|
||||
msgstr "selhalo vrácení počáteční pracovní složky"
|
||||
|
||||
#: lib/os2-spawn.c:51
|
||||
#, c-format
|
||||
msgid "_open_osfhandle failed"
|
||||
msgstr "selhala funkce _open_osfhandle"
|
||||
|
||||
#: lib/os2-spawn.c:88
|
||||
#, c-format
|
||||
msgid "cannot restore fd %d: dup2 failed"
|
||||
msgstr "nelze obnovit fd %d: selhala funkce dup2"
|
||||
|
||||
#. TRANSLATORS:
|
||||
#. Get translations for open and closing quotation marks.
|
||||
#. The message catalog should translate "`" to a left
|
||||
#. quotation mark suitable for the locale, and similarly for
|
||||
#. "'". For example, a French Unicode local should translate
|
||||
#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), respectively.
|
||||
#.
|
||||
#. If the catalog has no translation, we will try to
|
||||
#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
|
||||
#. current locale is not Unicode, locale_quoting_style
|
||||
#. will quote 'like this', and clocale_quoting_style will
|
||||
#. quote "like this". You should always include translations
|
||||
#. for "`" and "'" even if U+2018 and U+2019 are appropriate
|
||||
#. for your locale.
|
||||
#.
|
||||
#. If you don't know what to put here, please see
|
||||
#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
|
||||
#. and use glyphs suitable for your language.
|
||||
#: lib/quotearg.c:354
|
||||
msgid "`"
|
||||
msgstr "„"
|
||||
|
||||
#: lib/quotearg.c:355
|
||||
msgid "'"
|
||||
msgstr "“"
|
||||
|
||||
#: lib/regcomp.c:122
|
||||
msgid "Success"
|
||||
msgstr "Úspěch"
|
||||
|
||||
#: lib/regcomp.c:125
|
||||
msgid "No match"
|
||||
msgstr "Žádná shoda"
|
||||
|
||||
#: lib/regcomp.c:128
|
||||
msgid "Invalid regular expression"
|
||||
msgstr "neplatný regulární výraz"
|
||||
|
||||
#: lib/regcomp.c:131
|
||||
msgid "Invalid collation character"
|
||||
msgstr "neplatný znak pro porovnávání"
|
||||
|
||||
#: lib/regcomp.c:134
|
||||
msgid "Invalid character class name"
|
||||
msgstr "neplatný název třídy znaku"
|
||||
|
||||
#: lib/regcomp.c:137
|
||||
msgid "Trailing backslash"
|
||||
msgstr "Zpětné lomítko na konci"
|
||||
|
||||
#: lib/regcomp.c:140
|
||||
msgid "Invalid back reference"
|
||||
msgstr "Neplatný zpětný odkaz"
|
||||
|
||||
#: lib/regcomp.c:143
|
||||
#, fuzzy
|
||||
#| msgid "Unmatched [ or [^"
|
||||
msgid "Unmatched [, [^, [:, [., or [="
|
||||
msgstr "Chybí odpovídající závorka k [ nebo [^"
|
||||
|
||||
#: lib/regcomp.c:146
|
||||
msgid "Unmatched ( or \\("
|
||||
msgstr "Chybí odpovídající závorka k ( nebo \\("
|
||||
|
||||
#: lib/regcomp.c:149
|
||||
msgid "Unmatched \\{"
|
||||
msgstr "Chybí odpovídající závorka k \\{"
|
||||
|
||||
#: lib/regcomp.c:152
|
||||
msgid "Invalid content of \\{\\}"
|
||||
msgstr "Neplatný obsah \\{\\}"
|
||||
|
||||
#: lib/regcomp.c:155
|
||||
msgid "Invalid range end"
|
||||
msgstr "Neplatný konec rozsahu"
|
||||
|
||||
#: lib/regcomp.c:158
|
||||
msgid "Memory exhausted"
|
||||
msgstr "Paměť byla vyčerpána"
|
||||
|
||||
#: lib/regcomp.c:161
|
||||
msgid "Invalid preceding regular expression"
|
||||
msgstr "Neplatný předchozí regulární výraz"
|
||||
|
||||
#: lib/regcomp.c:164
|
||||
msgid "Premature end of regular expression"
|
||||
msgstr "Předčasný konec regulárního výrazu"
|
||||
|
||||
#: lib/regcomp.c:167
|
||||
msgid "Regular expression too big"
|
||||
msgstr "Regulární výraz je příliš velký"
|
||||
|
||||
#: lib/regcomp.c:170
|
||||
msgid "Unmatched ) or \\)"
|
||||
msgstr "Chybí odpovídající závorka k ) nebo \\)"
|
||||
|
||||
#: lib/regcomp.c:650
|
||||
msgid "No previous regular expression"
|
||||
msgstr "Žádný předchozí regulární výraz"
|
||||
|
||||
#: lib/spawn-pipe.c:218 lib/spawn-pipe.c:221
|
||||
#, c-format
|
||||
msgid "cannot create pipe"
|
||||
msgstr "nelze vytvořit rouru"
|
||||
|
||||
#: lib/spawn-pipe.c:599 lib/wait-process.c:326 lib/wait-process.c:400
|
||||
#, c-format
|
||||
msgid "%s subprocess failed"
|
||||
msgstr "selhal podřízený proces %s"
|
||||
|
||||
#: lib/wait-process.c:267 lib/wait-process.c:299 lib/wait-process.c:361
|
||||
#, c-format
|
||||
msgid "%s subprocess"
|
||||
msgstr "podřízený proces %s"
|
||||
|
||||
#: lib/wait-process.c:318 lib/wait-process.c:390
|
||||
#, c-format
|
||||
msgid "%s subprocess got fatal signal %d"
|
||||
msgstr "podřízený proces %s obdržel kritický signál %d"
|
||||
|
||||
#: lib/xalloc-die.c:34
|
||||
msgid "memory exhausted"
|
||||
msgstr "paměť byla vyčerpána"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid argument %s for %s"
|
||||
#~ msgstr "argument %s je pro %s neplatný"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ambiguous argument %s for %s"
|
||||
#~ msgstr "argument %s je pro %s nejednoznačný"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Valid arguments are:"
|
||||
#~ msgstr "Platné argumenty jsou:"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
|
||||
#~ msgstr "ARGP_HELP_FMT: hodnota %s je menší nebo rovna %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
|
||||
#~ msgstr "%.*s: Parametr ARGP_HELP_FMT vyžaduje hodnotu"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
|
||||
#~ msgstr "%.*s: Parametr ARGP_HELP_FMT musí být kladný"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
|
||||
#~ msgstr "%.*s: Neznámý parametr ARGP_HELP_FMT"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Garbage in ARGP_HELP_FMT: %s"
|
||||
#~ msgstr "Nesmysly v ARGP_HELP_FMT: %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Mandatory or optional arguments to long options are also mandatory or "
|
||||
#~ "optional for any corresponding short options."
|
||||
#~ msgstr ""
|
||||
#~ "Povinné či volitelné, argumenty pro dlouhé přepínače jsou povinné či "
|
||||
#~ "volitelné, i pro případné odpovídající krátké přepínače."
|
||||
|
||||
#~ msgid "Usage:"
|
||||
#~ msgstr "Použití:"
|
||||
|
||||
#~ msgid " or: "
|
||||
#~ msgstr " nebo:"
|
||||
|
||||
#~ msgid " [OPTION...]"
|
||||
#~ msgstr " [PŘEPÍNAČ…]"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
|
||||
#~ msgstr "Více informací získáte příkazem „%s --help“ nebo „%s --usage“.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report bugs to %s.\n"
|
||||
#~ msgstr "Chyby hlaste na %s.\n"
|
||||
|
||||
#~ msgid "give this help list"
|
||||
#~ msgstr "poskytne tuto přehledovou nápovědu"
|
||||
|
||||
#~ msgid "give a short usage message"
|
||||
#~ msgstr "poskytne stručnou informaci o používání"
|
||||
|
||||
#~ msgid "NAME"
|
||||
#~ msgstr "NÁZEV"
|
||||
|
||||
#~ msgid "set the program name"
|
||||
#~ msgstr "nastavit název programu"
|
||||
|
||||
#~ msgid "SECS"
|
||||
#~ msgstr "SEK"
|
||||
|
||||
#~ msgid "hang for SECS seconds (default 3600)"
|
||||
#~ msgstr "zastavit na SEK sekund (výchozí je 3600)"
|
||||
|
||||
#~ msgid "print program version"
|
||||
#~ msgstr "vypsat verzi programu"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) No version known!?"
|
||||
#~ msgstr "(CHYBA PROGRAMU) Neznámá verze!?"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: Too many arguments\n"
|
||||
#~ msgstr "%s: Příliš mnoho argumentů\n"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
|
||||
#~ msgstr "(CHYBA PROGRAMU) Měl by být rozpoznán přepínač!?"
|
||||
|
||||
#~ msgid "program error"
|
||||
#~ msgstr "chyba programu"
|
||||
|
||||
#~ msgid "stack overflow"
|
||||
#~ msgstr "přetečení zásobníku"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
|
||||
#~ msgstr "nelze najít dočasnou složku, zkusí se nastavit $TMPDIR"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create a temporary directory using template \"%s\""
|
||||
#~ msgstr "nelze vytvořit dočasnou složku pomocí šablony „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot remove temporary file %s"
|
||||
#~ msgstr "nelze odstranit dočasný soubor %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot remove temporary directory %s"
|
||||
#~ msgstr "nelze odstranit dočasnou složku %s"
|
||||
|
||||
#~ msgid "error closing file"
|
||||
#~ msgstr "chyba při zavírání souboru"
|
||||
|
||||
#~ msgid "write error"
|
||||
#~ msgstr "chyba při zápisu"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "preserving permissions for %s"
|
||||
#~ msgstr "zachování práv k souboru %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error while opening \"%s\" for reading"
|
||||
#~ msgstr "chyba při otevírání souboru „%s“ pro čtení"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot open backup file \"%s\" for writing"
|
||||
#~ msgstr "nelze otevřít záložní soubor „%s“ pro zápis"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error reading \"%s\""
|
||||
#~ msgstr "chyba při čtení souboru „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error writing \"%s\""
|
||||
#~ msgstr "chyba při zápisu do souboru „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error after reading \"%s\""
|
||||
#~ msgstr "chyba po přečtení souboru „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "fdopen() failed"
|
||||
#~ msgstr "selhala funkce fdopen()"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "C# compiler not found, try installing pnet"
|
||||
#~ msgstr "Překladač C# nebyl nalezen, zkuste nainstalovat pnet"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "C# virtual machine not found, try installing pnet"
|
||||
#~ msgstr "Virtuální stroj C# nebyl nalezen, zkuste nainstalovat pnet"
|
||||
|
||||
#~ msgid "regular empty file"
|
||||
#~ msgstr "prázdný běžný soubor"
|
||||
|
||||
#~ msgid "regular file"
|
||||
#~ msgstr "běžný soubor"
|
||||
|
||||
#~ msgid "directory"
|
||||
#~ msgstr "složka"
|
||||
|
||||
#~ msgid "block special file"
|
||||
#~ msgstr "speciální soubor blokového zařízení"
|
||||
|
||||
#~ msgid "character special file"
|
||||
#~ msgstr "speciální soubor znakového zařízení"
|
||||
|
||||
#~ msgid "fifo"
|
||||
#~ msgstr "fronta fifo"
|
||||
|
||||
#~ msgid "symbolic link"
|
||||
#~ msgstr "symbolický odkaz"
|
||||
|
||||
#~ msgid "socket"
|
||||
#~ msgstr "soket"
|
||||
|
||||
#~ msgid "message queue"
|
||||
#~ msgstr "fronta zpráv"
|
||||
|
||||
#~ msgid "semaphore"
|
||||
#~ msgstr "semafor"
|
||||
|
||||
#~ msgid "shared memory object"
|
||||
#~ msgstr "sdílený paměťový objekt"
|
||||
|
||||
#~ msgid "typed memory object"
|
||||
#~ msgstr "typový paměťový objekt"
|
||||
|
||||
#~ msgid "weird file"
|
||||
#~ msgstr "podivný soubor"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option '--%s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: přepínač „--%s“ musí být zadán bez argumentu\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: unrecognized option '--%s'\n"
|
||||
#~ msgstr "%s: neznámý přepínač „--%s“\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: přepínač „-W %s“ musí být zadán bez argumentu\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option '-W %s' requires an argument\n"
|
||||
#~ msgstr "%s: přepínač „-W %s“ vyžaduje argument\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid source_version argument to compile_java_class"
|
||||
#~ msgstr "neplatný argument source_version pro compile_java_class"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid target_version argument to compile_java_class"
|
||||
#~ msgstr "neplatný argument target_version pro compile_java_class"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "failed to create \"%s\""
|
||||
#~ msgstr "selhalo vytvoření „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error while writing \"%s\" file"
|
||||
#~ msgstr "chyba při zápisu souboru „%s“"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
|
||||
#~ msgstr ""
|
||||
#~ "Překladač jazyka Java nebyl nalezen, zkuste nainstalovat gcj nebo "
|
||||
#~ "nastavit proměnnou $JAVAC"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
|
||||
#~ msgstr ""
|
||||
#~ "Virtuální stroj Java nebyl nalezen, zkuste nainstalovat gij nebo nastavit "
|
||||
#~ "proměnnou $JAVAC"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s subprocess I/O error"
|
||||
#~ msgstr "V/V chyba podřízeného procesu %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot change permissions of %s"
|
||||
#~ msgstr "nelze změnit oprávnění k %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create directory %s"
|
||||
#~ msgstr "nelze vytvořit složku %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Failed to open /dev/zero for read"
|
||||
#~ msgstr "Selhalo otevření /dev/zero pro čtení"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "creation of reading thread failed"
|
||||
#~ msgstr "vytvoření čtecího vlákna selhalo"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot set up nonblocking I/O to %s subprocess"
|
||||
#~ msgstr "nelze nastavit neblokující V/V pro podřízený proces %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "communication with %s subprocess failed"
|
||||
#~ msgstr "komunikace s podřízeným procesem %s selhala"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "write to %s subprocess failed"
|
||||
#~ msgstr "zápis do podřízeného procesu %s selhal"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "read from %s subprocess failed"
|
||||
#~ msgstr "čtení z podřízeného procesu %s selhalo"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "subprocess %s terminated with exit code %d"
|
||||
#~ msgstr "podřízený proces %s byl ukončen s návratovým kódem %d"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "creation of threads failed"
|
||||
#~ msgstr "vytvoření vlákna selhalo"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s subprocess terminated with exit code %d"
|
||||
#~ msgstr "podřízený proces %s byl ukončen s návratovým kódem %d"
|
||||
|
||||
#~ msgid "Franc,ois Pinard"
|
||||
#~ msgstr "Franc, ois Pinard"
|
||||
|
||||
#~ msgid "^[yY]"
|
||||
#~ msgstr "^[aAyY]"
|
||||
|
||||
#~ msgid "^[nN]"
|
||||
#~ msgstr "^[nN]"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "setting permissions for %s"
|
||||
#~ msgstr "nastavení oprávnění k %s"
|
||||
|
||||
#~ msgid "Hangup"
|
||||
#~ msgstr "Zavěsit"
|
||||
|
||||
#~ msgid "Interrupt"
|
||||
#~ msgstr "Přerušení"
|
||||
|
||||
#~ msgid "Quit"
|
||||
#~ msgstr "Ukončit"
|
||||
|
||||
#~ msgid "Illegal instruction"
|
||||
#~ msgstr "Neplatná instrukce"
|
||||
|
||||
#~ msgid "Trace/breakpoint trap"
|
||||
#~ msgstr "Krokování/bod přerušení"
|
||||
|
||||
#~ msgid "Aborted"
|
||||
#~ msgstr "Přerušen"
|
||||
|
||||
#~ msgid "Floating point exception"
|
||||
#~ msgstr "Výjimka ve výpočtu s plovoucí čárkou"
|
||||
|
||||
#~ msgid "Killed"
|
||||
#~ msgstr "Zabit"
|
||||
|
||||
#~ msgid "Bus error"
|
||||
#~ msgstr "Chyba sběrnice"
|
||||
|
||||
#~ msgid "Segmentation fault"
|
||||
#~ msgstr "Porušení ochrany paměti"
|
||||
|
||||
#~ msgid "Broken pipe"
|
||||
#~ msgstr "Porušená roura"
|
||||
|
||||
#~ msgid "Alarm clock"
|
||||
#~ msgstr "Alarm od hodin"
|
||||
|
||||
#~ msgid "Terminated"
|
||||
#~ msgstr "Ukončen"
|
||||
|
||||
#~ msgid "Urgent I/O condition"
|
||||
#~ msgstr "Urgentní stav V/V"
|
||||
|
||||
#~ msgid "Stopped (signal)"
|
||||
#~ msgstr "Pozastavit (signál)"
|
||||
|
||||
#~ msgid "Stopped"
|
||||
#~ msgstr "Pozastaven"
|
||||
|
||||
#~ msgid "Continued"
|
||||
#~ msgstr "Pokračuje"
|
||||
|
||||
#~ msgid "Child exited"
|
||||
#~ msgstr "Potomek skončil"
|
||||
|
||||
#~ msgid "Stopped (tty input)"
|
||||
#~ msgstr "Pozastaven (vstup tty)"
|
||||
|
||||
#~ msgid "Stopped (tty output)"
|
||||
#~ msgstr "Pozastaven (výstup tty)"
|
||||
|
||||
#~ msgid "I/O possible"
|
||||
#~ msgstr "Možný V/V"
|
||||
|
||||
#~ msgid "CPU time limit exceeded"
|
||||
#~ msgstr "Překročeno časové omezení procesoru"
|
||||
|
||||
#~ msgid "File size limit exceeded"
|
||||
#~ msgstr "Překročeno omezení velikosti souboru"
|
||||
|
||||
#~ msgid "Virtual timer expired"
|
||||
#~ msgstr "Virtuální časovač doběhl"
|
||||
|
||||
#~ msgid "Profiling timer expired"
|
||||
#~ msgstr "Profilovací časovač doběhl"
|
||||
|
||||
#~ msgid "Window changed"
|
||||
#~ msgstr "Změnilo se okno"
|
||||
|
||||
#~ msgid "User defined signal 1"
|
||||
#~ msgstr "Uživatelsky definovaný signál 1"
|
||||
|
||||
#~ msgid "User defined signal 2"
|
||||
#~ msgstr "Uživatelsky definovaný signál 2"
|
||||
|
||||
#~ msgid "EMT trap"
|
||||
#~ msgstr "Krokování emulátoru (EMT)"
|
||||
|
||||
#~ msgid "Bad system call"
|
||||
#~ msgstr "Chybné systémové volání"
|
||||
|
||||
#~ msgid "Stack fault"
|
||||
#~ msgstr "Porušení zásobníku"
|
||||
|
||||
#~ msgid "Information request"
|
||||
#~ msgstr "Žádost o informace"
|
||||
|
||||
#~ msgid "Power failure"
|
||||
#~ msgstr "Selhalo napájení"
|
||||
|
||||
#~ msgid "Resource lost"
|
||||
#~ msgstr "Prostředek přestal být k dispozici"
|
||||
|
||||
#~ msgid "error writing to a closed pipe or socket"
|
||||
#~ msgstr "chyba zápisu do zavřené roury nebo soketu"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Real-time signal %d"
|
||||
#~ msgstr "Signál reálného času %d"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Unknown signal %d"
|
||||
#~ msgstr "Neznámý signál %d"
|
||||
|
||||
#~ msgid "iconv function not usable"
|
||||
#~ msgstr "funkce iconv není použitelná"
|
||||
|
||||
#~ msgid "iconv function not available"
|
||||
#~ msgstr "funkce iconv není dostupná"
|
||||
|
||||
#~ msgid "character out of range"
|
||||
#~ msgstr "znak je mimo rozsah"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set"
|
||||
#~ msgstr "znak U+%04X nelze převést do místní znakové sady"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set: %s"
|
||||
#~ msgstr "znak U+%04X nelze převést do místní znakové sady: %s"
|
||||
|
||||
#~ msgid "invalid user"
|
||||
#~ msgstr "neplatný uživatel"
|
||||
|
||||
#~ msgid "invalid group"
|
||||
#~ msgstr "neplatná skupina"
|
||||
|
||||
#~ msgid "invalid spec"
|
||||
#~ msgstr "neplatné zadání"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "unable to display error message"
|
||||
#~ msgstr "nelze zobrazit chybovou zprávu"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Packaged by %s (%s)\n"
|
||||
#~ msgstr "Zabalil %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Packaged by %s\n"
|
||||
#~ msgstr "Zabalil %s\n"
|
||||
|
||||
#~ msgid "(C)"
|
||||
#~ msgstr "©"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
|
||||
#~ "html>.\n"
|
||||
#~ "This is free software: you are free to change and redistribute it.\n"
|
||||
#~ "There is NO WARRANTY, to the extent permitted by law.\n"
|
||||
#~ "\n"
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Licence GPLv3+: GNU GPL verze 3 nebo novější <http://gnu.org/licenses/gpl."
|
||||
#~ "html>.\n"
|
||||
#~ "Jde o svobodný software: můžete jej volně měnit a šířit.\n"
|
||||
#~ "Nejsou poskytovány ŽÁDNÉ ZÁRUKY, mimo těch daných zákonem.\n"
|
||||
#~ "\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s.\n"
|
||||
#~ msgstr "Napsal %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s and %s.\n"
|
||||
#~ msgstr "Napsali %s a %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s, %s, and %s.\n"
|
||||
#~ msgstr "Napsali %s, %s a %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Napsali %s, %s, %s\n"
|
||||
#~ "a %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Napsali %s, %s, %s,\n"
|
||||
#~ "%s a %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Napsali %s, %s, %s,\n"
|
||||
#~ "%s, %s a %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Napsali %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s a %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Napsali %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s\n"
|
||||
#~ "a %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Napsali %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s a %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s, and others.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Napsali %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s a další.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "Report bugs to: %s\n"
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Chyby hlaste na: %s\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report %s bugs to: %s\n"
|
||||
#~ msgstr "Chyby balíčku %s hlaste na: %s\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s home page: <%s>\n"
|
||||
#~ msgstr "Domovská stránka projektu %s: <%s>\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
|
||||
#~ msgstr "Domovská stránka projektu %s: <http://www.gnu.org/software/%s/>\n"
|
||||
|
||||
#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
|
||||
#~ msgstr ""
|
||||
#~ "Obecná nápověda k používání softwaru GNU: <http://www.gnu.org/gethelp/>\n"
|
||||
|
||||
#~ msgid "stdin"
|
||||
#~ msgstr "standardní vstup"
|
||||
|
||||
#~ msgid "stdout"
|
||||
#~ msgstr "standardní výstup"
|
||||
|
||||
#~ msgid "stderr"
|
||||
#~ msgstr "standardní chybový výstup"
|
||||
|
||||
#~ msgid "unknown stream"
|
||||
#~ msgstr "neznámý proud"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "failed to reopen %s with mode %s"
|
||||
#~ msgstr "selhalo opětovné otevření %s v režimu %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "string comparison failed"
|
||||
#~ msgstr "selhalo porovnání řetězců"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Set LC_ALL='C' to work around the problem."
|
||||
#~ msgstr "Problém obejdete nastavením LC_ALL='C'."
|
||||
|
||||
#, c-format
|
||||
#~ msgid "The strings compared were %s and %s."
|
||||
#~ msgstr "Porovnávané řetězce byly %s a %s."
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot perform formatted output"
|
||||
#~ msgstr "nelze provést formátovaný výstup"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid %s%s argument `%s'"
|
||||
#~ msgstr "neplatný argument „%3$s“ pro %1$s%2$s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid suffix in %s%s argument `%s'"
|
||||
#~ msgstr "neplatná přípona v argumentu „%3$s“ pro %1$s%2$s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s%s argument `%s' too large"
|
||||
#~ msgstr "argument „%3$s“ pro %1$s%2$s je příliš velký"
|
BIN
gnulib_po/da.gmo
Normal file
BIN
gnulib_po/da.gmo
Normal file
Binary file not shown.
898
gnulib_po/da.po
Normal file
898
gnulib_po/da.po
Normal file
|
@ -0,0 +1,898 @@
|
|||
# Danish messages for gnulib.
|
||||
# Copyright © 1997, 2002, 2003, 2004, 2005, 2007, 2009, 2010 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the gnulib package.
|
||||
# Peter Antman <peter.antman@abc.se>, 1997.
|
||||
# Thomas Olsson <cid95tho@lustudat.student.lu.se>, 1997.
|
||||
# Daniel Resare <daniel@resare.com>, 1999, 2000.
|
||||
# Göran Uddeborg <goeran@uddeborg.se>, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009, 2010.
|
||||
# Keld Simonsen <keld@keldix.com>, 2011
|
||||
#
|
||||
# $Revision: 1.8 $
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnulib 2.0.0.3462.e9796\n"
|
||||
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
|
||||
"POT-Creation-Date: 2024-11-10 22:29+0100\n"
|
||||
"PO-Revision-Date: 2011-01-20 22:11+0100\n"
|
||||
"Last-Translator: Keld Simonsen <keld@keldix.com>\n"
|
||||
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
|
||||
"Language: da\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=iso-8859-1\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Bugs: Report translation errors to the Language-Team address.\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: lib/error.c:208
|
||||
msgid "Unknown system error"
|
||||
msgstr "Ukendt systemfejl"
|
||||
|
||||
#: lib/gai_strerror.c:57
|
||||
msgid "Address family for hostname not supported"
|
||||
msgstr "Adressefamilien for værtsnavnet understøttes ikke"
|
||||
|
||||
#: lib/gai_strerror.c:58
|
||||
msgid "Temporary failure in name resolution"
|
||||
msgstr "Midlertidig fejl i navneopslag"
|
||||
|
||||
#: lib/gai_strerror.c:59
|
||||
msgid "Bad value for ai_flags"
|
||||
msgstr "Fejlagtig værdi for ai_flags"
|
||||
|
||||
#: lib/gai_strerror.c:60
|
||||
msgid "Non-recoverable failure in name resolution"
|
||||
msgstr "Ureparérbar fejl i navneopslag"
|
||||
|
||||
#: lib/gai_strerror.c:61
|
||||
msgid "ai_family not supported"
|
||||
msgstr "ai_family understøttes ikke"
|
||||
|
||||
#: lib/gai_strerror.c:62
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "Hukommelsesallokeringsfejl"
|
||||
|
||||
#: lib/gai_strerror.c:63
|
||||
msgid "No address associated with hostname"
|
||||
msgstr "Ingen adresse associeret med værtsnavnet"
|
||||
|
||||
#: lib/gai_strerror.c:64
|
||||
msgid "Name or service not known"
|
||||
msgstr "Navn eller tjeneste ikke kendt"
|
||||
|
||||
#: lib/gai_strerror.c:65
|
||||
msgid "Servname not supported for ai_socktype"
|
||||
msgstr "Servname understøttes ikke for ai_socktype"
|
||||
|
||||
#: lib/gai_strerror.c:66
|
||||
msgid "ai_socktype not supported"
|
||||
msgstr "ai_socktype understøttes ikke"
|
||||
|
||||
#: lib/gai_strerror.c:67
|
||||
msgid "System error"
|
||||
msgstr "Systemfejl"
|
||||
|
||||
#: lib/gai_strerror.c:68
|
||||
msgid "Argument buffer too small"
|
||||
msgstr "Argumentbufferen for lille"
|
||||
|
||||
#: lib/gai_strerror.c:70
|
||||
msgid "Processing request in progress"
|
||||
msgstr "Bearbejder pågående anmodning"
|
||||
|
||||
#: lib/gai_strerror.c:71
|
||||
msgid "Request canceled"
|
||||
msgstr "Anmodning annuleret"
|
||||
|
||||
#: lib/gai_strerror.c:72
|
||||
msgid "Request not canceled"
|
||||
msgstr "Anmodning ikke annuleret"
|
||||
|
||||
#: lib/gai_strerror.c:73
|
||||
msgid "All requests done"
|
||||
msgstr "Alle anmodninger udført"
|
||||
|
||||
#: lib/gai_strerror.c:74
|
||||
msgid "Interrupted by a signal"
|
||||
msgstr "Afbrudt af et signal"
|
||||
|
||||
#: lib/gai_strerror.c:75
|
||||
msgid "Parameter string not correctly encoded"
|
||||
msgstr "Parameterstreng ikke korrekt kodet"
|
||||
|
||||
#: lib/gai_strerror.c:87
|
||||
msgid "Unknown error"
|
||||
msgstr "Ukendt fejl"
|
||||
|
||||
#: lib/getopt.c:282
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option '%s' is ambiguous\n"
|
||||
msgid "%s: option '%s%s' is ambiguous\n"
|
||||
msgstr "%s: flaget '%s' er flertydigt\n"
|
||||
|
||||
#: lib/getopt.c:288
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option '%s' is ambiguous\n"
|
||||
msgid "%s: option '%s%s' is ambiguous; possibilities:"
|
||||
msgstr "%s: flaget '%s' er flertydigt\n"
|
||||
|
||||
#: lib/getopt.c:322
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: unrecognized option '%c%s'\n"
|
||||
msgid "%s: unrecognized option '%s%s'\n"
|
||||
msgstr "%s: ukendt flag '%c%s'\n"
|
||||
|
||||
#: lib/getopt.c:348
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option '%c%s' doesn't allow an argument\n"
|
||||
msgid "%s: option '%s%s' doesn't allow an argument\n"
|
||||
msgstr "%s: flaget '%c%s' tager intet argument\n"
|
||||
|
||||
#: lib/getopt.c:363
|
||||
#, fuzzy, c-format
|
||||
#| msgid "%s: option '%s' requires an argument\n"
|
||||
msgid "%s: option '%s%s' requires an argument\n"
|
||||
msgstr "%s: flaget '%s' kræver et argument\n"
|
||||
|
||||
#: lib/getopt.c:624
|
||||
#, c-format
|
||||
msgid "%s: invalid option -- '%c'\n"
|
||||
msgstr "%s: ugyldig flag -- '%c'\n"
|
||||
|
||||
#: lib/getopt.c:639 lib/getopt.c:685
|
||||
#, c-format
|
||||
msgid "%s: option requires an argument -- '%c'\n"
|
||||
msgstr "%s: flaget kræver et argument -- '%c'\n"
|
||||
|
||||
#: lib/openat-die.c:38
|
||||
#, c-format
|
||||
msgid "unable to record current working directory"
|
||||
msgstr "kan ikke notere aktuelt arbejdskatalog"
|
||||
|
||||
#: lib/openat-die.c:57
|
||||
#, c-format
|
||||
msgid "failed to return to initial working directory"
|
||||
msgstr "kunne ikke gå tilbage til det oprindelige arbejdskatalog"
|
||||
|
||||
#: lib/os2-spawn.c:51
|
||||
#, c-format
|
||||
msgid "_open_osfhandle failed"
|
||||
msgstr "_open_osfhandle mislykkedes"
|
||||
|
||||
#: lib/os2-spawn.c:88
|
||||
#, c-format
|
||||
msgid "cannot restore fd %d: dup2 failed"
|
||||
msgstr "kan ikke genskabe fb %d: dup2 mislykkedes"
|
||||
|
||||
#. TRANSLATORS:
|
||||
#. Get translations for open and closing quotation marks.
|
||||
#. The message catalog should translate "`" to a left
|
||||
#. quotation mark suitable for the locale, and similarly for
|
||||
#. "'". For example, a French Unicode local should translate
|
||||
#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), respectively.
|
||||
#.
|
||||
#. If the catalog has no translation, we will try to
|
||||
#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
|
||||
#. current locale is not Unicode, locale_quoting_style
|
||||
#. will quote 'like this', and clocale_quoting_style will
|
||||
#. quote "like this". You should always include translations
|
||||
#. for "`" and "'" even if U+2018 and U+2019 are appropriate
|
||||
#. for your locale.
|
||||
#.
|
||||
#. If you don't know what to put here, please see
|
||||
#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
|
||||
#. and use glyphs suitable for your language.
|
||||
#: lib/quotearg.c:354
|
||||
msgid "`"
|
||||
msgstr "'"
|
||||
|
||||
#: lib/quotearg.c:355
|
||||
msgid "'"
|
||||
msgstr "'"
|
||||
|
||||
#: lib/regcomp.c:122
|
||||
msgid "Success"
|
||||
msgstr "Lykkedes"
|
||||
|
||||
#: lib/regcomp.c:125
|
||||
msgid "No match"
|
||||
msgstr "Ingen træffer"
|
||||
|
||||
#: lib/regcomp.c:128
|
||||
msgid "Invalid regular expression"
|
||||
msgstr "Fejlagtigt regulært udtryk"
|
||||
|
||||
#: lib/regcomp.c:131
|
||||
msgid "Invalid collation character"
|
||||
msgstr "Ugyldigt sorteringstegn"
|
||||
|
||||
#: lib/regcomp.c:134
|
||||
msgid "Invalid character class name"
|
||||
msgstr "Ugyldigt tegnklassenavn"
|
||||
|
||||
#: lib/regcomp.c:137
|
||||
msgid "Trailing backslash"
|
||||
msgstr "Afsluttende baglæns skråstreg"
|
||||
|
||||
#: lib/regcomp.c:140
|
||||
msgid "Invalid back reference"
|
||||
msgstr "Ugyldig bagudreference"
|
||||
|
||||
#: lib/regcomp.c:143
|
||||
#, fuzzy
|
||||
#| msgid "Unmatched [ or [^"
|
||||
msgid "Unmatched [, [^, [:, [., or [="
|
||||
msgstr "Ensomt [ eller [^"
|
||||
|
||||
#: lib/regcomp.c:146
|
||||
msgid "Unmatched ( or \\("
|
||||
msgstr "Ensomt ( eller \\("
|
||||
|
||||
#: lib/regcomp.c:149
|
||||
msgid "Unmatched \\{"
|
||||
msgstr "Ensomt \\\\{"
|
||||
|
||||
#: lib/regcomp.c:152
|
||||
msgid "Invalid content of \\{\\}"
|
||||
msgstr "Ugyldigt indhold i \\{\\}"
|
||||
|
||||
#: lib/regcomp.c:155
|
||||
msgid "Invalid range end"
|
||||
msgstr "Ugyldigt intervalslut"
|
||||
|
||||
#: lib/regcomp.c:158
|
||||
msgid "Memory exhausted"
|
||||
msgstr "Hukommelse opbrugt"
|
||||
|
||||
#: lib/regcomp.c:161
|
||||
msgid "Invalid preceding regular expression"
|
||||
msgstr "Fejlagtigt foregående regulært udtryk"
|
||||
|
||||
#: lib/regcomp.c:164
|
||||
msgid "Premature end of regular expression"
|
||||
msgstr "For tidlig afslutning af regulært udtryk"
|
||||
|
||||
#: lib/regcomp.c:167
|
||||
msgid "Regular expression too big"
|
||||
msgstr "For stort regulært udtryk"
|
||||
|
||||
#: lib/regcomp.c:170
|
||||
msgid "Unmatched ) or \\)"
|
||||
msgstr "Ensomt ) eller \\)"
|
||||
|
||||
#: lib/regcomp.c:650
|
||||
msgid "No previous regular expression"
|
||||
msgstr "Intet foregående regulært udtryk"
|
||||
|
||||
#: lib/spawn-pipe.c:218 lib/spawn-pipe.c:221
|
||||
#, c-format
|
||||
msgid "cannot create pipe"
|
||||
msgstr "kan ikke oprette datakanal"
|
||||
|
||||
#: lib/spawn-pipe.c:599 lib/wait-process.c:326 lib/wait-process.c:400
|
||||
#, c-format
|
||||
msgid "%s subprocess failed"
|
||||
msgstr "%s-underproces mislykkedes"
|
||||
|
||||
#: lib/wait-process.c:267 lib/wait-process.c:299 lib/wait-process.c:361
|
||||
#, c-format
|
||||
msgid "%s subprocess"
|
||||
msgstr "%s-underproces"
|
||||
|
||||
#: lib/wait-process.c:318 lib/wait-process.c:390
|
||||
#, c-format
|
||||
msgid "%s subprocess got fatal signal %d"
|
||||
msgstr "%s-underproces fik ødelæggende signal %d"
|
||||
|
||||
#: lib/xalloc-die.c:34
|
||||
msgid "memory exhausted"
|
||||
msgstr "hukommelsen opbrugt"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid argument %s for %s"
|
||||
#~ msgstr "Ugyldigt argument %s til %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ambiguous argument %s for %s"
|
||||
#~ msgstr "flertydigt argument %s til %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Valid arguments are:"
|
||||
#~ msgstr "gyldige argumenter er:"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
|
||||
#~ msgstr "ARGP_HELP_FMT: værdien på %s er mindre end eller lig med %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
|
||||
#~ msgstr "%.*s: ARGP_HELP_FMT-parameteren kræver en værdi"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
|
||||
#~ msgstr "%.*s: ARGP_HELP_FMT-parameteren skal være positiv"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
|
||||
#~ msgstr "%.*s: Ukendt ARGP_HELP_FMT-parameter"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Garbage in ARGP_HELP_FMT: %s"
|
||||
#~ msgstr "Snavs i ARGP_HELP_FMT: %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Mandatory or optional arguments to long options are also mandatory or "
|
||||
#~ "optional for any corresponding short options."
|
||||
#~ msgstr ""
|
||||
#~ "Obligatoriske eller valgfrie argumenter til lange flag er også "
|
||||
#~ "obligatoriske eller valgfrie for tilsvarende korte flag."
|
||||
|
||||
#~ msgid "Usage:"
|
||||
#~ msgstr "Brug:"
|
||||
|
||||
#~ msgid " or: "
|
||||
#~ msgstr " eller: "
|
||||
|
||||
#~ msgid " [OPTION...]"
|
||||
#~ msgstr " [FLAG...]"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
|
||||
#~ msgstr "Forsøg med '%s --help' eller '%s --usage' for mere information.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report bugs to %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Rapportér fejl til %s.\n"
|
||||
#~ "Send synspunkter på oversættelsen til <dansk@dansk-gruppen.dk>\n"
|
||||
|
||||
#~ msgid "give this help list"
|
||||
#~ msgstr "giv denne hjælpeliste"
|
||||
|
||||
#~ msgid "give a short usage message"
|
||||
#~ msgstr "giv en kort meddelelse om brug"
|
||||
|
||||
#~ msgid "NAME"
|
||||
#~ msgstr "NAVN"
|
||||
|
||||
#~ msgid "set the program name"
|
||||
#~ msgstr "angiv progravnavnet"
|
||||
|
||||
#~ msgid "SECS"
|
||||
#~ msgstr "S"
|
||||
|
||||
#~ msgid "hang for SECS seconds (default 3600)"
|
||||
#~ msgstr "hæng i S sekunder (som standard 3600)"
|
||||
|
||||
#~ msgid "print program version"
|
||||
#~ msgstr "udskriv programversion"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) No version known!?"
|
||||
#~ msgstr "(PROGRAMFEJL) Ingen version kendt!?"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: Too many arguments\n"
|
||||
#~ msgstr "%s: For mange argumenter\n"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
|
||||
#~ msgstr "(PROGRAMFEJL) Flaget burde være blevet genkendt!?"
|
||||
|
||||
#~ msgid "program error"
|
||||
#~ msgstr "programfejl"
|
||||
|
||||
#~ msgid "stack overflow"
|
||||
#~ msgstr "stakoverløb"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
|
||||
#~ msgstr "kan ikke finde et temporært katalog, forsøg at sætte $TMPDIR"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create a temporary directory using template \"%s\""
|
||||
#~ msgstr "kan ikke oprette et temporært katalog ved brug af skabelonen '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot remove temporary file %s"
|
||||
#~ msgstr "kan ikke fjerne temporær fil %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot remove temporary directory %s"
|
||||
#~ msgstr "kan ikke fjerne temporært katalog %s"
|
||||
|
||||
#~ msgid "error closing file"
|
||||
#~ msgstr "fejl ved lukning af fil"
|
||||
|
||||
#~ msgid "write error"
|
||||
#~ msgstr "skrivefejl"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "preserving permissions for %s"
|
||||
#~ msgstr "bevarer rettigheder på %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error while opening \"%s\" for reading"
|
||||
#~ msgstr "fejl ved åbning af '%s' for læsning"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot open backup file \"%s\" for writing"
|
||||
#~ msgstr "kan ikke åbne sikkerhedskopifil '%s' for skrivning"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error reading \"%s\""
|
||||
#~ msgstr "fejl ved læsning af '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error writing \"%s\""
|
||||
#~ msgstr "fejl ved skrivning af '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error after reading \"%s\""
|
||||
#~ msgstr "fejl efter læsning af '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "fdopen() failed"
|
||||
#~ msgstr "fdopen() mislykkedes"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "C# compiler not found, try installing pnet"
|
||||
#~ msgstr "C#-oversætter ikke fundet, forsøg at installere pnet"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "C# virtual machine not found, try installing pnet"
|
||||
#~ msgstr "virtuel C#-maskine ikke fundet, forsøg at installere pnet"
|
||||
|
||||
#~ msgid "regular empty file"
|
||||
#~ msgstr "tom normal fil"
|
||||
|
||||
#~ msgid "regular file"
|
||||
#~ msgstr "normal fil"
|
||||
|
||||
#~ msgid "directory"
|
||||
#~ msgstr "katalog"
|
||||
|
||||
#~ msgid "block special file"
|
||||
#~ msgstr "blokspecialfil"
|
||||
|
||||
#~ msgid "character special file"
|
||||
#~ msgstr "tegnspecialfil"
|
||||
|
||||
#~ msgid "fifo"
|
||||
#~ msgstr "fifo"
|
||||
|
||||
#~ msgid "symbolic link"
|
||||
#~ msgstr "symbolsk lænke"
|
||||
|
||||
#~ msgid "socket"
|
||||
#~ msgstr "sokkel (socket)"
|
||||
|
||||
#~ msgid "message queue"
|
||||
#~ msgstr "meddelelsekø"
|
||||
|
||||
#~ msgid "semaphore"
|
||||
#~ msgstr "semafor"
|
||||
|
||||
#~ msgid "shared memory object"
|
||||
#~ msgstr "objekt af delt hukommelse"
|
||||
|
||||
#~ msgid "typed memory object"
|
||||
#~ msgstr "objekt af typet hukommelse"
|
||||
|
||||
#~ msgid "weird file"
|
||||
#~ msgstr "mærkelig fil"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option '--%s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: flaget '--%s' tager intet argument\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: unrecognized option '--%s'\n"
|
||||
#~ msgstr "%s: ukendt flag '--%s'\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option '-W %s' is ambiguous\n"
|
||||
#~ msgstr "%s: flaget '-W %s' er flertydigt\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: flaget '-W %s' tager intet argument\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid source_version argument to compile_java_class"
|
||||
#~ msgstr "ugyldigt source_version-argument til compile_java_class"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid target_version argument to compile_java_class"
|
||||
#~ msgstr "ugyldigt target_version-argument til compile_java_class"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "failed to create \"%s\""
|
||||
#~ msgstr "det gik ikke at oprette '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error while writing \"%s\" file"
|
||||
#~ msgstr "fejl ved skrivning af filen '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
|
||||
#~ msgstr ""
|
||||
#~ "Javaoversætter ikke fundet, forsøg at installere gcj eller sætte $JAVAC"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
|
||||
#~ msgstr ""
|
||||
#~ "Virtuel Javamaskine ikke fundet, forsøg at installere gij eller sætte "
|
||||
#~ "$JAVA"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s subprocess I/O error"
|
||||
#~ msgstr "%s-underproces I/O-fejl"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot change permissions of %s"
|
||||
#~ msgstr "kan ikke ændre rettigheder på %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create directory %s"
|
||||
#~ msgstr "kan ikke oprette kataloget %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Failed to open /dev/zero for read"
|
||||
#~ msgstr "Mislykkedes med at åbne /dev/zero for læsning"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "creation of reading thread failed"
|
||||
#~ msgstr "oprettelse af læsetråd mislykkedes"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot set up nonblocking I/O to %s subprocess"
|
||||
#~ msgstr "kan ikke opsætte ikke-blokerende I/O til %s-underproces"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "communication with %s subprocess failed"
|
||||
#~ msgstr "kommunikation med %s-underproces mislykkedes"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "write to %s subprocess failed"
|
||||
#~ msgstr "skrivning til %s-underproces mislykkedes"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "read from %s subprocess failed"
|
||||
#~ msgstr "læsning fra %s-underproces mislykkedes"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "subprocess %s terminated with exit code %d"
|
||||
#~ msgstr "underproces %s afsluttet med slutstatus %d"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "creation of threads failed"
|
||||
#~ msgstr "oprettelse af tråde mislykkedes"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s subprocess terminated with exit code %d"
|
||||
#~ msgstr "%s-underproces afslutted med slutstatus %d"
|
||||
|
||||
#~ msgid "^[yY]"
|
||||
#~ msgstr "^[yYjJ]"
|
||||
|
||||
#~ msgid "^[nN]"
|
||||
#~ msgstr "^[nN]"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "setting permissions for %s"
|
||||
#~ msgstr "ændrer rettigheder på %s"
|
||||
|
||||
#~ msgid "Hangup"
|
||||
#~ msgstr "Lagt på"
|
||||
|
||||
#~ msgid "Interrupt"
|
||||
#~ msgstr "Afbrudt"
|
||||
|
||||
#~ msgid "Quit"
|
||||
#~ msgstr "Afslut"
|
||||
|
||||
#~ msgid "Illegal instruction"
|
||||
#~ msgstr "Utilladt instruktion"
|
||||
|
||||
#~ msgid "Trace/breakpoint trap"
|
||||
#~ msgstr "Sporings-/afbrudspunktsfælde"
|
||||
|
||||
#~ msgid "Aborted"
|
||||
#~ msgstr "Afbrudt (abort)"
|
||||
|
||||
#~ msgid "Floating point exception"
|
||||
#~ msgstr "Undtagelse ved flydende tal"
|
||||
|
||||
#~ msgid "Killed"
|
||||
#~ msgstr "Dræbt"
|
||||
|
||||
#~ msgid "Bus error"
|
||||
#~ msgstr "Busfejl"
|
||||
|
||||
#~ msgid "Segmentation fault"
|
||||
#~ msgstr "Segmenteringsfejl"
|
||||
|
||||
#~ msgid "Broken pipe"
|
||||
#~ msgstr "Brudt datakanal"
|
||||
|
||||
#~ msgid "Alarm clock"
|
||||
#~ msgstr "Alarmklokke"
|
||||
|
||||
#~ msgid "Terminated"
|
||||
#~ msgstr "Afsluttet"
|
||||
|
||||
#~ msgid "Urgent I/O condition"
|
||||
#~ msgstr "Hastende I/O-situation"
|
||||
|
||||
#~ msgid "Stopped (signal)"
|
||||
#~ msgstr "Stoppet (signal)"
|
||||
|
||||
#~ msgid "Stopped"
|
||||
#~ msgstr "Stoppet"
|
||||
|
||||
#~ msgid "Continued"
|
||||
#~ msgstr "Genoptaget"
|
||||
|
||||
#~ msgid "Child exited"
|
||||
#~ msgstr "Barn afsluttede"
|
||||
|
||||
#~ msgid "Stopped (tty input)"
|
||||
#~ msgstr "Stoppet (terminallæsning)"
|
||||
|
||||
#~ msgid "Stopped (tty output)"
|
||||
#~ msgstr "Stoppet (terminalskrivning)"
|
||||
|
||||
#~ msgid "I/O possible"
|
||||
#~ msgstr "I/O muligt"
|
||||
|
||||
#~ msgid "CPU time limit exceeded"
|
||||
#~ msgstr "Grænse på CPU-tid overskredet"
|
||||
|
||||
#~ msgid "File size limit exceeded"
|
||||
#~ msgstr "Grænse på filstørrelse overskredet"
|
||||
|
||||
#~ msgid "Virtual timer expired"
|
||||
#~ msgstr "Alarmklokke - virtuel tid - udløb"
|
||||
|
||||
#~ msgid "Profiling timer expired"
|
||||
#~ msgstr "Profileringsklokke udløb"
|
||||
|
||||
#~ msgid "Window changed"
|
||||
#~ msgstr "Ændret vindue"
|
||||
|
||||
#~ msgid "User defined signal 1"
|
||||
#~ msgstr "Brugersignal 1"
|
||||
|
||||
#~ msgid "User defined signal 2"
|
||||
#~ msgstr "Brugersignal 2"
|
||||
|
||||
#~ msgid "EMT trap"
|
||||
#~ msgstr "Emulatorfælde"
|
||||
|
||||
#~ msgid "Bad system call"
|
||||
#~ msgstr "Fejlagtigt systemkald"
|
||||
|
||||
#~ msgid "Stack fault"
|
||||
#~ msgstr "Stakfejl"
|
||||
|
||||
#~ msgid "Information request"
|
||||
#~ msgstr "Informationsanmodning"
|
||||
|
||||
#~ msgid "Power failure"
|
||||
#~ msgstr "Strømafbrud"
|
||||
|
||||
#~ msgid "Resource lost"
|
||||
#~ msgstr "Tabt resurse"
|
||||
|
||||
#~ msgid "error writing to a closed pipe or socket"
|
||||
#~ msgstr "fejl ved skrivning til en lukket datakanal eller sokkel"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Real-time signal %d"
|
||||
#~ msgstr "Realtidsignal %d"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Unknown signal %d"
|
||||
#~ msgstr "Ukendt signal %d"
|
||||
|
||||
#~ msgid "iconv function not usable"
|
||||
#~ msgstr "iconv-funktion ikke brugbar"
|
||||
|
||||
#~ msgid "iconv function not available"
|
||||
#~ msgstr "iconv-funktion ikke tilgængelig"
|
||||
|
||||
#~ msgid "character out of range"
|
||||
#~ msgstr "tegn udenfor interval"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set"
|
||||
#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnsæt"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set: %s"
|
||||
#~ msgstr "kan ikke konvertere U+%04X til lokalt tegnsæt: %s"
|
||||
|
||||
#~ msgid "invalid user"
|
||||
#~ msgstr "ugyldig bruger"
|
||||
|
||||
#~ msgid "invalid group"
|
||||
#~ msgstr "ugyldig gruppe"
|
||||
|
||||
#~ msgid "invalid spec"
|
||||
#~ msgstr "ugyldig specifikation"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "unable to display error message"
|
||||
#~ msgstr "kan ikke vise fejlmeddelelse"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Packaged by %s (%s)\n"
|
||||
#~ msgstr "Pakket af %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Packaged by %s\n"
|
||||
#~ msgstr "Pakket af %s\n"
|
||||
|
||||
#~ msgid "(C)"
|
||||
#~ msgstr "©"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl."
|
||||
#~ "html>.\n"
|
||||
#~ "This is free software: you are free to change and redistribute it.\n"
|
||||
#~ "There is NO WARRANTY, to the extent permitted by law.\n"
|
||||
#~ "\n"
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Licens GPLv3+: GNU GPL version 3 eller senere <http://gnu.org/licenses/"
|
||||
#~ "gpl.html>.\n"
|
||||
#~ "Dette er frit programmel: du må ændre og videredistribuere det.\n"
|
||||
#~ "Der gives INGEN GARANTI, så vidt lov tillader.\n"
|
||||
#~ "\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s.\n"
|
||||
#~ msgstr "Skrevet af %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s and %s.\n"
|
||||
#~ msgstr "Skrevet af %s og %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s, %s, and %s.\n"
|
||||
#~ msgstr "Skrevet af %s, %s og %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Skrevet af %s, %s, %s\n"
|
||||
#~ "og %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Skrevet af %s, %s, %s,\n"
|
||||
#~ "%s og %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Skrevet af %s, %s, %s,\n"
|
||||
#~ "%s, %s og %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Skrevet af %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s og %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Skrevet af %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s\n"
|
||||
#~ "og %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Skrevet af %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s og %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s, and others.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Skrevet af %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s med flere.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "Report bugs to: %s\n"
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Rapportér fejl til: %s\n"
|
||||
#~ "Sende synspunkter på oversættelsen til: tp-sv@listor.tp-sv.se\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report %s bugs to: %s\n"
|
||||
#~ msgstr "Rapportér %s-fejl til: %s\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s home page: <%s>\n"
|
||||
#~ msgstr "%s hjemmeside: <%s>\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s home page: <http://www.gnu.org/software/%s/>\n"
|
||||
#~ msgstr "%s hjemmeside: <http://www.gnu.org/software/%s/>\n"
|
||||
|
||||
#~ msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n"
|
||||
#~ msgstr ""
|
||||
#~ "Almindelig hjælp til at bruge GNU-programmer: <http://www.gnu.org/gethelp/"
|
||||
#~ ">\n"
|
||||
|
||||
#~ msgid "stdin"
|
||||
#~ msgstr "standard ind"
|
||||
|
||||
#~ msgid "stdout"
|
||||
#~ msgstr "standard ud"
|
||||
|
||||
#~ msgid "stderr"
|
||||
#~ msgstr "standard fejl"
|
||||
|
||||
#~ msgid "unknown stream"
|
||||
#~ msgstr "ukendt strøm"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "failed to reopen %s with mode %s"
|
||||
#~ msgstr "kunne ikke genåbne %s i tilstand %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "string comparison failed"
|
||||
#~ msgstr "strengsammenligning mislykkedes"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Set LC_ALL='C' to work around the problem."
|
||||
#~ msgstr "Sæt LC_ALL='C' for at omgå problemet."
|
||||
|
||||
#, c-format
|
||||
#~ msgid "The strings compared were %s and %s."
|
||||
#~ msgstr "De sammenlignede strenge var %s og %s."
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot perform formatted output"
|
||||
#~ msgstr "kan ikke udføre formateret udskrift"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid %s%s argument `%s'"
|
||||
#~ msgstr "fejlagtigt %s%s-argument '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid suffix in %s%s argument `%s'"
|
||||
#~ msgstr "fejlagtigt suffiks i %s%s-argument '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s%s argument `%s' too large"
|
||||
#~ msgstr "%s%s argument '%s' er for stort"
|
BIN
gnulib_po/de.gmo
Normal file
BIN
gnulib_po/de.gmo
Normal file
Binary file not shown.
1052
gnulib_po/de.po
Normal file
1052
gnulib_po/de.po
Normal file
File diff suppressed because it is too large
Load diff
BIN
gnulib_po/el.gmo
Normal file
BIN
gnulib_po/el.gmo
Normal file
Binary file not shown.
701
gnulib_po/el.po
Normal file
701
gnulib_po/el.po
Normal file
|
@ -0,0 +1,701 @@
|
|||
# Greek messages for gnulib
|
||||
# Copyright (C) 1999, 2000, 2001, 2002, 2012 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the gnulib package.
|
||||
# Simos Xenitellis <simos.lists@googlemail.com>, 1999, 2000, 2001, 2002, 2012.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnulib 3.0.0.6062.a6b16\n"
|
||||
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
|
||||
"POT-Creation-Date: 2024-11-10 22:29+0100\n"
|
||||
"PO-Revision-Date: 2012-03-11 11:25+0100\n"
|
||||
"Last-Translator: Simos Xenitellis <simos.lists@googlemail.com>\n"
|
||||
"Language-Team: Greek <team@lists.gnome.gr>\n"
|
||||
"Language: el\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8-bit\n"
|
||||
"X-Bugs: Report translation errors to the Language-Team address.\n"
|
||||
|
||||
#
|
||||
#: lib/error.c:208
|
||||
msgid "Unknown system error"
|
||||
msgstr "Άγνωστο σφάλμα συστήματος"
|
||||
|
||||
#: lib/gai_strerror.c:57
|
||||
#, fuzzy
|
||||
msgid "Address family for hostname not supported"
|
||||
msgstr "αρχεία fifo δεν υποστηρίζονται"
|
||||
|
||||
#: lib/gai_strerror.c:58
|
||||
msgid "Temporary failure in name resolution"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:59
|
||||
msgid "Bad value for ai_flags"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:60
|
||||
msgid "Non-recoverable failure in name resolution"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:61
|
||||
#, fuzzy
|
||||
msgid "ai_family not supported"
|
||||
msgstr "αρχεία fifo δεν υποστηρίζονται"
|
||||
|
||||
#: lib/gai_strerror.c:62
|
||||
msgid "Memory allocation failure"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:63
|
||||
msgid "No address associated with hostname"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:64
|
||||
msgid "Name or service not known"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:65
|
||||
msgid "Servname not supported for ai_socktype"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:66
|
||||
#, fuzzy
|
||||
msgid "ai_socktype not supported"
|
||||
msgstr "αρχεία fifo δεν υποστηρίζονται"
|
||||
|
||||
#
|
||||
#: lib/gai_strerror.c:67
|
||||
#, fuzzy
|
||||
msgid "System error"
|
||||
msgstr "σφάλμα εγγραφής"
|
||||
|
||||
#: lib/gai_strerror.c:68
|
||||
msgid "Argument buffer too small"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:70
|
||||
msgid "Processing request in progress"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:71
|
||||
msgid "Request canceled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:72
|
||||
msgid "Request not canceled"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:73
|
||||
msgid "All requests done"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:74
|
||||
msgid "Interrupted by a signal"
|
||||
msgstr ""
|
||||
|
||||
#: lib/gai_strerror.c:75
|
||||
msgid "Parameter string not correctly encoded"
|
||||
msgstr ""
|
||||
|
||||
#
|
||||
#: lib/gai_strerror.c:87
|
||||
#, fuzzy
|
||||
msgid "Unknown error"
|
||||
msgstr "Άγνωστο σφάλμα συστήματος"
|
||||
|
||||
#
|
||||
#: lib/getopt.c:282
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: option '%s%s' is ambiguous\n"
|
||||
msgstr "%s: η επιλογή `-W %s' είναι ασαφής\n"
|
||||
|
||||
#
|
||||
#: lib/getopt.c:288
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: option '%s%s' is ambiguous; possibilities:"
|
||||
msgstr "%s: η επιλογή `%s' είναι ασαφής\n"
|
||||
|
||||
#
|
||||
#: lib/getopt.c:322
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: unrecognized option '%s%s'\n"
|
||||
msgstr "%s: μη αναγνωρίσιμη επιλογή `%c%s'\n"
|
||||
|
||||
#
|
||||
#: lib/getopt.c:348
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: option '%s%s' doesn't allow an argument\n"
|
||||
msgstr "%s: η επιλογή `%c%s' δεν επιτρέπει ορίσματα\n"
|
||||
|
||||
#
|
||||
#: lib/getopt.c:363
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: option '%s%s' requires an argument\n"
|
||||
msgstr "%s: η επιλογή `-%s' απαιτεί ένα όρισμα\n"
|
||||
|
||||
#
|
||||
#: lib/getopt.c:624
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: invalid option -- '%c'\n"
|
||||
msgstr "%s: μη έγκυρη επιλογή -- %c\n"
|
||||
|
||||
#
|
||||
#: lib/getopt.c:639 lib/getopt.c:685
|
||||
#, fuzzy, c-format
|
||||
msgid "%s: option requires an argument -- '%c'\n"
|
||||
msgstr "%s: η επιλογή απαιτεί ένα όρισμα -- %c\n"
|
||||
|
||||
#
|
||||
#: lib/openat-die.c:38
|
||||
#, fuzzy, c-format
|
||||
msgid "unable to record current working directory"
|
||||
msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
|
||||
|
||||
#
|
||||
#: lib/openat-die.c:57
|
||||
#, fuzzy, c-format
|
||||
msgid "failed to return to initial working directory"
|
||||
msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
|
||||
|
||||
#: lib/os2-spawn.c:51
|
||||
#, c-format
|
||||
msgid "_open_osfhandle failed"
|
||||
msgstr ""
|
||||
|
||||
#: lib/os2-spawn.c:88
|
||||
#, c-format
|
||||
msgid "cannot restore fd %d: dup2 failed"
|
||||
msgstr ""
|
||||
|
||||
#
|
||||
#. TRANSLATORS:
|
||||
#. Get translations for open and closing quotation marks.
|
||||
#. The message catalog should translate "`" to a left
|
||||
#. quotation mark suitable for the locale, and similarly for
|
||||
#. "'". For example, a French Unicode local should translate
|
||||
#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), respectively.
|
||||
#.
|
||||
#. If the catalog has no translation, we will try to
|
||||
#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
|
||||
#. current locale is not Unicode, locale_quoting_style
|
||||
#. will quote 'like this', and clocale_quoting_style will
|
||||
#. quote "like this". You should always include translations
|
||||
#. for "`" and "'" even if U+2018 and U+2019 are appropriate
|
||||
#. for your locale.
|
||||
#.
|
||||
#. If you don't know what to put here, please see
|
||||
#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
|
||||
#. and use glyphs suitable for your language.
|
||||
#: lib/quotearg.c:354
|
||||
msgid "`"
|
||||
msgstr "`"
|
||||
|
||||
#
|
||||
#: lib/quotearg.c:355
|
||||
msgid "'"
|
||||
msgstr "'"
|
||||
|
||||
#: lib/regcomp.c:122
|
||||
msgid "Success"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:125
|
||||
msgid "No match"
|
||||
msgstr ""
|
||||
|
||||
#
|
||||
#: lib/regcomp.c:128
|
||||
#, fuzzy
|
||||
msgid "Invalid regular expression"
|
||||
msgstr "%s: μη έγκυρη κανονική έκφραση: %s"
|
||||
|
||||
#
|
||||
#: lib/regcomp.c:131
|
||||
#, fuzzy
|
||||
msgid "Invalid collation character"
|
||||
msgstr "μη έγκυρη τάξη χαρακτήρων `%s'"
|
||||
|
||||
#
|
||||
#: lib/regcomp.c:134
|
||||
#, fuzzy
|
||||
msgid "Invalid character class name"
|
||||
msgstr "μη έγκυρη τάξη χαρακτήρων `%s'"
|
||||
|
||||
#: lib/regcomp.c:137
|
||||
msgid "Trailing backslash"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:140
|
||||
msgid "Invalid back reference"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:143
|
||||
msgid "Unmatched [, [^, [:, [., or [="
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:146
|
||||
msgid "Unmatched ( or \\("
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:149
|
||||
msgid "Unmatched \\{"
|
||||
msgstr ""
|
||||
|
||||
#: lib/regcomp.c:152
|
||||
msgid "Invalid content of \\{\\}"
|
||||
msgstr ""
|
||||
|
||||
#
|
||||
#: lib/regcomp.c:155
|
||||
#, fuzzy
|
||||
msgid "Invalid range end"
|
||||
msgstr "%s: μη έγκυρη κανονική έκφραση: %s"
|
||||
|
||||
#
|
||||
#: lib/regcomp.c:158
|
||||
#, fuzzy
|
||||
msgid "Memory exhausted"
|
||||
msgstr "η μνήμη εξαντλήθηκε"
|
||||
|
||||
#
|
||||
#: lib/regcomp.c:161
|
||||
#, fuzzy
|
||||
msgid "Invalid preceding regular expression"
|
||||
msgstr "%s: μη έγκυρη κανονική έκφραση: %s"
|
||||
|
||||
#
|
||||
#: lib/regcomp.c:164
|
||||
#, fuzzy
|
||||
msgid "Premature end of regular expression"
|
||||
msgstr "σφάλμα στην ανεύρεση μέσω κανονικής έκφρασης"
|
||||
|
||||
#
|
||||
#: lib/regcomp.c:167
|
||||
#, fuzzy
|
||||
msgid "Regular expression too big"
|
||||
msgstr "%s: μη έγκυρη κανονική έκφραση: %s"
|
||||
|
||||
#: lib/regcomp.c:170
|
||||
msgid "Unmatched ) or \\)"
|
||||
msgstr ""
|
||||
|
||||
#
|
||||
#: lib/regcomp.c:650
|
||||
#, fuzzy
|
||||
msgid "No previous regular expression"
|
||||
msgstr "σφάλμα στην ανεύρεση μέσω κανονικής έκφρασης"
|
||||
|
||||
#
|
||||
#: lib/spawn-pipe.c:218 lib/spawn-pipe.c:221
|
||||
#, fuzzy, c-format
|
||||
msgid "cannot create pipe"
|
||||
msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
|
||||
|
||||
#
|
||||
#: lib/spawn-pipe.c:599 lib/wait-process.c:326 lib/wait-process.c:400
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess failed"
|
||||
msgstr "%s: μη έγκυρη μορφή"
|
||||
|
||||
#
|
||||
#: lib/wait-process.c:267 lib/wait-process.c:299 lib/wait-process.c:361
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess"
|
||||
msgstr "%s: μη έγκυρη μορφή"
|
||||
|
||||
#
|
||||
#: lib/wait-process.c:318 lib/wait-process.c:390
|
||||
#, fuzzy, c-format
|
||||
msgid "%s subprocess got fatal signal %d"
|
||||
msgstr "%s: μη έγκυρη μορφή"
|
||||
|
||||
#
|
||||
#: lib/xalloc-die.c:34
|
||||
msgid "memory exhausted"
|
||||
msgstr "η μνήμη εξαντλήθηκε"
|
||||
|
||||
#
|
||||
#, c-format
|
||||
#~ msgid "invalid argument %s for %s"
|
||||
#~ msgstr "μη έγκυρο όρισμα %s για %s"
|
||||
|
||||
#
|
||||
#, c-format
|
||||
#~ msgid "ambiguous argument %s for %s"
|
||||
#~ msgstr "ασαφές όρισμα %s για %s"
|
||||
|
||||
#
|
||||
#, c-format
|
||||
#~ msgid "Valid arguments are:"
|
||||
#~ msgstr "Έγκυρα ορίσματα είναι:"
|
||||
|
||||
#
|
||||
#~ msgid " [OPTION...]"
|
||||
#~ msgstr " [ΕΠΙΛΟΓΗ...]"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Try `%s --help' or `%s --usage' for more information.\n"
|
||||
#~ msgstr "Δοκιμάστε `%s --help' για περισσότερη βοήθεια.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Report bugs to %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Αναφέρατε σφάλματα στο <%s>.\n"
|
||||
|
||||
#
|
||||
#, fuzzy
|
||||
#~ msgid "print program version"
|
||||
#~ msgstr "σφάλμα προγράμματος"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "%s: Too many arguments\n"
|
||||
#~ msgstr "πάρα πολλά ορίσματα"
|
||||
|
||||
#
|
||||
#~ msgid "program error"
|
||||
#~ msgstr "σφάλμα προγράμματος"
|
||||
|
||||
#
|
||||
#~ msgid "stack overflow"
|
||||
#~ msgstr "υπερχείλιση στοίβας"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "cannot create a temporary directory using template \"%s\""
|
||||
#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "cannot remove temporary file %s"
|
||||
#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "cannot remove temporary directory %s"
|
||||
#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
|
||||
|
||||
#
|
||||
#~ msgid "write error"
|
||||
#~ msgstr "σφάλμα εγγραφής"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "preserving permissions for %s"
|
||||
#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error while opening \"%s\" for reading"
|
||||
#~ msgstr "αδυναμία μεταφοράς του `%s' στο `%s'"
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "cannot open backup file \"%s\" for writing"
|
||||
#~ msgstr "αδυναμία μεταφοράς του `%s' στο `%s'"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error reading \"%s\""
|
||||
#~ msgstr "σφάλμα ανάγνωσης %s"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error writing \"%s\""
|
||||
#~ msgstr "σφάλμα εγγραφής %s"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error after reading \"%s\""
|
||||
#~ msgstr "σφάλμα ανάγνωσης %s"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "fdopen() failed"
|
||||
#~ msgstr "αποτυχία ανοίγματος"
|
||||
|
||||
#
|
||||
#~ msgid "regular empty file"
|
||||
#~ msgstr "κανονικό κενό αρχείο"
|
||||
|
||||
#
|
||||
#~ msgid "regular file"
|
||||
#~ msgstr "κανονικό αρχείο"
|
||||
|
||||
#
|
||||
#~ msgid "directory"
|
||||
#~ msgstr "κατάλογος"
|
||||
|
||||
#
|
||||
#~ msgid "block special file"
|
||||
#~ msgstr "ειδικό αρχείο μπλοκ"
|
||||
|
||||
#
|
||||
#~ msgid "character special file"
|
||||
#~ msgstr "ειδικό αρχείο χαρακτήρων"
|
||||
|
||||
#
|
||||
#~ msgid "fifo"
|
||||
#~ msgstr "φίφο"
|
||||
|
||||
#
|
||||
#~ msgid "symbolic link"
|
||||
#~ msgstr "συμβολικός σύνδεσμος"
|
||||
|
||||
#
|
||||
#~ msgid "socket"
|
||||
#~ msgstr "υποδοχέας"
|
||||
|
||||
#
|
||||
#~ msgid "message queue"
|
||||
#~ msgstr "ουρά μηνυμάτων"
|
||||
|
||||
#
|
||||
#~ msgid "semaphore"
|
||||
#~ msgstr "σημαφόρος"
|
||||
|
||||
#
|
||||
#~ msgid "weird file"
|
||||
#~ msgstr "παράξενο αρχείο"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "%s: option '--%s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: η επιλογή `--%s' δεν επιτρέπει ορίσματα\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "%s: unrecognized option '--%s'\n"
|
||||
#~ msgstr "%s: μη αναγνωρίσιμη επιλογή `--%s'\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: η επιλογή `-W %s' δεν επιτρέπει ορίσματα\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "%s: option '-W %s' requires an argument\n"
|
||||
#~ msgstr "%s: η επιλογή `-%s' απαιτεί ένα όρισμα\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "error while writing \"%s\" file"
|
||||
#~ msgstr "σφάλμα εγγραφής %s"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "%s subprocess I/O error"
|
||||
#~ msgstr "%s: μη έγκυρη μορφή"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "cannot change permissions of %s"
|
||||
#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "cannot create directory %s"
|
||||
#~ msgstr "αδύνατη η δημιουργία καταλόγου `%s'"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Failed to open /dev/zero for read"
|
||||
#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "communication with %s subprocess failed"
|
||||
#~ msgstr "%s: μη έγκυρη μορφή"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "write to %s subprocess failed"
|
||||
#~ msgstr "%s: μη έγκυρη μορφή"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "read from %s subprocess failed"
|
||||
#~ msgstr "%s: μη έγκυρη μορφή"
|
||||
|
||||
#
|
||||
#~ msgid "^[yY]"
|
||||
#~ msgstr "^[yYνΝ]"
|
||||
|
||||
#
|
||||
#~ msgid "^[nN]"
|
||||
#~ msgstr "^[nNοΟ]"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "setting permissions for %s"
|
||||
#~ msgstr "αδυναμία αλλαγής ιδιοκτησίας στο %s"
|
||||
|
||||
#
|
||||
#, fuzzy
|
||||
#~ msgid "Bus error"
|
||||
#~ msgstr "σφάλμα εγγραφής"
|
||||
|
||||
#
|
||||
#, fuzzy
|
||||
#~ msgid "character out of range"
|
||||
#~ msgstr "%s: αριθμός γραμμής έξω από τα όρια"
|
||||
|
||||
#
|
||||
#~ msgid "invalid user"
|
||||
#~ msgstr "μη έγκυρος χρήστης"
|
||||
|
||||
#
|
||||
#~ msgid "invalid group"
|
||||
#~ msgstr "μη έγκυρη ομάδα"
|
||||
|
||||
#
|
||||
#, fuzzy
|
||||
#~ msgid "invalid spec"
|
||||
#~ msgstr "μη έγκυρος χρήστης"
|
||||
|
||||
#
|
||||
#, c-format
|
||||
#~ msgid "Written by %s.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Written by %s and %s.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Written by %s, %s, and %s.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, and %s.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, and %s.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s, and others.\n"
|
||||
#~ msgstr "Γραμμένο από τον/την %s.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid ""
|
||||
#~ "\n"
|
||||
#~ "Report bugs to: %s\n"
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Αναφέρατε σφάλματα στο <%s>.\n"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "Report %s bugs to: %s\n"
|
||||
#~ msgstr ""
|
||||
#~ "\n"
|
||||
#~ "Αναφέρατε σφάλματα στο <%s>.\n"
|
||||
|
||||
#
|
||||
#, fuzzy
|
||||
#~ msgid "unknown stream"
|
||||
#~ msgstr "Άγνωστο σφάλμα συστήματος"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "string comparison failed"
|
||||
#~ msgstr "αποτυχία εγγραφής"
|
||||
|
||||
#
|
||||
#, c-format
|
||||
#~ msgid "Set LC_ALL='C' to work around the problem."
|
||||
#~ msgstr "Θέστε LC_ALL='C' για να παρακάμψετε το πρόβλημα."
|
||||
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "The strings compared were %s and %s."
|
||||
#~ msgstr "δεν είναι δυνατό να δημιουργηθεί το %s `%s' στο `%s'"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "invalid %s%s argument `%s'"
|
||||
#~ msgstr "μη έγκυρο όρισμα %s για %s"
|
||||
|
||||
#
|
||||
#, fuzzy, c-format
|
||||
#~ msgid "invalid suffix in %s%s argument `%s'"
|
||||
#~ msgstr "μη έγκυρο όρισμα %s για %s"
|
||||
|
||||
#
|
||||
#~ msgid "%s: illegal option -- %c\n"
|
||||
#~ msgstr "%s: μη αναγνωρίσιμη επιλογή -- %c\n"
|
||||
|
||||
#
|
||||
#~ msgid "block size"
|
||||
#~ msgstr "μέγεθος μπλοκ"
|
||||
|
||||
#
|
||||
#, fuzzy
|
||||
#~ msgid "%s exists but is not a directory"
|
||||
#~ msgstr "το `%s' υπάρχει ήδη άλλα δεν είναι κατάλογος"
|
||||
|
||||
#
|
||||
#, fuzzy
|
||||
#~ msgid "cannot change owner and/or group of %s"
|
||||
#~ msgstr "δεν είναι δυνατό να παραληφθεί χρήστης και ομάδα"
|
||||
|
||||
#
|
||||
#, fuzzy
|
||||
#~ msgid "cannot chdir to directory %s"
|
||||
#~ msgstr "αδύνατη η αλλαγή στο κατάλογο %s"
|
||||
|
||||
#
|
||||
#~ msgid "cannot get the login group of a numeric UID"
|
||||
#~ msgstr ""
|
||||
#~ "αδύνατη η λήψη της ομάδας εισαγωγής στο σύστημα ενός αριθμητικού UID"
|
25
gnulib_po/en@boldquot.header
Normal file
25
gnulib_po/en@boldquot.header
Normal file
|
@ -0,0 +1,25 @@
|
|||
# All this catalog "translates" are quotation characters.
|
||||
# The msgids must be ASCII and therefore cannot contain real quotation
|
||||
# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
|
||||
# and double quote (0x22). These substitutes look strange; see
|
||||
# https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
|
||||
#
|
||||
# This catalog translates grave accent (0x60) and apostrophe (0x27) to
|
||||
# left single quotation mark (U+2018) and right single quotation mark (U+2019).
|
||||
# It also translates pairs of apostrophe (0x27) to
|
||||
# left single quotation mark (U+2018) and right single quotation mark (U+2019)
|
||||
# and pairs of quotation mark (0x22) to
|
||||
# left double quotation mark (U+201C) and right double quotation mark (U+201D).
|
||||
#
|
||||
# When output to an UTF-8 terminal, the quotation characters appear perfectly.
|
||||
# When output to an ISO-8859-1 terminal, the single quotation marks are
|
||||
# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
|
||||
# grave/acute accent (by libiconv), and the double quotation marks are
|
||||
# transliterated to 0x22.
|
||||
# When output to an ASCII terminal, the single quotation marks are
|
||||
# transliterated to apostrophes, and the double quotation marks are
|
||||
# transliterated to 0x22.
|
||||
#
|
||||
# This catalog furthermore displays the text between the quotation marks in
|
||||
# bold face, assuming the VT100/XTerm escape sequences.
|
||||
#
|
22
gnulib_po/en@quot.header
Normal file
22
gnulib_po/en@quot.header
Normal file
|
@ -0,0 +1,22 @@
|
|||
# All this catalog "translates" are quotation characters.
|
||||
# The msgids must be ASCII and therefore cannot contain real quotation
|
||||
# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
|
||||
# and double quote (0x22). These substitutes look strange; see
|
||||
# https://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
|
||||
#
|
||||
# This catalog translates grave accent (0x60) and apostrophe (0x27) to
|
||||
# left single quotation mark (U+2018) and right single quotation mark (U+2019).
|
||||
# It also translates pairs of apostrophe (0x27) to
|
||||
# left single quotation mark (U+2018) and right single quotation mark (U+2019)
|
||||
# and pairs of quotation mark (0x22) to
|
||||
# left double quotation mark (U+201C) and right double quotation mark (U+201D).
|
||||
#
|
||||
# When output to an UTF-8 terminal, the quotation characters appear perfectly.
|
||||
# When output to an ISO-8859-1 terminal, the single quotation marks are
|
||||
# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
|
||||
# grave/acute accent (by libiconv), and the double quotation marks are
|
||||
# transliterated to 0x22.
|
||||
# When output to an ASCII terminal, the single quotation marks are
|
||||
# transliterated to apostrophes, and the double quotation marks are
|
||||
# transliterated to 0x22.
|
||||
#
|
BIN
gnulib_po/eo.gmo
Normal file
BIN
gnulib_po/eo.gmo
Normal file
Binary file not shown.
988
gnulib_po/eo.po
Normal file
988
gnulib_po/eo.po
Normal file
|
@ -0,0 +1,988 @@
|
|||
# translation of gnulib to Esperanto
|
||||
# Copyright (C) 2013, 2019 Free Software Foundation, Inc.
|
||||
# This file is distributed under the same license as the gnulib package.
|
||||
# Felipe Castro <fefcas@gmail.com>, 2013, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: gnulib 4.0.0.2567\n"
|
||||
"Report-Msgid-Bugs-To: bug-gnulib@gnu.org\n"
|
||||
"POT-Creation-Date: 2024-11-10 22:29+0100\n"
|
||||
"PO-Revision-Date: 2019-05-19 18:26-0300\n"
|
||||
"Last-Translator: Felipe Castro <fefcas@gmail.com>\n"
|
||||
"Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n"
|
||||
"Language: eo\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Bugs: Report translation errors to the Language-Team address.\n"
|
||||
"X-Generator: Poedit 1.8.11\n"
|
||||
|
||||
#: lib/error.c:208
|
||||
msgid "Unknown system error"
|
||||
msgstr "Nekonata sistem-eraro"
|
||||
|
||||
#: lib/gai_strerror.c:57
|
||||
msgid "Address family for hostname not supported"
|
||||
msgstr "Adresfamilio por komputilretnomo ne estas subtenata"
|
||||
|
||||
#: lib/gai_strerror.c:58
|
||||
msgid "Temporary failure in name resolution"
|
||||
msgstr "Provizora paneo en solvo de retnomo"
|
||||
|
||||
#: lib/gai_strerror.c:59
|
||||
msgid "Bad value for ai_flags"
|
||||
msgstr "Malĝusta valoro por ai_flags"
|
||||
|
||||
#: lib/gai_strerror.c:60
|
||||
msgid "Non-recoverable failure in name resolution"
|
||||
msgstr "Neriparebla paneo en solvo de retnomo"
|
||||
|
||||
#: lib/gai_strerror.c:61
|
||||
msgid "ai_family not supported"
|
||||
msgstr "ai_family ne estas subtenata"
|
||||
|
||||
#: lib/gai_strerror.c:62
|
||||
msgid "Memory allocation failure"
|
||||
msgstr "Rezervo de memoro fiaskis"
|
||||
|
||||
#: lib/gai_strerror.c:63
|
||||
msgid "No address associated with hostname"
|
||||
msgstr "Neniu adreso estas asociita kun komputilretnomo"
|
||||
|
||||
#: lib/gai_strerror.c:64
|
||||
msgid "Name or service not known"
|
||||
msgstr "Nomo aŭ servo ne estas konata"
|
||||
|
||||
#: lib/gai_strerror.c:65
|
||||
msgid "Servname not supported for ai_socktype"
|
||||
msgstr "Servname ne estas subtenata por ai_socktype"
|
||||
|
||||
#: lib/gai_strerror.c:66
|
||||
msgid "ai_socktype not supported"
|
||||
msgstr "ai_socktype ne estas subtenata"
|
||||
|
||||
#: lib/gai_strerror.c:67
|
||||
msgid "System error"
|
||||
msgstr "Sistem-eraro"
|
||||
|
||||
#: lib/gai_strerror.c:68
|
||||
msgid "Argument buffer too small"
|
||||
msgstr "Bufro por argumentoj tro malgrandas"
|
||||
|
||||
#: lib/gai_strerror.c:70
|
||||
msgid "Processing request in progress"
|
||||
msgstr "Procezado de peto daŭras"
|
||||
|
||||
#: lib/gai_strerror.c:71
|
||||
msgid "Request canceled"
|
||||
msgstr "Peto estas nuligita"
|
||||
|
||||
#: lib/gai_strerror.c:72
|
||||
msgid "Request not canceled"
|
||||
msgstr "Peto ne estas nuligita"
|
||||
|
||||
#: lib/gai_strerror.c:73
|
||||
msgid "All requests done"
|
||||
msgstr "Ĉiuj petoj estas plenumitaj"
|
||||
|
||||
#: lib/gai_strerror.c:74
|
||||
msgid "Interrupted by a signal"
|
||||
msgstr "Interrompita de signalo"
|
||||
|
||||
#: lib/gai_strerror.c:75
|
||||
msgid "Parameter string not correctly encoded"
|
||||
msgstr "Parametra ĉeno ne estas ĝuste enkodita"
|
||||
|
||||
#: lib/gai_strerror.c:87
|
||||
msgid "Unknown error"
|
||||
msgstr "Nekonata eraro"
|
||||
|
||||
#: lib/getopt.c:282
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' is ambiguous\n"
|
||||
msgstr "%s: la modifilo '%s%s' estas plursenca\n"
|
||||
|
||||
#: lib/getopt.c:288
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' is ambiguous; possibilities:"
|
||||
msgstr "%s: la modifilo '%s%s' estas plursenca; eblecoj:"
|
||||
|
||||
#: lib/getopt.c:322
|
||||
#, c-format
|
||||
msgid "%s: unrecognized option '%s%s'\n"
|
||||
msgstr "%s: nerekonata modifilo '%s%s'\n"
|
||||
|
||||
#: lib/getopt.c:348
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' doesn't allow an argument\n"
|
||||
msgstr "%s: la modifilo '%s%s' ne permesas argumenton\n"
|
||||
|
||||
#: lib/getopt.c:363
|
||||
#, c-format
|
||||
msgid "%s: option '%s%s' requires an argument\n"
|
||||
msgstr "%s: la modifilo '%s%s' postulas argumenton\n"
|
||||
|
||||
#: lib/getopt.c:624
|
||||
#, c-format
|
||||
msgid "%s: invalid option -- '%c'\n"
|
||||
msgstr "%s: malvalida modifilo -- '%c'\n"
|
||||
|
||||
#: lib/getopt.c:639 lib/getopt.c:685
|
||||
#, c-format
|
||||
msgid "%s: option requires an argument -- '%c'\n"
|
||||
msgstr "%s: la modifilo postulas argumenton -- '%c'\n"
|
||||
|
||||
#: lib/openat-die.c:38
|
||||
#, c-format
|
||||
msgid "unable to record current working directory"
|
||||
msgstr "ne eblas registri la aktualan labordosierujon"
|
||||
|
||||
#: lib/openat-die.c:57
|
||||
#, c-format
|
||||
msgid "failed to return to initial working directory"
|
||||
msgstr "ni fiaskis reveni al la komenca labordosierujo"
|
||||
|
||||
#: lib/os2-spawn.c:51
|
||||
#, c-format
|
||||
msgid "_open_osfhandle failed"
|
||||
msgstr "_open_osfhandle fiaskis"
|
||||
|
||||
#: lib/os2-spawn.c:88
|
||||
#, c-format
|
||||
msgid "cannot restore fd %d: dup2 failed"
|
||||
msgstr "ne eblas restarigi fd %d: dup2 fiaskis"
|
||||
|
||||
#. TRANSLATORS:
|
||||
#. Get translations for open and closing quotation marks.
|
||||
#. The message catalog should translate "`" to a left
|
||||
#. quotation mark suitable for the locale, and similarly for
|
||||
#. "'". For example, a French Unicode local should translate
|
||||
#. these to U+00AB (LEFT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE
|
||||
#. QUOTATION MARK), respectively.
|
||||
#.
|
||||
#. If the catalog has no translation, we will try to
|
||||
#. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and
|
||||
#. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the
|
||||
#. current locale is not Unicode, locale_quoting_style
|
||||
#. will quote 'like this', and clocale_quoting_style will
|
||||
#. quote "like this". You should always include translations
|
||||
#. for "`" and "'" even if U+2018 and U+2019 are appropriate
|
||||
#. for your locale.
|
||||
#.
|
||||
#. If you don't know what to put here, please see
|
||||
#. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages>
|
||||
#. and use glyphs suitable for your language.
|
||||
#: lib/quotearg.c:354
|
||||
msgid "`"
|
||||
msgstr "‘"
|
||||
|
||||
#: lib/quotearg.c:355
|
||||
msgid "'"
|
||||
msgstr "’"
|
||||
|
||||
#: lib/regcomp.c:122
|
||||
msgid "Success"
|
||||
msgstr "Sukceso"
|
||||
|
||||
#: lib/regcomp.c:125
|
||||
msgid "No match"
|
||||
msgstr "Neniu kongruaĵo"
|
||||
|
||||
#: lib/regcomp.c:128
|
||||
msgid "Invalid regular expression"
|
||||
msgstr "Malvalida regulesprimo"
|
||||
|
||||
#: lib/regcomp.c:131
|
||||
msgid "Invalid collation character"
|
||||
msgstr "Malvalida ordodifina signo"
|
||||
|
||||
#: lib/regcomp.c:134
|
||||
msgid "Invalid character class name"
|
||||
msgstr "Malvalida signa klasnomo"
|
||||
|
||||
#: lib/regcomp.c:137
|
||||
msgid "Trailing backslash"
|
||||
msgstr "Vosta retroklino"
|
||||
|
||||
#: lib/regcomp.c:140
|
||||
msgid "Invalid back reference"
|
||||
msgstr "Malvalida retroreferenco"
|
||||
|
||||
#: lib/regcomp.c:143
|
||||
msgid "Unmatched [, [^, [:, [., or [="
|
||||
msgstr "Senpara [, [^, [:, [., aŭ [="
|
||||
|
||||
#: lib/regcomp.c:146
|
||||
msgid "Unmatched ( or \\("
|
||||
msgstr "Senpara ( aŭ \\("
|
||||
|
||||
#: lib/regcomp.c:149
|
||||
msgid "Unmatched \\{"
|
||||
msgstr "Senpara \\{"
|
||||
|
||||
#: lib/regcomp.c:152
|
||||
msgid "Invalid content of \\{\\}"
|
||||
msgstr "Malvalida enhavo de \\{\\}"
|
||||
|
||||
#: lib/regcomp.c:155
|
||||
msgid "Invalid range end"
|
||||
msgstr "Malvalida intervalofino"
|
||||
|
||||
#: lib/regcomp.c:158
|
||||
msgid "Memory exhausted"
|
||||
msgstr "Memoro estas plenigita"
|
||||
|
||||
#: lib/regcomp.c:161
|
||||
msgid "Invalid preceding regular expression"
|
||||
msgstr "Malvalida antaŭa regulesprimo"
|
||||
|
||||
#: lib/regcomp.c:164
|
||||
msgid "Premature end of regular expression"
|
||||
msgstr "Tro frua fino de regulesprimo"
|
||||
|
||||
#: lib/regcomp.c:167
|
||||
msgid "Regular expression too big"
|
||||
msgstr "Regulesprimo tro grandas"
|
||||
|
||||
#: lib/regcomp.c:170
|
||||
msgid "Unmatched ) or \\)"
|
||||
msgstr "Senpara ) aŭ \\)"
|
||||
|
||||
#: lib/regcomp.c:650
|
||||
msgid "No previous regular expression"
|
||||
msgstr "Neniu antaŭa regulesprimo"
|
||||
|
||||
#: lib/spawn-pipe.c:218 lib/spawn-pipe.c:221
|
||||
#, c-format
|
||||
msgid "cannot create pipe"
|
||||
msgstr "ne eblas krei dukton"
|
||||
|
||||
#: lib/spawn-pipe.c:599 lib/wait-process.c:326 lib/wait-process.c:400
|
||||
#, c-format
|
||||
msgid "%s subprocess failed"
|
||||
msgstr "subprocezo de %s fiaskis"
|
||||
|
||||
#: lib/wait-process.c:267 lib/wait-process.c:299 lib/wait-process.c:361
|
||||
#, c-format
|
||||
msgid "%s subprocess"
|
||||
msgstr "subprocezo %s"
|
||||
|
||||
#: lib/wait-process.c:318 lib/wait-process.c:390
|
||||
#, c-format
|
||||
msgid "%s subprocess got fatal signal %d"
|
||||
msgstr "subprocezo %s ricevis neripareblan signalon %d"
|
||||
|
||||
#: lib/xalloc-die.c:34
|
||||
msgid "memory exhausted"
|
||||
msgstr "memoro estas plenigita"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid argument %s for %s"
|
||||
#~ msgstr "malvalida argumento %s por %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ambiguous argument %s for %s"
|
||||
#~ msgstr "plursenca argumento %s por %s"
|
||||
|
||||
#~ msgid "Valid arguments are:"
|
||||
#~ msgstr "Validaj argumentoj estas:"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "ARGP_HELP_FMT: %s value is less than or equal to %s"
|
||||
#~ msgstr "ARGP_HELP_FMT: valoro de %s estas malpli aŭ egala al %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: ARGP_HELP_FMT parameter requires a value"
|
||||
#~ msgstr "%.*s: parametro ARGP_HELP_FMT postulas valoron"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%.*s: Unknown ARGP_HELP_FMT parameter"
|
||||
#~ msgstr "%.*s: Nekonata parametro ARGP_HELP_FMT"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Garbage in ARGP_HELP_FMT: %s"
|
||||
#~ msgstr "Rubaĵo en ARGP_HELP_FMT: %s"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Mandatory or optional arguments to long options are also mandatory or "
|
||||
#~ "optional for any corresponding short options."
|
||||
#~ msgstr ""
|
||||
#~ "Devigaj aŭ nedevigaj argumentoj por longaj modifiloj ankaŭ estas devigaj "
|
||||
#~ "aŭ nedevigaj por iu ajn korespondanta mallonga modifilo."
|
||||
|
||||
#~ msgid "Usage:"
|
||||
#~ msgstr "Uzmaniero:"
|
||||
|
||||
#~ msgid " or: "
|
||||
#~ msgstr " aŭ: "
|
||||
|
||||
#~ msgid " [OPTION...]"
|
||||
#~ msgstr " [MODIFILO...]"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Try '%s --help' or '%s --usage' for more information.\n"
|
||||
#~ msgstr "Provu '%s --help' aŭ '%s --usage' por pli da informo.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report bugs to %s.\n"
|
||||
#~ msgstr "Raportu program-misojn al %s.\n"
|
||||
|
||||
#~ msgid "give this help list"
|
||||
#~ msgstr "montri tiun ĉi help-liston"
|
||||
|
||||
#~ msgid "give a short usage message"
|
||||
#~ msgstr "montri mallongan mesaĝon pri la uzmaniero"
|
||||
|
||||
#~ msgid "NAME"
|
||||
#~ msgstr "NOMO"
|
||||
|
||||
#~ msgid "set the program name"
|
||||
#~ msgstr "difini la program-nomon"
|
||||
|
||||
#~ msgid "SECS"
|
||||
#~ msgstr "SEK"
|
||||
|
||||
#~ msgid "hang for SECS seconds (default 3600)"
|
||||
#~ msgstr "halti dum SEK sekundoj (apriore 3600)"
|
||||
|
||||
#~ msgid "print program version"
|
||||
#~ msgstr "montri program-version"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) No version known!?"
|
||||
#~ msgstr "(PROGRAM-ERARO) Neniu versio estas konata!?"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s: Too many arguments\n"
|
||||
#~ msgstr "%s: tro da argumentoj\n"
|
||||
|
||||
#~ msgid "(PROGRAM ERROR) Option should have been recognized!?"
|
||||
#~ msgstr "(PROGRAM-ERARO) Modifilo devus esti rekonita!?"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_allocs, %u freed (%.2f%%).\n"
|
||||
#~ msgstr "%u bitset_allocs, %u liberitaj (%.2f%%).\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_sets, %u cached (%.2f%%)\n"
|
||||
#~ msgstr "%u bitset_sets, %u kaŝmem (%.2f%%)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_resets, %u cached (%.2f%%)\n"
|
||||
#~ msgstr "%u bitset_resets, %u kaŝmem (%.2f%%)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_tests, %u cached (%.2f%%)\n"
|
||||
#~ msgstr "%u bitset_tests, %u kaŝmem (%.2f%%)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%u bitset_lists\n"
|
||||
#~ msgstr "%u bitset_lists\n"
|
||||
|
||||
#~ msgid "count log histogram\n"
|
||||
#~ msgstr "histogramo pri nombro-protokolado\n"
|
||||
|
||||
#~ msgid "size log histogram\n"
|
||||
#~ msgstr "histogramo pri grando-protokolado\n"
|
||||
|
||||
#~ msgid "density histogram\n"
|
||||
#~ msgstr "histogramo pri denso\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Bitset statistics:\n"
|
||||
#~ "\n"
|
||||
#~ msgstr ""
|
||||
#~ "Bitset statistikoj:\n"
|
||||
#~ "\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Accumulated runs = %u\n"
|
||||
#~ msgstr "Akumulitaj funkciadoj = %u\n"
|
||||
|
||||
#~ msgid "cannot read stats file"
|
||||
#~ msgstr "ne eblas legi dosieron stats"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "bad stats file size\n"
|
||||
#~ msgstr "malĝusta dosier-grando de stats\n"
|
||||
|
||||
#~ msgid "cannot write stats file"
|
||||
#~ msgstr "ne eblas skibi en dosiero stats"
|
||||
|
||||
#~ msgid "cannot open stats file for writing"
|
||||
#~ msgstr "ne eblas malfermi dosieron stats por skribi"
|
||||
|
||||
#~ msgid "program error"
|
||||
#~ msgstr "programeraro"
|
||||
|
||||
#~ msgid "stack overflow"
|
||||
#~ msgstr "staka troigo"
|
||||
|
||||
#~ msgid "cannot find a temporary directory, try setting $TMPDIR"
|
||||
#~ msgstr "ne eblas trovi provizoran dosierujon, provu difini $TMPDIR"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create a temporary directory using template \"%s\""
|
||||
#~ msgstr "ne eblas krei provizoran dosierujon uzante la ŝablonon \"%s\""
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot remove temporary file %s"
|
||||
#~ msgstr "ne eblas forigi la provizoran dosieron %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot remove temporary directory %s"
|
||||
#~ msgstr "ne eblas forigi la provizoran dosierujon %s"
|
||||
|
||||
#~ msgid "error closing file"
|
||||
#~ msgstr "eraro dum fermo de dosiero"
|
||||
|
||||
#~ msgid "write error"
|
||||
#~ msgstr "skrib-eraro"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "preserving permissions for %s"
|
||||
#~ msgstr "ni tenas la permesojn por %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error while opening %s for reading"
|
||||
#~ msgstr "eraro dum malfermo de %s por legi"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot open backup file %s for writing"
|
||||
#~ msgstr "ne eblas malfermi la savdosieron %s por skribi"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error reading %s"
|
||||
#~ msgstr "eraro dum lego de %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error writing %s"
|
||||
#~ msgstr "eraro dum skribo de %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error after reading %s"
|
||||
#~ msgstr "eraro post legi %s"
|
||||
|
||||
#~ msgid "fdopen() failed"
|
||||
#~ msgstr "fdopen() fiaskis"
|
||||
|
||||
#~ msgid "C# compiler not found, try installing mono"
|
||||
#~ msgstr "Kompililo C# ne estis trovata, ni provas instali mono"
|
||||
|
||||
#~ msgid "C# virtual machine not found, try installing mono"
|
||||
#~ msgstr "Virtuala maŝino C# ne estis trovata, ni provas instali mono"
|
||||
|
||||
#~ msgid "unbalanced ["
|
||||
#~ msgstr "nekongruita ["
|
||||
|
||||
#~ msgid "invalid character class"
|
||||
#~ msgstr "malvalida signa klaso"
|
||||
|
||||
#~ msgid "character class syntax is [[:space:]], not [:space:]"
|
||||
#~ msgstr "sintakso de signa klaso estas [[:space:]], ne [:space:]"
|
||||
|
||||
#~ msgid "unfinished \\ escape"
|
||||
#~ msgstr "nefinigita eskapo \\"
|
||||
|
||||
#~ msgid "invalid content of \\{\\}"
|
||||
#~ msgstr "malvalida enhavo de \\{\\}"
|
||||
|
||||
#~ msgid "regular expression too big"
|
||||
#~ msgstr "regulesprimo tro grandas"
|
||||
|
||||
#~ msgid "unbalanced ("
|
||||
#~ msgstr "nekongruita ("
|
||||
|
||||
#~ msgid "no syntax specified"
|
||||
#~ msgstr "neniu sintakso estas indikita"
|
||||
|
||||
#~ msgid "unbalanced )"
|
||||
#~ msgstr "nekongruita )"
|
||||
|
||||
#~ msgid "regular empty file"
|
||||
#~ msgstr "regula malplena dosiero"
|
||||
|
||||
#~ msgid "regular file"
|
||||
#~ msgstr "regula dosiero"
|
||||
|
||||
#~ msgid "directory"
|
||||
#~ msgstr "dosierujo"
|
||||
|
||||
#~ msgid "symbolic link"
|
||||
#~ msgstr "simbola ligo"
|
||||
|
||||
#~ msgid "message queue"
|
||||
#~ msgstr "mesaĝovico"
|
||||
|
||||
#~ msgid "semaphore"
|
||||
#~ msgstr "semaforo"
|
||||
|
||||
#~ msgid "shared memory object"
|
||||
#~ msgstr "komuna memorobjekto"
|
||||
|
||||
#~ msgid "typed memory object"
|
||||
#~ msgstr "tipita memorbjekto"
|
||||
|
||||
#~ msgid "block special file"
|
||||
#~ msgstr "bloka speciala dosiero"
|
||||
|
||||
#~ msgid "character special file"
|
||||
#~ msgstr "bajta speciala dosiero"
|
||||
|
||||
#~ msgid "contiguous data"
|
||||
#~ msgstr "kontinua datumaro"
|
||||
|
||||
#~ msgid "fifo"
|
||||
#~ msgstr "fifo"
|
||||
|
||||
#~ msgid "door"
|
||||
#~ msgstr "enirejo"
|
||||
|
||||
#~ msgid "multiplexed block special file"
|
||||
#~ msgstr "multplektita bloka speciala dosiero"
|
||||
|
||||
#~ msgid "multiplexed character special file"
|
||||
#~ msgstr "bajta multplektita speciala dosiero"
|
||||
|
||||
#~ msgid "multiplexed file"
|
||||
#~ msgstr "multplektita dosiero"
|
||||
|
||||
#~ msgid "named file"
|
||||
#~ msgstr "nomigita dosiero"
|
||||
|
||||
#~ msgid "network special file"
|
||||
#~ msgstr "reta speciala dosiero"
|
||||
|
||||
#~ msgid "migrated file with data"
|
||||
#~ msgstr "transmetis dosieron kun datumaro"
|
||||
|
||||
#~ msgid "migrated file without data"
|
||||
#~ msgstr "transmetis dosieron sen datumaro"
|
||||
|
||||
#~ msgid "port"
|
||||
#~ msgstr "pordo"
|
||||
|
||||
#~ msgid "socket"
|
||||
#~ msgstr "konektingo"
|
||||
|
||||
#~ msgid "whiteout"
|
||||
#~ msgstr "'whiteout'"
|
||||
|
||||
#~ msgid "weird file"
|
||||
#~ msgstr "stranga dosiero"
|
||||
|
||||
#~ msgid "invalid source_version argument to compile_java_class"
|
||||
#~ msgstr "malvalida argumento source_version por compile_java_class"
|
||||
|
||||
#~ msgid "invalid target_version argument to compile_java_class"
|
||||
#~ msgstr "malvalida argumento target_version por compile_java_class"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "failed to create \"%s\""
|
||||
#~ msgstr "ni fiaskis krei \"%s\""
|
||||
|
||||
#, c-format
|
||||
#~ msgid "error while writing \"%s\" file"
|
||||
#~ msgstr "eraro dum skribo de dosiero \"%s\""
|
||||
|
||||
#~ msgid "Java compiler not found, try installing gcj or set $JAVAC"
|
||||
#~ msgstr "Ĵava kompililo ne estis trovata, provu instali gcj aŭ difinu $JAVAC"
|
||||
|
||||
#~ msgid "Java virtual machine not found, try installing gij or set $JAVA"
|
||||
#~ msgstr ""
|
||||
#~ "Ĵava virtuala maŝino ne estis trovata, provu instali gij aŭ difinu $JAVA"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s subprocess I/O error"
|
||||
#~ msgstr "%s subproceza eraro de en/eligo"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot stat %s"
|
||||
#~ msgstr "ne eblas stat %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot change permissions of %s"
|
||||
#~ msgstr "ne eblas ŝanĝi permesojn de %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot create directory %s"
|
||||
#~ msgstr "ne eblas krei la dosierujon %s"
|
||||
|
||||
#~ msgid "Failed to open /dev/zero for read"
|
||||
#~ msgstr "Ni fiaskis malfermi /dev/zero por legi"
|
||||
|
||||
#~ msgid "creation of reading thread failed"
|
||||
#~ msgstr "kreo de leganta fadeno fiaskis"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot set up nonblocking I/O to %s subprocess"
|
||||
#~ msgstr "ne eblas difini neblokantan en/eligon al la subprocezo %s"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "communication with %s subprocess failed"
|
||||
#~ msgstr "komunikado kun la subprocezo %s fiaskis"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "write to %s subprocess failed"
|
||||
#~ msgstr "skribo al la subprocezo %s fiaskis"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "read from %s subprocess failed"
|
||||
#~ msgstr "lego el la subprocezo %s fiaskis"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "subprocess %s terminated with exit code %d"
|
||||
#~ msgstr "la subproceso %s ĉesis kun elira kodo %d"
|
||||
|
||||
#~ msgid "creation of threads failed"
|
||||
#~ msgstr "kreo de fadenoj fiaskis"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s subprocess terminated with exit code %d"
|
||||
#~ msgstr "la subproceso %s ĉesis kun elira kodo %d"
|
||||
|
||||
#~ msgid "^[yY]"
|
||||
#~ msgstr "^[jJyY]"
|
||||
|
||||
#~ msgid "^[nN]"
|
||||
#~ msgstr "^[nN]"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "setting permissions for %s"
|
||||
#~ msgstr "agordo de permesoj por %s"
|
||||
|
||||
#~ msgid "Hangup"
|
||||
#~ msgstr "Malkonekto"
|
||||
|
||||
#~ msgid "Interrupt"
|
||||
#~ msgstr "Interrompo"
|
||||
|
||||
#~ msgid "Quit"
|
||||
#~ msgstr "Eliri"
|
||||
|
||||
#~ msgid "Illegal instruction"
|
||||
#~ msgstr "Malvalida instrukcio"
|
||||
|
||||
#~ msgid "Trace/breakpoint trap"
|
||||
#~ msgstr "Spursekva/paŭzopunkta kaptilo"
|
||||
|
||||
#~ msgid "Aborted"
|
||||
#~ msgstr "Ĉesigita"
|
||||
|
||||
#~ msgid "Floating point exception"
|
||||
#~ msgstr "Glitkoma escepto"
|
||||
|
||||
#~ msgid "Killed"
|
||||
#~ msgstr "Mortigita"
|
||||
|
||||
#~ msgid "Bus error"
|
||||
#~ msgstr "Bus-eraro"
|
||||
|
||||
#~ msgid "Segmentation fault"
|
||||
#~ msgstr "Adres-eraro"
|
||||
|
||||
#~ msgid "Broken pipe"
|
||||
#~ msgstr "Rompita dukto"
|
||||
|
||||
#~ msgid "Alarm clock"
|
||||
#~ msgstr "Vekhorloĝo"
|
||||
|
||||
#~ msgid "Terminated"
|
||||
#~ msgstr "Finigita"
|
||||
|
||||
#~ msgid "Urgent I/O condition"
|
||||
#~ msgstr "Urĝa en/eliga stato"
|
||||
|
||||
#~ msgid "Stopped (signal)"
|
||||
#~ msgstr "Haltigita (signalo)"
|
||||
|
||||
#~ msgid "Stopped"
|
||||
#~ msgstr "Haltigita"
|
||||
|
||||
#~ msgid "Continued"
|
||||
#~ msgstr "Daŭrigita"
|
||||
|
||||
#~ msgid "Child exited"
|
||||
#~ msgstr "Ido finis"
|
||||
|
||||
#~ msgid "Stopped (tty input)"
|
||||
#~ msgstr "Haltigita (enigo tty)"
|
||||
|
||||
#~ msgid "Stopped (tty output)"
|
||||
#~ msgstr "Haltigita (eligo tty)"
|
||||
|
||||
#~ msgid "I/O possible"
|
||||
#~ msgstr "En/eligo eblas"
|
||||
|
||||
#~ msgid "CPU time limit exceeded"
|
||||
#~ msgstr "Procezila tempolimo estas atingita"
|
||||
|
||||
#~ msgid "File size limit exceeded"
|
||||
#~ msgstr "Dosiergranda limo estas atingita"
|
||||
|
||||
#~ msgid "Virtual timer expired"
|
||||
#~ msgstr "Virtuala horloĝo senvalidiĝis"
|
||||
|
||||
#~ msgid "Profiling timer expired"
|
||||
#~ msgstr "Profilanta horloĝo senvalidiĝis"
|
||||
|
||||
#~ msgid "Window changed"
|
||||
#~ msgstr "Fenestro ŝanĝis"
|
||||
|
||||
#~ msgid "User defined signal 1"
|
||||
#~ msgstr "Signalo 1 difinita de uzanto"
|
||||
|
||||
#~ msgid "User defined signal 2"
|
||||
#~ msgstr "Signalo 2 difinita de uzanto"
|
||||
|
||||
#~ msgid "EMT trap"
|
||||
#~ msgstr "EMT-kaptilo"
|
||||
|
||||
#~ msgid "Bad system call"
|
||||
#~ msgstr "Malĝusta sistemvoko"
|
||||
|
||||
#~ msgid "Stack fault"
|
||||
#~ msgstr "Stak-eraro"
|
||||
|
||||
#~ msgid "Information request"
|
||||
#~ msgstr "Informo-peto"
|
||||
|
||||
#~ msgid "Power failure"
|
||||
#~ msgstr "Elektra paneo"
|
||||
|
||||
#~ msgid "Resource lost"
|
||||
#~ msgstr "Perdo de rimedo"
|
||||
|
||||
#~ msgid "error writing to a closed pipe or socket"
|
||||
#~ msgstr "eraro skribante al fermida dukto aŭ konektingo"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Real-time signal %d"
|
||||
#~ msgstr "Realtempa signalo %d"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Unknown signal %d"
|
||||
#~ msgstr "Nekonata signalo %d"
|
||||
|
||||
#~ msgid "Execution times (seconds)"
|
||||
#~ msgstr "Tempo de funkciado (sekundoj)"
|
||||
|
||||
#~ msgid "CPU user"
|
||||
#~ msgstr "CPU uzanto"
|
||||
|
||||
#~ msgid "CPU system"
|
||||
#~ msgstr "CPU sistemo"
|
||||
|
||||
#~ msgid "wall clock"
|
||||
#~ msgstr "mur-horloĝo"
|
||||
|
||||
#~ msgid "iconv function not usable"
|
||||
#~ msgstr "funkcio iconv ne uzeblas"
|
||||
|
||||
#~ msgid "iconv function not available"
|
||||
#~ msgstr "funkcio iconv ne disponeblas"
|
||||
|
||||
#~ msgid "character out of range"
|
||||
#~ msgstr "signo estas for de intervalo"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set"
|
||||
#~ msgstr "ne eblas konverti U+%04X al loka signaro"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "cannot convert U+%04X to local character set: %s"
|
||||
#~ msgstr "ne eblas konverti U+%04X al loka signaro: %s"
|
||||
|
||||
#~ msgid "invalid user"
|
||||
#~ msgstr "malvalida uzanto"
|
||||
|
||||
#~ msgid "invalid group"
|
||||
#~ msgstr "malvalida grupo"
|
||||
|
||||
#~ msgid "invalid spec"
|
||||
#~ msgstr "malvalida spec"
|
||||
|
||||
#~ msgid "unable to display error message"
|
||||
#~ msgstr "ne eblas montri erarmesaĝon"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Packaged by %s (%s)\n"
|
||||
#~ msgstr "Pakigita de %s (%s)\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Packaged by %s\n"
|
||||
#~ msgstr "Pakigita de %s\n"
|
||||
|
||||
#~ msgid "(C)"
|
||||
#~ msgstr "©"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "License GPLv3+: GNU GPL version 3 or later <%s>.\n"
|
||||
#~ "This is free software: you are free to change and redistribute it.\n"
|
||||
#~ "There is NO WARRANTY, to the extent permitted by law.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Permeso GPLv3+: GNU GPL versio 3 aŭ posta <%s>.\n"
|
||||
#~ "Tio ĉi estas libera programaro: vi estas libera por ŝanĝi kaj redisdoni "
|
||||
#~ "ĝin.\n"
|
||||
#~ "Ekzistas NENIU GARANTIO, laŭ plej amplekse permesate de la leĝoj.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s.\n"
|
||||
#~ msgstr "Verkita de %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s and %s.\n"
|
||||
#~ msgstr "Verkita de %s kaj %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Written by %s, %s, and %s.\n"
|
||||
#~ msgstr "Verkita de %s, %s, kaj %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Verkita de %s, %s, %s,\n"
|
||||
#~ "kaj %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Verkita de %s, %s, %s,\n"
|
||||
#~ "%s, kaj %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Verkita de %s, %s, %s,\n"
|
||||
#~ "%s, %s, kaj %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Verkita de %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, kaj %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Verkita de %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "kaj %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, and %s.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Verkita de %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, kaj %s.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid ""
|
||||
#~ "Written by %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s, and others.\n"
|
||||
#~ msgstr ""
|
||||
#~ "Verkita de %s, %s, %s,\n"
|
||||
#~ "%s, %s, %s, %s,\n"
|
||||
#~ "%s, %s, kaj aliaj.\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report bugs to: %s\n"
|
||||
#~ msgstr "Raportu program-misojn al: %s\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "Report %s bugs to: %s\n"
|
||||
#~ msgstr "Raportu %s misojn al: %s\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s home page: <%s>\n"
|
||||
#~ msgstr "%s hejm-paĝo: <%s>\n"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "General help using GNU software: <%s>\n"
|
||||
#~ msgstr "Ĝenerala helpo por uzi programaron GNU: <%s>\n"
|
||||
|
||||
#~ msgid "failed to set file descriptor text/binary mode"
|
||||
#~ msgstr "ni fiaskis difini la dosieran priaĵon teksta/cifereca reĝimo"
|
||||
|
||||
#~ msgid "stdin"
|
||||
#~ msgstr "ĉefenigujo"
|
||||
|
||||
#~ msgid "stdout"
|
||||
#~ msgstr "ĉefeligujo"
|
||||
|
||||
#~ msgid "stderr"
|
||||
#~ msgstr "ĉeferarujo"
|
||||
|
||||
#~ msgid "unknown stream"
|
||||
#~ msgstr "nekonata fluaĵo"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "failed to reopen %s with mode %s"
|
||||
#~ msgstr "ni fiaskis remalfermi %s kun reĝimo %s"
|
||||
|
||||
#~ msgid "string comparison failed"
|
||||
#~ msgstr "ĉena komparo fiaskis"
|
||||
|
||||
#~ msgid "Set LC_ALL='C' to work around the problem."
|
||||
#~ msgstr "Agordu LC_ALL='C' por ĉirkauiri la problemon."
|
||||
|
||||
#, c-format
|
||||
#~ msgid "The strings compared were %s and %s."
|
||||
#~ msgstr "La komparitaj ĉenoj estis %s kaj %s."
|
||||
|
||||
#~ msgid "cannot perform formatted output"
|
||||
#~ msgstr "ne eblas efektivigi formatitan eligon"
|
||||
|
||||
#~ msgid "standard file descriptors"
|
||||
#~ msgstr "laŭnormaj dosier-priaĵoj"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid %s%s argument '%s'"
|
||||
#~ msgstr "malvalida %s%s-argumento '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "invalid suffix in %s%s argument '%s'"
|
||||
#~ msgstr "malvalida sufikso en %s%s-argumento '%s'"
|
||||
|
||||
#, c-format
|
||||
#~ msgid "%s%s argument '%s' too large"
|
||||
#~ msgstr "%s%s-argumento '%s' tro larĝas"
|
||||
|
||||
#~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n"
|
||||
#~ msgstr "%s hejm-paĝo: <https://www.gnu.org/software/%s/>\n"
|
||||
|
||||
#~ msgid "%.*s: ARGP_HELP_FMT parameter must be positive"
|
||||
#~ msgstr "%.*s: parametro ARGP_HELP_FMT devas esti pozitiva"
|
||||
|
||||
#~ msgid "%s: option '--%s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: la modifilo '--%s' ne permesas argumenton\n"
|
||||
|
||||
#~ msgid "%s: unrecognized option '--%s'\n"
|
||||
#~ msgstr "%s: nerekonata modifilo '--%s'\n"
|
||||
|
||||
#~ msgid "%s: option '-W %s' doesn't allow an argument\n"
|
||||
#~ msgstr "%s: la modifilo '-W %s' ne permesas argumenton\n"
|
||||
|
||||
#~ msgid "%s: option '-W %s' requires an argument\n"
|
||||
#~ msgstr "%s: la modifilo '-W %s' postulas argumenton\n"
|
||||
|
||||
#~ msgid "Franc,ois Pinard"
|
||||
#~ msgstr "François Pinard"
|
BIN
gnulib_po/es.gmo
Normal file
BIN
gnulib_po/es.gmo
Normal file
Binary file not shown.
1072
gnulib_po/es.po
Normal file
1072
gnulib_po/es.po
Normal file
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue