1 dnl /usr/share/aclocal/guidod-cvs/ax_set_version_info.m4
2 dnl @synopsis AX_SET_VERSION_INFO [(VERSION [,PREFIX])]
3 dnl @synopsis default $1 = $PACKAGE_VERSION
4 dnl @synopsis default $2 = <none>
6 dnl This macro is the successor of AC_SET_RELEASEINFO_VERSIONINFO but
7 dnl it can be used in parallel because it uses all different variables.
9 dnl check the $VERSION number and cut the two last digit-sequences off
10 dnl which will form a -version-info in a @VERSION_INFO@ ac_subst while
11 dnl the rest is going to the -release name in a @RELEASE_INFO@
14 dnl you should keep these two seperate - the release-name may contain
15 dnl alpha-characters and can be modified later with extra release-hints
16 dnl e.g. RELEASE_INFO="$RELEASE_INFO-debug" for a debug version of your
17 dnl lib. The $VERSION_INFO however should not be touched.
19 dnl example: a VERSION="2.4.18" will be transformed into
21 dnl RELEASE_INFO = -release 2
22 dnl VERSION_INFO = -versioninfo 4:18
24 dnl then use these two variables and push them to your libtool linker
26 dnl libtest_la_LIBADD = @RELEASE_INFO@ @VERSION_INFO@
28 dnl and for a linux-target this will tell libtool to install the lib as
30 dnl libmy.so libmy.la libmy.a libmy-2.so.4 libmy-2.so.4.0.18
32 dnl and executables will get link-resolve-infos for libmy-2.so.4 -
33 dnl therefore the patch-level is ignored during ldso linking, and ldso
34 dnl will use the one with the highest patchlevel. Using just "-release
35 dnl $(VERSION)" during libtool-linking would not do that - omitting the
36 dnl -version-info will libtool install libmy.so libmy.la libmy.a
37 dnl libmy-2.4.18.so and executables would get hardlinked with the
38 dnl 2.4.18 version of your lib.
40 dnl This background does also explain the default dll name for a win32
41 dnl target : libtool will choose to make up libmy-2-4.dll for this
44 dnl this macro does also set the usual three parts of a version spec
45 dnl $MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION but does not ac_subst
46 dnl for the plain AX_SET_VERSION_INFO macro. Use instead one of the
47 dnl numbered macros AX_SET_VERSION_INFO1 (use first number for release
48 dnl part) or that AX_SET_VERSION_INFO2 (use the first two numbers for
51 dnl You may add sublevel parts like "1.4.2-ac5" where the sublevel is
52 dnl just killed from these version/release substvars. That allows to
53 dnl grab the version off a .spec file like with AX_SPEC_PACKAGE_VERSION
54 dnl where the $VERSION is used to name a tarball or distpack like
57 dnl Unlike earlier macros, you can use this one to break up different
58 dnl VERSIONs and put them into different variables, just hint with
59 dnl PREFIX-setting - i.e. _VERSION(2.4.5,TEST) will set variables named
60 dnl TEST_MAJOR_VERSION=2... and of course $TEST_RELEASE_INFO etc. (for
61 dnl the moment, it needs to be a literal prefix *sigh*)
64 dnl @author Guido U. Draheim <guidod@gmx.de>
65 dnl @version 2005-01-21
66 dnl @license GPLWithACException
68 AC_DEFUN([AX_SET_VERSION_INFO1],[dnl
69 AS_VAR_PUSHDEF([MAJOR],ifelse($2,,[MAJOR_VERSION],[$2_MAJOR_VERSION]))dnl
70 AS_VAR_PUSHDEF([MINOR],ifelse($2,,[MINOR_VERSION],[$2_MINOR_VERSION]))dnl
71 AS_VAR_PUSHDEF([MICRO],ifelse($2,,[MICRO_VERSION],[$2_MICRO_VERSION]))dnl
72 AS_VAR_PUSHDEF([PATCH],ifelse($2,,[PATCH_VERSION],[$2_PATCH_VERSION]))dnl
73 AS_VAR_PUSHDEF([LTREL],ifelse($2,,[RELEASE_INFO],[$2_RELEASE_INFO]))dnl
74 AS_VAR_PUSHDEF([LTVER],ifelse($2,,[VERSION_INFO],[$2_VERSION_INFO]))dnl
75 test ".$PACKAGE_VERSION" = "." && PACKAGE_VERSION="$VERSION"
76 AC_MSG_CHECKING(ifelse($2,,,[$2 ])out linker version info dnl
77 ifelse($1,,$PACKAGE_VERSION,$1) )
78 MINOR=`echo ifelse( $1, , $PACKAGE_VERSION, $1 )`
79 MAJOR=`echo "$MINOR" | sed -e 's/[[.]].*//'`
80 MINOR=`echo "$MINOR" | sed -e "s/^$MAJOR//" -e 's/^.//'`
82 MINOR=`echo "$MICRO" | sed -e 's/[[.]].*//'`
83 MICRO=`echo "$MICRO" | sed -e "s/^$MINOR//" -e 's/^.//'`
85 MICRO=`echo "$PATCH" | sed -e 's/[[^0-9]].*//'`
86 PATCH=`echo "$PATCH" | sed -e "s/^$MICRO//" -e 's/^[[-.]]//'`
87 if test "_$MICRO" = "_" ; then MICRO="0" ; fi
88 if test "_$MINOR" = "_" ; then MINOR="$MAJOR" ; MAJOR="0" ; fi
89 MINOR=`echo "$MINOR" | sed -e 's/[[^0-9]].*//'`
90 LTREL="-release $MAJOR"
91 LTVER="-version-info $MINOR:$MICRO"
92 AC_MSG_RESULT([/$MAJOR/$MINOR:$MICRO (-$MAJOR.so.$MINOR.0.$MICRO)])
99 AS_VAR_POPDEF([LTVER])dnl
100 AS_VAR_POPDEF([LTREL])dnl
101 AS_VAR_POPDEF([PATCH])dnl
102 AS_VAR_POPDEF([MICRO])dnl
103 AS_VAR_POPDEF([MINOR])dnl
104 AS_VAR_POPDEF([MAJOR])dnl
107 AC_DEFUN([AX_SET_VERSION_INFO2],[dnl
108 AS_VAR_PUSHDEF([MAJOR],ifelse($2,,[MAJOR_VERSION],[$2_MAJOR_VERSION]))dnl
109 AS_VAR_PUSHDEF([MINOR],ifelse($2,,[MINOR_VERSION],[$2_MINOR_VERSION]))dnl
110 AS_VAR_PUSHDEF([MICRO],ifelse($2,,[MICRO_VERSION],[$2_MICRO_VERSION]))dnl
111 AS_VAR_PUSHDEF([PATCH],ifelse($2,,[PATCH_VERSION],[$2_PATCH_VERSION]))dnl
112 AS_VAR_PUSHDEF([LTREL],ifelse($2,,[RELEASE_INFO],[$2_RELEASE_INFO]))dnl
113 AS_VAR_PUSHDEF([LTVER],ifelse($2,,[VERSION_INFO],[$2_VERSION_INFO]))dnl
114 test ".$PACKAGE_VERSION" = "." && PACKAGE_VERSION="$VERSION"
115 AC_MSG_CHECKING(ifelse($2,,,[$2 ])out linker version info dnl
116 ifelse($1,,$PACKAGE_VERSION,$1) )
117 MINOR=`echo ifelse( $1, , $PACKAGE_VERSION, $1 )`
118 MAJOR=`echo "$MINOR" | sed -e 's/[[.]].*//'`
119 MINOR=`echo "$MINOR" | sed -e "s/^$MAJOR//" -e 's/^.//'`
121 MINOR=`echo "$MICRO" | sed -e 's/[[.]].*//'`
122 MICRO=`echo "$MICRO" | sed -e "s/^$MINOR//" -e 's/^.//'`
124 MICRO=`echo "$PATCH" | sed -e 's/[[^0-9]].*//'`
125 PATCH=`echo "$PATCH" | sed -e "s/^$MICRO//" -e 's/^[[-.]]//'`
126 test "_$MICRO" != "_" || MICRO="0"
127 if test "_$MINOR" != "_" ; then MINOR="$MAJOR" ; MAJOR="0" ; fi
128 MINOR=`echo "$MINOR" | sed -e 's/[[^0-9]].*//'`
129 LTREL="-release $MAJOR.$MINOR"
130 LTVER="-version-info 0:$MICRO"
131 AC_MSG_RESULT([/$MAJOR/$MINOR:$MICRO (-$MAJOR.so.$MINOR.0.$MICRO)])
138 AS_VAR_POPDEF([LTVER])dnl
139 AS_VAR_POPDEF([LTREL])dnl
140 AS_VAR_POPDEF([PATCH])dnl
141 AS_VAR_POPDEF([MICRO])dnl
142 AS_VAR_POPDEF([MINOR])dnl
143 AS_VAR_POPDEF([MAJOR])dnl
146 AC_DEFUN([AX_SET_VERSION_INFO],[dnl
147 AS_VAR_PUSHDEF([MAJOR],ifelse($2,,[MAJOR_VERSION],[$2_MAJOR_VERSION]))dnl
148 AS_VAR_PUSHDEF([MINOR],ifelse($2,,[MINOR_VERSION],[$2_MINOR_VERSION]))dnl
149 AS_VAR_PUSHDEF([MICRO],ifelse($2,,[MICRO_VERSION],[$2_MICRO_VERSION]))dnl
150 AS_VAR_PUSHDEF([PATCH],ifelse($2,,[PATCH_VERSION],[$2_PATCH_VERSION]))dnl
151 AS_VAR_PUSHDEF([LTREL],ifelse($2,,[RELEASE_INFO],[$2_RELEASE_INFO]))dnl
152 AS_VAR_PUSHDEF([LTVER],ifelse($2,,[VERSION_INFO],[$2_VERSION_INFO]))dnl
153 test ".$PACKAGE_VERSION" = "." && PACKAGE_VERSION="$VERSION"
154 AC_MSG_CHECKING(ifelse($2,,,[$2 ])out linker version info dnl
155 ifelse($1,,$PACKAGE_VERSION,$1) )
156 MINOR=`echo ifelse( $1, , $PACKAGE_VERSION, $1 )`
157 MAJOR=`echo "$MINOR" | sed -e 's/[[.]].*//'`
158 MINOR=`echo "$MINOR" | sed -e "s/^$MAJOR//" -e 's/^.//'`
160 MINOR=`echo "$MICRO" | sed -e 's/[[.]].*//'`
161 MICRO=`echo "$MICRO" | sed -e "s/^$MINOR//" -e 's/^.//'`
163 MICRO=`echo "$PATCH" | sed -e 's/[[^0-9]].*//'`
164 PATCH=`echo "$PATCH" | sed -e "s/^$MICRO//" -e 's/[[-.]]//'`
165 if test "_$MICRO" = "_" ; then MICRO="0" ; fi
166 if test "_$MINOR" = "_" ; then MINOR="$MAJOR" ; MAJOR="0" ; fi
167 MINOR=`echo "$MINOR" | sed -e 's/[[^0-9]].*//'`
168 LTREL="-release $MAJOR"
169 LTVER="-version-info $MINOR:$MICRO"
170 AC_MSG_RESULT([/$MAJOR/$MINOR:$MICRO (-$MAJOR.so.$MINOR.0.$MICRO)])
173 AS_VAR_POPDEF([LTVER])dnl
174 AS_VAR_POPDEF([LTREL])dnl
175 AS_VAR_POPDEF([PATCH])dnl
176 AS_VAR_POPDEF([MICRO])dnl
177 AS_VAR_POPDEF([MINOR])dnl
178 AS_VAR_POPDEF([MAJOR])dnl