classes: Sync various classes with OE for various bugfixes

git-svn-id: https://svn.o-hand.com/repos/poky/trunk@2407 311d38ba-8fff-0310-9ca6-ca027cbcb966
This commit is contained in:
Richard Purdie 2007-08-08 20:41:55 +00:00
parent fe553f406d
commit 720e0b144c
11 changed files with 284 additions and 101 deletions

View File

@ -16,10 +16,9 @@ def autotools_dep_prepend(d):
if not pn in ['libtool', 'libtool-native', 'libtool-cross']:
deps += 'libtool-native '
if not bb.data.inherits_class('native', d) \
and not bb.data.inherits_class('cross', d) \
and not bb.data.getVar('INHIBIT_DEFAULT_DEPS', d, 1):
deps += 'libtool-cross '
and not bb.data.inherits_class('cross', d) \
and not bb.data.getVar('INHIBIT_DEFAULT_DEPS', d, 1):
deps += 'libtool-cross '
return deps + 'gnu-config-native '
@ -124,14 +123,6 @@ autotools_do_configure() {
oenote Executing intltoolize --copy --force --automake
intltoolize --copy --force --automake
fi
#if grep "^GTK_DOC_CHECK" $CONFIGURE_AC >/dev/null; then
# oenote Executing gtkdocize --copy
# gtkdocize --copy
#fi
#if grep "^GNOME_DOC_INIT" $CONFIGURE_AC >/dev/null; then
# oenote Executing gnome-doc-prepare --copy --force
# gnome-doc-prepare --copy --force
#fi
oenote Executing autoreconf --verbose --install --force ${EXTRA_AUTORECONF} $acpaths
mkdir -p m4
autoreconf -Wcross --verbose --install --force ${EXTRA_AUTORECONF} $acpaths || oefatal "autoreconf execution failed."
@ -148,6 +139,13 @@ autotools_do_configure() {
autotools_do_install() {
oe_runmake 'DESTDIR=${D}' install
for i in `find ${D} -name "*.la"` ; do \
sed -i -e s:${STAGING_LIBDIR}:${libdir}:g $i
sed -i -e s:${D}::g $i
sed -i -e 's:-I${WORKDIR}\S*: :g' $i
sed -i -e 's:-L${WORKDIR}\S*: :g' $i
done
}
STAGE_TEMP="${WORKDIR}/temp-staging"

View File

@ -18,6 +18,8 @@ def get_binconfig_mangle(d):
s += " -e 's:OEDATADIR:${STAGING_DATADIR}:'"
s += " -e 's:OEPREFIX:${STAGING_LIBDIR}/..:'"
s += " -e 's:OEEXECPREFIX:${STAGING_LIBDIR}/..:'"
s += " -e 's:-I${WORKDIR}:-I${STAGING_INCDIR}:'"
s += " -e 's:-L${WORKDIR}:-L${STAGING_LIBDIR}:'"
return s
BINCONFIG_GLOB ?= "*-config"

View File

@ -7,8 +7,12 @@ def python_dir(d):
staging_incdir = bb.data.getVar( "STAGING_INCDIR", d, 1 )
if os.path.exists( "%s/python2.3" % staging_incdir ): return "python2.3"
if os.path.exists( "%s/python2.4" % staging_incdir ): return "python2.4"
if os.path.exists( "%s/python2.5" % staging_incdir ): return "python2.5"
raise "No Python in STAGING_INCDIR. Forgot to build python-native ?"
PYTHON_DIR = "${@python_dir(d)}"
FILES_${PN} = "${bindir}/* ${libdir}/* ${libdir}/${PYTHON_DIR}"
FILES_${PN} = "${bindir}/* ${libdir}/* ${libdir}/${PYTHON_DIR}/*"
FILES_${PN}-dbg = "${libdir}/${PYTHON_DIR}/site-packages/.debug \
${libdir}/${PYTHON_DIR}/site-packages/./*/debug \
${libdir}/${PYTHON_DIR}/site-packages/*/*/.debug"

View File

@ -1,8 +1,30 @@
# IceCream distributed compiling support
#
# We need to create a tar.bz2 of our toolchain and set
# ICECC_VERSION, ICECC_CXX and ICEC_CC
# Stages directories with symlinks from gcc/g++ to icecc, for both
# native and cross compilers. Depending on each configure or compile,
# the directories are added at the head of the PATH list and ICECC_CXX
# and ICEC_CC are set.
#
# For the cross compiler, creates a tar.gz of our toolchain and sets
# ICECC_VERSION accordingly.
#
#The class now handles all 3 different compile 'stages' (i.e native ,cross-kernel and target) creating the
#necessary enviroment tar.gz file to be used by the remote machines
#
#If ICECC_PATH is not set in local.conf then the class will try to locate it using 'which'
#but nothing is sure ;)
#
#If ICECC_ENV_EXEC is set in local.conf should point to the icecc-create-env script provided by the user
#or the default one provided by icecc-create-env.bb will be used
#(NOTE that this is a modified version of the script need it and *not the one that comes with icecc*
#
#User can specify if specific packages or packages belonging to class should not use icecc to distribute
#compile jobs to remote machines, but handled localy, by defining ICECC_USER_CLASS_BL and ICECC_PACKAGE_BL
#with the appropriate values in local.conf
#########################################################################################
#Error checking is kept to minimum so double check any parameters you pass to the class
###########################################################################################
def icc_determine_gcc_version(gcc):
"""
@ -10,11 +32,12 @@ def icc_determine_gcc_version(gcc):
'i686-apple-darwin8-gcc-4.0.1 (GCC) 4.0.1 (Apple Computer, Inc. build 5363)'
"""
import os
return os.popen("%s --version" % gcc ).readline().split()[2]
def create_env(bb,d):
def create_cross_env(bb,d):
"""
Create a tar.bz of the current toolchain
Create a tar.bz2 of the current toolchain
"""
# Constin native-native compilation no environment needed if
@ -23,78 +46,156 @@ def create_env(bb,d):
if len(prefix) == 0:
return ""
import tarfile
import socket
import time
import os
import tarfile, socket, time, os
ice_dir = bb.data.expand('${CROSS_DIR}', d)
prefix = bb.data.expand('${HOST_PREFIX}' , d)
distro = bb.data.expand('${DISTRO}', d)
target_sys = bb.data.expand('${TARGET_SYS}', d)
float = bb.data.getVar('${TARGET_FPU}', d) or "hard"
target_prefix = bb.data.expand('${TARGET_PREFIX}', d)
float = bb.data.getVar('TARGET_FPU', d) or "hard"
name = socket.gethostname()
# Stupid check to determine if we have built a libc and a cross
# compiler.
try:
os.stat(os.path.join(ice_dir, target_sys, 'lib', 'ld-linux.so.2'))
os.stat(os.path.join(ice_dir, target_sys, 'lib', 'libc.so'))
os.stat(os.path.join(ice_dir, target_sys, 'bin', 'g++'))
except:
except: # no cross compiler built yet
return ""
VERSION = icc_determine_gcc_version( os.path.join(ice_dir,target_sys,"bin","g++") )
cross_name = prefix + distro + target_sys + float +VERSION+ name
tar_file = os.path.join(ice_dir, 'ice', cross_name + '.tar.bz2')
cross_name = prefix + distro + "-" + target_sys + "-" + float + "-" + VERSION + "-" + name
tar_file = os.path.join(ice_dir, 'ice', cross_name + '.tar.gz')
try:
os.stat(tar_file)
# tar file already exists
return tar_file
except:
except:
try:
os.makedirs(os.path.join(ice_dir,'ice'))
except:
# directory already exists, continue
pass
# FIXME find out the version of the compiler
# Consider using -print-prog-name={cc1,cc1plus}
# and -print-file-name=specs
# We will use the GCC to tell us which tools to use
# What we need is:
# -gcc
# -g++
# -as
# -cc1
# -cc1plus
# and we add them to /usr/bin
tar = tarfile.open(tar_file, 'w:bz2')
# Now add the required files
tar.add(os.path.join(ice_dir,target_sys,'bin','gcc'),
os.path.join("usr","bin","gcc") )
tar.add(os.path.join(ice_dir,target_sys,'bin','g++'),
os.path.join("usr","bin","g++") )
tar.add(os.path.join(ice_dir,target_sys,'bin','as'),
os.path.join("usr","bin","as") )
# Now let us find cc1 and cc1plus
cc1 = os.popen("%s -print-prog-name=cc1" % data.getVar('CC', d, True)).read()[:-1]
cc1plus = os.popen("%s -print-prog-name=cc1plus" % data.getVar('CC', d, True)).read()[:-1]
spec = os.popen("%s -print-file-name=specs" % data.getVar('CC', d, True)).read()[:-1]
# CC1 and CC1PLUS should be there...
tar.add(cc1, os.path.join('usr', 'bin', 'cc1'))
tar.add(cc1plus, os.path.join('usr', 'bin', 'cc1plus'))
# spec - if it exists
if os.path.exists(spec):
tar.add(spec)
tar.close()
#check if user has specified a specific icecc-create-env script
#if not use the OE provided one
cr_env_script = bb.data.getVar('ICECC_ENV_EXEC', d) or bb.data.expand('${STAGING_DIR}', d)+"/ice/icecc-create-env"
#call the modified create-env script
result=os.popen("%s %s %s %s %s %s" %(cr_env_script,
"--silent",
os.path.join(ice_dir,target_sys,'bin','gcc'),
os.path.join(ice_dir,target_sys,'bin','g++'),
os.path.join(ice_dir,target_sys,'bin','as'),
os.path.join(ice_dir,"ice",cross_name) ) )
return tar_file
def create_native_env(bb,d):
import tarfile, socket, time, os
ice_dir = bb.data.expand('${CROSS_DIR}', d)
prefix = bb.data.expand('${HOST_PREFIX}' , d)
distro = bb.data.expand('${DISTRO}', d)
target_sys = bb.data.expand('${TARGET_SYS}', d)
target_prefix = bb.data.expand('${TARGET_PREFIX}', d)
float = bb.data.getVar('TARGET_FPU', d) or "hard"
name = socket.gethostname()
archive_name = "local-host-env" + "-" + name
tar_file = os.path.join(ice_dir, 'ice', archive_name + '.tar.gz')
try:
os.stat(tar_file)
# tar file already exists
return tar_file
except:
try:
#os.makedirs(os.path.join(ice_dir))
os.makedirs(os.path.join(ice_dir,'ice'))
except:
# directory already exists, continue
pass
#check if user has specified a specific icecc-create-env script
#if not use the OE provided one
cr_env_script = bb.data.getVar('ICECC_ENV_EXEC', d) or bb.data.expand('${STAGING_DIR}', d)+"/ice/icecc-create-env"
result=os.popen("%s %s %s %s %s %s" %(cr_env_script,
"--silent",
os.popen("%s gcc" % "which").read()[:-1],
os.popen("%s g++" % "which").read()[:-1],
os.popen("%s as" % "which").read()[:-1],
os.path.join(ice_dir,"ice",archive_name) ) )
return tar_file
def create_cross_kernel_env(bb,d):
import tarfile, socket, time, os
ice_dir = bb.data.expand('${CROSS_DIR}', d)
prefix = bb.data.expand('${HOST_PREFIX}' , d)
distro = bb.data.expand('${DISTRO}', d)
target_sys = bb.data.expand('${TARGET_SYS}', d)
target_prefix = bb.data.expand('${TARGET_PREFIX}', d)
float = bb.data.getVar('TARGET_FPU', d) or "hard"
name = socket.gethostname()
kernel_cc = bb.data.expand('${KERNEL_CC}', d)
kernel_cc = kernel_cc[:-1]
# Stupid check to determine if we have built a libc and a cross
# compiler.
try:
os.stat(os.path.join(ice_dir, 'bin', kernel_cc))
except: # no cross compiler built yet
return ""
VERSION = icc_determine_gcc_version( os.path.join(ice_dir,"bin",kernel_cc) )
cross_name = prefix + distro + "-" + target_sys + "-" + float + "-" + VERSION + "-" + name
tar_file = os.path.join(ice_dir, 'ice', cross_name + '.tar.gz')
try:
os.stat(tar_file)
# tar file already exists
return tar_file
except:
try:
os.makedirs(os.path.join(ice_dir,'ice'))
except:
# directory already exists, continue
pass
#check if user has specified a specific icecc-create-env script
#if not use the OE provided one
cr_env_script = bb.data.getVar('ICECC_ENV_EXEC', d) or bb.data.expand('${STAGING_DIR}', d)+"/ice/icecc-create-env"
result=os.popen("%s %s %s %s %s %s" %(cr_env_script,
"--silent",
os.path.join(ice_dir,'bin',kernel_cc),
os.path.join(ice_dir,target_sys,'bin','g++'),
os.path.join(ice_dir,target_sys,'bin','as'),
os.path.join(ice_dir,"ice",cross_name) ) )
return tar_file
def create_env(bb,d):
#return create_cross_kernel_env(bb,d)
if bb.data.inherits_class("native", d):
return create_native_env(bb,d)
elif bb.data.inherits_class("kernel", d):
return create_cross_kernel_env(bb,d)
elif bb.data.inherits_class("cross", d):
return create_native_env(bb,d)
else:
return create_cross_env(bb,d)
def create_path(compilers, type, bb, d):
"""
Create Symlinks for the icecc in the staging directory
@ -102,15 +203,17 @@ def create_path(compilers, type, bb, d):
import os
staging = os.path.join(bb.data.expand('${STAGING_DIR}', d), "ice", type)
icecc = bb.data.getVar('ICECC_PATH', d)
#check if the icecc path is set by the user
icecc = bb.data.getVar('ICECC_PATH', d) or os.popen("%s icecc" % "which").read()[:-1]
# Create the dir if necessary
try:
os.stat(staging)
except:
os.makedirs(staging)
for compiler in compilers:
gcc_path = os.path.join(staging, compiler)
try:
@ -121,46 +224,89 @@ def create_path(compilers, type, bb, d):
return staging + ":"
def use_icc_version(bb,d):
# Constin native native
prefix = bb.data.expand('${HOST_PREFIX}', d)
if len(prefix) == 0:
return "no"
icecc_ver = "yes"
system_class_blacklist = [ "none" ]
for black in system_class_blacklist:
if bb.data.inherits_class(black, d):
icecc_ver = "no"
blacklist = [ "cross", "native" ]
user_class_blacklist = bb.data.getVar('ICECC_USER_CLASS_BL', d) or "none"
user_class_blacklist = user_class_blacklist.split()
for black in user_class_blacklist:
if bb.data.inherits_class(black, d):
icecc_ver = "no"
return icecc_ver
for black in blacklist:
if bb.data.inherits_class(black, d):
return "no"
return "yes"
def icc_path(bb,d,compile):
native = bb.data.expand('${PN}', d)
blacklist = [ "ulibc", "glibc", "ncurses" ]
for black in blacklist:
if black in native:
return ""
package_tmp = bb.data.expand('${PN}', d)
#"system" package blacklist contains a list of packages that can not distribute compile tasks
#for one reason or the other
system_package_blacklist = [ "uclibc", "glibc-intermediate", "qemu" ]
for black in system_package_blacklist:
if black in package_tmp:
bb.data.setVar('PARALLEL_MAKE' , '', d)
return ""
#user defined exclusion list
user_package_blacklist = bb.data.getVar('ICECC_USER_PACKAGE_BL', d) or "none"
user_package_blacklist = user_package_blacklist.split()
for black in user_package_blacklist:
if black in package_tmp:
bb.data.setVar('PARALLEL_MAKE' , '', d)
return ""
blacklist = [ "cross", "native" ]
for black in blacklist:
if bb.data.inherits_class(black, d):
compile = False
prefix = bb.data.expand('${HOST_PREFIX}', d)
if compile and len(prefix) != 0:
return create_path( [prefix+"gcc", prefix+"g++"], "cross", bb, d )
if compile and bb.data.inherits_class("cross", d):
return create_path( ["gcc", "g++"], "native", bb, d)
elif compile and bb.data.inherits_class("native", d):
return create_path( ["gcc", "g++"], "native", bb, d)
elif compile and bb.data.inherits_class("kernel", d):
#kernel_cc = bb.data.expand('${KERNEL_CC}', d)
return create_path( [get_cross_kernel_ver(bb,d), "foo"], "cross-kernel", bb, d)
elif not compile or len(prefix) == 0:
return create_path( ["gcc", "g++"], "native", bb, d)
return create_path( ["gcc", "g++"], "native", bb, d)
else:
return create_path( [prefix+"gcc", prefix+"g++"], "cross", bb, d)
def icc_version(bb,d):
return create_env(bb,d)
def check_for_kernel(bb,d):
if bb.data.inherits_class("kernel", d):
return "yes"
#
# set the IceCream environment variables
return "no"
def get_cross_kernel_ver(bb,d):
return bb.data.expand('${KERNEL_CC}', d).strip() or "gcc"
# set the icecream environment variables
do_configure_prepend() {
export PATH=${@icc_path(bb,d,False)}$PATH
export ICECC_CC="gcc"
@ -168,11 +314,22 @@ do_configure_prepend() {
}
do_compile_prepend() {
export PATH=${@icc_path(bb,d,True)}$PATH
#check if we are building a kernel and select gcc-cross-kernel
if [ "${@check_for_kernel(bb,d)}" = "yes" ]; then
export ICECC_CC="${@get_cross_kernel_ver(bb,d)}"
export ICECC_CXX="${HOST_PREFIX}g++"
else
export ICECC_CC="${HOST_PREFIX}gcc"
export ICECC_CXX="${HOST_PREFIX}g++"
fi
if [ "${@use_icc_version(bb,d)}" = "yes" ]; then
export ICECC_VERSION="${@icc_version(bb,d)}"
else
export ICECC_VERSION="NONE"
fi
}

View File

@ -4,10 +4,15 @@
# in the kernel source "arch" directory
#
valid_archs = "alpha cris ia64 m68knommu ppc sh \
sparc64 x86_64 arm h8300 m32r mips \
ppc64 sh64 um arm26 i386 m68k \
parisc s390 sparc v850"
valid_archs = "alpha cris ia64 \
x86_64,i386 \
m68knommu m68k ppc powerpc ppc64 \
sparc sparc64 \
arm arm26 \
m32r mips \
sh sh64 um h8300 \
parisc s390 v850 \
avr32 blackfin"
def map_kernel_arch(a, d):
import bb, re
@ -17,10 +22,10 @@ def map_kernel_arch(a, d):
if re.match('(i.86|athlon)$', a): return 'i386'
elif re.match('arm26$', a): return 'arm26'
elif re.match('armeb$', a): return 'arm'
elif re.match('powerpc$', a): return 'ppc'
elif re.match('mipsel$', a): return 'mips'
elif re.match('sh(3|4)$', a): return 'sh'
elif a in valid_archs: return a
elif re.match('bfin', a): return 'blackfin'
elif a in valid_archs: return a
else:
bb.error("cannot map '%s' to a linux kernel architecture" % a)

View File

@ -18,5 +18,12 @@ do_rm_work () {
done
}
addtask rmall after do_rm_work
do_rmall[recrdeptask] = "do_rm_work"
do_rmall() {
:
}
addtask rm_work before do_build
addtask rm_work after do_populate_staging

View File

@ -1,7 +1,7 @@
DEPENDS += "python-scons-native"
scons_do_compile() {
${STAGING_BINDIR_NATIVE}/scons PREFIX=${prefix} prefix=${prefix} || \
${STAGING_BINDIR_NATIVE}/scons PREFIX=${prefix} prefix=${prefix} || \
oefatal "scons build execution failed."
}

View File

@ -22,11 +22,16 @@ def get_siteinfo_list(d):
targetinfo = {\
"armeb-linux": "endian-big bit-32 common-glibc arm-common",\
"armeb-linux-gnueabi": "endian-big bit-32 common-glibc arm-common armeb-linux",\
"armeb-linux-uclibc": "endian-big bit-32 common-uclibc arm-common",\
"armeb-linux-uclibcgnueabi": "endian-big bit-32 common-uclibc arm-common armeb-linux-uclibc",\
"arm-linux": "endian-little bit-32 common-glibc arm-common",\
"arm-linux-gnueabi": "endian-little bit-32 common-glibc arm-common arm-linux",\
"arm-linux-uclibc": "endian-little bit-32 common-uclibc arm-common",\
"arm-linux-uclibcgnueabi": "endian-little bit-32 common-uclibc arm-common arm-linux-uclibc",\
"avr32-linux": "endian-big bit-32 common-glibc avr32-common",\
"avr32-linux-uclibc": "endian-big bit-32 common-uclibc avr32-common",\
"bfin-uclinux-uclibc": "endian-little bit-32 common-uclibc bfin-common",\
"i386-linux": "endian-little bit-32 common-glibc ix86-common",\
"i486-linux": "endian-little bit-32 common-glibc ix86-common",\
"i586-linux": "endian-little bit-32 common-glibc ix86-common",\
@ -38,8 +43,9 @@ def get_siteinfo_list(d):
"mipsel-linux": "endian-little bit-32 common-glibc",\
"mipsel-linux-uclibc": "endian-little bit-32 common-uclibc",\
"powerpc-darwin": "endian-big bit-32 common-darwin",\
"powerpc-linux": "endian-big bit-32 common-glibc",\
"powerpc-linux-uclibc": "endian-big bit-32 common-uclibc",\
"ppc-linux": "endian-big bit-32 common-glibc powerpc-common",\
"powerpc-linux": "endian-big bit-32 common-glibc powerpc-common",\
"powerpc-linux-uclibc": "endian-big bit-32 common-uclibc powerpc-common",\
"sh3-linux": "endian-little bit-32 common-glibc sh-common",\
"sh4-linux": "endian-little bit-32 common-glibc sh-common",\
"sh4-linux-uclibc": "endian-little bit-32 common-uclibc sh-common",\
@ -49,6 +55,7 @@ def get_siteinfo_list(d):
if target in targetinfo:
info = targetinfo[target].split()
info.append(target)
info.append("common")
return info
else:
bb.error("Information not available for target '%s'" % target)

View File

@ -1,5 +1,3 @@
SRC_DISTRIBUTEDIR ?= "${DEPLOY_DIR}/sources"
inherit src_distribute
# SRC_DIST_LOCAL possible values:
@ -7,7 +5,7 @@ inherit src_distribute
# symlink symlinks the files from ${A} to the distributedir
# move+symlink moves the files into distributedir, and symlinks them back
SRC_DIST_LOCAL ?= "move+symlink"
SRC_DISTRIBUTEDIR ?= "${DEPLOY_DIR}/sources"
SRC_DISTRIBUTECOMMAND () {
s="${SRC}"
if [ ! -L "$s" ] && (echo "$s"|grep "^${DL_DIR}"); then

View File

@ -371,6 +371,10 @@ addhandler tinderclient_eventhandler
python tinderclient_eventhandler() {
from bb import note, error, data
from bb.event import NotHandled
if e.data is None:
return NotHandled
do_tinder_report = data.getVar('TINDER_REPORT', e.data, True)
if do_tinder_report and do_tinder_report == "1":
tinder_do_tinder_report(e)

View File

@ -6,8 +6,9 @@
HOMEPAGE = "http://www.xfce.org"
LICENSE = "LGPL-2"
DEPENDS += "startup-notification"
SRC_URI = "http://www.us.xfce.org/archive/xfce-${PV}/src/${PN}-${PV}.tar.gz"
SRC_URI = "http://www.us.xfce.org/archive/xfce-${PV}/src/${PN}-${PV}.tar.bz2"
inherit autotools