X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/e7e10e47476606e3b2274cf66b1e8ea74b236757..84eec207be35b8c117c430296d4c212b079c00c1:/ftparchive/apt-ftparchive.cc?ds=inline diff --git a/ftparchive/apt-ftparchive.cc b/ftparchive/apt-ftparchive.cc index ca03080ca..ab6f48d61 100644 --- a/ftparchive/apt-ftparchive.cc +++ b/ftparchive/apt-ftparchive.cc @@ -68,6 +68,7 @@ struct PackageMap // We generate for this given arch string Arch; + bool IncludeArchAll; // Stuff for the Source File string SrcFile; @@ -122,9 +123,9 @@ struct PackageMap vector::iterator End, unsigned long &Left); - PackageMap() : LongDesc(true), TransWriter(NULL), DeLinkLimit(0), Permissions(1), - ContentsDone(false), PkgDone(false), SrcDone(false), - ContentsMTime(0) {}; + PackageMap() : IncludeArchAll(true), LongDesc(true), TransWriter(NULL), + DeLinkLimit(0), Permissions(1), ContentsDone(false), + PkgDone(false), SrcDone(false), ContentsMTime(0) {}; }; /*}}}*/ @@ -184,7 +185,7 @@ bool PackageMap::GenPackages(Configuration &Setup,struct CacheDB::Stats &Stats) PackagesWriter Packages(&Comp.Input, TransWriter, flCombine(CacheDir,BinCacheDB), flCombine(OverrideDir,BinOverride), flCombine(OverrideDir,ExtraOverride), - Arch); + Arch, IncludeArchAll); if (PkgExt.empty() == false && Packages.SetExts(PkgExt) == false) return _error->Error(_("Package extension list is too long")); if (_error->PendingError() == true) @@ -364,7 +365,7 @@ bool PackageMap::GenContents(Configuration &Setup, MultiCompress Comp(flCombine(ArchiveDir,this->Contents), CntCompress,Permissions); Comp.UpdateMTime = Setup.FindI("Default::ContentsAge",10)*24*60*60; - ContentsWriter Contents(&Comp.Input, "", Arch); + ContentsWriter Contents(&Comp.Input, "", Arch, IncludeArchAll); if (PkgExt.empty() == false && Contents.SetExts(PkgExt) == false) return _error->Error(_("Package extension list is too long")); if (_error->PendingError() == true) @@ -487,6 +488,8 @@ static void LoadTree(vector &PkgList, std::vectorFindB("APT::FTPArchive::LongDescription", true)); string const TranslationCompress = Setup.Find("Default::Translation::Compress",". gzip").c_str(); + bool const ConfIncludeArchAllExists = _config->Exists("APT::FTPArchive::IncludeArchitectureAll"); + bool const ConfIncludeArchAll = _config->FindB("APT::FTPArchive::IncludeArchitectureAll", true); // Process 'tree' type sections const Configuration::Item *Top = Setup.Tree("tree"); @@ -501,25 +504,32 @@ static void LoadTree(vector &PkgList, std::vector const Archs = VectorizeString(Tmp2, ' '); + bool IncludeArchAll; + if (ConfIncludeArchAllExists == true) + IncludeArchAll = ConfIncludeArchAll; + else + IncludeArchAll = std::find(Archs.begin(), Archs.end(), "all") == Archs.end(); + for (auto const& Arch: Archs) { + if (Arch.empty()) continue; + Vars[2].Contents = &Arch; PackageMap Itm; Itm.Permissions = Perms; Itm.BinOverride = SubstVar(Block.Find("BinOverride"),Vars); Itm.InternalPrefix = SubstVar(Block.Find("InternalPrefix",DIPrfx.c_str()),Vars); - if (stringcasecmp(Arch,"source") == 0) + if (Arch == "source") { Itm.SrcOverride = SubstVar(Block.Find("SrcOverride"),Vars); Itm.BaseDir = SubstVar(Block.Find("SrcDirectory",DSDir.c_str()),Vars); @@ -536,6 +546,7 @@ static void LoadTree(vector &PkgList, std::vector &PkgList,Configuration &Setup) } /*}}}*/ -// ShowHelp - Show the help text /*{{{*/ -// --------------------------------------------------------------------- -/* */ -static bool ShowHelp(CommandLine &, CommandLine::DispatchWithHelp const *) +static bool ShowHelp(CommandLine &) /*{{{*/ { - ioprintf(cout, "%s %s (%s)\n", PACKAGE, PACKAGE_VERSION, COMMON_ARCH); - if (_config->FindB("version") == true) - return true; - - cout << + std::cout << _("Usage: apt-ftparchive [options] command\n" "Commands: packages binarypath [overridefile [pathprefix]]\n" " sources srcpath [overridefile [pathprefix]]\n" @@ -652,7 +656,6 @@ static bool ShowHelp(CommandLine &, CommandLine::DispatchWithHelp const *) " --contents Control contents file generation\n" " -c=? Read this configuration file\n" " -o=? Set an arbitrary configuration option") << endl; - return true; } /*}}}*/ @@ -662,7 +665,7 @@ static bool ShowHelp(CommandLine &, CommandLine::DispatchWithHelp const *) static bool SimpleGenPackages(CommandLine &CmdL) { if (CmdL.FileSize() < 2) - return ShowHelp(CmdL, nullptr); + return ShowHelp(CmdL); string Override; if (CmdL.FileSize() >= 3) @@ -670,7 +673,8 @@ static bool SimpleGenPackages(CommandLine &CmdL) // Create a package writer object. PackagesWriter Packages(NULL, NULL, _config->Find("APT::FTPArchive::DB"), - Override, "", _config->Find("APT::FTPArchive::Architecture")); + Override, "", _config->Find("APT::FTPArchive::Architecture"), + _config->FindB("APT::FTPArchive::IncludeArchitectureAll", true)); if (_error->PendingError() == true) return false; @@ -694,7 +698,7 @@ static bool SimpleGenPackages(CommandLine &CmdL) static bool SimpleGenContents(CommandLine &CmdL) { if (CmdL.FileSize() < 2) - return ShowHelp(CmdL, nullptr); + return ShowHelp(CmdL); // Create a package writer object. ContentsWriter Contents(NULL, _config->Find("APT::FTPArchive::DB"), _config->Find("APT::FTPArchive::Architecture")); @@ -716,7 +720,7 @@ static bool SimpleGenContents(CommandLine &CmdL) static bool SimpleGenSources(CommandLine &CmdL) { if (CmdL.FileSize() < 2) - return ShowHelp(CmdL, nullptr); + return ShowHelp(CmdL); string Override; if (CmdL.FileSize() >= 3) @@ -753,7 +757,7 @@ static bool SimpleGenSources(CommandLine &CmdL) static bool SimpleGenRelease(CommandLine &CmdL) { if (CmdL.FileSize() < 2) - return ShowHelp(CmdL, nullptr); + return ShowHelp(CmdL); string Dir = CmdL.FileList[1]; @@ -815,12 +819,12 @@ static bool DoGeneratePackagesAndSources(Configuration &Setup, _error->DumpErrors(); // Do the generation for Packages - for (End = List; End->Str != 0; End++) + for (End = List; End->Str != 0; ++End) { if (End->Hit == false) continue; - PackageMap *I = (PackageMap *)End->UserData; + PackageMap * const I = static_cast(End->UserData); if (I->PkgDone == true) continue; if (I->GenPackages(Setup,Stats) == false) @@ -828,12 +832,12 @@ static bool DoGeneratePackagesAndSources(Configuration &Setup, } // Do the generation for Sources - for (End = List; End->Str != 0; End++) + for (End = List; End->Str != 0; ++End) { if (End->Hit == false) continue; - PackageMap *I = (PackageMap *)End->UserData; + PackageMap * const I = static_cast(End->UserData); if (I->SrcDone == true) continue; if (I->GenSources(Setup,SrcStats) == false) @@ -921,7 +925,7 @@ static bool Generate(CommandLine &CmdL) { struct CacheDB::Stats SrcStats; if (CmdL.FileSize() < 2) - return ShowHelp(CmdL, nullptr); + return ShowHelp(CmdL); struct timeval StartTime; gettimeofday(&StartTime,0); @@ -979,7 +983,7 @@ static bool Generate(CommandLine &CmdL) static bool Clean(CommandLine &CmdL) { if (CmdL.FileSize() != 2) - return ShowHelp(CmdL, nullptr); + return ShowHelp(CmdL); // Read the configuration file. Configuration Setup; @@ -1025,11 +1029,9 @@ static bool Clean(CommandLine &CmdL) } /*}}}*/ -int main(int argc, const char *argv[]) +static std::vector GetCommands() /*{{{*/ { - InitLocale(); - - CommandLine::DispatchWithHelp Cmds[] = { + return { {"packages",&SimpleGenPackages, nullptr}, {"contents",&SimpleGenContents, nullptr}, {"sources",&SimpleGenSources, nullptr}, @@ -1038,10 +1040,13 @@ int main(int argc, const char *argv[]) {"clean",&Clean, nullptr}, {nullptr, nullptr, nullptr} }; - +} + /*}}}*/ +int main(int argc, const char *argv[]) /*{{{*/ +{ // Parse the command line and initialize the package library CommandLine CmdL; - ParseCommandLine(CmdL, Cmds, "apt-ftparchive", &_config, NULL, argc, argv, ShowHelp); + auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_FTPARCHIVE, &_config, NULL, argc, argv, ShowHelp, &GetCommands); _config->CndSet("quiet",0); Quiet = _config->FindI("quiet",0); @@ -1049,3 +1054,4 @@ int main(int argc, const char *argv[]) return DispatchCommandLine(CmdL, Cmds); } + /*}}}*/