On Fri, Jun 07, 2002 at 12:25:09AM +0200, Riccardo Torrini wrote:
> To support fancy user and they own targets would be nice an
> infrastructure that check and (if it exist) include a file
> (named Makefile.user or .local or similar) with personal
> targets either under /usr/src than /usr/ports.
> 
> This can save a lot of typing building various things (for
> example timing build phase or saving logs) only migrating
> this file from a machine to another.

maybe the attached Makefile may help you in the process.
I use it for months to build everything.

Cyrille.
-- 
Cyrille Lefevre                 mailto:[EMAIL PROTECTED]
#!/usr/bin/make -f
#
# @(#) etc:Makefile 1.6 ([EMAIL PROTECTED]) Wed Jun  5 23:08:17 CEST 2002
#
# Copyright (c) 2000-2002 Cyrille Lefevre. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY _DIRECT, IN_DIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.

# TODO : rel target and maybe dump target
# make release RELEASETAG=RELENG_4 CHROOT_DIR=/disk1/release/root \
# LOCAL_PATCHES=/disk1/release/patches LOCAL_SCRIPT=/disk1/release/script \
# NOPORTS=YES NODOC=YES NOSRC=YES # NOSHARED=YES RELEASENOUPDATE=YES
# ftp://current.jp.FreeBSD.org/pub/FreeBSD/snapshots/i386/ISO-IMAGES/

.MAKEARGS: .dl

# Custom
#

NCVS?=          true
RELENG?=        -r RELENG_4
CUSTOM?=        CUSTOM
GENERIC?=       GENERIC
DEBUG?=         -g
JOBS?=          -j4
NOJOBS?=        -B
# NOEXEC?=      -n
AT?=            @
FORCE_LBA?=     # --force-lba # -> CHS ?

# Commands
#

CHFLAGS?=       chflags
CONFIG?=        config
CP?=            cp
CPIO?=          cpio
CVS?=           cvs
CVS_ARGS?=
CAP_MKDB?=      cap_mkdb
DATE?=          date
DISKLABEL?=     disklabel
DISKLABEL_ARGS?=        -wB
DISKLABEL_TYPE?=        fd1440
ECHO?=          echo
FIND?=          find
GREP?=          grep
GREP_ARGS?=     -B 2
GRUB?=          grub
GRUB?=          --batch
GRUB_INSTALL?=  grub-install
GRUB_INSTALL_ARGS?=     ${FORCE_LBA}
KGZIP?=         kgzip
MAKE?=          make
MAKE_ARGS?=
MAKEDEV?=       MAKEDEV
MAKEDEV_ARGS?=  all
MAKEDEV_LOCAL?= MAKEDEV.local
MAKEDEV_LOCAL_ARGS?=    all
MERGEMASTER?=   mergemaster
MERGEMASTER_ARGS?=      -svia -vir # -s
MK_DIR?=                mkdir -p
MOUNT?=         mount
MV?=            mv
NEWALIASES?=    newaliases
NEWFS?=         newfs
NEWFS_ARGS?=    -m 5 -o space
PKGDB?=         pkgdb
PKGDB_ARGS?=    -u
PORTSDB?=       portsdb
PORTSDB_ARGS?=  -u
PWD_MKDB?=      pwd_mkdb
RM?=            rm
SLEEP?=         sleep
SH?=            sh
TEE?=           tee
TEE_ARGS?=
TR?=            tr
TOUCH?=         touch
UMOUNT?=        umount
ZZZ?=           zzz

# Directories
#

OBJ_DIR?=       /usr/obj
SRC_DIR?=       /usr/src
SHDOC_DIR?=     ${SRC_DIR}/share/doc
SYSINSTALL_DIR?=        ${SRC_DIR}/release/sysinstall
KERNCONF_DIR?=  ${SRC_DIR}/sys/${MACHINE_ARCH}/conf
KERNBUILD_DIR?= ${SRC_DIR}/sys/compile
KERNMOD_DIR?=   ${SRC_DIR}/sys/modules
DEV_DIR?=       /dev
MAIL_DIR?=      /etc/mail
DOC_DIR?=       /usr/doc
DOC_ARGS?=      Makefile README share ${DOC_LANG}
WEB_DIR?=       /usr/www
WEB_ARGS?=      www/Makefile www/Makefile.inc www/share www/tools www/en
PORTS_DIR?=     /usr/ports

# Files
#

KERNEL?=        kernel
LOGIN_CONF?=    /etc/login.conf
MASTER_PASSWD?= /etc/master.passwd
FSTAB?=         /etc/fstab

# Boot
#

BOOT_DIR?=      /boot
GRUB_DIR?=      ${BOOT_DIR}/grub
ALTBOOT_DEV?=   /dev/ad0s3
ALTBOOT_DIR?=   /grub
FLOP_DEV?=      /dev/fd0
FLOP_DIR?=      /flop
BOOT_FILES?=    boot0 mbr \
                ${FLOP_FILES:N*.map:Nstage*} ${SPLASH_FILES:%=splash/%}
