mirror of
https://github.com/coreutils/coreutils.git
synced 2024-11-27 12:04:25 +08:00
New program: arch
* NEWS: Mention arch. * README: Add arch to the list of programs. * AUTHORS: Add arch. * src/uname.c: Include "uname.h". (PROGRAM_NAME): Handle arch, too. (ARCH_AUTHORS): Define. (uname_long_options, arch_long_options): Renamed and new globals. (usage): Handle arch-mode as well as uname-mode. (decode_switches): New function, extracted from main, to handle arch-mode as well as uname-mode. (main): Handle both modes. * src/uname-arch.c: New program, alias for "uname -m". * src/uname-uname.c: New file, default uname mode. * src/uname.h: New file, uname modes. * src/Makefile.am (EXTRA_PROGRAMS): Add arch. (uname_SOURCES, arch_SOURCES): Define. * man/arch.x: New file. * man/Makefile.am (dist_man_MANS): Add arch.1. (arch.1): New dependency. * tests/misc/arch: New test, compare "arch" with "uname -m" * configure.ac (OPTIONAL_BIN_PROGS): Add arch. (MAN): Add arch.1. * .x-sc_require_config_h: Exempt uname-arch.c and uname-uname.c from the always-include-<config.h> rule. Signed-off-by: Karel Zak <kzak@redhat.com> Signed-off-by: Jim Meyering <jim@meyering.net>
This commit is contained in:
parent
33342c1a0a
commit
264021699c
@ -26,3 +26,5 @@
|
||||
^src/ls-vdir\.c$
|
||||
^src/rand-isaac\.c$
|
||||
^src/tac-pipe\.c$
|
||||
^src/uname-arch\.c$
|
||||
^src/uname-uname\.c$
|
||||
|
1
AUTHORS
1
AUTHORS
@ -1,6 +1,7 @@
|
||||
Here are the names of the programs in this package,
|
||||
each followed by the name(s) of its author(s).
|
||||
|
||||
arch: David MacKenzie, Karel Zak
|
||||
base64: Simon Josefsson
|
||||
basename: FIXME unknown
|
||||
cat: Torbjorn Granlund, Richard M. Stallman
|
||||
|
28
ChangeLog
28
ChangeLog
@ -1,3 +1,31 @@
|
||||
2007-07-10 Karel Zak <kzak@redhat.com>
|
||||
|
||||
New program: arch
|
||||
* NEWS: Mention arch.
|
||||
* README: Add arch to the list of programs.
|
||||
* AUTHORS: Add arch.
|
||||
* src/uname.c: Include "uname.h".
|
||||
(PROGRAM_NAME): Handle arch, too.
|
||||
(ARCH_AUTHORS): Define.
|
||||
(uname_long_options, arch_long_options): Renamed and new globals.
|
||||
(usage): Handle arch-mode as well as uname-mode.
|
||||
(decode_switches): New function, extracted from main,
|
||||
to handle arch-mode as well as uname-mode.
|
||||
(main): Handle both modes.
|
||||
* src/uname-arch.c: New program, alias for "uname -m".
|
||||
* src/uname-uname.c: New file, default uname mode.
|
||||
* src/uname.h: New file, uname modes.
|
||||
* src/Makefile.am (EXTRA_PROGRAMS): Add arch.
|
||||
(uname_SOURCES, arch_SOURCES): Define.
|
||||
* man/arch.x: New file.
|
||||
* man/Makefile.am (dist_man_MANS): Add arch.1.
|
||||
(arch.1): New dependency.
|
||||
* tests/misc/arch: New test, compare "arch" with "uname -m"
|
||||
* configure.ac (OPTIONAL_BIN_PROGS): Add arch.
|
||||
(MAN): Add arch.1.
|
||||
* .x-sc_require_config_h: Exempt uname-arch.c and uname-uname.c
|
||||
from the always-include-<config.h> rule.
|
||||
|
||||
2007-07-10 Jim Meyering <jim@meyering.net>
|
||||
|
||||
Change "version 2" to "version 3" in all copyright notices.
|
||||
|
4
NEWS
4
NEWS
@ -2,6 +2,10 @@ GNU coreutils NEWS -*- outline -*-
|
||||
|
||||
* Noteworthy changes in release 6.9+ (????-??-??) [stable]
|
||||
|
||||
** New programs
|
||||
|
||||
arch: equivalent to uname -m
|
||||
|
||||
** Changes in behavior
|
||||
|
||||
pr -F no longer suppresses the footer or the first two blank lines in
|
||||
|
2
README
2
README
@ -7,7 +7,7 @@ arbitrary limits.
|
||||
|
||||
The programs that can be built with this package are:
|
||||
|
||||
[ base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
|
||||
[ arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp
|
||||
csplit cut date dd df dir dircolors dirname du echo env expand expr
|
||||
factor false fmt fold groups head hostid hostname id install join
|
||||
kill link ln logname ls md5sum mkdir mkfifo mknod mv nice nl nohup
|
||||
|
@ -42,8 +42,8 @@ coreutils_MACROS
|
||||
AC_FUNC_FORK
|
||||
|
||||
AC_CHECK_FUNCS(uname,
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS uname\$(EXEEXT)"
|
||||
MAN="$MAN uname.1")
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS arch\$(EXEEXT) uname\$(EXEEXT)"
|
||||
MAN="$MAN arch.1 uname.1")
|
||||
AC_CHECK_FUNCS(chroot,
|
||||
OPTIONAL_BIN_PROGS="$OPTIONAL_BIN_PROGS chroot\$(EXEEXT)"
|
||||
MAN="$MAN chroot.1")
|
||||
|
@ -35,6 +35,7 @@
|
||||
|
||||
@dircategory Individual utilities
|
||||
@direntry
|
||||
* arch: (coreutils)arch invocation. Print machine hardware name.
|
||||
* base64: (coreutils)base64 invocation. Base64 encode/decode data.
|
||||
* basename: (coreutils)basename invocation. Strip directory and suffix.
|
||||
* cat: (coreutils)cat invocation. Concatenate and write files.
|
||||
@ -396,6 +397,7 @@ User information
|
||||
|
||||
System context
|
||||
|
||||
* arch invocation:: Print machine hardware name
|
||||
* date invocation:: Print or set system date and time
|
||||
* uname invocation:: Print system information
|
||||
* hostname invocation:: Print or set system name
|
||||
@ -12336,6 +12338,7 @@ This section describes commands that print or change system-wide
|
||||
information.
|
||||
|
||||
@menu
|
||||
* arch invocation:: Print machine hardware name.
|
||||
* date invocation:: Print or set system date and time.
|
||||
* uname invocation:: Print system information.
|
||||
* hostname invocation:: Print or set system name.
|
||||
@ -12968,6 +12971,26 @@ date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z"
|
||||
@end itemize
|
||||
|
||||
|
||||
@node arch invocation
|
||||
@section @command{arch}: Print machine hardware name
|
||||
|
||||
@pindex arch
|
||||
@cindex print machine hardware name
|
||||
@cindex system information, printing
|
||||
|
||||
@command{arch} prints the machine hardware name,
|
||||
and is equivalent to @samp{uname -m}.
|
||||
Synopsis:
|
||||
|
||||
@example
|
||||
arch [@var{option}]
|
||||
@end example
|
||||
|
||||
The program accepts the @ref{Common options} only.
|
||||
|
||||
@exitstatus
|
||||
|
||||
|
||||
@node uname invocation
|
||||
@section @command{uname}: Print system information
|
||||
|
||||
|
@ -32,7 +32,7 @@ dist_man_MANS = \
|
||||
tty.1 unexpand.1 uniq.1 unlink.1 vdir.1 wc.1 \
|
||||
whoami.1 yes.1 $(MAN)
|
||||
optional_mans = \
|
||||
chroot.1 hostid.1 nice.1 pinky.1 stty.1 uname.1 uptime.1 users.1 who.1
|
||||
arch.1 chroot.1 hostid.1 nice.1 pinky.1 stty.1 uname.1 uptime.1 users.1 who.1
|
||||
|
||||
|
||||
man_aux = $(dist_man_MANS:.1=.x) $(optional_mans:.1=.x)
|
||||
@ -43,6 +43,9 @@ MAINTAINERCLEANFILES = $(dist_man_MANS)
|
||||
# Depend on configure.ac to get version number changes.
|
||||
common_dep = $(top_srcdir)/configure.ac
|
||||
|
||||
# Note that arch depends on uname.c
|
||||
arch.1: $(common_dep) $(srcdir)/arch.x ../src/uname.c
|
||||
|
||||
base64.1: $(common_dep) $(srcdir)/base64.x ../src/base64.c
|
||||
basename.1: $(common_dep) $(srcdir)/basename.x ../src/basename.c
|
||||
cat.1: $(common_dep) $(srcdir)/cat.x ../src/cat.c
|
||||
|
6
man/arch.x
Normal file
6
man/arch.x
Normal file
@ -0,0 +1,6 @@
|
||||
[NAME]
|
||||
arch \- print machine hardware name (same as uname -m)
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
[SEE ALSO]
|
||||
uname(1), uname(2)
|
@ -3,4 +3,4 @@ uname \- print system information
|
||||
[DESCRIPTION]
|
||||
.\" Add any additional description here
|
||||
[SEE ALSO]
|
||||
uname(2)
|
||||
arch(1), uname(2)
|
||||
|
@ -16,7 +16,8 @@
|
||||
## along with this program; if not, write to the Free Software Foundation,
|
||||
## Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
EXTRA_PROGRAMS = chroot df hostid nice pinky stty su uname uptime users who
|
||||
EXTRA_PROGRAMS = chroot df hostid nice pinky stty su uname uptime users who \
|
||||
arch
|
||||
|
||||
bin_SCRIPTS = groups
|
||||
bin_PROGRAMS = [ chcon chgrp chown chmod cp dd dircolors du \
|
||||
@ -44,7 +45,8 @@ noinst_HEADERS = \
|
||||
remove.h \
|
||||
system.h \
|
||||
wheel-size.h \
|
||||
wheel.h
|
||||
wheel.h \
|
||||
uname.h
|
||||
|
||||
EXTRA_DIST = dcgen dircolors.hin tac-pipe.c \
|
||||
groups.sh wheel-gen.pl extract-magic c99-to-c89.diff
|
||||
@ -203,6 +205,9 @@ chgrp_SOURCES = chgrp.c chown-core.c
|
||||
mv_SOURCES = mv.c copy.c cp-hash.c remove.c
|
||||
rm_SOURCES = rm.c remove.c
|
||||
|
||||
uname_SOURCES = uname.c uname-uname.c
|
||||
arch_SOURCES = uname.c uname-arch.c
|
||||
|
||||
md5sum_SOURCES = md5sum.c
|
||||
md5sum_CPPFLAGS = -DHASH_ALGO_MD5=1 $(AM_CPPFLAGS)
|
||||
sha1sum_SOURCES = md5sum.c
|
||||
|
2
src/uname-arch.c
Normal file
2
src/uname-arch.c
Normal file
@ -0,0 +1,2 @@
|
||||
#include "uname.h"
|
||||
int uname_mode = UNAME_ARCH;
|
2
src/uname-uname.c
Normal file
2
src/uname-uname.c
Normal file
@ -0,0 +1,2 @@
|
||||
#include "uname.h"
|
||||
int uname_mode = UNAME_UNAME;
|
178
src/uname.c
178
src/uname.c
@ -1,7 +1,7 @@
|
||||
/* uname -- print system information
|
||||
|
||||
Copyright (C) 1989, 1992, 1993, 1996, 1997, 1999, 2000, 2001, 2002,
|
||||
2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 1989, 1992, 1993, 1996, 1997, 1999-2005, 2007
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@ -54,11 +54,13 @@
|
||||
#include "system.h"
|
||||
#include "error.h"
|
||||
#include "quote.h"
|
||||
#include "uname.h"
|
||||
|
||||
/* The official name of this program (e.g., no `g' prefix). */
|
||||
#define PROGRAM_NAME "uname"
|
||||
#define PROGRAM_NAME (uname_mode == UNAME_UNAME ? "uname" : "arch")
|
||||
|
||||
#define AUTHORS "David MacKenzie"
|
||||
#define ARCH_AUTHORS "David MacKenzie", "Karel Zak"
|
||||
|
||||
/* Values that are bitwise or'd into `toprint'. */
|
||||
/* Kernel name. */
|
||||
@ -88,7 +90,7 @@
|
||||
/* The name this program was run with, for error messages. */
|
||||
char *program_name;
|
||||
|
||||
static struct option const long_options[] =
|
||||
static struct option const uname_long_options[] =
|
||||
{
|
||||
{"all", no_argument, NULL, 'a'},
|
||||
{"kernel-name", no_argument, NULL, 's'},
|
||||
@ -106,6 +108,13 @@ static struct option const long_options[] =
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
static struct option const arch_long_options[] =
|
||||
{
|
||||
{GETOPT_HELP_OPTION_DECL},
|
||||
{GETOPT_VERSION_OPTION_DECL},
|
||||
{NULL, 0, NULL, 0}
|
||||
};
|
||||
|
||||
void
|
||||
usage (int status)
|
||||
{
|
||||
@ -115,7 +124,10 @@ usage (int status)
|
||||
else
|
||||
{
|
||||
printf (_("Usage: %s [OPTION]...\n"), program_name);
|
||||
fputs (_("\
|
||||
|
||||
if (uname_mode == UNAME_UNAME)
|
||||
{
|
||||
fputs (_("\
|
||||
Print certain system information. With no OPTION, same as -s.\n\
|
||||
\n\
|
||||
-a, --all print all information, in the following order,\n\
|
||||
@ -124,13 +136,22 @@ Print certain system information. With no OPTION, same as -s.\n\
|
||||
-n, --nodename print the network node hostname\n\
|
||||
-r, --kernel-release print the kernel release\n\
|
||||
"), stdout);
|
||||
fputs (_("\
|
||||
fputs (_("\
|
||||
-v, --kernel-version print the kernel version\n\
|
||||
-m, --machine print the machine hardware name\n\
|
||||
-p, --processor print the processor type or \"unknown\"\n\
|
||||
-i, --hardware-platform print the hardware platform or \"unknown\"\n\
|
||||
-o, --operating-system print the operating system\n\
|
||||
"), stdout);
|
||||
}
|
||||
else
|
||||
{
|
||||
fputs (_("\
|
||||
Print machine architecture.\n\
|
||||
\n\
|
||||
"), stdout);
|
||||
}
|
||||
|
||||
fputs (HELP_OPTION_DESCRIPTION, stdout);
|
||||
fputs (VERSION_OPTION_DESCRIPTION, stdout);
|
||||
emit_bug_reporting_address ();
|
||||
@ -151,10 +172,98 @@ print_element (char const *element)
|
||||
fputs (element, stdout);
|
||||
}
|
||||
|
||||
|
||||
/* Set all the option flags according to the switches specified.
|
||||
Return the mask indicating which elements to print. */
|
||||
|
||||
static int
|
||||
decode_switches (int argc, char **argv)
|
||||
{
|
||||
int c;
|
||||
unsigned int toprint = 0;
|
||||
|
||||
if (uname_mode == UNAME_ARCH)
|
||||
{
|
||||
while ((c = getopt_long (argc, argv, "",
|
||||
arch_long_options, NULL)) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case_GETOPT_HELP_CHAR;
|
||||
|
||||
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, ARCH_AUTHORS);
|
||||
|
||||
default:
|
||||
usage (EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
toprint = PRINT_MACHINE;
|
||||
}
|
||||
else
|
||||
{
|
||||
while ((c = getopt_long (argc, argv, "asnrvmpio",
|
||||
uname_long_options, NULL)) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'a':
|
||||
toprint = UINT_MAX;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
toprint |= PRINT_KERNEL_NAME;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
toprint |= PRINT_NODENAME;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
toprint |= PRINT_KERNEL_RELEASE;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
toprint |= PRINT_KERNEL_VERSION;
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
toprint |= PRINT_MACHINE;
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
toprint |= PRINT_PROCESSOR;
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
toprint |= PRINT_HARDWARE_PLATFORM;
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
toprint |= PRINT_OPERATING_SYSTEM;
|
||||
break;
|
||||
|
||||
case_GETOPT_HELP_CHAR;
|
||||
|
||||
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
|
||||
|
||||
default:
|
||||
usage (EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (argc != optind)
|
||||
{
|
||||
error (0, 0, _("extra operand %s"), quote (argv[optind]));
|
||||
usage (EXIT_FAILURE);
|
||||
}
|
||||
|
||||
return toprint;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
int c;
|
||||
static char const unknown[] = "unknown";
|
||||
|
||||
/* Mask indicating which elements to print. */
|
||||
@ -168,60 +277,7 @@ main (int argc, char **argv)
|
||||
|
||||
atexit (close_stdout);
|
||||
|
||||
while ((c = getopt_long (argc, argv, "asnrvmpio", long_options, NULL)) != -1)
|
||||
{
|
||||
switch (c)
|
||||
{
|
||||
case 'a':
|
||||
toprint = UINT_MAX;
|
||||
break;
|
||||
|
||||
case 's':
|
||||
toprint |= PRINT_KERNEL_NAME;
|
||||
break;
|
||||
|
||||
case 'n':
|
||||
toprint |= PRINT_NODENAME;
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
toprint |= PRINT_KERNEL_RELEASE;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
toprint |= PRINT_KERNEL_VERSION;
|
||||
break;
|
||||
|
||||
case 'm':
|
||||
toprint |= PRINT_MACHINE;
|
||||
break;
|
||||
|
||||
case 'p':
|
||||
toprint |= PRINT_PROCESSOR;
|
||||
break;
|
||||
|
||||
case 'i':
|
||||
toprint |= PRINT_HARDWARE_PLATFORM;
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
toprint |= PRINT_OPERATING_SYSTEM;
|
||||
break;
|
||||
|
||||
case_GETOPT_HELP_CHAR;
|
||||
|
||||
case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
|
||||
|
||||
default:
|
||||
usage (EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
if (argc != optind)
|
||||
{
|
||||
error (0, 0, _("extra operand %s"), quote (argv[optind]));
|
||||
usage (EXIT_FAILURE);
|
||||
}
|
||||
toprint = decode_switches (argc, argv);
|
||||
|
||||
if (toprint == 0)
|
||||
toprint = PRINT_KERNEL_NAME;
|
||||
|
7
src/uname.h
Normal file
7
src/uname.h
Normal file
@ -0,0 +1,7 @@
|
||||
/* This is for the `uname' program. */
|
||||
#define UNAME_UNAME 1
|
||||
|
||||
/* This is for the `arch' program. */
|
||||
#define UNAME_ARCH 2
|
||||
|
||||
extern int uname_mode;
|
48
tests/misc/arch
Executable file
48
tests/misc/arch
Executable file
@ -0,0 +1,48 @@
|
||||
#!/bin/sh
|
||||
# Ensure that arch output is equal to uname -m
|
||||
|
||||
# Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
if test "$VERBOSE" = yes; then
|
||||
set -x
|
||||
arch --version
|
||||
fi
|
||||
|
||||
pwd=`pwd`
|
||||
t0=`echo "$0"|sed 's,.*/,,'`.tmp; tmp=$t0/$$
|
||||
trap 'status=$?; cd "$pwd" && chmod -R u+rwx $t0 && rm -rf $t0 && exit $status' 0
|
||||
trap '(exit $?); exit $?' 1 2 13 15
|
||||
|
||||
framework_failure=0
|
||||
mkdir -p $tmp || framework_failure=1
|
||||
cd $tmp || framework_failure=1
|
||||
|
||||
if test $framework_failure = 1; then
|
||||
echo "$0: failure in testing framework" 1>&2
|
||||
(exit 1); exit 1
|
||||
fi
|
||||
|
||||
fail=0
|
||||
|
||||
arch > out || fail=1
|
||||
uname -m > exp || fail=1
|
||||
|
||||
cmp out exp || fail=1
|
||||
test $fail = 1 && diff out exp 2> /dev/null
|
||||
|
||||
(exit $fail); exit $fail
|
Loading…
Reference in New Issue
Block a user