changeset 257:8d1a70e8f4cc

Activate build number incrementing. Install from gub if available.
author janneke <janneke@gnu.org>
date Sun, 18 Dec 2005 09:24:53 +0100
parents 42420350d064
children 8ff55760882d
files GNUmakefile cyg-apt.py.in driver.py specs/cpm.py specs/framework.py specs/gub.py
diffstat 6 files changed, 130 insertions(+), 100 deletions(-) [+]
line wrap: on
line diff
--- a/GNUmakefile	Sat Dec 17 21:40:50 2005 +0100
+++ b/GNUmakefile	Sun Dec 18 09:24:53 2005 +0100
@@ -61,7 +61,7 @@
 	./cyg-apt.py list
 
 gpm-install: test-gub
-	-./cyg-apt.py install $$(./cyg-apt.py available)
+	-./cyg-apt.py install $$(./cyg-apt.py search .)
 	mkdir -p target/i686-mingw32/status
 	mkdir -p target/i686-mingw32/tools
 	touch target/i686-mingw32/status/binutils-2.16.1-0-{untar,patch,configure,compile,install,package,clean}
--- a/cyg-apt.py.in	Sat Dec 17 21:40:50 2005 +0100
+++ b/cyg-apt.py.in	Sun Dec 18 09:24:53 2005 +0100
@@ -232,9 +232,6 @@
 	cpm = Cpm (ROOT)
 
 
-def debug (s):
-	s
-
 def uri_get (dir, uri):
 	if uri[:7] == 'file://':
 		return system ('cp -pv "%s" "%s"/' % (uri[7:], dir))
@@ -249,58 +246,17 @@
 
 	print  __main__.__dict__[packagename].__doc__
 
-dists = 0
 distnames = ('curr', 'test', 'prev')
-def get_setup_ini ():
-	global dists
-	if dists:
-		return
-	dists = {'test': {}, 'curr': {}, 'prev' : {}}
-	chunks = string.split (open (setup_ini).read (), '\n\n@ ')
-	for i in chunks[1:]:
-		lines = string.split (i, '\n')
-		name = string.strip (lines[0])
-		debug ('package: ' + name)
-		packages = dists['curr']
-		records = {'sdesc': name}
-		j = 1
-		while j < len (lines) and string.strip (lines[j]):
-			debug ('raw: ' + lines[j])
-			if lines[j][0] == '#':
-				j = j + 1
-				continue
-			elif lines[j][0] == '[':
-				debug ('dist: ' + lines[j][1:5])
-				packages[name] = records.copy ()
-				packages = dists[lines[j][1:5]]
-				j = j + 1
-				continue
 
-			try:
-				key, value = map (string.strip,
-					  string.split (lines[j], ': ', 1))
-			except:
-				print lines[j]
-				raise 'URG'
-			if value.startswith ('"') and value.find ('"', 1) == -1:
-				while 1:
-					j = j + 1
-					value += '\n' + lines[j]
-					if lines[j].find ('"') != -1:
-						break
-			records[key] = value
-			j = j + 1
-		packages[name] = records
-		
 def get_url ():
-	if not dists[distname].has_key (packagename) \
-	   or not dists[distname][packagename].has_key (INSTALL):
+	if not cpm.dists ()[distname].has_key (packagename) \
+	   or not cpm.dists ()[distname][packagename].has_key (INSTALL):
 		no_package ()
 		install = 0
 		for d in distnames:
-			if dists[d].has_key (packagename) \
-			   and dists[d][packagename].has_key (INSTALL):
-				install = dists[d][packagename][INSTALL]
+			if cpm.dists ()[d].has_key (packagename) \
+			   and cpm.dists ()[d][packagename].has_key (INSTALL):
+				install = cpm.dists ()[d][packagename][INSTALL]
 				sys.stderr.write ("warning: using [%s]\n" % d)
 				break
 		if not install:
@@ -308,7 +264,7 @@
 					  % packagename)
 			return 0
 	else:
-		install = dists[distname][packagename][INSTALL]
+		install = cpm.dists ()[distname][packagename][INSTALL]
 	file, size, md5 = string.split (install)
 	return file, md5
 
