Bring in various fixes from FreeBSD:
authorMatthew Dillon <dillon@dragonflybsd.org>
Thu, 18 Nov 2004 02:01:44 +0000 (02:01 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Thu, 18 Nov 2004 02:01:44 +0000 (02:01 +0000)
* MAXPATHLEN includes the trailing NUL, Correct array sizes to reflect this.
* Correct NUL termination after strncpy.
* Make ${.OBJDIR} canonical.
* -Wall cleanup.
* unifdef -D__STDC__
* Sort #includes, remove <sys/types.h> (made redundant by <sys/param.h>),
  add <signal.h> (needed for sigaction())
* Unbreak compilation on RELENG_4.
* unifdef -UWANT_ENV_PWD. No one ever going to use this bugfeature.
* Reorder #include. Cast arg #2 of lseek to an off_t when constant. No need to
  test if failsafe memory allocation fails, it can't. perror -> warn. Use
  failsafe memory allocation provided.
* And some other doc cleanup.
* Reduce diffs between FreeBSD and DragonFly Makefile
* Added the MAKE_VERSION global that could be useful in determining
  if a given make(1) is feature-compatible with a set of makefiles.
  When merged, this will be used to replace the ugly upgrade_checks
  hacks in src/Makefile.
  Version has the RYYYYMMDDX format, where R is from RELENG_<R> and
  X allows for 10 distinguishable changes per day.
* make(I) appeared in PWB UNIX.
* Add MAKE_VERSION variables
* Don't do stupid things to avoid unused parameters, mark them __unused.
* Use %p to print a pointer, not %lx and a cast to (unsigned long).  Yuck.
* Avoid classy use of a variable one time with a constant value.
* Bit-width fields should be of type 'int'.

Submitted-by: Max Okumoto <okumoto@home>
usr.bin/make/Makefile
usr.bin/make/arch.c
usr.bin/make/buf.c
usr.bin/make/job.c
usr.bin/make/lst.lib/lstInt.h
usr.bin/make/main.c
usr.bin/make/make.1
usr.bin/make/util.c

index 6baf65a..bd6ab2a 100644 (file)
@@ -1,9 +1,9 @@
 #      @(#)Makefile    5.2 (Berkeley) 12/28/90
 # $FreeBSD: src/usr.bin/make/Makefile,v 1.13.2.1 2001/05/25 08:33:40 sobomax Exp $
-# $DragonFly: src/usr.bin/make/Makefile,v 1.4 2004/11/13 07:25:17 dillon Exp $
+# $DragonFly: src/usr.bin/make/Makefile,v 1.5 2004/11/18 02:01:39 dillon Exp $
 
 PROG=  make
-CFLAGS+= -I${.CURDIR}
+CFLAGS+=-I${.CURDIR}
 SRCS=  arch.c buf.c compat.c cond.c dir.c for.c hash.c job.c main.c \
        make.c parse.c str.c suff.c targ.c util.c var.c var_modify.c
 SRCS+= lstAppend.c lstAtEnd.c lstAtFront.c lstClose.c lstConcat.c \
@@ -15,4 +15,8 @@ SRCS+=        lstAppend.c lstAtEnd.c lstAtFront.c lstClose.c lstConcat.c \
 
 NOSHARED?=     YES
 
+CFLAGS+=-DMAKE_VERSION=\"5200205220\"
+
+main.o: ${MAKEFILE}
+
 .include <bsd.prog.mk>
index a2c058b..3a3eea6 100644 (file)
@@ -37,7 +37,7 @@
  *
  * @(#)arch.c  8.2 (Berkeley) 1/2/94
  * $FreeBSD: src/usr.bin/make/arch.c,v 1.15.2.1 2001/02/13 03:13:57 will Exp $
- * $DragonFly: src/usr.bin/make/arch.c,v 1.12 2004/11/14 20:13:12 dillon Exp $
+ * $DragonFly: src/usr.bin/make/arch.c,v 1.13 2004/11/18 02:01:39 dillon Exp $
  */
 
 /*-
@@ -468,7 +468,7 @@ ArchStatMember (char *archive, char *member, Boolean hash)
     Arch         *ar;        /* Archive descriptor */
     Hash_Entry   *he;        /* Entry containing member's description */
     struct ar_hdr arh;        /* archive-member header for reading archive */
-    char         memName[MAXPATHLEN+1];
+    char         memName[MAXPATHLEN];
                            /* Current member name while hashing. */
 
     /*
@@ -737,7 +737,7 @@ ArchSVR4Entry(Arch *ar, char *name, size_t size, FILE *arch)
     DEBUGF(ARCH, ("Replaced %s with %s\n", name, &ar->fnametab[entry]));
 
     (void) strncpy(name, &ar->fnametab[entry], MAXPATHLEN);
-    name[MAXPATHLEN] = '\0';
+    name[MAXPATHLEN - 1] = '\0';
     return 1;
 }
 #endif
index 98124fb..0bb38ce 100644 (file)
@@ -38,7 +38,7 @@
  *
  * @(#)buf.c   8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.bin/make/buf.c,v 1.11 1999/09/11 13:08:01 hoek Exp $
- * $DragonFly: src/usr.bin/make/buf.c,v 1.5 2004/11/12 22:57:04 dillon Exp $
+ * $DragonFly: src/usr.bin/make/buf.c,v 1.6 2004/11/18 02:01:39 dillon Exp $
  */
 
 /*-
@@ -93,9 +93,8 @@
 void
 Buf_OvAddByte (Buffer bp, int byte)
 {
-    int nbytes = 1;
     bp->left = 0;
-    BufExpand (bp, nbytes);
+    BufExpand (bp, 1);
 
     *bp->inPtr++ = byte;
     bp->left--;
index 434abb7..21c0fd3 100644 (file)
@@ -38,7 +38,7 @@
  *
  * @(#)job.c   8.2 (Berkeley) 3/19/94
  * $FreeBSD: src/usr.bin/make/job.c,v 1.17.2.2 2001/02/13 03:13:57 will Exp $
- * $DragonFly: src/usr.bin/make/job.c,v 1.15 2004/11/14 20:05:25 dillon Exp $
+ * $DragonFly: src/usr.bin/make/job.c,v 1.16 2004/11/18 02:01:39 dillon Exp $
  */
 
 #ifndef OLD_JOKE
 #include <sys/file.h>
 #include <sys/time.h>
 #include <sys/wait.h>
-#include <fcntl.h>
+#include <err.h>
 #include <errno.h>
-#include <utime.h>
+#include <fcntl.h>
 #include <stdio.h>
 #include <string.h>
 #include <signal.h>
 #include <unistd.h>
+#include <utime.h>
 #include "make.h"
 #include "hash.h"
 #include "dir.h"
@@ -1002,7 +1003,7 @@ Job_Touch(GNode *gn, Boolean silent)
                 * modification time, then close the file.
                 */
                if (read(streamID, &c, 1) == 1) {
-                   (void) lseek(streamID, 0L, SEEK_SET);
+                   (void) lseek(streamID, (off_t)0, SEEK_SET);
                    (void) write(streamID, &c, 1);
                }
 
@@ -1166,7 +1167,7 @@ JobExec(Job *job, char **argv)
        if (dup2(FILENO(job->cmdFILE), 0) == -1)
            Punt("Cannot dup2: %s", strerror(errno));
        (void) fcntl(0, F_SETFD, 0);
-       (void) lseek(0, 0, SEEK_SET);
+       (void) lseek(0, (off_t)0, SEEK_SET);
 
        if (usePipes) {
            /*
@@ -1571,9 +1572,6 @@ JobStart(GNode *gn, int flags, Job *previous)
        job = previous;
     } else {
        job = (Job *) emalloc(sizeof(Job));
-       if (job == NULL) {
-           Punt("JobStart out of memory");
-       }
        flags |= JOB_FIRST;
     }
 
index 45a72cc..266fb7a 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)lstInt.h      8.1 (Berkeley) 6/6/93
  * $FreeBSD: src/usr.bin/make/lst.lib/lstInt.h,v 1.7 1999/08/28 01:03:53 peter Exp $
- * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstInt.h,v 1.3 2004/11/12 21:41:54 dillon Exp $
+ * $DragonFly: src/usr.bin/make/lst.lib/Attic/lstInt.h,v 1.4 2004/11/18 02:01:44 dillon Exp $
  */
 
 /*-
@@ -51,7 +51,7 @@
 typedef struct ListNode {
        struct ListNode *prevPtr;   /* previous element in list */
        struct ListNode *nextPtr;   /* next in list */
-       short           useCount:8, /* Count of functions using the node.
+       int             useCount:8, /* Count of functions using the node.
                                     * node may not be deleted until count
                                     * goes to 0 */
                        flags:8;    /* Node status flags */
index 4523094..0f9e45d 100644 (file)
@@ -38,7 +38,7 @@
  * @(#) Copyright (c) 1988, 1989, 1990, 1993 The Regents of the University of California.  All rights reserved.
  * @(#)main.c  8.3 (Berkeley) 3/19/94
  * $FreeBSD: src/usr.bin/make/main.c,v 1.35.2.10 2003/12/16 08:34:11 des Exp $
- * $DragonFly: src/usr.bin/make/main.c,v 1.15 2004/11/14 20:05:25 dillon Exp $
+ * $DragonFly: src/usr.bin/make/main.c,v 1.16 2004/11/18 02:01:39 dillon Exp $
  */
 
 /*-
@@ -264,9 +264,7 @@ rearg:      while((c = getopt(argc, argv, OPTFLAGS)) != -1) {
                        break;
                }
                case 'E':
-                       p = malloc(strlen(optarg) + 1);
-                       if (!p)
-                               Punt("make: cannot allocate memory.");
+                       p = emalloc(strlen(optarg) + 1);
                        (void)strcpy(p, optarg);
                        (void)Lst_AtEnd(envFirstVars, (void *)p);
                        Var_Append(MAKEFLAGS, "-E", VAR_GLOBAL);
@@ -402,19 +400,11 @@ chdir_verify_path(char *path, char *obpath)
        struct stat sb;
 
        if (stat(path, &sb) == 0 && S_ISDIR(sb.st_mode)) {
-               if (chdir(path)) {
+               if (chdir(path) == -1 || getcwd(obpath, MAXPATHLEN) == NULL) {
                        warn("warning: %s", path);
                        return 0;
                }
-               else {
-                       if (path[0] != '/') {
-                               (void) snprintf(obpath, MAXPATHLEN, "%s/%s",
-                                               curdir, path);
-                               return obpath;
-                       }
-                       else
-                               return path;
-               }
+               return obpath;
        }
 
        return 0;
@@ -445,13 +435,9 @@ main(int argc, char **argv)
        Boolean outOfDate = TRUE;       /* FALSE if all targets up to date */
        struct stat sa;
        char *p, *p1, *path, *pathp;
-#ifdef WANT_ENV_PWD
-       struct stat sb;
-       char *pwd;
-#endif
-       char mdpath[MAXPATHLEN + 1];
-       char obpath[MAXPATHLEN + 1];
-       char cdpath[MAXPATHLEN + 1];
+       char mdpath[MAXPATHLEN];
+       char obpath[MAXPATHLEN];
+       char cdpath[MAXPATHLEN];
        char *machine = getenv("MACHINE");
        char *machine_arch = getenv("MACHINE_ARCH");
        char *machine_cpu = getenv("MACHINE_CPU");
@@ -490,7 +476,7 @@ main(int argc, char **argv)
        }
 #endif
        /*
-        * Find where we are and take care of PWD for the automounter...
+        * Find where we are...
         * All this code is so that we know where we are when we start up
         * on a different machine with pmake.
         */
@@ -501,14 +487,6 @@ main(int argc, char **argv)
        if (stat(curdir, &sa) == -1)
            err(2, "%s", curdir);
 
-#ifdef WANT_ENV_PWD
-       if ((pwd = getenv("PWD")) != NULL) {
-           if (stat(pwd, &sb) == 0 && sa.st_ino == sb.st_ino &&
-               sa.st_dev == sb.st_dev)
-               (void) strcpy(curdir, pwd);
-       }
-#endif
-
 #if defined(__i386__) && defined(__DragonFly_version)
        /*
         * PC-98 kernel sets the `i386' string to the utsname.machine and
@@ -612,10 +590,6 @@ main(int argc, char **argv)
                        objdir = curdir;
        }
 
-#ifdef WANT_ENV_PWD
-       setenv("PWD", objdir, 1);
-#endif
-
        create = Lst_Init(FALSE);
        makefiles = Lst_Init(FALSE);
        envFirstVars = Lst_Init(FALSE);
@@ -674,6 +648,9 @@ main(int argc, char **argv)
        Var_Set("MACHINE", machine, VAR_GLOBAL);
        Var_Set("MACHINE_ARCH", machine_arch, VAR_GLOBAL);
        Var_Set("MACHINE_CPU", machine_cpu, VAR_GLOBAL);
+#ifdef MAKE_VERSION
+       Var_Set("MAKE_VERSION", MAKE_VERSION, VAR_GLOBAL);
+#endif
 
        /*
         * First snag any flags out of the MAKE environment variable.
@@ -833,9 +810,7 @@ main(int argc, char **argv)
                    ln = Lst_Succ(ln)) {
                        char *value;
                        if (expandVars) {
-                               p1 = malloc(strlen((char *)Lst_Datum(ln)) + 1 + 3);
-                               if (!p1)
-                                       Punt("make: cannot allocate memory.");
+                               p1 = emalloc(strlen((char *)Lst_Datum(ln)) + 1 + 3);
                                /* This sprintf is safe, because of the malloc above */
                                (void)sprintf(p1, "${%s}", (char *)Lst_Datum(ln));
                                value = Var_Subst(NULL, p1, VAR_GLOBAL, FALSE);
@@ -921,7 +896,7 @@ ReadMakefile(void *p, void *q __unused)
 {
        char *fname;            /* makefile to read */
        FILE *stream;
-       char *name, path[MAXPATHLEN + 1];
+       char *name, path[MAXPATHLEN];
        char *MAKEFILE;
        int setMAKEFILE;
 
index 8a236d8..73b431d 100644 (file)
@@ -31,7 +31,7 @@
 .\"
 .\"    from: @(#)make.1        8.4 (Berkeley) 3/19/94
 .\" $FreeBSD: src/usr.bin/make/make.1,v 1.29.2.15 2002/12/17 19:01:18 seanc Exp $
-.\" $DragonFly: src/usr.bin/make/make.1,v 1.5 2004/11/12 22:02:51 dillon Exp $
+.\" $DragonFly: src/usr.bin/make/make.1,v 1.6 2004/11/18 02:01:39 dillon Exp $
 .\"
 .Dd July 2, 2004
 .Dt MAKE 1
@@ -178,8 +178,9 @@ flag is also specified.
 Continue processing after errors are encountered, but only on those targets
 that do not depend on the target whose creation caused the error.
 .It Fl m Ar directory
-Specify a directory in which to search for sys.mk and makefiles included
-via the <...> style.
+Specify a directory in which to search for
+.Pa sys.mk
+and makefiles included via the <...> style.
 Multiple directories can be added to form a search path.
 This path will override the default system include path:
 .Pa /usr/share/mk .
@@ -518,6 +519,12 @@ If they are undefined and
 .Nm
 is unable to change into any of the remaining three directories,
 then the current directory is used.
+.Pp
+.Nm Make
+sets
+.Va .OBJDIR
+to the canonical path given by
+.Xr getcwd 3 .
 .It Va .MAKEFILE_LIST
 As
 .Nm
@@ -556,29 +563,6 @@ executes.
 A synonym for
 .Va .MAKEFLAGS
 provided for backward compatibility.
-.It Ev PWD
-Alternate path to the current directory.
-Supported if built with WANT_ENV_PWD defined.
-.Nm
-normally sets
-.Ql Va .CURDIR
-to the canonical path given by
-.Xr getcwd 3 .
-However, if the environment variable
-.Ev PWD
-is set and gives a path to the current directory, then
-.Nm
-sets
-.Ql Va .CURDIR
-to the value of
-.Ev PWD
-instead.
-.Ev PWD
-is always set to the value of
-.Ql Va .OBJDIR
-for all programs which
-.Nm
-executes.
 .It Va .TARGETS
 List of targets
 .Nm
@@ -608,9 +592,7 @@ Makefiles may assign a colon-delimited list of directories to
 .Va VPATH .
 These directories will be searched for source files by
 .Nm
-after
-.Nm
-has finished parsing all input makefiles.
+after it has finished parsing all input makefiles.
 .El
 .Pp
 Variable expansion may be modified to select or modify each word of the
@@ -682,7 +664,7 @@ the rest of the modifier.
 .It Cm Q
 Quotes every shell meta-character in the variable, so that it can be passed
 safely through recursive invocations of
-.Nm .
+.Nm Ns .
 .It Cm R
 Replaces each word in the variable with everything but its suffix.
 .Sm off
@@ -730,8 +712,6 @@ with the single exception that a backslash is used to prevent the expansion
 of a dollar sign
 .Pq Ql \&$ ,
 not a preceding dollar sign as is usual.
-.It Cm T
-Replaces each word in the variable with its last component.
 .It Ar old_string=new_string
 This is the
 .At V
@@ -752,13 +732,15 @@ is the substring of
 .Ar old_string
 to be replaced in
 .Ar new_string
+.It Cm T
+Replaces each word in the variable with its last component.
 .It Cm U
 Converts variable to upper-case letters.
 .El
 .Sh DIRECTIVES, CONDITIONALS, AND FOR LOOPS
 Directives, conditionals, and for loops reminiscent
 of the C programming language are provided in
-.Nm .
+.Nm Ns .
 All such structures are identified by a line beginning with a single
 dot
 .Pq Ql \&.
@@ -886,7 +868,8 @@ The
 may be any one of the following:
 .Bl -tag -width "Cm XX"
 .It Cm \&|\&|
-logical OR
+logical
+.Tn OR
 .It Cm \&&&
 Logical
 .Tn AND ;
@@ -1139,7 +1122,9 @@ no effect.
 .It Ic .NOTPARALLEL
 Disable parallel mode.
 .It Ic .NO_PARALLEL
-Same as above, for compatibility with other pmake variants.
+Same as above, for compatibility with other
+.Nm pmake
+variants.
 .It Ic .ORDER
 The named targets are made in sequence.
 .\" XXX: NOT YET!!!!
@@ -1193,7 +1178,7 @@ attribute is applied to every
 command in the file.
 .It Ic .SUFFIXES
 Each source specifies a suffix to
-.Nm .
+.Nm Ns .
 If no sources are specified, any previous specified suffices are deleted.
 .El
 .Sh COMPATIBILITY
@@ -1221,9 +1206,8 @@ utility uses the following environment variables, if they exist:
 .Ev MAKE ,
 .Ev MAKEFLAGS ,
 .Ev MAKEOBJDIR ,
-.Ev MAKEOBJDIRPREFIX ,
 and
-.Ev PWD .
+.Ev MAKEOBJDIRPREFIX .
 .Sh FILES
 .Bl -tag -width /usr/share/doc/psd/12.make -compact
 .It Pa .depend
@@ -1299,5 +1283,4 @@ in
 .Sh HISTORY
 A
 .Nm
-command appeared in
-.At v7 .
+command appeared in PWB UNIX.
index 35f4635..ac9fe68 100644 (file)
@@ -25,7 +25,7 @@
  *    without specific prior written permission.
  *
  * $FreeBSD: src/usr.bin/make/util.c,v 1.5.2.2 2001/02/13 03:13:58 will Exp $
- * $DragonFly: src/usr.bin/make/util.c,v 1.5 2004/11/13 07:25:17 dillon Exp $
+ * $DragonFly: src/usr.bin/make/util.c,v 1.6 2004/11/18 02:01:39 dillon Exp $
  */
 
 #include <sys/types.h>
@@ -262,9 +262,9 @@ eunlink(file)
 int
 PrintAddr(a, b)
     void * a;
-    void * b;
+    void * b __unused;
 {
-    printf("%lx ", (unsigned long) a);
-    return b ? 0 : 0;
+    printf("%p ", a);
+    return 0;
 }