ef315f7931
Originally, MKCRYPTO was introduced because the United States classified cryptography as a munition and restricted its export. The export controls were substantially relaxed fifteen years ago, and are essentially irrelevant for software with published source code. In the intervening time, nobody bothered to remove the option after its motivation -- the US export restriction -- was eliminated. I'm not aware of any other operating system that has a similar option; I expect it is mainly out of apathy for churn that we still have it. Today, cryptography is an essential part of modern computing -- you can't use the internet responsibly without cryptography. The position of the TNF board of directors is that TNF makes no representation that MKCRYPTO=no satisfies any country's cryptography regulations. My personal position is that the availability of cryptography is a basic human right; that any local laws restricting it to a privileged few are fundamentally immoral; and that it is wrong for developers to spend effort crippling cryptography to work around such laws. As proposed on tech-crypto, tech-security, and tech-userlevel to no objections: https://mail-index.netbsd.org/tech-crypto/2017/05/06/msg000719.html https://mail-index.netbsd.org/tech-security/2017/05/06/msg000928.html https://mail-index.netbsd.org/tech-userlevel/2017/05/06/msg010547.html P.S. Reviewing all the uses of MKCRYPTO in src revealed a lot of *bad* crypto that was conditional on it, e.g. DES in telnet... That should probably be removed too, but on the grounds that it is bad, not on the grounds that it is (nominally) crypto.
685 lines
16 KiB
Makefile
685 lines
16 KiB
Makefile
# $NetBSD: bsd.prog.mk,v 1.307 2017/05/21 15:28:42 riastradh Exp $
|
|
# @(#)bsd.prog.mk 8.2 (Berkeley) 4/2/94
|
|
|
|
.ifndef HOSTPROG
|
|
|
|
.include <bsd.init.mk>
|
|
.include <bsd.shlib.mk>
|
|
.include <bsd.gcc.mk>
|
|
|
|
#
|
|
# Definitions and targets shared among all programs built by a single
|
|
# Makefile.
|
|
#
|
|
|
|
##### Basic targets
|
|
realinstall: proginstall scriptsinstall
|
|
|
|
.gdbinit:
|
|
rm -f .gdbinit
|
|
.if defined(DESTDIR) && !empty(DESTDIR)
|
|
echo "set solib-absolute-prefix ${DESTDIR}" > .gdbinit
|
|
.else
|
|
touch .gdbinit
|
|
.endif
|
|
.for __gdbinit in ${GDBINIT}
|
|
echo "source ${__gdbinit}" >> .gdbinit
|
|
.endfor
|
|
|
|
CLEANFILES+= a.out [Ee]rrs mklog core *.core .gdbinit
|
|
|
|
.if defined(SHAREDSTRINGS)
|
|
CLEANFILES+=strings
|
|
.c.o:
|
|
${CC} -E ${CPPFLAGS} ${CFLAGS} ${.IMPSRC} | xstr -c -
|
|
@${CC} ${CPPFLAGS} ${CFLAGS} -c x.c -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
@rm -f x.c
|
|
|
|
.cc.o .cpp.o .cxx.o .C.o:
|
|
${CXX} -E ${CPPFLAGS} ${CXXFLAGS} ${.IMPSRC} | xstr -c -
|
|
@mv -f x.c x.cc
|
|
@${CXX} ${CPPFLAGS} ${CXXFLAGS} -c x.cc -o ${.TARGET}
|
|
.if defined(CTFCONVERT)
|
|
${CTFCONVERT} ${CTFFLAGS} ${.TARGET}
|
|
.endif
|
|
@rm -f x.cc
|
|
.endif
|
|
|
|
.if defined(MKPIE) && (${MKPIE} != "no") && !defined(NOPIE)
|
|
CFLAGS+= ${PIE_CFLAGS}
|
|
AFLAGS+= ${PIE_AFLAGS}
|
|
LDFLAGS+= ${"${LDSTATIC.${.TARGET}}" == "-static" :? : ${PIE_LDFLAGS}}
|
|
.endif
|
|
|
|
CFLAGS+= ${COPTS}
|
|
.if ${MKDEBUG:Uno} != "no" && !defined(NODEBUG)
|
|
CFLAGS+= -g
|
|
.endif
|
|
OBJCFLAGS+= ${OBJCOPTS}
|
|
MKDEP_SUFFIXES?= .o .ln .d
|
|
|
|
# CTF preserve debug symbols
|
|
.if (${MKCTF:Uno} != "no") && (${CFLAGS:M-g} != "")
|
|
CTFFLAGS+= -g
|
|
CTFMFLAGS+= -g
|
|
.if defined(HAVE_GCC)
|
|
#CFLAGS+=-gdwarf-2
|
|
.endif
|
|
.endif
|
|
|
|
# ELF platforms depend on crti.o, crtbegin.o, crtend.o, and crtn.o
|
|
.ifndef LIBCRTBEGIN
|
|
LIBCRTBEGIN= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o ${_GCC_CRTBEGIN}
|
|
.MADE: ${LIBCRTBEGIN}
|
|
.endif
|
|
.ifndef LIBCRTEND
|
|
LIBCRTEND= ${_GCC_CRTEND} ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crtn.o
|
|
.MADE: ${LIBCRTEND}
|
|
.endif
|
|
_SHLINKER= ${SHLINKDIR}/ld.elf_so
|
|
|
|
.ifndef LIBCRT0
|
|
LIBCRT0= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crt0.o
|
|
.MADE: ${LIBCRT0}
|
|
.endif
|
|
|
|
.ifndef LIBCRTI
|
|
LIBCRTI= ${DESTDIR}/usr/lib/${MLIBDIR:D${MLIBDIR}/}crti.o
|
|
.MADE: ${LIBCRTI}
|
|
.endif
|
|
|
|
##### Installed system library definitions
|
|
#
|
|
# E.g.
|
|
# LIBC?=${DESTDIR}/usr/lib/libc.a
|
|
# LIBX11?=${DESTDIR}/usr/X11R7/lib/libX11.a
|
|
# etc..
|
|
# NB: If you are a library here, add it in bsd.README
|
|
|
|
.for _lib in \
|
|
archive \
|
|
asn1 \
|
|
atf_c \
|
|
atf_cxx \
|
|
bind9 \
|
|
bluetooth \
|
|
bsdmalloc \
|
|
bz2 \
|
|
c \
|
|
c_pic \
|
|
com_err \
|
|
compat \
|
|
crypt \
|
|
crypto \
|
|
curses \
|
|
cxx \
|
|
dbm \
|
|
des \
|
|
dns \
|
|
edit \
|
|
event \
|
|
expat \
|
|
execinfo \
|
|
fetch \
|
|
fl \
|
|
form \
|
|
g2c \
|
|
gcc \
|
|
gnumalloc \
|
|
gssapi \
|
|
hdb \
|
|
heimbase \
|
|
heimntlm \
|
|
hx509 \
|
|
intl \
|
|
ipsec \
|
|
isc \
|
|
isccc \
|
|
isccfg \
|
|
kadm5clnt \
|
|
kadm5srv \
|
|
kafs \
|
|
krb5 \
|
|
kvm \
|
|
l \
|
|
lber \
|
|
ldap \
|
|
ldap_r \
|
|
lua \
|
|
lwres \
|
|
m \
|
|
magic \
|
|
menu \
|
|
netpgpverify \
|
|
objc \
|
|
ossaudio \
|
|
pam \
|
|
pcap \
|
|
pci \
|
|
pmc \
|
|
posix \
|
|
pthread \
|
|
puffs \
|
|
quota \
|
|
radius \
|
|
resolv \
|
|
rmt \
|
|
roken \
|
|
rpcsvc \
|
|
rt \
|
|
rump \
|
|
rumpfs_cd9660fs \
|
|
rumpfs_efs \
|
|
rumpfs_ext2fs \
|
|
rumpfs_ffs \
|
|
rumpfs_hfs \
|
|
rumpfs_lfs \
|
|
rumpfs_msdosfs \
|
|
rumpfs_nfs \
|
|
rumpfs_ntfs \
|
|
rumpfs_syspuffs \
|
|
rumpfs_tmpfs \
|
|
rumpfs_udf \
|
|
rumpfs_ufs \
|
|
rumpuser \
|
|
saslc \
|
|
skey \
|
|
sl \
|
|
sqlite3 \
|
|
ss \
|
|
ssh \
|
|
ssl \
|
|
ssp \
|
|
stdcxx \
|
|
supcxx \
|
|
terminfo \
|
|
tre \
|
|
unbound \
|
|
usbhid \
|
|
util \
|
|
wind \
|
|
wrap \
|
|
y \
|
|
z
|
|
.ifndef LIB${_lib:tu}
|
|
LIB${_lib:tu}= ${DESTDIR}/usr/lib/lib${_lib:S/xx/++/:S/atf_c/atf-c/}.a
|
|
.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded
|
|
.endif
|
|
.endfor
|
|
|
|
# PAM applications, if linked statically, need more libraries
|
|
.if (${MKPIC} == "no")
|
|
PAM_STATIC_LDADD+= -lssh
|
|
PAM_STATIC_DPADD+= ${LIBSSH}
|
|
.if (${MKKERBEROS} != "no")
|
|
PAM_STATIC_LDADD+= -lkafs -lkrb5 -lhx509 -lwind -lasn1 \
|
|
-lroken -lcom_err -lheimbase -lcrypto -lsqlite3
|
|
PAM_STATIC_DPADD+= ${LIBKAFS} ${LIBKRB5} ${LIBHX509} ${LIBWIND} ${LIBASN1} \
|
|
${LIBROKEN} ${LIBCOM_ERR} ${LIBHEIMBASE} ${LIBCRYPTO} ${LIBSQLITE3}
|
|
.endif
|
|
.if (${MKSKEY} != "no")
|
|
PAM_STATIC_LDADD+= -lskey
|
|
PAM_STATIC_DPADD+= ${LIBSKEY}
|
|
.endif
|
|
PAM_STATIC_LDADD+= -lradius -lcrypt -lrpcsvc -lutil
|
|
PAM_STATIC_DPADD+= ${LIBRADIUS} ${LIBCRYPT} ${LIBRPCSVC} ${LIBUTIL}
|
|
.else
|
|
PAM_STATIC_LDADD=
|
|
PAM_STATIC_DPADD=
|
|
.endif
|
|
|
|
# NB: If you are a library here, add it in bsd.README
|
|
.for _lib in \
|
|
FS \
|
|
GL \
|
|
GLU \
|
|
ICE \
|
|
SM \
|
|
X11 \
|
|
XTrap \
|
|
Xau \
|
|
Xaw \
|
|
Xdmcp \
|
|
Xext \
|
|
Xfont \
|
|
Xft \
|
|
Xi \
|
|
Xinerama \
|
|
Xmu \
|
|
Xmuu \
|
|
Xpm \
|
|
Xrandr \
|
|
Xrender \
|
|
Xss \
|
|
Xt \
|
|
Xtst \
|
|
Xv \
|
|
Xxf86dga \
|
|
Xxf86misc \
|
|
Xxf86vm \
|
|
dps \
|
|
fntstubs \
|
|
fontcache \
|
|
fontconfig \
|
|
fontenc \
|
|
freetype \
|
|
lbxutil \
|
|
xkbfile
|
|
.ifndef LIB${_lib:tu}
|
|
LIB${_lib:tu}= ${DESTDIR}${X11USRLIBDIR}/lib${_lib}.a
|
|
.MADE: ${LIB${_lib:tu}} # Note: ${DESTDIR} will be expanded
|
|
.endif
|
|
.endfor
|
|
|
|
# Ugly one-offs
|
|
LIBX11_XCB= ${DESTDIR}${X11USRLIBDIR}/libX11-xcb.a
|
|
LIBXCB= ${DESTDIR}${X11USRLIBDIR}/libxcb.a
|
|
|
|
.if defined(RESCUEDIR)
|
|
CPPFLAGS+= -DRESCUEDIR=\"${RESCUEDIR}\"
|
|
.endif
|
|
|
|
_PROGLDOPTS=
|
|
.if ${SHLINKDIR} != "/usr/libexec" # XXX: change or remove if ld.so moves
|
|
_PROGLDOPTS+= -Wl,-dynamic-linker=${_SHLINKER}
|
|
.endif
|
|
.if ${SHLIBDIR} != "/usr/lib"
|
|
_PROGLDOPTS+= -Wl,-rpath,${SHLIBDIR} \
|
|
-L=${SHLIBDIR}
|
|
.elif ${SHLIBINSTALLDIR} != "/usr/lib"
|
|
_PROGLDOPTS+= -Wl,-rpath-link,${DESTDIR}${SHLIBINSTALLDIR} \
|
|
-L=${SHLIBINSTALLDIR}
|
|
.endif
|
|
|
|
__proginstall: .USE
|
|
${_MKTARGET_INSTALL}
|
|
${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
|
|
${STRIPFLAG} ${.ALLSRC} ${.TARGET}
|
|
|
|
__progrumpinstall: .USE
|
|
${_MKTARGET_INSTALL}
|
|
${INSTALL_FILE} -o ${RUMPBINOWN} -g ${RUMPBINGRP} -m ${RUMPBINMODE} \
|
|
${STRIPFLAG} ${.ALLSRC} ${.TARGET}
|
|
|
|
__progdebuginstall: .USE
|
|
${_MKTARGET_INSTALL}
|
|
${INSTALL_FILE} -o ${DEBUGOWN} -g ${DEBUGGRP} -m ${DEBUGMODE} \
|
|
${.ALLSRC} ${.TARGET}
|
|
|
|
|
|
|
|
#
|
|
# Backwards compatibility with Makefiles that assume that bsd.prog.mk
|
|
# can only build a single binary.
|
|
#
|
|
|
|
_APPEND_MANS=yes
|
|
_APPEND_SRCS=yes
|
|
|
|
_CCLINKFLAGS=
|
|
|
|
.if defined(PROG_CXX)
|
|
PROG= ${PROG_CXX}
|
|
_CCLINK= ${CXX} ${_CCLINKFLAGS}
|
|
.endif
|
|
|
|
.if defined(RUMPPRG)
|
|
CPPFLAGS+= -D_KERNTYPES
|
|
PROG= ${RUMPPRG}
|
|
. ifndef CRUNCHEDPROG
|
|
. if (${MKRUMP} != "no")
|
|
PROGS= ${RUMPPRG} rump.${RUMPPRG}
|
|
. else
|
|
PROGS= ${RUMPPRG}
|
|
. endif
|
|
. if defined(SRCS)
|
|
. if (${MKRUMP} != "no")
|
|
SRCS.rump.${PROG}:= ${SRCS} ${PROG}_rumpops.c ${RUMPSRCS}
|
|
. endif
|
|
SRCS+= ${PROG}_hostops.c
|
|
. else
|
|
SRCS= ${PROG}.c ${PROG}_hostops.c
|
|
. if (${MKRUMP} != "no")
|
|
SRCS.rump.${PROG}= ${PROG}.c ${PROG}_rumpops.c ${RUMPSRCS}
|
|
. endif
|
|
. endif
|
|
. if (${MKRUMP} != "no")
|
|
DPSRCS+= ${PROG}_rumpops.c ${RUMPSRCS}
|
|
LDADD.rump.${PROG}+= -lrumpclient
|
|
DPADD.rump.${PROG}+= ${LIBRUMPCLIENT}
|
|
MAN.rump.${PROG}= # defined but feeling empty
|
|
_RUMPINSTALL.rump.${PROG}=# defined
|
|
. endif
|
|
. else # CRUNCHEDPROG
|
|
PROGS= ${PROG}
|
|
CPPFLAGS+= -DCRUNCHOPS
|
|
. endif
|
|
.endif
|
|
|
|
.if defined(PROG)
|
|
_CCLINK?= ${CC} ${_CCLINKFLAGS}
|
|
. if defined(MAN)
|
|
MAN.${PROG}= ${MAN}
|
|
_APPEND_MANS= no
|
|
. endif
|
|
. if !defined(OBJS)
|
|
OBJS= ${OBJS.${PROG}}
|
|
. endif
|
|
. if defined(PROGNAME)
|
|
PROGNAME.${PROG}= ${PROGNAME}
|
|
. endif
|
|
. if defined(SRCS)
|
|
SRCS.${PROG}= ${SRCS}
|
|
_APPEND_SRCS= no
|
|
. endif
|
|
.endif
|
|
|
|
# Turn the single-program PROG and PROG_CXX variables into their multi-word
|
|
# counterparts, PROGS and PROGS_CXX.
|
|
.if !defined(RUMPPRG)
|
|
. if defined(PROG_CXX) && !defined(PROGS_CXX)
|
|
PROGS_CXX= ${PROG_CXX}
|
|
. elif defined(PROG) && !defined(PROGS)
|
|
PROGS= ${PROG}
|
|
. endif
|
|
.endif
|
|
|
|
##### Libraries that this may depend upon.
|
|
.if defined(PROGDPLIBS) # {
|
|
.for _lib _dir in ${PROGDPLIBS}
|
|
.if !defined(BINDO.${_lib})
|
|
PROGDO.${_lib}!= cd "${_dir}" && ${PRINTOBJDIR}
|
|
.MAKEOVERRIDES+=PROGDO.${_lib}
|
|
.endif
|
|
LDADD+= -L${PROGDO.${_lib}} -l${_lib}
|
|
.if exists(${PROGDO.${_lib}}/lib${_lib}_pic.a)
|
|
DPADD+= ${PROGDO.${_lib}}/lib${_lib}_pic.a
|
|
.elif exists(${PROGDO.${_lib}}/lib${_lib}.so)
|
|
DPADD+= ${PROGDO.${_lib}}/lib${_lib}.so
|
|
.else
|
|
DPADD+= ${PROGDO.${_lib}}/lib${_lib}.a
|
|
.endif
|
|
.endfor
|
|
.endif # }
|
|
#
|
|
# Per-program definitions and targets.
|
|
#
|
|
|
|
_CCLINK.CDEFAULT= ${CC} ${_CCLINKFLAGS}
|
|
# Definitions specific to C programs.
|
|
.for _P in ${PROGS}
|
|
SRCS.${_P}?= ${_P}.c
|
|
_CCLINK.${_P}= ${CC} ${_CCLINKFLAGS}
|
|
_CFLAGS.${_P}= ${CFLAGS} ${CPUFLAGS}
|
|
_CPPFLAGS.${_P}= ${CPPFLAGS}
|
|
_COPTS.${_P}= ${COPTS}
|
|
.endfor
|
|
|
|
_CCLINK.CXXDEFAULT= ${CXX} ${_CCLINKFLAGS}
|
|
# Definitions specific to C++ programs.
|
|
.for _P in ${PROGS_CXX}
|
|
SRCS.${_P}?= ${_P}.cc
|
|
_CCLINK.${_P}= ${CXX} ${_CCLINKFLAGS}
|
|
.endfor
|
|
|
|
# Language-independent definitions.
|
|
.for _P in ${PROGS} ${PROGS_CXX} # {
|
|
|
|
BINDIR.${_P}?= ${BINDIR}
|
|
PROGNAME.${_P}?= ${_P}
|
|
|
|
.if ${MKDEBUG:Uno} != "no" && !defined(NODEBUG) && !commands(${_P})
|
|
_PROGDEBUG.${_P}:= ${PROGNAME.${_P}}.debug
|
|
.endif
|
|
|
|
.if defined(PAXCTL_FLAGS)
|
|
PAXCTL_FLAGS.${_P}?= ${PAXCTL_FLAGS}
|
|
.endif
|
|
|
|
##### PROG specific flags.
|
|
|
|
_DPADD.${_P}= ${DPADD} ${DPADD.${_P}}
|
|
_LDADD.${_P}= ${LDADD} ${LDADD.${_P}}
|
|
_LDFLAGS.${_P}= ${LDFLAGS} ${LDFLAGS.${_P}}
|
|
_LDSTATIC.${_P}= ${LDSTATIC} ${LDSTATIC.${_P}}
|
|
|
|
##### Build and install rules
|
|
.if !empty(_APPEND_SRCS:M[Yy][Ee][Ss])
|
|
SRCS+= ${SRCS.${_P}} # For bsd.dep.mk
|
|
.endif
|
|
|
|
_YPSRCS.${_P}= ${SRCS.${_P}:M*.[ly]:C/\..$/.c/} ${YHEADER:D${SRCS.${_P}:M*.y:.y=.h}}
|
|
|
|
DPSRCS+= ${_YPSRCS.${_P}}
|
|
CLEANFILES+= ${_YPSRCS.${_P}}
|
|
|
|
.if !empty(SRCS.${_P}:N*.h:N*.sh:N*.fth)
|
|
OBJS.${_P}+= ${SRCS.${_P}:N*.h:N*.sh:N*.fth:R:S/$/.o/g}
|
|
LOBJS.${_P}+= ${LSRCS:.c=.ln} ${SRCS.${_P}:M*.c:.c=.ln}
|
|
.endif
|
|
|
|
.if defined(OBJS.${_P}) && !empty(OBJS.${_P}) # {
|
|
.NOPATH: ${OBJS.${_P}} ${_P} ${_YPSRCS.${_P}}
|
|
|
|
.if (defined(USE_COMBINE) && ${USE_COMBINE} != "no" && !commands(${_P}) \
|
|
&& (${_CCLINK.${_P}} == ${_CCLINK.CDEFAULT} \
|
|
|| ${_CCLINK.${_P}} == ${_CCLINK.CXXDEFAULT}) \
|
|
&& !defined(NOCOMBINE.${_P}) && !defined(NOCOMBINE))
|
|
.for f in ${SRCS.${_P}:N*.h:N*.sh:N*.fth:C/\.[yl]$/.c/g}
|
|
#_XFLAGS.$f := ${CPPFLAGS.$f:D1} ${CPUFLAGS.$f:D2} \
|
|
# ${COPTS.$f:D3} ${OBJCOPTS.$f:D4} ${CXXFLAGS.$f:D5}
|
|
.if (${CPPFLAGS.$f:D1} == "1" || ${CPUFLAGS.$f:D2} == "2" \
|
|
|| ${COPTS.$f:D3} == "3" || ${OBJCOPTS.$f:D4} == "4" \
|
|
|| ${CXXFLAGS.$f:D5} == "5") \
|
|
|| ("${f:M*.[cyl]}" == "" || commands(${f:R:S/$/.o/}))
|
|
XOBJS.${_P}+= ${f:R:S/$/.o/}
|
|
.else
|
|
XSRCS.${_P}+= ${f}
|
|
NODPSRCS+= ${f}
|
|
.endif
|
|
.endfor
|
|
|
|
${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${XOBJS.${_P}} ${SRCS.${_P}} \
|
|
${DPSRCS} ${LIBC} ${LIBCRTBEGIN} ${LIBCRTEND} ${_DPADD.${_P}}
|
|
${_MKTARGET_LINK}
|
|
.if defined(DESTDIR)
|
|
${_CCLINK.${_P}} -Wl,-nostdlib \
|
|
${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
|
|
-B${_GCC_CRTDIR}/ -B${DESTDIR}/usr/lib/ \
|
|
-MD --combine ${_CPPFLAGS.${_P}} ${_CFLAGS.${_P}} ${_COPTS.${_P}} \
|
|
${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
|
|
${_LDADD.${_P}} -L${_GCC_LIBGCCDIR} -L${DESTDIR}/usr/lib
|
|
.else
|
|
${_CCLINK.${_P}} ${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} ${_PROGLDOPTS} \
|
|
-MD --combine ${_CPPFLAGS.${_P}} ${_COPTS.${_P}}
|
|
${XSRCS.${_P}:@.SRC.@${.ALLSRC:M*.c:M*${.SRC.}}@:O:u} ${XOBJS.${_P}} \
|
|
${_LDADD.${_P}}
|
|
.endif # defined(DESTDIR)
|
|
.if defined(CTFMERGE)
|
|
${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
|
|
.endif
|
|
.if defined(PAXCTL_FLAGS.${_P})
|
|
${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
|
|
.endif
|
|
.if ${MKSTRIPIDENT} != "no"
|
|
${OBJCOPY} -R .ident ${.TARGET}
|
|
.endif
|
|
|
|
CLEANFILES+= ${_P}.d
|
|
.if exists(${_P}.d)
|
|
.include "${_P}.d" # include -MD depend for program.
|
|
.endif
|
|
.else # USE_COMBINE
|
|
|
|
${OBJS.${_P}} ${LOBJS.${_P}}: ${DPSRCS}
|
|
|
|
${_P}: .gdbinit ${LIBCRT0} ${LIBCRTI} ${OBJS.${_P}} ${LIBC} ${LIBCRTBEGIN} \
|
|
${LIBCRTEND} ${_DPADD.${_P}}
|
|
.if !commands(${_P})
|
|
${_MKTARGET_LINK}
|
|
${_CCLINK.${_P}} \
|
|
${_LDFLAGS.${_P}} ${_LDSTATIC.${_P}} -o ${.TARGET} \
|
|
${OBJS.${_P}} ${_PROGLDOPTS} ${_LDADD.${_P}}
|
|
.if defined(CTFMERGE)
|
|
${CTFMERGE} ${CTFMFLAGS} -o ${.TARGET} ${OBJS.${_P}}
|
|
.endif
|
|
.if defined(PAXCTL_FLAGS.${_P})
|
|
${PAXCTL} ${PAXCTL_FLAGS.${_P}} ${.TARGET}
|
|
.endif
|
|
.if ${MKSTRIPIDENT} != "no"
|
|
${OBJCOPY} -R .ident ${.TARGET}
|
|
.endif
|
|
.endif # !commands(${_P})
|
|
.endif # USE_COMBINE
|
|
|
|
${_P}.ro: ${OBJS.${_P}} ${_DPADD.${_P}}
|
|
${_MKTARGET_LINK}
|
|
${CC} ${LDFLAGS:N-pie} -nostdlib -r -Wl,-dc -o ${.TARGET} ${OBJS.${_P}}
|
|
|
|
.if defined(_PROGDEBUG.${_P})
|
|
${_PROGDEBUG.${_P}}: ${_P}
|
|
${_MKTARGET_CREATE}
|
|
( ${OBJCOPY} --only-keep-debug ${_P} ${_PROGDEBUG.${_P}} \
|
|
&& ${OBJCOPY} --strip-debug -p -R .gnu_debuglink \
|
|
--add-gnu-debuglink=${_PROGDEBUG.${_P}} ${_P} \
|
|
) || (rm -f ${_PROGDEBUG.${_P}}; false)
|
|
.endif
|
|
|
|
.endif # defined(OBJS.${_P}) && !empty(OBJS.${_P}) # }
|
|
|
|
.if !defined(MAN.${_P})
|
|
MAN.${_P}= ${_P}.1
|
|
.endif # !defined(MAN.${_P})
|
|
.if !empty(_APPEND_MANS:M[Yy][Ee][Ss])
|
|
MAN+= ${MAN.${_P}}
|
|
.endif
|
|
|
|
realall: ${_P} ${_PROGDEBUG.${_P}}
|
|
|
|
CLEANFILES+= ${_P} ${_PROGDEBUG.${_P}}
|
|
|
|
.if defined(OBJS.${_P}) && !empty(OBJS.${_P})
|
|
CLEANFILES+= ${OBJS.${_P}} ${LOBJS.${_P}}
|
|
.endif
|
|
|
|
_PROG_INSTALL+= proginstall-${_P}
|
|
|
|
.if !target(proginstall-${_P}) # {
|
|
proginstall-${_P}:: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
|
|
${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
|
|
.PRECIOUS: ${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}} \
|
|
${_PROGDEBUG.${_P}:D${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}}
|
|
|
|
.if ${MKUPDATE} == "no"
|
|
.if defined(_RUMPINSTALL.${_P})
|
|
${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __progrumpinstall
|
|
.else
|
|
${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! ${_P} __proginstall
|
|
.endif
|
|
.if !defined(BUILD) && !make(all) && !make(${_P})
|
|
${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}! .MADE
|
|
.endif
|
|
.if defined(_PROGDEBUG.${_P})
|
|
${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! ${_PROGDEBUG.${_P}} __progdebuginstall
|
|
.if !defined(BUILD) && !make(all) && !make(${_P})
|
|
${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}! .MADE
|
|
.endif
|
|
.endif # define(_PROGDEBUG.${_P})
|
|
.else # MKUPDATE != no
|
|
.if defined(_RUMPINSTALL.${_P})
|
|
${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __progrumpinstall
|
|
.else
|
|
${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: ${_P} __proginstall
|
|
.endif
|
|
.if !defined(BUILD) && !make(all) && !make(${_P})
|
|
${DESTDIR}${BINDIR.${_P}}/${PROGNAME.${_P}}: .MADE
|
|
.endif
|
|
.if defined(_PROGDEBUG.${_P})
|
|
${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: ${_PROGDEBUG.${_P}} __progdebuginstall
|
|
.if !defined(BUILD) && !make(all) && !make(${_P})
|
|
${DESTDIR}${DEBUGDIR}${BINDIR.${_P}}/${_PROGDEBUG.${_P}}: .MADE
|
|
.endif
|
|
.endif # defined(_PROGDEBUG.${_P})
|
|
.endif # MKUPDATE != no
|
|
|
|
.endif # !target(proginstall-${_P}) # }
|
|
|
|
lint: lint-${_P}
|
|
lint-${_P}: ${LOBJS.${_P}}
|
|
.if defined(LOBJS.${_P}) && !empty(LOBJS.${_P})
|
|
${LINT} ${LINTFLAGS} ${_LDFLAGS.${_P}:C/-L[ ]*/-L/Wg:M-L*} ${LOBJS.${_P}} ${_LDADD.${_P}}
|
|
.endif
|
|
|
|
.endfor # _P in ${PROGS} ${PROGS_CXX} # }
|
|
|
|
.if defined(OBJS) && !empty(OBJS) && \
|
|
(empty(PROGS) && empty(PROGS_CXX))
|
|
CLEANFILES+= ${OBJS} ${LOBJS}
|
|
.endif
|
|
|
|
.if !target(proginstall)
|
|
proginstall:: ${_PROG_INSTALL}
|
|
.endif
|
|
.PHONY: proginstall
|
|
|
|
|
|
|
|
realall: ${SCRIPTS}
|
|
.if defined(SCRIPTS) && !target(scriptsinstall) # {
|
|
SCRIPTSDIR?=${BINDIR}
|
|
SCRIPTSOWN?=${BINOWN}
|
|
SCRIPTSGRP?=${BINGRP}
|
|
SCRIPTSMODE?=${BINMODE}
|
|
|
|
scriptsinstall:: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
|
|
.PRECIOUS: ${SCRIPTS:@S@${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}@}
|
|
|
|
__scriptinstall: .USE
|
|
${_MKTARGET_INSTALL}
|
|
${INSTALL_FILE} \
|
|
-o ${SCRIPTSOWN_${.ALLSRC:T}:U${SCRIPTSOWN}} \
|
|
-g ${SCRIPTSGRP_${.ALLSRC:T}:U${SCRIPTSGRP}} \
|
|
-m ${SCRIPTSMODE_${.ALLSRC:T}:U${SCRIPTSMODE}} \
|
|
${.ALLSRC} ${.TARGET}
|
|
|
|
.for S in ${SCRIPTS:O:u}
|
|
.if ${MKUPDATE} == "no"
|
|
${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! ${S} __scriptinstall
|
|
.if !defined(BUILD) && !make(all) && !make(${S})
|
|
${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}! .MADE
|
|
.endif
|
|
.else
|
|
${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: ${S} __scriptinstall
|
|
.if !defined(BUILD) && !make(all) && !make(${S})
|
|
${DESTDIR}${SCRIPTSDIR_${S}:U${SCRIPTSDIR}}/${SCRIPTSNAME_${S}:U${SCRIPTSNAME:U${S:T:R}}}: .MADE
|
|
.endif
|
|
.endif
|
|
.endfor
|
|
.endif # }
|
|
|
|
.if !target(scriptsinstall)
|
|
scriptsinstall::
|
|
.endif
|
|
.PHONY: scriptsinstall
|
|
|
|
##### Pull in related .mk logic
|
|
LINKSOWN?= ${BINOWN}
|
|
LINKSGRP?= ${BINGRP}
|
|
LINKSMODE?= ${BINMODE}
|
|
.include <bsd.man.mk>
|
|
.include <bsd.nls.mk>
|
|
.include <bsd.files.mk>
|
|
.include <bsd.inc.mk>
|
|
.include <bsd.links.mk>
|
|
.include <bsd.sys.mk>
|
|
.include <bsd.dep.mk>
|
|
.include <bsd.clang-analyze.mk>
|
|
.include <bsd.clean.mk>
|
|
|
|
${TARGETS}: # ensure existence
|
|
|
|
.endif # HOSTPROG
|