@@ -354,8 +310,8 @@
 	sys.stderr.write ("%s: %s not in [%s]\n" % (s, packagename, distname))
 
 def get_requires ():
-	dist = dists[distname]
-	if not dists[distname].has_key (packagename):
+	dist = cpm.dists ()[distname]
+	if not cpm.dists ()[distname].has_key (packagename):
 		no_package ('error')
 		#return []
 		sys.exit (1)
@@ -395,9 +351,9 @@
 
 def get_field (field, default=''):
 	for d in (distname,) + distnames:
-		if dists[d].has_key (packagename) \
-		   and dists[d][packagename].has_key (field):
-			return dists[d][packagename][field]
+		if cpm.dists ()[d].has_key (packagename) \
+		   and cpm.dists ()[d][packagename].has_key (field):
+			return cpm.dists ()[d][packagename][field]
 	return default
 
 def psort (lst):
@@ -412,8 +368,8 @@
 	for packagename in psort (cpm.installed ().keys ()):
 		ins = cpm.version (packagename)
 		new = 0
-		if dists[distname].has_key (packagename) \
-		   and dists[distname][packagename].has_key (INSTALL):
+		if cpm.dists ()[distname].has_key (packagename) \
+		   and cpm.dists ()[distname][packagename].has_key (INSTALL):
 			new = get_version ()
 		s = '%-20s%-15s' % (packagename, version_to_string (ins))
 		if new and new != ins:
@@ -435,12 +391,12 @@
 	system ('cp -pf "%s/setup.ini" "%s/"' % (downloads, config))
 
 def get_version ():
-	if not dists[distname].has_key (packagename) \
-	   or not dists[distname][packagename].has_key (INSTALL):
+	if not cpm.dists ()[distname].has_key (packagename) \
+	   or not cpm.dists ()[distname][packagename].has_key (INSTALL):
 		no_package ()
 		return (0, 0)
 		
-	package = dists[distname][packagename]
+	package = cpm.dists ()[distname][packagename]
 	if not package.has_key ('ver'):
 		file = string.split (package[INSTALL])[0]
 		ball = os.path.split (file)[1]
@@ -509,11 +465,11 @@
 	regexp = packagename
 	packages = []
 	keys = []
-	if distname in dists:
-		keys = dists[distname].keys ()
+	if distname in cpm.dists ():
+		keys = cpm.dists ()[distname].keys ()
 	else:
-		for i in dists.keys ():
-			for j in dists[i].keys ():
+		for i in cpm.dists ().keys ():
+			for j in cpm.dists ()[i].keys ():
 				if not j in keys:
 					keys.append (j)
 	for i in keys:
@@ -522,8 +478,8 @@
 		if not regexp or re.search (regexp, i) \
 		   or re.search (regexp, get_field ('sdesc')) \
 		   or re.search (regexp, get_field ('ldesc')):
-			if distname in dists:
-				if dists[distname][i].has_key (INSTALL):
+			if distname in cpm.dists ():
+				if cpm.dists ()[distname][i].has_key (INSTALL):
 					packages.append (i)
 			else:
 				packages.append (i)
@@ -534,13 +490,6 @@
 			s += ' - %s' % d[1:-1]
 		print s
 
-def available ():
-	'''print all installable package names'''
-	global name_p
-	name_p = 1
-	packagename = ''
-	search ()
-	
 def show ():
 	'''print information for package'''
 	s = packagename
@@ -774,7 +723,7 @@
 		sys.stderr.write ('error: run %(basename)s setup?\n' % vars ())
 		sys.exit (2)
 	
-get_setup_ini ()
+cpm.dists ()
 cpm.installed ()
 
 if command and command in __main__.__dict__:
--- a/driver.py	Sat Dec 17 21:40:50 2005 +0100
+++ b/driver.py	Sun Dec 18 09:24:53 2005 +0100
@@ -122,14 +122,30 @@
 
 
 def build_packages (settings, packages):
+	def is_installed (p):
+		"""Return true if package P is installed by system_gpm."""
+		return (p.system_gpm.is_installed (p.name())
+			and p.system_gpm.version (p.name ())
+			== cpm.string_to_version (p.full_version ()))
+
 	def skip (p):
