Mk/Uses/iconv: support iconv+
[dports.git] / Mk / bsd.pkgng.mk
1 #-*- tab-width: 4; -*-
2 # ex:ts=4
3 #
4 # $FreeBSD: Mk/bsd.pkgng.mk 322320 2013-07-05 12:29:35Z bdrewery $
5 #
6
7 .if defined(_POSTMKINCLUDED)
8 PKGNG_Include_MAINTAINER=       portmgr@FreeBSD.org
9
10 METADIR=                ${WRKDIR}/.metadir
11 MANIFESTF=              ${METADIR}/+MANIFEST
12
13 PKGPREINSTALL?=         ${PKGDIR}/pkg-pre-install
14 PKGPOSTINSTALL?=        ${PKGDIR}/pkg-post-install
15 PKGPREDEINSTALL?=       ${PKGDIR}/pkg-pre-deinstall
16 PKGPOSTDEINSTALL?=      ${PKGDIR}/pkg-post-deinstall
17 PKGPREUPGRADE?=         ${PKGDIR}/pkg-pre-upgrade
18 PKGPOSTUPGRADE?=        ${PKGDIR}/pkg-post-upgrade
19 PKGUPGRADE?=            ${PKGDIR}/pkg-upgrade
20 _FORCE_POST_PATTERNS=   rmdir kldxref mkfontscale mkfontdir fc-cache \
21                                                 fonts.dir fonts.scale gtk-update-icon-cache \
22                                                 gio-querymodules \
23                                                 gtk-query-immodules \
24                                                 ldconfig \
25                                                 load-octave-pkg \
26                                                 update-desktop-database update-mime-database \
27                                                 gdk-pixbuf-query-loaders catalog.ports \
28                                                 glib-compile-schemas
29
30 PLIST_REINPLACE:=       ${PLIST_REINPLACE:Ndirrmtry}
31 PLIST_REINPLACE:=       ${PLIST_REINPLACE:Nstopdaemon}
32
33 ACTUAL-PACKAGE-DEPENDS?= \
34         if [ "${_LIB_RUN_DEPENDS}" != "  " ]; then \
35                 ${PKG_QUERY} "%n: {origin: %o, version: \"%v\"}" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,} 2>/dev/null || : ; \
36                 ${PKG_QUERY} "%dn: {origin: %do, version: \"%dv\"}" " " ${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,:C,${PORTSDIR}/,,} 2>/dev/null || : ; \
37         fi
38
39 .if !target(fake-pkg)
40 fake-pkg:
41 .if !defined(NO_PKG_REGISTER)
42 .if defined(INSTALLS_DEPENDS)
43         @${ECHO_MSG} "===>   Registering installation for ${PKGNAME} as automatic"
44 .else
45         @${ECHO_MSG} "===>   Registering installation for ${PKGNAME}"
46 .endif
47         @${MKDIR} ${METADIR}
48         @${ECHO_CMD} "name: ${PKGNAMEPREFIX}${PORTNAME}${PKGNAMESUFFIX}" > ${MANIFESTF} 
49         @${ECHO_CMD} "version: ${PKGVERSION}" >> ${MANIFESTF} 
50         @${ECHO_CMD} "origin: ${PKGORIGIN}" >> ${MANIFESTF} 
51         @${ECHO_CMD} "comment: |" >> ${MANIFESTF}
52         @${ECHO_CMD} "  "${COMMENT:Q} >> ${MANIFESTF}
53         @${ECHO_CMD} "maintainer: ${MAINTAINER}" >> ${MANIFESTF}
54         @${ECHO_CMD} "prefix: ${PREFIX}" >> ${MANIFESTF}
55 .if defined(WWW)
56         @${ECHO_CMD} "www: ${WWW}" >> ${MANIFESTF}
57 .endif
58         @${ECHO_CMD} "deps: " >> ${MANIFESTF}
59         @${ACTUAL-PACKAGE-DEPENDS} | ${GREP} -v -E ${PKG_IGNORE_DEPENDS} | ${SORT} -u | ${SED} 's/^/  /' >> ${MANIFESTF}
60         @${ECHO_CMD} -n "categories: [" >> ${MANIFESTF}
61 .for cat in ${CATEGORIES:u}
62         @${ECHO_CMD} -n "${cat}," >> ${MANIFESTF}
63 .endfor
64         @${ECHO_CMD} "]" >> ${MANIFESTF}
65 .if defined(LICENSE_COMB)
66         @${ECHO_CMD} "licenselogic: ${LICENSE_COMB}" >> ${MANIFESTF}
67 .else
68         @${ECHO_CMD} "licenselogic: single" >> ${MANIFESTF}
69 .endif
70         @${ECHO_CMD} -n "licenses: [" >> ${MANIFESTF}
71 .for lic in ${LICENSE:u}
72         @${ECHO_CMD} -n "${lic}," >> ${MANIFESTF}
73 .endfor
74         @${ECHO_CMD} "]" >> ${MANIFESTF}
75         @${ECHO_CMD} -n "users: [" >> ${MANIFESTF}
76 .for user in ${USERS:u}
77         @${ECHO_CMD} -n "${user}, " >> ${MANIFESTF}
78 .endfor
79         @${ECHO_CMD} "]" >> ${MANIFESTF}
80         @${ECHO_CMD} -n "groups: [" >> ${MANIFESTF}
81 .for group in ${GROUPS:u}
82         @${ECHO_CMD} -n "${group}, " >> ${MANIFESTF}
83 .endfor
84         @${ECHO_CMD} "]" >> ${MANIFESTF}
85         @${ECHO_CMD} -n "options: {" >> ${MANIFESTF}
86 .for opt in ${COMPLETE_OPTIONS_LIST}
87         @[ -z "${PORT_OPTIONS:M${opt}}" ] || match="on" ; ${ECHO_MSG} -n " ${opt}: $${match:-off}," >> ${MANIFESTF}
88 .endfor
89 .undef opt
90         @${ECHO_CMD} "}" >> ${MANIFESTF}
91         @[ -f ${PKGINSTALL} ] && ${CP} ${PKGINSTALL} ${METADIR}/+INSTALL; \
92         [ -f ${PKGPREINSTALL} ] && ${CP} ${PKGPREINSTALL} ${METADIR}/+PRE_INSTALL; \
93         [ -f ${PKGPOSTINSTALL} ] && ${CP} ${PKGPOSTINSTALL} ${METADIR}/+POST_INSTALL; \
94         [ -f ${PKGDEINSTALL} ] && ${CP} ${PKGDEINSTALL} ${METADIR}/+DEINSTALL; \
95         [ -f ${PKGPREDEINSTALL} ] && ${CP} ${PKGPREDEINSTALL} ${METADIR}/+PRE_DEINSTALL; \
96         [ -f ${PKGPOSTDEINSTALL} ] && ${CP} ${PKGPOSTDEINSTALL} ${METADIR}/+POST_DEINSTALL; \
97         [ -f ${PKGUPGRADE} ] && ${CP} ${PKGUPGRADE} ${METADIR}/+UPGRADE; \
98         [ -f ${PKGPREUPGRADE} ] && ${CP} ${PKGPREUPGRADE} ${METADIR}/+PRE_UPGRADE; \
99         [ -f ${PKGPOSTUPGRADE} ] && ${CP} ${PKGPOSTUPGRADE} ${METADIR}/+POST_UPGRADE; \
100         ${CP} ${DESCR} ${METADIR}/+DESC; \
101         [ -f ${PKGMESSAGE} ] && ${CP} ${PKGMESSAGE} ${METADIR}/+DISPLAY || return 0
102 .if !defined(NO_MTREE)
103         @[ -f ${MTREE_FILE} ] && ${CP} ${MTREE_FILE} ${METADIR}/+MTREE_DIRS || return 0
104 .endif
105 .if defined(INSTALLS_DEPENDS)
106         @${SETENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_CMD} -d -l -m ${METADIR} -f ${TMPPLIST}
107 .else
108         @${SETENV} FORCE_POST="${_FORCE_POST_PATTERNS}" ${PKG_CMD} -l -m ${METADIR} -f ${TMPPLIST}
109 .endif
110         @${RM} -rf ${METADIR}
111 .else
112         @${DO_NADA}
113 .endif
114 .endif
115
116 .if !target(check-build-conflicts)
117 check-build-conflicts:
118 .if ( defined(CONFLICTS) || defined(CONFLICTS_BUILD) ) && !defined(DISABLE_CONFLICTS) && !defined(DEFER_CONFLICTS_CHECK)
119         @conflicts_with=$$( \
120         { ${PKG_QUERY} -g "%n-%v %p %o" ${CONFLICTS:C/.+/'&'/} ${CONFLICTS_BUILD:C/.+/'&'/} 2>/dev/null || : ; } \
121                 | while read pkgname prfx orgn; do \
122                 if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then \
123                         ${ECHO_CMD} -n " $${pkgname}"; \
124                 fi; \
125         done); \
126         if [ -n "$${conflicts_with}" ]; then \
127                 ${ECHO_MSG}; \
128                 ${ECHO_MSG} "===>  ${PKGNAME} conflicts with installed package(s): "; \
129                 for entry in $${conflicts_with}; do \
130                         ${ECHO_MSG} "      $${entry}"; \
131                 done; \
132                 ${ECHO_MSG}; \
133                 ${ECHO_MSG} "      They will not build together."; \
134                 ${ECHO_MSG} "      Please remove them first with pkg delete."; \
135                 exit 1;\
136         fi
137 .endif
138 .endif
139
140 .if !target(identify-install-conflicts)
141 identify-install-conflicts:
142 .if ( defined(CONFLICTS) || defined(CONFLICTS_INSTALL) ) && !defined(DISABLE_CONFLICTS)
143         @conflicts_with=$$( \
144         { ${PKG_QUERY} -g "%n-%v %p %o" ${CONFLICTS:C/.+/'&'/} ${CONFLICTS_INSTALL:C/.+/'&'/} 2>/dev/null || : ; } \
145                 | while read pkgname prfx orgn; do \
146                 if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then \
147                         ${ECHO_CMD} -n " $${pkgname}"; \
148                 fi; \
149         done); \
150         if [ -n "$${conflicts_with}" ]; then \
151                 ${ECHO_MSG}; \
152                 ${ECHO_MSG} "===>  ${PKGNAME} conflicts with installed package(s): "; \
153                 for entry in $${conflicts_with}; do \
154                         ${ECHO_MSG} "      $${entry}"; \
155                 done; \
156                 ${ECHO_MSG}; \
157                 ${ECHO_MSG} "      They install files into the same place."; \
158                 ${ECHO_MSG} "      You may want to stop build with Ctrl + C."; \
159                 sleep 10; \
160         fi
161 .endif
162 .endif
163
164 .if !target(check-install-conflicts)
165 check-install-conflicts:
166 .if ( defined(CONFLICTS) || defined(CONFLICTS_INSTALL) || ( defined(CONFLICTS_BUILD) && defined(DEFER_CONFLICTS_CHECK) ) ) && !defined(DISABLE_CONFLICTS) 
167 .if defined(DEFER_CONFLICTS_CHECK)
168         @conflicts_with=$$( \
169         { ${PKG_QUERY} -g "%n-%v %p %o" ${CONFLICTS:C/.+/'&'/} ${CONFLICTS_BUILD:C/.+/'&'/} ${CONFLICTS_INSTALL:C/.+/'&'/} 2>/dev/null || : ; } \
170                 | while read pkgname prfx orgn; do \
171                 if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then \
172                         ${ECHO_CMD} -n " $${pkgname}"; \
173                 fi; \
174         done); \
175         if [ -n "$${conflicts_with}" ]; then \
176                 ${ECHO_MSG}; \
177                 ${ECHO_MSG} "===>  ${PKGNAME} conflicts with installed package(s): "; \
178                 for entry in $${conflicts_with}; do \
179                         ${ECHO_MSG} "      $${entry}"; \
180                 done; \
181                 ${ECHO_MSG}; \
182                 ${ECHO_MSG} "      Please remove them first with pkg_delete(1)."; \
183                 exit 1; \
184         fi
185 .else
186         @conflicts_with=$$( \
187         { ${PKG_QUERY} -g "%n-%v %p %o" ${CONFLICTS:C/.+/'&'/} ${CONFLICTS_INSTALL:C/.+/'&'/} 2>/dev/null || : ; } \
188                 | while read pkgname prfx orgn; do \
189                 if [ "/${PREFIX}" = "/$${prfx}" -a "/${PKGORIGIN}" != "/$${orgn}" ]; then \
190                         ${ECHO_CMD} -n " $${pkgname}"; \
191                 fi; \
192         done); \
193         if [ -n "$${conflicts_with}" ]; then \
194                 ${ECHO_MSG}; \
195                 ${ECHO_MSG} "===>  ${PKGNAME} conflicts with installed package(s): "; \
196                 for entry in $${conflicts_with}; do \
197                         ${ECHO_MSG} "      $${entry}"; \
198                 done; \
199                 ${ECHO_MSG}; \
200                 ${ECHO_MSG} "      They install files into the same place."; \
201                 ${ECHO_MSG} "      Please remove them first with pkg_delete(1)."; \
202                 exit 1; \
203         fi
204 .endif # defined(DEFER_CONFLICTS_CHECK)
205 .endif
206 .endif
207
208 .if !target(do-package)
209 do-package: ${TMPPLIST}
210         @if [ -d ${PACKAGES} ]; then \
211                 if [ ! -d ${PKGREPOSITORY} ]; then \
212                         if ! ${MKDIR} ${PKGREPOSITORY}; then \
213                                 ${ECHO_MSG} "=> Can't create directory ${PKGREPOSITORY}."; \
214                                 exit 1; \
215                         fi; \
216                 fi; \
217         fi;
218         @for cat in ${CATEGORIES}; do \
219                 ${RM} -f ${PACKAGES}/$$cat/${PKGNAMEPREFIX}${PORTNAME}*${PKG_SUFX} ; \
220         done
221         @if ${PKG_CREATE} -o ${PKGREPOSITORY} ${PKGNAME}; then \
222                 if [ "${PKGORIGIN}" = "ports-mgmt/pkg" -o "${PKGORIGIN}" = "ports-mgmt/pkg-devel" ]; then \
223                         if [ ! -d ${PKGLATESTREPOSITORY} ]; then \
224                                 if ! ${MKDIR} ${PKGLATESTREPOSITORY}; then \
225                                         ${ECHO_MSG} "=> Can't create directory ${PKGLATESTREPOSITORY}."; \
226                                         exit 1; \
227                                 fi; \
228                         fi ; \
229                         ${LN} -sf ../${PKGREPOSITORYSUBDIR}/${PKGNAME}${PKG_SUFX} ${PKGLATESTFILE} ; \
230                 fi; \
231         else \
232                 cd ${.CURDIR} && eval ${MAKE} delete-package; \
233                 exit 1; \
234         fi
235 .endif
236
237 .if !target(check-already-installed)
238 check-already-installed:
239 .if !defined(NO_PKG_REGISTER) && !defined(FORCE_PKG_REGISTER)
240                 @${ECHO_MSG} "===>  Checking if ${PKGORIGIN} already installed"; \
241                 pkgname=`${PKG_INFO} -q -O ${PKGORIGIN}`; \
242                 if [ -n "$${pkgname}" ]; then \
243                         v=`${PKG_VERSION} -t $${pkgname} ${PKGNAME}`; \
244                         if [ "w$${v}" = "x<" ]; then \
245                                 ${ECHO_CMD} "===>   An older version of ${PKGORIGIN} is already installed ($${found_package})"; \
246                         else \
247                                 ${ECHO_CMD} "===>   ${PKGNAME} is already installed"; \
248                         fi; \
249                         ${ECHO_MSG} "      You may wish to \`\`make deinstall'' and install this port again"; \
250                         ${ECHO_MSG} "      by \`\`make reinstall'' to upgrade it properly."; \
251                         ${ECHO_MSG} "      If you really wish to overwrite the old port of ${PKGORIGIN}"; \
252                         ${ECHO_MSG} "      without deleting it first, set the variable \"FORCE_PKG_REGISTER\""; \
253                         ${ECHO_MSG} "      in your environment or the \"make install\" command line."; \
254                         exit 1; \
255                 fi
256 .else
257         @${DO_NADA}
258 .endif
259 .endif
260
261
262 .if !target(deinstall)
263 deinstall:
264 .if defined(UID) && ${UID} != 0 && !defined(INSTALL_AS_USER)
265         @${ECHO_MSG} "===>  Switching to root credentials for '${.TARGET}' target"
266         @cd ${.CURDIR} && \
267                 ${SU_CMD} "${MAKE} ${.TARGET}"
268         @${ECHO_MSG} "===>  Returning to user credentials"
269 .else
270         @${ECHO_MSG} "===>  Deinstalling for ${PKGORIGIN}"
271         @if ${PKG_INFO} -e ${PKGORIGIN}; then \
272                 p=`${PKG_INFO} -q ${PKGORIGIN}`; \
273                 ${ECHO_MSG} "===>   Deinstalling $${p}"; \
274                 ${PKG_DELETE} -f ${PKGORIGIN} ; \
275         else \
276                 ${ECHO_MSG} "===>   ${PKGBASE} not installed, skipping"; \
277         fi
278         @${RM} -f ${INSTALL_COOKIE} ${PACKAGE_COOKIE}
279 .endif
280 .endif
281
282 .endif # defined(_POSTMKINCLUDED)