aboutsummaryrefslogtreecommitdiff
#pragma once

#include <functional>
#include <string>
#include <cstdint>

#include "types.hh"

class sqlite3;
class sqlite3_stmt;

namespace nix {

/* RAII wrapper to close a SQLite database automatically. */
struct SQLite
{
    sqlite3 * db;
    SQLite() { db = 0; }
    ~SQLite();
    operator sqlite3 * () { return db; }
};

/* RAII wrapper to create and destroy SQLite prepared statements. */
struct SQLiteStmt
{
    sqlite3 * db = 0;
    sqlite3_stmt * stmt = 0;
    SQLiteStmt() { }
    void create(sqlite3 * db, const std::string & s);
    ~SQLiteStmt();
    operator sqlite3_stmt * () { return stmt; }

    /* Helper for binding / executing statements. */
    class Use
    {
        friend struct SQLiteStmt;
    private:
        SQLiteStmt & stmt;
        unsigned int curArg = 1;
        Use(SQLiteStmt & stmt);

    public:

        ~Use();

        /* Bind the next parameter. */
        Use & operator () (const std::string & value, bool notNull = true);
        Use & operator () (int64_t value, bool notNull = true);
        Use & bind(); // null

        int step();

        /* Execute a statement that does not return rows. */
        void exec();

        /* For statements that return 0 or more rows. Returns true iff
           a row is available. */
        bool next();

        std::string getStr(int col);
        int64_t getInt(int col);
    };

    Use use()
    {
        return Use(*this);
    }
};

/* RAII helper that ensures transactions are aborted unless explicitly
   committed. */
struct SQLiteTxn
{
    bool active = false;
    sqlite3 * db;

    SQLiteTxn(sqlite3 * db);

    void commit();

