unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* GNU Guix 0.2 released
@ 2013-05-12 21:59 Ludovic Courtès
  2013-05-13 23:12 ` Xue Fuqiao
  0 siblings, 1 reply; 17+ messages in thread
From: Ludovic Courtès @ 2013-05-12 21:59 UTC (permalink / raw)
  To: bug-guix, gnu-system-discuss, guile-user, nix-dev

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

We are pleased to announce GNU Guix version 0.2, the second alpha
release, representing 580 commits by 5 people over 4 months.


• About

  GNU Guix is a functional package manager and distribution of
  the GNU system.

  In addition to standard package management features, Guix supports
  transactional upgrades and roll-backs, unprivileged package
  management, per-user profiles, and garbage collection.  Guix uses
  mechanisms from the Nix package management tool, with a Guile Scheme
  programming interface.

  http://www.gnu.org/software/guix/


• Download

  Here are the compressed sources and a GPG detached signature[*]:
    ftp://alpha.gnu.org/gnu/guix/guix-0.2.tar.gz
    ftp://alpha.gnu.org/gnu/guix/guix-0.2.tar.gz.sig

  Use a mirror for higher download bandwidth:
    http://www.gnu.org/order/ftp.html

  Here are the MD5 and SHA1 checksums:

  4bdbbd736d0bbcb6cd7e28220c4ea1fe  guix-0.2.tar.gz
  051a65d1d7aa9a0ea69fe97d6d9a8b93fe09cca0  guix-0.2.tar.gz

  [*] 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 guix-0.2.tar.gz.sig

  If that command fails because you don't have the required public key,
  then run this command to import it:

    gpg --keyserver keys.gnupg.net --recv-keys EA52ECF4

  and rerun the 'gpg --verify' command.

  This release was bootstrapped with the following tools:
    Autoconf 2.69
    Automake 1.13.1
    Makeinfo 5.1


• Changes since version 0.1 (excerpt from the NEWS file)

  ** Package management

  *** Guix commands are now sub-commands of the “guix” program

  Instead of typing “guix-package”, one now has to type “guix package”, and so
  on.  This has allowed us to homogenize the user interface and initial program
  setup, and to allow commands to be upgradable through “guix pull”.

  *** New “guix package --upgrade” option

  As the name implies, this option atomically upgrades all the packages
  installed in a profile or the set of packages matching a given regexp.
  See “Invoking guix package” in the manual.

  *** New “guix package --search” option

  Performs a full text search in package synopses and descriptions, and returns
  the matching packages in recutils format.  See “Invoking guix package” in the
  manual, for details.

  *** New “guix pull” command

  The command pulls the latest version of Guix–both the package management
  modules and the distribution.  See the manual for details.

  *** New binary substituter

  The “substituter” mechanism allows pre-built binaries to be transparently
  downloaded instead of performing a build locally.  Currently binaries are
  available for x86_64 Linux-based GNU systems from http://hydra.gnu.org.  The
  distribution is continuously built and binaries are made available from there.

  See http://hydra.gnu.org/jobset/gnu/master under “Job status” for the list of
  available binary packages.

  *** New “guix refresh” command

  The command is used by Guix maintainers.  It automatically updates the
  distribution to the latest upstream releases of GNU software.

  *** New “guix hash” command

  Convenience command to compute the hash of a file.  See the manual for
  details.

  *** Nix daemon code updated

  The daemon code from Nix, used by the ‘guix-daemon’ command, has been updated
  to current Nix ‘master’.

  ** Programming interfaces

  *** (guix download) now supports HTTPS, using GnuTLS

  It allows package source tarballs to be retrieved over HTTPS.

  *** New ‘native-search-path’ and ‘search-path’ package fields

  Packages can define in their ‘native-search-path’ field environment variables
  that define search paths and need to be set for proper functioning of the
  package.  For instance, GCC has ‘CPATH’ and ‘LIBRARY_PATH’ in its
  ‘native-search-path’, Perl has ‘PERL5LIB’, Python has ‘PYTHONPATH’, etc.
  These environment variables are automatically set when building a package that
  uses one of these.

  *** Package inputs can be a function of the target system type

  The ‘inputs’ field of a package can now be conditional on the value of
  (%current-system).  This is useful for packages that take system-dependent
  tarballs as inputs, such as GNU/MIT Scheme.

  *** New build systems

  The ‘perl-build-system’, ‘python-build-system’, and ‘cmake-build-system’ have
  been added.  They implement the standard build systems for Perl, Python, and
  CMake packages.

  *** Tools to build Linux initrds, QEMU images, and more

  The (gnu packages linux-initrd) module provides a procedure to build a Linux
  initrd (“initial RAM disk”).  The initrd embeds Guile, which is used to
  evaluate the given expression.  The example below returns an initrd that
  mounts the /proc file system and starts a REPL:

    (expression->initrd
      '(begin
         (mkdir "/proc")
         (mount "none" "/proc" "proc")
         ((@ (system repl repl) start-repl))))

  More examples in the linux-initrd.scm file.

  Experimental interfaces to produce and use QEMU images are provided by the
  (gnu system vm) module.  For instance, the
  ‘expression->derivation-in-linux-vm’ evaluates the given Scheme expression in
  a QEMU virtual machine running the Linux kernel and Guile.

  ** GNU distribution

  Many updates and additions have been made to the distribution.  Here are the
  highlights.

  *** Major updates

  GCC 4.7.3 (the default) and GCC 4.8.0, Binutils 2.23.2, Guile 2.0.9,
  Coreutils 8.20, GDB 7.6, Texinfo 5.1.

  *** Noteworthy new packages

  TeXLive, Xorg, GNU GRUB, GNU Parted, QEMU and QEMU-KVM, Avahi, Bigloo,
  CHICKEN, Scheme48, Hugs, Python, Lua, Samba.


Please report bugs to bug-guix@gnu.org.

Ludovic, on behalf of the Guix team.

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

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

* Re: GNU Guix 0.2 released
  2013-05-12 21:59 GNU Guix 0.2 released Ludovic Courtès
@ 2013-05-13 23:12 ` Xue Fuqiao
  2013-05-15  0:56   ` Germán Arias
  0 siblings, 1 reply; 17+ messages in thread
From: Xue Fuqiao @ 2013-05-13 23:12 UTC (permalink / raw)
  To: bug-guix; +Cc: gnu-system-discuss, guile-user, nix-dev

On Mon, May 13, 2013 at 5:59 AM, Ludovic Courtès <ludo@gnu.org> wrote:
> We are pleased to announce GNU Guix version 0.2, the second alpha
> release, representing 580 commits by 5 people over 4 months.

Great news, *thanks* to everyone involved!

> • About
>
>   GNU Guix is a functional package manager and distribution of
>   the GNU system.
>
>   In addition to standard package management features, Guix supports
>   transactional upgrades and roll-backs, unprivileged package
>   management, per-user profiles, and garbage collection.  Guix uses
>   mechanisms from the Nix package management tool, with a Guile Scheme
>   programming interface.
>
>   http://www.gnu.org/software/guix/
>
>
> • Download
>
>   Here are the compressed sources and a GPG detached signature[*]:
>     ftp://alpha.gnu.org/gnu/guix/guix-0.2.tar.gz
>     ftp://alpha.gnu.org/gnu/guix/guix-0.2.tar.gz.sig
>
>   Use a mirror for higher download bandwidth:
>     http://www.gnu.org/order/ftp.html
>
>   Here are the MD5 and SHA1 checksums:
>
>   4bdbbd736d0bbcb6cd7e28220c4ea1fe  guix-0.2.tar.gz
>   051a65d1d7aa9a0ea69fe97d6d9a8b93fe09cca0  guix-0.2.tar.gz
>
>   [*] 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 guix-0.2.tar.gz.sig
>
>   If that command fails because you don't have the required public key,
>   then run this command to import it:
>
>     gpg --keyserver keys.gnupg.net --recv-keys EA52ECF4
>
>   and rerun the 'gpg --verify' command.
>
>   This release was bootstrapped with the following tools:
>     Autoconf 2.69
>     Automake 1.13.1
>     Makeinfo 5.1
>
>
> • Changes since version 0.1 (excerpt from the NEWS file)
>
>   ** Package management
>
>   *** Guix commands are now sub-commands of the “guix” program
>
>   Instead of typing “guix-package”, one now has to type “guix package”, and so
>   on.  This has allowed us to homogenize the user interface and initial program
>   setup, and to allow commands to be upgradable through “guix pull”.
>
>   *** New “guix package --upgrade” option
>
>   As the name implies, this option atomically upgrades all the packages
>   installed in a profile or the set of packages matching a given regexp.
>   See “Invoking guix package” in the manual.
>
>   *** New “guix package --search” option
>
>   Performs a full text search in package synopses and descriptions, and returns
>   the matching packages in recutils format.  See “Invoking guix package” in the
>   manual, for details.
>
>   *** New “guix pull” command
>
>   The command pulls the latest version of Guix–both the package management
>   modules and the distribution.  See the manual for details.
>
>   *** New binary substituter
>
>   The “substituter” mechanism allows pre-built binaries to be transparently
>   downloaded instead of performing a build locally.  Currently binaries are
>   available for x86_64 Linux-based GNU systems from http://hydra.gnu.org.  The
>   distribution is continuously built and binaries are made available from there.
>
>   See http://hydra.gnu.org/jobset/gnu/master under “Job status” for the list of
>   available binary packages.
>
>   *** New “guix refresh” command
>
>   The command is used by Guix maintainers.  It automatically updates the
>   distribution to the latest upstream releases of GNU software.
>
>   *** New “guix hash” command
>
>   Convenience command to compute the hash of a file.  See the manual for
>   details.
>
>   *** Nix daemon code updated
>
>   The daemon code from Nix, used by the ‘guix-daemon’ command, has been updated
>   to current Nix ‘master’.
>
>   ** Programming interfaces
>
>   *** (guix download) now supports HTTPS, using GnuTLS
>
>   It allows package source tarballs to be retrieved over HTTPS.
>
>   *** New ‘native-search-path’ and ‘search-path’ package fields
>
>   Packages can define in their ‘native-search-path’ field environment variables
>   that define search paths and need to be set for proper functioning of the
>   package.  For instance, GCC has ‘CPATH’ and ‘LIBRARY_PATH’ in its
>   ‘native-search-path’, Perl has ‘PERL5LIB’, Python has ‘PYTHONPATH’, etc.
>   These environment variables are automatically set when building a package that
>   uses one of these.
>
>   *** Package inputs can be a function of the target system type
>
>   The ‘inputs’ field of a package can now be conditional on the value of
>   (%current-system).  This is useful for packages that take system-dependent
>   tarballs as inputs, such as GNU/MIT Scheme.
>
>   *** New build systems
>
>   The ‘perl-build-system’, ‘python-build-system’, and ‘cmake-build-system’ have
>   been added.  They implement the standard build systems for Perl, Python, and
>   CMake packages.
>
>   *** Tools to build Linux initrds, QEMU images, and more
>
>   The (gnu packages linux-initrd) module provides a procedure to build a Linux
>   initrd (“initial RAM disk”).  The initrd embeds Guile, which is used to
>   evaluate the given expression.  The example below returns an initrd that
>   mounts the /proc file system and starts a REPL:
>
>     (expression->initrd
>       '(begin
>          (mkdir "/proc")
>          (mount "none" "/proc" "proc")
>          ((@ (system repl repl) start-repl))))
>
>   More examples in the linux-initrd.scm file.
>
>   Experimental interfaces to produce and use QEMU images are provided by the
>   (gnu system vm) module.  For instance, the
>   ‘expression->derivation-in-linux-vm’ evaluates the given Scheme expression in
>   a QEMU virtual machine running the Linux kernel and Guile.
>
>   ** GNU distribution
>
>   Many updates and additions have been made to the distribution.  Here are the
>   highlights.
>
>   *** Major updates
>
>   GCC 4.7.3 (the default) and GCC 4.8.0, Binutils 2.23.2, Guile 2.0.9,
>   Coreutils 8.20, GDB 7.6, Texinfo 5.1.
>
>   *** Noteworthy new packages
>
>   TeXLive, Xorg, GNU GRUB, GNU Parted, QEMU and QEMU-KVM, Avahi, Bigloo,
>   CHICKEN, Scheme48, Hugs, Python, Lua, Samba.
>
>
> Please report bugs to bug-guix@gnu.org.
>
> Ludovic, on behalf of the Guix team.

--
Best regards, Xue Fuqiao.
http://www.gnu.org/software/emacs/

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

* Re: GNU Guix 0.2 released
  2013-05-13 23:12 ` Xue Fuqiao