FLOP_FILES?=    boot[12] defaults/loader.conf \
                grub/device.map grub/menu.lst ${GRUB_FILES:N*1_5:%=grub/%} \
                loader loader.4th loader.help loader.rc support.4th \
                kernel.conf loader.conf loader.conf.local
# GRUBXXX?=     /usr/local/share/grub/${MACHINE_ARCH}-freebsd
GRUB_FILES?=    e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
                minix_stage1_5 reiserfs_stage1_5 stage[12]
SPLASH_FILES?=  chuck_nebula.bmp daemon_640.bmp \
                dual_chuck-40.bmp saturn_1_640.bmp

# Alt
#

ALT_DIR?=       # /disk0
ALT_FILES?=     dev/MAKEDEV* etc boot root/.profile root/.kshrc root/.kshdirsrc
LOADER_CONF_LOCAL?=     ${BOOT_DIR}/loader.conf.local

# Make
#

.if !defined(NOW)
NOW!=           ${DATE} +%Y%m%d%H%M
.endif

DO-MAKE?=       ${MAKE} -k -f ${.CURDIR}/Makefile
FAKE-NOEXEC?=   ${NOEXEC:M-n:S/-n/exit;/g}
FAKE-CVSUP?=    ${AT}${FAKE-MAKE:S|-make|-cvsup|}
REAL-CVSUP?=    ${FAKE-CVSUP:S|fake-|real-|} ${NOEXEC}
CVSUP_ARGS?=    
FAKE-CVS?=      ${AT}${FAKE-MAKE:S|-make|-update|}
REAL-CVS?=      ${FAKE-CVS:S|fake-|real-|} ${NOEXEC}
FAKE-MAKE?=     ${AT}${DO-MAKE} DO-TARGET=${.TARGET} fake-make
REAL-MAKE?=     ${FAKE-MAKE:S|fake-|real-|} ${NOEXEC}
PASS-ARGS?=     CVSUP_ARGS="${CVSUP_ARGS}" CVS_ARGS="${CVS_ARGS}" \
                MAKE_ARGS="${MAKE_ARGS}" TEE_ARGS="${TEE_ARGS}" \
                _DIR="${_DIR}" TARGET="${TARGET}" NOW="${NOW}" \
                CUSTOM="${CUSTOM}" GENERIC="${GENERIC}" KERNCONF="${KERNCONF}"
# TARGET?=      

# Log
#

LOG_DIR?=       /var/log/make
LOGPRE?=        ${_DIR:S|/|_|g}${SUB_DIR:S|/|_|g}_
.if defined(TARGET) && !empty(TARGET)
_TARGET=        ${TARGET:S|real-||}
.else
_TARGET=        ${.TARGET:S|real-||}
.endif
LOGFILE?=       ${LOG_DIR}/${LOGPRE}${_TARGET}.log
BEGFILE?=       ${LOG_DIR}/.${LOGPRE}${_TARGET}.begin
ENDFILE?=       ${LOG_DIR}/.${LOGPRE}${_TARGET}.end

# Mount
#

BOOT_MOUNTED=   .${GRUB_DIR:S|/|_|g}
.if defined(ALT_DIR) && !empty(ALT_DIR)
ALT_MOUNTED=    .${ALT_DIR:S|/|_|g}
ALT=            alt
.else
ALT=
.endif

# Targets
#

OLDWAY=         gen sys
NEWWAY=         kern
CURWAY=         ${OLDWAY}

MAIN=   some
SRCS=   src ${CURWAY} mod doc www etc ${ALT} ports
PROG=   all least most some cvsup update build install clean ${ALT}

# Main
#

.MAIN: ${MAIN}

.PHONY: ${SRCS} ${.TARGET:S|$|-all|g}
${SRCS}: ${.TARGET:S|$|-all|g}

.PHONY: ${PROG} ${SRCS:S|$|-${.TARGET}|g}
${PROG}: ${SRCS:S|$|-${.TARGET}|g}

# Usage
#

.PHONY: help usage
help usage:
        @${ECHO} "usage: ${MAKE} [category[-target]]... [variable=value]..."
        @${ECHO} "       ${MAKE} [[category-]target]... [variable=value]..."
        @${ECHO} ""
        @${ECHO} "categories: ${SRCS}"
        @${ECHO} "targets: ${PROG}"
        @${ECHO} "variables: NCVS RELENG CUSTOM GENERIC ALT_DIR DEBUG JOBS" \
                 "NOJOBS NOEXEC AT"
        @${ECHO} ""
        @${ECHO} "defaults: ${MAKE} ${MAIN} NCVS=\"${NCVS}\"" \
                 "RELENG=\"${RELENG}\" \\"
        @${ECHO} "          CUSTOM=\"${CUSTOM}\" GENERIC=\"${GENERIC}\"" \
                 "ALT_DIR=\"${ALT_DIR}\" \\"
        @${ECHO} "          DEBUG=\"${DEBUG}\" JOBS=\"${JOBS}\"" \
                 "NOJOBS=\"${NOJOBS}\" NOEXEC=\"${NOEXEC}\" AT=\"${AT}\""

