aboutsummaryrefslogtreecommitdiff
path: root/nix/libstore/builtins.cc
blob: 4111ac4760901b1faf04f193c1b2b8ceaa82abf8 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/* GNU Guix --- Functional package management for GNU
   Copyright (C) 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>

   This file is part of GNU Guix.

   GNU Guix 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 Guix 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 GNU Guix.  If not, see <http://www.gnu.org/licenses/>.  */

#include <builtins.hh>
#include <util.hh>
#include <globals.hh>

#include <unistd.h>
#include <cstdlib>

namespace nix {

static void builtinDownload(const Derivation &drv,
			    const std::string &drvPath,
			    const std::string &output)
{
    /* Invoke 'guix perform-download'.  */
    Strings args;
    args.push_back("perform-download");
    args.push_back(drvPath);

    /* Close all other file descriptors. */
    closeMostFDs(set<int>());

    const char *const argv[] =
      {
	  "guix", "perform-download", drvPath.c_str(), output.c_str(), NULL
      };

    /* Tell the script what the store file name is, so that
       'strip-store-file-name' (used for instance to determine the URL of
       content-addressed mirrors) works correctly.  */
    setenv("NIX_STORE", settings.nixStore.c_str(), 1);

    /* Tell it about options such as "print-extended-build-trace".  */
    setenv("_NIX_OPTIONS", settings.pack().c_str(), 1);

    const string program = settings.guixProgram;
    execv(program.c_str(), (char *const *) argv);

    throw SysError(format("failed to run download program '%1%'") % program);
}

static const std::map<std::string, derivationBuilder> builtins =
{
    { "download", builtinDownload }
};

derivationBuilder lookupBuiltinBuilder(const std::string & name)
{
    if (name.substr(0, 8) == "builtin:")
    {
	auto realName = name.substr(8);
	auto builder = builtins.find(realName);
	return builder == builtins.end() ? NULL : builder->second;
    }
    else
	return NULL;
}

std::list<std::string> builtinBuilderNames()
{
    std::list<std::string> result;
    for(auto&& iter: builtins)
    {
	result.push_back(iter.first);
    }
    return result;
}

}
alias from matches. (exim-etc): Remove procedure. (exim-service-type): Extend mail-aliases-service-type instead of etc-service-type. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Carlo Zancanaro 2017-04-19services: Add mail-aliases-service-type....* gnu/services/mail.scm (mail-aliases-etc): New procedure. (mail-aliases-service-type): New variable. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Carlo Zancanaro 2017-04-01services: dovecot: Fix passwd and userdb 'args' types....* gnu/services/mail.scm (passwd-configuration)[args] (userdb-configuration)[args]: Change type from 'free-form-args' to 'space-separated-string-list'. * doc/guix.texi (Mail Services): Document it. Clément Lassieur 2017-03-12services: dovecot: Reimplement proper configuration functions....* gnu/services/mail.scm (uglify-field-name, serialize-field, serialize-string) (space-separated-string-list?, serialize-space-separated-string-list) (file-name?, serialize-file-name, serialize-boolean): Add them. These functions were inadvertently changed while being factorized in gnu/service/configuration.scm. Signed-off-by: Clément Lassieur <clement@lassieur.org> Clément Lassieur 2017-03-12services: dovecot: Fix unix_listeners and fifo_listeners path types....* gnu/services/mail.scm (unix-listener-configuration)[path] (fifo-listener-configuration)[path]: Change type from 'file-name' to 'string'. * doc/guix.texi (Mail Services): Document it. Signed-off-by: Clément Lassieur <clement@lassieur.org> Clément Lassieur 2017-03-10services: Add exim-service-type....* gnu/services/mail.scm (<exim-configuration>): New record type. (exim-computed-config-file, exim-shepherd-service, exim-activation, exim-etc, exim-profile): New procedures. (exim-service-type, %exim-accounts): New variables. * doc/guix.text (Mail Services): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Carlo Zancanaro 2017-01-25services: Fix 'mkdir-p' in activation scripts....* gnu/services/cups.scm (%cups-activation): Import (guix build utils). * gnu/services/mail.scm (opensmtpd-activation): Idem. * gnu/services/networking.scm (ntp-service-activation): Idem. * gnu/services/spice.scm (spice-vdagent-activation): Idem. * gnu/services/ssh.scm (openssh-activation): Idem. (dropbear-activation): Idem. * gnu/services/vpn.scm (%openvpn-activation): Idem. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Clément Lassieur 2016-11-26services: Factorize configuration abstraction....* gnu/services/mail.scm and gnu/services/cups.scm (&configuration-error) (configuration-error, configuration-field-error) (configuration-missing-field, configuration-field, serialize-configuration) (validate-configuration, define-configuration, uglify-field-name) (serialize-field, serialize-package, serialize-string) (serialize-space-separated-string-list, space-separated-string-list?) (serialize-file-name, file-name?, serialize-field-name) (generate-documentation): Move duplicate code... * gnu/services/configuration.scm: ...to this new file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add configuration.scm. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Julien Lepiller 2016-11-26services: Add opensmtpd service....* gnu/services/mail.scm (<opensmtpd-configuration>): New record type. (%default-opensmtpd-config-file, %opensmtpd-accounts): New variables. (opensmtpd-shepherd-service, opensmtpd-activation): New procedures. (opensmtpd-service-type): New variable. * doc/guix.texi (Mail Services): Document it. 宋文武 2016-09-27gnu: New default Dovecot service postmaster_address...* gnu/services/mail.scm (dovecot-configuration): Change default for postmaster-address, as dovecot is now requiring a non-empty value and will fail to start up otherwise. * doc/guix.texi (Mail Services): Update. Andy Wingo 2016-09-16doc: "filesystem" -> "file system"...* doc/guix.texi: "filesystem" -> "file system" * gnu/packages/admin.scm: "filesystem" -> "file system" * gnu/packages/cdrom.scm: "filesystem" -> "file system" * gnu/packages/compression.scm: "filesystem" -> "file system" * gnu/packages/disk.scm: "filesystem" -> "file system" * gnu/packages/gnome.scm: "filesystem" -> "file system" * gnu/packages/irc.scm: "filesystem" -> "file system" * gnu/packages/linux.scm: "filesystem" -> "file system" * gnu/packages/mail.scm: "filesystem" -> "file system" * gnu/packages/mpd.scm: "filesystem" -> "file system" * gnu/packages/ocaml.scm: "filesystem" -> "file system" * gnu/packages/perl.scm: "filesystem" -> "file system" * gnu/packages/python.scm: "filesystem" -> "file system" * gnu/packages/search.scm: "filesystem" -> "file system" * gnu/packages/tls.scm: "filesystem" -> "file system" * gnu/services/mail.scm: "filesystem" -> "file system" John Darrington 2016-09-10system: Use 'file-append' to denote file names....* gnu/services/avahi.scm, gnu/services/base.scm, gnu/services/databases.scm, gnu/services/dbus.scm, gnu/services/desktop.scm, gnu/services/dict.scm, gnu/services/mail.scm, gnu/services/networking.scm, gnu/services/sddm.scm, gnu/services/spice.scm, gnu/services/ssh.scm, gnu/services/web.scm, gnu/services/xorg.scm, gnu/system.scm: Replace the #~(string-append #$pkg "/bin/foo") idiom with (file-append pkg "/bin/foo"). Ludovic Courtès 2016-07-21services: Export *-service-type and *-configuration....This allows users to use 'modify-services' and similar constructs for all these service types. * gnu/services/avahi.scm: export avahi-configuration. * gnu/services/base.scm: export gpm-configuration and rngd-configuration. * gnu/services/databases.scm: export *-service-type and *-configuration. * gnu/services/dbus.scm: export dbus-configuration. * gnu/services/dict.scm: export dicod-service-type. * gnu/services/lirc.scm: export lirc-configuration and lirc-service-type. * gnu/services/mail.scm: export dovecot-service-type. * gnu/services/web.scm: export nginx-configuration and nginx-service-type. * gnu/services/xorg.scm: export screen-locker and screen-locker?. * gnu/services/ssh.scm: export lsh-configuration and lsh-service-type. * gnu/services/desktop.scm: export *-service, *-service-type and *-configuration. * gnu/services/networking.scm: export *-configuration and *-service-type. Co-authored-by: Ludovic Courtès <ludo@gnu.org> Tomáš Čech