@ 2013-05-15  0:56   ` Germán Arias
  2013-05-15  5:01     ` Xue Fuqiao
  2013-05-15  8:53     ` Brandon Invergo
  0 siblings, 2 replies; 17+ messages in thread
From: Germán Arias @ 2013-05-15  0:56 UTC (permalink / raw)
  To: guile-user; +Cc: gnu-system-discuss, nix-dev, bug-guix

On 2013-05-13 17:12:07 -0600 Xue Fuqiao <xfq.free@gmail.com> wrote:

> On Mon, May 13, 2013 at 5:59 AM, Ludovic Courtès <ludo@gnu.org> wrote:
>> We are pleased to announce GNU Guix version 0.2, the second alpha
>> release, representing 580 commits by 5 people over 4 months.
> 
> Great news, *thanks* to everyone involved!
> 

Currently I'm testing GSRC on my PC. So, my question is: What is the difference between Guix and GSRC? Regards.

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

* Re: GNU Guix 0.2 released
  2013-05-15  0:56   ` Germán Arias
@ 2013-05-15  5:01     ` Xue Fuqiao
  2013-05-15  7:42       ` Ludovic Courtès
  2013-05-15  8:53     ` Brandon Invergo
  1 sibling, 1 reply; 17+ messages in thread
From: Xue Fuqiao @ 2013-05-15  5:01 UTC (permalink / raw)
  To: Germán Arias; +Cc: bug-guix

On Wed, May 15, 2013 at 8:56 AM, Germán Arias <german@xelalug.org> wrote:
> On 2013-05-13 17:12:07 -0600 Xue Fuqiao <xfq.free@gmail.com> wrote:
>
>> On Mon, May 13, 2013 at 5:59 AM, Ludovic Courtès <ludo@gnu.org> wrote:
>>> We are pleased to announce GNU Guix version 0.2, the second alpha
>>> release, representing 580 commits by 5 people over 4 months.
>>
>> Great news, *thanks* to everyone involved!
>>
>
> Currently I'm testing GSRC on my PC. So, my question is: What is the difference between Guix and GSRC? Regards.

IIUC GNU SRC is only a simple way to install the latest officially
released versions of _GNU_ packages.  GNU Guix is a purely functional
package manager for the GNU system, and the package in Guix is not
necessarily be a GNU program.

--
Best regards, Xue Fuqiao.
http://www.gnu.org/software/emacs/

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

* Re: GNU Guix 0.2 released
  2013-05-15  5:01     ` Xue Fuqiao
@ 2013-05-15  7:42       ` Ludovic Courtès
  2013-05-16  6:34         ` Germán Arias
  0 siblings, 1 reply; 17+ messages in thread
From: Ludovic Courtès @ 2013-05-15  7:42 UTC (permalink / raw)
  To: Xue Fuqiao; +Cc: bug-guix, Germán Arias

Hi Germán,

Xue Fuqiao <xfq.free@gmail.com> skribis:

> On Wed, May 15, 2013 at 8:56 AM, Germán Arias <german@xelalug.org> wrote:
>> On 2013-05-13 17:12:07 -0600 Xue Fuqiao <xfq.free@gmail.com> wrote:
>>
>>> On Mon, May 13, 2013 at 5:59 AM, Ludovic Courtès <ludo@gnu.org> wrote:
>>>> We are pleased to announce GNU Guix version 0.2, the second alpha
>>>> release, representing 580 commits by 5 people over 4 months.
>>>
>>> Great news, *thanks* to everyone involved!
>>>
>>
>> Currently I'm testing GSRC on my PC. So, my question is: What is the difference between Guix and GSRC? Regards.
>
> IIUC GNU SRC is only a simple way to install the latest officially
> released versions of _GNU_ packages.  GNU Guix is a purely functional
> package manager for the GNU system, and the package in Guix is not
> necessarily be a GNU program.

Right.  So Guix is a package manager (like APT, but with additional
features), and GNU Guix comes with a GNU/Linux distribution (a small one
currently, but the goal is to have a complete distro.)

A feature that you may find useful for the purpose of testing GNUstep is
that several variants of the same package (for instance, GNUstep build
with different options, or different versions of its dependencies) can
coexist.  The system maintains a mapping between your package’s recipe
and its build result, so you know exactly what you’re testing.

Anyway, I’ve also been thinking that it’d be great to have GNUstep
packaged in Guix one of these days.  If you want to help with that, I’m
happy to give a hand!  :-)

Thanks,
Ludo’.

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

* Re: GNU Guix 0.2 released
  2013-05-15  0:56   ` Germán Arias
  2013-05-15  5:01     ` Xue Fuqiao
