#@--------------------------------------------------------------------
#@TYPE: Distribution
#@NAME: KaeilOS(R) - http://www.kaeilos.com
#@DESCRIPTION: KaeilOS Linux Distribution for Kernel 2.6 based devices
#@MAINTAINER: Marco Cavallini <m.cavallini@koansoftware.com>
#@VERSION: 23-10-2009
#
# KaeilOS is a registered trade mark of KOAN - Bergamo - Italia
# Product website : http://www.KaeilOS.com
#
# Use this at your own risk, we welcome bugreports filed at 
#    http://bugs.openembedded.net
#@--------------------------------------------------------------------

#DISTRO_VERSION = "2009.1"
DISTRO_VERSION = "2009.1-test-${DATE}"
DISTRO_REVISION = "1"
DISTRO_PR = ".5"

OLDEST_KERNEL ?= "2.6.16"

#build staging from packages
INHERIT += "packaged-staging"

require conf/distro/include/sane-srcdates.inc
require conf/distro/include/sane-srcrevs.inc
require conf/distro/include/kaeilos-2009-preferred-versions.inc
require conf/distro/include/preferred-opie-versions-1.2.4.inc

#Images built can have to modes:
# 'debug': empty rootpassword, strace included
# 'release' no root password, no strace and gdb by default
DISTRO_TYPE ?= "debug"
#DISTRO_TYPE = "release"

# Set the toolchain type (internal, external) and brand (generic, csl etc.)
TOOLCHAIN_TYPE ?= "internal"
TOOLCHAIN_BRAND ?= ""

# Ship just basic locale by default. Locales are big (~1Mb uncompr.), so
# shipping some adhoc subset will be still useless and size burden for
# users of all other languages/countries. Instead, worth to make it easy
# to install additional languages: installer/wizard + metapackages which
# will RRECOMMEND as much as possible content for a given language
# (locales, UI transalations, help, etc. - useless for pros, but really 
# helpful for common users).
# Also, it appears that no locales fit in 16Mb for now. "C" locale rules!
IMAGE_LINGUAS = '${@base_less_or_equal("ROOT_FLASH_SIZE", "16", "", "en-us", d)}'

# increase inode/block ratio for ext2 filesystem 
EXTRA_IMAGECMD_ext2 = "-i 4096"

# set feed path variables
FEED_BASEPATH = "feeds/unstable/${ANGSTROM_PKG_FORMAT}/${LIBC}/"


#The angstrom-mirrors.bbclass should have everything, but we can use this as a fallback
CVS_TARBALL_STASH ?= "\
		     http://www.angstrom-distribution.org/unstable/sources/ \
		    "

#Make sure we use 2.6 on machines with a 2.4/2.6 selector
KERNEL = "kernel26"
MACHINE_KERNEL_VERSION = "2.6"
PCMCIA_MANAGER = "pcmciautils"

#Preferred version for the kernel on various machines
PREFERRED_VERSION_linux-handhelds-2.6 ?= "2.6.21-hh20"

#Initramfs for kernels
#KERNEL_INITRAMFS_DIR = "${TMPDIR}/deploy/uclibc/images/${MACHINE}/"
#KERNEL_INITRAMFS_PATH = "${KERNEL_INITRAMFS_DIR}/$(readlink ${KERNEL_INITRAMFS_DIR}initramfs-bootmenu-image-${MACHINE}.cpio.gz)"

#This is unrelated to the kernel version, but userspace apps (e.g. HAL) require a recent version to build against
PREFERRED_VERSION_linux-libc-headers 	= "2.6.23"

# see into glibc-package.bbclass : added KaeilOS hack supporting glibc 2.9
PREFERRED_VERSION_glibc 		?= "2.9"
PREFERRED_VERSION_glibc-initial 	?= "2.9"

PREFERRED_VERSION_uclibc        	?= "0.9.30"
PREFERRED_VERSION_uclibc-initial	?= "0.9.30"

# Preferred provider for virtual/psplash
# This enforces a specific brand to be used, in our case the angstrom
# one. In case you want to change the logo or something like that we
# suggest you to create another recipe (e.g: psplash-<brand>) for that
# and add that into your image.
# You can also opt to change or override this line, but that isn't
# needed because psplash is using update-alternatives.
#PREFERRED_PROVIDER_virtual/psplash               ?= "psplash-kaeilos"

