changeset 91:7fa1acd43033

The grand Foo__platform subclassing.
author janneke <janneke@gnu.org>
date Thu, 01 Dec 2005 21:21:44 +0100
parents 43daf13cfd3d
children 55b574b9c5a2
files specs/framework.py specs/gub.py
diffstat 2 files changed, 157 insertions(+), 189 deletions(-) [+]
line wrap: on
line diff
--- a/specs/framework.py	Thu Dec 01 20:27:45 2005 +0100
+++ b/specs/framework.py	Thu Dec 01 21:21:44 2005 +0100
@@ -12,19 +12,6 @@
 	def set_download (self, mirror, format='gz', downloader=None):
 		gub.Target_package.set_download (self, mirror, format, downloader)
 		self.url = re.sub ("python-", "Python-" , self.url)
-		
-	def patch (self):
-		if self.settings.platform.startswith ('mingw'):
-			self.system ('''
-cd %(srcdir)s && patch -p1 < $HOME/installers/windows/patch/python-2.4.2-1.patch
-''')
-
-	def configure (self):
-		if self.settings.platform.startswith ('mingw'):
-			self.system ('''cd %(srcdir)s && autoconf''')
-			self.system ('''cd %(srcdir)s && libtoolize --copy --force''')
-			self.settings.target_gcc_flags = '-DMS_WINDOWS -DPy_WIN_WIDE_FILENAMES -I%(system_root)s/usr/include' % self.package_dict ()
-		gub.Target_package.configure (self)
 
 	def install_command (self):
 		return gub.Target_package.install_command (self) \
@@ -33,63 +20,33 @@
 MANDIR=%(install_prefix)s/share/man
 ''')
 
-class Gmp (gub.Target_package):
-	def xxconfigure (self):
-		self.system ('''cd %(srcdir)s && libtoolize --force --copy''')
-		self.system ('''cd %(srcdir)s && ./missing --run aclocal''')
-		self.system ('''cd %(srcdir)s && ./missing --run autoconf''')
-		self.system ('''cd %(srcdir)s && ./missing --run automake''')
-		self.file_sub ('ac_cv_c_bigendian=unknown',
-			       'ac_cv_c_bigendian=${ac_cv_c_bigendian-unknown}',
-			       '%(srcdir)s/configure')
-		self.file_sub ("-Wl,-e,'\$dll_entry'", '',
-			       '%(srcdir)s/configure')
+class Python__mingw (Python):
+	def patch (self):
+		self.system ('''
+cd %(srcdir)s && patch -p1 < $HOME/installers/windows/patch/python-2.4.2-1.patch
+''')
 
-		os.chmod ('%(srcdir)s/configure' % self.package_dict (), 0755)
+	def configure (self):
+		self.system ('''cd %(srcdir)s && autoconf''')
+		self.system ('''cd %(srcdir)s && libtoolize --copy --force''')
+		self.settings.target_gcc_flags = '-DMS_WINDOWS -DPy_WIN_WIDE_FILENAMES -I%(system_root)s/usr/include' % self.package_dict ()
 		gub.Target_package.configure (self)
 
-	def xpatch (self):
-		if self.settings.platform.startswith ('mingw'):
-	                ## FIXME, seems we don't need this?
-			self.system ('''
-cd %(srcdir)s && patch -p1 < $HOME/installers/windows/patch/gmp-4.1.4-1.patch
-''')
+class Gmp (gub.Target_package):
+	pass
 
+class Gmp__mingw (Gmp):
 	def install (self):
 		gub.Target_package.install (self)
-		if self.settings.platform.startswith ('mingw'):
-			# minimal libtool fixups
-			self.system ('''
+		self.system ('''
 mkdir -p %(install_prefix)s/bin
 mv %(install_prefix)s/lib/lib*.dll %(install_prefix)s/bin/
 cp %(builddir)s/.libs/libgmp.dll.a %(install_prefix)s/lib/
 ''')
 
 class Guile (gub.Target_package):