@ 2013-05-15  8:53     ` Brandon Invergo
  2013-05-15 18:04       ` Ludovic Courtès
  2013-05-16  7:29       ` Germán Arias
  1 sibling, 2 replies; 17+ messages in thread
From: Brandon Invergo @ 2013-05-15  8:53 UTC (permalink / raw)
  To: Germán Arias; +Cc: gnu-system-discuss, guile-user, nix-dev, bug-guix

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

Hi Germán,

> Currently I'm testing GSRC on my PC. So, my question is: What is the
> difference between Guix and GSRC? Regards.

GSRC can be thought of as a up-to-date quarterly release of all GNU
software. It automates the fetch/configure/build/install procedure and
provides the occasional patch when necessary, making it easier to
install a GNU package from source.  It has light package management
features, such as dependency resolution, but it should not be thought of
as a package manager. GSRC only provides GNU software so external
dependencies must be installed separately by the user.

Guix, on the other hand, is a full package manager that will eventually
form the foundation of a GNU distribution.  It has far more features as
a package manager, including some really novel ones that go above and
beyond the usual package management functionality (better to let Ludovic
explain).  The Guix distribution will provide all of the software
necessary to have a complete, bootable GNU system, including non-GNU
packages.  It will also handle all the fun "under-the-hood" stuff like
system configuration and initialization, etc.

Both can be used on top of an existing distro but when the Guix distro
is ready, I will subjectively say that GSRC would be more appropriate
for just installing a package or two on top of an existing system.

There is certainly some functional overlap, and this topic has come up
before as a result, but there remains a conceptual distinction.  In
fact, I've made changes to GSRC to reinforce this distinction
(i.e. removing 3rd-party dependencies).

I think that just about sums it up but I welcome other comments. :)

Cheers,

Brandon

-- 
Brandon Invergo
http://brandon.invergo.net

[-- Attachment #2: Type: application/pgp-signature, Size: 489 bytes --]

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

* Re: GNU Guix 0.2 released
  2013-05-15  8:53     ` Brandon Invergo
@ 2013-05-15 18:04       ` Ludovic Courtès
  2013-06-30 21:40         ` Matthew Lien
  2013-05-16  7:29       ` Germán Arias
  1 sibling, 1 reply; 17+ messages in thread
From: Ludovic Courtès @ 2013-05-15 18:04 UTC (permalink / raw)
  To: Brandon Invergo; +Cc: gnu-system-discuss, Germán Arias, bug-guix

(Stripping Cc list.)

Brandon Invergo <brandon@invergo.net> skribis:

> Guix, on the other hand, is a full package manager that will eventually
> form the foundation of a GNU distribution.  It has far more features as
> a package manager, including some really novel ones that go above and
> beyond the usual package management functionality (better to let Ludovic
> explain).

Yes.  Basically Guix is two things: a package manager (like, say,
dpkg/APT), and a distribution.

The package manager provides the features tools like APT implement.
From a user’s viewpoint, in addition to what common package managers
implement, it supports nifty features, detailed at
<http://www.gnu.org/software/guix/manual/guix.html#Features>.

From a developer’s viewpoint, its functional approach simplifies
reasoning about package composition, and allows developers to actually
check that packages do build and work together (see
<http://www.gnu.org/software/guix/manual/guix.html#Introduction>.)
Also, it has a Scheme API that makes packaging relatively easy (see
<http://www.gnu.org/software/guix/manual/guix.html#Programming-Interface>).

> The Guix distribution will provide all of the software necessary to
> have a complete, bootable GNU system, including non-GNU packages.  It
> will also handle all the fun "under-the-hood" stuff like system
> configuration and initialization, etc.

Yes.  Currently the distro has ~400 packages, and can only be used atop
a running GNU/Linux system.  In that sense, it’s comparable to GSRC in
that it provides a way to install the latest versions of GNU packages
(though GSRC has more GNU packages, I think.)

But as Brandon notes, the longer-term goal is to build “the GNU System”.
Until now, the GNU Project has been providing many independent packages,
which have been integrated and delivered to final users by others.

In a way, this is great, because it’s a sign that the free software
ideals have expanded way beyond the GNU Project.

However, I believe it’s also detrimental to GNU in several ways.
Distros have been making compromises, in particular to software freedom,
that contradict GNU’s vision.  Integration of GNU software, and cohesion
among the various GNU packages has arguably suffered.  Distros have
contributed to a disconnection between users and developers of GNU
packages.  Distro branding has made GNU, and to some extent its
political message, much less visible to users.  Etc.

Having a GNU distro is an opportunity to fix these problems.  A stronger
GNU Project is good for individual GNU packages, and it’s good for
software freedom.

Let’s build that GNU System!  :-)

Ludo’.

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

* Re: GNU Guix 0.2 released
  2013-05-15  7:42       ` Ludovic Courtès
@ 2013-05-16  6:34         ` Germán Arias
  2013-05-16 16:37           ` Ludovic Courtès
  0 siblings, 1 reply; 17+ messages in thread
From: Germán Arias @ 2013-05-16  6:34 UTC (permalink / raw)
  To: ludo; +Cc: bug-guix

On 2013-05-15 01:42:05 -0600 ludo@gnu.org (Ludovic Courtès wrote:
> 
> A feature that you may find useful for the purpose of testing GNUstep is
> that several variants of the same package (for instance, GNUstep build
> with different options, or different versions of its dependencies) can
> coexist.  The system maintains a mapping between your package’s recipe
> and its build result, so you know exactly what you’re testing.

Interesting.

> 
> Anyway, I’ve also been thinking that it’d be great to have GNUstep
> packaged in Guix one of these days.  If you want to help with that, I’m
> happy to give a hand!  :-)

I have read the documentation and conceptually it seems easy. But I guess
the hard part is the requirements, right?. If I have time I will give a try.

Regards.
Germán.

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

* Re: GNU Guix 0.2 released
  2013-05-15  8:53     ` Brandon Invergo
  2013-05-15 18:04       ` Ludovic Courtès
@ 2013-05-16  7:29       ` Germán Arias
  1 sibling, 0 replies; 17+ messages in thread
From: Germán Arias @ 2013-05-16  7:29 UTC (permalink / raw)
  To: Brandon Invergo; +Cc: guile-user, bug-guix

On 2013-05-15 02:53:05 -0600 Brandon Invergo <brandon@invergo.net> wrote:

> Hi Germán,
> 
>> Currently I'm testing GSRC on my PC. So, my question is: What is the
>> difference between Guix and GSRC? Regards.
> 
> GSRC can be thought of as a up-to-date quarterly release of all GNU
> software. It automates the fetch/configure/build/install procedure and
> provides the occasional patch when necessary, making it easier to
> install a GNU package from source.  It has light package management
> features, such as dependency resolution, but it should not be thought of
> as a package manager. GSRC only provides GNU software so external
> dependencies must be installed separately by the user.
> 
> Guix, on the other hand, is a full package manager that will eventually
> form the foundation of a GNU distribution.  It has far more features as
> a package manager, including some really novel ones that go above and
> beyond the usual package management functionality (better to let Ludovic
> explain).  The Guix distribution will provide all of the software
> necessary to have a complete, bootable GNU system, including non-GNU
> packages.  It will also handle all the fun "under-the-hood" stuff like
> system configuration and initialization, etc.
> 
> Both can be used on top of an existing distro but when the Guix distro
> is ready, I will subjectively say that GSRC would be more appropriate
> for just installing a package or two on top of an existing system.
> 
> There is certainly some functional overlap, and this topic has come up
> before as a result, but there remains a conceptual distinction.  In
> fact, I've made changes to GSRC to reinforce this distinction
> (i.e. removing 3rd-party dependencies).
> 
> I think that just about sums it up but I welcome other comments. :)
> 
> Cheers,
> 
> Brandon
> 

Well I think that a system to easy install will be appreciated by the final
users. Especially if it helps with find/install the requirements. There are packages
like gnustep-gui or octave that can be succesfully installed with a lot of
missed functionalities if the user don't care about the recomended requirements.
And not all people out there that want use a gnu package are programmers. So
I think GSRC can help people in this way.

Regards.
Germán.

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

* Re: GNU Guix 0.2 released
  2013-05-16  6:34         ` Germán Arias
@ 2013-05-16 16:37           ` Ludovic Courtès
  2013-05-17  4:46             ` German Arias
  0 siblings, 1 reply; 17+ messages in thread
From: Ludovic Courtès @ 2013-05-16 16:37 UTC (permalink / raw)
  To: Germán Arias; +Cc: bug-guix

Germán Arias <german@xelalug.org> skribis:

> On 2013-05-15 01:42:05 -0600 ludo@gnu.org (Ludovic Courtès wrote:

[...]

>> Anyway, I’ve also been thinking that it’d be great to have GNUstep
>> packaged in Guix one of these days.  If you want to help with that, I’m
>> happy to give a hand!  :-)
>
> I have read the documentation and conceptually it seems easy. But I guess
> the hard part is the requirements, right?

It has a few dependencies, yes.  Let us know how it goes.

> If I have time I will give a try.

IIRC GNUstep packages don’t use the GNU build system (./configure &&
make), but rather gnustep-make, right?

If that is the case, a good way to help with GNUstep packaging would be
to implement a ‘gnustep-build-system’ embodying GNUstep’s build system
idioms.  That is a bit more involved, but I (or others here) can help.

Thanks,
Ludo’.

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