-		# FIXME: next step might be to download/install using
-		# system_gpm unless --rebuild is set, or somesuch.
-		"""Return true if package P is installed by system_gpm.
-		"""
-		return p.system_gpm.is_installed (p.name()) \
-			   and p.system_gpm.version (p.name ()) \
-			   == cpm.string_to_version (p.full_version ())
+		"""Return true if package P must not be built."""
+		# If you want to force rebuilding a package, uninstall
+		# it (remove the system root) and (re)move the .gub
+		# package
+
+		if (not is_installed (p)
+		    and p.system_gpm.dists ()['curr'].has_key (p.name ())
+		    and p.system_gpm.dists ()['curr'][p.name ()] .has_key ('install')):
+			ball, size, md5 = string.split (p.system_gpm.dists ()['curr'][p.name ()]['install'])
+			try:
+				p.system_gpm.install (p.name (),
+						      os.path.join (p.settings.uploads,
+								    ball),
+						      p.depends)
+			except:
+				pass
+		return is_installed (p)
 
 	for i in packages:
 		# skip download for installed package
--- a/specs/cpm.py	Sat Dec 17 21:40:50 2005 +0100
+++ b/specs/cpm.py	Sun Dec 18 09:24:53 2005 +0100
@@ -23,6 +23,9 @@
 	pass
 
 
+def debug (s):
+	s
+
 # cygwin stuff
 
 def run_script (self, file_name):
@@ -89,8 +92,10 @@
 		self.root = root
 		self.config = self.root + '/etc/setup'
 		self._installed_db = self.config + '/installed.db'
+		self._setup_ini = self.config + '/setup.ini'
 		self._installed = None
 		self._depends = {}
+		self._dists = None
 		self.installed ()
 		self.setup ()
 
@@ -111,7 +116,9 @@
 				##self._installed[int (status)][name] = ball
 				self._installed[name] = ball
 
-	def setup (self):
+	def setup (self, setup_ini=None):
+		if setup_ini:
+			self._setup_ini = setup_ini
 		if not os.path.isdir (self.config):
 			sys.stderr.write ('creating %s\n' % self.config)
 			os.makedirs (self.config)
@@ -205,6 +212,49 @@
 	def run_scripts (self):
 		run_all (self.root + '/etc/postinstall')
 