-	def xpatch (self):
-		if self.settings.platform.startswith ('mingw'):
-	                ## FIXME
-			self.system ('''
-cd %(srcdir)s && patch -p1 < $HOME/installers/windows/patch/guile-1.7.2-3.patch
-''')
-
 	def configure_command (self):
-		cmd = ''
-		if self.settings.platform.startswith ('mingw'):
-			# watch out for whitespace
-			builddir = self.builddir ()
-			srcdir = self.srcdir ()
-			if 0: # using patch
-				cmd = gub.join_lines ('''\
-AS=%(target_architecture)s-as
-PATH_SEPARATOR=";"
-CC_FOR_BUILD="cc -I%(builddir)s
--I%(srcdir)s
--I%(builddir)s/libguile
--I.
--I%(srcdir)s/libguile"
-''')
-		cmd += gub.Target_package.configure_command (self) \
+		return gub.Target_package.configure_command (self) \
 		      + gub.join_lines ('''
 --without-threads
 --with-gnu-ld
@@ -99,43 +56,6 @@
 --enable-relocation
 --disable-rpath
 ''')
-		return cmd
-
-	def config_cache_overrides (self, str):
-		if self.settings.platform.startswith ('mingw'):
-			str += '''
-guile_cv_func_usleep_declared=${guile_cv_func_usleep_declared=yes}
-guile_cv_exeext=${guile_cv_exeext=}
-libltdl_cv_sys_search_path=${libltdl_cv_sys_search_path="%(system_root)s/usr/lib"}
-'''
-		return str
-
-	def compile_command (self):
-		str = gub.Target_package.compile_command (self)
-		if self.settings.platform.startswith ('linux'):
-			# FIXME: when not x-building, guile runs guile without
-			# setting the proper LD_LIBRARY_PATH.
-			str = 'export LD_LIBRARY_PATH=%(builddir)s/libguile/.libs:$LD_LIBRARY_PATH;' + str
-		return str
-
-	def configure (self):
-		if 0: # using patch
-			gub.Target_package.autoupdate (self)
-			self.file_sub ('''^#(LIBOBJS=".*fileblocks.*)''', '\\1',
-				       '%(srcdir)s/configure')
-			os.chmod ('%(srcdir)s/configure' % self.package_dict (), 0755)
-		if self.settings.platform.startswith ('mingw'):
-			self.settings.target_gcc_flags = '-mms-bitfields'
-		gub.Target_package.configure (self)
-		if self.settings.platform.startswith ('mingw'):
-			self.file_sub ('^\(allow_undefined_flag=.*\)unsupported',
-			       '\\1',
-			       '%(builddir)s/libtool')
-			self.file_sub ('^\(allow_undefined_flag=.*\)unsupported',
-			       '\\1',
-			       '%(builddir)s/guile-readline/libtool')
-			self.system ('''cp $HOME/installers/windows/bin/%(target_architecture)s-libtool %(builddir)s/libtool''')
-			self.system ('''cp $HOME/installers/windows/bin/%(target_architecture)s-libtool %(builddir)s/guile-readline/libtool''')
 
 	def install (self):
 		gub.Target_package.install (self)