* Re: GNU Guix 0.2 released
  2013-05-16 16:37           ` Ludovic Courtès
@ 2013-05-17  4:46             ` German Arias
  2013-05-17 13:27               ` Ludovic Courtès
  0 siblings, 1 reply; 17+ messages in thread
From: German Arias @ 2013-05-17  4:46 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: bug-guix

2013/5/16, Ludovic Courtès <ludo@gnu.org>:
>
> IIRC GNUstep packages don’t use the GNU build system (./configure &&
> make), but rather gnustep-make, right?

The installation of gnustep packages (make, base, gui and back) is in the normal
way: ./configure, make & make install. The difference is that the last three
packages use gnustep-make instead of GNU make. But depending of the
configuration of gnustep's enviroment, the end user doesn't notice any
difference.
Because the name of gnustep-make tool is also "make". I don't know how the
system can deal two tools named "make". But I think the trick is in
the fact that
gnustep's packages use GNUmakefiles instead of makefiles.

The only difference is that if the system don't know about the gnustep
tools. The
user will need run the gnustep script, something like ".
/usr/.../GNUstep.sh", to set
up the variables of gnustep environment.

The rest of packages is other history. Many of them only use: make &
make install.
Here "make" is "gnustep-make", And with the apps made with gnustep, as far as I
remember, only GWorkspace uses ./configure.

>
> If that is the case, a good way to help with GNUstep packaging would be
> to implement a ‘gnustep-build-system’ embodying GNUstep’s build system
> idioms.  That is a bit more involved, but I (or others here) can help.
>
> Thanks,
> Ludo’.
>

Germán.

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

* Re: GNU Guix 0.2 released
  2013-05-17  4:46             ` German Arias
@ 2013-05-17 13:27               ` Ludovic Courtès
  2013-05-17 22:58                 ` Germán Arias
  0 siblings, 1 reply; 17+ messages in thread
From: Ludovic Courtès @ 2013-05-17 13:27 UTC (permalink / raw)
  To: German Arias; +Cc: bug-guix

German Arias <german@xelalug.org> skribis:

> 2013/5/16, Ludovic Courtès <ludo@gnu.org>:
>>
>> IIRC GNUstep packages don’t use the GNU build system (./configure &&
>> make), but rather gnustep-make, right?
>
> The installation of gnustep packages (make, base, gui and back) is in the normal
> way: ./configure, make & make install. The difference is that the last three
> packages use gnustep-make instead of GNU make. But depending of the
> configuration of gnustep's enviroment, the end user doesn't notice any
> difference.

OK.

> Because the name of gnustep-make tool is also "make". I don't know how the
> system can deal two tools named "make". But I think the trick is in
> the fact that
> gnustep's packages use GNUmakefiles instead of makefiles.

The two ‘make’ programs shouldn’t be a problem.  ‘gnustep-make’ just
needs to be added as an input, and it will appear before GNU make in
$PATH.

> The only difference is that if the system don't know about the gnustep
> tools. The
> user will need run the gnustep script, something like ".
> /usr/.../GNUstep.sh", to set
> up the variables of gnustep environment.

What do you mean with “doesn’t know about the GNUstep tools”?  When is
it necessary to source that script?  What are the variables to be
defined?

Guix has a mechanism to automatically define search path variables:

  http://lists.gnu.org/archive/html/bug-guix/2013-03/msg00158.html

Would that be of any help?

> The rest of packages is other history. Many of them only use: make &
> make install.
> Here "make" is "gnustep-make",

For those, it may make sense to implement a specific build system that
automatically adds ‘gnustep-make’ as an input and runs the right
commands.

Thanks,
Ludo’.

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

