5d33e04596
Where appropriate fiddle with a few other things.
220 lines
8.0 KiB
Makefile
220 lines
8.0 KiB
Makefile
# Make files or directories 'unique', by adding a prefix or suffix.
|
|
#
|
|
# Feature: uniquefiles
|
|
# Usage: USES=uniquefiles or USES=uniquefiles:ARGS
|
|
# Valid ARGS: dirs
|
|
#
|
|
# dirs: The port needs a prefix (and only a prefix) based on
|
|
# UNIQUE_PREFIX for the standard directories
|
|
# DOCSDIR, EXAMPLESDIR, DATADIR, WWWDIR, ETCDIR
|
|
#
|
|
# Variables for ports:
|
|
#
|
|
# UNIQUE_PREFIX - The prefix to be used for directories and files.
|
|
# Default: ${PKGNAMEPREFIX}.
|
|
# UNIQUE_PREFIX_FILES - A list of files that need to be prefixed.
|
|
# Default: empty
|
|
# UNIQUE_SUFFIX - The suffix to be used for files.
|
|
# Default: ${PKGNAMESUFFIX}.
|
|
# UNIQUE_SUFFIX_FILES - A list of files that need to be suffixed.
|
|
# Default: empty
|
|
#
|
|
# Variables for the ports framework, but NOT individual ports:
|
|
#
|
|
# UNIQUE_DEFAULT_LINKS - When set to "yes", symlinks of the original
|
|
# filenames are also created pointing to their
|
|
# UNIQUE_* counterparts.
|
|
# This is useful for supporting multiple logical
|
|
# instances from a single physical port, but where
|
|
# you want to mark only *one* of those instances to
|
|
# provide original filenames.
|
|
#
|
|
# category/py-foo, installed as:
|
|
#
|
|
# py27-foo for Python 2.7 (DEFAULT_VERSION)
|
|
# py33-foo for Python 3.3
|
|
#
|
|
# Results in:
|
|
#
|
|
# py27-foo
|
|
# bin/foo-2.7 (UNIQUE_SUFFIX)
|
|
# bin/foo -> bin/foo-2.7 (symlinked original filename)
|
|
# py33-foo creates:
|
|
# bin/foo-3.3 (UNIQUE_SUFFIX)
|
|
#
|
|
# Default: no
|
|
#
|
|
# UNIQUE_FIND_PREFIX_FILES - A shell command to be executed to find files for
|
|
# the specific port. This has to return a
|
|
# list of files to be iterated over.
|
|
# Default: empty
|
|
#
|
|
# UNIQUE_FIND_SUFFIX_FILES - A shell command to be executed to find files for
|
|
# the specific port. This has to return a
|
|
# list of files to be iterated over.
|
|
# Default: empty
|
|
#
|
|
# UNIQUE_SUFFIX_TYPES - A list of TAGS to defined more complex unique
|
|
# suffix handling. It can, for example, handle
|
|
# man pages by doing:
|
|
#
|
|
# UNIQUE_SUFFIX_TYPES+= SUFFIX_MAN
|
|
# UNIQUE_SUFFIX_MAN_WITH_EXT= .[1-9ln]
|
|
# UNIQUE_SUFFIX_MAN_EXTRA_EXT= .gz
|
|
# UNIQUE_FIND_SUFFIX_MAN_FILES= ${EGREP} -he '^man/man[1-9ln]/.*$$' ${TMPPLIST} 2>/dev/null
|
|
#
|
|
# The make(1) target that renames the files
|
|
# runs before the man pages are compressed,
|
|
# this is what the EXTRA_EXT bit is for.
|
|
#
|
|
# NOTE: multiple logical instances are not supported by pkg and the original
|
|
# pkg_tools at the moment.
|
|
#
|
|
# MAINTAINER: portmgr@FreeBSD.org
|
|
|
|
.if !defined(_INCLUDE_USES_UNIQUEFILES_MK)
|
|
_INCLUDE_USES_UNIQUEFILES_MK= yes
|
|
|
|
UNIQUE_PREFIX?= ${PKGNAMEPREFIX}
|
|
UNIQUE_SUFFIX?= ${PKGNAMESUFFIX}
|
|
UNIQUE_PREFIX_FILES?= # empty
|
|
UNIQUE_SUFFIX_FILES?= # empty
|
|
|
|
UNIQUE_SUFFIX_TYPES+= SUFFIX
|
|
|
|
.if ${uniquefiles_ARGS:Mdirs}
|
|
DOCSDIR= ${PREFIX}/share/doc/${UNIQUE_PREFIX}${PORTNAME}
|
|
EXAMPLESDIR= ${PREFIX}/share/examples/${UNIQUE_PREFIX}${PORTNAME}
|
|
DATADIR= ${PREFIX}/share/${UNIQUE_PREFIX}${PORTNAME}
|
|
WWWDIR= ${PREFIX}/www/${UNIQUE_PREFIX}${PORTNAME}
|
|
ETCDIR= ${PREFIX}/etc/${UNIQUE_PREFIX}${PORTNAME}
|
|
.endif
|
|
|
|
UNIQUE_DEFAULT_LINKS?= no
|
|
UNIQUE_FIND_PREFIX_FILES?= # empty
|
|
UNIQUE_FIND_SUFFIX_FILES?= # empty
|
|
|
|
_USES_POST+= uniquefiles
|
|
.endif # _INCLUDE_USES_UNIQUEFILES_MK
|
|
|
|
.if defined(_POSTMKINCLUDED) && !defined(_INCLUDE_USES_UNIQUEFILES_POST_MK)
|
|
_INCLUDE_USES_UNIQUEFILES_POST_MK= yes
|
|
|
|
_UNIQUEPKGLIST= ${WRKDIR}/.PLIST.uniquefiles
|
|
|
|
.if ${UNIQUE_DEFAULT_LINKS} == yes
|
|
_DO_CONDITIONAL_SYMLINK= \
|
|
if [ ! -e ${STAGEDIR}${PREFIX}/$${fname} -a ! -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
|
|
${ECHO_MSG} "Link: @$${fname} --> $${newf}"; \
|
|
${RLN} ${STAGEDIR}${PREFIX}/$${newf} ${STAGEDIR}${PREFIX}/$${fname}; \
|
|
${ECHO_CMD} LINKED:$${newf}%%EXTRA_EXT%%:$${fname}%%EXTRA_EXT%% >> ${_UNIQUEPKGLIST}; \
|
|
fi
|
|
.else
|
|
# We are not symlinking the renamed binary.
|
|
_DO_CONDITIONAL_SYMLINK= ${DO_NADA}
|
|
.endif
|
|
|
|
_USES_stage+= 775:move-uniquefiles
|
|
move-uniquefiles:
|
|
.if ${UNIQUE_PREFIX_FILES} || ${UNIQUE_FIND_PREFIX_FILES}
|
|
@${ECHO_MSG} "===> Creating unique files: Move files needing PREFIX";
|
|
.endif
|
|
.for entry in ${UNIQUE_PREFIX_FILES}
|
|
@fname=${entry}; \
|
|
if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
|
|
newf=$${fname%/*}/${UNIQUE_PREFIX}$${fname##*/} ; \
|
|
${ECHO_MSG} "Move: $${fname} --> $${newf}" ; \
|
|
${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
|
|
${ECHO_CMD} MOVED:$${fname}:$${newf} >> ${_UNIQUEPKGLIST}; \
|
|
${_DO_CONDITIONAL_SYMLINK:S/%%EXTRA_EXT%%//g}; \
|
|
else \
|
|
${ECHO_MSG} "Makefile error: UNIQUE (prefix): $${fname} not found"; \
|
|
${FALSE}; \
|
|
fi;
|
|
.endfor
|
|
.if ${UNIQUE_FIND_PREFIX_FILES}
|
|
@for fname in `${UNIQUE_FIND_PREFIX_FILES}`; do \
|
|
if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
|
|
newf=$${fname%/*}/${UNIQUE_PREFIX}$${fname##*/} ; \
|
|
${ECHO_MSG} "Move: $${fname} --> $${newf}" ; \
|
|
${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
|
|
${ECHO_CMD} MOVED:$${fname}:$${newf} >> ${_UNIQUEPKGLIST}; \
|
|
${_DO_CONDITIONAL_SYMLINK:S/%%EXTRA_EXT%%//g}; \
|
|
else \
|
|
${ECHO_MSG} "Makefile error: UNIQUE (prefix): $${fname} not found"; \
|
|
${FALSE}; \
|
|
fi; \
|
|
done;
|
|
.endif
|
|
|
|
.for sufxtype in ${UNIQUE_SUFFIX_TYPES}
|
|
. if (defined(UNIQUE_${sufxtype}_FILES) && ${UNIQUE_${sufxtype}_FILES}) || \
|
|
(defined(UNIQUE_FIND_${sufxtype}_FILES) && ${UNIQUE_FIND_${sufxtype}_FILES})
|
|
. if defined(UNIQUE_${sufxtype}_WITH_EXT) && ${UNIQUE_${sufxtype}_WITH_EXT}
|
|
@${ECHO_MSG} "===> Creating unique files: Move ${sufxtype:S|SUFFIX_||} files needing SUFFIX";
|
|
. else
|
|
@${ECHO_MSG} "===> Creating unique files: Move files needing SUFFIX";
|
|
. endif
|
|
. endif
|
|
. for entry in ${UNIQUE_${sufxtype}_FILES}
|
|
@fname=${entry}; \
|
|
if [ -n "${UNIQUE_${sufxtype}_EXTRA_EXT}" ]; then \
|
|
fname=$${fname%${UNIQUE_${sufxtype}_EXTRA_EXT}}; \
|
|
fi; \
|
|
if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
|
|
ofname=$${fname##*/}; \
|
|
newf=$${fname%/*}/$${ofname%${UNIQUE_${sufxtype}_WITH_EXT}}${UNIQUE_SUFFIX}$${ofname#$${ofname%${UNIQUE_${sufxtype}_WITH_EXT}}}; \
|
|
${ECHO_MSG} "Move: $${fname} --> $${newf}"; \
|
|
${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
|
|
${ECHO_CMD} MOVED:$${fname}${UNIQUE_${sufxtype}_EXTRA_EXT}:$${newf}${UNIQUE_${sufxtype}_EXTRA_EXT} >> ${_UNIQUEPKGLIST}; \
|
|
${_DO_CONDITIONAL_SYMLINK:S/%%EXTRA_EXT%%/${UNIQUE_${sufxtype}_EXTRA_EXT}/g}; \
|
|
else \
|
|
${ECHO_MSG} "Makefile error: UNIQUE (suffix): $${fname} not found"; \
|
|
${FALSE}; \
|
|
fi;
|
|
. endfor
|
|
. if defined(UNIQUE_FIND_${sufxtype}_FILES) && ${UNIQUE_FIND_${sufxtype}_FILES}
|
|
@for fname in `${UNIQUE_FIND_${sufxtype}_FILES}`; do \
|
|
if [ -n "${UNIQUE_${sufxtype}_EXTRA_EXT}" ]; then \
|
|
fname=$${fname%${UNIQUE_${sufxtype}_EXTRA_EXT}}; \
|
|
fi; \
|
|
if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
|
|
ofname=$${fname##*/}; \
|
|
newf=$${fname%/*}/$${ofname%${UNIQUE_${sufxtype}_WITH_EXT}}${UNIQUE_SUFFIX}$${ofname#$${ofname%${UNIQUE_${sufxtype}_WITH_EXT}}}; \
|
|
${ECHO_MSG} "Move: $${fname} --> $${newf}"; \
|
|
${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
|
|
${ECHO_CMD} MOVED:$${fname}${UNIQUE_${sufxtype}_EXTRA_EXT}:$${newf}${UNIQUE_${sufxtype}_EXTRA_EXT} >> ${_UNIQUEPKGLIST}; \
|
|
${_DO_CONDITIONAL_SYMLINK:S/%%EXTRA_EXT%%/${UNIQUE_${sufxtype}_EXTRA_EXT}/g}; \
|
|
else \
|
|
${ECHO_MSG} "Makefile error: UNIQUE (suffix): $${fname} not found"; \
|
|
${FALSE}; \
|
|
fi; \
|
|
done;
|
|
. endif
|
|
.endfor
|
|
|
|
# Using .if exists(${_UNIQUEPKGPLIST} below instead of the sh test
|
|
# does not work in poudriere. It works fine on the CLI, though...
|
|
_USES_stage+= 950:move-uniquefiles-plist
|
|
move-uniquefiles-plist:
|
|
@if [ -e ${_UNIQUEPKGLIST} ]; then \
|
|
orgIFS=$$IFS; IFS=":"; while read command entry newentry; do \
|
|
IFS=$$orgIFS; \
|
|
case $${command} in \
|
|
MOVED) \
|
|
${REINPLACE_CMD} -e "s|^$${entry}$$|$${newentry}|" ${TMPPLIST}; \
|
|
;; \
|
|
LINKED) \
|
|
${AWK} '$$0 ~ pe { print; print ne ;next }1' \
|
|
pe="$${entry}" ne="$${newentry}" \
|
|
${TMPPLIST} > ${TMPPLIST}.uniquefilestmp; \
|
|
${MV} ${TMPPLIST}.uniquefilestmp ${TMPPLIST}; \
|
|
;; \
|
|
*) ;; \
|
|
esac; \
|
|
IFS=":"; \
|
|
done < ${_UNIQUEPKGLIST}; \
|
|
fi
|
|
|
|
.endif # defined(_POSTMKINCLUDED)
|