pkgsrc/mk/plist/print-plist.mk
rillig 3ea36ec82f mk/plist: make print-PLIST discoverable by "make help"
Because print-PLIST uses mixed case (unlike most of the other make
targets), it is not found by the keyword search of "make help".
2018-03-11 14:53:10 +00:00

146 lines
4.8 KiB
Makefile

# $NetBSD: print-plist.mk,v 1.34 2018/03/11 14:53:10 rillig Exp $
#
# Automatic PLIST generation
# - files & symlinks first
# - empty directories are handled properly
# - dirs from mtree files are excluded
# - substitute for platform or package specifics substrings
#
# Usage:
# - make install
# - make print-PLIST | brain >PLIST
#
# Keywords: plist print-plist
_PRINT_PLIST_AWK_SUBST={
_PRINT_PLIST_AWK_SUBST+= \
gsub(/${PKGNAME_NOREV}/, "$${PKGNAME}"); \
gsub(/${PKGVERSION:S/./\./g:C/nb[0-9]*$$//}/, "$${PKGVERSION}");\
gsub(/^${PKGLOCALEDIR}\/locale/, "share/locale"); \
gsub("^${PKGGNUDIR:S/\/$$//}/", "gnu/"); \
gsub("^${PKGINFODIR}/", "info/"); \
gsub("^${PKGMANDIR}/", "man/");
_PRINT_PLIST_AWK_SUBST+=}
_PRINT_PLIST_AWK_IGNORE= ($$0 ~ /^${PKG_DBDIR:S|^${PREFIX}/||:S|/|\\/|g}\//)
_PRINT_PLIST_AWK_IGNORE+= || ($$0 ~ /emul\/linux\/proc/)
.if defined(INFO_FILES)
_PRINT_PLIST_AWK_IGNORE+= || ($$0 ~ /^${PKGINFODIR:S|/|\\/|g}\/dir$$/)
_PRINT_PLIST_AWK_IGNORE+= || ($$0 ~ /^${PKGINFODIR:S|/|\\/|g}\/[^\/]+(-[0-9]+)(\.gz)?$$/)
_PRINT_PLIST_AWK_IGNORE+= || ($$0 ~ /^([^\/]*\/)*(info\/[^\/]+|[^\/]+\.info)(-[0-9]+)(\.gz)?$$/)
.endif
.if (defined(FONTS_DIRS.x11) && !empty(FONTS_DIRS.x11:M*))
_PRINT_PLIST_AWK_IGNORE+= || ($$0 ~ /^.*\/encodings\.dir/)
_PRINT_PLIST_AWK_IGNORE+= || ($$0 ~ /^.*\/fonts\.dir/)
.endif
.if (defined(FONTS_DIRS.ttf) && !empty(FONTS_DIRS.ttf:M*)) || \
(defined(FONTS_DIRS.type1) && !empty(FONTS_DIRS.type1:M*))
_PRINT_PLIST_AWK_IGNORE+= || ($$0 ~ /^.*\/fonts\.scale/)
.endif
.if (defined(FONTS_DIRS.ttf) && !empty(FONTS_DIRS.ttf:M*)) || \
(defined(FONTS_DIRS.type1) && !empty(FONTS_DIRS.type1:M*)) || \
(defined(FONTS_DIRS.x11) && !empty(FONTS_DIRS.x11:M*))
_PRINT_PLIST_AWK_IGNORE+= || ($$0 ~ /^.*\/fonts\.cache-1/)
.endif
.if defined(ICON_THEMES)
_PRINT_PLIST_AWK_IGNORE+= || ($$0 ~ /^share\/icons\/*\/icon-theme\.cache$$/)
.endif
# List the content of $PREFIX and emit "@pkgdir " statements for
# empty directories.
_PRINT_PLIST_FILES_CMD= \
${FIND} ${DESTDIR}${PREFIX}/. \! -type d -print
_PRINT_PLIST_DIRS_CMD= \
${FIND} ${DESTDIR}${PREFIX}/. -type d -print
.if !empty(LIBTOOLIZE_PLIST:M[yY][eE][sS])
_PRINT_PLIST_LIBTOOLIZE_FILTER?= \
( \
if ${TEST} -d ${WRKDIR}; then \
tmpdir="${WRKDIR}"; \
else \
tmpdir="$${TMPDIR-/tmp}"; \
fi; \
fileslist="$$tmpdir/print.plist.files.$$$$"; \
libslist="$$tmpdir/print.plist.libs.$$$$"; \
while read file; do \
case $$file in \
*.la) \
${_LIBTOOL_EXPAND} $$file >> $$libslist; \
;; \
esac; \
${ECHO} "$$file"; \
done > $$fileslist; \
if ${TEST} -f "$$libslist"; then \
${GREP} -hvxF "`${SORT} -u $$libslist`" "$$fileslist"; \
else \
${CAT} "$$fileslist"; \
fi; \
${RM} -f "$$fileslist" "$$libslist"; \
)
.else
_PRINT_PLIST_LIBTOOLIZE_FILTER?= ${CAT}
.endif
.PHONY: print-PLIST
.if !target(print-PLIST)
print-PLIST:
${RUN} ${ECHO} '@comment $$'NetBSD'$$'
${RUN} ${ALL_ENV}; \
shlib_type=${SHLIB_TYPE:Q}; \
case $$shlib_type in \
"a.out") genlinks=1 ;; \
*) genlinks=0 ;; \
esac; \
${_PRINT_PLIST_FILES_CMD} \
| ${_PRINT_PLIST_LIBTOOLIZE_FILTER} \
| ${SORT} \
| ${AWK} ' \
{ sub("${DESTDIR:S|+|\\\\+|g}${PREFIX}/\\./", ""); } \
${_PRINT_PLIST_AWK_IGNORE} { next; } \
${PRINT_PLIST_AWK} \
${_PRINT_PLIST_AWK_SUBST} \
/^@/ { print $$0; next } \
/.*\/lib[^\/]+\.so\.[0-9]+\.[0-9]+\.[0-9]+$$/ { \
print $$0; \
sub("\\.[0-9]+$$", ""); \
if ('$$genlinks') print $$0; \
sub("\\.[0-9]+$$", ""); \
if ('$$genlinks') print $$0; \
sub("\\.[0-9]+$$", ""); \
if ('$$genlinks') print $$0; \
next; \
} \
/.*\/lib[^\/]+\.so\.[0-9]+\.[0-9]+$$/ { \
print $$0; \
sub("\\.[0-9]+$$", ""); \
if ('$$genlinks') print $$0; \
sub("\\.[0-9]+$$", ""); \
if ('$$genlinks') print $$0; \
next; \
} \
/^man\// { sub("\\.gz$$", ""); } \
{ print $$0; }'
${RUN}\
for i in `${_PRINT_PLIST_DIRS_CMD} \
| ${SORT} -r \
| ${AWK} ' \
/emul\/linux\/proc/ { next; } \
/${DESTDIR:S|/|\\/|g:S/+/\\\\+/g}${PREFIX:S|/|\\/|g}\/\.$$/ { next; } \
/${PKG_DBDIR:S|/|\\/|g}\// { next; } \
{ sub("${DESTDIR:S/+/\\\\\\+/g}${PREFIX}/\\\\./", ""); } \
{ sub("^${PKGINFODIR}/", "info/"); } \
{ sub("^${PKGMANDIR}/", "man/"); } \
/^${PKG_DBDIR:S|^${PREFIX}/||:S|/|\\/|g}(\/|$$)/ { next; } \
/^${PKGINFODIR:S|/|\\/|g}$$/ { next; } \
{ print $$0; }'` ; \
do \
if [ `${LS} -la ${DESTDIR}${PREFIX}/$$i | ${WC} -l` = 3 ]; then \
${ECHO} @pkgdir $$i | ${AWK} ' \
${PRINT_PLIST_AWK} \
{ print $$0; }' ; \
fi ; \
done \
| ${AWK} '${_PRINT_PLIST_AWK_SUBST} { print $$0; }'
.endif # target(print-PLIST)