PREFERRED_PROVIDER_avahi = "avahi"
PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb-compat"
PREFERRED_PROVIDER_virtual/gail    ?= "gtk+"

PREFERRED_PROVIDER_libfribidi = "fribidi"

#powerpc needs additional patches to gcc
ANGSTROM_GCC_VERSION_ppc405 		?= "4.1.1"
ANGSTROM_GCC_VERSION_xilinx-ml403	?= "4.1.1"
ANGSTROM_GCC_VERSION_xilinx-ml403	?= "4.1.1"

# Blackfin has its own gcc
ANGSTROM_GCC_VERSION_bfin			= "4.1.2"

# Uncomment this if want need to build an armv7a kernel with CSL toolchain (<2.6.27 don't boot with mainline gcc)
#KERNEL_CCSUFFIX_armv7a= "-4.2.1+csl-arm-2007q3-53"

#avr32 only has support for gcc 4.2.2
ANGSTROM_GCC_VERSION_avr32		?= "4.2.2"

#Everybody else can just use this: 
ANGSTROM_GCC_VERSION                     ?= "4.3.3"

ANGSTROM_BINUTILS_VERSION                ?= "2.18"
ANGSTROM_BINUTILS_VERSION_armv7a         ?= "2.18.50.0.7"

PREFERRED_VERSION_binutils               ?= "${ANGSTROM_BINUTILS_VERSION}"
PREFERRED_VERSION_binutils-cross         ?= "${ANGSTROM_BINUTILS_VERSION}"
PREFERRED_VERSION_binutils-cross-sdk     ?= "${ANGSTROM_BINUTILS_VERSION}"

PREFERRED_VERSION_gcc                    ?= "${ANGSTROM_GCC_VERSION}"
PREFERRED_VERSION_gcc-cross              ?= "${ANGSTROM_GCC_VERSION}"
PREFERRED_VERSION_gcc-cross-sdk          ?= "${ANGSTROM_GCC_VERSION}"
PREFERRED_VERSION_gcc-cross-initial      ?= "${ANGSTROM_GCC_VERSION}"
PREFERRED_VERSION_gcc-cross-intermediate ?= "${ANGSTROM_GCC_VERSION}"

#avr32 only has patches for binutils 2.17 in OE
PREFERRED_VERSION_binutils_avr32 = "2.17"
PREFERRED_VERSION_binutils-cross_avr32 = "2.17"
PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17"

# Toolchain virtuals:
require conf/distro/include/toolchain-${TOOLCHAIN_TYPE}.inc

# hostap stuff, we prefer the in-kernel modules, but those don't work for all machines
PREFERRED_PROVIDER_hostap-conf                      ?= "hostap-conf"
PREFERRED_PROVIDER_hostap-modules_h2200             ?= "hostap-modules"
PREFERRED_PROVIDER_hostap-modules_hx4700            ?= "hostap-modules"

PREFERRED_PROVIDER_virtual/db           ?= "db"
PREFERRED_PROVIDER_virtual/db-native    ?= "db-native"
PREFERRED_PROVIDER_virtual/libsdl       ?= "libsdl-x11"
PREFERRED_PROVIDER_virtual/libx11       ?= "libx11"

# Others:
PREFERRED_PROVIDER_dbus-glib             = "dbus-glib"
PREFERRED_PROVIDER_esound               ?= "pulseaudio"
PREFERRED_PROVIDER_gconf                ?= "gconf"
PREFERRED_PROVIDER_gnome-vfs            ?= "gnome-vfs"
PREFERRED_PROVIDER_gnome-vfs-plugin-file ?= "gnome-vfs"
PREFERRED_PROVIDER_tslib                ?= "tslib"
PREFERRED_PROVIDER_tslib-conf           ?= "tslib"
PREFERRED_PROVIDER_libgpewidget         ?= "libgpewidget"
PREFERRED_PROVIDER_ntp                  ?= "ntp"
PREFERRED_PROVIDER_hotplug               = "udev"
PREFERRED_PROVIDER_opkg                 ?= "opkg-nogpg"
PREFERRED_PROVIDER_libxss                = "libxss"
PREFERRED_PROVIDER_bluez-utils-dbus      = "bluez-utils"
PREFERRED_PROVIDER_bluez-libs            = "bluez4"
PREFERRED_PROVIDER_bluez-utils           = "bluez4"
PREFERRED_PROVIDER_util-linux            = "util-linux-ng"

