#pragma once #include "config.h" #include #include #include #include /* Before 4.7, gcc's std::exception uses empty throw() specifiers for * its (virtual) destructor and what() in c++11 mode, in violation of spec */ #ifdef __GNUC__ #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7) #define EXCEPTION_NEEDS_THROW_SPEC #endif #endif namespace nix { /* Inherit some names from other namespaces for convenience. */ using std::string; using std::list; using std::set; using std::vector; using boost::format; struct FormatOrString { string s; FormatOrString(const string & s) : s(s) { }; FormatOrString(const format & f) : s(f.str()) { }; FormatOrString(const char * s) : s(s) { }; }; /* BaseError should generally not be caught, as it has Interrupted as a subclass. Catch Error instead. */ class BaseError : public std::exception { protected: string prefix_; // used for location traces etc. string err; public: unsigned int status; // exit status BaseError(const FormatOrString & fs, unsigned int status = 1); #ifdef EXCEPTION_NEEDS_THROW_SPEC ~BaseError() throw () { }; const char * what() const throw () { return err.c_str(); } #else const char * what() const noexcept { return err.c_str(); } #endif const string & msg() const { return err; } const string & prefix() const { return prefix_; } BaseError & addPrefix(const FormatOrString & fs); }; #define MakeError(newClass, superClass) \ class newClass : public superClass \ { \ public: \ newClass(const FormatOrString & fs, unsigned int status = 1) : superClass(fs, status) { }; \ }; MakeError(Error, BaseError) class SysError : public Error { public: int errNo; SysError(const FormatOrString & fs); }; typedef list Strings; typedef set StringSet; /* Paths are just strings. */ typedef string Path; typedef list Paths; typedef set PathSet; typedef enum { lvlError = 0, lvlInfo, lvlTalkative, lvlChatty, lvlDebug, lvlVomit } Verbosity; } ='/guix/log/gnu?id=5cad6f721b8884b612178896f06cd69d5839402c'>gnu/packages/raspberry-pi.scm
AgeCommit message (Expand)Author
2023-09-25gnu: embedded: Turn packages using top-level variables into procedures....Fixes <https://issues.guix.gnu.org/65716>. Before this change, simply adding the following import: modified gnu/packages/firmware.scm @@ -42,6 +42,7 @@ (define-module (gnu packages firmware) #:use-module (gnu packages admin) #:use-module (gnu packages autotools) #:use-module (gnu packages assembly) + #:use-module (gnu packages avr) #:use-module (gnu packages backup) #:use-module (gnu packages base) #:use-module (gnu packages bash) Would cause byte compilation and/or evaluation to fail due to a circular module dependency. * gnu/packages/embedded.scm: Add commentary. (gcc-arm-none-eabi-4.9, gcc-arm-none-eabi-6, newlib-arm-none-eabi) (newlib-nano-arm-none-eabi, gcc-arm-none-eabi-7-2018-q2-update) (newlib-arm-none-eabi-7-2018-q2-update) (newlib-nano-arm-none-eabi-7-2018-q2-update) (arm-none-eabi-toolchain-4.9, arm-none-eabi-nano-toolchain-4.9) (arm-none-eabi-toolchain-6, arm-none-eabi-nano-toolchain-6) (arm-none-eabi-toolchain-7-2018-q2-update, gdb-arm-none-eabi) (propeller-binutils, propeller-gcc-6, propeller-gcc-4) (propeller-gcc, propeller-toolchain, propeller-development-suite) (gcc-vc4): Turn into procedures, prefixing the procedure name with 'make-', and adjust all users. (make-libstdc++-arm-none-eabi) [arguments]: Avoid an unused warning. (arm-none-eabi-toolchain): Rename to... (make-arm-none-eabi-toolchain): ... this. * gnu/packages/raspberry-pi.scm (raspi-arm-chainloader) [native-inputs]: Replace gcc-arm-none-eabi-6 with (make-arm-none-eabi-toolchain). * gnu/packages/axoloti.scm (axoloti-runtime) [inputs]: Replace arm-none-eabi-nano-toolchain-4.9 with (make-arm-none-eabi-nano-toolchain-4.9). (axoloti-patcher): Likewise. (axoloti-patcher-next) [inputs]: Replace arm-none-eabi-nano-toolchain-7-2018-q2-update with (make-arm-none-eabi-nano-toolchain-7-2018-q2-update). Series-changes: 2 - Use mlambda for procedures Maxim Cournoyer