Ravenports generated: 12 Feb 2024 04:56
[ravenports.git] / Mk / raven.mk
1 # Autogenerated -- Do not edit!
2 # Copyright (C) 2017-2021 John R. Marino
3 # This file is covered by the Internet Software Consortium (ISC) License
4 #
5 # This is the master makefile logic for the Ravenports system.
6 # Use 8-column hard tabs
7 #
8
9 RAVENBASE?=             /raven
10 WRKDIRPREFIX?=          /usr/obj/raven
11 DISTDIR?=               ${RAVENBASE}/distfiles
12 PACKAGES?=              ${RAVENBASE}/packages
13 LOCALBASE?=             /raven
14 PREFIX?=                ${LOCALBASE}
15
16 .include "/xports/Mk/raven.commands.mk"
17
18 NAMEBASE?=              undefined       # dummy, must be defined by port makefile
19 VARIANT?=               standard        # must be defined by ravenadm
20 SUBPACKAGES?=           single          # must be defined by ravenadm; list
21 TWO_PART_ID=            ${NAMEBASE}-${VARIANT}
22 PKGNAMEBASE=            ${NAMEBASE}__${VARIANT}
23 DISTNAME?=              ${NAMEBASE}-${VERSION}
24 WRKDIR=                 ${WRKDIRPREFIX}/${NAMEBASE}
25 STD_DOCDIR=             ${PREFIX}/share/doc/${NAMEBASE}
26 STD_EXAMPLESDIR=        ${PREFIX}/share/examples/${NAMEBASE}
27 STD_ETCDIR=             ${PREFIX}/etc/${NAMEBASE}
28 ETCDIR?=                ${STD_ETCDIR}
29 DESKTOPDIR?=            ${PREFIX}/share/applications
30 MK_SCRIPTS=             /xports/Mk/Scripts
31 MK_TEMPLATES=           /xports/Mk/Templates
32 MK_KEYWORDS=            /xports/Mk/Keywords
33 MK_STOCK_LICENSES=      /xports/Mk/Stock_licenses
34 USESDIR=                /xports/Mk/Uses
35 SCRIPTDIR=              ${.CURDIR}/scripts
36 PATCHDIR=               ${.CURDIR}/patches
37 FILESDIR=               ${.CURDIR}/files
38 OPSYSDIR=               ${.CURDIR}/opsys
39 MANIFESTDIR=            ${.CURDIR}/manifests
40 _DISTINFO_FILE=         ${.CURDIR}/distinfo
41
42 .for N in ${DF_INDEX}
43 .  if defined(DIRTY_EXTRACT_${N})
44 EXTRACT_WRKDIR_${N}=    ${WRKDIR}/${NAMEBASE}_${N}
45 .  else
46 EXTRACT_WRKDIR_${N}=    ${WRKDIR}
47 .  endif
48 .endfor
49
50 .if defined(DIRTY_EXTRACT_1)
51 WRKSRC=                 ${WRKDIR}/${NAMEBASE}_1
52 .else
53 WRKSRC=                 ${WRKDIR}/${DISTNAME}
54 .endif
55
56 # --------------------------------------------------------------------------
57 # --  Common Definitions
58 # --------------------------------------------------------------------------
59
60 # These require modification to bmake (which Ravenports have)
61 # Some systems have different names for same architecture
62 #   FreeBSD   ARCH=amd64  ARCH_STANDARD=x86_64
63 #   DragonFly ARCH=x86_64 ARCH_STANDARD=x86_64
64
65 OPSYS?=                 ${.MAKE.OS.NAME}
66 OSVERSION?=             ${.MAKE.OS.VERSION}
67 OSREL?=                 ${.MAKE.OS.RELEASE}
68 MAJOR?=                 ${.MAKE.OS.MAJOR}
69 ARCH?=                  ${.MAKE.OS.ARCHITECTURE}
70 ARCH_STANDARD?=         ${.MAKE.OS.ARCH.STANDARD}
71
72 .if exists(${.CURDIR}/files/special.mk)
73 .include "${.CURDIR}/files/special.mk"
74 .endif
75 .if exists(${.CURDIR}/opsys/special.mk)
76 .include "${.CURDIR}/opsys/special.mk"
77 .endif
78
79 # --------------------------------------------------------------------------
80 # --  Set up environment
81 # --------------------------------------------------------------------------
82
83 INSTALL=                install
84 BINMODE?=               555
85 MANMODE?=               444
86 SHAREMODE?=             444
87 _SHAREMODE?=            0644
88 OPTIMIZER_LEVEL?=       2
89 STRIP?=                 -s
90
91 .if defined(WITH_DEBUG)
92 STRIP=                  # none
93 STRIP_CMD=              ${TRUE}
94 DEBUG_FLAGS?=           -g
95 MAKE_ENV+=              DONTSTRIP=yes
96 CFLAGS:=                -pipe -O${OPTIMIZER_LEVEL} ${DEBUG_FLAGS} \
97                         ${CFLAGS} -I${LOCALBASE}/include
98 CXXFLAGS:=              -pipe -O${OPTIMIZER_LEVEL} ${DEBUG_FLAGS} \
99                         ${CXXFLAGS} -I${LOCALBASE}/include
100
101 .  if defined(INSTALL_TARGET)
102 INSTALL_TARGET:=        ${INSTALL_TARGET:S/^install-strip$/install/g}
103 .  endif
104 .else
105 CFLAGS:=                -pipe -O${OPTIMIZER_LEVEL} \
106                         ${CFLAGS} -I${LOCALBASE}/include
107 CXXFLAGS:=              -pipe -O${OPTIMIZER_LEVEL} \
108                         ${CXXFLAGS} -I${LOCALBASE}/include
109 .  if "${OPSYS}" == "Darwin"
110 STRIP_CMD+=             -x
111 .  endif
112 .endif
113 # gcc inserts $LOCALBASE/lib runpath along with path to gcc libraries
114 # gcc also looks in $LOCALBASE/lib by default for linking libraries
115 # Probably gcc needs to look in $LOCALBASE/include by default as well
116 CPPFLAGS+=              -I${LOCALBASE}/include
117
118 BUILD_TARGET?=          all
119 INSTALL_TARGET?=        install
120
121 INSTALL_PROGRAM=        ${INSTALL} ${STRIP} -m ${BINMODE}
122 INSTALL_LIB=            ${INSTALL} ${STRIP} -m ${SHAREMODE}
123 INSTALL_SCRIPT=         ${INSTALL} -m ${BINMODE}
124 INSTALL_DATA=           ${INSTALL} -m ${_SHAREMODE}
125 INSTALL_MAN=            ${INSTALL} -m ${MANMODE}
126
127 INSTALL_MACROS=         BSD_INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
128                         BSD_INSTALL_LIB="${INSTALL_LIB}" \
129                         BSD_INSTALL_SCRIPT="${INSTALL_SCRIPT}" \
130                         BSD_INSTALL_DATA="${INSTALL_DATA}" \
131                         BSD_INSTALL_MAN="${INSTALL_MAN}"
132
133 MAKE_ENV+=              ${INSTALL_MACROS}
134 SCRIPTS_ENV+=           ${INSTALL_MACROS} \
135                         CURDIR=${.CURDIR} \
136                         DISTDIR=${DISTDIR} \
137                         WRKDIR=${WRKDIR} \
138                         WRKSRC=${WRKSRC} \
139                         PATCHDIR=${PATCHDIR} \
140                         SCRIPTDIR=${SCRIPTDIR} \
141                         FILESDIR=${FILESDIR} \
142                         PREFIX=${PREFIX} \
143                         LOCALBASE=${LOCALBASE}
144
145 # --------------------------------------------------------------------------
146 # --  USES handling
147 # --------------------------------------------------------------------------
148
149 # setup empty variables for USES targets
150 .for target in fetch extract patch configure build install stage test
151 _USES_${target}?=
152 .endfor
153
154 .include "/xports/Mk/raven.versions.mk"
155
156 # Loading features
157 .for f in ${USES}
158 _f:=            ${f:C/\:.*//}
159 .  if !defined(${_f}_ARGS)
160 ${_f}_ARGS:=    ${f:C/^[^\:]*(\:|\$)//:S/,/ /g}
161 .  endif
162 .endfor
163 .for f in ${USES}
164 .include "${USESDIR}/${f:C/\:.*//}.mk"
165 .endfor
166
167 # --------------------------------------------------------------------------
168 # --  Phase: Fetch
169 # --------------------------------------------------------------------------
170
171 # makesum guards break "ravenadm dev distinfo" because root_ca_nss is
172 # not installed in the slave jail
173 #.if !make(makesum)
174 FETCH_ENV=              SSL_NO_VERIFY_PEER=1 SSL_NO_VERIFY_HOSTNAME=1
175 #.endif
176 FETCH_REGET?=           1
177
178 _OFFICIAL_BACKUP=       http://www.ravenports.com/cache-distfiles/
179 DL_SITE_BACKUP?=        ${_OFFICIAL_BACKUP}
180
181 .if defined(DL_SITE_DISABLE)
182 _DL_SITE_OVERRIDE:=     ${_OFFICIAL_BACKUP}
183 _DL_SITE_BACKUP=        # disabled
184 .else
185 _DL_SITE_OVERRIDE=      ${DL_SITE_OVERRIDE}
186 _DL_SITE_BACKUP=        ${DL_SITE_BACKUP}
187 .endif
188
189 # Sort the master site list according to the patterns in MASTER_SORT
190 MSR=                    ://[^/]*/
191 MASTER_SORT_AWK=        BEGIN { RS = " "; ORS = " "; IGNORECASE = 1 ; gl = "${MSR:S|\\|\\\\|g}"; } \
192                         /${MSR:S|/|\\/|g}/ { good["${MSR:S|\\|\\\\|g}"] = good["${MSR:S|\\|\\\\|g}"] " " $$0 ; next; } \
193                         { rest = rest " " $$0; } END { n=split(gl, gla); for(i=1;i<=n;i++) { print good[gla[i]]; } print rest; }
194
195 _MAKESUMFILES:=
196 _DISTFILES:=
197 _PATCHFILES:=
198 _CKSUMFILES:=
199 _MSCKSUMFILES:=
200 _DL_SITES_ENV:=
201 _MS_SITES_ENV:=
202 _PATCH_SITES_ENV:=
203
204 .for N in ${MAKESUM_INDEX}
205 _F=             ${DISTFILE_${N}}
206 _F_TEMP=        ${_F:S/^${_F:C/:[^:]+$//}//:S/^://}
207 _MAKESUMFILES:= ${_MAKESUMFILES} ${_F}
208 _MSCKSUMFILES:= ${_MSCKSUMFILES} ${_F:C/:.*//}
209 .  for _group in ${_F_TEMP:S/,/ /g}
210 .    if defined(DL_SITES_${_group})
211 _MS_SITES_ENV+=         _DOWNLOAD_SITES_${_group}=${DL_SITES_${_group}:Q}
212 .    endif
213 .  endfor
214 .endfor
215
216 .for N in ${DF_INDEX}
217 _F=             ${DISTFILE_${N}}
218 _F_TEMP=        ${_F:S/^${_F:C/:[^:]+$//}//:S/^://}
219 _DISTFILES:=    ${_DISTFILES} ${_F}
220 _CKSUMFILES:=   ${_CKSUMFILES} ${_F:C/:.*//}
221 .  for _group in ${_F_TEMP:S/,/ /g}
222 .    if defined(DL_SITES_${_group})
223 _DL_SITES_ENV+=         _DOWNLOAD_SITES_${_group}=${DL_SITES_${_group}:Q}
224 .    endif
225 .  endfor
226 .endfor
227
228 .for N in ${PF_INDEX}
229 _F=             ${DISTFILE_${N}}
230 _F_TEMP=        ${_F:S/^${_F:C/:[^-:][^:]*$//}//:S/^://}
231 _PATCHFILES:=   ${_PATCHFILES} ${_F}
232 _CKSUMFILES:=   ${_CKSUMFILES} ${_F:C/:.*//}
233 .  if !empty(_F_TEMP)
234 .    for _group in ${_F_TEMP:S/,/ /g}
235 .      if defined(DL_SITES_${_group})
236 _PATCH_SITES_ENV+=      _DOWNLOAD_SITES_${_group}=${DL_SITES_${_group}:Q}
237 .      endif
238 .    endfor
239 .  endif
240 .endfor
241
242 .if defined(DIST_SUBDIR)
243 _CKSUMFILES:=   ${_CKSUMFILES:S/^/${DIST_SUBDIR}\//}
244 _MSCKSUMFILES:= ${_MSCKSUMFILES:S/^/${DIST_SUBDIR}\//}
245 .endif
246
247 _DO_FETCH_ENV=          dp_DISTDIR='${DISTDIR}' \
248                         dp_DISTINFO_FILE='${_DISTINFO_FILE}' \
249                         dp_DIST_SUBDIR='${DIST_SUBDIR}' \
250                         dp_ECHO_MSG='${ECHO_MSG}' \
251                         dp_FETCH_CMD='${FETCH_CMD}' \
252                         dp_FETCH_ENV=${FETCH_ENV:Q} \
253                         dp_FORCE_FETCH_ALL= \
254                         dp_FORCE_FETCH_LIST='${FORCE_FETCH_LIST}' \
255                         dp_MASTER_SITE_BACKUP='${_DL_SITE_BACKUP}' \
256                         dp_MASTER_SITE_OVERRIDE='${_DL_SITE_OVERRIDE}' \
257                         dp_MASTER_SORT_AWK='${MASTER_SORT_AWK}' \
258                         dp_DISABLE_CHECKSUM='${SKIP_CHECKSUM}' \
259                         dp_DISABLE_SIZE= \
260                         dp_SCRIPTSDIR='${MK_SCRIPTS}' \
261                         dp_TARGET='${.TARGET}' \
262                         dp_OPSYS='${OPSYS}' \
263                         # end
264
265 .if !target(do-fetch)
266 do-fetch:
267 .  if !empty(_DISTFILES)
268         @${SETENV} \
269                 ${_DO_FETCH_ENV} ${_DL_SITES_ENV} \
270                 ${SH} ${MK_SCRIPTS}/do-fetch.sh ${_DISTFILES:C/.*/'&'/}
271 .  endif
272 .  if !empty(_PATCHFILES)
273         @${SETENV} \
274                 ${_DO_FETCH_ENV} ${_PATCH_SITES_ENV} \
275                 ${SH} ${MK_SCRIPTS}/do-fetch.sh ${_PATCHFILES:C/:-p[0-9]//:C/.*/'&'/}
276 .  endif
277 .endif
278
279 fetch-message:
280         @${ECHO_MSG} "===>  Fetching for ${TWO_PART_ID}"
281
282 # --------------------------------------------------------------------------
283 # --  Phase: Checksum
284 # --------------------------------------------------------------------------
285
286 # List all algorithms here (which is exactly one)
287 _CHECKSUM_INIT_ENV=     dp_SHA256=${SHA256}
288
289 .if !target(checksum)
290 checksum: fetch
291 .  if !empty(_CKSUMFILES)
292         @${SETENV} \
293                 ${_CHECKSUM_INIT_ENV} \
294                 dp_CHECKSUM_ALGORITHMS='SHA256' \
295                 dp_CURDIR='${.CURDIR}' \
296                 dp_DISTDIR='${DISTDIR}' \
297                 dp_DISTINFO_FILE='${_DISTINFO_FILE}' \
298                 dp_DIST_SUBDIR='${DIST_SUBDIR}' \
299                 dp_ECHO_MSG='${ECHO_MSG}' \
300                 dp_FETCH_REGET='${FETCH_REGET}' \
301                 dp_MAKE='${MAKE}' \
302                 dp_MAKEFLAGS='${.MAKEFLAGS}' \
303                 dp_SCRIPTSDIR='${MK_SCRIPTS}' \
304                 dp_DISABLE_SIZE= \
305                 dp_DISABLE_CHECKSUM= \
306                 ${SH} ${MK_SCRIPTS}/checksum.sh ${_CKSUMFILES:C/.*/'&'/}
307 .  endif
308 .endif
309
310 # --------------------------------------------------------------------------
311 # --  Makesum (developer)
312 # --------------------------------------------------------------------------
313
314 .if !target(makesum)
315 makesum:
316 .  if !empty(_MAKESUMFILES)
317         @${SETENV} \
318                 ${_DO_FETCH_ENV} ${_MS_SITES_ENV} \
319                 dp_DISABLE_CHECKSUM=yes \
320                 dp_DISABLE_SIZE=yes \
321                 dp_OPSYS='${OPSYS}' \
322                 ${SH} ${MK_SCRIPTS}/do-fetch.sh ${_MAKESUMFILES:C/.*/'&'/}
323 .  endif
324         @${SETENV} \
325                 ${_CHECKSUM_INIT_ENV} \
326                 dp_CHECKSUM_ALGORITHMS='SHA256' \
327                 dp_CKSUMFILES='${_MSCKSUMFILES}' \
328                 dp_DISTDIR='${DISTDIR}' \
329                 dp_DISTINFO_FILE='${_DISTINFO_FILE}' \
330                 dp_ECHO_MSG='${ECHO_MSG}' \
331                 dp_SCRIPTSDIR='${MK_SCRIPTS}' \
332                 dp_OPSYS='${OPSYS}' \
333                 ${SH} ${MK_SCRIPTS}/makesum.sh ${_MAKESUMFILES:C/.*/'&'/}
334 .endif
335
336 # --------------------------------------------------------------------------
337 # --  Phase: Extract
338 # --------------------------------------------------------------------------
339
340 # This is what is actually going to be extracted, and is overridable by user.
341 EXTRACT_ONLY?=  ${DF_INDEX}
342
343 .for N in ${EXTRACT_ONLY}
344 EXTRACT_HEAD_${N}?=     env LANG=en_US.UTF-8 ${TAR} -xf
345 EXTRACT_TAIL_${N}?=     --no-same-owner --no-same-permissions
346 .endfor
347
348 clean-wrkdir:
349         @${RM} -r ${WRKDIR}
350
351 create-extract-dirs:
352         @${MKDIR} ${WRKDIR}
353 .for N in ${EXTRACT_ONLY}
354 .  if defined (DIRTY_EXTRACT_${N})
355         @${MKDIR} ${WRKDIR}/${NAMEBASE}_${N}
356 .  endif
357 .endfor
358
359 extract-message:
360         @${ECHO_MSG} "===>  Extracting for ${TWO_PART_ID}"
361
362 disable-network:
363         @if [ -f "/etc/resolv.conf" ]; then \
364           mv /etc/resolv.conf /etc/resolv.conf.orig; \
365           echo "nameserver 127.0.0.1" > /etc/resolv.conf; \
366         fi
367
368 extract-fixup-modes:
369         @${CHMOD} -R u+w,a+rX ${WRKDIR}
370
371
372 .if !target(compile-package-desc)
373 _PKGMESSAGE=            ${.CURDIR}/files/pkg-message-xxx
374 _PKGMESSAGEOPSYS=       ${.CURDIR}/files/pkg-message-xxx-opsys
375 _PKGMESSAGEOPSYSARCH=   ${.CURDIR}/files/pkg-message-xxx-opsys-arch
376 _PKGMESSAGEARCH=        ${.CURDIR}/files/pkg-message-xxx-arch
377 _PKGINSTALL=            ${.CURDIR}/files/pkg-zzzinstall-xxx
378 _PKGUPGRADE=            ${.CURDIR}/files/pkg-zzzupgrade-xxx
379 _PKGDEINSTALL=          ${.CURDIR}/files/pkg-zzzdeinstall-xxx
380 _IN_PKGMESSAGE=         ${WRKDIR}/pkg-message-xxx
381 _IN_PKGMESSAGEOPSYS=    ${WRKDIR}/pkg-message-xxx-opsys
382 _IN_PKGMESSAGEOPSYSARCH=${WRKDIR}/pkg-message-xxx-opsys-arch
383 _IN_PKGMESSAGEARCH=     ${WRKDIR}/pkg-message-xxx-arch
384 _IN_PKGINSTALL=         ${WRKDIR}/pkg-zzzinstall-xxx
385 _IN_PKGUPGRADE=         ${WRKDIR}/pkg-zzzupgrade-xxx
386 _IN_PKGDEINSTALL=       ${WRKDIR}/pkg-zzzdeinstall-xxx
387
388 _MESSAGE_FILE=          ${WRKDIR}/.PKG_DISPLAY
389 _DESC_FILE=             ${WRKDIR}/.PKG_DESC
390
391 _CPDLIST=               AGE AGEOPSYS AGEOPSYSARCH AGEARCH
392 _MSGLIST=               install upgrade deinstall
393
394 compile-package-desc:
395 .  for sp in ${SUBPACKAGES}
396         @${RM} ${_MESSAGE_FILE}.${sp}
397         @${RM} ${_DESC_FILE}.${sp}
398         @${ECHO_MSG} "===>  Creating package metadata (${sp})"
399 .    for suffix in ${_CPDLIST}
400         @if [ -f "${_IN_PKGMESS${suffix}:S/-xxx/-${sp}/}" ]; then \
401            ${CAT} ${_IN_PKGMESS${suffix}:S/-xxx/-${sp}/} >> ${_MESSAGE_FILE}.${sp}; \
402         elif [ -f "${_PKGMESS${suffix}:S/-xxx/-${sp}/}" ]; then \
403            ${CAT} ${_PKGMESS${suffix}:S/-xxx/-${sp}/} >> ${_MESSAGE_FILE}.${sp}; \
404         fi
405 .    endfor
406 .    for suffix in ${_MSGLIST}
407 .      for psp in pre- x post-
408         @if [ -f "${_IN_PKG${suffix:tu}:S/-zzz/-${psp:Nx}/:S/-xxx/-${sp}/}" ]; then \
409            ${CP} ${_IN_PKG${suffix:tu}:S/-zzz/-${psp:Nx}/:S/-xxx/-${sp}/} ${WRKDIR}/pkg-${psp:Nx}${suffix}.${sp}; \
410         elif [ -f "${_PKG${suffix:tu}:S/-zzz/-${psp:Nx}/:S/-xxx/-${sp}/}" ]; then \
411            ${CP} ${_PKG${suffix:tu}:S/-zzz/-${psp:Nx}/:S/-xxx/-${sp}/} ${WRKDIR}/pkg-${psp:Nx}${suffix}.${sp}; \
412         fi
413 .      endfor
414 .    endfor
415 .    if exists(${.CURDIR}/descriptions/desc.${sp}.${VARIANT})
416         @${CP} ${.CURDIR}/descriptions/desc.${sp}.${VARIANT} ${_DESC_FILE}.${sp}
417 .    elif exists(${.CURDIR}/descriptions/desc.${sp})
418         @${CP} ${.CURDIR}/descriptions/desc.${sp} ${_DESC_FILE}.${sp}
419 .    elif ${sp:Mdocs}
420         @${ECHO} "This is the documents subpackage of the ${TWO_PART_ID} port." > ${_DESC_FILE}.${sp}
421 .    elif ${sp:Mexamples}
422         @${ECHO} "This is the examples subpackage of the ${TWO_PART_ID} port." > ${_DESC_FILE}.${sp}
423 .    elif ${sp:Mnls}
424         @${ECHO} "This is the Native Language Support (NLS) subpackage" > ${_DESC_FILE}.${sp}
425         @${ECHO} "of the ${TWO_PART_ID} port." >> ${_DESC_FILE}.${sp}
426 .    elif ${sp:Mdev}
427         @${ECHO} "This is developer subpackage of the ${TWO_PART_ID} port." > ${_DESC_FILE}.${sp}
428         @${ECHO} "It may contain headers, pc files, static and PIC libraries and SO links." >> ${_DESC_FILE}.${sp}
429 .    elif ${sp:Mman}
430         @${ECHO} "This is man page subpackage of the ${TWO_PART_ID} port." > ${_DESC_FILE}.${sp}
431 .    elif ${sp:Mlang}
432         @${ECHO} "This is language subpackage of the ${TWO_PART_ID} port." > ${_DESC_FILE}.${sp}
433 .    elif ${sp:Mcomplete}
434         @${ECHO} "This is the ${TWO_PART_ID} metapackage." > ${_DESC_FILE}.${sp}
435         @${ECHO} "It pulls in all subpackages of ${TWO_PART_ID}." >> ${_DESC_FILE}.${sp}
436 .    endif
437 .  endfor
438 .endif
439
440 .if !target(do-extract)
441 do-extract:
442 .  for N in ${EXTRACT_ONLY}
443         @if ! (cd ${EXTRACT_WRKDIR_${N}} && ${EXTRACT_HEAD_${N}} ${DISTDIR}/${DIST_SUBDIR}/${DISTFILE_${N}:C/:.*//} ${EXTRACT_TAIL_${N}}); \
444         then exit 1; fi
445 .  endfor
446         @${CHMOD} -R ug-s ${WRKDIR}
447         @${CHOWN} -R 0:0 ${WRKDIR}
448 .endif
449
450 .if !target(extract-licenses)
451 extract-licenses:
452 . for sp in ${SUBPACKAGES}
453
454 #  Extract licences from source files
455 .  if defined(LICENSE_${sp})
456 .   for lic in ${LICENSE_${sp}}
457 .    if defined(LICENSE_AWK_${lic}) && defined(LICENSE_SOURCE_${lic}) && defined(LICENSE_FILE_${lic})
458         @${ECHO_MSG} "===>  Extracting ${lic} license from ${LICENSE_SOURCE_${lic}}"
459         @${AWK} '/${LICENSE_AWK_${lic}}/ {exit}; {print}' ${LICENSE_SOURCE_${lic}} > ${LICENSE_FILE_${lic}}
460 .    endif
461 .   endfor
462 .  endif
463
464 #  Extract license terms from source file
465 .  if defined(LICENSE_AWK_TERMS) && defined(LICENSE_SOURCE_TERMS) && defined(LICENSE_TERMS_${sp})
466         @${ECHO_MSG} "===>  Extracting license terms from ${LICENSE_SOURCE_TERMS}"
467         @${AWK} '/${LICENSE_AWK_TERMS}/ {exit}; {print}' ${LICENSE_SOURCE_TERMS} > ${LICENSE_TERMS_${sp}}
468 .  endif
469
470 #  Install stock licenses as requested
471 .  if defined(LICENSE_${sp})
472 .   for lic in ${LICENSE_${sp}}
473 .    if defined(LICENSE_FILE_${lic})
474 .     if "${LICENSE_FILE_${lic}}" == "stock"
475         @if [ -e "${MK_STOCK_LICENSES}/${lic:S/+//}" ]; then \
476           echo "===>  Positioning stock ${lic} license for ${sp} subpackage";\
477           cp ${MK_STOCK_LICENSES}/${lic:S/+//} ${WRKDIR}/LICENSE_${lic}; \
478         else \
479           echo "===>  Error: Requested stock ${lic} license does not exist (${sp} subpackage).";\
480         fi
481 .     endif
482 .    endif
483 .   endfor
484 .  endif
485
486 . endfor
487 .endif
488
489
490 # --------------------------------------------------------------------------
491 # --  Phase: Patch
492 # --------------------------------------------------------------------------
493
494 PATCH_WRKSRC?=          ${WRKSRC}
495 PATCH_STRIP?=           -p0
496 PATCH_DIST_STRIP?=      -p0
497 .if defined(PATCH_DEBUG)
498 PATCH_ARGS=             --backup --forward -E ${PATCH_STRIP} --batch
499 PATCH_DIST_ARGS=        --backup --forward -E ${PATCH_DIST_STRIP} --batch
500 .else
501 PATCH_ARGS=             --backup --forward --quiet -E ${PATCH_STRIP} --batch
502 PATCH_DIST_ARGS=        --backup --forward --quiet -E ${PATCH_DIST_STRIP} --batch
503 .endif
504
505 patch-message:
506         @${ECHO_MSG} "===>  Patching for ${TWO_PART_ID}"
507
508 .if !target(do-patch)
509 do-patch:
510         @${SETENV} \
511                 dp_BZCAT="${BZCAT}" \
512                 dp_CAT="${CAT}" \
513                 dp_DISTDIR="${DISTDIR}" \
514                 dp_DIST_SUBDIR='${DIST_SUBDIR}' \
515                 dp_ECHO_MSG="${ECHO_MSG}" \
516                 dp_GZCAT="${GZCAT}" \
517                 dp_OPSYS="${OPSYS}" \
518                 dp_PATCH="${PATCH}" \
519                 dp_PATCHDIR="${PATCHDIR}" \
520                 dp_OPSYS_PATCHDIR="${.CURDIR}/opsys" \
521                 dp_PATCHFILES="${_PATCHFILES:C/:.*//}" \
522                 dp_PATCH_ARGS=${PATCH_ARGS:Q} \
523                 dp_PATCH_DEBUG_TMP="${PATCH_DEBUG:Dyes}" \
524                 dp_PATCH_DIST_ARGS="${PATCH_DIST_ARGS}" \
525                 dp_PATCH_SILENT="yes" \
526                 dp_PATCH_WRKSRC=${PATCH_WRKSRC} \
527                 dp_PORTID="${TWO_PART_ID}" \
528                 dp_SCRIPTSDIR="${MK_SCRIPTS}" \
529                 dp_UNZIP_CMD="${UNZIP_CMD}" \
530                 dp_XZCAT="${XZCAT}" \
531                 ${SH} ${MK_SCRIPTS}/do-patch.sh
532 .endif
533
534 # --------------------------------------------------------------------------
535 # --  Clean routines
536 # --------------------------------------------------------------------------
537
538 clean-msg:
539         @${ECHO_MSG} "===>  Cleaning for ${TWO_PART_ID}"
540
541 .for T in pre-clean post-clean
542 .  if !target(${T})
543 ${T}:
544         @${DO_NADA}
545 .  endif
546 .endfor
547
548 .if !target(do-clean)
549 do-clean:
550         @if [ -d ${WRKDIR} ]; then \
551                 if [ -w ${WRKDIR} ]; then \
552                         ${RM} -r ${WRKDIR}; \
553                         ${FIND} ${WRKDIR:H} -depth -maxdepth 1 -type d -empty -delete; \
554                 else \
555                         ${ECHO_MSG} "===>   ${WRKDIR} not writable, skipping"; \
556                 fi; \
557         fi
558 .endif
559
560 .if !target(clean)
561 .ORDER: clean-msg pre-clean do-clean post-clean
562 clean: clean-msg pre-clean do-clean post-clean
563 .endif
564
565 # --------------------------------------------------------------------------
566 # --  Phase: Configure
567 # --------------------------------------------------------------------------
568
569 INFO_PATH?=             share/info
570 MANPREFIX?=             ${PREFIX}/share
571 .if defined(CONFIGURE_OUTSOURCE)
572 CONFIGURE_CMD?=         ${WRKSRC}/${CONFIGURE_SCRIPT}
573 CONFIGURE_WRKSRC?=      ${WRKDIR}/.build
574 .else
575 CONFIGURE_CMD?=         ./${CONFIGURE_SCRIPT}
576 CONFIGURE_WRKSRC?=      ${WRKSRC}
577 .endif
578 CONFIGURE_SCRIPT?=      configure
579 .if ${OPSYS:MSunOS}
580 CONFIGURE_TARGET?=      ${ARCH_STANDARD}-pc-solaris2.10
581 .else
582 CONFIGURE_TARGET?=      ${ARCH_STANDARD}-raven-${OPSYS:tl}${MAJOR}
583 .endif
584 CONFIGURE_TARGET:=      ${CONFIGURE_TARGET:S/--build=//}
585 CONFIGURE_LOG=          config.log
586 .if defined(GNU_CONFIGURE)
587 CONFIGURE_FAIL_MESSAGE= "Please report the problem and attach the\
588 \"${CONFIGURE_WRKSRC}/${CONFIGURE_LOG}\" and this log."
589 .else
590 CONFIGURE_FAIL_MESSAGE= "Please report the problem and provide all pertinent logs"
591 .endif
592
593 .if defined(GNU_CONFIGURE)
594 HAS_CONFIGURE=                  yes
595 GNU_CONFIGURE_PREFIX?=          ${PREFIX}
596 GNU_CONFIGURE_MANPREFIX?=       ${MANPREFIX}
597 CONFIG_SITE=                    ${MK_TEMPLATES}/config.site
598 CONFIGURE_ARGS+=                --prefix=${GNU_CONFIGURE_PREFIX} \
599                                 --disable-dependency-tracking \
600                                 $${_LATE_CONFIGURE_ARGS}
601 CONFIGURE_ENV+=                 CONFIG_SITE=${CONFIG_SITE}
602 SET_LATE_CONFIGURE_ARGS= \
603      _LATE_CONFIGURE_ARGS="" ; \
604         if [ -z "${CONFIGURE_ARGS:M--localstatedir=*:Q}" ] && \
605            ${CONFIGURE_CMD} --help 2>&1 | ${GREP} -- --localstatedir > /dev/null; then \
606             _LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --localstatedir=/var" ; \
607         fi ; \
608         if [ ! -z "`${CONFIGURE_CMD} --help 2>&1 | ${GREP} -- '--mandir'`" ]; then \
609             _LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --mandir=${GNU_CONFIGURE_MANPREFIX}/man" ; \
610         fi ; \
611         if [ ! -z "`${CONFIGURE_CMD} --help 2>&1 | ${GREP} -- '--disable-silent-rules'`" ]; then \
612             _LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --disable-silent-rules" ; \
613         fi ; \
614         if [ ! -z "`${CONFIGURE_CMD} --help 2>&1 | ${GREP} -- '--infodir'`" ]; then \
615             _LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --infodir=${GNU_CONFIGURE_PREFIX}/${INFO_PATH}/${INFO_SUBDIR}" ; \
616         fi ; \
617         if [ -z "`${CONFIGURE_CMD} --version 2>&1 | ${EGREP} -i '(autoconf.*2\.13|Unrecognized option)'`" ]; then \
618                 _LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} --build=${CONFIGURE_TARGET}" ; \
619         else \
620                 _LATE_CONFIGURE_ARGS="$${_LATE_CONFIGURE_ARGS} ${CONFIGURE_TARGET}" ; \
621         fi;
622 .endif
623
624 configure-message:
625         @${ECHO_MSG} "===>  Configuring for ${TWO_PART_ID}"
626
627 .if !target(do-configure)
628 do-configure:
629         @if [ -f ${SCRIPTDIR}/configure ]; then \
630                 ${ECHO_MSG} "==> cd ${.CURDIR} && ${SETENV} ${SCRIPTS_ENV} ${SH} ${SCRIPTDIR}/configure";\
631                 cd ${.CURDIR} && ${SETENV} ${SCRIPTS_ENV} ${SH} \
632                   ${SCRIPTDIR}/configure; \
633         fi
634 .  if defined(GNU_CONFIGURE)
635         # NetBSD uses the old sunv4 soname format.  Force NetBSD to generate library
636         # names that match linux and the other BSDs.
637         @if [ "${OPSYS}" = "NetBSD" ]; then \
638                 ${FIND} ${WRKSRC} -name configure | ${XARGS} \
639                 ${SED} -i.netbsd -e 's|version_type=sunos|version_type=freebsd-elf|'; \
640         fi
641         @CONFIG_GUESS_DIRS=$$(${FIND} ${WRKDIR} -name config.guess -o -name config.sub \
642                 | ${XARGS} -n 1 ${DIRNAME} 2>/dev/null); \
643         for _D in $${CONFIG_GUESS_DIRS}; do \
644                 ${RM} $${_D}/config.guess; \
645                 ${CP} ${MK_TEMPLATES}/config.guess $${_D}/config.guess; \
646                 ${CHMOD} a+rx $${_D}/config.guess; \
647                 ${RM} $${_D}/config.sub; \
648                 ${CP} ${MK_TEMPLATES}/config.sub $${_D}/config.sub; \
649                 ${CHMOD} a+rx $${_D}/config.sub; \
650         done
651 .  endif
652 .  if defined(HAS_CONFIGURE)
653         @${MKDIR} ${CONFIGURE_WRKSRC}
654         @LCA=$$(${SET_LATE_CONFIGURE_ARGS}) && echo "==> cd ${CONFIGURE_WRKSRC} && $$LCA"
655         @${ECHO_MSG} "    ${SETENV} CC=\"${CC}\" CPP=\"${CPP}\" CXX=\"${CXX}\""
656         @${ECHO_MSG} "    CFLAGS=\"${CFLAGS}\""
657         @${ECHO_MSG} "    CPPFLAGS=\"${CPPFLAGS}\""
658         @${ECHO_MSG} "    CXXFLAGS=\"${CXXFLAGS}\""
659         @${ECHO_MSG} "    LDFLAGS=\"${LDFLAGS}\""
660         @${ECHO_MSG} "    LIBS=\"${LIBS}\""
661         @${ECHO_MSG} "    INSTALL=\"/usr/bin/install -c\""
662         @${ECHO_MSG} "    INSTALL_DATA=\"${INSTALL_DATA}\""
663         @${ECHO_MSG} "    INSTALL_LIB=\"${INSTALL_LIB}\""
664         @${ECHO_MSG} "    INSTALL_PROGRAM=\"${INSTALL_PROGRAM}\""
665         @${ECHO_MSG} "    INSTALL_SCRIPT=\"${INSTALL_SCRIPT}\""
666         @${ECHO_MSG} "    ${CONFIGURE_ENV}"
667         @${ECHO_MSG} "    ${CONFIGURE_CMD} ${CONFIGURE_ARGS}"
668         @(cd ${CONFIGURE_WRKSRC} && \
669             ${SET_LATE_CONFIGURE_ARGS} \
670                 if ! ${SETENV} CC="${CC}" CPP="${CPP}" CXX="${CXX}" \
671             CFLAGS="${CFLAGS}" CPPFLAGS="${CPPFLAGS}" CXXFLAGS="${CXXFLAGS}" \
672             LDFLAGS="${LDFLAGS}" LIBS="${LIBS}" \
673             INSTALL="/usr/bin/install -c" \
674             INSTALL_DATA="${INSTALL_DATA}" \
675             INSTALL_LIB="${INSTALL_LIB}" \
676             INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
677             INSTALL_SCRIPT="${INSTALL_SCRIPT}" \
678             ${CONFIGURE_ENV} ${CONFIGURE_CMD} ${CONFIGURE_ARGS}; then \
679                          ${ECHO_MSG} "===>  Script \"${CONFIGURE_SCRIPT}\" failed unexpectedly."; \
680                          (${ECHO_CMD} ${CONFIGURE_FAIL_MESSAGE}); \
681                          ${FALSE}; \
682                 fi)
683 .  endif
684 .endif
685
686 # --------------------------------------------------------------------------
687 # --  Phase: Build
688 # --------------------------------------------------------------------------
689
690 MAKE_CMD?=              ${BSDMAKE}
691 MAKEFILE?=              Makefile
692 MAKE_FLAGS?=            -f
693 MAKE_ENV+=              PREFIX=${PREFIX} \
694                         LOCALBASE=${LOCALBASE} \
695                         OPSYS="${OPSYS}" \
696                         CC="${CC}" CFLAGS="${CFLAGS}" \
697                         CPP="${CPP}" CPPFLAGS="${CPPFLAGS}" \
698                         LDFLAGS="${LDFLAGS}" LIBS="${LIBS}" \
699                         CXX="${CXX}" CXXFLAGS="${CXXFLAGS}" \
700                         STD_DOCDIR="${STD_DOCDIR}" \
701                         STD_EXAMPLESDIR="${STD_EXAMPLESDIR}" \
702                         MANPREFIX="${MANPREFIX}"
703 DESTDIRNAME?=           DESTDIR
704 STAGEDIR=               ${WRKDIR}/stage
705 .if defined(CONFIGURE_OUTSOURCE)
706 BUILD_WRKSRC?=          ${CONFIGURE_WRKSRC}
707 .else
708 BUILD_WRKSRC?=          ${WRKSRC}
709 .endif
710
711 .if defined(DESTDIR_VIA_ENV)
712 MAKE_ENV+=              ${DESTDIRNAME}=${STAGEDIR}
713 .else
714 MAKE_ARGS+=             ${DESTDIRNAME}=${STAGEDIR}
715 .endif
716
717 .for lang in C CXX
718 .  if defined(USE_${lang}STD)
719 ${lang}FLAGS:=  ${${lang}FLAGS:N-std=*} -std=${USE_${lang}STD}
720 .  endif
721
722 .  if defined(${lang}FLAGS_${ARCH})
723 ${lang}FLAGS+=  ${${lang}FLAGS_${ARCH}}
724 .  endif
725 .endfor
726
727 # Multiple make jobs support
728 .if defined(DISABLE_MAKE_JOBS) || defined(SINGLE_JOB)
729 _MAKE_JOBS=             #
730 MAKE_JOBS_NUMBER=       1
731 .else
732 .  if defined(MAKE_JOBS_NUMBER)
733 _MAKE_JOBS_NUMBER:=     ${MAKE_JOBS_NUMBER}
734 .  else
735 .    if !defined(NUMBER_CPUS)
736 .error 'NUMBER_CPUS' must be defined in toplevel make.conf
737 .    endif
738 _MAKE_JOBS_NUMBER=      ${NUMBER_CPUS}
739 .  endif
740 .  if defined(MAKE_JOBS_NUMBER_LIMIT)
741 MAKE_JOBS_NUMBER=       ${MAKE_JOBS_NUMBER_LIMIT}
742 .  else
743 MAKE_JOBS_NUMBER=       ${_MAKE_JOBS_NUMBER}
744 .  endif
745 _MAKE_JOBS?=            -j${MAKE_JOBS_NUMBER}
746 .endif
747
748 DO_MAKE_BUILD?=         ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_FLAGS} \
749                         ${MAKEFILE} ${_MAKE_JOBS} ${MAKE_ARGS:C,^${DESTDIRNAME}=.*,,g}
750
751 build-message:
752         @${ECHO_MSG} "===>  Building for ${TWO_PART_ID}"
753
754 .if !target(do-build)
755 do-build:
756         @${ECHO_MSG} "==> Set environment:"
757 .for pair in ${MAKE_ENV}
758         @${ECHO_MSG} "    ${pair}"
759 .endfor
760         @${ECHO_MSG} "==> cd ${BUILD_WRKSRC};"
761         @${ECHO_MSG} "    ${MAKE_CMD} ${MAKE_FLAGS} ${MAKEFILE}"
762         @${ECHO_MSG} "    ${_MAKE_JOBS} ${MAKE_ARGS:C,^${DESTDIRNAME}=.*,,g} ${BUILD_TARGET}"
763         @(cd ${BUILD_WRKSRC}; if ! ${DO_MAKE_BUILD} ${BUILD_TARGET}; then \
764                 ${ECHO_MSG} "===> Compilation failed unexpectedly."; \
765                 ${FALSE}; \
766         fi)
767 .endif
768
769 # --------------------------------------------------------------------------
770 # --  Phase: Stage
771 # --------------------------------------------------------------------------
772
773 MANDIRS+=               ${MANPREFIX}/man
774 .for sect in 1 2 3 4 5 6 7 8 9 L N
775 MAN${sect}PREFIX?=      ${MANPREFIX}
776 .endfor
777
778 .if defined(CONFIGURE_OUTSOURCE)
779 INSTALL_WRKSRC?=        ${CONFIGURE_WRKSRC}
780 .else
781 INSTALL_WRKSRC?=        ${WRKSRC}
782 .endif
783
784 stage-message:
785         @${ECHO_MSG} "===>  Staging for ${TWO_PART_ID}"
786
787 .if !target(stage-dir)
788 stage-dir:
789         @${MKDIR} \
790                 ${STAGEDIR}${PREFIX}/bin \
791                 ${STAGEDIR}${PREFIX}/etc/rc.d \
792                 ${STAGEDIR}${PREFIX}/include \
793                 ${STAGEDIR}${PREFIX}/lib/pkgconfig \
794                 ${STAGEDIR}${PREFIX}/libdata \
795                 ${STAGEDIR}${PREFIX}/libexec \
796                 ${STAGEDIR}${PREFIX}/sbin \
797                 ${STAGEDIR}${PREFIX}/share/doc \
798                 ${STAGEDIR}${PREFIX}/share/examples \
799                 ${STAGEDIR}${PREFIX}/share/info \
800                 ${STAGEDIR}${PREFIX}/share/locale \
801                 ${STAGEDIR}${PREFIX}/share/man/man1 \
802                 ${STAGEDIR}${PREFIX}/share/man/man2 \
803                 ${STAGEDIR}${PREFIX}/share/man/man3 \
804                 ${STAGEDIR}${PREFIX}/share/man/man4 \
805                 ${STAGEDIR}${PREFIX}/share/man/man5 \
806                 ${STAGEDIR}${PREFIX}/share/man/man6 \
807                 ${STAGEDIR}${PREFIX}/share/man/man7 \
808                 ${STAGEDIR}${PREFIX}/share/man/man8 \
809                 ${STAGEDIR}${PREFIX}/share/man/man9 \
810                 ${STAGEDIR}${PREFIX}/share/man/mann \
811                 ${STAGEDIR}${PREFIX}/share/man/manl \
812                 ${STAGEDIR}${PREFIX}/share/nls \
813                 ${STAGEDIR}${PREFIX}/www \
814                 # end
815 .endif
816
817 .if !target(do-install) && !defined(NO_INSTALL)
818 do-install:
819         @(cd ${INSTALL_WRKSRC} && ${SETENV} ${MAKE_ENV} \
820                 ${MAKE_CMD} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} \
821                 ${INSTALL_TARGET})
822 .endif
823
824 # Compress all manpage not already compressed and also not hardlinks
825 # Find all manpages which are not compressed and are hadlinks, and only
826 # get the list of inodes concerned, for each of them compress the first
827 # one found and recreate the hardlinks for the others.
828 # Fixes all dead symlinks left by the previous round.
829
830 .if !target(compress-man)
831
832 .if "${OPSYS}" == "Linux" || "${OPSYS}" == "SunOS"
833 _GET_INODE=     ${STAT} -c '%i' {}
834 .else
835 _GET_INODE=     ${STAT} -f '%i' {}
836 .endif
837
838 compress-man:
839         @${ECHO_MSG} "====> Start compressing man pages"
840         @mdirs= ; \
841         for dir in ${MANDIRS:S/^/${STAGEDIR}/} ; do \
842                 [ -d $$dir ] && mdirs="$$mdirs $$dir" ;\
843         done ; \
844         for dir in $$mdirs; do \
845                 ${FIND} $$dir -type f \! -name "*.gz" -links 1 -exec ${GZIP_CMD} {} \; ; \
846                 ${FIND} $$dir -type f \! -name "*.gz" \! -links 1 -exec ${_GET_INODE} \; | \
847                         ${SORT} -u | while read inode ; do \
848                                 unset ref ; \
849                                 for f in $$(${FIND} $$dir -type f -inum $${inode} -print); do \
850                                         if [ -z $$ref ]; then \
851                                                 ref=$${f}.gz ; \
852                                                 ${GZIP_CMD} $${f} ; \
853                                                 continue ; \
854                                         fi ; \
855                                         ${RM} $${f} ; \
856                                         (cd $${f%/*}; ${LN} -f $${ref##*/} $${f##*/}.gz) ; \
857                                 done ; \
858                         done ; \
859                 ${FIND} $$dir -type l \! -name "*.gz" | while read link ; do \
860                                 ${LN} -sf $$(readlink $$link).gz $$link.gz ;\
861                                 ${RM} $$link ; \
862                 done; \
863         done
864         @${ECHO_MSG} "====> Man page compression complete"
865 .endif
866
867 .if !target(install-rc-script)
868 .undef RC_SUBR_USED
869 .  for sp in ${SUBPACKAGES}
870 .    if defined(RC_SUBR_${sp}) && !empty(RC_SUBR_${sp})
871 RC_SUBR_USED=   yes
872 .    endif
873 .  endfor
874 .  if defined(RC_SUBR_USED)
875 install-rc-script:
876 .    for sp in ${SUBPACKAGES}
877 .      if defined(RC_SUBR_${sp}) && !empty(RC_SUBR_${sp})
878         @${ECHO_MSG} "====> Staging rc.d startup scripts (${sp})"
879         @for i in ${RC_SUBR_${sp}}; do \
880                 _prefix=${PREFIX}; \
881                 [ "${PREFIX}" = "/usr" ] && _prefix="" ; \
882                 ${MKDIR} ${STAGEDIR}$${_prefix}/etc/rc.d; \
883                 ${INSTALL_SCRIPT} ${WRKDIR}/$${i} ${STAGEDIR}$${_prefix}/etc/rc.d/$${i%.sh}; \
884                 ${ECHO_CMD} "$${_prefix}/etc/rc.d/$${i%.sh}" \
885                 >> ${WRKDIR}/.manifest.${sp}.mktmp; \
886         done
887 .      endif
888 .    endfor
889 .  endif
890 .endif
891
892 _LICENSE_DIR=           share/licenses/${NAMEBASE}
893
894 .if !target(install-license)
895 install-license:
896 .  if defined(LICENSE_SET)
897 .    for sp in ${SUBPACKAGES}
898 .      if defined(LICENSE_${sp})
899         @${MKDIR} ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}
900         @${ECHO} "This package is ${LICENSE_SCHEME}-licensed:" > ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/summary.${sp}.${VARIANT}
901 .        if defined(LICENSE_TERMS_${sp})
902         @${ECHO_MSG} "====> Install license terms (${sp})"
903         @${ECHO} " * Described by Terms.${sp}.${VARIANT}" >> ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/summary.${sp}.${VARIANT}
904         @${INSTALL_DATA} ${LICENSE_TERMS_${sp}} ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/Terms.${sp}.${VARIANT}
905 .        endif
906 .        for lic in ${LICENSE_${sp}}
907 .          if defined(LICENSE_FILE_${lic})
908 .            if "${LICENSE_FILE_${lic}}" == "stock"
909         @${ECHO_MSG} "====> Install stock ${lic} license (${sp})"
910         @if [ -e "${WRKDIR}/LICENSE_${lic}" ]; then \
911                 ${INSTALL_DATA} ${WRKDIR}/LICENSE_${lic} ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/${lic}.${VARIANT};\
912                 echo " * ${lic} (${LICENSE_NAME_${lic}})" >> ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/summary.${sp}.${VARIANT};\
913         else \
914                 echo "====> Failed to locate stock ${lic} license";\
915                 echo "Failed to locate stock ${lic} license." >> ${WRKDIR}/.license_fail;\
916         fi
917 .            else
918         @if [ -e "${LICENSE_FILE_${lic}}" ]; then \
919                 echo "====> Install ${lic} license (${sp})"; \
920                 ${INSTALL_DATA} ${LICENSE_FILE_${lic}} ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/${lic}.${VARIANT};\
921                 echo " * ${lic} (${LICENSE_NAME_${lic}})" >> ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/summary.${sp}.${VARIANT};\
922         else \
923                 echo "====> Failed to locate ${lic} license (${LICENSE_FILE_${lic}})";\
924                 echo "Failed to locate ${lic} license (${LICENSE_FILE_${lic}})." >> ${WRKDIR}/.license_fail;\
925         fi
926 .            endif
927 .          endif
928 .        endfor
929 .      else
930 .       if defined(LICENSE_TERMS_${sp})
931         @${ECHO_MSG} "====> Install license terms (${sp})"
932         @${MKDIR} ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}
933         @${ECHO} "This package's licensing is described by Terms.${sp}.${VARIANT}" > ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/summary.${sp}.${VARIANT}
934         @${ECHO} "There are no other applicable licenses." >> ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/summary.${sp}.${VARIANT}
935         @${INSTALL_DATA} ${LICENSE_TERMS_${sp}} ${STAGEDIR}${PREFIX}/${_LICENSE_DIR}/Terms.${sp}.${VARIANT}
936 .       endif 
937 .      endif
938 .    endfor
939 .  endif
940 .endif
941
942 .if !target(stage-qa)
943 .  if defined(DEVELOPER)
944
945 .    undef _PLIST_LIST
946 .    for sp in ${SUBPACKAGES}
947 _PLIST_LIST+=   ${WRKDIR}/.manifest.${sp}.mktmp
948 .    endfor
949
950 QA_ENV+=        STAGEDIR=${STAGEDIR} \
951                 PREFIX=${PREFIX} \
952                 LOCALBASE=${LOCALBASE} \
953                 OPSYS="${OPSYS}" \
954                 STRIP="${STRIP}" \
955                 NAMEBASE="${NAMEBASE}" \
956                 VARIANT="${VARIANT}" \
957                 TMPPLIST="${_PLIST_LIST}" \
958                 BUNDLE_LIBS="${BUNDLE_LIBS}"
959
960 .    if !empty(USES:Mssl)
961 QA_ENV+=        USESSSL=yes
962 .    endif
963 .    if !empty(USES:Mdesktop-utils\:*)
964 QA_ENV+=        USESDESKTOPUTILS=yes
965 .    endif
966 .    if !empty(USES:Mlibtool*)
967 QA_ENV+=        USESLIBTOOL=yes
968 .    endif
969 .    if !empty(USES:Mmime-info\:*)
970 QA_ENV+=        USESMIMEINFO=yes
971 .    endif
972 .    if !empty(USES:Mterminfo\:*)
973 QA_ENV+=        USESTERMINFO=yes
974 .    endif
975
976 stage-qa:
977         @${ECHO_MSG} "====> Running Q/A tests (stage-qa)"
978         @${SETENV} ${QA_ENV} ${SH} ${MK_SCRIPTS}/qa.sh
979
980 .  endif
981 .endif
982
983 # --------------------------------------------------------------------------
984 # --  Manifest handling
985 # --------------------------------------------------------------------------
986
987 TMP_MANIFESTS=          ${SUBPACKAGES:C|(.*)|${WRKDIR}/.manifest.\1.mktmp|}
988 TMP_MANIFESTS_SORT=     ${TMP_MANIFESTS:.mktmp=.mktmp.sorted}
989 AWK_DYLIB_SUPPORT=      '/.*\.so[0123456789.]?*$$/ { \
990   if (substr ($$0, length($$0) - 2) == ".so") { \
991     print substr($$0, 1, length($$0) - 3) ".dylib"; \
992   } else { \
993     match ($$0, /\.so[0123456789.]*$$/); \
994     print substr($$0, 1, RSTART) substr($$0, RSTART + 4) ".dylib"; \
995   } \
996   next; \
997 } \
998 { print $$0 }'
999
1000 .for plist in ${TMP_MANIFESTS}
1001 ${plist}.sorted: ${plist}
1002         @${SORT} -u ${.ALLSRC} > ${.TARGET}
1003 .endfor
1004
1005 generate-plist: ${TMP_MANIFESTS}
1006
1007 ${TMP_MANIFESTS}:
1008         @${ECHO_MSG} "===>   Generating temporary packing list (${.TARGET:R:E})"
1009         @${MKDIR} ${.TARGET:H}
1010         @${TOUCH} ${.TARGET}
1011         @alpha=${.CURDIR}/manifests/plist.${.TARGET:R:E}.${VARIANT} ;\
1012         bravo=${.CURDIR}/manifests/plist.${.TARGET:R:E} ;\
1013           if [ -f $$alpha ]; then manifest=$$alpha ;\
1014         elif [ -f $$bravo ]; then manifest=$$bravo ;\
1015         fi ;\
1016         if [ -n "$$manifest" ]; then \
1017             if [ "${OPSYS}" = "Darwin" ]; then \
1018                 ${SED} ${PLIST_SUB:NSHARED_OBJECT=*:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} \
1019                 $$manifest | ${AWK} ${AWK_DYLIB_SUPPORT} | \
1020                 ${SED} ${PLIST_SUB:MSHARED_OBJECT=*:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} \
1021                 >> ${.TARGET} ;\
1022             else \
1023                 ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} \
1024                 $$manifest >> ${.TARGET} ;\
1025             fi \
1026         fi
1027
1028 .if defined(INFO)
1029 # -----------------------------------------------
1030 # Incorporated in ravenadm
1031 # -----------------------------------------------
1032 # 1) .if defined(INFO)
1033 #    BUILD_DEPENDS+= indexinfo:single:standard
1034 #    .endif
1035 # 2) validation of a single unique INFO_SUBDIR
1036 # 3) definition of INFO_SUBDIR (default = ".")
1037 # -----------------------------------------------
1038 .endif
1039
1040 .if !target(add-plist-info)
1041 add-plist-info:
1042 .  for sp in ${SUBPACKAGES}
1043 .    for i in ${INFO_${sp}}
1044         @${LS} ${STAGEDIR}${PREFIX}/${INFO_PATH}/$i.info* | \
1045         ${SED} -e s:${STAGEDIR}:@info\ :g >> ${WRKDIR}/.manifest.${sp}.mktmp
1046 .    endfor
1047 .  endfor
1048 .endif
1049
1050 # If we're installing into a non-standard PREFIX, we need to remove that
1051 # directory at deinstall-time.  At this time, PREFIX should be prohibited
1052 # from being "/usr" or "/" but leave the check in anyway.
1053
1054 .if !target(add-plist-post)
1055 .  if (${PREFIX} != ${LOCALBASE} && ${PREFIX} != "/usr" && ${PREFIX} != "/")
1056 add-plist-post:
1057 .    for sp in ${SUBPACKAGES}
1058         @${ECHO_CMD} "@dir ${PREFIX}" >> ${WRKDIR}/.manifest.${sp}.mktmp
1059 .    endfor
1060 .  endif
1061 .endif
1062
1063 # "docs" is a standard subpackage name.
1064 # All port docs must be located at ${PREFIX}/share/doc/${NAMEBASE}
1065 # If manifests/docs.${VARIANT} does not exist (which is handled by
1066 # generate-plist target already), autogeneration is assumed.
1067
1068 .if !target(add-plist-docs)
1069 .  if ${SUBPACKAGES:Mdocs}
1070 .    if !exists(${.CURDIR}/manifests/plist.docs) && !exists(${.CURDIR}/manifests/plist.docs.${VARIANT})
1071 add-plist-docs:
1072         @(cd ${STAGEDIR}${PREFIX} && ${FIND} share/doc \
1073         \( -type f -o -type l \) 2>/dev/null | ${SORT}) >> ${WRKDIR}/.manifest.docs.mktmp
1074 .    endif
1075 .  endif
1076 .endif
1077
1078 # "examples" is a standard subpackage name.
1079 # All port examples must be located at ${PREFIX}/share/examples/${NAMEBASE}
1080 # If manifests/examples.${VARIANT} does not exist (which is handled by
1081 # generate-plist target already), autogeneration is assumed.
1082
1083 .if !target(add-plist-examples)
1084 .  if ${SUBPACKAGES:Mexamples}
1085 .    if !exists(${.CURDIR}/manifests/plist.examples) && !exists(${.CURDIR}/manifests/plist.examples.${VARIANT})
1086 add-plist-examples:
1087         @(cd ${STAGEDIR}${PREFIX} && ${FIND} share/examples \
1088         \( -type f -o -type l \) 2>/dev/null | ${SORT}) >> ${WRKDIR}/.manifest.examples.mktmp
1089 .    endif
1090 .  endif
1091 .endif
1092
1093 # "nls" is a standard subpackage name.
1094 # All port NLS files must be located at ${PREFIX}/share/locale
1095 # If manifests/nls.${VARIANT} does not exist (which is handled by
1096 # generate-plist target already), autogeneration is assumed.
1097
1098 .if !target(add-plist-nls)
1099 .  if ${SUBPACKAGES:Mnls}
1100 .    if !exists(${.CURDIR}/manifests/plist.nls) && !exists(${.CURDIR}/manifests/plist.nls.${VARIANT})
1101 add-plist-nls:
1102         @(cd ${STAGEDIR}${PREFIX} && ${FIND} share/locale \
1103         \( -type f -o -type l \) 2>/dev/null | ${SORT}) >> ${WRKDIR}/.manifest.nls.mktmp
1104 .    endif
1105 .  endif
1106 .endif
1107
1108 # add licenses to package manifest
1109 .if !target(add-plist-licenses)
1110 add-plist-licenses:
1111 .  if defined(LICENSE_SET)
1112 .    for sp in ${SUBPACKAGES}
1113 .      if defined(LICENSE_${sp}) || defined(LICENSE_TERMS_${sp})
1114         @echo "${_LICENSE_DIR}/summary.${sp}.${VARIANT}" >> ${WRKDIR}/.manifest.${sp}.mktmp
1115 .      endif
1116 .      if defined(LICENSE_${sp})
1117 .        for lic in ${LICENSE_${sp}}
1118 .          if exists(${LICENSE_FILE_${lic}}) || "${LICENSE_FILE_${lic}}" == "stock"
1119         @echo "${_LICENSE_DIR}/${lic}.${VARIANT}" >> ${WRKDIR}/.manifest.${sp}.mktmp
1120 .          endif
1121 .        endfor
1122 .      endif
1123 .      if defined(LICENSE_TERMS_${sp})
1124         @echo "${_LICENSE_DIR}/Terms.${sp}.${VARIANT}" >> ${WRKDIR}/.manifest.${sp}.mktmp
1125 .      endif
1126 .    endfor
1127 .  endif
1128 .endif
1129
1130 # --------------------------------------------------------------------------
1131 # --  Phase: Test (optional)
1132 # --------------------------------------------------------------------------
1133
1134 .if defined(CONFIGURE_OUTSOURCE)
1135 TEST_WRKSRC?=   ${CONFIGURE_WRKSRC}
1136 .else
1137 TEST_WRKSRC?=   ${WRKSRC}
1138 .endif
1139
1140 test-message:
1141         @${ECHO_MSG} "===>  Testing for ${TWO_PART_ID}"
1142
1143 .if !target(do-test)
1144 .  if defined(TEST_TARGET)
1145 DO_MAKE_TEST?=          ${SETENV} ${TEST_ENV} ${MAKE_CMD} ${MAKE_FLAGS} \
1146                         ${MAKEFILE} ${TEST_ARGS:C,^${DESTDIRNAME}=.*,,g}
1147 do-test:
1148         @(cd ${TEST_WRKSRC}; \
1149         if ! ${DO_MAKE_TEST} ${TEST_TARGET}; then \
1150                 if [ -n "${TEST_FAIL_MESSAGE}" ] ; then \
1151                         ${ECHO_MSG} "===> Tests failed unexpectedly."; \
1152                         (${ECHO_CMD} "${TEST_FAIL_MESSAGE}"); \
1153                 fi; \
1154                 ${FALSE}; \
1155         fi)
1156 .  else
1157 do-test:
1158         @${DO_NADA}
1159 .  endif
1160 .endif
1161
1162 # --------------------------------------------------------------------------
1163 # --  Miscellaneous
1164 # --------------------------------------------------------------------------
1165
1166 # Macro for doing in-place file editing using regexps
1167 REINPLACE_ARGS?=        -i.bak
1168 REINPLACE_CMD?=         ${SED} ${REINPLACE_ARGS}
1169
1170 # ensure PLIST_SUB has at least one value
1171 PLIST_SUB+=             OPSYS=${OPSYS}
1172
1173 # ONLY-[OPSYS] is "@comment " for inactive platform and blank for active
1174 PLIST_SUB+=             ONLY-${OPSYS:tu}=""
1175
1176 .if "${OPSYS}" == "Linux"       # only x86_64 supported right now
1177 MULTILIB=       lib/x86_64-linux-gnu
1178 ASLIB=          lib64
1179 .elif "${OPSYS}" == "SunOS"
1180 MULTILIB=       lib/amd64
1181 ASLIB=          lib/amd64
1182 .else
1183 MULTILIB=       lib
1184 ASLIB=          lib
1185 .endif
1186 PLIST_SUB+=     ASLIB="${ASLIB}"
1187
1188 .if "${OPSYS}" == "Darwin"
1189 LIBEXT=         dylib
1190 PLIST_SUB+=     EXCLUDE-DARWIN="@comment "
1191 .else
1192 LIBEXT=         so
1193 PLIST_SUB+=     EXCLUDE-DARWIN=""
1194 .endif
1195 PLIST_SUB+=     LIBEXT="${LIBEXT}"
1196 PLIST_SUB+=     SHARED_OBJECT="so"
1197
1198 # Define ONLY-<OPSYS:tu> for all supported systems
1199 .for supp in dragonfly freebsd netbsd linux sunos darwin midnightbsd
1200 .  if empty(PLIST_SUB:MONLY-${supp:tu}=*)
1201 PLIST_SUB+=             ONLY-${supp:tu}="@comment "
1202 .  endif
1203 .endfor
1204
1205 # support for optional SOVERSION keyword
1206 # If present, add to PLIST substitutions along with SOMAJOR
1207
1208 .if defined(SOVERSION)
1209 PLIST_SUB+=     SOVERSION=${SOVERSION} SOMAJOR=${SOVERSION:R:R}
1210 .endif
1211
1212 # Macro for copying entire directory tree with correct permissions
1213 # Arguments are:  (1) source directory (usually ".")
1214 #                 (2) target directory
1215 #                 (3) optional, find command modifiers
1216
1217 COPYTREE_BIN=   ${SH} ${MK_SCRIPTS}/copytree.sh ${BINMODE}
1218 COPYTREE_SHARE= ${SH} ${MK_SCRIPTS}/copytree.sh ${_SHAREMODE}
1219
1220 MAKE_ENV+=              ADA_PROJECT_PATH="${LOCALBASE}/share/gpr"\
1221                         F77="gfortran" FC="gfortran"
1222 CONFIGURE_ENV+=         ADA_PROJECT_PATH="${LOCALBASE}/share/gpr"\
1223                         F77="gfortran" FC="gfortran"
1224
1225 # --------------------------------------------------------------------------
1226 # --  Debugging
1227 # --------------------------------------------------------------------------
1228
1229 # How to do nothing.  Override to make it do nothing differently
1230 DO_NADA?=               ${TRUE}
1231
1232 # --------------------------------------------------------------------------
1233 # --  Prepend PATH (used for bootstrapping normally)
1234 # --------------------------------------------------------------------------
1235
1236 .if defined(PREPEND_PATH)
1237 PATH:=                  ${PREPEND_PATH}:${PATH}
1238 .endif
1239
1240 # --------------------------------------------------------------------------
1241 # --  CCACHE handling
1242 # --------------------------------------------------------------------------
1243
1244 .if defined(BUILD_WITH_CCACHE)
1245 CCACHE_DIR?=    /root/.ccache
1246
1247 .  if !defined(NO_CCACHE) && !defined(NO_BUILD)
1248
1249 _CCACHE_PATH=   /usr/libexec
1250
1251 # Prepend the ccache dir into the PATH and setup ccache env
1252 PATH:=                  ${_CCACHE_PATH}:${PATH}
1253
1254 MAKE_ENV:=              ${MAKE_ENV:NPATH=*}
1255 CONFIGURE_ENV:=         ${CONFIGURE_ENV:NPATH=*}
1256
1257 MAKE_ENV+=              CCACHE_DIR="${CCACHE_DIR}"
1258 CONFIGURE_ENV+=         CCACHE_DIR="${CCACHE_DIR}"
1259 .  endif
1260 .endif
1261
1262 # Always override PATH in configure and build environments, not just
1263 # when ccache is used.  Otherwise PREPEND_PATH won't work correctly
1264 # when ccache is disabled.
1265 MAKE_ENV+=              PATH=${PATH}
1266 CONFIGURE_ENV+=         PATH=${PATH}
1267
1268
1269 # --------------------------------------------------------------------------
1270 # --  USERS/GROUPS handling
1271 # --------------------------------------------------------------------------
1272
1273 .if "${OPSYS}" == "SunOS"
1274 # Solaris reserves 60001-60003 for nobody, noaccess, and aiuser
1275 # So shift all the UIDs and GIDs to start at 50001 instead on SunOS
1276 UID_OFFSET?=    -10000
1277 GID_OFFSET?=    -10000
1278 .else
1279 UID_OFFSET?=    0
1280 GID_OFFSET?=    0
1281 .endif
1282 UID_FILES?=     ${MK_TEMPLATES}/UID.ravenports
1283 GID_FILES?=     ${MK_TEMPLATES}/GID.ravenports
1284 _SYSTEM_UID=    ${MK_TEMPLATES}/UID.${OPSYS:tl}
1285 _SYSTEM_GID=    ${MK_TEMPLATES}/GID.${OPSYS:tl}
1286
1287 .if exists(${WRKDIRPREFIX}/.UID.custom)
1288 UID_FILES+=     ${WRKDIRPREFIX}/.UID.custom
1289 .endif
1290 .if exists(${WRKDIRPREFIX}/.GID.custom)
1291 GID_FILES+=     ${WRKDIRPREFIX}/.GID.custom
1292 .endif
1293
1294 # Owner and group of the WWW user (overridable)
1295 WWWOWN?=        wwwraven
1296 WWWGRP?=        wwwraven
1297
1298 .if !target(create-users-groups)
1299 .  if defined(GROUPS) || defined(USERS)
1300 _UG_INSTALL=            ${WRKDIR}/users-groups-install.sh
1301 _UG_DEINSTALL=          ${WRKDIR}/users-groups-deinstall.sh
1302 PW=                     /usr/sbin/pw    # FreeBSD/DragonFly
1303
1304 create-users-groups:
1305         @${SETENV} \
1306                         dp_ECHO_MSG="${ECHO_MSG}" \
1307                         dp_UID_FILES="${UID_FILES}" \
1308                         dp_GID_FILES="${GID_FILES}" \
1309                         dp_UID_OFFSET="${UID_OFFSET}" \
1310                         dp_GID_OFFSET="${GID_OFFSET}" \
1311                         dp_SYSTEM_UID="${_SYSTEM_UID}" \
1312                         dp_SYSTEM_GID="${_SYSTEM_GID}" \
1313                         dp_INSTALL="${INSTALL}" \
1314                         dp_OPSYS="${OPSYS}" \
1315                         dp_OSVERSION="${OSVERSION}" \
1316                         dp_PREFIX="${PREFIX}" \
1317                         dp_PW="${PW}" \
1318                         dp_SCRIPTSDIR='${MK_SCRIPTS}' \
1319                         dp_UG_DEINSTALL="${_UG_DEINSTALL}" \
1320                         dp_UG_INSTALL="${_UG_INSTALL}" \
1321                         ${SH} ${MK_SCRIPTS}/do-users-groups.sh "${USERS}" "${GROUPS}"
1322 .  endif
1323 .endif
1324
1325 # --------------------------------------------------------------------------
1326 # --  Post-USES handling
1327 # --------------------------------------------------------------------------
1328
1329 .if !target(apply-slist)
1330
1331 SUB_LIST+=              LOCALBASE=${LOCALBASE:Q} \
1332                         PREFIX=${PREFIX:Q} \
1333                         ETCDIR=${ETCDIR:Q}
1334 _SUB_LIST_TEMP=         ${SUB_LIST:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/}
1335
1336 .  for sp in ${SUBPACKAGES}
1337 .    if defined(RC_SUBR_${sp}) && !empty(RC_SUBR_${sp})
1338 SUB_FILES+=             ${RC_SUBR_${sp}}
1339 .    endif
1340 .  endfor
1341
1342 # transform files like pkg-message-primary-freebsd.in to
1343 # pkg-message-primary-opsys.in
1344
1345 SUB_FILES:=     ${SUB_FILES:S/-${OPSYS:tl}/-opsys/}
1346
1347 apply-slist:
1348 .  for file in ${SUB_FILES}
1349 .    if exists(${FILESDIR}/${file}.in)
1350         @${SED} ${_SUB_LIST_TEMP} -e '/^@comment /d' ${FILESDIR}/${file}.in > ${WRKDIR}/${file}
1351 .    else
1352         @${ECHO_MSG} "** Checked ${FILESDIR}:"
1353         @${ECHO_MSG} "** Missing ${file}.in for ${TWO_PART_ID}."
1354         exit 1
1355 .    endif
1356 .  endfor
1357 .endif
1358
1359 .include "/xports/Mk/raven.sequence.mk"