summaryrefslogtreecommitdiffstats
path: root/share/mk/bsd.port.mk
blob: 870ba1162a3612ec22960f20c282d821c08200d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#	bsd.port.mk - 940820 Jordan K. Hubbard.
#	This file is in the public domain.
#
# $Id: bsd.port.mk,v 1.1 1994/08/21 13:12:57 jkh Exp $

#
# Supported Variables and their behaviors:
#
# GMAKE		- Set to path of GNU make if not in $PATH.
# DISTDIR 	- Where to get gzip'd, tarballed copies of original sources.
# DISTNAME	- Name of package or distribution.
# WRKDIR 	- A temporary working directory that gets *clobbered* on clean.
# WRKSRC	- A subdirectory of ${WRKDIR} where the distribution actually
#		  unpacks to.  Defaults to ${WRKDIR}/${DISTNAME}.
# PATCHDIR 	- A directory containing required patches.
# SCRIPTDIR 	- A directory containing auxilliary scripts.
# FILESDIR 	- A directory containing any miscellaneous additional files.
# PKGDIR 	- Package creation files.
#
# USE_GMAKE	- Says that the package uses gmake (*).
# GNU_CONFIGURE	- Says that the package uses GNU configure (*).
# GNU_CONFIGURE_ARGS - If defined, override defaults with these args (*).
# HOME_LOCATION	- site/path name (or user's email address) describing
#		  where this package came from or can be obtained if the
#		  tarball is missing.
# 
#
# Default targets and their behaviors:
#
# extract	- Unpacks ${DISTDIR}/${DISTNAME}.tar.gz into ${WRKDIR}.
# configure	- Applys patches, if any, and runs either GNU configure, a
#		  local configure or nothing, depending on settings.
# build		- Actually compile the sources.
# install	- Install the results of a build.
# package	- Create a package from a build.


.if exists(${.CURDIR}/../Makefile.inc)
.include "${.CURDIR}/../Makefile.inc"
.endif

GMAKE?=		gmake

# This needs to be absolute since we don't know how deep in the ports
# tree we are and thus can't go relative.  It can, of course, be overridden
# by individual Makefiles.
DISTDIR?=	/usr/ports/distfiles

WRKDIR?=	${.CURDIR}/work
WRKSRC?=	${WRKDIR}/${DISTNAME}
PATCHDIR?=	${.CURDIR}/patches
SCRIPTDIR?=	${.CURDIR}/scripts
FILESDIR?=	${.CURDIR}/files
PKGDIR?=	${.CURDIR}/pkg

# Miscellaneous overridable commands:
EXTRACT_CMD?=	tar
EXTRACT_SUFX?=	.tar.gz
EXTRACT_ARGS?=	-C ${WRKDIR} -xzf

HOME_LOCATION?=	<original site unknown>

.MAIN: all
all: extract configure build

.if !target(install)
install:
	@echo "===>  Installing for ${DISTNAME}"
.if defined(USE_GMAKE)
	@(cd ${WRKSRC}; ${GMAKE} install)
.else defined(USE_GMAKE)
	@(cd ${WRKSRC}; ${MAKE} install)
.endif
.endif

.if !target(package)
package:
# Makes some gross assumptions about a fairly simple package with no
# install, require or deinstall scripts.  Override this rule if your
# package is anything but run-of-the-mill (or show me a way to do this
# more generally).
	@[ -d ${PKGDIR} ] && \
		echo "===>  Building package for ${DISTNAME}" ; \
		pkg_create -c pkg/COMMENT -d pkg/DESCR -f pkg/PLIST ${DISTNAME}
.endif

.if !target(build)
build: configure
	@echo "===>  Building for ${DISTNAME}"
.if defined(USE_GMAKE)
	@(cd ${WRKSRC}; ${GMAKE} all)
.else defined(USE_GMAKE)
	@(cd ${WRKSRC}; ${MAKE} all)
.endif
.endif

.if !target(configure)
configure: extract
	@echo "===>  Configuring for ${DISTNAME}"
	@if [ -d ${PATCHDIR} ]; then \
		echo "===>  Applying patches for ${DISTNAME}" ; \
		for i in ${PATCHDIR}/patch-*; do \
			patch -d ${WRKSRC} --quiet -E -p0 < $$i; \
		done; \
	fi
# We have a small convention for our local configure scripts, which
# is that ${.CURDIR} and the package working directory get passed as
# command-line arguments since all other methods are a little
# problematic.
	@if [ -f ${SCRIPTDIR}/configure ]; then \
		sh ${SCRIPTDIR}/configure ${.CURDIR} ${WRKSRC}; \
	fi
.if defined(GNU_CONFIGURE)
.if !defined(GNU_CONFIGURE_ARGS)
	@(cd ${WRKSRC}; ./configure i386--freebsd)
.else !defined(GNU_CONFIGURE_ARGS)
	@(cd ${WRKSRC}; ./configure ${GNU_CONFIGURE_ARGS})
.endif
.endif
.endif

.if !target(extract)
# We need to depend on .extract_done rather than the presence of ${WRKDIR}
# because if the user interrupts the extract in the middle (and it's often
# a long procedure), we get tricked into thinking that we've got a good dist
# in ${WRKDIR}.
extract: ${.CURDIR}/.extract_done

${.CURDIR}/.extract_done:
	@echo "===>  Extracting for ${DISTNAME}"
	@rm -rf ${WRKDIR}
	@mkdir -p ${WRKDIR}
	@if [ ! -f ${DISTDIR}/${DISTNAME}${EXTRACT_SUFX} ]; then \
	  echo "Sorry, can't find ${DISTDIR}/${DISTNAME}${EXTRACT_SUFX}."; \
	  echo "Please obtain this file from:"; \
	  echo "	$HOME_LOCATION"; \
	  echo "before proceeding."; \
	fi
	@${EXTRACT_CMD} ${EXTRACT_ARGS} ${DISTDIR}/${DISTNAME}${EXTRACT_SUFX}
	@touch -f ${.CURDIR}/.extract_done
.endif

.if !target(clean)
clean:
	@echo "===>  Cleaning for ${DISTNAME}"
	@rm -f ${.CURDIR}/.extract_done
	@rm -rf ${WRKDIR}
.endif

.if !target(cleandir)
cleandir: clean
.endif
OpenPOWER on IntegriCloud