tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: config(5) break down



On Fri, Mar 12, 2010 at 4:31 AM, David Holland 
<dholland-tech%netbsd.org@localhost> wrote:
> On Mon, Mar 08, 2010 at 06:33:04PM +0900, Masao Uebayashi wrote:
>  > > Well, first of all nothing says you can't read the whole file before
>  > > resolving dependencies; there's nothing inherently wrong with
>  > >
>  > > define foo: bar
>  > >   :
>  > > define bar: baz
>  > >   :
>  > >
>  > > I have no idea if config currently allows this but it's not exactly
>  > > difficult to arrange.
>  >
>  > I don't think it's worth.
>
> Well, maybe. It seems like one of the things you're concerned about is
> the maintenance overhead of making sure everything in "files" appears
> in the right order. If you make it order-independent that goes away,
> and "files" can be sorted by some more meaningful criteria.
>
> That seems like generally a good idea.
>
>  > Split *.conf files can be also distributed with *.[ch].  Its notation is
>  > self-descriptive.  The only problem I'm aware of is it consumes more disk
>  > space.
>
> That and it becomes harder to find what you're looking for, which is I
> guess what I'm mostly concerned about. It's already somewhat of a pain
> to find any particular declaration in the various files.* files.
>
> I think there are two reasonable ways to arrange it and we ought to
> pick one and then hack on config itself until it works acceptably that
> way.
>
> These are:
>
> (1) one big file, or as close to it as we can reasonably manage given
> that we have all these different ports with different stuff;
>
> (2) one file per source directory, like makefiles in a traditional
> project.
>
> The Linux folks after much pain and suffering finally settled on the
> second way; however, their kernel build system uses recursive make
> invocations so the structure all matches up.
>
> The way the world works in NetBSD I tend to think one big file is
> better. I'd even maybe argue that we should drop files.$(ARCH) in
> favor of syntax, maybe something like
>
>   if (ARCH == i386) {
>      file    arch/i386/i386/autoconf.c
>        :
>   }
>
> but perhaps not.
>
> Still, I don't think one file per module (which given modular drivers
> will tend to end up being one files.*/*.conf file per *.c file in many
> parts of the tree) is a good idea.
>
>  > > No, it seems like you're intending to use whole files to define groups
>  > > instead of braces or some other punctuation. There is no need to split
>  > > things into separate files just to show grouping.
>  >
>  > True.
>
> config already seems to use braces for declaring bus locators (or
> something like that, probably not quite the right terminology) -- what
> grouping syntax should we use? (Of course, the braces could be changed
> if necessary; I count 579 uses but that's not really a major
> massediting task.)
>
>  > > (Besides, it's not necessarily as flat as all that, either.)
>  >
>  > It's necessary to be flat to be modular.
>
> Mm... not strictly. That's only true when there are diamonds in the
> dependency graph; otherwise, declaring B inside A just indicates that
> B depends on A. Consider the following hackup of files.ufs:

There're diamonds (for example, ppp-deflate depends on ppp and zlib).

>   file ufs/mfs/mfs_miniroot.c
>
>   module UFS {
>      option UFS_DIRHASH {
>         flag opt_ffs.h
>         file ufs/ufs/ufs_dirhash.c
>      }
>
>      option QUOTA {
>         flag commandline
>         file ufs/ufs/ufs_quota.c
>      }
>
>      file ufs/ufs/ufs_ihash.c
>      file ufs/ufs/ufs_inode.c
>      file ufs/ufs/ufs_lookup.c
>      file ufs/ufs/ufs_bmap.c
>      file ufs/ufs/ufs_vfsops.c
>      file ufs/ufs/ufs_vnops.c
>
>      file ufs/ffs/ffs_alloc.c
>      file ufs/ffs/ffs_balloc.c
>      file ufs/ffs/ffs_inode.c
>      file ufs/ffs/ffs_snapshot.c
>      file ufs/ffs/ffs_subr.c
>      file ufs/ffs/ffs_tables.c
>      file ufs/ffs/ffs_vfsops.c
>      file ufs/ffs/ffs_vnops.c
>
>      module FFS : filesystem {
>         option FFS_NO_SNAPSHOT {
>            flag opt_ffs.h
>         }
>         option FFS_EI {
>            flag opt_ffs.h
>            file ufs/ffs/ffs_bswap.c
>         }
>         option APPLE_UFS {
>            flag opt_ffs.h
>            file ufs/ffs/ffs_appleufs.c
>         }
>         option UFS_EXTATTR {
>            flag opt_ffs.h
>            option UFS_EXTATTR_AUTOSTART {
>               flag opt_ffs.h
>            }
>            file ufs/ufs/ufs_extattr.c
>         }
>         ifoption WAPBL {
>            file ufs/ufs/ufs_wapbl.c
>            file ufs/ffs/ffs_wapbl.c
>         }
>         module MFS : filesystem {
>            file ufs/mfs/mfs_vfsops.c
>            file ufs/mfs/mfs_vnops.c
>         }
>      }
>
>      module EXT2FS : filesystem {
>         file ufs/ext2fs/ext2fs_alloc.c
>         file ufs/ext2fs/ext2fs_balloc.c
>         file ufs/ext2fs/ext2fs_bmap.c
>         file ufs/ext2fs/ext2fs_bswap.c
>         file ufs/ext2fs/ext2fs_inode.c
>         file ufs/ext2fs/ext2fs_lookup.c
>         file ufs/ext2fs/ext2fs_readwrite.c
>         file ufs/ext2fs/ext2fs_subr.c
>         file ufs/ext2fs/ext2fs_vfsops.c
>         file ufs/ext2fs/ext2fs_vnops.c
>      }
>
>      module LFS : filesystem {
>         option LFS_KERNEL_RFW {
>            flag opt_lfs.h
>            file ufs/lfs/lfs_rfw.c
>         }
>         file ufs/lfs/lfs_alloc.c
>         file ufs/lfs/lfs_balloc.c
>         file ufs/lfs/lfs_bio.c
>         file ufs/lfs/lfs_cksum.c
>         file ufs/lfs/lfs_debug.c
>         file ufs/lfs/lfs_inode.c
>         file ufs/lfs/lfs_itimes.c
>         file ufs/lfs/lfs_segment.c
>         file ufs/lfs/lfs_subr.c
>         file ufs/lfs/lfs_syscalls.c
>         file ufs/lfs/lfs_vfsops.c
>         file ufs/lfs/lfs_vnops.c
>      }
>   }

In this plan, what *.kmod will be generated?

> I'm not sure why most of the ffs sources are currently declared "ffs |
> lfs | mfs | ext2fs", but I haven't changed that.
>
> Also note that QUOTA is currently not defflag'd (!) - I haven't
> changed that either, although it seems like a bug.
>
>  > > I thought you said all you needed to do was grep for the logical
>  > > operators...
>  >
>  > I said it's possible.
>  >
>  > Again, I don't want to change config(1) at all.  And I don't need.
>
> Well... changing it would probably be helpful. Ultimately we want the
> right balance of changing config(1) and rearranging its input files.
>
> I'm perfectly happy to rework the parser to support syntax like the
> above if we can all agree on what it should be.

So you're proposing a syntax change without understanding the existing
syntax?  (You don't know what braces are for, you didn't know "define"
behavior, ...)  I have to say that your proposal is not convincing to
me...

Masao


Home | Main Index | Thread Index | Old Index