freebsd-ports/Mk/bsd.autotools.mk
Ade Lovett e360452599 Over the past few weeks, we have been testing the next
incarnation of ports/Mk/bsd.autotools.mk on the road to bringing
at least some semblance of sanity back to this corner of the
ports collection.

By far and away the easiest way to see the changes will be to
view the new file once committed, but here is a summary of the
changes:

1. USE_LIBTOOL, USE_AUTOCONF, USE_AUTOHEADER, USE_AUTOMAKE have
been fully deprecated.  Ports attempting to use these variables
after the commit will error out, and most obviously break INDEX
generation, with a helpful error message.  Instead, ports must
now specifically choose the version of any of these tools that
they need with the corresponding USE_*_VER variables.  Note that
these variables understand any and all versions of autotools ports
in the tree, there is no longer a need to have specific version
numbers hardcoded in the infrastructure of bsd.autotools.mk
(as there is now).  In particular, this will immediately open up
automake18 and autoconf259 for general use and beating.

2. Similarly for WANT_LIBTOOL, WANT_AUTOCONF, and WANT_AUTOMAKE.
Again, these have been fully deprecated, and the equivalent
WANT_*_VER versions should be used.

In order to preserve existing behavior for these variables, please
note the 20040314 entry in ports/CHANGES for the appropriate
version numbers to use for any ports in the GNATS queue.

Both WANT_* and USE_* bring in the relevant tool as a build
dependency, and set up a reasonably large number of variables
pointing to the right programs to be using in the port.  The
only difference at the moment, is that USE_* will run an extra
autotools-related configuration step, whereas WANT_* merely
requests the environment.

3. The helper knob USE_LIBLTDL has been added which currently
simply adds a LIB dependency on the libltdl port.

4. Three new variables have been introduced,
WANT_{LIBTOOL,AUTOCONF,AUTOMAKE}_RUN=yes.  These variables will
do nothing by themselves (a Work-In-Progress), but if the
appropriate autotool version is defined (either through
WANT_*_VER or USE_*_VER), this will add the relevant dependency
to RUN_DEPENDS.

Steps 3 and 4 now essentially negate the need for any kind of
direct dependency within a non-autotools port Makefile on
devel/autoconf*, devel/automake*, devel/libtool*, and devel/libltdl.

PR:		66037
Reviewed by:	4-exp bento cluster
2004-06-04 17:27:29 +00:00

390 lines
13 KiB
Makefile

