Makefile revision 164526
162053Smarkm#$FreeBSD: head/rescue/rescue/Makefile 164526 2006-11-22 22:55:54Z rodrigc $ 262765Smarkm# @(#)Makefile 8.1 (Berkeley) 6/2/93 362053Smarkm 462053SmarkmNO_MAN= 562053Smarkm 662053Smarkm.include <bsd.own.mk> 762053Smarkm 862053SmarkmPROG= rescue 962053SmarkmBINDIR?=/rescue 1062053Smarkm 1162053Smarkm# Shell scripts need #! line to be edited from /bin/sh to /rescue/sh 1262053SmarkmSCRIPTS= nextboot_FIXED 1362053SmarkmSCRIPTSNAME_nextboot_FIXED= nextboot 1462053Smarkmnextboot_FIXED: ../../sbin/reboot/nextboot.sh 1562053Smarkm sed '1s/\/bin\//\/rescue\//' ${.ALLSRC} > ${.TARGET} 1662053SmarkmCLEANFILES+= nextboot_FIXED 1762053Smarkm 1862053SmarkmSCRIPTS+= dhclient_FIXED 1962053SmarkmSCRIPTSNAME_dhclient_FIXED= dhclient-script 2062053Smarkmdhclient_FIXED: ../../sbin/dhclient/dhclient-script 2162053Smarkm sed '1s/\/bin\//\/rescue\//' ${.ALLSRC} > ${.TARGET} 2262053SmarkmCLEANFILES+= dhclient_FIXED 2362053Smarkm 2462053Smarkm################################################################# 2562053Smarkm# 2662053Smarkm# General notes: 2762053Smarkm# 2862053Smarkm# A number of Make variables are used to generate the crunchgen config file. 2962053Smarkm# 3063771Smarkm# CRUNCH_SRCDIRS: lists directories to search for included programs 3163771Smarkm# CRUNCH_PROGS: lists programs to be included 3262053Smarkm# CRUNCH_LIBS: libraries to link with 3362053Smarkm# CRUNCH_BUILDOPTS: generic build options to be added to every program 3462053Smarkm# 3562053Smarkm# Special options can be specified for individual programs 3665686Smarkm# CRUNCH_SRCDIR_$(P): base source directory for program $(P) 3765686Smarkm# CRUNCH_BUILDOPTS_$(P): additional build options for $(P) 3862053Smarkm# CRUNCH_ALIAS_$(P): additional names to be used for $(P) 3965686Smarkm# 4067365Sjhb# By default, any name appearing in CRUNCH_PROGS or CRUNCH_ALIAS_${P} 4165686Smarkm# will be used to generate a hard link to the resulting binary. 4267112Smarkm# Specific links can be suppressed by setting 4362053Smarkm# CRUNCH_SUPPRESS_LINK_$(NAME) to 1. 4462765Smarkm# 4562053Smarkm 4665712Sjhb# Define Makefile variable RESCUE 4762053SmarkmCRUNCH_BUILDOPTS+= -DRESCUE 4862053Smarkm# Define compile-time RESCUE symbol when compiling components 4967112SmarkmCRUNCH_BUILDOPTS+= CRUNCH_CFLAGS=-DRESCUE 5067112Smarkm 5162053Smarkm# An experiment that failed: try overriding bsd.lib.mk and bsd.prog.mk 5262765Smarkm# rather than incorporating rescue-specific logic into standard files. 5365686Smarkm#MAKEFLAGS= -m ${.CURDIR} ${.MAKEFLAGS} 5462053Smarkm 5562765Smarkm# Hackery: 'librescue' exists merely as a tool for appropriately 5662765Smarkm# recompiling specific library entries. We _know_ they're needed, and 5763855Smarkm# regular archive searching creates ugly library ordering problems. 5862053Smarkm# Easiest fix: tell the linker to include them into the executable 5965686Smarkm# first, so they are guaranteed to override the regular lib entries. 6065686Smarkm# Note that if 'librescue' hasn't been compiled, we'll just get the 6162765Smarkm# regular lib entries from libc and friends. 6262765SmarkmCRUNCH_LIBS+= ${.OBJDIR}/../librescue/*.o 6362765Smarkm 6465686Smarkm################################################################### 6565686Smarkm# Programs from stock /bin 6665686Smarkm# 6765686Smarkm# WARNING: Changing this list may require adjusting 6865686Smarkm# /usr/include/paths.h as well! You were warned! 6967112Smarkm# 7063771SmarkmCRUNCH_SRCDIRS+= bin 7165686SmarkmCRUNCH_PROGS_bin= cat chflags chio chmod cp date dd df echo \ 7265686Smarkm ed expr getfacl hostname kenv kill ln ls mkdir mv pax ps pwd \ 7367112Smarkm realpath rm rmdir setfacl sh stty sync test 7465686SmarkmCRUNCH_LIBS+= -lcrypt -ledit -lkvm -ll -lm -ltermcap -lutil 7565686Smarkm.if ${MK_OPENSSL} != "no" 7665686SmarkmCRUNCH_LIBS+= -lcrypto 7765686Smarkm.endif 7865686Smarkm 7962765Smarkm# Additional options for specific programs 8065686SmarkmCRUNCH_ALIAS_test= [ 8165856SjhbCRUNCH_ALIAS_sh= -sh 8262765Smarkm# The -sh alias shouldn't appear in /rescue as a hard link 8367112SmarkmCRUNCH_SUPPRESS_LINK_-sh= 1 8467112SmarkmCRUNCH_ALIAS_ln= link 8567112SmarkmCRUNCH_ALIAS_rm= unlink 8665856SjhbCRUNCH_ALIAS_ed= red 8765686Smarkm 8865686Smarkm.if ${MK_RCMDS} != "no" 8965686SmarkmCRUNCH_PROGS_bin+= rcp 9065686Smarkm.endif 9165686Smarkm 9265686Smarkm.if ${MK_TCSH} != "no" 9362765SmarkmCRUNCH_PROGS_bin+= csh 9467112SmarkmCRUNCH_ALIAS_csh= -csh tcsh -tcsh 9562765SmarkmCRUNCH_SUPPRESS_LINK_-csh= 1 9665686SmarkmCRUNCH_SUPPRESS_LINK_-tcsh= 1 9765686Smarkm.endif 9865686Smarkm 9965686Smarkm################################################################### 10065686Smarkm# Programs from standard /sbin 10165686Smarkm# 10265686Smarkm# WARNING: Changing this list may require adjusting 10362765Smarkm# /usr/include/paths.h as well! You were warned! 10467112Smarkm# 10562765Smarkm# Note that mdmfs have their own private 'pathnames.h' 10665686Smarkm# headers in addition to the standard 'paths.h' header. 10765686Smarkm# 10865686SmarkmCRUNCH_SRCDIRS+= sbin 10965686SmarkmCRUNCH_PROGS_sbin= atacontrol badsect bsdlabel \ 11065686Smarkm camcontrol ccdconfig clri devfs dmesg dump \ 11165686Smarkm dumpfs dumpon fsck fsck_ffs fsck_msdosfs fsdb \ 11265686Smarkm fsirand gbde ifconfig init \ 11365686Smarkm kldconfig kldload kldstat kldunload ldconfig \ 11465686Smarkm md5 mdconfig mdmfs mknod mount mount_cd9660 \ 11565686Smarkm mount_msdosfs mount_nfs mount_ntfs mount_nullfs \ 11665686Smarkm mount_udf mount_umapfs mount_unionfs newfs \ 11765686Smarkm newfs_msdos nos-tun ping reboot \ 11865686Smarkm restore rcorder route routed rtquery rtsol savecore \ 11965686Smarkm slattach spppcontrol startslip swapon sysctl tunefs umount 12065686Smarkm 12165686Smarkm.if ${MK_ATM} != "no" 12265686SmarkmCRUNCH_PROGS_sbin+= atm atmconfig fore_dnld ilmid 12365686SmarkmCRUNCH_LIBS+= -latm 12465686Smarkm.endif 12565686Smarkm 12665686Smarkm.if ${MK_INET6_SUPPORT} != "no" 12765686SmarkmCRUNCH_PROGS_sbin+= ping6 12865712Sjhb.endif 12965686Smarkm 13065686Smarkm.if ${MK_IPFILTER} != "no" 13165686SmarkmCRUNCH_PROGS_sbin+= ipf 13265686Smarkm.endif 13365686Smarkm 13465686Smarkm# crunchgen does not like C++ programs; this should be fixed someday 13565686Smarkm# CRUNCH_PROGS+= devd 13665686Smarkm 13765686SmarkmCRUNCH_LIBS+= -lalias -lcam -lcurses -ldevstat -lipsec 13865686Smarkm.if ${MK_IPX} != "no" 13965686SmarkmCRUNCH_LIBS+= -lipx 14065686Smarkm.endif 14165686SmarkmCRUNCH_LIBS+= -lgeom -lbsdxml -lkiconv -lmd -lreadline -lsbuf -lufs -lz 14265686Smarkm 14365686Smarkm.if ${MACHINE_ARCH} == "i386" 14465686SmarkmCRUNCH_PROGS_sbin+= sconfig fdisk 14565686SmarkmCRUNCH_ALIAS_bsdlabel= disklabel 14665686Smarkm#.if ${MK_NCP} != "no" 14765686Smarkm#CRUNCH_PROGS+= mount_nwfs 14865686Smarkm#CRUNCH_LIBS+= -lncp 14965686Smarkm#.endif 15065686Smarkm#CRUNCH_PROGS+= mount_smbfs 15165686Smarkm#CRUNCH_LIBS+= -lsmb 15265686Smarkm.endif 15365686Smarkm 15465686Smarkm.if ${MACHINE} == "pc98" 15565686SmarkmCRUNCH_SRCDIR_fdisk= $(.CURDIR)/../../sbin/fdisk_pc98 15665686Smarkm.endif 15765686Smarkm 15865686Smarkm.if ${MACHINE_ARCH} == "ia64" 15965686SmarkmCRUNCH_PROGS_sbin+= mca gpt fdisk 16065686Smarkm.endif 16165686Smarkm 16265686Smarkm.if ${MACHINE_ARCH} == "sparc64" 16365686SmarkmCRUNCH_PROGS_sbin+= sunlabel 16465686Smarkm.endif 16565686Smarkm 16665686Smarkm.if ${MACHINE_ARCH} == "amd64" 16765686SmarkmCRUNCH_PROGS_sbin+= fdisk 16865686SmarkmCRUNCH_ALIAS_bsdlabel= disklabel 16965686Smarkm.endif 17065686Smarkm 17165686SmarkmCRUNCH_SRCDIR_atm= $(.CURDIR)/../../sbin/atm/atm 17265686SmarkmCRUNCH_SRCDIR_atmconfig= $(.CURDIR)/../../sbin/atm/atmconfig 17365686SmarkmCRUNCH_SRCDIR_fore_dnld= $(.CURDIR)/../../sbin/atm/fore_dnld 17465686SmarkmCRUNCH_SRCDIR_ilmid= $(.CURDIR)/../../sbin/atm/ilmid 17567112SmarkmCRUNCH_SRCDIR_rtquery= $(.CURDIR)/../../sbin/routed/rtquery 17665686SmarkmCRUNCH_SRCDIR_ipf= $(.CURDIR)/../../sbin/ipf/ipf 17765686SmarkmCRUNCH_ALIAS_reboot= fastboot halt fasthalt 17865686SmarkmCRUNCH_ALIAS_restore= rrestore 17965686SmarkmCRUNCH_ALIAS_dump= rdump 18065686SmarkmCRUNCH_ALIAS_fsck_ffs= fsck_4.2bsd fsck_ufs 18165686Smarkm 18265686Smarkm# dhclient has historically been troublesome... 18365686SmarkmCRUNCH_PROGS_sbin+= dhclient 18465686SmarkmCRUNCH_BUILDOPTS_dhclient= -DRELEASE_CRUNCH -Dlint 18565686Smarkm 18665686Smarkm################################################################## 18765686Smarkm# Programs from stock /usr/bin 18865686Smarkm# 18965686SmarkmCRUNCH_SRCDIRS+= usr.bin 19067112SmarkmCRUNCH_SRCDIRS+= gnu/usr.bin 19167112Smarkm 19265686SmarkmCRUNCH_PROGS_gnu/usr.bin+= gzip 19365686SmarkmCRUNCH_ALIAS_gzip= gunzip gzcat zcat 19465686Smarkm 19565686SmarkmCRUNCH_PROGS_usr.bin+= bzip2 19665686SmarkmCRUNCH_ALIAS_bzip2= bunzip2 bzcat 19762765SmarkmCRUNCH_LIBS+= -lbz2 19862765Smarkm 19965686SmarkmCRUNCH_PROGS_usr.bin+= tar 20062765SmarkmCRUNCH_LIBS+= -larchive 20162053Smarkm 20265686SmarkmCRUNCH_PROGS_usr.bin+= vi 20365686SmarkmCRUNCH_ALIAS_vi= ex 20462765Smarkm 20565686SmarkmCRUNCH_PROGS_usr.bin+= id 20662765SmarkmCRUNCH_ALIAS_id= groups whoami 20765686Smarkm 20862765Smarkm################################################################## 20962765Smarkm# Programs from stock /usr/sbin 21062765Smarkm# 21162765SmarkmCRUNCH_SRCDIRS+= usr.sbin 21262765Smarkm 21362765SmarkmCRUNCH_PROGS_usr.sbin+= chroot 21465686Smarkm 21565686Smarkm################################################################## 21665686Smarkm# The following is pretty nearly a generic crunchgen-handling makefile 21765686Smarkm# 21865686Smarkm 21965686SmarkmCONF= $(PROG).conf 22065686SmarkmOUTMK= $(PROG).mk 22165686SmarkmOUTC= $(PROG).c 22267112SmarkmOUTPUTS=$(OUTMK) $(OUTC) $(PROG).cache 22365712SjhbCRUNCHOBJS= ${.OBJDIR} 22465686Smarkm.if defined(MAKEOBJDIRPREFIX) 22565686SmarkmCANONICALOBJDIR:= ${MAKEOBJDIRPREFIX}${.CURDIR} 22665686Smarkm.else 22765686SmarkmCANONICALOBJDIR:= /usr/obj${.CURDIR} 22867112Smarkm.endif 22965686Smarkm 23065686SmarkmCLEANFILES+= $(CONF) *.o *.lo *.c *.mk *.cache *.a *.h 23165686Smarkm 23265686Smarkm# Program names and their aliases contribute hardlinks to 'rescue' executable, 23365686Smarkm# except for those that get suppressed. 23465686Smarkm.for D in $(CRUNCH_SRCDIRS) 23562053Smarkm.for P in $(CRUNCH_PROGS_$(D)) 23662053Smarkm.ifdef CRUNCH_SRCDIR_${P} 23762053Smarkm$(OUTPUTS): $(CRUNCH_SRCDIR_${P})/Makefile 23862765Smarkm.else 23962053Smarkm$(OUTPUTS): $(.CURDIR)/../../$(D)/$(P)/Makefile 24062765Smarkm.endif 24165686Smarkm.ifndef CRUNCH_SUPPRESS_LINK_${P} 24262765SmarkmLINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(P) 24365686Smarkm.endif 24465686Smarkm.for A in $(CRUNCH_ALIAS_$(P)) 24562765Smarkm.ifndef CRUNCH_SUPPRESS_LINK_${A} 24665686SmarkmLINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(A) 24765686Smarkm.endif 24865686Smarkm.endfor 24965686Smarkm.endfor 25065686Smarkm.endfor 25165686Smarkm 25267112Smarkmall: $(PROG) 25365686Smarkmexe: $(PROG) 25467112Smarkm 25567112Smarkm$(CONF): Makefile 25667112Smarkm echo \# Auto-generated, do not edit >$(.TARGET) 25765686Smarkm.ifdef CRUNCH_BUILDOPTS 25865686Smarkm echo buildopts $(CRUNCH_BUILDOPTS) >>$(.TARGET) 25965686Smarkm.endif 26065686Smarkm.ifdef CRUNCH_LIBS 26165686Smarkm echo libs $(CRUNCH_LIBS) >>$(.TARGET) 26265686Smarkm.endif 26365686Smarkm.for D in $(CRUNCH_SRCDIRS) 26465686Smarkm.for P in $(CRUNCH_PROGS_$(D)) 26565686Smarkm echo progs $(P) >>$(.TARGET) 26665686Smarkm.ifdef CRUNCH_SRCDIR_${P} 26765686Smarkm echo special $(P) srcdir $(CRUNCH_SRCDIR_${P}) >>$(.TARGET) 26865686Smarkm.else 26962765Smarkm echo special $(P) srcdir $(.CURDIR)/../../$(D)/$(P) >>$(.TARGET) 27062765Smarkm.endif 27162765Smarkm.ifdef CRUNCH_BUILDOPTS_${P} 27262765Smarkm echo special $(P) buildopts DIRPRFX=${DIRPRFX}${P}/ \ 27362765Smarkm $(CRUNCH_BUILDOPTS_${P}) >>$(.TARGET) 27465686Smarkm.else 27565686Smarkm echo special $(P) buildopts DIRPRFX=${DIRPRFX}${P}/ >>$(.TARGET) 27663771Smarkm.endif 27765686Smarkm.for A in $(CRUNCH_ALIAS_$(P)) 27865686Smarkm echo ln $(P) $(A) >>$(.TARGET) 27965686Smarkm.endfor 28065686Smarkm.endfor 28162053Smarkm.endfor 28262053Smarkm 28362765Smarkm# XXX Make sure we don't pass -P to crunchgen(1). 28462765Smarkm.MAKEFLAGS:= ${.MAKEFLAGS:N-P} 28562765Smarkm.ORDER: $(OUTPUTS) objs 28662765Smarkm$(OUTPUTS): $(CONF) 28765686Smarkm MAKEOBJDIRPREFIX=${CRUNCHOBJS} crunchgen -fq -m $(OUTMK) \ 28865686Smarkm -c $(OUTC) $(CONF) 28965686Smarkm 29062053Smarkm$(PROG): $(OUTPUTS) objs 29162053Smarkm MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f $(OUTMK) exe 29265686Smarkm 29365686Smarkmobjs: $(OUTMK) 29465686Smarkm MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f $(OUTMK) objs 29565686Smarkm 29665686Smarkm# <sigh> Someone should replace the bin/csh and bin/sh build-tools with 29762053Smarkm# shell scripts so we can remove this nonsense. 29865686Smarkmbuild-tools: 29965686Smarkm.for _tool in bin/csh bin/sh 30062765Smarkm cd $(.CURDIR)/../../${_tool}; \ 30163771Smarkm MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} obj; \ 30263771Smarkm MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} build-tools 30363771Smarkm.endfor 30462053Smarkm 30562765Smarkm# Use a separate build tree to hold files compiled for this crunchgen binary 30662765Smarkm# Yes, this does seem to partly duplicate bsd.subdir.mk, but I can't 30762765Smarkm# get that to cooperate with bsd.prog.mk. Besides, many of the standard 30865686Smarkm# targets should NOT be propagated into the components. 30962765Smarkmcleandepend cleandir obj objlink: 31065686Smarkm.for D in $(CRUNCH_SRCDIRS) 31162765Smarkm.for P in $(CRUNCH_PROGS_$(D)) 31265686Smarkm.ifdef CRUNCH_SRCDIR_${P} 31362765Smarkm cd ${CRUNCH_SRCDIR_$(P)} && \ 31465686Smarkm MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 31565686Smarkm DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET} 31665686Smarkm.else 31762053Smarkm cd $(.CURDIR)/../../${D}/${P} && \ 31862053Smarkm MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 31965686Smarkm DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET} 32065686Smarkm.endif 32165686Smarkm.endfor 32262053Smarkm.endfor 32365686Smarkm 32465686Smarkmclean: 32565686Smarkm rm -f ${CLEANFILES} 32665686Smarkm if [ -e ${.OBJDIR}/$(OUTMK) ]; then \ 32765686Smarkm MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f $(OUTMK) clean; \ 32865686Smarkm fi 32962053Smarkm.for D in $(CRUNCH_SRCDIRS) 33062053Smarkm.for P in $(CRUNCH_PROGS_$(D)) 33162053Smarkm.ifdef CRUNCH_SRCDIR_${P} 33262765Smarkm cd ${CRUNCH_SRCDIR_$(P)} && \ 33365686Smarkm MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 33465686Smarkm DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET} 33562765Smarkm.else 33662053Smarkm cd $(.CURDIR)/../../${D}/${P} && \ 33762765Smarkm MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \ 33862053Smarkm DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET} 33962765Smarkm.endif 34062765Smarkm.endfor 34165686Smarkm.endfor 34265686Smarkm 34365686Smarkm.include <bsd.prog.mk> 34465686Smarkm