From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Thu, 1 Nov 2001 06:19:40 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Thu, 1 Nov 2001 06:19:31 -0500 Received: from t2.redhat.com ([199.183.24.243]:31476 "HELO executor.cambridge.redhat.com") by vger.kernel.org with SMTP id ; Thu, 1 Nov 2001 06:19:21 -0500 To: Keith Owens Cc: linux-kernel@vger.kernel.org Subject: Re: kbuild-2.5 In-Reply-To: Your message of "Thu, 11 Oct 2001 07:16:05 +1000." <16055.1002748565@ocs3.intra.ocs.com.au> User-Agent: EMH/1.14.1 SEMI/1.14.3 (Ushinoya) FLIM/1.14.3 (=?ISO-8859-4?Q?Unebigory=F2mae?=) APEL/10.3 Emacs/20.7 (i386-redhat-linux-gnu) MULE/4.0 (HANANOEN) MIME-Version: 1.0 (generated by SEMI 1.14.3 - "Ushinoya") Content-Type: text/plain; charset=US-ASCII Date: Thu, 01 Nov 2001 11:19:02 +0000 Message-ID: <22644.1004613542@warthog.cambridge.redhat.com> From: David Howells Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org > David Howells wrote: > >Will kbuild get Makefiles in each subdirectory that allow > >it to build just the things in that subdirectory tree? > > Documentation/kbuild/kbuild-2.5.txt, KBUILD TARGETS. Okay... for users of emacs, here's an elisp function that looks to see if it's in a subdirectory of a kernel tree (and if so whether it's kbuild or traditional), and if so invents an appropriate command line for compiling just in that subdir:-) Otherwise it just falls back to the usual compile function. This can be put in a .emacs file, and can bound to a key: (global-set-key [f5] 'kernel-compile) David (defun kernel-compile () "Attempt to compile the current directory as if it's part of a kernel tree, otherwise default to normal compile." (interactive) (let ((buffile (buffer-file-name)) (bufbits) (curdir) (topdir) (subdir) (slasher) (cmdline) (pos)) (if (not buffile) ;; no buffer file name (progn (setq cmdline (read-from-minibuffer "Compile command: " compile-command nil nil '(compile-history . 1))) (compile cmdline) ) ;; got a buffer filename, split into directory name chunks (progn (setq bufbits (split-string (buffer-file-name) "/")) ;; create a function to interpose slash characters between all the ;; elements of a string list, but not to add leading of trailing ;; slashes (setq slasher (lambda (lst slasher) (if (not (cdr lst)) lst (append (list (concat (car lst) "/")) (apply slasher (list (cdr lst) slasher)) )))) ;; iteratively work up the directory tree from the current directory ;; looking for various marker files (setq topdir nil) (setq pos (length bufbits)) (while (and (> pos 1) (not topdir)) (setq pos (- pos 1)) (setq curdir (subseq bufbits 0 pos)) (setq curdir (apply slasher (list curdir slasher))) (setq curdir (eval (append '(concat) (list "/") curdir))) (if (and (file-readable-p (concat curdir "/COPYING")) (file-readable-p (concat curdir "/CREDITS")) (file-readable-p (concat curdir "/README")) (file-readable-p (concat curdir "/MAINTAINERS")) (file-readable-p (concat curdir "/Makefile")) (file-readable-p (concat curdir "/kernel/sched.c")) ) (setq topdir curdir) ) ) (if topdir ;; deal with the markers being found (progn (if (not (file-symlink-p (concat curdir "/include/asm"))) (error "The %s/include/asm symlink appears to be missing" topdir)) (setq subdir (subseq bufbits pos(- (length bufbits) 1))) (setq subdir (apply slasher (list subdir slasher))) (setq subdir (eval (append '(concat) subdir))) ;; determine whether using kbuild or not (if (file-readable-p (concat curdir "/scripts/shadow.pl")) ;; kbuild (setq cmdline (concat "make -C " topdir " " subdir)) ;; traditional (setq cmdline (concat "make -C " topdir " SUBDIRS=" subdir)) ) (setq cmdline (read-from-minibuffer "Kernel compile: " cmdline nil nil '(compile-history . 1))) (compile cmdline) ) ;; deal with the markers not being found (setq cmdline (read-from-minibuffer "Compile command: " compile-command nil nil '(compile-history . 1))) (compile cmdline) ) )) ) )