* Re: GNU Guix 0.2 released
  2013-05-17 13:27               ` Ludovic Courtès
@ 2013-05-17 22:58                 ` Germán Arias
  2013-05-18 20:54                   ` Ludovic Courtès
  0 siblings, 1 reply; 17+ messages in thread
From: Germán Arias @ 2013-05-17 22:58 UTC (permalink / raw)
  To: ludo; +Cc: bug-guix

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

On 2013-05-17 07:27:10 -0600 ludo@gnu.org (Ludovic Courtès wrote:
[snip]
> 
>> The only difference is that if the system don't know about the gnustep
>> tools. The
>> user will need run the gnustep script, something like ".
>> /usr/.../GNUstep.sh", to set
>> up the variables of gnustep environment.
> 
> What do you mean with “doesn’t know about the GNUstep tools”?  When is
> it necessary to source that script?  What are the variables to be
> defined?

GNUstep can be installed using differents layouts. By default gnustep is
installed using the FHS layout. But one popular layout is "gnustep", this
install all in "/usr/GNUstep". Since this isn't an standard path to install
libraries, headers and tools, the user need add this path or run the
gnustep script at session startup or run it when he will use the
gnustep-make tool.

> 
> Guix has a mechanism to automatically define search path variables:
> 
>   http://lists.gnu.org/archive/html/bug-guix/2013-03/msg00158.html
> 
> Would that be of any help?

I think it can help. Although I'm not an expert in what does exactly
the gnustep script. I send you it attached if you want take a look.
Anyway, installing gnustep with FHS layout, avoids the use of
this script.

> 
>> The rest of packages is other history. Many of them only use: make &
>> make install.
>> Here "make" is "gnustep-make",
> 
> For those, it may make sense to implement a specific build system that
> automatically adds ‘gnustep-make’ as an input and runs the right
> commands.
> 
> Thanks,
> Ludo’.
> 

<GNUstep.sh>



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: GNUstep.sh --]
[-- Type: text/x-sh; name="GNUstep.sh", Size: 22607 bytes --]

#   This file must be sourced inside (ba)sh using: .
#
#   GNUstep.sh.  Generated from GNUstep.sh.in by configure.
#
#   Shell initialization for the GNUstep environment.
#
#   Copyright (C) 1997-2008 Free Software Foundation, Inc.
#
#   Author:  Scott Christley <scottc@net-community.com>
#   Author:  Adam Fedor <fedor@gnu.org>
#   Author:  Richard Frith-Macdonald <rfm@gnu.org>
#   Author:  Nicola Pero <nicola.pero@meta-innovation.com>
#
#   This file is part of the GNUstep Makefile Package.
#
#   This library 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.
#   
#   You should have received a copy of the GNU General Public
#   License along with this library; see the file COPYING.
#   If not, write to the Free Software Foundation,
#   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#

# Warning - this shell script is delicate, because it is sourced by
# using . rather than simply executed.  It is sourced because that is
# the only way to change the shell variables in the calling
# environment.
#
# Sourcing makes the shell script more delicate for the following reasons:
#
#  * temporary variables are automatically set in the calling
#  environment!  WORKAROUND: we need to unset all them after using
#  them to avoid polluting the calling environment;
#
#  * not only the exit value of the script, but the exit value of each
#  command we execute, might be interpreted by the calling
#  environment.  Typically, the calling environment might be using the
#  shell errexit option ('set -e') in bash parlance, which causes the
#  shell to exit if any command returns an error value.  If this were
#  a normal script, this option would mean that the shell would exit
#  if the return value of the whole script were an error value; but
#  because we are sourced, it is as all the commands in this script
#  were executed directly in the calling environment, so *all* values
#  returned by *all* commands must be non-error.  [this all typically
#  happens in rpm builds, where scripts are run with the errexit
#  option so that errors in scripts abort the build, and now if a
#  script sources GNUstep.sh, then we are exactly in this situation -
#  if any command inside GNUstep.sh returns an error value (even if
#  GNUstep.sh as a whole would be happy and return succes), the whole
#  rpm build process aborts!]. WORKAROUND: we must make sure all
#  commands return success - last resorts hacks like 'command || :'
#  which always returns success whatever command returns.
#

# If we're running in zsh (auch!) make sure we're using -y
# (SH_WORD_SPLIT) else our path manipulations won't work.
if [ -n "$ZSH_VERSION" ]; then

  # If -y is not already set, set it and remember that we
  # need to set it back to what it was at the end.
  if ( setopt | grep shwordsplit > /dev/null ); then :; else
    setopt shwordsplit
    GS_ZSH_NEED_TO_RESTORE_SET=yes
  fi

fi

# When this is set to 'yes', strict gnustep-make v2 compatibility mode
# is turned on.
GNUSTEP_MAKE_STRICT_V2_MODE=no

#
# Read our configuration files
#

# Determine the location of the system configuration file
if [ -z "$GNUSTEP_CONFIG_FILE" ]; then
  GNUSTEP_CONFIG_FILE=/etc/GNUstep/GNUstep.conf
else
  # Remember that the variable was already set in the environment, and
  # preserve it at the end of the script.  Otherwise we'll unset it to
  # avoid polluting the environment with our own internal variables.
  GNUSTEP_KEEP_CONFIG_FILE=yes
fi

# Determine the location of the user configuration file
if [ -z "$GNUSTEP_USER_CONFIG_FILE" ]; then
  GNUSTEP_USER_CONFIG_FILE=.GNUstep.conf
else
  GNUSTEP_KEEP_USER_CONFIG_FILE=yes
fi

# Read the system configuration file
if [ -f "$GNUSTEP_CONFIG_FILE" ]; then
  . "$GNUSTEP_CONFIG_FILE"
fi

# FIXME: determining GNUSTEP_HOME
GNUSTEP_HOME=~

# Read the user configuration file ... unless it is disabled (ie, set
# to an empty string)
if [ -n "$GNUSTEP_USER_CONFIG_FILE" ]; then
  case "$GNUSTEP_USER_CONFIG_FILE" in 
    /*) # An absolute path
        if [ -f "$GNUSTEP_USER_CONFIG_FILE" ]; then
          . "$GNUSTEP_USER_CONFIG_FILE"
        fi;;
     *) # Something else
        if [ -f "$GNUSTEP_HOME/$GNUSTEP_USER_CONFIG_FILE" ]; then
          . "$GNUSTEP_HOME/$GNUSTEP_USER_CONFIG_FILE"
        fi;;
  esac
fi

# Now, set any essential variable (that is not already set) to the
# built-in values.

if [ "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
  # In strict v2 mode, clean these obsolete variables in case the
  # config file contains them.  They shouldn't exist so unsetting
  # them can't harm.
  unset GNUSTEP_SYSTEM_ROOT
  unset GNUSTEP_LOCAL_ROOT
  unset GNUSTEP_NETWORK_ROOT
else
  # This is deprecated and will be removed
  if [ -z "$GNUSTEP_SYSTEM_ROOT" ]; then
    GNUSTEP_SYSTEM_ROOT=/usr/GNUstep/System
  fi

  # This is deprecated and will be removed
  if [ -z "$GNUSTEP_LOCAL_ROOT" ]; then
    GNUSTEP_LOCAL_ROOT=/usr/GNUstep/Local
  fi

  # This is deprecated and will be removed
  if [ -z "$GNUSTEP_NETWORK_ROOT" ]; then
    GNUSTEP_NETWORK_ROOT=/usr/GNUstep/Network
  fi

  export GNUSTEP_SYSTEM_ROOT GNUSTEP_LOCAL_ROOT GNUSTEP_NETWORK_ROOT
fi

# GNUSTEP_FLATTENED is obsolete, please use GNUSTEP_IS_FLATTENED
# instead
if [ "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
  unset GNUSTEP_FLATTENED
else
  GNUSTEP_FLATTENED=yes
  export GNUSTEP_FLATTENED
fi
GNUSTEP_IS_FLATTENED=yes
if [ -z "$LIBRARY_COMBO" ]; then
  LIBRARY_COMBO=gnu-gnu-gnu
fi
if [ ! "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
  # Having these variables in the environment is deprecated and will
  # be removed.  But for now, if we are not in strict gnustep-make v2
  # mode, then we always export these variables for
  # backwards-compatibility.
  export GNUSTEP_IS_FLATTENED LIBRARY_COMBO

  # Else they are only exported if GNUSTEP_SH_EXPORT_ALL_VARIABLES
  # is defined - at the end of the script.
fi

if [ -z "$GNUSTEP_MAKEFILES" ]; then
  GNUSTEP_MAKEFILES=/usr/GNUstep/System/Library/Makefiles
fi
export GNUSTEP_MAKEFILES


if [ "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
  # Make sure this is never set in gnustep-make v2 strict mode; it
  # might have been set in the config file.
  unset GNUSTEP_USER_DIR
  unset GNUSTEP_USER_ROOT
else
  # GNUSTEP_USER_DIR is deprecated and will be removed
  if [ -z "$GNUSTEP_USER_DIR" ]; then
    GNUSTEP_USER_DIR=GNUstep
  fi

  #
  # Set GNUSTEP_USER_ROOT which is the variable used in practice.
  # GNUSTEP_USER_ROOT is deprecated and will be removed
  #
  case "$GNUSTEP_USER_DIR" in 
    /*) # An absolute path
        GNUSTEP_USER_ROOT="$GNUSTEP_USER_DIR";;
     *) # Something else
        GNUSTEP_USER_ROOT="$GNUSTEP_HOME/$GNUSTEP_USER_DIR";;
  esac

  # This variable was used to set up GNUSTEP_USER_ROOT which is the one
  # that is actually exported; we can now drop it from the environment.
  unset GNUSTEP_USER_DIR

  # This is deprecated and will be removed
  export GNUSTEP_USER_ROOT
fi

# If multi-platform support is disabled, just use the hardcoded cpu,
# vendor and os determined when gnustep-make was configured.  The
# reason using the hardcoded ones might be better is that config.guess
# and similar scripts might even require compiling test files to
# determine the platform - but then you can't source GNUstep.sh
# without having gcc, binutils, libc6-dev installed.  Which can be a
# problem for end-users who are not developers and have no development
# tools installed.  To prevent this problem, unless we were configured
# to determine the platform at run time, by default we use the
# hardcoded values of GNUSTEP_HOST*.
if [ -z "" ]; then
  GNUSTEP_HOST=i686-pc-linux-gnu
  GNUSTEP_HOST_CPU=ix86
  GNUSTEP_HOST_VENDOR=pc
  GNUSTEP_HOST_OS=linux-gnu
fi

#
# Determine the host information
#
if [ -z "$GNUSTEP_HOST" ]; then
  # Not all shells (e.g. /bin/sh on FreeBSD < 4.0 or ash) have pushd/popd
  tmpdir=`pwd`; cd /tmp
  GNUSTEP_HOST=`$GNUSTEP_MAKEFILES/config.guess`
  GNUSTEP_HOST=`$GNUSTEP_MAKEFILES/config.sub $GNUSTEP_HOST`
  cd "$tmpdir"
  unset tmpdir
fi

if [ -z "$GNUSTEP_HOST_CPU" ]; then
  GNUSTEP_HOST_CPU=`$GNUSTEP_MAKEFILES/cpu.sh $GNUSTEP_HOST`
  GNUSTEP_HOST_CPU=`$GNUSTEP_MAKEFILES/clean_cpu.sh $GNUSTEP_HOST_CPU`
fi

if [ -z "$GNUSTEP_HOST_VENDOR" ]; then
  GNUSTEP_HOST_VENDOR=`$GNUSTEP_MAKEFILES/vendor.sh $GNUSTEP_HOST`
  GNUSTEP_HOST_VENDOR=`$GNUSTEP_MAKEFILES/clean_vendor.sh $GNUSTEP_HOST_VENDOR`
fi

if [ -z "$GNUSTEP_HOST_OS" ]; then 
  GNUSTEP_HOST_OS=`$GNUSTEP_MAKEFILES/os.sh $GNUSTEP_HOST`
  GNUSTEP_HOST_OS=`$GNUSTEP_MAKEFILES/clean_os.sh $GNUSTEP_HOST_OS`
fi

if [ ! "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
  # These variables are deprecated for usage in shell scripts; you
  # need to use gnustep-config to get them in a shell script.
  export GNUSTEP_HOST GNUSTEP_HOST_CPU GNUSTEP_HOST_VENDOR GNUSTEP_HOST_OS

  # Even in strict gnustep-make v2 mode, we export them at the end
  # if explicitly requested to export all variables.
fi

# Now load in all the remaining paths
. $GNUSTEP_MAKEFILES/filesystem.sh

# No longer needed
unset GNUSTEP_HOME

# Determine if the paths look like Windows paths that need fixing
fixup_paths=no
# Here we want to use `...` but the only portable way to use it when
# there are "..." inside the expression (ie, it's actually
# `..."..."...`) seems to be to use it in variable assignments.  So we
# use a temporary variable and assign the result of `...` to it
path_check=`echo "$GNUSTEP_MAKEFILES" | sed 's|^[a-zA-Z]:/.*$||'`
if [ -z "$path_check" ]; then
  fixup_paths=yes
fi
unset path_check

if [ "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
  unset GNUSTEP_PATHLIST
else
  # GNUSTEP_PATHLIST is deprecated and will be removed.
  #
  # GNUSTEP_PATHLIST is like an abstract path-like shell variable, which
  # can be used to search the gnustep directories.
  #
  if [ -z "$GNUSTEP_PATHLIST" ]; then

   GNUSTEP_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_ROOT" "$GNUSTEP_LOCAL_ROOT" "$GNUSTEP_NETWORK_ROOT" "$GNUSTEP_SYSTEM_ROOT" $fixup_paths`
   export GNUSTEP_PATHLIST
  fi
fi

#
# Add path to Tools to PATH
#
# NB: functionally, print_unique_pathlist.sh is mostly used to do the
# fixup_paths thing, since duplicated paths will automatically be
# checked below when we add them to the PATH.  On the other hand,
# removing duplicates later can be expensive since we do a echo+grep
# for each duplicate.  When there are many duplicates it's faster to
# use print_unique_pathlist.sh first to remove them and skip the
# echos+greps later.
GNUSTEP_TOOLS_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_TOOLS" "$GNUSTEP_LOCAL_TOOLS" "$GNUSTEP_NETWORK_TOOLS" "$GNUSTEP_SYSTEM_TOOLS" $fixup_paths`

