Macro: ac_set_versionlevel

Back to the Main Page. | # ac_set_versionlevel | Download the M4 Source.

Synopsis

  `AC_SET_VERSIONLEVEL(VARNAME [,VERSION])`

Version

  1.1 (2001/10/31) guidod @ ac-archive-0.5.39

Author

  Guido Draheim <guidod@gmx.de>

Description

  if the VERSION is ommitted, shellvar $VERSION is used as defined by AM_INIT_AUTOMAKE's second argument.

  The versionlevel is the numeric representation of the given version string, thereby assuming the inputversion is a string with (maximal) three decimal numbers seperated by "."-dots. A "-patch" adds a percent.

  typical usage: AM_INIT_AUTOMAKE(mypkg,4.12.3) AC_SET_VERSIONLEVEL(MYPKG_VERSION) AC_DEFINE_UNQUOTED(MYPKG_VERSION, $MYPKG_VERSION, [package version])

  (this macro shall superced AC_DEFINE_VERSIONLEVEL at some day)

  the version code has three digits per part which I feel is the most natural encoding - it makes it easier to be printf'd anyway

  examples:
  `3.0-beta1 3000001`
  `3.1 3010000`
  `3.11 3110000`
  `3.11-dirpatch 3111000`
  `3.11-patch6 3110006`
  `2.2.18 2020018`
  `2.0.112 2000112`
  `2.4.2 2040002`
  `2.4.2-pre 2040003`
  `2.4.2-pre5 2040003`
  `5.0-build125 5000125`
  `5.0 5000000`
  `0.30.17 30017`

M4 Source Code

      AC_DEFUN([AC_SET_VERSIONLEVEL],
      [dnl
      m4_pushdef(LVL, $1_LEVEL)
      m4_pushdef(MJR, $1_MAJOR)
      m4_pushdef(MNR, $1_MINOR)
      m4_pushdef(MCR, $1_MICRO)
      LVL=`echo ifelse($2, , $VERSION, $2) | sed -e 's:[[A-Z-]]*:.:g' -e 's:[[^0-9.]]::g' -e 's:[[.]]*:.:g' -e 's:^[[.]]*::'`
      AC_MSG_CHECKING( $1 versionlevel $LVL)
      case $LVL in
       *.*.*.|*.*.*.*|*.*.*) :
       MJR=`echo $LVL`
       MNR=`echo $MJR | sed -e 's/[[^.]]*[[.]]//'`
       MCR=`echo $MNR | sed -e 's/[[^.]]*[[.]]//'`
       MJR=`echo $MJR | sed -e 's/[[.]].*//'`
       MNR=`echo $MNR | sed -e 's/[[.]].*//'`
       MCR=`echo $MCR | sed -e 's/[[.]].*//'`
       ;;
       *.*.|*.*) :
       MJR=`echo $LVL`
       MNR=`echo $MJR | sed -e 's/[[^.]]*[[.]]//'`
       MJR=`echo $MJR | sed -e 's/[[.]].*//'`
       MNR=`echo $MNR | sed -e 's/[[.]].*//'`
       MCR=0
       ;;
       *.) :
       MJR=0
       MNR=`echo $LVL`
       MNR=`echo $MNR | sed -e 's/[[.]].*//'`
       MCR=0
       ;;
      esac
      # we trust sed greedy-match backtracking to extract the last three digits from each part, forming a nine-digit
      $1=`echo 000$MJR.000$MNR.000$MCR | sed -e 's:\\(...\\)[[.]][[^.]]*\\((...\\))[[.]][[^.*]]\\((...\\)):\\1\\2\\3 -e 's:^0*::''
      AC_MSG_RESULT($[$1] ($MJR,$MNR,$MCR)
      dnl AC_DEFINE_UNQUOTED( $1, $[$1], ifelse( $3, , $PACKAGE versionlevel, $3))
      m4_popdef(MCR)
      m4_popdef(MNR)
      m4_popdef(MJR)
      m4_popdef(LVL)
      ])