aboutsummaryrefslogtreecommitdiff
path: root/Mk/Uses/gem.mk
diff options
context:
space:
mode:
Diffstat (limited to 'Mk/Uses/gem.mk')
-rw-r--r--Mk/Uses/gem.mk96
1 files changed, 57 insertions, 39 deletions
diff --git a/Mk/Uses/gem.mk b/Mk/Uses/gem.mk
index b92a2dc21b96..e085c45fcab0 100644
--- a/Mk/Uses/gem.mk
+++ b/Mk/Uses/gem.mk
@@ -4,36 +4,40 @@
# Usage: USES=gem[:noautoplist]
# Valid args: noautoplist Don't generate the plist automatically
#
-# MAINTAINER: portmgr@FreeBSD.org
+# MAINTAINER: ruby@FreeBSD.org
.if !defined(_INCLUDE_USES_GEM_MK)
_INCLUDE_USES_GEM_MK= yes
-_valid_ARGS= noautoplist
+_valid_ARGS= noautoplist
# Sanity check
-.for arg in ${gem_ARGS}
+. for arg in ${gem_ARGS}
. if empty(_valid_ARGS:M${arg})
IGNORE= Incorrect 'USES+= gem:${gem_ARGS}' usage: argument [${arg}] is not recognized
. endif
-.endfor
+. endfor
-BUILD_DEPENDS+= ${RUBYGEMBIN}:devel/ruby-gems
-RUN_DEPENDS+= ${RUBYGEMBIN}:devel/ruby-gems
+# "USES=gem" implies "USES=ruby"
+.include "${USESDIR}/ruby.mk"
PKGNAMEPREFIX?= rubygem-
EXTRACT_SUFX= .gem
-EXTRACT_ONLY=
-DIST_SUBDIR= rubygem
+# disabled to be able that extract other archives into the gem folder like cargo archives which are required to compile gems that require rust
+#EXTRACT_ONLY?=
+BUILD_DEPENDS+= ${RUBYGEMBIN}:devel/ruby-gems
EXTRACT_DEPENDS+= ${RUBYGEMBIN}:devel/ruby-gems
+RUN_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
+DOC_DIR= ${GEMS_BASE_DIR}/doc
EXT_DIR= ${GEMS_BASE_DIR}/extensions
+GEMS_DIR= ${GEMS_BASE_DIR}/gems
+PLUGINS_DIR= ${GEMS_BASE_DIR}/plugins
+SPEC_DIR= ${GEMS_BASE_DIR}/specifications
GEM_NAME?= ${DISTNAME}
GEM_LIB_DIR?= ${GEMS_DIR}/${GEM_NAME}
GEM_DOC_DIR?= ${DOC_DIR}/${GEM_NAME}
@@ -47,13 +51,13 @@ GEM_ENV+= LANG=${USE_LOCALE} LC_ALL=${USE_LOCALE}
PLIST_SUB+= PORTVERSION="${PORTVERSION}" \
REV="${RUBY_GEM}" \
- GEMS_BASE_DIR="lib/ruby/gems/${RUBY_VER}" \
+ GEMS_BASE_DIR="${GEMS_BASE_DIR}" \
GEMS_DIR="${GEMS_DIR}" \
DOC_DIR="${DOC_DIR}" \
CACHE_DIR="${CACHE_DIR}" \
SPEC_DIR="${SPEC_DIR}" \
EXT_DIR="${EXT_DIR}" \
- PORT="${PORTNAME}-${PORTVERSION}" \
+ PLUGINS_DIR="${PLUGINS_DIR}" \
GEM_NAME="${GEM_NAME}" \
GEM_LIB_DIR="${GEM_LIB_DIR}" \
GEM_DOC_DIR="${GEM_DOC_DIR}" \
@@ -61,48 +65,57 @@ PLIST_SUB+= PORTVERSION="${PORTVERSION}" \
GEM_CACHE="${GEM_CACHE}" \
EXTRACT_SUFX="${EXTRACT_SUFX}"
-RUBYGEMBIN= ${LOCALBASE}/bin/gem${RUBY_VER:S/.//}
+RUBYGEMBIN= ${LOCALBASE}/bin/gem
-. if defined(DISTFILES)
-GEMFILES= ${DISTFILES:C/:[^:]+$//}
-. else
-GEMFILES= ${DISTNAME}${EXTRACT_SUFX}
-. endif
+. if defined(GEMS_SKIP_SUBDIR)
+# do not define a DIST_SUBDIR, currently required to have cargo archives available in the gem source directory to be able to compile it
+#DIST_SUBDIR=
+. else
+DIST_SUBDIR= rubygem
+. endif
+
+. if defined(DISTFILES)
+# this should maybe be reworked, as if a gem port is used together with cargo archives, the DISTFILES also includes the cargo archives
+# this is currently overwritten in the port that requires this
+# the cargo archives should be filtered out here or better we should only have here gem archives included
+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}
+. if ${PORT_OPTIONS:MDOCS}
RUBYGEM_ARGS+= --document rdoc,ri
-.else
+. else
RUBYGEM_ARGS+= --no-document
-.endif
+. 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 \
+_USES_extract+= 590:gem-extract
+gem-extract:
+ @${SETENVI} ${WRK_ENV} ${GEM_ENV} ${RUBYGEMBIN} unpack --target=${WRKDIR} ${DISTDIR}/${DIST_SUBDIR}/${GEMFILES}
+ @(cd ${BUILD_WRKSRC}; if ! ${SETENVI} ${WRK_ENV} ${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_80} ; \
fi; \
${FALSE}; \
fi)
-.endif
-.if !target(do-build)
+. if !target(do-build)
do-build:
- @(cd ${BUILD_WRKSRC}; if ! ${SETENV} ${GEM_ENV} ${RUBYGEMBIN} build --force ${GEMSPEC} ; then \
+ @(cd ${BUILD_WRKSRC}; if ! ${SETENVI} ${WRK_ENV} ${GEM_ENV} ${RUBYGEMBIN} build --force ${GEMSPEC} ; then \
if [ -n "${BUILD_FAIL_MESSAGE}" ] ; then \
${ECHO_MSG} "===> Compilation failed unexpectedly."; \
(${ECHO_CMD} "${BUILD_FAIL_MESSAGE}") | ${FMT_80} ; \
fi; \
${FALSE}; \
fi)
-.endif
+. endif
-.if !target(do-install)
+. if !target(do-install)
do-install:
- (cd ${BUILD_WRKSRC}; ${SETENV} ${GEM_ENV} ${RUBYGEMBIN} install ${RUBYGEM_ARGS} ${GEMFILES} -- ${CONFIGURE_ARGS})
+ (cd ${BUILD_WRKSRC}; ${SETENVI} ${WRK_ENV} ${GEM_ENV} ${RUBYGEMBIN} install ${RUBYGEM_ARGS} ${GEMFILES} -- ${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
@@ -110,25 +123,30 @@ do-install:
${FIND} ${STAGEDIR}${PREFIX}/${GEM_LIB_DIR}/ext -type d -empty -delete 2> /dev/null || ${TRUE}
${RM} -r ${STAGEDIR}${PREFIX}/${CACHE_DIR} 2> /dev/null || ${TRUE}
${RMDIR} ${STAGEDIR}${PREFIX}/${EXT_DIR} 2> /dev/null || ${TRUE}
-.if !${PORT_OPTIONS:MDOCS}
+ ${RMDIR} ${STAGEDIR}${PREFIX}/${PLUGINS_DIR} 2> /dev/null || ${TRUE}
+. if !${PORT_OPTIONS:MDOCS}
-@${RMDIR} ${STAGEDIR}${PREFIX}/${DOC_DIR}
-.endif
-.endif
+. endif
+. endif
-.if empty(gem_ARGS:Mnoautoplist)
+. if empty(gem_ARGS:Mnoautoplist)
_USES_install+= 820:gem-autoplist
gem-autoplist:
@${ECHO_CMD} ${GEM_SPEC} >> ${TMPPLIST}
-.if ${PORT_OPTIONS:MDOCS}
+. if ${PORT_OPTIONS:MDOCS}
@${FIND} -ds ${STAGEDIR}${PREFIX}/${DOC_DIR} -type f -print | ${SED} -E -e \
's,^${STAGEDIR}${PREFIX}/?,,' >> ${TMPPLIST}
-.endif
+. 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
+ @if [ -d ${STAGEDIR}${PREFIX}/${PLUGINS_DIR} ]; then \
+ ${FIND} -ds ${STAGEDIR}${PREFIX}/${PLUGINS_DIR} -type f -print | ${SED} -E -e \
+ 's,^${STAGEDIR}${PREFIX}/?,,' >> ${TMPPLIST} ; \
+ fi
+. endif
.endif