]>
git.saurik.com Git - apt.git/blob - apt-pkg/init.cc
   1 // -*- mode: cpp; mode: fold -*- 
   3 // $Id: init.cc,v 1.20 2003/02/09 20:31:05 doogie Exp $ 
   4 /* ###################################################################### 
   6    Init - Initialize the package library 
   8    ##################################################################### */ 
  10 // Include files                                                        /*{{{*/ 
  11 #include <apt-pkg/init.h> 
  12 #include <apt-pkg/fileutl.h> 
  13 #include <apt-pkg/error.h> 
  21 #define Stringfy_(x) # x 
  22 #define Stringfy(x)  Stringfy_(x) 
  23 const char *pkgVersion 
= VERSION
; 
  24 const char *pkgLibVersion 
= Stringfy(APT_PKG_MAJOR
) "." 
  25                             Stringfy(APT_PKG_MINOR
) "."  
  26                             Stringfy(APT_PKG_RELEASE
); 
  27 const char *pkgCPU 
= COMMON_CPU
; 
  28 const char *pkgOS 
= COMMON_OS
; 
  30 // pkgInitConfig - Initialize the configuration class                   /*{{{*/ 
  31 // --------------------------------------------------------------------- 
  32 /* Directories are specified in such a way that the FindDir function will 
  33    understand them. That is, if they don't start with a / then their parent 
  34    is prepended, this allows a fair degree of flexability. */ 
  35 bool pkgInitConfig(Configuration 
&Cnf
) 
  38    if (strcmp(COMMON_OS
,"linux") == 0 || 
  39        strcmp(COMMON_OS
,"unknown") == 0) 
  40       Cnf
.Set("APT::Architecture",COMMON_CPU
); 
  42       Cnf
.Set("APT::Architecture",COMMON_OS 
"-" COMMON_CPU
); 
  43    Cnf
.Set("APT::Build-Essential::", "build-essential"); 
  47    Cnf
.Set("Dir::State","var/lib/apt/"); 
  49    /* Just in case something goes horribly wrong, we can fall back to the 
  50       old /var/state paths.. */ 
  52    if (stat("/var/lib/apt/.",&St
) != 0 && 
  53        stat("/var/state/apt/.",&St
) == 0) 
  54       Cnf
.Set("Dir::State","var/state/apt/"); 
  56    Cnf
.Set("Dir::State::lists","lists/"); 
  57    Cnf
.Set("Dir::State::cdroms","cdroms.list"); 
  60    Cnf
.Set("Dir::Cache","var/cache/apt/"); 
  61    Cnf
.Set("Dir::Cache::archives","archives/"); 
  62    Cnf
.Set("Dir::Cache::srcpkgcache","srcpkgcache.bin"); 
  63    Cnf
.Set("Dir::Cache::pkgcache","pkgcache.bin"); 
  66    Cnf
.Set("Dir::Etc","etc/apt/"); 
  67    Cnf
.Set("Dir::Etc::sourcelist","sources.list"); 
  68    Cnf
.Set("Dir::Etc::sourceparts","sources.list.d"); 
  69    Cnf
.Set("Dir::Etc::vendorlist","vendors.list"); 
  70    Cnf
.Set("Dir::Etc::vendorparts","vendors.list.d"); 
  71    Cnf
.Set("Dir::Etc::main","apt.conf"); 
  72    Cnf
.Set("Dir::Etc::parts","apt.conf.d"); 
  73    Cnf
.Set("Dir::Etc::preferences","preferences"); 
  74    Cnf
.Set("Dir::Bin::methods","/usr/lib/apt/methods"); 
  78    // Read an alternate config file 
  79    const char *Cfg 
= getenv("APT_CONFIG"); 
  80    if (Cfg 
!= 0 && FileExists(Cfg
) == true) 
  81       Res 
&= ReadConfigFile(Cnf
,Cfg
); 
  83    // Read the configuration parts dir 
  84    string Parts 
= Cnf
.FindDir("Dir::Etc::parts"); 
  85    if (FileExists(Parts
) == true) 
  86       Res 
&= ReadConfigDir(Cnf
,Parts
); 
  88    // Read the main config file 
  89    string FName 
= Cnf
.FindFile("Dir::Etc::main"); 
  90    if (FileExists(FName
) == true) 
  91       Res 
&= ReadConfigFile(Cnf
,FName
); 
  96    if (Cnf
.FindB("Debug::pkgInitConfig",false) == true) 
 100    if (Cnf
.Exists("Dir::Locale")) 
 102       bindtextdomain(APT_DOMAIN
,Cnf
.FindDir("Dir::Locale").c_str()); 
 103       bindtextdomain(textdomain(0),Cnf
.FindDir("Dir::Locale").c_str()); 
 110 // pkgInitSystem - Initialize the _system calss                         /*{{{*/ 
 111 // --------------------------------------------------------------------- 
 113 bool pkgInitSystem(Configuration 
&Cnf
,pkgSystem 
*&Sys
) 
 116    string Label 
= Cnf
.Find("Apt::System",""); 
 117    if (Label
.empty() == false) 
 119       Sys 
= pkgSystem::GetSystem(Label
.c_str()); 
 121          return _error
->Error(_("Packaging system '%s' is not supported"),Label
.c_str()); 
 126       for (unsigned I 
= 0; I 
!= pkgSystem::GlobalListLen
; I
++) 
 128          signed Score 
= pkgSystem::GlobalList
[I
]->Score(Cnf
); 
 129          if (Score 
> MaxScore
) 
 132             Sys 
= pkgSystem::GlobalList
[I
]; 
 137          return _error
->Error(_("Unable to determine a suitable packaging system type")); 
 140    return Sys
->Initialize(Cnf
);