]> git.saurik.com Git - apt.git/commitdiff
use function pointers instead of weak symbols for cmdline parsing
authorDavid Kalnischkies <david@kalnischkies.de>
Sun, 29 Nov 2015 12:12:38 +0000 (13:12 +0100)
committerDavid Kalnischkies <david@kalnischkies.de>
Sun, 29 Nov 2015 12:12:38 +0000 (13:12 +0100)
Passing function pointers around while working on this was very icky,
but if weak symbols are too much to ask for…

Reverts "do not use "-Wl,-Bsymbolic-functions" during the build to avoid
breakage" aka a5fc9be36211a290a7abc3ca2a8bf98943bc1f57.

14 files changed:
apt-private/private-cmndline.cc
apt-private/private-cmndline.h
cmdline/apt-cache.cc
cmdline/apt-cdrom.cc
cmdline/apt-config.cc
cmdline/apt-extracttemplates.cc
cmdline/apt-get.cc
cmdline/apt-helper.cc
cmdline/apt-internal-solver.cc
cmdline/apt-mark.cc
cmdline/apt-sortpkgs.cc
cmdline/apt.cc
debian/rules
ftparchive/apt-ftparchive.cc

index 9c5eae470c1da3df45e50f6e389edd2c6486d390..6cffbcb488eadb8cf610e935a96204f2c7fb6066 100644 (file)
@@ -378,7 +378,8 @@ static void ShowHelpListCommands(std::vector<aptDispatchWithHelp> const &Cmds)/*
    }
 }
                                                                        /*}}}*/
-static bool ShowCommonHelp(APT_CMD const Binary, CommandLine &CmdL, std::vector<aptDispatchWithHelp> const &Cmds)/*{{{*/
+static bool ShowCommonHelp(APT_CMD const Binary, CommandLine &CmdL, std::vector<aptDispatchWithHelp> const &Cmds,/*{{{*/
+      bool (*ShowHelp)(CommandLine &))
 {
    std::cout << PACKAGE << " " << PACKAGE_VERSION << " (" << COMMON_ARCH << ")" << std::endl;
    if (_config->FindB("version") == true && Binary != APT_CMD::APT_GET)
@@ -442,7 +443,8 @@ static void BinarySpecificConfiguration(char const * const Binary)  /*{{{*/
 }
                                                                        /*}}}*/
 std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD const Binary,/*{{{*/
