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 @VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA@
#define VERSION_NUMBER_STR "@VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA_RC@" #define VERSION_NUMBER_STR "@VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA@"
VLC_ICON ICON "vlc.ico" VLC_ICON ICON "vlc.ico"
......
...@@ -3,10 +3,12 @@ dnl Autoconf settings for vlc ...@@ -3,10 +3,12 @@ dnl Autoconf settings for vlc
AC_COPYRIGHT([Copyright 2002-2011 the VideoLAN team]) AC_COPYRIGHT([Copyright 2002-2011 the VideoLAN team])
AC_INIT(vlc, 1.2.0-git) AC_INIT(vlc, 1.2.0-git)
VERSION_MAJOR="1" VERSION_MAJOR=1
VERSION_MINOR="2" VERSION_MINOR=2
VERSION_REVISION="0" VERSION_REVISION=0
VERSION_EXTRA="-git" VERSION_EXTRA=0
VERSION_DEV=git
PKGDIR="vlc" PKGDIR="vlc"
AC_SUBST(PKGDIR) AC_SUBST(PKGDIR)
...@@ -4262,10 +4264,11 @@ AC_DEFINE_UNQUOTED(VERSION_MESSAGE, "${VERSION_MESSAGE}", [Simple version string ...@@ -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_MESSAGE, "${COPYRIGHT_MESSAGE}", [Copyright string])
AC_DEFINE_UNQUOTED(COPYRIGHT_YEARS, "${COPYRIGHT_YEARS}", [The copyright years]) AC_DEFINE_UNQUOTED(COPYRIGHT_YEARS, "${COPYRIGHT_YEARS}", [The copyright years])
AC_DEFINE_UNQUOTED(CONFIGURE_LINE, "${CONFIGURE_LINE}", [The ./configure command line]) 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_MAJOR,${VERSION_MAJOR}, [version major number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_MINOR,"${VERSION_MINOR}", [version minor 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_REVISION,${VERSION_REVISION}, [version revision number])
AC_DEFINE_UNQUOTED(PACKAGE_VERSION_EXTRA,"${VERSION_EXTRA}", [version minor 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(COPYRIGHT_MESSAGE)
AC_SUBST(VERSION_MESSAGE) AC_SUBST(VERSION_MESSAGE)
AC_SUBST(VERSION_MAJOR) AC_SUBST(VERSION_MAJOR)
...@@ -4276,13 +4279,6 @@ AC_SUBST(COPYRIGHT_YEARS) ...@@ -4276,13 +4279,6 @@ AC_SUBST(COPYRIGHT_YEARS)
AC_DEFINE_UNQUOTED(VLC_COMPILE_BY, "`whoami`", [user who ran configure]) 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_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]) 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
dnl Handle substvars that use $(top_srcdir) dnl Handle substvars that use $(top_srcdir)
dnl dnl
......
...@@ -46,7 +46,7 @@ struct update_release_t ...@@ -46,7 +46,7 @@ struct update_release_t
int i_major; ///< Version major int i_major; ///< Version major
int i_minor; ///< Version minor int i_minor; ///< Version minor
int i_revision; ///< Version revision int i_revision; ///< Version revision
unsigned char extra;///< Version extra int i_extra; ///< Version extra
char* psz_url; ///< Download URL char* psz_url; ///< Download URL
char* psz_desc; ///< Release description char* psz_desc; ///< Release description
}; };
......
...@@ -242,7 +242,7 @@ void UpdateDialog::updateNotify( bool b_result ) ...@@ -242,7 +242,7 @@ void UpdateDialog::updateNotify( bool b_result )
.arg( QString::number( p_release->i_major ) ) .arg( QString::number( p_release->i_major ) )
.arg( QString::number( p_release->i_minor ) ) .arg( QString::number( p_release->i_minor ) )
.arg( QString::number( p_release->i_revision ) ) .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.updateNotifyLabel->setText( message );
ui.updateNotifyTextEdit->setText( qfu( p_release->psz_desc ) ); ui.updateNotifyTextEdit->setText( qfu( p_release->psz_desc ) );
......
#define VERSION_NUMBER @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_RC@" #define VERSION_NUMBER_STR "@VERSION_MAJOR@,@VERSION_MINOR@,@VERSION_REVISION@,@VERSION_EXTRA@"
1 VERSIONINFO 1 VERSIONINFO
FILETYPE 2 FILETYPE 2
......
...@@ -64,12 +64,12 @@ ...@@ -64,12 +64,12 @@
/* /*
* Here is the format of these "status files" : * 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 * * X is the major number
* * Y is the minor number * * Y is the minor number
* * Z is the revision number * * Z is the revision number
* * e is an OPTIONAL extra letter * * .E is an OPTIONAL extra number
* * AKA "0.8.6d" or "0.9.0" * * IE "1.2.0" or "1.1.10.1"
* Second line is a url of the binary for this last version * Second line is a url of the binary for this last version
* Remaining text is a required description of the update * Remaining text is a required description of the update
*/ */
...@@ -180,10 +180,6 @@ static void EmptyRelease( update_t *p_update ) ...@@ -180,10 +180,6 @@ static void EmptyRelease( update_t *p_update )
static bool GetUpdateFile( update_t *p_update ) static bool GetUpdateFile( update_t *p_update )
{ {
stream_t *p_stream = NULL; 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_version_line = NULL;
char *psz_update_data = NULL; char *psz_update_data = NULL;
...@@ -223,18 +219,12 @@ static bool GetUpdateFile( update_t *p_update ) ...@@ -223,18 +219,12 @@ static bool GetUpdateFile( update_t *p_update )
strncpy( psz_version_line, psz_update_data, i_len ); strncpy( psz_version_line, psz_update_data, i_len );
psz_version_line[i_len] = '\0'; psz_version_line[i_len] = '\0';
p_update->release.extra = 0; p_update->release.i_extra = 0;
switch( sscanf( psz_version_line, "%i.%i.%i%c", int ret = sscanf( psz_version_line, "%i.%i.%i.%i",
&i_major, &i_minor, &i_revision, &extra ) ) &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" ); msg_Err( p_update->p_libvlc, "Update version false formated" );
goto error; goto error;
} }
...@@ -428,40 +418,39 @@ void* update_CheckReal( void *obj ) ...@@ -428,40 +418,39 @@ void* update_CheckReal( void *obj )
return NULL; 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 ) bool update_NeedUpgrade( update_t *p_update )
{ {
assert( p_update ); assert( p_update );
int current_version[] = { static const int current[4] = {
*PACKAGE_VERSION_MAJOR - '0', PACKAGE_VERSION_MAJOR,
*PACKAGE_VERSION_MINOR - '0', PACKAGE_VERSION_MINOR,
*PACKAGE_VERSION_REVISION - '0', PACKAGE_VERSION_REVISION,
/* extra string of development versions is "-git", "-rc" .. PACKAGE_VERSION_EXTRA
* so make sure version a.b.c is newer than a.b.c-XXX */
(*PACKAGE_VERSION_EXTRA == '-') ? -1 : *PACKAGE_VERSION_EXTRA
}; };
int latest_version[] = { const int latest[4] = {
p_update->release.i_major, p_update->release.i_major,
p_update->release.i_minor, p_update->release.i_minor,
p_update->release.i_revision, 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