1
0
Fork 0

Adding upstream version 1.25.0.

Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
Daniel Baumann 2025-06-21 09:40:11 +02:00
parent 0d12e1c796
commit 9591974d25
Signed by: daniel.baumann
GPG key ID: BCC918A2ABD66424
1449 changed files with 620551 additions and 0 deletions

1
.tarball-version Normal file
View file

@ -0,0 +1 @@
1.25.0

1
.version Normal file
View file

@ -0,0 +1 @@
1.25.0

1
ABOUT-NLS Normal file
View file

@ -0,0 +1 @@
<https://www.gnu.org/software/gettext/manual/html_node/Users.html>

366
AUTHORS Normal file
View 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
View 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>.

28297
ChangeLog Normal file

File diff suppressed because it is too large Load diff

127
GNUmakefile Normal file
View 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
View 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 dont 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 packages 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 packages 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 packages 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 Linuxs 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 systems 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 packages
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 packages 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 © 19941996, 19992002, 20042017, 20202024 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
View 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
View 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

File diff suppressed because it is too large Load diff

1240
NEWS Normal file

File diff suppressed because it is too large Load diff

92
README Normal file
View 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

File diff suppressed because it is too large Load diff

705
build-aux/announce-gen Executable file
View 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
View 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
View 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

File diff suppressed because it is too large Load diff

684
build-aux/config.rpath Executable file
View 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

File diff suppressed because it is too large Load diff

792
build-aux/depcomp Executable file
View 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:

View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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='' # Red.
grn='' # Green.
lgn='' # Light green.
blu='' # Blue.
mgn='' # Magenta.
std='' # 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

File diff suppressed because it is too large Load diff

307
build-aux/update-copyright Executable file
View 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 &copy; 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. &copy;
# 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|&copy;|©)';
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
View 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
View 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:

74341
configure vendored Executable file

File diff suppressed because it is too large Load diff

1043
configure.ac Normal file

File diff suppressed because it is too large Load diff

119
doc/Makefile.am Normal file
View 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

File diff suppressed because it is too large Load diff

506
doc/fdl.texi Normal file
View 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
View 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

View 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
View 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
View 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/&/&amp;/g;
s/\@\@/&at;/g;
s/\@\{/&lbrace;/g;
s/\@\}/&rbrace;/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/</&lt;/g;
s/>/&gt;/g;
} else {
s/</&LT;/g;
s/>/&GT;/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\&LT;$thing\&GT;\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)\{([^\},]*)\}/&lt;B<$1>&gt;/g;
s/\@uref\{([^\},]*),([^\},]*)\}/$2 (C<$1>)/g;
s/\@uref\{([^\},]*),([^\},]*),([^\},]*)\}/$3/g;
# Un-escape <> at this point.
s/&LT;/</g;
s/&GT;/>/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/&lt;/E<lt>/g;
s/&gt;/E<gt>/g;
s/&lbrace;/\{/g;
s/&rbrace;/\}/g;
s/&at;/\@/g;
s/&amp;/&/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
View 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

File diff suppressed because it is too large Load diff

4694
doc/wget.texi Normal file

File diff suppressed because it is too large Load diff

122
fuzz/Makefile.am Normal file
View 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

File diff suppressed because it is too large Load diff

83
fuzz/README.md Normal file
View 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
View 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
View 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
View 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
View 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;
}

View 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
View 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;
}

View file

@ -0,0 +1 @@
#/*url( */ url()

View file

@ -0,0 +1 @@
@import

Binary file not shown.

127
fuzz/wget_ftpls_fuzzer.c Normal file
View 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;
}

View 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
View 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;
}

View 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
View 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;
}

View file

@ -0,0 +1,8 @@
"machine"
"default"
"login"
"password"
"macdef"
"account"
"port"
"force"

101
fuzz/wget_ntlm_fuzzer.c Normal file
View 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
View 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;
}

View 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
View 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;
}

View 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
View 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
View 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
View 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
View 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
View 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
View 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
View 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

Binary file not shown.

582
gnulib_po/af.po Normal file
View 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

Binary file not shown.

526
gnulib_po/be.po Normal file
View 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

Binary file not shown.

985
gnulib_po/bg.po Normal file
View 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
View file

@ -0,0 +1,10 @@
s/"\([^"]*\)"/“\1”/g
s/`\([^`']*\)'/\1/g
s/ '\([^`']*\)' / \1 /g
s/ '\([^`']*\)'$/ \1/g
s/^'\([^`']*\)' /\1 /g
s/“”/""/g
s///g
s//”/g
s///g
s///g

BIN
gnulib_po/ca.gmo Normal file

Binary file not shown.

657
gnulib_po/ca.po Normal file
View 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

Binary file not shown.

894
gnulib_po/cs.po Normal file
View 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

Binary file not shown.

898
gnulib_po/da.po Normal file
View 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

Binary file not shown.

1052
gnulib_po/de.po Normal file

File diff suppressed because it is too large Load diff

BIN
gnulib_po/el.gmo Normal file

Binary file not shown.

701
gnulib_po/el.po Normal file
View 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"

View 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
View 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

Binary file not shown.

988
gnulib_po/eo.po Normal file
View 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

Binary file not shown.

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