mirror of
https://github.com/freebsd/freebsd-src
synced 2024-07-05 17:59:19 +00:00
Intersting/relevant changes since bmake-20240108 ChangeLog since bmake-20240108 2024-03-10 Simon J Gerraty <sjg@beast.crufty.net> * boot-strap: tests can take a long time; use a cookie to skip them if bmake has not been updated since tests last ran successfully. * Makefile: Cygwin handles MANTARGET man * unit-tests/Makefile: set BROKEN_TESTS for Cygwin 2024-03-09 Simon J Gerraty <sjg@beast.crufty.net> * VERSION (_MAKE_VERSION): 20240309 Merge with NetBSD make, pick up o set .ERROR_EXIT to the exit status of .ERROR_TARGET this allows a .ERROR target to ignore the case of .ERROR_EXIT==6 which just means that the build actually failed somewhere else. 2024-03-04 Simon J Gerraty <sjg@beast.crufty.net> * VERSION (_MAKE_VERSION): 20240303 * var.c: on IRIX we need both inttypes.h and stdint.h 2024-03-01 Simon J Gerraty <sjg@beast.crufty.net> * VERSION (_MAKE_VERSION): 20240301 Merge with NetBSD make, pick up o export variables with value from target scope when appropriate. 2024-02-12 Simon J Gerraty <sjg@beast.crufty.net> * VERSION (_MAKE_VERSION): 20240212 Merge with NetBSD make, pick up o remove unneeded conditional-compilation toggles INCLUDES, LIBRARIES, POSIX, SYSVINCLUDE, SYSVVARSUB, GMAKEEXPORT NO_REGEX and SUNSHCMD * configure.in: add check for regex.h * var.c: replace use of NO_REGEX with HAVE_REGEX_H 2024-02-04 Simon J Gerraty <sjg@beast.crufty.net> * VERSION (_MAKE_VERSION): 20240204 Merge with NetBSD make, pick up o var.c: fix some lint (-dL) mode parsing issues 2024-02-02 Simon J Gerraty <sjg@beast.crufty.net> * VERSION: (_MAKE_VERSION): 20240202 Merge with NetBSD make, pick up o make.1: note that arg to :D and :U can be empty o var.c: $$ is not a parse error when .MAKE.SAVE_DOLLARS=no mk/ChangeLog since bmake-20240108 2024-03-09 Simon J Gerraty <sjg@beast.crufty.net> * install-mk (MK_VERSION): 20240309 * meta.sys.mk: _metaError: if .ERROR_EXIT == 6, we do not want to save the .ERROR_META_FILE 2024-02-20 Simon J Gerraty <sjg@beast.crufty.net> * install-mk (MK_VERSION): 20240220 * sys.dirdeps.mk, dirdeps-targets.mk, init.mk: do not set .MAIN: dirdeps in sys.dirdeps.mk dirdeps-targets.mk will do that for top-level builds and init.mk will do it for others. This allows a Makefile which has no need of 'dirdeps' to set .MAIN for itself and "just work". 2024-02-18 Simon J Gerraty <sjg@beast.crufty.net> * bsd.*.mk: for makefiles that get a bsd. symlink, use _this in multiple inclusion tags since .PARSEFILE will not DTRT when such a makefile is included directly by Makefile and automatically (without bsd. prefix). Since we cannot guarantee that our sys.mk will be used, we provide a default _this in each makefile that gets a bsd. prefix such that the value is the same regardless of bsd. prefix. * subdir.mk: drop the !target guard on $SUBDIR_TARGETS 2024-02-12 Simon J Gerraty <sjg@beast.crufty.net> * install-mk (MK_VERSION): 20240212 * SPDX-License-Identifier: BSD-2-Clause Add SPDX-License-Identifier to inidicate that I consider my copyright on any of these makefiles equivalent to BSD-2-Clause * autoconf.mk: allow for configure.ac as currently recommended * subdir.mk: support @auto which is replaced with each subdir that has a [Mm]akefile. * subdir.mk: include local.subdir.mk if it exists. * subdir.mk: rework to handle .WAIT 2024-02-11 Simon J Gerraty <sjg@beast.crufty.net> * subdir.mk: _SUBDIRUSE report the target we are entering subdirs for. 2024-02-10 Simon J Gerraty <sjg@beast.crufty.net> * prog.mk: treat empty SRCS the same as undefined 2024-02-02 Simon J Gerraty <sjg@beast.crufty.net> * Avoid undefined errors in lint (-dL) mode * man.mk (CMT2DOC_FLAGS): note that -mm does mdoc(7) 2024-01-28 Simon J Gerraty <sjg@beast.crufty.net> * install-mk (MK_VERSION): 20240128 * FILES: add ccm.dep.mk for C++ modules add suffixes.mk for common location for generic SUFFIX rules. * auto.dep.mk autodep.mk meta.autodep.mk: include ccm.dep.mk replace OBJ_EXTENSIONS with OBJ_SUFFIXES * autodep.mk: leverage CXX_SUFFIXES for __depsrcs and update style (spaces around = etc) * init.mk: add OBJS_SRCS_FILTER to filter SRCS when setting OBJS * meta2deps.py: handle multiple ./ embedded in path better.
269 lines
5.7 KiB
Makefile
269 lines
5.7 KiB
Makefile
# $Id: prog.mk,v 1.44 2024/02/19 00:06:19 sjg Exp $
|
|
|
|
# should be set properly in sys.mk
|
|
_this ?= ${.PARSEFILE:S,bsd.,,}
|
|
|
|
.if !target(__${_this}__)
|
|
__${_this}__: .NOTMAIN
|
|
|
|
.include <init.mk>
|
|
|
|
# FreeBSD at least expects MAN8 etc.
|
|
.if defined(MAN) && !empty(MAN)
|
|
_sect:=${MAN:E}
|
|
MAN${_sect}=${MAN}
|
|
.endif
|
|
|
|
.SUFFIXES: .out .o .c ${CXX_SUFFIXES} .y .l ${CCM_SUFFIXES} ${PCM}
|
|
|
|
CFLAGS+= ${COPTS}
|
|
|
|
.if ${TARGET_OSNAME} == "NetBSD"
|
|
.if ${MACHINE_ARCH} == "sparc64"
|
|
CFLAGS+= -mcmodel=medlow
|
|
.endif
|
|
|
|
# ELF platforms depend on crtbegin.o and crtend.o
|
|
.if ${OBJECT_FMT} == "ELF"
|
|
.ifndef LIBCRTBEGIN
|
|
LIBCRTBEGIN= ${DESTDIR}/usr/lib/crtbegin.o
|
|
.MADE: ${LIBCRTBEGIN}
|
|
.endif
|
|
.ifndef LIBCRTEND
|
|
LIBCRTEND= ${DESTDIR}/usr/lib/crtend.o
|
|
.MADE: ${LIBCRTEND}
|
|
.endif
|
|
_SHLINKER= ${SHLINKDIR}/ld.elf_so
|
|
.else
|
|
LIBCRTBEGIN?=
|
|
LIBCRTEND?=
|
|
_SHLINKER= ${SHLINKDIR}/ld.so
|
|
.endif
|
|
|
|
.ifndef LIBCRT0
|
|
LIBCRT0= ${DESTDIR}/usr/lib/crt0.o
|
|
.MADE: ${LIBCRT0}
|
|
.endif
|
|
.endif # NetBSD
|
|
|
|
# here is where you can define what LIB* are
|
|
.-include <libnames.mk>
|
|
.if ${MK_DPADD_MK} == "yes"
|
|
# lots of cool magic, but might not suit everyone.
|
|
.include <dpadd.mk>
|
|
.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)
|
|
CLEANFILES+=strings
|
|
.c.o:
|
|
@${COMPILE.c:N-c} -E ${.IMPSRC} | xstr -c -
|
|
@${COMPILE.c} x.c -o ${.TARGET}
|
|
@rm -f x.c
|
|
|
|
# precompiled C++ Modules
|
|
${CCM_SUFFIXES:%=%${PCM}}:
|
|
@${COMIPILE.cc:N-c} -E ${.IMPSRC} | xstr -c -
|
|
@mv -f x.c x.cc
|
|
@${COMPILE.pcm} x.cc -o ${.TARGET}
|
|
@rm -f x.cc
|
|
|
|
${CXX_SUFFIXES:N.c*m:%=%.o}:
|
|
@${COMIPILE.cc:N-c} -E ${.IMPSRC} | xstr -c -
|
|
@mv -f x.c x.cc
|
|
@${COMPILE.cc} x.cc -o ${.TARGET}
|
|
@rm -f x.cc
|
|
.endif
|
|
|
|
.if defined(PROG_CXX)
|
|
PROG= ${PROG_CXX}
|
|
_SUPCXX?= -lstdc++ -lm
|
|
.endif
|
|
|
|
.if defined(PROG)
|
|
BINDIR ?= ${prefix}/bin
|
|
|
|
.if empty(SRCS)
|
|
# init.mk handling of QUALIFIED_VAR_LIST means
|
|
# SRCS will be defined - even if empty.
|
|
SRCS = ${PROG}.c
|
|
.endif
|
|
|
|
SRCS ?= ${PROG}.c
|
|
OBJS_SRCS = ${SRCS:${OBJS_SRCS_FILTER}}
|
|
.for s in ${OBJS_SRCS:M*/*}
|
|
${.o .po .lo:L:@o@${s:T:R}$o@}: $s
|
|
.endfor
|
|
.if !empty(OBJS_SRCS)
|
|
OBJS+= ${OBJS_SRCS:T:R:S/$/.o/g}
|
|
LOBJS+= ${LSRCS:.c=.ln} ${SRCS:M*.c:.c=.ln}
|
|
.endif
|
|
|
|
.if defined(OBJS) && !empty(OBJS)
|
|
.NOPATH: ${OBJS} ${PROG} ${SRCS:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS:M*.y:.y=.h}}
|
|
|
|
# this is known to work for NetBSD 1.6 and FreeBSD 4.2
|
|
.if ${TARGET_OSNAME:NFreeBSD:NNetBSD} == ""
|
|
_PROGLDOPTS=
|
|
.if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves
|
|
_PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER}
|
|
.endif
|
|
.if defined(LIBDIR) && ${SHLIBDIR} != ${LIBDIR}
|
|
_PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBDIR}:${DESTDIR}/usr/lib \
|
|
-L${DESTDIR}${SHLIBDIR}
|
|
.endif
|
|
_PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR}:/usr/lib
|
|
.endif # NetBSD
|
|
|
|
.if ${MK_PROG_LDORDER_MK} != "no"
|
|
${PROG}: ldorder
|
|
|
|
.include <ldorder.mk>
|
|
.endif
|
|
# avoid -dL errors
|
|
LDADD_LDORDER ?=
|
|
LDSTATIC ?=
|
|
|
|
.if defined(DESTDIR) && exists(${LIBCRT0}) && ${LIBCRT0} != "/dev/null"
|
|
|
|
${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${DPADD}
|
|
${_CCLINK} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} -nostdlib ${_PROGLDOPTS} -L${DESTDIR}/usr/lib ${LIBCRT0} ${LIBCRTBEGIN} ${OBJS} ${LDADD_LDORDER} ${LDADD} -L${DESTDIR}/usr/lib ${_SUPCXX} -lgcc -lc -lgcc ${LIBCRTEND}
|
|
|
|
.else
|
|
|
|
${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${DPADD}
|
|
${_CCLINK} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${_PROGLDOPTS} ${OBJS} ${LDADD_LDORDER} ${LDADD}
|
|
|
|
.endif # defined(DESTDIR)
|
|
.endif # defined(OBJS) && !empty(OBJS)
|
|
|
|
.if !defined(MAN)
|
|
MAN= ${PROG}.1
|
|
.endif # !defined(MAN)
|
|
.endif # defined(PROG)
|
|
|
|
.if !defined(_SKIP_BUILD)
|
|
realbuild: ${PROG}
|
|
.endif
|
|
|
|
all: _SUBDIRUSE
|
|
|
|
.if !target(clean)
|
|
cleanprog:
|
|
rm -f a.out [Ee]rrs mklog core *.core \
|
|
${PROG} ${OBJS} ${LOBJS} ${CLEANFILES}
|
|
|
|
clean: _SUBDIRUSE cleanprog
|
|
cleandir: _SUBDIRUSE cleanprog
|
|
.else
|
|
cleandir: _SUBDIRUSE clean
|
|
.endif
|
|
|
|
.if defined(SRCS) && (!defined(MKDEP) || ${MKDEP} != autodep)
|
|
afterdepend: .depend
|
|
@(TMP=/tmp/_depend$$$$; \
|
|
sed -e 's/^\([^\.]*\).o[ ]*:/\1.o \1.ln:/' \
|
|
< .depend > $$TMP; \
|
|
mv $$TMP .depend)
|
|
.endif
|
|
|
|
.if !target(install)
|
|
.if !target(beforeinstall)
|
|
beforeinstall:
|
|
.endif
|
|
.if !target(afterinstall)
|
|
afterinstall:
|
|
.endif
|
|
|
|
.if !empty(BINOWN)
|
|
PROG_INSTALL_OWN ?= -o ${BINOWN} -g ${BINGRP}
|
|
.endif
|
|
|
|
.if !target(realinstall)
|
|
realinstall: proginstall
|
|
.endif
|
|
.if !target(proginstall)
|
|
proginstall:
|
|
.if defined(PROG)
|
|
[ -d ${DESTDIR}${BINDIR} ] || \
|
|
${INSTALL} -d ${PROG_INSTALL_OWN} -m 775 ${DESTDIR}${BINDIR}
|
|
${INSTALL} ${COPY} ${STRIP_FLAG} ${PROG_INSTALL_OWN} -m ${BINMODE} \
|
|
${PROG} ${DESTDIR}${BINDIR}/${PROG_NAME}
|
|
.endif
|
|
.if defined(HIDEGAME)
|
|
(cd ${DESTDIR}/usr/games; rm -f ${PROG}; ln -s dm ${PROG})
|
|
.endif
|
|
.endif
|
|
|
|
.include <links.mk>
|
|
|
|
install: maninstall install_links _SUBDIRUSE
|
|
|
|
install_links:
|
|
.if !empty(SYMLINKS)
|
|
@set ${SYMLINKS}; ${_SYMLINKS_SCRIPT}
|
|
.endif
|
|
.if !empty(LINKS)
|
|
@set ${LINKS}; ${_LINKS_SCRIPT}
|
|
.endif
|
|
|
|
maninstall: afterinstall
|
|
afterinstall: realinstall
|
|
install_links: realinstall
|
|
proginstall: beforeinstall
|
|
realinstall: beforeinstall
|
|
.endif
|
|
|
|
.if !target(lint)
|
|
lint: ${LOBJS}
|
|
.if defined(LOBJS) && !empty(LOBJS)
|
|
@${LINT} ${LINTFLAGS} ${LDFLAGS:M-L*} ${LOBJS} ${LDADD}
|
|
.endif
|
|
.endif
|
|
|
|
.NOPATH: ${PROG}
|
|
.if defined(OBJS) && !empty(OBJS)
|
|
.NOPATH: ${OBJS}
|
|
.endif
|
|
|
|
.if defined(FILES) || defined(FILESGROUPS)
|
|
.include <files.mk>
|
|
.endif
|
|
|
|
.if ${MK_MAN} != "no"
|
|
.include <man.mk>
|
|
.endif
|
|
|
|
.if ${MK_NLS} != "no"
|
|
.include <nls.mk>
|
|
.endif
|
|
|
|
.include <obj.mk>
|
|
.include <dep.mk>
|
|
.include <subdir.mk>
|
|
|
|
.if !empty(PROG) && ${MK_STAGING_PROG} == "yes"
|
|
STAGE_BINDIR ?= ${STAGE_OBJTOP}${BINDIR}
|
|
STAGE_DIR.prog ?= ${STAGE_BINDIR}
|
|
.if ${PROG_NAME:U${PROG}} != ${PROG}
|
|
STAGE_AS_SETS += prog
|
|
STAGE_AS_${PROG} = ${PROG_NAME}
|
|
stage_as.prog: ${PROG}
|
|
.else
|
|
STAGE_SETS += prog
|
|
stage_files.prog: ${PROG}
|
|
.endif
|
|
.endif
|
|
|
|
.include <final.mk>
|
|
|
|
.endif
|