Merge bmake-20130730

Main feature of interest is .MAKE.JOB.PREFIX=
to suppress --- job --- tokens.
This commit is contained in:
Simon J. Gerraty
2013-08-02 06:25:28 +00:00
26 changed files with 368 additions and 171 deletions
+33
View File
@@ -1,3 +1,36 @@
2013-07-30 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (MAKE_VERSION): 20130730
Merge with NetBSD make, pick up
o Allow suppression of --- job -- tokens by setting
.MAKE.JOB.PREFIX empty.
2013-07-16 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (MAKE_VERSION): 20130716
Merge with NetBSD make, pick up
o number of gmake compatability tweaks
-w for gmake style entering/leaving messages
if .MAKE.LEVEL > 0 indicate it in progname "make[1]" etc.
handle MAKEFLAGS containing only letters.
o when overriding a GLOBAL variable on the command line,
delete it from GLOBAL context so -V doesn't show the wrong
value.
2013-07-06 Simon J. Gerraty <sjg@bad.crufty.net>
* configure.in: We don't need MAKE_LEVEL_SAFE anymore.
* Makefile (MAKE_VERSION): 20130706
Merge with NetBSD make, pick up
o Shell_Init(): export shellErrFlag if commandShell hasErrCtl is
true so that CompatRunCommand() can use it, to ensure
consistent behavior with jobs mode.
o use MAKE_LEVEL_ENV to define the variable to propagate
.MAKE.LEVEL - currently set to MAKELEVEL (same as gmake).
o meta.c: use .MAKE.META.IGNORE_PATHS to allow customization of
paths to ignore.
2013-06-04 Simon J. Gerraty <sjg@bad.crufty.net> 2013-06-04 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (MAKE_VERSION): 20130604 * Makefile (MAKE_VERSION): 20130604
+2 -2
View File
@@ -1,7 +1,7 @@
# $Id: Makefile,v 1.14 2013/06/05 04:03:22 sjg Exp $ # $Id: Makefile,v 1.17 2013/07/30 19:13:53 sjg Exp $
# Base version on src date # Base version on src date
MAKE_VERSION= 20130604 MAKE_VERSION= 20130730
PROG= bmake PROG= bmake
+21 -4
View File
@@ -1,4 +1,4 @@
.\" $NetBSD: make.1,v 1.213 2013/03/31 05:49:51 sjg Exp $ .\" $NetBSD: make.1,v 1.220 2013/07/30 19:09:57 sjg Exp $
.\" .\"
.\" Copyright (c) 1990, 1993 .\" Copyright (c) 1990, 1993
.\" The Regents of the University of California. All rights reserved. .\" The Regents of the University of California. All rights reserved.
@@ -29,7 +29,7 @@
.\" .\"
.\" from: @(#)make.1 8.4 (Berkeley) 3/19/94 .\" from: @(#)make.1 8.4 (Berkeley) 3/19/94
.\" .\"
.Dd March 30, 2013 .Dd July 30, 2013
.Dt MAKE 1 .Dt MAKE 1
.Os .Os
.Sh NAME .Sh NAME
@@ -37,7 +37,7 @@
.Nd maintain program dependencies .Nd maintain program dependencies
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl BeikNnqrstWX .Op Fl BeikNnqrstWwX
.Op Fl C Ar directory .Op Fl C Ar directory
.Op Fl D Ar variable .Op Fl D Ar variable
.Op Fl d Ar flags .Op Fl d Ar flags
@@ -209,6 +209,8 @@ Force the
option to print raw values of variables. option to print raw values of variables.
.It Ar v .It Ar v
Print debugging information about variable assignment. Print debugging information about variable assignment.
.It Ar w
Print entering and leaving directory messages, pre and post processing.
.It Ar x .It Ar x
Run shell commands with Run shell commands with
.Fl x .Fl x
@@ -743,6 +745,9 @@ then output for each target is prefixed with a token
.Ql --- target --- .Ql --- target ---
the first part of which can be controlled via the first part of which can be controlled via
.Va .MAKE.JOB.PREFIX . .Va .MAKE.JOB.PREFIX .
If
.Va .MAKE.JOB.PREFIX
is empty, no token is printed.
.br .br
For example: For example:
.Li .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] .Li .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}]
@@ -856,6 +861,11 @@ In "meta" mode, this variable contains a list of all the meta files
used (updated or not). used (updated or not).
This list can be used to process the meta files to extract dependency This list can be used to process the meta files to extract dependency
information. information.
.It Va .MAKE.META.IGNORE_PATHS
Provides a list of path prefixes that should be ignored;
because the contents are expected to change over time.
The default list includes:
.Ql Pa /dev /etc /proc /tmp /var/run /var/tmp
.It Va .MAKE.META.PREFIX .It Va .MAKE.META.PREFIX
Defines the message printed for each meta file updated in "meta verbose" mode. Defines the message printed for each meta file updated in "meta verbose" mode.
The default value is: The default value is:
@@ -1298,7 +1308,7 @@ should start and end with a period.
For example. For example.
.Dl ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} .Dl ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
.Pp .Pp
However a single character varaiable is often more readable: However a single character variable is often more readable:
.Dl ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} .Dl ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
.It Cm \&:U Ns Ar newval .It Cm \&:U Ns Ar newval
If the variable is undefined If the variable is undefined
@@ -2115,6 +2125,13 @@ for Sprite at Berkeley.
It was designed to be a parallel distributed make running jobs on different It was designed to be a parallel distributed make running jobs on different
machines using a daemon called machines using a daemon called
.Dq customs . .Dq customs .
.Pp
Historically the target/dependency
.Dq FRC
has been used to FoRCe rebuilding (since the target/dependency
does not exist... unless someone creates an
.Dq FRC
file).
.Sh BUGS .Sh BUGS
The The
make make
+18 -4
View File
@@ -4,7 +4,7 @@ NNAAMMEE
bbmmaakkee -- maintain program dependencies bbmmaakkee -- maintain program dependencies
SSYYNNOOPPSSIISS SSYYNNOOPPSSIISS
bbmmaakkee [--BBeeiikkNNnnqqrrssttWWXX] [--CC _d_i_r_e_c_t_o_r_y] [--DD _v_a_r_i_a_b_l_e] [--dd _f_l_a_g_s] bbmmaakkee [--BBeeiikkNNnnqqrrssttWWwwXX] [--CC _d_i_r_e_c_t_o_r_y] [--DD _v_a_r_i_a_b_l_e] [--dd _f_l_a_g_s]
[--ff _m_a_k_e_f_i_l_e] [--II _d_i_r_e_c_t_o_r_y] [--JJ _p_r_i_v_a_t_e] [--jj _m_a_x___j_o_b_s] [--ff _m_a_k_e_f_i_l_e] [--II _d_i_r_e_c_t_o_r_y] [--JJ _p_r_i_v_a_t_e] [--jj _m_a_x___j_o_b_s]
[--mm _d_i_r_e_c_t_o_r_y] [--TT _f_i_l_e] [--VV _v_a_r_i_a_b_l_e] [_v_a_r_i_a_b_l_e_=_v_a_l_u_e] [--mm _d_i_r_e_c_t_o_r_y] [--TT _f_i_l_e] [--VV _v_a_r_i_a_b_l_e] [_v_a_r_i_a_b_l_e_=_v_a_l_u_e]
[_t_a_r_g_e_t _._._.] [_t_a_r_g_e_t _._._.]
@@ -122,6 +122,9 @@ DDEESSCCRRIIPPTTIIOONN
_v Print debugging information about variable assignment. _v Print debugging information about variable assignment.
_w Print entering and leaving directory messages, pre and
post processing.
_x Run shell commands with --xx so the actual commands are _x Run shell commands with --xx so the actual commands are
printed as they are executed. printed as they are executed.
@@ -469,7 +472,8 @@ VVAARRIIAABBLLEE AASSSSIIGGNNMMEENNTTSS
_._M_A_K_E_._J_O_B_._P_R_E_F_I_X _._M_A_K_E_._J_O_B_._P_R_E_F_I_X
If bbmmaakkee is run with _j then output for each target is If bbmmaakkee is run with _j then output for each target is
prefixed with a token `--- target ---' the first part of prefixed with a token `--- target ---' the first part of
which can be controlled via _._M_A_K_E_._J_O_B_._P_R_E_F_I_X. which can be controlled via _._M_A_K_E_._J_O_B_._P_R_E_F_I_X. If
_._M_A_K_E_._J_O_B_._P_R_E_F_I_X is empty, no token is printed.
For example: For example:
.MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}]
would produce tokens like `---make[1234] target ---' mak- would produce tokens like `---make[1234] target ---' mak-
@@ -551,6 +555,12 @@ VVAARRIIAABBLLEE AASSSSIIGGNNMMEENNTTSS
to process the meta files to extract dependency informa- to process the meta files to extract dependency informa-
tion. tion.
_._M_A_K_E_._M_E_T_A_._I_G_N_O_R_E___P_A_T_H_S
Provides a list of path prefixes that should be ignored;
because the contents are expected to change over time.
The default list includes: `_/_d_e_v _/_e_t_c _/_p_r_o_c _/_t_m_p _/_v_a_r_/_r_u_n
_/_v_a_r_/_t_m_p'
_._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X _._M_A_K_E_._M_E_T_A_._P_R_E_F_I_X
Defines the message printed for each meta file updated in Defines the message printed for each meta file updated in
"meta verbose" mode. The default value is: "meta verbose" mode. The default value is:
@@ -818,7 +828,7 @@ VVAARRIIAABBLLEE AASSSSIIGGNNMMEENNTTSS
period. For example. period. For example.
${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
However a single character varaiable is often more readable: However a single character variable is often more readable:
${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
::UU_n_e_w_v_a_l ::UU_n_e_w_v_a_l
@@ -1351,6 +1361,10 @@ HHIISSTTOORRYY
Berkeley. It was designed to be a parallel distributed make running jobs Berkeley. It was designed to be a parallel distributed make running jobs
on different machines using a daemon called ``customs''. on different machines using a daemon called ``customs''.
Historically the target/dependency ``FRC'' has been used to FoRCe
rebuilding (since the target/dependency does not exist... unless someone
creates an ``FRC'' file).
BBUUGGSS BBUUGGSS
The make syntax is difficult to parse without actually acting of the The make syntax is difficult to parse without actually acting of the
data. For instance finding the end of a variable use should involve data. For instance finding the end of a variable use should involve
@@ -1360,4 +1374,4 @@ BBUUGGSS
There is no way of escaping a space character in a filename. There is no way of escaping a space character in a filename.
NetBSD 5.1 March 30, 2013 NetBSD 5.1 NetBSD 5.1 July 30, 2013 NetBSD 5.1
+14 -9
View File
@@ -1,4 +1,4 @@
/* $NetBSD: compat.c,v 1.91 2013/01/25 02:01:10 sjg Exp $ */ /* $NetBSD: compat.c,v 1.92 2013/07/05 22:14:56 sjg Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California. * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
*/ */
#ifndef MAKE_NATIVE #ifndef MAKE_NATIVE
static char rcsid[] = "$NetBSD: compat.c,v 1.91 2013/01/25 02:01:10 sjg Exp $"; static char rcsid[] = "$NetBSD: compat.c,v 1.92 2013/07/05 22:14:56 sjg Exp $";
#else #else
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
#if 0 #if 0
static char sccsid[] = "@(#)compat.c 8.2 (Berkeley) 3/19/94"; static char sccsid[] = "@(#)compat.c 8.2 (Berkeley) 3/19/94";
#else #else
__RCSID("$NetBSD: compat.c,v 1.91 2013/01/25 02:01:10 sjg Exp $"); __RCSID("$NetBSD: compat.c,v 1.92 2013/07/05 22:14:56 sjg Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
#endif #endif
@@ -332,18 +332,23 @@ CompatRunCommand(void *cmdp, void *gnp)
* We need to pass the command off to the shell, typically * We need to pass the command off to the shell, typically
* because the command contains a "meta" character. * because the command contains a "meta" character.
*/ */
static const char *shargv[4]; static const char *shargv[5];
int shargc;
shargv[0] = shellPath; shargc = 0;
shargv[shargc++] = shellPath;
/* /*
* The following work for any of the builtin shell specs. * The following work for any of the builtin shell specs.
*/ */
if (shellErrFlag) {
shargv[shargc++] = shellErrFlag;
}
if (DEBUG(SHELL)) if (DEBUG(SHELL))
shargv[1] = "-xc"; shargv[shargc++] = "-xc";
else else
shargv[1] = "-c"; shargv[shargc++] = "-c";
shargv[2] = cmd; shargv[shargc++] = cmd;
shargv[3] = NULL; shargv[shargc++] = NULL;
av = shargv; av = shargv;
argc = 0; argc = 0;
bp = NULL; bp = NULL;
+9 -16
View File
@@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.64 for bmake 20130303. # Generated by GNU Autoconf 2.64 for bmake 20130706.
# #
# Report bugs to <sjg@NetBSD.org>. # Report bugs to <sjg@NetBSD.org>.
# #
@@ -549,8 +549,8 @@ MAKEFLAGS=
# Identity of this package. # Identity of this package.
PACKAGE_NAME='bmake' PACKAGE_NAME='bmake'
PACKAGE_TARNAME='bmake' PACKAGE_TARNAME='bmake'
PACKAGE_VERSION='20130303' PACKAGE_VERSION='20130706'
PACKAGE_STRING='bmake 20130303' PACKAGE_STRING='bmake 20130706'
PACKAGE_BUGREPORT='sjg@NetBSD.org' PACKAGE_BUGREPORT='sjg@NetBSD.org'
PACKAGE_URL='' PACKAGE_URL=''
@@ -1220,7 +1220,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures bmake 20130303 to adapt to many kinds of systems. \`configure' configures bmake 20130706 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1281,7 +1281,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of bmake 20130303:";; short | recursive ) echo "Configuration of bmake 20130706:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@@ -1386,7 +1386,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
bmake configure 20130303 bmake configure 20130706
generated by GNU Autoconf 2.64 generated by GNU Autoconf 2.64
Copyright (C) 2009 Free Software Foundation, Inc. Copyright (C) 2009 Free Software Foundation, Inc.
@@ -1907,7 +1907,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by bmake $as_me 20130303, which was It was created by bmake $as_me 20130706, which was
generated by GNU Autoconf 2.64. Invocation command line was generated by GNU Autoconf 2.64. Invocation command line was
$ $0 $@ $ $0 $@
@@ -4245,13 +4245,6 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ECHO_N "checking if sh will pass .MAKE. variables... $ECHO_C" >&6
ok=`env .MAKE.LEVEL=1 /bin/sh -c env | grep LEVEL=`
case "$ok" in
"") echo no >&6; CPPFLAGS="${CPPFLAGS} -DNEED_MAKE_LEVEL_SAFE";;
*) echo yes >&6;;
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
$as_echo_n "checking for ANSI C header files... " >&6; } $as_echo_n "checking for ANSI C header files... " >&6; }
@@ -6374,7 +6367,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by bmake $as_me 20130303, which was This file was extended by bmake $as_me 20130706, which was
generated by GNU Autoconf 2.64. Invocation command line was generated by GNU Autoconf 2.64. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@@ -6434,7 +6427,7 @@ Report bugs to <sjg@NetBSD.org>."
_ACEOF _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\ ac_cs_version="\\
bmake config.status 20130303 bmake config.status 20130706
configured by $0, generated by GNU Autoconf 2.64, configured by $0, generated by GNU Autoconf 2.64,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+2 -11
View File
@@ -1,10 +1,10 @@
dnl dnl
dnl RCSid: dnl RCSid:
dnl $Id: configure.in,v 1.48 2013/03/04 21:25:57 sjg Exp $ dnl $Id: configure.in,v 1.49 2013/07/06 18:25:19 sjg Exp $
dnl dnl
dnl Process this file with autoconf to produce a configure script dnl Process this file with autoconf to produce a configure script
dnl dnl
AC_INIT([bmake], [20130303], [sjg@NetBSD.org]) AC_INIT([bmake], [20130706], [sjg@NetBSD.org])
AC_CONFIG_HEADER(config.h) AC_CONFIG_HEADER(config.h)
dnl make srcdir absolute dnl make srcdir absolute
@@ -78,15 +78,6 @@ AC_PROG_INSTALL
dnl Executable suffix - normally empty; .exe on os2. dnl Executable suffix - normally empty; .exe on os2.
AC_SUBST(ac_exe_suffix)dnl AC_SUBST(ac_exe_suffix)dnl
dnl
dnl Check if /bin/sh will pass .MAKE.LEVEL
echo $ECHO_N "checking if sh will pass .MAKE. variables... $ECHO_C" >&6
ok=`env .MAKE.LEVEL=1 /bin/sh -c env | grep LEVEL=`
case "$ok" in
"") echo no >&6; CPPFLAGS="${CPPFLAGS} -DNEED_MAKE_LEVEL_SAFE";;
*) echo yes >&6;;
esac
dnl dnl
dnl AC_C_CROSS dnl AC_C_CROSS
dnl dnl
+25 -4
View File
@@ -1,4 +1,4 @@
/* $NetBSD: job.c,v 1.173 2013/06/05 03:59:43 sjg Exp $ */ /* $NetBSD: job.c,v 1.175 2013/07/30 19:09:57 sjg Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California. * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
*/ */
#ifndef MAKE_NATIVE #ifndef MAKE_NATIVE
static char rcsid[] = "$NetBSD: job.c,v 1.173 2013/06/05 03:59:43 sjg Exp $"; static char rcsid[] = "$NetBSD: job.c,v 1.175 2013/07/30 19:09:57 sjg Exp $";
#else #else
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
#if 0 #if 0
static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94"; static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94";
#else #else
__RCSID("$NetBSD: job.c,v 1.173 2013/06/05 03:59:43 sjg Exp $"); __RCSID("$NetBSD: job.c,v 1.175 2013/07/30 19:09:57 sjg Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
#endif #endif
@@ -313,6 +313,7 @@ static Shell *commandShell = &shells[DEFSHELL_INDEX]; /* this is the shell to
const char *shellPath = NULL, /* full pathname of const char *shellPath = NULL, /* full pathname of
* executable image */ * executable image */
*shellName = NULL; /* last component of shell */ *shellName = NULL; /* last component of shell */
char *shellErrFlag = NULL;
static const char *shellArgv = NULL; /* Custom shell args */ static const char *shellArgv = NULL; /* Custom shell args */
@@ -344,7 +345,7 @@ static Job childExitJob; /* child exit pseudo-job */
#define TARG_FMT "%s %s ---\n" /* Default format */ #define TARG_FMT "%s %s ---\n" /* Default format */
#define MESSAGE(fp, gn) \ #define MESSAGE(fp, gn) \
if (maxJobs != 1) \ if (maxJobs != 1 && targPrefix && *targPrefix) \
(void)fprintf(fp, TARG_FMT, targPrefix, gn->name) (void)fprintf(fp, TARG_FMT, targPrefix, gn->name)
static sigset_t caught_signals; /* Set of signals we handle */ static sigset_t caught_signals; /* Set of signals we handle */
@@ -2152,6 +2153,24 @@ Shell_Init(void)
if (commandShell->echo == NULL) { if (commandShell->echo == NULL) {
commandShell->echo = ""; commandShell->echo = "";
} }
if (commandShell->hasErrCtl && *commandShell->exit) {
if (shellErrFlag &&
strcmp(commandShell->exit, &shellErrFlag[1]) != 0) {
free(shellErrFlag);
shellErrFlag = NULL;
}
if (!shellErrFlag) {
int n = strlen(commandShell->exit) + 2;
shellErrFlag = bmake_malloc(n);
if (shellErrFlag) {
snprintf(shellErrFlag, n, "-%s", commandShell->exit);
}
}
} else if (shellErrFlag) {
free(shellErrFlag);
shellErrFlag = NULL;
}
} }
/*- /*-
@@ -2496,6 +2515,8 @@ Job_ParseShell(char *line)
commandShell = bmake_malloc(sizeof(Shell)); commandShell = bmake_malloc(sizeof(Shell));
*commandShell = newShell; *commandShell = newShell;
} }
/* this will take care of shellErrFlag */
Shell_Init();
} }
if (commandShell->echoOn && commandShell->echoOff) { if (commandShell->echoOn && commandShell->echoOff) {
+2 -1
View File
@@ -1,4 +1,4 @@
/* $NetBSD: job.h,v 1.41 2013/03/05 22:01:44 christos Exp $ */ /* $NetBSD: job.h,v 1.42 2013/07/05 22:14:56 sjg Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California. * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -243,6 +243,7 @@ typedef struct Shell {
extern const char *shellPath; extern const char *shellPath;
extern const char *shellName; extern const char *shellName;
extern char *shellErrFlag;
extern int jobTokensRunning; /* tokens currently "out" */ extern int jobTokensRunning; /* tokens currently "out" */
extern int maxJobs; /* Max jobs we can run */ extern int maxJobs; /* Max jobs we can run */
+78 -22
View File
@@ -1,4 +1,4 @@
/* $NetBSD: main.c,v 1.210 2013/03/23 05:31:29 sjg Exp $ */ /* $NetBSD: main.c,v 1.222 2013/07/18 15:31:49 sjg Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990, 1993 * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,7 +69,7 @@
*/ */
#ifndef MAKE_NATIVE #ifndef MAKE_NATIVE
static char rcsid[] = "$NetBSD: main.c,v 1.210 2013/03/23 05:31:29 sjg Exp $"; static char rcsid[] = "$NetBSD: main.c,v 1.222 2013/07/18 15:31:49 sjg Exp $";
#else #else
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
@@ -81,7 +81,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993\
#if 0 #if 0
static char sccsid[] = "@(#)main.c 8.3 (Berkeley) 3/19/94"; static char sccsid[] = "@(#)main.c 8.3 (Berkeley) 3/19/94";
#else #else
__RCSID("$NetBSD: main.c,v 1.210 2013/03/23 05:31:29 sjg Exp $"); __RCSID("$NetBSD: main.c,v 1.222 2013/07/18 15:31:49 sjg Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
#endif #endif
@@ -117,17 +117,18 @@ __RCSID("$NetBSD: main.c,v 1.210 2013/03/23 05:31:29 sjg Exp $");
#include <sys/time.h> #include <sys/time.h>
#include <sys/param.h> #include <sys/param.h>
#include <sys/resource.h> #include <sys/resource.h>
#include <signal.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <sys/utsname.h> #include <sys/utsname.h>
#include "wait.h" #include "wait.h"
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <signal.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <time.h> #include <time.h>
#include <ctype.h>
#include "make.h" #include "make.h"
#include "hash.h" #include "hash.h"
@@ -163,6 +164,7 @@ Boolean noRecursiveExecute; /* -N flag */
Boolean keepgoing; /* -k flag */ Boolean keepgoing; /* -k flag */
Boolean queryFlag; /* -q flag */ Boolean queryFlag; /* -q flag */
Boolean touchFlag; /* -t flag */ Boolean touchFlag; /* -t flag */
Boolean enterFlag; /* -w flag */
Boolean ignoreErrors; /* -i flag */ Boolean ignoreErrors; /* -i flag */
Boolean beSilent; /* -s flag */ Boolean beSilent; /* -s flag */
Boolean oldVars; /* variable substitution style */ Boolean oldVars; /* variable substitution style */
@@ -184,6 +186,7 @@ char curdir[MAXPATHLEN + 1]; /* Startup directory */
char *progname; /* the program name */ char *progname; /* the program name */
char *makeDependfile; char *makeDependfile;
pid_t myPid; pid_t myPid;
int makelevel;
Boolean forceJobs = FALSE; Boolean forceJobs = FALSE;
@@ -198,6 +201,38 @@ Boolean forceJobs = FALSE;
extern Lst parseIncPath; extern Lst parseIncPath;
/*
* For compatibility with the POSIX version of MAKEFLAGS that includes
* all the options with out -, convert flags to -f -l -a -g -s.
*/
static char *
explode(const char *flags)
{
size_t len;
char *nf, *st;
const char *f;
if (flags == NULL)
return NULL;
for (f = flags; *f; f++)
if (!isalpha((unsigned char)*f))
break;
if (*f)
return bmake_strdup(flags);
len = strlen(flags);
st = nf = bmake_malloc(len * 3 + 1);
while (*flags) {
*nf++ = '-';
*nf++ = *flags++;
*nf++ = ' ';
}
*nf = '\0';
return st;
}
static void static void
parse_debug_options(const char *argvalue) parse_debug_options(const char *argvalue)
{ {
@@ -350,7 +385,7 @@ MainParseArgs(int argc, char **argv)
Boolean inOption, dashDash = FALSE; Boolean inOption, dashDash = FALSE;
char found_path[MAXPATHLEN + 1]; /* for searching for sys.mk */ char found_path[MAXPATHLEN + 1]; /* for searching for sys.mk */
#define OPTFLAGS "BC:D:I:J:NST:V:WXd:ef:ij:km:nqrst" #define OPTFLAGS "BC:D:I:J:NST:V:WXd:ef:ij:km:nqrstw"
/* Can't actually use getopt(3) because rescanning is not portable */ /* Can't actually use getopt(3) because rescanning is not portable */
getopt_def = OPTFLAGS; getopt_def = OPTFLAGS;
@@ -558,6 +593,10 @@ MainParseArgs(int argc, char **argv)
touchFlag = TRUE; touchFlag = TRUE;
Var_Append(MAKEFLAGS, "-t", VAR_GLOBAL); Var_Append(MAKEFLAGS, "-t", VAR_GLOBAL);
break; break;
case 'w':
enterFlag = TRUE;
Var_Append(MAKEFLAGS, "-w", VAR_GLOBAL);
break;
case '-': case '-':
dashDash = TRUE; dashDash = TRUE;
break; break;
@@ -797,9 +836,6 @@ main(int argc, char **argv)
Boolean outOfDate = FALSE; /* FALSE if all targets up to date */ Boolean outOfDate = FALSE; /* FALSE if all targets up to date */
struct stat sb, sa; struct stat sb, sa;
char *p1, *path; char *p1, *path;
#ifndef NO_PWD_OVERRIDE
char *pwd;
#endif
char mdpath[MAXPATHLEN]; char mdpath[MAXPATHLEN];
#ifdef FORCE_MACHINE #ifdef FORCE_MACHINE
const char *machine = FORCE_MACHINE; const char *machine = FORCE_MACHINE;
@@ -966,26 +1002,30 @@ main(int argc, char **argv)
Var_Set(MAKEOVERRIDES, "", VAR_GLOBAL, 0); Var_Set(MAKEOVERRIDES, "", VAR_GLOBAL, 0);
Var_Set("MFLAGS", "", VAR_GLOBAL, 0); Var_Set("MFLAGS", "", VAR_GLOBAL, 0);
Var_Set(".ALLTARGETS", "", VAR_GLOBAL, 0); Var_Set(".ALLTARGETS", "", VAR_GLOBAL, 0);
/* some makefiles need to know this */
Var_Set(MAKE_LEVEL ".ENV", MAKE_LEVEL_ENV, VAR_CMD, 0);
/* /*
* Set some other useful macros * Set some other useful macros
*/ */
{ {
char tmp[64]; char tmp[64], *ep;
const char *ep;
if (!(ep = getenv(MAKE_LEVEL))) { makelevel = ((ep = getenv(MAKE_LEVEL_ENV)) && *ep) ? atoi(ep) : 0;
#ifdef MAKE_LEVEL_SAFE if (makelevel < 0)
if (!(ep = getenv(MAKE_LEVEL_SAFE))) makelevel = 0;
#endif snprintf(tmp, sizeof(tmp), "%d", makelevel);
ep = "0"; Var_Set(MAKE_LEVEL, tmp, VAR_GLOBAL, 0);
}
Var_Set(MAKE_LEVEL, ep, VAR_GLOBAL, 0);
snprintf(tmp, sizeof(tmp), "%u", myPid); snprintf(tmp, sizeof(tmp), "%u", myPid);
Var_Set(".MAKE.PID", tmp, VAR_GLOBAL, 0); Var_Set(".MAKE.PID", tmp, VAR_GLOBAL, 0);
snprintf(tmp, sizeof(tmp), "%u", getppid()); snprintf(tmp, sizeof(tmp), "%u", getppid());
Var_Set(".MAKE.PPID", tmp, VAR_GLOBAL, 0); Var_Set(".MAKE.PPID", tmp, VAR_GLOBAL, 0);
} }
if (makelevel > 0) {
char pn[1024];
snprintf(pn, sizeof(pn), "%s[%d]", progname, makelevel);
progname = bmake_strdup(pn);
}
Job_SetPrefix(); Job_SetPrefix();
#ifdef USE_META #ifdef USE_META
@@ -997,7 +1037,9 @@ main(int argc, char **argv)
* in a different format). * in a different format).
*/ */
#ifdef POSIX #ifdef POSIX
Main_ParseArgLine(getenv("MAKEFLAGS")); p1 = explode(getenv("MAKEFLAGS"));
Main_ParseArgLine(p1);
free(p1);
#else #else
Main_ParseArgLine(getenv("MAKE")); Main_ParseArgLine(getenv("MAKE"));
#endif #endif
@@ -1014,6 +1056,9 @@ main(int argc, char **argv)
MainParseArgs(argc, argv); MainParseArgs(argc, argv);
if (enterFlag)
printf("%s: Entering directory `%s'\n", progname, curdir);
/* /*
* Verify that cwd is sane. * Verify that cwd is sane.
*/ */
@@ -1035,17 +1080,21 @@ main(int argc, char **argv)
* MAKEOBJDIRPREFIX is set or MAKEOBJDIR contains a transform. * MAKEOBJDIRPREFIX is set or MAKEOBJDIR contains a transform.
*/ */
#ifndef NO_PWD_OVERRIDE #ifndef NO_PWD_OVERRIDE
if (!ignorePWD && if (!ignorePWD) {
(pwd = getenv("PWD")) != NULL && char *pwd;
if ((pwd = getenv("PWD")) != NULL &&
getenv("MAKEOBJDIRPREFIX") == NULL) { getenv("MAKEOBJDIRPREFIX") == NULL) {
const char *makeobjdir = getenv("MAKEOBJDIR"); const char *makeobjdir = getenv("MAKEOBJDIR");
if (makeobjdir == NULL || !strchr(makeobjdir, '$')) { if (makeobjdir == NULL || !strchr(makeobjdir, '$')) {
if (stat(pwd, &sb) == 0 && sa.st_ino == sb.st_ino && if (stat(pwd, &sb) == 0 &&
sa.st_ino == sb.st_ino &&
sa.st_dev == sb.st_dev) sa.st_dev == sb.st_dev)
(void)strncpy(curdir, pwd, MAXPATHLEN); (void)strncpy(curdir, pwd, MAXPATHLEN);
} }
} }
}
#endif #endif
Var_Set(".CURDIR", curdir, VAR_GLOBAL, 0); Var_Set(".CURDIR", curdir, VAR_GLOBAL, 0);
@@ -1331,6 +1380,9 @@ main(int argc, char **argv)
Trace_Log(MAKEEND, 0); Trace_Log(MAKEEND, 0);
if (enterFlag)
printf("%s: Leaving directory `%s'\n", progname, curdir);
Suff_End(); Suff_End();
Targ_End(); Targ_End();
Arch_End(); Arch_End();
@@ -1759,8 +1811,12 @@ execError(const char *af, const char *av)
static void static void
usage(void) usage(void)
{ {
char *p;
if ((p = strchr(progname, '[')) != NULL)
*p = '\0';
(void)fprintf(stderr, (void)fprintf(stderr,
"usage: %s [-BeikNnqrstWX] \n\ "usage: %s [-BeikNnqrstWwX] \n\
[-C directory] [-D variable] [-d flags] [-f makefile]\n\ [-C directory] [-D variable] [-d flags] [-f makefile]\n\
[-I directory] [-J private] [-j max_jobs] [-m directory] [-T file]\n\ [-I directory] [-J private] [-j max_jobs] [-m directory] [-T file]\n\
[-V variable] [variable=value] [target ...]\n", progname); [-V variable] [variable=value] [target ...]\n", progname);
+14 -4
View File
@@ -1,4 +1,4 @@
.\" $NetBSD: make.1,v 1.215 2013/05/22 19:35:11 christos Exp $ .\" $NetBSD: make.1,v 1.220 2013/07/30 19:09:57 sjg Exp $
.\" .\"
.\" Copyright (c) 1990, 1993 .\" Copyright (c) 1990, 1993
.\" The Regents of the University of California. All rights reserved. .\" The Regents of the University of California. All rights reserved.
@@ -29,7 +29,7 @@
.\" .\"
.\" from: @(#)make.1 8.4 (Berkeley) 3/19/94 .\" from: @(#)make.1 8.4 (Berkeley) 3/19/94
.\" .\"
.Dd May 22, 2013 .Dd July 30, 2013
.Dt MAKE 1 .Dt MAKE 1
.Os .Os
.Sh NAME .Sh NAME
@@ -37,7 +37,7 @@
.Nd maintain program dependencies .Nd maintain program dependencies
.Sh SYNOPSIS .Sh SYNOPSIS
.Nm .Nm
.Op Fl BeikNnqrstWX .Op Fl BeikNnqrstWwX
.Op Fl C Ar directory .Op Fl C Ar directory
.Op Fl D Ar variable .Op Fl D Ar variable
.Op Fl d Ar flags .Op Fl d Ar flags
@@ -209,6 +209,8 @@ Force the
option to print raw values of variables. option to print raw values of variables.
.It Ar v .It Ar v
Print debugging information about variable assignment. Print debugging information about variable assignment.
.It Ar w
Print entering and leaving directory messages, pre and post processing.
.It Ar x .It Ar x
Run shell commands with Run shell commands with
.Fl x .Fl x
@@ -743,6 +745,9 @@ then output for each target is prefixed with a token
.Ql --- target --- .Ql --- target ---
the first part of which can be controlled via the first part of which can be controlled via
.Va .MAKE.JOB.PREFIX . .Va .MAKE.JOB.PREFIX .
If
.Va .MAKE.JOB.PREFIX
is empty, no token is printed.
.br .br
For example: For example:
.Li .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}] .Li .MAKE.JOB.PREFIX=${.newline}---${.MAKE:T}[${.MAKE.PID}]
@@ -856,6 +861,11 @@ In "meta" mode, this variable contains a list of all the meta files
used (updated or not). used (updated or not).
This list can be used to process the meta files to extract dependency This list can be used to process the meta files to extract dependency
information. information.
.It Va .MAKE.META.IGNORE_PATHS
Provides a list of path prefixes that should be ignored;
because the contents are expected to change over time.
The default list includes:
.Ql Pa /dev /etc /proc /tmp /var/run /var/tmp
.It Va .MAKE.META.PREFIX .It Va .MAKE.META.PREFIX
Defines the message printed for each meta file updated in "meta verbose" mode. Defines the message printed for each meta file updated in "meta verbose" mode.
The default value is: The default value is:
@@ -1298,7 +1308,7 @@ should start and end with a period.
For example. For example.
.Dl ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@} .Dl ${LINKS:@.LINK.@${LN} ${TARGET} ${.LINK.}@}
.Pp .Pp
However a single character varaiable is often more readable: However a single character variable is often more readable:
.Dl ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@} .Dl ${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'${.newline}@}
.It Cm \&:U Ns Ar newval .It Cm \&:U Ns Ar newval
If the variable is undefined If the variable is undefined
+3 -4
View File
@@ -1,4 +1,4 @@
/* $NetBSD: make.h,v 1.90 2013/02/25 01:57:14 dholland Exp $ */ /* $NetBSD: make.h,v 1.91 2013/06/18 20:06:09 sjg Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990, 1993 * Copyright (c) 1988, 1989, 1990, 1993
@@ -442,9 +442,8 @@ extern pid_t myPid;
#define MAKEFILE_PREFERENCE ".MAKE.MAKEFILE_PREFERENCE" #define MAKEFILE_PREFERENCE ".MAKE.MAKEFILE_PREFERENCE"
#define MAKE_DEPENDFILE ".MAKE.DEPENDFILE" /* .depend */ #define MAKE_DEPENDFILE ".MAKE.DEPENDFILE" /* .depend */
#define MAKE_MODE ".MAKE.MODE" #define MAKE_MODE ".MAKE.MODE"
#ifndef MAKE_LEVEL_ENV
#ifdef NEED_MAKE_LEVEL_SAFE # define MAKE_LEVEL_ENV "MAKELEVEL"
# define MAKE_LEVEL_SAFE "_MAKE_LEVEL" /* some shells will not pass .MAKE. */
#endif #endif
/* /*
+25 -14
View File
@@ -1,4 +1,4 @@
/* $NetBSD: meta.c,v 1.30 2013/05/16 21:56:56 sjg Exp $ */ /* $NetBSD: meta.c,v 1.32 2013/06/25 00:20:54 sjg Exp $ */
/* /*
* Implement 'meta' mode. * Implement 'meta' mode.
@@ -56,6 +56,11 @@
static BuildMon Mybm; /* for compat */ static BuildMon Mybm; /* for compat */
static Lst metaBailiwick; /* our scope of control */ static Lst metaBailiwick; /* our scope of control */
static Lst metaIgnorePaths; /* paths we deliberately ignore */
#ifndef MAKE_META_IGNORE_PATHS
#define MAKE_META_IGNORE_PATHS ".MAKE.META.IGNORE_PATHS"
#endif
Boolean useMeta = FALSE; Boolean useMeta = FALSE;
static Boolean useFilemon = FALSE; static Boolean useFilemon = FALSE;
@@ -607,6 +612,17 @@ meta_mode_init(const char *make_mode)
if (cp) { if (cp) {
str2Lst_Append(metaBailiwick, cp, NULL); str2Lst_Append(metaBailiwick, cp, NULL);
} }
/*
* We ignore any paths that start with ${.MAKE.META.IGNORE_PATHS}
*/
metaIgnorePaths = Lst_Init(FALSE);
Var_Append(MAKE_META_IGNORE_PATHS,
"/dev /etc /proc /tmp /var/run /var/tmp ${TMPDIR}", VAR_GLOBAL);
cp = Var_Subst(NULL,
"${" MAKE_META_IGNORE_PATHS ":O:u:tA}", VAR_GLOBAL, 0);
if (cp) {
str2Lst_Append(metaIgnorePaths, cp, NULL);
}
} }
/* /*
@@ -1110,20 +1126,15 @@ meta_oodate(GNode *gn, Boolean oodate)
* be part of the dependencies because * be part of the dependencies because
* they are _expected_ to change. * they are _expected_ to change.
*/ */
if (strncmp(p, "/tmp/", 5) == 0 || if (*p == '/' &&
(tmplen > 0 && strncmp(p, tmpdir, tmplen) == 0)) Lst_ForEach(metaIgnorePaths, prefix_match, p)) {
break; #ifdef DEBUG_META_MODE
if (DEBUG(META))
if (strncmp(p, "/var/", 5) == 0) fprintf(debug_file, "meta_oodate: ignoring: %s\n",
break; p);
#endif
/* Ignore device files. */
if (strncmp(p, "/dev/", 5) == 0)
break;
/* Ignore /etc/ files. */
if (strncmp(p, "/etc/", 5) == 0)
break; break;
}
if ((cp = strrchr(p, '/'))) { if ((cp = strrchr(p, '/'))) {
cp++; cp++;
+15
View File
@@ -1,3 +1,18 @@
2013-07-26 Simon J. Gerraty <sjg@bad.crufty.net>
* install-mk (MK_VERSION): 20130726
some updates from Juniper and FreeBSD
o meta2deps.py: indicate file and line number when we hit parse
errors
also allow @file to provide huge list of .meta files.
* meta2deps.py: add try_parse() to cleanup the above.
2013-07-16 Simon J. Gerraty <sjg@bad.crufty.net>
* install-mk (MK_VERSION): 20130716
* own.mk: add GPROG as an option
* prog.mk: honor MK_GPROF==yes
2013-05-10 Simon J. Gerraty <sjg@bad.crufty.net> 2013-05-10 Simon J. Gerraty <sjg@bad.crufty.net>
* install-mk (MK_VERSION): 20130505 * install-mk (MK_VERSION): 20130505
+7 -1
View File
@@ -1,4 +1,4 @@
# $Id: init.mk,v 1.8 2012/11/11 22:37:02 sjg Exp $ # $Id: init.mk,v 1.9 2013/07/18 05:46:24 sjg Exp $
# #
# @(#) Copyright (c) 2002, Simon J. Gerraty # @(#) Copyright (c) 2002, Simon J. Gerraty
# #
@@ -36,6 +36,12 @@ COPTS += ${COPTS.${.IMPSRC:T}}
CPPFLAGS += ${CPPFLAGS.${.IMPSRC:T}} CPPFLAGS += ${CPPFLAGS.${.IMPSRC:T}}
CPUFLAGS += ${CPUFLAGS.${.IMPSRC:T}} CPUFLAGS += ${CPUFLAGS.${.IMPSRC:T}}
CC_PG?= -pg
CXX_PG?= ${CC_PG}
CC_PIC?= -DPIC
CXX_PIC?= ${CC_PIC}
PROFFLAGS?= -DGPROF -DPROF
.if ${.MAKE.LEVEL:U1} == 0 && ${BUILD_AT_LEVEL0:Uyes:tl} == "no" .if ${.MAKE.LEVEL:U1} == 0 && ${BUILD_AT_LEVEL0:Uyes:tl} == "no"
# this tells lib.mk and prog.mk to not actually build anything # this tells lib.mk and prog.mk to not actually build anything
_SKIP_BUILD = not building at level 0 _SKIP_BUILD = not building at level 0
+2 -2
View File
@@ -55,7 +55,7 @@
# Simon J. Gerraty <sjg@crufty.net> # Simon J. Gerraty <sjg@crufty.net>
# RCSid: # RCSid:
# $Id: install-mk,v 1.90 2013/05/11 05:16:26 sjg Exp $ # $Id: install-mk,v 1.92 2013/07/27 05:37:37 sjg Exp $
# #
# @(#) Copyright (c) 1994 Simon J. Gerraty # @(#) Copyright (c) 1994 Simon J. Gerraty
# #
@@ -70,7 +70,7 @@
# sjg@crufty.net # sjg@crufty.net
# #
MK_VERSION=20130505 MK_VERSION=20130726
OWNER= OWNER=
GROUP= GROUP=
MODE=444 MODE=444
+9 -12
View File
@@ -1,4 +1,4 @@
# $Id: lib.mk,v 1.48 2012/11/12 04:08:18 sjg Exp $ # $Id: lib.mk,v 1.49 2013/07/18 05:46:24 sjg Exp $
.if !target(__${.PARSEFILE}__) .if !target(__${.PARSEFILE}__)
__${.PARSEFILE}__: __${.PARSEFILE}__:
@@ -146,9 +146,6 @@ LD_shared=${SHLIB_SHFLAGS}
MKPICLIB?= yes MKPICLIB?= yes
# sys.mk can override these # sys.mk can override these
CC_PG?=-pg
CC_PIC?=-DPIC
LD_X?=-X LD_X?=-X
LD_x?=-x LD_x?=-x
LD_r?=-r LD_r?=-r
@@ -284,7 +281,7 @@ SHLIB_AGE != . ${.CURDIR}/shlib_version ; echo $$age
.if (${LD_X} == "") .if (${LD_X} == "")
.c.po: .c.po:
${COMPILE.c} ${CC_PG} ${.IMPSRC} -o ${.TARGET} ${COMPILE.c} ${CC_PG} ${PROFFLAGS} ${.IMPSRC} -o ${.TARGET}
.cc.po .C.po: .cc.po .C.po:
${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET} ${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}
@@ -293,14 +290,14 @@ SHLIB_AGE != . ${.CURDIR}/shlib_version ; echo $$age
${COMPILE.S} ${PICFLAG} ${CC_PIC} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET} ${COMPILE.S} ${PICFLAG} ${CC_PIC} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
.else .else
.c.po: .c.po:
@echo ${COMPILE.c} ${CC_PG} ${.IMPSRC} -o ${.TARGET} @echo ${COMPILE.c} ${CC_PG} ${PROFFLAGS} ${.IMPSRC} -o ${.TARGET}
@${COMPILE.c} ${CC_PG} ${.IMPSRC} -o ${.TARGET}.o @${COMPILE.c} ${CC_PG} ${PROFFLAGS} ${.IMPSRC} -o ${.TARGET}.o
@${LD} ${LD_X} ${LD_r} ${.TARGET}.o -o ${.TARGET} @${LD} ${LD_X} ${LD_r} ${.TARGET}.o -o ${.TARGET}
@rm -f ${.TARGET}.o @rm -f ${.TARGET}.o
.cc.po .C.po: .cc.po .C.po:
@echo ${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET} @echo ${COMPILE.cc} ${CXX_PG} ${PROFFLAGS} ${.IMPSRC} -o ${.TARGET}
@${COMPILE.cc} -pg ${.IMPSRC} -o ${.TARGET}.o @${COMPILE.cc} ${CXX_PG} ${.IMPSRC} -o ${.TARGET}.o
@${LD} ${LD_X} ${LD_r} ${.TARGET}.o -o ${.TARGET} @${LD} ${LD_X} ${LD_r} ${.TARGET}.o -o ${.TARGET}
@rm -f ${.TARGET}.o @rm -f ${.TARGET}.o
@@ -319,7 +316,7 @@ SHLIB_AGE != . ${.CURDIR}/shlib_version ; echo $$age
${COMPILE.cc} ${PICFLAG} ${CC_PIC} ${.IMPSRC} -o ${.TARGET} ${COMPILE.cc} ${PICFLAG} ${CC_PIC} ${.IMPSRC} -o ${.TARGET}
.S.po .s.po: .S.po .s.po:
${COMPILE.S} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET} ${COMPILE.S} ${PROFFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
.else .else
.c.so: .c.so:
@@ -335,8 +332,8 @@ SHLIB_AGE != . ${.CURDIR}/shlib_version ; echo $$age
@rm -f ${.TARGET}.o @rm -f ${.TARGET}.o
.S.po .s.po: .S.po .s.po:
@echo ${COMPILE.S} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET} @echo ${COMPILE.S} ${PROFFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}
@${COMPILE.S} -DGPROF -DPROF ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o @${COMPILE.S} ${PROFFLAGS} ${CFLAGS:M-[ID]*} ${AINC} ${.IMPSRC} -o ${.TARGET}.o
@${LD} ${LD_X} ${LD_r} ${.TARGET}.o -o ${.TARGET} @${LD} ${LD_X} ${LD_r} ${.TARGET}.o -o ${.TARGET}
@rm -f ${.TARGET}.o @rm -f ${.TARGET}.o
+25 -5
View File
@@ -35,7 +35,7 @@
""" """
RCSid: RCSid:
$Id: meta2deps.py,v 1.13 2013/05/11 05:16:26 sjg Exp $ $Id: meta2deps.py,v 1.15 2013/07/29 20:41:23 sjg Exp $
Copyright (c) 2011-2013, Juniper Networks, Inc. Copyright (c) 2011-2013, Juniper Networks, Inc.
All rights reserved. All rights reserved.
@@ -77,7 +77,7 @@ def resolve(path, cwd, last_dir=None, debug=0, debug_out=sys.stderr):
""" """
if path.endswith('/.'): if path.endswith('/.'):
path = path[0:-2] path = path[0:-2]
if path[0] == '/': if len(path) > 0 and path[0] == '/':
return path return path
if path == '.': if path == '.':
return cwd return cwd
@@ -107,8 +107,10 @@ def abspath(path, cwd, last_dir=None, debug=0, debug_out=sys.stderr):
this gets called a lot, so we try to avoid calling realpath this gets called a lot, so we try to avoid calling realpath
until we know we have something. until we know we have something.
""" """
path = resolve(path, cwd, last_dir, debug, debug_out) rpath = resolve(path, cwd, last_dir, debug, debug_out)
if path and (path.find('./') > 0 or if rpath:
path = rpath
if (path.find('./') > 0 or
path.endswith('/..') or path.endswith('/..') or
os.path.islink(path)): os.path.islink(path)):
return os.path.realpath(path) return os.path.realpath(path)
@@ -191,6 +193,7 @@ def __init__(self, name, conf={}):
self.curdir = getv(conf, 'CURDIR') self.curdir = getv(conf, 'CURDIR')
self.reldir = getv(conf, 'RELDIR') self.reldir = getv(conf, 'RELDIR')
self.dpdeps = getv(conf, 'DPDEPS') self.dpdeps = getv(conf, 'DPDEPS')
self.line = 0
if not self.conf: if not self.conf:
# some of the steps below we want to do only once # some of the steps below we want to do only once
@@ -254,7 +257,7 @@ def __init__(self, name, conf={}):
self.cwd = os.getcwd() # make sure this is initialized self.cwd = os.getcwd() # make sure this is initialized
if name: if name:
self.parse() self.try_parse()
def reset(self): def reset(self):
"""reset state if we are being passed meta files from multiple directories.""" """reset state if we are being passed meta files from multiple directories."""
@@ -333,6 +336,15 @@ def find_obj(self, objroot, dir, path, input):
return ddep return ddep
def try_parse(self, name=None, file=None):
"""give file and line number causing exception"""
try:
self.parse(name, file)
except:
# give a useful clue
print >> sys.stderr, '{}:{}: '.format(self.name, self.line),
raise
def parse(self, name=None, file=None): def parse(self, name=None, file=None):
"""A meta file looks like: """A meta file looks like:
@@ -373,11 +385,13 @@ def parse(self, name=None, file=None):
pid_last_dir = {} pid_last_dir = {}
last_pid = 0 last_pid = 0
self.line = 0
if self.curdir: if self.curdir:
self.seenit(self.curdir) # we ignore this self.seenit(self.curdir) # we ignore this
interesting = 'CEFLRV' interesting = 'CEFLRV'
for line in f: for line in f:
self.line += 1
# ignore anything we don't care about # ignore anything we don't care about
if not line[0] in interesting: if not line[0] in interesting:
continue continue
@@ -634,7 +648,13 @@ def main(argv, klass=MetaFile, xopts='', xoptf=None):
print >> debug_out, "%s=%s" % (k,v) print >> debug_out, "%s=%s" % (k,v)
for a in args: for a in args:
if a.endswith('.meta'):
m = klass(a, conf) m = klass(a, conf)
elif a.startswith('@'):
# there can actually multiple files per line
for line in open(a[1:]):
for f in line.strip().split():
m = klass(f, conf)
if output: if output:
print m.dirdeps() print m.dirdeps()
+2 -1
View File
@@ -1,4 +1,4 @@
# $Id: own.mk,v 1.26 2012/12/11 23:40:19 sjg Exp $ # $Id: own.mk,v 1.27 2013/07/18 05:46:24 sjg Exp $
.if !target(__${.PARSEFILE}__) .if !target(__${.PARSEFILE}__)
__${.PARSEFILE}__: __${.PARSEFILE}__:
@@ -90,6 +90,7 @@ OPTIONS_DEFAULT_NO+= DPADD_MK
# process options # process options
OPTIONS_DEFAULT_NO+= \ OPTIONS_DEFAULT_NO+= \
INSTALL_AS_USER \ INSTALL_AS_USER \
GPROF \
LIBTOOL \ LIBTOOL \
LINT \ LINT \
META_MODE \ META_MODE \
+10 -1
View File
@@ -1,4 +1,4 @@
# $Id: prog.mk,v 1.24 2012/12/13 23:04:14 sjg Exp $ # $Id: prog.mk,v 1.25 2013/07/18 05:46:24 sjg Exp $
.if !target(__${.PARSEFILE}__) .if !target(__${.PARSEFILE}__)
__${.PARSEFILE}__: __${.PARSEFILE}__:
@@ -50,6 +50,15 @@ LIBCRT0= ${DESTDIR}/usr/lib/crt0.o
.include <dpadd.mk> .include <dpadd.mk>
.endif .endif
.if ${MK_GPROF} == "yes"
CFLAGS+= ${CC_PG} ${PROFFLAGS}
LDADD+= ${CC_PG}
.if ${MK_DPADD_MK} == "no"
LDADD_LIBC_P?= -lc_p
LDADD_LAST+= ${LDADD_LIBC_P}
.endif
.endif
.if defined(SHAREDSTRINGS) .if defined(SHAREDSTRINGS)
CLEANFILES+=strings CLEANFILES+=strings
.c.o: .c.o:
+3 -3
View File
@@ -1,4 +1,4 @@
/* $NetBSD: parse.c,v 1.188 2013/03/22 16:07:59 sjg Exp $ */ /* $NetBSD: parse.c,v 1.189 2013/06/18 19:31:27 sjg Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990, 1993 * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/ */
#ifndef MAKE_NATIVE #ifndef MAKE_NATIVE
static char rcsid[] = "$NetBSD: parse.c,v 1.188 2013/03/22 16:07:59 sjg Exp $"; static char rcsid[] = "$NetBSD: parse.c,v 1.189 2013/06/18 19:31:27 sjg Exp $";
#else #else
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
#if 0 #if 0
static char sccsid[] = "@(#)parse.c 8.3 (Berkeley) 3/19/94"; static char sccsid[] = "@(#)parse.c 8.3 (Berkeley) 3/19/94";
#else #else
__RCSID("$NetBSD: parse.c,v 1.188 2013/03/22 16:07:59 sjg Exp $"); __RCSID("$NetBSD: parse.c,v 1.189 2013/06/18 19:31:27 sjg Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
#endif #endif
+3 -3
View File
@@ -1,6 +1,6 @@
# $Id: Makefile.in,v 1.42 2013/03/23 02:31:13 sjg Exp $ # $Id: Makefile.in,v 1.43 2013/07/16 21:14:30 sjg Exp $
# #
# $NetBSD: Makefile,v 1.36 2013/03/22 16:36:46 sjg Exp $ # $NetBSD: Makefile,v 1.37 2013/07/16 19:59:28 sjg Exp $
# #
# Unit tests for make(1) # Unit tests for make(1)
# The main targets are: # The main targets are:
@@ -89,7 +89,7 @@ test:
@echo "${TEST_MAKE} -f ${MAKEFILE} > ${.TARGET}.out 2>&1" @echo "${TEST_MAKE} -f ${MAKEFILE} > ${.TARGET}.out 2>&1"
@cd ${.OBJDIR} && ${TEST_MAKE} -f ${MAKEFILE} 2>&1 | \ @cd ${.OBJDIR} && ${TEST_MAKE} -f ${MAKEFILE} 2>&1 | \
${TOOL_TR} -d '\015' | \ ${TOOL_TR} -d '\015' | \
${TOOL_SED} -e 's,^${TEST_MAKE:T:C/\./\\\./g}:,make:,' \ ${TOOL_SED} -e 's,^${TEST_MAKE:T:C/\./\\\./g}[^:]*:,make:,' \
-e '/stopped/s, /.*, unit-tests,' \ -e '/stopped/s, /.*, unit-tests,' \
-e 's,${.CURDIR:C/\./\\\./g}/,,g' \ -e 's,${.CURDIR:C/\./\\\./g}/,,g' \
-e 's,${UNIT_TESTS:C/\./\\\./g}/,,g' > ${.TARGET}.out || { \ -e 's,${UNIT_TESTS:C/\./\\\./g}/,,g' > ${.TARGET}.out || { \
+23 -25
View File
@@ -1,4 +1,4 @@
/* $NetBSD: var.c,v 1.175 2013/05/29 00:23:31 sjg Exp $ */ /* $NetBSD: var.c,v 1.183 2013/07/16 20:00:56 sjg Exp $ */
/* /*
* Copyright (c) 1988, 1989, 1990, 1993 * Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/ */
#ifndef MAKE_NATIVE #ifndef MAKE_NATIVE
static char rcsid[] = "$NetBSD: var.c,v 1.175 2013/05/29 00:23:31 sjg Exp $"; static char rcsid[] = "$NetBSD: var.c,v 1.183 2013/07/16 20:00:56 sjg Exp $";
#else #else
#include <sys/cdefs.h> #include <sys/cdefs.h>
#ifndef lint #ifndef lint
#if 0 #if 0
static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94"; static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94";
#else #else
__RCSID("$NetBSD: var.c,v 1.175 2013/05/29 00:23:31 sjg Exp $"); __RCSID("$NetBSD: var.c,v 1.183 2013/07/16 20:00:56 sjg Exp $");
#endif #endif
#endif /* not lint */ #endif /* not lint */
#endif #endif
@@ -139,6 +139,7 @@ __RCSID("$NetBSD: var.c,v 1.175 2013/05/29 00:23:31 sjg Exp $");
#include "dir.h" #include "dir.h"
#include "job.h" #include "job.h"
extern int makelevel;
/* /*
* XXX transition hack for FreeBSD ports. * XXX transition hack for FreeBSD ports.
* bsd.port.mk can set .MAKE.FreeBSD_UL=yes * bsd.port.mk can set .MAKE.FreeBSD_UL=yes
@@ -668,6 +669,15 @@ Var_ExportVars(void)
char *val; char *val;
int n; int n;
/*
* Several make's support this sort of mechanism for tracking
* recursion - but each uses a different name.
* We allow the makefiles to update MAKELEVEL and ensure
* children see a correctly incremented value.
*/
snprintf(tmp, sizeof(tmp), "%d", makelevel + 1);
setenv(MAKE_LEVEL_ENV, tmp, 1);
if (VAR_EXPORTED_NONE == var_exportedVars) if (VAR_EXPORTED_NONE == var_exportedVars)
return; return;
@@ -789,7 +799,7 @@ Var_UnExport(char *str)
if (unexport_env) { if (unexport_env) {
char **newenv; char **newenv;
cp = getenv(MAKE_LEVEL); /* we should preserve this */ cp = getenv(MAKE_LEVEL_ENV); /* we should preserve this */
if (environ == savedEnv) { if (environ == savedEnv) {
/* we have been here before! */ /* we have been here before! */
newenv = bmake_realloc(environ, 2 * sizeof(char *)); newenv = bmake_realloc(environ, 2 * sizeof(char *));
@@ -806,10 +816,7 @@ Var_UnExport(char *str)
environ = savedEnv = newenv; environ = savedEnv = newenv;
newenv[0] = NULL; newenv[0] = NULL;
newenv[1] = NULL; newenv[1] = NULL;
setenv(MAKE_LEVEL, cp, 1); setenv(MAKE_LEVEL_ENV, cp, 1);
#ifdef MAKE_LEVEL_SAFE
setenv(MAKE_LEVEL_SAFE, cp, 1);
#endif
} else { } else {
for (; *str != '\n' && isspace((unsigned char) *str); str++) for (; *str != '\n' && isspace((unsigned char) *str); str++)
continue; continue;
@@ -933,6 +940,14 @@ Var_Set(const char *name, const char *val, GNode *ctxt, int flags)
} }
v = VarFind(name, ctxt, 0); v = VarFind(name, ctxt, 0);
if (v == NULL) { if (v == NULL) {
if (ctxt == VAR_CMD && (flags & VAR_NO_EXPORT) == 0) {
/*
* This var would normally prevent the same name being added
* to VAR_GLOBAL, so delete it from there if needed.
* Otherwise -V name may show the wrong value.
*/
Var_Delete(name, VAR_GLOBAL);
}
VarAdd(name, val, ctxt); VarAdd(name, val, ctxt);
} else { } else {
Buf_Empty(&v->val); Buf_Empty(&v->val);
@@ -967,24 +982,7 @@ Var_Set(const char *name, const char *val, GNode *ctxt, int flags)
Var_Append(MAKEOVERRIDES, name, VAR_GLOBAL); Var_Append(MAKEOVERRIDES, name, VAR_GLOBAL);
} }
/*
* Another special case.
* Several make's support this sort of mechanism for tracking
* recursion - but each uses a different name.
* We allow the makefiles to update .MAKE.LEVEL and ensure
* children see a correctly incremented value.
*/
if (ctxt == VAR_GLOBAL && strcmp(MAKE_LEVEL, name) == 0) {
char tmp[64];
int level;
level = atoi(val);
snprintf(tmp, sizeof(tmp), "%u", level + 1);
setenv(MAKE_LEVEL, tmp, 1);
#ifdef MAKE_LEVEL_SAFE
setenv(MAKE_LEVEL_SAFE, tmp, 1);
#endif
}
#ifdef MAKE_FREEBSD_UL #ifdef MAKE_FREEBSD_UL
if (strcmp(MAKE_FREEBSD_UL, name) == 0) { if (strcmp(MAKE_FREEBSD_UL, name) == 0) {
FreeBSD_UL = getBoolean(MAKE_FREEBSD_UL, FALSE); FreeBSD_UL = getBoolean(MAKE_FREEBSD_UL, FALSE);
+2 -2
View File
@@ -14,10 +14,10 @@ CFLAGS+= -I${.CURDIR}
CLEANDIRS+= FreeBSD CLEANDIRS+= FreeBSD
CLEANFILES+= bootstrap CLEANFILES+= bootstrap
# $Id: Makefile,v 1.14 2013/06/05 04:03:22 sjg Exp $ # $Id: Makefile,v 1.17 2013/07/30 19:13:53 sjg Exp $
# Base version on src date # Base version on src date
MAKE_VERSION= 20130604 MAKE_VERSION= 20130730
PROG?= ${.CURDIR:T} PROG?= ${.CURDIR:T}
+2 -2
View File
@@ -230,7 +230,7 @@
#define PACKAGE_NAME "bmake" #define PACKAGE_NAME "bmake"
/* Define to the full name and version of this package. */ /* Define to the full name and version of this package. */
#define PACKAGE_STRING "bmake 20130303" #define PACKAGE_STRING "bmake 20130706"
/* Define to the one symbol short name of this package. */ /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "bmake" #define PACKAGE_TARNAME "bmake"
@@ -239,7 +239,7 @@
#define PACKAGE_URL "" #define PACKAGE_URL ""
/* Define to the version of this package. */ /* Define to the version of this package. */
#define PACKAGE_VERSION "20130303" #define PACKAGE_VERSION "20130706"
/* Define as the return type of signal handlers (`int' or `void'). */ /* Define as the return type of signal handlers (`int' or `void'). */
#define RETSIGTYPE void #define RETSIGTYPE void
+3 -3
View File
@@ -5,9 +5,9 @@
SRCTOP?= ${.CURDIR:H:H:H} SRCTOP?= ${.CURDIR:H:H:H}
# $Id: Makefile.in,v 1.42 2013/03/23 02:31:13 sjg Exp $ # $Id: Makefile.in,v 1.43 2013/07/16 21:14:30 sjg Exp $
# #
# $NetBSD: Makefile,v 1.36 2013/03/22 16:36:46 sjg Exp $ # $NetBSD: Makefile,v 1.37 2013/07/16 19:59:28 sjg Exp $
# #
# Unit tests for make(1) # Unit tests for make(1)
# The main targets are: # The main targets are:
@@ -96,7 +96,7 @@ test:
@echo "${TEST_MAKE} -f ${MAKEFILE} > ${.TARGET}.out 2>&1" @echo "${TEST_MAKE} -f ${MAKEFILE} > ${.TARGET}.out 2>&1"
@cd ${.OBJDIR} && ${TEST_MAKE} -f ${MAKEFILE} 2>&1 | \ @cd ${.OBJDIR} && ${TEST_MAKE} -f ${MAKEFILE} 2>&1 | \
${TOOL_TR} -d '\015' | \ ${TOOL_TR} -d '\015' | \
${TOOL_SED} -e 's,^${TEST_MAKE:T:C/\./\\\./g}:,make:,' \ ${TOOL_SED} -e 's,^${TEST_MAKE:T:C/\./\\\./g}[^:]*:,make:,' \
-e '/stopped/s, /.*, unit-tests,' \ -e '/stopped/s, /.*, unit-tests,' \
-e 's,${.CURDIR:C/\./\\\./g}/,,g' \ -e 's,${.CURDIR:C/\./\\\./g}/,,g' \
-e 's,${UNIT_TESTS:C/\./\\\./g}/,,g' > ${.TARGET}.out || { \ -e 's,${UNIT_TESTS:C/\./\\\./g}/,,g' > ${.TARGET}.out || { \