# $FreeBSD$ # # IMPORTANT NOTE: # Before making any changes to this file, contact portmgr to arrange # for an experimental ports run. # Untested commits will almost certainly break the tree, incur the # wrath of countless folks, and be unceremoniously backed out by # the maintainer and/or portmgr. Autotools_Include_MAINTAINER= autotools@FreeBSD.org #--------------------------------------------------------------------------- # USE_AUTOTOOLS= tool[:env] ... # # 'tool' can currently be one of the following: # autoconf, autoheader # autoconf213, autoheader213 (legacy version) # automake, aclocal # automake14, aclocal14 (legacy version) # libtool, libtoolize, libltdl # # ':env' is used to specify that the environmental variables are needed # but the relevant tool should NOT be run as part of the # 'run-autotools' target # # In addition, these variables can be set in the port Makefile to be # passed to the relevant tools: # # AUTOMAKE_ARGS=... # - Extra arguments passed to automake during configure step # # ACLOCAL_ARGS=... # - Arguments passed to aclocal during configure step # # AUTOCONF_ARGS=... # - Extra arguments passed to autoconf during configure step # # AUTOHEADER_ARGS=... # - Extra arguments passed to autoheader during configure step # # LIBTOOLIZE_ARGS=... # - Extra arguments passed to libtoolize during configure step # # LIBTOOLFLAGS= # - Arguments passed to libtool during configure step # # LIBTOOLFILES= # - A list of files to patch during libtool pre-configuration # # AUTOTOOLSFILES= # - A list of files to further patch with derived information # post-patching to reduce churn during component updates # #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- # NO USER-SERVICABLE PARTS BEYOND THIS POINT. REALLY. WE MEAN IT. #--------------------------------------------------------------------------- # Known autotools components _AUTOTOOLS_ALL= autoconf autoheader autoconf213 autoheader213 \ automake aclocal automake14 aclocal14 \ libtool libtoolize libltdl # Incompatible autotools mixing _AUTOTOOLS_IGN_autoconf= autoconf213 autoheader213 _AUTOTOOLS_IGN_autoheader= autoconf213 autoheader213 _AUTOTOOLS_IGN_autoconf213= autoconf autoheader _AUTOTOOLS_IGN_autoheader213= autoconf autoheader _AUTOTOOLS_IGN_automake= automake14 aclocal14 _AUTOTOOLS_IGN_aclocal= automake14 aclocal14 _AUTOTOOLS_IGN_automake14= automake aclocal _AUTOTOOLS_IGN_aclocal14= automake aclocal #--------------------------------------------------------------------------- # Primary magic to break out the USE_AUTOTOOLS stanza into something # more useful, along with substantial error checking to prevent # foot-shooting #--------------------------------------------------------------------------- # Break out the stanza # _AUTOTOOLS_IMPL= .for stanza in ${USE_AUTOTOOLS} _AUTOTOOLS_IMPL+= ${stanza:C/^([^:]+).*/\1/} _AUTOTOOL_${stanza:C/^([^:]+).*/\1/}= ${stanza:C/^[^:]+:([^:]+)/\1/} .endfor # Verify each component, normalize # _AUTOTOOLS_NOCOMP= .for component in ${_AUTOTOOLS_IMPL} . if ${_AUTOTOOLS_ALL:M${component}}=="" _AUTOTOOLS_NOCOMP+= ${component} . endif . if ${_AUTOTOOL_${component}}==${component} _AUTOTOOL_${component}= yes . elsif ${_AUTOTOOL_${component}}!="env" && ${_AUTOTOOL_${component}}!="yes" _AUTOTOOLS_BADCOMP+= ${component}:${_AUTOTOOL_${component}} . endif .endfor .if !empty(_AUTOTOOLS_NOCOMP) IGNORE+= Unknown autotool: ${_AUTOTOOLS_NOCOMP:O:u} .endif # Check for anything other than 'yes' or 'env' # _AUTOTOOLS_BADCOMP= .for component in ${_AUTOTOOLS_IMPL} . if ${_AUTOTOOL_${component}}!="env" && ${_AUTOTOOL_${component}}!="yes" _AUTOTOOLS_BADCOMP+= ${component}:${_AUTOTOOL_${component}} . endif .endfor .if !empty(_AUTOTOOLS_BADCOMP) IGNORE+= Bad autotool stanza: ${_AUTOTOOLS_BADCOMP:O:u} .endif # Check for incompatible mixes of components # _AUTOTOOLS_IGN= .for component in ${_AUTOTOOLS_IMPL} . for ignore in ${_AUTOTOOLS_IGN_${component}} . if defined(_AUTOTOOL_${ignore}) _AUTOTOOLS_IGN+= ${component} . endif . endfor .endfor .if !empty(_AUTOTOOLS_IGN) IGNORE+= Incompatible autotools: ${_AUTOTOOLS_IGN:O:u} .endif #--------------------------------------------------------------------------- # automake and aclocal #--------------------------------------------------------------------------- .if defined(_AUTOTOOL_aclocal) && ${_AUTOTOOL_aclocal} == "yes" _AUTOTOOL_automake?= env _AUTOTOOL_rule_aclocal= yes GNU_CONFIGURE= yes .endif .if defined(_AUTOTOOL_automake) AUTOMAKE_VERSION= 1.14 AUTOMAKE_APIVER= 1.14 AUTOMAKE_PORT= devel/automake . if ${_AUTOTOOL_automake} == "yes" _AUTOTOOL_rule_automake= yes GNU_CONFIGURE?= yes . endif .endif .if defined(_AUTOTOOL_aclocal14) && ${_AUTOTOOL_aclocal14} == "yes" _AUTOTOOL_automake14?= env _AUTOTOOL_rule_aclocal14= yes GNU_CONFIGURE?= yes .endif .if defined(_AUTOTOOL_automake14) AUTOMAKE_VERSION= 1.4 AUTOMAKE_APIVER= 1.4.6 AUTOMAKE_PORT= devel/automake14 AUTOMAKE_ARGS+= -i # backwards compatibility shim . if ${_AUTOTOOL_automake14} == "yes" _AUTOTOOL_rule_automake= yes GNU_CONFIGURE?= yes . endif .endif .if defined(AUTOMAKE_VERSION) AUTOMAKE= ${LOCALBASE}/bin/automake-${AUTOMAKE_VERSION} AUTOMAKE_DIR= ${LOCALBASE}/share/automake-${AUTOMAKE_VERSION} ACLOCAL= ${LOCALBASE}/bin/aclocal-${AUTOMAKE_VERSION} ACLOCAL_DIR= ${LOCALBASE}/share/aclocal-${AUTOMAKE_VERSION} . if defined(_AUTOTOOL_aclocal) ACLOCAL_ARGS?= --automake-acdir=${ACLOCAL_DIR} . endif . if defined(_AUTOTOOL_aclocal14) ACLOCAL_ARGS?= --acdir=${ACLOCAL_DIR} . endif AUTOMAKE_VARS= AUTOMAKE=${AUTOMAKE} \ AUTOMAKE_DIR=${AUTOMAKE_DIR} \ AUTOMAKE_VERSION=${AUTOMAKE_VERSION} \ AUTOMAKE_APIVER=${AUTOMAKE_APIVER} \ ACLOCAL=${ACLOCAL} \ ACLOCAL_DIR=${ACLOCAL_DIR} AUTOMAKE_DEPENDS= ${AUTOMAKE}:${PORTSDIR}/${AUTOMAKE_PORT} BUILD_DEPENDS+= ${AUTOMAKE_DEPENDS} .endif #--------------------------------------------------------------------------- # autoconf and autoheader #--------------------------------------------------------------------------- .if defined(_AUTOTOOL_autoheader) && ${_AUTOTOOL_autoheader} == "yes" _AUTOTOOL_autoconf= yes _AUTOTOOL_rule_autoheader= yes GNU_CONFIGURE?= yes .endif .if defined(_AUTOTOOL_autoconf) AUTOCONF_VERSION= 2.69 AUTOCONF_PORT= devel/autoconf . if ${_AUTOTOOL_autoconf} == "yes" _AUTOTOOL_rule_autoconf= yes GNU_CONFIGURE?= yes . endif .endif .if defined(_AUTOTOOL_autoheader213) && ${_AUTOTOOL_autoheader213} == "yes" _AUTOTOOL_autoconf213= yes _AUTOTOOL_rule_autoheader= yes GNU_CONFIGURE?= yes .endif .if defined(_AUTOTOOL_autoconf213) AUTOCONF_VERSION= 2.13 AUTOCONF_PORT= devel/autoconf213 AUTOM4TE= ${FALSE} # doesn't exist here . if ${_AUTOTOOL_autoconf213} == "yes" _AUTOTOOL_rule_autoconf= yes GNU_CONFIGURE?= yes . endif .endif .if defined(AUTOCONF_VERSION) AUTOCONF= ${LOCALBASE}/bin/autoconf-${AUTOCONF_VERSION} AUTOCONF_DIR= ${LOCALBASE}/share/autoconf-${AUTOCONF_VERSION} AUTOHEADER= ${LOCALBASE}/bin/autoheader-${AUTOCONF_VERSION} AUTOIFNAMES= ${LOCALBASE}/bin/ifnames-${AUTOCONF_VERSION} AUTOM4TE?= ${LOCALBASE}/bin/autom4te-${AUTOCONF_VERSION} AUTORECONF= ${LOCALBASE}/bin/autoreconf-${AUTOCONF_VERSION} AUTOSCAN= ${LOCALBASE}/bin/autoscan-${AUTOCONF_VERSION} AUTOUPDATE= ${LOCALBASE}/bin/autoupdate-${AUTOCONF_VERSION} AUTOCONF_VARS= AUTOCONF=${AUTOCONF} \ AUTOCONF_DIR=${AUTOCONF_DIR} \ AUTOHEADER=${AUTOHEADER} \ AUTOIFNAMES=${AUTOIFNAMES} \ AUTOM4TE=${AUTOM4TE} \ AUTORECONF=${AUTORECONF} \ AUTOSCAN=${AUTOSCAN} \ AUTOUPDATE=${AUTOUPDATE} \ AUTOCONF_VERSION=${AUTOCONF_VERSION} AUTOCONF_DEPENDS= ${AUTOCONF}:${PORTSDIR}/${AUTOCONF_PORT} BUILD_DEPENDS+= ${AUTOCONF_DEPENDS} .endif #--------------------------------------------------------------------------- # libltdl #--------------------------------------------------------------------------- .if defined(_AUTOTOOL_libltdl) LIB_DEPENDS+= libltdl.so:${PORTSDIR}/devel/libltdl .endif #--------------------------------------------------------------------------- # libtool/libtoolize #--------------------------------------------------------------------------- .if defined(_AUTOTOOL_libtool) || defined(_AUTOTOOL_libtoolize) LIBTOOL_VERSION= 2.4 LIBTOOL_PORT= devel/libtool . if defined(_AUTOTOOL_libtool) && ${_AUTOTOOL_libtool} == "yes" _AUTOTOOL_rule_libtool= yes GNU_CONFIGURE?= yes . endif . if defined(_AUTOTOOL_libtoolize) && ${_AUTOTOOL_libtoolize} == "yes" _AUTOTOOL_rule_libtoolize= yes GNU_CONFIGURE?= yes . endif .endif .if defined(LIBTOOL_VERSION) LIBTOOL= ${LOCALBASE}/bin/libtool LIBTOOLIZE= ${LOCALBASE}/bin/libtoolize LIBTOOL_LIBEXECDIR= ${LOCALBASE}/libexec/libtool LIBTOOL_SHAREDIR= ${LOCALBASE}/share/libtool LIBTOOL_M4= ${LOCALBASE}/share/aclocal/libtool.m4 LTMAIN= ${LOCALBASE}/share/libtool/config/ltmain.sh LIBTOOL_VARS= LIBTOOL=${LIBTOOL} \ LIBTOOLIZE=${LIBTOOLIZE} \ LIBTOOL_LIBEXECDIR=${LIBTOOL_LIBEXECDIR} \ LIBTOOL_SHAREDIR=${LIBTOOL_SHAREDIR} \ LIBTOOL_M4=${LIBTOOL_M4} \ LTMAIN=${LTMAIN} LIBTOOLFLAGS?= # default to empty . if defined(_AUTOTOOL_rule_autoconf) || defined(_AUTOTOOL_rule_autoconf213) LIBTOOLFILES?= aclocal.m4 . elif defined(_AUTOTOOL_rule_libtool) LIBTOOLFILES?= ${CONFIGURE_SCRIPT} . endif LIBTOOLIZE_ARGS?= -i -c -f LIBTOOL_DEPENDS= libtool>=2.4:${PORTSDIR}/${LIBTOOL_PORT} BUILD_DEPENDS+= ${LIBTOOL_DEPENDS} .endif #--------------------------------------------------------------------------- # Add to the environment #--------------------------------------------------------------------------- AUTOTOOLS_VARS= ${AUTOMAKE_VARS} ${AUTOCONF_VARS} ${LIBTOOL_VARS} .if defined(AUTOTOOLS_VARS) && !empty(AUTOTOOLS_VARS) . for var in AUTOTOOLS CONFIGURE MAKE SCRIPTS ${var:tu}_ENV+= ${AUTOTOOLS_VARS} . endfor .endif #--------------------------------------------------------------------------- # Make targets #--------------------------------------------------------------------------- .if !target(run-autotools) .ORDER: run-autotools run-autotools-libtoolize run-autotools-aclocal \ patch-autotools-libtool run-autotools-autoconf \ run-autotools-autoheader run-autotools-automake run-autotools:: run-autotools-libtoolize run-autotools-aclocal \ patch-autotools-libtool run-autotools-autoconf \ run-autotools-autoheader run-autotools-automake .endif .if !target(run-autotools-aclocal) run-autotools-aclocal: . if defined(_AUTOTOOL_rule_aclocal) @(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOTOOLS_ENV} ${ACLOCAL} \ ${ACLOCAL_ARGS}) . else @${DO_NADA} . endif .endif .if !target(run-autotools-automake) run-autotools-automake: . if defined(_AUTOTOOL_rule_automake) @(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOTOOLS_ENV} ${AUTOMAKE} \ ${AUTOMAKE_ARGS}) . else @${DO_NADA} . endif .endif .if !target(run-autotools-autoconf) run-autotools-autoconf: . if defined(_AUTOTOOL_rule_autoconf) @(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOTOOLS_ENV} ${AUTOCONF} \ ${AUTOCONF_ARGS}) . else @${DO_NADA} . endif .endif .if !target(run-autotools-autoheader) run-autotools-autoheader: . if defined(_AUTOTOOL_rule_autoheader) @(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOTOOLS_ENV} ${AUTOHEADER} \ ${AUTOHEADER_ARGS}) . else @${DO_NADA} . endif .endif .if !target(run-autotools-libtoolize) run-autotools-libtoolize: . if defined(_AUTOTOOL_rule_libtoolize) @(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOTOOLS_ENV} ${LIBTOOLIZE} \ ${LIBTOOLIZE_ARGS}) . else @${DO_NADA} . endif .endif .if !target(patch-autotools-libtool) patch-autotools-libtool:: . if defined(_AUTOTOOL_rule_libtool) @for file in ${LIBTOOLFILES}; do \ ${REINPLACE_CMD} -e \ "/^ltmain=/!s|\$$ac_aux_dir/ltmain.sh|${LIBTOOLFLAGS} ${LTMAIN}|g; \ /^LIBTOOL=/s|\$$(top_builddir)/libtool|${LIBTOOL}|g" \ ${PATCH_WRKSRC}/$$file; \ done; . else @${DO_NADA} . endif .endif #--------------------------------------------------------------------------- # Reduce patch churn by auto-substituting data from AUTOTOOLS_VARS # into the correct places. Code shamelessly stolen from PLIST_SUB. AUTOTOOLSFILES?= # default to empty AUTOTOOLS_VARS?= # empty if not already set .if !target(configure-autotools) configure-autotools:: . if ${AUTOTOOLS_VARS}!="" && ${AUTOTOOLSFILES} != "" @for file in ${AUTOTOOLSFILES}; do \ ${REINPLACE_CMD} ${AUTOTOOLS_VARS:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} \ ${WRKSRC}/$${file} ; \ done . else @${DO_NADA} . endif .endif