# Now, we check the paths in GNUSTEP_*_ADMIN_TOOLS.  These paths
# should only be used by Administrators -- normal users don't have
# enough powers to use those tools to do useful things.  Our test for
# being an 'Administrator' is that anyone who can write to an Admin
# directory can be considered powerful enough to use those tools.

# FIXME: Unfortunately, this doesn't work if the Admin directory
# is mounted read-only, so a better test is required!

# So we examine GNUSTEP_*_ADMIN_TOOLS; if we find any path in that
# list that exists and that we can write to, we add it to our PATH.
for dir in "$GNUSTEP_SYSTEM_ADMIN_TOOLS" "$GNUSTEP_NETWORK_ADMIN_TOOLS" "$GNUSTEP_LOCAL_ADMIN_TOOLS" "$GNUSTEP_USER_ADMIN_TOOLS"; do
  if [ -d "$dir"  -a  -w "$dir" ]; then
    # Only add the new dir if it's not already in GNUSTEP_TOOLS_PATHLIST
    if (echo ":${GNUSTEP_TOOLS_PATHLIST}:" \
      |grep -v ":${dir}:" >/dev/null); then
      GNUSTEP_TOOLS_PATHLIST="$dir:$GNUSTEP_TOOLS_PATHLIST"
    fi
  fi
done

#
# And now, we put the results into PATH
#
old_IFS="$IFS"
IFS=:
for dir in $GNUSTEP_TOOLS_PATHLIST; do

  # Prepare the path_fragment
  if [ "$GNUSTEP_IS_FLATTENED" = "no" ]; then
    path_fragment="$dir:$dir/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}/${LIBRARY_COMBO}:$dir/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}"
  else
    path_fragment="$dir"
  fi

  # Add it to PATH, but only if not already there (eg, typically /usr/bin is already there)
  if [ -z "$PATH" ]; then
    PATH="$path_fragment"
  else
    if ( echo ":${PATH}:"\
      |grep -v ":${path_fragment}:" >/dev/null ); then
      PATH="${path_fragment}:${PATH}"
    fi
  fi

done
IFS="$old_IFS"
unset old_IFS
unset dir
unset path_fragment
unset GNUSTEP_TOOLS_PATHLIST
export PATH

# Determine the library paths
GNUSTEP_LIBRARIES_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARIES" "$GNUSTEP_LOCAL_LIBRARIES" "$GNUSTEP_NETWORK_LIBRARIES" "$GNUSTEP_SYSTEM_LIBRARIES" $fixup_paths`

old_IFS="$IFS"
IFS=:
  for dir in $GNUSTEP_LIBRARIES_PATHLIST; do

    # prepare the path_fragment for libraries and this dir
    if [ "$GNUSTEP_IS_FLATTENED" = "yes" ]; then
      path_fragment="$dir"
    else
      path_fragment="$dir/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO:$dir/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS"
    fi

    # Append the path_fragment to lib_paths ... in a different way,
    # depending on the machine we're on.
    case "$GNUSTEP_HOST_OS" in

      *nextstep4* | *darwin*)
        if [ -z "$DYLD_LIBRARY_PATH" ]; then
          DYLD_LIBRARY_PATH="$path_fragment"
        else
          if ( echo ":${DYLD_LIBRARY_PATH}:"\
	    |grep -v ":${path_fragment}:" >/dev/null ); then
	    DYLD_LIBRARY_PATH="$path_fragment:$DYLD_LIBRARY_PATH"
          fi
        fi
        export DYLD_LIBRARY_PATH;;

      *hpux*)
        if [ -z "$SHLIB_PATH" ]; then
          SHLIB_PATH="$path_fragment"
        else
          if ( echo ":${SHLIB_PATH}:"\
	    |grep -v ":${path_fragment}:" >/dev/null ); then
	    SHLIB_PATH="$path_fragment:$SHLIB_PATH"
          fi
        fi
        export SHLIB_PATH;

        if [ -z "$LD_LIBRARY_PATH" ]; then
          LD_LIBRARY_PATH="$path_fragment"
        else
          if ( echo ":${LD_LIBRARY_PATH}:"\
	    |grep -v ":${path_fragment}:" >/dev/null ); then
	    LD_LIBRARY_PATH="$path_fragment:$LD_LIBRARY_PATH"
          fi
        fi
        export LD_LIBRARY_PATH;;

      *)
        if [ -z "$LD_LIBRARY_PATH" ]; then
          LD_LIBRARY_PATH="$path_fragment"
        else
          if ( echo ":${LD_LIBRARY_PATH}:"\
	    |grep -v ":${path_fragment}:" >/dev/null ); then
	    LD_LIBRARY_PATH="$path_fragment:$LD_LIBRARY_PATH"
          fi
        fi
        export LD_LIBRARY_PATH;;
    esac
  done
IFS="$old_IFS"
unset old_IFS
unset dir
unset path_fragment

unset GNUSTEP_LIBRARIES_PATHLIST


# Determine the framework paths - but only on Darwin since it's the
# only platform where this is of any use.
case "$GNUSTEP_HOST_OS" in

  *darwin*)
    GNUSTEP_FRAMEWORKS_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARY/Frameworks" "$GNUSTEP_LOCAL_LIBRARY/Frameworks" "$GNUSTEP_NETWORK_LIBRARY/Frameworks" "$GNUSTEP_SYSTEM_LIBRARY/Frameworks" $fixup_paths`

    old_IFS="$IFS"
    IFS=:
    for dir in $GNUSTEP_FRAMEWORKS_PATHLIST; do

      # prepare the path_fragment for frameworks
      path_fragment="$dir"

# The code below has been temporarily removed, because...
# Frameworks in GNUstep-make are supported by creating a link like
# 
#   Libraries/libMyFramework.dylib ->
#      Frameworks/MyFramework.framework/Versions/Current/libMyFramework.dylib,
#
# to mitigate the fact that FSF GCC does not support a -framework flag.
#
# On Darwin, however, we partially emulate -framework by setting the
# "install_name" to the framework name during linking. The dynamic
# linker (dyld) is smart enough to find the framework under this name,
# but only if DYLD_FRAMEWORK_PATH is set (unless we set the
# "install_name" to an absolute path, which we don't). We'd really like
# to fully support -framework, though.
#
# Use otool -L MyApplication.app/MyApplication, for instance, to see
# how the shared libraries/frameworks are linked.
#
#    if [ "$LIBRARY_COMBO" = "apple-apple-apple" -o \
#         "$LIBRARY_COMBO" = "apple" ]; then
    
      if [ -z "$DYLD_FRAMEWORK_PATH" ]; then
        DYLD_FRAMEWORK_PATH="$path_fragment"
      else
        if ( echo ":${DYLD_FRAMEWORK_PATH}:"\
	  |grep -v ":${path_fragment}:" >/dev/null ); then
          DYLD_FRAMEWORK_PATH="$path_fragment:$DYLD_FRAMEWORK_PATH"
        fi
      fi
      export DYLD_FRAMEWORK_PATH
    done

    IFS="$old_IFS"
    unset old_IFS
    unset dir
    unset path_fragment

    unset GNUSTEP_FRAMEWORKS_PATHLIST
    ;;

  *)
    ;;
esac

#
# Setup Java CLASSPATH and Guile GUILE_LOAD_PATH
#
GNUSTEP_LIBRARY_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARY" "$GNUSTEP_LOCAL_LIBRARY" "$GNUSTEP_NETWORK_LIBRARY" "$GNUSTEP_SYSTEM_LIBRARY" $fixup_paths`

old_IFS="$IFS"
IFS=:
for dir in $GNUSTEP_LIBRARY_PATHLIST; do

  path_fragment="$dir/Libraries/Java"
  if [ -z "$CLASSPATH" ]; then
    CLASSPATH="$path_fragment"
  else
    if ( echo ":${CLASSPATH}:"\
      |grep -v ":${path_fragment}:" >/dev/null ); then
      CLASSPATH="$path_fragment:$CLASSPATH"
    fi
  fi

  path_fragment="$dir/Libraries/Guile"
  if [ -z "$GUILE_LOAD_PATH" ]; then
    GUILE_LOAD_PATH="$path_fragment"
  else
    if ( echo ":${GUILE_LOAD_PATH}:"\
      |grep -v ":${path_fragment}:" >/dev/null ); then
      GUILE_LOAD_PATH="$path_fragment:$GUILE_LOAD_PATH"
    fi
  fi

done
IFS="$old_IFS"
unset old_IFS
unset dir
unset path_fragment
unset GNUSTEP_LIBRARY_PATHLIST
export CLASSPATH
export GUILE_LOAD_PATH