+	def dists (self):
+		if not self._dists:
+			self._read_setup_ini (self._setup_ini)
+		return self._dists
+
+	def _read_setup_ini (self, setup_ini):
+		self._dists = {'test': {}, 'curr': {}, 'prev' : {}}
+		chunks = string.split (open (setup_ini).read (), '\n\n@ ')
+		for i in chunks[1:]:
+			lines = string.split (i, '\n')
+			name = string.strip (lines[0])
+			debug ('package: ' + name)
+			packages = self._dists['curr']
+			records = {'sdesc': name}
+			j = 1
+			while j < len (lines) and string.strip (lines[j]):
+				debug ('raw: ' + lines[j])
+				if lines[j][0] == '#':
+					j = j + 1
+					continue
+				elif lines[j][0] == '[':
+					debug ('dist: ' + lines[j][1:5])
+					packages[name] = records.copy ()
+					packages = self._dists[lines[j][1:5]]
+					j = j + 1
+					continue
+
+				try:
+					key, value = map (string.strip,
+						  string.split (lines[j], ': ', 1))
+				except:
+					print lines[j]
+					raise 'URG'
+				if value.startswith ('"') and value.find ('"', 1) == -1:
+					while 1:
+						j = j + 1
+						value += '\n' + lines[j]
+						if lines[j].find ('"') != -1:
+							break
+				records[key] = value
+				j = j + 1
+			packages[name] = records
+
 class Gpm (Cpm):
 	'''Gub package manager.
 
@@ -223,7 +273,7 @@
 		else:
 			self._installed = pickle.load (open (self._installed_db))
 
-	def read_setup_ini (self, setup_ini):
+	def xxxsimple_read_setup_ini (self, setup_ini):
 		packages = {}
 		if os.path.exists (setup_ini):
 			chunks = string.split (open (setup_ini).read (),
@@ -238,7 +288,7 @@
 		now = now[:now.find ('.')]
 		s = '''setup-timestamp: %(now)s
 ''' % locals ()
-		packages = self.read_setup_ini (setup_ini)
+		packages = self._read_setup_ini (setup_ini)
 		for name in packages.keys ():
 			if name not in self.installed ().keys ():
 				s += '\n\n@ ' + packages[name]
--- a/specs/framework.py	Sat Dec 17 21:40:50 2005 +0100
+++ b/specs/framework.py	Sun Dec 18 09:24:53 2005 +0100
@@ -238,7 +238,8 @@
         def gub_name (self):
 		nv = self.name_version ()
 		b = self.build ()
-		return '%(nv)s-%(b)s.%(platform)s.gub'
+		p = self.settings.platform
+		return '%(nv)s-%(b)s.%(p)s.gub' % locals ()
 
 class LilyPond__mingw (LilyPond):
 	def __init__ (self, settings):
@@ -679,9 +680,32 @@
 
 def get_installers (settings):
 	installers = {
+		# Comment out to build the windows installer,
+		# see below.
+		'darwin' : [installer.Darwin_bundle (settings)],
 
-		# breaks what?!
-		'darwin' : [installer.Darwin_bundle (settings)],
+		# rm -rf target/*
+		# make mingw ... BOOM (just before installer is to be made)
+
+#  *** Stage: install_gub (lilypond)
+# invoking mkdir -p /home/janneke/bzr/gub/target/i686-mingw32/installer
+# invoking tar -C /home/janneke/bzr/gub/target/i686-mingw32/installer -zxf /home/janneke/bzr/gub/uploads/gub/lilypond-2.7.24-0.mingw.gub
+# Traceback (most recent call last):
+#   File "driver.py", line 267, in ?
+#     main ()
+#   File "driver.py", line 264, in main
+#     make_installers (settings, packages)
+#   File "driver.py", line 161, in make_installers
+#     for p in framework.get_installers (settings):
+#   File "specs/framework.py", line 682, in get_installers
+#     installers = {
+#   File "specs/installer.py", line 125, in __init__
+#     self.ignore_libs = self.get_ignore_libs ()
+#   File "specs/installer.py", line 156, in get_ignore_libs
+#     (root, dirs, files) = os.walk (self.settings.installdir + '/darwin-sdk-root/usr/lib').next ()
+# StopIteration
+# make: *** [mingw] Fout 1
+
 		'linux' : [
 		installer.Tgz (settings),
 		installer.Deb (settings),
--- a/specs/gub.py	Sat Dec 17 21:40:50 2005 +0100
+++ b/specs/gub.py	Sun Dec 18 09:24:53 2005 +0100
@@ -116,7 +116,8 @@
 	def __init__ (self, settings):
 		if self.system_gpm.root == 'ugh':
 			self.system_gpm.__init__ (settings.system_root)
-			self.system_gpm.setup ()
+			self.system_gpm.setup (setup_ini=settings.uploads
+					       + '/setup.ini')
 			self.system_gpm.installed ()
 		self.settings = settings
 		self.url = ''
@@ -384,17 +385,7 @@
 		# FIXME: should do this right after successful package ()
 		# but then sysinstall uses bumped version number
 		builds = self.get_builds ()
-
-		## Hmm, when/how to bump build number?  Manually?
-		## Cygwin just uses the -BUILD from the srcdir name,
-		## bumping is done my mv'ing the srcdir to -BUILD+1
-
-		## Bumping here does not work, it will trigger a
-		## rebuild each time, because we save a higher build
-		## version than we have installed and in status/* files.
-		##builds[self.name_version ()] = '%d' % (int (self.build ()) + 1)
-
-		builds[self.name_version ()] = '%d' % (int (self.build ()) + 0)
+		builds[self.name_version ()] = '%d' % (int (self.build ()) + 1)
 		pickle.dump (builds, open (self.build_db, 'w'))
 
 	def clean (self):