Commit c1a3ecd4 authored by Rafaël Carré's avatar Rafaël Carré

update: better version comparison

These days the extra vlc revision is an integer (1.1.10.1), not a
letter like in 0.8.6f days
Make PACKAGE_VERSION_* be integer, we don't need them to be strings
PACKAGE_VERSION_EXTRA now represents only this number, and is set to
0 when not used (1.1.11.0 represents 1.1.11)

Add PACKAGE_VERSION_DEV (== "git" or "rc*"), to be sure development
versions are less recent than released versions.
This string is never displayed, it is only tested for nullity

The file format on our servers can use X.Y.Z or X.Y.Z.E
parent ec722921
#define VERSION_NUMBER @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA_RC@
#define VERSION_NUMBER_STR "@VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA_RC@"
#define VERSION_NUMBER @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA@
#define VERSION_NUMBER_STR "@VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA@"
VLC_ICON ICON "vlc.ico"
......
......@@ -3,10 +3,12 @@ dnl Autoconf settings for vlc
AC_COPYRIGHT([Copyright 2002-2011 the VideoLAN team])
AC_INIT(vlc, 1.2.0-git)
VERSION_MAJOR="1"
VERSION_MINOR="2"
VERSION_REVISION="0"
VERSION_EXTRA="-git"
VERSION_MAJOR=1
VERSION_MINOR=2
VERSION_REVISION=0
VERSION_EXTRA=0
VERSION_DEV=git
PKGDIR="vlc"
AC_SUBST(PKGDIR)
......@@ -4262,10 +4264,11 @@ AC_DEFINE_UNQUOTED(VERSION_MESSAGE, "${VERSION_MESSAGE}", [Simple version string
AC_DEFINE_UNQUOTED(COPYRIGHT_MESSAGE, "${COPYRIGHT_MESSAGE}", [Copyright string])
AC_DEFINE_UNQUOTED(COPYRIGHT_YEARS, "${COPYRIGHT_YEARS}", [The copyright years])
AC_DEFINE_UNQUOTED(CONFIGURE_LINE, "${CONFIGURE_LINE}", [The ./configure command line])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_MAJOR,"${VERSION_MAJOR}", [version major number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_MINOR,"${VERSION_MINOR}", [version minor number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_REVISION,"${VERSION_REVISION}", [version minor number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_EXTRA,"${VERSION_EXTRA}", [version minor number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_MAJOR,${VERSION_MAJOR}, [version major number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_MINOR,${VERSION_MINOR}, [version minor number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_REVISION,${VERSION_REVISION}, [version revision number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_EXTRA,${VERSION_EXTRA}, [version extra number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_DEV,"${VERSION_DEV}", [version development string])
AC_SUBST(COPYRIGHT_MESSAGE)
AC_SUBST(VERSION_MESSAGE)
AC_SUBST(VERSION_MAJOR)
......@@ -4276,13 +4279,6 @@ AC_SUBST(COPYRIGHT_YEARS)
AC_DEFINE_UNQUOTED(VLC_COMPILE_BY, "`whoami`", [user who ran configure])
AC_DEFINE_UNQUOTED(VLC_COMPILE_HOST, "`hostname -f 2>/dev/null || hostname`", [host which ran configure])
AC_DEFINE_UNQUOTED(VLC_COMPILER, "`$CC -v 2>&1 | tail -n 1`", [compiler])
dnl Win32 need s a numerical version_extra.
case $( echo ${VERSION_EXTRA}|wc -m ) in
"1") VERSION_EXTRA_RC="0";;
"2") VERSION_EXTRA_RC=$( echo ${VERSION_EXTRA}|tr "abcdefghi" "123456789") ;;
*) VERSION_EXTRA_RC="99"
esac
AC_SUBST(VERSION_EXTRA_RC)
dnl
dnl Handle substvars that use $(top_srcdir)
dnl
......
......@@ -46,7 +46,7 @@ struct update_release_t
int i_major; ///< Version major
int i_minor; ///< Version minor
int i_revision; ///< Version revision
unsigned char extra;///< Version extra
int i_extra; ///< Version extra
char* psz_url; ///< Download URL
char* psz_desc; ///< Release description
};
......
......@@ -242,7 +242,7 @@ void UpdateDialog::updateNotify( bool b_result )
.arg( QString::number( p_release->i_major ) )
.arg( QString::number( p_release->i_minor ) )
.arg( QString::number( p_release->i_revision ) )
.arg( ( p_release->extra )?QString( p_release->extra ):"" );
.arg( p_release->i_extra == 0 ? "" : "." + QString::number( p_release->i_extra ) );
ui.updateNotifyLabel->setText( message );
ui.updateNotifyTextEdit->setText( qfu( p_release->psz_desc ) );
......
#define VERSION_NUMBER @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA_RC@
#define VERSION_NUMBER_STR "@VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA_RC@"
#define VERSION_NUMBER @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA@
#define VERSION_NUMBER_STR "@VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA@"
1 VERSIONINFO
FILETYPE 2
......
......@@ -64,12 +64,12 @@
/*
* Here is the format of these "status files" :
* First line is the last version: "X.Y.Ze" where:
* First line is the last version: "X.Y.Z.E" where:
* * X is the major number
* * Y is the minor number
* * Z is the revision number
* * e is an OPTIONAL extra letter
* * AKA "0.8.6d" or "0.9.0"
* * .E is an OPTIONAL extra number
* * IE "1.2.0" or "1.1.10.1"
* Second line is a url of the binary for this last version
* Remaining text is a required description of the update
*/
......@@ -180,10 +180,6 @@ static void EmptyRelease( update_t *p_update )
static bool GetUpdateFile( update_t *p_update )
{
stream_t *p_stream = NULL;
int i_major = 0;
int i_minor = 0;
int i_revision = 0;
unsigned char extra;
char *psz_version_line = NULL;
char *psz_update_data = NULL;
......@@ -223,18 +219,12 @@ static bool GetUpdateFile( update_t *p_update )
strncpy( psz_version_line, psz_update_data, i_len );
psz_version_line[i_len] = '\0';
p_update->release.extra = 0;
switch( sscanf( psz_version_line, "%i.%i.%i%c",
&i_major, &i_minor, &i_revision, &extra ) )
p_update->release.i_extra = 0;
int ret = sscanf( psz_version_line, "%i.%i.%i.%i",
&p_update->release.i_major, &p_update->release.i_minor,
&p_update->release.i_revision, &p_update->release.i_extra);
if( ret != 3 && ret != 4 )
{
case 4:
p_update->release.extra = extra;
case 3:
p_update->release.i_major = i_major;
p_update->release.i_minor = i_minor;
p_update->release.i_revision = i_revision;
break;
default:
msg_Err( p_update->p_libvlc, "Update version false formated" );
goto error;
}
......@@ -428,40 +418,39 @@ void* update_CheckReal( void *obj )
return NULL;
}
/**
* Compare a given release's version number to the current VLC's one
*
* \param p_update structure
* \return true if we have to upgrade to the given version to be up to date
*/
static bool is_strictly_greater( int * a, int * b, int n)
{
if( n <= 0 ) return false;
if(a[0] > b[0] ) return true;
if(a[0] == b[0] ) return is_strictly_greater( a+1, b+1, n-1 );
/* a[0] < b[0] */ return false;
}
bool update_NeedUpgrade( update_t *p_update )
{
assert( p_update );
int current_version[] = {
*PACKAGE_VERSION_MAJOR - '0',
*PACKAGE_VERSION_MINOR - '0',
*PACKAGE_VERSION_REVISION - '0',
/* extra string of development versions is "-git", "-rc" ..
* so make sure version a.b.c is newer than a.b.c-XXX */
(*PACKAGE_VERSION_EXTRA == '-') ? -1 : *PACKAGE_VERSION_EXTRA
static const int current[4] = {
PACKAGE_VERSION_MAJOR,
PACKAGE_VERSION_MINOR,
PACKAGE_VERSION_REVISION,
PACKAGE_VERSION_EXTRA
};
int latest_version[] = {
const int latest[4] = {
p_update->release.i_major,
p_update->release.i_minor,
p_update->release.i_revision,
p_update->release.extra
p_update->release.i_extra
};
return is_strictly_greater( latest_version, current_version, 4 );
for (unsigned i = 0; i < sizeof latest / sizeof *latest; i++) {
/* there is a new version available */
if (latest[i] > current[i])
return true;
/* current version is more recent than the latest version ?! */
if (latest[i] < current[i])
return false;
}
/* current version is not a release, it's a -git or -rc version */
if (*PACKAGE_VERSION_DEV)
return true;
/* current version is latest version */
return false;
}
/**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment