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:
Karel Zak 2007-06-05 23:29:32 +02:00 committed by Jim Meyering
parent 33342c1a0a
commit 264021699c
16 changed files with 255 additions and 68 deletions

View File

@ -26,3 +26,5 @@
^src/ls-vdir\.c$
^src/rand-isaac\.c$
^src/tac-pipe\.c$
^src/uname-arch\.c$
^src/uname-uname\.c$

View File

@ -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

View File

@ -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
View File

@ -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
View File

@ -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

View File

@ -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")

View File

@ -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

View File

@ -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
View 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)

View File

@ -3,4 +3,4 @@ uname \- print system information
[DESCRIPTION]
.\" Add any additional description here
[SEE ALSO]
uname(2)
arch(1), uname(2)

View File

@ -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
View File

@ -0,0 +1,2 @@
#include "uname.h"
int uname_mode = UNAME_ARCH;

2
src/uname-uname.c Normal file
View File

@ -0,0 +1,2 @@
#include "uname.h"
int uname_mode = UNAME_UNAME;

View File

@ -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
View 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
View 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