[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

svn-config script

From: Eric Gillespie <epg_at_pretzelnet.org>
Date: 2002-07-12 20:46:35 CEST

I have attached the autoconf machinery we use at Progeny to generate
*-config scripts. It is a generic mechanism that is used to generate
*-config scripts for multiple packages. It's part of the buildtools
CVS module all modules include (the reason i want hard links in
svn).

The package's configure.ac needs to setup certain variables and
call the PROGENY_CONFIG_SCRIPT macro, which takes the name of the
conf script as an optional name (or ${PACKAGE_TARNAME}-config if
not specified). The config script name is exported as
PROGENY_CONFIG_SCRIPT_NAME. Extra variables can be added to the
script with the PROGENY_CONFIG_SCRIPT_VAR macro. configure.ac must
create the export_CPPFLAGS, export_LDFLAGS, and export_LIBS variables,
which are used for the --cppflags, --ldflags, and --libs options,
respectively. These may or may not be the same as CPPFLAGS, LDFLAGS,
and LIBS, which is why we use special variables for exporting to
the -config script.

Then one of the Makefiles copies config-script over to FOO-config.
We do this in buildtools/Makefile.in, but of course it doesn't
matter where it's done. Here are the relevant portions of that
Makefile:

##############################################################################
CONFIG_SCRIPT= @PROGENY_CONFIG_SCRIPT_NAME@

all: ${CONFIG_SCRIPT}

${CONFIG_SCRIPT}: config-script
        ${INSTALL} config-script $@

install: ${CONFIG_SCRIPT}
        ${INSTALL_DIR} ${DESTDIR}${bindir}
        ${INSTALL_SCRIPT} ${CONFIG_SCRIPT} ${DESTDIR}${bindir}/${CONFIG_SCRIPT}
##############################################################################

As a hint to how svn-config might work:

export_LIBS="${client_LIBS} ${fs_LIBS}" # etc.
PROGENY_CONFIG_SCRIPT_VAR(client_libs, ${client_LIBS})
PROGENY_CONFIG_SCRIPT_VAR(fs_libs, ${fs_LIBS})

This also generates a Docbook refentry fragment which we use to
make a man page for the -config script. I can share that stuff
too, if you're interested.

If this is useful, great, but it looks like someone has already
started work on an svn-config script, so whatever. It would be
remiss of me not to post it, though. If you do use it, you'll
probably want to remove the PROGENY_ crap that's all over the place
and use your own prefix ;->.

-- 
Eric Gillespie, Jr. <*> epg@pretzelnet.org
Build a fire for a man, and he'll be warm for a day.  Set a man on
fire, and he'll be warm for the rest of his life. -Terry Pratchett

# $Progeny: config-script.m4,v 1.9 2002/07/12 07:02:12 epg Exp $

AC_DEFUN(PROGENY_CONFIG_SCRIPT_VAR, [

PROGENY_CONFIG_SCRIPT_VARS="${PROGENY_CONFIG_SCRIPT_VARS}; VARS=\"\${VARS} $1\""
PROGENY_CONFIG_SCRIPT_SET="${PROGENY_CONFIG_SCRIPT_SET}; $1=\"$2\""

PROGENY_CONFIG_SCRIPT_DOC="${PROGENY_CONFIG_SCRIPT_DOC}
      <listitem>
        <para><varname>$1</varname></para>
      </listitem>
"
])

AC_DEFUN(PROGENY_CONFIG_SCRIPT, [

ifelse($1, [],
    PROGENY_CONFIG_SCRIPT_NAME=${PACKAGE_TARNAME}-config
,
    PROGENY_CONFIG_SCRIPT_NAME="$1"
)

dnl Initialize these so they don't start with a semicolon since some
dnl shells react badly to a leading semicolon.
PROGENY_CONFIG_SCRIPT_VARS=":"
PROGENY_CONFIG_SCRIPT_SET=":"

PROGENY_CONFIG_SCRIPT_VAR(major_version, ${PACKAGE_MAJOR})
PROGENY_CONFIG_SCRIPT_VAR(minor_version, ${PACKAGE_MINOR})
PROGENY_CONFIG_SCRIPT_VAR(micro_version, ${PACKAGE_MICRO})
PROGENY_CONFIG_SCRIPT_VAR(version,
                          \${major_version}.\${minor_version}.\${micro_version})
PROGENY_CONFIG_SCRIPT_VAR(lt_current, ${LT_CURRENT})
PROGENY_CONFIG_SCRIPT_VAR(lt_revision, ${LT_REVISION})
PROGENY_CONFIG_SCRIPT_VAR(lt_age, ${LT_AGE})
PROGENY_CONFIG_SCRIPT_VAR(cppflags, ${export_CPPFLAGS})
PROGENY_CONFIG_SCRIPT_VAR(ldflags, ${export_LDFLAGS})
PROGENY_CONFIG_SCRIPT_VAR(libs, ${export_LIBS})

for var in prefix \
           exec_prefix; do
    eval val="\$${var}"
    if test "${val}" = "NONE"; then
        val=${ac_default_prefix}
    fi
    PROGENY_CONFIG_SCRIPT_VAR(${var}, ${val})
done

for var in bindir \
         sbindir \
         libexecdir \
         datadir \
         sysconfdir \
         sharedstatedir \
         localstatedir \
         libdir \
         includedir \
         oldincludedir \
         infodir \
         mandir \
         build \
         build_cpu \
         build_vendor \
         build_os \
         host \
         host_cpu \
         host_vendor \
         host_os \
         target \
         target_cpu \
         target_vendor \
         target_os; do
    eval val="\$${var}"
    PROGENY_CONFIG_SCRIPT_VAR(${var}, ${val})
done

AC_SUBST(PROGENY_CONFIG_SCRIPT_NAME)
AC_SUBST(PROGENY_CONFIG_SCRIPT_SET)
AC_SUBST(PROGENY_CONFIG_SCRIPT_VARS)

AC_CONFIG_FILES(buildtools/config-script)

AC_CONFIG_COMMANDS(config-script-doc,
                   echo "${doctext}" \
                       | ${ac_top_srcdir}/${mkdoc} \
                           ${refentry} \
                           ${docname}
                   ,
                   doctext="${PROGENY_CONFIG_SCRIPT_DOC}";
                   mkdoc='buildtools/config-script-mkdoc';
                   refentry='buildtools/config-script.refentry';
                   docname="${PROGENY_CONFIG_SCRIPT_NAME}")
])

#! /bin/sh

# $Progeny: config-script.in,v 1.3 2002/07/11 23:45:44 epg Exp $$

# This program is in the public domain.

# Too bad we don't have something like sysexits.h for POSIX sh...
EX_USAGE=64

@PROGENY_CONFIG_SCRIPT_VARS@
@PROGENY_CONFIG_SCRIPT_SET@

usage ()
{
    cat <<EOF
usage: $0 --VAR ...

Print the value of the variable VAR. Run $0 -l or $0 --list for a list
of valid variable names.
EOF
}

listvars ()
{
    for i in ${VARS}; do
        echo ${i}
    done
}

###############################################################################

if [ $# -eq 0 ]; then
    usage
    exit ${EX_USAGE}
fi

while [ $# -gt 0 ]; do
    case $1 in
    -l|--list-vars)
        listvars
        break
        ;;

    --)
        usage
        exit ${EXIT_USAGE}
        ;;

    --*)
        var=$(echo $1 | sed -e 's/^--//' -e 's/-/_/g')
        eval val="\$${var}"
        if [ "x${val}" = 'x' ]; then
            usage
            exit ${EX_USAGE}
        else
            echo ${val}
        fi
        ;;

    *)
        usage
        exit ${EX_USAGE}
    esac

    shift
