git: df53ae0fdd98 - main - Remove portsnap(8)
- Reply: Piotr P. Stefaniak: "Re: git: df53ae0fdd98 - main - Remove portsnap(8)"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sun, 23 Apr 2023 01:12:43 UTC
The branch main has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=df53ae0fdd98e9452095ac2fdaf95fcfac8c9c7f commit df53ae0fdd98e9452095ac2fdaf95fcfac8c9c7f Author: Colin Percival <cperciva@FreeBSD.org> AuthorDate: 2023-04-23 01:07:14 +0000 Commit: Colin Percival <cperciva@FreeBSD.org> CommitDate: 2023-04-23 01:12:37 +0000 Remove portsnap(8) Rather than having a tool in the FreeBSD base system for obtaining the FreeBSD ports tree, users are encouraged to `pkg install git` and then `git clone https://git.FreeBSD.org/ports.git /usr/ports`. The portsnap servers will continue operating until FreeBSD 13 reaches its End-of-Life, and portsnap is available from the ports tree as ports-mgmt/portsnap. Requested by: portmgr Relnotes: yes Differential Revision: https://reviews.freebsd.org/D39563 X-MFC: no --- ObsoleteFiles.inc | 7 + UPDATING | 4 + libexec/Makefile | 2 +- share/examples/etc/README.examples | 5 +- share/man/man5/Makefile | 3 +- share/man/man5/portsnap.conf.5 | 147 ---- share/man/man5/src.conf.5 | 4 - share/mk/src.opts.mk | 1 - targets/pseudo/userland/Makefile.depend | 3 - tools/build/mk/OptionalObsoleteFiles.inc | 10 +- tools/build/options/WITHOUT_PORTSNAP | 4 - usr.sbin/Makefile | 1 - usr.sbin/portsnap/Makefile | 5 - usr.sbin/portsnap/Makefile.inc | 5 - usr.sbin/portsnap/make_index/Makefile | 8 - usr.sbin/portsnap/make_index/Makefile.depend | 16 - usr.sbin/portsnap/make_index/make_index.c | 515 ------------ usr.sbin/portsnap/portsnap/Makefile | 7 - usr.sbin/portsnap/portsnap/Makefile.depend | 11 - usr.sbin/portsnap/portsnap/portsnap.8 | 288 ------- usr.sbin/portsnap/portsnap/portsnap.conf | 36 - usr.sbin/portsnap/portsnap/portsnap.sh | 1156 -------------------------- 22 files changed, 16 insertions(+), 2222 deletions(-) diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index 3b3141d15629..6e7c5205a2bf 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -52,6 +52,13 @@ # xargs -n1 | sort | uniq -d; # done +# 20230420: portsnap.8 removed +OLD_FILES+=etc/portsnap.conf +OLD_FILES+=usr/libexec/make_index +OLD_FILES+=usr/sbin/portsnap +OLD_FILES+=usr/share/examples/etc/portsnap.conf +OLD_FILES+=usr/share/man/man8/portsnap.8.gz + # 20230331: libpcap updated to 1.10.3 OLD_FILES+=usr/include/fmtutils.h diff --git a/UPDATING b/UPDATING index 70e5a58352af..17d80334c794 100644 --- a/UPDATING +++ b/UPDATING @@ -27,6 +27,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 14.x IS SLOW: world, or to merely disable the most expensive debugging functionality at runtime, run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20230422: + Remove portsnap(8). Users are encouraged to obtain the ports tree + using git instead. + 20230420: Add jobs.mk to save typing. Enables -j${JOB_MAX} and logging eg. diff --git a/libexec/Makefile b/libexec/Makefile index 057bad07de5b..a890115fd15a 100644 --- a/libexec/Makefile +++ b/libexec/Makefile @@ -49,7 +49,7 @@ SUBDIR+= bootpd SUBDIR+= fingerd .endif -.if ${MK_FREEBSD_UPDATE} != "no" || ${MK_PORTSNAP} != "no" +.if ${MK_FREEBSD_UPDATE} != "no" _phttpget= phttpget .endif diff --git a/share/examples/etc/README.examples b/share/examples/etc/README.examples index 3d284f31fdea..606b2b40d60c 100644 --- a/share/examples/etc/README.examples +++ b/share/examples/etc/README.examples @@ -44,12 +44,11 @@ nsmb.conf - smbfs lookups configuration file pf.conf - pf(4) example configuration file pf.os - SYN fingerprint database phones - phone number database for tip(1) -portsnap.conf - portsnap(8) configuration file printcap - configuration file for lpr(1) profile - system-wide .profile for sh(1) protocols - see protocols(5) rc - system startup script (see init(8)) -rc.bsdextended - startup policy for the mac_bsdextended(4) security module. +rc.bsdextended - startup policy for the mac_bsdextended(4) security module. rc.firewall - ipfw(8) setup script with basic rulesets rc.initdiskless - configuration file to boot a diskless machine rc.resume - sample run command file for APM Resume Event @@ -65,7 +64,7 @@ snmpd.config - example configuration file for bsnmpd(1) sysctl.conf - configuration file for sysctl(8) syslog.conf - configuration file for syslogd(8) ttys - defines port configuration for init(8) -defaults/bluetooth.device.conf - +defaults/bluetooth.device.conf - defaults/devfs.rules - default configuration rules for devfs(8) defaults/periodic.conf - default configuration file for periodic(8) defaults/rc.conf - default system configuration info (see rc.conf(5)) diff --git a/share/man/man5/Makefile b/share/man/man5/Makefile index f6e91e4ed00b..731c79fe0f97 100644 --- a/share/man/man5/Makefile +++ b/share/man/man5/Makefile @@ -53,7 +53,6 @@ MAN= acct.5 \ periodic.conf.5 \ phones.5 \ portindex.5 \ - portsnap.conf.5 \ procfs.5 \ protocols.5 \ quota.user.5 \ @@ -103,7 +102,7 @@ MAN+= freebsd-update.conf.5 .endif .if ${MK_HESIOD} != "no" -MAN+= hesiod.conf.5 +MAN+= hesiod.conf.5 .endif .if ${MK_PF} != "no" diff --git a/share/man/man5/portsnap.conf.5 b/share/man/man5/portsnap.conf.5 deleted file mode 100644 index cef4c24815bf..000000000000 --- a/share/man/man5/portsnap.conf.5 +++ /dev/null @@ -1,147 +0,0 @@ -.\"- -.\" Copyright 2004-2005 Colin Percival -.\" All rights reserved -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted providing that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING -.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -.\" POSSIBILITY OF SUCH DAMAGE. -.\" -.\" $FreeBSD$ -.\" -.Dd January 30, 2005 -.Dt PORTSNAP.CONF 5 -.Os FreeBSD -.Sh NAME -.Nm portsnap.conf -.Nd configuration file for -.Xr portsnap 8 -.Sh DESCRIPTION -The -.Nm -file controls where -.Xr portsnap 8 -fetches ports tree snapshots from, -which RSA key should be trusted to sign the updates, and what -directories should hold the compressed and live ports trees. -.Pp -A line of the form -.Dl SERVERNAME=portsnap.example.com -specifies the source from which snapshots should be fetched. -This is equivalent to the -.Fl s Ar server -option to -.Xr portsnap 8 , -and will be ignored if the command-line -option is used. -.Pp -A line of the form -.Dl KEYPRINT=0123456789abc ... 456789abcdef -(64 characters in total) -specifies the SHA-256 hash of the OpenSSL public key file -belonging to an RSA keypair which is trusted to sign updates. -This is equivalent to the -.Fl k Ar KEY -option to -.Xr portsnap 8 , -and will be ignored if the command-line -option is used. -.Pp -A line of the form -.Dl WORKDIR=/path/to/workdir -specifies the directory in which portsnap should maintain its compressed -snapshot of the ports tree. -This is equivalent to the -.Fl d Ar workdir -option to -.Xr portsnap 8 , -and will be ignored if the command-line option -is used. -.Pp -A line of the form -.Dl PORTSDIR=/path/to/portstree -specifies the directory in which portsnap will create the live ports -tree from its compressed snapshot via the -.Cm extract -and -.Cm update -commands. -This is equivalent to the -.Fl p Ar portsdir -option to -.Xr portsnap 8 , -and will be ignored if the command-line option -is used. -.Pp -If more than one line of any of the above forms is included in -.Nm -then only the last one will take effect. -.Pp -A line of the form -.Dl INDEX INDEXFILE DESCRIBEFILE -will instruct -.Xr portsnap 8 -that the specified INDEX file is generated from the specified -describe file distributed by the portsnap server. -.Pp -Finally, a line of the form -.Dl REFUSE foo bar -will instruct -.Xr portsnap 8 -to ignore parts of the ports tree with paths starting with -.Ar foo -or -.Ar bar , -which are interpreted as extended regular expressions by -.Xr egrep 1 . -This will result in those parts of the tree not being updated -in the compressed snapshot when the -.Cm fetch -and -.Cm cron -commands are used and not being extracted when the -.Cm extract -command is used (unless a specific -.Ar path -is passed to -.Xr portsnap 8 ) , -and if those parts of the ports tree are present they -will not be updated when the -.Cm update -command is used. -Unlike the other options, the parameters in REFUSE lines -accumulate and all such lines are considered. -.Bf Em -Note that operating with an incomplete ports tree is not -supported and may cause unexpected results. -.Ef -.Pp -Any lines not of the above forms will be ignored. -.Sh FILES -.Bl -tag -width "/etc/portsnap.conf" -.It Pa /etc/portsnap.conf -Default location of the portsnap configuration file. -.El -.Sh SEE ALSO -.Xr egrep 1 , -.Xr fetch 1 , -.Xr sha256 1 , -.Xr portsnap 8 -.Sh AUTHORS -.An Colin Percival Aq Mt cperciva@FreeBSD.org diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5 index 9029732f0fe8..8cabfb16462b 100644 --- a/share/man/man5/src.conf.5 +++ b/share/man/man5/src.conf.5 @@ -1437,10 +1437,6 @@ bootstrap tool. Do not build .Xr pmccontrol 8 and related programs. -.It Va WITHOUT_PORTSNAP -Do not build or install -.Xr portsnap 8 -and related files. .It Va WITHOUT_PPP Do not build .Xr ppp 8 diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk index d6f6650effd5..8f56f757b60b 100644 --- a/share/mk/src.opts.mk +++ b/share/mk/src.opts.mk @@ -155,7 +155,6 @@ __DEFAULT_YES_OPTIONS = \ PF \ PKGBOOTSTRAP \ PMC \ - PORTSNAP \ PPP \ QUOTAS \ RADIUS_SUPPORT \ diff --git a/targets/pseudo/userland/Makefile.depend b/targets/pseudo/userland/Makefile.depend index 19e3d754cffa..b933b54dd26c 100644 --- a/targets/pseudo/userland/Makefile.depend +++ b/targets/pseudo/userland/Makefile.depend @@ -645,9 +645,6 @@ DIRDEPS+= \ usr.sbin/pmccontrol \ usr.sbin/pmcstat \ usr.sbin/pmcstudy \ - usr.sbin/portsnap/make_index \ - usr.sbin/portsnap/phttpget \ - usr.sbin/portsnap/portsnap \ usr.sbin/powerd \ usr.sbin/ppp \ usr.sbin/pppctl \ diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc index 0d19eab23c8e..9c7e40ee563a 100644 --- a/tools/build/mk/OptionalObsoleteFiles.inc +++ b/tools/build/mk/OptionalObsoleteFiles.inc @@ -2025,7 +2025,7 @@ OLD_FILES+=usr/share/man/man5/freebsd-update.conf.5.gz OLD_FILES+=usr/share/man/man8/freebsd-update.8.gz .endif -.if ${MK_FREEBSD_UPDATE} == no && ${MK_PORTSNAP} == no +.if ${MK_FREEBSD_UPDATE} == no OLD_FILES+=usr/libexec/phttpget OLD_FILES+=usr/share/man/man8/phttpget.8.gz .endif @@ -6843,14 +6843,6 @@ OLD_FILES+=usr/share/man/man8/pmcstat.8.gz OLD_FILES+=usr/share/man/man8/pmcstudy.8.gz .endif -.if ${MK_PORTSNAP} == no -OLD_FILES+=etc/portsnap.conf -OLD_FILES+=usr/libexec/make_index -OLD_FILES+=usr/sbin/portsnap -OLD_FILES+=usr/share/examples/etc/portsnap.conf -OLD_FILES+=usr/share/man/man8/portsnap.8.gz -.endif - .if ${MK_PPP} == no OLD_FILES+=etc/newsyslog.conf.d/ppp.conf OLD_FILES+=etc/ppp/ppp.conf diff --git a/tools/build/options/WITHOUT_PORTSNAP b/tools/build/options/WITHOUT_PORTSNAP deleted file mode 100644 index 8b023fd65251..000000000000 --- a/tools/build/options/WITHOUT_PORTSNAP +++ /dev/null @@ -1,4 +0,0 @@ -.\" $FreeBSD$ -Do not build or install -.Xr portsnap 8 -and related files. diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile index e2f382303d6e..9fa1dc05a1cc 100644 --- a/usr.sbin/Makefile +++ b/usr.sbin/Makefile @@ -187,7 +187,6 @@ SUBDIR.${MK_OPENSSL_KTLS}+= rpc.tlsservd SUBDIR.${MK_PF}+= ftp-proxy SUBDIR.${MK_PKGBOOTSTRAP}+= pkg SUBDIR.${MK_PMC}+= pmc pmcannotate pmccontrol pmcstat pmcstudy -SUBDIR.${MK_PORTSNAP}+= portsnap SUBDIR.${MK_PPP}+= ppp SUBDIR.${MK_QUOTAS}+= edquota SUBDIR.${MK_QUOTAS}+= quotaon diff --git a/usr.sbin/portsnap/Makefile b/usr.sbin/portsnap/Makefile deleted file mode 100644 index 169befd6e726..000000000000 --- a/usr.sbin/portsnap/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# $FreeBSD$ - -SUBDIR= portsnap make_index - -.include <bsd.subdir.mk> diff --git a/usr.sbin/portsnap/Makefile.inc b/usr.sbin/portsnap/Makefile.inc deleted file mode 100644 index 5f6527edb373..000000000000 --- a/usr.sbin/portsnap/Makefile.inc +++ /dev/null @@ -1,5 +0,0 @@ -# $FreeBSD$ - -LIBEXECDIR?= /usr/libexec - -.include "../Makefile.inc" diff --git a/usr.sbin/portsnap/make_index/Makefile b/usr.sbin/portsnap/make_index/Makefile deleted file mode 100644 index 92e91450e4fd..000000000000 --- a/usr.sbin/portsnap/make_index/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -# $FreeBSD$ - -PROG= make_index -MAN= - -BINDIR= ${LIBEXECDIR} - -.include <bsd.prog.mk> diff --git a/usr.sbin/portsnap/make_index/Makefile.depend b/usr.sbin/portsnap/make_index/Makefile.depend deleted file mode 100644 index 8d409f5263ac..000000000000 --- a/usr.sbin/portsnap/make_index/Makefile.depend +++ /dev/null @@ -1,16 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! - -DIRDEPS = \ - include \ - include/xlocale \ - lib/${CSU_DIR} \ - lib/libc \ - lib/libcompiler_rt \ - - -.include <dirdeps.mk> - -.if ${DEP_RELDIR} == ${_DEP_RELDIR} -# local dependencies - needed for -jN in clean tree -.endif diff --git a/usr.sbin/portsnap/make_index/make_index.c b/usr.sbin/portsnap/make_index/make_index.c deleted file mode 100644 index 642404b63605..000000000000 --- a/usr.sbin/portsnap/make_index/make_index.c +++ /dev/null @@ -1,515 +0,0 @@ -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright 2005 Colin Percival - * All rights reserved - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted providing that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - -#include <err.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -struct port; - -typedef union { - char * name; - struct port * p; -} DEP; - -typedef struct port { - char * pkgname; - char * portdir; - char * prefix; - char * comment; - char * pkgdescr; - char * maintainer; - char * categories; - size_t n_edep; - DEP * edep; - size_t n_pdep; - DEP * pdep; - size_t n_fdep; - DEP * fdep; - size_t n_bdep; - DEP * bdep; - size_t n_rdep; - DEP * rdep; - char * www; - int recursed; -} PORT; - -static void usage(void); -static char * strdup2(const char *str); -static DEP * makelist(char * str, size_t * n); -static PORT * portify(char * line); -static int portcompare(char * a, char * b); -static void heapifyports(PORT **pp, size_t size, size_t pos); -static PORT * findport(PORT ** pp, size_t st, size_t en, char * name, char * from); -static void translateport(PORT ** pp, size_t pplen, PORT * p); -static DEP * recurse_one(DEP * d, size_t * nd); -static void recurse(PORT * p); -static void heapifypkgs(DEP * d, size_t size, size_t pos); -static void sortpkgs(DEP * d, size_t nd); -static void printport(PORT * p); - -static void -usage(void) -{ - - fprintf(stderr, "usage: make_index file\n"); - exit(1); - /* NOTREACHED */ -} - -static char * -strdup2(const char *str) -{ - char * r; - - r = strdup(str); - if (r == NULL) - err(1, "strdup"); - return r; -} - -/* Take a space-separated list and return an array of (char *) */ -static DEP * -makelist(char * str, size_t * n) -{ - DEP * d; - size_t i; - - /* No depends at all? */ - if (str[0] == 0) { - *n = 0; - return NULL; - } - - /* Count the number of fields */ - *n = 1; - for (i = 0; str[i] != 0; i++) - if (str[i] == ' ') - (*n)++; - - /* Allocate and fill an array */ - d = malloc(*n * sizeof(DEP)); - if (d == NULL) - err(1, "malloc(DEP)"); - for (i = 0; i < *n; i++) { - d[i].name = strdup2(strsep(&str, " ")); - - /* Strip trailing slashes */ - if (d[i].name[strlen(d[i].name) - 1] == '/') - d[i].name[strlen(d[i].name) - 1] = 0; - } - - return d; -} - -/* Take a port's describe line and split it into fields */ -static PORT * -portify(char * line) -{ - PORT * p; - size_t i, n; - - /* Verify that line has the right number of fields */ - for (n = i = 0; line[i] != 0; i++) - if (line[i] == '|') - n++; - if (n != 12) - errx(1, "Port describe line is corrupt:\n%s\n", line); - - p = malloc(sizeof(PORT)); - if (p == NULL) - err(1, "malloc(PORT)"); - - p->pkgname = strdup2(strsep(&line, "|")); - p->portdir = strdup2(strsep(&line, "|")); - p->prefix = strdup2(strsep(&line, "|")); - p->comment = strdup2(strsep(&line, "|")); - p->pkgdescr = strdup2(strsep(&line, "|")); - p->maintainer = strdup2(strsep(&line, "|")); - p->categories = strdup2(strsep(&line, "|")); - p->edep = makelist(strsep(&line, "|"), &p->n_edep); - p->pdep = makelist(strsep(&line, "|"), &p->n_pdep); - p->fdep = makelist(strsep(&line, "|"), &p->n_fdep); - p->bdep = makelist(strsep(&line, "|"), &p->n_bdep); - p->rdep = makelist(strsep(&line, "|"), &p->n_rdep); - p->www = strdup2(strsep(&line, "|")); - - p->recursed = 0; - - /* - * line will now be equal to NULL -- we counted the field - * separators at the top of the function. - */ - - return p; -} - -/* Returns -1, 0, or 1 based on a comparison of the portdir strings */ -static int -portcompare(char * a, char * b) -{ - size_t i; - - /* Find first non-matching position */ - for (i = 0; ; i++) { - if (a[i] != b[i]) - break; - if (a[i] == 0) /* End of strings */ - return 0; - } - - /* One string is a prefix of the other */ - if (a[i] == 0) - return -1; - if (b[i] == 0) - return 1; - - /* One string has a category which is a prefix of the other */ - if (a[i] == '/') - return -1; - if (b[i] == '/') - return 1; - - /* The two strings are simply different */ - if (a[i] < b[i]) - return -1; - else - return 1; -} - -/* Heapify (PORT *) number pos in a pseudo-heap pp[0]..pp[size - 1] */ -static void -heapifyports(PORT **pp, size_t size, size_t pos) -{ - size_t i = pos; - PORT * tmp; - -top: - /* Find the largest value out of {pos, 2*pos+1, 2*pos+2} */ - if ((2 * pos + 1 < size) && - (portcompare(pp[i]->portdir, pp[2 * pos + 1]->portdir) < 0)) - i = 2 * pos + 1; - if ((2 * pos + 2 < size) && - (portcompare(pp[i]->portdir, pp[2 * pos + 2]->portdir) < 0)) - i = 2 * pos + 2; - - /* If necessary, swap elements and iterate down the tree. */ - if (i != pos) { - tmp = pp[pos]; - pp[pos] = pp[i]; - pp[i] = tmp; - pos = i; - goto top; - } -} - -/* Translate a port directory name into a (PORT *), and free the name */ -static PORT * -findport(PORT ** pp, size_t st, size_t en, char * name, char * from) -{ - size_t mid; - int r; - - if (st == en) - errx(1, "%s: no entry for %s", from, name); - - mid = (st + en) / 2; - r = portcompare(pp[mid]->portdir, name); - - if (r == 0) { - free(name); - return pp[mid]; - } else if (r < 0) - return findport(pp, mid + 1, en, name, from); - else - return findport(pp, st, mid, name, from); -} - -/* Translate all depends from names into PORT *s */ -static void -translateport(PORT ** pp, size_t pplen, PORT * p) -{ - size_t i; - - for (i = 0; i < p->n_edep; i++) - p->edep[i].p = findport(pp, 0, pplen, p->edep[i].name, p->portdir); - for (i = 0; i < p->n_pdep; i++) - p->pdep[i].p = findport(pp, 0, pplen, p->pdep[i].name, p->portdir); - for (i = 0; i < p->n_fdep; i++) - p->fdep[i].p = findport(pp, 0, pplen, p->fdep[i].name, p->portdir); - for (i = 0; i < p->n_bdep; i++) - p->bdep[i].p = findport(pp, 0, pplen, p->bdep[i].name, p->portdir); - for (i = 0; i < p->n_rdep; i++) - p->rdep[i].p = findport(pp, 0, pplen, p->rdep[i].name, p->portdir); -} - -/* Recurse on one specific depends list */ -static DEP * -recurse_one(DEP * d, size_t * nd) -{ - size_t i, j, k, n, N; - - N = n = *nd; - for (i = 0; i < n; i++) { - recurse(d[i].p); - for (j = 0; j < d[i].p->n_rdep; j++) { - for (k = 0; k < N; k++) { - if (d[i].p->rdep[j].p == d[k].p) - break; - } - if (k == N) { - N++; - if (N >= *nd) { - *nd += *nd; - d = realloc(d, *nd * sizeof(DEP)); - if (d == NULL) - err(1, "realloc(d)"); - } - d[k].p = d[i].p->rdep[j].p; - } - } - } - *nd = N; - - return d; -} - -/* Recurse on the depends lists */ -static void -recurse(PORT * p) -{ - switch (p->recursed) { - case 0: - /* First time we've seen this port */ - p->recursed = 1; - break; - case 1: - /* We're in the middle of recursing this port */ - errx(1, "Circular dependency loop found: %s" - " depends upon itself.\n", p->pkgname); - case 2: - /* This port has already been recursed */ - return; - } - - p->edep = recurse_one(p->edep, &p->n_edep); - p->pdep = recurse_one(p->pdep, &p->n_pdep); - p->fdep = recurse_one(p->fdep, &p->n_fdep); - p->bdep = recurse_one(p->bdep, &p->n_bdep); - p->rdep = recurse_one(p->rdep, &p->n_rdep); - - /* Finished recursing on this port */ - p->recursed = 2; -} - -/* Heapify an element in a package list */ -static void -heapifypkgs(DEP * d, size_t size, size_t pos) -{ - size_t i = pos; - PORT * tmp; - -top: - /* Find the largest value out of {pos, 2*pos+1, 2*pos+2} */ - if ((2 * pos + 1 < size) && - (strcmp(d[i].p->pkgname, d[2 * pos + 1].p->pkgname) < 0)) - i = 2 * pos + 1; - if ((2 * pos + 2 < size) && - (strcmp(d[i].p->pkgname, d[2 * pos + 2].p->pkgname) < 0)) - i = 2 * pos + 2; - - /* If necessary, swap elements and iterate down the tree. */ - if (i != pos) { - tmp = d[pos].p; - d[pos].p = d[i].p; - d[i].p = tmp; - pos = i; - goto top; - } -} - -/* Sort a list of dependent packages in alphabetical order */ -static void -sortpkgs(DEP * d, size_t nd) -{ - size_t i; - PORT * tmp; - - if (nd == 0) - return; - - for (i = nd; i > 0; i--) - heapifypkgs(d, nd, i - 1); /* Build a heap */ - for (i = nd - 1; i > 0; i--) { - tmp = d[0].p; /* Extract elements */ - d[0].p = d[i].p; - d[i].p = tmp; - heapifypkgs(d, i, 0); /* And re-heapify */ - } -} - -/* Output an index line for the given port. */ -static void -printport(PORT * p) -{ - size_t i; - - sortpkgs(p->edep, p->n_edep); - sortpkgs(p->pdep, p->n_pdep); - sortpkgs(p->fdep, p->n_fdep); - sortpkgs(p->bdep, p->n_bdep); - sortpkgs(p->rdep, p->n_rdep); - - printf("%s|%s|%s|%s|%s|%s|%s|", - p->pkgname, p->portdir, p->prefix, p->comment, p->pkgdescr, - p->maintainer, p->categories); - for (i = 0; i < p->n_bdep; i++) - printf("%s%s", i ? " " : "", p->bdep[i].p->pkgname); - printf("|"); - for (i = 0; i < p->n_rdep; i++) - printf("%s%s", i ? " " : "", p->rdep[i].p->pkgname); - printf("|"); - printf("%s|", p->www); - for (i = 0; i < p->n_edep; i++) - printf("%s%s", i ? " " : "", p->edep[i].p->pkgname); - printf("|"); - for (i = 0; i < p->n_pdep; i++) - printf("%s%s", i ? " " : "", p->pdep[i].p->pkgname); - printf("|"); - for (i = 0; i < p->n_fdep; i++) - printf("%s%s", i ? " " : "", p->fdep[i].p->pkgname); - printf("\n"); -} - -/* - * Algorithm: - * 1. Suck in all the data, splitting into fields. - * 1a. If there are no ports, there is no INDEX. - * 2. Sort the ports according to port directory. - * 3. Using a binary search, translate each dependency from a - * port directory name into a pointer to a port. - * 4. Recursively follow dependencies, expanding the lists of - * pointers as needed (using realloc). - * 5. Iterate through the ports, printing them out (remembering - * to list the dependent ports in alphabetical order). - */ - -int -main(int argc, char *argv[]) -{ - FILE * f; - char * line; - size_t linelen; - PORT ** pp; /* Array of pointers to PORTs */ - PORT * tmp; - size_t pplen; /* Allocated size of array */ - size_t i; - - if (argc != 2) - usage(); - if ((f = fopen(argv[1], "r")) == NULL) - err(1, "fopen(%s)", argv[1]); - - pplen = 1024; - if ((pp = malloc(pplen * sizeof(PORT *))) == NULL) - err(1, "malloc(pp)"); - - /* - * 1. Suck in all the data, splitting into fields. - */ - for(i = 0; (line = fgetln(f, &linelen)) != NULL; i++) { - if (line[linelen - 1] != '\n') - errx(1, "Unterminated line encountered"); - line[linelen - 1] = 0; - - /* Enlarge array if needed */ - if (i >= pplen) { - pplen *= 2; - if ((pp = realloc(pp, pplen * sizeof(PORT *))) == NULL) - err(1, "realloc(pp)"); - } - - pp[i] = portify(line); - } - /* Reallocate to the correct size */ - pplen = i; - if ((pp = realloc(pp, pplen * sizeof(PORT *))) == NULL) - err(1, "realloc(pp)"); - - /* Make sure we actually reached the EOF */ - if (!feof(f)) - err(1, "fgetln(%s)", argv[1]); - /* Close the describes file */ - if (fclose(f) != 0) - err(1, "fclose(%s)", argv[1]); - - /* - * 1a. If there are no ports, there is no INDEX. - */ - if (pplen == 0) - return 0; - - /* - * 2. Sort the ports according to port directory. - */ - for (i = pplen; i > 0; i--) - heapifyports(pp, pplen, i - 1); /* Build a heap */ - for (i = pplen - 1; i > 0; i--) { - tmp = pp[0]; /* Extract elements */ - pp[0] = pp[i]; - pp[i] = tmp; - heapifyports(pp, i, 0); /* And re-heapify */ - } - - /* - * 3. Using a binary search, translate each dependency from a - * port directory name into a pointer to a port. - */ - for (i = 0; i < pplen; i++) - translateport(pp, pplen, pp[i]); - - /* - * 4. Recursively follow dependencies, expanding the lists of - * pointers as needed (using realloc). - */ - for (i = 0; i < pplen; i++) - recurse(pp[i]); - - /* - * 5. Iterate through the ports, printing them out (remembering - * to list the dependent ports in alphabetical order). - */ - for (i = 0; i < pplen; i++) - printport(pp[i]); - - return 0; -} diff --git a/usr.sbin/portsnap/portsnap/Makefile b/usr.sbin/portsnap/portsnap/Makefile deleted file mode 100644 index 6acd3f523751..000000000000 --- a/usr.sbin/portsnap/portsnap/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# $FreeBSD$ - -CONFS= portsnap.conf -SCRIPTS=portsnap.sh -MAN= portsnap.8 - -.include <bsd.prog.mk> diff --git a/usr.sbin/portsnap/portsnap/Makefile.depend b/usr.sbin/portsnap/portsnap/Makefile.depend deleted file mode 100644 index f80275d86ab1..000000000000 --- a/usr.sbin/portsnap/portsnap/Makefile.depend +++ /dev/null @@ -1,11 +0,0 @@ -# $FreeBSD$ -# Autogenerated - do NOT edit! *** 1507 LINES SKIPPED ***