@@ -154,6 +74,58 @@
 ''')
 		os.chmod ('%(install_prefix)s/bin/%(target_architecture)s-guile-config' % self.package_dict (), 0755)
 
+class Guile__mingw (Guile):
+	def xpatch (self):
+		## FIXME
+		self.system ('''
+cd %(srcdir)s && patch -p1 < $HOME/installers/windows/patch/guile-1.7.2-3.patch
+''')
+
+	def configure_command (self):
+		# watch out for whitespace
+		builddir = self.builddir ()
+		srcdir = self.srcdir ()
+		return Guile.configure_command (self) \
+		       + gub.join_lines ('''\
+AS=%(target_architecture)s-as
+PATH_SEPARATOR=";"
+CC_FOR_BUILD="cc -I%(builddir)s
+-I%(srcdir)s
+-I%(builddir)s/libguile
+-I.
+-I%(srcdir)s/libguile"
+''')
+
+	def config_cache_overrides (self, str):
+		return str + '''
+guile_cv_func_usleep_declared=${guile_cv_func_usleep_declared=yes}
+guile_cv_exeext=${guile_cv_exeext=}
+libltdl_cv_sys_search_path=${libltdl_cv_sys_search_path="%(system_root)s/usr/lib"}
+'''
+
+	def configure (self):
+		if 0: # using patch
+			gub.Target_package.autoupdate (self)
+			self.file_sub ('''^#(LIBOBJS=".*fileblocks.*)''', '\\1',
+				       '%(srcdir)s/configure')
+			os.chmod ('%(srcdir)s/configure' % self.package_dict (), 0755)
+		self.settings.target_gcc_flags = '-mms-bitfields'
+		gub.Target_package.configure (self)
+		self.file_sub ('^\(allow_undefined_flag=.*\)unsupported',
+			       '\\1',
+			       '%(builddir)s/libtool')
+		self.file_sub ('^\(allow_undefined_flag=.*\)unsupported',
+			       '\\1',
+			       '%(builddir)s/guile-readline/libtool')
+		self.system ('''cp $HOME/installers/windows/bin/%(target_architecture)s-libtool %(builddir)s/libtool''')
+		self.system ('''cp $HOME/installers/windows/bin/%(target_architecture)s-libtool %(builddir)s/guile-readline/libtool''')
+
+class Guile__linux (Guile):
+	def compile_command (self):
+		# FIXME: when not x-building, guile runs guile without
+		# setting the proper LD_LIBRARY_PATH.
+		return 'export LD_LIBRARY_PATH=%(builddir)s/libguile/.libs:$LD_LIBRARY_PATH;' \
+		       + Guile.compile_command (self)
 
 class LilyPond (gub.Target_package):
 	def configure (self):
@@ -166,17 +138,17 @@
 
 		cmd += gub.Target_package.configure_command (self)
 		cmd += ' --disable-documentation'
-		if self.settings.platform.startswith ('mingw'):
-			cmd += gub.join_lines ('''
+		return cmd
+
+class LilyPond__mingw (LilyPond):
+	def configure_command (self):
+		return LilyPond.configure_command (self) \
+		       + gub.join_lines ('''
 --without-kpathsea
 --enable-relocation
 --with-python-include=%(system_root)s/usr/include/python2.4
 --disable-optimising
 ''')
-		if self.settings.platform.startswith ('linux'):
-			cmd += ' --enable-static-gxx'
-		return cmd
-
 	def configure (self):
 		# FIXME: should add to CPPFLAGS...
 		self.settings.target_gcc_flags += ' -I%(builddir)s' \
@@ -186,81 +158,72 @@
 cp /usr/include/FlexLexer.h %(builddir)s
 ''')
 		gub.Target_package.configure (self)
-		if self.settings.platform.startswith ('mingw'):
-			self.config_cache ()
-			self.settings.target_gcc_flags = '-mms-bitfields'
-			# FIXME: should add to CPPFLAGS...
-			self.settings.target_gcc_flags += ' -I%(builddir)s' \
-							  % self.package_dict ()
-			cmd = self.configure_command () \
-			      + ' --enable-config=console'
-			self.system ('''cd %(builddir)s && %(cmd)s''',
-				     locals ())
+		self.config_cache ()
+		self.settings.target_gcc_flags = '-mms-bitfields'
+		# FIXME: should add to CPPFLAGS...
+		self.settings.target_gcc_flags += ' -I%(builddir)s' \
+						  % self.package_dict ()
+		cmd = self.configure_command () \
+		      + ' --enable-config=console'
+		self.system ('''cd %(builddir)s && %(cmd)s''',
+			     locals ())
 
 	def compile_command (self):
