Blame doc/install.texi

Packit 47b4ca
@c This file is included by autoconf.texi and is used to produce
Packit 47b4ca
@c the INSTALL file.
Packit 47b4ca
Packit 47b4ca
@ifclear autoconf
Packit 47b4ca
Packit 47b4ca
@unnumbered Installation Instructions
Packit 47b4ca
Packit 47b4ca
Copyright @copyright{} 1994-1996, 1999-2002, 2004-2012 Free Software
Packit 47b4ca
Foundation, Inc.
Packit 47b4ca
Packit 47b4ca
Copying and distribution of this file, with or without modification, are
Packit 47b4ca
permitted in any medium without royalty provided the copyright notice
Packit 47b4ca
and this notice are preserved.  This file is offered as-is, without
Packit 47b4ca
warranty of any kind.
Packit 47b4ca
Packit 47b4ca
@end ifclear
Packit 47b4ca
Packit 47b4ca
@node Basic Installation
Packit 47b4ca
@section Basic Installation
Packit 47b4ca
Packit 47b4ca
Briefly, the shell commands @samp{./configure; make; make install}
Packit 47b4ca
should configure, build, and install this package.  The following
Packit 47b4ca
more-detailed instructions are generic; see the @file{README} file for
Packit 47b4ca
instructions specific to this package.
Packit 47b4ca
@ifclear autoconf
Packit 47b4ca
Some packages provide this @file{INSTALL} file but do not implement all
Packit 47b4ca
of the features documented below.  The lack of an optional feature in a
Packit 47b4ca
given package is not necessarily a bug.
Packit 47b4ca
@end ifclear
Packit 47b4ca
More recommendations for GNU packages can be found in
Packit 47b4ca
@ref{Makefile Conventions, , Makefile Conventions, standards,
Packit 47b4ca
GNU Coding Standards}.
Packit 47b4ca
Packit 47b4ca
The @command{configure} shell script attempts to guess correct values
Packit 47b4ca
for various system-dependent variables used during compilation.  It uses
Packit 47b4ca
those values to create a @file{Makefile} in each directory of the
Packit 47b4ca
package.  It may also create one or more @file{.h} files containing
Packit 47b4ca
system-dependent definitions.  Finally, it creates a shell script
Packit 47b4ca
@file{config.status} that you can run in the future to recreate the
Packit 47b4ca
current configuration, and a file @file{config.log} containing compiler
Packit 47b4ca
output (useful mainly for debugging @command{configure}).
Packit 47b4ca
Packit 47b4ca
It can also use an optional file (typically called @file{config.cache}
Packit 47b4ca
and enabled with @option{--cache-file=config.cache} or simply
Packit 47b4ca
@option{-C}) that saves the results of its tests to speed up
Packit 47b4ca
reconfiguring.  Caching is disabled by default to prevent problems with
Packit 47b4ca
accidental use of stale cache files.
Packit 47b4ca
Packit 47b4ca
If you need to do unusual things to compile the package, please try to
Packit 47b4ca
figure out how @command{configure} could check whether to do them, and
Packit 47b4ca
mail diffs or instructions to the address given in the @file{README} so
Packit 47b4ca
they can be considered for the next release.  If you are using the
Packit 47b4ca
cache, and at some point @file{config.cache} contains results you don't
Packit 47b4ca
want to keep, you may remove or edit it.
Packit 47b4ca
Packit 47b4ca
The file @file{configure.ac} (or @file{configure.in}) is used to create
Packit 47b4ca
@file{configure} by a program called @command{autoconf}.  You need
Packit 47b4ca
@file{configure.ac} if you want to change it or regenerate
Packit 47b4ca
@file{configure} using a newer version of @command{autoconf}.
Packit 47b4ca
Packit 47b4ca
The simplest way to compile this package is:
Packit 47b4ca
Packit 47b4ca
@enumerate
Packit 47b4ca
@item
Packit 47b4ca
@command{cd} to the directory containing the package's source code and type
Packit 47b4ca
@samp{./configure} to configure the package for your system.
Packit 47b4ca
Packit 47b4ca
Running @command{configure} might take a while.  While running, it prints some
Packit 47b4ca
messages telling which features it is checking for.
Packit 47b4ca
Packit 47b4ca
@item
Packit 47b4ca
Type @samp{make} to compile the package.
Packit 47b4ca
Packit 47b4ca
@item
Packit 47b4ca
Optionally, type @samp{make check} to run any self-tests that come with
Packit 47b4ca
the package, generally using the just-built uninstalled binaries.
Packit 47b4ca
Packit 47b4ca
@item
Packit 47b4ca
Type @samp{make install} to install the programs and any data files and
Packit 47b4ca
documentation.  When installing into a prefix owned by root, it is
Packit 47b4ca
recommended that the package be configured and built as a regular user,
Packit 47b4ca
and only the @samp{make install} phase executed with root privileges.
Packit 47b4ca
Packit 47b4ca
@item
Packit 47b4ca
Optionally, type @samp{make installcheck} to repeat any self-tests, but
Packit 47b4ca
this time using the binaries in their final installed location.  This
Packit 47b4ca
target does not install anything.  Running this target as a regular
Packit 47b4ca
user, particularly if the prior @samp{make install} required root
Packit 47b4ca
privileges, verifies that the installation completed correctly.
Packit 47b4ca
Packit 47b4ca
@item
Packit 47b4ca
You can remove the program binaries and object files from the source
Packit 47b4ca
code directory by typing @samp{make clean}.  To also remove the files
Packit 47b4ca
that @command{configure} created (so you can compile the package for a
Packit 47b4ca
different kind of computer), type @samp{make distclean}.  There is also
Packit 47b4ca
a @samp{make maintainer-clean} target, but that is intended mainly for
Packit 47b4ca
the package's developers.  If you use it, you may have to get all sorts
Packit 47b4ca
of other programs in order to regenerate files that came with the
Packit 47b4ca
distribution.
Packit 47b4ca
Packit 47b4ca
@item
Packit 47b4ca
Often, you can also type @samp{make uninstall} to remove the installed
Packit 47b4ca
files again.  In practice, not all packages have tested that
Packit 47b4ca
uninstallation works correctly, even though it is required by the
Packit 47b4ca
GNU Coding Standards.
Packit 47b4ca
Packit 47b4ca
@item
Packit 47b4ca
Some packages, particularly those that use Automake, provide @samp{make
Packit 47b4ca
distcheck}, which can by used by developers to test that all other
Packit 47b4ca
targets like @samp{make install} and @samp{make uninstall} work
Packit 47b4ca
correctly.  This target is generally not run by end users.
Packit 47b4ca
@end enumerate
Packit 47b4ca
Packit 47b4ca
@node Compilers and Options
Packit 47b4ca
@section Compilers and Options
Packit 47b4ca
Packit 47b4ca
Some systems require unusual options for compilation or linking that the
Packit 47b4ca
@command{configure} script does not know about.  Run @samp{./configure
Packit 47b4ca
--help} for details on some of the pertinent environment variables.
Packit 47b4ca
Packit 47b4ca
You can give @command{configure} initial values for configuration
Packit 47b4ca
parameters by setting variables in the command line or in the environment.
Packit 47b4ca
Here is an example:
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
./configure CC=c99 CFLAGS=-g LIBS=-lposix
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
@xref{Defining Variables}, for more details.
Packit 47b4ca
Packit 47b4ca
Packit 47b4ca
@node Multiple Architectures
Packit 47b4ca
@section Compiling For Multiple Architectures
Packit 47b4ca
Packit 47b4ca
You can compile the package for more than one kind of computer at the
Packit 47b4ca
same time, by placing the object files for each architecture in their
Packit 47b4ca
own directory.  To do this, you can use GNU @command{make}.
Packit 47b4ca
@command{cd} to the directory where you want the object files and
Packit 47b4ca
executables to go and run the @command{configure} script.
Packit 47b4ca
@command{configure} automatically checks for the source code in the
Packit 47b4ca
directory that @command{configure} is in and in @file{..}.  This is
Packit 47b4ca
known as a @dfn{VPATH} build.
Packit 47b4ca
Packit 47b4ca
With a non-GNU @command{make},
Packit 47b4ca
it is safer to compile the package for one
Packit 47b4ca
architecture at a time in the source code directory.  After you have
Packit 47b4ca
installed the package for one architecture, use @samp{make distclean}
Packit 47b4ca
before reconfiguring for another architecture.
Packit 47b4ca
Packit 47b4ca
On MacOS X 10.5 and later systems, you can create libraries and
Packit 47b4ca
executables that work on multiple system types---known as @dfn{fat} or
Packit 47b4ca
@dfn{universal} binaries---by specifying multiple @option{-arch} options
Packit 47b4ca
to the compiler but only a single @option{-arch} option to the
Packit 47b4ca
preprocessor.  Like this:
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
Packit 47b4ca
            CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
