xref: /freebsd/usr.sbin/sysconf/sysconf-make.8 (revision b4a465e566a1850e232b454efe99e05c1ea93f67)
1.\" Copyright (c) 2013-2026 Devin Teske <dteske@FreeBSD.org>
2.\" Copyright (c) 2021-2026 Faraz Vahedi <kfv@FreeBSD.org>
3.\"
4.\" SPDX-License-Identifier: BSD-2-Clause
5.\"
6.Dd August 2, 2026
7.Dt SYSCONF-MAKE 8
8.Os
9.Sh NAME
10.Nm "sysconf make"
11.Nd configure make.conf directives
12.Sh SYNOPSIS
13.Nm sysconf
14.Cm make
15.Op Fl ceFinNqsvVx
16.Op Fl j Ar jail | Fl R Ar dir
17.Op Fl f Ar file
18.Ar name Ns Op Ns Oo +|- Oc Ns = Ns Ar value
19.Ar ...
20.Nm sysconf
21.Cm make
22.Op Fl eFnNqvV
23.Op Fl f Ar file
24.Fl a
25.Nm sysconf
26.Cm make
27.Op Fl E
28.Fl l | L
29.Sh DESCRIPTION
30The
31.Cm make
32target of
33.Xr sysconf 8
34reads and writes
35.Xr make 1 Ns -syntax
36configuration on
37.Pa /etc/make.conf
38by default,
39or on any single file named with
40.Fl f .
41Shared options are in
42.Xr sysconf 8 ;
43make(1) limitations and multi-file policy for other targets in
44.Xr sysconf-targets 8 .
45.Pp
46.Ql +=
47is the
48.Xr make 1
49append operator:
50a new
51.Ql name+=value
52line is appended
53.Pq prior assignments for the same name are left intact ,
54and reads report the cumulative effective value as
55.Nm make Fl V
56would.
57Assignment modifiers may also be requested by suffixing the name,
58as in
59.Ql CFLAGS+=-DDEBUG .
60.Pp
61.Ql -=
62is not a
63.Xr make 1
64operator;
65it strikes each given word from the
66.Em last
67assignment whose value contains that word as a whole whitespace-separated
68token
69.Pq rewriting the statement, or deleting it when the value becomes empty ,
70so successive strikes peel list fragments from the end of the assignment
71chain without collapsing earlier
72.Ql +=
73lines.
74.Pp
75.Ql WITH_*
76and
77.Ql WITHOUT_*
78presence knobs may be set with
79.Fl s
80.Pq preferred; writes Ql name=
81or
82.Ar name Ns = ;
83reads report
84.Ql name (present)
85for any assigned value
86.Po
87.Fl e
88prints the real assignment, e.g.\&
89.Ql name=
90or
91.Ql name=t ;
92.Fl n
93prints that same value alone
94.Pc .
95.Fl s
96is a no-op when the knob is already defined
97.Pq any value ;
98an explicit
99.Ar name Ns =
100.Pq including empty
101always writes, and a change of placeholder echoes
102.Ql name: old -> new .
103.Fl s
104does not clear an inverse
105.Ql WITH_
106or
107.Ql WITHOUT_
108for the same option
109.Po
110use
111.Fl V
112and clean up manually if needed
113.Pc .
114.Pp
115Writing
116.Ql WITH_ Ns Ar foo Ns =no
117.Pq exact lowercase Ql no
118still stores the assignment but warns to use
119.Ql WITHOUT_ Ns Ar foo Ns =1 ,
120matching the
121.Ql .warning
122in
123.Pa share/mk/bsd.mkopt.mk .
124.Nm
125emits that advisory on write and on read
126.Pq named queries and Fl a ,
127with
128.Ql file:line:
129of the authoritative statement when known
130.Pq suppressed by Fl q ,
131because
132.Xr make.conf 5
133is read by
134.Pa /usr/src
135builds: a line such as
136.Va WITH_MANCOMPRESS Ns =no
137here is what produces
138.Pp
139.Dl warning: Use WITHOUT_MANCOMPRESS=1 instead of WITH_MANCOMPRESS=no
140.Pp
141when running
142.Xr make 1
143in
144.Pa /usr/src
145.Pq after Pa bsd.opts.mk reloads Pa bsd.mkopt.mk for common options .
146The read-time form matters when the default presence display hides the
147.Ql =no
148value behind
149.Ql (present) .
150The same line stays silent under a bare
151.Ql make -C /tmp
152or ports, which never evaluate that option list.
153Neither
154.Nm
155nor make warns for
156.Ql WITHOUT_* Ns =no
157or
158.Ql WITH_* Ns =NO :
159presence of
160.Ql WITHOUT_
161still disables, and
162.Ql WITH_
163with a value other than lowercase
164.Ql no
165does not match the check.
166.Pp
167.Va WITHOUT_MODULES
168is not a presence knob:
169its value is a module reject list, so
170.Fl s
171is rejected and reads print the module list rather than
172.Ql (present) .
173Set it with a normal assignment
174.Pq e.g. Va WITHOUT_MODULES Ns = Ns Ar plip .
175.Pp
176This target has no defaults file;
177.Fl d ,
178.Fl D ,
179and
180.Fl A
181are errors.
182For the
183.Pa /usr/src
184build triad see
185.Xr sysconf-src 8 .
186.Sh FILES
187.Bl -tag -width "/etc/make.conf" -compact
188.It Pa /etc/make.conf
189Default file for the
190.Cm make
191target.
192.El
193.Sh EXAMPLES
194.Dl sysconf make CFLAGS+=-DDEBUG
195.Dl sysconf make -s WITHOUT_MANCOMPRESS
196.Dl sysconf make WITHOUT_MANCOMPRESS
197.Pp
198Strike a word from the last
199.Ql +=
200fragment that contains it
201.Pq here removing Ql 3 from the final line only :
202.Bd -literal -offset indent
203bar+=1
204bar+=1 2
205bar+=1 2 3
206.Ed
207.Pp
208.Dl sysconf make bar-=3
209.Pp
210leaves
211.Ql bar+=1 2
212on the last line.
213Repeating with
214.Ql bar-=2
215and
216.Ql bar-=1
217peels that line further, then removes it when emptied.
218.Sh SEE ALSO
219.Xr make 1 ,
220.Xr sysconf 8 ,
221.Xr sysconf-src 8 ,
222.Xr sysconf-targets 8
223.Sh HISTORY
224The
225.Nm sysconf
226utility first appeared in
227.Fx 16.0 .
228.Sh AUTHORS
229.An Devin Teske Aq Mt dteske@FreeBSD.org
230.An Faraz Vahedi Aq Mt kfv@FreeBSD.org
231