# Boot

.PHONY: boot flop grub
boot:
        [ -d ${ALTBOOT_DIR} ] || ${MK_DIR} ${ALTBOOT_DIR}
        if ${MOUNT} | ${GREP} -q ${ALTBOOT_DIR}; then \
                ${TOUCH} ${BOOT_MOUNTED}; \
        else \
                ${MOUNT} ${ALTBOOT_DEV}a ${ALTBOOT_DIR}; \
        fi
        -${GRUB_INSTALL} ${GRUB_INSTALL_ARGS} \
                --mount-point=${ALTBOOT_DIR} ${ALTBOOT_DEV}
        cd ${BOOT_DIR} && ${FIND} ${BOOT_FILES} | \
                ${CPIO} -pdm ${ALTBOOT_DIR}${BOOT_DIR} 2>&1 | ${GREP} -v newer
        if [ -f ${ALTBOOT_DIR}/${KERNEL} ]; then \
                ${CHFLAGS} noschg ${ALTBOOT_DIR}/${KERNEL}; \
        fi
        ${CP} -p /${KERNEL} ${ALTBOOT_DIR}/${KERNEL}
        if [ -f ${ALTBOOT_DIR}/${KERNEL}.${GENERIC} ]; then \
                ${CHFLAGS} noschg ${ALTBOOT_DIR}/${KERNEL}.${GENERIC}; \
        fi
        ${CP} -p /${KERNEL}.${GENERIC} ${ALTBOOT_DIR}/${KERNEL}.${GENERIC}
        if [ -f ${BOOT_MOUNTED} ]; then \
                ${RM} -f ${BOOT_MOUNTED} ; \
        else \
                ${UMOUNT} ${ALTBOOT_DIR}; \
        fi
flop:
        ${DISKLABEL} ${DISKLABEL_ARGS} ${FLOP_DEV} ${DISKLABEL_TYPE}
        ${NEWFS} ${NEWFS_ARGS} ${FLOP_DEV}c
        [ -d ${FLOP_DIR} ] || ${MK_DIR} ${FLOP_DIR}
        ${MOUNT} ${FLOP_DEV}c ${FLOP_DIR}
        ${MK_DIR} ${FLOP_DIR}${GRUB_DIR}
        cd ${BOOT_DIR} && ${FIND} ${FLOP_FILES} | \
                ${CPIO} -pdm ${FLOP_DIR}${BOOT_DIR} 2>&1 | ${GREP} -v newer
        ${KGZIP} -o ${FLOP_DIR}/${KERNEL} /${KERNEL}
        ${UMOUNT} ${FLOP_DIR}
grub: flop
        (echo 'root (fd0)'; \
         echo 'setup ${FORCE_LBA} (fd0)'; \
         echo quit) | \
        ${GRUB} ${GRUB_ARGS}

# Src
#

src-all: src-least src-most
src-least: src-cvsup src-update
src-some: src-build src-install
src-most: src-update src-some
src-cvsup:
        ${FAKE-CVSUP} _DIR=${SRC_DIR} CVSUP_ARGS=${SUPFILE} # src
src-update:
        ${FAKE-CVS} _DIR=${SRC_DIR} CVS_ARGS="${RELENG}"
SRC-BUILD= src-build-1 src-build-2 src-build-3 \
           src-build-4 src-build-5
.PHONY: ${SRC-BUILD}
src-build: ${SRC-BUILD}
src-build-1:
        ${FAKE-MAKE} _DIR=${SRC_DIR} TARGET=buildworld \
                MAKE_ARGS="${JOBS}"
src-build-2:
        ${FAKE-MAKE} _DIR=${SHDOC_DIR} \
                MAKE_ARGS="${JOBS} PRINTERDEVICE=html"
src-build-3:
        ${FAKE-MAKE} _DIR=${SYSINSTALL_DIR} TARGET=obj \
                MAKE_ARGS="${JOBS} MAKEOBJDIRPREFIX=${OBJ_DIR}"
src-build-4:
        ${FAKE-MAKE} _DIR=${SYSINSTALL_DIR} TARGET=depend \
                MAKE_ARGS="${JOBS} MAKEOBJDIRPREFIX=${OBJ_DIR}"
src-build-5:
        ${FAKE-MAKE} _DIR=${SYSINSTALL_DIR} TARGET=all \
                MAKE_ARGS="${JOBS} MAKEOBJDIRPREFIX=${OBJ_DIR}"
SRC-INSTALL= src-install-1 src-install-2 src-install-3
.PHONY: ${SRC-INSTALL}
src-install: ${SRC-INSTALL}
src-install-1:
        ${FAKE-MAKE} _DIR=${SRC_DIR} TARGET=installworld \
                MAKE_ARGS="${NOJOBS}"
src-install-2:
        ${FAKE-MAKE} _DIR=${SHDOC_DIR} TARGET=install \
                MAKE_ARGS="${NOJOBS} PRINTERDEVICE=html"
