- Add `no' keyword, which can be used in the following ways:
no file-system SOMEFS
no makeoptions FOO
no options OPT1[,OPT2[,...]]
no pseudo-device somepseudo
This turns off a previous file-system/makeoptions/options/pseudo-device
entry for the same item.
Grammar support for 'no device DEV at ATTACH' added, but not
implemented yet.
Code changes:
- Convert many simple lists to TAILQs
- Convert prefix to SLIST
- Remove argument names from prototypes.
- Don't bother with custom alloc code for hashtables; just use emalloc()
like everything else.
- Implement ht_remove(), to remove an entry from a hash table.
Add removed entries to a freelist for later reuse.
- Don't selectbase() devices and pseudo-devices at definition time; instead
do it at one pass after the config file has been parsed in fixdevis().
- Rename nvhead to nvfreelist; a more apt name...
- Minor code cleanups.
swap*.c files if they haven't changed from the last time config was
run, so that less stuff will need to be rebuilt (ie, assym.h, upon
which many other things depend) each time config is rerun.
- Don't bother emitting "#define NFOO 0" for defflag foo (whether or
not "options FOO" was given); it's really useful as is.
Until I recently started converting stuff from defopt to defflag,
nothing used defflag, and because defopt doesn't provide NFOO for FOO,
the NFOO behaviour shouldn't be missed. The NFOO stuff also added
a lot of #define namespace pollution that we'd rather avoid.
- Remove a couple of unused vars
to file specifications. The prefixes are arranged in a stack, and
nest, so that file, object, and include specifications are normalized,
and all end up relative to the kernel compile directory.
For example, in the kernel config file:
# Pull in config fragments for kernel crypto
prefix ../crypto-us/sys # push it
cinclude "conf/files.crypto-us" # include it if it's there
prefix # pop it
and in files.crypto-us:
file netinet6/esp_core.c ipsec & ipsec_esp
file netinet6/esp_output.c ipsec & ipsec_esp
file netinet6/esp_input.c ipsec & ipsec_esp
...generates the following in the kernel Makefile:
$S/../crypto-us/sys/netinet6/esp_core.c \
$S/../crypto-us/sys/netinet6/esp_output.c \
$S/../crypto-us/sys/netinet6/esp_input.c \
By placing this all in the kernel config file, all the magic involved in
reaching into non-standard kernel source directories is placed into a file
that the user is expected to edit anyway, and reasonable examples (and
sane defaults, for typical source checkouts) can be provided.
is declared at most once.
* Do option dependency across all def{opt,param, flag}.
* Make the default value of otherwise-unspecified defopt's be 1,
for consistency with non-defopt'ed options.
* Wrap an abstraction layer (macros) around tests for defopt, filesystem,
defparam, etc. to catch outdated defopt-vs-filesystem tests.
* machinery for nonfatal warnings.
* new backend config-file keywords:
defparam -- like defopt, but each defparam option is required
to have a value when configured via "options".
defflag -- like defopt, but defflag options may not have a value.
Also, on "option FOO", a needs-count style flag
(NFOO, either 0 or 1) is emitted to the .h file.
* Warn about old-style options that aren't defined via def{opt,param,flag}
and which are added to IDENT. (These behave subtly differently
to defopt options when no explicit value is given.)
a change to the config grammar, to specify a device's class (i.e. DV_xxx)
like:
device sd class disk: ...
Also emit an ioconf.h, which contains extern declarations of the
cfdriver structures.
While I'm here, add support for specifying multiple options per defopt
line, as well as specifying the file name in which the options will
appear.
defopt foo bar baz
generates "opt_foo.h", "opt_bar.h", and "opt_baz.h"
defopt opt_mumble.h foo bar baz
generates "opt_mumble.h" which contains all three options.
Also, clean up and fix some bugs in the code that generates header files.
be included in object dependencies. config(8) is told to generate
a header for a particular option with the new "defopt" keyword, used
in the files.* system description files. Options that are placed in
header files are not given -D... cpp flags.
This approach allows options to be turned into headers incrementally,
rather than all at once, and allows for non-header options, as well.
on tech-kern. (See man page.) Implementation by Greg Hudson.
Also, remove special case for i386 in vector handling, although this code isn't
actually used any more.
wouldn't". this is overridden by (and is a subset of "device-driver".
if you have a "standard" file, you can also do: "standard foo needs-count"
to get a foo.h file. (for the hp300 stuff)
and files.kernel has now been completely replaced.
features supported: not nearly as broken as the stuff before
expression support for dependencies
support for 'requires'
no longer generates lots of stupid unnecessary .h files
broke lots of broken stuff, and forced fixing it.
(docs to arrive later)
added '-k' option for continue even after error
documented '-g'