#
# Make sure info files, that we install by default into
# xxx/Library/Documentation/info, are found by the info browsing
# programs.  To get this effect, we add those paths to INFOPATH.
#
GNUSTEP_INFO_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_DOC_INFO" "$GNUSTEP_LOCAL_DOC_INFO" "$GNUSTEP_NETWORK_DOC_INFO" "$GNUSTEP_SYSTEM_DOC_INFO" $fixup_paths`
old_IFS="$IFS"
IFS=:
for dir in $GNUSTEP_INFO_PATHLIST; do

  if [ -z "$INFOPATH" ]; then
    # The ':' at the end means to use the built-in paths after searching
    # the INFOPATH we provide.
    INFOPATH="${dir}:"
  else
    if ( echo ":${INFOPATH}:"\
      |grep -v ":${dir}:" >/dev/null ); then
      INFOPATH="$INFOPATH:${dir}:"
    fi
  fi
done
IFS="$old_IFS"
unset old_IFS
unset dir
unset GNUSTEP_INFO_PATHLIST
export INFOPATH

#
# Clean up the environment by removing the filesystem variables.  Do
# it unless we were explicitly requested not to clean it up!  Mostly
# gnustep-config will request that the environment is not cleaned up,
# so it can print out all of the GNUstep variables.
#
if [ -n "$GNUSTEP_SH_EXPORT_ALL_VARIABLES" ]; then
  export GNUSTEP_MAKE_STRICT_V2_MODE

  unset GNUSTEP_KEEP_CONFIG_FILE GNUSTEP_KEEP_USER_CONFIG_FILE

  export GNUSTEP_CONFIG_FILE GNUSTEP_USER_CONFIG_FILE

  export GNUSTEP_USER_DEFAULTS_DIR

  # Always export these variables even if in strict gnustep-make v2
  # mode, so that for example gnustep-config can determine them.
  export GNUSTEP_IS_FLATTENED LIBRARY_COMBO
  export GNUSTEP_HOST GNUSTEP_HOST_CPU GNUSTEP_HOST_VENDOR GNUSTEP_HOST_OS

  export GNUSTEP_SYSTEM_APPS GNUSTEP_SYSTEM_ADMIN_APPS GNUSTEP_SYSTEM_WEB_APPS GNUSTEP_SYSTEM_TOOLS GNUSTEP_SYSTEM_ADMIN_TOOLS 
  export GNUSTEP_SYSTEM_LIBRARY GNUSTEP_SYSTEM_HEADERS GNUSTEP_SYSTEM_LIBRARIES
  export GNUSTEP_SYSTEM_DOC GNUSTEP_SYSTEM_DOC_MAN GNUSTEP_SYSTEM_DOC_INFO

  export GNUSTEP_NETWORK_APPS GNUSTEP_NETWORK_ADMIN_APPS GNUSTEP_NETWORK_WEB_APPS GNUSTEP_NETWORK_TOOLS GNUSTEP_NETWORK_ADMIN_TOOLS 
  export GNUSTEP_NETWORK_LIBRARY GNUSTEP_NETWORK_HEADERS GNUSTEP_NETWORK_LIBRARIES
  export GNUSTEP_NETWORK_DOC GNUSTEP_NETWORK_DOC_MAN GNUSTEP_NETWORK_DOC_INFO

  export GNUSTEP_LOCAL_APPS GNUSTEP_LOCAL_ADMIN_APPS GNUSTEP_LOCAL_WEB_APPS GNUSTEP_LOCAL_TOOLS GNUSTEP_LOCAL_ADMIN_TOOLS 
  export GNUSTEP_LOCAL_LIBRARY GNUSTEP_LOCAL_HEADERS GNUSTEP_LOCAL_LIBRARIES
  export GNUSTEP_LOCAL_DOC GNUSTEP_LOCAL_DOC_MAN GNUSTEP_LOCAL_DOC_INFO

  export GNUSTEP_USER_APPS GNUSTEP_USER_ADMIN_APPS GNUSTEP_USER_WEB_APPS GNUSTEP_USER_TOOLS GNUSTEP_USER_ADMIN_TOOLS 
  export GNUSTEP_USER_LIBRARY GNUSTEP_USER_HEADERS GNUSTEP_USER_LIBRARIES
  export GNUSTEP_USER_DOC GNUSTEP_USER_DOC_MAN GNUSTEP_USER_DOC_INFO

  export GNUSTEP_SYSTEM_USERS_DIR GNUSTEP_LOCAL_USERS_DIR GNUSTEP_NETWORK_USERS_DIR
else
  if [ "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
    unset GNUSTEP_IS_FLATTENED
    unset LIBRARY_COMBO
    unset GNUSTEP_HOST
    unset GNUSTEP_HOST_CPU
    unset GNUSTEP_HOST_VENDOR
    unset GNUSTEP_HOST_OS
  fi

  unset GNUSTEP_MAKE_STRICT_V2_MODE

  # Unset these variables but only if we set them internally; keep
  # them if they were already in the environment.
  if [ -z "$GNUSTEP_KEEP_CONFIG_FILE" ]; then
    unset GNUSTEP_CONFIG_FILE
  fi
  unset GNUSTEP_KEEP_CONFIG_FILE 

  if [ -z "$GNUSTEP_KEEP_USER_CONFIG_FILE" ]; then
    unset GNUSTEP_USER_CONFIG_FILE
  fi
  unset GNUSTEP_KEEP_USER_CONFIG_FILE

  # Always unset these variables
  unset GNUSTEP_USER_DEFAULTS_DIR

  unset GNUSTEP_SYSTEM_APPS 
  unset GNUSTEP_SYSTEM_ADMIN_APPS 
  unset GNUSTEP_SYSTEM_WEB_APPS 
  unset GNUSTEP_SYSTEM_TOOLS 
  unset GNUSTEP_SYSTEM_ADMIN_TOOLS 
  unset GNUSTEP_SYSTEM_LIBRARY
  unset GNUSTEP_SYSTEM_HEADERS 
  unset GNUSTEP_SYSTEM_LIBRARIES 
  unset GNUSTEP_SYSTEM_DOC 
  unset GNUSTEP_SYSTEM_DOC_MAN
  unset GNUSTEP_SYSTEM_DOC_INFO

  unset GNUSTEP_NETWORK_APPS 
  unset GNUSTEP_NETWORK_ADMIN_APPS 
  unset GNUSTEP_NETWORK_WEB_APPS 
  unset GNUSTEP_NETWORK_TOOLS 
  unset GNUSTEP_NETWORK_ADMIN_TOOLS 
  unset GNUSTEP_NETWORK_LIBRARY
  unset GNUSTEP_NETWORK_HEADERS 
  unset GNUSTEP_NETWORK_LIBRARIES 
  unset GNUSTEP_NETWORK_DOC 
  unset GNUSTEP_NETWORK_DOC_MAN
  unset GNUSTEP_NETWORK_DOC_INFO

  unset GNUSTEP_LOCAL_APPS 
  unset GNUSTEP_LOCAL_ADMIN_APPS 
  unset GNUSTEP_LOCAL_WEB_APPS 
  unset GNUSTEP_LOCAL_TOOLS 
  unset GNUSTEP_LOCAL_ADMIN_TOOLS 
  unset GNUSTEP_LOCAL_LIBRARY
  unset GNUSTEP_LOCAL_HEADERS 
  unset GNUSTEP_LOCAL_LIBRARIES 
  unset GNUSTEP_LOCAL_DOC 
  unset GNUSTEP_LOCAL_DOC_MAN
  unset GNUSTEP_LOCAL_DOC_INFO

  unset GNUSTEP_USER_APPS 
  unset GNUSTEP_USER_ADMIN_APPS 
  unset GNUSTEP_USER_WEB_APPS 
  unset GNUSTEP_USER_TOOLS 
  unset GNUSTEP_USER_ADMIN_TOOLS 
  unset GNUSTEP_USER_LIBRARY
  unset GNUSTEP_USER_HEADERS 
  unset GNUSTEP_USER_LIBRARIES 
  unset GNUSTEP_USER_DOC 
  unset GNUSTEP_USER_DOC_MAN
  unset GNUSTEP_USER_DOC_INFO

  unset GNUSTEP_SYSTEM_USERS_DIR
  unset GNUSTEP_LOCAL_USERS_DIR
  unset GNUSTEP_NETWORK_USERS_DIR
fi

if [ -n "$GS_ZSH_NEED_TO_RESTORE_SET" ]; then
  unsetopt shwordsplit
fi
# EOF

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

* Re: GNU Guix 0.2 released
  2013-05-17 22:58                 ` Germán Arias
@ 2013-05-18 20:54                   ` Ludovic Courtès
  2013-05-20  5:36                     ` Germán Arias
  0 siblings, 1 reply; 17+ messages in thread
From: Ludovic Courtès @ 2013-05-18 20:54 UTC (permalink / raw)
  To: Germán Arias; +Cc: bug-guix

Germán Arias <german@xelalug.org> skribis:

> On 2013-05-17 07:27:10 -0600 ludo@gnu.org (Ludovic Courtès wrote:
> [snip]
>> 
>>> The only difference is that if the system don't know about the gnustep
>>> tools. The
>>> user will need run the gnustep script, something like ".
>>> /usr/.../GNUstep.sh", to set
>>> up the variables of gnustep environment.
>> 
>> What do you mean with “doesn’t know about the GNUstep tools”?  When is
>> it necessary to source that script?  What are the variables to be
>> defined?
>
> GNUstep can be installed using differents layouts. By default gnustep is
> installed using the FHS layout. But one popular layout is "gnustep", this
> install all in "/usr/GNUstep". Since this isn't an standard path to install
> libraries, headers and tools, the user need add this path or run the
> gnustep script at session startup or run it when he will use the
> gnustep-make tool.

OK.  As you may have seen, Guix installs each package in a directory of
its own (like GNU Stow, if that’s more familiar).  This is why Guix
already has the necessary infrastructure to set search path environment
variables like CPATH and LIBRARY_PATH (GCC’s search paths for headers
and libraries).

I guess GNUstep packages wouldn’t mind being installed each in their own
directory, provided the relevant search path environment variables are
set, right?

>> Guix has a mechanism to automatically define search path variables:
>> 
>>   http://lists.gnu.org/archive/html/bug-guix/2013-03/msg00158.html
>> 
>> Would that be of any help?
>
> I think it can help. Although I'm not an expert in what does exactly
> the gnustep script. I send you it attached if you want take a look.
> Anyway, installing gnustep with FHS layout, avoids the use of
> this script.

Well, it’s a lengthy script, but it seems that one of the important
variables is GNUSTEP_SYSTEM_ROOT, and perhaps
GNUSTEP_{LIBRARIES_,TOOLS_,}PATHLIST.

I guess we’ll need your GNUstep expertise to sort this out.  :-)

Ludo’.

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

* Re: GNU Guix 0.2 released
  2013-05-18 20:54                   ` Ludovic Courtès
@ 2013-05-20  5:36                     ` Germán Arias
  0 siblings, 0 replies; 17+ messages in thread
From: Germán Arias @ 2013-05-20  5:36 UTC (permalink / raw)
  To: ludo; +Cc: bug-guix

On 2013-05-18 14:54:56 -0600 ludo@gnu.org (Ludovic Courtès wrote:

[snip]
> 
> I guess GNUstep packages wouldn’t mind being installed each in their own
> directory, provided the relevant search path environment variables are
> set, right?
>

Right.
 
[snip]
> 
> Well, it’s a lengthy script, but it seems that one of the important
> variables is GNUSTEP_SYSTEM_ROOT, and perhaps
> GNUSTEP_{LIBRARIES_,TOOLS_,}PATHLIST.
> 
> I guess we’ll need your GNUstep expertise to sort this out.  :-)
> 
> Ludo’.
>

First I will familiarize myself with Guix. I'll tell you how it goes.

Regards.

Germán

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

* Re: GNU Guix 0.2 released
  2013-05-15 18:04       ` Ludovic Courtès
@ 2013-06-30 21:40         ` Matthew Lien
  2013-06-30 22:40           ` Ludovic Courtès
  0 siblings, 1 reply; 17+ messages in thread
From: Matthew Lien @ 2013-06-30 21:40 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: gnu-system-discuss, Germán Arias, bug-guix

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=GB2312, Size: 3468 bytes --]