src-install-3:
        ${FAKE-MAKE} _DIR=${SYSINSTALL_DIR} TARGET=install \
                MAKE_ARGS="${NOJOBS} MAKEOBJDIRPREFIX=${OBJ_DIR}"
SRC-CLEAN= src-clean-1 src-clean-2 src-clean-3
.PHONY: ${SRC-CLEAN}
src-clean: ${SRC-CLEAN}
src-clean-1:
        ${FAKE-MAKE} _DIR=${SRC_DIR} TARGET=clean
src-clean-2:
        ${FAKE-MAKE} _DIR=${SHDOC_DIR} TARGET=clean
src-clean-3:
        ${FAKE-MAKE} _DIR=${SYSINSTALL_DIR} TARGET=clean \
                MAKE_ARGS="MAKEOBJDIRPREFIX=${OBJ_DIR}"
.if defined(ALT_DIR) && !empty(ALT_DIR)
src-alt: do-mount do-src-alt do-umount
DO-SRC-ALT= do-src-alt-1 do-src-alt-2
.PHONY: ${DO-SRC-ALT}
do-src-alt: ${DO-SRC-ALT}
do-src-alt-1:
        ${FAKE-MAKE} _DIR=${SRC_DIR} TARGET=installworld TEE_ARGS=-a \
                MAKE_ARGS="${NOJOBS} DESTDIR=${ALT_DIR}"
do-src-alt-2:
        ${FAKE-MAKE} _DIR=${SYSINSTALL_DIR} TARGET=install TEE_ARGS=-a \
                MAKE_ARGS="${NOJOBS} DESTDIR=${ALT_DIR}"
.endif

# Kern
#

kern-all: kern-least kern-most
kern-least: kern-cvsup kern-update
kern-some: kern-build kern-install
kern-most: kern-some
kern-cvsup: src-cvsup
kern-update: src-update
kern-build:
        ${FAKE-MAKE} _DIR=${SRC_DIR} TARGET=buildkernel \
                MAKE_ARGS="${JOBS} KERNCONF=\\\"${CUSTOM}\\ ${GENERIC}\\\""
#               DEBUG=${DEBUG}
KERN-INSTALL= kern-install-1 kern-install-2 kern-install-3
.PHONY: ${KERN-INSTALL}
kern-install: ${KERN-INSTALL}
kern-install-1:
        ${FAKE-MAKE} _DIR=${SRC_DIR} TARGET=installkernel \
                MAKE_ARGS="${NOJOBS} KERNCONF=${CUSTOM}"
kern-install-2:
        ${FAKE-MAKE} _DIR=${SRC_DIR} TARGET=installkernel TEE_ARGS=-a \
                MAKE_ARGS="${NOJOBS} KERNCONF=${GENERIC}"
kern-install-3:
.for kern in ${CUSTOM} ${GENERIC}
        -${FAKE-NOEXEC} ${CHFLAGS} noschg /${kern} /${KERNEL}.${kern}
        -${FAKE-NOEXEC} ${MV} /${kern} /${KERNEL}.${kern}
        -${FAKE-NOEXEC} ${CHFLAGS} schg /${KERNEL}.${kern}
        -${FAKE-NOEXEC} ${CP} -p /${KERNEL}.${kern} /${KERNEL}.${kern}.${NOW}
.endfor
        -${FAKE-NOEXEC} ${CHFLAGS} noschg /${KERNEL}
        ${FAKE-NOEXEC} ${CP} -p /${KERNEL}.${CUSTOM} /${KERNEL}
kern-clean:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
.if defined(ALT_DIR) && !empty(ALT_DIR)
kern-alt: do-mount do-kern-alt do-umount
DO-KERN-ALT= do-kern-alt-1 do-kern-alt-2 do-kern-alt-3 do-kern-alt-4
.PHONY: ${DO-KERN-ALT}
do-kern-alt: ${DO-KERN-ALT}
do-kern-alt-1:
        -${FAKE-NOEXEC} \
                ${CHFLAGS} noschg ${ALT_DIR}/${KERNEL} ${ALT_DIR}/${GENERIC}
        -${FAKE-NOEXEC} ${RM} -f ${ALT_DIR}/${KERNEL} ${ALT_DIR}/${GENERIC}
do-kern-alt-2:
        ${FAKE-MAKE} _DIR=${SRC_DIR} TARGET=installkernel TEE_ARGS=-a \
                MAKE_ARGS="${NOJOBS} DESTDIR=${ALT_DIR} KERNCONF=${CUSTOM}"
do-kern-alt-3:
        ${FAKE-MAKE} _DIR=${SRC_DIR} TARGET=installkernel TEE_ARGS=-a \
                MAKE_ARGS="${NOJOBS} DESTDIR=${ALT_DIR} KERNCONF=${GENERIC}"
do-kern-alt-4:
.for kern in ${CUSTOM} ${GENERIC}
        -${FAKE-NOEXEC} ${CHFLAGS} noschg ${ALT_DIR}/${kern}
