Mercurial > gub
changeset 3:3fd05f082eb5
cross packages
author | hanwen <hanwen@xs4all.nl> |
---|---|
date | Mon, 21 Nov 2005 21:48:21 +0100 |
parents | e769b4cd47d2 |
children | 3c4b27fcdec0 |
files | driver.py specs/cross.py specs/darwintools.py specs/framework.py specs/gub.py |
diffstat | 5 files changed, 165 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/driver.py Sun Nov 20 22:06:48 2005 +0100 +++ b/driver.py Mon Nov 21 21:48:21 2005 +0100 @@ -12,10 +12,11 @@ settings = Settings() -settings.target_architecture = 'powerpc-apple-darwin' +settings.target_architecture = 'powerpc-apple-darwin7' +settings.target_gcc_flags = '' settings.topdir = os.getcwd() settings.downloaddir = os.getcwd() + '/downloads/' - +settings.build_spec = 'i686-linux' settings.srcdir = os.path.join (settings.topdir, 'src') settings.specdir = settings.topdir + '/specs/' settings.targetdir = settings.topdir + '/target/%s/' % settings.target_architecture
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/specs/cross.py Mon Nov 21 21:48:21 2005 +0100 @@ -0,0 +1,68 @@ + + + +cross_config_cache = """ac_cv_c_bigendian=${ac_cv_c_bigendian=no} +ac_cv_c_long_size_t=${ac_cv_c_long_size_t=no} +ac_cv_c_long_time_t=${ac_cv_c_long_time_t=yes} +ac_cv_sizeof___int64=${ac_cv_sizeof___int64=0} +ac_cv_sizeof_char=${ac_cv_sizeof_char=1} +ac_cv_sizeof_char_p=${ac_cv_sizeof_char_p=4} +ac_cv_sizeof_double=${ac_cv_sizeof_double=8} +ac_cv_sizeof_float=${ac_cv_sizeof_float=4} +ac_cv_sizeof_int=${ac_cv_sizeof_int=4} +ac_cv_sizeof_intmax_t=${ac_cv_sizeof_intmax_t=8} +ac_cv_sizeof_intptr_t=${ac_cv_sizeof_intptr_t=4} +ac_cv_sizeof_long=${ac_cv_sizeof_long=4} +ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=12} +ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8} +ac_cv_sizeof_ptrdiff_t=${ac_cv_sizeof_ptrdiff_t=4} +ac_cv_sizeof_short=${ac_cv_sizeof_short=2} +ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4} +ac_cv_sizeof_uintptr_t=${ac_cv_sizeof_uintptr_t=4} +ac_cv_sizeof_unsigned___int64=${ac_cv_sizeof_unsigned___int64=0} +ac_cv_sizeof_unsigned_char=${ac_cv_sizeof_unsigned_char=1} +ac_cv_sizeof_unsigned_int=${ac_cv_sizeof_unsigned_int=4} +ac_cv_sizeof_unsigned_long=${ac_cv_sizeof_unsigned_long=4} +ac_cv_sizeof_unsigned_long_long=${ac_cv_sizeof_unsigned_long_long=8} +ac_cv_sizeof_unsigned_short=${ac_cv_sizeof_unsigned_short=2} +ac_cv_sizeof_void_p=${ac_cv_sizeof_void_p=4} +ac_16bit_type=${ac_16bit_type=short} +ac_32bit_type=${ac_32bit_type=int} +ac_64bit_type=${ac_64bit_type=none} +ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls=yes} +ac_cv_sprintf_count=${ac_cv_sprintf_count=yes} +ac_cv_spinlocks=${ac_cv_spinlocks=no} +ac_cv_func_getpgrp_void=${ac_cv_func_getpgrp_void=yes} +ac_cv_func_setvbuf_reversed=${ac_cv_func_setvbuf_reversed=no} +# but in mingw only if winsock2.h +ac_cv_func_select=${ac_cv_func_select=yes} +ac_cv_search_dlopen=${ac_cv_search_dlopen="none required"} +ac_exeext=${ac_exeext=} +ac_cv_exeext=${ac_cv_exeext=} + +# libtool searches not only in the cross libpath +# /cygwin/usr/lib:/cygwin/usr/lib/w32api:/usr/i686-cygwin/lib +# but also in /usr/lib. there it finds libdl.a and adds -ldl +# to LIBS +# it seems that libtool is broken wrt cross compilation: +# sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" +lt_cv_dlopen=${lt_cv_dlopen="dlopen"} +lt_cv_dlopen_libs=${lt_cv_dlopen_libs="none required"} +libltdl_cv_sys_search_path=${libltdl_cv_sys_search_path="'"/lib /usr/lib $cygwin_prefix/lib"'"} +lt_cv_sys_max_cmd_len=${lt_cv_sys_max_cmd_len=8192} +ac_cv_lib_dld_shl_load=${ac_cv_lib_dld_shl_load=no} +ac_cv_lib_dl_dlopen=${ac_cv_lib_dl_dlopen=no} +ac_cv_c_stack_direction=${ac_cv_c_stack_direction=-1} +""" + + +cygwin = """ac_cv_func_mkfifo=${ac_cv_func_mkfifo=yes} +ac_cv_have_dev_ptmx=${ac_cv_have_dev_ptmx=} +ac_cv_have_dev_ptc=${ac_cv_have_dev_ptc=} +""" + +mingw = """ac_cv_func_mkfifo=${ac_cv_func_mkfifo=no} +ac_cv_have_dev_ptmx=${ac_cv_have_dev_ptmx=no} +ac_cv_have_dev_ptc=${ac_cv_have_dev_ptc=no} +""" +
--- a/specs/darwintools.py Sun Nov 20 22:06:48 2005 +0100 +++ b/specs/darwintools.py Mon Nov 21 21:48:21 2005 +0100 @@ -1,7 +1,7 @@ import re import gub -class Darwin_sdk (gub.Package): +class Darwin_sdk (gub.Cross_package): def file_name (self): return 'darwin-sdk.tar.gz' def __init__ (self, settings): @@ -20,23 +20,17 @@ def install (self): pass -class Odcc_tools (gub.Package): +class Odcc_tools (gub.Cross_package): def __init__ (self, settings): - gub.Package.__init__ (self, settings) + gub.Cross_package.__init__ (self, settings) self.url = 'http://www.opendarwin.org/downloads/odcctools-20051031.tar.bz2' - def installdir (self): return self.settings.tooldir - def configure_command (self): - cmd = gub.Package.configure_command (self) - cmd += ' --target=%s --with-sysroot=%s ' % (self.settings.target_architecture, self.settings.systemdir) - - return cmd -class Gcc (gub.Package): +class Gcc (gub.Cross_package): def __init__ (self, settings): - gub.Package.__init__ (self,settings) + gub.Cross_package.__init__ (self,settings) self.url = 'ftp://dl.xs4all.nl/pub/mirror/gnu/gcc/gcc-4.0.2/gcc-4.0.2.tar.bz2' def patch (self): @@ -46,20 +40,18 @@ # backup file. open (fn + "~", 'w').write (str) - str = re.sub ('/usr/bin/libtool', '%s/bin/powerpc-apple-darwin-libtool' % self.settings.tooldir, str) + str = re.sub ('/usr/bin/libtool', '%s/bin/powerpc-apple-darwin7-libtool' % self.settings.tooldir, str) open (fn,'w').write (str) def configure_command (self): - cmd = gub.Package.configure_command (self) + cmd = gub.Cross_package.configure_command (self) cmd += ''' --prefix=%(tooldir)s \ --program-prefix=%(target_architecture)s- \ ---target=%(target_architecture)s \ ---with-as=%(tooldir)s/bin/powerpc-apple-darwin-as \ ---with-ld=%(tooldir)s/bin/powerpc-apple-darwin-ld \ ---with-sysroot=%(systemdir)s --enable-static --enable-shared \ ---enable-languages=c ''' % self.settings.__dict__ - - # let's skip c++ for the moment. +--with-as=%(tooldir)s/bin/powerpc-apple-darwin7-as \ +--with-ld=%(tooldir)s/bin/powerpc-apple-darwin7-ld \ + --enable-static --enable-shared \ +--enable-libstdcxx-debug \ +--enable-languages=c,c++ ''' % self.settings.__dict__ return cmd
--- a/specs/framework.py Sun Nov 20 22:06:48 2005 +0100 +++ b/specs/framework.py Mon Nov 21 21:48:21 2005 +0100 @@ -2,11 +2,20 @@ import re import gub -class Gettext (gub.Package): +class Gettext (gub.Target_package): def __init__ (self, settings): gub.Package.__init__ (self, settings) self.url = 'ftp://dl.xs4all.nl/pub/mirror/gnu/gettext/gettext-0.14.tar.gz' + def configure_cache_overrides (self, str): + str = re.sub ('ac_cv_func_select=yes','ac_cv_func_select=no', str) + return str + + def configure_command (self): + cmd = gub.Target_package.configure_command (self) + cmd += ' --disable-csharp ' + return cmd + def install_dir (self): return self.settings.installdir
--- a/specs/gub.py Sun Nov 20 22:06:48 2005 +0100 +++ b/specs/gub.py Mon Nov 21 21:48:21 2005 +0100 @@ -1,26 +1,38 @@ import os import sys import re +import subprocess +import cross -def system (cmd, ignore_error = False): +def system (cmd, ignore_error = False, env = {}): + call_env = os.environ.copy() + call_env.update (env) + + for (k,v) in env.items(): + sys.stderr.write ('%s=%s\n' % (k,v)) + sys.stderr.write ('invoking %s\n' % cmd) - stat = os.system (cmd) + + proc = subprocess.Popen (cmd, shell=True, env = call_env) + stat = proc.wait () + if stat and not ignore_error: sys.stderr.write ('fail\n') sys.exit (1) return 0 - - class Package: def __init__ (self, settings): self.settings = settings + def system (self, cmd, env = {}): + system (cmd, ignore_error = False, env = env) + def download (self): dir = self.settings.downloaddir if not os.path.exists (dir + '/' + self.file_name ()): - system ('cd %s ; wget %s ' % (dir, self.url)) + self.system ('cd %s ; wget %s ' % (dir, self.url)) def unpack_destination (self): return self.settings.srcdir @@ -60,7 +72,7 @@ % (self.srcdir (), self.installdir ())) def configure (self): - system ("mkdir -p %s; cd %s && %s" % (self.builddir(), + self.system ("mkdir -p %s; cd %s && %s" % (self.builddir(), self.builddir(), self.configure_command ())) @@ -68,13 +80,13 @@ return 'make install' def install (self): - system ("cd %s && %s" % (self.builddir (), self.install_command ())) + self.system ("cd %s && %s" % (self.builddir (), self.install_command ())) def compile_command (self): return 'make' def compile (self): - system ("cd %s && %s" % (self.builddir(), self.compile_command ())) + self.system ("cd %s && %s" % (self.builddir(), self.compile_command ())) def patch (self): pass @@ -91,6 +103,57 @@ cmd = '-xzf ' cmd = "tar %s %s -C %s " % (cmd, file, self.unpack_destination ()) - system (cmd) + self.system (cmd) + + +class Cross_package (Package): + def configure_command (self): + cmd = Package.configure_command (self) + cmd += ' --target=%s --with-sysroot=%s ' % (self.settings.target_architecture, self.settings.systemdir) + return cmd + +class Target_package (Package): + def configure_command (self): + flags = '--config-cache --enable-shared --disable-static --build=%(build_spec)s --host=%(target_architecture)s --target=%(target_architecture)s --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib --includedir=/nonexistent/include --libexecdir=/usr/sbin' + flags = flags % self.settings.__dict__ + + return '%s/configure %s' % (self.srcdir(), flags) + + def configure_cache_overrides (self,str): + return str + + def configure (self): + self.system ("mkdir -p %s") + cache_fn = self.builddir () +'/config.cache' + cache = open (cache_fn, 'w') + str = cross.cross_config_cache + cross.cygwin + str = self.configure_cache_overrides (str) + cache.write (str) + cache.close () + + os.chmod (cache_fn, 0755) + Package.configure (self) + + def system (self, cmd): + + dict = {'CXX':'%(target_architecture)s-g++ %(target_gcc_flags)s', + 'CXX_FOR_TARGET':'%(target_architecture)s-g++ %(target_gcc_flags)s', + 'CC':'%(target_architecture)sgcc %(target_gcc_flags)s', + 'CC_FOR_TARGET': '%(target_architecture)sgcc %(target_gcc_flags)s', + 'RANLIB': '%(target_architecture)s-ranlib', + 'RANLIB_FOR_TARGET': '%(target_architecture)s-ranlib', + 'DLLWRAP' : '%(target_architecture)s-dllwrap', + 'AR': '%(target_architecture)s-ar', + 'NM': '%(target_architecture)s-nm'} + + for (k,v) in dict.items(): + v = v % self.settings.__dict__ + dict[k] = v + + return Package.system (self, cmd, env = dict) + + + +