Tuesday, 19 July 2011
Automatic autoconf migration tool
Although autosetup configurations are generally easy to create, developers moving a complex project from autoconf to autosetup may still find it tedious to create the auto.def configuration file.
To simplify migration from autoconf, autosetup includes a migration tool which will automatically convert a configure.in or configure.ac file to an auto.def file.
Consider the following migration of tinytcl:
$ cd tinytcl $ ~/src/autosetup.git/migrate-autoconf Migrating configure.ac to auto.def Created auto.def. Now edit to resolve items marked XXX $ ~/src/autosetup.git/autosetup --install Installed autosetup v0.6.2 to autosetup/ I see configure, but not created by autosetup, so I won't overwrite it. Use autosetup --init --force to overwrite. $ ./autosetup/autosetup --init --force I will overwrite the existing configure because you used --force.
Now the migrated auto.def can be edited. Before editing it looks something like this:
# Created by migrate-autoconf - fix items marked XXX use cc cc-lib options { shared=0 => {Build a shared library} history=0 => {Enable history support} debug=0 => {Enable debugging command: cmdtrace} fork=1 => {Do not use fork (no exec, etc.)} syslog=0 => {Build the syslog extension} } # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. # XXX autosetup automatically substitutes all define'd values # In general, simply 'define' the value rather than using a shell # variable and AC_SUBST. # # XXX AC_SUBST TARGET_PLATFORM $ac_cv_host # Checks for programs. # XXX TINYTCL_IS_STATIC=1 if {[opt-bool shared]} { # XXX if test "x$enableval" = "xyes" ; then msg-result "* creating shared library" # XXX TINYTCL_IS_STATIC= # XXX fi } # XXX AC_SUBST TINYTCL_IS_STATIC $TINYTCL_IS_STATIC ...
After editing, auto.def looks more like:
... define TARGET_PLATFORM [get-define host] define TINYTCL_IS_STATIC 1 if {[opt-bool shared]} { msg-result "* creating shared library" define TINYTCL_IS_STATIC 0 } ...
The final edited version is available at in the autosetup repository as auto.def.edited along with additional examples.
Note that migrate-autoconf only understands a common subset of autoconf macros and uses various heuristics to perform the migration. Nonetheless, migrate-autoconf can significantly speed up migration from autoconf.