aboutsummaryrefslogblamecommitdiff
path: root/Mk/bsd.autotools.mk
blob: 41ad8cdb544100e9a1fd94ec2f9a8e7a8c5af0f5 (plain) (tree)
1
2
3
4
5
6
7
8
9



                                      
 
                                    
 
                                                                     
                                        
 
                                               
 
                                                                            














                                                                            

                                                                            
 
                                        
 

                                                                 
 
                             
 


                                                                     



                                                                      
 

                                                                      
 

                                                                  
 
                  
                                                           
 





                                                                    

                                                           


                                                                   

                                                                   

                                                                            
 





                                                                                                             


                                                                
                                                                                 

      
                                                                            
                  

                                                                            


                                            

      


                                           

      

                                                


                                                    
                                                                    
                                                                             



                                 




                                                                            
                                                               
 
                                                                                 
                                           
 


                                   


                          
                              


                                              





                                                                            

                                              
      
 


                                            

      

                                                


                                                    
                                                                    
                                                                             



                                            








                                                                              
                                                                                                                                                                                            
 
                                                                                 
                                           
 

      


                                                                            
 
                                                                  
                 
 
                             
                                                  

      


                                           

      

                                                       

                                                   
 
                                                                  
                                                                           



                                




                                                                     
                                                             
                                                                                            
 
                                                                              
                                          
 
                                          

                               
                                  
      
                                           
       
 

      




                                                                            
                                                






                                                                 




                                                          
      
 




                                                        




                                                          
      
 


                                                                            
 


                                                               



                                                                 
                          
                                                                                
                                                             



                                  
                              

                                                                           

                   
       



                                   
                               
                                                                            
                                 

                   
       



                                   
                               
                                                                            
                                 

                   
       



                                     
                                 
                                                                              
                                   

                   
       

      
                 


                                                                  
 
                            
                 
                              


                                          
                                                                                              



                                                                                       
      
                   
       
      
#-*- 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

#---------------------------------------------------------------------------
# IMPORTANT!  READ ME!  YES, THAT MEANS YOU!
#
# The "versioned" autotools referenced here are for BUILDING other ports
# only.  THIS CANNOT BE STRESSED HIGHLY ENOUGH.  Things WILL BREAK if you
# try to use them for anything other than ports/ work.  This particularly
# includes use as a run-time dependency.
#
# If you need unmodified versions of autotools, such as for use in an
# IDE, then you MUST use the devel/gnu-* equivalents, and NOT these.
# See devel/anjuta and devel/kdevelop for examples.
#
# You have been WARNED!
#---------------------------------------------------------------------------

#---------------------------------------------------------------------------
# Entry point into the autotools system
#---------------------------------------------------------------------------
#
# USE_AUTOTOOLS= tool:version[:env]  ...
#
# 'tool' can currently be one of:
#	libtool, libltdl, autoconf, autoheader, automake, aclocal
#
# 'version' is tool dependent
#
# ':env' is used to pecify that the environment variables are needed,
#	but the relevant tool should NOT be run as part of the
#	run-autotools target
#
# XXX: there is currently no sanity checking of the supplied variables
#	other than to detect actually available versions.  This should
#	probably be fixed at some point.
#
# In addition, the following 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
#
# LIBTOOLFLAGS=<value>
#	- Arguments passed to libtool during configure step
#
# 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_SCRIPT} (usually "configure")
#
#---------------------------------------------------------------------------

# XXX: here be dragons :)
#
.for item in ${USE_AUTOTOOLS}
AUTOTOOL_${item:C/^([^:]+).*/\1/}${item:M*\:*\:*:C/^[^:]+:[^:]+:([^:]+)/_\1/}= ${item:C/^[^:]+:([^:]+).*/\1/}
.endfor

# XXX: temporary to highlight any missed ports in the conversion
#
.if defined(AUTOTOOL_libtool_inc)
IGNORE+= error: libtool:${AUTOTOOL_libtool_inc}:inc construct no longer available
.endif

#---------------------------------------------------------------------------
# AUTOMAKE/ACLOCAL
#---------------------------------------------------------------------------

.if defined(AUTOTOOL_automake)
AUTOTOOL_automake_env=	${AUTOTOOL_automake}
GNU_CONFIGURE?=			yes
.endif

.if defined(AUTOTOOL_aclocal)
AUTOTOOL_automake_env=	${AUTOTOOL_aclocal}
GNU_CONFIGURE?=			yes
.endif

.if defined(AUTOTOOL_automake_env)
AUTOMAKE_VERSION=	${AUTOTOOL_automake_env}

# Make sure we specified a legal version of automake
#
. if !exists(${PORTSDIR}/devel/automake${AUTOMAKE_VERSION}/Makefile)
IGNORE+=	cannot install: unknown AUTOMAKE version: ${AUTOMAKE_VERSION}
. endif

# Set up the automake environment
#
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}
AUTOMAKE_PATH=		${LOCALBASE}/libexec/automake${AUTOMAKE_VERSION}:
AUTOMAKE_VARS=		ACLOCAL=${ACLOCAL} AUTOMAKE=${AUTOMAKE}

AUTOMAKE_DEPENDS=	${AUTOMAKE}:${PORTSDIR}/devel/automake${AUTOMAKE_VERSION}
BUILD_DEPENDS+=		${AUTOMAKE_DEPENDS}

# XXX: backwards compatibility shim
#
. if ${AUTOMAKE_VERSION} == 14
AUTOMAKE_ARGS+=		-i
. endif