2 minor (webpage) bug report:

1. the link available as pre-built
binaries<http://hydra.gnu.org/jobset/gnu/master#tabs-status>in
'Status' on
http://www.gnu.org/software/guix/ is dead.
(hydra.gnu.org down?)

2. 'Download Area' on http://savannah.gnu.org/projects/guix/ points to a
404 location.
Maybe list those two links on the project page?
    ftp://alpha.gnu.org/gnu/guix/guix-0.2.tar.gz
    ftp://alpha.gnu.org/gnu/guix/guix-0.2.tar.gz.sig


Best wishes,
BlueT - Matthew Lien - ¾š†´Ã÷



2013/5/16 Ludovic Court¨¨s <ludo@gnu.org>

> (Stripping Cc list.)
>
> Brandon Invergo <brandon@invergo.net> skribis:
>
> > Guix, on the other hand, is a full package manager that will eventually
> > form the foundation of a GNU distribution.  It has far more features as
> > a package manager, including some really novel ones that go above and
> > beyond the usual package management functionality (better to let Ludovic
> > explain).
>
> Yes.  Basically Guix is two things: a package manager (like, say,
> dpkg/APT), and a distribution.
>
> The package manager provides the features tools like APT implement.
> From a user¡¯s viewpoint, in addition to what common package managers
> implement, it supports nifty features, detailed at
> <http://www.gnu.org/software/guix/manual/guix.html#Features>.
>
> From a developer¡¯s viewpoint, its functional approach simplifies
> reasoning about package composition, and allows developers to actually
> check that packages do build and work together (see
> <http://www.gnu.org/software/guix/manual/guix.html#Introduction>.)
> Also, it has a Scheme API that makes packaging relatively easy (see
> <http://www.gnu.org/software/guix/manual/guix.html#Programming-Interface
> >).
>
> > The Guix distribution will provide all of the software necessary to
> > have a complete, bootable GNU system, including non-GNU packages.  It
> > will also handle all the fun "under-the-hood" stuff like system
> > configuration and initialization, etc.
>
> Yes.  Currently the distro has ~400 packages, and can only be used atop
> a running GNU/Linux system.  In that sense, it¡¯s comparable to GSRC in
> that it provides a way to install the latest versions of GNU packages
> (though GSRC has more GNU packages, I think.)
>
> But as Brandon notes, the longer-term goal is to build ¡°the GNU System¡±.
> Until now, the GNU Project has been providing many independent packages,
> which have been integrated and delivered to final users by others.
>
> In a way, this is great, because it¡¯s a sign that the free software
> ideals have expanded way beyond the GNU Project.
>
> However, I believe it¡¯s also detrimental to GNU in several ways.
> Distros have been making compromises, in particular to software freedom,
> that contradict GNU¡¯s vision.  Integration of GNU software, and cohesion
> among the various GNU packages has arguably suffered.  Distros have
> contributed to a disconnection between users and developers of GNU
> packages.  Distro branding has made GNU, and to some extent its
> political message, much less visible to users.  Etc.
>
> Having a GNU distro is an opportunity to fix these problems.  A stronger
> GNU Project is good for individual GNU packages, and it¡¯s good for
> software freedom.
>
> Let¡¯s build that GNU System!  :-)
>
> Ludo¡¯.
>
>


-- 
/ GPG 5296C7A8 /
/ matthew = BlueT /
/ matthew@BlueT.org /
/ Just be Perl Hacking! /

[-- Attachment #2: Type: text/html, Size: 4905 bytes --]

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

* Re: GNU Guix 0.2 released
  2013-06-30 21:40         ` Matthew Lien
@ 2013-06-30 22:40           ` Ludovic Courtès
  0 siblings, 0 replies; 17+ messages in thread
From: Ludovic Courtès @ 2013-06-30 22:40 UTC (permalink / raw)
  To: Matthew Lien
  Cc: gnu-system-discuss, Brandon Invergo, Germán Arias, bug-guix

Hi,

Matthew Lien <bluet@bluet.org> skribis:

> 2 minor (webpage) bug report:
>
> 1. the link available as pre-built
> binaries<http://hydra.gnu.org/jobset/gnu/master#tabs-status>in
> 'Status' on
> http://www.gnu.org/software/guix/ is dead.
> (hydra.gnu.org down?)

Yeah, the web server at hydra.gnu.org is intermittently down these
days (we’re working on it.)

> 2. 'Download Area' on http://savannah.gnu.org/projects/guix/ points to a
> 404 location.
> Maybe list those two links on the project page?
>     ftp://alpha.gnu.org/gnu/guix/guix-0.2.tar.gz
>     ftp://alpha.gnu.org/gnu/guix/guix-0.2.tar.gz.sig

Indeed.  I’ve added a link from https://savannah.gnu.org/projects/guix/
to work around this problem.

Thanks for the report,
Ludo’.

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

end of thread, other threads:[~2013-06-30 22:45 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-12 21:59 GNU Guix 0.2 released Ludovic Courtès
2013-05-13 23:12 ` Xue Fuqiao
2013-05-15  0:56   ` Germán Arias
2013-05-15  5:01     ` Xue Fuqiao
2013-05-15  7:42       ` Ludovic Courtès
2013-05-16  6:34         ` Germán Arias
2013-05-16 16:37           ` Ludovic Courtès
2013-05-17  4:46             ` German Arias
2013-05-17 13:27               ` Ludovic Courtès
2013-05-17 22:58                 ` Germán Arias
2013-05-18 20:54                   ` Ludovic Courtès
2013-05-20  5:36                     ` Germán Arias
2013-05-15  8:53     ` Brandon Invergo
2013-05-15 18:04       ` Ludovic Courtès
2013-06-30 21:40         ` Matthew Lien
2013-06-30 22:40           ` Ludovic Courtès
2013-05-16  7:29       ` Germán Arias

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

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).