--- /home/masked/bsd.port.mk 2016-05-26 04:41:21.000000000 +1000 +++ /home/masked/bsd.port.mk 2016-05-28 07:21:51.543195000 +1000 @@ -1,7 +1,7 @@ #-*- tab-width: 4; -*- # ex:ts=4 # -# $FreeBSD: head/Mk/bsd.port.mk 415851 2016-05-25 18:41:21Z bapt $ +# $FreeBSD$ # $NetBSD: $ # # bsd.port.mk - 940820 Jordan K. Hubbard. @@ -1064,7 +1064,7 @@ SRC_BASE?= /usr/src USESDIR?= ${PORTSDIR}/Mk/Uses SCRIPTSDIR?= ${PORTSDIR}/Mk/Scripts -LIB_DIRS?= /lib /usr/lib ${LOCALBASE}/lib +LIB_DIRS?= ${X_SYSROOT}/lib ${X_SYSROOT}/usr/lib ${X_SYSROOT}/${LOCALBASE}/lib STAGEDIR?= ${WRKDIR}/stage NOTPHONY?= MINIMAL_PKG_VERSION= 1.6.0 @@ -1083,13 +1083,21 @@ HOSTCC:= ${CC} HOSTCXX:= ${CXX} .endif + +.if !defined(X_BUILD_FOR && DESTDIR) +.error "You must define DESTDIR when using X_BUILD_FOR or your installed packages will get overwritten!" +.if !defined(X_SYSROOT) +X_SYSROOT= ${DESTDIR} .if !exists(/usr/${X_BUILD_FOR}/usr/bin/cc) X_SYSROOT= ${LOCALBASE}/${X_BUILD_FOR} .else -X_SYSROOT= /usr/${X_BUILD_FOR} +#X_SYSROOT= /usr/${X_BUILD_FOR} +.endif .endif -CC= ${X_SYSROOT}/usr/bin/cc -CXX= ${X_SYSROOT}/usr/bin/c++ +CC= /usr/${X_BUILD_FOR}/usr/bin/cc +CXX= /usr/${X_BUILD_FOR}/usr/bin/c++ + +#LD= ${X_BUILD_FOR}-ld NM= ${X_BUILD_FOR}-nm STRIP_CMD= ${X_BUILD_FOR}-strip # only bmake support the below @@ -1521,8 +1529,6 @@ "STRIP=${STRIP}" \ TMPPLIST=${TMPPLIST} \ LDCONFIG_DIR="${LDCONFIG_DIR}" \ - PKGORIGIN=${PKGORIGIN} \ - LIB_RUN_DEPENDS='${_LIB_RUN_DEPENDS:C,[^:]*:([^:]*):?.*,\1,}' \ PKGBASE=${PKGBASE} .if !empty(USES:Mdesktop-file-utils) QA_ENV+= USESDESKTOPFILEUTILS=yes @@ -1550,12 +1556,17 @@ PORTSDIR="${PORTSDIR}" .if defined(X_BUILD_FOR) -BUILD_DEPENDS+= ${X_BUILD_FOR}-cc:devel/${X_BUILD_FOR}-xdev +#BUILD_DEPENDS+= ${X_BUILD_FOR}-gcc:devel/${X_BUILD_FOR}-binutils PKG_ENV+= ABI_FILE=${X_SYSROOT}/usr/lib/crt1.o -MAKE_ENV+= NM=${NM} \ +MAKE_ENV+= INCLUDE=/usr/src/10.3.0/include \ + NM=${NM} \ STRIPBIN=${X_BUILD_FOR}-strip \ PKG_CONFIG_SYSROOT_DIR="${X_SYSROOT}" CONFIGURE_ENV+= PKG_CONFIG_SYSROOT_DIR="${X_SYSROOT}" +PKG_DBDIR= ${X_SYSROOT}/var/db/pkg +PORT_DBDIR= ${X_SYSROOT}/var/db/ports + + .endif WRKDIR?= ${WRKDIRPREFIX}${.CURDIR}/work @@ -1640,20 +1651,10 @@ # XXX PIE support to be added here MAKE_ENV+= NO_PIE=yes -# We prefer to pass MK_*=no but it was only supported after a certain -# revision. Passing WITHOUT_* may conflict with a make.conf or src.conf's -# WITH_* value. Note that ports *do* pull in src.conf. -.if (${OSVERSION} >= 903510 && ${OSVERSION} < 1000000) || \ - (${OSVERSION} >= 1003503 && ${OSVERSION} < 1100000) || \ - ${OSVERSION} >= 1100000 # We will control debug files. Don't let builds that use /usr/share/mk # split out debug symbols since the plist won't know to expect it. -MAKE_ENV+= MK_DEBUG_FILES=no -MAKE_ENV+= MK_KERNEL_SYMBOLS=no -.else MAKE_ENV+= WITHOUT_DEBUG_FILES=yes MAKE_ENV+= WITHOUT_KERNEL_SYMBOLS=yes -.endif .if defined(NOPORTDOCS) PLIST_SUB+= PORTDOCS="@comment " @@ -2013,7 +2014,7 @@ .if !defined(WITHOUT_NO_STRICT_ALIASING) .if ${CC} != "icc" .if empty(CFLAGS:M-fno-strict-aliasing) -CFLAGS+= -fno-strict-aliasing +CFLAGS+= "-fno-strict-aliasing" .endif .endif .endif @@ -2065,8 +2066,8 @@ .if defined(RANDOMIZE_MASTER_SITES) .if exists(/usr/games/random) RANDOM_CMD?= /usr/games/random -RANDOM_ARGS?= -w -f - -_RANDOMIZE_SITES= |${RANDOM_CMD} ${RANDOM_ARGS} +RANDOM_ARGS?= "-w -f -" +_RANDOMIZE_SITES= " |${RANDOM_CMD} ${RANDOM_ARGS}" .endif .endif @@ -3062,115 +3063,195 @@ AUDITFILE?= ${PKG_DBDIR}/vuln.xml check-vulnerable: -.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING) \ - && exists(${AUDITFILE}) - @${SETENV} \ - dp_ECHO_MSG="${ECHO_MSG}" \ - dp_PKG_BIN="${PKG_BIN}" \ - dp_PORTNAME="${PORTNAME}" \ - dp_PKGNAME="${PKGNAME}" \ - dp_SCRIPTSDIR="${SCRIPTSDIR}" \ - ${SH} ${SCRIPTSDIR}/check-vulnerable.sh +.if !defined(DISABLE_VULNERABILITIES) && !defined(PACKAGE_BUILDING) + @if [ -f "${AUDITFILE}" ]; then \ + if [ -x "${PKG_BIN}" ]; then \ + vlist=`${PKG_BIN} audit "${PKGNAME}" || :`; \ + if [ "$${vlist}" = "0 problem(s) in the installed packages found." ]; then \ + vlist=""; \ + fi; \ + elif [ "${PORTNAME}" = "pkg" ]; then \ + vlist=""; \ + fi; \ + if [ -n "$$vlist" ]; then \ + ${ECHO_MSG} "===> ${PKGNAME} has known vulnerabilities:"; \ + ${ECHO_MSG} "$$vlist"; \ + ${ECHO_MSG} "=> Please update your ports tree and try again."; \ + ${ECHO_MSG} "=> Note: Vulnerable ports are marked as such even if there is no update available."; \ + ${ECHO_MSG} "=> If you wish to ignore this vulnerability rebuild with 'make DISABLE_VULNERABILITIES=yes'"; \ + exit 1; \ + fi; \ + fi .endif -# Quote simply quote all variables, except FETCH_ENV, some ports are creative -# with it, and it needs to be quoted twice to pass through the echo/eval in -# do-fetch. -_DO_FETCH_ENV= \ - dp_DISABLE_SIZE='${DISABLE_SIZE}' \ - dp_DISTDIR='${_DISTDIR}' \ - dp_DISTINFO_FILE='${DISTINFO_FILE}' \ - dp_DIST_SUBDIR='${DIST_SUBDIR}' \ - dp_ECHO_MSG='${ECHO_MSG}' \ - dp_FETCH_AFTER_ARGS='${FETCH_AFTER_ARGS}' \ - dp_FETCH_BEFORE_ARGS='${FETCH_BEFORE_ARGS}' \ - dp_FETCH_CMD='${FETCH_CMD}' \ - dp_FETCH_ENV=${FETCH_ENV:Q:Q} \ - dp_FORCE_FETCH_ALL='${FORCE_FETCH_ALL}' \ - dp_FORCE_FETCH_LIST='${FORCE_FETCH_LIST}' \ - dp_MASTER_SITE_BACKUP='${_MASTER_SITE_BACKUP}' \ - dp_MASTER_SITE_OVERRIDE='${_MASTER_SITE_OVERRIDE}' \ - dp_MASTER_SORT_AWK='${MASTER_SORT_AWK}' \ - dp_NO_CHECKSUM='${NO_CHECKSUM}' \ - dp_RANDOMIZE_SITES='${_RANDOMIZE_SITES}' \ - dp_SCRIPTSDIR='${SCRIPTSDIR}' \ - dp_SORTED_MASTER_SITES_DEFAULT_CMD='${SORTED_MASTER_SITES_DEFAULT_CMD}' \ - dp_SORTED_PATCH_SITES_DEFAULT_CMD='${SORTED_PATCH_SITES_DEFAULT_CMD}' \ - dp_TARGET='${.TARGET}' -.if defined(DEVELOPER) -_DO_FETCH_ENV+= dp_DEVELOPER=yes -.else -_DO_FETCH_ENV+= dp_DEVELOPER= -.endif +# set alg to any of SIZE, SHA256 (or any other checksum algorithm): +DISTINFO_DATA?= if [ \( -n "${DISABLE_SIZE}" -a -n "${NO_CHECKSUM}" \) -o ! -f "${DISTINFO_FILE}" ]; then exit; fi; \ + DIR=${DIST_SUBDIR}; ${AWK} -v alg=$$alg -v file=$${DIR:+$$DIR/}$${file} \ + '$$1 == alg && $$2 == "(" file ")" {print $$4}' ${DISTINFO_FILE} # Fetch .if !target(do-fetch) do-fetch: -.if !empty(DISTFILES) - @${SETENV} \ - ${_DO_FETCH_ENV} ${_MASTER_SITES_ENV} \ - dp_SITE_FLAVOR=MASTER \ - ${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/.*/'&'/} -.endif -.if defined(PATCHFILES) && !empty(PATCHFILES) - @${SETENV} \ - ${_DO_FETCH_ENV} ${_PATCH_SITES_ENV} \ - dp_SITE_FLAVOR=PATCH \ - ${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/:-p[0-9]//:C/.*/'&'/} -.endif -.endif -# -# Prints out a list of files to fetch (useful to do a batch fetch) - -.if !target(fetch-list) -fetch-list: -.if !empty(DISTFILES) - @${SETENV} \ - ${_DO_FETCH_ENV} ${_MASTER_SITES_ENV} \ - dp_SITE_FLAVOR=MASTER \ - ${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/.*/'&'/} -.endif -.if defined(PATCHFILES) && !empty(PATCHFILES) - @${SETENV} \ - ${_DO_FETCH_ENV} ${_PATCH_SITES_ENV} \ - dp_SITE_FLAVOR=PATCH \ - ${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/:-p[0-9]//:C/.*/'&'/} -.endif -.endif - -# Used by fetch-urlall-list and fetch-url-list - -.if !target(fetch-url-list-int) -fetch-url-list-int: -.if !empty(DISTFILES) - @${SETENV} \ - ${_DO_FETCH_ENV} ${_MASTER_SITES_ENV} \ - dp_SITE_FLAVOR=MASTER \ - ${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/.*/'&'/} -.endif -.if defined(PATCHFILES) && !empty(PATCHFILES) - @${SETENV} \ - ${_DO_FETCH_ENV} ${_PATCH_SITES_ENV} \ - dp_SITE_FLAVOR=PATCH \ - ${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/:-p[0-9]//:C/.*/'&'/} -.endif + @${MKDIR} ${_DISTDIR} + @cd ${_DISTDIR};\ + ${_MASTER_SITES_ENV} ; \ + for _file in ${DISTFILES}; do \ + file=$${_file%%:*}; \ + if [ $$_file = $$file ]; then \ + select=''; \ + else \ + select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ; \ + fi; \ + force_fetch=false; \ + filebasename=$${file##*/}; \ + for afile in ${FORCE_FETCH}; do \ + afile=$${afile##*/}; \ + if [ "x$$afile" = "x$$filebasename" ]; then \ + force_fetch=true; \ + fi; \ + done; \ + if [ ! -f $$file -a ! -f $$filebasename -o "$$force_fetch" = "true" ]; then \ + if [ -L $$file -o -L $$filebasename ]; then \ + ${ECHO_MSG} "=> ${_DISTDIR}/$$file is a broken symlink."; \ + ${ECHO_MSG} "=> Perhaps a filesystem (most likely a CD) isn't mounted?"; \ + ${ECHO_MSG} "=> Please correct this problem and try again."; \ + exit 1; \ + fi; \ + if [ -f ${DISTINFO_FILE} -a "x${NO_CHECKSUM}" = "x" ]; then \ + _sha256sum=`alg=SHA256; ${DISTINFO_DATA}`; \ + if [ -z "$$_sha256sum" ]; then \ + ${ECHO_MSG} "=> $${DIR:+$$DIR/}$$file is not in ${DISTINFO_FILE}."; \ + ${ECHO_MSG} "=> Either ${DISTINFO_FILE} is out of date, or"; \ + ${ECHO_MSG} "=> $${DIR:+$$DIR/}$$file is spelled incorrectly."; \ + exit 1; \ + fi; \ + fi; \ + ${ECHO_MSG} "=> $$file doesn't seem to exist in ${_DISTDIR}."; \ + if [ ! -w ${_DISTDIR} ]; then \ + ${ECHO_MSG} "=> ${_DISTDIR} is not writable by you; cannot fetch."; \ + exit 1; \ + fi; \ + if [ ! -z "$$select" ] ; then \ + __MASTER_SITES_TMP= ; \ + for group in $$select; do \ + if [ ! -z \$${_MASTER_SITES_$${group}} ] ; then \ + eval ___MASTER_SITES_TMP="\$${_MASTER_SITES_$${group}}" ; \ + __MASTER_SITES_TMP="$${__MASTER_SITES_TMP} $${___MASTER_SITES_TMP}" ; \ + fi; \ + done; \ + ___MASTER_SITES_TMP= ; \ + SORTED_MASTER_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__MASTER_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \ + else \ + SORTED_MASTER_SITES_CMD_TMP="${SORTED_MASTER_SITES_DEFAULT_CMD}" ; \ + fi; \ + sites_remaining=0; \ + sites="`eval $$SORTED_MASTER_SITES_CMD_TMP ${_RANDOMIZE_SITES}`"; \ + for site in $${sites}; do \ + sites_remaining=$$(($${sites_remaining} + 1)); \ + done; \ + for site in $${sites}; do \ + sites_remaining=$$(($${sites_remaining} - 1)); \ + ${ECHO_MSG} "=> Attempting to fetch $${site}$${file}"; \ + CKSIZE=`alg=SIZE; ${DISTINFO_DATA}`; \ + case $${file} in \ + */*) ${MKDIR} $${file%/*}; \ + args="-o $${file} $${site}$${file}";; \ + *) args=$${site}$${file};; \ + esac; \ + if ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${args} ${FETCH_AFTER_ARGS}; then \ + actual_size=`stat -f %z "$${file}"`; \ + if [ -n "${DISABLE_SIZE}" ] || [ -z "$${CKSIZE}" ] || [ $${actual_size} -eq $${CKSIZE} ]; then \ + continue 2; \ + else \ + ${ECHO_MSG} "=> Fetched file size mismatch (expected $${CKSIZE}, actual $${actual_size})"; \ + if [ $${sites_remaining} -gt 0 ]; then \ + ${ECHO_MSG} "=> Trying next site"; \ + ${RM} -f $${file}; \ + fi; \ + fi; \ + fi; \ + done; \ + ${ECHO_MSG} "=> Couldn't fetch it - please try to retrieve this";\ + ${ECHO_MSG} "=> port manually into ${_DISTDIR} and try again."; \ + exit 1; \ + fi; \ + done +.if defined(PATCHFILES) + @cd ${_DISTDIR};\ + ${_PATCH_SITES_ENV} ; \ + for _file in ${PATCHFILES}; do \ + file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^-:][^:]*$$//'` ; \ + if [ $$_file = $$file ]; then \ + select=''; \ + else \ + select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ; \ + fi; \ + file=`${ECHO_CMD} $$file | ${SED} -E -e 's/:-[^:]+$$//'` ; \ + force_fetch=false; \ + filebasename=$${file##*/}; \ + for afile in ${FORCE_FETCH}; do \ + afile=$${afile##*/}; \ + if [ "x$$afile" = "x$$filebasename" ]; then \ + force_fetch=true; \ + fi; \ + done; \ + if [ ! -f $$file -a ! -f $$filebasename -o "$$force_fetch" = "true" ]; then \ + if [ -L $$file -o -L $${file##*/} ]; then \ + ${ECHO_MSG} "=> ${_DISTDIR}/$$file is a broken symlink."; \ + ${ECHO_MSG} "=> Perhaps a filesystem (most likely a CD) isn't mounted?"; \ + ${ECHO_MSG} "=> Please correct this problem and try again."; \ + exit 1; \ + fi; \ + ${ECHO_MSG} "=> $$file doesn't seem to exist in ${_DISTDIR}."; \ + if [ ! -z "$$select" ] ; then \ + __PATCH_SITES_TMP= ; \ + for group in $$select; do \ + if [ ! -z \$${_PATCH_SITES_$${group}} ] ; then \ + eval ___PATCH_SITES_TMP="\$${_PATCH_SITES_$${group}}" ; \ + __PATCH_SITES_TMP="$${__PATCH_SITES_TMP} $${___PATCH_SITES_TMP}" ; \ + fi; \ + done; \ + ___PATCH_SITES_TMP= ; \ + SORTED_PATCH_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__PATCH_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \ + else \ + SORTED_PATCH_SITES_CMD_TMP="${SORTED_PATCH_SITES_DEFAULT_CMD}" ; \ + fi; \ + sites_remaining=0; \ + sites="`eval $$SORTED_PATCH_SITES_CMD_TMP`"; \ + for site in $${sites}; do \ + sites_remaining=$$(($${sites_remaining} + 1)); \ + done; \ + for site in $${sites}; do \ + sites_remaining=$$(($${sites_remaining} - 1)); \ + ${ECHO_MSG} "=> Attempting to fetch $${site}$${file}"; \ + CKSIZE=`alg=SIZE; ${DISTINFO_DATA}`; \ + case $${file} in \ + */*) ${MKDIR} $${file%/*}; \ + args="-o $${file} $${site}$${file}";; \ + *) args=$${site}$${file};; \ + esac; \ + if ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${args} ${FETCH_AFTER_ARGS}; then \ + actual_size=`stat -f %z "$${file}"`; \ + if [ -n "${DISABLE_SIZE}" ] || [ -z "$${CKSIZE}" ] || [ $${actual_size} -eq $${CKSIZE} ]; then \ + continue 2; \ + else \ + ${ECHO_MSG} "=> Fetched file size mismatch (expected $${CKSIZE}, actual $${actual_size})"; \ + if [ $${sites_remaining} -gt 1 ]; then \ + ${ECHO_MSG} "=> Trying next site"; \ + ${RM} -f $${file}; \ + fi; \ + fi; \ + fi; \ + done; \ + ${ECHO_MSG} "=> Couldn't fetch it - please try to retrieve this";\ + ${ECHO_MSG} "=> port manually into ${_DISTDIR} and try again."; \ + exit 1; \ + fi; \ + done .endif - -# Prints out all the URL for all the DISTFILES and PATCHFILES. - -.if !target(fetch-urlall-list) -fetch-urlall-list: - @cd ${.CURDIR} && ${SETENV} FORCE_FETCH_ALL=yes ${MAKE} fetch-url-list-int .endif -# Prints the URL for all the DISTFILES and PATCHFILES that are not here - -.if !target(fetch-url-list) -fetch-url-list: fetch-url-list-int -.endif - - # Extract clean-wrkdir: @@ -3888,6 +3969,176 @@ .endif .endif +# Prints out a list of files to fetch (useful to do a batch fetch) + +.if !target(fetch-list) +fetch-list: + @${MKDIR} ${_DISTDIR} + @(cd ${_DISTDIR}; \ + ${_MASTER_SITES_ENV} ; \ + for _file in ${DISTFILES}; do \ + file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^:]+$$//'` ; \ + if [ $$_file = $$file ]; then \ + select=''; \ + else \ + select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ; \ + fi; \ + if [ ! -f $$file -a ! -f $${file##*/} ]; then \ + if [ ! -z "$$select" ] ; then \ + __MASTER_SITES_TMP= ; \ + for group in $$select; do \ + if [ ! -z \$${_MASTER_SITES_$${group}} ] ; then \ + eval ___MASTER_SITES_TMP=\$${_MASTER_SITES_$${group}} ; \ + __MASTER_SITES_TMP="$${__MASTER_SITES_TMP} $${___MASTER_SITES_TMP}" ; \ + fi; \ + done; \ + ___MASTER_SITES_TMP= ; \ + SORTED_MASTER_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__MASTER_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \ + else \ + SORTED_MASTER_SITES_CMD_TMP="${SORTED_MASTER_SITES_DEFAULT_CMD}" ; \ + fi; \ + ${ECHO_CMD} -n ${MKDIR} ${_DISTDIR} '&& ' ; \ + ${ECHO_CMD} -n cd ${_DISTDIR} '&& { ' ; \ + for site in `eval $$SORTED_MASTER_SITES_CMD_TMP ${_RANDOMIZE_SITES}`; do \ + if [ ! -z "`${ECHO_CMD} ${NOFETCHFILES} | ${GREP} -w $${file}`" ]; then \ + if [ -z "`${ECHO_CMD} ${MASTER_SITE_OVERRIDE} | ${GREP} -w $${site}`" ]; then \ + continue; \ + fi; \ + fi; \ + CKSIZE=`alg=SIZE; ${DISTINFO_DATA}`; \ + case $${file} in \ + */*) args="-o $${file} $${site}$${file}";; \ + *) args=$${site}$${file};; \ + esac; \ + ${ECHO_CMD} -n ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${args} "${FETCH_AFTER_ARGS}" '|| ' ; \ + done; \ + ${ECHO_CMD} "${ECHO_CMD} $${file} not fetched; }" ; \ + fi; \ + done) +.if defined(PATCHFILES) + @(cd ${_DISTDIR}; \ + ${_PATCH_SITES_ENV} ; \ + for _file in ${PATCHFILES}; do \ + file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^-:][^:]*$$//'` ; \ + if [ $$_file = $$file ]; then \ + select=''; \ + else \ + select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ; \ + fi; \ + file=`${ECHO_CMD} $$file | ${SED} -E -e 's/:-[^:]+$$//'` ; \ + if [ ! -f $$file -a ! -f $${file##*/} ]; then \ + if [ ! -z "$$select" ] ; then \ + __PATCH_SITES_TMP= ; \ + for group in $$select; do \ + if [ ! -z \$${_PATCH_SITES_$${group}} ] ; then \ + eval ___PATCH_SITES_TMP=\$${_PATCH_SITES_$${group}} ; \ + __PATCH_SITES_TMP="$${__PATCH_SITES_TMP} $${___PATCH_SITES_TMP}" ; \ + fi; \ + done; \ + ___PATCH_SITES_TMP= ; \ + SORTED_PATCH_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__PATCH_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \ + else \ + SORTED_PATCH_SITES_CMD_TMP="${SORTED_PATCH_SITES_DEFAULT_CMD}" ; \ + fi; \ + ${ECHO_CMD} -n ${MKDIR} ${_DISTDIR} '&& ' ; \ + ${ECHO_CMD} -n cd ${_DISTDIR} '&& { ' ; \ + for site in `eval $$SORTED_PATCH_SITES_CMD_TMP ${_RANDOMIZE_SITES}`; do \ + CKSIZE=`alg=SIZE; ${DISTINFO_DATA}`; \ + case $${file} in \ + */*) args="-o $${file} $${site}$${file}";; \ + *) args=$${site}$${file};; \ + esac; \ + ${ECHO_CMD} -n ${SETENV} ${FETCH_ENV} ${FETCH_CMD} ${FETCH_BEFORE_ARGS} $${args} "${FETCH_AFTER_ARGS}" '|| ' ; \ + done; \ + ${ECHO_CMD} "${ECHO_CMD} $${file} not fetched; }" ; \ + fi; \ + done) +.endif +.endif + +.if !target(fetch-url-list-int) +fetch-url-list-int: + @${MKDIR} ${_DISTDIR} + @(cd ${_DISTDIR}; \ + ${_MASTER_SITES_ENV}; \ + for _file in ${DISTFILES}; do \ + file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^:]+$$//'` ; \ + fileptn=`${ECHO_CMD} $$file | ${SED} 's|/|\\\\/|g;s/\./\\\\./g;s/\+/\\\\+/g;s/\?/\\\\?/g'` ; \ + if [ $$_file = $$file ]; then \ + select=''; \ + else \ + select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ; \ + fi; \ + if [ ! -z "${LISTALL}" -o ! -f $$file -a ! -f $${file##*/} ]; then \ + if [ ! -z "$$select" ] ; then \ + __MASTER_SITES_TMP= ; \ + for group in $$select; do \ + if [ ! -z \$${_MASTER_SITES_$${group}} ] ; then \ + eval ___MASTER_SITES_TMP=\$${_MASTER_SITES_$${group}} ; \ + __MASTER_SITES_TMP="$${__MASTER_SITES_TMP} $${___MASTER_SITES_TMP}" ; \ + fi \ + done; \ + ___MASTER_SITES_TMP= ; \ + SORTED_MASTER_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__MASTER_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \ + else \ + SORTED_MASTER_SITES_CMD_TMP="${SORTED_MASTER_SITES_DEFAULT_CMD}" ; \ + fi ; \ + for site in `eval $$SORTED_MASTER_SITES_CMD_TMP ${_RANDOMIZE_SITES}`; do \ + case $${file} in \ + */*) args="-o $${file} $${site}$${file}";; \ + *) args=$${site}$${file};; \ + esac; \ + ${ECHO_CMD} $${args} ; \ + done; \ + fi \ + done) +.if defined(PATCHFILES) + @(cd ${_DISTDIR}; \ + ${_PATCH_SITES_ENV} ; \ + for _file in ${PATCHFILES}; do \ + file=`${ECHO_CMD} $$_file | ${SED} -E -e 's/:[^-:][^:]*$$//'` ; \ + if [ $$_file = $$file ]; then \ + select=''; \ + else \ + select=`${ECHO_CMD} $${_file##*:} | ${SED} -e 's/,/ /g'` ; \ + fi; \ + file=`${ECHO_CMD} $$file | ${SED} -E -e 's/:-[^:]+$$//'` ; \ + fileptn=`${ECHO_CMD} $$file | ${SED} 's|/|\\\\/|g;s/\./\\\\./g;s/\+/\\\\+/g;s/\?/\\\\?/g'` ; \ + if [ ! -z "${LISTALL}" -o ! -f $$file -a ! -f $${file##*/} ]; then \ + if [ ! -z "$$select" ] ; then \ + __PATCH_SITES_TMP= ; \ + for group in $$select; do \ + if [ ! -z \$${_PATCH_SITES_$${group}} ] ; then \ + eval ___PATCH_SITES_TMP=\$${_PATCH_SITES_$${group}} ; \ + __PATCH_SITES_TMP="$${__PATCH_SITES_TMP} $${___PATCH_SITES_TMP}" ; \ + fi \ + done; \ + ___PATCH_SITES_TMP= ; \ + SORTED_PATCH_SITES_CMD_TMP="${ECHO_CMD} ${_MASTER_SITE_OVERRIDE} `${ECHO_CMD} $${__PATCH_SITES_TMP} | ${AWK} '${MASTER_SORT_AWK:S|\\|\\\\|g}'` ${_MASTER_SITE_BACKUP}" ; \ + else \ + SORTED_PATCH_SITES_CMD_TMP="${SORTED_PATCH_SITES_DEFAULT_CMD}" ; \ + fi ; \ + for site in `eval $$SORTED_PATCH_SITES_CMD_TMP ${_RANDOMIZE_SITES}`; do \ + case $${file} in \ + */*) args="-o $${file} $${site}$${file}";; \ + *) args=$${site}$${file};; \ + esac; \ + ${ECHO_CMD} $${args} ; \ + done; \ + fi \ + done) +.endif +.endif + +.if !target(fetch-urlall-list) +fetch-urlall-list: + @cd ${.CURDIR} && LISTALL=yes ${MAKE} fetch-url-list-int +.endif + +.if !target(fetch-url-list) +fetch-url-list: fetch-url-list-int +.endif + # Generates patches. update-patches: @@ -3903,62 +4154,123 @@ # Checksumming utilities -# List all algorithms here, all the variables name must begin with dp_ -_CHECKSUM_INIT_ENV= \ - dp_SHA256=${SHA256} +check-checksum-algorithms: + @ \ + ${checksum_init} \ + \ + for alg in ${CHECKSUM_ALGORITHMS:tu}; do \ + eval alg_executable=\$$$$alg; \ + if [ -z "$$alg_executable" ]; then \ + ${ECHO_MSG} "Checksum algorithm $$alg: Couldn't find the executable."; \ + ${ECHO_MSG} "Set $$alg=/path/to/$$alg in /etc/make.conf and try again."; \ + exit 1; \ + fi; \ + done; \ + +checksum_init=\ + SHA256=${SHA256}; .if !target(makesum) -# Some port change the options with OPTIONS_*_FORCE when make(makesum) to be -# able to add all distfiles in one go. -# For this to work, we need to call the do-fetch script directly here so that -# the options consistent when fetching and when makesum'ing. -# As we're fetching new distfiles, that are not in the distinfo file, disable -# checksum and sizes checks. -makesum: -.if !empty(DISTFILES) - @${SETENV} \ - ${_DO_FETCH_ENV} ${_MASTER_SITES_ENV} \ - dp_NO_CHECKSUM=yes dp_DISABLE_SIZE=yes \ - dp_SITE_FLAVOR=MASTER \ - ${SH} ${SCRIPTSDIR}/do-fetch.sh ${DISTFILES:C/.*/'&'/} -.endif -.if defined(PATCHFILES) && !empty(PATCHFILES) - @${SETENV} \ - ${_DO_FETCH_ENV} ${_PATCH_SITES_ENV} \ - dp_NO_CHECKSUM=yes dp_DISABLE_SIZE=yes \ - dp_SITE_FLAVOR=PATCH \ - ${SH} ${SCRIPTSDIR}/do-fetch.sh ${PATCHFILES:C/:-p[0-9]//:C/.*/'&'/} -.endif - @${SETENV} \ - ${_CHECKSUM_INIT_ENV} \ - dp_CHECKSUM_ALGORITHMS='${CHECKSUM_ALGORITHMS:tu}' \ - dp_CKSUMFILES='${_CKSUMFILES}' \ - dp_DISTDIR='${DISTDIR}' \ - dp_DISTINFO_FILE='${DISTINFO_FILE}' \ - dp_ECHO_MSG='${ECHO_MSG}' \ - dp_SCRIPTSDIR='${SCRIPTSDIR}' \ - ${SH} ${SCRIPTSDIR}/makesum.sh ${DISTFILES:C/.*/'&'/} +makesum: check-checksum-algorithms + @cd ${.CURDIR} && ${MAKE} fetch NO_CHECKSUM=yes \ + DISABLE_SIZE=yes + @if [ -f ${DISTINFO_FILE} ]; then ${CAT} /dev/null > ${DISTINFO_FILE}; fi + @( \ + cd ${DISTDIR}; \ + \ + ${checksum_init} \ + \ + for file in ${_CKSUMFILES}; do \ + for alg in ${CHECKSUM_ALGORITHMS:tu}; do \ + eval alg_executable=\$$$$alg; \ + \ + if [ $$alg_executable != "NO" ]; then \ + $$alg_executable $$file >> ${DISTINFO_FILE}; \ + fi; \ + done; \ + ${ECHO_CMD} "SIZE ($$file) = `${STAT} -f \"%z\" $$file`" >> ${DISTINFO_FILE}; \ + done \ + ) .endif .if !target(checksum) -checksum: fetch -.if !empty(_CKSUMFILES) - @${SETENV} \ - ${_CHECKSUM_INIT_ENV} \ - dp_CHECKSUM_ALGORITHMS='${CHECKSUM_ALGORITHMS:tu}' \ - dp_CURDIR='${.CURDIR}' \ - dp_DISTDIR='${DISTDIR}' \ - dp_DISTINFO_FILE='${DISTINFO_FILE}' \ - dp_DIST_SUBDIR='${DIST_SUBDIR}' \ - dp_ECHO_MSG='${ECHO_MSG}' \ - dp_FETCH_REGET='${FETCH_REGET}' \ - dp_MAKE='${MAKE}' \ - dp_MAKEFLAGS='${.MAKEFLAGS}' \ - dp_SCRIPTSDIR='${SCRIPTSDIR}' \ - dp_DISABLE_SIZE='${DISABLE_SIZE}' \ - dp_NO_CHECKSUM='${NO_CHECKSUM}' \ - ${SH} ${SCRIPTSDIR}/checksum.sh ${_CKSUMFILES:C/.*/'&'/} -.endif +checksum: fetch check-checksum-algorithms + @set -e ; \ + ${checksum_init} \ + if [ -f ${DISTINFO_FILE} ]; then \ + cd ${DISTDIR}; OK="";\ + for file in ${_CKSUMFILES}; do \ + ignored="true"; \ + _file=$${file#${DIST_SUBDIR}/*}; \ + for alg in ${CHECKSUM_ALGORITHMS:tu}; do \ + ignore="false"; \ + eval alg_executable=\$$$$alg; \ + \ + if [ $$alg_executable != "NO" ]; then \ + MKSUM=`$$alg_executable < $$file`; \ + CKSUM=`file=$$_file; ${DISTINFO_DATA}`; \ + else \ + ignore="true"; \ + fi; \ + \ + if [ $$ignore = "false" -a -z "$$CKSUM" ]; then \ + ${ECHO_MSG} "=> No $$alg checksum recorded for $$file."; \ + ignore="true"; \ + fi; \ + \ + if [ $$ignore = "false" ]; then \ + match="false"; \ + for chksum in $$CKSUM; do \ + if [ "$$chksum" = "$$MKSUM" ]; then \ + match="true"; \ + break; \ + fi; \ + done; \ + if [ $$match = "true" ]; then \ + ${ECHO_MSG} "=> $$alg Checksum OK for $$file."; \ + ignored="false"; \ + else \ + ${ECHO_MSG} "=> $$alg Checksum mismatch for $$file."; \ + refetchlist="$$refetchlist$$file "; \ + OK="$${OK:-retry}"; \ + [ "$${OK}" = "retry" -a ${FETCH_REGET} -gt 0 ] && ${RM} -f $${file}; \ + ignored="false"; \ + fi; \ + fi; \ + done; \ + \ + if [ $$ignored = "true" ]; then \ + ${ECHO_MSG} "=> No suitable checksum found for $$file."; \ + OK="${FALSE}"; \ + fi; \ + \ + done; \ + \ + if [ "$${OK:=true}" = "retry" ] && [ ${FETCH_REGET} -gt 0 ]; then \ + ${ECHO_MSG} "===> Refetch for ${FETCH_REGET} more times files: $$refetchlist"; \ + if ( cd ${.CURDIR} && \ + ${MAKE} ${.MAKEFLAGS} FORCE_FETCH="$$refetchlist" FETCH_REGET="`${EXPR} ${FETCH_REGET} - 1`" fetch); then \ + if ( cd ${.CURDIR} && \ + ${MAKE} ${.MAKEFLAGS} FETCH_REGET="`${EXPR} ${FETCH_REGET} - 1`" checksum ); then \ + OK="true"; \ + fi; \ + fi; \ + fi; \ + \ + if [ "$$OK" != "true" -a ${FETCH_REGET} -eq 0 ]; then \ + ${ECHO_MSG} "===> Giving up on fetching files: $$refetchlist"; \ + ${ECHO_MSG} "Make sure the Makefile and distinfo file (${DISTINFO_FILE})"; \ + ${ECHO_MSG} "are up to date. If you are absolutely sure you want to override this"; \ + ${ECHO_MSG} "check, type \"make NO_CHECKSUM=yes [other args]\"."; \ + exit 1; \ + fi; \ + if [ "$$OK" != "true" ]; then \ + exit 1; \ + fi; \ + elif [ -n "${_CKSUMFILES:M*}" ]; then \ + ${ECHO_MSG} "=> No checksum file (${DISTINFO_FILE})."; \ + exit 1; \ + fi .endif ################################################################ @@ -4938,8 +5250,7 @@ @${ECHO_MSG} "===> No options to configure" .else @optionsdir=${OPTIONS_FILE:H}; \ - if [ ! -w "${PORT_DBDIR}" -a "`stat -f %u ${PORT_DBDIR:H}`" = 0 ]; \ - then \ + if [ ${UID} != 0 -a -z "${INSTALL_AS_USER}" -a ! -w "${PORT_DBDIR}" ] ; then \ ${ECHO_MSG} "===> Switching to root credentials to create $${optionsdir}"; \ (${SU_CMD} "${SH} -c \"${MKDIR} $${optionsdir} 2> /dev/null\"") || \ (${ECHO_MSG} "===> Cannot create $${optionsdir}, check permissions"; exit 1); \ @@ -4975,8 +5286,7 @@ ${ECHO_CMD} "OPTIONS_FILE_UNSET+=$${i}" >> $${TMPOPTIONSFILE}; \ fi; \ done; \ - if [ ! -w "${OPTIONS_FILE:H}" -a "`stat -f %u ${OPTIONS_FILE:H}`" != ${UID} ]; \ - then \ + if [ ${UID} != 0 -a -z "${INSTALL_AS_USER}" -a ! -w "${OPTIONS_FILE:H}" ]; then \ ${ECHO_MSG} "===> Switching to root credentials to write ${OPTIONS_FILE}"; \ ${SU_CMD} "${CAT} $${TMPOPTIONSFILE} > ${OPTIONS_FILE}"; \ ${ECHO_MSG} "===> Returning to user credentials"; \