.endfor
        -${FAKE-NOEXEC} ${MV} ${ALT_DIR}/${CUSTOM} ${ALT_DIR}/${KERNEL}
        -${FAKE-NOEXEC} \
                ${MV} ${ALT_DIR}/${GENERIC} ${ALT_DIR}/${KERNEL}.${GENERIC}
        ${FAKE-NOEXEC} \
                ${CHFLAGS} schg ${ALT_DIR}/${KERNEL} \
                                ${ALT_DIR}/${KERNEL}.${GENERIC}
.endif

# Gen
#

gen-all: gen-least gen-most
gen-least: gen-cvsup gen-update
gen-some: gen-build gen-install
gen-most: gen-some
gen-cvsup: src-cvsup
gen-update: src-update
GEN-BUILD= gen-build-1 gen-build-2 gen-build-3
.PHONY: ${GEN-BUILD}
gen-build: ${GEN-BUILD}
gen-build-1:
        ${FAKE-NOEXEC} cd ${KERNCONF_DIR} && ${CONFIG} ${GENERIC}
gen-build-2:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${GENERIC} TARGET=depend \
                MAKE_ARGS="${JOBS} KERNEL=${KERNEL}.${GENERIC} DEBUG=${DEBUG}"
gen-build-3:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${GENERIC} TARGET=all \
                MAKE_ARGS="${JOBS} KERNEL=${KERNEL}.${GENERIC} DEBUG=${DEBUG}"
GEN-INSTALL= gen-install-1 gen-install-2
.PHONY: ${GEN-INSTALL}
gen-install: ${GEN-INSTALL}
gen-install-1:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${GENERIC} TARGET=install \
                MAKE_ARGS="${NOJOBS} KERNEL=${KERNEL}.${GENERIC}"
gen-install-2:
        ${FAKE-NOEXEC} \
                ${CP} -p /${KERNEL}.${GENERIC} /${KERNEL}.${GENERIC}.${NOW}
gen-clean:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${GENERIC} TARGET=clean \
                MAKE_ARGS="KERNEL=${KERNEL}.${GENERIC}"
.if defined(ALT_DIR) && !empty(ALT_DIR)
gen-alt: do-mount do-gen-alt do-umount
DO-GEN-ALT= do-gen-alt-1 do-gen-alt-2 do-gen-alt-3
.PHONY: ${DO-GEN-ALT}
do-gen-alt: ${DO-GEN-ALT}
do-gen-alt-1:
        -${FAKE-NOEXEC} ${RM} -rf ${ALT_DIR}/${KERNEL}.${GENERIC}.old
        -${FAKE-NOEXEC} ${MK_DIR} \
                ${ALT_DIR}/${KERNEL}.${GENERIC}.old/${KERNEL}.${GENERIC}
do-gen-alt-2:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${GENERIC} \
                TARGET=install TEE_ARGS=-a \
                MAKE_ARGS="${NOJOBS} DESTDIR=${ALT_DIR} \
                           KERNEL=${KERNEL}.${GENERIC}"
do-gen-alt-3:
        -${FAKE-NOEXEC} ${RM} -rf ${ALT_DIR}/${KERNEL}.${GENERIC}.old
.endif

# Sys
#

sys-all: sys-least sys-most
sys-least: sys-cvsup sys-update
sys-some: sys-build sys-install
sys-most: sys-some
sys-cvsup: src-cvsup
sys-update: src-update
SYS-BUILD= sys-build-1 sys-build-2 sys-build-3
.PHONY: ${SYS-BUILD}
sys-build: ${SYS-BUILD}
sys-build-1:
        ${FAKE-NOEXEC} cd ${KERNCONF_DIR} && ${CONFIG} ${CUSTOM}
sys-build-2:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${CUSTOM} TARGET=depend \
                MAKE_ARGS="${JOBS} DEBUG=${DEBUG}"
sys-build-3:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${CUSTOM} TARGET=all \
                MAKE_ARGS="${JOBS} DEBUG=${DEBUG}"
SYS-INSTALL= sys-install-1 sys-install-2
.PHONY: ${SYS-INSTALL}
sys-install: ${SYS-INSTALL}
sys-install-1:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${CUSTOM} TARGET=install \
                MAKE_ARGS="${NOJOBS}"
sys-install-2:
        ${FAKE-NOEXEC} ${MV} /${KERNEL}.old /${KERNEL}.${CUSTOM}.old
        ${FAKE-NOEXEC} ${CP} -p /${KERNEL} /${KERNEL}.${CUSTOM}.${NOW}
        -${FAKE-NOEXEC} ${CHFLAGS} noschg /${KERNEL}.${CUSTOM}
        ${FAKE-NOEXEC} ${CP} -p /${KERNEL} /${KERNEL}.${CUSTOM}