. if defined(AUTOTOOL_aclocal)
ACLOCAL_ARGS?=		--acdir=${ACLOCAL_DIR}
. endif

.endif

#---------------------------------------------------------------------------
# AUTOCONF/AUTOHEADER
#---------------------------------------------------------------------------

.if defined(AUTOTOOL_autoheader)
AUTOTOOL_autoconf=	${AUTOTOOL_autoheader}
.endif

.if defined(AUTOTOOL_autoconf)
AUTOTOOL_autoconf_env=	${AUTOTOOL_autoconf}
GNU_CONFIGURE?=			yes
.endif

.if defined(AUTOTOOL_autoconf_env)
AUTOCONF_VERSION=	${AUTOTOOL_autoconf_env}

# Make sure we specified a legal version of autoconf
#
. if !exists(${PORTSDIR}/devel/autoconf${AUTOCONF_VERSION}/Makefile)
IGNORE+=	cannot install: unknown AUTOCONF version: ${AUTOCONF_VERSION}
. endif

# Set up the autoconf/autoheader environment
#
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_PATH=		${LOCALBASE}/libexec/autoconf${AUTOCONF_VERSION}:
AUTOCONF_VARS=		AUTOCONF=${AUTOCONF} AUTOHEADER=${AUTOHEADER} AUTOIFNAMES=${AUTOIFNAMES} AUTOM4TE=${AUTOM4TE} AUTORECONF=${AUTORECONF} AUTOSCAN=${AUTOSCAN} AUTOUPDATE=${AUTOUPDATE}

AUTOCONF_DEPENDS=	${AUTOCONF}:${PORTSDIR}/devel/autoconf${AUTOCONF_VERSION}
BUILD_DEPENDS+=		${AUTOCONF_DEPENDS}

.endif

#---------------------------------------------------------------------------
# LIBTOOL/LIBLTDL
#---------------------------------------------------------------------------

# Convenience function to save people having to depend directly on
# devel/libltdl15
#
.if defined(AUTOTOOL_libltdl)
LIB_DEPENDS+=	ltdl.4:${PORTSDIR}/devel/libltdl15
.endif

.if defined(AUTOTOOL_libtool)
GNU_CONFIGURE?=			YES
AUTOTOOL_libtool_env=	${AUTOTOOL_libtool}
.endif

.if defined(AUTOTOOL_libtool_env)
LIBTOOL_VERSION=		${AUTOTOOL_libtool_env}

# Make sure we specified a legal version of libtool
#
. if !exists(${PORTSDIR}/devel/libtool${LIBTOOL_VERSION}/Makefile)
IGNORE+=	cannot install: unknown LIBTOOL version: ${LIBTOOL_VERSION}
. endif

# Set up the libtool environment
#
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=				${LIBTOOL_SHAREDIR}/ltmain.sh
LIBTOOL_VARS=		LIBTOOL=${LIBTOOL} LIBTOOLIZE=${LIBTOOLIZE} LIBTOOL_M4=${LIBTOOL_M4}

LIBTOOL_DEPENDS=	${LIBTOOL}:${PORTSDIR}/devel/libtool${LIBTOOL_VERSION}
BUILD_DEPENDS+=		${LIBTOOL_DEPENDS}

LIBTOOLFLAGS?=		# default to empty

. if defined(AUTOTOOL_autoconf)
LIBTOOLFILES?=		aclocal.m4
. else
LIBTOOLFILES?=		${CONFIGURE_SCRIPT}
. 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}
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}
. for item in automake aclocal autoconf autoheader libtool
.  if defined(AUTOTOOL_${item}_env)
${item:U}_ENV+=	PATH=${AUTOTOOLS_PATH}${PATH}
.  endif
. endfor
.endif

.if defined(AUTOTOOLS_VARS) && (${AUTOTOOLS_VARS} != "")
AUTOTOOLS_ENV+=	${AUTOTOOLS_VARS}
CONFIGURE_ENV+=	${AUTOTOOLS_VARS}
MAKE_ENV+=		${AUTOTOOLS_VARS}
SCRIPTS_ENV+=	${AUTOTOOLS_VARS}
. for item in automake aclocal autoconf autoheader libtool
.  if defined(AUTOTOOL_${item}_env)
${item:U}_ENV+=	${AUTOTOOLS_VARS}
.  endif
. endfor
.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 needed, this target can be overridden, for example to change
# the order of autotools running.

.if !target(run-autotools)
run-autotools:: run-autotools-aclocal patch-autotools run-autotools-autoheader \
		run-autotools-autoconf run-autotools-automake
.endif

.if !target(run-autotools-aclocal)
run-autotools-aclocal:
. if defined(AUTOTOOL_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_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_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_autoheader)
	@(cd ${CONFIGURE_WRKSRC} && ${SETENV} ${AUTOTOOLS_ENV} ${AUTOHEADER} \
		${AUTOHEADER_ARGS})
. else
	@${DO_NADA}
. 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(AUTOTOOL_libtool)
	@(cd ${PATCH_WRKSRC}; \
	for file in ${LIBTOOLFILES}; do \
		${CP} $$file $$file.tmp; \
		${SED} -e "/^ltmain=/!s^\$$ac_aux_dir/ltmain.sh^${LIBTOOLFLAGS} ${LTMAIN}^g" \
			     -e '/^LIBTOOL=/s^\$$(top_builddir)/libtool^${LIBTOOL}^g' \
			$$file.tmp > $$file; \
		${RM} $$file.tmp; \
	done);
. else
	@${DO_NADA}
. endif
.endif