mirror of
https://github.com/GnoConsortium/gno.git
synced 2024-12-21 07:30:05 +00:00
Checkin of install version 1.2. New to this version is use of GS/OS
sessions, and a verbose flag to print out file names as they are copied.
This commit is contained in:
parent
32ccee5a06
commit
5af9e3b875
@ -1,4 +1,4 @@
|
||||
Copyright 1996-1997 Devin Reade <gdr@myrias.com>.
|
||||
Copyright 1996-1998 Devin Reade <gdr@trenco.gno.org>.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
@ -1,5 +1,5 @@
|
||||
#
|
||||
# $Id: Makefile,v 1.2 1998/03/08 18:18:57 gdr-ftp Exp $
|
||||
# $Id: Makefile,v 1.3 1998/04/24 00:53:59 gdr-ftp Exp $
|
||||
#
|
||||
|
||||
# Don't name this "install"; we change the name later.
|
||||
@ -7,8 +7,8 @@ PROG = inst
|
||||
BINDIR = /usr/bin
|
||||
CUSTOM_RELEASE = true
|
||||
LDADD = -lcontrib
|
||||
OPTIMIZE = 78
|
||||
STACK = 1024
|
||||
OPTIMIZE = -1
|
||||
STACK = 1024 # largest observed is 707 bytes
|
||||
|
||||
.INCLUDE: /src/gno/prog.mk
|
||||
|
||||
|
@ -1,13 +1,15 @@
|
||||
$Id: README,v 1.2 1997/10/30 04:14:21 gdr Exp $
|
||||
$Id: README,v 1.3 1998/04/24 00:54:00 gdr-ftp Exp $
|
||||
|
||||
As the describe file says, install(1) is a utility similar to cp(1),
|
||||
except that it does a few more things and is intended for use in
|
||||
makefiles and scripts.
|
||||
|
||||
To install install, type "dmake doinstall". By default, it places the
|
||||
To install install, type "dmake install". By default, it places the
|
||||
binary in /usr/bin and the man page in /usr/man/man1. If you don't
|
||||
like these locations, either modify the makefile or copy the two files
|
||||
by hand. There are no support files.
|
||||
by hand. There are no support files. [Note: As of v1.1, the
|
||||
assumption is that you're building these files from within the GNO
|
||||
base source hierarchy.]
|
||||
|
||||
As usual, please email me or post to comp.sys.apple2.gno if you
|
||||
encounter problems or bugs.
|
||||
@ -19,6 +21,11 @@ March 1996
|
||||
CHANGE LOG
|
||||
==========
|
||||
|
||||
v1.2 April 1998
|
||||
- Added sessions to (hopefully) speed things up.
|
||||
- Increased to use optimization level -1. It seems to work.
|
||||
- Added the -V (verbose) flag.
|
||||
|
||||
v1.1 August 1997
|
||||
- Incorporated install(1) into base GNO v2.0.6 distribution
|
||||
- Use the GNO v2.0.6 libcontrib library
|
||||
@ -27,4 +34,4 @@ v1.1 August 1997
|
||||
usual UNIX usage.
|
||||
|
||||
v1.0 March 1996
|
||||
Initial Version
|
||||
- Initial Version
|
||||
|
@ -1,8 +1,8 @@
|
||||
.\" Copyright 1996-1997 Devin Reade <gdr@myrias.com>
|
||||
.\" Copyright 1996-1997 Devin Reade <gdr@trenco.gno.org>.
|
||||
.\"
|
||||
.\" $Id: inst.1,v 1.2 1997/10/30 04:14:21 gdr Exp $
|
||||
.\" $Id: inst.1,v 1.3 1998/04/24 00:54:02 gdr-ftp Exp $
|
||||
.\"
|
||||
.TH INSTALL 1 "16 October 1997" GNO "Commands and Applications"
|
||||
.TH INSTALL 1 "23 April 1998" GNO "Commands and Applications"
|
||||
.SH NAME
|
||||
install \- copy files and set their attributes
|
||||
.SH SYNOPSIS
|
||||
@ -99,14 +99,27 @@ may also be numeric user ID.
|
||||
Strip the symbol tables from the installed programs.
|
||||
.sp
|
||||
\fBThis is currently ignored under GNO.\fR
|
||||
.IP \fB-V\fR
|
||||
Verbose output;
|
||||
.BR install
|
||||
will print out the name of each file or directory as it is created.
|
||||
.IP \fB-v\fR
|
||||
Show version number.
|
||||
.SH BUGS
|
||||
When installing multiple files into a directory and the
|
||||
.BR -V
|
||||
flag is given, the respective file names are printed
|
||||
.I after
|
||||
the file has been copied, rather than before. This was done since the
|
||||
final file name is known only after the copying subroutine has returned.
|
||||
While the name could be determined prior to the copy, this extra work
|
||||
was left out for efficiency reasons.
|
||||
.SH VERSION
|
||||
This manual page documents
|
||||
.BR install
|
||||
version 1.1.
|
||||
version 1.2.
|
||||
.SH AUTHOR
|
||||
Devin Reade <gdr@eddore.myrias.com>
|
||||
Devin Reade <gdr@trenco.gno.org>.
|
||||
.SH "SEE ALSO"
|
||||
.BR cp (1)
|
||||
.BR chmod (2).
|
||||
|
@ -1,13 +1,16 @@
|
||||
/*
|
||||
* Copyright 1996-1997 Devin Reade <gdr@myrias.com>.
|
||||
* Copyright 1996-1997 Devin Reade <gdr@trenco.gno.org>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For copying and distribution information, see the file "COPYING"
|
||||
* accompanying this file.
|
||||
*
|
||||
* $Id: inst.c,v 1.4 1998/03/08 18:18:58 gdr-ftp Exp $
|
||||
* $Id: inst.c,v 1.5 1998/04/24 00:54:03 gdr-ftp Exp $
|
||||
*/
|
||||
|
||||
#define VERSION "1.2"
|
||||
#define EMAIL "<gdr@trenco.gno.org>"
|
||||
|
||||
#define __USE_DYNAMIC_GSSTRING__
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -40,23 +43,8 @@
|
||||
#define S_WRITE 0222
|
||||
#define S_EXECUTE 0111
|
||||
|
||||
#define VERSION "1.1"
|
||||
#define EMAIL "<gdr@myrias.com>"
|
||||
|
||||
char *versionMsg = "Version %s by Devin Reade %s\n";
|
||||
int dFlag;
|
||||
|
||||
#ifdef __STACK_CHECK__
|
||||
/*
|
||||
* printStack
|
||||
*
|
||||
* prints stack usage (debugging only)
|
||||
*/
|
||||
static void
|
||||
printStack (void) {
|
||||
fprintf(stderr, "stack usage: %d bytes\n", _endStackCheck());
|
||||
}
|
||||
#endif
|
||||
int dFlag, verbose;
|
||||
|
||||
/*
|
||||
* usage
|
||||
@ -67,7 +55,7 @@ printStack (void) {
|
||||
void
|
||||
usage(void)
|
||||
{
|
||||
fputs("Usage: install [-cdhsv] [-o owner] [-g group] [-m mode] ", stderr);
|
||||
fputs("Usage: install [-cdhsvV] [-o owner] [-g group] [-m mode] ", stderr);
|
||||
fputs("source [...] dest\n\n", stderr);
|
||||
fputs("Options:\n", stderr);
|
||||
fputs("\t-c Ignored. (Backwards Unix compatibility)\n", stderr);
|
||||
@ -77,6 +65,8 @@ usage(void)
|
||||
fputs("\t-m mode Specify (Unix) access mode\n", stderr);
|
||||
fputs("\t-o owner Specify owner id (not implemented)\n", stderr);
|
||||
fputs("\t-s Strip binary (not implemented)\n", stderr);
|
||||
fputs("\t-V Print each file as it is created (verbose).\n",
|
||||
stderr);
|
||||
fputs("\t-v Show version number\n\n", stderr);
|
||||
fprintf(stderr, versionMsg, VERSION, EMAIL);
|
||||
exit(1);
|
||||
@ -252,11 +242,16 @@ mkdirs(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* go ahead and create the directory */
|
||||
if (makeit && mkdir(path)) {
|
||||
if (makeit) {
|
||||
if (verbose) {
|
||||
fprintf(stderr, "%s\n", path);
|
||||
}
|
||||
if (mkdir(path)) {
|
||||
warn("couldn't create directory %s", path);
|
||||
abortpath = 1;
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
/* reinstate the ':' that we "nulled-out" */
|
||||
if (p != path + pathlen) {
|
||||
*p++ = ':';
|
||||
@ -288,8 +283,11 @@ copyfiles(int argc, char **argv, int action, mode_t mode)
|
||||
{
|
||||
static FileInfoRecGS inforec;
|
||||
GSStringPtr src, dest, newname;
|
||||
int total, i, result;
|
||||
int total, i, result, printWhen;
|
||||
unsigned short flags;
|
||||
#define PRINT_NEVER 0 /* used for printWhen (verbose mode) */
|
||||
#define PRINT_BEFORE 1
|
||||
#define PRINT_AFTER 2
|
||||
|
||||
static const char *nodup = "couldn't duplicate %s file name \"%s\"";
|
||||
|
||||
@ -301,8 +299,8 @@ copyfiles(int argc, char **argv, int action, mode_t mode)
|
||||
flags = LC_COPY_DATA | LC_COPY_REZ | LC_COPY_KEEPBUF;
|
||||
|
||||
/* duplicate the destination name */
|
||||
if ((dest = __C2GSMALLOC(argv[argc - 1])) == NULL) {
|
||||
err(1, nodup, "destination", argv[argc - 1]);
|
||||
if ((dest = __C2GSMALLOC(argv[total])) == NULL) {
|
||||
err(1, nodup, "destination", argv[total]);
|
||||
/*NOTREACHED*/
|
||||
}
|
||||
|
||||
@ -327,7 +325,15 @@ copyfiles(int argc, char **argv, int action, mode_t mode)
|
||||
}
|
||||
|
||||
/* copy each file */
|
||||
if (verbose) {
|
||||
printWhen = (argc == 2) ? PRINT_BEFORE : PRINT_AFTER;
|
||||
} else {
|
||||
printWhen = PRINT_NEVER;
|
||||
}
|
||||
for (i=0; i<total; i++) {
|
||||
if (printWhen == PRINT_BEFORE) {
|
||||
fprintf(stderr, "%s\n", argv[total]);
|
||||
}
|
||||
if ((src = __C2GSMALLOC(argv[i])) == NULL) {
|
||||
err(1, nodup, "source", argv[i]);
|
||||
/*NOTREACHED*/
|
||||
@ -336,8 +342,11 @@ copyfiles(int argc, char **argv, int action, mode_t mode)
|
||||
if (newname == NULL) {
|
||||
result = errno;
|
||||
warn("install of %s to %s failed", argv[i],
|
||||
argv[argc-1]);
|
||||
argv[total]);
|
||||
} else {
|
||||
if (printWhen == PRINT_AFTER) {
|
||||
fprintf(stderr, "%s\n", newname->text);
|
||||
}
|
||||
if (action & ACTION_CHANGE_MODE) {
|
||||
if (chmod(newname->text, mode) < 0) {
|
||||
result = errno;
|
||||
@ -363,10 +372,7 @@ main(int argc, char **argv)
|
||||
int c, nfiles;
|
||||
int action = 0;
|
||||
|
||||
#ifdef __STACK_CHECK__
|
||||
_beginStackCheck();
|
||||
atexit(printStack);
|
||||
#endif
|
||||
__REPORT_STACK();
|
||||
|
||||
if (needsgno() == 0) {
|
||||
errx(1, "requires GNO");
|
||||
@ -377,7 +383,7 @@ main(int argc, char **argv)
|
||||
newmode = 0L;
|
||||
|
||||
/* parse command line */
|
||||
while ((c = getopt(argc, argv, "cdg:hm:o:sv")) != EOF) {
|
||||
while ((c = getopt(argc, argv, "cdg:hm:o:svV")) != EOF) {
|
||||
switch (c) {
|
||||
case 'v':
|
||||
errx(1, versionMsg, VERSION, EMAIL);
|
||||
@ -391,6 +397,10 @@ main(int argc, char **argv)
|
||||
}
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
verbose=1;
|
||||
break;
|
||||
|
||||
case 'd': dFlag++;
|
||||
case 'c': /* not implemented */
|
||||
case 'g': /* not implemented */
|
||||
@ -404,6 +414,30 @@ main(int argc, char **argv)
|
||||
}
|
||||
|
||||
nfiles = argc - optind;
|
||||
#if 1
|
||||
if (nfiles < (dFlag ? 1 : 2)) {
|
||||
usage();
|
||||
}
|
||||
|
||||
c = 0; /* using c as a temp variable */
|
||||
BeginSessionGS(&c);
|
||||
if (_toolErr) {
|
||||
errno = _mapErr(_toolErr);
|
||||
err(EXIT_FAILURE, "BeginSessionGS failed (0x%x)", _toolErr);
|
||||
}
|
||||
if (dFlag) {
|
||||
c = mkdirs(nfiles, &argv[optind]);
|
||||
} else {
|
||||
/* ignore new user and group for now */
|
||||
c = copyfiles(nfiles, &argv[optind], action, newmode);
|
||||
}
|
||||
action = 0; /* using action as a temp variable */
|
||||
EndSessionGS(&action);
|
||||
if (_toolErr) {
|
||||
errno = _mapErr(_toolErr);
|
||||
err(EXIT_FAILURE, "EndSessionGS failed (0x%x)", _toolErr);
|
||||
}
|
||||
#else
|
||||
|
||||
if (dFlag) {
|
||||
if (nfiles < 1) {
|
||||
@ -417,7 +451,7 @@ main(int argc, char **argv)
|
||||
/* ignore new user and group for now */
|
||||
c = copyfiles(nfiles, &argv[optind], action, newmode);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
return c;
|
||||
}
|
||||
|
@ -1,10 +1,10 @@
|
||||
Name: install
|
||||
Version: 1.1 (16 Oct 97)
|
||||
Version: 1.2 (23 Apr 98)
|
||||
Shell: GNO
|
||||
Author: Devin Reade
|
||||
Contact: gdr@eddore.myrias.com
|
||||
Contact: gdr@trenco.gno.org
|
||||
Where: /usr/bin
|
||||
FTP: apple2.caltech.edu, ground.isca.uiowa.edu, trenco.myrias.com
|
||||
FTP: ftp.gno.org
|
||||
|
||||
Install is similar to cp(1) in that it copies files. It will also create
|
||||
directory hierarchies, modify certain access bits, and convert TXT or SRC
|
||||
|
@ -1,11 +1,11 @@
|
||||
/*
|
||||
* Copyright 1996-1997 Devin Reade <gdr@myrias.com>.
|
||||
* Copyright 1996-1997 Devin Reade <gdr@trenco.gno.org>.
|
||||
* All rights reserved.
|
||||
*
|
||||
* For copying and distribution information, see the file "COPYING"
|
||||
* accompanying this file.
|
||||
*
|
||||
* $Id: inst.rez,v 1.3 1998/03/08 18:19:00 gdr-ftp Exp $
|
||||
* $Id: inst.rez,v 1.4 1998/04/24 00:54:06 gdr-ftp Exp $
|
||||
*/
|
||||
|
||||
#include "Types.Rez"
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
resource rVersion (0x1, purgeable3, nocrossbank) {
|
||||
|
||||
{ 1, 1, 0, /* version 1.1.0 */
|
||||
{ 1, 2, 0, /* version; also in inst.c and inst.desc */
|
||||
release, /* development|alpha|beta|final|release */
|
||||
0 /* non-final release number */
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user