[PATCH] touchless dependencies for 2.4.x

From: Geert Uytterhoeven (geert@linux-m68k.org)
Date: Fri May 23 2003 - 08:49:45 EST


        Hi,

The 2.4.x dependency system depends on being able to `touch' include files in
case of recursive dependencies. This fails when using a revision control
system (e.g. ClearCase) where non-checked out files are read-only and cannot be
touch'ed.

The patch below solves this by making object files depend on (recursive) lists,
containing the list of dependencies for each header file.

Example:
  - Dependencies:
      o file.c includes header.h
      o header.h includes header2.h

  - Old way:

      o .depend:

            file.o: file.c header.h

      o .hdepend:

            header.h: header2.h
                        touch header.h

  - New way:

      o .depend:

            file.o: file.c header.h $(dep_header.h)

      o .hdepend:

            dep_header.h += header2.h $(dep_header2.h)

Is this OK? So far I didn't notice any regressions.
    
--- linux-2.4.x/scripts/mkdep.c.orig Tue Apr 1 17:04:24 2003
+++ linux-2.4.x/scripts/mkdep.c Wed Apr 2 17:39:59 2003
@@ -45,8 +45,7 @@
 
 
 
-char __depname[512] = "\n\t@touch ";
-#define depname (__depname+9)
+char depname[512];
 int hasdep;
 
 struct path_struct {
@@ -75,9 +74,14 @@
 {
         if (!hasdep) {
                 hasdep = 1;
- printf("%s:", depname);
- if (g_filename)
+ if (g_filename) {
+ /* Source file (*.[cS]) */
+ printf("%s:", depname);
                         printf(" %s", g_filename);
+ } else {
+ /* header file (*.h) */
+ printf("dep_%s +=", depname);
+ }
         }
 }
 
@@ -203,7 +207,8 @@
                 path->buffer[path->len+len] = '\0';
                 if (access(path->buffer, F_OK) == 0) {
                         do_depname();
- printf(" \\\n %s", path->buffer);
+ printf(" \\\n %s $(dep_%s)", path->buffer,
+ path->buffer);
                         return;
                 }
         }
@@ -520,7 +525,7 @@
 /*
  * Generate dependencies for one file.
  */
-void do_depend(const char * filename, const char * command)
+void do_depend(const char * filename)
 {
         int mapsize;
         int pagesizem1 = getpagesize()-1;
@@ -559,9 +564,7 @@
         clear_config();
         state_machine(map, map+st.st_size);
         if (hasdep) {
- puts(command);
- if (*command)
- define_precious(filename);
+ puts("");
         }
 
         munmap(map, mapsize);
@@ -607,7 +610,6 @@
 
         while (--argc > 0) {
                 const char * filename = *++argv;
- const char * command = __depname;
                 g_filename = 0;
                 len = strlen(filename);
                 memcpy(depname, filename, len+1);
@@ -615,10 +617,9 @@
                         if (filename[len-1] == 'c' || filename[len-1] == 'S') {
                             depname[len-1] = 'o';
                             g_filename = filename;
- command = "";
                         }
                 }
- do_depend(filename, command);
+ do_depend(filename);
         }
         if (len_precious) {
                 *(str_precious+len_precious) = '\0';

Gr{oetje,eeting}s,

                                                Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri May 23 2003 - 22:00:55 EST