bsd.x11.mk revision 1.69 1 # $NetBSD: bsd.x11.mk,v 1.69 2008/10/19 22:05:21 apb Exp $
2
3 .include <bsd.init.mk>
4
5 .if make(depend) || make(all) || make(dependall)
6 .if (${MKX11} != "no" && ${MKXORG} != "no")
7 .BEGIN:
8 @echo
9 @echo "ERROR: \$$MKX11 and \$$MKXORG are mutually exclusive."
10 @echo
11 @false
12 .endif
13 .endif
14
15 BINDIR= ${X11BINDIR}
16 LIBDIR= ${X11USRLIBDIR}
17 MANDIR= ${X11MANDIR}
18
19 COPTS+= -fno-strict-aliasing
20
21 .if defined(USE_SSP) && (${USE_SSP} != "no")
22 CPPFLAGS+= -DNO_ALLOCA
23 .endif
24
25 X11FLAGS.VERSION= -DOSMAJORVERSION=1 -DOSMINORVERSION=6 # XXX
26
27 # THREADS_DEFINES
28 X11FLAGS.THREADS= -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API \
29 -DXNO_MTSAFE_PWDAPI
30
31 # CONNECTION_FLAGS
32 X11FLAGS.CONNECTION= -DTCPCONN -DUNIXCONN -DHAS_STICKY_DIR_BIT \
33 -DHAS_FCHOWN
34
35 .if (${USE_INET6} != "no")
36 X11FLAGS.CONNECTION+= -DIPv6
37 .endif
38
39 # EXT_DEFINES
40 .if ${MKXORG} != "no"
41 X11FLAGS.BASE_EXTENSION= -DMITMISC -DXTEST -DXTRAP -DXSYNC -DXCMISC \
42 -DXRECORD -DMITSHM -DBIGREQS -DXF86VIDMODE \
43 -DXF86MISC -DDPMSExtension -DEVI \
44 -DSCREENSAVER -DXV -DXVMC -DGLXEXT \
45 -DFONTCACHE -DRES
46
47 X11FLAGS.PERVASIVE_EXTENSION= -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP \
48 -DXCSECURITY -DTOGCUP -DXF86BIGFONT \
49 -DDPMSExtension -DPIXPRIV -DPANORAMIX \
50 -DRENDER -DRANDR -DXFIXES -DDAMAGE \
51 -DCOMPOSITE -DXEVIE
52 X11FLAGS.EXTENSION= ${X11FLAGS.BASE_EXTENSION} \
53 ${X11FLAGS.PERVASIVE_EXTENSION}
54
55 X11FLAGS.DIX= -DHAVE_DIX_CONFIG_H -D_BSD_SOURCE -DHAS_FCHOWN \
56 -DHAS_STICKY_DIR_BIT -D_POSIX_THREAD_SAFE_FUNCTIONS
57 X11INCS.DIX= -I${X11INCSDIR}/freetype2 \
58 -I${X11INCSDIR}/pixman-1 \
59 -I$(X11SRCDIR.xorg-server)/include \
60 -I$(X11SRCDIR.xorg-server)/Xext \
61 -I$(X11SRCDIR.xorg-server)/composite \
62 -I$(X11SRCDIR.xorg-server)/damageext \
63 -I$(X11SRCDIR.xorg-server)/xfixes \
64 -I$(X11SRCDIR.xorg-server)/Xi \
65 -I$(X11SRCDIR.xorg-server)/mi \
66 -I$(X11SRCDIR.xorg-server)/miext/shadow \
67 -I$(X11SRCDIR.xorg-server)/miext/damage \
68 -I$(X11SRCDIR.xorg-server)/render \
69 -I$(X11SRCDIR.xorg-server)/randr \
70 -I$(X11SRCDIR.xorg-server)/fb
71 .else
72 X11FLAGS.EXTENSION= -DMITMISC -DXTEST -DXTRAP -DXSYNC -DXCMISC -DXRECORD \
73 -DMITSHM -DBIGREQS -DXF86MISC -DDBE -DDPMSExtension \
74 -DEVI -DSCREENSAVER -DXV -DXVMC -DGLXEXT \
75 -DGLX_USE_MESA -DFONTCACHE -DRES
76 .endif
77
78 X11FLAGS.DRI= -DGLXEXT -DXF86DRI -DGLX_DIRECT_RENDERING \
79 -DGLX_USE_DLOPEN -DGLX_USE_MESA
80
81 .if ${X11DRI} != "no"
82 X11FLAGS.EXTENSION+= ${X11FLAGS.DRI}
83 .endif
84
85 # ServerDefines
86 X11FLAGS.SERVER= -DSHAPE -DXKB -DLBX -DXAPPGROUP -DXCSECURITY \
87 -DTOGCUP -DXF86BIGFONT -DDPMSExtension -DPIXPRIV \
88 -DPANORAMIX -DRENDER -DRANDR -DGCCUSESGAS \
89 -DAVOID_GLYPHBLT -DSINGLEDEPTH -DXvExtension \
90 -DXFree86Server -DXvMCExtension -DSMART_SCHEDULE \
91 -DBUILDDEBUG -DXResExtension -DNDEBUG
92
93 # OS_DEFINES
94 X11FLAGS.OS_DEFINES= -DDDXOSINIT -DSERVER_LOCK -DDDXOSFATALERROR \
95 -DDDXOSVERRORF -DDDXTIME -DUSB_HID
96
97 .if !(${MACHINE} == "acorn32" || \
98 ${MACHINE} == "alpha" || \
99 ${MACHINE} == "amiga" || \
100 ${MACHINE} == "pmax" || \
101 ${MACHINE} == "sun3" || \
102 ${MACHINE} == "vax")
103 # EXT_DEFINES
104 X11FLAGS.EXTENSION+= -DXF86VIDMODE
105
106 # ServerDefines
107 X11FLAGS.SERVER+= -DXINPUT -DXFreeXDGA -DXF86VIDMODE
108 .endif
109
110 .if ${MACHINE_ARCH} == "alpha" || \
111 ${MACHINE_ARCH} == "sparc64" || \
112 ${MACHINE_ARCH} == "x86_64"
113 # ServerDefines
114 X11FLAGS.SERVER+= -D_XSERVER64
115 X11FLAGS.EXTENSION+= -D__GLX_ALIGN64
116 .endif
117
118 .if ${MACHINE} == "amd64" || \
119 ${MACHINE} == "cats" || \
120 ${MACHINE} == "i386" || \
121 ${MACHINE} == "macppc" || \
122 ${MACHINE} == "netwinder" || \
123 ${MACHINE} == "ofppc" || \
124 ${MACHINE} == "sgimips" || \
125 ${MACHINE} == "sparc64" || \
126 ${MACHINE} == "sparc" || \
127 ${MACHINE} == "shark"
128 # LOADABLE
129 X11FLAGS.LOADABLE= -DXFree86LOADER -DIN_MODULE -DXFree86Module \
130 -fno-merge-constants
131 .endif
132
133 # XXX FIX ME
134 .if ${MKXORG} != "no"
135 XVENDORNAMESHORT= '"X.Org"'
136 XVENDORNAME= '"The X.Org Foundation"'
137 XORG_RELEASE= '"Release 1.4.2"'
138 __XKBDEFRULES__= '"xorg"'
139 XLOCALE.DEFINES= -DXLOCALEDIR=\"${X11LIBDIR}/locale\" \
140 -DXLOCALELIBDIR=\"${X11LIBDIR}/locale\"
141
142 # XXX oh yeah, fix me later
143 XORG_VERSION_CURRENT="(((1) * 10000000) + ((4) * 100000) + ((2) * 1000) + 0)"
144 .endif
145
146 PRINT_PACKAGE_VERSION= awk '/^PACKAGE_VERSION=/ { \
147 match($$1, "([0-9]+\\.)+[0-9]+"); \
148 version = substr($$1, RSTART, RLENGTH); \
149 } END { print version }'
150
151
152 # Extract X11VERSION
153 PRINTX11VERSION=${TOOL_AWK} ' \
154 /^\#define XF86_VERSION_MAJOR/ {major = $$3} \
155 /^\#define XF86_VERSION_MINOR/ {minor = $$3} \
156 /^\#define XF86_VERSION_PATCH/ {patch = $$3} \
157 /^\#define XF86_VERSION_SNAP/ {snap = $$3} \
158 END { print "((("major") * 10000000) + (("minor") * 100000) + (("patch") * 1000) + "snap")"}' \
159 ${X11SRCDIR.xc}/programs/Xserver/hw/xfree86/xf86Version.h
160
161 # Commandline to convert 'XCOMM' comments and 'XHASH' to '#', among other
162 # things. Transformed from the "CppSedMagic" macro from "Imake.rules".
163 #
164 X11TOOL_UNXCOMM= sed -e '/^\# *[0-9][0-9]* *.*$$/d' \
165 -e '/^\#line *[0-9][0-9]* *.*$$/d' \
166 -e '/^[ ]*XCOMM$$/s/XCOMM/\#/' \
167 -e '/^[ ]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/\#/' \
168 -e '/^[ ]*XHASH/s/XHASH/\#/' \
169 -e '/\@\@$$/s/\@\@$$/\\/'
170
171
172 CPPFLAGS+= -DCSRG_BASED -DFUNCPROTO=15 -DNARROWPROTO
173 CPPFLAGS+= -I${DESTDIR}${X11INCDIR}
174
175 .if ${MACHINE_ARCH} == "x86_64"
176 CPPFLAGS+= -D__AMD64__
177 .endif
178
179 LDFLAGS+= -Wl,-rpath-link,${DESTDIR}${X11USRLIBDIR} \
180 -R${X11USRLIBDIR} \
181 -L${DESTDIR}${X11USRLIBDIR}
182
183
184 #
185 # .cpp -> "" handling
186 # CPPSCRIPTS list of files/scripts to run through cpp
187 # CPPSCRIPTFLAGS extra flags to ${CPP}
188 # CPPSCRIPTFLAGS_fn extra flags to ${CPP} for file `fn'
189 #
190 .if defined(CPPSCRIPTS) # {
191 .SUFFIXES: .cpp
192
193 .cpp:
194 ${_MKTARGET_CREATE}
195 rm -f ${.TARGET}
196 ${CPP} -undef -traditional \
197 ${CPPSCRIPTFLAGS_${.TARGET}:U${CPPSCRIPTFLAGS}} \
198 < ${.IMPSRC} | ${X11TOOL_UNXCOMM} > ${.TARGET}
199
200 realall: ${CPPSCRIPTS}
201
202 clean: cleancppscripts
203 cleancppscripts: .PHONY
204 rm -f ${CPPSCRIPTS}
205 .endif # }
206
207 #
208 # X.Org pkgconfig files handling
209 #
210 # PKGCONFIG is expected to contain a list of pkgconfig module names.
211 # They will produce the files <module1>.pc, <module2>.pc, etc, to be
212 # put in X11USRLIBDIR/pkgconfig.
213 #
214 # PKGDIST contains the name of a X11SRCDIR subscript where to find the
215 # source file for the pkgconfig files.
216 #
217 # If PKGDIST is not suitable, a consumer can set PKGDIST.<module> with
218 # the full path to the source file.
219 #
220 # Also, the consumer can use PKGDIST alone, and a PKGCONFIG will be
221 # derived from it. Many times, PKGDIST is capitalized and PKGCONFIG is
222 # the lower case version.
223 #
224
225 .if defined(PKGDIST) && !defined(PKGCONFIG)
226 PKGCONFIG= ${PKGDIST:tl}
227 .endif
228 .if defined(PKGCONFIG)
229
230 .include <bsd.files.mk>
231
232 _PKGCONFIG_FILES= ${PKGCONFIG:C/$/.pc/}
233
234 .PHONY: pkgconfig-install
235 pkgconfig-install:
236
237 realall: ${_PKGCONFIG_FILES:O:u}
238 realinstall: pkgconfig-install
239
240 .for _pkg in ${PKGCONFIG:O:u}
241 PKGDIST.${_pkg}?= ${X11SRCDIR.${PKGDIST:U${_pkg}}}
242 _PKGDEST.${_pkg}= ${DESTDIR}/${X11USRLIBDIR}/pkgconfig/${_pkg}.pc
243
244 .PATH: ${PKGDIST.${_pkg}}
245
246 FILESOWN_${_pkg}.pc= ${BINOWN}
247 FILESGRP_${_pkg}.pc= ${BINGRP}
248 FILESMODE_${_pkg}.pc= ${NONBINMODE}
249
250 ${_PKGDEST.${_pkg}}: ${_pkg}.pc __fileinstall
251 pkgconfig-install: ${_PKGDEST.${_pkg}}
252 .endfor
253
254 # XXX
255 # The sed script is very, very ugly. What we actually need is a
256 # mknative-xorg script that will generate all the .pc files from
257 # running the autoconfigure script.
258 # And yes, it has to be splitted in two otherwise it's too long
259 # for sed to handle.
260
261 .SUFFIXES: .pc.in .pc
262 .pc.in.pc:
263 ${_MKTARGET_CREATE}
264 rm -f ${.TARGET}
265 if [ -n '${PKGCONFIG_VERSION.${.PREFIX}}' ]; then \
266 _pkg_version='${PKGCONFIG_VERSION.${.PREFIX}}'; \
267 else \
268 _pkg_version=$$(${PRINT_PACKAGE_VERSION} \
269 ${PKGDIST.${.PREFIX}}/configure); \
270 fi; \
271 ${TOOL_SED} \
272 -e "s,@prefix@,${X11ROOTDIR},; \
273 s,@INSTALL_DIR@,${X11ROOTDIR},; \
274 s,@exec_prefix@,\\$$\{prefix\},; \
275 s,@libdir@,\\$$\{prefix\}/lib,; \
276 s,@includedir@,\\$$\{prefix\}/include,; \
277 s,@datarootdir@,\\$$\{prefix\}/share,; \
278 s,@appdefaultdir@,\\$$\{libdir}/X11/app-default,; \
279 s,@MAPDIR@,\\$$\{libdir\}/X11/fonts/util,; \
280 s,@ICONDIR@,\\$$\{datarootdir\}/icons,; \
281 s,@PACKAGE_VERSION@,$${_pkg_version},; \
282 s,@VERSION@,$${_pkg_version},; \
283 s,@COMPOSITEEXT_VERSION@,$${_pkg_version%.*},; \
284 s,@DAMAGEEXT_VERSION@,$${_pkg_version%.*},; \
285 s,@FIXESEXT_VERSION@,$${_pkg_version%.*},; \
286 s,@RANDR_VERSION@,$${_pkg_version%.*},; \
287 s,@RENDER_VERSION@,$${_pkg_version%.*}," \
288 -e "s,@moduledir@,\\$$\{libdir\}/modules,; \
289 s,@sdkdir@,\\$$\{includedir\}/xorg,; \
290 s,@PIXMAN_CFLAGS@,,; \
291 s,@LIB_DIR@,/lib,; \
292 s,@XKBPROTO_REQUIRES@,kbproto,; \
293 s,@FREETYPE_REQUIRES@,freetype2,; \
294 s,@EXPAT_LIBS@,-lexpat,; \
295 s,@FREETYPE_LIBS@,-lfreetype,; \
296 s,@DEP_CFLAGS@,,; \
297 s,@DEP_LIBS@,,; \
298 s,@X11_EXTRA_DEPS@,,; \
299 s,@XTHREAD_CFLAGS@,-D_REENTRANT,; \
300 s,@XTHREADLIB@,-lpthread,; \
301 s,@fchown_define@,-DHAS_FCHOWN,; \
302 s,@sticky_bit_define@,-DHAS_STICKY_DIR_BIT," \
303 -e '/^Libs:/ s%-L\([^ ]*\)%-Wl,-R\1 &%g' \
304 < ${.IMPSRC} > ${.TARGET}.tmp && \
305 mv -f ${.TARGET}.tmp ${.TARGET}
306
307 CLEANFILES+= ${_PKGCONFIG_FILES} ${_PKGCONFIG_FILES:C/$/.tmp/}
308 .endif
309
310 #
311 # APPDEFS (app defaults) handling
312 #
313 .if defined(APPDEFS) # {
314 appdefsinstall:: .PHONY ${APPDEFS:@S@${DESTDIR}${X11LIBDIR}/app-defaults/${S:T:R}@}
315 .PRECIOUS: ${APPDEFS:@S@${DESTDIR}${X11LIBDIR}/app-defaults/${S:T:R}@}
316
317 __appdefinstall: .USE
318 ${_MKTARGET_INSTALL}
319 ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${NONBINMODE} \
320 ${.ALLSRC} ${.TARGET}
321
322 .for S in ${APPDEFS:O:u}
323 ${DESTDIR}${X11LIBDIR}/app-defaults/${S:T:R}: ${S} __appdefinstall
324 .endfor
325
326 realinstall: appdefsinstall
327 .endif # }
328
329
330 #
331 # .man page handling
332 #
333 .if (${MKMAN} != "no" && (${MAN:U} != "" || ${PROG:U} != "")) # {
334 cleandir: cleanx11man
335 cleanx11man: .PHONY
336 rm -f ${MAN:U${PROG:D${PROG.1}}}
337 .endif # }
338
339 .SUFFIXES: .man .man.pre .1 .3 .4 .5 .7
340
341 _X11MANTRANSFORM= \
342 __adminmansuffix__ 8 \
343 __apploaddir__ ${X11ROOTDIR}/lib/X11/app-defaults \
344 __appmansuffix__ 1 \
345 __bindir__ ${X11BINDIR} \
346 __drivermansuffix__ 4 \
347 __filemansuffix__ 5 \
348 __LIB_MAN_SUFFIX__ 3 \
349 __libmansuffix__ 3 \
350 __logdir__ /var/log \
351 __mandir__ ${X11MANDIR} \
352 __miscmansuffix__ 7 \
353 __oslibmansuffix__ 3 \
354 __projectroot__ ${X11ROOTDIR} \
355 ${X11EXTRAMANTRANSFORMS}
356
357 # Note the escaping trick for _X11MANTRANSFORM using % to replace spaces
358 .if ${MKXORG} == "no"
359 X11VERSION= "XFree86 4.5.0"
360 X11MANCPP?= yes
361 _X11MANTRANSFORM+= \
362 __vendorversion__ ${X11VERSION:C/ /%/gW}
363 .else
364 XORGVERSION= '"X.Org 7.3nb20081014" "X Version 11"'
365 X11MANCPP?= no
366 _X11MANTRANSFORM+= \
367 __vendorversion__ ${XORGVERSION:C/ /%/gW} \
368 __XCONFIGFILE__ xorg.conf \
369 __xconfigfile__ xorg.conf \
370 __xorgversion__ ${XORGVERSION:C/ /%/gW} \
371 __XSERVERNAME__ Xorg \
372 __xservername__ Xorg
373 .endif
374
375 _X11MANTRANSFORMCMD= ${TOOL_SED} -e 's/\\$$/\\ /' ${.IMPSRC}
376
377 .if ${X11MANCPP} != "no"
378 _X11MANTRANSFORMCMD+= | ${CPP} -undef -traditional
379 . for __def__ __value__ in ${_X11MANTRANSFORM}
380 _X11MANTRANSFORMCMD+= -D${__def__}=${__value__:C/%/ /gW}
381 . endfor
382 .else
383 _X11MANTRANSFORMCMD+= | ${TOOL_SED}
384 . for __def__ __value__ in ${_X11MANTRANSFORM}
385 _X11MANTRANSFORMCMD+= -e s,${__def__},${__value__:C/%/ /gW},g
386 . endfor
387 .endif
388 _X11MANTRANSFORMCMD+= ${X11EXTRAMANDEFS}
389
390 .man.1 .man.3 .man.4 .man.5 .man.7 .man.pre.1 .man.pre.4 .man.pre.5:
391 ${_MKTARGET_CREATE}
392 rm -f ${.TARGET}
393 ${_X11MANTRANSFORMCMD} | ${X11TOOL_UNXCOMM} > ${.TARGET}
394