summaryrefslogtreecommitdiff
path: root/mk
diff options
context:
space:
mode:
authorjperkin <jperkin@pkgsrc.org>2015-04-27 19:59:07 +0000
committerjperkin <jperkin@pkgsrc.org>2015-04-27 19:59:07 +0000
commit23e56c0e2820b59c46b2e1e0b28f2a5ed42e959a (patch)
tree0c048ea23e21ffbc04b595ccab1dfa0120d912c5 /mk
parentbc1f6b39fb9a6ce90ad6657a7d5e14b279d08149 (diff)
downloadpkgsrc-23e56c0e2820b59c46b2e1e0b28f2a5ed42e959a.tar.gz
Split cwrappers from legacy wrappers. We no longer generate the legacy
wrappers when USE_CWRAPPERS is enabled, saving a reasonable amount of I/O during builds, mostly due to avoiding the transform/untransform sed file generations. WRAPPER_DIR and WRAPPER_BINDIR are used by various packages to override or point to specific wrappers, and these now point to the cwrappers directory when enabled, removing the need for CWRAPPERS_BIN_DIR duplication and fixing packages which previously were using legacy wrappers by accident. A number of targets are now duplicated between bsd.wrapper.mk and cwrappers.mk, the intention being that the legacy wrappers will be deprecated once cwrappers is verified on all supported platforms. If that turns out to take longer than expected, we will probably want to introduce a wrapper.mk to abstract them away before loading the appropriate back-end.
Diffstat (limited to 'mk')
-rw-r--r--mk/bsd.pkg.mk7
-rw-r--r--mk/cwrappers.mk83
-rw-r--r--mk/wrapper/bsd.wrapper.mk4
3 files changed, 79 insertions, 15 deletions
diff --git a/mk/bsd.pkg.mk b/mk/bsd.pkg.mk
index 00a0a6cf88e..16cd59fe2e2 100644
--- a/mk/bsd.pkg.mk
+++ b/mk/bsd.pkg.mk
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.pkg.mk,v 1.2011 2015/03/07 21:14:32 tnn Exp $
+# $NetBSD: bsd.pkg.mk,v 1.2012 2015/04/27 19:59:07 jperkin Exp $
#
# This file is in the public domain.
#
@@ -406,10 +406,11 @@ fake-home: ${FAKEHOMEDIR}
${FAKEHOMEDIR}:
${RUN} ${MKDIR} ${.TARGET}
-.include "wrapper/bsd.wrapper.mk"
-
+# Use C-based wrappers or legacy shell versions.
.if ${USE_CWRAPPERS:tl} != "no"
.include "cwrappers.mk"
+.else
+.include "wrapper/bsd.wrapper.mk"
.endif
.if defined(ABI_DEPENDS) || defined(BUILD_ABI_DEPENDS)
diff --git a/mk/cwrappers.mk b/mk/cwrappers.mk
index 18779b1f2f4..5a80afe4449 100644
--- a/mk/cwrappers.mk
+++ b/mk/cwrappers.mk
@@ -1,12 +1,17 @@
-# $NetBSD: cwrappers.mk,v 1.22 2015/03/17 18:41:20 jperkin Exp $
+# $NetBSD: cwrappers.mk,v 1.23 2015/04/27 19:59:07 jperkin Exp $
#
# This Makefile fragment implements integration of pkgtools/cwrappers.
+.include "../../mk/buildlink3/bsd.buildlink3.mk"
+
BUILD_DEPENDS+= cwrappers>=20150314:../../pkgtools/cwrappers
+# Public variables used by pkgsrc infrastructure and packages.
+WRAPPER_DIR= ${WRKDIR}/.cwrapper
+WRAPPER_BINDIR= ${WRAPPER_DIR}/bin
+
# XXX This should be PREFIX, but USE_CROSSBASE overrides it.
CWRAPPERS_SRC_DIR= ${LOCALBASE}/libexec/cwrappers
-CWRAPPERS_BIN_DIR= ${WRKDIR}/.cwrapper/bin
CWRAPPERS_CONFIG_DIR= ${WRKDIR}/.cwrapper/config
CONFIGURE_ENV+= CWRAPPERS_CONFIG_DIR=${CWRAPPERS_CONFIG_DIR}
MAKE_ENV+= CWRAPPERS_CONFIG_DIR=${CWRAPPERS_CONFIG_DIR}
@@ -57,15 +62,17 @@ CWRAPPERS_APPEND.imake+= ${IMAKEOPTS}
.PHONY: generate-cwrappers
-do-wrapper: generate-cwrappers
+.for _target_ in ${WRAPPER_TARGETS}
+generate-cwrappers: ${_target_}
+.endfor
generate-cwrappers:
- ${RUN}${MKDIR} ${CWRAPPERS_CONFIG_DIR} ${CWRAPPERS_BIN_DIR}
+ ${RUN}${MKDIR} ${CWRAPPERS_CONFIG_DIR} ${WRAPPER_BINDIR}
.for wrappee in as cxx cc cpp f77 imake ld libtool shlibtool
${RUN}echo worklog=${WRKLOG:Q} > ${CWRAPPERS_CONFIG_DIR}/${CWRAPPERS_CONFIG.${wrappee}}
${RUN}echo wrksrc=${WRKSRC:Q} >> ${CWRAPPERS_CONFIG_DIR}/${CWRAPPERS_CONFIG.${wrappee}}
${RUN}case ${wrappee} in *libtool) ;; *) echo path=${_PATH_ORIG:Q} >> ${CWRAPPERS_CONFIG_DIR}/${CWRAPPERS_CONFIG.${wrappee}};; esac
- ${RUN}echo exec_path=${CWRAPPERS_BIN_DIR}/${CWRAPPERS_ALIASES.${wrappee}:[1]} >> ${CWRAPPERS_CONFIG_DIR}/${CWRAPPERS_CONFIG.${wrappee}}
+ ${RUN}echo exec_path=${WRAPPER_BINDIR}/${CWRAPPERS_ALIASES.${wrappee}:[1]} >> ${CWRAPPERS_CONFIG_DIR}/${CWRAPPERS_CONFIG.${wrappee}}
${RUN}echo exec=${CWRAPPERS_WRAPPEE.${wrappee}:Q} >> ${CWRAPPERS_CONFIG_DIR}/${CWRAPPERS_CONFIG.${wrappee}}
. for cmd in ${WRAPPER_REORDER_CMDS}
${RUN}echo reorder=${cmd:S/^reorder://:Q} >> ${CWRAPPERS_CONFIG_DIR}/${CWRAPPERS_CONFIG.${wrappee}}
@@ -80,12 +87,70 @@ generate-cwrappers:
${RUN}echo unwrap=${cmd:Q} >> ${CWRAPPERS_CONFIG_DIR}/${CWRAPPERS_CONFIG.${wrappee}}
. endfor
. for alias in ${CWRAPPERS_ALIASES.${wrappee}}
- ${RUN}ln -s ${CWRAPPERS_SRC_DIR}/${CWRAPPERS_CONFIG.${wrappee}}-wrapper ${CWRAPPERS_BIN_DIR}/${alias}
+ ${RUN}ln -s ${CWRAPPERS_SRC_DIR}/${CWRAPPERS_CONFIG.${wrappee}}-wrapper ${WRAPPER_BINDIR}/${alias}
. endfor
.endfor
.if defined(USE_LIBTOOL)
-_LIBTOOL= ${CWRAPPERS_BIN_DIR}/libtool
-_SHLIBTOOL= ${CWRAPPERS_BIN_DIR}/shlibtool
+_LIBTOOL= ${WRAPPER_BINDIR}/libtool
+_SHLIBTOOL= ${WRAPPER_BINDIR}/shlibtool
+.endif
+PREPEND_PATH+= ${WRAPPER_BINDIR}
+
+_COOKIE.wrapper= ${WRKDIR}/.wrapper_done
+
+.PHONY: wrapper
+.if !target(wrapper)
+. if exists(${_COOKIE.wrapper})
+wrapper:
+ @${DO_NADA}
+. elif defined(_PKGSRC_BARRIER)
+wrapper: check-vulnerable patch acquire-wrapper-lock ${_COOKIE.wrapper} release-wrapper-lock
+. else
+wrapper: barrier
+. endif
+.endif
+
+.PHONY: acquire-wrapper-lock release-wrapper-lock
+acquire-wrapper-lock: acquire-lock
+release-wrapper-lock: release-lock
+
+.if exists(${_COOKIE.wrapper})
+${_COOKIE.wrapper}:
+ @${DO_NADA}
+.else
+${_COOKIE.wrapper}: real-wrapper
.endif
-PREPEND_PATH+= ${CWRAPPERS_BIN_DIR}
+
+.PHONY: real-wrapper
+real-wrapper: wrapper-message wrapper-vars pre-wrapper do-wrapper post-wrapper wrapper-cookie error-check
+
+.PHONY: wrapper-message
+
+wrapper-message:
+ @${PHASE_MSG} "Creating toolchain wrappers for ${PKGNAME}"
+
+.PHONY: pre-wrapper do-wrapper post-wrapper
+
+do-wrapper: generate-cwrappers
+
+.if !target(do-wrapper)
+do-wrapper:
+ @${DO_NADA}
+.endif
+
+.if !target(pre-wrapper)
+pre-wrapper:
+ @${DO_NADA}
+.endif
+
+.if !target(post-wrapper)
+post-wrapper:
+ @${DO_NADA}
+.endif
+
+.PHONY: wrapper-cookie
+wrapper-cookie:
+ ${RUN} [ ! -f ${_COOKIE.wrapper} ]
+ ${RUN} ${MKDIR} ${_COOKIE.wrapper:H}
+ ${RUN} ${ECHO} ${PKGNAME} > ${_COOKIE.wrapper}
diff --git a/mk/wrapper/bsd.wrapper.mk b/mk/wrapper/bsd.wrapper.mk
index f2e9416e5f7..8f79a36263e 100644
--- a/mk/wrapper/bsd.wrapper.mk
+++ b/mk/wrapper/bsd.wrapper.mk
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.wrapper.mk,v 1.92 2015/04/27 19:38:03 jperkin Exp $
+# $NetBSD: bsd.wrapper.mk,v 1.93 2015/04/27 19:59:07 jperkin Exp $
#
# Copyright (c) 2005 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -56,9 +56,7 @@
# Prepend ${WRAPPER_BINDIR} to the PATH so that the wrappers are found
# first when searching for executables.
#
-.if ${USE_CWRAPPERS:tl} == "no"
PREPEND_PATH+= ${WRAPPER_BINDIR}
-.endif
###
### BEGIN: after the barrier