sys-clean:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${CUSTOM} TARGET=clean
.if defined(ALT_DIR) && !empty(ALT_DIR)
sys-alt: do-mount do-sys-alt do-umount
DO-SYS-ALT= do-sys-alt-1 do-sys-alt-2 do-sys-alt-3
.PHONY: ${DO-SYS-ALT}
do-sys-alt: ${DO-SYS-ALT}
do-sys-alt-1:
        -${FAKE-NOEXEC} ${RM} -rf ${ALT_DIR}/${KERNEL}.old
        -${FAKE-NOEXEC} ${MK_DIR} ${ALT_DIR}/${KERNEL}.old/${KERNEL}
do-sys-alt-2:
        ${FAKE-MAKE} _DIR=${KERNBUILD_DIR}/${CUSTOM} TARGET=install TEE_ARGS=-a \
                MAKE_ARGS=""${NOJOBS} DESTDIR=${ALT_DIR}"
do-sys-alt-3:
        -${FAKE-NOEXEC} ${RM} -rf ${ALT_DIR}/${KERNEL}.old
.endif

# Mod
#

mod-all: mod-least mod-most
mod-least: mod-cvsup mod-update
mod-some: # mod-build mod-install
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
mod-most: mod-some
mod-cvsup: src-cvsup
mod-update: src-update
MOD-BUILD= mod-build-1 mod-build-2 mod-build-3
.PHONY: ${MOD-BUILD}
mod-build: ${MOD-BUILD}
mod-build-1:
        ${FAKE-MAKE} _DIR=${KERNMOD_DIR} TARGET=obj \
                MAKE_ARGS="${JOBS} MAKEOBJDIRPREFIX=${OBJ_DIR}"
mod-build-2:
        ${FAKE-MAKE} _DIR=${KERNMOD_DIR} TARGET=depend \
                MAKE_ARGS="${JOBS} MAKEOBJDIRPREFIX=${OBJ_DIR}"
mod-build-3:
        ${FAKE-MAKE} _DIR=${KERNMOD_DIR} TARGET=all \
                MAKE_ARGS="${JOBS} MAKEOBJDIRPREFIX=${OBJ_DIR}"
mod-install:
        ${FAKE-MAKE} _DIR=${KERNMOD_DIR} TARGET=install \
                MAKE_ARGS="${NOJOBS} MAKEOBJDIRPREFIX=${OBJ_DIR}"
mod-clean:
        ${FAKE-MAKE} _DIR=${KERNMOD_DIR} TARGET=clean \
                MAKE_ARGS="MAKEOBJDIRPREFIX=${OBJ_DIR}"
.if defined(ALT_DIR) && !empty(ALT_DIR)
mod-alt: do-mount do-mod-alt do-umount
do-mod-alt:
        ${FAKE-MAKE} _DIR=${KERNMOD_DIR} TARGET=install TEE_ARGS=-a \
                MAKE_ARGS="${NOJOBS} DESTDIR=${ALT_DIR}"
.endif

# Etc
#

etc-all: etc-least etc-most
etc-least: etc-cvsup etc-update
etc-some: etc-build etc-install
etc-most: etc-some
etc-cvsup: src-cvsup
etc-update: src-update
etc-build:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
ETC-INSTALL= etc-install-1 etc-install-2
etc-install:
.for args in ${MERGEMASTER_ARGS}
        ${FAKE-NOEXEC} ${MERGEMASTER} ${args}
.endfor
# the following targets are used by mergermaster at exit time using mmexitscript
.PHONY: etc-makedev etc-makedev.local etc-sendmail \
        etc-newaliases etc-cap_mkdb etc-pwd_mkdb
etc-makedev:
        ${FAKE-NOEXEC} cd ${DEV_DIR} && \
                ${SH} ${MAKEDEV} ${MAKEDEV_ARGS}
etc-makedev.local:
        ${FAKE-NOEXEC} cd ${DEV_DIR} && \
                ${SH} ${MAKEDEV_LOCAL} ${MAKEDEV_LOCAL_ARGS}
etc-sendmail:
        ${FAKE-MAKE} _DIR=${MAIL_DIR} TARGET=install \
                MAKE_ARGS="${NOJOBS}"
etc-newaliases:
        ${FAKE-NOEXEC} ${NEWALIASES}
etc-cap_mkdb:
        ${FAKE-NOEXEC} ${CAP_MKDB} ${LOGIN_CONF}
etc-pwd_mkdb:
        ${FAKE-NOEXEC} ${PWD_MKDB} -p ${MASTER_PASSWD}
# end of mergemaster specific targets.
etc-clean:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
.if defined(ALT_DIR) && !empty(ALT_DIR)
etc-alt: do-mount do-etc-alt do-umount
do-etc-alt:
        ${FAKE-NOEXEC} ${TOUCH} ${ALT_DIR}${FSTAB}
        ${FAKE-NOEXEC} cd / && \
                ${FIND} ${ALT_FILES} -name splash -prune -o -print | \
                ${CPIO} -pdm ${ALT_DIR} 2>&1 | ${GREP} -v newer
        ${FAKE-NOEXEC} cd ${ALT_DIR}${DEV_DIR} && \
                ${SH} ${MAKEDEV} ${MAKEDEV_ARGS}
        ${FAKE-NOEXEC} cd ${ALT_DIR}${DEV_DIR} && \
                ${SH} ${MAKEDEV_LOCAL} ${MAKEDEV_LOCAL_ARGS}
        ${FAKE-NOEXEC} . ${LOADER_CONF_LOCAL} && [ -n "$${bitmap_name}" ] && \
                ${ECHO} $${bitmap_name} | \
                ${CPIO} -pdm ${ALT_DIR} 2>&1 | ${GREP} -v newer
