Add IniDBBuilderLint, a do-nothing subclass of InitDBBuilder Use CliParseFeedback for parser feedback --- IniDBBuilderLint.h | 55 ++++++++++++++++++++++++++++++++++++++++++++++ Makefile.am | 17 ++++++++++++-- ini.cc | 2 -- ini.h | 2 ++ inilintmain.cc | 31 ++++++++++++++++++++++---- 5 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 IniDBBuilderLint.h
diff --git a/IniDBBuilderLint.h b/IniDBBuilderLint.h new file mode 100644 index 0000000..29a98ee --- /dev/null +++ b/IniDBBuilderLint.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2002, Robert Collins. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * A copy of the GNU General Public License can be found at + * http://www.gnu.org/ + * + * Written by Robert Collins <rbtcoll...@hotmail.com> + * + */ + +#ifndef SETUP_INIDBBUILDERLINT_H +#define SETUP_INIDBBUILDERLINT_H + +#include "IniDBBuilder.h" + +class IniDBBuilderLint:public IniDBBuilder +{ +public: + virtual ~IniDBBuilderLint() {}; + + virtual void buildTimestamp (const std::string& ) {}; + virtual void buildVersion (const std::string& ) {}; + virtual const std::string buildMinimumVersion(const std::string &s) { return ""; } + virtual void buildPackage (const std::string& ) {}; + virtual void buildPackageVersion (const std::string& ) {}; + virtual void buildPackageSDesc (const std::string& ) {}; + virtual void buildPackageLDesc (const std::string& ) {}; + virtual void buildPackageInstall (const std::string&, const std::string&, + char *, hashType) {}; + virtual void buildPackageSource (const std::string&, const std::string&, + char *, hashType) {}; + virtual void buildPackageTrust (trusts) {}; + virtual void buildPackageCategory (const std::string& ) {}; + virtual void buildBeginDepends () {}; + virtual void buildBeginBuildDepends () {}; + virtual void buildBeginObsoletes () {}; + virtual void buildBeginProvides () {}; + virtual void buildBeginConflicts () {}; + virtual void buildMessage (const std::string&, const std::string&) {}; + virtual void buildSourceName (const std::string& ) {}; + virtual void buildSourceNameVersion (const std::string& ) {}; + virtual void buildPackageListNode (const std::string& ) {}; + virtual void buildPackageListOperator (PackageSpecification::_operators const &) {}; + virtual void buildPackageListOperatorVersion (const std::string& ) {}; + virtual void buildPackageReplaceVersionsList (const std::string& ) {}; + virtual void set_arch (const std::string& a) {}; + virtual void set_release (const std::string& rel) {}; +}; + +#endif /* SETUP_INIDBBUILDERLINT_H */ diff --git a/Makefile.am b/Makefile.am index 04bb668..4ceeb98 100644 --- a/Makefile.am +++ b/Makefile.am @@ -58,9 +58,12 @@ BUILT_SOURCES = \ CLEANFILES = setup_version.c inilint_LDADD = \ - libgetopt++/libgetopt++.la + libgetopt++/libgetopt++.la \ + -lntdll -luuid inilint_SOURCES = \ + filemanip.cc \ + filemanip.h \ CliParseFeedback.cc \ CliParseFeedback.h \ LogSingleton.cc \ @@ -69,9 +72,19 @@ inilint_SOURCES = \ inilintmain.cc \ inilex.ll \ iniparse.yy \ + io_stream.cc \ + io_stream.h \ + io_stream_file.cc \ + io_stream_file.h \ + mkdir.cc \ + mkdir.h \ + mklink2.cc \ + mklink2.h \ PackageTrust.h \ String++.cc \ - String++.h + String++.h \ + win32.cc \ + win32.h @SETUP@_LDADD = \ libgetopt++/libgetopt++.la \ diff --git a/ini.cc b/ini.cc index 2c568e1..ee9c648 100644 --- a/ini.cc +++ b/ini.cc @@ -64,8 +64,6 @@ IniList setup_ext_list (setup_exts, static BoolOption NoVerifyOption (false, 'X', "no-verify", "Don't verify setup.ini signatures"); static BoolOption NoVersionCheckOption (false, '\0', "no-version-check", "Suppress checking if a newer version of setup is available"); -extern int yyparse (); - class GuiParseFeedback : public IniParseFeedback { public: diff --git a/ini.h b/ini.h index 1e4f889..ecc4b78 100644 --- a/ini.h +++ b/ini.h @@ -42,6 +42,8 @@ void ini_init (io_stream *, IniDBBuilder *, IniParseFeedback &); packages (the chosen "install" field). install.cc installs selected packages. */ +extern int yyparse (); + /* The following definitions are used in the parser implementation */ #define hexnibble(val) ('\xff' & (val > '9') ? val - 'a' + 10 : val - '0') diff --git a/inilintmain.cc b/inilintmain.cc index 7ae98ff..f31e5eb 100644 --- a/inilintmain.cc +++ b/inilintmain.cc @@ -13,23 +13,46 @@ * */ -#include "getopt++/GetOption.h" +#include "io_stream.h" +#include "IniDBBuilderLint.h" +#include "CliParseFeedback.h" +#include "ini.h" #include <iostream> +#include <sstream> +#include "LogSingleton.h" void show_help() { - std::cout << "inilint checks cygwin setup.ini files and reports any errors with" << std::endl; - std::cout << "diagnostics" << std::endl; + std::cout << "inilint checks cygwin setup.ini files and reports any errors" << std::endl; } int main (int argc, char **argv) { - if (!GetOption::GetInstance().Process (argc,argv,NULL)) + if (argc != 2) { show_help(); return 1; } + + std::string inifilename = argv[1]; + + // Note: this only accepts absolute pathnames + io_stream *ini_file = io_stream::open ("file://" + inifilename, "rb", 0); + if (!ini_file) + { + std::cerr << "could not open " << inifilename << std::endl; + return 1; + } + + CliParseFeedback feedback; + IniDBBuilderLint builder; + ini_init(ini_file, &builder, feedback); + + // Note: unrecognized lines are ignored by ignore_line(), so this is currently + // only useful for finding where recognized lines don't fit the grammar. + yyparse(); + return 0; } -- 2.21.0