Bernd Lachner <blachner@xxxxxx> writes: > Hi, > > thank you for your help, but now I have some more questions. > >> > >> > I need some optional arguments for a configure script. I have seen the >> > macros AC_ARG_WITH and AC_ARG_ENABLE in the autoconf manual. As far I can >> > see, I can add arguments like this to the configure script: >> > >> > --enable-option=yes >> > --with-option >> >> --enable-option[=xyz] >> --with-option[=xyz] >> > Ok. I'm new to write configure.ac scripts so I didn't know that I can choose > xyz instead yes and no. Is there any site with examples or tutorials to > autoconf? Here's part of an autoconf script I maintain. I offer it in the hope it might be helpful, and that others might make specific suggestions or point out any stupid mistakes they see. So autoconf gurus - please let Bernd and me know if this is wrong! Thanks. My configure comes with some options. Here's the help output which shows the options --enable-netcdf-4 build with netcdf-4 (HDF5 is required) --enable-64bit set flags to build in 64-bit mode (ignored if --disable-flag-setting is used) --enable-parallel build parallel netcdf-4 (--enable-netcdf-4 must also be specified) --disable-flag-setting Turn off configure's attempts to correctly set compiler and linker flags. --disable-compiler-recover don't continue if a desired C++, F77, or F90 compiler is missing --disable-f77 don't try to build Fortran 77 API --disable-f90 don't try to build Fortran 90 API --disable-cxx don't try to build Fortran 90 API ... --with-hdf5=<directory> Specify location of HDF5 library. Configure will expect to find subdirs include and lib. --with-temp-large=<directory> Specify directory where large files (i.e. >2 GB) will be written, if large files tests are run. Here's the configure.ac which handles some of the above. For some options I need to set an automake conditional, which causes the configure script to build the makefiles differently depending on the option. Use AM_CONDITIONAL for that. Sometimes the configure script sets a macro in config.h. Do that with the AC_DEFINE macro. Sometimes there is an argument (ex. --with-hdf5=/usr/local), sometimes not. Enjoy! # This is part of Unidata's netCDF package. Copyright 2005, see the # COPYRIGHT file for more information. ... snip ... # Does the user want to build netcdf-4? AC_MSG_CHECKING([whether netCDF-4 is to be built]) AC_ARG_ENABLE([netcdf-4], [AS_HELP_STRING([--enable-netcdf-4], [build with netcdf-4 (HDF5 is required)])]) test "x$enable_netcdf_4" = xyes || enable_netcdf_4=no AC_MSG_RESULT($enable_netcdf_4) AM_CONDITIONAL(USE_NETCDF4, [test x$enable_netcdf_4 = xyes]) if test "x$enable_netcdf_4" = xyes; then AC_DEFINE([USE_NETCDF4], 1, [if true, build netCDF-4]) fi # Does the user want to build in 64-bit mode? AC_MSG_CHECKING([whether netCDF is to be built in 64-bit mode]) AC_ARG_ENABLE([64-bit], [AS_HELP_STRING([--enable-64bit], [set flags to build in 64-bit mode (ignored if --disable-flag-setting is used)])]) test "x$enable_64bit" = xyes || enable_64bit=no AC_MSG_RESULT($enable_64bit) # Does the user want to build netcdf-4 with parallel? AC_MSG_CHECKING([whether parallel netCDF-4 is to be built]) AC_ARG_ENABLE([parallel], [AS_HELP_STRING([--enable-parallel], [build parallel netcdf-4 (--enable-netcdf-4 must also be specified)])]) test "x$enable_parallel" = xyes || enable_parallel=no AC_MSG_RESULT($enable_parallel) if test "x$enable_parallel" = xyes && test "x$enable_netcdf_4" != xyes; then AC_MSG_ERROR(["--enable-parallel is only valid if --enable-netcdf-4 is also used."]) fi AM_CONDITIONAL(USE_PARALLEL, [test "x$enable_parallel" = xyes]) if test "x$enable_parallel" = xyes; then AC_DEFINE([USE_PARALLEL], [1], [if true, compile in parallel netCDF-4]) fi # Did the user specify a location for the HDF5 library? AC_MSG_CHECKING([whether a location for the HDF5 library was specified]) AC_ARG_WITH([hdf5], [AS_HELP_STRING([--with-hdf5=<directory>], [Specify location of HDF5 library. Configure will expect to find subdirs include and lib.])]) AC_MSG_RESULT([$with_hdf5]) AM_CONDITIONAL(USE_HDF5_DIR, [test ! "x$with_hdf5" = x]) AC_SUBST(HDF5DIR, [$with_hdf5]) # Does the user want configure to keep hands off any compiler or # linker settings? AC_MSG_CHECKING([whether configure should try to set compiler flags]) AC_ARG_ENABLE([flag-setting], [AS_HELP_STRING([--disable-flag-setting], [Turn off configure's attempts to correctly set compiler and linker flags.])]) test "x$enable_flag_setting" = xno || enable_flag_setting=yes AC_MSG_RESULT($enable_flag_setting) # Do we want to recover from a bad C++, F77, or F90 compiler? nc_compiler_recover=yes AC_MSG_CHECKING([whether we should just skip C++, F77, or F90 API if compiler is missing]) AC_ARG_ENABLE([compiler-recover], [AS_HELP_STRING([--disable-compiler-recover], [don't continue if a desired C++, F77, or F90 compiler is missing])]) test "x$enable_compiler_recover" = "xno" || enable_compiler_recover=yes AC_MSG_RESULT([$enable_compiler_recover]) # Do we want to build the fortran 77 API? Check for --disable-f77. nc_build_f77=yes AC_MSG_CHECKING([whether F77 API is desired]) AC_ARG_ENABLE([f77], [AS_HELP_STRING([--disable-f77], [don't try to build Fortran 77 API])]) test "x$enable_f77" = "xno" && nc_build_f77=no test "x$nc_null_fc" = xyes && nc_build_f77=no AC_MSG_RESULT([$nc_build_f77]) -- Ed Hartnett -- ed@xxxxxxxxxxxxxxxx _______________________________________________ Autoconf mailing list Autoconf@xxxxxxx http://lists.gnu.org/mailman/listinfo/autoconf