public inbox for cygwin-apps@cygwin.com
 help / color / mirror / Atom feed
* [PATCH setup] Add setup-minimum-version: to setup.ini
@ 2018-02-26 14:02 Jon Turney
  2018-02-26 17:10 ` cyg Simple
  0 siblings, 1 reply; 8+ messages in thread
From: Jon Turney @ 2018-02-26 14:02 UTC (permalink / raw)
  To: cygwin-apps; +Cc: Jon Turney

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.
---
 IniDBBuilderPackage.cc | 16 ++++++++++++++++
 IniDBBuilderPackage.h  |  1 +
 inilex.ll              |  2 ++
 iniparse.yy            | 16 ++++++++++++----
 4 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/IniDBBuilderPackage.cc b/IniDBBuilderPackage.cc
index 8fa6ad9..ed861a5 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 da2d97d..1fed420 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 95888cf..41bf6a2 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 1999536..991e788 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 */
-- 
2.16.2

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-03-02 16:09 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-26 14:02 [PATCH setup] Add setup-minimum-version: to setup.ini Jon Turney
2018-02-26 17:10 ` cyg Simple
2018-02-26 17:45   ` Jon Turney
2018-02-27 14:32     ` cyg Simple
2018-02-27 15:32       ` Marco Atzeri
2018-02-27 20:17         ` cyg Simple
2018-02-28 18:54           ` Achim Gratz
2018-03-02 16:09     ` cyg Simple

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).