From: Jon Turney Date: Fri, 19 Jan 2018 15:36:03 +0000 (+0000) Subject: Add setup-minimum-version: to setup.ini X-Git-Tag: release_2.890~8 X-Git-Url: https://cygwin.com/git/?a=commitdiff_plain;h=ec5992842a21868f542686031bc1f271d7037de7;p=cygwin-apps%2Fsetup.git Add setup-minimum-version: to setup.ini This allows setup.ini to require a certain setup version, rather than advise a newer version when one is available. Unfortunately, versions of setup prior to this one don't implement this, but at least we have this going forward. When we want to start using this, we can break backwards compatibility with even older setup in a less clean way, simply by using setup.ini grammar that they can't parse. --- diff --git a/IniDBBuilderPackage.cc b/IniDBBuilderPackage.cc index 8fa6ad92..ed861a53 100644 --- a/IniDBBuilderPackage.cc +++ b/IniDBBuilderPackage.cc @@ -65,6 +65,22 @@ IniDBBuilderPackage::buildVersion (const std::string& aVersion) } } +const std::string +IniDBBuilderPackage::buildMinimumVersion (const std::string& minimum) +{ + if (version_compare(setup_version, minimum) < 0) + { + char min_vers[256]; + snprintf (min_vers, sizeof(min_vers), + "The current ini file requires at least version %s of setup.\n" + "Please download a newer version from http://www.cygwin.com/setup-%s.exe", + minimum.c_str(), + is_64bit ? "x86_64" : "x86"); + return min_vers; + } + return ""; +} + void IniDBBuilderPackage::buildPackage (const std::string& _name) { diff --git a/IniDBBuilderPackage.h b/IniDBBuilderPackage.h index da2d97d8..1fed4202 100644 --- a/IniDBBuilderPackage.h +++ b/IniDBBuilderPackage.h @@ -37,6 +37,7 @@ public: void buildTimestamp (const std::string& ); void buildVersion (const std::string& ); + const std::string buildMinimumVersion(const std::string &); void buildPackage (const std::string& ); void buildPackageVersion (const std::string& ); void buildPackageSDesc (const std::string& ); diff --git a/inilex.ll b/inilex.ll index 95888cf5..41bf6a22 100644 --- a/inilex.ll +++ b/inilex.ll @@ -107,7 +107,9 @@ B64 [a-zA-Z0-9_-] "setup-timestamp:" return SETUP_TIMESTAMP; "setup-version:" return SETUP_VERSION; +"setup-minimum-version:" return SETUP_MINIMUM_VERSION; "arch:" return ARCH; + "release:" return RELEASE; "Package:" return PACKAGENAME; [vV]"ersion:" return PACKAGEVERSION; diff --git a/iniparse.yy b/iniparse.yy index 1999536c..991e788c 100644 --- a/iniparse.yy +++ b/iniparse.yy @@ -35,8 +35,15 @@ IniDBBuilderPackage *iniBuilder; extern int yylineno; %} -%token STRING -%token SETUP_TIMESTAMP SETUP_VERSION PACKAGEVERSION INSTALL SOURCE SDESC LDESC +%token STRING +%token SETUP_TIMESTAMP +%token SETUP_VERSION +%token SETUP_MINIMUM_VERSION +%token PACKAGEVERSION +%token INSTALL +%token SOURCE +%token SDESC +%token LDESC %token REPLACE_VERSIONS %token CATEGORY DEPENDS REQUIRES %token T_PREV T_CURR T_TEST T_OTHER @@ -59,12 +66,13 @@ whole_file setup_headers: /* empty */ | setup_headers header ; - + header /* non-empty */ : SETUP_TIMESTAMP STRING { iniBuilder->buildTimestamp ($2); } NL | SETUP_VERSION STRING { iniBuilder->buildVersion ($2); } NL | RELEASE STRING { iniBuilder->set_release ($2); } NL - | ARCH STRING { iniBuilder->set_arch ($2); } NL + | ARCH STRING { iniBuilder->set_arch ($2); } NL + | SETUP_MINIMUM_VERSION STRING { std::string e = iniBuilder->buildMinimumVersion ($2); if (!e.empty()) { yyerror(e); } } NL ; packages: /* empty */