done

exit 0

#! /bin/sh

# $Progeny: config-script-mkdoc,v 1.2 2002/07/11 21:08:20 epg Exp $

# This program is in the public domain.

# Too bad we don't have something like sysexits.h for POSIX sh...
EX_USAGE=64

if [ $# -ne 2 ]; then
    exit ${EX_USAGE}
fi

refentry=$1
name=$2

set -e

cat <<EOF > ${refentry}
  <refmeta>
    <refentrytitle>${name}</refentrytitle>
    <manvolnum>1</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>${name}</refname>
    <refpurpose>config script doohickey</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <cmdsynopsis>
      <command>${name}</command>
      <arg choice="opt">options</arg>
    </cmdsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><command>${name}</command> reports
    stuff about the package's configuration.</para>
  </refsect1>

  <refsect1>
    <title>Options</title>

    <variablelist>
      <varlistentry>
        <term><option>--VAR</option></term>
        <listitem>
          <para>Print the value of the variable VAR followed by a
          newline. See below for a list of available
          variables.</para>
        </listitem>
      </varlistentry>
      <varlistentry>
        <term><option>-l, --list</option></term>
        <listitem>
          <para>List the available variables.</para>
        </listitem>
      </varlistentry>
    </variablelist>
  </refsect1>

  <refsect1>
    <title>Variables</title>

    <itemizedlist>
EOF

cat >> ${refentry}

cat <<EOF >> ${refentry}
    </itemizedlist>
  </refsect1>
EOF

exit 0

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Fri Jul 12 20:47:09 2002

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.