Makefile revision 313790
1# 2# $FreeBSD: stable/10/Makefile 313790 2017-02-16 05:14:07Z ngie $ 3# 4# The user-driven targets are: 5# 6# universe - *Really* build *everything* (buildworld and 7# all kernels on all architectures). 8# tinderbox - Same as universe, but presents a list of failed build 9# targets and exits with an error if there were any. 10# buildworld - Rebuild *everything*, including glue to help do 11# upgrades. 12# installworld - Install everything built by "buildworld". 13# world - buildworld + installworld, no kernel. 14# buildkernel - Rebuild the kernel and the kernel-modules. 15# installkernel - Install the kernel and the kernel-modules. 16# installkernel.debug 17# reinstallkernel - Reinstall the kernel and the kernel-modules. 18# reinstallkernel.debug 19# kernel - buildkernel + installkernel. 20# kernel-toolchain - Builds the subset of world necessary to build a kernel 21# kernel-toolchains - Build kernel-toolchain for all universe targets. 22# doxygen - Build API documentation of the kernel, needs doxygen. 23# update - Convenient way to update your source tree(s). 24# checkworld - Run test suite on installed world. 25# check-old - List obsolete directories/files/libraries. 26# check-old-dirs - List obsolete directories. 27# check-old-files - List obsolete files. 28# check-old-libs - List obsolete libraries. 29# delete-old - Delete obsolete directories/files. 30# delete-old-dirs - Delete obsolete directories. 31# delete-old-files - Delete obsolete files. 32# delete-old-libs - Delete obsolete libraries. 33# targets - Print a list of supported TARGET/TARGET_ARCH pairs 34# for world and kernel targets. 35# toolchains - Build a toolchain for all world and kernel targets. 36# xdev - xdev-build + xdev-install for the architecture 37# specified with XDEV and XDEV_ARCH. 38# xdev-build - Build cross-development tools. 39# xdev-install - Install cross-development tools. 40# native-xtools - Create host binaries that produce target objects 41# for use in qemu user-mode jails. 42# 43# "quick" way to test all kernel builds: 44# _jflag=`sysctl -n hw.ncpu` 45# _jflag=$(($_jflag * 2)) 46# [ $_jflag -gt 12 ] && _jflag=12 47# make universe -DMAKE_JUST_KERNELS JFLAG=-j${_jflag} 48# 49# This makefile is simple by design. The FreeBSD make automatically reads 50# the /usr/share/mk/sys.mk unless the -m argument is specified on the 51# command line. By keeping this makefile simple, it doesn't matter too 52# much how different the installed mk files are from those in the source 53# tree. This makefile executes a child make process, forcing it to use 54# the mk files from the source tree which are supposed to DTRT. 55# 56# Most of the user-driven targets (as listed above) are implemented in 57# Makefile.inc1. The exceptions are universe, tinderbox and targets. 58# 59# If you want to build your system from source be sure that /usr/obj has 60# at least 1GB of diskspace available. A complete 'universe' build requires 61# about 15GB of space. 62# 63# For individuals wanting to build from the sources currently on their 64# system, the simple instructions are: 65# 66# 1. `cd /usr/src' (or to the directory containing your source tree). 67# 2. Define `HISTORICAL_MAKE_WORLD' variable (see README). 68# 3. `make world' 69# 70# For individuals wanting to upgrade their sources (even if only a 71# delta of a few days): 72# 73# 1. `cd /usr/src' (or to the directory containing your source tree). 74# 2. `make buildworld' 75# 3. `make buildkernel KERNCONF=YOUR_KERNEL_HERE' (default is GENERIC). 76# 4. `make installkernel KERNCONF=YOUR_KERNEL_HERE' (default is GENERIC). 77# [steps 3. & 4. can be combined by using the "kernel" target] 78# 5. `reboot' (in single user mode: boot -s from the loader prompt). 79# 6. `mergemaster -p' 80# 7. `make installworld' 81# 8. `mergemaster' (you may wish to use -i, along with -U or -F). 82# 9. `make delete-old' 83# 10. `reboot' 84# 11. `make delete-old-libs' (in case no 3rd party program uses them anymore) 85# 86# See src/UPDATING `COMMON ITEMS' for more complete information. 87# 88# If TARGET=machine (e.g. ia64, sparc64, ...) is specified you can 89# cross build world for other machine types using the buildworld target, 90# and once the world is built you can cross build a kernel using the 91# buildkernel target. 92# 93# Define the user-driven targets. These are listed here in alphabetical 94# order, but that's not important. 95# 96# Targets that begin with underscore are internal targets intended for 97# developer convenience only. They are intentionally not documented and 98# completely subject to change without notice. 99# 100# For more information, see the build(7) manual page. 101# 102TGTS= all all-man buildenv buildenvvars buildkernel buildworld \ 103 check check-old check-old-dirs check-old-files check-old-libs \ 104 checkdpadd checkworld clean cleandepend cleandir \ 105 delete-old delete-old-dirs delete-old-files delete-old-libs \ 106 depend distribute distributekernel distributekernel.debug \ 107 distributeworld distrib-dirs distribution doxygen \ 108 everything hier hierarchy install installcheck installkernel \ 109 installkernel.debug packagekernel packageworld \ 110 reinstallkernel reinstallkernel.debug \ 111 installworld kernel-toolchain libraries lint maninstall \ 112 obj objlink rerelease showconfig tags toolchain update \ 113 _worldtmp _legacy _bootstrap-tools _cleanobj _obj \ 114 _build-tools _cross-tools _includes _libraries _depend \ 115 build32 builddtb distribute32 install32 xdev xdev-build xdev-install \ 116 native-xtools \ 117 118TGTS+= ${SUBDIR_TARGETS} 119 120BITGTS= files includes 121BITGTS:=${BITGTS} ${BITGTS:S/^/build/} ${BITGTS:S/^/install/} 122TGTS+= ${BITGTS} 123 124.ORDER: buildworld installworld 125.ORDER: buildworld distributeworld 126.ORDER: buildworld buildkernel 127.ORDER: installworld distribution 128.ORDER: installworld installkernel 129.ORDER: buildkernel installkernel 130.ORDER: buildkernel installkernel.debug 131.ORDER: buildkernel reinstallkernel 132.ORDER: buildkernel reinstallkernel.debug 133 134PATH= /sbin:/bin:/usr/sbin:/usr/bin 135MAKEOBJDIRPREFIX?= /usr/obj 136_MAKEOBJDIRPREFIX!= /usr/bin/env -i PATH=${PATH} ${MAKE} \ 137 ${.MAKEFLAGS:MMAKEOBJDIRPREFIX=*} __MAKE_CONF=${__MAKE_CONF} \ 138 -f /dev/null -V MAKEOBJDIRPREFIX dummy 139.if !empty(_MAKEOBJDIRPREFIX) 140.error MAKEOBJDIRPREFIX can only be set in environment, not as a global\ 141 (in make.conf(5)) or command-line variable. 142.endif 143 144# We often need to use the tree's version of make to build it. 145# Choices add to complexity though. 146# We cannot blindly use a make which may not be the one we want 147# so be exlicit - until all choice is removed. 148.if !defined(WITHOUT_BMAKE) 149WANT_MAKE= bmake 150.else 151WANT_MAKE= fmake 152.endif 153MYMAKE= ${MAKEOBJDIRPREFIX}${.CURDIR}/make.${MACHINE}/${WANT_MAKE} 154.if defined(.PARSEDIR) 155HAVE_MAKE= bmake 156.else 157HAVE_MAKE= fmake 158.endif 159.if ${HAVE_MAKE} != ${WANT_MAKE} || \ 160 (defined(WANT_MAKE_VERSION) && ${MAKE_VERSION} < ${WANT_MAKE_VERSION}) 161NEED_MAKE_UPGRADE= t 162.endif 163.if exists(${MYMAKE}) 164SUB_MAKE:= ${MYMAKE} -m ${.CURDIR}/share/mk 165.elif defined(NEED_MAKE_UPGRADE) || ${WANT_MAKE} != "bmake" 166# It may not exist yet but we may cause it to. 167# In the case of fmake, upgrade_checks may cause a newer version to be built. 168SUB_MAKE= `test -x ${MYMAKE} && echo ${MYMAKE} || echo ${MAKE}` \ 169 -m ${.CURDIR}/share/mk 170.else 171SUB_MAKE= ${MAKE} -m ${.CURDIR}/share/mk 172.endif 173 174_MAKE= PATH=${PATH} ${SUB_MAKE} -f Makefile.inc1 TARGET=${_TARGET} TARGET_ARCH=${_TARGET_ARCH} 175 176# Guess machine architecture from machine type, and vice versa. 177.if !defined(TARGET_ARCH) && defined(TARGET) 178_TARGET_ARCH= ${TARGET:S/pc98/i386/} 179.elif !defined(TARGET) && defined(TARGET_ARCH) && \ 180 ${TARGET_ARCH} != ${MACHINE_ARCH} 181_TARGET= ${TARGET_ARCH:C/mips(n32|64)?(el)?/mips/:C/arm(v6)?(eb)?/arm/} 182.endif 183# Legacy names, for another transition period mips:mips(n32|64)?eb -> mips:mips\1 184.if defined(TARGET) && defined(TARGET_ARCH) && \ 185 ${TARGET} == "mips" && ${TARGET_ARCH:Mmips*eb} 186_TARGET_ARCH= ${TARGET_ARCH:C/eb$//} 187.warning "TARGET_ARCH of ${TARGET_ARCH} is deprecated in favor of ${_TARGET_ARCH}" 188.endif 189.if defined(TARGET) && ${TARGET} == "mips" && defined(TARGET_BIG_ENDIAN) 190.warning "TARGET_BIG_ENDIAN is no longer necessary for MIPS. Big-endian is not the default." 191.endif 192# arm with TARGET_BIG_ENDIAN -> armeb 193.if defined(TARGET_ARCH) && ${TARGET_ARCH} == "arm" && defined(TARGET_BIG_ENDIAN) 194.warning "TARGET_ARCH of arm with TARGET_BIG_ENDIAN is deprecated. use armeb" 195_TARGET_ARCH=armeb 196.endif 197.if defined(TARGET) && !defined(_TARGET) 198_TARGET=${TARGET} 199.endif 200.if defined(TARGET_ARCH) && !defined(_TARGET_ARCH) 201_TARGET_ARCH=${TARGET_ARCH} 202.endif 203# Otherwise, default to current machine type and architecture. 204_TARGET?= ${MACHINE} 205_TARGET_ARCH?= ${MACHINE_ARCH} 206 207# 208# Make sure we have an up-to-date make(1). Only world and buildworld 209# should do this as those are the initial targets used for upgrades. 210# The user can define ALWAYS_CHECK_MAKE to have this check performed 211# for all targets. 212# 213.if defined(ALWAYS_CHECK_MAKE) || !defined(.PARSEDIR) 214${TGTS}: upgrade_checks 215.else 216buildworld: upgrade_checks 217.endif 218 219# 220# This 'cleanworld' target is not included in TGTS, because it is not a 221# recursive target. All of the work for it is done right here. It is 222# expected that BW_CANONICALOBJDIR == the CANONICALOBJDIR as would be 223# created by bsd.obj.mk, except that we don't want to .include that file 224# in this makefile. 225# 226# In the following, the first 'rm' in a series will usually remove all 227# files and directories. If it does not, then there are probably some 228# files with file flags set, so this unsets them and tries the 'rm' a 229# second time. There are situations where this target will be cleaning 230# some directories via more than one method, but that duplication is 231# needed to correctly handle all the possible situations. Removing all 232# files without file flags set in the first 'rm' instance saves time, 233# because 'chflags' will need to operate on fewer files afterwards. 234# 235BW_CANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR} 236cleanworld: 237.if ${.CURDIR} == ${.OBJDIR} || ${.CURDIR}/obj == ${.OBJDIR} 238.if exists(${BW_CANONICALOBJDIR}/) 239 -rm -rf ${BW_CANONICALOBJDIR}/* 240 -chflags -R 0 ${BW_CANONICALOBJDIR} 241 rm -rf ${BW_CANONICALOBJDIR}/* 242.endif 243 # To be safe in this case, fall back to a 'make cleandir' 244 ${_+_}@cd ${.CURDIR}; ${_MAKE} cleandir 245.else 246 -rm -rf ${.OBJDIR}/* 247 -chflags -R 0 ${.OBJDIR} 248 rm -rf ${.OBJDIR}/* 249.endif 250 251# 252# Handle the user-driven targets, using the source relative mk files. 253# 254 255.if !(!empty(.MAKEFLAGS:M-n) && ${.MAKEFLAGS:M-n} == "-n") 256# skip this for -n to avoid changing previous behavior of 257# 'make -n buildworld' etc. Using -n -n will run it. 258${TGTS}: .MAKE 259tinderbox toolchains kernel-toolchains: .MAKE 260.endif 261 262${TGTS}: .PHONY 263 ${_+_}@cd ${.CURDIR}; ${_MAKE} ${.TARGET} 264 265# The historic default "all" target creates files which may cause stale 266# or (in the cross build case) unlinkable results. Fail with an error 267# when no target is given. The users can explicitly specify "all" 268# if they want the historic behavior. 269.MAIN: _guard 270 271_guard: 272 @echo 273 @echo "Explicit target required (use \"all\" for historic behavior)" 274 @echo 275 @false 276 277STARTTIME!= LC_ALL=C date 278CHECK_TIME!= find ${.CURDIR}/sys/sys/param.h -mtime -0s ; echo 279.if !empty(CHECK_TIME) 280.error check your date/time: ${STARTTIME} 281.endif 282 283.if defined(HISTORICAL_MAKE_WORLD) || defined(DESTDIR) 284# 285# world 286# 287# Attempt to rebuild and reinstall everything. This target is not to be 288# used for upgrading an existing FreeBSD system, because the kernel is 289# not included. One can argue that this target doesn't build everything 290# then. 291# 292world: upgrade_checks 293 @echo "--------------------------------------------------------------" 294 @echo ">>> make world started on ${STARTTIME}" 295 @echo "--------------------------------------------------------------" 296.if target(pre-world) 297 @echo 298 @echo "--------------------------------------------------------------" 299 @echo ">>> Making 'pre-world' target" 300 @echo "--------------------------------------------------------------" 301 ${_+_}@cd ${.CURDIR}; ${_MAKE} pre-world 302.endif 303 ${_+_}@cd ${.CURDIR}; ${_MAKE} buildworld 304 ${_+_}@cd ${.CURDIR}; ${_MAKE} -B installworld 305.if target(post-world) 306 @echo 307 @echo "--------------------------------------------------------------" 308 @echo ">>> Making 'post-world' target" 309 @echo "--------------------------------------------------------------" 310 ${_+_}@cd ${.CURDIR}; ${_MAKE} post-world 311.endif 312 @echo 313 @echo "--------------------------------------------------------------" 314 @echo ">>> make world completed on `LC_ALL=C date`" 315 @echo " (started ${STARTTIME})" 316 @echo "--------------------------------------------------------------" 317.else 318world: 319 @echo "WARNING: make world will overwrite your existing FreeBSD" 320 @echo "installation without also building and installing a new" 321 @echo "kernel. This can be dangerous. Please read the handbook," 322 @echo "'Rebuilding world', for how to upgrade your system." 323 @echo "Define DESTDIR to where you want to install FreeBSD," 324 @echo "including /, to override this warning and proceed as usual." 325 @echo "" 326 @echo "Bailing out now..." 327 @false 328.endif 329 330# 331# kernel 332# 333# Short hand for `make buildkernel installkernel' 334# 335kernel: buildkernel installkernel 336 337# 338# Perform a few tests to determine if the installed tools are adequate 339# for building the world. 340# 341upgrade_checks: 342.if defined(NEED_MAKE_UPGRADE) 343 @${_+_}(cd ${.CURDIR} && ${MAKE} ${WANT_MAKE:S,^f,,}) 344.elif ${WANT_MAKE} == "fmake" 345 @if ! (cd ${.CURDIR}/tools/build/make_check && \ 346 PATH=${PATH} ${BINMAKE} obj >/dev/null 2>&1 && \ 347 PATH=${PATH} ${BINMAKE} >/dev/null 2>&1); \ 348 then \ 349 (cd ${.CURDIR} && ${MAKE} make); \ 350 fi 351.endif 352 353# 354# Upgrade make(1) to the current version using the installed 355# headers, libraries and tools. Also, allow the location of 356# the system bsdmake-like utility to be overridden. 357# 358MMAKEENV= MAKEOBJDIRPREFIX=${MYMAKE:H} \ 359 DESTDIR= \ 360 INSTALL="sh ${.CURDIR}/tools/install.sh" 361MMAKE= ${MMAKEENV} ${MAKE} \ 362 -D_UPGRADING \ 363 -DNOMAN -DNO_MAN -DNOSHARED -DNO_SHARED \ 364 -DNO_CPU_CFLAGS -DNO_WERROR \ 365 DESTDIR= -DNO_TESTS PROGNAME=${MYMAKE:T} 366 367make bmake: .PHONY 368 @echo 369 @echo "--------------------------------------------------------------" 370 @echo ">>> Building an up-to-date make(1)" 371 @echo "--------------------------------------------------------------" 372 ${_+_}@cd ${.CURDIR}/usr.bin/${.TARGET}; \ 373 ${MMAKE} obj; \ 374 ${MMAKE} depend; \ 375 ${MMAKE} all; \ 376 ${MMAKE} install DESTDIR=${MYMAKE:H} BINDIR= 377 378regress: .PHONY 379 @echo "'make regress' has been renamed 'make check'" | /usr/bin/fmt 380 @false 381 382tinderbox toolchains kernel-toolchains: upgrade_checks 383 384tinderbox: 385 @cd ${.CURDIR}; ${SUB_MAKE} DOING_TINDERBOX=YES universe 386 387toolchains: 388 @cd ${.CURDIR}; ${SUB_MAKE} UNIVERSE_TARGET=toolchain universe 389 390kernel-toolchains: 391 @cd ${.CURDIR}; ${SUB_MAKE} UNIVERSE_TARGET=kernel-toolchain universe 392 393# 394# universe 395# 396# Attempt to rebuild *everything* for all supported architectures, 397# with a reasonable chance of success, regardless of how old your 398# existing system is. 399# 400.if make(universe) || make(universe_kernels) || make(tinderbox) || make(targets) 401TARGETS?=amd64 arm i386 ia64 mips pc98 powerpc sparc64 402TARGET_ARCHES_arm?= arm armeb armv6 403TARGET_ARCHES_mips?= mipsel mips mips64el mips64 mipsn32 404TARGET_ARCHES_powerpc?= powerpc powerpc64 405TARGET_ARCHES_pc98?= i386 406.for target in ${TARGETS} 407TARGET_ARCHES_${target}?= ${target} 408.endfor 409 410.if defined(UNIVERSE_TARGET) 411MAKE_JUST_WORLDS= YES 412.else 413UNIVERSE_TARGET?= buildworld 414.endif 415KERNSRCDIR?= ${.CURDIR}/sys 416 417targets: 418 @echo "Supported TARGET/TARGET_ARCH pairs for world and kernel targets" 419.for target in ${TARGETS} 420.for target_arch in ${TARGET_ARCHES_${target}} 421 @echo " ${target}/${target_arch}" 422.endfor 423.endfor 424 425.if defined(DOING_TINDERBOX) 426FAILFILE=${.CURDIR}/_.tinderbox.failed 427MAKEFAIL=tee -a ${FAILFILE} 428.else 429MAKEFAIL=cat 430.endif 431 432universe_prologue: upgrade_checks 433universe: universe_prologue 434universe_prologue: 435 @echo "--------------------------------------------------------------" 436 @echo ">>> make universe started on ${STARTTIME}" 437 @echo "--------------------------------------------------------------" 438.if defined(DOING_TINDERBOX) 439 @rm -f ${FAILFILE} 440.endif 441.for target in ${TARGETS} 442universe: universe_${target} 443universe_epilogue: universe_${target} 444universe_${target}: universe_${target}_prologue 445universe_${target}_prologue: universe_prologue 446 @echo ">> ${target} started on `LC_ALL=C date`" 447.if !defined(MAKE_JUST_KERNELS) 448.for target_arch in ${TARGET_ARCHES_${target}} 449universe_${target}: universe_${target}_${target_arch} 450universe_${target}_${target_arch}: universe_${target}_prologue .MAKE 451 @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} started on `LC_ALL=C date`" 452 @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ 453 ${SUB_MAKE} ${JFLAG} ${UNIVERSE_TARGET} \ 454 TARGET=${target} \ 455 TARGET_ARCH=${target_arch} \ 456 > _.${target}.${target_arch}.${UNIVERSE_TARGET} 2>&1 || \ 457 (echo "${target}.${target_arch} ${UNIVERSE_TARGET} failed," \ 458 "check _.${target}.${target_arch}.${UNIVERSE_TARGET} for details" | \ 459 ${MAKEFAIL})) 460 @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} completed on `LC_ALL=C date`" 461.endfor 462.endif 463.if !defined(MAKE_JUST_WORLDS) 464# If we are building world and kernels wait for the required worlds to finish 465.if !defined(MAKE_JUST_KERNELS) 466.for target_arch in ${TARGET_ARCHES_${target}} 467universe_${target}_kernels: universe_${target}_${target_arch} 468.endfor 469.endif 470universe_${target}: universe_${target}_kernels 471universe_${target}_kernels: universe_${target}_prologue .MAKE 472.if exists(${KERNSRCDIR}/${target}/conf/NOTES) 473 @(cd ${KERNSRCDIR}/${target}/conf && env __MAKE_CONF=/dev/null \ 474 ${SUB_MAKE} LINT > ${.CURDIR}/_.${target}.makeLINT 2>&1 || \ 475 (echo "${target} 'make LINT' failed," \ 476 "check _.${target}.makeLINT for details"| ${MAKEFAIL})) 477.endif 478 @cd ${.CURDIR}; ${SUB_MAKE} ${.MAKEFLAGS} TARGET=${target} \ 479 universe_kernels 480.endif 481 @echo ">> ${target} completed on `LC_ALL=C date`" 482.endfor 483universe_kernels: universe_kernconfs 484.if !defined(TARGET) 485TARGET!= uname -m 486.endif 487.if defined(MAKE_ALL_KERNELS) 488_THINNER=cat 489.else 490_THINNER=xargs grep -L "^.NO_UNIVERSE" || true 491.endif 492KERNCONFS!= cd ${KERNSRCDIR}/${TARGET}/conf && \ 493 find [[:upper:][:digit:]]*[[:upper:][:digit:]] \ 494 -type f -maxdepth 0 \ 495 ! -name DEFAULTS ! -name NOTES | \ 496 ${_THINNER} 497universe_kernconfs: 498.for kernel in ${KERNCONFS} 499TARGET_ARCH_${kernel}!= cd ${KERNSRCDIR}/${TARGET}/conf && \ 500 config -m ${KERNSRCDIR}/${TARGET}/conf/${kernel} 2> /dev/null | \ 501 grep -v WARNING: | cut -f 2 502.if empty(TARGET_ARCH_${kernel}) 503.error "Target architecture for ${TARGET}/conf/${kernel} unknown. config(8) likely too old." 504.endif 505universe_kernconfs: universe_kernconf_${TARGET}_${kernel} 506universe_kernconf_${TARGET}_${kernel}: .MAKE 507 @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ 508 ${SUB_MAKE} ${JFLAG} buildkernel \ 509 TARGET=${TARGET} \ 510 TARGET_ARCH=${TARGET_ARCH_${kernel}} \ 511 KERNCONF=${kernel} \ 512 > _.${TARGET}.${kernel} 2>&1 || \ 513 (echo "${TARGET} ${kernel} kernel failed," \ 514 "check _.${TARGET}.${kernel} for details"| ${MAKEFAIL})) 515.endfor 516universe: universe_epilogue 517universe_epilogue: 518 @echo "--------------------------------------------------------------" 519 @echo ">>> make universe completed on `LC_ALL=C date`" 520 @echo " (started ${STARTTIME})" 521 @echo "--------------------------------------------------------------" 522.if defined(DOING_TINDERBOX) 523 @if [ -e ${FAILFILE} ] ; then \ 524 echo "Tinderbox failed:" ;\ 525 cat ${FAILFILE} ;\ 526 exit 1 ;\ 527 fi 528.endif 529.endif 530 531buildLINT: 532 ${MAKE} -C ${.CURDIR}/sys/${_TARGET}/conf LINT 533 534.if defined(.PARSEDIR) 535.if make(universe) 536# we do not want a failure of one branch abort all. 537MAKE_JOB_ERROR_TOKEN= no 538.export MAKE_JOB_ERROR_TOKEN 539.endif 540.endif 541