Our contrib build graph was already expressed in contrib/Makefile,
so ASDF wasn't doing anything to determine an execution schedule.
The new make-contrib.lisp script can parse '.asd' files more-or-less as-is,
removing ASDF from the critical path. With blocklist=sb-simd, this change
decreased the time in parallelized make-target-contrib to under 5 seconds
for me (down from >10) when run on as many cores as there are contrib dirs.
All defsystems are treated as if containing ":serial t", and there are
two invented keywords to bind/assign special variables around compilation.
We still install '.asd' files in $SBCL_HOME/contrib, and build uiop and asdf
so there should be no observable difference to users.
Shake out the internal symbols. I'm sure there will be complaints,
but it's essential to find out what people are (inadvisably) using.
The comment about what is used "only in this file" was not quite true.
Inlining requires saving source code, and the theoretical possibility
exists of some other system file needing the INT-SYSCALL macro (etc)
if deciding to inline UNIX-READ or similar.
Deprecate QUIT. It occupies an uncomfortable niche between processes
and threads, and doesn't actually do what it says on the tin unless
you call it from the main thread.
SIGTERM now uses EXIT, and doesn't depend on sessions.
WITH-DEADLINE (:SECONDS NIL :OVERRIDE T) can now be used to ignore
deadlines.
JOIN-THREAD on the main thread now blocks indefinitely instead of
claiming the thread did not exit normally.
New functions:
* SB-EXT:EXIT. Always exits the process. Takes keywords :CODE,
:ABORT, and :TIMEOUT. Code is the exit status. Abort controls if
the exit is clean (unwind, exit-hooks, terminate other threads) or
dirty. Timeout controls how long to wait for other threads to
finish.
* SB-THREAD:RETURN-FROM-THREAD. Normal termination for current
thread -- equivalent to return from the thread function with the
specified values. Takes keyword :ALLOW-EXIT, which determines if
returning from the main thread is an error, or equivalent to
calling EXIT :CODE 0.
* SB-THREAD:ABORT-THREAD. Abnormal termination for current thread --
equivalent to invoking the initial ABORT restart estabilished by
MAKE-THREAD (previously known as TERMINATE-THREAD, but ANSI
recommends there to always be an ABORT restart.) Takes keyword
:ALLOW-EXIT, which determines if aborting the main thread is an
error, or equivalent to calling EXIT :CODE 1.
* SB-THREAD:MAIN-THREAD-P. Let's you determine if a given thread is
the main thread of the process. This is important for some
functions on some operating systems -- and RETURN-FROM-THREAD and
ABORT-THREAD also need it.
* SB-THREAD:MAIN-THREAD. Returns the main thread object. Convenient
for when you need to eg. load a foreign library in the main
thread.
Fix SB-EXECUTABLE on win32. (Patch by Marko Kocic, sbcl-devel
"sb-executable mingw patch" on 2006-08-29).
* Yes, SB-EXECUTABLE is mostly useless, since nobody uses it
for making "executables". But there are libraries that load
SB-EXECUTABLE for the unfortunately exported COPY-STREAM
function.
* Oops, whitespace damage from 0.9.18.23.
Make asdf-install use bivalent streams
* Fix warnings and style-warnings when compiling a-i/installer.lisp:
remove undefined variables / exported symbols *verify-gpg-signatures*
and *safe-url-prefixes*, add a few ignored declarations.
* Add :element-type :default to stream opening forms that need it
* Allow sb-executable's copy-stream to deal with bivalent streams:
Add an element-type &key argument that should be passed when copying
bivalent streams
RIP (physical) PATHNAME-VERSION significance
... remove all internal discrimination based on the version
field if the pathname involved has the Unix host.
... parsing of a physical pathname namestring (i.e. again either
explicitly or implicitly on the Unix host) never produces
a version from the namestring.
... make :if-exists :new-version behave like :if-exists :error,
because despite weasel-words in CLHS someone might
legitimately expect :if-exists :new-version not to
clobber the old version.
... (this latter needs to be revisited, when OPEN is made aware
of logical pathnames and the wacky logic they impose; we
can support :new-version with LPNs, but only if OPEN is
clever).
... make pathnames more likely to be read/print consistent, by
throwing errors in more cases (we now pass PFD's test for
that, not that it's that stringent).
... throw errors on use of (:absolute :up) and friends in CL
operators, but...
... don't throw error on creation, and in fact test in sb-posix
that we can use #p"/../" for what it means.
Record filesystem information during the build in debug information
relative to SYS, not to /home/kevin/sbcl or equivalent.
... change to core code: tiny if ugly;
... change to warm load: only to refer to files as lpns rather
than physical namestrings;
... change to vanilla-modules: tiny;
... change to asdf modules: well, erm, less tiny. I'm not pleased
by the need to duplicate similar logic in every .asd, but
I think it's a similar symptom to the duplication of the
TEST-OP logic in many of them: the coupling between asdf
and the rest of the system is slightly wrong.
(At startup, SYS by default has translations that refer back to
the build-time values; distributors may wish to alter this for
their binaries, for instance by setting translations to
distribution-known values when dumping any final image)
OK, here's the deal.
... *MODULE-PROVIDER-FUNCTIONS* no longer call PROVIDE. It's
now the job of user code to do that (as it probably
should always have been.
... OK, so as a result, our one-file contribs now need to
PROVIDE themselves. Make it so.
... fix asdf-install/asdf autorequiration; an installed sbcl
can now require asdf-install (as well as all the other
asdfized contribs) as the first command in a clean core
... update contrib/{README,STANDARDS} to match what we currently
do.
A full and final answer[*] to all the people who keep asking
for slightly tangential software to be added to contrib: to
wit, a contrib module to automate the downloading and
installing of packages that are _not_ part of contrib.
* (require 'asdf-install)
* (asdf-install:install 'xlunit)
or
$ sbcl-asdf-install xlunit
See contrib/asdf-install/README for more details and scary
security-related muttering.
Also added a :INITIAL-FUNCTION to SB-EXECUTABLE:MAKE-EXECUTABLE
so that files don't have to be written such that the
application starts as soon as they're loaded
[*] Ha!
Timezone/DST fixes for years after 2038. I hope. This stuff
is, I can't help feeling, needlessly confusing.
* (multiple-value-list
(decode-universal-time (encode-universal-time 0 0 12 28 7 2040)))
(0 0 12 28 7 2040 5 T 0)
* (multiple-value-list
(decode-universal-time (encode-universal-time 0 0 12 29 2 3040)))
(0 0 12 29 2 3040 5 NIL 0)
Someone decided that READ-LINE ought not to work for binary
streams, so fix up SB-EXECUTABLE not to cheat in this way.
added .cvsignore files in contrib/, and made corresponding
changes in clean.sh (didn't clean up foo.c in clean.sh)
(Maybe if we called it grovel-tmp.c or something I'd
be more comfortable with its treewide autodeletion.)
fixed #(1.2.3.4) thinko in sb-bsd-sockets docs (pointed out
by Zachary Beane on sbcl-devel 2003-05-27)
contrib support for "standalone executables" using shell script
magic. See sb-executable:make-executable docstring for usage
contrib/scriptoids was a three year old mail message describing
a similar but slightly less cool way to do the same thing