1# $NetBSD: bsd.x11.mk,v 1.125 2018/03/04 23:47:55 christos Exp $ 2 3.include <bsd.init.mk> 4 5BINDIR= ${X11BINDIR} 6LIBDIR= ${X11USRLIBDIR} 7MANDIR= ${X11MANDIR} 8 9COPTS+= -fno-strict-aliasing 10 11.include <bsd.sys.mk> 12 13.if !defined(NOSSP) && (${USE_SSP:Uno} != "no") 14CPPFLAGS+= -DNO_ALLOCA 15.endif 16 17X11FLAGS.VERSION= -DOSMAJORVERSION=5 -DOSMINORVERSION=99 # XXX 18 19# THREADS_DEFINES 20X11FLAGS.THREADS= -DXTHREADS -D_REENTRANT -DXUSE_MTSAFE_API \ 21 -DXNO_MTSAFE_PWDAPI 22 23# CONNECTION_FLAGS 24X11FLAGS.CONNECTION= -DTCPCONN -DUNIXCONN -DHAS_STICKY_DIR_BIT \ 25 -DHAS_FCHOWN 26 27.if (${USE_INET6} != "no") 28X11FLAGS.CONNECTION+= -DIPv6 29.endif 30 31# EXT_DEFINES 32X11FLAGS.BASE_EXTENSION= -DMITMISC -DXTEST -DXTRAP -DXSYNC -DXCMISC \ 33 -DXRECORD -DMITSHM -DBIGREQS -DXF86VIDMODE \ 34 -DXF86MISC -DDPMSExtension -DEVI \ 35 -DSCREENSAVER -DXV -DXVMC -DGLXEXT \ 36 -DRES 37 38X11FLAGS.PERVASIVE_EXTENSION= -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP \ 39 -DXCSECURITY -DTOGCUP -DXF86BIGFONT \ 40 -DDPMSExtension -DPIXPRIV -DPANORAMIX \ 41 -DRENDER -DRANDR -DXFIXES -DDAMAGE \ 42 -DCOMPOSITE -DXEVIE 43X11FLAGS.EXTENSION= ${X11FLAGS.BASE_EXTENSION} \ 44 ${X11FLAGS.PERVASIVE_EXTENSION} 45 46X11FLAGS.DIX= -DHAVE_DIX_CONFIG_H -D_BSD_SOURCE -DHAS_FCHOWN \ 47 -DHAS_STICKY_DIR_BIT -D_POSIX_THREAD_SAFE_FUNCTIONS \ 48 -DHAVE_XORG_CONFIG_H 49X11INCS.DIX= -I${X11INCSDIR}/freetype2 \ 50 -I${X11INCSDIR}/pixman-1 \ 51 -I$(X11SRCDIR.xorg-server)/include \ 52 -I$(X11SRCDIR.xorg-server)/Xext \ 53 -I$(X11SRCDIR.xorg-server)/composite \ 54 -I$(X11SRCDIR.xorg-server)/damageext \ 55 -I$(X11SRCDIR.xorg-server)/xfixes \ 56 -I$(X11SRCDIR.xorg-server)/Xi \ 57 -I$(X11SRCDIR.xorg-server)/mi \ 58 -I$(X11SRCDIR.xorg-server)/miext/shadow \ 59 -I$(X11SRCDIR.xorg-server)/miext/damage \ 60 -I$(X11SRCDIR.xorg-server)/render \ 61 -I$(X11SRCDIR.xorg-server)/randr \ 62 -I$(X11SRCDIR.xorg-server)/fb \ 63 -I$(X11SRCDIR.xorg-server)/../include 64 65X11FLAGS.DRI= -DGLXEXT -DXF86DRI -DGLX_DIRECT_RENDERING \ 66 -DGLX_USE_DLOPEN -DGLX_USE_MESA 67 68.if ${X11DRI} != "no" 69X11FLAGS.EXTENSION+= ${X11FLAGS.DRI} 70.endif 71 72# ServerDefines 73X11FLAGS.SERVER= -DSHAPE -DXKB -DLBX -DXAPPGROUP -DXCSECURITY \ 74 -DTOGCUP -DXF86BIGFONT -DDPMSExtension -DPIXPRIV \ 75 -DPANORAMIX -DRENDER -DRANDR -DGCCUSESGAS \ 76 -DAVOID_GLYPHBLT -DSINGLEDEPTH -DXvExtension \ 77 -DXFree86Server -DXvMCExtension -DSMART_SCHEDULE \ 78 -DBUILDDEBUG -DXResExtension -DNDEBUG 79 80# OS_DEFINES 81X11FLAGS.OS_DEFINES= -DDDXOSINIT -DSERVER_LOCK -DDDXOSFATALERROR \ 82 -DDDXOSVERRORF -DDDXTIME -DUSB_HID 83 84.if !(${MACHINE} == "acorn32" || \ 85 ${MACHINE} == "amiga" || \ 86 ${MACHINE} == "pmax" || \ 87 ${MACHINE} == "sun3" || \ 88 ${MACHINE} == "x68k" || \ 89 ${MACHINE} == "vax") 90# EXT_DEFINES 91X11FLAGS.EXTENSION+= -DXF86VIDMODE 92 93X11FLAGS.DIX+= -DDBE -DXRECORD -DPRESENT 94 95# ServerDefines 96X11FLAGS.SERVER+= -DXINPUT -DXFreeXDGA -DXF86VIDMODE -DXSERVER_LIBPCIACCESS 97.endif 98 99.if ${MACHINE_ARCH} == "alpha" || \ 100 ${MACHINE_ARCH} == "ia64" || \ 101 ${MACHINE_ARCH} == "powerpc64" || \ 102 ${MACHINE_ARCH} == "sparc64" || \ 103 ${MACHINE_ARCH} == "x86_64" || \ 104 ${MACHINE_CPU} == "aarch64" 105# ServerDefines 106X11FLAGS.SERVER+= -D_XSERVER64 107X11FLAGS.EXTENSION+= -D__GLX_ALIGN64 108.endif 109 110.if ${MACHINE} == "amd64" || \ 111 ${MACHINE} == "cats" || \ 112 ${MACHINE} == "i386" || \ 113 ${MACHINE} == "macppc" || \ 114 ${MACHINE} == "netwinder" || \ 115 ${MACHINE} == "ofppc" || \ 116 ${MACHINE} == "prep" || \ 117 ${MACHINE} == "sgimips" || \ 118 ${MACHINE} == "sparc64" || \ 119 ${MACHINE} == "sparc" || \ 120 ${MACHINE} == "shark" || \ 121 ${MACHINE} == "zaurus" 122# LOADABLE 123.if ${XORG_SERVER_SUBDIR:Uxorg-server.old} == "xorg-server.old" 124X11FLAGS.LOADABLE= -DXFree86LOADER 125.endif 126X11FLAGS.LOADABLE+= ${${ACTIVE_CXX} == "gcc":? -fno-merge-constants :} 127.endif 128 129# XXX FIX ME 130XORG_SERVER_MAJOR= 1 131.if ${XORG_SERVER_SUBDIR:Uxorg-server.old} == "xorg-server.old" 132XORG_SERVER_MINOR= 10 133XORG_SERVER_TEENY= 6 134.else 135XORG_SERVER_MINOR= 18 136XORG_SERVER_TEENY= 4 137.endif 138 139XVENDORNAMESHORT= '"X.Org"' 140XVENDORNAME= '"The X.Org Foundation"' 141XORG_RELEASE= '"Release ${XORG_SERVER_MAJOR}.${XORG_SERVER_MINOR}.${XORG_SERVER_TEENY}"' 142__XKBDEFRULES__= '"xorg"' 143XLOCALE.DEFINES= -DXLOCALEDIR=\"${X11LIBDIR}/locale\" \ 144 -DXLOCALELIBDIR=\"${X11LIBDIR}/locale\" 145 146XORG_VERSION_CURRENT="(((${XORG_SERVER_MAJOR}) * 10000000) + ((${XORG_SERVER_MINOR}) * 100000) + ((${XORG_SERVER_TEENY}) * 1000) + 0)" 147 148PRINT_PACKAGE_VERSION= awk '/^PACKAGE_VERSION=/ { \ 149 match($$1, "([0-9]+\\.)+[0-9]+"); \ 150 version = substr($$1, RSTART, RLENGTH); \ 151 } END { print version }' 152 153 154# Commandline to convert 'XCOMM' comments and 'XHASH' to '#', among other 155# things. Transformed from the "CppSedMagic" macro from "Imake.rules". 156# 157X11TOOL_UNXCOMM= ${TOOL_SED} -e '/^\# *[0-9][0-9]* *.*$$/d' \ 158 -e '/^\#line *[0-9][0-9]* *.*$$/d' \ 159 -e '/^[ ]*XCOMM$$/s/XCOMM/\#/' \ 160 -e '/^[ ]*XCOMM[^a-zA-Z0-9_]/s/XCOMM/\#/' \ 161 -e '/^[ ]*XHASH/s/XHASH/\#/' \ 162 -e '/\@\@$$/s/\@\@$$/\\/' 163 164 165CPPFLAGS+= -DCSRG_BASED -DFUNCPROTO=15 -DNARROWPROTO 166CPPFLAGS+= -I${DESTDIR}${X11INCDIR} 167 168.if ${MACHINE_ARCH} == "x86_64" 169CPPFLAGS+= -D__AMD64__ 170.endif 171 172LDFLAGS+= -Wl,-rpath,${X11USRLIBDIR} -L=${X11USRLIBDIR} 173 174 175# 176# .cpp -> "" handling 177# CPPSCRIPTS list of files/scripts to run through cpp 178# CPPSCRIPTFLAGS extra flags to ${CPP} 179# CPPSCRIPTFLAGS_fn extra flags to ${CPP} for file `fn' 180# 181.if defined(CPPSCRIPTS) # { 182.SUFFIXES: .cpp 183 184.cpp: 185 ${_MKTARGET_CREATE} 186 rm -f ${.TARGET} 187 ${CC} -E -undef -traditional - \ 188 ${CPPSCRIPTFLAGS_${.TARGET}:U${CPPSCRIPTFLAGS}} \ 189 < ${.IMPSRC} | ${X11TOOL_UNXCOMM} > ${.TARGET} 190 191realall: ${CPPSCRIPTS} 192 193CLEANFILES+= ${CPPSCRIPTS} 194.endif # } 195 196# 197# X.Org pkgconfig files handling 198# 199# PKGCONFIG is expected to contain a list of pkgconfig module names. 200# They will produce the files <module1>.pc, <module2>.pc, etc, to be 201# put in X11USRLIBDIR/pkgconfig. 202# 203# PKGDIST contains the name of a X11SRCDIR subscript where to find the 204# source file for the pkgconfig files. 205# 206# If PKGDIST is not suitable, a consumer can set PKGDIST.<module> with 207# the full path to the source file. 208# 209# Also, the consumer can use PKGDIST alone, and a PKGCONFIG will be 210# derived from it. Many times, PKGDIST is capitalized and PKGCONFIG is 211# the lower case version. 212# 213 214.if defined(PKGDIST) && !defined(PKGCONFIG) 215PKGCONFIG= ${PKGDIST:tl} 216.endif 217.if defined(PKGCONFIG) && !defined(MLIBDIR) 218 219.include <bsd.files.mk> 220 221_PKGCONFIG_FILES= ${PKGCONFIG:C/$/.pc/} 222 223.PHONY: pkgconfig-install 224pkgconfig-install: 225 226realall: ${_PKGCONFIG_FILES:O:u} 227realinstall: pkgconfig-install 228 229.for _pkg in ${PKGCONFIG:O:u} # { 230 231PKGDIST.${_pkg}?= ${X11SRCDIR.${PKGDIST:U${_pkg}}} 232_PKGDEST.${_pkg}= ${DESTDIR}${X11USRLIBDIR}/pkgconfig/${_pkg}.pc 233 234.PATH: ${PKGDIST.${_pkg}} 235 236FILESOWN_${_pkg}.pc= ${BINOWN} 237FILESGRP_${_pkg}.pc= ${BINGRP} 238FILESMODE_${_pkg}.pc= ${NONBINMODE} 239 240${_PKGDEST.${_pkg}}: ${_pkg}.pc __fileinstall 241pkgconfig-install: ${_PKGDEST.${_pkg}} 242 243# Add a dependancy on the configure file if it exists; this way we 244# will rebuild the .pc file if the version in configure changes. 245.if exists(${PKGDIST.${_pkg}}/configure) 246${_pkg}.pc: ${PKGDIST.${_pkg}}/configure Makefile 247.endif 248 249.endfor # } 250 251# XXX 252# The sed script is very, very ugly. What we actually need is a 253# mknative-xorg script that will generate all the .pc files from 254# running the autoconfigure script. 255# And yes, it has to be split in multiple parts otherwise it's 256# too long for sed to handle. 257 258# hacky transforms: 259# @XCBPROTO_VERSION@ 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 ${PKGCONFIG_SED_FLAGS} \ 273 -e "s,@prefix@,${X11ROOTDIR},; \ 274 s,@INSTALL_DIR@,${X11ROOTDIR},; \ 275 s,@exec_prefix@,\\$$\{prefix\},; \ 276 s,@libdir@,\\$$\{prefix\}/lib,; \ 277 s,@includedir@,\\$$\{prefix\}/include,; \ 278 s,@datarootdir@,\\$$\{prefix\}/share,; \ 279 s,@datadir@,\\$$\{datarootdir\},; \ 280 s,@appdefaultdir@,\\$$\{libdir}/X11/app-defaults,; \ 281 s,@MAPDIR@,\\$$\{libdir\}/X11/fonts/util,; \ 282 s,@ICONDIR@,\\$$\{datarootdir\}/icons,; \ 283 s,@PACKAGE_VERSION@,$${_pkg_version},; \ 284 s,@VERSION@,$${_pkg_version},; \ 285 s,@COMPOSITEEXT_VERSION@,$${_pkg_version%.*},; \ 286 s,@DAMAGEEXT_VERSION@,$${_pkg_version%.*},; \ 287 s,@FIXESEXT_VERSION@,$${_pkg_version%.*},; \ 288 s,@PRESENTEXT_VERSION@,$${_pkg_version%.*},; \ 289 s,@RANDR_VERSION@,$${_pkg_version%.*},; \ 290 s,@RENDER_VERSION@,$${_pkg_version%.*}," \ 291 -e "s,@LIBS@,,; \ 292 s,@Z_LIBS@,-lz,; \ 293 s,@LIBZ@,-lz,; \ 294 s,@LIBBZ2@,-lbz2,; \ 295 s,@xkb_base@,\\$$\{prefix\}/lib/X11/xkb,; \ 296 s,@xcbincludedir@,\\$$\{prefix\}/share/xcb,; \ 297 s,@fontrootdir@,\\$$\{libdir\}/X11/fonts,; \ 298 s,@LIBXML2_LIBS@,,; \ 299 s,@LIBXML2_CFLAGS@,,; \ 300 s,@ICONV_CFLAGS@,,; \ 301 s,@ICONV_LIBS@,,; \ 302 s,@NEEDED@,,; \ 303 s,@FT2_EXTRA_LIBS@,," \ 304 -e "s,@moduledir@,\\$$\{libdir\}/modules,; \ 305 s,@sdkdir@,\\$$\{includedir\}/xorg,; \ 306 s,@PIXMAN_CFLAGS@,,; \ 307 s,@LIB_DIR@,/lib,; \ 308 s,@INSTALL_LIB_DIR@,\\$$\{prefix\}/lib,; \ 309 s,@INSTALL_INC_DIR@,\\$$\{prefix\}/include,; \ 310 s,@XKBPROTO_REQUIRES@,kbproto,; \ 311 s,@XCBPROTO_VERSION@,1.7,; \ 312 s,@FREETYPE_REQUIRES@,freetype2,; \ 313 s,@EXPAT_LIBS@,-lexpat,; \ 314 s,@FREETYPE_LIBS@,-lfreetype,; \ 315 s,@DEP_CFLAGS@,,; \ 316 s,@DEP_LIBS@,,; \ 317 s,@X11_EXTRA_DEPS@,,; \ 318 s,@XTHREAD_CFLAGS@,-D_REENTRANT,; \ 319 s,@XTHREADLIB@,-lpthread,; \ 320 s,@GL_LIB@,GL,; \ 321 s,@GL_PC_REQ_PRIV@,x11 xext,; \ 322 s,@GL_PC_LIB_PRIV@,-lm -lpthread,; \ 323 s,@GL_PC_CFLAGS@,,; \ 324 s,@GLX_TLS@,no," \ 325 -e "s,@GLU_LIB@,GLU,; \ 326 s,@GLU_PC_REQ@,gl,; \ 327 s,@GLU_PC_REQ_PRIV@,,; \ 328 s,@GLU_PC_LIB_PRIV@,-lGLU,; \ 329 s,@GLU_PC_CFLAGS@,,; \ 330 s,@GLUT_LIB@,glut,; \ 331 s,@GLUT_PC_REQ_PRIV@,gl glu,; \ 332 s,@GLUT_PC_LIB_PRIV@,-lglut,; \ 333 s,@GLUT_PC_CFLAGS@,,; \ 334 s,@GLW_PC_CFLAGS@,,; \ 335 s,@GLW_PC_REQ_PRIV@,x11 xt,; \ 336 s,@GLW_PC_LIB_PRIV@,,; \ 337 s,@DRI_DRIVER_DIR@,\\$$\{libdir\}/modules/dri,; \ 338 s,@DRI_PC_REQ_PRIV@,,; \ 339 s,@GLW_LIB@,GLw,; \ 340 s,@GBM_PC_REQ_PRIV@,,; \ 341 s,@GBM_PC_LIB_PRIV@,,; \ 342 s,@abi_ansic@,0.4,; \ 343 s,@abi_videodrv@,5.0,; \ 344 s,@abi_xinput@,4.0,; \ 345 s,@abi_extension@,2.0,; \ 346 s,@abi_font@,0.6,; \ 347 s,@fchown_define@,-DHAS_FCHOWN,; \ 348 s,@sticky_bit_define@,-DHAS_STICKY_DIR_BIT,;" \ 349 -e "s,@PKG_CONFIG_LIBS@,${PKG_CONFIG_LIBS},; \ 350 s,@PACKAGE@,${PKGDIST},; \ 351 s,@PKGCONFIG_REQUIRES@,${PKGCONFIG_REQUIRES},; \ 352 s,@PKGCONFIG_REQUIRES_PRIVATELY@,${PKGCONFIG_REQUIRES_PRIVATELY},; \ 353 s,@ERRORDBDIR@,${X11LIBDIR},; \ 354 s,@EXPAT_CFLAGS@,,; \ 355 s,@FREETYPE_CFLAGS@,-I${X11ROOTDIR}/include/freetype2 -I${X11ROOTDIR}/include,;" \ 356 -e '/^Libs:/ s%-L\([^ ]*\)%-Wl,-rpath,\1 &%g' \ 357 < ${.IMPSRC} > ${.TARGET}.tmp && \ 358 mv -f ${.TARGET}.tmp ${.TARGET} 359 360CLEANFILES+= ${_PKGCONFIG_FILES} ${_PKGCONFIG_FILES:C/$/.tmp/} 361.endif 362 363# 364# APPDEFS (app defaults) handling 365# 366.if defined(APPDEFS) # { 367appdefsinstall:: .PHONY ${APPDEFS:@S@${DESTDIR}${X11LIBDIR}/app-defaults/${S:T:R}@} 368.PRECIOUS: ${APPDEFS:@S@${DESTDIR}${X11LIBDIR}/app-defaults/${S:T:R}@} 369 370__appdefinstall: .USE 371 ${_MKTARGET_INSTALL} 372 ${INSTALL_FILE} -o ${BINOWN} -g ${BINGRP} -m ${NONBINMODE} \ 373 ${.ALLSRC} ${.TARGET} 374 375.for S in ${APPDEFS:O:u} 376${DESTDIR}${X11LIBDIR}/app-defaults/${S:T:R}: ${S} __appdefinstall 377.endfor 378 379realinstall: appdefsinstall 380.endif # } 381 382 383# 384# .man page handling 385# 386.if (${MKMAN} != "no" && (${MAN:U} != "" || ${PROG:U} != "")) # { 387CLEANDIRFILES+= ${MAN:U${PROG:D${PROG.1}}} 388.endif # } 389 390.SUFFIXES: .man .man.pre .1 .3 .4 .5 .7 391 392_X11MANTRANSFORM= \ 393 __adminmansuffix__ 8 \ 394 __apploaddir__ ${X11ROOTDIR}/lib/X11/app-defaults \ 395 __appmansuffix__ 1 \ 396 __bindir__ ${X11BINDIR} \ 397 __drivermansuffix__ 4 \ 398 __filemansuffix__ 5 \ 399 __LIB_MAN_SUFFIX__ 3 \ 400 __libmansuffix__ 3 \ 401 __logdir__ /var/log \ 402 __mandir__ ${X11MANDIR} \ 403 __miscmansuffix__ 7 \ 404 __oslibmansuffix__ 3 \ 405 __projectroot__ ${X11ROOTDIR} \ 406 ${X11EXTRAMANTRANSFORMS} 407 408# Note the escaping trick for _X11MANTRANSFORM using % to replace spaces 409XORGVERSION= '"X Version 11"' 410X11MANCPP?= no 411_X11MANTRANSFORM+= \ 412 __vendorversion__ ${XORGVERSION:C/ /%/gW} \ 413 __XCONFIGFILE__ xorg.conf \ 414 __xconfigfile__ xorg.conf \ 415 __XCONFIGFILEMAN__ '__XCONFIGFILE__%(__filemansuffix__)' \ 416 __xorgversion__ ${XORGVERSION:C/ /%/gW} \ 417 __XSERVERNAME__ Xorg \ 418 __xservername__ Xorg 419 420_X11MANTRANSFORMCMD= ${TOOL_SED} -e 's/\\$$/\\ /' ${.IMPSRC} 421 422.if ${X11MANCPP} != "no" 423_X11MANTRANSFORMCMD+= | ${CC} -E -undef -traditional - 424. for __def__ __value__ in ${_X11MANTRANSFORM} 425_X11MANTRANSFORMCMD+= -D${__def__}=${__value__:C/%/ /gW} 426. endfor 427.else 428_X11MANTRANSFORMCMD+= | ${TOOL_SED} 429. for __def__ __value__ in ${_X11MANTRANSFORM} 430_X11MANTRANSFORMCMD+= -e s,${__def__},${__value__:C/%/ /gW},g 431. endfor 432.endif 433_X11MANTRANSFORMCMD+= ${X11EXTRAMANDEFS} 434 435.man.1 .man.3 .man.4 .man.5 .man.7 .man.pre.1 .man.pre.4 .man.pre.5: 436 ${_MKTARGET_CREATE} 437 rm -f ${.TARGET} 438 ${_X11MANTRANSFORMCMD} | ${X11TOOL_UNXCOMM} > ${.TARGET} 439 440##### Pull in related .mk logic 441.include <bsd.clean.mk> 442