Packit 47b4ca
            CPP="gcc -E" CXXCPP="g++ -E"
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
This is not guaranteed to produce working output in all cases, you may
Packit 47b4ca
have to build one architecture at a time and combine the results
Packit 47b4ca
using the @command{lipo} tool if you have problems.
Packit 47b4ca
Packit 47b4ca
@node Installation Names
Packit 47b4ca
@section Installation Names
Packit 47b4ca
Packit 47b4ca
By default, @samp{make install} installs the package's commands under
Packit 47b4ca
@file{/usr/local/bin}, include files under @file{/usr/local/include}, etc.
Packit 47b4ca
You can specify an
Packit 47b4ca
installation prefix other than @file{/usr/local} by giving
Packit 47b4ca
@command{configure} the option @option{--prefix=@var{prefix}}, where
Packit 47b4ca
@var{prefix} must be an absolute file name.
Packit 47b4ca
Packit 47b4ca
You can specify separate installation prefixes for architecture-specific
Packit 47b4ca
files and architecture-independent files.  If you pass the option
Packit 47b4ca
@option{--exec-prefix=@var{prefix}} to @command{configure}, the
Packit 47b4ca
package uses @var{prefix} as the prefix for installing programs and
Packit 47b4ca
libraries.  Documentation and other data files still use the
Packit 47b4ca
regular prefix.
Packit 47b4ca
Packit 47b4ca
In addition, if you use an unusual directory layout you can give options
Packit 47b4ca
like @option{--bindir=@var{dir}} to specify different values for
Packit 47b4ca
particular kinds of files.  Run @samp{configure --help} for a list of
Packit 47b4ca
the directories you can set and what kinds of files go in them.  In
Packit 47b4ca
general, the default for these options is expressed in terms of
Packit 47b4ca
@samp{$@{prefix@}}, so that specifying just @option{--prefix} will
Packit 47b4ca
affect all of the other directory specifications that were not
Packit 47b4ca
explicitly provided.
Packit 47b4ca
Packit 47b4ca
The most portable way to affect installation locations is to pass the
Packit 47b4ca
correct locations to @command{configure}; however, many packages provide
Packit 47b4ca
one or both of the following shortcuts of passing variable assignments
Packit 47b4ca
to the @samp{make install} command line to change installation locations
Packit 47b4ca
without having to reconfigure or recompile.
Packit 47b4ca
Packit 47b4ca
The first method involves providing an override variable for each
Packit 47b4ca
affected directory.  For example, @samp{make install
Packit 47b4ca
prefix=/alternate/directory} will choose an alternate location for all
Packit 47b4ca
directory configuration variables that were expressed in terms of
Packit 47b4ca
@samp{$@{prefix@}}.  Any directories that were specified during
Packit 47b4ca
@command{configure}, but not in terms of @samp{$@{prefix@}}, must each be
Packit 47b4ca
overridden at install time for the entire
Packit 47b4ca
installation to be relocated.  The approach of makefile variable
Packit 47b4ca
overrides for each directory variable is required by the GNU
Packit 47b4ca
Coding Standards, and ideally causes no recompilation.  However, some
Packit 47b4ca
platforms have known limitations with the semantics of shared libraries
Packit 47b4ca
that end up requiring recompilation when using this method, particularly
Packit 47b4ca
noticeable in packages that use GNU Libtool.
Packit 47b4ca
Packit 47b4ca
The second method involves providing the @samp{DESTDIR} variable.  For
Packit 47b4ca
example, @samp{make install DESTDIR=/alternate/directory} will prepend
Packit 47b4ca
@samp{/alternate/directory} before all installation names.  The approach
Packit 47b4ca
of @samp{DESTDIR} overrides is not required by the GNU Coding
Packit 47b4ca
Standards, and does not work on platforms that have drive letters.  On
Packit 47b4ca
the other hand, it does better at avoiding recompilation issues, and
Packit 47b4ca
works well even when some directory options were not specified in terms
Packit 47b4ca
of @samp{$@{prefix@}} at @command{configure} time.
Packit 47b4ca
Packit 47b4ca
@node Optional Features
Packit 47b4ca
@section Optional Features
Packit 47b4ca
Packit 47b4ca
If the package supports it, you can cause programs to be installed with
Packit 47b4ca
an extra prefix or suffix on their names by giving @command{configure}
Packit 47b4ca
the option @option{--program-prefix=@var{PREFIX}} or
Packit 47b4ca
@option{--program-suffix=@var{SUFFIX}}.
Packit 47b4ca
Packit 47b4ca
Some packages pay attention to @option{--enable-@var{feature}} options
Packit 47b4ca
to @command{configure}, where @var{feature} indicates an optional part
Packit 47b4ca
of the package.  They may also pay attention to
Packit 47b4ca
@option{--with-@var{package}} options, where @var{package} is something
Packit 47b4ca
like @samp{gnu-as} or @samp{x} (for the X Window System).  The
Packit 47b4ca
@file{README} should mention any @option{--enable-} and @option{--with-}
Packit 47b4ca
options that the package recognizes.
Packit 47b4ca
Packit 47b4ca
For packages that use the X Window System, @command{configure} can
Packit 47b4ca
usually find the X include and library files automatically, but if it
Packit 47b4ca
doesn't, you can use the @command{configure} options
Packit 47b4ca
@option{--x-includes=@var{dir}} and @option{--x-libraries=@var{dir}} to
Packit 47b4ca
specify their locations.
Packit 47b4ca
Packit 47b4ca
Some packages offer the ability to configure how verbose the execution
Packit 47b4ca
of @command{make} will be.  For these packages, running
Packit 47b4ca
@samp{./configure --enable-silent-rules} sets the default to minimal
Packit 47b4ca
output, which can be overridden with @code{make V=1}; while running
Packit 47b4ca
@samp{./configure --disable-silent-rules} sets the default to verbose,
Packit 47b4ca
which can be overridden with @code{make V=0}.
Packit 47b4ca
Packit 47b4ca
@node Particular Systems
Packit 47b4ca
@section Particular systems
Packit 47b4ca
Packit 47b4ca
On HP-UX, the default C compiler is not ANSI C compatible.  If GNU CC is
Packit 47b4ca
not installed, it is recommended to use the following options in order to
Packit 47b4ca
use an ANSI C compiler:
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
@noindent
Packit 47b4ca
and if that doesn't work, install pre-built binaries of GCC for HP-UX.
Packit 47b4ca
Packit 47b4ca
HP-UX @command{make} updates targets which have the same time stamps as
Packit 47b4ca
their prerequisites, which makes it generally unusable when shipped
Packit 47b4ca
generated files such as @command{configure} are involved.  Use GNU
Packit 47b4ca
@command{make} instead.
Packit 47b4ca
Packit 47b4ca
On OSF/1 a.k.a.@: Tru64, some versions of the default C compiler cannot
Packit 47b4ca
parse its @code{<wchar.h>} header file.  The option @option{-nodtk} can be
Packit 47b4ca
used as a workaround.  If GNU CC is not installed, it is therefore
Packit 47b4ca
recommended to try
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
./configure CC="cc"
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
@noindent
Packit 47b4ca
and if that doesn't work, try
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
./configure CC="cc -nodtk"
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
On Solaris, don't put @code{/usr/ucb} early in your @env{PATH}.  This
Packit 47b4ca
directory contains several dysfunctional programs; working variants
Packit 47b4ca
of these programs are available in @code{/usr/bin}.  So, if you need
Packit 47b4ca
@code{/usr/ucb} in your @env{PATH}, put it @emph{after} @code{/usr/bin}.
Packit 47b4ca
Packit 47b4ca
On Haiku, software installed for all users goes in @file{/boot/common},
Packit 47b4ca
not @file{/usr/local}.  It is recommended to use the following options:
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
./configure --prefix=/boot/common
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
@node System Type
Packit 47b4ca
@section Specifying the System Type
Packit 47b4ca
Packit 47b4ca
There may be some features @command{configure} cannot figure out
Packit 47b4ca
automatically, but needs to determine by the type of machine the package
Packit 47b4ca
will run on.  Usually, assuming the package is built to be run on the
Packit 47b4ca
@emph{same} architectures, @command{configure} can figure that out, but
Packit 47b4ca
if it prints a message saying it cannot guess the machine type, give it
Packit 47b4ca
the @option{--build=@var{type}} option.  @var{type} can either be a
Packit 47b4ca
short name for the system type, such as @samp{sun4}, or a canonical name
Packit 47b4ca
which has the form:
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
@var{cpu}-@var{company}-@var{system}
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
@noindent
Packit 47b4ca
where @var{system} can have one of these forms:
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
@var{os}
Packit 47b4ca
@var{kernel}-@var{os}
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
See the file @file{config.sub} for the possible values of each field.
Packit 47b4ca
If @file{config.sub} isn't included in this package, then this package
Packit 47b4ca
doesn't need to know the machine type.
Packit 47b4ca
Packit 47b4ca
If you are @emph{building} compiler tools for cross-compiling, you
Packit 47b4ca
should use the option @option{--target=@var{type}} to select the type of
Packit 47b4ca
system they will produce code for.
Packit 47b4ca
Packit 47b4ca
If you want to @emph{use} a cross compiler, that generates code for a
Packit 47b4ca
platform different from the build platform, you should specify the
Packit 47b4ca
@dfn{host} platform (i.e., that on which the generated programs will
Packit 47b4ca
eventually be run) with @option{--host=@var{type}}.
Packit 47b4ca
Packit 47b4ca
@node Sharing Defaults
Packit 47b4ca
@section Sharing Defaults
Packit 47b4ca
Packit 47b4ca
If you want to set default values for @command{configure} scripts to
Packit 47b4ca
share, you can create a site shell script called @file{config.site} that
Packit 47b4ca
gives default values for variables like @code{CC}, @code{cache_file},
Packit 47b4ca
and @code{prefix}.  @command{configure} looks for
Packit 47b4ca
@file{@var{prefix}/share/config.site} if it exists, then
Packit 47b4ca
@file{@var{prefix}/etc/config.site} if it exists.  Or, you can set the
Packit 47b4ca
@code{CONFIG_SITE} environment variable to the location of the site
Packit 47b4ca
script.  A warning: not all @command{configure} scripts look for a site
Packit 47b4ca
script.
Packit 47b4ca
Packit 47b4ca
@node Defining Variables
Packit 47b4ca
@section Defining Variables
Packit 47b4ca
Packit 47b4ca
Variables not defined in a site shell script can be set in the
Packit 47b4ca
environment passed to @command{configure}.  However, some packages may
Packit 47b4ca
run configure again during the build, and the customized values of these
Packit 47b4ca
variables may be lost.  In order to avoid this problem, you should set
Packit 47b4ca
them in the @command{configure} command line, using @samp{VAR=value}.
Packit 47b4ca
For example:
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
./configure CC=/usr/local2/bin/gcc
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
@noindent
Packit 47b4ca
causes the specified @command{gcc} to be used as the C compiler (unless it is
Packit 47b4ca
overridden in the site shell script).
Packit 47b4ca
Packit 47b4ca
@noindent
Packit 47b4ca
Unfortunately, this technique does not work for @env{CONFIG_SHELL} due
Packit 47b4ca
to an Autoconf limitation.  Until the limitation is lifted, you can use
Packit 47b4ca
this workaround:
Packit 47b4ca
Packit 47b4ca
@example
Packit 47b4ca
CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
Packit 47b4ca
@end example
Packit 47b4ca
Packit 47b4ca
@node configure Invocation
Packit 47b4ca
@section @command{configure} Invocation
Packit 47b4ca
Packit 47b4ca
@command{configure} recognizes the following options to control how it
Packit 47b4ca
operates.
Packit 47b4ca
Packit 47b4ca
@table @option
Packit 47b4ca
@item --help
Packit 47b4ca
@itemx -h
Packit 47b4ca
Print a summary of all of the options to @command{configure}, and exit.
Packit 47b4ca
Packit 47b4ca
@item --help=short
Packit 47b4ca
@itemx --help=recursive
Packit 47b4ca
Print a summary of the options unique to this package's
Packit 47b4ca
@command{configure}, and exit.  The @code{short} variant lists options
Packit 47b4ca
used only in the top level, while the @code{recursive} variant lists
Packit 47b4ca
options also present in any nested packages.
Packit 47b4ca
Packit 47b4ca
@item --version
Packit 47b4ca
@itemx -V
Packit 47b4ca
Print the version of Autoconf used to generate the @command{configure}
Packit 47b4ca
script, and exit.
Packit 47b4ca
Packit 47b4ca
@item --cache-file=@var{file}
Packit 47b4ca
@cindex Cache, enabling
Packit 47b4ca
Enable the cache: use and save the results of the tests in @var{file},
Packit 47b4ca
traditionally @file{config.cache}.  @var{file} defaults to
Packit 47b4ca
@file{/dev/null} to disable caching.
Packit 47b4ca
Packit 47b4ca
@item --config-cache
Packit 47b4ca
@itemx -C
Packit 47b4ca
Alias for @option{--cache-file=config.cache}.
Packit 47b4ca
Packit 47b4ca
@item --quiet
Packit 47b4ca
@itemx --silent
Packit 47b4ca
@itemx -q
Packit 47b4ca
Do not print messages saying which checks are being made.  To suppress
Packit 47b4ca
all normal output, redirect it to @file{/dev/null} (any error messages
Packit 47b4ca
will still be shown).
Packit 47b4ca
Packit 47b4ca
@item --srcdir=@var{dir}
Packit 47b4ca
Look for the package's source code in directory @var{dir}.  Usually
Packit 47b4ca
@command{configure} can determine that directory automatically.
Packit 47b4ca
Packit 47b4ca
@item --prefix=@var{dir}
Packit 47b4ca
Use @var{dir} as the installation prefix.  @ref{Installation Names}
Packit 47b4ca
for more details, including other options available for fine-tuning
Packit 47b4ca
the installation locations.
Packit 47b4ca
Packit 47b4ca
@item --no-create
Packit 47b4ca
@itemx -n
Packit 47b4ca
Run the configure checks, but stop before creating any output files.
Packit 47b4ca
@end table
Packit 47b4ca
Packit 47b4ca
@noindent
Packit 47b4ca
@command{configure} also accepts some other, not widely useful, options.
Packit 47b4ca
Run @samp{configure --help} for more details.
Packit 47b4ca
Packit 47b4ca
@c Local Variables:
Packit 47b4ca
@c fill-column: 72
Packit 47b4ca
@c ispell-local-dictionary: "american"
Packit 47b4ca
@c indent-tabs-mode: nil
Packit 47b4ca
@c whitespace-check-buffer-indent: nil
Packit 47b4ca
@c End: