From: <rla...@us...> - 2004-02-21 13:15:19
|
Update of /cvsroot/plplot/plplot/cf In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15273/cf Modified Files: Tag: CFDIR README drivers.ac libtool.ac python.ac Added Files: Tag: CFDIR instdirs.ac Log Message: Further reorganization, cleanup and removal of old cruft. The configure.ac file is starting to look nice. Added some meat to cf/README, most of it is just boilerplate. --- NEW FILE: instdirs.ac --- dnl cf/instdirs.ac for PLplot -*- autoconf -*- dnl dnl Set default installation directoires. BUILD_DIR is also defined here. dnl dnl Copyright (C) 1994, 2004 Maurice LeBrun dnl Copyright (C) 2002, 2003, 2004 Rafael Laboissiere dnl Copyright (C) 2002, 2003, 2004 Alan W. Irwin dnl Copyright (C) 2003, 2004 Joao Cardoso dnl dnl This file is part of PLplot. dnl dnl PLplot is free software; you can redistribute it and/or modify dnl it under the terms of the GNU Library General Public License as published dnl by the Free Software Foundation; version 2 of the License. dnl dnl PLplot is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU Library General Public License for more details. dnl dnl You should have received a copy of the GNU Library General Public License dnl along with the file PLplot; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA test -z "$DATA_DIR" && DATA_DIR='${datadir}/${PACKAGE}${VERSION}' AC_SUBST(DATA_DIR) test -z "$LIB_DIR" && LIB_DIR='${libdir}' AC_SUBST(LIB_DIR) test -z "$INCLUDE_DIR" && INCLUDE_DIR='${prefix}/include/plplot' AC_SUBST(INCLUDE_DIR) test -z "$BIN_DIR" && BIN_DIR='${bindir}' test -z "$TCL_DIR" && TCL_DIR="$DATA_DIR/tcl" AC_SUBST(TCL_DIR) test -z "$DRV_DIR" && DRV_DIR="$DATA_DIR/drivers${LIB_TAG}" AC_SUBST(DRV_DIR) ### Documentation directory test -z "$DOC_DIR" && DOC_DIR='${datadir}/doc/plplot' AC_SUBST(DOC_DIR) BUILD_DIR=`pwd` AC_SUBST(BUILD_DIR) # The following *_CMD variables are needed in examples/*/Makefile.examples.in PL_EXPAND_EXPRESSION(LIB_DIR_CMD, -L$LIB_DIR) AC_SUBST(LIB_DIR_CMD) PL_EXPAND_EXPRESSION(INCLUDE_DIR_CMD, -I$INCLUDE_DIR) AC_SUBST(INCLUDE_DIR_CMD) # The following *_HARDDIR variables are needed in bindings/*/pkgIndex.tcl.in PL_EXPAND_EXPRESSION(LIB_HARDDIR, $LIB_DIR) AC_SUBST(LIB_HARDDIR) PL_EXPAND_EXPRESSION(DRV_HARDDIR, $DRV_DIR) AC_SUBST(DRV_HARDDIR) # Location substitutions for header files as well PL_EXPAND_EXPRESSION(TMPVAR, $DATA_DIR) AC_DEFINE_UNQUOTED(DATA_DIR, "$TMPVAR", [Location of package data files]) PL_EXPAND_EXPRESSION(TMPVAR, $DRV_DIR) AC_DEFINE_UNQUOTED(DRV_DIR, "$TMPVAR", [Location of dynamically loaded drivers]) PL_EXPAND_EXPRESSION(TMPVAR, $BIN_DIR) AC_DEFINE_UNQUOTED(BIN_DIR, "$TMPVAR", [Location of executables]) PL_EXPAND_EXPRESSION(TMPVAR, $TCL_DIR) AC_DEFINE_UNQUOTED(TCL_DIR, "$TMPVAR", [Location of Tcl stuff]) AC_DEFINE_UNQUOTED(BUILD_DIR, "$BUILD_DIR", [Location of Build tree]) Index: README =================================================================== RCS file: /cvsroot/plplot/plplot/cf/Attic/README,v retrieving revision 1.10.2.1 retrieving revision 1.10.2.2 diff -u -d -r1.10.2.1 -r1.10.2.2 --- README 16 Feb 2004 11:40:31 -0000 1.10.2.1 +++ README 21 Feb 2004 13:03:20 -0000 1.10.2.2 @@ -1,14 +1,172 @@ The Autotools configuration scheme for PLplot ============================================= + Introduction ------------ +PLplot is a complex piece of software. It includes a core library, which +may use external libraries like FreeType and Qhull), as well as several +language bindings and drivers for a large number of devices and file +formats. This complexity reflects on its configuration system, which can be +considered a separate project in itself. + + History ------- -Internals ---------- +Version prior to 5.0.0 of PLplot already used Autoconf for its configuration +system. At that time a home-brew technique for generating the Makefile from +small fragments were used. The main drawbacks of this technique were the +lack of portability in the generated Makefiles and the cross-platform +problems for generating shared libraries, let alone the later dynamically +loadable drivers. + +At the end of 2001, a new effort started to port the configuration scheme to +Automake and Libtool. This appeared in release 5.2.1, in April 2003. This +was a huge overhaul of the PLplot configuration and we had to abandon the +"flat" built paradigm where all the source files were copied to a temporary +directory and compiled there. Automake needed to have the source code +organized hierarchically with separate Makefile.am's for each directory. + +Although the port to Automake/Libtool was a huge step forward, many legacy +code were kept in the configure.in file (renamed to configure.ac later). +Some of this legacy code related to old necessities, like diverting the +initial portion of configure.in to set default values correctly. Also, a +sysloc.in file at the top-level directory was included by configure.in, but +there was no logic behind + +In sum, the situation until the release of version 5.3.0 has been quite +unsatisfactory, even if the configuration scheme have been continuously +improved since version 5.2.1. The code in configure.ac and sysloc.in was +way too convoluted, not very robust as regards to changes in it, and +daunting for the beginners. We then decided to reorganize the configuration +code to addresses those issues. + + +The new configuration scheme +---------------------------- + +Modernization, starts with AC_INIT (no diversion, default in PL_ARG_*) + +Port to Automake 1.8.2 and Libtool 1.5.2 + +Modularization, cf dir, m4_include, aclocal scans cf for m4 files, no +AT generated files at the topdir + +Although the amount of changes in this commit is huge, configuration and +build runs smoothly from a freshly checked out CVS tree, by doing: + + cf/bootstrap.sh + ./configure + make check + +The code in configure.ac and cf/sysloc.in is still quite messy (BTW, this +later file will soon disappear), because I have to move code around to get +everything working. This state of affairs showed me how fragile and +unmaintainable the previous scheme was. The files configure.ac, +cf/sysloc.in and cf/docbook.m4 will be soon broken down in smaller pieces +(cf/*.ac). + +The diverted stuff at the beginning of configure.ac have served many +purposes in the past: + + (1) Allow default settings of the enable_* and with_* configuration + variables. + + (2) Allow sourceing of user configuration files. + + (3) Define all the driver/device options and variables through a + non-recursive m4 macro. + + (4) Set the $system variable and fix it for braindead Cray. + +I am sure that my changes regarding (1) will generate a lot of debate. +People get used to have all the default values for the enable_* and with_* +variables to be concentrated at the beginning of the configure.ac. That +could be handy for the experienced developer, but is pretty +non-maintainable and confusing for the new developers. + +I think it is better to have the definition of default values close to +where the definition is actually defined. For that, two new macros were +created: + + PL_ARG_WITH(option, [help string], default) + PL_ARG_ENABLE(option, [help string], default) + +These macros are now used uniformly throughout the project (well, +cf/docbook.m4 has not yet been ported). Notice that the help string should +not contain --with-* or --enable-* at the beginning. PL_ARG_* take care of +this, by using the nice AS_HELP_STRING macro. + +The very nice side effect of these changes is that ./configure --help shows +now (at last!) the default values for all options. The problem before was +that we tried to use the shell variables in the help string, but they were +not being interpolated. Only for this reason, my changes are already +worth. + +As regards (2), Maurice cleaned up the diversion section of configure.ac +recently, by noticing that there is now an official way to do it, namely +through the environment variable CONFIG_SITE. However, this solution is +broken in HEAD, since the values set in the CONFIG_SITE file override the +values set by the options --with-* and --enable-* (it should be the +contrary). In CFDIR, the situation is the same. Hence, in her private +configuration startup file $CONFIG_SITE, the user has to do something like +this: + + if test -z "$enable_octave" ; then enable_octave=yes ; fi + +It can also set a shell function for that: + + my_default() { eval "if test -z \"\$$1\"; then $1=$2 ; fi" ; } + my_default enable_octave no + my_default enable_f77 yes + # etc. + +[This is plain Bourne shell, no bashisms here.] + +The previous system for setting driver/device options and variables was +quite convoluted. It contained three redundant lists: PL_DRIVER_LIST, +PL_DYNAMIC_DRIVER_LIST, and PL_device_driver_pair_list. This has been +overly simplified now. There is a single comma-separated list now +(PL_DEVICE_DRIVER_LIST) whose components are like: + + device:driver:default + +Notice that the default value is now set here, as either "yes" or "no". +This list is called in two places: + + PL_ARG_ENABLE_DRIVERS(PL_DRIVERS_DEVICE_LIST) + [...] + PL_ADD_DRIVERS(PL_DRIVERS_DEVICE_LIST) + +Between the two should come parts of the code that used to be in sysloc.in. + +The setting of the $system variable in (4) is completely obsoleted by the +AC_CANONICAL_HOST variable. Besides that, it was just used to set the +with_opt variable for the Cray system. BTW, this variable is not used +anywhere else in PLplot. I got rid of it, together with other legacy stuff +like with_profile and with_warn. + +Besides the diversion cleanup, several other minor changes have been done. +One of them was to get rid of the has_tcl and has_tk variables, which were +redundant to enable_tcl and enable_tk. Also, a cf/README is added to the +project. It contains just a boilerplate now, but will be filled +progressively. + + + +Bootstraping the package +------------------------ + +cf/bootstrap.sh + +aclocal -> creation of aclocal.m4 + +./configure and so forth should be transparent + + + -- Rafael Laboissiere <ra...@us...> Mon Feb 15 19:22:07 CET 2004 Index: drivers.ac =================================================================== RCS file: /cvsroot/plplot/plplot/cf/Attic/drivers.ac,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- drivers.ac 17 Feb 2004 10:05:26 -0000 1.1.2.2 +++ drivers.ac 21 Feb 2004 13:03:20 -0000 1.1.2.3 @@ -1,4 +1,4 @@ -dnl cf/libtool.ac for PLplot -*- autoconf -*- +dnl cf/drivers.ac for PLplot -*- autoconf -*- dnl dnl Support macros for driver inclusion and help entries. dnl @@ -22,41 +22,3 @@ dnl along with the file PLplot; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -dnl Drivers -dnl ------------------------------------------------------------------------ -dnl - -dnl Including a driver in the below list includes it by default. -dnl Note that each driver should be treated separately even if -dnl they are in the same source code file. -dnl For example, the ps and psc drivers are defined in the ps.c source -dnl code file. - -dnl N.B. This is ordered the same as the *driver pair* list below to help -dnl humans keep the associations straight, but this is not necessary. - -dnl Note specifically which drivers are known to be loadable. Eventually, -dnl hopefully, every driver will show up on this list. However, we add them one -dnl at a time since each will have its own peculiarities in the build process -dnl (none missing at present). - -dnl N.B. This is ordered the same as the *driver pair* list below to help -dnl humans keep the associations straight, but this is not necessary. - -dnl We think of a "device" as the output medium. Could be a machine -dnl style (Tektronix, X11), or a file format (Postscript). -dnl -dnl A "driver" is the PLplot code that produces the output on the -dnl medium. -dnl -dnl Some drivers support multiple devices. But we we need to make sure -dnl we compile only the selected drivers. That is, if a driver supports -dnl devices not selected, we don't want to compile it at all. Or if it -dnl supports multiple selected devices, we only want to compile it -dnl once. To support this, we build an association list between devices -dnl and drivers. This will be inspected to build up the set of drivers -dnl to be compiled based on which devices are selected. - -dnl Ordered alphabetically by second in each pair (the driver) for human -dnl consumption, but this is not necessary. - Index: libtool.ac =================================================================== RCS file: /cvsroot/plplot/plplot/cf/Attic/libtool.ac,v retrieving revision 1.1.2.3 retrieving revision 1.1.2.4 diff -u -d -r1.1.2.3 -r1.1.2.4 --- libtool.ac 17 Feb 2004 10:05:26 -0000 1.1.2.3 +++ libtool.ac 21 Feb 2004 13:03:20 -0000 1.1.2.4 @@ -27,6 +27,16 @@ building the convenience version shipped with the sources], no) +dnl If the user don't want (or the system is not capable of) to build +dnl shared libraries, then disable dynamic drivers, as they are +dnl dynamically loaded objects. + +if test "$enable_shared" != yes ; then + AC_MSG_WARN([Dynamic drivers require enable-shared=yes,]) + AC_MSG_WARN([setting enable_dyndrivers=no]) + enable_dyndrivers=no +fi + if test "$enable_dyndrivers" = "yes"; then AC_LIBTOOL_DLOPEN AC_CHECK_LIB(ltdl, lt_dlinit, [libltdl_in_system=yes], Index: python.ac =================================================================== RCS file: /cvsroot/plplot/plplot/cf/Attic/python.ac,v retrieving revision 1.1.2.2 retrieving revision 1.1.2.3 diff -u -d -r1.1.2.2 -r1.1.2.3 --- python.ac 17 Feb 2004 10:05:26 -0000 1.1.2.2 +++ python.ac 21 Feb 2004 13:03:20 -0000 1.1.2.3 @@ -30,6 +30,7 @@ ### not stop. pushdef([AC_MSG_ERROR],defn([AC_MSG_WARN])) AM_PATH_PYTHON(1.5) + PYTHON_DEVEL popdef([AC_MSG_ERROR]) if test -n "$PYTHON_VERSION" ; then ### PYTHON_INSTDIR is the same as $pythondir except that the |