Line # Revision Author
1 8 ahitrov@rambler.ru ##############################################################################
2 # $HeadURL: http://svn.dev.rambler.ru/Contenido/branches/utf8/ports/etc/ports.mk $
3 # $Id: ports.mk 1526 2010-03-29 11:11:10Z ahitrov $
4 ###############################################################################
5
6 PREFIX ?= ${error PREFIX must be defined}
7 PORTSWRK ?= ${error PORTSWRK must be defined}
8
9 PORTSDIR ?= ${basename ${shell cd ../../ && pwd}}
10 PORTSDB ?= ${PORTSWRK}/db
11 DISTDIR ?= ${PORTSWRK}/distfiles
12
13 MASTER_CPAN_SITES ?= \
14 http://www.cpan.dk/modules/by-module/ \
15 ftp://ftp.kddlabs.co.jp/lang/perl/CPAN/modules/by-module/ \
16 ftp://ftp.dti.ad.jp/pub/lang/CPAN/modules/by-module/ \
17 ftp://ftp.sunet.se/pub/lang/perl/CPAN/modules/by-module/ \
18 ftp://mirror.hiwaay.net/CPAN/modules/by-module/ \
19 ftp://ftp.mirrorservice.org/sites/ftp.funet.fi/pub/languages/perl/CPAN/modules/by-module/ \
20 ftp://bioinfo.weizmann.ac.il/pub/software/perl/CPAN/modules/by-module/ \
21 ftp://csociety-ftp.ecn.purdue.edu/pub/CPAN/modules/by-module/ \
22 ftp://ftp.isu.net.sa/pub/CPAN/modules/by-module/ \
23 ftp://ftp.ucr.ac.cr/pub/Unix/CPAN/modules/by-module/ \
24 ftp://ftp.cs.colorado.edu/pub/perl/CPAN/modules/by-module/ \
25 ftp://cpan.pop-mg.com.br/pub/CPAN/modules/by-module/ \
26 ftp://ftp.is.co.za/programming/perl/CPAN/modules/by-module/ \
27 http://at.cpan.org/modules/by-module/ \
28 ftp://ftp.chg.ru/pub/lang/perl/CPAN/modules/by-module/ \
29 ftp://ftp.auckland.ac.nz/pub/perl/CPAN/modules/by-module/
30
31
32 MASTER_SITES ?= /usr/local/dist \
33 495 ahitrov http://contenido.me/repos/Contenido/cnddist
34 8 ahitrov@rambler.ru
35 MASTER_POST_SITES ?=
36
37 ifdef MASTER_CPAN_SUBDIR
38 MASTER_SITES += ${addsuffix ${MASTER_CPAN_SUBDIR},${MASTER_CPAN_SITES}}
39 endif
40
41 PORTDIR = ${basename ${shell pwd}}
42 PORTNAME ?= ${shell echo ${PORTDIR} | sed 's/.*\///'}
43 PORTVERSION ?= ${error PORTVERSION must be defined}
44 DISTFILE ?= ${PORTNAME}${PORTVERSION:%=-%}.tar.gz
45 WRKDIR = ${PORTSWRK}/work/${PORTNAME}
46 WRKSRC ?= ${WRKDIR}/${DISTFILE:%.tar.gz=%}
47
48 OPSYS = ${shell uname}
49
50 FETCH_CMD ?= ${shell which fetch || which wget || echo ''}
51 FETCH_ARGS ?= ${shell perl -e 'print "-o" if "${FETCH_CMD}" =~ /fetch$$/; \
52 print "-P" if "${FETCH_CMD}" =~ /wget$$/;'}
53
54 MAKE_RECURSIVE = ${MAKE} -s MFLAGS= MAKEFLAGS= MAKELEVEL= PERL_CHECKED=
55 MAKE_RECURSIVE_PERL = ${MAKE} -s MFLAGS= MAKEFLAGS= MAKELEVEL=
56
57 include ${PORTSDIR}/etc/perl.mk
58
59
60 #########################
61 # Common for Perl modules
62 #########################
63 ifneq (${PERL_MAKEMAKER}${PERL_MODBUILD},)
64 CONFIGURE_ENV ?= PERL5LIB='${PERL_LIBCOL}' MAKE=${MAKE}
65 BUILD_ENV ?= PERL5LIB='${PERL_LIBCOL}' MAKE=${MAKE}
66 INSTALL_ENV ?= PERL5LIB='${PERL_LIBCOL}' MAKE=${MAKE} OPSYS=${OPSYS}
67
68 PERL_CHECK ?= yes
69 PERL_CHECK_MODULE ?= ${PORTNAME}
70 PERL_CHECK_VERSION ?= ${PORTVERSION}
71 endif
72
73
74 #####################
75 # ExtUtils::MakeMaker
76 #####################
77 ifdef PERL_MAKEMAKER
78 CONFIGURE_COMMAND ?= ${PERL} Makefile.PL
79
80 ifeq (${OPSYS},FreeBSD)
81 CONFIGURE_ARGS ?= INSTALLDIRS="site" \
82 PREFIX="${PREFIX}" \
83 INSTALLPRIVLIB="${PREFIX}/lib/perl5/site_perl/${PERL_VER}" \
84 INSTALLARCHLIB="${PREFIX}/lib/perl5/site_perl/${PERL_VER}/${PERL_ARCH}"
85 else
86 CONFIGURE_ARGS ?= INSTALLDIRS="site" \
87 PREFIX="${PREFIX}" \
88 INSTALLPRIVLIB="${PREFIX}/lib/perl5/site_perl/${PERL_VER}" \
89 INSTALLARCHLIB="${PREFIX}/lib/perl5/site_perl/${PERL_VER}/${PERL_ARCH}" \
90 INSTALLSITELIB="${PREFIX}/lib/perl5/site_perl/${PERL_VER}" \
91 INSTALLSITEARCH="${PREFIX}/lib/perl5/site_perl/${PERL_VER}/${PERL_ARCH}"
92 endif
93
94 endif
95
96
97 #####################
98 # Module::Build
99 #####################
100 ifdef PERL_MODBUILD
101 CONFIGURE_COMMAND ?= ${PERL} Build.PL
102 CONFIGURE_ARGS ?= create_packlist=0 \
103 install_path=lib="${PREFIX}/lib/perl5/site_perl/${PERL_VER}" \
104 install_path=arch="${PREFIX}/lib/perl5/site_perl/${PERL_VER}/${PERL_ARCH}" \
105 install_path=script="${PREFIX}/bin" \
106 install_path=bin="${PREFIX}/bin" \
107 install_path=libdoc="${PREFIX}/man/man3" \
108 install_path=bindoc="${PREFIX}/man/man1"
109 BUILD_COMMAND ?= ${PERL} Build
110 INSTALL_COMMAND ?= ${PERL} Build install
111 endif
112
113
114 #####################
115 # default
116 #####################
117 PORT_DEPENDS ?=
118
119 CLEAN_PRECMD ?=
120 CLEAN_POSTCMD ?=
121
122 CONFIGURE_PRECMD ?=
123 CONFIGURE_POSTCMD ?=
124 CONFIGURE_ENV ?=
125 CONFIGURE_POSTENV ?=
126 ifeq (${OPSYS},Linux)
127 CONFIGURE_COMMAND ?= bash ./configure
128 else
129 CONFIGURE_COMMAND ?= ./configure
130 endif
131 CONFIGURE_ARGS ?= --prefix=${PREFIX}
132 CONFIGURE_POSTARGS ?=
133
134 BUILD_PRECMD ?=
135 BUILD_POSTCMD ?=
136 BUILD_ENV ?=
137 BUILD_COMMAND ?= ${MAKE}
138 BUILD_ARGS ?=
139 BUILD_POSTARGS ?=
140
141 INSTALL_PRECMD ?=
142 INSTALL_POSTCMD ?=
143 INSTALL_ENV ?=
144 INSTALL_COMMAND ?= ${BUILD_COMMAND}
145 INSTALL_ARGS ?= install
146 INSTALL_POSTARGS ?=
147
148 DEINSTALL_PRECMD ?=
149 DEINSTALL_POSTCMD ?=
150
151 DRY_RUN ?=
152
153
154 # fetching
155 fetch: ${DISTDIR}/${DISTFILE}
156 @echo ${DISTFILE} fetched
157
158 ${DISTDIR}/%:
159 @test -d ${DISTDIR} || mkdir -p ${DISTDIR}
160 @${MAKE_RECURSIVE} do-fetch
161
162 def-fetch:
163 @for SITE in ${MASTER_SITES} ${MASTER_POST_SITES}; do \
164 if [ -f ${DISTDIR}/${DISTFILE} ]; then \
165 exit 0; \
166 fi; \
167 if [ \! -z "`echo $${SITE} | perl -ne '/^svn:\/\// && print 1'`" ]; then \
168 echo "Trying subversion: $${SITE}"; \
169 svn ls $${SITE}/${DISTFILE} >&- 2>&- \
170 && svn cat $${SITE}/${DISTFILE} > ${DISTDIR}/${DISTFILE}; \
171 elif [ \! -z "`echo $${SITE} | perl -ne '/^(ftp|http):\/\// && print 1'`" ]; then \
172 if [ \! -z "${FETCH_CMD}" ]; then \
173 echo "Trying site: $${SITE}"; \
174 ${FETCH_CMD} ${FETCH_ARGS} ${DISTDIR}/ $${SITE}/${DISTFILE} >&- ; \
175 else \
176 echo "Skip site: $${SITE}, no available fetcher found"; \
177 fi; \
178 elif [ \! -z "`echo $${SITE} | perl -ne 'm|^/| && print 1'`" ]; then \
179 echo "Trying local storage: $${SITE}"; \
180 test -f $${SITE}/${DISTFILE} && cp $${SITE}/${DISTFILE} ${DISTDIR}/ >&- ; \
181 else \
182 ${call die,Scheme unknown - $${SITE}/${DISTFILE}}; \
183 fi; \
184 done; \
185 if [ \! -f ${DISTDIR}/${DISTFILE} ]; then \
186 ${call die,Can not fetch ${DISTFILE}}; \
187 fi
188
189
190 # distcleaning
191 distclean:
192 @${MAKE_RECURSIVE} do-$@
193 @echo ${DISTFILE} removed
194
195 def-distclean:
196 @rm -f ${DISTDIR}/${DISTFILE}
197
198
199 # cleaning
200 clean:
201 @${MAKE_RECURSIVE} do-$@
202 @echo ${PORTNAME} cleaned
203
204 def-clean:
205 @${CLEAN_PRECMD}
206
207 @rm -Rf ${WRKDIR}
208
209 @${CLEAN_POSTCMD}
210
211
212 # extracting
213 extract: ${WRKDIR}/.extract
214 @echo ${DISTFILE} extracted
215
216 ${WRKDIR}/.extract:
217 @${MAKE_RECURSIVE} fetch
218 @test -d ${WRKDIR} || mkdir -p ${WRKDIR}
219 @${MAKE_RECURSIVE} do-extract
220 @date > $@
221
222 def-extract:
223 @tar -xzf ${DISTDIR}/${DISTFILE} -C ${WRKDIR}
224
225
226 # configuring
227 configure: ${WRKDIR}/.configure
228 @echo ${PORTNAME} configured
229
230 ${WRKDIR}/.configure:
231 ifneq (${PERL_MAKEMAKER}${PERL_MODBUILD},)
232 @if [ \! -d ${PREFIX}/lib/perl5 ]; then \
233 mkdir -p ${PREFIX}/lib/perl5; \
234 fi;
235 endif
236 @${MAKE_RECURSIVE} extract
237
238 @for DEP in ${PORT_DEPENDS}; do \
239 cd ${PORTSDIR}/all/$${DEP} \
240 && ${MAKE_RECURSIVE} install || exit 1; \
241 done;
242
243 @${MAKE_RECURSIVE} do-configure
244 @date > $@
245
246 def-configure:
247 @${CONFIGURE_PRECMD}
248
249 @cd ${WRKSRC} \
250 && ${CONFIGURE_ENV} ${CONFIGURE_POSTENV} ${CONFIGURE_COMMAND} ${CONFIGURE_ARGS} \
251 ${CONFIGURE_POSTARGS}
252
253 ifdef PERL_MAKEMAKER
254 @cd ${WRKSRC} \
255 && ${PERL} -pi -e 's/ doc_(perl|site|\$$\(INSTALLDIRS\))_install$$//' Makefile
256 ifeq (${shell perl -e 'print 1 if ${PERL_LEVEL}<=500503'},1)
257 @cd ${WRKSRC} \
258 && ${PERL} -pi -e 's/^(INSTALLSITELIB|INSTALLSITEARCH|SITELIBEXP|SITEARCHEXP|INSTALLMAN1DIR|INSTALLMAN3DIR) = \/usr\/local/$$1 = \$$(PREFIX)/' Makefile
259 endif
260 endif
261
262 @${CONFIGURE_POSTCMD}
263
264
265 # building
266 build: ${WRKDIR}/.build
267 @echo ${PORTNAME} built
268
269 ${WRKDIR}/.build:
270 @${MAKE_RECURSIVE} configure
271 @${MAKE_RECURSIVE} do-build
272 @date > $@
273
274 def-build:
275 @${BUILD_PRECMD}
276
277 @cd ${WRKSRC} \
278 && ${BUILD_ENV} ${BUILD_COMMAND} ${BUILD_ARGS} ${BUILD_POSTARGS}
279
280 @${BUILD_POSTCMD}
281
282 # installing
283 install: ${PORTSDB}/${PORTNAME}
284 ifndef DRY_RUN
285 @echo "${PORTNAME} installed"
286 @echo "----------------------------------------"
287 @cat $^
288 @echo "----------------------------------------"
289 endif
290
291 ${PORTSDB}/%:
292 @test -d ${PORTSDB} || mkdir -p ${PORTSDB}
293 ifneq (${PERL_CHECK},yes)
294 ifndef DRY_RUN
295 @${MAKE_RECURSIVE} build
296 @${PORTSDIR}/etc/snapshot ${PREFIX} > $@.before
297 @${MAKE_RECURSIVE} do-install
298 @echo "State: installed" > $@
299 @echo "Date: "`date` >> $@
300 @echo "Name: ${PORTNAME}" >> $@
301 @echo "Version: ${PORTVERSION}" >> $@
302 @${PORTSDIR}/etc/snapshot -d $@.before ${PREFIX} > $@.content
303 else
304 @echo "UNKNOWN: ${PORTNAME}"
305 endif
306 else
307
308 ifeq (${PERL_CHECKED},cancel)
309 @${call die,Cancelled}
310 else
311 ifeq (${PERL_CHECKED},skip)
312 ifndef DRY_RUN
313 @echo "State: skipped" > $@
314 @echo "Date: "`date` >> $@
315 @echo "Name: ${PORTNAME}" >> $@
316 @echo "Version: ${PORTVERSION}" >> $@
317 @${call warn,Skipped}
318 else
319 @echo "FOUND: ${PORTNAME}"
320 endif
321 else
322 ifeq (${PERL_CHECKED},install)
323 ifndef DRY_RUN
324 @${MAKE_RECURSIVE} build
325 @${PORTSDIR}/etc/snapshot ${PREFIX} > $@.before
326 @${MAKE_RECURSIVE} do-install
327 @echo "State: installed" > $@
328 @echo "Date: "`date` >> $@
329 @echo "Name: ${PORTNAME}" >> $@
330 @echo "Version: ${PORTVERSION}" >> $@
331 @${PORTSDIR}/etc/snapshot -d $@.before ${PREFIX} > $@.content
332 else
333 @echo "NOT FOUND: ${PORTNAME}"
334 endif
335 else
336 @`${PORTSDIR}/etc/chkmod ${PERL_CHECK_MODULE} ${PERL_CHECK_VERSION}` && ${MAKE_RECURSIVE_PERL} $@
337 endif
338 endif
339 endif
340 endif
341
342 def-install:
343 @${INSTALL_PRECMD}
344
345 @cd ${WRKSRC} \
346 && ${INSTALL_ENV} ${INSTALL_COMMAND} ${INSTALL_ARGS} ${INSTALL_POSTARGS}
347
348 @${INSTALL_POSTCMD}
349
350
351 # deinstalling
352 deinstall:
353 @${DEINSTALL_PRECMD}
354
355 @if [ \! -f ${PORTSDB}/${PORTNAME} ]; then \
356 ${call warn,${PORTNAME} is not installed}; \
357 else \
358 ${MAKE_RECURSIVE} clean; \
359 if [ -f ${PORTSDB}/${PORTNAME}.content ]; then \
360 ${PORTSDIR}/etc/snaprm ${PREFIX} ${PORTSDB}/${PORTNAME}.content; \
361 fi; \
362 rm -f ${PORTSDB}/${PORTNAME}; \
363 rm -f ${PORTSDB}/${PORTNAME}.before; \
364 rm -f ${PORTSDB}/${PORTNAME}.content; \
365 fi;
366
367 @${DEINSTALL_POSTCMD}
368
369
370 # reinstalling
371 reinstall: deinstall install
372
373
374 # service
375 get-%:
376 @echo -n ${$*}
377
378
379 # default do-
380 do-%:
381 @${MAKE_RECURSIVE} def-$*
382
383
384 # utils
385 define info
386 echo "##############################################################################"; \
387 echo "#"; \
388 echo "# INFO: "${1}; \
389 echo "#"; \
390 echo "##############################################################################"
391 endef
392
393 define warn
394 echo "##############################################################################"; \
395 echo "#"; \
396 echo "# WARNING: "${1}; \
397 echo "#"; \
398 echo "##############################################################################"
399 endef
400
401 define die
402 echo "##############################################################################"; \
403 echo "#"; \
404 echo "# ERROR: "${1}; \
405 echo "#"; \
406 echo "##############################################################################"; \
407 exit 99
408 endef