1884c25d1SGordon Tetlow#$FreeBSD$ 2884c25d1SGordon Tetlow# @(#)Makefile 8.1 (Berkeley) 6/2/93 3884c25d1SGordon Tetlow 4884c25d1SGordon TetlowPROG= rescue 5884c25d1SGordon TetlowBINDIR?= /rescue 6884c25d1SGordon Tetlow 7884c25d1SGordon Tetlow# Uncomment to exclude tcsh 8884c25d1SGordon Tetlow#NO_TCSH=1 9884c25d1SGordon Tetlow 10884c25d1SGordon Tetlow# Shell scripts need #! line to be edited from /bin/sh to /rescue/sh 11884c25d1SGordon TetlowSCRIPTS= nextboot_FIXED 12884c25d1SGordon TetlowSCRIPTSNAME_nextboot_FIXED= nextboot.sh 13884c25d1SGordon Tetlownextboot_FIXED: ../../sbin/reboot/nextboot.sh 14884c25d1SGordon Tetlow sed '1s/\/bin\//\/rescue\//' ${.ALLSRC} > ${.TARGET} 15884c25d1SGordon TetlowCLEANFILES+= nextboot_FIXED 16884c25d1SGordon Tetlow 17884c25d1SGordon TetlowSCRIPTS+= dhclient_FIXED 18884c25d1SGordon TetlowSCRIPTSNAME_dhclient_FIXED= dhclient-script 19884c25d1SGordon Tetlowdhclient_FIXED: ../../contrib/isc-dhcp/client/scripts/freebsd 20884c25d1SGordon Tetlow sed '1s/\/bin\//\/rescue\//' ${.ALLSRC} > ${.TARGET} 21884c25d1SGordon TetlowCLEANFILES+= dhclient_FIXED 22884c25d1SGordon Tetlow 23884c25d1SGordon Tetlow################################################################# 24884c25d1SGordon Tetlow# 25884c25d1SGordon Tetlow# General notes: 26884c25d1SGordon Tetlow# 27884c25d1SGordon Tetlow# A number of Make variables are used to generate the crunchgen config file. 28884c25d1SGordon Tetlow# 29884c25d1SGordon Tetlow# CRUNCH_SRCDIRS: lists directories to search for included programs 30884c25d1SGordon Tetlow# CRUNCH_PROGS: lists programs to be included 31884c25d1SGordon Tetlow# CRUNCH_LIBS: libraries to link with 32884c25d1SGordon Tetlow# CRUNCH_BUILDOPTS: generic build options to be added to every program 33884c25d1SGordon Tetlow# 34884c25d1SGordon Tetlow# Special options can be specified for individual programs 35884c25d1SGordon Tetlow# CRUNCH_SRCDIR_$(P): base source directory for program $(P) 36884c25d1SGordon Tetlow# CRUNCH_BUILDOPTS_$(P): additional build options for $(P) 37884c25d1SGordon Tetlow# CRUNCH_ALIAS_$(P): additional names to be used for $(P) 38884c25d1SGordon Tetlow# 39884c25d1SGordon Tetlow# By default, any name appearing in CRUNCH_PROGS or CRUNCH_ALIAS_${P} 40884c25d1SGordon Tetlow# will be used to generate a hard link to the resulting binary. 41884c25d1SGordon Tetlow# Specific links can be suppressed by setting 42884c25d1SGordon Tetlow# CRUNCH_SUPPRESS_LINK_$(NAME) to 1. 43884c25d1SGordon Tetlow# 44884c25d1SGordon Tetlow 45884c25d1SGordon Tetlow# Define Makefile variable RESCUE 46884c25d1SGordon TetlowCRUNCH_BUILDOPTS+= -DRESCUE 47884c25d1SGordon Tetlow# Define compile-time RESCUE symbol when compiling components 48884c25d1SGordon TetlowCRUNCH_BUILDOPTS+= CRUNCH_CFLAGS=-DRESCUE 49884c25d1SGordon Tetlow 504d938af0SGordon Tetlow# An experiment that failed: try overriding bsd.lib.mk and bsd.prog.mk 514d938af0SGordon Tetlow# rather than incorporating rescue-specific logic into standard files. 52884c25d1SGordon Tetlow#MAKEFLAGS= -m ${.CURDIR} ${.MAKEFLAGS} 53884c25d1SGordon Tetlow 54884c25d1SGordon Tetlow# Hackery: 'librescue' exists merely as a tool for appropriately 55884c25d1SGordon Tetlow# recompiling specific library entries. We _know_ they're needed, and 56884c25d1SGordon Tetlow# regular archive searching creates ugly library ordering problems. 57884c25d1SGordon Tetlow# Easiest fix: tell the linker to include them into the executable 58884c25d1SGordon Tetlow# first, so they are guaranteed to override the regular lib entries. 59884c25d1SGordon Tetlow# Note that if 'librescue' hasn't been compiled, we'll just get the 60884c25d1SGordon Tetlow# regular lib entries from libc and friends. 61884c25d1SGordon TetlowCRUNCH_LIBS+= ${.OBJDIR}/../librescue/*.o 62884c25d1SGordon Tetlow 63884c25d1SGordon Tetlow################################################################### 64884c25d1SGordon Tetlow# Programs from stock /bin 65884c25d1SGordon Tetlow# 66884c25d1SGordon Tetlow# WARNING: Changing this list may require adjusting 67884c25d1SGordon Tetlow# /usr/include/paths.h as well! You were warned! 68884c25d1SGordon Tetlow# 69d60d0f81SGordon TetlowCRUNCH_SRCDIRS+=bin 70d60d0f81SGordon TetlowCRUNCH_PROGS_bin=cat chflags chio chmod cp date dd df domainname echo \ 71d60d0f81SGordon Tetlow ed expr getfacl hostname kenv kill ln ls mkdir mv pax ps pwd \ 72884c25d1SGordon Tetlow realpath rm rmdir setfacl sh sleep stty sync test 73884c25d1SGordon TetlowCRUNCH_LIBS+=-lcrypt -lcrypto -ledit -lkvm -ll -lm -ltermcap -lutil 74884c25d1SGordon Tetlow 75884c25d1SGordon Tetlow# Additional options for specific programs 76884c25d1SGordon TetlowCRUNCH_ALIAS_test= [ 77884c25d1SGordon TetlowCRUNCH_ALIAS_sh= -sh 78884c25d1SGordon Tetlow# The -sh alias shouldn't appear in /rescue as a hard link 79884c25d1SGordon TetlowCRUNCH_SUPPRESS_LINK_-sh=1 80884c25d1SGordon TetlowCRUNCH_ALIAS_ln= link 81884c25d1SGordon TetlowCRUNCH_ALIAS_rm= unlink 82884c25d1SGordon TetlowCRUNCH_ALIAS_ed= red 83884c25d1SGordon Tetlow 84884c25d1SGordon Tetlow.if !defined(NO_RCMNDS) 85d60d0f81SGordon TetlowCRUNCH_PROGS_bin+= rcp 86884c25d1SGordon Tetlow.endif 87884c25d1SGordon Tetlow 88884c25d1SGordon Tetlow.if !defined(NO_TCSH) 89d60d0f81SGordon TetlowCRUNCH_PROGS_bin+= csh 90884c25d1SGordon TetlowCRUNCH_ALIAS_csh= -csh tcsh -tcsh 91884c25d1SGordon TetlowCRUNCH_SUPPRESS_LINK_-csh=1 92884c25d1SGordon TetlowCRUNCH_SUPPRESS_LINK_-tcsh=1 93884c25d1SGordon Tetlow.endif 94884c25d1SGordon Tetlow 95884c25d1SGordon Tetlow#Is rmail of any use at all here? I think not. 96d60d0f81SGordon Tetlow#CRUNCH_PROGS_bin+= rmail 97884c25d1SGordon Tetlow 98884c25d1SGordon Tetlow################################################################### 99884c25d1SGordon Tetlow# Programs from standard /sbin 100884c25d1SGordon Tetlow# 101884c25d1SGordon Tetlow# WARNING: Changing this list may require adjusting 102884c25d1SGordon Tetlow# /usr/include/paths.h as well! You were warned! 103884c25d1SGordon Tetlow# 104884c25d1SGordon Tetlow# Note that mdmfs and shutdown have their own private 'pathnames.h' 105884c25d1SGordon Tetlow# headers in addition to the standard 'paths.h' header. 106884c25d1SGordon Tetlow# 107d60d0f81SGordon TetlowCRUNCH_SRCDIRS+=sbin 108d60d0f81SGordon TetlowCRUNCH_PROGS_sbin=atm adjkerntz atacontrol badsect bsdlabel camcontrol \ 1099b6e332fSGordon Tetlow ccdconfig clri comcontrol conscontrol devfs dmesg dump \ 1109b6e332fSGordon Tetlow dumpfs dumpon fore_dnld fsck fsck_ffs fsck_msdosfs fsdb \ 111884c25d1SGordon Tetlow fsirand gbde growfs ifconfig ilmid init ip6fw ipf ipfs ipfstat \ 112884c25d1SGordon Tetlow ipfw ipmon ipnat kldconfig kldload kldstat kldunload ldconfig \ 113884c25d1SGordon Tetlow md5 mdconfig mdmfs mknod mount mount_cd9660 mount_ext2fs \ 114a3367e4fSGordon Tetlow mount_msdosfs mount_nfs mount_ntfs mount_nullfs \ 115884c25d1SGordon Tetlow mount_std mount_udf mount_umapfs mount_unionfs natd newfs \ 116884c25d1SGordon Tetlow newfs_msdos nfsiod nos-tun ping ping6 quotacheck raidctl reboot \ 117884c25d1SGordon Tetlow restore rcorder route routed rtquery rtsol savecore shutdown \ 118884c25d1SGordon Tetlow slattach spppcontrol startslip swapon sysctl tunefs umount vinum 119884c25d1SGordon Tetlow 120884c25d1SGordon Tetlow# crunchgen does not like C++ programs; this should be fixed someday 121884c25d1SGordon Tetlow# CRUNCH_PROGS+= devd 122884c25d1SGordon Tetlow 123884c25d1SGordon TetlowCRUNCH_LIBS+=-lalias -latm -lbsdxml -lcam -lcurses -ldevstat -lipsec -lipx \ 124107e6cdaSGordon Tetlow -lgeom -lmd -lreadline -lsbuf -lufs -lz 125884c25d1SGordon Tetlow 126884c25d1SGordon Tetlow.if ${MACHINE_ARCH} == "i386" 127d60d0f81SGordon TetlowCRUNCH_PROGS_sbin+= cxconfig fdisk 1289b6e332fSGordon TetlowCRUNCH_ALIAS_bsdlabel= disklabel 129107e6cdaSGordon Tetlow#CRUNCH_PROGS+= mount_nwfs mount_smbfs 130107e6cdaSGordon Tetlow#CRUNCH_LIBS+= -lncp -lsmb 131884c25d1SGordon Tetlow.endif 132884c25d1SGordon Tetlow 133884c25d1SGordon Tetlow.if ${MACHINE} == "pc98" 134107e6cdaSGordon TetlowCRUNCH_SRCDIR_fdisk=$(.CURDIR)/../../sbin/fdisk_pc98 135884c25d1SGordon Tetlow.endif 136884c25d1SGordon Tetlow 137884c25d1SGordon Tetlow.if ${MACHINE_ARCH} == "ia64" 138d60d0f81SGordon TetlowCRUNCH_PROGS_sbin+= mca gpt fdisk 139884c25d1SGordon Tetlow.endif 140884c25d1SGordon Tetlow 14158824dccSGordon Tetlow.if ${MACHINE_ARCH} == "sparc64" 142d60d0f81SGordon TetlowCRUNCH_PROGS_sbin+= sunlabel 143884c25d1SGordon Tetlow.endif 144884c25d1SGordon Tetlow 145884c25d1SGordon Tetlow.if ${MACHINE_ARCH} == "alpha" 1469b6e332fSGordon TetlowCRUNCH_ALIAS_bsdlabel= disklabel 1479b6e332fSGordon Tetlow.endif 1489b6e332fSGordon Tetlow 1499b6e332fSGordon Tetlow.if ${MACHINE_ARCH} == "amd64" 150d60d0f81SGordon TetlowCRUNCH_PROGS_sbin+= fdisk 1519b6e332fSGordon TetlowCRUNCH_ALIAS_bsdlabel= disklabel 152884c25d1SGordon Tetlow.endif 153884c25d1SGordon Tetlow 154884c25d1SGordon TetlowCRUNCH_SRCDIR_atm=$(.CURDIR)/../../sbin/atm/atm 155884c25d1SGordon TetlowCRUNCH_SRCDIR_fore_dnld=$(.CURDIR)/../../sbin/atm/fore_dnld 156884c25d1SGordon TetlowCRUNCH_SRCDIR_ilmid=$(.CURDIR)/../../sbin/atm/ilmid 157884c25d1SGordon TetlowCRUNCH_SRCDIR_rtquery=$(.CURDIR)/../../sbin/routed/rtquery 158884c25d1SGordon TetlowCRUNCH_ALIAS_reboot= fastboot halt fasthalt 159884c25d1SGordon TetlowCRUNCH_ALIAS_restore=rrestore 160884c25d1SGordon TetlowCRUNCH_ALIAS_dump= rdump 161884c25d1SGordon TetlowCRUNCH_ALIAS_fsck_ffs=fsck_4.2bsd fsck_ufs 162884c25d1SGordon TetlowCRUNCH_ALIAS_mount_std= mount_devfs mount_fdescfs mount_linprocfs mount_procfs 163884c25d1SGordon Tetlow 164884c25d1SGordon Tetlow# dhclient has historically been troublesome... 165d60d0f81SGordon TetlowCRUNCH_PROGS_sbin+=dhclient 166884c25d1SGordon TetlowCRUNCH_BUILDOPTS_dhclient=-DRELEASE_CRUNCH -Dlint 167884c25d1SGordon Tetlow 168884c25d1SGordon Tetlow################################################################## 169884c25d1SGordon Tetlow# Programs from stock /usr/bin 170884c25d1SGordon Tetlow# 171d60d0f81SGordon TetlowCRUNCH_SRCDIRS+=usr.bin 172d60d0f81SGordon TetlowCRUNCH_SRCDIRS+=gnu/usr.bin 173884c25d1SGordon Tetlow 174d60d0f81SGordon TetlowCRUNCH_PROGS_usr.bin+=wall 175884c25d1SGordon Tetlow 176d60d0f81SGordon TetlowCRUNCH_PROGS_gnu/usr.bin+=gzip 177884c25d1SGordon TetlowCRUNCH_ALIAS_gzip=gunzip gzcat zcat 178884c25d1SGordon Tetlow 179d60d0f81SGordon TetlowCRUNCH_PROGS_usr.bin+=bzip2 180884c25d1SGordon TetlowCRUNCH_ALIAS_bzip2=bunzip2 bzcat 181884c25d1SGordon TetlowCRUNCH_LIBS+=-lbz2 182884c25d1SGordon Tetlow 183d60d0f81SGordon TetlowCRUNCH_PROGS_gnu/usr.bin+=tar 184d60d0f81SGordon TetlowCRUNCH_PROGS_usr.bin+=vi 185884c25d1SGordon TetlowCRUNCH_ALIAS_vi=ex 186884c25d1SGordon Tetlow 187884c25d1SGordon Tetlow################################################################## 188884c25d1SGordon Tetlow# The following is pretty nearly a generic crunchgen-handling makefile 189884c25d1SGordon Tetlow# 190884c25d1SGordon Tetlow 191884c25d1SGordon TetlowCONF= $(PROG).conf 192884c25d1SGordon TetlowOUTMK= $(PROG).mk 193884c25d1SGordon TetlowOUTC= $(PROG).c 194884c25d1SGordon TetlowOUTPUTS= $(OUTMK) $(OUTC) $(PROG).cache 195884c25d1SGordon TetlowCRUNCHOBJS= ${.OBJDIR} 196884c25d1SGordon Tetlow.if defined(MAKEOBJDIRPREFIX) 197884c25d1SGordon TetlowCANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR} 198884c25d1SGordon Tetlow.else 199884c25d1SGordon TetlowCANONICALOBJDIR:=/usr/obj${.CURDIR} 200884c25d1SGordon Tetlow.endif 201884c25d1SGordon Tetlow 202884c25d1SGordon TetlowNOMAN= true 203884c25d1SGordon TetlowCLEANFILES+= $(CONF) *.o *.lo *.c *.mk *.cache *.a *.h 204884c25d1SGordon Tetlow 205884c25d1SGordon Tetlow# Program names and their aliases contribute hardlinks to 'rescue' executable, 206884c25d1SGordon Tetlow# except for those that get suppressed. 207d60d0f81SGordon Tetlow.for D in $(CRUNCH_SRCDIRS) 208d60d0f81SGordon Tetlow.for P in $(CRUNCH_PROGS_$(D)) 209884c25d1SGordon Tetlow.ifndef CRUNCH_SUPPRESS_LINK_${P} 210884c25d1SGordon TetlowLINKS += $(BINDIR)/$(PROG) $(BINDIR)/$(P) 211884c25d1SGordon Tetlow.endif 212884c25d1SGordon Tetlow.for A in $(CRUNCH_ALIAS_$(P)) 213884c25d1SGordon Tetlow.ifndef CRUNCH_SUPPRESS_LINK_${A} 214884c25d1SGordon TetlowLINKS += $(BINDIR)/$(PROG) $(BINDIR)/$(A) 215884c25d1SGordon Tetlow.endif 216884c25d1SGordon Tetlow.endfor 217884c25d1SGordon Tetlow.endfor 218d60d0f81SGordon Tetlow.endfor 219884c25d1SGordon Tetlow 220884c25d1SGordon Tetlowall: $(PROG) 221884c25d1SGordon Tetlowexe: $(PROG) 222884c25d1SGordon Tetlow 223884c25d1SGordon Tetlow$(CONF): Makefile 224884c25d1SGordon Tetlow echo \# Auto-generated, do not edit >$(.TARGET) 225884c25d1SGordon Tetlow.for D in $(CRUNCH_SRCDIRS) 226d60d0f81SGordon Tetlow echo srcdirs $(.CURDIR)/../../$(D) >>$(.TARGET) 227884c25d1SGordon Tetlow.endfor 228884c25d1SGordon Tetlow.ifdef CRUNCH_BUILDOPTS 229884c25d1SGordon Tetlow echo buildopts $(CRUNCH_BUILDOPTS) >>$(.TARGET) 230884c25d1SGordon Tetlow.endif 231884c25d1SGordon Tetlow.ifdef CRUNCH_LIBS 232884c25d1SGordon Tetlow echo libs $(CRUNCH_LIBS) >>$(.TARGET) 233884c25d1SGordon Tetlow.endif 234d60d0f81SGordon Tetlow.for D in $(CRUNCH_SRCDIRS) 235d60d0f81SGordon Tetlow.for P in $(CRUNCH_PROGS_$(D)) 236884c25d1SGordon Tetlow echo progs $(P) >>$(.TARGET) 237884c25d1SGordon Tetlow.ifdef CRUNCH_SRCDIR_${P} 238884c25d1SGordon Tetlow echo special $(P) srcdir $(CRUNCH_SRCDIR_${P}) >>$(.TARGET) 239884c25d1SGordon Tetlow.endif 240884c25d1SGordon Tetlow.ifdef CRUNCH_BUILDOPTS_${P} 241884c25d1SGordon Tetlow echo special $(P) buildopts $(CRUNCH_BUILDOPTS_${P}) >>$(.TARGET) 242884c25d1SGordon Tetlow.endif 243884c25d1SGordon Tetlow.for A in $(CRUNCH_ALIAS_$(P)) 244884c25d1SGordon Tetlow echo ln $(P) $(A) >>$(.TARGET) 245884c25d1SGordon Tetlow.endfor 246884c25d1SGordon Tetlow.endfor 247d60d0f81SGordon Tetlow.endfor 248884c25d1SGordon Tetlow 249884c25d1SGordon Tetlow 250884c25d1SGordon Tetlow$(OUTPUTS): $(CONF) 251884c25d1SGordon Tetlow MAKEOBJDIRPREFIX=${CRUNCHOBJS} crunchgen -q -m $(OUTMK) -c $(OUTC) $(CONF) 252884c25d1SGordon Tetlow 253884c25d1SGordon Tetlow$(PROG): $(OUTPUTS) 254884c25d1SGordon Tetlow MAKEOBJDIRPREFIX=${CRUNCHOBJS} make -f $(OUTMK) 255884c25d1SGordon Tetlow 256884c25d1SGordon Tetlowobjs: 257884c25d1SGordon Tetlow MAKEOBJDIRPREFIX=${CRUNCHOBJS} make -f $(OUTMK) objs 258884c25d1SGordon Tetlow 2594d938af0SGordon Tetlow# <sigh> Someone should replace the bin/csh and bin/sh build-tools with 2604d938af0SGordon Tetlow# shell scripts so we can remove this nonsense. 2614d938af0SGordon Tetlowbuild-tools: 2624d938af0SGordon Tetlow.for _tool in bin/csh bin/sh 263d60d0f81SGordon Tetlow cd $(.CURDIR)/../../${_tool}; \ 2644d938af0SGordon Tetlow MAKEOBJDIRPREFIX=${CRUNCHOBJS} make DIRPRFX=rescue/${_tool} build-tools 2654d938af0SGordon Tetlow.endfor 2664d938af0SGordon Tetlow 267884c25d1SGordon Tetlow# Use a separate build tree to hold files compiled for this crunchgen binary 268884c25d1SGordon Tetlow# Yes, this does seem to partly duplicate bsd.subdir.mk, but I can't 269884c25d1SGordon Tetlow# get that to cooperate with bsd.prog.mk. Besides, many of the standard 270884c25d1SGordon Tetlow# targets should NOT be propagated into the components. 271884c25d1SGordon Tetlowcleandepend cleandir obj objlink: 272884c25d1SGordon Tetlow.for D in $(CRUNCH_SRCDIRS) 273d60d0f81SGordon Tetlow.for P in $(CRUNCH_PROGS_$(D)) 274d60d0f81SGordon Tetlow.ifdef CRUNCH_SRCDIR_${P} 275d60d0f81SGordon Tetlow cd ${CRUNCH_SRCDIR_$(P)} && \ 276d60d0f81SGordon Tetlow MAKEOBJDIRPREFIX=${CANONICALOBJDIR} make ${.TARGET} 277d60d0f81SGordon Tetlow.else 278d60d0f81SGordon Tetlow cd $(.CURDIR)/../../${D}/${P} && \ 279d60d0f81SGordon Tetlow MAKEOBJDIRPREFIX=${CANONICALOBJDIR} make ${.TARGET} 280d60d0f81SGordon Tetlow.endif 281d60d0f81SGordon Tetlow.endfor 282884c25d1SGordon Tetlow.endfor 283884c25d1SGordon Tetlow 284884c25d1SGordon Tetlowclean: 285884c25d1SGordon Tetlow rm -f ${CLEANFILES} 286884c25d1SGordon Tetlow if [ -e ${.OBJDIR}/$(OUTMK) ]; then \ 287884c25d1SGordon Tetlow MAKEOBJDIRPREFIX=${CRUNCHOBJS} make -f $(OUTMK) clean; \ 288884c25d1SGordon Tetlow fi 289d60d0f81SGordon Tetlow.for D in $(CRUNCH_SRCDIRS) 290d60d0f81SGordon Tetlow.for P in $(CRUNCH_PROGS_$(D)) 291d60d0f81SGordon Tetlow.ifdef CRUNCH_SRCDIR_${P} 292d60d0f81SGordon Tetlow cd ${CRUNCH_SRCDIR_$(P)} && \ 293d60d0f81SGordon Tetlow MAKEOBJDIRPREFIX=${CANONICALOBJDIR} make ${.TARGET} 294d60d0f81SGordon Tetlow.else 295d60d0f81SGordon Tetlow cd $(.CURDIR)/../../${D}/${P} && \ 296d60d0f81SGordon Tetlow MAKEOBJDIRPREFIX=${CANONICALOBJDIR} make ${.TARGET} 297d60d0f81SGordon Tetlow.endif 298d60d0f81SGordon Tetlow.endfor 299884c25d1SGordon Tetlow.endfor 300884c25d1SGordon Tetlow 301884c25d1SGordon Tetlow.include <bsd.prog.mk> 302