    ~SQLiteTxn();
};


MakeError(SQLiteError, Error);
MakeError(SQLiteBusy, SQLiteError);

[[noreturn]] void throwSQLiteError(sqlite3 * db, const format & f);

/* Convenience function for retrying a SQLite transaction when the
   database is busy. */
template<typename T>
T retrySQLite(std::function<T()> fun)
{
    while (true) {
        try {
            return fun();
        } catch (SQLiteBusy & e) {
        }
    }
}

}
s='msg-tooltip'>* gnu/packages/firmware.scm (eg25-manager)[arguments]: Add a phase to patch the path to grep. Efraim Flashner 2023-06-15gnu: eg25-manager: Update to 0.4.6....* gnu/packages/firmware.scm (eg25-manager): Update to 0.4.6. Efraim Flashner 2023-05-24gnu: opensbi: Remove input labels....* gnu/packages/firmware.scm (make-opensbi-package)[native-inputs]: Remove input labels. Efraim Flashner 2023-05-24gnu: opensbi: Update to 1.2....* gnu/packages/firmware.scm (make-opensbi-package): Update to 1.2. [native-inputs]: Add python. [arguments]: Remove trailing #t from phases. Efraim Flashner 2023-04-28gnu: fwupd: Update to 1.8.14....* gnu/packages/firmware.scm (fwupd): Update to 1.8.14. Also, change two files' timestamp because they are zipped up by Python. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Josselin Poiret 2023-03-26gnu: opensbi: Build with default gcc, with microarch rv64g....* gnu/packages/firmware.scm (make-opensbi-package): Remove specific #:xgcc for the cross-toolchain, there is not reason for it now. Also set the microarch to rv64g, so that it builds. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Josselin Poiret 2023-03-09gnu: make-openbios-package: Enable building from aarch64, riscv64....* gnu/packages/firmware.scm (make-openbios-package)[source]: Add patch to correctly detect aarch64 and riscv64 build hosts. (openbios-qemu-ppc)[arguments]: Remove aarch64 workaround for #:system. * gnu/packages/patches/openbios-aarch64-riscv64-support.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. Efraim Flashner 2023-03-09gnu: make-openbios-package: Enable setting configure-flags....* gnu/packages/firmware.scm (make-openbios-package)[arguments]: Adjust custom 'configure phase to apply configure-flags. Efraim Flashner 2023-02-20gnu: make-openbios-package: Update to 1.1-1.af97fd7....* gnu/packages/firmware.scm (make-openbios-package): Update to 1.1-1.af97fd7. [source]: Remove patch. [native-inputs]: Build with gcc-10. Add fcode-utils. * gnu/packages/patches/openbios-gcc-warnings.patch: Remove file. * ngu/local.mk (dist_patch_DATA): Remove it. Efraim Flashner 2023-02-20gnu: Add fcode-utils....* gnu/packages/firmware.scm (fcode-utils): New variable. Efraim Flashner 2023-02-08gnu: sgabios: Don't build for a specific target....* gnu/packages/firmware.scm (sgabios)[arguments]: Set target to #f since we're building a firmware file. Efraim Flashner 2023-02-08gnu: seabios: Don't build for a specific target....* gnu/packages/firmware.scm (seabios)[arguments]: Set target to #f since we're producing a firmware file. Efraim Flashner 2023-02-08gnu: openbios-qemu-ppc: Don't build for a specific target....* gnu/packages/firmware.scm (openbios-qemu-ppc)[arguments]: Set target to #f since we're producing a firmware file and not a binary. Efraim Flashner 2023-02-08gnu: openbios-qemu-ppc: Fix building on aarch64-linux....* gnu/packages/firmware.scm (openbios-qemu-ppc)[arguments]: When building from aarch64-linux build for armhf-linux. Efraim Flashner 2023-01-18gnu: make-arm-trusted-firmware: Simplify build....Reuse knowledge from recent U-Boot modifications to streamline the package definition. * gnu/packages/firmware.scm (make-arm-trusted-firmware): Change optional argument ARCH to keyword TRIPLET. Default to aarch64-linux-gnu. [arguments]: Use gexps. Add a #:target argument. Streamline how the CROSS_COMPILE make flag is computed. [native-inputs]: Delete field. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Maxim Cournoyer 2023-01-13gnu: ovmf-arm: Fix syntax error on armhf-linux....* gnu/packages/firmware.scm (ovmf-arm)[arguments]: Don't add an empty set-env phase when building for armhf-linux. Marius Bakke 2023-01-13gnu: ovmf-aarch64: Fix syntax error on aarch64-linux....* gnu/packages/firmware.scm (ovmf-aarch64)[arguments]: Don't add an empty set-env phase when building for aarch64. Marius Bakke 2023-01-05gnu: ath9k-htc-firmware: Fix deprecation warnings....* gnu/packages/firmware.scm (ath9k-htc-firmware): Invoke cross-binutils using keyword arguments. Maxim Cournoyer 2022-12-25gnu: Add opensbi-qemu....* gnu/packages/firmware.scm (opensbi-qemu): New variable. Marius Bakke 2022-12-25gnu: opensbi: Use the same source file name regardless of variant....* gnu/packages/firmware.scm (make-opensbi-package)[source](file-name): Don't use the NAME variable which changes depending on the variant. Marius Bakke 2022-12-25gnu: Add openbios-qemu-ppc....* gnu/packages/firmware.scm (make-openbios-package): New procedure. (openbios-qemu-ppc): New variable. * gnu/packages/patches/openbios-gcc-warnings.patch: New file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly. Marius Bakke 2022-12-23gnu: sgabios: Fix build on cross-build architectures....* gnu/packages/firmware.scm (sgabios)[arguments]: When cross-building add a make-flag to use the correct objcopy. Efraim Flashner 2022-12-22gnu: Add sgabios....* gnu/packages/firmware.scm (sgabios): New variable. Marius Bakke 2022-12-22gnu: Install QEMU firmare files to 'share/qemu'....This paves the way for using a native search path in the future. * gnu/packages/bootloaders.scm (ipxe-qemu)[arguments]: Install firmware files to 'share/qemu' instead of 'share/firmware'. * gnu/packages/firmware.scm (seabios-qemu)[arguments]: Likewise. * gnu/packages/virtualization.scm (qemu)[arguments]: Adjust accordingly. Marius Bakke 2022-12-22gnu: SeaBIOS: Split QEMU variants out to separate package....* gnu/packages/firmware.scm (seabios)[arguments]: Move custom build and install phases out to ... (seabios-qemu): ... this new variable. * gnu/packages/virtualization.scm (qemu)[inputs]: Change from SEABIOS to SEABIOS-QEMU. Marius Bakke 2022-12-21gnu: seabios: Enable for all architectures....* gnu/packages/firmware.scm (seabios)[native-inputs]: When not building from an i686-linux or x86_64-linux machine add cross-gcc and cross-binutils for i686-linux-gnu. [arguments]: When not building from an i686-linux or x86_64-linux machine adjust the Makefile to find the cross build tools needed. [supported-architectures]: Remove field. Efraim Flashner 2022-12-20gnu: seabios: Limit to i686-linux and x86_64-linux....* gnu/packages/firmware.scm (seabios)[supported-systems]: New field. Efraim Flashner 2022-12-20gnu: Add edk2-tools....* gnu/packages/firmware.scm (edk2-tools): New variable. Marius Bakke 2022-12-19gnu: SeaBIOS: Prettify version string....* gnu/packages/firmware.scm (seabios)[arguments]: Display version as "1.16.1/GNU Guix" instead of "1.16.1-guix". Marius Bakke 2022-12-19gnu: SeaBIOS: Build in parallel....* gnu/packages/firmware.scm (seabios)[arguments]: Use N-PAR-FOR-EACH to build the various targets. Marius Bakke 2022-12-19gnu: SeaBIOS: Build more BIOSen....* gnu/packages/firmware.scm (seabios)[arguments]: Build the "128k" and "microvm" BIOSen expected by QEMU. Fix installation of vgabios. Marius Bakke 2022-12-19gnu: SeaBIOS: Remove pre-generated code....* gnu/packages/firmware.scm (seabios)[source](modules, snippet): New fields. [native-inputs]: Add ACPICA. [arguments]: Add build-iasl phase. Marius Bakke 2022-12-19gnu: SeaBIOS: Use G-expression....* gnu/packages/firmware.scm (seabios)[arguments]: Rewrite as gexp. Marius Bakke 2022-12-17gnu: SeaBIOS: Simplify build....* gnu/packages/firmware.scm (seabios)[arguments]: Don't install bios.bin twice. Drop redundant append step. Marius Bakke 2022-12-17gnu: SeaBIOS: Build verbosely....* gnu/packages/firmware.scm (seabios)[arguments]: Add "V=1" to #:make-flags. Marius Bakke 2022-12-17gnu: SeaBIOS: Update to 1.16.1....* gnu/packages/firmware.scm (seabios): Update to 1.16.1. Marius Bakke 2022-11-24gnu: arm-trusted-firmware: Remove blobs in a snippet....* gnu/packages/firmware.scm (make-arm-trusted-firmware)[source]: Add snippet to remove binary blobs. [arguments]: Remove related phase. Efraim Flashner 2022-11-24gnu: arm-trusted-firmware: Update to 2.8....* gnu/packages/firmware.scm (make-arm-trusted-firmware): Update to 2.8. [arguments]: Remove trailing #t from phases. Clean up regexes. Efraim Flashner 2022-11-21gnu: fwupd: Move some inputs to propagated-inputs....* gnu/packages/firmware.scm (fwupd)[propagated-inputs]: Move curl, gcab, glib, gusb, libarchive, gnutls, json-glib and libjcat here from inputs. Signed-off-by: Marius Bakke <marius@gnu.org> Petr Hodina