-      Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char *argv[])
+      Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char *argv[],
+      bool (*ShowHelp)(CommandLine &), std::vector<aptDispatchWithHelp> (*GetCommands)(void))
 {
    if (Cnf != NULL && pkgInitConfig(**Cnf) == false)
    {
@@ -477,7 +479,7 @@ std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD c
        (Sys != NULL && pkgInitSystem(*_config, *Sys) == false))
    {
       if (_config->FindB("version") == true)
-        ShowCommonHelp(Binary, CmdL, CmdsWithHelp);
+        ShowCommonHelp(Binary, CmdL, CmdsWithHelp, ShowHelp);
 
       _error->DumpErrors();
       exit(100);
@@ -487,12 +489,12 @@ std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD c
    if (_config->FindB("help") == true || _config->FindB("version") == true ||
         (CmdL.FileSize() > 0 && strcmp(CmdL.FileList[0], "help") == 0))
    {
-      ShowCommonHelp(Binary, CmdL, CmdsWithHelp);
+      ShowCommonHelp(Binary, CmdL, CmdsWithHelp, ShowHelp);
       exit(0);
    }
    if (Cmds.empty() == false && CmdL.FileSize() == 0)
    {
-      ShowCommonHelp(Binary, CmdL, CmdsWithHelp);
+      ShowCommonHelp(Binary, CmdL, CmdsWithHelp, ShowHelp);
       exit(1);
    }
    return Cmds;
@@ -514,7 +516,3 @@ unsigned short DispatchCommandLine(CommandLine &CmdL, std::vector<CommandLine::D
    return Errors == true ? 100 : 0;
 }
                                                                        /*}}}*/
-
-// weak symbols
-bool ShowHelp(CommandLine &) { return false; }
-std::vector<aptDispatchWithHelp> GetCommands() { return {}; }
index 4819adce138c05cbd1780c1d140aac5872b33daa..05690964d43cd20e4ccf4074f21d9b6ad08a5655 100644 (file)
@@ -33,7 +33,8 @@ struct aptDispatchWithHelp
 APT_PUBLIC std::vector<aptDispatchWithHelp> GetCommands() APT_WEAK;
 
 APT_PUBLIC std::vector<CommandLine::Dispatch> ParseCommandLine(CommandLine &CmdL, APT_CMD const Binary,
-      Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char * argv[]);
+      Configuration * const * const Cnf, pkgSystem ** const Sys, int const argc, const char * argv[],
+      bool (*ShowHelp)(CommandLine &), std::vector<aptDispatchWithHelp> (*GetCommands)(void));
 APT_PUBLIC unsigned short DispatchCommandLine(CommandLine &CmdL, std::vector<CommandLine::Dispatch> const &Cmds);
 
 APT_PUBLIC std::vector<CommandLine::Args> getCommandArgs(APT_CMD const Program, char const * const Cmd);
index b70e1db38fe6efe233b53584ef9c92a3b7ed5c03..4a592da8f69314e5ca53a08e72986e04509e4d0d 100644 (file)
@@ -1247,7 +1247,7 @@ int main(int argc,const char *argv[])                                     /*{{{*/
 
    // Parse the command line and initialize the package library
    CommandLine CmdL;
-   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CACHE, &_config, &_system, argc, argv);
+   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CACHE, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
 
    InitOutput();
 
index 4a24f198c3f52316b7dd5fa3a1fe4abac91de671..d8a2d84cf3bc37b51384c4de0de0b32421e19515 100644 (file)
@@ -229,7 +229,7 @@ int main(int argc,const char *argv[])                                       /*{{{*/
 
    // Parse the command line and initialize the package library
    CommandLine CmdL;
-   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CDROM, &_config, &_system, argc, argv);
+   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CDROM, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
 
    InitOutput();
 
index c364b8cdfe227a4259ac80f2f22535117b52cdb0..b86a0fd976a20f7effd361213fc25634afcb5bc1 100644 (file)
@@ -101,7 +101,7 @@ int main(int argc,const char *argv[])                                       /*{{{*/
 
    // Parse the command line and initialize the package library
    CommandLine CmdL;
-   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CONFIG, &_config, &_system, argc, argv);
+   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_CONFIG, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
 
    std::vector<std::string> const langs = APT::Configuration::getLanguages(true);
    _config->Clear("Acquire::Languages");
index 0e60ff5fb8335a5d4b1f8e3f83e42da3eb6e00c6..d1345400bae098ec564ff7ab39cfb79f3a81ac25 100644 (file)
@@ -342,7 +342,7 @@ int main(int argc, const char **argv)                                       /*{{{*/
        InitLocale();
 
        CommandLine CmdL;
-       auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_EXTRACTTEMPLATES, &_config, &_system, argc, argv);
+       auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_EXTRACTTEMPLATES, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
 
        Go(CmdL);
 
index 5002ec1b8b4b7f149f2d05a31ca22a7640bc1d4b..b8d72a0bcdc177c240e8a068963fdbf9c55c91f2 100644 (file)
@@ -434,7 +434,7 @@ int main(int argc,const char *argv[])                                       /*{{{*/
 
    // Parse the command line and initialize the package library
    CommandLine CmdL;
-   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_GET, &_config, &_system, argc, argv);
+   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_GET, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
 
    InitSignals();
    InitOutput();
index 176a67e03a070d6a3e810010abc68e7802c21796..1be122ad0d9144e6d072b0290fc4d9cd80dc776f 100644 (file)
@@ -131,7 +131,7 @@ int main(int argc,const char *argv[])                                       /*{{{*/
    InitLocale();
 
    CommandLine CmdL;
