[Midnightbsd-cvs] mports [19690] trunk/Mk/extensions/uniquefiles.mk: add uniquefiles

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sat Aug 8 00:35:51 EDT 2015


Revision: 19690
          http://svnweb.midnightbsd.org/mports/?rev=19690
Author:   laffer1
Date:     2015-08-08 00:35:51 -0400 (Sat, 08 Aug 2015)
Log Message:
-----------
add uniquefiles

Added Paths:
-----------
    trunk/Mk/extensions/uniquefiles.mk

Added: trunk/Mk/extensions/uniquefiles.mk
===================================================================
--- trunk/Mk/extensions/uniquefiles.mk	                        (rev 0)
+++ trunk/Mk/extensions/uniquefiles.mk	2015-08-08 04:35:51 UTC (rev 19690)
@@ -0,0 +1,185 @@
+# $MidnightBSD$
+#
+# 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
+#
+
+.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
+
+.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}"; \
+		${LN} -s ${PREFIX}/$${newf} ${STAGEDIR}${PREFIX}/$${fname}; \
+		${ECHO_CMD} LINKED:$${newf}:$${fname} >> ${_UNIQUEPKGLIST}; \
+	fi
+.else
+# We are not symlinking the renamed binary.
+_DO_CONDITIONAL_SYMLINK=	${DO_NADA}
+.endif
+
+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}; \
+	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}; \
+		else \
+			${ECHO_MSG} "Makefile error: UNIQUE (prefix): $${fname} not found"; \
+			${FALSE}; \
+		fi; \
+	done;
+.endif
+
+.if ${UNIQUE_SUFFIX_FILES} || ${UNIQUE_FIND_SUFFIX_FILES}
+	@${ECHO_MSG} "===> Creating unique files: Move files needing SUFFIX";
+.endif
+.for entry in ${UNIQUE_SUFFIX_FILES}
+	@fname=${entry}; \
+	if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+		newf=$${fname%/*}/$${fname##*/}${UNIQUE_SUFFIX}; \
+		${ECHO_MSG} "Move: $${fname} --> $${newf}"; \
+		${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
+		${ECHO_CMD} MOVED:$${fname}:$${newf} >> ${_UNIQUEPKGLIST}; \
+		${_DO_CONDITIONAL_SYMLINK}; \
+	else \
+		${ECHO_MSG} "Makefile error: UNIQUE (suffix): $${fname} not found"; \
+		${FALSE}; \
+	fi;
+.endfor
+.if ${UNIQUE_FIND_SUFFIX_FILES}
+	@for fname in `${UNIQUE_FIND_SUFFIX_FILES}`; do \
+		if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+			newf=$${fname%/*}/$${fname##*/}${UNIQUE_SUFFIX}; \
+			${ECHO_MSG} "Move: $${fname} --> $${newf}"; \
+			${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
+			${ECHO_CMD} MOVED:$${fname}:$${newf} >> ${_UNIQUEPKGLIST}; \
+			${_DO_CONDITIONAL_SYMLINK}; \
+		else \
+			${ECHO_MSG} "Makefile error: UNIQUE (suffix): $${fname} not found"; \
+			${FALSE}; \
+		fi; \
+	done;
+.endif
+
+# Using .if exists(${_UNIQUEPKGPLIST} below instead of the sh test
+# does not work in poudriere. It works fine on the CLI, though...
+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)


Property changes on: trunk/Mk/extensions/uniquefiles.mk
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property


More information about the Midnightbsd-cvs mailing list