On 08/22/10 07:10, Dag-Erling Smørgrav wrote:
Nathan Whitehorn<nwhiteh...@freebsd.org>  writes:
Dag-Erling Smørgrav<d...@des.no>  writes:
I'm not sure I understand what you mean (or rather, how it would
help the tinderbox).  What *would* help would be an easy way to
determine, *before* trying to build it, whether a specific kernel
config is appropriate for a specific target.  Can you think of an
easier way to do this than to scan the config for the "machine"
line?
That's exactly what I proposed. You use config, before trying the
build, to look up the machine specification for the config file. I
sent you a 5 line patch to tinderbox.pl that does this by private
email.
Here's a solution that works regadless of config(8) version, though I'm
not sure it qualifies as either easy or clean:

Index: tinderbox.pl
===================================================================
RCS file: /home/projcvs/projects/tinderbox/tinderbox.pl,v
retrieving revision 1.68
diff -u -r1.68 tinderbox.pl
--- tinderbox.pl        25 Aug 2009 17:28:14 -0000      1.68
+++ tinderbox.pl        22 Aug 2010 12:08:46 -0000
@@ -722,10 +722,29 @@
      }

      # Build additional kernels
+  kernel:
      foreach my $kernel (sort(keys(%kernels))) {
        if (! -f "$srcdir/sys/$machine/conf/$kernel") {
            warning("no kernel config for $kernel");
-           next;
+           next kernel;
+       }
+       # Hack: check that the config is appropriate for this target.
+       # If no "machine" declaration is present, assume that it is.
+       local *KERNCONF;
+       if (open(KERNCONF, "<", "$srcdir/sys/$machine/conf/$kernel")) {
+           while (<KERNCONF>) {
+               next unless m/^machine\s+(\w+(?:\s+\w+)?)\s*(?:\#.*)?$/;
+               if ($1 !~ m/^\Q$machine\E(\s+\Q$arch\E)?$/) {
+                   warning("skipping $kernel");
+                   close(KERNCONF);
+                   next kernel;
+               }
+               last;
+           }
+           close(KERNCONF);
+       } else {
+           warning("$kernel: $!");
+           next kernel;
        }
        logstage("building $kernel kernel");
        logenv();

It will break if the "machine" declaration ever moves into an included
file, since it does not follow include statements, but it will do for
now.
Thanks! I think we are pretty likely to stay in the situation where this hack works for the foreseeable future.
-Nathan

_______________________________________________
freebsd-current@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscr...@freebsd.org"

Reply via email to