bsd.port.mk revision 5374
1# -*- mode: Fundamental; tab-width: 4; -*-
2#
3#	bsd.port.mk - 940820 Jordan K. Hubbard.
4#	This file is in the public domain.
5#
6# $Id: bsd.port.mk,v 1.92 1995/01/04 07:35:46 jkh Exp $
7#
8# Please view me with 4 column tabs!
9
10
11# Supported Variables and their behaviors:
12#
13# Variables that typically apply to all ports:
14# 
15# PORTSDIR		- The root of the ports tree (default: /usr/ports).
16# DISTDIR 		- Where to get gzip'd, tarballed copies of original sources
17#				  (default: ${PORTSDIR}/distfiles).
18# PREFIX		- Where to install things in general (default: /usr/local).
19# MASTER_SITES	- Primary location(s) for distribution files if not found
20#				  locally (default:
21#				   ftp://ftp.freebsd.org/pub/FreeBSD/ports/distfiles)
22#
23# MASTER_SITE_OVERRIDE - If set, override the MASTER_SITES setting with this
24#				  value.
25# MASTER_SITE_FREEBSD - If set, only use the FreeBSD master repository for
26#				  MASTER_SITES.
27# PACKAGES		- A top level directory where all packages go (rather than
28#				  going locally to each port). (default: ${PORTSDIR}/packages).
29# GMAKE			- Set to path of GNU make if not in $PATH (default: gmake).
30# XMKMF			- Set to path of `xmkmf' if not in $PATH (default: xmkmf).
31#
32# Variables that typically apply to an individual port.  Non-Boolean
33# variables without defaults are *mandatory*.
34# 
35#
36# WRKDIR 		- A temporary working directory that gets *clobbered* on clean
37#				  (default: ${.CURDIR}/work).
38# WRKSRC		- A subdirectory of ${WRKDIR} where the distribution actually
39#				  unpacks to.  (Default: ${WRKDIR}/${DISTNAME} unless
40#				  NO_WRKSUBDIR is set, in which case simply ${WRKDIR}).
41# DISTNAME		- Name of port or distribution.
42# DISTFILES		- Name(s) of archive file(s) containing distribution
43#				  (default: ${DISTDIR}/${DISTNAME}${EXTRACT_SUFX}).
44# PKGNAME		- Name of the package file to create if the DISTNAME 
45#				  isn't really relevant for the port/package
46#				  (default: ${DISTNAME}).
47# EXTRACT_ONLY	- If defined, a subset of ${DISTFILES} you want to
48#			  	  actually extract.
49# PATCHDIR 		- A directory containing any required patches
50#				  (default: ${.CURDIR}/patches)
51# SCRIPTDIR 	- A directory containing any auxilliary scripts
52#				  (default: ${.CURDIR}/scripes)
53# FILESDIR 		- A directory containing any miscellaneous additional files.
54#				  (default: ${.CURDIR}/files)
55# PKGDIR 		- A direction containing any package creation files.
56#				  (default: ${.CURDIR}/pkg)
57#
58# NO_EXTRACT	- Use a dummy (do-nothing) extract target.
59# NO_CONFIGURE	- Use a dummy (do-nothing) configure target.
60# NO_BUILD		- Use a dummy (do-nothing) build target.
61# NO_PACKAGE	- Use a dummy (do-nothing) package target.
62# NO_INSTALL	- Use a dummy (do-nothing) install target.
63# NO_WRKSUBDIR	- Assume port unpacks directly into ${WRKDIR}.
64# NO_WRKDIR		- There's no work directory at all; port does this someplace
65#				  else.
66# NO_DEPENDS	- Don't verify build of dependencies.
67# USE_GMAKE		- Says that the port uses gmake.
68# USE_IMAKE		- Says that the port uses imake.
69# NO_INSTALL_MANPAGES - For imake ports that don't like the install.man
70#						target.
71# HAS_CONFIGURE	- Says that the port has its own configure script.
72# GNU_CONFIGURE	- Set if you are using GNU configure (optional).
73# CONFIGURE_ARGS - Pass these args to configure, if ${HAS_CONFIGURE} set.
74# IS_INTERACTIVE - Set this if your port needs to interact with the user
75#				  during a build.  User can then decide to skip this port by
76#				  setting ${BATCH}, or compiling only the interactive ports
77#				  by setting ${INTERACTIVE}.
78# DEPENDS		- A list of other ports this package depends on being
79#				  made first, relative to ${PORTSDIR} (e.g. x11/tk, lang/tcl,
80#				  etc).
81# EXTRACT_CMD	- Command for extracting archive (default: tar).
82# EXTRACT_SUFX	- Suffix for archive names (default: .tar.gz).
83# EXTRACT_ARGS	- Arguments to ${EXTRACT_CMD} (default: -C ${WRKDIR} -xzf).
84#
85# NCFTP			- Full path to ncftp command if not in $PATH (default: ncftp).
86# NCFTPFLAGS    - Arguments to ${NCFTP} (default: -N).
87#
88#
89# Default targets and their behaviors:
90#
91# fetch			- Retrieves ${DISTFILES} into ${DISTDIR} as necessary.
92# extract		- Unpacks ${DISTFILES} into ${WRKDIR}.
93# configure		- Applies patches, if any, and runs either GNU configure, one
94#				  or more local configure scripts or nothing, depending on
95#				  what's available.
96# patch			- Apply any provided patches to the source.
97# build			- Actually compile the sources.
98# install		- Install the results of a build.
99# reinstall		- Install the results of a build, ignoring "already installed"
100#				  flag.
101# package		- Create a package from a build.
102# describe		- Try to generate a one-line description for each port for
103#				  use in INDEX files and the like.
104#
105# Default sequence for "all" is:  fetch extract configure build
106
107.if exists(${.CURDIR}/../Makefile.inc)
108.include "${.CURDIR}/../Makefile.inc"
109.endif
110
111# These need to be absolute since we don't know how deep in the ports
112# tree we are and thus can't go relative.  They can, of course, be overridden
113# by individual Makefiles.
114PORTSDIR?=		${DESTDIR}/usr/ports
115X11BASE?=		/usr/X11R6
116DISTDIR?=		${PORTSDIR}/distfiles
117PACKAGES?=		${PORTSDIR}/packages
118.if !defined(NO_WRKDIR)
119WRKDIR?=		${.CURDIR}/work
120.else
121WRKDIR?=		${.CURDIR}
122.endif
123.if defined(NO_WRKSUBDIR)
124WRKSRC?=		${WRKDIR}
125.else
126WRKSRC?=		${WRKDIR}/${DISTNAME}
127.endif
128PATCHDIR?=		${.CURDIR}/patches
129SCRIPTDIR?=		${.CURDIR}/scripts
130FILESDIR?=		${.CURDIR}/files
131PKGDIR?=		${.CURDIR}/pkg
132.if defined(USE_IMAKE)
133PREFIX?=		${X11BASE}
134.else
135PREFIX?=		/usr/local
136.endif
137.if defined(USE_GMAKE)
138DEPENDS+=               ${PORTSDIR}/devel/gmake
139.endif
140
141.if exists(${PORTSDIR}/../Makefile.inc)
142.include "${PORTSDIR}/../Makefile.inc"
143.endif
144
145
146# Change these if you'd prefer to keep the cookies someplace else.
147EXTRACT_COOKIE?=	${WRKDIR}/.extract_done
148CONFIGURE_COOKIE?=	${WRKDIR}/.configure_done
149INSTALL_COOKIE?=	${WRKDIR}/.install_done
150BUILD_COOKIE?=		${WRKDIR}/.build_done
151PATCH_COOKIE?=		${WRKDIR}/.patch_done
152
153# How to do nothing.  Override if you, for some strange reason, would rather
154# do something.
155DO_NADA?=		echo -n
156
157# Miscellaneous overridable commands:
158GMAKE?=			gmake
159XMKMF?=			xmkmf
160MD5?=			md5
161MD5_FILE?=		${FILESDIR}/md5
162MAKE_FLAGS?=	-f
163MAKEFILE?=		Makefile
164
165NCFTP?=			ncftp
166NCFTPFLAGS?=	-N
167
168TOUCH?=			touch
169TOUCH_FLAGS?=	-f
170
171PATCH?=			patch
172PATCH_STRIP?=	-p0
173.if defined(PATCH_DEBUG)
174PATCH_ARGS?=	-d ${WRKSRC} -E ${PATCH_STRIP}
175.else
176PATCH_ARGS?=	-d ${WRKSRC} --forward --quiet -E ${PATCH_STRIP}
177.endif
178
179EXTRACT_CMD?=	tar
180EXTRACT_SUFX?=	.tar.gz
181EXTRACT_ARGS?=	-C ${WRKDIR} -xzf
182
183PKG_CMD?=		pkg_create
184PKG_ARGS?=		-v -c ${PKGDIR}/COMMENT -d ${PKGDIR}/DESCR -f ${PKGDIR}/PLIST -p ${PREFIX}
185PKG_SUFX?=		.tgz
186
187ALL_TARGET?=		all
188INSTALL_TARGET?=	install
189
190.if defined(MASTER_SITE_FREEBSD)
191MASTER_SITE_OVERRIDE=  ftp://freebsd.cdrom.com/pub/FreeBSD/FreeBSD-current/ports/distfiles/ 
192.endif
193
194# I guess we're in the master distribution business! :)  As we gain mirror
195# sites for distfiles, add them to this list.
196.if !defined(MASTER_SITE_OVERRIDE)
197MASTER_SITES+=	ftp://freebsd.cdrom.com/pub/FreeBSD/FreeBSD-current/ports/distfiles/
198.else
199MASTER_SITES=	${MASTER_SITE_OVERRIDE}
200.endif
201
202# Derived names so that they're easily overridable.
203DISTFILES?=		${DISTNAME}${EXTRACT_SUFX}
204PKGNAME?=		${DISTNAME}
205
206.if exists(${PACKAGES})
207PKGFILE?=		${PACKAGES}/${PKGNAME}${PKG_SUFX}
208.else
209PKGFILE?=		${PKGNAME}${PKG_SUFX}
210.endif
211
212.if defined(GNU_CONFIGURE)
213CONFIGURE_ARGS?=	--prefix=${PREFIX}
214HAS_CONFIGURE=		yes
215.endif
216
217.MAIN: all
218
219# If we're in BATCH mode and the port is interactive, or we're in
220# interactive mode and the port is non-interactive, skip all the important
221# targets.  The reason we have two modes is that one might want to leave
222# a build in BATCH mode running overnight, then come back in the morning
223# and do _only_ the interactive ones that required your intervention.
224# This allows you to do both.
225#
226.if (defined(IS_INTERACTIVE) && defined(BATCH)) || (!defined(IS_INTERACTIVE) && defined(INTERACTIVE))
227all:
228	@${DO_NADA}
229pre-build:
230	@${DO_NADA}
231build:
232	@${DO_NADA}
233pre-install:
234	@${DO_NADA}
235install:
236	@${DO_NADA}
237pre-fetch:
238	@${DO_NADA}
239fetch:
240	@${DO_NADA}
241pre-configure:
242	@${DO_NADA}
243configure:
244	@${DO_NADA}
245.endif
246
247.if !target(all)
248all: extract configure build
249.endif
250
251.if !target(is_depended)
252is_depended:	all install
253.endif
254
255# The following are used to create easy dummy targets for disabling some
256# bit of default target behavior you don't want.  They still check to see
257# if the target exists, and if so don't do anything, since you might want
258# to set this globally for a group of ports in a Makefile.inc, but still
259# be able to override from an individual Makefile (since you can't _undefine_
260# a variable in make!).
261.if defined(NO_EXTRACT) && !target(extract)
262extract:
263	@${TOUCH} ${TOUCH_FLAGS} ${EXTRACT_COOKIE}
264check-md5:
265	@${DO_NADA}
266make-md5:
267	@${DO_NADA}
268.endif
269.if defined(NO_CONFIGURE) && !target(configure)
270configure:
271	@${TOUCH} ${TOUCH_FLAGS} ${CONFIGURE_COOKIE}
272.endif
273.if defined(NO_BUILD) && !target(build)
274build:
275	@${TOUCH} ${TOUCH_FLAGS} ${BUILD_COOKIE}
276.endif
277.if defined(NO_PACKAGE) && !target(package)
278package:
279	@${DO_NADA}
280.endif
281.if defined(NO_INSTALL) && !target(install)
282install:
283	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
284.endif
285.if defined(NO_PATCH) && !target(patch)
286patch:
287	@${TOUCH} ${TOUCH_FLAGS} ${PATCH_COOKIE}
288.endif
289
290# More standard targets start here.
291
292.if !target(describe)
293describe:
294	@if [ -f ${PKGDIR}/COMMENT ]; then \
295		echo "${.CURDIR}/${DISTNAME}:	`cat ${PKGDIR}/COMMENT`"; \
296	else \
297		echo "${.CURDIR}/${DISTNAME}:	** No Description"; \
298	fi
299.endif
300
301.if !target(reinstall)
302reinstall: pre-reinstall install
303
304pre-reinstall:
305	@rm -f ${INSTALL_COOKIE}
306.endif
307
308.if !target(pre-install)
309pre-install:
310	@${DO_NADA}
311.endif
312
313.if !target(install)
314install: ${INSTALL_COOKIE}
315
316${INSTALL_COOKIE}:
317	@echo "===>  Installing for ${DISTNAME}"
318	@${MAKE} ${.MAKEFLAGS} pre-install
319.if defined(USE_GMAKE)
320	@(cd ${WRKSRC}; ${GMAKE} PREFIX=${PREFIX} ${MAKE_FLAGS} ${MAKEFILE} ${INSTALL_TARGET})
321.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
322	@(cd ${WRKSRC}; ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} install.man)
323.endif
324.else defined(USE_GMAKE)
325	@(cd ${WRKSRC}; ${MAKE} PREFIX=${PREFIX} ${MAKE_FLAGS} ${MAKEFILE} ${INSTALL_TARGET})
326.if defined(USE_IMAKE) && !defined(NO_INSTALL_MANPAGES)
327	@(cd ${WRKSRC}; ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} install.man)
328.endif
329.endif
330	@${TOUCH} ${TOUCH_FLAGS} ${INSTALL_COOKIE}
331.endif
332
333.if !target(pre-package)
334pre-package:
335	@${DO_NADA}
336.endif
337
338.if !target(package)
339package: pre-package
340# Makes some gross assumptions about a fairly simple package with no
341# install, require or deinstall scripts.  Override the arguments with
342# PKG_ARGS if your package is anything but run-of-the-mill.
343	@if [ -d ${PKGDIR} ]; then \
344		echo "===>  Building package for ${DISTNAME}"; \
345		${PKG_CMD} ${PKG_ARGS} ${PKGFILE}; \
346	fi
347.endif
348
349.if !target(depends)
350depends:
351.if defined(DEPENDS)
352	@echo "===>  ${DISTNAME} depends on:  ${DEPENDS}"
353.if !defined(NO_DEPENDS)
354	@for i in ${DEPENDS}; do \
355		echo "===>  Verifying build for $$i"; \
356		if [ ! -d $$i ]; then \
357			echo ">> No directory for $$i.  Skipping.."; \
358		else \
359			(cd $$i; ${MAKE} ${.MAKEFLAGS} is_depended) ; \
360		fi \
361	done
362	@echo "===>  Returning to build of ${DISTNAME}"
363.endif
364.endif
365.endif
366
367.if !target(pre-build)
368pre-build:
369	@${DO_NADA}
370.endif
371
372.if !target(build)
373build: configure depends ${BUILD_COOKIE}
374
375${BUILD_COOKIE}:
376	@echo "===>  Building for ${DISTNAME}"
377	@${MAKE} ${.MAKEFLAGS} pre-build
378.if defined(USE_GMAKE)
379	@(cd ${WRKSRC}; ${GMAKE} ${MAKE_FLAGS} ${MAKEFILE} ${ALL_TARGET})
380.else defined(USE_GMAKE)
381	@(cd ${WRKSRC}; ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${ALL_TARGET})
382.endif
383	@if [ -f ${SCRIPTDIR}/post-build ]; then \
384		env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \
385		  WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \
386		  FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \
387		  DEPENDS="${DEPENDS}" \
388		sh ${SCRIPTDIR}/post-build; \
389	fi
390	@${TOUCH} ${TOUCH_FLAGS} ${BUILD_COOKIE}
391.endif
392
393.if !target(pre-patch)
394pre-patch:
395	@${DO_NADA}
396.endif
397
398.if !target(patch)
399patch: ${PATCH_COOKIE}
400
401${PATCH_COOKIE}:
402	@${MAKE} ${.MAKEFLAGS} pre-patch
403.if defined(PATCH_DEBUG)
404	@if [ -d ${PATCHDIR} ]; then \
405		echo "===>  Applying patches for ${DISTNAME}" ; \
406		for i in ${PATCHDIR}/patch-*; do \
407			echo "===>   Applying patch $$i" ; \
408			${PATCH} ${PATCH_ARGS} < $$i; \
409		done; \
410	fi
411	@${TOUCH} ${TOUCH_FLAGS} ${PATCH_COOKIE}
412.else
413	@if [ -d ${PATCHDIR} ]; then \
414		echo "===>  Applying patches for ${DISTNAME}" ; \
415		for i in ${PATCHDIR}/patch-*; \
416			do ${PATCH} ${PATCH_ARGS} < $$i; \
417		done;\
418	fi
419	@${TOUCH} ${TOUCH_FLAGS} ${PATCH_COOKIE}
420.endif
421.endif
422
423.if !target(pre-configure)
424pre-configure:
425	@${DO_NADA}
426.endif
427
428.if !target(configure)
429configure: extract patch ${CONFIGURE_COOKIE}
430
431${CONFIGURE_COOKIE}:
432	@echo "===>  Configuring for ${DISTNAME}"
433	@${MAKE} ${.MAKEFLAGS} pre-configure
434	@if [ -f ${SCRIPTDIR}/pre-configure ]; then \
435		env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \
436		  WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \
437		  FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \
438		  DEPENDS="${DEPENDS}" \
439		sh ${SCRIPTDIR}/pre-configure; \
440	fi
441	@if [ -f ${SCRIPTDIR}/configure ]; then \
442		env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \
443		  WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \
444		  FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \
445		  DEPENDS="${DEPENDS}" \
446		sh ${SCRIPTDIR}/configure; \
447	fi
448.if defined(HAS_CONFIGURE)
449	@(cd ${WRKSRC}; CC="${CC}" ac_cv_path_CC="${CC}" CFLAGS="${CFLAGS}" \
450	    INSTALL="${INSTALL} ${COPY} -o ${BINOWN} -g ${BINGRP}" \
451	    INSTALL_PROGRAM="${INSTALL} ${COPY} ${STRIP} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}" \
452	    ./configure ${CONFIGURE_ARGS})
453.endif
454.if defined(USE_IMAKE)
455.if defined(USE_GMAKE)
456	@(cd ${WRKSRC}; ${XMKMF} && ${GMAKE} Makefiles)
457.else
458	@(cd ${WRKSRC}; ${XMKMF} && ${MAKE} Makefiles)
459.endif
460.endif
461	@if [ -f ${SCRIPTDIR}/post-configure ]; then \
462		env CURDIR=${.CURDIR} DISTDIR=${DISTDIR} WRKDIR=${WRKDIR} \
463		  WRKSRC=${WRKSRC} PATCHDIR=${PATCHDIR} SCRIPTDIR=${SCRIPTDIR} \
464		  FILESDIR=${FILESDIR} PORTSDIR=${PORTSDIR} PREFIX=${PREFIX} \
465		  DEPENDS="${DEPENDS}" \
466		sh ${SCRIPTDIR}/post-configure; \
467	fi
468	@${TOUCH} ${TOUCH_FLAGS} ${CONFIGURE_COOKIE}
469.endif
470
471.if !target(pre-fetch)
472pre-fetch:
473	@${DO_NADA}
474.endif
475
476.if !target(fetch)
477fetch: pre-fetch
478	@if [ ! -d ${DISTDIR} ]; then mkdir -p ${DISTDIR}; fi
479	@(cd ${DISTDIR}; \
480	 for file in ${DISTFILES}; do \
481		if [ ! -f $$file ]; then \
482			echo ">> $$file doesn't seem to exist on this system."; \
483			echo ">> Attempting to fetch it from a master site."; \
484			for site in ${MASTER_SITES}; do \
485				if ${NCFTP} ${NCFTPFLAGS} $${site}$${file}; then \
486					break; \
487				fi \
488			done; \
489			if [ ! -f $$file ]; then \
490				echo ">> Couldn't fetch it - please try to retreive this";\
491				echo ">> port manually into ${DISTDIR} and try again."; \
492				exit 1; \
493			fi; \
494	    fi \
495	 done)
496.endif
497
498.if !target(make-md5)
499make-md5: fetch
500	@if [ ! -d ${FILESDIR} ]; then mkdir -p ${FILESDIR}; fi
501	@if [ -f ${MD5_FILE} ]; then rm -f ${MD5_FILE}; fi
502	
503	@(cd ${DISTDIR}; \
504	for file in ${DISTFILES}; do \
505		${MD5} $$file >> ${MD5_FILE}; \
506	done)
507.endif
508
509.if !target(check-md5)
510check-md5: fetch
511	@if [ ! -f ${MD5_FILE} ]; then \
512		echo ">> No MD5 checksum file."; \
513		exit 1; \
514	fi
515	@(cd ${DISTDIR}; \
516	for file in ${DISTFILES}; do \
517		CKSUM=`${MD5} $$file | awk '{print $$4}'`; \
518		CKSUM2=`grep "($$file)" ${MD5_FILE} | awk '{print $$4}'`; \
519		if [ "$$CKSUM" != "$$CKSUM2" ]; then \
520			echo ">> Checksum mismatch for $$file"; \
521			exit 1; \
522		fi; \
523	done)
524	@echo "Checksums OK."
525.endif
526
527.if !target(pre-extract)
528pre-extract:
529	@${DO_NADA}
530.endif
531
532.if !target(extract)
533# We need to depend on .extract_done rather than the presence of ${WRKDIR}
534# because if the user interrupts the extract in the middle (and it's often
535# a long procedure), we get tricked into thinking that we've got a good dist
536# in ${WRKDIR}.
537extract: fetch pre-extract ${EXTRACT_COOKIE}
538
539${EXTRACT_COOKIE}:
540	@echo "===>  Extracting for ${DISTNAME}"
541	@rm -rf ${WRKDIR}
542	@mkdir -p ${WRKDIR}
543.if defined(EXTRACT_ONLY)
544	@for file in ${EXTRACT_ONLY}; do \
545		${EXTRACT_CMD} ${EXTRACT_ARGS} ${DISTDIR}/$$file ; \
546	done
547.else
548	@for file in ${DISTFILES}; do \
549		${EXTRACT_CMD} ${EXTRACT_ARGS} ${DISTDIR}/$$file ; \
550	done
551.endif
552	@${TOUCH} ${TOUCH_FLAGS} ${EXTRACT_COOKIE}
553.endif
554
555.if !target(pre-clean)
556pre-clean:
557	@${DO_NADA}
558.endif
559
560.if !target(clean)
561clean: pre-clean
562	@echo "===>  Cleaning for ${DISTNAME}"
563	@rm -f ${EXTRACT_COOKIE} ${CONFIGURE_COOKIE} ${INSTALL_COOKIE} \
564		${BUILD_COOKIE} ${PATCH_COOKIE}
565.if !defined(NO_WRKDIR)
566	@rm -rf ${WRKDIR}
567.endif
568.endif
569
570# No pre-targets for depend or tags.  It would be silly.
571
572# Depend is generally meaningless for arbitrary ports, but if someone wants
573# one they can override this.  This is just to catch people who've gotten into
574# the habit of typing `make depend all install' as a matter of course.
575#
576.if !target(depend)
577depend:
578.endif
579
580# Same goes for tags
581.if !target(tags)
582tags:
583.endif
584