Add copyright information. (#1201)
authorAina Niemetz <aina.niemetz@gmail.com>
Tue, 10 Oct 2017 22:36:09 +0000 (15:36 -0700)
committerGitHub <noreply@github.com>
Tue, 10 Oct 2017 22:36:09 +0000 (15:36 -0700)
This adds option --copyright which displays copyright information for CVC4. It further extends --show-config with copyright information and adds a banner with copyright information in interactive mode.

src/base/configuration.cpp
src/base/configuration.h
src/base/configuration_private.h
src/main/driver_unified.cpp
src/options/main_options
src/options/options_handler.cpp
src/options/options_handler.h

index 196290b53a22e2369e462ad3dffeb42ab9b0f206..7e7da1500952ad9a827b34636c9d8eeb77fbedbb 100644 (file)
@@ -110,8 +110,102 @@ std::string Configuration::getVersionExtra() {
   return CVC4_EXTRAVERSION;
 }
 
+std::string Configuration::copyright() {
+  std::stringstream ss;
+  ss << "Copyright (c) 2009-2017 by the authors and their institutional\n"
+     << "affiliations listed at http://cvc4.cs.stanford.edu/authors\n\n";
+
+  if (Configuration::licenseIsGpl()) {
+    ss << "This build of CVC4 uses GPLed libraries, and is thus covered by\n"
+       << "the GNU General Public License (GPL) version 3.  Versions of CVC4\n"
+       << "are available that are covered by the (modified) BSD license. If\n"
+       << "you want to license CVC4 under this license, please configure CVC4\n"
+       << "with the \"--bsd\" option before building from sources.\n\n";
+  } else {
+    ss << "CVC4 is open-source and is covered by the BSD license (modified)."
+       << "\n\n";
+  }
+
+  ss << "THIS SOFTWARE IS PROVIDED AS-IS, WITHOUT ANY WARRANTIES.\n"
+     << "USE AT YOUR OWN RISK.\n\n";
+  ss << "CVC4 incorporates code from ANTLR3 (http://www.antlr.org).\n"
+     << "See licenses/antlr3-LICENSE for copyright and licensing information."
+     << "\n\n";
+
+  if (Configuration::isBuiltWithAbc()
+      || Configuration::isBuiltWithLfsc()) {
+    ss << "This version of CVC4 is linked against the following non-(L)GPL'ed\n"
+       << "third party libraries.\n\n";
+    if (Configuration::isBuiltWithAbc()) {
+      ss << "  ABC - A System for Sequential Synthesis and Verification\n"
+         << "  See http://bitbucket.org/alanmi/abc for copyright and\n"
+         << "  licensing information.\n\n";
+    }
+    if (Configuration::isBuiltWithLfsc()) {
+      ss << "  LFSC Proof Checker\n"
+         << "  See http://github.com/CVC4/LFSC for copyright and\n"
+         << "  licensing information.\n\n";
+    }
+  }
+
+  if (Configuration::isBuiltWithGmp()
+      || Configuration::isBuiltWithCryptominisat()) {
+    ss << "This version of CVC4 is linked against the following third party\n"
+       << "libraries covered by the LGPLv3 license.\n"
+       << "See licenses/lgpl-3.0.txt for more information.\n\n";
+    if (Configuration::isBuiltWithGmp()) {
+      ss << "  GMP - Gnu Multi Precision Arithmetic Library\n"
+         << "  See http://gmplib.org for copyright information.\n\n";
+    }
+    if (Configuration::isBuiltWithCryptominisat()) {
+      ss << "  CryptoMiniSat - An Advanced SAT Solver\n"
+         << "  See http://github.com/msoos/cryptominisat for copyright "
+         << "information.\n\n";
+    }
+  }
+
+  if (Configuration::isBuiltWithCln()
+      || Configuration::isBuiltWithGlpk ()
+      || Configuration::isBuiltWithReadline()) {
+    ss << "This version of CVC4 is linked against the following third party\n"
+       << "libraries covered by the GPLv3 license.\n"
+       << "See licenses/gpl-3.0.txt for more information.\n\n";
+    if (Configuration::isBuiltWithCln()) {
+      ss << "  CLN - Class Library for Numbers\n"
+         << "  See http://www.ginac.de/CLN for copyright information.\n\n";
+    }
+    if (Configuration::isBuiltWithGlpk()) {
+      ss << "  glpk-cut-log -  a modified version of GPLK, "
+         << "the GNU Linear Programming Kit\n"
+         << "  See http://github.com/timothy-king/glpk-cut-log for copyright"
+         << "information\n\n";
+    }
+    if (Configuration::isBuiltWithReadline()) {
+      ss << "  GNU Readline\n"
+         << "  See http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html\n"
+         << "  for copyright information.\n\n";
+    }
+  }
+
+  ss << "See the file COPYING (distributed with the source code, and with\n"
+     << "all binaries) for the full CVC4 copyright, licensing, and (lack of)\n"
+     << "warranty information.\n";
+  return ss.str();
+}
+
 std::string Configuration::about() {
-  return CVC4_ABOUT_STRING;
+  std::stringstream ss;
+  ss << "This is CVC4 version " << CVC4_RELEASE_STRING;
+  if (Configuration::isGitBuild()) {
+    ss << " [" << Configuration::getGitId() << "]";
+  } else if (CVC4::Configuration::isSubversionBuild()) {
+    ss << " [" << Configuration::getSubversionId() << "]";
+  }
+  ss << "\ncompiled with " << Configuration::getCompiler()
+     << "\non " << Configuration::getCompiledDateTime() << "\n\n";
+  ss << Configuration::copyright ();
+  return ss.str();
 }
 
 bool Configuration::licenseIsGpl() {
index 31c7b654733db650d860dd6e25a6bbcd0852538e..29f23ab18ba4045f6bc817561c5e5fd98b55a512 100644 (file)
@@ -81,6 +81,8 @@ public:
 
   static std::string getVersionExtra();
 
+  static std::string copyright();
+
   static std::string about();
 
   static bool licenseIsGpl();
index 472113c2e76095c968f47e6ae6695b175d48b6da..eba45cc611a0585808e6a8657f78ae62a635818c 100644 (file)
@@ -144,34 +144,6 @@ namespace CVC4 {
 #  define USING_TLS false
 #endif /* TLS */
 
-#define CVC4_ABOUT_STRING ( ::std::string("\
-This is CVC4 version " CVC4_RELEASE_STRING ) + \
-    ( ::CVC4::Configuration::isGitBuild() \
-        ? ( ::std::string(" [") + ::CVC4::Configuration::getGitId() + "]" ) \
-        : \
-    ( ::CVC4::Configuration::isSubversionBuild() \
-        ? ( ::std::string(" [") + ::CVC4::Configuration::getSubversionId() + "]" ) \
-        : ::std::string("") \
-    )) + "\n\
-compiled with " + ::CVC4::Configuration::getCompiler() + "\n\
-on " + ::CVC4::Configuration::getCompiledDateTime() + "\n\n\
-Copyright (c) 2009-2017\n\
-by the authors and their institutional affiliations listed at \n\
-http://cvc4.cs.stanford.edu/authors\n\n" + \
-    ( IS_GPL_BUILD ? "\
-This build of CVC4 uses GPLed libraries, and is thus covered by the GNU\n\
-General Public License (GPL) version 3.  Versions of CVC4 are available\n\
-that are covered by the (modified) BSD license.  If you want to license\n\
-CVC4 under this license, please configure CVC4 with the \"--bsd\" option\n\
-before building from sources.\n\
-" : \
-"This CVC4 library uses GMP as its multi-precision arithmetic library.\n\n\
-CVC4 is open-source and is covered by the BSD license (modified).\n\n\
-" ) + "\
-THIS SOFTWARE PROVIDED AS-IS, WITHOUT ANY WARRANTIES. USE AT YOUR OWN RISK.\n\n\
-See the file COPYING (distributed with the source code, and with all binaries)\n\
-for the full CVC4 copyright, licensing, and (lack of) warranty information.\n" )
-
 }/* CVC4 namespace */
 
 #endif /* __CVC4__CONFIGURATION_PRIVATE_H */
index cad662d909bcf095a83d6ae37732ea968e85bb04..8ffb47e40fbddd589808b57a21b9b0fcf2273bba 100644 (file)
@@ -304,7 +304,8 @@ int runCvc4(int argc, char* argv[], Options& opts) {
         Message() << (Configuration::isDebugBuild() ? " DEBUG" : "")
                   << " assertions:"
                   << (Configuration::isAssertionBuild() ? "on" : "off")
-                  << endl;
+                  << endl << endl;
+        Message() << Configuration::copyright() << endl;
       }
       if(replayParser) {
         // have the replay parser use the declarations input interactively
index 0fa799df2f9733db998c5310729bdd513fd210d9..e47f55746d8ae98ea25a8b50a9d42aff9964152a 100644 (file)
@@ -15,6 +15,9 @@ common-option help -h --help/ bool
 common-option - --show-config void :handler showConfiguration
  show CVC4 static configuration
 
+common-option - --copyright void :handler copyright
+ show CVC4 copyright information
+
 option - --show-debug-tags void :handler showDebugTags
  show all available tags for debugging
 option - --show-trace-tags void :handler showTraceTags
index 9adff0d3d2b5f87f8861e1853bf1d2b35b436ecc..a3617ef6fcd5e29b1df26bbdc3d2d461417abb4b 100644 (file)
 #include "cvc4autoconfig.h"
 
 #include "base/configuration.h"
+#include "base/configuration_private.h"
 #include "base/cvc4_assert.h"
 #include "base/exception.h"
 #include "base/modal_exception.h"
 #include "base/output.h"
 #include "lib/strtok_r.h"
+#include "gmp.h"
 #include "options/arith_heuristic_pivot_rule.h"
 #include "options/arith_propagation_mode.h"
 #include "options/arith_unate_lemma_mode.h"
@@ -1368,67 +1370,96 @@ void OptionsHandler::notifySetPrintExprTypes(std::string option) {
 
 
 // main/options_handlers.h
+
+static void print_config (const char * str, std::string config) {
+  std::string s(str);
+  unsigned sz = 14;
+  if (s.size() < sz) s.resize(sz, ' ');
+  std::cout << s << ": " << config << std::endl;
+}
+
+static void print_config_cond (const char * str, bool cond = false) {
+  print_config(str, cond ? "yes" : "no");
+}
+
+void OptionsHandler::copyright(std::string option) {
+  std::cout << Configuration::copyright() << std::endl;
+  exit(0);
+}
+
 void OptionsHandler::showConfiguration(std::string option) {
-  fputs(Configuration::about().c_str(), stdout);
-  printf("\n");
-  printf("version    : %s\n", Configuration::getVersionString().c_str());
+  std::cout << Configuration::about() << std::endl;
+
+  print_config ("version", Configuration::getVersionString());
+
   if(Configuration::isGitBuild()) {
     const char* branchName = Configuration::getGitBranchName();
-    if(*branchName == '\0') {
-      branchName = "-";
-    }
-    printf("scm        : git [%s %s%s]\n",
-           branchName,
-           std::string(Configuration::getGitCommit()).substr(0, 8).c_str(),
-           Configuration::hasGitModifications() ?
-             " (with modifications)" : "");
+    if(*branchName == '\0')  { branchName = "-"; }
+    std::stringstream ss;
+    ss << "git ["
+       << branchName << " "
+       << std::string(Configuration::getGitCommit()).substr(0, 8)
+       << (Configuration::hasGitModifications() ? " (with modifications)" : "")
+       << "]";
+    print_config("scm", ss.str());
   } else if(Configuration::isSubversionBuild()) {
-    printf("scm        : svn [%s r%u%s]\n",
-           Configuration::getSubversionBranchName(),
-           Configuration::getSubversionRevision(),
-           Configuration::hasSubversionModifications() ?
-             " (with modifications)" : "");
+    std::stringstream ss;
+    ss << "svn ["
+       << Configuration::getSubversionBranchName() << " r"
+       << Configuration::getSubversionRevision()
+       << (Configuration::hasSubversionModifications()
+           ? " (with modifications)" : "")
+       << "]";
+    print_config("scm", ss.str());
   } else {
-    printf("scm        : no\n");
+    print_config_cond("scm", false);
   }
-  printf("\n");
-  printf("library    : %u.%u.%u\n",
-         Configuration::getVersionMajor(),
-         Configuration::getVersionMinor(),
-         Configuration::getVersionRelease());
-  printf("\n");
-  printf("debug code : %s\n", Configuration::isDebugBuild() ? "yes" : "no");
-  printf("statistics : %s\n", Configuration::isStatisticsBuild() ? "yes" : "no");
-  printf("replay     : %s\n", Configuration::isReplayBuild() ? "yes" : "no");
-  printf("tracing    : %s\n", Configuration::isTracingBuild() ? "yes" : "no");
-  printf("dumping    : %s\n", Configuration::isDumpingBuild() ? "yes" : "no");
-  printf("muzzled    : %s\n", Configuration::isMuzzledBuild() ? "yes" : "no");
-  printf("assertions : %s\n", Configuration::isAssertionBuild() ? "yes" : "no");
-  printf("proof      : %s\n", Configuration::isProofBuild() ? "yes" : "no");
-  printf("coverage   : %s\n", Configuration::isCoverageBuild() ? "yes" : "no");
-  printf("profiling  : %s\n", Configuration::isProfilingBuild() ? "yes" : "no");
-  printf("competition: %s\n", Configuration::isCompetitionBuild() ? "yes" : "no");
-  printf("\n");
-  printf("abc          : %s\n", Configuration::isBuiltWithAbc() ? "yes" : "no");
-  printf("cln          : %s\n", Configuration::isBuiltWithCln() ? "yes" : "no");
-  printf("glpk         : %s\n", Configuration::isBuiltWithGlpk() ? "yes" : "no");
-  printf("cryptominisat: %s\n", Configuration::isBuiltWithCryptominisat() ? "yes" : "no");
-  printf("gmp          : %s\n", Configuration::isBuiltWithGmp() ? "yes" : "no");
-  printf("lfsc         : %s\n", Configuration::isBuiltWithLfsc() ? "yes" : "no");
-  printf("readline     : %s\n", Configuration::isBuiltWithReadline() ? "yes" : "no");
-  printf("tls          : %s\n", Configuration::isBuiltWithTlsSupport() ? "yes" : "no");
+  
+  std::cout << std::endl;
+
+  std::stringstream ss;
+  ss << Configuration::getVersionMajor() << "."
+     << Configuration::getVersionMinor() << "."
+     << Configuration::getVersionRelease();
+  print_config("library", ss.str());
+  
+  std::cout << std::endl;
+
+  print_config_cond("debug code", Configuration::isDebugBuild());
+  print_config_cond("statistics", Configuration::isStatisticsBuild());
+  print_config_cond("replay", Configuration::isReplayBuild());
+  print_config_cond("tracing", Configuration::isTracingBuild());
+  print_config_cond("dumping", Configuration::isDumpingBuild());
+  print_config_cond("muzzled", Configuration::isMuzzledBuild());
+  print_config_cond("assertions", Configuration::isAssertionBuild());
+  print_config_cond("proof", Configuration::isProofBuild());
+  print_config_cond("coverage", Configuration::isCoverageBuild());
+  print_config_cond("profiling", Configuration::isProfilingBuild());
+  print_config_cond("competition", Configuration::isCompetitionBuild());
+  
+  std::cout << std::endl;
+  
+  print_config_cond("abc", Configuration::isBuiltWithAbc());
+  print_config_cond("cln", Configuration::isBuiltWithCln());
+  print_config_cond("glpk", Configuration::isBuiltWithGlpk());
+  print_config_cond("cryptominisat", Configuration::isBuiltWithCryptominisat());
+  print_config_cond("gmp", Configuration::isBuiltWithGmp());
+  print_config_cond("lfsc", Configuration::isBuiltWithLfsc());
+  print_config_cond("readline", Configuration::isBuiltWithReadline());
+  print_config_cond("tls", Configuration::isBuiltWithTlsSupport());
+  
   exit(0);
 }
 
 void OptionsHandler::showDebugTags(std::string option) {
   if(Configuration::isDebugBuild() && Configuration::isTracingBuild()) {
-    printf("available tags:");
+    std::cout << "available tags:";
     unsigned ntags = Configuration::getNumDebugTags();
     char const* const* tags = Configuration::getDebugTags();
     for(unsigned i = 0; i < ntags; ++ i) {
-      printf(" %s", tags[i]);
+      std::cout << tags[i];
     }
-    printf("\n");
+    std::cout << std::endl;
   } else if(! Configuration::isDebugBuild()) {
     throw OptionException("debug tags not available in non-debug builds");
   } else {
@@ -1439,13 +1470,13 @@ void OptionsHandler::showDebugTags(std::string option) {
 
 void OptionsHandler::showTraceTags(std::string option) {
   if(Configuration::isTracingBuild()) {
-    printf("available tags:");
+    std::cout << "available tags:";
     unsigned ntags = Configuration::getNumTraceTags();
     char const* const* tags = Configuration::getTraceTags();
     for (unsigned i = 0; i < ntags; ++ i) {
-      printf(" %s", tags[i]);
+      std::cout << tags[i];
     }
-    printf("\n");
+    std::cout << std::endl;
   } else {
     throw OptionException("trace tags not available in non-tracing build");
   }
@@ -1530,13 +1561,13 @@ void OptionsHandler::addTraceTag(std::string option, std::string optarg) {
     if(!Configuration::isTraceTag(optarg.c_str())) {
 
       if(optarg == "help") {
-        printf("available tags:");
+        std::cout << "available tags:";
         unsigned ntags = Configuration::getNumTraceTags();
         char const* const* tags = Configuration::getTraceTags();
         for(unsigned i = 0; i < ntags; ++ i) {
-          printf(" %s", tags[i]);
+          std::cout << tags[i];
         }
-        printf("\n");
+        std::cout << std::endl;
         exit(0);
       }
 
@@ -1556,13 +1587,13 @@ void OptionsHandler::addDebugTag(std::string option, std::string optarg) {
        !Configuration::isTraceTag(optarg.c_str())) {
 
       if(optarg == "help") {
-        printf("available tags:");
+        std::cout << "available tags:";
         unsigned ntags = Configuration::getNumDebugTags();
         char const* const* tags = Configuration::getDebugTags();
         for(unsigned i = 0; i < ntags; ++ i) {
-          printf(" %s", tags[i]);
+          std::cout << tags[i];
         }
-        printf("\n");
+        std::cout << std::endl;
         exit(0);
       }
 
index 923a87d3a754505528148932d7c2357b7064a15b..e534d8e588c4c2fd20564a5bcbcd2753ef325185 100644 (file)
@@ -171,6 +171,7 @@ public:
   void notifySetPrintExprTypes(std::string option);
 
   /* main/options_handlers.h */
+  void copyright(std::string option);
   void showConfiguration(std::string option);
   void showDebugTags(std::string option);
   void showTraceTags(std::string option);