## $(call squote,TXT)
##
## Single-quote TXT.
-squote = '$(subst ','\\'',$1)'
+squote = '$(subst ','\'',$1)'
+#'
## $(call chroot-dist,D-A) -> D
## $(call chroot-arch,D-A) -> A
MAINTQ_ = -q
MAINTQ_0 = -q
-MAINT = +$(call v_tag,RUN)\
+MAINT = +$(call v_tag,MAINT)\
PYTHONPATH=$(STATE)/lib/python $(STATE)/bin/chroot-maint \
$(MAINTQ_$V) $(OPTS)
$(MAINT) -f$(FRESH) $(JOBS)
.PHONY: maint
+###--------------------------------------------------------------------------
+### Running random commands.
+
+CMD = echo %d %a
+subst-command = $(subst %d,$(call chroot-dist,$1), \
+ $(subst %a,$(call chroot-arch,$1), \
+ $(subst %r,$1, $(CMD))))
+
+run: $(foreach c,$(ALL_CHROOTS),run/$c)
+$(foreach c,$(ALL_CHROOTS),run/$c): run/%:
+ $(V_AT)$(call v_print,RUN,$(call subst-command,$*))\
+ $(call subst-command,$*)
+
###--------------------------------------------------------------------------
### Other maintenance targets.
continue
ff.append(f)
path = OS.path.join(dir, f)
- if not OS.path.isdir(path): examine(path)
+ if OS.path.islink(path) or not OS.path.isdir(path): examine(path)
files[:] = ff
OS.path.walk(crossdir, visit, None)
OS.path.walk(OS.path.join(crossdir, "TOOLCHAIN", gnuarch),
## Install the base system.
progress("install base system")
- run_root(["eatmydata", "debootstrap"] +
+ run_root(["eatmydata", "debootstrap", "--no-merged-usr"] +
(arch in C.FOREIGN_ARCHS and ["--foreign"] or []) +
["--arch=" + arch, "--variant=minbase",
"--include=" + ",".join(C.BASE_PACKAGES),
with safewrite_root\
(OS.path.join(mnt, "fs/etc/apt/apt.conf.d/20arch")) as f:
f.write("""\
- ### -*-conf-*-
+### -*-conf-*-
- APT {
- Architecture "%s";
- };
- """ % arch)
+APT {
+ Architecture "%s";
+};
+""" % arch)
## Set up the locale and time zone from the host system.
progress("configure locales and timezone")
with safewrite_root(OS.path.join(mnt, "fs/usr/sbin/policy-rc.d"),
mode = "755") as f:
f.write("""\
- #! /bin/sh
- echo >&2 "policy-rc.d: Services disabled by policy."
- exit 101
- """)
+#! /bin/sh
+echo >&2 "policy-rc.d: Services disabled by policy."
+exit 101
+""")
## Hack the dynamic linker to prefer libraries in `/usr' over
## `/usr/local'. This prevents `dpkg-shlibdeps' from becoming
with safewrite_root\
(OS.path.join(mnt, "fs/etc/ld.so.conf.d/zzz-local.conf")) as f:
f.write("""\
- ### -*-conf-*-
- ### Local hack to make /usr/local/ late.
- /usr/local/lib
- """)
+### -*-conf-*-
+### Local hack to make /usr/local/ late.
+/usr/local/lib
+""")
## If this is a foreign architecture then we need to set it up.
if arch in C.FOREIGN_ARCHS:
apt-get -y dist-upgrade
apt-get -y autoremove
apt-get -y clean
+ ldconfig
"""], stdin = DISCARD)
if arch in C.FOREIGN_ARCHS: me._install_cross_tools()
me._meta.update = zulu(); me._meta.write()
try: dest = dest[:dest.rindex("/")]
except ValueError: dest = ""
if path == "": path = link
- else: path = "%s/%s" % (path, link)
+ else: path = "%s/%s" % (link, path)
## Work through the shopping list, copying the things it names into the
## cross-tools tree.
#include <sys/types.h>
#include <sys/wait.h>
+#include <sys/select.h>
#include <unistd.h>
#define PY_SSIZE_T_CLEAN
PyObject *rc = 0;
struct sigaction sa, oldsa;
sigset_t mask, oldmask;
+ fd_set infd;
int rstrchld = 0;
int fd, sfd;
int kid, st;
* like this happens, then we go back and try reaping children again.
*/
Py_BEGIN_ALLOW_THREADS
- n = read(sigfd, &ch, 1);
+ for (;;) {
+ n = read(sigfd, &ch, 1); if (n >= 0 || errno != EAGAIN) break;
+ FD_ZERO(&infd); FD_SET(sigfd, &infd);
+ n = select(sigfd + 1, &infd, 0, 0, 0); if (n < 0) break;
+ }
Py_END_ALLOW_THREADS
if (n == 1) rc = Py_BuildValue("(cOO)", ch, Py_None, Py_None);
else if (!n) rc = Py_BuildValue("(sOO)", "", Py_None, Py_None);