.endif

# Alt
#

.if defined(ALT_DIR) && !empty(ALT_DIR)
alt-all: alt-least alt-most
alt-least: alt-cvsup alt-update
alt-some: alt-build alt-install
alt-most: alt-some
alt-cvsup: src-cvsup
alt-update: src-update
alt-build: src-build
alt-install: do-mount do-alt-install do-umount
DO-ALT-INSTALL= do-alt-install-1 do-alt-install-2
.PHONY: ${DO-ALT-INSTALL}
do-alt-install: ${DO-ALT-INSTALL}
do-alt-install-1:
        -${FAKE-NOEXEC} ${CHFLAGS} noschg ${ALT_DIR}/${KERNEL} && \
                 ${RM} -rf ${ALT_DIR}/${KERNEL}
        -${FAKE-NOEXEC} ${CHFLAGS} noschg ${ALT_DIR}/${KERNEL}.${GENERIC} && \
                ${RM} -rf ${ALT_DIR}/${KERNEL}.${GENERIC}
do-alt-install-2: ${SRCS:S|^|do-|:S|$|-alt|}
alt-clean:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
alt-alt:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
do-alt-alt:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
.endif

# Doc
#

doc-all: doc-least doc-most
doc-least: doc-cvsup doc-update
doc-some:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
doc-most: doc-update doc-build doc-install
doc-cvsup:
        ${FAKE-CVSUP} _DIR=${DOC_DIR} CVSUP_ARGS=${DOCSUPFILE}
doc-update:
        ${FAKE-CVS} _DIR=${DOC_DIR} CVS_ARGS="${DOC_ARGS}"
DOC-BUILD= doc-build-1 doc-build-2
.PHONY: ${DOC-BUILD}
doc-build: ${DOC-BUILD}
doc-build-1:
        ${FAKE-MAKE} _DIR=${DOC_DIR} TARGET=obj # MAKE_ARGS="${JOBS}"
doc-build-2:
        ${FAKE-MAKE} _DIR=${DOC_DIR} TARGET=all # MAKE_ARGS="${JOBS}"
doc-install:
        ${FAKE-MAKE} _DIR=${DOC_DIR} TARGET=install MAKE_ARGS="${NOJOBS}"
doc-clean:
        ${FAKE-MAKE} _DIR=${DOC_DIR} TARGET=clean
.if defined(ALT_DIR) && !empty(ALT_DIR)
doc-alt:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
do-doc-alt:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
.endif

# Www
#

www-all: www-least www-most
www-least: www-cvsup www-update
www-some:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
www-most: www-update www-build www-install
www-cvsup: doc-cvsup
www-update:
        ${FAKE-CVS} _DIR=${WEB_DIR:H} SUB_DIR=${WEB_DIR:S|${WEB_DIR:H}||} \
                CVS_ARGS="${WEB_ARGS}"
WWW-BUILD= www-build-1 www-build-2
.PHONY: ${WWW-BUILD}
www-build: ${WWW-BUILD}
www-build-1:
        ${FAKE-MAKE} _DIR=${WEB_DIR} TARGET=obj # MAKE_ARGS="${JOBS}"
www-build-2:
        ${FAKE-MAKE} _DIR=${WEB_DIR} TARGET=all # MAKE_ARGS="${JOBS}"
WWW-INSTALL= www-install-1 www-install-2
.PHONY: ${WWW-INSTALL}
www-install: ${WWW-INSTALL}
www-install-1:
        ${FAKE-MAKE} _DIR=${WEB_DIR} TARGET=install MAKE_ARGS="${NOJOBS}"
www-install-2:
        ${FAKE-MAKE} _DIR=${WEB_DIR}/en TARGET=linbot MAKE_ARGS="${NOJOBS}"
www-clean:
        ${FAKE-MAKE} _DIR=${WEB_DIR} TARGET=clean
.if defined(ALT_DIR) && !empty(ALT_DIR)
www-alt:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
do-www-alt:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
.endif

# Ports
#

ports-all: ports-least ports-most
ports-least: ports-cvsup ports-update
ports-some: ports-build ports-install
ports-most: ports-update ports-some
ports-cvsup:
        ${FAKE-CVSUP} _DIR=${PORTS_DIR} CVSUP_ARGS=${PORTSSUPFILE}
PORTS-UPDATE= ports-update-1 ports-update-2
.PHONY: ${PORTS-UPDATE}
ports-update: ${PORTS-UPDATE}
ports-update-1:
        ${FAKE-CVS} _DIR=${PORTS_DIR}
ports-update-2:
        ${FAKE-NOEXEC} ${PORTSDB} ${PORTSDB_ARGS}
        ${FAKE-NOEXEC} ${PKGDB} ${PKGDB_ARGS}
