diff --git a/ChangeLog b/ChangeLog index ba9cb272a486..1dbf0ef01f2c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,28 @@ +2014-06-20 Simon J. Gerraty + + * Makefile (MAKE_VERSION): 20140620 + Merge with NetBSD make, pick up + o var.c return varNoError rather than var_Error for ::= modidiers. + +2014-05-22 Simon J. Gerraty + + * Makefile (MAKE_VERSION): 20140522 + Merge with NetBSD make, pick up + o var.c detect some parse errors. + +2014-04-05 Simon J. Gerraty + + * Fix spelling errors - patch from Pedro Giffuni + +2014-02-14 Simon J. Gerraty + + * Makefile (MAKE_VERSION): 20140214 + Merge with NetBSD make, pick up + o .INCLUDEFROM* + o use Var_Value to get MAKEOBJDIR[PREFIX] + o reduced realloc'ign in brk_string. + * configure.in: add a check for compiler supporting __func__ + 2014-01-03 Simon J. Gerraty * boot-strap: ignore mksrc=none @@ -64,7 +89,7 @@ * Makefile (MAKE_VERSION): 20130716 Merge with NetBSD make, pick up - o number of gmake compatability tweaks + o number of gmake compatibility tweaks -w for gmake style entering/leaving messages if .MAKE.LEVEL > 0 indicate it in progname "make[1]" etc. handle MAKEFLAGS containing only letters. diff --git a/Makefile b/Makefile index 6e4b8b4d0480..42258c4e854e 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ -# $Id: Makefile,v 1.23 2014/01/02 22:20:52 sjg Exp $ +# $Id: Makefile,v 1.27 2014/06/20 14:51:54 sjg Exp $ # Base version on src date -MAKE_VERSION= 20140101 +MAKE_VERSION= 20140620 PROG= bmake @@ -117,7 +117,7 @@ MANTARGET?= man # turn this on by default - ignored if we are root WITH_INSTALL_AS_USER= -# supress with -DWITHOUT_* +# suppress with -DWITHOUT_* OPTIONS_DEFAULT_YES+= \ AUTOCONF_MK \ INSTALL_MK \ diff --git a/README b/README index fb688a33bc65..d09e977e48be 100644 --- a/README +++ b/README @@ -18,7 +18,7 @@ interesting changes, so that bmake tracks it very closely. Building: -The prefered way to bootstrap bmake is: +The preferred way to bootstrap bmake is: ./bmake/boot-strap diff --git a/bmake.1 b/bmake.1 index d6ead4926c95..5363e88b9b86 100644 --- a/bmake.1 +++ b/bmake.1 @@ -1,4 +1,4 @@ -.\" $NetBSD: make.1,v 1.226 2013/11/07 18:50:46 dholland Exp $ +.\" $NetBSD: make.1,v 1.229 2014/01/19 10:23:29 apb Exp $ .\" .\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. @@ -29,7 +29,7 @@ .\" .\" from: @(#)make.1 8.4 (Berkeley) 3/19/94 .\" -.Dd October 25, 2013 +.Dd February 14, 2014 .Dt MAKE 1 .Os .Sh NAME @@ -706,6 +706,10 @@ was executed. Refer to the description of .Ql Ev PWD for more details. +.It Va .INCLUDEDFROMDIR +The directory of the file this Makefile was included from. +.It Va .INCLUDEDFROMFILE +The filename of the file this Makefile was included from. .It Ev MAKE The name that .Nm @@ -1246,6 +1250,15 @@ and are orthogonal; the former specifies whether multiple words are potentially affected, the latter whether multiple substitutions can potentially occur within each affected word. +.Pp +As for the +.Cm \&:S +modifier, the +.Ar pattern +and +.Ar replacement +are subjected to variable expansion before being parsed as +regular expressions. .It Cm \&:T Replaces each word in the variable with its last component. .It Cm \&:u diff --git a/bmake.cat1 b/bmake.cat1 index 4a6ad0b63e6d..0ce26a5a1cc0 100644 --- a/bmake.cat1 +++ b/bmake.cat1 @@ -450,6 +450,13 @@ VVAARRIIAABBLLEE AASSSSIIGGNNMMEENNTTSS _._C_U_R_D_I_R A path to the directory where bbmmaakkee was executed. Refer to the description of `PWD' for more details. + _._I_N_C_L_U_D_E_D_F_R_O_M_D_I_R + The directory of the file this Makefile was included + from. + + _._I_N_C_L_U_D_E_D_F_R_O_M_F_I_L_E + The filename of the file this Makefile was included from. + MAKE The name that bbmmaakkee was executed with (_a_r_g_v_[_0_]). For compatibility bbmmaakkee also sets _._M_A_K_E with the same value. The preferred variable to use is the environment variable @@ -796,6 +803,9 @@ VVAARRIIAABBLLEE AASSSSIIGGNNMMEENNTTSS multiple words are potentially affected, the latter whether multiple substitutions can potentially occur within each affected word. + As for the ::SS modifier, the _p_a_t_t_e_r_n and _r_e_p_l_a_c_e_m_e_n_t are subjected to + variable expansion before being parsed as regular expressions. + ::TT Replaces each word in the variable with its last component. ::uu Remove adjacent duplicate words (like uniq(1)). @@ -1384,4 +1394,4 @@ BBUUGGSS There is no way of escaping a space character in a filename. -NetBSD 5.1 October 25, 2013 NetBSD 5.1 +NetBSD 5.1 February 14, 2014 NetBSD 5.1 diff --git a/boot-strap b/boot-strap index 3c25c374d4cd..340c46a9af20 100755 --- a/boot-strap +++ b/boot-strap @@ -111,7 +111,7 @@ # Simon J. Gerraty # RCSid: -# $Id: boot-strap,v 1.44 2014/01/08 14:49:10 sjg Exp $ +# $Id: boot-strap,v 1.45 2014/04/05 22:56:54 sjg Exp $ # # @(#) Copyright (c) 2001 Simon J. Gerraty # @@ -197,7 +197,7 @@ get_optarg() { here=`'pwd'` if [ $here = $Mydir ]; then - # avoid polution + # avoid pollution OBJROOT=../ fi @@ -453,7 +453,7 @@ op_all() { echo "Use --install-destdir=/somewhere to set DESTDIR during install" echo "Use --install-host-target to use INSTALL_BIN=$HOST_TARGET/bin" echo "Use -DWITH_PROG_VERSION to install as bmake-$MAKE_VERSION" - echo "Use -DWITHOUT_PROG_LINK to supress bmake -> bmake-$MAKE_VERSION symlink" + echo "Use -DWITHOUT_PROG_LINK to suppress bmake -> bmake-$MAKE_VERSION symlink" echo "Use -DWITHOUT_INSTALL_MK to skip installing files to $prefix/share/mk" fi } diff --git a/bsd.after-import.mk b/bsd.after-import.mk index 85bd2c12599b..9a65096a9597 100644 --- a/bsd.after-import.mk +++ b/bsd.after-import.mk @@ -1,4 +1,4 @@ -# $Id: bsd.after-import.mk,v 1.11 2012/12/29 19:32:25 sjg Exp $ +# $Id: bsd.after-import.mk,v 1.12 2014/02/14 23:45:49 sjg Exp $ # This makefile is for use when integrating bmake into a BSD build # system. Use this makefile after importing bmake. @@ -41,15 +41,13 @@ SRCTOP := ${srctop} HOST_OS!= uname .endif -# .../share/mk will find ${SRCTOP}/share/mk -# if we are within ${SRCTOP} -DEFAULT_SYS_PATH= .../share/mk:/usr/share/mk - BOOTSTRAP_ARGS = \ - --with-default-sys-path='${DEFAULT_SYS_PATH}' \ --prefix /usr \ --share /usr/share +.if !empty(DEFAULT_SYS_PATH) +BOOTSTRAP_ARGS += --with-default-sys-path='${DEFAULT_SYS_PATH}' +.endif # run boot-strap with minimal influence bootstrap: ${BMAKE_SRC}/boot-strap ${MAKEFILE} diff --git a/config.h.in b/config.h.in index 7108dcf2f67b..ce30da1e36ca 100644 --- a/config.h.in +++ b/config.h.in @@ -144,6 +144,9 @@ `HAVE_STRUCT_STAT_ST_RDEV' instead. */ #undef HAVE_ST_RDEV +/* Define to 1 if you have the `sysctl' function. */ +#undef HAVE_SYSCTL + /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H @@ -164,6 +167,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SYSCTL_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H @@ -298,6 +304,9 @@ /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE +/* C99 function name */ +#undef __func__ + /* Define to empty if `const' does not conform to ANSI C. */ #undef const diff --git a/configure b/configure index 2aaa5eb2109c..e3ff4de5b042 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for bmake 20140101. +# Generated by GNU Autoconf 2.64 for bmake 20140214. # # Report bugs to . # @@ -549,8 +549,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='bmake' PACKAGE_TARNAME='bmake' -PACKAGE_VERSION='20140101' -PACKAGE_STRING='bmake 20140101' +PACKAGE_VERSION='20140214' +PACKAGE_STRING='bmake 20140214' PACKAGE_BUGREPORT='sjg@NetBSD.org' PACKAGE_URL='' @@ -1221,7 +1221,7 @@ if test "$ac_init_help" = "long"; then # 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. cat <<_ACEOF -\`configure' configures bmake 20140101 to adapt to many kinds of systems. +\`configure' configures bmake 20140214 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1282,7 +1282,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bmake 20140101:";; + short | recursive ) echo "Configuration of bmake 20140214:";; esac cat <<\_ACEOF @@ -1387,7 +1387,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bmake configure 20140101 +bmake configure 20140214 generated by GNU Autoconf 2.64 Copyright (C) 2009 Free Software Foundation, Inc. @@ -1908,7 +1908,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bmake $as_me 20140101, which was +It was created by bmake $as_me 20140214, which was generated by GNU Autoconf 2.64. Invocation command line was $ $0 $@ @@ -5708,6 +5708,32 @@ $as_echo "#define HAVE_ST_RDEV 1" >>confdefs.h fi +echo "checking if compiler supports __func__" >&6 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +const char *func = __func__; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + +$as_echo "#define __func__ __FUNCTION__" >>confdefs.h + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext echo $ECHO_N "checking if diff -u works... $ECHO_C" >&6 if diff -u /dev/null /dev/null > /dev/null 2>&1; then diff_u=-u @@ -6378,7 +6404,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bmake $as_me 20140101, which was +This file was extended by bmake $as_me 20140214, which was generated by GNU Autoconf 2.64. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -6438,7 +6464,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_version="\\ -bmake config.status 20140101 +bmake config.status 20140214 configured by $0, generated by GNU Autoconf 2.64, with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/configure.in b/configure.in index 394f397c9c66..ecaa53aa900f 100644 --- a/configure.in +++ b/configure.in @@ -1,12 +1,12 @@ dnl dnl RCSid: -dnl $Id: configure.in,v 1.51 2014/01/02 22:20:52 sjg Exp $ +dnl $Id: configure.in,v 1.52 2014/02/15 22:27:59 sjg Exp $ dnl dnl Process this file with autoconf to produce a configure script dnl AC_PREREQ(2.50) -AC_INIT([bmake], [20140101], [sjg@NetBSD.org]) -AC_CONFIG_HEADER(config.h) +AC_INIT([bmake], [20140214], [sjg@NetBSD.org]) +AC_CONFIG_HEADERS(config.h) dnl make srcdir absolute case "$srcdir" in @@ -203,6 +203,11 @@ dnl AC_HEADER_STAT AC_STRUCT_ST_RDEV dnl +echo "checking if compiler supports __func__" >&6 +AC_LANG(C) +AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[[const char *func = __func__;]])],, + AC_DEFINE(__func__, __FUNCTION__, C99 function name)) +dnl dnl we want this for unit-tests/Makefile echo $ECHO_N "checking if diff -u works... $ECHO_C" >&6 if diff -u /dev/null /dev/null > /dev/null 2>&1; then diff --git a/main.c b/main.c index 78fbf41a07d4..f86184c37db7 100644 --- a/main.c +++ b/main.c @@ -1,4 +1,4 @@ -/* $NetBSD: main.c,v 1.225 2013/09/14 15:09:34 matt Exp $ */ +/* $NetBSD: main.c,v 1.226 2014/02/07 17:23:35 pooka Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,7 +69,7 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: main.c,v 1.225 2013/09/14 15:09:34 matt Exp $"; +static char rcsid[] = "$NetBSD: main.c,v 1.226 2014/02/07 17:23:35 pooka Exp $"; #else #include #ifndef lint @@ -81,7 +81,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993\ #if 0 static char sccsid[] = "@(#)main.c 8.3 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: main.c,v 1.225 2013/09/14 15:09:34 matt Exp $"); +__RCSID("$NetBSD: main.c,v 1.226 2014/02/07 17:23:35 pooka Exp $"); #endif #endif /* not lint */ #endif @@ -1102,11 +1102,12 @@ main(int argc, char **argv) */ #ifndef NO_PWD_OVERRIDE if (!ignorePWD) { - char *pwd; + char *pwd, *ptmp1 = NULL, *ptmp2 = NULL; if ((pwd = getenv("PWD")) != NULL && - getenv("MAKEOBJDIRPREFIX") == NULL) { - const char *makeobjdir = getenv("MAKEOBJDIR"); + Var_Value("MAKEOBJDIRPREFIX", VAR_CMD, &ptmp1) == NULL) { + const char *makeobjdir = Var_Value("MAKEOBJDIR", + VAR_CMD, &ptmp2); if (makeobjdir == NULL || !strchr(makeobjdir, '$')) { if (stat(pwd, &sb) == 0 && @@ -1115,6 +1116,8 @@ main(int argc, char **argv) (void)strncpy(curdir, pwd, MAXPATHLEN); } } + free(ptmp1); + free(ptmp2); } #endif Var_Set(".CURDIR", curdir, VAR_GLOBAL, 0); @@ -1131,11 +1134,13 @@ main(int argc, char **argv) Dir_Init(curdir); (void)Main_SetObjdir(curdir); - if ((path = getenv("MAKEOBJDIRPREFIX")) != NULL) { + if ((path = Var_Value("MAKEOBJDIRPREFIX", VAR_CMD, &p1)) != NULL) { (void)snprintf(mdpath, MAXPATHLEN, "%s%s", path, curdir); (void)Main_SetObjdir(mdpath); - } else if ((path = getenv("MAKEOBJDIR")) != NULL) { + free(p1); + } else if ((path = Var_Value("MAKEOBJDIR", VAR_CMD, &p1)) != NULL) { (void)Main_SetObjdir(path); + free(p1); } else { (void)snprintf(mdpath, MAXPATHLEN, "%s.%s", _PATH_OBJDIR, machine); if (!Main_SetObjdir(mdpath) && !Main_SetObjdir(_PATH_OBJDIR)) { diff --git a/make.1 b/make.1 index 91f366d3b3d2..ccc483251131 100644 --- a/make.1 +++ b/make.1 @@ -1,4 +1,4 @@ -.\" $NetBSD: make.1,v 1.226 2013/11/07 18:50:46 dholland Exp $ +.\" $NetBSD: make.1,v 1.230 2014/02/15 18:55:30 sjg Exp $ .\" .\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. @@ -29,7 +29,7 @@ .\" .\" from: @(#)make.1 8.4 (Berkeley) 3/19/94 .\" -.Dd October 25, 2013 +.Dd February 14, 2014 .Dt MAKE 1 .Os .Sh NAME @@ -706,6 +706,10 @@ was executed. Refer to the description of .Ql Ev PWD for more details. +.It Va .INCLUDEDFROMDIR +The directory of the file this Makefile was included from. +.It Va .INCLUDEDFROMFILE +The filename of the file this Makefile was included from. .It Ev MAKE The name that .Nm @@ -1246,6 +1250,15 @@ and are orthogonal; the former specifies whether multiple words are potentially affected, the latter whether multiple substitutions can potentially occur within each affected word. +.Pp +As for the +.Cm \&:S +modifier, the +.Ar pattern +and +.Ar replacement +are subjected to variable expansion before being parsed as +regular expressions. .It Cm \&:T Replaces each word in the variable with its last component. .It Cm \&:u diff --git a/mk/ChangeLog b/mk/ChangeLog index 973db00b8a30..80671ef13f00 100644 --- a/mk/ChangeLog +++ b/mk/ChangeLog @@ -1,3 +1,60 @@ +2014-05-22 Simon J. Gerraty + + * install-mk (MK_VERSION): 20140522 + + * lib.mk: use CC to link shlib for linux too + patch from Brendan MacDonell + +2014-05-05 Simon J. Gerraty + + * meta.autodep.mk: add _reldir_{finish,failed} for gathering stats + if WITH_META_STATS is defined. + +2014-05-02 Simon J. Gerraty + + * dirdeps.mk: accept -DWITHOUT_DIRDEPS (same a as -DNO_DIRDEPS) + to supress dirdeps outside of .CURDIR. + +2014-04-05 Simon J. Gerraty + + * Fix spelling errors - patch from Pedro Giffuni + +2014-03-14 Simon J. Gerraty + + * install-mk (MK_VERSION): 20140314 + + * dirdeps.mk (beforedirdeps): a handy hook + + * dirdeps.mk (DIRDEP_MAKE): allow the actual command we run + to visit leaf dirs to be intercepted (eg. for distributed + build). + + * dirdeps.mk (__depdirs): ensure // don't sneak in + + * gendirdeps.mk (DIRDEPS): ensure // don't sneak in + + +2014-02-21 Simon J. Gerraty + + * rst2htm.mk (RST2PDF): add support for rst2pdf + +2014-02-14 Simon J. Gerraty + + * install-mk (MK_VERSION): bump version + * dirdeps.mk (_last_dependfile): use .INCLUDEDFROMFILE if + available. + +2014-02-10 Simon J. Gerraty + + * options.mk: avoid :U so this isn't bmake dependent + +2014-02-09 Simon J. Gerraty + + * options.mk: cleanup and simplify semanitcs + NO_* dominates all, if both WITH_* and WITHOUT_* + are defined then result is DOMINATE_* which defaults to "no". + Ie. WITHOUT_ normally wins. + 2013-12-12 Simon J. Gerraty * install-mk (MK_VERSION): bump version @@ -490,7 +547,7 @@ * dep.mk: auto.dep.mk does not do 'make depend' so ignore it if asked to do that. fix/simplify the tests for when to run mkdep. - * auto.dep.mk: add some explaination of how/what we do. + * auto.dep.mk: add some explanation of how/what we do. * autodep.mk: skip the .OPTIONAL frobbing of .depend bmake's FROM_DEPEND flag makes it redundant. @@ -640,7 +697,7 @@ 2006-12-30 Simon J. Gerraty * install-mk (MK_VERSION): bump version - * added libs.mk - analagous to progs.mk + * added libs.mk - analogous to progs.mk make both of them always inlcude {lib,prog}.mk 2006-12-28 Simon J. Gerraty diff --git a/mk/autodep.mk b/mk/autodep.mk index 744770fe5a3c..818c474e843f 100644 --- a/mk/autodep.mk +++ b/mk/autodep.mk @@ -1,6 +1,6 @@ # # RCSid: -# $Id: autodep.mk,v 1.32 2010/04/19 17:37:56 sjg Exp $ +# $Id: autodep.mk,v 1.33 2014/04/05 22:56:54 sjg Exp $ # # @(#) Copyright (c) 1999-2010, Simon J. Gerraty # @@ -16,7 +16,7 @@ # This module provides automagic dependency generation along the # lines suggested in the GNU make.info -# The depend target is mainly for backwards compatability, +# The depend target is mainly for backwards compatibility, # dependencies are normally updated as part of compilation. # set MKDEP=autodep and dep.mk will include us diff --git a/mk/dirdeps.mk b/mk/dirdeps.mk index 3335fdb0943a..8c342be86fc2 100644 --- a/mk/dirdeps.mk +++ b/mk/dirdeps.mk @@ -1,4 +1,4 @@ -# $Id: dirdeps.mk,v 1.29 2013/10/13 18:43:53 sjg Exp $ +# $Id: dirdeps.mk,v 1.35 2014/05/03 06:27:56 sjg Exp $ # Copyright (c) 2010-2013, Juniper Networks, Inc. # All rights reserved. @@ -44,7 +44,7 @@ # All unqualified entries end up being qualified with .${TARGET_SPEC} # and partially qualified (if TARGET_SPEC_VARS has multiple # entries) are also expanded to a full .. -# The _DIRDEPS_USE target uses the suffix to set TARGET_SPEC +# The _DIRDEP_USE target uses the suffix to set TARGET_SPEC # correctly when visiting each entry. # # The fully qualified directory entries are used to construct a @@ -71,7 +71,7 @@ # # TARGET_SPEC_VARS # The default value is just MACHINE, and for most environments -# this is sufficient. The _DIRDEPS_USE target actually sets +# this is sufficient. The _DIRDEP_USE target actually sets # both MACHINE and TARGET_SPEC to the suffix of the current # target so that in the general case TARGET_SPEC can be ignored. # @@ -196,7 +196,11 @@ N_notmachine := ${.MAKE.DEPENDFILE_PREFERENCE:E:N*${MACHINE}*:${M_ListToSkip}} # if we were included recursively _DEP_TARGET_SPEC should be valid. .if empty(_DEP_TARGET_SPEC) # we may or may not have included a dependfile yet +.if defined(.INCLUDEDFROMFILE) +_last_dependfile := ${.INCLUDEDFROMFILE:M${.MAKE.DEPENDFILE_PREFIX}*} +.else _last_dependfile := ${.MAKE.MAKEFILES:M*/${.MAKE.DEPENDFILE_PREFIX}*:[-1]} +.endif .if !empty(_debug_reldir) .info ${DEP_RELDIR}.${DEP_TARGET_SPEC}: _last_dependfile='${_last_dependfile}' .endif @@ -239,7 +243,8 @@ DEP_MACHINE := ${_DEP_TARGET_SPEC} # we can use this as a clue to do initialization and other one time things. .if !target(_DIRDEP_USE) # make sure this target exists -dirdeps: +dirdeps: beforedirdeps .WAIT +beforedirdeps: # We normally expect to be included by Makefile.depend.* # which sets the DEP_* macros below. @@ -269,12 +274,15 @@ DEP_SKIP_DIR = ${SKIP_DIR} \ NSkipDir = ${DEP_SKIP_DIR:${M_ListToSkip}} -.if defined(NO_DIRDEPS) || defined(NODIRDEPS) +.if defined(NO_DIRDEPS) || defined(NODIRDEPS) || defined(WITHOUT_DIRDEPS) # confine ourselves to the original dir DIRDEPS_FILTER += M${_DEP_RELDIR}* .endif -# we supress SUBDIR when visiting the leaves +# this is what we run below +DIRDEP_MAKE?= ${.MAKE} + +# we suppress SUBDIR when visiting the leaves # we assume sys.mk will set MACHINE_ARCH # you can add extras to DIRDEP_USE_ENV # if there is no makefile in the target directory, we skip it. @@ -285,7 +293,7 @@ _DIRDEP_USE: .USE .MAKE MACHINE_ARCH= NO_SUBDIR=1 ${DIRDEP_USE_ENV} \ TARGET_SPEC=${.TARGET:E} \ MACHINE=${.TARGET:E} \ - ${.MAKE} -C ${.TARGET:R} || exit 1; \ + ${DIRDEP_MAKE} -C ${.TARGET:R} || exit 1; \ break; \ done @@ -397,7 +405,7 @@ DEP_DIRDEPS_FILTER = U .endif # this is what we start with -__depdirs := ${DIRDEPS:${NSkipDir}:${DEP_DIRDEPS_FILTER:ts:}:O:u:@d@${SRCTOP}/$d@} +__depdirs := ${DIRDEPS:${NSkipDir}:${DEP_DIRDEPS_FILTER:ts:}:C,//+,/,g:O:u:@d@${SRCTOP}/$d@} # some entries may be qualified with . # the :M*/*/*.* just tries to limit the dirs we check to likely ones. diff --git a/mk/dpadd.mk b/mk/dpadd.mk index a940b61c144c..abc92df761c5 100644 --- a/mk/dpadd.mk +++ b/mk/dpadd.mk @@ -1,4 +1,4 @@ -# $Id: dpadd.mk,v 1.18 2011/11/10 05:13:37 sjg Exp $ +# $Id: dpadd.mk,v 1.19 2014/04/05 22:56:54 sjg Exp $ # # @(#) Copyright (c) 2004, Simon J. Gerraty # @@ -68,7 +68,7 @@ DPLIBS+= ${LIBDMALLOC} .endif .endif -# Order -L's to seach ours first. +# Order -L's to search ours first. # Avoids picking up old versions already installed. __dpadd_libdirs := ${__dpadd_libs:R:H:S/^/-L/g:O:u:N-L} LDADD += ${__dpadd_libdirs:M-L${OBJTOP}/*} @@ -99,9 +99,9 @@ SRC_LIBS+= ${_OBJDIR}/lib${LIB}.a # This little bit of magic, assumes that SRC_libfoo will be # set if it cannot be correctly derrived from ${LIBFOO} # Note that SRC_libfoo and INCLUDES_libfoo should be named for the -# actual libary name not the variable name that might refer to it. +# actual library name not the variable name that might refer to it. # 99% of the time the two are the same, but the DPADD logic -# only has the libary name available, so stick to that. +# only has the library name available, so stick to that. # SRC_LIBS?= diff --git a/mk/gendirdeps.mk b/mk/gendirdeps.mk index 20e2b152a3fa..b313298b3fef 100644 --- a/mk/gendirdeps.mk +++ b/mk/gendirdeps.mk @@ -1,4 +1,4 @@ -# $Id: gendirdeps.mk,v 1.23 2013/09/04 17:49:20 sjg Exp $ +# $Id: gendirdeps.mk,v 1.25 2014/03/14 21:28:37 sjg Exp $ # Copyright (c) 2010-2013, Juniper Networks, Inc. # All rights reserved. @@ -229,7 +229,7 @@ DIRDEPS = \ ${qualdir_list:N${RELDIR}.*:N${RELDIR}/*} # We only consider things below $RELDIR/ if they have a makefile. -# This is the same test that _DIRDEPS_USE applies. +# This is the same test that _DIRDEP_USE applies. # We have do a double test with dirdep_list as it _may_ contain # qualified dirs - if we got anything from a stage dir. # qualdir_list we know are all qualified. @@ -240,7 +240,7 @@ DIRDEPS += \ ${dirdep_list:M${RELDIR}/*:@d@${.MAKE.MAKEFILE_PREFERENCE:@m@${exists(${SRCTOP}/$d/$m):?$d:${exists(${SRCTOP}/${d:R}/$m):?$d:}}@}@} \ ${qualdir_list:M${RELDIR}/*:@d@${.MAKE.MAKEFILE_PREFERENCE:@m@${exists(${SRCTOP}/${d:R}/$m):?$d:}@}@} -DIRDEPS := ${DIRDEPS:${GENDIRDEPS_FILTER:UNno:ts:}:O:u} +DIRDEPS := ${DIRDEPS:${GENDIRDEPS_FILTER:UNno:ts:}:C,//+,/,g:O:u} .if ${DEBUG_GENDIRDEPS:Uno:@x@${RELDIR:M$x}@} != "" .info ${RELDIR}: M2D_OBJROOTS=${M2D_OBJROOTS} @@ -261,7 +261,7 @@ src_dirdep_list = \ SRC_DIRDEPS = \ ${src_dirdep_list:N${RELDIR}:N${RELDIR}/*:C,(/h)/.*,,} -SRC_DIRDEPS := ${SRC_DIRDEPS:${GENDIRDEPS_SRC_FILTER:UN/*:ts:}:O:u} +SRC_DIRDEPS := ${SRC_DIRDEPS:${GENDIRDEPS_SRC_FILTER:UN/*:ts:}:C,//+,/,g:O:u} # if you want to capture SRC_DIRDEPS in .MAKE.DEPENDFILE put # SRC_DIRDEPS_FILE = ${_DEPENDFILE} diff --git a/mk/host-target.mk b/mk/host-target.mk index c6d4562bf15a..eacdf1d95111 100644 --- a/mk/host-target.mk +++ b/mk/host-target.mk @@ -1,5 +1,5 @@ # RCSid: -# $Id: host-target.mk,v 1.6 2011/03/02 05:05:21 sjg Exp $ +# $Id: host-target.mk,v 1.7 2014/05/16 17:54:52 sjg Exp $ # Host platform information; may be overridden .if !defined(_HOST_OSNAME) @@ -18,6 +18,10 @@ _HOST_ARCH != uname -m .endif .export _HOST_ARCH .endif +.if !defined(HOST_MACHINE) +HOST_MACHINE != uname -m +.export HOST_MACHINE +.endif HOST_OSMAJOR := ${_HOST_OSREL:C/[^0-9].*//} HOST_OSTYPE := ${_HOST_OSNAME}-${_HOST_OSREL:C/\([^\)]*\)//}-${_HOST_ARCH} diff --git a/mk/install-mk b/mk/install-mk index b91a961410ae..7e4ee8bba5e7 100644 --- a/mk/install-mk +++ b/mk/install-mk @@ -55,7 +55,7 @@ # Simon J. Gerraty # RCSid: -# $Id: install-mk,v 1.95 2013/12/20 06:08:52 sjg Exp $ +# $Id: install-mk,v 1.100 2014/05/23 01:30:36 sjg Exp $ # # @(#) Copyright (c) 1994 Simon J. Gerraty # @@ -70,7 +70,7 @@ # sjg@crufty.net # -MK_VERSION=20131212 +MK_VERSION=20140522 OWNER= GROUP= MODE=444 diff --git a/mk/lib.mk b/mk/lib.mk index f219115433ec..417aa024ba87 100644 --- a/mk/lib.mk +++ b/mk/lib.mk @@ -1,4 +1,4 @@ -# $Id: lib.mk,v 1.49 2013/07/18 05:46:24 sjg Exp $ +# $Id: lib.mk,v 1.51 2014/05/23 01:30:36 sjg Exp $ .if !target(__${.PARSEFILE}__) __${.PARSEFILE}__: @@ -55,7 +55,7 @@ CFLAGS+= ${COPTS} # are built for different platforms and object formats. # OBJECT_FMT: currently either "ELF" or "a.out", from # SHLIB_SOVERSION: version number to be compiled into a shared library -# via -soname. Usualy ${SHLIB_MAJOR} on ELF. +# via -soname. Usually ${SHLIB_MAJOR} on ELF. # NetBSD/pmax used to use ${SHLIB_MAJOR}[.${SHLIB_MINOR} # [.${SHLIB_TEENY}]] # SHLIB_SHFLAGS: Flags to tell ${LD} to emit shared library. @@ -123,7 +123,7 @@ SHLIB_LDSTARTFILE?= /usr/lib/crtbeginS.o SHLIB_LDENDFILE?= /usr/lib/crtendS.o .endif -# for compatability with the following +# for compatibility with the following CC_PIC?= ${CPICFLAGS} LD_shared=${SHLIB_SHFLAGS} @@ -175,9 +175,10 @@ AR_cq= -cqs .elif ${TARGET_OSNAME} == "FreeBSD" LD_solib= lib${LIB}_pic.a .elif ${TARGET_OSNAME} == "Linux" +SHLIB_LD = ${CC} # this is ambiguous of course -LD_shared=-shared -h lib${LIB}.so.${SHLIB_MAJOR} -LD_solib= --whole-archive lib${LIB}_pic.a +LD_shared=-shared -Wl,"-h lib${LIB}.so.${SHLIB_MAJOR}" +LD_solib= -Wl,--whole-archive lib${LIB}_pic.a -Wl,--no-whole-archive # Linux uses GNU ld, which is a multi-pass linker # so we don't need to use lorder or tsort LD_objs = ${OBJS} @@ -259,7 +260,7 @@ OPTIMIZE_OBJECT_META_FILES ?= yes .if ${MK_LIBTOOL} == "yes" -# because libtool is so facist about naming the object files, +# because libtool is so fascist about naming the object files, # we cannot (yet) build profiled libs MK_PROFILE=no _LIBS=lib${LIB}.a @@ -413,7 +414,7 @@ SHLIB_AGE?=0 .s.o .S.o .c.o: ${LIBTOOL} --mode=compile ${CC} ${LT_STATIC} ${CFLAGS} ${CPPFLAGS} ${IMPFLAGS} -c ${.IMPSRC} -# can't really do profiled libs with libtool - its too facist about +# can't really do profiled libs with libtool - its too fascist about # naming the output... lib${LIB}.a:: ${OBJS} @rm -f ${.TARGET} diff --git a/mk/meta.autodep.mk b/mk/meta.autodep.mk index c29c26e85e24..a961bffb4646 100644 --- a/mk/meta.autodep.mk +++ b/mk/meta.autodep.mk @@ -1,4 +1,4 @@ -# $Id: meta.autodep.mk,v 1.32 2012/11/13 00:44:26 sjg Exp $ +# $Id: meta.autodep.mk,v 1.35 2014/05/09 00:05:46 sjg Exp $ # # @(#) Copyright (c) 2010, Simon J. Gerraty @@ -120,7 +120,7 @@ FORCE_DPADD += ${_nonlibs:@x@${DPADD:M*/$x}@} # some makefiles and/or targets contain # circular dependencies if you dig too deep # (as meta mode is apt to do) -# so we provide a means of supressing them. +# so we provide a means of suppressing them. # the input to the loop below is target: dependency # with just one dependency per line. # Also some targets are not really local, or use random names. @@ -137,7 +137,7 @@ SUPPRESS_DEPEND += \ # the double $$ defers initial evaluation # if necessary, we fake .po dependencies, just so the result # in Makefile.depend* is stable -# The current objdir may be refered to in various ways +# The current objdir may be referred to in various ways OBJDIR_REFS += ${.OBJDIR} ${.OBJDIR:tA} ${_OBJDIR} ${RELOBJTOP}/${RELDIR} _depend = .depend # it would be nice to be able to get .SUFFIXES as ${.SUFFIXES} @@ -176,7 +176,9 @@ _depend = .info ${_DEPENDFILE:S,${SRCTOP}/,,} _depend=${_depend} .endif +.if ${UPDATE_DEPENDFILE} == "yes" gendirdeps: ${_DEPENDFILE} +.endif .if !target(${_DEPENDFILE}) .if ${_bootstrap_dirdeps} == "yes" @@ -259,4 +261,28 @@ ${_DEPENDFILE}: .PRECIOUS .endif CLEANFILES += *.meta filemon.* *.db + +# these make it easy to gather some stats +now_utc = ${%s:L:gmtime} +start_utc := ${now_utc} + +meta_stats= meta=${empty(.MAKE.META.FILES):?0:${.MAKE.META.FILES:[#]}} \ + created=${empty(.MAKE.META.CREATED):?0:${.MAKE.META.CREATED:[#]}} + +#.END: _reldir_finish +.if target(gendirdeps) +_reldir_finish: gendirdeps +.endif +_reldir_finish: .NOMETA + @echo "${TIME_STAMP} Finished ${RELDIR}.${TARGET_SPEC} seconds=$$(( ${now_utc} - ${start_utc} )) ${meta_stats}" + +#.ERROR: _reldir_failed +_reldir_failed: .NOMETA + @echo "${TIME_STAMP} Failed ${RELDIR}.${TARGET_SPEC} seconds=$$(( ${now_utc} - ${start_utc} )) ${meta_stats}" + +.if defined(WITH_META_STATS) && ${.MAKE.LEVEL} > 0 +.END: _reldir_finish +.ERROR: _reldir_failed +.endif + .endif diff --git a/mk/meta2deps.py b/mk/meta2deps.py index d4e4bb14cad4..8e349e702e5b 100755 --- a/mk/meta2deps.py +++ b/mk/meta2deps.py @@ -37,7 +37,7 @@ """ RCSid: - $Id: meta2deps.py,v 1.16 2013/12/20 06:08:52 sjg Exp $ + $Id: meta2deps.py,v 1.17 2014/04/05 22:56:54 sjg Exp $ Copyright (c) 2011-2013, Juniper Networks, Inc. All rights reserved. @@ -166,7 +166,7 @@ def __init__(self, name, conf={}): Sometimes MACHINE isn't enough. HOST_TARGET - when we build for the psuedo machine 'host' + when we build for the pseudo machine 'host' the object tree uses HOST_TARGET rather than MACHINE. OBJROOTS a list of the common prefix for all obj dirs it might @@ -296,7 +296,7 @@ def add(self, list, data, clue=''): print("%s: %sAdd: %s" % (self.name, clue, data), file=self.debug_out) def find_top(self, path, list): - """the logical tree may be split accross multiple trees""" + """the logical tree may be split across multiple trees""" for top in list: if path.startswith(top): if self.debug > 2: diff --git a/mk/meta2deps.sh b/mk/meta2deps.sh index f63aee329b6b..d96ce07c5af4 100755 --- a/mk/meta2deps.sh +++ b/mk/meta2deps.sh @@ -77,7 +77,7 @@ # RCSid: -# $Id: meta2deps.sh,v 1.6 2013/05/11 05:16:26 sjg Exp $ +# $Id: meta2deps.sh,v 1.7 2014/04/05 22:56:54 sjg Exp $ # Copyright (c) 2010-2013, Juniper Networks, Inc. # All rights reserved. @@ -348,7 +348,7 @@ meta2deps() { [ -s $f ] || continue case $f in *qual) # a list of .dirdep files - # we can prefix everthing with $OBJTOP to + # we can prefix everything with $OBJTOP to # tell gendirdeps.mk that these are # DIRDEP entries, since they are already # qualified with . as needed. diff --git a/mk/options.mk b/mk/options.mk index aa54754b2ff4..c0b4988741ff 100644 --- a/mk/options.mk +++ b/mk/options.mk @@ -1,4 +1,4 @@ -# $Id: options.mk,v 1.7 2013/04/17 20:32:38 sjg Exp $ +# $Id: options.mk,v 1.10 2014/02/11 18:34:48 sjg Exp $ # # @(#) Copyright (c) 2012, Simon J. Gerraty # @@ -30,15 +30,27 @@ OPTIONS_DEFAULT_VALUES += \ ${OPTIONS_DEFAULT_YES:O:u:S,$,/yes,} OPTION_PREFIX ?= MK_ + +# NO_* takes precedence +# If both WITH_* and WITHOUT_* are defined, WITHOUT_ wins unless +# DOMINANT_* is set to "yes" +# Otherwise WITH_* and WITHOUT_* override the default. .for o in ${OPTIONS_DEFAULT_VALUES:M*/*} -.if ${o:T:tl} == "no" -.if defined(WITH_${o:H}) && !defined(NO_${o:H}) && !defined(NO${o:H}) +.if defined(NO_${o:H}) || defined(NO${o:H}) +# we cannot do it +${OPTION_PREFIX}${o:H} ?= no +.elif defined(WITH_${o:H}) && defined(WITHOUT_${o:H}) +# normally WITHOUT_ wins +DOMINANT_${o:H} ?= no +${OPTION_PREFIX}${o:H} ?= ${DOMINANT_${o:H}} +.elif ${o:T:tl} == "no" +.if defined(WITH_${o:H}) ${OPTION_PREFIX}${o:H} ?= yes .else ${OPTION_PREFIX}${o:H} ?= no .endif .else -.if defined(WITHOUT_${o:H}) || defined(NO_${o:H}) || defined(NO${o:H}) +.if defined(WITHOUT_${o:H}) ${OPTION_PREFIX}${o:H} ?= no .else ${OPTION_PREFIX}${o:H} ?= yes @@ -47,11 +59,19 @@ ${OPTION_PREFIX}${o:H} ?= yes .endfor # OPTIONS_DEFAULT_DEPENDENT += FOO_UTILS/FOO -# if neither WITH[OUT]_FOO_UTILS is set, use value of ${OPTION_PREFIX}FOO +# If neither WITH[OUT]_FOO_UTILS is set, (see rules above) +# use the value of ${OPTION_PREFIX}FOO .for o in ${OPTIONS_DEFAULT_DEPENDENT:M*/*:O:u} -.if defined(WITH_${o:H}) && !defined(NO_${o:H}) && !defined(NO${o:H}) +.if defined(NO_${o:H}) || defined(NO${o:H}) +# we cannot do it +${OPTION_PREFIX}${o:H} ?= no +.elif defined(WITH_${o:H}) && defined(WITHOUT_${o:H}) +# normally WITHOUT_ wins +DOMINANT_${o:H} ?= no +${OPTION_PREFIX}${o:H} ?= ${DOMINANT_${o:H}} +.elif defined(WITH_${o:H}) ${OPTION_PREFIX}${o:H} ?= yes -.elif defined(WITHOUT_${o:H}) || defined(NO_${o:H}) || defined(NO${o:H}) +.elif defined(WITHOUT_${o:H}) ${OPTION_PREFIX}${o:H} ?= no .else ${OPTION_PREFIX}${o:H} ?= ${${OPTION_PREFIX}${o:T}} diff --git a/mk/rst2htm.mk b/mk/rst2htm.mk index 8bd66dab48d6..4d4c940b8bc7 100644 --- a/mk/rst2htm.mk +++ b/mk/rst2htm.mk @@ -1,4 +1,4 @@ -# $Id: rst2htm.mk,v 1.8 2011/04/03 21:39:25 sjg Exp $ +# $Id: rst2htm.mk,v 1.9 2014/02/22 01:52:41 sjg Exp $ # # @(#) Copyright (c) 2009, Simon J. Gerraty # @@ -22,6 +22,7 @@ TXTSRCS != 'ls' -1t ${.CURDIR}/*.txt ${.CURDIR}/*.rst 2>/dev/null; echo RSTSRCS ?= ${TXTSRCS} HTMFILES ?= ${RSTSRCS:R:T:O:u:%=%.htm} RST2HTML ?= rst2html.py +RST2PDF ?= rst2pdf RST2S5 ?= rst2s5.py # the following will run RST2S5 if the target name contains the word 'slides' # otherwise it uses RST2HTML @@ -33,11 +34,15 @@ CLEANFILES += ${HTMFILES} html: ${HTMFILES} -.SUFFIXES: ${RST_SUFFIXES} .htm +.SUFFIXES: ${RST_SUFFIXES} .htm .pdf ${RST_SUFFIXES:@s@$s.htm@}: ${RST2HTM} ${.IMPSRC} ${.TARGET} +${RST_SUFFIXES:@s@$s.pdf@}: + ${RST2PDF} ${.IMPSRC} ${.TARGET} + .for s in ${RSTSRCS:O:u} ${s:R:T}.htm: $s +${s:R:T}.pdf: $s .endfor diff --git a/mk/sys.mk b/mk/sys.mk index 30eca9b84508..236f62d0ac75 100644 --- a/mk/sys.mk +++ b/mk/sys.mk @@ -1,4 +1,4 @@ -# $Id: sys.mk,v 1.35 2012/11/12 06:27:51 sjg Exp $ +# $Id: sys.mk,v 1.36 2014/05/11 00:30:19 sjg Exp $ # # @(#) Copyright (c) 2003-2009, Simon J. Gerraty # @@ -77,7 +77,7 @@ M_ListToSkip= O:u:ts::S,:,:N,g:S,^,N, # type should be a builtin in any sh since about 1980, # AUTOCONF := ${autoconf:L:${M_whence}} M_type = @x@(type $$x 2> /dev/null); echo;@:sh:[0]:N* found*:[@]:C,[()],,g -M_whence = ${M_type}:M/* +M_whence = ${M_type}:M/*:[1] # convert a path to a valid shell variable M_P2V = tu:C,[./-],_,g diff --git a/mk/sys/SunOS.mk b/mk/sys/SunOS.mk index f164aa282be9..73f8062794e2 100644 --- a/mk/sys/SunOS.mk +++ b/mk/sys/SunOS.mk @@ -1,4 +1,4 @@ -# $Id: SunOS.mk,v 1.5 2010/01/11 23:02:05 sjg Exp $ +# $Id: SunOS.mk,v 1.6 2014/04/05 22:56:54 sjg Exp $ .if ${.PARSEFILE} == "sys.mk" .include @@ -12,7 +12,7 @@ ROOT_GROUP= root SHLIB_FULLVERSION = ${SHLIB_MAJOR} -# supress the dependency +# suppress the dependency LIBCRT0= /dev/null .ifndef CC diff --git a/mk/target-flags.mk b/mk/target-flags.mk index f8932b2f17b9..4525dbd08d7b 100644 --- a/mk/target-flags.mk +++ b/mk/target-flags.mk @@ -3,7 +3,7 @@ # # DESCRIPTION: # Include this macro file after all others in a makefile and -# follow it with any target specfic flag settings. +# follow it with any target specific flag settings. # For each such variable v in TARGET_FLAG_VARS we set: #.nf # @@ -37,7 +37,7 @@ # RCSid: -# $Id: target-flags.mk,v 1.8 2002/05/08 06:01:00 sjg Exp $ +# $Id: target-flags.mk,v 1.9 2014/04/05 22:56:54 sjg Exp $ # # @(#) Copyright (c) 1998-2002, Simon J. Gerraty # diff --git a/mk/warnings.mk b/mk/warnings.mk index 9143e4289fd5..bacbefb2b837 100644 --- a/mk/warnings.mk +++ b/mk/warnings.mk @@ -1,5 +1,5 @@ # RCSid: -# $Id: warnings.mk,v 1.7 2009/12/11 17:06:03 sjg Exp $ +# $Id: warnings.mk,v 1.8 2014/04/02 19:20:23 sjg Exp $ # # @(#) Copyright (c) 2002, Simon J. Gerraty # @@ -42,24 +42,30 @@ HIGH_WARNINGS?= ${MEDIUM_WARNINGS} \ -Wswitch \ -Wwrite-strings +EXTRA_WARNINGS?= ${HIGH_WARNINGS} -Wextra + # The two step default makes it easier to test build with different defaults. DEFAULT_WARNINGS_SET?= MIN WARNINGS_SET?= ${DEFAULT_WARNINGS_SET} # If you add sets, besure to list them (you don't have to touch this list). -ALL_WARNINGS_SETS+= MIN LOW MEDIUM HIGH +ALL_WARNINGS_SETS+= MIN LOW MEDIUM HIGH EXTRA -.if empty(${WARNINGS_SET}_WARNINGS) -.if ${MAKE_VERSION:U0:[1]:C/.*-//} >= 20050530 +.if !empty(WARNINGS_SET) +.for ws in ${WARNINGS_SET} +.if empty(${ws}_WARNINGS) +.if ${MAKE_VERSION:[1]:C/.*-//} >= 20050530 .BEGIN: _empty_warnings _empty_warnings: .PHONY .else .BEGIN: .endif - @echo "ERROR: Invalid: WARNINGS_SET=${WARNINGS_SET}" + @echo "ERROR: Invalid: WARNINGS_SET=${ws}" @echo "ERROR: Try one of: ${ALL_WARNINGS_SETS:O:u}"; exit 1 .endif +.endfor +.endif # Without -O or if we've set -O0 somewhere - to make debugging more effective, # we need to turn off -Wuninitialized as otherwise we get a warning that @@ -69,40 +75,6 @@ _w_cflags:= ${CFLAGS} ${CPPFLAGS} W_uninitialized= .endif -.if ${MAKE_VERSION:U0:[1]:C/.*-//} <= 20040118 -# This version uses .for loops to avoid a double free bug in old bmake's -# but the .for loops are sensitive to when this file is read. - -# first, make a list of all the warning flags - doesn't matter if -# its redundant - we'll sort -u -_all_sets= ${WARNINGS_SET_${MACHINE_ARCH}} ${WARNINGS_SET} ${ALL_WARNINGS_SETS} -_all_warnings= ${WARNINGS} ${_all_sets:O:u:@s@${$s_WARNINGS}@} - -# we want to set W_* for each warning so they are easy to turn off. -# :O:u does a sort -u -# using :C allows us to handle -f* -w* etc as well as -W* -.for w in ${_all_warnings:O:u} -${w:C/-(.)/\1_/} ?= $w -.endfor - -# Allow for per-target warnings -# Warning: the WARNINGS+= line below, -# may make your brain hurt - trust me; it works --sjg -# the idea is that you can set WARNINGS_SET[_${MACHINE_ARCH}]=HIGH -# and use one of -# W_format_mips_foo.o= -# W_format_foo.o= -# to turn off -Wformat for foo.o (on mips only in the first case), or -# W_format_foo.o=-Wformat=2 -# for stricter checking. -# -# NOTE: that we force the target extension to be .o -# -.for w in ${WARNINGS_SET_${MACHINE_ARCH}:U${WARNINGS_SET}:@s@${$s_WARNINGS}@:O:u} -WARNINGS+= ${${w:C/-(.)/\1_/}_${MACHINE_ARCH}_${.TARGET:T:R}.o:U${${w:C/-(.)/\1_/}_${.TARGET:T:R}.o:U${${w:C/-(.)/\1_/}_${MACHINE_ARCH}:U${${w:C/-(.)/\1_/}}}}} -.endfor - -.else # .for loops have the [dis]advantage of being evaluated when read, # so adding to WARNINGS_SET[_${MACHINE_ARCH}] after this file is @@ -123,9 +95,19 @@ WARNINGS+= ${${w:C/-(.)/\1_/}_${MACHINE_ARCH}_${.TARGET:T:R}.o:U${${w:C/-(.)/\1_ # # NOTE: that we force the target extension to be .o # -WARNINGS+= ${WARNINGS_SET_${MACHINE_ARCH}:U${WARNINGS_SET}:@s@${$s_WARNINGS}@:O:u:@w@${${w:C/-(.)/\1_/}::?=$w} ${${w:C/-(.)/\1_/}_${MACHINE_ARCH}_${.TARGET:T:R}.o:U${${w:C/-(.)/\1_/}_${.TARGET:T:R}.o:U${${w:C/-(.)/\1_/}_${MACHINE_ARCH}:U${${w:C/-(.)/\1_/}}}}}@} -.endif +# define this once, we use it a couple of times below (hence the doubled $$). +M_warnings_list = @s@$${$$s_WARNINGS}@:O:u:@w@$${$${w:C/-(.)/\1_/}::?=$$w} $${$${w:C/-(.)/\1_/}_${MACHINE_ARCH}_${.TARGET:T:R}.o:U$${$${w:C/-(.)/\1_/}_${.TARGET:T:R}.o:U$${$${w:C/-(.)/\1_/}_${MACHINE_ARCH}:U$${$${w:C/-(.)/\1_/}}}}}@ + +# first a list of warnings from the chosen set +_warnings = ${WARNINGS_SET_${MACHINE_ARCH}:U${WARNINGS_SET}:${M_warnings_list}} +# now a list of all -Wno-* overrides not just those defined by WARNINGS_SET +# since things like -Wall imply lots of others. +# this should be a super-set of the -Wno-* in _warnings, but +# just in case... +_no_warnings = ${_warnings:M-Wno-*} ${ALL_WARNINGS_SETS:${M_warnings_list}:M-Wno-*} +# -Wno-* must follow any others +WARNINGS += ${_warnings:N-Wno-*} ${_no_warnings:O:u} .ifndef NO_CFLAGS_WARNINGS # Just ${WARNINGS} should do, but this is more flexible? @@ -137,9 +119,10 @@ NO_CXX_WARNINGS+= \ missing-declarations \ missing-prototypes \ nested-externs \ + shadow \ strict-prototypes -.for s in ${SRCS:M*.cc} +.for s in ${SRCS:M*.c*:N*.c:N*h} .for w in ${NO_CXX_WARNINGS} W_$w_${s:T:R}.o= .endfor diff --git a/os.sh b/os.sh index 9e45f3792f9e..b714eb782cec 100755 --- a/os.sh +++ b/os.sh @@ -17,7 +17,7 @@ # Simon J. Gerraty # RCSid: -# $Id: os.sh,v 1.44 2010/06/29 15:37:21 sjg Exp $ +# $Id: os.sh,v 1.46 2014/05/19 16:38:09 sjg Exp $ # # @(#) Copyright (c) 1994 Simon J. Gerraty # @@ -128,11 +128,13 @@ SunOS) K=-k MAILER=/usr/bin/Mail LOCAL_FS=local - case "$-" in - *i*) ;; + : $-,$ENV + case "$-,$ENV" in + *i*,*) ;; + *,|*ENVFILE*) ;; *) ENV=;; esac - # NetBSD at least has good backward compatability + # NetBSD at least has good backward compatibility # so NetBSD/i386 is good enough case $OS in NetBSD) SHARE_ARCH=$OS/${MACHINE_ARCH:-$MACHINE};; diff --git a/parse.c b/parse.c index ac51abfbab19..0f9a8fcc336d 100644 --- a/parse.c +++ b/parse.c @@ -1,4 +1,4 @@ -/* $NetBSD: parse.c,v 1.192 2013/10/18 20:47:06 christos Exp $ */ +/* $NetBSD: parse.c,v 1.194 2014/02/15 00:17:17 christos Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: parse.c,v 1.192 2013/10/18 20:47:06 christos Exp $"; +static char rcsid[] = "$NetBSD: parse.c,v 1.194 2014/02/15 00:17:17 christos Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)parse.c 8.3 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: parse.c,v 1.192 2013/10/18 20:47:06 christos Exp $"); +__RCSID("$NetBSD: parse.c,v 1.194 2014/02/15 00:17:17 christos Exp $"); #endif #endif /* not lint */ #endif @@ -364,6 +364,7 @@ static int ParseAddCmd(void *, void *); static void ParseHasCommands(void *); static void ParseDoInclude(char *); static void ParseSetParseFile(const char *); +static void ParseSetIncludedFile(void); #ifdef SYSVINCLUDE static void ParseTraditionalInclude(char *); #endif @@ -855,7 +856,8 @@ ParseLinkSrc(void *pgnp, void *cgnp) (void)Lst_AtEnd(cgn->parents, pgn); pgn->unmade += 1; if (DEBUG(PARSE)) { - fprintf(debug_file, "# ParseLinkSrc: added child %s - %s\n", pgn->name, cgn->name); + fprintf(debug_file, "# %s: added child %s - %s\n", __func__, + pgn->name, cgn->name); Targ_PrintNode(pgn, 0); Targ_PrintNode(cgn, 0); } @@ -1030,8 +1032,8 @@ ParseDoSrc(int tOp, const char *src) (void)Lst_AtEnd(predecessor->order_succ, gn); (void)Lst_AtEnd(gn->order_pred, predecessor); if (DEBUG(PARSE)) { - fprintf(debug_file, "# ParseDoSrc: added Order dependency %s - %s\n", - predecessor->name, gn->name); + fprintf(debug_file, "# %s: added Order dependency %s - %s\n", + __func__, predecessor->name, gn->name); Targ_PrintNode(predecessor, 0); Targ_PrintNode(gn, 0); } @@ -2174,6 +2176,7 @@ Parse_include_file(char *file, Boolean isSystem, int silent) /* load it */ lf = loadfile(fullname, fd); + ParseSetIncludedFile(); /* Start reading from this file next */ Parse_SetInput(fullname, 0, -1, loadedfile_nextbuf, lf); curFile->lf = lf; @@ -2231,6 +2234,41 @@ ParseDoInclude(char *line) } +/*- + *--------------------------------------------------------------------- + * ParseSetIncludedFile -- + * Set the .INCLUDEDFROMFILE variable to the contents of .PARSEFILE + * and the .INCLUDEDFROMDIR variable to the contents of .PARSEDIR + * + * Results: + * None + * + * Side Effects: + * The .INCLUDEDFROMFILE variable is overwritten by the contents + * of .PARSEFILE and the .INCLUDEDFROMDIR variable is overwriten + * by the contents of .PARSEDIR + *--------------------------------------------------------------------- + */ +static void +ParseSetIncludedFile(void) +{ + char *pf, *fp = NULL; + char *pd, *dp = NULL; + + pf = Var_Value(".PARSEFILE", VAR_GLOBAL, &fp); + Var_Set(".INCLUDEDFROMFILE", pf, VAR_GLOBAL, 0); + pd = Var_Value(".PARSEDIR", VAR_GLOBAL, &dp); + Var_Set(".INCLUDEDFROMDIR", pd, VAR_GLOBAL, 0); + + if (DEBUG(PARSE)) + fprintf(debug_file, "%s: ${.INCLUDEDFROMDIR} = `%s' " + "${.INCLUDEDFROMFILE} = `%s'\n", __func__, pd, pf); + + if (fp) + free(fp); + if (dp) + free(dp); +} /*- *--------------------------------------------------------------------- * ParseSetParseFile -- @@ -2266,8 +2304,8 @@ ParseSetParseFile(const char *filename) Var_Set(".PARSEFILE", pf = slash + 1, VAR_GLOBAL, 0); } if (DEBUG(PARSE)) - fprintf(debug_file, "ParseSetParseFile: ${.PARSEDIR} = `%s' " - "${.PARSEFILE} = `%s'\n", pd, pf); + fprintf(debug_file, "%s: ${.PARSEDIR} = `%s' ${.PARSEFILE} = `%s'\n", + __func__, pd, pf); free(dirname); } @@ -2329,8 +2367,8 @@ Parse_SetInput(const char *name, int line, int fd, ParseTrackInput(name); if (DEBUG(PARSE)) - fprintf(debug_file, "Parse_SetInput: file %s, line %d, fd %d, nextbuf %p, arg %p\n", - name, line, fd, nextbuf, arg); + fprintf(debug_file, "%s: file %s, line %d, fd %d, nextbuf %p, arg %p\n", + __func__, name, line, fd, nextbuf, arg); if (fd == -1 && nextbuf == NULL) /* sanity */ @@ -2402,7 +2440,7 @@ ParseTraditionalInclude(char *line) char *all_files; if (DEBUG(PARSE)) { - fprintf(debug_file, "ParseTraditionalInclude: %s\n", file); + fprintf(debug_file, "%s: %s\n", __func__, file); } /* @@ -2461,7 +2499,7 @@ ParseGmakeExport(char *line) char *value; if (DEBUG(PARSE)) { - fprintf(debug_file, "ParseGmakeExport: %s\n", variable); + fprintf(debug_file, "%s: %s\n", __func__, variable); } /* @@ -2541,6 +2579,8 @@ ParseEOF(void) /* We've run out of input */ Var_Delete(".PARSEDIR", VAR_GLOBAL); Var_Delete(".PARSEFILE", VAR_GLOBAL); + Var_Delete(".INCLUDEDFROMDIR", VAR_GLOBAL); + Var_Delete(".INCLUDEDFROMFILE", VAR_GLOBAL); return DONE; } diff --git a/str.c b/str.c index bc324b8c9c20..0260447f8178 100644 --- a/str.c +++ b/str.c @@ -1,4 +1,4 @@ -/* $NetBSD: str.c,v 1.34 2012/03/03 23:16:47 dholland Exp $ */ +/* $NetBSD: str.c,v 1.35 2014/02/12 01:35:56 sjg Exp $ */ /*- * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: str.c,v 1.34 2012/03/03 23:16:47 dholland Exp $"; +static char rcsid[] = "$NetBSD: str.c,v 1.35 2014/02/12 01:35:56 sjg Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)str.c 5.8 (Berkeley) 6/1/90"; #else -__RCSID("$NetBSD: str.c,v 1.34 2012/03/03 23:16:47 dholland Exp $"); +__RCSID("$NetBSD: str.c,v 1.35 2014/02/12 01:35:56 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -145,7 +145,7 @@ brk_string(const char *str, int *store_argc, Boolean expand, char **buffer) const char *p; int len; int argmax = 50, curlen = 0; - char **argv = bmake_malloc((argmax + 1) * sizeof(char *)); + char **argv; /* skip leading space chars. */ for (; *str == ' ' || *str == '\t'; ++str) @@ -155,6 +155,12 @@ brk_string(const char *str, int *store_argc, Boolean expand, char **buffer) if ((len = strlen(str) + 1) > curlen) *buffer = bmake_malloc(curlen = len); + /* + * initial argmax based on len + */ + argmax = MAX((len / 5), 50); + argv = bmake_malloc((argmax + 1) * sizeof(char *)); + /* * copy the string; at the same time, parse backslashes, * quotes and build the argument list. diff --git a/var.c b/var.c index 290ad3a2b293..26e3f4bd10d3 100644 --- a/var.c +++ b/var.c @@ -1,4 +1,4 @@ -/* $NetBSD: var.c,v 1.184 2013/09/04 15:38:26 sjg Exp $ */ +/* $NetBSD: var.c,v 1.186 2014/06/20 06:13:45 sjg Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: var.c,v 1.184 2013/09/04 15:38:26 sjg Exp $"; +static char rcsid[] = "$NetBSD: var.c,v 1.186 2014/06/20 06:13:45 sjg Exp $"; #else #include #ifndef lint #if 0 static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94"; #else -__RCSID("$NetBSD: var.c,v 1.184 2013/09/04 15:38:26 sjg Exp $"); +__RCSID("$NetBSD: var.c,v 1.186 2014/06/20 06:13:45 sjg Exp $"); #endif #endif /* not lint */ #endif @@ -2636,7 +2636,7 @@ ApplyModifiers(char *nstr, const char *tstr, break; } free(UNCONST(pattern.rhs)); - newStr = var_Error; + newStr = varNoError; break; } goto default_case; /* "::" */ @@ -3660,6 +3660,7 @@ Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr, } } else { Buffer buf; /* Holds the variable name */ + int depth = 1; endc = startc == PROPEN ? PRCLOSE : BRCLOSE; Buf_Init(&buf, 0); @@ -3667,10 +3668,21 @@ Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr, /* * Skip to the end character or a colon, whichever comes first. */ - for (tstr = str + 2; - *tstr != '\0' && *tstr != endc && *tstr != ':'; - tstr++) + for (tstr = str + 2; *tstr != '\0'; tstr++) { + /* + * Track depth so we can spot parse errors. + */ + if (*tstr == startc) { + depth++; + } + if (*tstr == endc) { + if (--depth == 0) + break; + } + if (depth == 1 && *tstr == ':') { + break; + } /* * A variable inside a variable, expand */ @@ -3690,7 +3702,7 @@ Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr, } if (*tstr == ':') { haveModifier = TRUE; - } else if (*tstr != '\0') { + } else if (*tstr == endc) { haveModifier = FALSE; } else { /* @@ -4040,7 +4052,7 @@ Var_Subst(const char *var, const char *str, GNode *ctxt, Boolean undefErr) */ if (oldVars) { str += length; - } else if (undefErr) { + } else if (undefErr || val == var_Error) { /* * If variable is undefined, complain and skip the * variable. The complaint will stop us from doing anything