From 09fab2442c2ab9a503841d3dcd56b3c0c3efb502 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 9 Apr 2009 04:36:34 +0200 Subject: * apt-pkg/contrib/strutl.cc: - fix TimeToStr i18n (LP: #289807) * [ABI break] merge support for http redirects, thanks to Jeff Licquia and Anthony Towns * [ABI break] use int for the package IDs (thanks to Steve Cotton) * apt-pkg/pkgcache.cc: - do not run "dpkg --configure pkg" if pkg is in trigger-awaited state (LP: #322955) * methods/https.cc: - add Acquire::https::AllowRedirect support * Clarify the --help for 'purge' (LP: #243948) * cmdline/apt-get.cc - fix "apt-get source pkg" if there is a binary package and a source package of the same name but from different packages (LP: #330103) * cmdline/acqprogress.cc: - Call pkgAcquireStatus::Pulse even if quiet, so that we still get dlstatus messages on the status-fd (LP: #290234). --- apt-pkg/makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'apt-pkg/makefile') diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 1b78c94f6..087f17740 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -13,7 +13,7 @@ include ../buildlib/defaults.mak # methods/makefile - FIXME LIBRARY=apt-pkg LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER) -MAJOR=4.6 +MAJOR=4.7 MINOR=0 SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil APT_DOMAIN:=libapt-pkg$(MAJOR) -- cgit v1.2.3-70-g09d2 From 81e9789b12374073e848c73c79e235f82c14df44 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Tue, 9 Jun 2009 17:33:22 +0200 Subject: [ABI break] support '#' in apt.conf and /etc/apt/preferences (closes: #189866) --- apt-pkg/contrib/configuration.cc | 2 +- apt-pkg/init.h | 2 +- apt-pkg/makefile | 2 +- apt-pkg/policy.cc | 18 ++++++++++++++++-- apt-pkg/tagfile.cc | 21 ++++++++++++++++----- apt-pkg/tagfile.h | 5 ++++- debian/changelog | 5 +++++ methods/makefile | 2 +- 8 files changed, 45 insertions(+), 12 deletions(-) (limited to 'apt-pkg/makefile') diff --git a/apt-pkg/contrib/configuration.cc b/apt-pkg/contrib/configuration.cc index a82311a3f..80584d3ea 100644 --- a/apt-pkg/contrib/configuration.cc +++ b/apt-pkg/contrib/configuration.cc @@ -582,7 +582,7 @@ bool ReadConfigFile(Configuration &Conf,const string &FName,bool AsSectional, if (InQuote == true) continue; - if (*I == '/' && I + 1 != End && I[1] == '/') + if ((*I == '/' && I + 1 != End && I[1] == '/') || *I == '#') { End = I; break; diff --git a/apt-pkg/init.h b/apt-pkg/init.h index 6d8693be9..165299253 100644 --- a/apt-pkg/init.h +++ b/apt-pkg/init.h @@ -18,7 +18,7 @@ // See the makefile #define APT_PKG_MAJOR 4 -#define APT_PKG_MINOR 6 +#define APT_PKG_MINOR 8 #define APT_PKG_RELEASE 0 extern const char *pkgVersion; diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 087f17740..059f8532b 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -13,7 +13,7 @@ include ../buildlib/defaults.mak # methods/makefile - FIXME LIBRARY=apt-pkg LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER) -MAJOR=4.7 +MAJOR=4.8 MINOR=0 SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil APT_DOMAIN:=libapt-pkg$(MAJOR) diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc index 8b083fd44..98576fc91 100644 --- a/apt-pkg/policy.cc +++ b/apt-pkg/policy.cc @@ -239,7 +239,21 @@ signed short pkgPolicy::GetPriority(pkgCache::PkgIterator const &Pkg) return 0; } /*}}}*/ - +// PreferenceSection class - Overriding the default TrimRecord method /*{{{*/ +// --------------------------------------------------------------------- +/* The preference file is a user generated file so the parser should + therefore be a bit more friendly by allowing comments and new lines + all over the place rather than forcing a special format */ +class PreferenceSection : public pkgTagSection +{ + void TrimRecord(bool BeforeRecord, const char* &End) + { + for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r' || Stop[0] == '#'); Stop++) + if (Stop[0] == '#') + Stop = (const char*) memchr(Stop,'\n',End-Stop); + } +}; + /*}}}*/ // ReadPinFile - Load the pin file into a Policy /*{{{*/ // --------------------------------------------------------------------- /* I'd like to see the preferences file store more than just pin information @@ -259,7 +273,7 @@ bool ReadPinFile(pkgPolicy &Plcy,string File) if (_error->PendingError() == true) return false; - pkgTagSection Tags; + PreferenceSection Tags; while (TF.Step(Tags) == true) { string Name = Tags.FindS("Package"); diff --git a/apt-pkg/tagfile.cc b/apt-pkg/tagfile.cc index 893cb8ee7..7c5d15a58 100644 --- a/apt-pkg/tagfile.cc +++ b/apt-pkg/tagfile.cc @@ -81,7 +81,7 @@ bool pkgTagFile::Resize() End = Start + EndSize; return true; } - + /*}}}*/ // TagFile::Step - Advance to the next section /*{{{*/ // --------------------------------------------------------------------- /* If the Section Scanner fails we refill the buffer and try again. @@ -212,10 +212,12 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength) if (Stop == 0) return false; - + TagCount = 0; while (TagCount+1 < sizeof(Indexes)/sizeof(Indexes[0]) && Stop < End) { + TrimRecord(true,End); + // Start a new index and add it to the hash if (isspace(Stop[0]) == 0) { @@ -227,14 +229,14 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength) if (Stop == 0) return false; - + for (; Stop+1 < End && Stop[1] == '\r'; Stop++); // Double newline marks the end of the record if (Stop+1 < End && Stop[1] == '\n') { Indexes[TagCount] = Stop - Section; - for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r'); Stop++); + TrimRecord(false,End); return true; } @@ -244,6 +246,16 @@ bool pkgTagSection::Scan(const char *Start,unsigned long MaxLength) return false; } /*}}}*/ +// TagSection::TrimRecord - Trim off any garbage before/after a record /*{{{*/ +// --------------------------------------------------------------------- +/* There should be exactly 2 newline at the end of the record, no more. */ +void pkgTagSection::TrimRecord(bool BeforeRecord, const char*& End) +{ + if (BeforeRecord == true) + return; + for (; Stop < End && (Stop[0] == '\n' || Stop[0] == '\r'); Stop++); +} + /*}}}*/ // TagSection::Trim - Trim off any trailing garbage /*{{{*/ // --------------------------------------------------------------------- /* There should be exactly 1 newline at the end of the buffer, no more. */ @@ -390,7 +402,6 @@ bool pkgTagSection::FindFlag(const char *Tag,unsigned long &Flags, return true; } /*}}}*/ - // TFRewrite - Rewrite a control record /*{{{*/ // --------------------------------------------------------------------- /* This writes the control record to stdout rewriting it as necessary. The diff --git a/apt-pkg/tagfile.h b/apt-pkg/tagfile.h index 6536932dd..321329a23 100644 --- a/apt-pkg/tagfile.h +++ b/apt-pkg/tagfile.h @@ -27,7 +27,6 @@ class pkgTagSection { const char *Section; - const char *Stop; // We have a limit of 256 tags per section. unsigned int Indexes[256]; @@ -35,6 +34,9 @@ class pkgTagSection unsigned int TagCount; + protected: + const char *Stop; + public: inline bool operator ==(const pkgTagSection &rhs) {return Section == rhs.Section;}; @@ -49,6 +51,7 @@ class pkgTagSection bool Scan(const char *Start,unsigned long MaxLength); inline unsigned long size() const {return Stop - Section;}; void Trim(); + virtual void TrimRecord(bool BeforeRecord, const char* &End); inline unsigned int Count() const {return TagCount;}; inline void Get(const char *&Start,const char *&Stop,unsigned int I) const diff --git a/debian/changelog b/debian/changelog index 5d3a801a8..7947918a4 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,5 +1,6 @@ apt (0.7.22) UNRELEASED; urgency=low + [ Christian Perrier ] * Documentation translations: - Fix a typo in apt-get(8) French translation. Closes: #525043 Thanks to Guillaume Delacour for spotting it. @@ -15,6 +16,10 @@ apt (0.7.22) UNRELEASED; urgency=low * Added translations - ast.po (Asturian by Marcos Alvareez Costales). Closes: #529007, #529730 + + [ David Kalnischkies ] + * [ABI break] support '#' in apt.conf and /etc/apt/preferences + (closes: #189866) -- Christian Perrier Wed, 22 Apr 2009 10:13:54 +0200 diff --git a/methods/makefile b/methods/makefile index 78bdbc96f..589f9fa1c 100644 --- a/methods/makefile +++ b/methods/makefile @@ -7,7 +7,7 @@ include ../buildlib/defaults.mak BIN := $(BIN)/methods # FIXME.. -LIB_APT_PKG_MAJOR = 4.7 +LIB_APT_PKG_MAJOR = 4.8 APT_DOMAIN := libapt-pkg$(LIB_APT_PKG_MAJOR) # The file method -- cgit v1.2.3-70-g09d2 From e878aedb8b53b311295a2df55ce5e865b1ad92b9 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Tue, 25 Aug 2009 15:32:40 +0200 Subject: "backport" the APT::Configuration class to apt-sid We can use it to simplify the internal code to operate with Acquire::CompressionTypes group. This also made it possible to set this setting with the -o flag. --- apt-pkg/acquire-item.cc | 62 ++++++++++++++--------------------- apt-pkg/aptconfiguration.cc | 78 +++++++++++++++++++++++++++++++++++++++++++++ apt-pkg/aptconfiguration.h | 46 ++++++++++++++++++++++++++ apt-pkg/init.cc | 22 ------------- apt-pkg/makefile | 5 +-- doc/apt.conf.5.xml | 2 +- po/apt-all.pot | 22 ++++++------- 7 files changed, 163 insertions(+), 74 deletions(-) create mode 100644 apt-pkg/aptconfiguration.cc create mode 100644 apt-pkg/aptconfiguration.h (limited to 'apt-pkg/makefile') diff --git a/apt-pkg/acquire-item.cc b/apt-pkg/acquire-item.cc index ffbe66d7d..94341c81a 100644 --- a/apt-pkg/acquire-item.cc +++ b/apt-pkg/acquire-item.cc @@ -15,6 +15,7 @@ // Include Files /*{{{*/ #include #include +#include #include #include #include @@ -551,21 +552,11 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner, if(comprExt.empty()) { // autoselect the compression method - Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); - if (Opts != 0) - Opts = Opts->Child; - - const char dirBin[] = "Dir::Bin::"; - for (; Opts != 0; Opts = Opts->Next) - { - if (Opts->Tag.empty() == true || Opts->Value.empty() == true) - continue; - const string bin = _config->FindFile(string(dirBin).append(Opts->Value).c_str(),""); - if (bin != "" && !FileExists(bin)) - continue; - comprExt = '.' + Opts->Tag; - break; - } + std::vector types = APT::Configuration::getCompressionTypes(); + if (types.empty() == true) + comprExt = "plain"; + else + comprExt = "." + types[0]; } CompressionExtension = ((comprExt == "plain" || comprExt == ".") ? "" : comprExt); @@ -595,36 +586,31 @@ string pkgAcqIndex::Custom600Headers() /*}}}*/ void pkgAcqIndex::Failed(string Message,pkgAcquire::MethodConfig *Cnf) /*{{{*/ { - Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); - if (Opts != 0) - Opts = Opts->Child; + std::vector types = APT::Configuration::getCompressionTypes(); - const char dirBin[] = "Dir::Bin::"; - for (; Opts != 0; Opts = Opts->Next) + for (std::vector::const_iterator t = types.begin(); + t != types.end(); t++) { - if (Opts->Tag.empty() == true || Opts->Value.empty() == true) + // jump over all already tried compression types + const unsigned int nameLen = Desc.URI.size() - (*t).size(); + if(Desc.URI.substr(nameLen) != *t) continue; - // jump over all already checked compression types - const unsigned int nameLen = Desc.URI.size() - Opts->Tag.size(); - if(Desc.URI.substr(nameLen) != Opts->Tag || Opts->Next == 0) - continue; - - // check if we need an external binary for this compression type - const string bin = _config->FindFile(string(dirBin).append(Opts->Next->Value).c_str(),""); - if (bin != "" && !FileExists(bin)) - continue; + // we want to try it with the next extension + t++; - // retry with the next extension - Desc.URI = Desc.URI.substr(0, nameLen) + Opts->Next->Tag; + if (t != types.end()) + { + Desc.URI = Desc.URI.substr(0, nameLen) + *t; - new pkgAcqIndex(Owner, RealURI, Desc.Description, Desc.ShortDesc, - ExpectedHash, string(".").append(Opts->Next->Tag)); + new pkgAcqIndex(Owner, RealURI, Desc.Description, Desc.ShortDesc, + ExpectedHash, string(".").append(*t)); - Status = StatDone; - Complete = false; - Dequeue(); - return; + Status = StatDone; + Complete = false; + Dequeue(); + return; + } } // on decompression failure, remove bad versions in partial/ diff --git a/apt-pkg/aptconfiguration.cc b/apt-pkg/aptconfiguration.cc new file mode 100644 index 000000000..1a8e8262f --- /dev/null +++ b/apt-pkg/aptconfiguration.cc @@ -0,0 +1,78 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/* ###################################################################### + + Provide access methods to various configuration settings, + setup defaults and returns validate settings. + + ##################################################################### */ + /*}}}*/ +// Include Files /*{{{*/ +#include +#include +#include + +#include +#include + /*}}}*/ +namespace APT { +// getCompressionTypes - Return Vector of usbale compressiontypes /*{{{*/ +// --------------------------------------------------------------------- +/* return a vector of compression types in the prefered order. */ +std::vector +const Configuration::getCompressionTypes(bool const &Cached) { + static std::vector types; + if (types.empty() == false) { + if (Cached == true) + return types; + else + types.clear(); + } + + // Set default application paths to check for optional compression types + _config->CndSet("Dir::Bin::lzma", "/usr/bin/lzma"); + _config->CndSet("Dir::Bin::bzip2", "/bin/bzip2"); + + ::Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); + if (Opts != 0) + Opts = Opts->Child; + + // at first, move over the options to setup at least the default options + bool foundLzma=false, foundBzip2=false, foundGzip=false; + for (; Opts != 0; Opts = Opts->Next) { + if (Opts->Value == "lzma") + foundLzma = true; + else if (Opts->Value == "bz2") + foundBzip2 = true; + else if (Opts->Value == "gz") + foundGzip = true; + } + + // setup the defaults now + if (!foundBzip2) + _config->Set("Acquire::CompressionTypes::bz2","bzip2"); + if (!foundLzma) + _config->Set("Acquire::CompressionTypes::lzma","lzma"); + if (!foundGzip) + _config->Set("Acquire::CompressionTypes::gz","gzip"); + + // move again over the option tree to finially calculate our result + ::Configuration::Item const *Types = _config->Tree("Acquire::CompressionTypes"); + if (Types != 0) + Types = Types->Child; + + for (; Types != 0; Types = Types->Next) { + string const appsetting = string("Dir::Bin::").append(Types->Value); + // ignore compression types we have no app ready to use + if (appsetting.empty() == false && _config->Exists(appsetting) == true) { + std::string const app = _config->FindFile(appsetting.c_str(), ""); + if (app.empty() == false && FileExists(app) == false) + continue; + } + types.push_back(Types->Tag); + } + + return types; +} + /*}}}*/ +} diff --git a/apt-pkg/aptconfiguration.h b/apt-pkg/aptconfiguration.h new file mode 100644 index 000000000..6a123adce --- /dev/null +++ b/apt-pkg/aptconfiguration.h @@ -0,0 +1,46 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +/** \class APT::Configuration + * \brief Provide access methods to various configuration settings + * + * This class and their methods providing a layer around the usual access + * methods with _config to ensure that settings are correct and to be able + * to set defaults without the need to recheck it in every method again. + */ + /*}}}*/ +#ifndef APT_CONFIGURATION_H +#define APT_CONFIGURATION_H +// Include Files /*{{{*/ +#include +#include + /*}}}*/ +namespace APT { +class Configuration { /*{{{*/ +public: /*{{{*/ + /** \brief Returns a vector of usable Compression Types + * + * Files can be compressed in various ways to decrease the size of the + * download. Therefore the Acquiremethods support a few compression types + * and some archives provide also a few different types. This option + * group exists to give the user the choice to prefer one type over the + * other (some compression types are very resource intensive - great if you + * have a limited download, bad if you have a really lowpowered hardware.) + * + * This method ensures that the defaults are set and checks at runtime + * if the type can be used. E.g. the current default is to prefer bzip2 + * over lzma and gz - if the bzip2 binary is not available it has not much + * sense in downloading the bz2 file, therefore we will not return bz2 as + * a usable compression type. The availability is checked with the settings + * in the Dir::Bin group. + * + * \param Cached saves the result so we need to calculated it only once + * this parameter should ony be used for testing purposes. + * + * \return a vector of (all) Language Codes in the prefered usage order + */ + std::vector static const getCompressionTypes(bool const &Cached = true); + /*}}}*/ +}; + /*}}}*/ +} +#endif diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index 46017bf0c..15efb1a3d 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -104,28 +104,6 @@ bool pkgInitConfig(Configuration &Cnf) if (Res == false) return false; - // we load all config files, now check the configs and setup post-defaults: - // * check for CompressionTypes setup - { - Configuration::Item const *Opts = _config->Tree("Acquire::CompressionTypes"); - if (Opts != 0) - Opts = Opts->Child; - bool foundLzma=false, foundBzip2=false, foundGzip=false; - for (; Opts != 0; Opts = Opts->Next) - { - if (Opts->Value == "lzma") foundLzma = true; - else if (Opts->Value == "bz2") foundBzip2 = true; - else if (Opts->Value == "gz") foundGzip = true; - } - if (!foundBzip2) Cnf.Set("Acquire::CompressionTypes::bz2","bzip2"); - if (!foundLzma) Cnf.Set("Acquire::CompressionTypes::lzma","lzma"); - if (!foundGzip) Cnf.Set("Acquire::CompressionTypes::gz","gzip"); - Cnf.CndSet("Dir::Bin::lzma", "/usr/bin/lzma"); - Cnf.CndSet("Dir::Bin::bzip2", "/bin/bzip2"); - } - - - if (Cnf.FindB("Debug::pkgInitConfig",false) == true) Cnf.Dump(); diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 92ef58967..679d97e70 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -34,14 +34,15 @@ SOURCE+= pkgcache.cc version.cc depcache.cc \ acquire-worker.cc acquire-method.cc init.cc clean.cc \ srcrecords.cc cachefile.cc versionmatch.cc policy.cc \ pkgsystem.cc indexfile.cc pkgcachegen.cc acquire-item.cc \ - indexrecords.cc vendor.cc vendorlist.cc cdrom.cc indexcopy.cc + indexrecords.cc vendor.cc vendorlist.cc cdrom.cc indexcopy.cc \ + aptconfiguration.cc HEADERS+= algorithms.h depcache.h pkgcachegen.h cacheiterators.h \ orderlist.h sourcelist.h packagemanager.h tagfile.h \ init.h pkgcache.h version.h progress.h pkgrecords.h \ acquire.h acquire-worker.h acquire-item.h acquire-method.h \ clean.h srcrecords.h cachefile.h versionmatch.h policy.h \ pkgsystem.h indexfile.h metaindex.h indexrecords.h vendor.h \ - vendorlist.h cdrom.h indexcopy.h + vendorlist.h cdrom.h indexcopy.h aptconfiguration.h # Source code for the debian specific components # In theory the deb headers do not need to be exported.. diff --git a/doc/apt.conf.5.xml b/doc/apt.conf.5.xml index d347bda67..59235f115 100644 --- a/doc/apt.conf.5.xml +++ b/doc/apt.conf.5.xml @@ -309,7 +309,7 @@ DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt";}; This list defines in which order the acquire methods will try to download these files. Per default bzip2 compressed files will be prefered over lzma, gzip and uncompressed files. The syntax for - the configuration fileentry (this option can't be set at runtime with the -o option) is + the configuration fileentry is Acquire::CompressionTypes::FileExtension "Methodname"; e.g. Acquire::CompressionTypes::bz2 "bzip2"; Note that at runtime the Dir::Bin::Methodname will diff --git a/po/apt-all.pot b/po/apt-all.pot index b20a3fd92..518a3a1c1 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-08-12 14:46+0200\n" +"POT-Creation-Date: 2009-08-21 11:35+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -2364,12 +2364,12 @@ msgstr "" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "" -#: apt-pkg/init.cc:154 +#: apt-pkg/init.cc:132 #, c-format msgid "Packaging system '%s' is not supported" msgstr "" -#: apt-pkg/init.cc:170 +#: apt-pkg/init.cc:148 msgid "Unable to determine a suitable packaging system type" msgstr "" @@ -2497,44 +2497,44 @@ msgstr "" msgid "IO Error saving source cache" msgstr "" -#: apt-pkg/acquire-item.cc:127 +#: apt-pkg/acquire-item.cc:128 #, c-format msgid "rename failed, %s (%s -> %s)." msgstr "" -#: apt-pkg/acquire-item.cc:394 +#: apt-pkg/acquire-item.cc:395 msgid "MD5Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:663 apt-pkg/acquire-item.cc:1425 +#: apt-pkg/acquire-item.cc:649 apt-pkg/acquire-item.cc:1411 msgid "Hash Sum mismatch" msgstr "" -#: apt-pkg/acquire-item.cc:1120 +#: apt-pkg/acquire-item.cc:1106 msgid "There is no public key available for the following key IDs:\n" msgstr "" -#: apt-pkg/acquire-item.cc:1230 +#: apt-pkg/acquire-item.cc:1216 #, c-format msgid "" "I wasn't able to locate a file for the %s package. This might mean you need " "to manually fix this package. (due to missing arch)" msgstr "" -#: apt-pkg/acquire-item.cc:1289 +#: apt-pkg/acquire-item.cc:1275 #, c-format msgid "" "I wasn't able to locate file for the %s package. This might mean you need to " "manually fix this package." msgstr "" -#: apt-pkg/acquire-item.cc:1330 +#: apt-pkg/acquire-item.cc:1316 #, c-format msgid "" "The package index files are corrupted. No Filename: field for package %s." msgstr "" -#: apt-pkg/acquire-item.cc:1417 +#: apt-pkg/acquire-item.cc:1403 msgid "Size mismatch" msgstr "" -- cgit v1.2.3-70-g09d2 From 97c17a01c7722f08e0cebf938c12a010b96220b7 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 27 Aug 2009 15:24:41 +0200 Subject: releasing version 0.7.23 --- apt-pkg/init.h | 2 +- apt-pkg/makefile | 2 +- debian/NEWS | 2 +- debian/changelog | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) (limited to 'apt-pkg/makefile') diff --git a/apt-pkg/init.h b/apt-pkg/init.h index 165299253..44d1d107c 100644 --- a/apt-pkg/init.h +++ b/apt-pkg/init.h @@ -19,7 +19,7 @@ // See the makefile #define APT_PKG_MAJOR 4 #define APT_PKG_MINOR 8 -#define APT_PKG_RELEASE 0 +#define APT_PKG_RELEASE 1 extern const char *pkgVersion; extern const char *pkgLibVersion; diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 679d97e70..7816ecf0d 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -14,7 +14,7 @@ include ../buildlib/defaults.mak LIBRARY=apt-pkg LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER) MAJOR=4.8 -MINOR=0 +MINOR=1 SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil -ldl APT_DOMAIN:=libapt-pkg$(MAJOR) diff --git a/debian/NEWS b/debian/NEWS index 19f06793e..88f2c564e 100644 --- a/debian/NEWS +++ b/debian/NEWS @@ -1,4 +1,4 @@ -apt (0.7.22.3) unstable; urgency=low +apt (0.7.23) unstable; urgency=low * Code that determines which proxy to use was changed. Now 'Acquire::{http,ftp}::Proxy[::]' options have the highest priority, diff --git a/debian/changelog b/debian/changelog index 1ee88f0ba..e351198c5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,4 +1,4 @@ -apt (0.7.22.3) UNRELEASED; urgency=low +apt (0.7.23) unstable; urgency=low [ Eugene V. Lyubimkin ] * methods/{http,https,ftp}, doc/apt.conf.5.xml: @@ -51,7 +51,7 @@ apt (0.7.22.3) UNRELEASED; urgency=low * apt-pkg/indexcopy.cc: - fix a memory leak then the Release file not exists (Closes: #511556) - -- Michael Vogt Thu, 27 Aug 2009 14:15:39 +0200 + -- Michael Vogt Thu, 27 Aug 2009 14:44:39 +0200 apt (0.7.22.2) unstable; urgency=low -- cgit v1.2.3-70-g09d2 From 592b78001c381f9cca6f20d8d1d47696bb98c0d1 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 16 Oct 2009 15:36:28 +0200 Subject: port netrc support from maemon --- apt-pkg/contrib/netrc.cc | 184 +++++++++++++++++++++++++++++++++++++++++++ apt-pkg/contrib/netrc.h | 29 +++++++ apt-pkg/init.cc | 1 + apt-pkg/makefile | 6 +- doc/examples/configure-index | 1 + methods/http.cc | 7 +- methods/https.cc | 3 + po/apt-all.pot | 147 ++++++++++++++++++---------------- 8 files changed, 303 insertions(+), 75 deletions(-) create mode 100644 apt-pkg/contrib/netrc.cc create mode 100644 apt-pkg/contrib/netrc.h (limited to 'apt-pkg/makefile') diff --git a/apt-pkg/contrib/netrc.cc b/apt-pkg/contrib/netrc.cc new file mode 100644 index 000000000..851b661a4 --- /dev/null +++ b/apt-pkg/contrib/netrc.cc @@ -0,0 +1,184 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +// $Id: netrc.c,v 1.38 2007-11-07 09:21:35 bagder Exp $ +/* ###################################################################### + + netrc file parser - returns the login and password of a give host in + a specified netrc-type file + + Originally written by Daniel Stenberg, , et al. and + placed into the Public Domain, do with it what you will. + + ##################################################################### */ + /*}}}*/ + +#include +#include +#include +#include +#include +#include + +#include "netrc.h" + + +/* Get user and password from .netrc when given a machine name */ + +enum { + NOTHING, + HOSTFOUND, /* the 'machine' keyword was found */ + HOSTCOMPLETE, /* the machine name following the keyword was found too */ + HOSTVALID, /* this is "our" machine! */ + HOSTEND /* LAST enum */ +}; + +/* make sure we have room for at least this size: */ +#define LOGINSIZE 64 +#define PASSWORDSIZE 64 +#define NETRC DOT_CHAR "netrc" + +/* returns -1 on failure, 0 if the host is found, 1 is the host isn't found */ +int parsenetrc (char *host, char *login, char *password, char *netrcfile = NULL) +{ + FILE *file; + int retcode = 1; + int specific_login = (login[0] != 0); + char *home = NULL; + bool netrc_alloc = false; + int state = NOTHING; + + char state_login = 0; /* Found a login keyword */ + char state_password = 0; /* Found a password keyword */ + int state_our_login = false; /* With specific_login, + found *our* login name */ + + if (!netrcfile) { + home = getenv ("HOME"); /* portable environment reader */ + + if (!home) { + struct passwd *pw; + pw = getpwuid (geteuid ()); + if(pw) + home = pw->pw_dir; + } + + if (!home) + return -1; + + asprintf (&netrcfile, "%s%s%s", home, DIR_CHAR, NETRC); + if(!netrcfile) + return -1; + else + netrc_alloc = true; + } + + file = fopen (netrcfile, "r"); + if(file) { + char *tok; + char *tok_buf; + bool done = false; + char netrcbuffer[256]; + + while (!done && fgets(netrcbuffer, sizeof (netrcbuffer), file)) { + tok = strtok_r (netrcbuffer, " \t\n", &tok_buf); + while (!done && tok) { + if(login[0] && password[0]) { + done = true; + break; + } + + switch(state) { + case NOTHING: + if (!strcasecmp ("machine", tok)) { + /* the next tok is the machine name, this is in itself the + delimiter that starts the stuff entered for this machine, + after this we need to search for 'login' and + 'password'. */ + state = HOSTFOUND; + } + break; + case HOSTFOUND: + if (!strcasecmp (host, tok)) { + /* and yes, this is our host! */ + state = HOSTVALID; + retcode = 0; /* we did find our host */ + } + else + /* not our host */ + state = NOTHING; + break; + case HOSTVALID: + /* we are now parsing sub-keywords concerning "our" host */ + if (state_login) { + if (specific_login) + state_our_login = !strcasecmp (login, tok); + else + strncpy (login, tok, LOGINSIZE - 1); + state_login = 0; + } else if (state_password) { + if (state_our_login || !specific_login) + strncpy (password, tok, PASSWORDSIZE - 1); + state_password = 0; + } else if (!strcasecmp ("login", tok)) + state_login = 1; + else if (!strcasecmp ("password", tok)) + state_password = 1; + else if(!strcasecmp ("machine", tok)) { + /* ok, there's machine here go => */ + state = HOSTFOUND; + state_our_login = false; + } + break; + } /* switch (state) */ + + tok = strtok_r (NULL, " \t\n", &tok_buf); + } /* while(tok) */ + } /* while fgets() */ + + fclose(file); + } + + if (netrc_alloc) + free(netrcfile); + + return retcode; +} + +void maybe_add_auth (URI &Uri, string NetRCFile) +{ + if (Uri.Password.empty () == true && Uri.User.empty () == true) + { + if (NetRCFile.empty () == false) + { + char login[64] = ""; + char password[64] = ""; + char *netrcfile = strdup (NetRCFile.c_str ()); + char *host = strdup (Uri.Host.c_str ()); + + if (host && 0 == parsenetrc (host, login, password, netrcfile)) + { + Uri.User = string (login); + Uri.Password = string (password); + } + + if (host) + free (host); + free (netrcfile); + } + } +} + +#ifdef DEBUG +int main(int argc, char* argv[]) +{ + char login[64] = ""; + char password[64] = ""; + + if(argc < 2) + return -1; + + if(0 == parsenetrc (argv[1], login, password, argv[2])) { + printf("HOST: %s LOGIN: %s PASSWORD: %s\n", argv[1], login, password); + } +} +#endif diff --git a/apt-pkg/contrib/netrc.h b/apt-pkg/contrib/netrc.h new file mode 100644 index 000000000..02a5eb09f --- /dev/null +++ b/apt-pkg/contrib/netrc.h @@ -0,0 +1,29 @@ +// -*- mode: cpp; mode: fold -*- +// Description /*{{{*/ +// $Id: netrc.h,v 1.11 2004/01/07 09:19:35 bagder Exp $ +/* ###################################################################### + + netrc file parser - returns the login and password of a give host in + a specified netrc-type file + + Originally written by Daniel Stenberg, , et al. and + placed into the Public Domain, do with it what you will. + + ##################################################################### */ + /*}}}*/ +#ifndef NETRC_H +#define NETRC_H + +#include + +#define DOT_CHAR "." +#define DIR_CHAR "/" + +// Assume: password[0]=0, host[0] != 0. +// If login[0] = 0, search for login and password within a machine section +// in the netrc. +// If login[0] != 0, search for password within machine and login. +int parsenetrc (char *host, char *login, char *password, char *filename); + +void maybe_add_auth (URI &Uri, string NetRCFile); +#endif diff --git a/apt-pkg/init.cc b/apt-pkg/init.cc index 63caade36..2a3dfae74 100644 --- a/apt-pkg/init.cc +++ b/apt-pkg/init.cc @@ -65,6 +65,7 @@ bool pkgInitConfig(Configuration &Cnf) Cnf.Set("Dir::Etc::vendorlist","vendors.list"); Cnf.Set("Dir::Etc::vendorparts","vendors.list.d"); Cnf.Set("Dir::Etc::main","apt.conf"); + Cnf.Set("Dir::ETc::netrc", "auth.conf"); Cnf.Set("Dir::Etc::parts","apt.conf.d"); Cnf.Set("Dir::Etc::preferences","preferences"); Cnf.Set("Dir::Etc::preferencesparts","preferences.d"); diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 92ef58967..26fc9fac5 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -22,10 +22,10 @@ APT_DOMAIN:=libapt-pkg$(MAJOR) SOURCE = contrib/mmap.cc contrib/error.cc contrib/strutl.cc \ contrib/configuration.cc contrib/progress.cc contrib/cmndline.cc \ contrib/md5.cc contrib/sha1.cc contrib/sha256.cc contrib/hashes.cc \ - contrib/cdromutl.cc contrib/crc-16.cc \ + contrib/cdromutl.cc contrib/crc-16.cc contrib/netrc.cc \ contrib/fileutl.cc -HEADERS = mmap.h error.h configuration.h fileutl.h cmndline.h \ - md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha256.h hashes.h +HEADERS = mmap.h error.h configuration.h fileutl.h cmndline.h netrc.h\ + md5.h crc-16.h cdromutl.h strutl.h sptr.h sha1.h sha256.h hashes.h # Source code for the core main library SOURCE+= pkgcache.cc version.cc depcache.cc \ diff --git a/doc/examples/configure-index b/doc/examples/configure-index index 5dc7b5246..3c236d7d9 100644 --- a/doc/examples/configure-index +++ b/doc/examples/configure-index @@ -273,6 +273,7 @@ Dir "/" // Config files Etc "etc/apt/" { Main "apt.conf"; + Netrc "auth.conf"; Parts "apt.conf.d/"; Preferences "preferences"; PreferencesParts "preferences.d"; diff --git a/methods/http.cc b/methods/http.cc index 1eba0f279..6bfe80baf 100644 --- a/methods/http.cc +++ b/methods/http.cc @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -42,6 +43,7 @@ #include #include + // Internet stuff #include @@ -49,7 +51,6 @@ #include "connect.h" #include "rfc2553emu.h" #include "http.h" - /*}}}*/ using namespace std; @@ -725,9 +726,11 @@ void HttpMethod::SendReq(FetchItem *Itm,CircleBuf &Out) Base64Encode(Proxy.User + ":" + Proxy.Password) + "\r\n"; if (Uri.User.empty() == false || Uri.Password.empty() == false) + { + maybe_add_auth (Uri, _config->FindFile("Dir::Etc::netrc")); Req += string("Authorization: Basic ") + Base64Encode(Uri.User + ":" + Uri.Password) + "\r\n"; - + } Req += "User-Agent: Debian APT-HTTP/1.3 ("VERSION")\r\n\r\n"; if (Debug == true) diff --git a/methods/https.cc b/methods/https.cc index 37d93e308..a86c78029 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -126,6 +127,8 @@ bool HttpsMethod::Fetch(FetchItem *Itm) curl_easy_reset(curl); SetupProxy(); + maybe_add_auth (Uri, _config->FindFile("Dir::ETc::netrc")); + // callbacks curl_easy_setopt(curl, CURLOPT_URL, Itm->Uri.c_str()); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); diff --git a/po/apt-all.pot b/po/apt-all.pot index a18646290..ec2e73a13 100644 --- a/po/apt-all.pot +++ b/po/apt-all.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-07-26 01:10+0200\n" +"POT-Creation-Date: 2009-10-16 15:18+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -989,7 +989,7 @@ msgstr "" msgid "Calculating upgrade... " msgstr "" -#: cmdline/apt-get.cc:1897 methods/ftp.cc:702 methods/connect.cc:112 +#: cmdline/apt-get.cc:1897 methods/ftp.cc:707 methods/connect.cc:112 msgid "Failed" msgstr "" @@ -1281,7 +1281,12 @@ msgstr "" msgid "Error reading archive member header" msgstr "" -#: apt-inst/contrib/arfile.cc:90 apt-inst/contrib/arfile.cc:102 +#: apt-inst/contrib/arfile.cc:90 +#, c-format +msgid "Invalid archive member header %s" +msgstr "" + +#: apt-inst/contrib/arfile.cc:102 msgid "Invalid archive member header" msgstr "" @@ -1381,10 +1386,12 @@ msgstr "" msgid "File %s/%s overwrites the one in the package %s" msgstr "" +#. Only warn if there are no sources.list.d. +#. Only warn if there is no sources.list file. #: apt-inst/extract.cc:464 apt-pkg/contrib/configuration.cc:822 -#: apt-pkg/contrib/cdromutl.cc:157 apt-pkg/sourcelist.cc:163 -#: apt-pkg/sourcelist.cc:169 apt-pkg/sourcelist.cc:324 apt-pkg/acquire.cc:419 -#: apt-pkg/init.cc:89 apt-pkg/init.cc:97 apt-pkg/clean.cc:33 +#: apt-pkg/contrib/cdromutl.cc:157 apt-pkg/sourcelist.cc:166 +#: apt-pkg/sourcelist.cc:172 apt-pkg/sourcelist.cc:327 apt-pkg/acquire.cc:419 +#: apt-pkg/init.cc:90 apt-pkg/init.cc:98 apt-pkg/clean.cc:33 #: apt-pkg/policy.cc:281 apt-pkg/policy.cc:287 #, c-format msgid "Unable to read %s" @@ -1559,147 +1566,147 @@ msgid "Invalid URI, local URIS must not start with //" msgstr "" #. Login must be before getpeername otherwise dante won't work. -#: methods/ftp.cc:162 +#: methods/ftp.cc:167 msgid "Logging in" msgstr "" -#: methods/ftp.cc:168 +#: methods/ftp.cc:173 msgid "Unable to determine the peer name" msgstr "" -#: methods/ftp.cc:173 +#: methods/ftp.cc:178 msgid "Unable to determine the local name" msgstr "" -#: methods/ftp.cc:204 methods/ftp.cc:232 +#: methods/ftp.cc:209 methods/ftp.cc:237 #, c-format msgid "The server refused the connection and said: %s" msgstr "" -#: methods/ftp.cc:210 +#: methods/ftp.cc:215 #, c-format msgid "USER failed, server said: %s" msgstr "" -#: methods/ftp.cc:217 +#: methods/ftp.cc:222 #, c-format msgid "PASS failed, server said: %s" msgstr "" -#: methods/ftp.cc:237 +#: methods/ftp.cc:242 msgid "" "A proxy server was specified but no login script, Acquire::ftp::ProxyLogin " "is empty." msgstr "" -#: methods/ftp.cc:265 +#: methods/ftp.cc:270 #, c-format msgid "Login script command '%s' failed, server said: %s" msgstr "" -#: methods/ftp.cc:291 +#: methods/ftp.cc:296 #, c-format msgid "TYPE failed, server said: %s" msgstr "" -#: methods/ftp.cc:329 methods/ftp.cc:440 methods/rsh.cc:183 methods/rsh.cc:226 +#: methods/ftp.cc:334 methods/ftp.cc:445 methods/rsh.cc:183 methods/rsh.cc:226 msgid "Connection timeout" msgstr "" -#: methods/ftp.cc:335 +#: methods/ftp.cc:340 msgid "Server closed the connection" msgstr "" -#: methods/ftp.cc:338 apt-pkg/contrib/fileutl.cc:541 methods/rsh.cc:190 +#: methods/ftp.cc:343 apt-pkg/contrib/fileutl.cc:541 methods/rsh.cc:190 msgid "Read error" msgstr "" -#: methods/ftp.cc:345 methods/rsh.cc:197 +#: methods/ftp.cc:350 methods/rsh.cc:197 msgid "A response overflowed the buffer." msgstr "" -#: methods/ftp.cc:362 methods/ftp.cc:374 +#: methods/ftp.cc:367 methods/ftp.cc:379 msgid "Protocol corruption" msgstr "" -#: methods/ftp.cc:446 apt-pkg/contrib/fileutl.cc:580 methods/rsh.cc:232 +#: methods/ftp.cc:451 apt-pkg/contrib/fileutl.cc:580 methods/rsh.cc:232 msgid "Write error" msgstr "" -#: methods/ftp.cc:687 methods/ftp.cc:693 methods/ftp.cc:729 +#: methods/ftp.cc:692 methods/ftp.cc:698 methods/ftp.cc:734 msgid "Could not create a socket" msgstr "" -#: methods/ftp.cc:698 +#: methods/ftp.cc:703 msgid "Could not connect data socket, connection timed out" msgstr "" -#: methods/ftp.cc:704 +#: methods/ftp.cc:709 msgid "Could not connect passive socket." msgstr "" -#: methods/ftp.cc:722 +#: methods/ftp.cc:727 msgid "getaddrinfo was unable to get a listening socket" msgstr "" -#: methods/ftp.cc:736 +#: methods/ftp.cc:741 msgid "Could not bind a socket" msgstr "" -#: methods/ftp.cc:740 +#: methods/ftp.cc:745 msgid "Could not listen on the socket" msgstr "" -#: methods/ftp.cc:747 +#: methods/ftp.cc:752 msgid "Could not determine the socket's name" msgstr "" -#: methods/ftp.cc:779 +#: methods/ftp.cc:784 msgid "Unable to send PORT command" msgstr "" -#: methods/ftp.cc:789 +#: methods/ftp.cc:794 #, c-format msgid "Unknown address family %u (AF_*)" msgstr "" -#: methods/ftp.cc:798 +#: methods/ftp.cc:803 #, c-format msgid "EPRT failed, server said: %s" msgstr "" -#: methods/ftp.cc:818 +#: methods/ftp.cc:823 msgid "Data socket connect timed out" msgstr "" -#: methods/ftp.cc:825 +#: methods/ftp.cc:830 msgid "Unable to accept connection" msgstr "" -#: methods/ftp.cc:864 methods/http.cc:991 methods/rsh.cc:303 +#: methods/ftp.cc:869 methods/http.cc:999 methods/rsh.cc:303 msgid "Problem hashing file" msgstr "" -#: methods/ftp.cc:877 +#: methods/ftp.cc:882 #, c-format msgid "Unable to fetch file, server said '%s'" msgstr "" -#: methods/ftp.cc:892 methods/rsh.cc:322 +#: methods/ftp.cc:897 methods/rsh.cc:322 msgid "Data socket timed out" msgstr "" -#: methods/ftp.cc:922 +#: methods/ftp.cc:927 #, c-format msgid "Data transfer failed, server said '%s'" msgstr "" #. Get the files information -#: methods/ftp.cc:997 +#: methods/ftp.cc:1002 msgid "Query" msgstr "" -#: methods/ftp.cc:1109 +#: methods/ftp.cc:1114 msgid "Unable to invoke " msgstr "" @@ -1807,80 +1814,80 @@ msgstr "" msgid "Read error from %s process" msgstr "" -#: methods/http.cc:379 +#: methods/http.cc:385 msgid "Waiting for headers" msgstr "" -#: methods/http.cc:525 +#: methods/http.cc:531 #, c-format msgid "Got a single header line over %u chars" msgstr "" -#: methods/http.cc:533 +#: methods/http.cc:539 msgid "Bad header line" msgstr "" -#: methods/http.cc:552 methods/http.cc:559 +#: methods/http.cc:558 methods/http.cc:565 msgid "The HTTP server sent an invalid reply header" msgstr "" -#: methods/http.cc:588 +#: methods/http.cc:594 msgid "The HTTP server sent an invalid Content-Length header" msgstr "" -#: methods/http.cc:603 +#: methods/http.cc:609 msgid "The HTTP server sent an invalid Content-Range header" msgstr "" -#: methods/http.cc:605 +#: methods/http.cc:611 msgid "This HTTP server has broken range support" msgstr "" -#: methods/http.cc:629 +#: methods/http.cc:635 msgid "Unknown date format" msgstr "" -#: methods/http.cc:782 +#: methods/http.cc:790 msgid "Select failed" msgstr "" -#: methods/http.cc:787 +#: methods/http.cc:795 msgid "Connection timed out" msgstr "" -#: methods/http.cc:810 +#: methods/http.cc:818 msgid "Error writing to output file" msgstr "" -#: methods/http.cc:841 +#: methods/http.cc:849 msgid "Error writing to file" msgstr "" -#: methods/http.cc:869 +#: methods/http.cc:877 msgid "Error writing to the file" msgstr "" -#: methods/http.cc:883 +#: methods/http.cc:891 msgid "Error reading from server. Remote end closed connection" msgstr "" -#: methods/http.cc:885 +#: methods/http.cc:893 msgid "Error reading from server" msgstr "" -#: methods/http.cc:976 apt-pkg/contrib/mmap.cc:215 +#: methods/http.cc:984 apt-pkg/contrib/mmap.cc:215 msgid "Failed to truncate file" msgstr "" -#: methods/http.cc:1141 +#: methods/http.cc:1149 msgid "Bad header data" msgstr "" -#: methods/http.cc:1158 methods/http.cc:1213 +#: methods/http.cc:1166 methods/http.cc:1221 msgid "Connection failed" msgstr "" -#: methods/http.cc:1305 +#: methods/http.cc:1313 msgid "Internal error" msgstr "" @@ -2211,16 +2218,16 @@ msgstr "" msgid "Dependency generation" msgstr "" -#: apt-pkg/depcache.cc:173 apt-pkg/depcache.cc:192 apt-pkg/depcache.cc:196 +#: apt-pkg/depcache.cc:173 apt-pkg/depcache.cc:193 apt-pkg/depcache.cc:197 msgid "Reading state information" msgstr "" -#: apt-pkg/depcache.cc:220 +#: apt-pkg/depcache.cc:223 #, c-format msgid "Failed to open StateFile %s" msgstr "" -#: apt-pkg/depcache.cc:226 +#: apt-pkg/depcache.cc:229 #, c-format msgid "Failed to write temporary StateFile %s" msgstr "" @@ -2260,27 +2267,27 @@ msgstr "" msgid "Malformed line %lu in source list %s (dist parse)" msgstr "" -#: apt-pkg/sourcelist.cc:203 +#: apt-pkg/sourcelist.cc:206 #, c-format msgid "Opening %s" msgstr "" -#: apt-pkg/sourcelist.cc:220 apt-pkg/cdrom.cc:445 +#: apt-pkg/sourcelist.cc:223 apt-pkg/cdrom.cc:445 #, c-format msgid "Line %u too long in source list %s." msgstr "" -#: apt-pkg/sourcelist.cc:240 +#: apt-pkg/sourcelist.cc:243 #, c-format msgid "Malformed line %u in source list %s (type)" msgstr "" -#: apt-pkg/sourcelist.cc:244 +#: apt-pkg/sourcelist.cc:247 #, c-format msgid "Type '%s' is not known on line %u in source list %s" msgstr "" -#: apt-pkg/sourcelist.cc:252 apt-pkg/sourcelist.cc:255 +#: apt-pkg/sourcelist.cc:255 apt-pkg/sourcelist.cc:258 #, c-format msgid "Malformed line %u in source list %s (vendor id)" msgstr "" @@ -2357,12 +2364,12 @@ msgstr "" msgid "Please insert the disc labeled: '%s' in the drive '%s' and press enter." msgstr "" -#: apt-pkg/init.cc:132 +#: apt-pkg/init.cc:133 #, c-format msgid "Packaging system '%s' is not supported" msgstr "" -#: apt-pkg/init.cc:148 +#: apt-pkg/init.cc:149 msgid "Unable to determine a suitable packaging system type" msgstr "" @@ -2719,11 +2726,11 @@ msgstr "" msgid "Completely removed %s" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:820 +#: apt-pkg/deb/dpkgpm.cc:822 msgid "Can not write log, openpty() failed (/dev/pts not mounted?)\n" msgstr "" -#: apt-pkg/deb/dpkgpm.cc:848 +#: apt-pkg/deb/dpkgpm.cc:851 msgid "Running dpkg" msgstr "" -- cgit v1.2.3-70-g09d2 From 10c9f030e02ccec5c002abc42776f994c124c574 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Sat, 24 Oct 2009 17:38:06 +0200 Subject: Bumped libapt version and excluded eglibc from SONAME. (Closes: #448249) Backported from lp:~mvo/apt/debian-experimental Based on patch by Eugene V. Lyubimkin --- apt-inst/makefile | 3 +-- apt-pkg/init.h | 4 ++-- apt-pkg/makefile | 5 ++--- buildlib/library.mak | 16 ++++++++-------- debian/changelog | 2 ++ debian/rules | 14 +++++++------- methods/makefile | 2 +- 7 files changed, 23 insertions(+), 23 deletions(-) (limited to 'apt-pkg/makefile') diff --git a/apt-inst/makefile b/apt-inst/makefile index cc61841b9..c0ff3d886 100644 --- a/apt-inst/makefile +++ b/apt-inst/makefile @@ -11,8 +11,7 @@ include ../buildlib/defaults.mak # The library name LIBRARY=apt-inst -LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER) -MAJOR=1.1 +MAJOR=1.2 MINOR=0 SLIBS=$(PTHREADLIB) -lapt-pkg APT_DOMAIN:=libapt-inst$(MAJOR) diff --git a/apt-pkg/init.h b/apt-pkg/init.h index 44d1d107c..44a57eb45 100644 --- a/apt-pkg/init.h +++ b/apt-pkg/init.h @@ -18,8 +18,8 @@ // See the makefile #define APT_PKG_MAJOR 4 -#define APT_PKG_MINOR 8 -#define APT_PKG_RELEASE 1 +#define APT_PKG_MINOR 9 +#define APT_PKG_RELEASE 0 extern const char *pkgVersion; extern const char *pkgLibVersion; diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 7816ecf0d..80038e28e 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -12,9 +12,8 @@ include ../buildlib/defaults.mak # The library name, don't forget to update init.h and the copy in # methods/makefile - FIXME LIBRARY=apt-pkg -LIBEXT=$(GLIBC_VER)$(LIBSTDCPP_VER) -MAJOR=4.8 -MINOR=1 +MAJOR=4.9 +MINOR=0 SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil -ldl APT_DOMAIN:=libapt-pkg$(MAJOR) diff --git a/buildlib/library.mak b/buildlib/library.mak index de8833cbb..029e87463 100644 --- a/buildlib/library.mak +++ b/buildlib/library.mak @@ -5,7 +5,7 @@ # Input # $(SOURCE) - The source code to use # $(HEADERS) - Exported header files and private header files -# $(LIBRARY) - The name of the library without lib or .so +# $(LIBRARY) - The name of the library without lib or .so # $(MAJOR) - The major version number of this library # $(MINOR) - The minor version number of this library # $(APT_DOMAIN) - The text domain for this library @@ -16,11 +16,11 @@ # See defaults.mak for information about LOCAL # Some local definitions -LOCAL := lib$(LIBRARY)$(LIBEXT).so.$(MAJOR).$(MINOR) +LOCAL := lib$(LIBRARY).so.$(MAJOR).$(MINOR) $(LOCAL)-OBJS := $(addprefix $(OBJ)/,$(addsuffix .opic,$(notdir $(basename $(SOURCE))))) $(LOCAL)-DEP := $(addprefix $(DEP)/,$(addsuffix .opic.d,$(notdir $(basename $(SOURCE))))) $(LOCAL)-HEADERS := $(addprefix $(INCLUDE)/,$(HEADERS)) -$(LOCAL)-SONAME := lib$(LIBRARY)$(LIBEXT).so.$(MAJOR) +$(LOCAL)-SONAME := lib$(LIBRARY).so.$(MAJOR) $(LOCAL)-SLIBS := $(SLIBS) $(LOCAL)-LIBRARY := $(LIBRARY) @@ -29,7 +29,7 @@ include $(PODOMAIN_H) # Install the command hooks headers: $($(LOCAL)-HEADERS) -library: $(LIB)/lib$(LIBRARY).so $(LIB)/lib$(LIBRARY)$(LIBEXT).so.$(MAJOR) +library: $(LIB)/lib$(LIBRARY).so $(LIB)/lib$(LIBRARY).so.$(MAJOR) clean: clean/$(LOCAL) veryclean: veryclean/$(LOCAL) @@ -44,14 +44,14 @@ veryclean/$(LOCAL): clean/$(LOCAL) -rm -f $($(@F)-HEADERS) $(LIB)/lib$($(@F)-LIBRARY)*.so* # Build rules for the two symlinks -.PHONY: $(LIB)/lib$(LIBRARY)$(LIBEXT).so.$(MAJOR) $(LIB)/lib$(LIBRARY).so -$(LIB)/lib$(LIBRARY)$(LIBEXT).so.$(MAJOR): $(LIB)/lib$(LIBRARY)$(LIBEXT).so.$(MAJOR).$(MINOR) +.PHONY: $(LIB)/lib$(LIBRARY).so.$(MAJOR) $(LIB)/lib$(LIBRARY).so +$(LIB)/lib$(LIBRARY).so.$(MAJOR): $(LIB)/lib$(LIBRARY).so.$(MAJOR).$(MINOR) ln -sf $( /dev/null echo Building shared library $@ $(CXX) $(CXXFLAGS) $(LDFLAGS) $(PICFLAGS) $(LFLAGS) $(LFLAGS_SO)\ diff --git a/debian/changelog b/debian/changelog index 80369e8e7..e7a7e1c49 100644 --- a/debian/changelog +++ b/debian/changelog @@ -35,6 +35,8 @@ apt (0.7.25) UNRELEASED; urgency=low [ Eugene V. Lyubimkin ] * apt-pkg/contib/strutl.h - Avoid extra inner copy in APT_MKSTRCMP and APT_MKSTRCMP2. + * build infrastructure: + - Bumped libapt version, excluded eglibc from SONAME. (Closes: #448249) [ Julian Andres Klode ] * doc/apt.conf.5.xml: diff --git a/debian/rules b/debian/rules index d19531dfc..d1b77e172 100755 --- a/debian/rules +++ b/debian/rules @@ -79,21 +79,21 @@ export LIBAPTPKG_MAJOR:=$(shell egrep '^MAJOR=' apt-pkg/makefile |cut -d '=' -f export LIBAPTINST_MAJOR:=$(shell egrep '^MAJOR=' apt-inst/makefile |cut -d '=' -f 2) # Determine which package we should provide in the control files -LIBAPTPKG_PROVIDE=libapt-pkg$(GLIBC_VER)$(LIBSTDCPP_VER)-$(LIBAPTPKG_MAJOR) -LIBAPTINST_PROVIDE=libapt-inst$(GLIBC_VER)$(LIBSTDCPP_VER)-$(LIBAPTINST_MAJOR) +LIBAPTPKG_PROVIDE=libapt-pkg-$(LIBAPTPKG_MAJOR) +LIBAPTINST_PROVIDE=libapt-inst-$(LIBAPTINST_MAJOR) debian/shlibs.local: apt-pkg/makefile # We have 3 shlibs.local files.. One for 'apt', one for 'apt-utils' and # one for the rest of the packages. This ensures that each package gets # the right overrides.. rm -rf $@ $@.apt $@.apt-utils - echo "libapt-pkg$(GLIBC_VER)$(LIBSTDCPP_VER) $(LIBAPTPKG_MAJOR)" > $@.apt + echo "libapt-pkg $(LIBAPTPKG_MAJOR)" > $@.apt - echo "libapt-pkg$(GLIBC_VER)$(LIBSTDCPP_VER) $(LIBAPTPKG_MAJOR) $(LIBAPTPKG_PROVIDE)" > $@.apt-utils - echo "libapt-inst$(GLIBC_VER)$(LIBSTDCPP_VER) $(LIBAPTINST_MAJOR)" >> $@.apt-utils + echo "libapt-pkg $(LIBAPTPKG_MAJOR) $(LIBAPTPKG_PROVIDE)" > $@.apt-utils + echo "libapt-inst $(LIBAPTINST_MAJOR)" >> $@.apt-utils - echo "libapt-pkg$(GLIBC_VER)$(LIBSTDCPP_VER) $(LIBAPTPKG_MAJOR) $(LIBAPTPKG_PROVIDE)" > $@ - echo "libapt-inst$(GLIBC_VER)$(LIBSTDCPP_VER) $(LIBAPTINST_MAJOR) $(LIBAPTINST_PROVIDE)" >> $@ + echo "libapt-pkg $(LIBAPTPKG_MAJOR) $(LIBAPTPKG_PROVIDE)" > $@ + echo "libapt-inst $(LIBAPTINST_MAJOR) $(LIBAPTINST_PROVIDE)" >> $@ build: build/build-stamp build-doc: build/build-doc-stamp diff --git a/methods/makefile b/methods/makefile index 134166ba3..f5d80d839 100644 --- a/methods/makefile +++ b/methods/makefile @@ -7,7 +7,7 @@ include ../buildlib/defaults.mak BIN := $(BIN)/methods # FIXME.. -LIB_APT_PKG_MAJOR = 4.8 +LIB_APT_PKG_MAJOR = 4.9 APT_DOMAIN := libapt-pkg$(LIB_APT_PKG_MAJOR) # The file method -- cgit v1.2.3-70-g09d2 From 23d8465817e7bc0d188f36fc2ad14f41ff01c221 Mon Sep 17 00:00:00 2001 From: David Kalnischkies Date: Wed, 28 Oct 2009 19:13:56 +0100 Subject: refactor the buildsystem to extract library versions from one file, so it is not needed to change x-files to just increase a version number (because this is far to easy to forget one of the files, which will not result in failures or is bad in general, but is inconsitent.) --- apt-pkg/init.h | 6 +++++- apt-pkg/makefile | 10 +++++----- buildlib/libversion.mak | 14 ++++++++++++++ debian/rules | 3 +-- methods/makefile | 5 ++--- 5 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 buildlib/libversion.mak (limited to 'apt-pkg/makefile') diff --git a/apt-pkg/init.h b/apt-pkg/init.h index 44a57eb45..b3e4b147f 100644 --- a/apt-pkg/init.h +++ b/apt-pkg/init.h @@ -16,7 +16,11 @@ #include #include -// See the makefile +// These lines are extracted by the makefiles and the buildsystem +// Increasing MAJOR or MINOR results in the need of recompiling all +// reverse-dependencies of libapt-pkg against the new SONAME. +// Non-ABI-Breaks should only increase RELEASE number. +// See also buildlib/libversion.mak #define APT_PKG_MAJOR 4 #define APT_PKG_MINOR 9 #define APT_PKG_RELEASE 0 diff --git a/apt-pkg/makefile b/apt-pkg/makefile index 80038e28e..f71367ace 100644 --- a/apt-pkg/makefile +++ b/apt-pkg/makefile @@ -9,13 +9,13 @@ HEADER_TARGETDIRS = apt-pkg # Bring in the default rules include ../buildlib/defaults.mak -# The library name, don't forget to update init.h and the copy in -# methods/makefile - FIXME +# The library name and version (indirectly used from init.h) +include ../buildlib/libversion.mak LIBRARY=apt-pkg -MAJOR=4.9 -MINOR=0 +MAJOR=$(LIBAPTPKG_MAJOR) +MINOR=$(LIBAPTPKG_RELEASE) SLIBS=$(PTHREADLIB) $(INTLLIBS) -lutil -ldl -APT_DOMAIN:=libapt-pkg$(MAJOR) +APT_DOMAIN:=libapt-pkg$(LIBAPTPKG_MAJOR) # Source code for the contributed non-core things SOURCE = contrib/mmap.cc contrib/error.cc contrib/strutl.cc \ diff --git a/buildlib/libversion.mak b/buildlib/libversion.mak new file mode 100644 index 000000000..796c956e7 --- /dev/null +++ b/buildlib/libversion.mak @@ -0,0 +1,14 @@ +# -*- make -*- +# Version number of libapt-pkg. +# Please increase MAJOR with each ABI break, +# with each non-ABI break to the lib, please increase RELEASE. +# The versionnumber is extracted from apt-pkg/init.h - see also there. +LIBAPTPKG_MAJOR=$(shell awk -v ORS='.' '/^\#define APT_PKG_M/ {print $$3}' $(BASE)/apt-pkg/init.h | sed 's/\.$$//') +LIBAPTPKG_RELEASE=$(shell grep -E '^\#define APT_PKG_RELEASE' $(BASE)/apt-pkg/init.h | cut -d ' ' -f 3) + +# Version number of libapt-inst +# Please increase MAJOR with each ABI break, +# with each non-ABI break to the lib, please increase MINOR. +# The versionnumber is extracted from apt-inst/makefile - see also there. +LIBAPTINST_MAJOR=$(shell egrep '^MAJOR=' $(BASE)/apt-inst/makefile |cut -d '=' -f 2) +LIBAPTINST_MINOR=$(shell egrep '^MINOR=' $(BASE)/apt-inst/makefile |cut -d '=' -f 2) diff --git a/debian/rules b/debian/rules index d1b77e172..f69c0cffb 100755 --- a/debian/rules +++ b/debian/rules @@ -75,8 +75,7 @@ APT_UTILS=ftparchive sortpkgs extracttemplates #export DH_VERBOSE=1 # Find the libapt-pkg major version for use in other control files -export LIBAPTPKG_MAJOR:=$(shell egrep '^MAJOR=' apt-pkg/makefile |cut -d '=' -f 2) -export LIBAPTINST_MAJOR:=$(shell egrep '^MAJOR=' apt-inst/makefile |cut -d '=' -f 2) +include buildlib/libversion.mak # Determine which package we should provide in the control files LIBAPTPKG_PROVIDE=libapt-pkg-$(LIBAPTPKG_MAJOR) diff --git a/methods/makefile b/methods/makefile index f5d80d839..7bcae6b9b 100644 --- a/methods/makefile +++ b/methods/makefile @@ -6,9 +6,8 @@ SUBDIR=methods include ../buildlib/defaults.mak BIN := $(BIN)/methods -# FIXME.. -LIB_APT_PKG_MAJOR = 4.9 -APT_DOMAIN := libapt-pkg$(LIB_APT_PKG_MAJOR) +include ../buildlib/libversion.mak +APT_DOMAIN := libapt-pkg$(LIBAPTPKG_MAJOR) # The file method PROGRAM=file -- cgit v1.2.3-70-g09d2