ports-build:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
ports-install:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
ports-clean:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
.if defined(ALT_DIR) && !empty(ALT_DIR)
ports-alt:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
do-ports-alt:
        ${FAKE-NOEXEC} echo "no ${.TARGET} target right now !"
.endif

# Mount
#

.if defined(ALT_DIR) && !empty(ALT_DIR)
.PHONY: do-mount do-umount
do-mount:
        ${FAKE-NOEXEC} ${RM} -f ${ALT_MOUNTED}
        ${FAKE-NOEXEC} ${MOUNT} | ${GREP} -q ${ALT_DIR} && \
                ${TOUCH} ${ALT_MOUNTED} || ${MOUNT} ${ALT_DIR}
do-umount:
        ${FAKE-NOEXEC} if [ -f ${ALT_MOUNTED} ]; then \
                ${RM} -f ${ALT_MOUNTED} ; \
        else \
                ${UMOUNT} ${ALT_DIR} ; \
                ${SLEEP} 5 ; ${ZZZ} ; \
        fi
.endif

# Make
#

.PHONY: fake-cvsup fake-update fake-make real-cvsup real-update real-make
# the reason of the use of an intermediate make level is if you
# put some stuff in /etc/make.conf which depends on the current
# directory. what it is done, of course :)
fake-cvsup fake-update fake-make:
        ${AT}cd ${_DIR} && ${DO-MAKE} ${DO-TARGET} \
                FAKE-CVSUP="${REAL-CVSUP}" \
                FAKE-CVS="${REAL-CVS}" \
                FAKE-MAKE="${REAL-MAKE}" \
                ${PASS-ARGS}
real-cvsup:
        -@file=$$(${ECHO} ${LOGFILE} | ${TR} ' ' _); \
        cd ${_DIR} && [ -f $${file} ] && \
        case "${TEE_ARGS}" in *-a*) ;; *) ${MV} -f $${file} $${file}.old ;; esac
        -@file=$$(${ECHO} ${BEGFILE} | ${TR} ' ' _); \
        cd ${_DIR} && \
                case "${TEE_ARGS}" in *-a*) ;; *) ${TOUCH} $${file} ;; esac
        file=$$(${ECHO} ${LOGFILE} | ${TR} ' ' _); \
        cd ${_DIR} && ${SUP} ${SUPFLAGS} ${CVSUP_ARGS} 2>&1 | \
                ${TEE} ${TEE_ARGS} $${file}
        -@file=$$(${ECHO} ${ENDFILE} | ${TR} ' ' _); \
        cd ${_DIR} && \
                case "${TEE_ARGS}" in *-a*) ;; *) ${TOUCH} $${file} ;; esac
.if defined(NCVS)
real-update:
        -@file=$$(${ECHO} ${LOGFILE} | ${TR} ' ' _); \
        cd ${_DIR} && [ -f $${file} ] && \
        case "${TEE_ARGS}" in *-a*) ;; *) ${MV} -f $${file} $${file}.old ;; esac
        -@file=$$(${ECHO} ${BEGFILE} | ${TR} ' ' _); \
        cd ${_DIR} && \
                case "${TEE_ARGS}" in *-a*) ;; *) ${TOUCH} $${file} ;; esac
        file=$$(${ECHO} ${LOGFILE} | ${TR} ' ' _); \
        cd ${_DIR} && ${CVS} update ${CVS_ARGS} 2>&1 | \
                ${TEE} ${TEE_ARGS} $${file}
        -@file=$$(${ECHO} ${ENDFILE} | ${TR} ' ' _); \
        cd ${_DIR} && \
                case "${TEE_ARGS}" in *-a*) ;; *) ${TOUCH} $${file} ;; esac
.else
real-update:
.endif
real-make:
        -@file=$$(${ECHO} ${LOGFILE} | ${TR} ' ' _); \
        cd ${_DIR} && [ -f $${file} ] && \
        case "${TEE_ARGS}" in *-a*) ;; *) ${MV} -f $${file} $${file}.old ;; esac
        -@file=$$(${ECHO} ${BEGFILE} | ${TR} ' ' _); \
        cd ${_DIR} && \
                case "${TEE_ARGS}" in *-a*) ;; *) ${TOUCH} $${file} ;; esac
        file=$$(${ECHO} ${LOGFILE} | ${TR} ' ' _); \
        cd ${_DIR} && ${MAKE} -k ${MAKE_ARGS} ${TARGET} 2>&1 | \
                ${TEE} ${TEE_ARGS} $${file}
        -@file=$$(${ECHO} ${ENDFILE} | ${TR} ' ' _); \
        cd ${_DIR} && \
                case "${TEE_ARGS}" in *-a*) ;; *) ${TOUCH} $${file} ;; esac
#       -@file=$$(${ECHO} ${LOGFILE} | ${TR} ' ' _); \
#       cd ${_DIR} && ${GREP} ${GREP_ARGS} Error $${file}

# eof

Reply via email to