Fix cross-compilation with bootstrap and build dependencies. Bootstrap and build dependencies must be done with the host tools, so when recursively building these dependencies, query the host package database rather than the target package database, and set USE_CROSS_COMPILE=no. Index: mk/pkgformat/pkg/depends.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/pkgformat/pkg/depends.mk,v retrieving revision 1.2 diff -p -u -r1.2 depends.mk --- mk/pkgformat/pkg/depends.mk 2 Jul 2012 14:53:13 -0000 1.2 +++ mk/pkgformat/pkg/depends.mk 25 Mar 2013 14:06:14 -0000 @@ -64,6 +64,7 @@ _LIST_DEPENDS_CMD.bootstrap= \ _RESOLVE_DEPENDS_CMD= \ ${PKGSRC_SETENV} _PKG_DBDIR=${_PKG_DBDIR:Q} PKG_INFO=${PKG_INFO:Q} \ + HOST_PKG_INFO=${HOST_PKG_INFO:Q} \ _DEPENDS_FILE=${_DEPENDS_FILE:Q} \ ${SH} ${PKGSRCDIR}/mk/pkgformat/pkg/resolve-dependencies \ " "${BOOTSTRAP_DEPENDS:Q} \ @@ -80,8 +81,17 @@ _RESOLVE_DEPENDS_CMD= \ # build, full. # _DEPENDS_INSTALL_CMD= \ - pkg=`${_PKG_BEST_EXISTS} "$$pattern" || ${TRUE}`; \ + case $$type in \ + bootstrap|build) \ + pkg=`${_HOST_PKG_BEST_EXISTS} "$$pattern" || ${TRUE}`;; \ + full) \ + pkg=`${_PKG_BEST_EXISTS} "$$pattern" || ${TRUE}`;; \ + esac; \ case $$type in bootstrap) Type=Bootstrap;; build) Type=Build;; full) Type=Full;; esac; \ + case $$type in \ + bootstrap|build) cross=no;; \ + full) cross=${USE_CROSS_COMPILE:Uno};; \ + esac; \ case "$$pkg" in \ "") \ ${STEP_MSG} "$$Type dependency $$pattern: NOT found"; \ @@ -89,8 +99,17 @@ _DEPENDS_INSTALL_CMD= \ ${STEP_MSG} "Verifying $$target for $$dir"; \ [ -d "$$dir" ] || ${FAIL_MSG} "[depends.mk] The directory \`\`$$dir'' does not exist."; \ cd $$dir; \ - ${PKGSRC_SETENV} ${PKGSRC_MAKE_ENV} _PKGSRC_DEPS=" ${PKGNAME}${_PKGSRC_DEPS}" PKGNAME_REQD="$$pattern" ${MAKE} ${MAKEFLAGS} _AUTOMATIC=yes $$target; \ - pkg=`${_PKG_BEST_EXISTS} "$$pattern" || ${TRUE}`; \ + ${PKGSRC_SETENV} ${PKGSRC_MAKE_ENV} \ + _PKGSRC_DEPS=" ${PKGNAME}${_PKGSRC_DEPS}" \ + PKGNAME_REQD="$$pattern" \ + USE_CROSS_COMPILE=$$cross \ + ${MAKE} ${MAKEFLAGS} _AUTOMATIC=yes $$target; \ + case $$type in \ + bootstrap|build) \ + pkg=`${_HOST_PKG_BEST_EXISTS} "$$pattern" || ${TRUE}`;; \ + full) \ + pkg=`${_PKG_BEST_EXISTS} "$$pattern" || ${TRUE}`;; \ + esac; \ case "$$pkg" in \ "") ${ERROR_MSG} "[depends.mk] A package matching \`\`$$pattern'' should"; \ ${ERROR_MSG} " be installed, but one cannot be found. Perhaps there is a"; \ @@ -100,7 +119,12 @@ _DEPENDS_INSTALL_CMD= \ ${STEP_MSG} "Returning to build of ${PKGNAME}"; \ ;; \ *) \ - objfmt=`${PKG_INFO} -Q OBJECT_FMT "$$pkg"`; \ + case $$type in \ + bootstrap|build) \ + objfmt=`${HOST_PKG_INFO} -Q OBJECT_FMT "$$pkg"`;; \ + full) \ + objfmt=`${PKG_INFO} -Q OBJECT_FMT "$$pkg"`;; \ + esac; \ case "$$objfmt" in \ "") ${WARNING_MSG} "[depends.mk] Unknown object format for installed package $$pkg" ;; \ ${OBJECT_FMT}) ;; \ Index: mk/pkgformat/pkg/pkgformat-vars.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/pkgformat/pkg/pkgformat-vars.mk,v retrieving revision 1.2 diff -p -u -r1.2 pkgformat-vars.mk --- mk/pkgformat/pkg/pkgformat-vars.mk 13 Dec 2011 16:35:48 -0000 1.2 +++ mk/pkgformat/pkg/pkgformat-vars.mk 25 Mar 2013 14:06:14 -0000 @@ -23,8 +23,10 @@ PKG_DBDIR?= /var/db/pkg # .if ${PKG_INSTALLATION_TYPE} == "overwrite" _PKG_DBDIR= ${_CROSS_DESTDIR}${PKG_DBDIR} +_HOST_PKG_DBDIR= ${PKG_DBDIR} .elif ${PKG_INSTALLATION_TYPE} == "pkgviews" _PKG_DBDIR= ${_CROSS_DESTDIR}${DEPOTBASE} +_HOST_PKG_DBDIR= ${DEPOTBASE} .endif PKG_ADD_CMD?= ${PKG_TOOLS_BIN}/pkg_add @@ -67,12 +69,14 @@ _AUDIT_CONFIG_OPTION= IGNORE_URL # correct package database directory. # PKGTOOLS_ARGS?= -K ${_PKG_DBDIR} +HOST_PKGTOOLS_ARGS?= -K ${_HOST_PKG_DBDIR} # Views are rooted in ${LOCALBASE}, all packages are depoted in # ${DEPOTBASE}, and the package database directory for the default view # is in ${PKG_DBDIR}. # -PKG_VIEW_ARGS?= -W ${LOCALBASE} -d ${DEPOTBASE} -k ${PKG_DBDIR} +PKG_VIEW_ARGS?= -W ${LOCALBASE} -d ${DEPOTBASE} -k ${_CROSS_DESTDIR}${PKG_DBDIR} +HOST_PKG_VIEW_ARGS?= -W ${LOCALBASE} -d ${DEPOTBASE} -k ${PKG_DBDIR} PKG_ADD?= ${PKG_ADD_CMD} ${PKGTOOLS_ARGS} PKG_ADMIN?= ${PKG_ADMIN_CMD} ${PKGTOOLS_ARGS} @@ -82,12 +86,21 @@ PKG_INFO?= ${PKG_INFO_CMD} ${PKGTOOLS_AR PKG_VIEW?= ${PKG_VIEW_CMD} ${PKG_VIEW_ARGS} LINKFARM?= ${LINKFARM_CMD} +HOST_PKG_ADD?= ${PKG_ADD_CMD} ${HOST-PKGTOOLS_ARGS} +HOST_PKG_ADMIN?= ${PKG_ADMIN_CMD} ${HOST_PKGTOOLS_ARGS} +HOST_PKG_CREATE?= ${PKG_CREATE_CMD} ${HOST_PKGTOOLS_ARGS} +HOST_PKG_DELETE?= ${PKG_DELETE_CMD} ${HOST_PKGTOOLS_ARGS} +HOST_PKG_INFO?= ${PKG_INFO_CMD} ${HOST_PKGTOOLS_ARGS} +HOST_PKG_VIEW?= ${PKG_VIEW_CMD} ${HOST_PKG_VIEW_ARGS} +HOST_LINKFARM?= ${LINKFARM_CMD} + # "${_PKG_BEST_EXISTS} pkgpattern" prints out the name of the installed # package that best matches pkgpattern. Use this instead of # "${PKG_INFO} -e pkgpattern" if the latter would return more than one # package name. # _PKG_BEST_EXISTS?= ${PKG_INFO} -E +_HOST_PKG_BEST_EXISTS?= ${HOST_PKG_INFO} -E # XXX Leave this here until all uses of this have been purged from the # XXX public parts of pkgsrc. Index: mk/pkgformat/pkg/resolve-dependencies =================================================================== RCS file: /cvsroot/pkgsrc/mk/pkgformat/pkg/resolve-dependencies,v retrieving revision 1.1 diff -p -u -r1.1 resolve-dependencies --- mk/pkgformat/pkg/resolve-dependencies 15 Oct 2011 00:23:09 -0000 1.1 +++ mk/pkgformat/pkg/resolve-dependencies 25 Mar 2013 14:06:14 -0000 @@ -30,11 +30,16 @@ error_msg() { } find_best() { - ${PKG_INFO} -E "$1" || ${TRUE} + case $1 in + bootstrap|build) + ${HOST_PKG_INFO} -E "$2" || ${TRUE};; + full) + ${PKG_INFO} -E "$2" || ${TRUE};; + esac } ${CAT} ${DEPENDS_FILE} | while read type pattern dir; do - pkg=`find_best "$pattern"` + pkg=`find_best "$type" "$pattern"` case "$pkg" in "") error_msg "[resolve-dependencies] A package matching \`\`$pattern'' should" Index: mk/tools/tools.NetBSD.mk =================================================================== RCS file: /cvsroot/pkgsrc/mk/tools/tools.NetBSD.mk,v retrieving revision 1.46 diff -p -u -r1.46 tools.NetBSD.mk --- mk/tools/tools.NetBSD.mk 26 May 2012 13:09:54 -0000 1.46 +++ mk/tools/tools.NetBSD.mk 25 Mar 2013 14:06:14 -0000 @@ -140,4 +140,7 @@ TOOLS_CREATE+= ranlib NATIVE_CC:= /usr/bin/cc CC= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-gcc +NATIVE_LD:= /usr/bin/ld +LD= ${TOOLDIR}/bin/${MACHINE_GNU_PLATFORM}-ld + .endif