617d46633e2c12d45cb70c7535b333e517a9fe70
Until this patch, top had used some strings with
special escape sequences to produce colors, normal
text, bold text, etc. They took the following form,
explained by an excerpt from program comments:
...
Our special formatting consists of:
"some text <_delimiter_> some more text <_delimiter_>...\n"
Where <_delimiter_> is a single byte in the range of:
\001 through \010 (in decimalizee, 1 - 8)
and is used to select an 'attribute' from a capabilities table
which is then applied to the *preceding* substring.
...
Unfortunately, these nonprinting values revealed
insurmountable inconsistencies in both the front-end
and back-end translation tools.
The xgettext (extraction) program would take those
special escapes, convert them and then output raw
binary values. Thus the .pot file would contain
lots of unprintable stuff making it unreadable.
If the following was added to po/Makevars, most of
those special escapes would be preserved in their
escape notation:
XGETTEXT_OPTIONS = ... --escape
But two escapes were converted from octal notation
and there was no way to prevent it:
\007 --> \a
\010 --> \b
After a pass through the msginit program, most of
the escapes were reconverted to raw binary values
making translation impossible. There was no
"--escape" option for the back-end programs like
there was for xgettext.
But the real killer was the escape \004, also used
in some of top's special strings. This value would
be silently accepted by xgettext, only to produce
the following fatal error in back-end programs like
msginit, msgfmt and msgen:
.pot:2647: context separator <EOT> within string
To quote from one of the references below:
"Would you create a suite of tools that silently
allow what is destined to become a fatal error
to pass unnoticed?"
So the bottom line was: top's special strings, in
use for the past nine years, had to be redesigned.
References:
http://www.freelists.org/post/procps/procpsng-nls-support,11
http://www.freelists.org/post/procps/procpsng-nls-support,14
COMPATIBILITY
This code is intended for use with Linux 2.2.xx, 2.4.xx,
2.6.xx, and hopefully all future kernels. You should be
running a system with libc 6, but libc 5 might work too.
INSTALLATION
make
make install
Only the second ("make install") is needed if you just
want to build and install procps-ng in the normal way.
If you wish to test before installing, use the scripts
named t, v, and p to ensure that the correct libproc
(the new one) is used during your testing.
You may set SKIP to avoid building or installing things.
For example:
make SKIP='/bin/kill /usr/share/man/man1/kill.1' install
Use SHARED=0 to build procps-ng without shared libraries.
This may be useful for installing in your home directory.
make SHARED=0 DESTDIR=$HOME install
Suppose you wanted to install stuff in strange places.
You might do something like this:
make usr/bin=/tmp/Q/i/ DESTDIR=/tmp/Q install="install -D" ldconfig=echo install
If cross-compiling, you might need to set lib64 to
either "lib" or "lib64". You might need to set m64 to
-m64, -m32, or nothing at all. Some examples:
make lib64=lib m64=-m32 # for a bi-arch gcc
make lib64=lib64 CC=x86_64-gcc
make lib64=lib CC=alpha-gcc
PACKAGING
If you are a downstream maintainer (packager) for a Linux distribution,
please avoid causing troubles. This section applies to you.
Send patches in regularly. Many patches made by vendors have been buggy,
some quite severely so. Sending in a patch will at least get it reviewed,
if not included. There is a procps-ng test suite that must be passed.
Forward all bug reports. If your bug database is public and busy enough
to bother with, please make this known. Follow Debian's lead in making
the bug database easy to comment on via email w/o need for an account.
Do not change the user interface. Many of the programs are intended to be
compatible with Solaris, FreeBSD, AIX, IRIX, Tru64, and the UNIX standard.
Your nice new command options WILL BE BROKEN as needed to ensure that
procps-ng remains compatible with the rest of the world. Sysadmins hate to
deal with incompatible behavior. If you need a new option, ask for it.
For normal packages, ensure that you do not add debugging flags
to the CFLAGS variable. If debugging flags are present, the Makefile
will avoid adding several optimizations that would interfere with gdb.
There should be no need to modify the Makefile. You can set variables
on the "make" command line or use "make -e" to pass variables from
the environment.
BUG REPORTS
Email to procps@freelists.org.
Description
Command line and full screen utilities for browsing procfs, a "pseudo" file system dynamically generated by Linux to provide information about the status of entries in its process table.
Languages
C
97.2%
Makefile
1%
Shell
0.9%
M4
0.9%