-		cmd = gub.Target_package.compile_command (self)
-		if self.settings.platform.startswith ('mingw'):
-			python_lib = "%(system_root)s/usr/bin/libpython2.4.dll"
-			return cmd + gub.join_lines ('''
+		python_lib = "%(system_root)s/usr/bin/libpython2.4.dll"
+		return LilyPond.compile_command (self) \
+		       + gub.join_lines ('''
 LDFLAGS=%(python_lib)s
 HELP2MAN_GROFFS=
 '''% locals ())
 
 	def compile (self):
-		gub.Target_package.compile (self)
-		if self.settings.platform.startswith ('mingw'):
-			gub.Package.system (self, '''
+		LilyPond.compile (self)
+		gub.Package.system (self, '''
 mkdir -p %(builddir)s/mf/out-console
 cp -pv %(builddir)s/mf/out/* mf/out-console
 ''')
-			cmd = gub.Target_pacykage.compile_command (self)
-			cmd += ' conf=console'
-			self.system ('''cd %(builddir)s && %(cmd)s''',
-				     locals ())
+		cmd = LilyPond.compile_command (self)
+		cmd += ' conf=console'
+		self.system ('''cd %(builddir)s && %(cmd)s''',
+			     locals ())
 
 	def install_command (self):
-		return gub.Target_package.install_command (self) \
+		return LilyPond.install_command (self) \
 		       + gub.join_lines ('''
 HELP2MAN_GROFFS=
 '''% locals ())
-	
+
 	def install (self):
-		gub.Target_package.install (self)
-		if self.settings.platform.startswith ('mingw'):
-			self.system ('''
+		LilyPond.install (self)
+		self.system ('''
 install -m755 %(builddir)/lily/out/lilypond %(install_prefix)/bin/lilypond-windows
 install -m755 %(builddir)/lily/out-console/lilypond %(install_prefix)/bin/lilypond
 ''')
 
+class LilyPond__linux (LilyPond):
+	def configure_command (self):
+		return LilyPond.configure_command (self) \
+		       + ' --enable-static-gxx'
+
 class Gettext (gub.Target_package):
-	def config_cache_overrides (self, str):
-		if self.settings.platform == 'mingw':
-			str = re.sub ('ac_cv_func_select=yes','ac_cv_func_select=no', str)
-		if 0:
-			# this for mingw-3.7 only, but mingw-3.8 does not link
-			# guile.exe
-			str += '''
-# gettext does not include winsock2.h -- do not feel like patching right now
-# but in mingw only if winsock2.h
-ac_cv_func_select=${ac_cv_func_select=no}
-# only in additional library -- do not feel like patching right now
-gl_cv_func_mbrtowc=${gl_cv_func_mbrtowc=no}
-jm_cv_func_mbrtowc=${jm_cv_func_mbrtowc=no}
-'''
-		return str
-
 	def configure_command (self):
-		cmd = gub.Target_package.configure_command (self) \
+		return gub.Target_package.configure_command (self) \
 		       + ' --disable-csharp'
 
-		if self.settings.platform == 'mac':
-			cmd = re.sub ('--config-cache ', '', cmd)
-		return cmd
-
 	def configure (self):
 		self.system ('''cd %(srcdir)s && libtoolize --force --copy''')
 		gub.Target_package.configure (self)
 
+class Gettext__mingw (Gettext):
+	def config_cache_overrides (self, str):
+		return re.sub ('ac_cv_func_select=yes', 'ac_cv_func_select=no',
+			       str)
+
+class Gettext__mac (Gettext):
+	def configure_command (self):
+		return re.sub ('--config-cache ', '',
+			       Gettext.configure_command (self))
+
 class Libiconv (gub.Target_package):
 	pass
 
@@ -269,19 +232,12 @@
 		return str + '''
 glib_cv_stack_grows=${glib_cv_stack_grows=no}
 '''
-	
 
-class Darwin_glib (Glib):
+class Glib__mac (Glib):
 	def configure (self):
 		Glib.configure (self)
 		self.file_sub ('nmedit', '%(target_architecture)s-nmedit',
 			       self.builddir () + '/libtool')
-	def file_name (self):
-		if self.url:
-			return re.sub ('.*/([^/]+)', '\\1', self.url)
-		else:
-			return 'glib'
-
 
 class Pango (gub.Target_package):
 	def configure_command (self):
@@ -291,21 +247,15 @@
 --without-cairo
 ''')
 
-	def xxconfigure (self):
-		self.system ('''cd %(srcdir)s && libtoolize --force --copy''')
-#woe!
-#libtool: link: CURRENT `1001' is not a nonnegative integer
-#libtool: link: `1001:0:1001' is not valid version information
-		gub.Target_package.configure (self)
-		if self.settings.platform.startswith ('mingw'):
-			self.system ('''cp $HOME/installers/windows/bin/%(target_architecture)s-libtool %(builddir)s/libtool''')
-			for i in ['%(builddir)s/Makefile' \
-				  % self.package_dict ()] \
-			    + glob.glob ('%(builddir)s/*/Makefile' \
-					 % self.package_dict ()) \
-			    + glob.glob ('%(builddir)s/*/*/Makefile' \
-					 % self.package_dict ()):
-				self.file_sub ('^LIBTOOL *=.*', 'LIBTOOL=%(builddir)s/libtool --tag=CXX', i)
+class Pango__linux (Pango):
+	def untar (self):
+		gub.Target_package.untar (self)
+		# FIXME: --without-cairo switch is removed in 1.10.1,
+		# pango only compiles without cairo if cairo is not
+		# installed linkably on the build system.  UGH.
+		self.file_sub ('(have_cairo[_a-z]=)true',
+			       '\\1=false',
+			       '%(srcdir)s/configure.in')
 
 class Freetype (gub.Target_package):
 	def configure (self):
@@ -340,23 +290,14 @@
 class Fontconfig (gub.Target_package):
 	def configure_command (self):
 		# FIXME: system dir vs packaging install
-		cmd = gub.Target_package.configure_command (self) \
+		return gub.Target_package.configure_command (self) \
 		      + gub.join_lines ('''
 --with-freetype-config="/usr/bin/freetype-config
 --prefix=%(system_root)s/usr
 --exec-prefix=%(system_root)s/usr
 "''')
 
-		if self.settings.platform.startswith ('mingw'):
-			 cmd += gub.join_lines ('''
---with-default-fonts=@WINDIR@\\fonts\\
---with-add-fonts=@INSTDIR@\\usr\\share\\gs\\fonts
-''')
-
-		return cmd
-
 	def configure (self):
-##		self.autoupdate ()
 		gub.Package.system (self, '''
 		rm -f %(srcdir)s/builds/unix/{unix-def.mk,unix-cc.mk,ftconfig.h,freetype-config,freetype2.pc,config.status,config.log}
 ''',
@@ -365,6 +306,8 @@
 --exec-prefix=%(install_prefix)s \
 '''})
 		gub.Target_package.configure (self)
+		# FIXME: how to put in __mingw class without duplicating
+		# configure ()
 		if self.settings.platform.startswith ('mingw'):
 			self.dump ('%(builddir)s/config.h', '''
 #define sleep(x) _sleep (x)
@@ -380,6 +323,15 @@
 cd %(builddir)s/%(i)s && make "CFLAGS=%(cflags)s" "LIBS=%(libs)s" CPPFLAGS= LDFLAGS= INCLUDES=
 ''', locals ())
 
+class Fontconfig__mingw (Fontconfig):
+	def configure_command (self):
+		return Fontconfig.configure_command (self) \
+		       + gub.join_lines ('''
+--with-default-fonts=@WINDIR@\\fonts\\
+--with-add-fonts=@INSTDIR@\\usr\\share\\gs\\fonts
+''')
+
+
 class Expat (gub.Target_package):
 	def makeflags (self):
 		return gub.join_lines ('''
@@ -414,34 +366,49 @@
 #Gettext (settings).with (version='0.14.5'),
 #Guile (settings).with (version='1.7.2', mirror=download.alpha, format='gz'),
 
+# FIXME: these lists should be merged, somehow,
+# linux and mingw use almost the same list (linux does not have libiconv),
+# but some classes have __mingw or __linux overrides.
 def get_packages (settings, platform):
 	packages = {
 	'mac': (
-		Gettext (settings).with (version='0.10.40'),
+		Gettext__mac (settings).with (version='0.10.40'),
 		Freetype (settings).with (version='2.1.9', mirror=download.freetype),
 		Expat (settings).with (version='1.95.8', mirror=download.sourceforge, format='gz'),
-		Darwin_glib (settings).with (version='2.8.4', mirror=download.gtk),
+		Glib__mac (settings).with (version='2.8.4', mirror=download.gtk),
 		Fontconfig (settings).with (version='2.3.2', mirror=download.fontconfig),
 	),
 	'mingw': (
 		Libtool (settings).with (version='1.5.20'),
 		Zlib (settings).with (version='1.2.2-1', mirror=download.lp, format='bz2'),
+		Gettext__mingw (settings).with (version='0.14.1-1', mirror=download.lp, format='bz2'),
+		Libiconv (settings).with (version='1.9.2'),
+		Freetype (settings).with (version='2.1.7', mirror=download.freetype),
+		Expat (settings).with (version='1.95.8-1', mirror=download.lp, format='bz2'),
+		Fontconfig__mingw (settings).with (version='2.3.2', mirror=download.fontconfig),
+		Gmp__mingw (settings).with (version='4.1.4'),
+		# FIXME: we're actually using 1.7.2-cvs+, 1.7.2 needs too much work
+		Guile__mingw (settings).with (version='1.7.2-3', mirror=download.lp, format='bz2'),
+		Glib (settings).with (version='2.8.4', mirror=download.gtk),
+		Pango (settings).with (version='1.10.1', mirror=download.gtk),
+		Python__mingw (settings).with (version='2.4.2', mirror=download.python, format='bz2'),
+		LilyPond__mingw (settings).with (mirror=cvs.gnu, download=gub.Package.cvs),
+	),
+	'linux': (
+		Libtool (settings).with (version='1.5.20'),
+		Zlib (settings).with (version='1.2.2-1', mirror=download.lp, format='bz2'),
 		Gettext (settings).with (version='0.14.1-1', mirror=download.lp, format='bz2'),
-		Libiconv (settings).with (version='1.9.2'),
 		Freetype (settings).with (version='2.1.7', mirror=download.freetype),
 		Expat (settings).with (version='1.95.8-1', mirror=download.lp, format='bz2'),
 		Fontconfig (settings).with (version='2.3.2', mirror=download.fontconfig),
 		Gmp (settings).with (version='4.1.4'),
 		# FIXME: we're actually using 1.7.2-cvs+, 1.7.2 needs too much work
-		Guile (settings).with (version='1.7.2-3', mirror=download.lp, format='bz2'),
+		Guile__linux (settings).with (version='1.7.2-3', mirror=download.lp, format='bz2'),
 		Glib (settings).with (version='2.8.4', mirror=download.gtk),
-		Pango (settings).with (version='1.10.1', mirror=download.gtk),
+		Pango__linux (settings).with (version='1.10.1', mirror=download.gtk),
 		Python (settings).with (version='2.4.2', mirror=download.python, format='bz2'),
-		LilyPond (settings).with (mirror=cvs.gnu, download=gub.Package.cvs),
+		LilyPond__linux (settings).with (mirror=cvs.gnu, download=gub.Package.cvs),
 	),
 	}
 
-	if platform == 'linux':
-		return filter (lambda x: x.name () != 'libiconv', packages['mingw'])
-	
 	return packages[platform]
--- a/specs/gub.py	Thu Dec 01 20:27:45 2005 +0100
+++ b/specs/gub.py	Thu Dec 01 21:21:44 2005 +0100
@@ -187,6 +187,7 @@
 			file = re.sub ('.*/([^/]+)', '\\1', self.url)
 		else:
 			file = self.__class__.__name__.lower ()
+			file = re.sub ('__.*', '', file)
 			file = re.sub ('_', '-', file)
 		return file