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