#-*- mode: makefile; tab-width: 4; -*-
# ex:ts=4
#
# $FreeBSD$
#
# Please view me with 4 column tabs!
#
# Please make sure all changes to this file are passed either through
# the maintainer, or portmgr@FreeBSD.org
Autotools_Include_MAINTAINER= ade@FreeBSD.org
#---------------------------------------------------------------------------
# Entry points into the autotools system
#---------------------------------------------------------------------------
#
# USE_AUTOMAKE_VER=<value>
# - Port wishes to use automake, including the configuration step
# - Implies GNU_CONFIGURE?=yes and WANT_AUTOMAKE_VER=<value>
#
# WANT_AUTOMAKE_VER=<value>
# - Port needs access to the automake build environment
#
# WANT_AUTOMAKE_RUN=yes
# - Port also needs access to automake as a run-time dependency
# This is a NULL-OP if neither {USE,WANT}_AUTOMAKE_VER are defined
#
# AUTOMAKE_ARGS=...
# - Extra arguments passed to automake during configure step
#
#---------------------------------------------------------------------------
#
# USE_AUTOCONF_VER=<value>
# - Port wishes to use autoconf, including the configuration step
# - Implies GNU_CONFIGURE?=yes and WANT_AUTOCONF_VER=<value>
#
# USE_AUTOHEADER_VER=<value>
# - Port wishes to use autoheader in the configuration step
# - Implies USE_AUTOCONF_VER=<value>
#
# WANT_AUTOCONF_VER=<value>
# - Port needs access to the autoconf build environment
#
# WANT_AUTOCONF_RUN=yes
# - Port also needs access to autoconf as a run-time dependency
# This is a NULL-OP if neither {USE,WANT}_AUTOCONF_VER are defined
#
# AUTOCONF_ARGS=...
# - Extra arguments passed to autoconf during configure step
#
# AUTOHEADER_ARGS=...
# - Extra arguments passed to autoheader during configure step
#
#---------------------------------------------------------------------------
#
# USE_LIBLTDL=yes
# - Convenience knob to depend on the library from devel/libltdl
#
# USE_LIBTOOL_VER=<value>
# - Port wishes to use libtool, including the configuration step
# - Implies GNU_CONFIGURE?=yes and WANT_LIBTOOL_VER=<value>
#
# WANT_LIBTOOL_VER=<value>
# - Port needs access to the libtool build environment
#
# WANT_LIBTOOL_RUN=yes
# - Port also needs access to autoconf as a run-time dependency
# This is a NULL-OP if neither {USE,WANT}_LIBTOOL_VER are defined
#
# LIBTOOLFLAGS=<value>
# - Arguments passed to libtool during configure step
# Currently defaults to "--disable-ltlibs", but this will be going
# away when libtool .la files are brought back
#
# LIBTOOLFILES=<list-of-files>
# - A list of files to patch during libtool pre-configuration
# Defaults to "aclocal.m4" if autoconf is in use, otherwise "configure"
#
#---------------------------------------------------------------------------
# Major changes:
#
# - USE_AUTOMAKE, USE_AUTOCONF, USE_AUTOHEADER, and USE_LIBTOOL have
# been deprecated in favor of USE_<x>_VER=...
# As of 4/21/2004, changes should be made as follows:
# USE_AUTOMAKE -> USE_AUTOMAKE_VER=14
# USE_AUTOCONF -> USE_AUTOCONF_VER=213
# USE_AUTOHEADER -> USE_AUTOHEADER_VER=213
# USE_LIBTOOL -> USE_LIBTOOL_VER=13
# Currently, an error message is kicked out, and make(1) will stop
# if any of these deprecated variables are used.
#
# - additional variables WANT_{AUTOMAKE,AUTOCONF,AUTOHEADER,LIBTOOL}_RUN
# have been added to include a run-time dependency on the appropriate
# autotools port, as part of work in progress to remove ALL explicit
# dependencies on autotools in port Makefiles, in favor of using the
# autotools knobs
#
# - USE_LIBLTDL has been added as a convenience function to provide
# a lib dependency on devel/libltdl, so that if the major version
# number changes in future, only one item has to be updated
#
# - {WANT,USE}_AUTOMAKE_VER no longer automatically brings in
# autoconf as before, to allow for greater flexibility in version
# matching, and to simplify bsd.autotools.mk
# It is now the port Makefile responsibility to specifically bring
# in the "appropriate" version of autoconf if automake is specified.
# The mappings are as follows (automake,autoconf pairs):
# (14,213) (15,253) (17,257) (18,259)
#
# - Only set GNU_CONFIGURE automatically if USE_<x>_VER is specified,
# since WANT_<x>_VER implies that we want the environment, but not
# the configuration steps. XXX: this may break some ports
#
# Things to do:
# - Move both autoconf and automake to true versioned ports
# (devel/autoconf253 and devel/automake14 respectively). This is
# likely to break a number of ports that make assumptions about
# "autoconf", "automake", et al. but is required if we are to move
# to strictly-versioned autotools.
#
# - Work on killing off as many "old" autotools ports as possible
#
# - Bring back the installation of libtool .la files by default, removing
# those FreeBSD-specific knobs added to prevent this
#
# - Migrate the myriad of autotools-related knobs into a single
# USE_AUTOTOOLS=... (to be defined) variable, akin to USE_GNOME=...
#---------------------------------------------------------------------------
# DEPRECATED ENTRY POINTS
#---------------------------------------------------------------------------
.for i in AUTOMAKE AUTOCONF AUTOHEADER LIBTOOL
. if defined(USE_${i})
. error USE_${i} deprecated: replace with USE_${i}_VER=...
. endif
.endfor
#---------------------------------------------------------------------------
# AUTOMAKE
#---------------------------------------------------------------------------
.if defined(USE_AUTOMAKE_VER)
WANT_AUTOMAKE_VER?= ${USE_AUTOMAKE_VER}
GNU_CONFIGURE?= yes
.endif
.if defined(WANT_AUTOMAKE_VER)
# XXX: hackery to handle non-versioned "legacy" ports
# destined to die
#
. if ${WANT_AUTOMAKE_VER} == 15
AUTOMAKE_SUFFIX= # empty
. else
AUTOMAKE_SUFFIX= ${WANT_AUTOMAKE_VER}
. endif
# Make sure we specified a legal version of automake
#
. if !exists(${PORTSDIR}/devel/automake${AUTOMAKE_SUFFIX}/Makefile)
. error Unknown AUTOMAKE version: ${WANT_AUTOMAKE_VER}
. endif
# Set up the automake environment
#
AUTOMAKE= ${LOCALBASE}/bin/automake${AUTOMAKE_SUFFIX}
AUTOMAKE_DIR= ${LOCALBASE}/share/automake${AUTOMAKE_SUFFIX}
ACLOCAL= ${LOCALBASE}/bin/aclocal${AUTOMAKE_SUFFIX}
ACLOCAL_DIR= ${LOCALBASE}/share/aclocal${AUTOMAKE_SUFFIX}
AUTOMAKE_PATH= ${LOCALBASE}/libexec/automake${AUTOMAKE_SUFFIX}:
AUTOMAKE_VARS= ACLOCAL=${ACLOCAL} AUTOMAKE=${AUTOMAKE}
AUTOMAKE_VERSION= ${WANT_AUTOMAKE_VER}
AUTOMAKE_DEPENDS= ${AUTOMAKE}:${PORTSDIR}/devel/automake${AUTOMAKE_SUFFIX}
BUILD_DEPENDS+= ${AUTOMAKE_DEPENDS}
. if defined(WANT_AUTOMAKE_RUN)
RUN_DEPENDS+= ${AUTOMAKE_DEPENDS}
. endif
# XXX: here be dragons, for some reason
#
. if ${WANT_AUTOMAKE_VER} == 14
AUTOMAKE_ARGS+= -i
. endif
.endif
#---------------------------------------------------------------------------
# AUTOCONF/AUTOHEADER
#---------------------------------------------------------------------------
.if defined(USE_AUTOHEADER_VER)
USE_AUTOCONF_VER?= ${USE_AUTOHEADER_VER}
.endif
.if defined(USE_AUTOCONF_VER)
WANT_AUTOCONF_VER?= ${USE_AUTOCONF_VER}
GNU_CONFIGURE?= yes
.endif
# Sanity checking - we can't use a different version of
# autoheader and autoconf
#
.if defined(USE_AUTOHEADER_VER) && defined(USE_AUTOCONF_VER) && \
${USE_AUTOHEADER_VER} != ${USE_AUTOCONF_VER}
.error Incompatible autoheader ${USE_AUTOHEADER_VER} and autoconf ${USE_AUTOCONF_VER}
.endif
.if defined(WANT_AUTOHEADER_VER) && defined(WANT_AUTOCONF_VER) && \
${WANT_AUTOHEADER_VER} != ${WANT_AUTOCONF_VER}
.error Incompatible autoheader ${WANT_AUTOHEADER_VER} and autoconf ${WANT_AUTOCONF_VER}
.endif
.if defined(WANT_AUTOCONF_VER)
# XXX: hackery to handle non-versioned "legacy" ports
# destined to die
#
. if ${WANT_AUTOCONF_VER} == 253
AUTOCONF_SUFFIX= # empty
. else
AUTOCONF_SUFFIX= ${WANT_AUTOCONF_VER}
. endif
# Make sure we specified a legal version of autoconf
#
. if !exists(${PORTSDIR}/devel/autoconf${AUTOCONF_SUFFIX}/Makefile)
. error Unknown AUTOCONF version: ${WANT_AUTOCONF_VER}
. endif
# Set up the autoconf/autoheader environment
#
AUTOCONF= ${LOCALBASE}/bin/autoconf${AUTOCONF_SUFFIX}
AUTOCONF_DIR= ${LOCALBASE}/share/autoconf${AUTOCONF_SUFFIX}
AUTOHEADER= ${LOCALBASE}/bin/autoheader${AUTOCONF_SUFFIX}
AUTOIFNAMES= ${LOCALBASE}/bin/ifnames${AUTOCONF_SUFFIX}
AUTOM4TE= ${LOCALBASE}/bin/autom4te${AUTOCONF_SUFFIX}
AUTORECONF= ${LOCALBASE}/bin/autoreconf${AUTOCONF_SUFFIX}
AUTOSCAN= ${LOCALBASE}/bin/autoscan${AUTOCONF_SUFFIX}
AUTOUPDATE= ${LOCALBASE}/bin/autoupdate${AUTOCONF_SUFFIX}
AUTOCONF_PATH= ${LOCALBASE}/libexec/autoconf${AUTOCONF_SUFFIX}:
AUTOCONF_VARS= AUTOCONF=${AUTOCONF} AUTOHEADER=${AUTOHEADER} AUTOIFNAMES=${AUTOIFNAMES} AUTOM4TE=${AUTOM4TE} AUTORECONF=${AUTORECONF} AUTOSCAN=${AUTOSCAN} AUTOUPDATE=${AUTOUPDATE}
AUTOCONF_VERSION= ${WANT_AUTOCONF_VER}
AUTOCONF_DEPENDS= ${AUTOCONF}:${PORTSDIR}/devel/autoconf${AUTOCONF_SUFFIX}
BUILD_DEPENDS+= ${AUTOCONF_DEPENDS}
. if defined(WANT_AUTOCONF_RUN) || defined(WANT_AUTOHEADER_RUN)
RUN_DEPENDS+= ${AUTOCONF_DEPENDS}
. endif
.endif
#---------------------------------------------------------------------------
# LIBTOOL/LIBLTDL
#---------------------------------------------------------------------------
# Convenience function to save people having to depend directly on
# devel/libltdl
#
.if defined(USE_LIBLTDL)
LIB_DEPENDS+= ltdl.4:${PORTSDIR}/devel/libltdl
.endif
.if defined(USE_LIBTOOL_VER)
GNU_CONFIGURE?= yes
WANT_LIBTOOL_VER?= ${USE_LIBTOOL_VER}
.endif
# Note that there aren't any non-versioned libtools, so we can skip
# a little bit of cruft that exists in automake/autoconf above
#
.if defined(WANT_LIBTOOL_VER)
LIBTOOL_SUFFIX= ${WANT_LIBTOOL_VER}
# Make sure we specified a legal version of libtool
#
. if !exists(${PORTSDIR}/devel/libtool${LIBTOOL_SUFFIX}/Makefile)
. error Unknown LIBTOOL version: ${WANT_LIBTOOL_VER}
. endif
# Set up the libtool environment
#
LIBTOOL= ${LOCALBASE}/bin/libtool${LIBTOOL_SUFFIX}
LIBTOOLIZE= ${LOCALBASE}/bin/libtoolize${LIBTOOL_SUFFIX}
LIBTOOL_LIBEXECDIR= ${LOCALBASE}/libexec/libtool${LIBTOOL_SUFFIX}
LIBTOOL_SHAREDIR= ${LOCALBASE}/share/libtool${LIBTOOL_SUFFIX}
LIBTOOL_PATH= ${LIBTOOL_LIBEXECDIR}:
LIBTOOL_VARS= LIBTOOL=${LIBTOOL} LIBTOOLIZE=${LIBTOOLIZE}
LIBTOOL_VERSION= ${WANT_LIBTOOL_VER}
LIBTOOL_DEPENDS= ${LIBTOOL}:${PORTSDIR}/devel/libtool${LIBTOOL_SUFFIX}
BUILD_DEPENDS+= ${LIBTOOL_DEPENDS}
. if defined(WANT_LIBTOOL_RUN)
RUN_DEPENDS+= ${LIBTOOL_DEPENDS}
. endif
LIBTOOLFLAGS?= --disable-ltlibs # XXX: probably not useful
. if defined(USE_AUTOCONF_VER)
LIBTOOLFILES?= aclocal.m4
. else
LIBTOOLFILES?= configure
. endif
.endif
#---------------------------------------------------------------------------
# Environmental handling
# Now that we've got our environments defined for autotools, add them
# in so that the rest of the world can handle them
#
AUTOTOOLS_PATH= ${AUTOMAKE_PATH}${AUTOCONF_PATH}${LIBTOOL_PATH}
AUTOTOOLS_VARS= ${AUTOMAKE_VARS} ${AUTOCONF_VARS} ${LIBTOOL_VARS}
.if defined(AUTOTOOLS_PATH) && (${AUTOTOOLS_PATH} != "")
AUTOTOOLS_ENV+= PATH=${AUTOTOOLS_PATH}${PATH}
CONFIGURE_ENV+= PATH=${AUTOTOOLS_PATH}${PATH}
MAKE_ENV+= PATH=${AUTOTOOLS_PATH}${PATH}
SCRIPTS_ENV+= PATH=${AUTOTOOLS_PATH}${PATH}
. if defined(WANT_AUTOMAKE_VER)
AUTOMAKE_ENV+= PATH=${AUTOTOOLS_PATH}${PATH}
. endif
. if defined(WANT_AUTOCONF_VER)
AUTOCONF_ENV+= PATH=${AUTOTOOLS_PATH}${PATH}
. endif
. if defined(WANT_AUTOHEADER_VER)
AUTOHEADER_ENV+=PATH=${AUTOTOOLS_PATH}${PATH}
. endif
.endif
.if defined(AUTOTOOLS_VARS) && (${AUTOTOOLS_VARS} != "")
AUTOTOOLS_ENV+= ${AUTOTOOLS_VARS}
CONFIGURE_ENV+= ${AUTOTOOLS_VARS}
MAKE_ENV+= ${AUTOTOOLS_VARS}
SCRIPTS_ENV+= ${AUTOTOOLS_VARS}
. if defined(WANT_AUTOMAKE_VER)
AUTOMAKE_ENV+= ${AUTOTOOLS_VARS}
. endif
. if defined(WANT_AUTOCONF_VER)
AUTOCONF_ENV+= ${AUTOTOOLS_VARS}
. endif
. if defined(WANT_AUTOHEADER_VER)
AUTOHEADER_ENV+=${AUTOTOOLS_VARS}
. endif
.endif
#---------------------------------------------------------------------------
# Make targets
#---------------------------------------------------------------------------
# run-autotools
#
# Part of the configure set - run appropriate programs prior to
# the actual configure target if autotools are in use
#
.if !target(run-autotools)
run-autotools:
.if defined(USE_AUTOMAKE_VER)
@(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOTOOLS_ENV} ${AUTOMAKE} \
${AUTOMAKE_ARGS})
.endif
.if defined(USE_AUTOCONF_VER)
@(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOTOOLS_ENV} ${AUTOCONF} \
${AUTOCONF_ARGS})
.endif
.if defined(USE_AUTOHEADER_VER)
@(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOTOOLS_ENV} ${AUTOHEADER} \
${AUTOHEADER_ARGS})
.endif
.endif
# patch-autotools
#
# Special target to automatically make libtool using ports use the
# libtool port. See above for default values of LIBTOOLFILES.
#
.if !target(patch-autotools)
patch-autotools:
.if defined(USE_LIBTOOL_VER)
@(cd ${PATCH_WRKSRC}; \
for file in ${LIBTOOLFILES}; do \
${CP} $$file $$file.tmp; \
${SED} -e "s^\$$ac_aux_dir/ltconfig^${LIBTOOL_SHAREDIR}/ltconfig${LIBTOOL_VERSION}^g" \
-e "/^ltmain=/!s^\$$ac_aux_dir/ltmain.sh^${LIBTOOLFLAGS} ${LIBTOOL_SHAREDIR}/ltmain.sh^g" \
$$file.tmp > $$file; \
done);
.else
@${DO_NADA}
.endif
.endif