Configure script: Difference between revisions

Content deleted Content added
Nickvence (talk | contribs)
mNo edit summary
Kuromedayo (talk | contribs)
m delete unnecessary newline
 
(94 intermediate revisions by 59 users not shown)
Line 1:
{{Short description|Shell script for generating build configuration files on a Unix-like environment}}
{{Context|date=October 2009}}
{{Lowercase title}}
[[Image:Autoconf.svg|thumb|300px|Flow diagram including configure, [[autoconf]] and [[automake]], three tools in the GNU build system]]
When installing a package on a [[Unix]] or [[Unix-like]] environment, a '''configure script''' is a [[shell script]] that generates [[software build|build]] configuration files for a [[codebase]] to facilitate cross-platform support. It generates files tailoring for the host system {{endash}} the environment on which the codebase is built and run.
Developing [[cross-platform]] software is a daunting task. Configure scripts allow software to be customized for a specific operating system and therefore allow them to run, given that different libraries may be used to accomplish the same task on different systems.
 
Even though there are no standards for such a script, the pattern is so ubiquitous that many developers are familiar with and even expect a script named ''configure'' that has this functionality. The script can be and originally was hand-coded. Today, multiple tools are available for generating a configure script based on special configuration files. One commonly used tool is [[Autotools]] which generates a [[Bash (Unix shell)|Bash]] script.
Configure scripts are an automated method of modifying [[source code]] before compilation to tailor the software to the system which the binary [[executable]] is to be compiled and run. Configure scripts are typically run immediately before compilation on the machine on which the software is to be used.
 
Obtaining a software package as [[source code]] and [[compiler|compiling]] it locally is a common scenario on [[Unix]] and [[Unix-like]] environments. Typically, this process involves the following steps:
Configure scripts are generated by the [[Autotools]] suite of build management tools. These scripts query the system on which they run for: environment settings, platform architecture, and the existence and ___location of required build and runtime dependencies. They store the gathered information in <code>configure.in</code> or <code>configure.ac</code>. Upon its completion, the configure script prints a report to <code>config.log</code>. Now building the software is as simple as
 
# Generate build configuration files
<code>./configure && make && make install</code>
# Build the code
# Install the result to an accessible ___location
 
A configure script accomplishes the first step by generating a [[makefile]] that is configured for the host system. This includes using the [[Library (computer science)|libraries]] of the host as required by the codebase.
One must type "./configure" (''dot slash'' configure) instead of just "configure" is to explicitly indicate that the script is in the current directory ("."). By default, Unix-type operating systems do not search the current directory for executables (this is a security feature), so you must give the full path explicitly. If you don't, you will get an error like "bash: configure: command not found".<ref>http://www.control-escape.com/linux/lx-swinstall-tar.html</ref>
 
== See alsoUse ==
Running ./configure --help should give a list of command line arguments accepted by the script, for enabling or disabling optional features of the software. Typing just ./configure gives the default configuration.<ref>http://www.control-escape.com/linux/lx-swinstall-tar.html</ref>
 
After navigating a command-line [[Shell (computing)|shell]] to the directory that contains the source code, the following commands are typically executed:<ref>{{cite web |url=http://www.control-escape.com/linux/lx-swinstall-tar.html |title=Compiling Linux Software from Source Code |publisher=Control-Escape's Linux Help Engine |access-date=20 November 2010}}</ref>
== Dependency checking ==
In new development, library dependency checking has been done in great part using [[pkg-config]] via the [[M4 (computer language)|m4]] macro, PKG_CHECK_MODULES. Before pkg-config's gained popularity, separate m4 macros were created to locate files known to be included in the distribution of libraries depended upon.
 
<syntaxhighlight lang="sh">
== See also ==
./configure
* [[Autoconf]]
make
* [[GNU build system]]
make install
</syntaxhighlight>
 
For the Autotools, the configure script logs status and errors to file ''config.log'', and the command <code>./configure --help</code> outputs command line help information.
 
Often, a document with instructions is included with the codebase; often in a file named <code>INSTALL</code>. It can be helpful if the configure script fails.
 
== Generating ==
 
Autotools simplifies some of the challenges of [[cross-platform software]] development.<ref>{{cite web |url=https://www.gnu.org/software/autoconf/ |title=Autoconf - GNU Project - Free Software Foundation (FSF) |publisher=GNU Operating System |access-date=20 November 2010}}</ref> These tools query the host system for environment settings, platform architecture, and the existence and ___location of required build and runtime dependencies. They store the gathered information in <code>configure.ac</code> to be read by <code>configure</code> during the installation phase.
 
In new development, library dependency checking hascan beenbe doneaccomplished in great part usingvia [[pkg-config]] via the [[M4 (computer language)|m4]] macro, PKG_CHECK_MODULES. Before pkg-config's gained popularity, separate m4 macros were created to locate files known to be included in the distribution of libraries depended upon.
 
== History ==
The first program to come with a configure script was [[rn (newsreader)|rn]] by [[Larry Wall]] in 1984. The script was written by hand and produced a jocular running commentary when executed. It still survives as part of the build system of the '''trn''' program.<ref>{{cite web |url=https://github.com/acli/trn/blob/613a7e97aca06dd807fb225990fa804e8c744574/Configure|title= Configure script of trn |publisher=GitHub |access-date=10 December 2020}}</ref>
 
Since then, an ecosystem of tools have been developed to automate the creation of configure scripts, of which the most common is [[Autoconf]].
 
== References ==
{{Reflist}}
<references/>
 
[[Category:Compiling tools]]
[[Category:Linux configuration utilities]]
[[Category:Unix programming tools]]
[[Category:Build automation|configure]]
 
{{compu-prog-stub}}
 
[[pl:Configure]]
[[pt:Configure]]
[[tr:Configure]]