bug-gnulib@gnu.org mirror (unofficial)
 help / color / mirror / Atom feed
* cmp/diff
@ 2020-12-26 16:24 Simon Josefsson via Gnulib discussion list
  2020-12-26 17:32 ` cmp/diff Bruno Haible
  0 siblings, 1 reply; 14+ messages in thread
From: Simon Josefsson via Gnulib discussion list @ 2020-12-26 16:24 UTC (permalink / raw)
  To: bug-gnulib

[-- Attachment #1: Type: text/plain, Size: 2087 bytes --]

Hi!  I have noticed self-check failures of libidn on ArchLinux:

https://gitlab.com/libidn/libidn/-/jobs/932649011

The gnulib self-tests that fail are: test-binary-io.sh test-perror.sh
test-init.sh

https://gitlab.com/libidn/libidn/-/jobs/932649011/artifacts/file/libidn-1.36a/b/gltests/test-binary-io.sh.log
https://gitlab.com/libidn/libidn/-/jobs/932649011/artifacts/file/libidn-1.36a/b/gltests/test-perror.sh.log
https://gitlab.com/libidn/libidn/-/jobs/932649011/artifacts/file/libidn-1.36a/b/gltests/test-init.sh.log

Essentialy it boils down to:

../../gltests/test-binary-io.sh: line 8: cmp: command not found
test-init.sh: failed test: err not empty: ../../gltests/init.sh: line 648: cmp: command not found
../../gltests/test-perror.sh: line 14: diff: command not found

I was a little surprised ArchLinux do not have cmp/diff by default, but
I was surprised that nothing except these gnulib tests failed.

I am reading gnulib's DEPENDENCIES which says:

  * The comparison utilities 'cmp' and 'diff'.
    + Mandatory. Using the platform's native utilities gives good portability
      exposure, but you can also use GNU diffutils.
    + Homepage:
      https://www.gnu.org/software/diffutils/

I read the DEPENDENCIES file a bit more careful after noticing that it
has several mandatory dependencies that I find questionable, and I
noticed this in the beginning:

  The following packages are needed by maintainers for using
  'gnulib-tool'.

It doesn't say the packages are required for users building gnulib-based
packages.  I can live with having diffutils installed as a maintainer.
Was this subtle distinction intentional?

I sympathize with ArchLinux's decision to be minimal, so my preference
is to make things work when it appears to be so simple.

What do you think about rewriting these self-tests to avoid cmp/diff?

Does anyone know a good portable shell-based idiom for comparing files
instead of using cmp/diff?

I'm posting this instead of just fixing the self-tests because I have a
suspicion this has been discussed, and maybe it is time to revisit it.

/Simon

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-26 16:24 cmp/diff Simon Josefsson via Gnulib discussion list
@ 2020-12-26 17:32 ` Bruno Haible
  2020-12-26 18:34   ` cmp/diff Simon Josefsson via Gnulib discussion list
  0 siblings, 1 reply; 14+ messages in thread
From: Bruno Haible @ 2020-12-26 17:32 UTC (permalink / raw)
  To: bug-gnulib, Simon Josefsson

Hi Simon,

> Essentialy it boils down to:
> 
> ../../gltests/test-binary-io.sh: line 8: cmp: command not found
> test-init.sh: failed test: err not empty: ../../gltests/init.sh: line 648: cmp: command not found
> ../../gltests/test-perror.sh: line 14: diff: command not found

'cmp' and 'diff' are among the programs that a 'configure' script and a Makefile
can assume to be present, see the GNU Coding Standards
<https://www.gnu.org/prep/standards/html_node/Utilities-in-Makefiles.html>.

> What do you think about rewriting these self-tests to avoid cmp/diff?

There is no adequate replacement. It would be possible to use 'md5sum'
instead of 'cmp'; but since 'md5sum' is not in the above list from the
GNU Coding Standards, this is not a useful direction.

Gnulib makes sure to pave over differences between different 'diff'
implementations; this was already a major headache. See tests/init.sh lines
589..669.

> https://gitlab.com/libidn/libidn/-/jobs/932649011

The Gitlab jobs typically start by installing packages into the build
environment. Yours has

  $ pacman -Sy --noconfirm make gcc

I guess that adding 'diffutils' to this package list will solve the problem.

> I read the DEPENDENCIES file a bit more careful after noticing that it
> has several mandatory dependencies that I find questionable, and I
> noticed this in the beginning:
> 
>   The following packages are needed by maintainers for using
>   'gnulib-tool'.
> 
> It doesn't say the packages are required for users building gnulib-based
> packages.  I can live with having diffutils installed as a maintainer.
> Was this subtle distinction intentional?

Yes, of course, we make a distinction between the packages needed for
creating the tarballs and the packages needed to build+install the tarballs.
The GNU Coding Standards matters for the latter.

Bruno



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-26 17:32 ` cmp/diff Bruno Haible
@ 2020-12-26 18:34   ` Simon Josefsson via Gnulib discussion list
  2020-12-26 18:49     ` cmp/diff Bruno Haible
  0 siblings, 1 reply; 14+ messages in thread
