aboutsummaryrefslogtreecommitdiff
path: root/Mk/Uses/gem.mk
diff options
context:
space:
mode:
authorSteve Wills <swills@FreeBSD.org>2016-04-27 16:36:41 +0000
committerSteve Wills <swills@FreeBSD.org>2016-04-27 16:36:41 +0000
commitb3e8fe8d85d1f32b6b8813589ed8637a8accb185 (patch)
tree146c1b1aad08357a95df3348dea477d956cd3816 /Mk/Uses/gem.mk
parentfa3799f9e7a9b9095ece07d487dbe794356ec5ba (diff)
downloadports-b3e8fe8d85d1f32b6b8813589ed8637a8accb185.tar.gz
ports-b3e8fe8d85d1f32b6b8813589ed8637a8accb185.zip
Notes
Diffstat (limited to 'Mk/Uses/gem.mk')
-rw-r--r--Mk/Uses/gem.mk144
1 files changed, 144 insertions, 0 deletions
diff --git a/Mk/Uses/gem.mk b/Mk/Uses/gem.mk
new file mode 100644
index 000000000000..4953b9df6dc3
--- /dev/null
+++ b/Mk/Uses/gem.mk
@@ -0,0 +1,144 @@
+# $FreeBSD$
+#
+# Support rubygem packages
+#
+# Feature: gem
+# Usage: USES=gem[:autoplist]
+# Valid args: autoplist Automatically generate packing list
+#
+# MAINTAINER: portmgr@FreeBSD.org
+
+.if !defined(_INCLUDE_USES_GEM_MK)
+
+_INCLUDE_USES_GEM_MK= yes
+
+BUILD_DEPENDS+= ${RUBYGEMBIN}:devel/ruby-gems
+RUN_DEPENDS+= ${RUBYGEMBIN}:devel/ruby-gems
+
+PKGNAMEPREFIX?= rubygem-
+EXTRACT_SUFX= .gem
+EXTRACT_ONLY=
+DIST_SUBDIR= rubygem
+
+EXTRACT_DEPENDS+= ${RUBYGEMBIN}:devel/ruby-gems
+GEMS_BASE_DIR= lib/ruby/gems/${RUBY_VER}
+GEMS_DIR= ${GEMS_BASE_DIR}/gems
+DOC_DIR= ${GEMS_BASE_DIR}/doc
+CACHE_DIR= ${GEMS_BASE_DIR}/cache
+SPEC_DIR= ${GEMS_BASE_DIR}/specifications
+EXT_DIR= ${GEMS_BASE_DIR}/extensions
+GEM_NAME?= ${PORTNAME}-${PORTVERSION}
+GEM_LIB_DIR?= ${GEMS_DIR}/${GEM_NAME}
+GEM_DOC_DIR?= ${DOC_DIR}/${GEM_NAME}
+GEM_SPEC?= ${SPEC_DIR}/${GEM_NAME}.gemspec
+GEM_CACHE?= ${CACHE_DIR}/${GEM_NAME}.gem
+GEMSPEC= ${PORTNAME}.gemspec
+GEM_ENV+= RB_USER_INSTALL=yes
+
+.if defined(LANG) && !empty(LANG)
+GEM_ENV+= LANG=${LANG}
+.else
+GEM_ENV+= LANG=en_US.UTF-8
+.endif
+
+.if defined(LC_ALL) && !empty(LC_ALL)
+GEM_ENV+= LC_ALL=${LC_ALL}
+.else
+GEM_ENV+= LC_ALL=en_US.UTF-8
+.endif
+
+.if defined(LC_CTYPE) && !empty(LC_CTYPE)
+GEM_ENV+= LC_CTYPE=${LC_CTYPE}
+.else
+GEM_ENV+= LC_CTYPE=UTF-8
+.endif
+
+PLIST_SUB+= PORTVERSION="${PORTVERSION}" \
+ REV="${RUBY_GEM}" \
+ GEMS_BASE_DIR="lib/ruby/gems/${RUBY_VER}" \
+ GEMS_DIR="${GEMS_DIR}" \
+ DOC_DIR="${DOC_DIR}" \
+ CACHE_DIR="${CACHE_DIR}" \
+ SPEC_DIR="${SPEC_DIR}" \
+ EXT_DIR="${EXT_DIR}" \
+ PORT="${PORTNAME}-${PORTVERSION}" \
+ GEM_NAME="${GEM_NAME}" \
+ GEM_LIB_DIR="${GEM_LIB_DIR}" \
+ GEM_DOC_DIR="${GEM_DOC_DIR}" \
+ GEM_SPEC="${GEM_SPEC}" \
+ GEM_CACHE="${GEM_CACHE}" \
+ EXTRACT_SUFX="${EXTRACT_SUFX}"
+
+RUBYGEMBIN= ${LOCALBASE}/bin/gem${RUBY_VER:S/.//}
+
+. if defined(DISTFILES)
+GEMFILES= ${DISTFILES:C/:[^:]+$//}
+. else
+GEMFILES= ${DISTNAME}${EXTRACT_SUFX}
+. endif
+
+RUBYGEM_ARGS=-l --no-update-sources --install-dir ${STAGEDIR}${PREFIX}/lib/ruby/gems/${RUBY_VER} --ignore-dependencies --bindir=${STAGEDIR}${PREFIX}/bin
+
+.if ${PORT_OPTIONS:MDOCS}
+RUBYGEM_ARGS+= --rdoc --ri
+.else
+RUBYGEM_ARGS+= --no-rdoc --no-ri
+.endif
+
+.if !target(do-extract)
+do-extract:
+ @${SETENV} ${GEM_ENV} ${RUBYGEMBIN} unpack --target=${WRKDIR} ${DISTDIR}/${DIST_SUBDIR}/${GEMFILES}
+ @(cd ${BUILD_WRKSRC}; if ! ${SETENV} ${GEM_ENV} ${RUBYGEMBIN} spec --ruby ${DISTDIR}/${DIST_SUBDIR}/${GEMFILES} > ${GEMSPEC} ; then \
+ if [ -n "${BUILD_FAIL_MESSAGE}" ] ; then \
+ ${ECHO_MSG} "===> Extraction failed unexpectedly."; \
+ (${ECHO_CMD} "${BUILD_FAIL_MESSAGE}") | ${FMT} 75 79 ; \
+ fi; \
+ ${FALSE}; \
+ fi)
+.endif
+
+.if !target(do-build)
+do-build:
+ @(cd ${BUILD_WRKSRC}; if ! ${SETENV} ${GEM_ENV} ${RUBYGEMBIN} build --force ${GEMSPEC} ; then \
+ if [ -n "${BUILD_FAIL_MESSAGE}" ] ; then \
+ ${ECHO_MSG} "===> Compilation failed unexpectedly."; \
+ (${ECHO_CMD} "${BUILD_FAIL_MESSAGE}") | ${FMT} 75 79 ; \
+ fi; \
+ ${FALSE}; \
+ fi)
+.endif
+
+.if !target(do-install)
+do-install:
+ (cd ${BUILD_WRKSRC}; ${SETENV} ${GEM_ENV} ${RUBYGEMBIN} install ${RUBYGEM_ARGS} ${GEMFILES} -- --build-args ${CONFIGURE_ARGS})
+ ${RM} -r ${STAGEDIR}${PREFIX}/${GEMS_BASE_DIR}/build_info/
+ ${FIND} ${STAGEDIR}${PREFIX}/${GEMS_BASE_DIR} -type f -name '*.so' -exec ${STRIP_CMD} {} +
+ ${FIND} ${STAGEDIR}${PREFIX}/${GEMS_BASE_DIR} -type f \( -name mkmf.log -or -name gem_make.out \) -delete
+ ${RM} -rf ${STAGEDIR}${PREFIX}/${GEM_LIB_DIR}/ext \
+ ${STAGEDIR}${PREFIX}/${CACHE_DIR} 2> /dev/null || ${TRUE}
+ ${RMDIR} ${STAGEDIR}${PREFIX}/${EXT_DIR} 2> /dev/null || ${TRUE}
+.if defined(NOPORTDOCS)
+ -@${RMDIR} ${STAGEDIR}${PREFIX}/${DOC_DIR}
+.endif
+.endif
+
+.if ${gem_ARGS} == "autoplist"
+.if !target(post-install-script)
+post-install-script:
+ @${ECHO} ${GEM_SPEC} >> ${TMPPLIST}
+.if !defined(NOPORTDOCS)
+ @${FIND} -ds ${STAGEDIR}${PREFIX}/${DOC_DIR} -type f -print | ${SED} -E -e \
+ 's,^${STAGEDIR}${PREFIX}/?,,' >> ${TMPPLIST}
+.endif
+ @${FIND} -ds ${STAGEDIR}${PREFIX}/${GEM_LIB_DIR} -type f -print | ${SED} -E -e \
+ 's,^${STAGEDIR}${PREFIX}/?,,' >> ${TMPPLIST}
+ @if [ -d ${STAGEDIR}${PREFIX}/${EXT_DIR} ]; then \
+ ${FIND} -ds ${STAGEDIR}${PREFIX}/${EXT_DIR} -type f -print | ${SED} -E -e \
+ 's,^${STAGEDIR}${PREFIX}/?,,' >> ${TMPPLIST} ; \
+ fi
+.endif
+.else
+IGNORE= Incorrect 'USES+=gem:${gem_ARGS}' expecting 'USES+=gem[:autoplist]'
+.endif
+
+.endif