From owner-freebsd-ports Wed Jan 17 6: 8:40 2001 Delivered-To: freebsd-ports@freebsd.org Received: from blizzard.sabbo.net (ns.sabbo.net [193.193.218.18]) by hub.freebsd.org (Postfix) with ESMTP id 9AC4337B401; Wed, 17 Jan 2001 06:08:05 -0800 (PST) Received: from vic.sabbo.net ([193.193.218.170]) by blizzard.sabbo.net (8.10.1/8.10.1) with ESMTP id f0HE7q715434; Wed, 17 Jan 2001 16:07:56 +0200 Received: from FreeBSD.org (big_brother.vega.com [192.168.1.1]) by vic.sabbo.net (8.11.1/8.9.3) with ESMTP id f0HE7nr12061; Wed, 17 Jan 2001 16:07:49 +0200 (EET) (envelope-from sobomax@FreeBSD.org) Message-ID: <3A65A73A.7F2F18B7@FreeBSD.org> Date: Wed, 17 Jan 2001 16:07:55 +0200 From: Maxim Sobolev Organization: Vega International Capital X-Mailer: Mozilla 4.76 [en] (WinNT; U) X-Accept-Language: uk,ru,en MIME-Version: 1.0 To: ports@FreeBSD.org, asami@FreeBSD.org, jkh@FreeBSD.org Subject: [RFC] Patch to allow create/install bzip2-compressed packages Content-Type: multipart/mixed; boundary="------------C4E75579AE697BB959F3AA7D" Sender: owner-freebsd-ports@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org This is a multi-part message in MIME format. --------------C4E75579AE697BB959F3AA7D Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 7bit Hi, With this message I'm attaching patches for pkg_install to allow it create/install/operate bzip2-compressed package tarballs. Currently it supports creation of tbz2 packages and installation of those packages from local media (there is intentionally no attempt to provide support for remote tbz2 packages, as it's expected that tgz will remain default and the only net distribution format). I would like to hear comments/suggestions/whatever regarding those patches. -Maxim P.S. You can create bzip2-compressed packages by defining PKG_SUFX=.tbz2 in your /etc/make.conf --------------C4E75579AE697BB959F3AA7D Content-Type: text/plain; charset=koi8-r; name="pkg_install-bzip2.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="pkg_install-bzip2.diff" Index: add/main.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/pkg_install/add/main.c,v retrieving revision 1.30 diff -d -u -r1.30 main.c --- add/main.c 2000/03/13 18:47:48 1.30 +++ add/main.c 2001/01/17 13:56:55 @@ -168,7 +168,7 @@ usage(); } /* Make sure the sub-execs we invoke get found */ - setenv("PATH", "/sbin:/usr/sbin:/bin:/usr/bin", 1); + setenv("PATH", "/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin", 1); /* Set a reasonable umask */ umask(022); Index: create/create.h =================================================================== RCS file: /home/ncvs/src/usr.sbin/pkg_install/create/create.h,v retrieving revision 1.16 diff -d -u -r1.16 create.h --- create/create.h 2000/10/23 07:01:30 1.16 +++ create/create.h 2001/01/17 13:56:55 @@ -41,6 +41,7 @@ extern char PlayPen[]; extern int Dereference; extern int PlistOnly; +extern int UseBzip2; void check_list(char *, Package *); int pkg_perform(char **); Index: create/main.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/pkg_install/create/main.c,v retrieving revision 1.23 diff -d -u -r1.23 main.c --- create/main.c 2001/01/16 08:27:28 1.23 +++ create/main.c 2001/01/17 13:56:55 @@ -18,7 +18,7 @@ #include "lib.h" #include "create.h" -static char Options[] = "YNOhvf:p:P:c:d:i:I:k:K:r:t:X:D:m:s:o:"; +static char Options[] = "YNOhvyf:p:P:c:d:i:I:k:K:r:t:X:D:m:s:o:"; char *Prefix = NULL; char *Comment = NULL; @@ -38,6 +38,7 @@ char PlayPen[FILENAME_MAX]; int Dereference = FALSE; int PlistOnly = FALSE; +int UseBzip2 = FALSE; static void usage __P((void)); @@ -134,6 +135,10 @@ Origin = optarg; break; + case 'y': + UseBzip2 = TRUE; + break; + case '?': default: usage(); @@ -167,7 +172,7 @@ usage() { fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n", -"usage: pkg_create [-YNOhv] [-P pkgs] [-p prefix] [-f contents] [-i iscript]", +"usage: pkg_create [-YNOhvy] [-P pkgs] [-p prefix] [-f contents] [-i iscript]", " [-I piscript] [-k dscript] [-K pdscript] [-r rscript] ", " [-t template] [-X excludefile] [-D displayfile] ", " [-m mtreefile] [-o origin] -c comment -d description ", Index: create/perform.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/pkg_install/create/perform.c,v retrieving revision 1.52 diff -d -u -r1.52 perform.c --- create/perform.c 2001/01/16 08:27:28 1.52 +++ create/perform.c 2001/01/17 13:56:55 @@ -70,14 +70,23 @@ if (len > 4) { if (!strcmp(&pkg[len - 4], ".tgz")) { compress = TRUE; + UseBzip2 = FALSE; pkg[len - 4] = '\0'; } else if (!strcmp(&pkg[len - 4], ".tar")) { compress = FALSE; + UseBzip2 = FALSE; pkg[len - 4] = '\0'; } + else if ((len > 5) && (!strcmp(&pkg[len - 5], ".tbz2"))) { + compress = FALSE; + UseBzip2 = TRUE; + pkg[len - 5] = '\0'; + } } - if (compress) + if (UseBzip2) + suf = "tbz2"; + else if (compress) suf = "tgz"; else suf = "tar"; @@ -225,6 +234,7 @@ int pipefds[2]; FILE *totar; pid_t pid; + char *cname; args[nargs++] = "tar"; /* argv[0] */ @@ -236,8 +246,16 @@ args[nargs++] = "-c"; args[nargs++] = "-f"; args[nargs++] = tball; - if (strchr(suffix, 'z')) /* Compress/gzip? */ - args[nargs++] = "-z"; + if (strchr(suffix, 'z')) { /* Compress/gzip/bzip2? */ + if (UseBzip2) { + args[nargs++] = "-y"; + cname = "bzip"; + } + else { + args[nargs++] = "-z"; + cname = "gzip"; + } + } if (Dereference) args[nargs++] = "-h"; if (ExcludeFrom) { @@ -249,7 +267,7 @@ args[nargs] = NULL; if (Verbose) - printf("Creating gzip'd tar ball in '%s'\n", tball); + printf("Creating %s'd tar ball in '%s'\n", cname, tball); /* Set up a pipe for passing the filenames, and fork off a tar process. */ if (pipe(pipefds) == -1) { Index: create/pkg_create.1 =================================================================== RCS file: /home/ncvs/src/usr.sbin/pkg_install/create/pkg_create.1,v retrieving revision 1.38 diff -d -u -r1.38 pkg_create.1 --- create/pkg_create.1 2000/12/27 15:30:18 1.38 +++ create/pkg_create.1 2001/01/17 13:57:01 @@ -31,7 +31,7 @@ .Nd a utility for creating software package distributions .Sh SYNOPSIS .Nm -.Op Fl YNOhv +.Op Fl YNOhvy .Op Fl P Ar pkgs .Op Fl p Ar prefix .Op Fl f Ar contents @@ -252,6 +252,21 @@ .Em "Ports Collection" . It should be in the form .Pa MASTERCATEGORY/PORTDIR . +.It Fl y +Use +.Xr bzip2 1 +utility to compress package tarball instead of +.Xr gzip 1 . +Please note that this option is no-op if format of the resulting +archive is explicitly specified by the recognizeable suffix of +.Ar pkg-name . +Currently +.Nm +recognizes the following suffixes: +.Dq .tgz , +.Dq .tar +and +.Dq .tbz2 . .El .Pp .Sh PACKING LIST DETAILS Index: lib/file.c =================================================================== RCS file: /home/ncvs/src/usr.sbin/pkg_install/lib/file.c,v retrieving revision 1.45 diff -d -u -r1.45 file.c --- lib/file.c 2000/10/29 15:39:51 1.45 +++ lib/file.c 2001/01/17 13:57:01 @@ -248,6 +248,8 @@ { static char tmp[FILENAME_MAX]; char *cp; + char *suffixes[] = {".tgz", ".tbz2", NULL}; + int i; if (fexists(fname) && isfile(fname)) { strcpy(tmp, fname); @@ -260,24 +262,27 @@ if (cp) { *cp = '\0'; /* chop name */ cp = strrchr(tmp, '/'); - } - if (cp) { - *(cp + 1) = '\0'; - strcat(cp, "All/"); - strcat(cp, fname); - strcat(cp, ".tgz"); - if (fexists(tmp)) - return tmp; } + if (cp) + for (i = 0; suffixes[i] != NULL; i++) { + *(cp + 1) = '\0'; + strcat(cp, "All/"); + strcat(cp, fname); + strcat(cp, suffixes[i]); + if (fexists(tmp)) + return tmp; + } } cp = getenv("PKG_PATH"); while (cp) { char *cp2 = strsep(&cp, ":"); - snprintf(tmp, FILENAME_MAX, "%s/%s.tgz", cp2 ? cp2 : cp, fname); - if (fexists(tmp) && isfile(tmp)) - return tmp; + for (i = 0; suffixes[i] != NULL; i++) { + snprintf(tmp, FILENAME_MAX, "%s/%s%s", cp2 ? cp2 : cp, fname, suffixes[i]); + if (fexists(tmp) && isfile(tmp)) + return tmp; + } } return NULL; } @@ -438,14 +443,18 @@ args[0] = '\0'; /* * Figure out by a crude heuristic whether this or not this is probably - * compressed. + * compressed and whichever compression utility was used (gzip or bzip2). */ if (strcmp(pkg, "-")) { cp = strrchr(pkg, '.'); if (cp) { strcpy(suffix, cp + 1); - if (strchr(suffix, 'z') || strchr(suffix, 'Z')) - strcpy(args, "-z"); + if (strchr(suffix, 'z') || strchr(suffix, 'Z')) { + if (strchr(suffix, 'b')) + strcpy(args, "-y"); + else + strcpy(args, "-z"); + } } } else --------------C4E75579AE697BB959F3AA7D-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-ports" in the body of the message