From: Simon Josefsson via Gnulib discussion list @ 2020-12-26 18:34 UTC (permalink / raw)
  To: Bruno Haible; +Cc: bug-gnulib

[-- Attachment #1: Type: text/plain, Size: 761 bytes --]

Bruno Haible <bruno@clisp.org> writes:

> Hi Simon,
>
>> Essentialy it boils down to:
>> 
>> ../../gltests/test-binary-io.sh: line 8: cmp: command not found
>> test-init.sh: failed test: err not empty: ../../gltests/init.sh:
>> line 648: cmp: command not found
>> ../../gltests/test-perror.sh: line 14: diff: command not found
>
> 'cmp' and 'diff' are among the programs that a 'configure' script and a Makefile
> can assume to be present, see the GNU Coding Standards
> <https://www.gnu.org/prep/standards/html_node/Utilities-in-Makefiles.html>.

Hi Bruno.  Thanks for the pointer!  I believe this resolves my concern.

It would be nice to reduce that set of tools.  Is there any automated
purpose for diff other than a fancy cmp?

/Simon

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-26 18:34   ` cmp/diff Simon Josefsson via Gnulib discussion list
@ 2020-12-26 18:49     ` Bruno Haible
  2020-12-26 19:12       ` cmp/diff Paul Eggert
  2020-12-26 19:31       ` cmp/diff Paul Smith
  0 siblings, 2 replies; 14+ messages in thread
From: Bruno Haible @ 2020-12-26 18:49 UTC (permalink / raw)
  To: Simon Josefsson; +Cc: bug-gnulib

Hi Simon,

> > 'cmp' and 'diff' are among the programs that a 'configure' script and a Makefile
> > can assume to be present, see the GNU Coding Standards
> > <https://www.gnu.org/prep/standards/html_node/Utilities-in-Makefiles.html>.
> 
> Hi Bruno.  Thanks for the pointer!  I believe this resolves my concern.
> 
> It would be nice to reduce that set of tools.

Well, both 'cmp' and 'diff' are part of POSIX:
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/cmp.html
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/diff.html

They have been listed at this place in the GNU Coding Standards since
at least 2004.

But, of course, you are free to write to
https://lists.gnu.org/mailman/listinfo/bug-standards

> Is there any automated purpose for diff other than a fancy cmp?

Makefile rules are written both for automated execution and for the
developers of a package. While for the automated execution of a
unit test, "cmp expected.out actual.out" is sufficient, for a developer,
"diff expected.out actual.out" is definitely nicer. Especially if the
log of the unit test is created on a machine on which the developer has
no direct access (such as a contributor's machine or a build farm),
"diff expected.out actual.out" has information that is essential for
debugging.

Bruno



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-26 18:49     ` cmp/diff Bruno Haible
@ 2020-12-26 19:12       ` Paul Eggert
  2020-12-26 21:55         ` cmp/diff Simon Josefsson via Gnulib discussion list
  2020-12-26 19:31       ` cmp/diff Paul Smith
  1 sibling, 1 reply; 14+ messages in thread
From: Paul Eggert @ 2020-12-26 19:12 UTC (permalink / raw)
  To: Bruno Haible, Simon Josefsson; +Cc: bug-gnulib

On 12/26/20 10:49 AM, Bruno Haible wrote:
>> It would be nice to reduce that set of tools.
> Well, both 'cmp' and 'diff' are part of POSIX:

Even awk is on that list, and it's much fancier than cmp or diff. And I 
wouldn't support removing awk either, as it's a handy tool in Makefiles 
when the shell isn't up to a text-processing task.

Looking at that list now, the only obvious tool to remove is egrep, 
since 'grep -E' subsumes it nowadays.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-26 18:49     ` cmp/diff Bruno Haible
  2020-12-26 19:12       ` cmp/diff Paul Eggert
@ 2020-12-26 19:31       ` Paul Smith
  1 sibling, 0 replies; 14+ messages in thread
From: Paul Smith @ 2020-12-26 19:31 UTC (permalink / raw)
  To: Bruno Haible, Simon Josefsson; +Cc: bug-gnulib

On Sat, 2020-12-26 at 19:49 +0100, Bruno Haible wrote:
> Makefile rules are written both for automated execution and for the
> developers of a package. While for the automated execution of a unit
> test, "cmp expected.out actual.out" is sufficient, for a developer,
> "diff expected.out actual.out" is definitely nicer.

Agreed.

It could be possible for the configure script to check for diff and if
it's not provided, replace it with cmp in situations where we only need
to care about equality for correct processing (which is most places).

A message could be shown to the user saying that without diff it will
be hard for maintainers to assist if the configure fails.

However, that seems like a lot of effort for not much gain (for the GNU
project) so I'd suggest that if someone wanted something like that they
would need to provide the implementation.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-26 19:12       ` cmp/diff Paul Eggert
@ 2020-12-26 21:55         ` Simon Josefsson via Gnulib discussion list
  2020-12-26 23:12           ` cmp/diff Paul Eggert
  0 siblings, 1 reply; 14+ messages in thread
From: Simon Josefsson via Gnulib discussion list @ 2020-12-26 21:55 UTC (permalink / raw)
  To: Paul Eggert, Bruno Haible; +Cc: bug-gnulib

[-- Attachment #1: Type: text/plain, Size: 826 bytes --]

lör 2020-12-26 klockan 11:12 -0800 skrev Paul Eggert:
> On 12/26/20 10:49 AM, Bruno Haible wrote:
> > > It would be nice to reduce that set of tools.
> > Well, both 'cmp' and 'diff' are part of POSIX:
> 
> Even awk is on that list, and it's much fancier than cmp or diff. And
> I wouldn't support removing awk either, as it's a handy tool in
> Makefiles when the shell isn't up to a text-processing task.

Okay, let's wait ten years and revisit that :-)

I believe awk will be more of a rarity in the future.

> Looking at that list now, the only obvious tool to remove is egrep, 
> since 'grep -E' subsumes it nowadays.

Yes, I think that should be dropped.

What about 'install-info'?  It is quite GNU-specific.  Nothing in
gnulib appears to refer to it (except for the make-stds manual..).

/Simon


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-26 21:55         ` cmp/diff Simon Josefsson via Gnulib discussion list
@ 2020-12-26 23:12           ` Paul Eggert
  2020-12-27  0:07             ` cmp/diff Alfred M. Szmidt
                               ` (2 more replies)
  0 siblings, 3 replies; 14+ messages in thread
From: Paul Eggert @ 2020-12-26 23:12 UTC (permalink / raw)
  To: bug-standards; +Cc: Simon Josefsson, bug-gnulib, Bruno Haible

[-- Attachment #1: Type: text/plain, Size: 876 bytes --]

On 12/26/20 1:55 PM, Simon Josefsson wrote:
>> Looking at that list now, the only obvious tool to remove is egrep,
>> since 'grep -E' subsumes it nowadays.
> Yes, I think that should be dropped.
> 
> What about 'install-info'?  It is quite GNU-specific.  Nothing in
> gnulib appears to refer to it (except for the make-stds manual..).

Sure, attached is a proposed patch to make-stds.texi. This patch also 
removes fgrep, which is in the same category as egrep. I am sending this 
email to bug-standards so that they can see it as a suggestion.

Also, it puzzles me that the set of pre-installation and 
post-installation commands is a superset of the set of commands that can 
appear in "the Makefile rules for building and installation". Since pre- 
and post-installation commands appear in Makefiles, shouldn't their 
commands be a subset, not a superset?

[-- Attachment #2: make-stds-diff.txt --]
[-- Type: text/plain, Size: 2144 bytes --]

Index: make-stds.texi
===================================================================
RCS file: /sources/gnustandards/gnustandards/make-stds.texi,v
retrieving revision 1.69
diff -c -r1.69 make-stds.texi
*** make-stds.texi	1 Jun 2020 17:53:39 -0000	1.69
--- make-stds.texi	26 Dec 2020 23:08:50 -0000
***************
*** 160,166 ****
  @c mkfifo mknod tee uname
  
  @example
! awk cat cmp cp diff echo egrep expr false grep install-info ln ls
  mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true
  @end example
  
--- 160,166 ----
  @c mkfifo mknod tee uname
  
  @example
! awk cat cmp cp diff echo expr false grep ln ls
  mkdir mv printf pwd rm rmdir sed sleep sort tar test touch tr true
  @end example
  
***************
*** 174,179 ****
--- 174,182 ----
  for parallel execution.  For a list of known incompatibilities, see
  @ref{Portable Shell, Portable Shell Programming,, autoconf, Autoconf}.
  
+ Programs like @code{egrep} and @code{install-info} can be used in
+ rules that have a fallback if the programs are absent.
+ @xref{Standard Targets} for an example of this.
  
  It is a good idea to avoid creating symbolic links in makefiles, since a
  few file systems don't support them.
***************
*** 1131,1142 ****
  which of the dependencies actually run.
  
  Pre-installation and post-installation commands should not run any
! programs except for these:
  
  @example
  [ basename bash cat chgrp chmod chown cmp cp dd diff echo
! egrep expand expr false fgrep find getopt grep gunzip gzip
! hostname install install-info kill ldconfig ln ls md5sum
  mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
  test touch true uname xargs yes
  @end example
--- 1134,1145 ----
  which of the dependencies actually run.
  
  Pre-installation and post-installation commands should not run any
! programs directly except for these:
  
  @example
  [ basename bash cat chgrp chmod chown cmp cp dd diff echo
! expand expr false find getopt grep gunzip gzip
! hostname install kill ldconfig ln ls md5sum
  mkdir mkfifo mknod mv printenv pwd rm rmdir sed sort tee
  test touch true uname xargs yes
  @end example

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-26 23:12           ` cmp/diff Paul Eggert
@ 2020-12-27  0:07             ` Alfred M. Szmidt
  2020-12-27  0:23               ` cmp/diff Paul Eggert
  2020-12-27  0:07             ` cmp/diff Alfred M. Szmidt
  2020-12-27  0:43             ` egrep, fgrep, and install-info Bruno Haible
  2 siblings, 1 reply; 14+ messages in thread
From: Alfred M. Szmidt @ 2020-12-27  0:07 UTC (permalink / raw)
  To: Paul Eggert; +Cc: simon, bug-gnulib, bug-standards

   > What about 'install-info'?  It is quite GNU-specific.  Nothing in
   > gnulib appears to refer to it (except for the make-stds manual..).

install-info is specific to GNU yes, the GNU standards are for the GNU
system and GNU project after all.

install-info does not have an replacement, like say egrep/fgrep --
this is how we install a dir entry for a info manual.  Removing
install-info would be a regression.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-26 23:12           ` cmp/diff Paul Eggert
  2020-12-27  0:07             ` cmp/diff Alfred M. Szmidt
@ 2020-12-27  0:07             ` Alfred M. Szmidt
  2020-12-27  0:43             ` egrep, fgrep, and install-info Bruno Haible
  2 siblings, 0 replies; 14+ messages in thread
From: Alfred M. Szmidt @ 2020-12-27  0:07 UTC (permalink / raw)
  To: Paul Eggert; +Cc: simon, bug-gnulib, bug-standards

   >> Looking at that list now, the only obvious tool to remove is egrep,
   >> since 'grep -E' subsumes it nowadays.
   > Yes, I think that should be dropped.

Maybe from usage in scripts or Makefile, but from a users point these
do not replace "grep -E" or "grep -F" which are far more annoying to
type than egrep or fgrep.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-27  0:07             ` cmp/diff Alfred M. Szmidt
@ 2020-12-27  0:23               ` Paul Eggert
  2020-12-27  1:05                 ` cmp/diff Alfred M. Szmidt
  0 siblings, 1 reply; 14+ messages in thread
From: Paul Eggert @ 2020-12-27  0:23 UTC (permalink / raw)
  To: Alfred M. Szmidt; +Cc: simon, bug-gnulib, bug-standards

On 12/26/20 4:07 PM, Alfred M. Szmidt wrote:
> install-info does not have an replacement, like say egrep/fgrep --
> this is how we install a dir entry for a info manual.  Removing
> install-info would be a regression.

In practice, GNU installation procedures use install-info in the way 
that's described in the proposed patch: they test whether install-info 
is available, and if so they use it. The make-stds.texi file already 
recomments this practice in its "Standard Targets" section. The proposed 
patch is doing merely making make-stds coherent; it's not advocating any 
change to existing best practice for install-info.


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: egrep, fgrep, and install-info
  2020-12-26 23:12           ` cmp/diff Paul Eggert
  2020-12-27  0:07             ` cmp/diff Alfred M. Szmidt
  2020-12-27  0:07             ` cmp/diff Alfred M. Szmidt
@ 2020-12-27  0:43             ` Bruno Haible
  2020-12-27  1:12               ` Alfred M. Szmidt
  2 siblings, 1 reply; 14+ messages in thread
From: Bruno Haible @ 2020-12-27  0:43 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Simon Josefsson, bug-gnulib, bug-standards

Paul Eggert wrote:
> ***************
> *** 174,179 ****
> --- 174,182 ----
>   for parallel execution.  For a list of known incompatibilities, see
>   @ref{Portable Shell, Portable Shell Programming,, autoconf, Autoconf}.
>   
> + Programs like @code{egrep} and @code{install-info} can be used in
> + rules that have a fallback if the programs are absent.
> + @xref{Standard Targets} for an example of this.
>   
>   It is a good idea to avoid creating symbolic links in makefiles, since a
>   few file systems don't support them.

When you remove 'egrep', 'fgrep', or 'install-info' from the previously
allowed list of commands, everyone will ask: "ok, so now what replacement
should I use?"

1) For egrep and fgrep, probably the answer would be "use 'grep -E' or
'grep -F', respectively" — because POSIX supports these options.
<https://pubs.opengroup.org/onlinepubs/9699919799/utilities/grep.html>

Unfortunately, Solaris 10 doesn't:

$ type grep
grep is /usr/bin/grep
$ grep -F haible /etc/passwd
grep: illegal option -- F
Usage: grep -hblcnsviw pattern file . . .
$ grep -E '(haible|eggert)' /etc/passwd
grep: illegal option -- E
Usage: grep -hblcnsviw pattern file . . .

Likewise for /usr/5bin/grep.

2) For 'install-info', what would be the replacement? Even though Automake
knows how to handle its absence [1], it would be good to know.

Bruno

[1] https://www.gnu.org/software/automake/manual/html_node/Texinfo.html



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: cmp/diff
  2020-12-27  0:23               ` cmp/diff Paul Eggert
@ 2020-12-27  1:05                 ` Alfred M. Szmidt
  0 siblings, 0 replies; 14+ messages in thread
From: Alfred M. Szmidt @ 2020-12-27  1:05 UTC (permalink / raw)
  To: Paul Eggert; +Cc: simon, bug-gnulib, bug-standards


   On 12/26/20 4:07 PM, Alfred M. Szmidt wrote:
   > install-info does not have an replacement, like say egrep/fgrep --
   > this is how we install a dir entry for a info manual.  Removing
   > install-info would be a regression.

   In practice, GNU installation procedures use install-info in the
   way that's described in the proposed patch: they test whether
   install-info is available, and if so they use it.  The
   make-stds.texi file already recomments this practice in its
   "Standard Targets" section. The proposed patch is doing merely
   making make-stds coherent; it's not advocating any change to
   existing best practice for install-info.

The example entry in '(standards) Standard Targets' is I think
orthogonal, it is for the benefit of the user where installing the
node entry is not considered an error but only a "warning" (and then
some extra checks because we want to treat real errors as such).
Which is quite different from the behaviour we have for other programs
-- if you are missing md5sum (or even fgrep) you'd get a hard error.

So I really don't see how it makes it coherent, having install-info as
a "safe" requirement makes logical sense since our prefered
documentation format is info (the original rationale for removing
install-info was "its GNU specific"), and why we do some extra sanity
checks is to be nice to the user.  The change also removes
install-info the only rule where it makes sense to use install-info --
post-installation.



^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: egrep, fgrep, and install-info
  2020-12-27  0:43             ` egrep, fgrep, and install-info Bruno Haible
@ 2020-12-27  1:12               ` Alfred M. Szmidt
  0 siblings, 0 replies; 14+ messages in thread
From: Alfred M. Szmidt @ 2020-12-27  1:12 UTC (permalink / raw)
  To: Bruno Haible; +Cc: simon, eggert, bug-gnulib, bug-standards

   2) For 'install-info', what would be the replacement? Even though
   Automake knows how to handle its absence [1], it would be good to
   know.

On systems where install-info is lacking, we simply don't install a
node entry in the dir file and continue with the post-install.  This
is a slightly different behaviour than what we have for other programs
which we generally consider a hard error.  E.g., if you don't have
grep -E, and no egrep or some other such ... you're shit outta luck.


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2020-12-27  1:12 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-26 16:24 cmp/diff Simon Josefsson via Gnulib discussion list
2020-12-26 17:32 ` cmp/diff Bruno Haible
2020-12-26 18:34   ` cmp/diff Simon Josefsson via Gnulib discussion list
2020-12-26 18:49     ` cmp/diff Bruno Haible
2020-12-26 19:12       ` cmp/diff Paul Eggert
2020-12-26 21:55         ` cmp/diff Simon Josefsson via Gnulib discussion list
2020-12-26 23:12           ` cmp/diff Paul Eggert
2020-12-27  0:07             ` cmp/diff Alfred M. Szmidt
2020-12-27  0:23               ` cmp/diff Paul Eggert
2020-12-27  1:05                 ` cmp/diff Alfred M. Szmidt
2020-12-27  0:07             ` cmp/diff Alfred M. Szmidt
2020-12-27  0:43             ` egrep, fgrep, and install-info Bruno Haible
2020-12-27  1:12               ` Alfred M. Szmidt
2020-12-26 19:31       ` cmp/diff Paul Smith

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).