mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-03 01:23:49 +00:00
bcb098e384
Add INDEX_COMPRESSION_FORMAT as a variable a user can overwrite via /etc/make.conf to allow the compression format used for INDEX to be changed. Available compression formats are: bz2, xz and zst for now. While here change the default compression format to be .xz (the smallest), for environement where performance of unxz matters it can switched to zst. bz2 format is kept for compatibility with existing tooling. In order to simplify the code, bsdcat(1) is now used for uncompressing instead detecting the compression format manually and switch the decompression tool manually Note the bzip2 compression format is now considered as deprecated
224 lines
7.1 KiB
Makefile
224 lines
7.1 KiB
Makefile
SUBDIR += accessibility
|
||
SUBDIR += arabic
|
||
SUBDIR += archivers
|
||
SUBDIR += astro
|
||
SUBDIR += audio
|
||
SUBDIR += benchmarks
|
||
SUBDIR += biology
|
||
SUBDIR += cad
|
||
SUBDIR += chinese
|
||
SUBDIR += comms
|
||
SUBDIR += converters
|
||
SUBDIR += databases
|
||
SUBDIR += deskutils
|
||
SUBDIR += devel
|
||
SUBDIR += dns
|
||
SUBDIR += editors
|
||
SUBDIR += emulators
|
||
SUBDIR += finance
|
||
SUBDIR += french
|
||
SUBDIR += ftp
|
||
SUBDIR += games
|
||
SUBDIR += german
|
||
SUBDIR += graphics
|
||
SUBDIR += hebrew
|
||
SUBDIR += hungarian
|
||
SUBDIR += irc
|
||
SUBDIR += japanese
|
||
SUBDIR += java
|
||
SUBDIR += korean
|
||
SUBDIR += lang
|
||
SUBDIR += mail
|
||
SUBDIR += math
|
||
SUBDIR += misc
|
||
SUBDIR += multimedia
|
||
SUBDIR += net
|
||
SUBDIR += net-im
|
||
SUBDIR += net-mgmt
|
||
SUBDIR += net-p2p
|
||
SUBDIR += news
|
||
SUBDIR += polish
|
||
SUBDIR += ports-mgmt
|
||
SUBDIR += portuguese
|
||
SUBDIR += print
|
||
SUBDIR += russian
|
||
SUBDIR += science
|
||
SUBDIR += security
|
||
SUBDIR += shells
|
||
SUBDIR += sysutils
|
||
SUBDIR += textproc
|
||
SUBDIR += ukrainian
|
||
SUBDIR += vietnamese
|
||
SUBDIR += www
|
||
SUBDIR += x11
|
||
SUBDIR += x11-clocks
|
||
SUBDIR += x11-drivers
|
||
SUBDIR += x11-fm
|
||
SUBDIR += x11-fonts
|
||
SUBDIR += x11-servers
|
||
SUBDIR += x11-themes
|
||
SUBDIR += x11-toolkits
|
||
SUBDIR += x11-wm
|
||
|
||
PORTSTOP= yes
|
||
|
||
.include <bsd.port.subdir.mk>
|
||
|
||
index: ${INDEXDIR}/${INDEXFILE}
|
||
|
||
INDEX_COMPRESSION_FORMAT?= xz
|
||
|
||
.if ${INDEX_COMPRESSION_FORMAT} != xz && \
|
||
${INDEX_COMPRESSION_FORMAT} != bz2 && ${INDEX_COMPRESSION_FORMAT} != zst
|
||
.error "Invalid compression format: ${INDEX_COMPRESSION_FORMAT}, expecting xz, bz2 or zst"
|
||
.endif
|
||
|
||
fetchindex: ${INDEXDIR}/${INDEXFILE}.${INDEX_COMPRESSION_FORMAT}
|
||
@if bsdcat < ${INDEXDIR}/${INDEXFILE}.${INDEX_COMPRESSION_FORMAT} > ${INDEXDIR}/${INDEXFILE}.tmp ; then \
|
||
chmod a+r ${INDEXDIR}/${INDEXFILE}.tmp; \
|
||
${MV} ${INDEXDIR}/${INDEXFILE}.tmp ${INDEXDIR}/${INDEXFILE}; \
|
||
${RM} ${INDEXDIR}/${INDEXFILE}.${INDEX_COMPRESSION_FORMAT} \
|
||
else ; \
|
||
${RM} ${INDEXDIR}/${INDEXFILE}.tmp ; \
|
||
fi
|
||
|
||
${INDEXDIR}/${INDEXFILE}.${INDEX_COMPRESSION_FORMAT}: .PHONY
|
||
${FETCHINDEX} ${INDEXDIR}/${INDEXFILE}.${INDEX_COMPRESSION_FORMAT} \
|
||
${MASTER_SITE_INDEX}${INDEXFILE}.${INDEX_COMPRESSION_FORMAT}
|
||
|
||
MASTER_SITE_INDEX?= https://www.FreeBSD.org/ports/
|
||
SETENV?= /usr/bin/env
|
||
FETCHINDEX?= ${SETENV} ${FETCH_ENV} fetch -am -o
|
||
|
||
.if !defined(INDEX_JOBS)
|
||
INDEX_JOBS!= ${SYSCTL} -n kern.smp.cpus
|
||
.endif
|
||
|
||
.if !defined(INDEX_VERBOSE)
|
||
INDEX_ECHO_MSG= true
|
||
INDEX_ECHO_1ST= echo -n
|
||
.else
|
||
INDEX_ECHO_MSG= echo 1>&2
|
||
INDEX_ECHO_1ST= echo
|
||
.endif
|
||
|
||
# /rescue/sh is statically linked and much faster to execute than the
|
||
# dynamically linked /bin/sh. This is significant for targets like
|
||
# make index that execute the shell tens of thousands of times.
|
||
.if exists(/rescue/sh)
|
||
INDEX_SHELL= /rescue/sh
|
||
.else
|
||
INDEX_SHELL= /bin/sh
|
||
.endif
|
||
|
||
.if !defined(INDEX_PORTS)
|
||
INDEX_PORTS=.
|
||
.endif
|
||
|
||
.if exists(/usr/libexec/make_index)
|
||
MAKE_INDEX= /usr/libexec/make_index /dev/stdin
|
||
.else
|
||
MAKE_INDEX= perl ${.CURDIR}/Tools/make_index
|
||
.endif
|
||
|
||
${INDEXDIR}/${INDEXFILE}: .PHONY
|
||
@${INDEX_ECHO_1ST} "Generating ${INDEXFILE} - please wait.."; \
|
||
if [ "${INDEX_PRISTINE}" != "" ]; then \
|
||
export LOCALBASE=/nonexistentlocal; \
|
||
fi; \
|
||
tmpdir=`/usr/bin/mktemp -d -t index` || exit 1; \
|
||
trap "rm -rf $${tmpdir}; exit 1" 1 2 3 5 10 13 15; \
|
||
( cd ${.CURDIR}; for i in ${INDEX_PORTS}; do (cd $${i} && ${MAKE} -j${INDEX_JOBS} INDEX_TMPDIR=$${tmpdir} BUILDING_INDEX=1 \
|
||
__MAKE_SHELL=${INDEX_SHELL} \
|
||
ECHO_MSG="${INDEX_ECHO_MSG}" describe); done ) || \
|
||
(rm -rf $${tmpdir} ; \
|
||
if [ "${INDEX_QUIET}" = "" ]; then \
|
||
echo; \
|
||
echo "********************************************************************"; \
|
||
echo "Before reporting this error, verify that you are running a supported"; \
|
||
echo "version of FreeBSD (see https://www.FreeBSD.org/ports/) and that you"; \
|
||
echo "have a complete and up-to-date ports collection. (INDEX builds are"; \
|
||
echo "not supported with partial or out-of-date ports collections."; \
|
||
echo "If that is the case, then"; \
|
||
echo "report the failure to ports@FreeBSD.org together with relevant"; \
|
||
echo "details of your ports configuration (including FreeBSD version,"; \
|
||
echo "your architecture, your environment, and your /etc/make.conf"; \
|
||
echo "settings, especially compiler flags and OPTIONS_SET/UNSET settings)."; \
|
||
echo; \
|
||
echo "Note: the latest pre-generated version of INDEX may be fetched"; \
|
||
echo "automatically with \"make fetchindex\"."; \
|
||
echo "********************************************************************"; \
|
||
echo; \
|
||
fi; \
|
||
exit 1); \
|
||
cat $${tmpdir}/${INDEXFILE}.desc.* | \
|
||
sed -e 's|${.CURDIR}|${PORTSDIR}|g' | \
|
||
(cd ${.CURDIR} ; ${MAKE_INDEX}) | \
|
||
sed -e 's/ */ /g' -e 's/| */|/g' -e 's/ *|/|/g' -e 's./..g' | \
|
||
sort -t '|' -k 2,3 | \
|
||
sed -Ee 's../.g' -e ':a' -e 's|/[^/]+/\.\.||; ta' \
|
||
-e 's|${PORTSDIR}|/usr/ports|g' \
|
||
-e 's|${.CURDIR}|/usr/ports|g' > ${INDEXDIR}/${INDEXFILE}.tmp; \
|
||
if [ "${INDEX_PRISTINE}" != "" ]; then \
|
||
sed -e "s,$${LOCALBASE},/usr/local," ${INDEXDIR}/${INDEXFILE}.tmp > ${INDEXDIR}/${INDEXFILE}; \
|
||
else \
|
||
mv ${INDEXDIR}/${INDEXFILE}.tmp ${INDEXDIR}/${INDEXFILE}; \
|
||
fi; \
|
||
rm -rf $${tmpdir}; \
|
||
echo " Done."
|
||
|
||
print-index: ${INDEXDIR}/${INDEXFILE}
|
||
@awk -F\| '{ printf("Port:\t%s\nPath:\t%s\nInfo:\t%s\nMaint:\t%s\nIndex:\t%s\nB-deps:\t%s\nR-deps:\t%s\nE-deps:\t%s\nP-deps:\t%s\nF-deps:\t%s\nWWW:\t%s\n\n", $$1, $$2, $$4, $$6, $$7, $$8, $$9, $$11, $$12, $$13, $$10); }' < ${INDEXDIR}/${INDEXFILE}
|
||
|
||
GIT?= git
|
||
.if !defined(SVN) || empty(SVN)
|
||
. for _P in /usr/bin /usr/local/bin
|
||
. for _S in svn svnlite
|
||
. if exists(${_P}/${_S})
|
||
SVN= ${_P}/${_S}
|
||
. endif
|
||
. endfor
|
||
. endfor
|
||
.endif
|
||
RSYNC?= rsync
|
||
PORTSNAP?= portsnap
|
||
PORTSNAP_FLAGS?= -p ${.CURDIR}
|
||
.if !target(update)
|
||
update:
|
||
.if exists(${.CURDIR}/.svn)
|
||
@echo "--------------------------------------------------------------"
|
||
@echo ">>> Updating ${.CURDIR} using Subversion"
|
||
@echo "--------------------------------------------------------------"
|
||
cd ${.CURDIR}; ${SVN} update
|
||
.elif exists(${.CURDIR}/.git)
|
||
. if exists(${.CURDIR}/.git/svn)
|
||
@echo "--------------------------------------------------------------"
|
||
@echo ">>> Updating ${.CURDIR} from git+svn repository"
|
||
@echo "--------------------------------------------------------------"
|
||
cd ${.CURDIR}; ${GIT} svn rebase
|
||
. else
|
||
@echo "--------------------------------------------------------------"
|
||
@echo ">>> Updating ${.CURDIR} from git repository"
|
||
@echo "--------------------------------------------------------------"
|
||
cd ${.CURDIR}; ${GIT} pull --rebase
|
||
. endif
|
||
.elif defined(RSYNC_UPDATE) && defined(PORTS_RSYNC_SOURCE)
|
||
@echo "--------------------------------------------------------------"
|
||
@echo ">>> Updating with ${RSYNC} from ${PORTS_RSYNC_SOURCE}"
|
||
@echo "--------------------------------------------------------------"
|
||
@${RSYNC} ${RSYNC_FLAGS} ${PORTS_RSYNC_SOURCE}/ ${.CURDIR}/
|
||
.else
|
||
@echo "--------------------------------------------------------------"
|
||
@echo ">>> Running ${PORTSNAP}"
|
||
@echo "--------------------------------------------------------------"
|
||
.if !exists(${PORTSDIR}/.portsnap.INDEX)
|
||
@echo "Error: 'make update' uses portsnap(8) by default and"
|
||
@echo "needs ${PORTSDIR} to be created by portsnap on its first run."
|
||
@echo "Please run 'portsnap fetch extract' first."
|
||
.else
|
||
@${PORTSNAP} ${PORTSNAP_FLAGS} fetch
|
||
@${PORTSNAP} ${PORTSNAP_FLAGS} update
|
||
.endif
|
||
.endif
|
||
.endif
|