def get_version (program): command = '(pkg-config --modversion %(program)s || %(program)s --version || %(program)s -V) 2>&1' % vars () output = misc.read_pipe (command) splits = re.sub ('^|\s', '\n', output) date_hack = re.sub (dre, '\n0.0.\\1', splits) m = re.match (vre, date_hack) v = m.group (1) if v[-1] == '\n': v = v[:-1] return v.split ('.')
def get_version(program): command = '(pkg-config --modversion %(program)s || %(program)s --version || %(program)s -V) 2>&1' % vars( ) output = misc.read_pipe(command) splits = re.sub('^|\s', '\n', output) date_hack = re.sub(dre, '\n0.0.\\1', splits) m = re.match(vre, date_hack) v = m.group(1) if v[-1] == '\n': v = v[:-1] return v.split('.')
def __init__ (self, platform=None): context.Context.__init__ (self) self.build_platform = build_platform.machine ().strip () if not self.build_platform: build_platform.plain_machine ().strip () self.build_architecture = platforms[self.build_platform] self.build_cpu = self.build_architecture.split ('-')[0] self.build_os = re.sub ('[-0-9].*', '', self.build_platform) self.build_bits = '32' if self.build_platform.endswith ('64'): self.build_bits = '64' if not platform: platform = self.build_platform self.target_platform = platform if self.target_platform not in list (platforms.keys ()): raise UnknownPlatform (self.target_platform) self.target_architecture = platforms[self.target_platform] self.target_os = re.sub ('[-0-9].*', '', self.target_platform) self.target_cpu = self.target_architecture.split ('-')[0] self.target_bits = '32' if self.target_platform.endswith ('64'): self.target_bits = '64' # Hmm self.platform = self.target_platform self.architecture = self.target_architecture self.cpu = self.target_cpu self.os = self.target_os self.bits = self.target_bits if self.target_architecture == 'tools': self.target_architecture = self.build_architecture self.target_os = self.build_os self.target_cpu = self.build_cpu self.target_bits = self.build_bits if self.target_architecture == 'tools32': arch32 = { 'x86_64-linux': 'i686-linux', } self.target_architecture = arch32.get (self.build_architecture, self.build_architecture) self.target_os = self.build_os self.target_cpu = self.build_cpu self.target_bits = '32' # config dirs self.root_dir = '/root' self.tools_root_dir = '/tools/root' self.prefix_dir = '/usr' self.cross_dir = '/cross' # Support GUB tools building directly in $HOME/{bin,lib,share}, # use GUB_TOOLS_PREFIX=$HOME GUB_TOOLS_PREFIX = os.environ.get ('GUB_TOOLS_PREFIX') if self.platform == 'tools' and GUB_TOOLS_PREFIX: self.prefix_dir = '' # gubdir is top of `installed' gub repository self.gubdir = os.path.abspath (os.path.dirname (os.path.dirname (__file__))) if not self.gubdir: self.gubdir = os.getcwd () self.gubdir_prefix = self.gubdir if self.gubdir_prefix.endswith ('/'): self.gubdir_prefix = self.gubdir_prefix[:-1] # workdir is top of writable build stuff self.workdir = os.getcwd () self.workdir_prefix = self.workdir if self.workdir_prefix.endswith ('/'): self.workdir_prefix = self.workdir_prefix[:-1] # gubdir based: fixed repository layout self.patchdir = self.gubdir_prefix + '/patches' self.sourcefiledir = self.gubdir_prefix + '/sourcefiles' self.specdir = self.gubdir_prefix + '/gub/specs' self.nsisdir = self.gubdir_prefix + '/nsis' # workdir based; may be changed self.downloads = self.workdir_prefix + '/downloads' self.alltargetdir = self.workdir_prefix + '/target' self.targetdir = self.alltargetdir + '/' + self.target_platform self.system_root = self.targetdir + self.root_dir if self.platform == 'tools' and GUB_TOOLS_PREFIX: self.system_root = GUB_TOOLS_PREFIX self.system_prefix = self.system_root + self.prefix_dir self.system_cross_prefix = self.system_prefix + self.cross_dir self.cross_prefix = self.system_cross_prefix self.tools_root = self.alltargetdir + self.tools_root_dir self.tools_prefix = self.tools_root + self.prefix_dir self.tools_cross_prefix = self.tools_prefix + self.cross_dir self.tools32_root_dir = '/tools32/root' self.tools32_root = self.alltargetdir + self.tools32_root_dir self.tools32_prefix = self.tools32_root + self.prefix_dir self.logdir = self.targetdir + '/log' self.alllogdir = self.workdir + '/log' ## Patches are architecture dependent, ## so to ensure reproducibility, we unpack for each ## architecture separately. self.allsrcdir = self.targetdir + '/src' self.allbuilddir = self.targetdir + '/build' self.statusdir = self.targetdir + '/status' self.packages = self.targetdir + '/packages' self.installdir = self.targetdir + '/install' self.uploads = self.workdir_prefix + '/uploads' self.platform_uploads = self.uploads + '/' + self.platform info = gub_log.default_logger.harmless info.write ('\n') info.write ('SYSTEM_ROOT=%(system_root)s\n' % self.__dict__) info.write ('SYSTEM_PREFIX=%(system_prefix)s\n' % self.__dict__) info.write ('CROSS_PREFIX=%(cross_prefix)s\n' % self.__dict__) info.write ('ROOT_DIR=%(root_dir)s\n' % self.__dict__) info.write ('PREFIX_DIR=%(prefix_dir)s\n' % self.__dict__) info.write ('CROSS_DIR=%(cross_dir)s\n' % self.__dict__) info.write ('\n') if GUB_TOOLS_PREFIX: self.tools_root = GUB_TOOLS_PREFIX self.tools_prefix = GUB_TOOLS_PREFIX self.cross_packages = self.packages + '/cross' self.cross_allsrcdir = self.allsrcdir + '/cross' self.cross_statusdir = self.statusdir + '/cross' self.core_prefix = self.cross_prefix + '/core' # end config dirs self.target_gcc_flags = '' if self.platform == 'darwin-ppc': self.target_gcc_flags = '-D__ppc__' elif self.platform == 'mingw': self.target_gcc_flags = '-mwindows -mms-bitfields' self.build_source = False #URGURGURGRGU self.is_distro = (self.platform in distros or self.platform.startswith ('debian')) self.gtk_version = '2.8' self.toolchain_prefix = self.target_architecture + '-' if self.target_platform == 'tools': self.toolchain_prefix = '' if self.target_architecture.startswith ('x86_64'): self.package_arch = 'amd64' self.debian_branch = 'unstable' else: self.package_arch = re.sub ('-.*', '', self.target_architecture) self.package_arch = re.sub ('i[0-9]86', 'i386', self.package_arch) self.package_arch = re.sub ('arm.*', 'arm', self.package_arch) # self.package_arch = re.sub ('powerpc.*', 'ppc', self.package_arch) self.debian_branch = 'stable' self.keep_build = False self.use_tools = False self.fakeroot_cache = '' # %(builddir)s/fakeroot.save' self.fakeroot = 'fakeroot -i%(fakeroot_cache)s -s%(fakeroot_cache)s ' self.create_dirs () try: self.cpu_count_str = '%d' % os.sysconf ('SC_NPROCESSORS_ONLN') except ValueError: self.cpu_count_str = '1' self.build_hardware_bits = self.build_bits try: cpuinfo = open ('/proc/cpuinfo').read () cpu_flags = re.search ('(?m)^flags\s+:(.*)', cpuinfo).group (1).split () if 'lm' in cpu_flags: self.build_hardware_bits = '64' except: try: cpu = misc.read_pipe ('sysctl -b hw.machine', logger=gub_log.default_logger.harmless) if cpu in ('amd64', 'ia64'): self.build_hardware_bits = '64' except: pass if self.build_bits == '32' and self.build_hardware_bits == '64': # 32 bit OS running on 64 bit hardware, help configure self.ABI = self.target_bits os.environ['ABI'] = self.target_bits ## make sure we don't confuse build or target system. self.LD_LIBRARY_PATH = '%(system_root)s' # Without physical, bash [X]STATs /every/single/dir when doing # cd /x/y/z. This terribly breaks stat restriction. os.environ['SHELLOPTS'] = 'physical' self.tools_archmatch_prefix = self.tools_prefix if not '%(tools_prefix)s/bin' % self.__dict__ in os.environ['PATH']: os.environ['PATH'] = '%(tools_prefix)s/bin:' % self.__dict__ + os.environ['PATH'] if (self.target_bits == '32' and self.build_bits == '64' and not '%(tools32_prefix)s/bin' % self.__dict__ in os.environ['PATH']): self.tools_archmatch_prefix = self.tools32_prefix