Update to bmake-201802222
Fixes segfault in Var_Set if val is NULL Don't treat .info as warning with -W
This commit is contained in:
commit
50d2e745fa
@ -1,3 +1,44 @@
|
|||||||
|
2018-02-22 Simon J. Gerraty <sjg@bad.crufty.net>
|
||||||
|
|
||||||
|
* VERSION: 20180222
|
||||||
|
Merge with NetBSD make, pick up
|
||||||
|
o parse.c: avoid calling sysconf for every call to loadfile
|
||||||
|
|
||||||
|
2018-02-18 Simon J. Gerraty <sjg@bad.crufty.net>
|
||||||
|
|
||||||
|
* VERSION: 20180218
|
||||||
|
Merge with NetBSD make, pick up
|
||||||
|
o var.c: Var_Set handle NULL value anytime.
|
||||||
|
|
||||||
|
2018-02-12 Simon J. Gerraty <sjg@bad.crufty.net>
|
||||||
|
|
||||||
|
* VERSION: 20180212
|
||||||
|
Merge with NetBSD make, pick up
|
||||||
|
o parse.c: do not treat .info as warning with -W
|
||||||
|
|
||||||
|
2017-12-07 Simon J. Gerraty <sjg@bad.crufty.net>
|
||||||
|
|
||||||
|
* VERSION: 20171207
|
||||||
|
Merge with NetBSD make, pick up
|
||||||
|
o var.c: Var_Append use Var_Set if var not previously set
|
||||||
|
so that VAR_CMD is handled correctly.
|
||||||
|
Add a suitable unit-test.
|
||||||
|
|
||||||
|
2017-11-26 Simon J. Gerraty <sjg@bad.crufty.net>
|
||||||
|
|
||||||
|
* VERSION (_MAKE_VERSION): 20171126
|
||||||
|
|
||||||
|
* aclocal.m4: use AC_LINK_IFELSE for AC_C___ATTRIBUTE__
|
||||||
|
since AC_TRY_COMPILE puts input inside main()
|
||||||
|
which upsets modern compilers.
|
||||||
|
|
||||||
|
2017-11-18 Simon J. Gerraty <sjg@bad.crufty.net>
|
||||||
|
|
||||||
|
* VERSION: 20171118
|
||||||
|
Merge with NetBSD make, pick up
|
||||||
|
o var.c: do not append to variable set on command line
|
||||||
|
add unit-test to catch this.
|
||||||
|
|
||||||
2017-10-28 Simon J. Gerraty <sjg@bad.crufty.net>
|
2017-10-28 Simon J. Gerraty <sjg@bad.crufty.net>
|
||||||
|
|
||||||
* VERSION: 20171028
|
* VERSION: 20171028
|
||||||
|
@ -15,7 +15,7 @@ LDFLAGS= @LDFLAGS@
|
|||||||
LIBOBJS= @LIBOBJS@
|
LIBOBJS= @LIBOBJS@
|
||||||
LDADD= @LIBS@
|
LDADD= @LIBS@
|
||||||
USE_META= @use_meta@
|
USE_META= @use_meta@
|
||||||
FILEMON_H= @filemon_h@
|
FILEMON_H?= @filemon_h@
|
||||||
BMAKE_PATH_MAX?= @bmake_path_max@
|
BMAKE_PATH_MAX?= @bmake_path_max@
|
||||||
# used if MAXPATHLEN not defined
|
# used if MAXPATHLEN not defined
|
||||||
CPPFLAGS+= -DBMAKE_PATH_MAX=${BMAKE_PATH_MAX}
|
CPPFLAGS+= -DBMAKE_PATH_MAX=${BMAKE_PATH_MAX}
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
# keep this compatible with sh and make
|
# keep this compatible with sh and make
|
||||||
_MAKE_VERSION=20171028
|
_MAKE_VERSION=20180222
|
||||||
|
13
contrib/bmake/aclocal.m4
vendored
13
contrib/bmake/aclocal.m4
vendored
@ -1,5 +1,5 @@
|
|||||||
dnl RCSid:
|
dnl RCSid:
|
||||||
dnl $Id: aclocal.m4,v 1.5 2003/03/06 21:21:30 sjg Exp $
|
dnl $Id: aclocal.m4,v 1.6 2017/11/26 22:39:20 sjg Exp $
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
@ -55,10 +55,9 @@ dnl
|
|||||||
AC_DEFUN(AC_C___ATTRIBUTE__, [
|
AC_DEFUN(AC_C___ATTRIBUTE__, [
|
||||||
AC_MSG_CHECKING(for __attribute__)
|
AC_MSG_CHECKING(for __attribute__)
|
||||||
AC_CACHE_VAL(ac_cv___attribute__, [
|
AC_CACHE_VAL(ac_cv___attribute__, [
|
||||||
AC_TRY_COMPILE([
|
AC_LINK_IFELSE([
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
],
|
|
||||||
[
|
|
||||||
static void foo(void) __attribute__ ((noreturn));
|
static void foo(void) __attribute__ ((noreturn));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -66,6 +65,12 @@ foo(void)
|
|||||||
{
|
{
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
foo();
|
||||||
|
}
|
||||||
],
|
],
|
||||||
ac_cv___attribute__=yes,
|
ac_cv___attribute__=yes,
|
||||||
ac_cv___attribute__=no)])
|
ac_cv___attribute__=no)])
|
||||||
|
File diff suppressed because it is too large
Load Diff
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 78 KiB |
34
contrib/bmake/configure
vendored
34
contrib/bmake/configure
vendored
@ -1,6 +1,6 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
# Guess values for system-dependent variables and create Makefiles.
|
# Guess values for system-dependent variables and create Makefiles.
|
||||||
# Generated by GNU Autoconf 2.64 for bmake 20170812.
|
# Generated by GNU Autoconf 2.64 for bmake 20171126.
|
||||||
#
|
#
|
||||||
# Report bugs to <sjg@NetBSD.org>.
|
# Report bugs to <sjg@NetBSD.org>.
|
||||||
#
|
#
|
||||||
@ -549,8 +549,8 @@ MAKEFLAGS=
|
|||||||
# Identity of this package.
|
# Identity of this package.
|
||||||
PACKAGE_NAME='bmake'
|
PACKAGE_NAME='bmake'
|
||||||
PACKAGE_TARNAME='bmake'
|
PACKAGE_TARNAME='bmake'
|
||||||
PACKAGE_VERSION='20170812'
|
PACKAGE_VERSION='20171126'
|
||||||
PACKAGE_STRING='bmake 20170812'
|
PACKAGE_STRING='bmake 20171126'
|
||||||
PACKAGE_BUGREPORT='sjg@NetBSD.org'
|
PACKAGE_BUGREPORT='sjg@NetBSD.org'
|
||||||
PACKAGE_URL=''
|
PACKAGE_URL=''
|
||||||
|
|
||||||
@ -1222,7 +1222,7 @@ if test "$ac_init_help" = "long"; then
|
|||||||
# Omit some internal or obsolete options to make the list less imposing.
|
# Omit some internal or obsolete options to make the list less imposing.
|
||||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||||
cat <<_ACEOF
|
cat <<_ACEOF
|
||||||
\`configure' configures bmake 20170812 to adapt to many kinds of systems.
|
\`configure' configures bmake 20171126 to adapt to many kinds of systems.
|
||||||
|
|
||||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||||
|
|
||||||
@ -1283,7 +1283,7 @@ fi
|
|||||||
|
|
||||||
if test -n "$ac_init_help"; then
|
if test -n "$ac_init_help"; then
|
||||||
case $ac_init_help in
|
case $ac_init_help in
|
||||||
short | recursive ) echo "Configuration of bmake 20170812:";;
|
short | recursive ) echo "Configuration of bmake 20171126:";;
|
||||||
esac
|
esac
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
|
|
||||||
@ -1388,7 +1388,7 @@ fi
|
|||||||
test -n "$ac_init_help" && exit $ac_status
|
test -n "$ac_init_help" && exit $ac_status
|
||||||
if $ac_init_version; then
|
if $ac_init_version; then
|
||||||
cat <<\_ACEOF
|
cat <<\_ACEOF
|
||||||
bmake configure 20170812
|
bmake configure 20171126
|
||||||
generated by GNU Autoconf 2.64
|
generated by GNU Autoconf 2.64
|
||||||
|
|
||||||
Copyright (C) 2009 Free Software Foundation, Inc.
|
Copyright (C) 2009 Free Software Foundation, Inc.
|
||||||
@ -1961,7 +1961,7 @@ cat >config.log <<_ACEOF
|
|||||||
This file contains any messages produced by compilers while
|
This file contains any messages produced by compilers while
|
||||||
running configure, to aid debugging if configure makes a mistake.
|
running configure, to aid debugging if configure makes a mistake.
|
||||||
|
|
||||||
It was created by bmake $as_me 20170812, which was
|
It was created by bmake $as_me 20171126, which was
|
||||||
generated by GNU Autoconf 2.64. Invocation command line was
|
generated by GNU Autoconf 2.64. Invocation command line was
|
||||||
|
|
||||||
$ $0 $@
|
$ $0 $@
|
||||||
@ -4722,10 +4722,6 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
|
|
||||||
static void foo(void) __attribute__ ((noreturn));
|
static void foo(void) __attribute__ ((noreturn));
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -4734,16 +4730,20 @@ foo(void)
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
int
|
||||||
return 0;
|
main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
foo();
|
||||||
}
|
}
|
||||||
|
|
||||||
_ACEOF
|
_ACEOF
|
||||||
if ac_fn_c_try_compile "$LINENO"; then :
|
if ac_fn_c_try_link "$LINENO"; then :
|
||||||
ac_cv___attribute__=yes
|
ac_cv___attribute__=yes
|
||||||
else
|
else
|
||||||
ac_cv___attribute__=no
|
ac_cv___attribute__=no
|
||||||
fi
|
fi
|
||||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext conftest.$ac_ext
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$ac_cv___attribute__" = "yes"; then
|
if test "$ac_cv___attribute__" = "yes"; then
|
||||||
@ -6517,7 +6517,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||||||
# report actual input values of CONFIG_FILES etc. instead of their
|
# report actual input values of CONFIG_FILES etc. instead of their
|
||||||
# values after options handling.
|
# values after options handling.
|
||||||
ac_log="
|
ac_log="
|
||||||
This file was extended by bmake $as_me 20170812, which was
|
This file was extended by bmake $as_me 20171126, which was
|
||||||
generated by GNU Autoconf 2.64. Invocation command line was
|
generated by GNU Autoconf 2.64. Invocation command line was
|
||||||
|
|
||||||
CONFIG_FILES = $CONFIG_FILES
|
CONFIG_FILES = $CONFIG_FILES
|
||||||
@ -6577,7 +6577,7 @@ Report bugs to <sjg@NetBSD.org>."
|
|||||||
_ACEOF
|
_ACEOF
|
||||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||||
ac_cs_version="\\
|
ac_cs_version="\\
|
||||||
bmake config.status 20170812
|
bmake config.status 20171126
|
||||||
configured by $0, generated by GNU Autoconf 2.64,
|
configured by $0, generated by GNU Autoconf 2.64,
|
||||||
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
|
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
dnl
|
dnl
|
||||||
dnl RCSid:
|
dnl RCSid:
|
||||||
dnl $Id: configure.in,v 1.58 2017/08/13 00:56:10 sjg Exp $
|
dnl $Id: configure.in,v 1.59 2017/11/26 22:39:20 sjg Exp $
|
||||||
dnl
|
dnl
|
||||||
dnl Process this file with autoconf to produce a configure script
|
dnl Process this file with autoconf to produce a configure script
|
||||||
dnl
|
dnl
|
||||||
AC_PREREQ(2.50)
|
AC_PREREQ(2.50)
|
||||||
AC_INIT([bmake], [20170812], [sjg@NetBSD.org])
|
AC_INIT([bmake], [20171126], [sjg@NetBSD.org])
|
||||||
AC_CONFIG_HEADERS(config.h)
|
AC_CONFIG_HEADERS(config.h)
|
||||||
|
|
||||||
dnl make srcdir absolute
|
dnl make srcdir absolute
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: job.c,v 1.191 2017/07/20 19:29:54 sjg Exp $ */
|
/* $NetBSD: job.c,v 1.192 2018/02/08 09:05:21 dholland Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
|
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
|
||||||
@ -70,14 +70,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MAKE_NATIVE
|
#ifndef MAKE_NATIVE
|
||||||
static char rcsid[] = "$NetBSD: job.c,v 1.191 2017/07/20 19:29:54 sjg Exp $";
|
static char rcsid[] = "$NetBSD: job.c,v 1.192 2018/02/08 09:05:21 dholland Exp $";
|
||||||
#else
|
#else
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
#if 0
|
#if 0
|
||||||
static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94";
|
static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94";
|
||||||
#else
|
#else
|
||||||
__RCSID("$NetBSD: job.c,v 1.191 2017/07/20 19:29:54 sjg Exp $");
|
__RCSID("$NetBSD: job.c,v 1.192 2018/02/08 09:05:21 dholland Exp $");
|
||||||
#endif
|
#endif
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
#endif
|
#endif
|
||||||
@ -102,7 +102,7 @@ __RCSID("$NetBSD: job.c,v 1.191 2017/07/20 19:29:54 sjg Exp $");
|
|||||||
* a time given by the SEL_* constants, below,
|
* a time given by the SEL_* constants, below,
|
||||||
* or until output is ready.
|
* or until output is ready.
|
||||||
*
|
*
|
||||||
* Job_Init Called to intialize this module. in addition,
|
* Job_Init Called to initialize this module. in addition,
|
||||||
* any commands attached to the .BEGIN target
|
* any commands attached to the .BEGIN target
|
||||||
* are executed before this function returns.
|
* are executed before this function returns.
|
||||||
* Hence, the makefile must have been parsed
|
* Hence, the makefile must have been parsed
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: make.h,v 1.103 2017/07/20 19:29:54 sjg Exp $ */
|
/* $NetBSD: make.h,v 1.104 2018/02/12 21:38:09 sjg Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988, 1989, 1990, 1993
|
* Copyright (c) 1988, 1989, 1990, 1993
|
||||||
@ -346,6 +346,7 @@ typedef struct GNode {
|
|||||||
* once the makefile has been parsed. PARSE_WARNING means it can. Passed
|
* once the makefile has been parsed. PARSE_WARNING means it can. Passed
|
||||||
* as the first argument to Parse_Error.
|
* as the first argument to Parse_Error.
|
||||||
*/
|
*/
|
||||||
|
#define PARSE_INFO 3
|
||||||
#define PARSE_WARNING 2
|
#define PARSE_WARNING 2
|
||||||
#define PARSE_FATAL 1
|
#define PARSE_FATAL 1
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: meta.c,v 1.69 2017/08/10 21:07:48 sjg Exp $ */
|
/* $NetBSD: meta.c,v 1.70 2018/02/13 19:37:30 sjg Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Implement 'meta' mode.
|
* Implement 'meta' mode.
|
||||||
@ -790,7 +790,9 @@ meta_cmd_finish(void *pbmp)
|
|||||||
{
|
{
|
||||||
int error = 0;
|
int error = 0;
|
||||||
BuildMon *pbm = pbmp;
|
BuildMon *pbm = pbmp;
|
||||||
|
#ifdef USE_FILEMON
|
||||||
int x;
|
int x;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!pbm)
|
if (!pbm)
|
||||||
pbm = &Mybm;
|
pbm = &Mybm;
|
||||||
|
@ -1,3 +1,21 @@
|
|||||||
|
2018-01-18 Simon J Gerraty <sjg@beast.crufty.net>
|
||||||
|
|
||||||
|
* install-mk (MK_VERSION): 20180118
|
||||||
|
|
||||||
|
* ldorder.mk: let make compute correct link order
|
||||||
|
|
||||||
|
2017-12-12 Simon J Gerraty <sjg@beast.crufty.net>
|
||||||
|
|
||||||
|
* install-mk (MK_VERSION): 20171212
|
||||||
|
|
||||||
|
* gendirdeps.mk: guard against bogus entries in GENDIRDEPS_FILTER
|
||||||
|
|
||||||
|
2017-11-14 Simon J. Gerraty <sjg@bad.crufty.net>
|
||||||
|
|
||||||
|
* install-mk (MK_VERSION): 20171111
|
||||||
|
|
||||||
|
* lib.mk: ensure META_NOECHO is set
|
||||||
|
|
||||||
2017-10-25 Simon J. Gerraty <sjg@bad.crufty.net>
|
2017-10-25 Simon J. Gerraty <sjg@bad.crufty.net>
|
||||||
|
|
||||||
* Allow for host32 on rare occasions.
|
* Allow for host32 on rare occasions.
|
||||||
|
@ -17,6 +17,7 @@ inc.mk
|
|||||||
init.mk
|
init.mk
|
||||||
install-mk
|
install-mk
|
||||||
java.mk
|
java.mk
|
||||||
|
ldorder.mk
|
||||||
lib.mk
|
lib.mk
|
||||||
libnames.mk
|
libnames.mk
|
||||||
libs.mk
|
libs.mk
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: auto.obj.mk,v 1.14 2017/04/18 23:53:18 sjg Exp $
|
# $Id: auto.obj.mk,v 1.15 2017/11/04 21:05:04 sjg Exp $
|
||||||
#
|
#
|
||||||
# @(#) Copyright (c) 2004, Simon J. Gerraty
|
# @(#) Copyright (c) 2004, Simon J. Gerraty
|
||||||
#
|
#
|
||||||
@ -60,11 +60,17 @@ __objdir_made != echo ${__objdir}/; umask ${OBJDIR_UMASK:U002}; \
|
|||||||
.endif
|
.endif
|
||||||
# This causes make to use the specified directory as .OBJDIR
|
# This causes make to use the specified directory as .OBJDIR
|
||||||
.OBJDIR: ${__objdir}
|
.OBJDIR: ${__objdir}
|
||||||
.if ${.OBJDIR:tA} != ${__objdir:tA} && ${__objdir_made:Uno:M${__objdir}/*} != ""
|
.if ${.OBJDIR:tA} != ${__objdir:tA}
|
||||||
|
# we did not get what we want - do we care?
|
||||||
|
.if ${__objdir_made:Uno:M${__objdir}/*} != ""
|
||||||
# watch out for __objdir being relative path
|
# watch out for __objdir being relative path
|
||||||
.if !(${__objdir:M/*} == "" && ${.OBJDIR:tA} == ${${.CURDIR}/${__objdir}:L:tA})
|
.if !(${__objdir:M/*} == "" && ${.OBJDIR:tA} == ${${.CURDIR}/${__objdir}:L:tA})
|
||||||
.error could not use ${__objdir}: .OBJDIR=${.OBJDIR}
|
.error could not use ${__objdir}: .OBJDIR=${.OBJDIR}
|
||||||
.endif
|
.endif
|
||||||
.endif
|
.endif
|
||||||
|
# apparently we can live with it
|
||||||
|
# make sure we know what we have
|
||||||
|
.OBJDIR: ${.CURDIR}
|
||||||
|
.endif
|
||||||
.endif
|
.endif
|
||||||
.endif
|
.endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: dpadd.mk,v 1.24 2017/10/25 23:44:20 sjg Exp $
|
# $Id: dpadd.mk,v 1.26 2018/02/12 21:54:26 sjg Exp $
|
||||||
#
|
#
|
||||||
# @(#) Copyright (c) 2004, Simon J. Gerraty
|
# @(#) Copyright (c) 2004, Simon J. Gerraty
|
||||||
#
|
#
|
||||||
@ -60,6 +60,7 @@ LDADD += ${LDADD_${__lib:T:R}:U${__lib:T:R:S/lib/-l/:C/\.so.*//}}
|
|||||||
# DPADD can contain things other than libs
|
# DPADD can contain things other than libs
|
||||||
__dpadd_libs := ${DPADD:M*/lib*}
|
__dpadd_libs := ${DPADD:M*/lib*}
|
||||||
|
|
||||||
|
.if defined(PROG) && ${MK_PROG_LDORDER_MK:Uno} != "no"
|
||||||
# some libs have dependencies...
|
# some libs have dependencies...
|
||||||
# DPLIBS_* allows bsd.libnames.mk to flag libs which must be included
|
# DPLIBS_* allows bsd.libnames.mk to flag libs which must be included
|
||||||
# in DPADD for a given library.
|
# in DPADD for a given library.
|
||||||
@ -73,6 +74,7 @@ __ldadd_all_xtras+= ${LDADD_${__lib}:U${__lib:T:R:S/lib/-l/:C/\.so.*//}}
|
|||||||
DPADD+= ${__lib}
|
DPADD+= ${__lib}
|
||||||
.endif
|
.endif
|
||||||
.endfor
|
.endfor
|
||||||
|
.endif
|
||||||
# Last of all... for libc and libgcc
|
# Last of all... for libc and libgcc
|
||||||
DPADD+= ${DPADD_LAST}
|
DPADD+= ${DPADD_LAST}
|
||||||
|
|
||||||
@ -125,9 +127,11 @@ SRC_LIBS+= ${_OBJDIR}/lib${LIB}.a
|
|||||||
#
|
#
|
||||||
|
|
||||||
SRC_LIBS?=
|
SRC_LIBS?=
|
||||||
__dpadd_libs += ${SRC_LIBS}
|
# magic_libs includes those we want to link with
|
||||||
DPMAGIC_LIBS += ${__dpadd_libs} \
|
# as well as those we might look at
|
||||||
${__dpadd_libs:@d@${DPMAGIC_LIBS_${d:T:R}}@}
|
__dpadd_magic_libs += ${__dpadd_libs} ${SRC_LIBS}
|
||||||
|
DPMAGIC_LIBS += ${__dpadd_magic_libs} \
|
||||||
|
${__dpadd_magic_libs:@d@${DPMAGIC_LIBS_${d:T:R}}@}
|
||||||
|
|
||||||
# we skip this for staged libs
|
# we skip this for staged libs
|
||||||
.for __lib in ${DPMAGIC_LIBS:O:u:N${STAGE_OBJTOP:Unot}*/lib/*}
|
.for __lib in ${DPMAGIC_LIBS:O:u:N${STAGE_OBJTOP:Unot}*/lib/*}
|
||||||
@ -189,11 +193,11 @@ LDADD := ${LDADD:S,^${__ldadd}$,${__ldadd}_p,g}
|
|||||||
#
|
#
|
||||||
# We take care of duplicate suppression later.
|
# We take care of duplicate suppression later.
|
||||||
# don't apply :T:R too early
|
# don't apply :T:R too early
|
||||||
__dpadd_incs += ${__dpadd_libs:u:@x@${INCLUDES_${x:T:R}}@}
|
__dpadd_incs += ${__dpadd_magic_libs:u:@x@${INCLUDES_${x:T:R}}@}
|
||||||
__dpadd_incs += ${__dpadd_libs:O:u:@s@${SRC_LIBS_${s:T:R}:U}@:@x@${INCLUDES_${x:T:R}}@}
|
__dpadd_incs += ${__dpadd_magic_libs:O:u:@s@${SRC_LIBS_${s:T:R}:U}@:@x@${INCLUDES_${x:T:R}}@}
|
||||||
|
|
||||||
__dpadd_last_incs += ${__dpadd_libs:u:@x@${INCLUDES_LAST_${x:T:R}}@}
|
__dpadd_last_incs += ${__dpadd_magic_libs:u:@x@${INCLUDES_LAST_${x:T:R}}@}
|
||||||
__dpadd_last_incs += ${__dpadd_libs:O:u:@s@${SRC_LIBS_${s:T:R}:U}@:@x@${INCLUDES_LAST_${x:T:R}}@}
|
__dpadd_last_incs += ${__dpadd_magic_libs:O:u:@s@${SRC_LIBS_${s:T:R}:U}@:@x@${INCLUDES_LAST_${x:T:R}}@}
|
||||||
|
|
||||||
.if defined(HOSTPROG) || ${MACHINE:Nhost*} == ""
|
.if defined(HOSTPROG) || ${MACHINE:Nhost*} == ""
|
||||||
# we want any -I/usr/* last
|
# we want any -I/usr/* last
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: final.mk,v 1.8 2017/05/07 20:30:08 sjg Exp $
|
# $Id: final.mk,v 1.9 2018/01/24 22:57:11 sjg Exp $
|
||||||
|
|
||||||
.if !target(__${.PARSEFILE}__)
|
.if !target(__${.PARSEFILE}__)
|
||||||
__${.PARSEFILE}__:
|
__${.PARSEFILE}__:
|
||||||
@ -6,14 +6,14 @@ __${.PARSEFILE}__:
|
|||||||
# provide a hook for folk who want to do scary stuff
|
# provide a hook for folk who want to do scary stuff
|
||||||
.-include <${.CURDIR:H}/Makefile-final.inc>
|
.-include <${.CURDIR:H}/Makefile-final.inc>
|
||||||
|
|
||||||
|
.-include <local.final.mk>
|
||||||
|
|
||||||
.if ${MK_STAGING} == "yes"
|
.if ${MK_STAGING} == "yes"
|
||||||
.include <meta.stage.mk>
|
.include <meta.stage.mk>
|
||||||
.elif !empty(STAGE)
|
.elif !empty(STAGE)
|
||||||
.-include <stage.mk>
|
.-include <stage.mk>
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.-include <local.final.mk>
|
|
||||||
|
|
||||||
.if empty(_SKIP_BUILD)
|
.if empty(_SKIP_BUILD)
|
||||||
install: realinstall
|
install: realinstall
|
||||||
.endif
|
.endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: gendirdeps.mk,v 1.34 2017/10/26 00:46:26 sjg Exp $
|
# $Id: gendirdeps.mk,v 1.37 2018/01/31 19:06:46 sjg Exp $
|
||||||
|
|
||||||
# Copyright (c) 2010-2013, Juniper Networks, Inc.
|
# Copyright (c) 2010-2013, Juniper Networks, Inc.
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
@ -255,7 +255,9 @@ DIRDEPS += \
|
|||||||
${dirdep_list:M${RELDIR}/*:@d@${.MAKE.MAKEFILE_PREFERENCE:@m@${exists(${SRCTOP}/$d/$m):?$d:${exists(${SRCTOP}/${d:R}/$m):?$d:}}@}@} \
|
${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:}@}@}
|
${qualdir_list:M${RELDIR}/*:@d@${.MAKE.MAKEFILE_PREFERENCE:@m@${exists(${SRCTOP}/${d:R}/$m):?$d:}@}@}
|
||||||
|
|
||||||
DIRDEPS := ${DIRDEPS:${GENDIRDEPS_FILTER:UNno:ts:}:C,//+,/,g:O:u}
|
# what modifiers do we allow in GENDIRDEPS_FILTER
|
||||||
|
GENDIRDEPS_FILTER_MASK += @CMNS
|
||||||
|
DIRDEPS := ${DIRDEPS:${GENDIRDEPS_FILTER:UNno:M[${GENDIRDEPS_FILTER_MASK:O:u:ts}]*:ts:}:C,//+,/,g:O:u}
|
||||||
|
|
||||||
.if ${DEBUG_GENDIRDEPS:Uno:@x@${RELDIR:M$x}@} != ""
|
.if ${DEBUG_GENDIRDEPS:Uno:@x@${RELDIR:M$x}@} != ""
|
||||||
.info ${RELDIR}: M2D_OBJROOTS=${M2D_OBJROOTS}
|
.info ${RELDIR}: M2D_OBJROOTS=${M2D_OBJROOTS}
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
# Simon J. Gerraty <sjg@crufty.net>
|
# Simon J. Gerraty <sjg@crufty.net>
|
||||||
|
|
||||||
# RCSid:
|
# RCSid:
|
||||||
# $Id: install-mk,v 1.150 2017/10/19 03:50:51 sjg Exp $
|
# $Id: install-mk,v 1.153 2018/01/24 22:57:11 sjg Exp $
|
||||||
#
|
#
|
||||||
# @(#) Copyright (c) 1994 Simon J. Gerraty
|
# @(#) Copyright (c) 1994 Simon J. Gerraty
|
||||||
#
|
#
|
||||||
@ -70,7 +70,7 @@
|
|||||||
# sjg@crufty.net
|
# sjg@crufty.net
|
||||||
#
|
#
|
||||||
|
|
||||||
MK_VERSION=20171018
|
MK_VERSION=20180118
|
||||||
OWNER=
|
OWNER=
|
||||||
GROUP=
|
GROUP=
|
||||||
MODE=444
|
MODE=444
|
||||||
|
127
contrib/bmake/mk/ldorder.mk
Normal file
127
contrib/bmake/mk/ldorder.mk
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
# $Id: ldorder.mk,v 1.18 2018/02/11 18:27:59 sjg Exp $
|
||||||
|
#
|
||||||
|
# @(#) Copyright (c) 2015, Simon J. Gerraty
|
||||||
|
#
|
||||||
|
# This file is provided in the hope that it will
|
||||||
|
# be of use. There is absolutely NO WARRANTY.
|
||||||
|
# Permission to copy, redistribute or otherwise
|
||||||
|
# use this file is hereby granted provided that
|
||||||
|
# the above copyright notice and this notice are
|
||||||
|
# left intact.
|
||||||
|
#
|
||||||
|
# Please send copies of changes and bug-fixes to:
|
||||||
|
# sjg@crufty.net
|
||||||
|
#
|
||||||
|
|
||||||
|
# Try to compute optimal link order.
|
||||||
|
# When using only shared libs link order does not much matter,
|
||||||
|
# but archive libs are a different matter.
|
||||||
|
|
||||||
|
# We can construct a graph of .ldorder-lib${LIB*} dependencies
|
||||||
|
# and associate each with _LDORDER_USE to output the relevant
|
||||||
|
# ld flags.
|
||||||
|
# Due to the nature of make, the result will be in the reverse order
|
||||||
|
# that we want to feed to ld.
|
||||||
|
# So we need to reverse it before use.
|
||||||
|
|
||||||
|
.if !target(_LDORDER_USE)
|
||||||
|
# does caller want to use ldorder?
|
||||||
|
# yes for prog, normally no for lib
|
||||||
|
_ldorder_use := ${.ALLTARGETS:Mldorder}
|
||||||
|
|
||||||
|
.-include <local.ldorder.mk>
|
||||||
|
|
||||||
|
# convert /path/to/libfoo.a into _{LIBFOO}
|
||||||
|
LDORDER_INC_FILTER += S,+,PLUS,g S,.so$$,,g
|
||||||
|
LDORDER_LIBS_FILTER += O:u
|
||||||
|
LDORDER_INC ?= ldorder.inc
|
||||||
|
REFERENCE_FILE ?= :
|
||||||
|
|
||||||
|
_LDORDER_USE: .ldorder-rm .USE .NOTMAIN
|
||||||
|
@echo depends: ${.ALLSRC:M.ldorder-lib*} > /dev/null
|
||||||
|
@echo ${LDADD_${.TARGET:T:S,.ldorder-,,}:U${.TARGET:T:S/.ldorder-lib/-l/}} >> .ldorder
|
||||||
|
@${META_COOKIE_TOUCH}
|
||||||
|
|
||||||
|
# we need to truncate our working file
|
||||||
|
.ldorder-rm: .NOTMAIN
|
||||||
|
@rm -f .ldorder ldorder-*
|
||||||
|
@${.ALLSRC:O:u:@f@${REFERENCE_FILE} < $f;@}
|
||||||
|
@${META_COOKIE_TOUCH}
|
||||||
|
|
||||||
|
# make sure this exists
|
||||||
|
.ldorder: .NOTMAIN
|
||||||
|
|
||||||
|
# and finally we need to reverse the order of content
|
||||||
|
ldorder: .ldorder .NOTMAIN
|
||||||
|
@{ test ! -s .ldorder || cat -n .ldorder | sort -rn | \
|
||||||
|
sed '/ldorder-/d;s,^[[:space:]0-9]*,,'; } > ${.TARGET}
|
||||||
|
|
||||||
|
# Initially we hook contents of DPLIBS and DPADD into our graph
|
||||||
|
LDORDER_LIBS ?= ${DPLIBS} ${DPADD:M*/lib*} ${__dpadd_libs}
|
||||||
|
# we need to remember this
|
||||||
|
_LDORDER_LIBS := ${LDORDER_LIBS:${LDORDER_LIBS_FILTER:ts:}}
|
||||||
|
|
||||||
|
.if empty(_LDORDER_LIBS)
|
||||||
|
# don't use stale ldorder
|
||||||
|
LDADD_LDORDER =
|
||||||
|
.else
|
||||||
|
# this is how you use it
|
||||||
|
LDADD_LDORDER ?= `cat ldorder`
|
||||||
|
.endif
|
||||||
|
|
||||||
|
# for debug below
|
||||||
|
_ldorder = ${RELDIR}.${TARGET_SPEC}
|
||||||
|
|
||||||
|
.endif # !target(_LDORDER_USE)
|
||||||
|
|
||||||
|
.if !empty(LDORDER_LIBS) && !empty(_ldorder_use)
|
||||||
|
# canonicalize - these are just tokens anyway
|
||||||
|
LDORDER_LIBS := ${LDORDER_LIBS:${LDORDER_LIBS_FILTER:ts:}:R:C/\.so.*//}
|
||||||
|
_ldorders := ${LDORDER_LIBS:T:Mlib*:S,^,.ldorder-,}
|
||||||
|
|
||||||
|
.for t in ${_ldorders}
|
||||||
|
.if !target($t)
|
||||||
|
$t: _LDORDER_USE
|
||||||
|
.endif
|
||||||
|
.endfor
|
||||||
|
|
||||||
|
# and this makes it all happen
|
||||||
|
.ldorder: ${_ldorders}
|
||||||
|
|
||||||
|
# this is how we get the dependencies
|
||||||
|
.if ${.INCLUDEDFROMFILE:M*.${LDORDER_INC}} != ""
|
||||||
|
_ldorder := .ldorder-${.INCLUDEDFROMFILE:S/.${LDORDER_INC}//}
|
||||||
|
${_ldorder}: ${_ldorders}
|
||||||
|
.ldorder-rm: ${.INCLUDEDFROMDIR}/${.INCLUDEDFROMFILE}
|
||||||
|
.endif
|
||||||
|
|
||||||
|
# set DEBUG_LDORDER to pattern[s] that match the dirs of interest
|
||||||
|
.if ${DEBUG_LDORDER:Uno:@x@${RELDIR:M$x}@} != ""
|
||||||
|
.info ${_ldorder}: ${_ldorders}
|
||||||
|
.endif
|
||||||
|
|
||||||
|
# now try to find more ...
|
||||||
|
# each *.${LDORDER_INC} should set LDORDER_LIBS to what it needs
|
||||||
|
# it can also add to CFLAGS etc.
|
||||||
|
.for __inc in ${LDORDER_LIBS:S,$,.${LDORDER_INC},}
|
||||||
|
.if !target(__${__inc}__)
|
||||||
|
__${__inc}__:
|
||||||
|
# make sure this is reset
|
||||||
|
LDORDER_LIBS =
|
||||||
|
.-include <${__inc}>
|
||||||
|
.endif
|
||||||
|
.endfor
|
||||||
|
|
||||||
|
.endif # !empty(LDORDER_LIBS)
|
||||||
|
|
||||||
|
.ifdef LIB
|
||||||
|
# you can make this depend on files (must match *ldorder*)
|
||||||
|
# to add extra content - like CFLAGS
|
||||||
|
libLDORDER_INC = lib${LIB}.${LDORDER_INC}
|
||||||
|
.if !commands(${libLDORDER_INC})
|
||||||
|
${libLDORDER_INC}:
|
||||||
|
@(cat /dev/null ${.ALLSRC:M*ldorder*}; \
|
||||||
|
echo 'LDORDER_LIBS= ${_LDORDER_LIBS:T:R:${LDORDER_INC_FILTER:ts:}:tu:C,.*,_{&},}'; \
|
||||||
|
echo; echo '.include <ldorder.mk>' ) | sed 's,_{,$${,g' > ${.TARGET}
|
||||||
|
.endif
|
||||||
|
.endif
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: lib.mk,v 1.62 2017/06/11 03:24:04 sjg Exp $
|
# $Id: lib.mk,v 1.68 2018/01/26 20:08:16 sjg Exp $
|
||||||
|
|
||||||
.if !target(__${.PARSEFILE}__)
|
.if !target(__${.PARSEFILE}__)
|
||||||
__${.PARSEFILE}__:
|
__${.PARSEFILE}__:
|
||||||
@ -37,6 +37,8 @@ PICO?= .pico
|
|||||||
|
|
||||||
CFLAGS+= ${COPTS}
|
CFLAGS+= ${COPTS}
|
||||||
|
|
||||||
|
META_NOECHO?= echo
|
||||||
|
|
||||||
# Originally derrived from NetBSD-1.6
|
# Originally derrived from NetBSD-1.6
|
||||||
|
|
||||||
# Set PICFLAGS to cc flags for producing position-independent code,
|
# Set PICFLAGS to cc flags for producing position-independent code,
|
||||||
@ -370,6 +372,11 @@ _LIBS+=llib-l${LIB}.ln
|
|||||||
|
|
||||||
.if empty(LIB)
|
.if empty(LIB)
|
||||||
_LIBS=
|
_LIBS=
|
||||||
|
.elif ${MK_LDORDER_MK} != "no"
|
||||||
|
# Record any libs that we need to be linked with
|
||||||
|
_LIBS+= ${libLDORDER_INC}
|
||||||
|
|
||||||
|
.include <ldorder.mk>
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if !defined(_SKIP_BUILD)
|
.if !defined(_SKIP_BUILD)
|
||||||
@ -507,20 +514,24 @@ libinstall:
|
|||||||
[ -d ${DESTDIR}/${LIBDIR} ] || \
|
[ -d ${DESTDIR}/${LIBDIR} ] || \
|
||||||
${INSTALL} -d ${LIB_INSTALL_OWN} -m 775 ${DESTDIR}${LIBDIR}
|
${INSTALL} -d ${LIB_INSTALL_OWN} -m 775 ${DESTDIR}${LIBDIR}
|
||||||
.if ${MK_ARCHIVE} != "no"
|
.if ${MK_ARCHIVE} != "no"
|
||||||
${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 600 lib${LIB}.a \
|
${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 644 lib${LIB}.a \
|
||||||
${DESTDIR}${LIBDIR}
|
${DESTDIR}${LIBDIR}
|
||||||
${RANLIB} ${DESTDIR}${LIBDIR}/lib${LIB}.a
|
${RANLIB} ${DESTDIR}${LIBDIR}/lib${LIB}.a
|
||||||
chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}.a
|
chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}.a
|
||||||
.endif
|
.endif
|
||||||
.if ${MK_PROFILE} != "no"
|
.if ${MK_PROFILE} != "no"
|
||||||
${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 600 \
|
${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 644 \
|
||||||
lib${LIB}_p.a ${DESTDIR}${LIBDIR}
|
lib${LIB}_p.a ${DESTDIR}${LIBDIR}
|
||||||
${RANLIB} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
|
${RANLIB} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
|
||||||
chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
|
chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_p.a
|
||||||
.endif
|
.endif
|
||||||
|
.if ${MK_LDORDER_MK} != "no"
|
||||||
|
${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 644 \
|
||||||
|
lib${LIB}.ldorder.inc ${DESTDIR}${LIBDIR}
|
||||||
|
.endif
|
||||||
.if ${MK_PIC} != "no"
|
.if ${MK_PIC} != "no"
|
||||||
.if ${MK_PICLIB} != "no"
|
.if ${MK_PICLIB} != "no"
|
||||||
${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 600 \
|
${INSTALL} ${COPY} ${LIB_INSTALL_OWN} -m 644 \
|
||||||
lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
|
lib${LIB}_pic.a ${DESTDIR}${LIBDIR}
|
||||||
${RANLIB} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
|
${RANLIB} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
|
||||||
chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
|
chmod ${LIBMODE} ${DESTDIR}${LIBDIR}/lib${LIB}_pic.a
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: own.mk,v 1.36 2017/07/08 21:58:46 sjg Exp $
|
# $Id: own.mk,v 1.39 2018/01/26 20:08:16 sjg Exp $
|
||||||
|
|
||||||
.if !target(__${.PARSEFILE}__)
|
.if !target(__${.PARSEFILE}__)
|
||||||
__${.PARSEFILE}__:
|
__${.PARSEFILE}__:
|
||||||
@ -91,6 +91,7 @@ OPTIONS_DEFAULT_NO+= DPADD_MK
|
|||||||
OPTIONS_DEFAULT_NO+= \
|
OPTIONS_DEFAULT_NO+= \
|
||||||
INSTALL_AS_USER \
|
INSTALL_AS_USER \
|
||||||
GPROF \
|
GPROF \
|
||||||
|
LDORDER_MK \
|
||||||
LIBTOOL \
|
LIBTOOL \
|
||||||
LINT \
|
LINT \
|
||||||
|
|
||||||
@ -113,6 +114,7 @@ OPTIONS_DEFAULT_YES+= \
|
|||||||
|
|
||||||
OPTIONS_DEFAULT_DEPENDENT+= \
|
OPTIONS_DEFAULT_DEPENDENT+= \
|
||||||
CATPAGES/MAN \
|
CATPAGES/MAN \
|
||||||
|
PROG_LDORDER_MK/LDORDER_MK \
|
||||||
OBJDIRS/OBJ \
|
OBJDIRS/OBJ \
|
||||||
PICINSTALL/LINKLIB \
|
PICINSTALL/LINKLIB \
|
||||||
PICLIB/PIC \
|
PICLIB/PIC \
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: prog.mk,v 1.32 2017/05/06 17:30:09 sjg Exp $
|
# $Id: prog.mk,v 1.35 2018/01/26 20:04:07 sjg Exp $
|
||||||
|
|
||||||
.if !target(__${.PARSEFILE}__)
|
.if !target(__${.PARSEFILE}__)
|
||||||
__${.PARSEFILE}__:
|
__${.PARSEFILE}__:
|
||||||
@ -109,15 +109,21 @@ _SUPCXX= -lstdc++ -lm
|
|||||||
|
|
||||||
_CCLINK?= ${CC}
|
_CCLINK?= ${CC}
|
||||||
|
|
||||||
|
.if ${MK_PROG_LDORDER_MK} != "no"
|
||||||
|
${PROG}: ldorder
|
||||||
|
|
||||||
|
.include <ldorder.mk>
|
||||||
|
.endif
|
||||||
|
|
||||||
.if defined(DESTDIR) && exists(${LIBCRT0}) && ${LIBCRT0} != "/dev/null"
|
.if defined(DESTDIR) && exists(${LIBCRT0}) && ${LIBCRT0} != "/dev/null"
|
||||||
|
|
||||||
${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${DPADD}
|
${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${DPADD}
|
||||||
${_CCLINK} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} -nostdlib ${_PROGLDOPTS} -L${DESTDIR}/usr/lib ${LIBCRT0} ${LIBCRTBEGIN} ${OBJS} ${LDADD} -L${DESTDIR}/usr/lib ${_SUPCXX} -lgcc -lc -lgcc ${LIBCRTEND}
|
${_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
|
.else
|
||||||
|
|
||||||
${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${DPADD}
|
${PROG}: ${LIBCRT0} ${OBJS} ${LIBC} ${DPADD}
|
||||||
${_CCLINK} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${_PROGLDOPTS} ${OBJS} ${LDADD}
|
${_CCLINK} ${LDFLAGS} ${LDSTATIC} -o ${.TARGET} ${_PROGLDOPTS} ${OBJS} ${LDADD_LDORDER} ${LDADD}
|
||||||
|
|
||||||
.endif # defined(DESTDIR)
|
.endif # defined(DESTDIR)
|
||||||
.endif # defined(OBJS) && !empty(OBJS)
|
.endif # defined(OBJS) && !empty(OBJS)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: sys.mk,v 1.45 2017/02/05 01:26:13 sjg Exp $
|
# $Id: sys.mk,v 1.46 2017/11/15 22:59:23 sjg Exp $
|
||||||
#
|
#
|
||||||
# @(#) Copyright (c) 2003-2009, Simon J. Gerraty
|
# @(#) Copyright (c) 2003-2009, Simon J. Gerraty
|
||||||
#
|
#
|
||||||
@ -84,7 +84,7 @@ OPTIONS_DEFAULT_DEPENDENT += \
|
|||||||
MK_META_MODE = yes
|
MK_META_MODE = yes
|
||||||
.-include <meta.sys.mk>
|
.-include <meta.sys.mk>
|
||||||
.elif ${MK_META_MODE:Uno} == "yes"
|
.elif ${MK_META_MODE:Uno} == "yes"
|
||||||
.MAKE.MODE = meta verbose
|
.MAKE.MODE = meta verbose ${META_MODE}
|
||||||
.endif
|
.endif
|
||||||
# make sure we have a harmless value
|
# make sure we have a harmless value
|
||||||
.MAKE.MODE ?= normal
|
.MAKE.MODE ?= normal
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: sys.vars.mk,v 1.2 2017/01/31 07:44:45 sjg Exp $
|
# $Id: sys.vars.mk,v 1.3 2018/02/06 00:51:53 sjg Exp $
|
||||||
#
|
#
|
||||||
# @(#) Copyright (c) 2003-2009, Simon J. Gerraty
|
# @(#) Copyright (c) 2003-2009, Simon J. Gerraty
|
||||||
#
|
#
|
||||||
@ -45,7 +45,7 @@ M_L_TARGETS = ${M_ListToMatch:S,V,_TARGETS,}
|
|||||||
|
|
||||||
# turn a list into a set of :N modifiers
|
# turn a list into a set of :N modifiers
|
||||||
# NskipFoo = ${Foo:${M_ListToSkip}}
|
# NskipFoo = ${Foo:${M_ListToSkip}}
|
||||||
M_ListToSkip= O:u:ts::S,:,:N,g:S,^,N,
|
M_ListToSkip= O:u:S,^,N,:ts:
|
||||||
|
|
||||||
# type should be a builtin in any sh since about 1980,
|
# type should be a builtin in any sh since about 1980,
|
||||||
# but sadly there are exceptions!
|
# but sadly there are exceptions!
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
# Simon J. Gerraty <sjg@crufty.net>
|
# Simon J. Gerraty <sjg@crufty.net>
|
||||||
|
|
||||||
# RCSid:
|
# RCSid:
|
||||||
# $Id: os.sh,v 1.54 2017/09/08 06:17:22 sjg Exp $
|
# $Id: os.sh,v 1.55 2017/12/11 20:31:41 sjg Exp $
|
||||||
#
|
#
|
||||||
# @(#) Copyright (c) 1994 Simon J. Gerraty
|
# @(#) Copyright (c) 1994 Simon J. Gerraty
|
||||||
#
|
#
|
||||||
@ -138,6 +138,7 @@ SunOS)
|
|||||||
# so NetBSD/i386 is good enough
|
# so NetBSD/i386 is good enough
|
||||||
case $OS in
|
case $OS in
|
||||||
NetBSD)
|
NetBSD)
|
||||||
|
LOCALBASE=/usr/pkg
|
||||||
HOST_ARCH=$MACHINE
|
HOST_ARCH=$MACHINE
|
||||||
SHARE_ARCH=$OS/$HOST_ARCH
|
SHARE_ARCH=$OS/$HOST_ARCH
|
||||||
;;
|
;;
|
||||||
@ -196,6 +197,7 @@ Haiku)
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
LOCALBASE=${LOCALBASE:-/usr/local}
|
||||||
|
|
||||||
HOSTNAME=${HOSTNAME:-`( hostname ) 2>/dev/null`}
|
HOSTNAME=${HOSTNAME:-`( hostname ) 2>/dev/null`}
|
||||||
HOSTNAME=${HOSTNAME:-`( uname -n ) 2>/dev/null`}
|
HOSTNAME=${HOSTNAME:-`( uname -n ) 2>/dev/null`}
|
||||||
@ -237,6 +239,7 @@ Echo() {
|
|||||||
export HOSTNAME HOST
|
export HOSTNAME HOST
|
||||||
export OS MACHINE MACHINE_ARCH OSREL OSMAJOR LOCAL_FS TMP_DIRS MAILER N C K PS_AXC
|
export OS MACHINE MACHINE_ARCH OSREL OSMAJOR LOCAL_FS TMP_DIRS MAILER N C K PS_AXC
|
||||||
export LN SHARE_ARCH TR
|
export LN SHARE_ARCH TR
|
||||||
|
export LOCALBASE
|
||||||
|
|
||||||
case /$0 in
|
case /$0 in
|
||||||
*/os.sh)
|
*/os.sh)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: parse.c,v 1.225 2017/04/17 13:29:07 maya Exp $ */
|
/* $NetBSD: parse.c,v 1.227 2018/02/22 01:59:28 sjg Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988, 1989, 1990, 1993
|
* Copyright (c) 1988, 1989, 1990, 1993
|
||||||
@ -69,14 +69,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MAKE_NATIVE
|
#ifndef MAKE_NATIVE
|
||||||
static char rcsid[] = "$NetBSD: parse.c,v 1.225 2017/04/17 13:29:07 maya Exp $";
|
static char rcsid[] = "$NetBSD: parse.c,v 1.227 2018/02/22 01:59:28 sjg Exp $";
|
||||||
#else
|
#else
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
#if 0
|
#if 0
|
||||||
static char sccsid[] = "@(#)parse.c 8.3 (Berkeley) 3/19/94";
|
static char sccsid[] = "@(#)parse.c 8.3 (Berkeley) 3/19/94";
|
||||||
#else
|
#else
|
||||||
__RCSID("$NetBSD: parse.c,v 1.225 2017/04/17 13:29:07 maya Exp $");
|
__RCSID("$NetBSD: parse.c,v 1.227 2018/02/22 01:59:28 sjg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
#endif
|
#endif
|
||||||
@ -490,7 +490,7 @@ loadfile(const char *path, int fd)
|
|||||||
{
|
{
|
||||||
struct loadedfile *lf;
|
struct loadedfile *lf;
|
||||||
#ifdef HAVE_MMAP
|
#ifdef HAVE_MMAP
|
||||||
long pagesize;
|
static long pagesize = 0;
|
||||||
#endif
|
#endif
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
size_t bufpos;
|
size_t bufpos;
|
||||||
@ -515,9 +515,8 @@ loadfile(const char *path, int fd)
|
|||||||
if (load_getsize(fd, &lf->len) == SUCCESS) {
|
if (load_getsize(fd, &lf->len) == SUCCESS) {
|
||||||
/* found a size, try mmap */
|
/* found a size, try mmap */
|
||||||
#ifdef _SC_PAGESIZE
|
#ifdef _SC_PAGESIZE
|
||||||
|
if (pagesize == 0)
|
||||||
pagesize = sysconf(_SC_PAGESIZE);
|
pagesize = sysconf(_SC_PAGESIZE);
|
||||||
#else
|
|
||||||
pagesize = 0;
|
|
||||||
#endif
|
#endif
|
||||||
if (pagesize <= 0) {
|
if (pagesize <= 0) {
|
||||||
pagesize = 0x1000;
|
pagesize = 0x1000;
|
||||||
@ -720,6 +719,8 @@ ParseVErrorInternal(FILE *f, const char *cfname, size_t clineno, int type,
|
|||||||
(void)vfprintf(f, fmt, ap);
|
(void)vfprintf(f, fmt, ap);
|
||||||
(void)fprintf(f, "\n");
|
(void)fprintf(f, "\n");
|
||||||
(void)fflush(f);
|
(void)fflush(f);
|
||||||
|
if (type == PARSE_INFO)
|
||||||
|
return;
|
||||||
if (type == PARSE_FATAL || parseWarnFatal)
|
if (type == PARSE_FATAL || parseWarnFatal)
|
||||||
fatals += 1;
|
fatals += 1;
|
||||||
if (parseWarnFatal && !fatal_warning_error_printed) {
|
if (parseWarnFatal && !fatal_warning_error_printed) {
|
||||||
@ -812,7 +813,7 @@ ParseMessage(char *line)
|
|||||||
|
|
||||||
switch(*line) {
|
switch(*line) {
|
||||||
case 'i':
|
case 'i':
|
||||||
mtype = 0;
|
mtype = PARSE_INFO;
|
||||||
break;
|
break;
|
||||||
case 'w':
|
case 'w':
|
||||||
mtype = PARSE_WARNING;
|
mtype = PARSE_WARNING;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: stresep.c,v 1.2 2007/12/06 22:07:07 seb Exp $ */
|
/* $NetBSD: stresep.c,v 1.4 2017/08/23 10:27:41 christos Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
@ -59,6 +59,7 @@ stresep(char **stringp, const char *delim, int esc)
|
|||||||
char *s;
|
char *s;
|
||||||
const char *spanp;
|
const char *spanp;
|
||||||
int c, sc;
|
int c, sc;
|
||||||
|
size_t l;
|
||||||
char *tok;
|
char *tok;
|
||||||
|
|
||||||
if (stringp == NULL || delim == NULL)
|
if (stringp == NULL || delim == NULL)
|
||||||
@ -66,23 +67,26 @@ stresep(char **stringp, const char *delim, int esc)
|
|||||||
|
|
||||||
if ((s = *stringp) == NULL)
|
if ((s = *stringp) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
l = strlen(s) + 1;
|
||||||
for (tok = s;;) {
|
for (tok = s;;) {
|
||||||
c = *s++;
|
c = *s++;
|
||||||
|
l--;
|
||||||
while (esc != '\0' && c == esc) {
|
while (esc != '\0' && c == esc) {
|
||||||
(void)strcpy(s - 1, s);
|
memmove(s - 1, s, l);
|
||||||
c = *s++;
|
c = *s++;
|
||||||
|
l--;
|
||||||
}
|
}
|
||||||
spanp = delim;
|
spanp = delim;
|
||||||
do {
|
do {
|
||||||
if ((sc = *spanp++) == c) {
|
if ((sc = *spanp++) == c) {
|
||||||
if (c == 0)
|
if (c == '\0')
|
||||||
s = NULL;
|
s = NULL;
|
||||||
else
|
else
|
||||||
s[-1] = 0;
|
s[-1] = '\0';
|
||||||
*stringp = s;
|
*stringp = s;
|
||||||
return tok;
|
return tok;
|
||||||
}
|
}
|
||||||
} while (sc != 0);
|
} while (sc != '\0');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
default FU=<v>fu</v> FOO=<v>foo</v> VAR=<v></v>
|
default FU=<v>fu</v> FOO=<v>foo</v> VAR=<v></v>
|
||||||
two FU=<v>bar</v> FOO=<v>goo</v> VAR=<v></v>
|
two FU=<v>bar</v> FOO=<v>goo</v> VAR=<v></v>
|
||||||
|
immutable FU='bar'
|
||||||
|
immutable FOO='goo'
|
||||||
three FU=<v>bar</v> FOO=<v>goo</v> VAR=<v></v>
|
three FU=<v>bar</v> FOO=<v>goo</v> VAR=<v></v>
|
||||||
four FU=<v>bar</v> FOO=<v>goo</v> VAR=<v>Internal</v>
|
four FU=<v>bar</v> FOO=<v>goo</v> VAR=<v>Internal</v>
|
||||||
five FU=<v>bar</v> FOO=<v>goo</v> VAR=<v>Internal</v>
|
five FU=<v>bar</v> FOO=<v>goo</v> VAR=<v>Internal</v>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $Id: varcmd.mk,v 1.1.1.1 2014/08/30 18:57:18 sjg Exp $
|
# $Id: varcmd.mk,v 1.1.1.3 2017/12/08 03:37:54 sjg Exp $
|
||||||
#
|
#
|
||||||
# Test behaviour of recursive make and vars set on command line.
|
# Test behaviour of recursive make and vars set on command line.
|
||||||
|
|
||||||
@ -15,7 +15,7 @@ show:
|
|||||||
@echo "${TAG} FU=<v>${FU}</v> FOO=<v>${FOO}</v> VAR=<v>${VAR}</v>"
|
@echo "${TAG} FU=<v>${FU}</v> FOO=<v>${FOO}</v> VAR=<v>${VAR}</v>"
|
||||||
|
|
||||||
one: show
|
one: show
|
||||||
@${.MAKE} -f ${MAKEFILE} FU=bar FOO=goo two
|
@${.MAKE} -f ${MAKEFILE} FU=bar FOO+=goo two
|
||||||
|
|
||||||
two: show
|
two: show
|
||||||
@${.MAKE} -f ${MAKEFILE} three
|
@${.MAKE} -f ${MAKEFILE} three
|
||||||
@ -24,6 +24,17 @@ three: show
|
|||||||
@${.MAKE} -f ${MAKEFILE} four
|
@${.MAKE} -f ${MAKEFILE} four
|
||||||
|
|
||||||
|
|
||||||
|
.ifmake two
|
||||||
|
# this should not work
|
||||||
|
FU+= oops
|
||||||
|
FOO+= oops
|
||||||
|
_FU:= ${FU}
|
||||||
|
_FOO:= ${FOO}
|
||||||
|
two: immutable
|
||||||
|
immutable:
|
||||||
|
@echo "$@ FU='${_FU}'"
|
||||||
|
@echo "$@ FOO='${_FOO}'"
|
||||||
|
.endif
|
||||||
.ifmake four
|
.ifmake four
|
||||||
VAR=Internal
|
VAR=Internal
|
||||||
.MAKEOVERRIDES+= VAR
|
.MAKEOVERRIDES+= VAR
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: var.c,v 1.215 2017/04/16 21:39:49 riastradh Exp $ */
|
/* $NetBSD: var.c,v 1.218 2018/02/18 00:52:42 sjg Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988, 1989, 1990, 1993
|
* Copyright (c) 1988, 1989, 1990, 1993
|
||||||
@ -69,14 +69,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MAKE_NATIVE
|
#ifndef MAKE_NATIVE
|
||||||
static char rcsid[] = "$NetBSD: var.c,v 1.215 2017/04/16 21:39:49 riastradh Exp $";
|
static char rcsid[] = "$NetBSD: var.c,v 1.218 2018/02/18 00:52:42 sjg Exp $";
|
||||||
#else
|
#else
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
#ifndef lint
|
#ifndef lint
|
||||||
#if 0
|
#if 0
|
||||||
static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94";
|
static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94";
|
||||||
#else
|
#else
|
||||||
__RCSID("$NetBSD: var.c,v 1.215 2017/04/16 21:39:49 riastradh Exp $");
|
__RCSID("$NetBSD: var.c,v 1.218 2018/02/18 00:52:42 sjg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#endif /* not lint */
|
#endif /* not lint */
|
||||||
#endif
|
#endif
|
||||||
@ -970,6 +970,7 @@ Var_Set(const char *name, const char *val, GNode *ctxt, int flags)
|
|||||||
VarAdd(name, val, ctxt);
|
VarAdd(name, val, ctxt);
|
||||||
} else {
|
} else {
|
||||||
Buf_Empty(&v->val);
|
Buf_Empty(&v->val);
|
||||||
|
if (val)
|
||||||
Buf_AddBytes(&v->val, strlen(val), val);
|
Buf_AddBytes(&v->val, strlen(val), val);
|
||||||
|
|
||||||
if (DEBUG(VAR)) {
|
if (DEBUG(VAR)) {
|
||||||
@ -997,7 +998,7 @@ Var_Set(const char *name, const char *val, GNode *ctxt, int flags)
|
|||||||
* Makefile settings.
|
* Makefile settings.
|
||||||
*/
|
*/
|
||||||
if (varNoExportEnv != TRUE)
|
if (varNoExportEnv != TRUE)
|
||||||
setenv(name, val, 1);
|
setenv(name, val ? val : "", 1);
|
||||||
|
|
||||||
Var_Append(MAKEOVERRIDES, name, VAR_GLOBAL);
|
Var_Append(MAKEOVERRIDES, name, VAR_GLOBAL);
|
||||||
}
|
}
|
||||||
@ -1060,11 +1061,11 @@ Var_Append(const char *name, const char *val, GNode *ctxt)
|
|||||||
name = expanded_name;
|
name = expanded_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
v = VarFind(name, ctxt, (ctxt == VAR_GLOBAL) ? FIND_ENV : 0);
|
v = VarFind(name, ctxt, (ctxt == VAR_GLOBAL) ? (FIND_CMD|FIND_ENV) : 0);
|
||||||
|
|
||||||
if (v == NULL) {
|
if (v == NULL) {
|
||||||
VarAdd(name, val, ctxt);
|
Var_Set(name, val, ctxt, 0);
|
||||||
} else {
|
} else if (ctxt == VAR_CMD || !(v->flags & VAR_FROM_CMD)) {
|
||||||
Buf_AddByte(&v->val, ' ');
|
Buf_AddByte(&v->val, ' ');
|
||||||
Buf_AddBytes(&v->val, strlen(val), val);
|
Buf_AddBytes(&v->val, strlen(val), val);
|
||||||
|
|
||||||
|
@ -7,11 +7,11 @@ SRCTOP?= ${.CURDIR:H:H}
|
|||||||
|
|
||||||
# things set by configure
|
# things set by configure
|
||||||
|
|
||||||
_MAKE_VERSION=20171028
|
_MAKE_VERSION=20180222
|
||||||
|
|
||||||
prefix?= /usr
|
prefix?= /usr
|
||||||
srcdir= ${SRCTOP}/contrib/bmake
|
srcdir= ${SRCTOP}/contrib/bmake
|
||||||
CC?= gcc
|
CC?= cc
|
||||||
DEFAULT_SYS_PATH?= .../share/mk:/usr/share/mk
|
DEFAULT_SYS_PATH?= .../share/mk:/usr/share/mk
|
||||||
|
|
||||||
CPPFLAGS+=
|
CPPFLAGS+=
|
||||||
@ -20,7 +20,7 @@ LDFLAGS=
|
|||||||
LIBOBJS= ${LIBOBJDIR}stresep$U.o
|
LIBOBJS= ${LIBOBJDIR}stresep$U.o
|
||||||
LDADD=
|
LDADD=
|
||||||
USE_META= yes
|
USE_META= yes
|
||||||
FILEMON_H= /usr/include/dev/filemon/filemon.h
|
FILEMON_H?= /usr/include/dev/filemon/filemon.h
|
||||||
BMAKE_PATH_MAX?= 1024
|
BMAKE_PATH_MAX?= 1024
|
||||||
# used if MAXPATHLEN not defined
|
# used if MAXPATHLEN not defined
|
||||||
CPPFLAGS+= -DBMAKE_PATH_MAX=${BMAKE_PATH_MAX}
|
CPPFLAGS+= -DBMAKE_PATH_MAX=${BMAKE_PATH_MAX}
|
||||||
|
@ -30,3 +30,7 @@ CFLAGS+= -DNO_PWD_OVERRIDE
|
|||||||
DEFAULT_SYS_PATH= .../share/mk:/usr/share/mk
|
DEFAULT_SYS_PATH= .../share/mk:/usr/share/mk
|
||||||
.export DEFAULT_SYS_PATH
|
.export DEFAULT_SYS_PATH
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
.if ${MACHINE} != "host"
|
||||||
|
FILEMON_H ?= ${SRCTOP}/sys/dev/filemon/filemon.h
|
||||||
|
.endif
|
||||||
|
@ -236,7 +236,7 @@
|
|||||||
#define HAVE_WORKING_VFORK 1
|
#define HAVE_WORKING_VFORK 1
|
||||||
|
|
||||||
/* define if your compiler has __attribute__ */
|
/* define if your compiler has __attribute__ */
|
||||||
/* #undef HAVE___ATTRIBUTE__ */
|
#define HAVE___ATTRIBUTE__ 1
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
#define PACKAGE_BUGREPORT "sjg@NetBSD.org"
|
#define PACKAGE_BUGREPORT "sjg@NetBSD.org"
|
||||||
@ -245,7 +245,7 @@
|
|||||||
#define PACKAGE_NAME "bmake"
|
#define PACKAGE_NAME "bmake"
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
/* Define to the full name and version of this package. */
|
||||||
#define PACKAGE_STRING "bmake 20170812"
|
#define PACKAGE_STRING "bmake 20171126"
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
/* Define to the one symbol short name of this package. */
|
||||||
#define PACKAGE_TARNAME "bmake"
|
#define PACKAGE_TARNAME "bmake"
|
||||||
@ -254,7 +254,7 @@
|
|||||||
#define PACKAGE_URL ""
|
#define PACKAGE_URL ""
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#define PACKAGE_VERSION "20170812"
|
#define PACKAGE_VERSION "20171126"
|
||||||
|
|
||||||
/* Define as the return type of signal handlers (`int' or `void'). */
|
/* Define as the return type of signal handlers (`int' or `void'). */
|
||||||
#define RETSIGTYPE void
|
#define RETSIGTYPE void
|
||||||
|
Loading…
Reference in New Issue
Block a user