···1+# CC Wrapper hygiene
2+#
3+# For at least cross compilation, we need to depend on multiple cc-wrappers at
4+# once---specifically up to one per sort of dependency. This follows from having
5+# different tools targeting different platforms, and different flags for those
6+# tools. For example:
7+#
8+# # Flags for compiling (whether or not linking) C code for the...
9+# NIX_CFLAGS_COMPILE_FOR_BUILD # ...build platform
10+# NIX_CFLAGS_COMPILE # ...host platform
11+# NIX_CFLAGS_COMPILE_FOR_TARGET # ...target platform
12+#
13+# Notice that these platforms are the 3 *relative* to the package using
14+# cc-wrapper, not absolute like `x86_64-pc-linux-gnu`.
15+#
16+# The simplest solution would be to have separate cc-wrappers per (3 intended
17+# use-cases * n absolute concrete platforms). For the use-case axis, we would
18+# @-splice in 'BUILD_' '' 'TARGET_' to use the write environment variables when
19+# building the cc-wrapper, and likewise prefix the binaries' names so they didn't
20+# clobber each other on the PATH. But the need for 3x cc-wrappers, along with
21+# non-standard name prefixes, is annoying and liable to break packages' build
22+# systems.
23+#
24+# Instead, we opt to have just one cc-wrapper per absolute platform. Matching
25+# convention, the binaries' names can just be prefixed with their target
26+# platform. On the other hand, that means packages will depend on not just
27+# multiple cc-wrappers, but the exact same cc-wrapper derivation multiple ways.
28+# That means the exact same cc-wrapper derivation must be able to avoid
29+# conflicting with itself, despite the fact that `setup-hook.sh`, the `addCvars`
30+# function, and `add-flags.sh` are all communicating with each other with
31+# environment variables. Yuck.
32+#
33+# The basic strategy is:
34+#
35+# - Everyone exclusively *adds information* to relative-platform-specific
36+# environment variables, like `NIX_CFLAGS_COMPILE_FOR_TARGET`, to communicate
37+# with the wrapped binaries.
38+#
39+# - The wrapped binaries will exclusively *read* cc-wrapper-derivation-specific
40+# environment variables distinguished with with `suffixSalt`, like
41+# `NIX_CFLAGS_COMPILE_@suffixSalt@`.
42+#
43+# - `add-flags`, beyond its old task of reading extra flags stuck inside the
44+# cc-wrapper derivation, will convert the relative-platform-specific
45+# variables to cc-wrapper-derivation-specific variables. This conversion is
46+# the only time all but one of the cc-wrapper-derivation-specific variables
47+# are set.
48+#
49+# This ensures the flow of information is exclusive from
50+# relative-platform-specific variables to cc-wrapper-derivation-specific
51+# variables. This allows us to support the general case of a many--many relation
52+# between relative platforms and cc-wrapper derivations.
53+#
54+# For more details, read the individual files where the mechanisms used to
55+# accomplish this will be individually documented.
56+57+# Skip setup hook if we're neither a build-time dep, nor, temporarily, doing a
58+# native compile.
59+#
60+# TODO(@Ericson2314): No native exception
61+[[ -z ${strictDeps-} ]] || (( "$hostOffset" < 0 )) || return 0
62+63+# It's fine that any other cc-wrapper will redefine this. Bash functions close
64+# over no state, and there's no @-substitutions within, so any redefined
65+# function is guaranteed to be exactly the same.
66+ccWrapper_addCVars () {
67+ # See ../setup-hooks/role.bash
68+ local role_post
69+ getHostRoleEnvHook
70+71+ if [ -d "$1/include" ]; then
72+ export NIX_CFLAGS_COMPILE${role_post}+=" -isystem $1/include"
73+ fi
74+75+ if [ -d "$1/Library/Frameworks" ]; then
76+ export NIX_CFLAGS_COMPILE${role_post}+=" -iframework $1/Library/Frameworks"
77+ fi
78+}
79+80+# See ../setup-hooks/role.bash
81+getTargetRole
82+getTargetRoleWrapper
83+84+# We use the `targetOffset` to choose the right env hook to accumulate the right
85+# sort of deps (those with that offset).
86+addEnvHooks "$targetOffset" ccWrapper_addCVars
87+88+# Note 1: these come *after* $out in the PATH (see setup.sh).
89+# Note 2: phase separation makes this look useless to shellcheck.
90+91+# shellcheck disable=SC2157
92+if [ -n "@cc@" ]; then
93+ addToSearchPath _PATH @cc@/bin
94+fi
95+96+# shellcheck disable=SC2157
97+if [ -n "@libc_bin@" ]; then
98+ addToSearchPath _PATH @libc_bin@/bin
99+fi
100+101+# shellcheck disable=SC2157
102+if [ -n "@coreutils_bin@" ]; then
103+ addToSearchPath _PATH @coreutils_bin@/bin
104+fi
105+106+# Export tool environment variables so various build systems use the right ones.
107+108+export NIX_CC${role_post}=@out@
109+110+export CC${role_post}=@named_cc@
111+export CXX${role_post}=@named_cxx@
112+export CC${role_post}=@named_cc@
113+export CXX${role_post}=@named_cxx@
114+115+# If unset, assume the default hardening flags.
116+: ${NIX_HARDENING_ENABLE="fortify stackprotector pic strictoverflow format relro bindnow"}
117+export NIX_HARDENING_ENABLE
118+119+# No local scope in sourced file
120+unset -v role_post
···1+Strip path to the binary from prints.
2+3+I see no sense in including the full path in outputs like bpftool --version
4+Especially as argv[0] may not include it, based on calling via $PATH or not.
5+--- a/tools/bpf/bpftool/main.c
6++++ b/tools/bpf/bpftool/main.c
7+@@ -443 +443,7 @@
8+- bin_name = argv[0];
9++ /* Strip the path if any. */
10++ const char *bin_name_slash = strrchr(argv[0], '/');
11++ if (bin_name_slash) {
12++ bin_name = bin_name_slash + 1;
13++ } else {
14++ bin_name = argv[0];
15++ }
···1-diff --git a/caddy.go b/caddy.go
2-index 584865bd..082b9b6c 100644
3---- a/caddy.go
4-+++ b/caddy.go
5-@@ -840,7 +840,10 @@ func InstanceID() (uuid.UUID, error) {
6- // and https://github.com/golang/go/issues/50603.
7- //
8- // This function is experimental and subject to change or removal.
9-+var ShortVersion = "(devel)"
10-+
11- func Version() (simple, full string) {
12-+ return ShortVersion, ShortVersion
13- // the currently-recommended way to build Caddy involves
14- // building it as a dependency so we can extract version
15- // information from go.mod tooling; once the upstream
···000000000000000
+2-2
pkgs/servers/computing/slurm/default.nix
···1415stdenv.mkDerivation rec {
16 pname = "slurm";
17- version = "22.05.4.1";
1819 # N.B. We use github release tags instead of https://www.schedmd.com/downloads.php
20 # because the latter does not keep older releases.
···23 repo = "slurm";
24 # The release tags use - instead of .
25 rev = "${pname}-${builtins.replaceStrings ["."] ["-"] version}";
26- sha256 = "100ixhpi4ahx5w7b1ncgmmg1ar48brp095lrxhcxr55fq2wqlv35";
27 };
2829 outputs = [ "out" "dev" ];
···1415stdenv.mkDerivation rec {
16 pname = "slurm";
17+ version = "22.05.5.1";
1819 # N.B. We use github release tags instead of https://www.schedmd.com/downloads.php
20 # because the latter does not keep older releases.
···23 repo = "slurm";
24 # The release tags use - instead of .
25 rev = "${pname}-${builtins.replaceStrings ["."] ["-"] version}";
26+ sha256 = "1mw0dkll1iwwdpdbxcy26zpnjgj07prlgdz2da64krn4yyfhca30";
27 };
2829 outputs = [ "out" "dev" ];