3 # Common code for pear- ports.
5 MASTER_SITES?= http://pear.php.net/get/ \
6 http://us.pear.php.net/get/ \
7 http://de.pear.php.net/get/
8 .if defined(PEAR_DIST_SUFX)
9 EXTRACT_SUFX= ${PEAR_DIST_SUFX}
15 RUN_DEPENDS+= pear:${PORTSDIR}/devel/pear
17 .if defined(PEAR_CATSRC)
18 PEARWRKSRC?= ${WRKSRC}/${CATEGORY}
20 PEARWRKSRC?= ${WRKSRC}
23 .if !defined(USE_PHPIZE)
27 .if defined(PEAR_CHANNEL) && ${PEAR_CHANNEL} != ""
28 PKGNAMEPREFIX?= pear-${PEAR_CHANNEL}-
29 PEARPKGREF= ${PEAR_CHANNEL}/${PORTNAME}
32 PEARPKGREF= ${PORTNAME}
35 .if exists(${LOCALBASE}/bin/php-config)
36 PHP_BASE!= ${LOCALBASE}/bin/php-config --prefix
38 PHP_BASE= ${LOCALBASE}
40 PEAR= ${LOCALBASE}/bin/pear
42 LPKGREGDIR= ${LPEARDIR}/packages/${PKGNAME}
43 LDATADIR= ${LPEARDIR}/data/${PORTNAME}
44 LDOCSDIR= share/doc/pear/${PORTNAME}
45 LEXAMPLESDIR= share/examples/pear/${PORTNAME}
46 LSQLSDIR= ${LPEARDIR}/sql/${PORTNAME}
48 LTESTSDIR= ${LPEARDIR}/tests/${PORTNAME}
49 PEARDIR= ${PHP_BASE}/${LPEARDIR}
50 PKGREGDIR= ${PHP_BASE}/${LPKGREGDIR}
51 DATADIR= ${PHP_BASE}/${LDATADIR}
52 DOCSDIR= ${PHP_BASE}/${LDOCSDIR}
53 EXAMPLESDIR= ${PHP_BASE}/${LEXAMPLESDIR}
54 SQLSDIR= ${PHP_BASE}/${LSQLSDIR}
55 SCRIPTFILESDIR= ${LOCALBASE}/bin
56 TESTSDIR= ${PHP_BASE}/${LTESTSDIR}
57 .if defined(CATEGORY) && !empty(CATEGORY)
58 LINSTDIR= ${LPEARDIR}/${CATEGORY}
62 INSTDIR= ${PHP_BASE}/${LINSTDIR}
64 SUB_LIST+= PKG_NAME=${PEARPKGREF}
66 .if !defined(USE_PHPIZE) && !exists(${.CURDIR}/pkg-plist)
67 PLIST= ${WRKDIR}/PLIST
69 PLIST_SUB+= PEARDIR=${LPEARDIR} PKGREGDIR=${LPKGREGDIR} \
70 TESTSDIR=${LTESTSDIR} INSTDIR=${LINSTDIR} SQLSDIR=${LSQLSDIR} \
71 SCRIPTFILESDIR=${LCRIPTSDIR}
73 PKGINSTALL?= ${PORTSDIR}/devel/pear/pear-install
74 PKGDEINSTALL?= ${WRKDIR}/pear-deinstall
85 _EXAMPLESDIR?= examples
89 # this is an easy way to eliminate duplicate entries in a variable :)
90 # if someone knows how to achieve the result without this terrible
91 # hack, please tell me!
92 .for v in FILES DOCS TESTS EXAMPLES SQLS SCRIPTFILES DATA
93 X${v}DIRS= ${${v}:M*/*:C;/[^/]+$;;}
94 . for XD in ${X${v}DIRS}
96 . for D in ${${v}DIRS}
102 . if ${ALREADYTHERE} == 0
109 .if exists(${LOCALBASE}/lib/php.DIST_PHP) \
110 || exists(${PHP_BASE}/lib/php.DIST_PHP) \
111 || exists(${LOCALBASE}/.PEAR.pkg) \
112 || exists(${PHP_BASE}/.PEAR.pkg)
114 @${ECHO_MSG} " Sorry, the PEAR structure has been modified;"
115 @${ECHO_MSG} " Please deinstall your installed pear- ports."
120 DIRFILTER= ${SED} -En '\:^.*/[^/]*$$:s:^(.+)/[^/]*$$:\1:p' \
121 | ( while read r; do \
123 while [ $$C = 1 ]; do \
125 if echo $$r | ${GREP} '/' > /dev/null; then \
126 r=`${DIRNAME} $$r`; \
134 .if !defined(USE_PHPIZE)
136 . if !exists(${.CURDIR}/pkg-plist)
137 @${ECHO_MSG} "===> Generating packing list"; \
138 (for file in ${FILES}; do echo "${LINSTDIR}/$${file}"; done; \
139 for file in ${TESTS}; do echo "${LTESTSDIR}/$${file}"; done; \
140 for file in ${DATA}; do echo "${LDATADIR}/$${file}"; done; \
141 for file in ${SQLS}; do echo "${LSQLSDIR}/$${file}"; done; \
142 for file in ${SCRIPTFILES}; do echo "${LSCRIPTSDIR}/$${file}"; done; \
143 for file in ${DOCS}; do echo "%%PORTDOCS%%${LDOCSDIR}/$${file}"; done; \
144 for file in ${EXAMPLES}; do echo "%%PORTDOCS%%${LEXAMPLESDIR}/$${file}"; done; \
145 echo "${LPKGREGDIR}/package.xml"; \
146 for d in ${FILES} ${FILES:H}; do echo $${d}; done | ${DIRFILTER} | \
147 while read dir; do echo "@dirrmtry ${LINSTDIR}/$${dir}"; done; \
148 for d in ${TESTS}; do echo $${d}; done | ${DIRFILTER} | \
149 while read dir; do echo "@dirrm ${LTESTSDIR}/$${dir}"; done; \
150 for d in ${DATA}; do echo $${d}; done | ${DIRFILTER} | \
151 while read dir; do echo "@dirrm ${LDATADIR}/$${dir}"; done; \
152 for d in ${SQLS}; do echo $${d}; done | ${DIRFILTER} | \
153 while read dir; do echo "@dirrm ${LSQLSDIR}/$${dir}"; done; \
154 for d in ${DOCS}; do echo $${d}; done | ${DIRFILTER} | \
155 while read dir; do echo "%%PORTDOCS%%@dirrm ${LDOCSDIR}/$${dir}"; done; \
156 for d in ${EXAMPLES}; do echo $${d}; done | ${DIRFILTER} | \
157 while read dir; do echo "%%PORTDOCS%%@dirrm ${LEXAMPLESDIR}/$${dir}"; done; \
158 if [ -n "${TESTS}" ]; then echo "@dirrm ${LTESTSDIR}"; fi; \
159 if [ -n "${DATA}" ]; then echo "@dirrm ${LDATADIR}"; fi; \
160 if [ -n "${SQLS}" ]; then echo "@dirrm ${LSQLSDIR}"; fi; \
161 if [ -n "${DOCS}" ]; then echo "%%PORTDOCS%%@dirrm ${LDOCSDIR}"; fi; \
162 if [ -n "${EXAMPLES}" ]; then echo "%%PORTDOCS%%@dirrm ${LEXAMPLESDIR}"; fi; \
163 echo "@dirrm ${LPKGREGDIR}"; \
164 if [ -n "${CATEGORY}" ]; then echo "@dirrmtry ${LINSTDIR}"; fi; \
165 if [ -n "${CATEGORY:M*/*}" ]; then echo "@dirrmtry ${LINSTDIR:H}"; fi; \
166 echo "@dirrmtry ${LPKGREGDIR:H}"; \
167 echo "@dirrmtry ${LDOCSDIR:H}"; \
168 echo "@dirrmtry ${LEXAMPLESDIR:H}"; \
169 echo "@dirrmtry ${LTESTSDIR:H}"; \
170 echo "@dirrmtry ${LDATADIR:H}"; \
171 echo "@dirrmtry ${LSQLSDIR:H}") > ${PLIST}
174 . for t in files docs tests sqls scriptfiles examples data
175 . if !target(do-install-${t}-msg)
176 do-install-${t}-msg: .USE
180 do-autogenerate-plist: patch
181 @${ECHO_MSG} "===> Generating packing list with pear"
182 @${LN} -sf ${WRKDIR}/package.xml ${WRKSRC}/package.xml
183 @cd ${WRKSRC} && ${PEAR} install -n -f -P ${WRKDIR}/inst package.xml > /dev/null 2> /dev/null
184 .for R in .channels .depdb .depdblock .filemap .lock .registry
185 @${RM} -rf ${WRKDIR}/inst/${PREFIX}/${LPEARDIR}/${R}
187 @FILES=`cd ${WRKDIR}/inst && ${FIND} . -type f | ${CUT} -c 2- | \
188 ${GREP} -v -E "^${PREFIX}/"` || exit 0; \
189 ${ECHO_CMD} $${FILES}; if ${TEST} -n "$${FILES}"; then \
190 ${ECHO_CMD} "Cannot generate packing list: package files outside PREFIX"; \
192 @${ECHO_CMD} "${LPKGREGDIR}/package.xml" > ${PLIST}
193 # pkg_install needs to escape $ in directory name while pkg does not
194 @cd ${WRKDIR}/inst/${PREFIX} && ${FIND} . -type f | ${SORT} \
195 | ${CUT} -c 3- >> ${PLIST}
196 @cd ${WRKDIR}/inst/${PREFIX} && ${FIND} . -type d | ${SORT} -r | \
199 if [ ! -d "${LOCALBASE}/$${d}" ]; then \
200 ${ECHO_CMD} "@dirrmtry $${d}" >> ${PLIST}; \
203 @${ECHO_CMD} "@dirrm ${LPKGREGDIR}" >> ${PLIST}
204 @${ECHO_CMD} "@dirrmtry ${LPKGREGDIR:H}" >> ${PLIST}
206 . if defined(PEAR_AUTOINSTALL)
207 pre-install: pear-pre-install do-autogenerate-plist do-generate-deinstall-script
208 do-install: do-auto-install pear-post-install
211 pre-install: pear-pre-install do-generate-plist do-generate-deinstall-script
212 do-install: do-install-files do-install-docs do-install-tests do-install-sqls \
213 do-install-scriptfiles do-install-examples do-install-data \
218 @${ECHO_MSG} "===> Installing package with pear"
219 @cd ${WRKSRC} && ${PEAR} install -n -f -P ${STAGEDIR} package.xml
220 # Clean up orphans re-generated by pear-install
221 .for R in .channels .depdb .depdblock .filemap .lock .registry
222 @${RM} -rf ${STAGEDIR}${PREFIX}/${LPEARDIR}/${R}
225 do-install-files: do-install-files-msg
226 @${MKDIR} ${STAGEDIR}${INSTDIR}
227 . for dir in ${FILESDIRS}
228 @${MKDIR} ${STAGEDIR}${INSTDIR}/${dir}
230 . for file in ${FILES}
231 @${INSTALL_DATA} ${PEARWRKSRC}/${file} ${STAGEDIR}${INSTDIR}/${file}
234 do-install-docs: do-install-docs-msg
235 . if !defined(NOPORTDOCS) && !empty(DOCS)
236 @${ECHO_MSG} "===> Installing documentation in ${DOCSDIR}."
237 @${MKDIR} ${STAGEDIR}${DOCSDIR}
238 . for dir in ${DOCSDIRS}
239 @${MKDIR} ${STAGEDIR}${DOCSDIR}/${dir}
241 . for file in ${DOCS}
242 @${INSTALL_DATA} ${WRKSRC}/${_DOCSDIR}/${file} ${STAGEDIR}${DOCSDIR}/${file}
246 do-install-tests: do-install-tests-msg
248 @${ECHO_MSG} "===> Installing tests in ${TESTSDIR}."
249 @${MKDIR} ${STAGEDIR}${TESTSDIR}
250 . for dir in ${TESTSDIRS}
251 @${MKDIR} ${STAGEDIR}${TESTSDIR}/${dir}
253 . for file in ${TESTS}
254 @${INSTALL_DATA} ${WRKSRC}/${_TESTSDIR}/${file} ${STAGEDIR}${TESTSDIR}/${file}
258 do-install-data: do-install-data-msg
260 @${ECHO_MSG} "===> Installing data in ${DATADIR}."
261 @${MKDIR} ${STAGEDIR}${DATADIR}
262 . for dir in ${DATADIRS}
263 @${MKDIR} ${STAGEDIR}${DATADIR}/${dir}
265 . for file in ${DATA}
266 @${INSTALL_DATA} ${WRKSRC}/${_DATADIR}/${file} ${STAGEDIR}${DATADIR}/${file}
270 do-install-sqls: do-install-sqls-msg
272 @${ECHO_MSG} "===> Installing sqls in ${SQLSDIR}."
273 @${MKDIR} ${STAGEDIR}${SQLSDIR}
274 . for dir in ${SQLSDIRS}
275 @${MKDIR} ${STAGEDIR}${SQLSDIR}/${dir}
277 . for file in ${SQLS}
278 @${INSTALL_DATA} ${WRKSRC}/${_SQLSDIR}/${file} ${STAGEDIR}${SQLSDIR}/${file}
282 do-install-scriptfiles: do-install-scriptfiles-msg
283 . if !empty(SCRIPTFILES)
284 @${ECHO_MSG} "===> Installing scripts in ${SCRIPTFILESDIR}."
285 . for file in ${SCRIPTFILES}
286 @${CP} ${WRKSRC}/pear-${file} ${WRKSRC}/${file}
287 @${REINPLACE_CMD} -e "s|@php_bin@|${SCRIPTFILESDIR}/php|g" ${WRKSRC}/${file}
288 @${REINPLACE_CMD} -e "s|@php_dir@|${PREFIX}/lib/php|g" ${WRKSRC}/${file}
289 @${REINPLACE_CMD} -e "s|@include_path@|${PREFIX}/${LPEARDIR}|g" ${WRKSRC}/${file}
290 @${INSTALL_SCRIPT} ${WRKSRC}/${file} ${STAGEDIR}${SCRIPTFILESDIR}/${file}
294 do-install-examples: do-install-examples-msg
295 . if !defined(NOPORTDOCS) && !empty(EXAMPLES)
296 @${ECHO_MSG} "===> Installing examples in ${EXAMPLESDIR}."
297 @${MKDIR} ${STAGEDIR}${EXAMPLESDIR}
298 . for dir in ${EXAMPLESDIRS}
299 @${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/${dir}
301 . for file in ${EXAMPLES}
302 @${INSTALL_DATA} ${WRKSRC}/${_EXAMPLESDIR}/${file} ${STAGEDIR}${EXAMPLESDIR}/${file}
307 do-generate-deinstall-script:
308 @${SED} ${_SUB_LIST_TEMP} -e '/^@comment /d' ${PORTSDIR}/devel/pear/pear-deinstall.in > ${WRKDIR}/pear-deinstall
311 @${MKDIR} ${STAGEDIR}${PKGREGDIR}
312 @${INSTALL_DATA} ${WRKDIR}/package.xml ${STAGEDIR}${PKGREGDIR}
315 @${PEAR} package-dependencies ${WRKDIR}/package.xml