-   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_HELPER, &_config, &_system, argc, argv);
+   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_HELPER, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
 
    InitOutput();
 
index ae90c165569f8692bb5a9f24aa886573e24f6368..90800e1d91d0ec1bc41078b7cf2d5b6e337070c0 100644 (file)
@@ -71,7 +71,7 @@ int main(int argc,const char *argv[])                                 /*{{{*/
        DropPrivileges();
 
        CommandLine CmdL;
-       ParseCommandLine(CmdL, APT_CMD::APT_INTERNAL_SOLVER, &_config, NULL, argc, argv);
+       ParseCommandLine(CmdL, APT_CMD::APT_INTERNAL_SOLVER, &_config, NULL, argc, argv, &ShowHelp, &GetCommands);
 
        if (CmdL.FileList[0] != 0 && strcmp(CmdL.FileList[0], "scenario") == 0)
        {
index 132bd7ef6a803e02065657090042e46e910e5d7d..2491a8ebfa4d0f9dff26af665bd3b51457942842 100644 (file)
@@ -322,7 +322,7 @@ int main(int argc,const char *argv[])                                       /*{{{*/
    InitLocale();
 
    CommandLine CmdL;
-   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_MARK, &_config, &_system, argc, argv);
+   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_MARK, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
 
    InitOutput();
 
index a4707a9745f4f8b547685cc7a6a1ea05cf31e371..7e3301a052047a398d894c0775333e0a2417d884 100644 (file)
@@ -155,7 +155,7 @@ int main(int argc,const char *argv[])                                       /*{{{*/
    InitLocale();
 
    CommandLine CmdL;
-   ParseCommandLine(CmdL, APT_CMD::APT_SORTPKG, &_config, &_system, argc, argv);
+   ParseCommandLine(CmdL, APT_CMD::APT_SORTPKG, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
 
    // Match the operation
    for (unsigned int I = 0; I != CmdL.FileSize(); I++)
index 761ad60db5ccc6386ea3e606205e3a3ebf76d81f..64d374e1f268fe076157ddb6584e068a73e4555b 100644 (file)
@@ -100,7 +100,7 @@ int main(int argc, const char *argv[])                                      /*{{{*/
    InitLocale();
 
    CommandLine CmdL;
-   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT, &_config, &_system, argc, argv);
+   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);
 
    int const quiet = _config->FindI("quiet", 0);
    if (quiet == 2)
index 9a7c72080375418df57664112d505629e7612db9..c8e7cb285bed743f8ac9afbae0e645d5ef86387d 100755 (executable)
@@ -29,10 +29,7 @@ ifneq (,$(shell which dpkg-buildflags))
   # (http://savannah.gnu.org/bugs/?10593)
   dpkg_buildflags = DEB_BUILD_MAINT_OPTIONS=hardening=+all dpkg-buildflags
   export CXXFLAGS = $(shell $(dpkg_buildflags) --get CXXFLAGS)
-  # we can not use "-Wl,-Bsymbolic-functions" with the new weak symbols
-  # in libapt-private (commit 28f24d3d added those)
-  comma:= ,
-  export LDFLAGS = $(subst -Wl$(comma)-Bsymbolic-functions,,$(shell $(dpkg_buildflags) --get LDFLAGS))
+  export LDFLAGS = $(shell $(dpkg_buildflags) --get LDFLAGS)
   export CPPFLAGS = $(shell $(dpkg_buildflags) --get CPPFLAGS)
 else
   ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
index bb3ade1e8868bd6611ba45644d533515ecd7c16c..003a186be1ff91f380ef15f6e9009218f4482249 100644 (file)
@@ -1048,7 +1048,7 @@ int main(int argc, const char *argv[])                                    /*{{{*/
 
    // Parse the command line and initialize the package library
    CommandLine CmdL;
-   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_FTPARCHIVE, &_config, NULL, argc, argv);
+   auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_FTPARCHIVE, &_config, NULL, argc, argv, ShowHelp, &GetCommands);
 
    _config->CndSet("quiet",0);
    Quiet = _config->FindI("quiet",0);