# see recipes/bluez/bluez4*.bb for further dependencies of this setting 
ANGSTROM_BLACKLIST_pn-bluez-libs	= "bluez-libs 3.x has been replaced by bluez4"
ANGSTROM_BLACKLIST_pn-bluez-utils	= "bluez-utils 3.x has been replaced by bluez4"

# we don't ship gtk-directfb by default
PREFERRED_PROVIDER_gtk+                   ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-ani  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-gif  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-ico  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-png  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-ras  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-tga  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm  ?= "gtk+"
PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm  ?= "gtk+"

# QT stuff:
# There are several flavours of qt4x11 in OE, so lets pick one that is buildable for everyone
PREFERRED_PROVIDER_qt4x11 ?= "qt4-x11-free"

#Silence a warning during parsing
PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"

#This is needed to get a correct PACKAGE_ARCH for packages that have PACKAGE_ARCH = ${MACHINE_ARCH}
ARM_ABI ?= "${@['','oabi'][bb.data.getVar('MACHINE',d) in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
require conf/distro/include/kaeilos.inc



# If we're using an .ipk based rootfs, we want to have opkg-nogpg installed so postinst script can run
# We also take this opportunity to inject angstrom-version and the feed configs into the rootfs
IPKG_VARIANT = "opkg-nogpg angstrom-version ${ANGSTROM_FEED_CONFIGS}"

# Select xserver-xorg as default, since kdrive has been EOL'ed
XSERVER ?= "xserver-xorg xf86-input-evdev xf86-input-keyboard xf86-input-mouse xf86-video-fbdev" 
PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
PREFERRED_PROVIDER_xserver ?= "xserver-xorg"

# do some task-base stuff here

# Prefer bluez4, it's needed for things like connman. Bluez4 is also largely backward compatible with
# bluez 3.x
DISTRO_BLUETOOTH_MANAGER = "\
	blueprobe \
	bluez4 \
   "

# We want to ship extra debug utils in the rootfs when doing a debug build 
DEBUG_APPS ?= ""
DEBUG_APPS += '${@base_conditional("DISTRO_TYPE", "release", "", "strace procps",d)}'

# KaeilOS want to ship some extra stuff. This should be moved into task-base eventually
# contains ipkg specific stuff as well :(
DISTRO_EXTRA_RDEPENDS += "\
    update-modules \
    kaeilos-version \
    opkg-nogpg opkg-collateral ${ANGSTROM_FEED_CONFIGS} \
    util-linux-ng-mount util-linux-ng-umount \
    ${DEBUG_APPS} angstrom-libc-fixup-hack \
    "
#   ${@base_contains("MACHINE_FEATURES", "screen", "psplash", "",d)} \   

# This also hooks into task-base, but isn't mandatory.
# If you don't want parts of this in your task-base using images you can put this in the image recipe:
# BAD_RECOMMENDATIONS = "avahi-daemon avahi-autoipd"
# Note that BAD_RECOMMENDATIONS is a feature of rootfs_ipk.bbclass, not angstrom
# kernel modules: ship fs modules so you can mount stuff and af-packet so networking works
# avahi: makes finding your device on the network a lot easier
# openssh-sftp-server: provides sftp which combined with avahi makes it real easy to use things like sshfs
# psplash-angstrom: angstrom branded psplash, you can add your own psplash-foo to an image, it uses update-alternatives
# DEBUG_APPS: ship strace and procpc to make simple debugging a lot easier
DISTRO_EXTRA_RRECOMMENDS += " \
    kernel-module-vfat \
    kernel-module-ext2 \
    kernel-module-ext3 \
    kernel-module-af-packet \
    avahi-daemon \
    avahi-autoipd \
    openssh-sftp-server \
    ${DEBUG_APPS} \
    "

SPLASH ?= "psplash"

ARM_INSTRUCTION_SET_pn-uclibc = "arm"
ARM_INSTRUCTION_SET_pn-uclibc-initial = "arm"