diff options
Diffstat (limited to 'contrib/bmake/mk')
-rw-r--r-- | contrib/bmake/mk/ChangeLog | 80 | ||||
-rw-r--r-- | contrib/bmake/mk/autodep.mk | 4 | ||||
-rw-r--r-- | contrib/bmake/mk/dirdeps.mk | 37 | ||||
-rw-r--r-- | contrib/bmake/mk/dpadd.mk | 8 | ||||
-rw-r--r-- | contrib/bmake/mk/gendirdeps.mk | 8 | ||||
-rw-r--r-- | contrib/bmake/mk/host-target.mk | 6 | ||||
-rw-r--r-- | contrib/bmake/mk/install-mk | 4 | ||||
-rw-r--r-- | contrib/bmake/mk/lib.mk | 15 | ||||
-rw-r--r-- | contrib/bmake/mk/meta.autodep.mk | 32 | ||||
-rwxr-xr-x | contrib/bmake/mk/meta2deps.py | 70 | ||||
-rwxr-xr-x | contrib/bmake/mk/meta2deps.sh | 4 | ||||
-rw-r--r-- | contrib/bmake/mk/options.mk | 34 | ||||
-rw-r--r-- | contrib/bmake/mk/rst2htm.mk | 9 | ||||
-rw-r--r-- | contrib/bmake/mk/sys.mk | 4 | ||||
-rw-r--r-- | contrib/bmake/mk/sys/SunOS.mk | 4 | ||||
-rw-r--r-- | contrib/bmake/mk/target-flags.mk | 4 | ||||
-rw-r--r-- | contrib/bmake/mk/warnings.mk | 67 |
17 files changed, 260 insertions, 130 deletions
diff --git a/contrib/bmake/mk/ChangeLog b/contrib/bmake/mk/ChangeLog index b547197..80671ef 100644 --- a/contrib/bmake/mk/ChangeLog +++ b/contrib/bmake/mk/ChangeLog @@ -1,3 +1,79 @@ +2014-05-22 Simon J. Gerraty <sjg@bad.crufty.net> + + * 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 <sjg@bad.crufty.net> + + * meta.autodep.mk: add _reldir_{finish,failed} for gathering stats + if WITH_META_STATS is defined. + +2014-05-02 Simon J. Gerraty <sjg@bad.crufty.net> + + * dirdeps.mk: accept -DWITHOUT_DIRDEPS (same a as -DNO_DIRDEPS) + to supress dirdeps outside of .CURDIR. + +2014-04-05 Simon J. Gerraty <sjg@bad.crufty.net> + + * Fix spelling errors - patch from Pedro Giffuni + +2014-03-14 Simon J. Gerraty <sjg@bad.crufty.net> + + * 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 <sjg@bad.crufty.net> + + * rst2htm.mk (RST2PDF): add support for rst2pdf + +2014-02-14 Simon J. Gerraty <sjg@bad.crufty.net> + + * install-mk (MK_VERSION): bump version + * dirdeps.mk (_last_dependfile): use .INCLUDEDFROMFILE if + available. + +2014-02-10 Simon J. Gerraty <sjg@bad.crufty.net> + + * options.mk: avoid :U so this isn't bmake dependent + +2014-02-09 Simon J. Gerraty <sjg@bad.crufty.net> + + * 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 <sjg@bad.crufty.net> + + * install-mk (MK_VERSION): bump version + * meta2deps.py: convert to print function for python3 compat. + we also need to open files with mode 'r' rather than 'rb' + otherwise we get bytes instead of strings. + +2013-10-10 Simon J. Gerraty <sjg@bad.crufty.net> + + * install-mk (MK_VERSION): bump version + + * dirdeps.mk: when TARGET_SPEC_VARS is more than just MACHINE + apply the same filtering (M_dep_qual_fixes) when setting _machines + as _build_dirs. + Also fix the filtering of Makefile.depend files - for reporting + what we are looking for (M_dep_qual_fixes can get confused by + Makefile.depend) + Add some more debug info. + 2013-09-04 Simon J. Gerraty <sjg@bad.crufty.net> * gendirdeps.mk (_objtops): fix typo also @@ -471,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. @@ -621,7 +697,7 @@ 2006-12-30 Simon J. Gerraty <sjg@void.crufty.net> * 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 <sjg@void.crufty.net> diff --git a/contrib/bmake/mk/autodep.mk b/contrib/bmake/mk/autodep.mk index 744770f..818c474 100644 --- a/contrib/bmake/mk/autodep.mk +++ b/contrib/bmake/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/contrib/bmake/mk/dirdeps.mk b/contrib/bmake/mk/dirdeps.mk index e812416..8c342be 100644 --- a/contrib/bmake/mk/dirdeps.mk +++ b/contrib/bmake/mk/dirdeps.mk @@ -1,4 +1,4 @@ -# $Id: dirdeps.mk,v 1.28 2013/03/25 21:11:43 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 .<target_spec>. -# 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. # @@ -149,11 +149,11 @@ DEP_$v ?= ${$v} JOT ?= jot _tspec_x := ${${JOT} ${TARGET_SPEC_VARS:[#]}:L:sh} # this handles unqualified entries -M_dep_qual_fixes = C;(/[^/.,]+)$$;\1.${DEP_TARGET_SPEC}; +M_dep_qual_fixes = C;(/[^/.,]+)$$;\1.$${DEP_TARGET_SPEC}; # there needs to be at least one item missing for these to make sense .for i in ${_tspec_x:[2..-1]} _tspec_m$i := ${TARGET_SPEC_VARS:[2..$i]:@w@[^,]+@:ts,} -_tspec_a$i := ,${TARGET_SPEC_VARS:[$i..-1]:@v@$${DEP_$v}@:ts,} +_tspec_a$i := ,${TARGET_SPEC_VARS:[$i..-1]:@v@$$$${DEP_$v}@:ts,} M_dep_qual_fixes += C;(\.${_tspec_m$i})$$;\1${_tspec_a$i}; .endfor .else @@ -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 @@ -359,7 +367,8 @@ _machines := ${_machines:O:u} .if ${TARGET_SPEC_VARS:[#]} > 1 # we need to tweak _machines _dm := ${DEP_MACHINE} -_machines := ${_machines:@DEP_MACHINE@${DEP_TARGET_SPEC}@} +# apply the same filtering that we do when qualifying DIRDEPS. +_machines := ${_machines:@DEP_MACHINE@${DEP_TARGET_SPEC}@:${M_dep_qual_fixes:ts:}:O:u} DEP_MACHINE := ${_dm} .endif @@ -396,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 .<machine> # the :M*/*/*.* just tries to limit the dirs we check to likely ones. @@ -464,6 +473,9 @@ ${_this_dir}.$m: ${_build_dirs:M*.$m:N${_this_dir}.$m} .if ${_DIRDEP_CHECKED:M$d} == "" # once only _DIRDEP_CHECKED += $d +.if !empty(_debug_search) +.info checking $d +.endif # Note: _build_dirs is fully qualifed so d:R is always the directory .if exists(${d:R}) # Warning: there is an assumption here that MACHINE is always @@ -471,7 +483,8 @@ _DIRDEP_CHECKED += $d # If TARGET_SPEC and MACHINE are insufficient, you have a problem. _m := ${.MAKE.DEPENDFILE_PREFERENCE:T:S;${TARGET_SPEC}$;${d:E};:S;${MACHINE};${d:E:C/,.*//};:@m@${exists(${d:R}/$m):?${d:R}/$m:}@:[1]} .if !empty(_m) -_qm := ${_m:${M_dep_qual_fixes:ts:}} +# M_dep_qual_fixes isn't geared to Makefile.depend +_qm := ${_m:C;(\.depend)$;\1.${d:E};:${M_dep_qual_fixes:ts:}} .if !empty(_debug_search) .info Looking for ${_qm} .endif diff --git a/contrib/bmake/mk/dpadd.mk b/contrib/bmake/mk/dpadd.mk index a940b61..abc92df 100644 --- a/contrib/bmake/mk/dpadd.mk +++ b/contrib/bmake/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/contrib/bmake/mk/gendirdeps.mk b/contrib/bmake/mk/gendirdeps.mk index 20e2b15..b313298 100644 --- a/contrib/bmake/mk/gendirdeps.mk +++ b/contrib/bmake/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/contrib/bmake/mk/host-target.mk b/contrib/bmake/mk/host-target.mk index c6d4562..eacdf1d 100644 --- a/contrib/bmake/mk/host-target.mk +++ b/contrib/bmake/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/contrib/bmake/mk/install-mk b/contrib/bmake/mk/install-mk index 0640906..7e4ee8b 100644 --- a/contrib/bmake/mk/install-mk +++ b/contrib/bmake/mk/install-mk @@ -55,7 +55,7 @@ # Simon J. Gerraty <sjg@crufty.net> # RCSid: -# $Id: install-mk,v 1.93 2013/08/02 18:28:47 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=20130801 +MK_VERSION=20140522 OWNER= GROUP= MODE=444 diff --git a/contrib/bmake/mk/lib.mk b/contrib/bmake/mk/lib.mk index f219115..417aa02 100644 --- a/contrib/bmake/mk/lib.mk +++ b/contrib/bmake/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 <bsd.own.mk> # 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/contrib/bmake/mk/meta.autodep.mk b/contrib/bmake/mk/meta.autodep.mk index c29c26e..a961bff 100644 --- a/contrib/bmake/mk/meta.autodep.mk +++ b/contrib/bmake/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/contrib/bmake/mk/meta2deps.py b/contrib/bmake/mk/meta2deps.py index 254f230..8e349e7 100755 --- a/contrib/bmake/mk/meta2deps.py +++ b/contrib/bmake/mk/meta2deps.py @@ -1,5 +1,7 @@ #!/usr/bin/env python +from __future__ import print_function + """ This script parses each "meta" file and extracts the information needed to deduce build and src dependencies. @@ -35,7 +37,7 @@ We only pay attention to a subset of the information in the """ RCSid: - $Id: meta2deps.py,v 1.15 2013/07/29 20:41:23 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. @@ -90,14 +92,14 @@ def resolve(path, cwd, last_dir=None, debug=0, debug_out=sys.stderr): continue p = '/'.join([d,path]) if debug > 2: - print >> debug_out, "looking for:", p, + print("looking for:", p, end=' ', file=debug_out) if not os.path.exists(p): if debug > 2: - print >> debug_out, "nope" + print("nope", file=debug_out) p = None continue if debug > 2: - print >> debug_out, "found:", p + print("found:", p, file=debug_out) return p return None @@ -164,7 +166,7 @@ class MetaFile: 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 @@ -236,21 +238,21 @@ class MetaFile: self.objroots.sort(reverse=True) if self.debug: - print >> self.debug_out, "host_target=", self.host_target - print >> self.debug_out, "srctops=", self.srctops - print >> self.debug_out, "objroots=", self.objroots + print("host_target=", self.host_target, file=self.debug_out) + print("srctops=", self.srctops, file=self.debug_out) + print("objroots=", self.objroots, file=self.debug_out) self.dirdep_re = re.compile(r'([^/]+)/(.+)') if self.dpdeps and not self.reldir: if self.debug: - print >> self.debug_out, "need reldir:", + print("need reldir:", end=' ', file=self.debug_out) if self.curdir: srctop = self.find_top(self.curdir, self.srctops) if srctop: self.reldir = self.curdir.replace(srctop,'') if self.debug: - print >> self.debug_out, self.reldir + print(self.reldir, file=self.debug_out) if not self.reldir: self.dpdeps = None # we cannot do it? @@ -280,7 +282,7 @@ class MetaFile: if not self.reldir: return None for f in sort_unique(self.file_deps): - print >> out, 'DPDEPS_%s += %s' % (f, self.reldir) + print('DPDEPS_%s += %s' % (f, self.reldir), file=out) def seenit(self, dir): """rememer that we have seen dir.""" @@ -291,14 +293,14 @@ class MetaFile: if data not in list: list.append(data) if self.debug: - print >> self.debug_out, "%s: %sAdd: %s" % (self.name, clue, data) + 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: - print >> self.debug_out, "found in", top + print("found in", top, file=self.debug_out) return top return None @@ -307,9 +309,9 @@ class MetaFile: ddep = None for ddepf in [path + '.dirdep', dir + '/.dirdep']: if not ddep and os.path.exists(ddepf): - ddep = open(ddepf, 'rb').readline().strip('# \n') + ddep = open(ddepf, 'r').readline().strip('# \n') if self.debug > 1: - print >> self.debug_out, "found %s: %s\n" % (ddepf, ddep) + print("found %s: %s\n" % (ddepf, ddep), file=self.debug_out) if ddep.endswith(self.machine): ddep = ddep[0:-(1+len(self.machine))] elif self.target_spec and ddep.endswith(self.target_spec): @@ -331,7 +333,7 @@ class MetaFile: if not (self.machine == 'host' and dmachine == self.host_target): if self.debug > 2: - print >> self.debug_out, "adding .%s to %s" % (dmachine, ddep) + print("adding .%s to %s" % (dmachine, ddep), file=self.debug_out) ddep += '.' + dmachine return ddep @@ -342,7 +344,7 @@ class MetaFile: self.parse(name, file) except: # give a useful clue - print >> sys.stderr, '{}:{}: '.format(self.name, self.line), + print('{}:{}: '.format(self.name, self.line), end=' ', file=sys.stderr) raise def parse(self, name=None, file=None): @@ -379,7 +381,7 @@ class MetaFile: f = file cwd = last_dir = self.cwd else: - f = open(self.name, 'rb') + f = open(self.name, 'r') skip = True pid_cwd = {} pid_last_dir = {} @@ -396,7 +398,7 @@ class MetaFile: if not line[0] in interesting: continue if self.debug > 2: - print >> self.debug_out, "input:", line, + print("input:", line, end=' ', file=self.debug_out) w = line.split() if skip: @@ -413,7 +415,7 @@ class MetaFile: self.cwd = cwd = last_dir = w[1] self.seenit(cwd) # ignore this if self.debug: - print >> self.debug_out, "%s: CWD=%s" % (self.name, cwd) + print("%s: CWD=%s" % (self.name, cwd), file=self.debug_out) continue pid = int(w[1]) @@ -438,12 +440,12 @@ class MetaFile: cwd = cwd[0:-2] last_dir = cwd if self.debug > 1: - print >> self.debug_out, "cwd=", cwd + print("cwd=", cwd, file=self.debug_out) continue if w[2] in self.seen: if self.debug > 2: - print >> self.debug_out, "seen:", w[2] + print("seen:", w[2], file=self.debug_out) continue # file operations if w[0] in 'ML': @@ -461,7 +463,7 @@ class MetaFile: dir,base = os.path.split(path) if dir in self.seen: if self.debug > 2: - print >> self.debug_out, "seen:", dir + print("seen:", dir, file=self.debug_out) continue # we can have a path in an objdir which is a link # to the src dir, we may need to add dependencies for each @@ -472,19 +474,19 @@ class MetaFile: # now put path back together path = '/'.join([dir,base]) if self.debug > 1: - print >> self.debug_out, "raw=%s rdir=%s dir=%s path=%s" % (w[2], rdir, dir, path) + print("raw=%s rdir=%s dir=%s path=%s" % (w[2], rdir, dir, path), file=self.debug_out) if w[0] in 'SRWL': if w[0] == 'W' and path.endswith('.dirdep'): continue if path in [last_dir, cwd, self.cwd, self.curdir]: if self.debug > 1: - print >> self.debug_out, "skipping:", path + print("skipping:", path, file=self.debug_out) continue if os.path.isdir(path): if w[0] in 'RW': last_dir = path; if self.debug > 1: - print >> self.debug_out, "ldir=", last_dir + print("ldir=", last_dir, file=self.debug_out) continue if w[0] in 'REWML': @@ -642,10 +644,10 @@ def main(argv, klass=MetaFile, xopts='', xoptf=None): debug_out = getv(conf, 'debug_out', sys.stderr) if debug: - print >> debug_out, "config:" - print >> debug_out, "psyco=", have_psyco - for k,v in conf.items(): - print >> debug_out, "%s=%s" % (k,v) + print("config:", file=debug_out) + print("psyco=", have_psyco, file=debug_out) + for k,v in list(conf.items()): + print("%s=%s" % (k,v), file=debug_out) for a in args: if a.endswith('.meta'): @@ -657,9 +659,9 @@ def main(argv, klass=MetaFile, xopts='', xoptf=None): m = klass(f, conf) if output: - print m.dirdeps() + print(m.dirdeps()) - print m.src_dirdeps('\nsrc:') + print(m.src_dirdeps('\nsrc:')) dpdeps = getv(conf, 'DPDEPS') if dpdeps: @@ -672,6 +674,6 @@ if __name__ == '__main__': main(sys.argv) except: # yes, this goes to stdout - print "ERROR: ", sys.exc_info()[1] + print("ERROR: ", sys.exc_info()[1]) raise diff --git a/contrib/bmake/mk/meta2deps.sh b/contrib/bmake/mk/meta2deps.sh index f63aee3..d96ce07 100755 --- a/contrib/bmake/mk/meta2deps.sh +++ b/contrib/bmake/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 .<machine> as needed. diff --git a/contrib/bmake/mk/options.mk b/contrib/bmake/mk/options.mk index aa54754..c0b4988 100644 --- a/contrib/bmake/mk/options.mk +++ b/contrib/bmake/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/contrib/bmake/mk/rst2htm.mk b/contrib/bmake/mk/rst2htm.mk index 8bd66da..4d4c940 100644 --- a/contrib/bmake/mk/rst2htm.mk +++ b/contrib/bmake/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/contrib/bmake/mk/sys.mk b/contrib/bmake/mk/sys.mk index 30eca9b..236f62d 100644 --- a/contrib/bmake/mk/sys.mk +++ b/contrib/bmake/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/contrib/bmake/mk/sys/SunOS.mk b/contrib/bmake/mk/sys/SunOS.mk index f164aa2..73f8062 100644 --- a/contrib/bmake/mk/sys/SunOS.mk +++ b/contrib/bmake/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 <host-target.mk> @@ -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/contrib/bmake/mk/target-flags.mk b/contrib/bmake/mk/target-flags.mk index f8932b2..4525dbd 100644 --- a/contrib/bmake/mk/target-flags.mk +++ b/contrib/bmake/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/contrib/bmake/mk/warnings.mk b/contrib/bmake/mk/warnings.mk index 9143e42..bacbefb 100644 --- a/contrib/bmake/mk/warnings.mk +++ b/contrib/bmake/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 |