From 6e4f48a748a6c6ed73e68db307eaca5cec7ebc7c Mon Sep 17 00:00:00 2001 From: Steve Sakoman Date: Wed, 5 Aug 2009 15:23:05 -0700 Subject: gconf.bbclass: adjust the ordering of things so that a package pkg_postinst_append is executed after the class postinst. This is important since recipes like gpanel need to to execute gconftool-2 --load after the gconf class code has processed the schema info --- classes/gconf.bbclass | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'classes') diff --git a/classes/gconf.bbclass b/classes/gconf.bbclass index 99f33e433a..47df06329b 100644 --- a/classes/gconf.bbclass +++ b/classes/gconf.bbclass @@ -45,9 +45,10 @@ python populate_packages_append () { if schemas != []: bb.note("adding gconf postinst and prerm scripts to %s" % pkg) bb.data.setVar('SCHEMA_FILES', " ".join(schemas), d) - postinst = bb.data.getVar('pkg_postinst_%s' % pkg, d, 1) or bb.data.getVar('pkg_postinst', d, 1) - if not postinst: - postinst = '#!/bin/sh\n' + postinst = '#!/bin/sh\n' + pkgpostinst = bb.data.getVar('pkg_postinst_%s' % pkg, d, 1) or bb.data.getVar('pkg_postinst', d, 1) + if pkgpostinst: + postinst += pkgpostinst postinst += bb.data.getVar('gconf_postinst', d, 1) bb.data.setVar('pkg_postinst_%s' % pkg, postinst, d) prerm = bb.data.getVar('pkg_prerm_%s' % pkg, d, 1) or bb.data.getVar('pkg_prerm', d, 1) -- cgit v1.2.3 From 6c47435bdb4abb5e5c4831ff774fe2c604d3aadf Mon Sep 17 00:00:00 2001 From: Steve Sakoman Date: Thu, 6 Aug 2009 12:49:09 -0700 Subject: image.bbclass: fix bug in lingua code (code wasn't spitting entries like fr-fr and thus locale-fr packages were bing omitted) --- classes/image.bbclass | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/image.bbclass b/classes/image.bbclass index 385043bfc7..f7afbab81e 100644 --- a/classes/image.bbclass +++ b/classes/image.bbclass @@ -243,8 +243,10 @@ if [ -e ${IMAGE_ROOTFS}/usr/bin/opkg-cl ] ; then ${OPKG} list_installed | awk '{print $1}' |sort | uniq > /tmp/installed-packages for i in $(cat /tmp/installed-packages | grep -v locale) ; do - for translation in ${IMAGE_LINGUAS} $(echo ${IMAGE_LINGUAS} | awk -F_ '{print $1}'); do + for translation in ${IMAGE_LINGUAS}; do + translation_split=$(echo ${translation} | awk -F '-' '{print $1}') echo ${i}-locale-${translation} + echo ${i}-locale-${translation_split} done done | sort | uniq > /tmp/wanted-locale-packages -- cgit v1.2.3 From a394010d4405423dd117e67e872513caafc1d0b7 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 9 Aug 2009 01:55:39 -0700 Subject: sanity.bbclass: Correct typo to refer to PACKAGE_EXTRA_ARCHS We were using EXTRA_PACKAGE_ARCHS which was sort of misleading if you started to search for this variable. It was a typo hence fixed as obvious. Signed-off-by: Khem Raj --- classes/sanity.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/sanity.bbclass b/classes/sanity.bbclass index 29624c3f78..83c03299bf 100644 --- a/classes/sanity.bbclass +++ b/classes/sanity.bbclass @@ -185,7 +185,7 @@ def check_sanity(e): archs = data.getVar('PACKAGE_ARCHS', e.data, True).split() for arch in archs: if archs.count(arch) != 1: - messages = messages + "Error, Your PACKAGE_ARCHS field contains duplicates. Perhaps you set EXTRA_PACKAGE_ARCHS twice accidently through some tune file?\n" + messages = messages + "Error, Your PACKAGE_ARCHS field contains duplicates. Perhaps you set PACKAGE_EXTRA_ARCHS twice accidently through some tune file?\n" break if messages != "": -- cgit v1.2.3 From 1708207a54e1195d43fb412a3bbef9aa7135fce1 Mon Sep 17 00:00:00 2001 From: Denys Dmytriyenko Date: Wed, 5 Aug 2009 13:06:32 -0400 Subject: kernel.bbclass: introduce MODULES_IMAGE_BASE_NAME Similar to KERNEL_IMAGE_BASE_NAME, allow overwriting from a recipe Signed-off-by: Denys Dmytriyenko Acked-by: Henning Heinold --- classes/kernel.bbclass | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/kernel.bbclass b/classes/kernel.bbclass index b4987608ed..3ee7f53a29 100644 --- a/classes/kernel.bbclass +++ b/classes/kernel.bbclass @@ -510,6 +510,7 @@ addtask uboot_mkimage before do_install after do_compile KERNEL_IMAGE_BASE_NAME ?= "${KERNEL_IMAGETYPE}-${PV}-${PR}-${MACHINE}" KERNEL_IMAGE_SYMLINK_NAME ?= "${KERNEL_IMAGETYPE}-${MACHINE}" +MODULES_IMAGE_BASE_NAME ?= modules-${PV}-${PR}-${MACHINE} do_deploy() { install -d ${DEPLOY_DIR_IMAGE} @@ -517,7 +518,7 @@ do_deploy() { package_stagefile_shell ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_BASE_NAME}.bin if [ -d "${D}/lib" ]; then - tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${PV}-${PR}-${MACHINE}.tgz -C ${D} lib + tar -cvzf ${DEPLOY_DIR_IMAGE}/${MODULES_IMAGE_BASE_NAME}.tgz -C ${D} lib fi cd ${DEPLOY_DIR_IMAGE} -- cgit v1.2.3 From b0393327217ccb3fbc911e389713c7595cd76391 Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Wed, 12 Aug 2009 23:43:02 +0200 Subject: base.bbclass: ftp.matrix.com.br no longer exists * Acked-By: Holger Freyther * Acked-by: Phil Blundell --- classes/base.bbclass | 1 - 1 file changed, 1 deletion(-) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index ef6c0abf8f..5363e5c69f 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1279,7 +1279,6 @@ ${DEBIAN_MIRROR} ftp://ftp.es.debian.org/debian/pool ${DEBIAN_MIRROR} ftp://ftp.se.debian.org/debian/pool ${DEBIAN_MIRROR} ftp://ftp.tr.debian.org/debian/pool ${GNU_MIRROR} ftp://mirrors.kernel.org/gnu -${GNU_MIRROR} ftp://ftp.matrix.com.br/pub/gnu ${GNU_MIRROR} ftp://ftp.cs.ubc.ca/mirror2/gnu ${GNU_MIRROR} ftp://sunsite.ust.hk/pub/gnu ${GNU_MIRROR} ftp://ftp.ayamura.org/pub/gnu -- cgit v1.2.3 From 7861be0ddd3e7a8c1ea0d6f26daa651efe4c9481 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Mon, 17 Aug 2009 15:41:48 +0200 Subject: package_tar.bbclass: Do not set IMAGE_PKGTYPE to unbreak parsing image.bbclass is trying to inherit package_${IMAGE_PKGTYPE} and this will fail because a rootfs_tar.bbclass doesn't exist. When planning to build images one needs to inherit package_ipk, package_rpm or package_deb in addition to INHERIT += "package_tar". Signed-off-by: Holger Hans Peter Freyther Acked-by: Philip Balister --- classes/package_tar.bbclass | 2 -- 1 file changed, 2 deletions(-) (limited to 'classes') diff --git a/classes/package_tar.bbclass b/classes/package_tar.bbclass index cb70a5fae8..a0eacf27f5 100644 --- a/classes/package_tar.bbclass +++ b/classes/package_tar.bbclass @@ -1,7 +1,5 @@ inherit package -IMAGE_PKGTYPE ?= "tar" - python package_tar_fn () { import os from bb import data -- cgit v1.2.3 From ad0ba478018ac64598b6701df5a79b1f71f9b58f Mon Sep 17 00:00:00 2001 From: Rolf Leggewie Date: Fri, 14 Aug 2009 16:01:10 +0200 Subject: base.bbclass: introduce OE source mirror network as last resort for do_fetch Updating recipes and checksums.ini for vanishing upstream hosts or simple restructuring can quickly become a chore for OE devs if taken seriously. The OE user experience suffers severely when at any given point in time 4 to 5 recipes on average fail do_fetch for a simple image. The solution is for OE to provide its own caching of upstream sources. mirrors.openembedded.org is a swarm of possibly incomplete source mirrors provided by the community and load-balanced via DNS round robin. They act as a first line of defense and lower bandwidth load on melo which hosts sources.openembedded.org. The melo mirror aims to have a complete copy of free-to-publish sources used by the current org.oe.dev branch. More information at http://wiki.openembedded.net/index.php/Sources_mirror Acked-by: Holger Freyther Acked-by: Chris Larson --- classes/base.bbclass | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 5363e5c69f..51648dae92 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -1312,6 +1312,10 @@ ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://gd.tuwien.ac.at/utils/adm ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://sunsite.ualberta.ca/pub/Mirror/lsof/ ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/ ftp://the.wiretapped.net/pub/security/host-security/lsof/ http://www.apache.org/dist http://archive.apache.org/dist +ftp://.*/.* http://mirrors.openembedded.org/ +https?$://.*/.* http://mirrors.openembedded.org/ +ftp://.*/.* http://sources.openembedded.org/ +https?$://.*/.* http://sources.openembedded.org/ } -- cgit v1.2.3 From aea9acb329d715db851c1bed8506c3d0f9b42ae1 Mon Sep 17 00:00:00 2001 From: Chris Larson Date: Fri, 10 Jul 2009 11:27:31 -0700 Subject: Let the distro control whether we include hostap or madwifi. - Add base_ifelse convenience function to base.bbclass. - Replace all conditionals in the recipes relating to hostap and madwifi to look for their name in COMBINED_FEATURES rather than looking for specific buses (pci, pcmcia). - Change the default COMBINED_FEATURES to enable: - madwifi, when: - distro has pci, wifi, and madwifi in its features - machine has pci in its features - hostap, when: - 'wifi' and 'hostap' are in distro features - either 'pci' or 'pcmcia' are in both distro and machine features Signed-off-by: Chris Larson --- classes/base.bbclass | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index 51648dae92..aed927404a 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -159,6 +159,12 @@ def base_read_file(filename): return f.read().strip() return None +def base_ifelse(condition, iftrue = True, iffalse = False): + if condition: + return iftrue + else: + return iffalse + def base_conditional(variable, checkvalue, truevalue, falsevalue, d): import bb if bb.data.getVar(variable,d,1) == checkvalue: -- cgit v1.2.3 From ac729cee6058e9e601af4869874213ccd129c732 Mon Sep 17 00:00:00 2001 From: Chris Larson Date: Tue, 7 Jul 2009 15:19:07 -0700 Subject: base.bbclass: catch bb.MalformedUrl in do_fetch. Signed-off-by: Chris Larson --- classes/base.bbclass | 3 +++ 1 file changed, 3 insertions(+) (limited to 'classes') diff --git a/classes/base.bbclass b/classes/base.bbclass index aed927404a..598a7bb77f 100644 --- a/classes/base.bbclass +++ b/classes/base.bbclass @@ -620,6 +620,9 @@ python base_do_fetch() { except bb.fetch.NoMethodError: (type, value, traceback) = sys.exc_info() raise bb.build.FuncFailed("No method: %s" % value) + except bb.MalformedUrl: + (type, value, traceback) = sys.exc_info() + raise bb.build.FuncFailed("Malformed URL: %s" % value) try: bb.fetch.go(localdata) -- cgit v1.2.3 From e20e2ebb2a22138227b1420e625b8df8593c51b9 Mon Sep 17 00:00:00 2001 From: Chris Larson Date: Thu, 18 Jun 2009 12:41:50 -0700 Subject: package_rpm: don't run against native/cross recipes, explicitly In the past, it only avoided adding the rpm-native/fakeroot-native deps if PACKAGES is empty, but unfortunately some native recipes have PACKAGES set to non-empty, so let's explicitly check for native/cross. Signed-off-by: Chris Larson --- classes/package_rpm.bbclass | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/package_rpm.bbclass b/classes/package_rpm.bbclass index 9755bf1d2d..13cb8773af 100644 --- a/classes/package_rpm.bbclass +++ b/classes/package_rpm.bbclass @@ -210,7 +210,9 @@ python do_package_rpm () { python () { import bb - if bb.data.getVar('PACKAGES', d, True) != '': + if bb.data.getVar('PACKAGES', d, True) != '' and \ + not bb.data.inherits_class('native', d) and \ + not bb.data.inherits_class('cross', d): deps = (bb.data.getVarFlag('do_package_write_rpm', 'depends', d) or "").split() deps.append('rpm-native:do_populate_staging') deps.append('fakeroot-native:do_populate_staging') -- cgit v1.2.3 From 6b86d4060be13734848bcda7bc52760765baeafe Mon Sep 17 00:00:00 2001 From: Chris Larson Date: Wed, 15 Jul 2009 11:00:27 -0700 Subject: devshell.bbclass: set a default for XAUTHORITY and export DBUS_SESSION_BUS_ADDRESS. Signed-off-by: Chris Larson --- classes/devshell.bbclass | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/devshell.bbclass b/classes/devshell.bbclass index 2944dbbfc2..9327b55d0a 100644 --- a/classes/devshell.bbclass +++ b/classes/devshell.bbclass @@ -4,7 +4,8 @@ do_devshell[dirs] = "${S}" do_devshell[nostamp] = "1" export DISPLAY -export XAUTHORITY +export DBUS_SESSION_BUS_ADDRESS +export XAUTHORITY ?= "${HOME}/.Xauthority" devshell_do_devshell() { export TERMWINDOWTITLE="Bitbake Developer Shell" -- cgit v1.2.3 From ee09ed852dd3e6a831a9ae5c31f260a4a9057645 Mon Sep 17 00:00:00 2001 From: Chris Larson Date: Thu, 28 May 2009 15:27:31 -0700 Subject: src_distribute*.bbclass: cleanup, revamp parts, distribute all sources. - Kill the big shell function with the case statement used in _local in favor of a set of bitbake variables, with the appropriate one selected as SRC_DISTRIBUTECOMMAND. - Add and use SRC_DISTRIBUTE_DLONLY to toggle distribution of all sources versus just those downloaded to DL_DIR. This variable expects to be set to an integer, anything but 0 will enable dlonly operation. This is disabled by default. - Add a more sanely named distribute_sources_all, and make distsrcall depend on it, for compatibility. - By default, distributes the sources into ${SRC_DISTRIBUTEDIR}/${LIC}/${PN}/. - Move some _local specific bits, like use of SRC_DISTRIBUTEDIR, out of the main class. - Set a "LIC" var along with the "SRC" when running SRC_DISTRIBUTECOMMAND, to facilitate the above. Signed-off-by: Chris Larson --- classes/src_distribute.bbclass | 41 +++++++++++++++++-------- classes/src_distribute_local.bbclass | 58 ++++++++++++++++++++---------------- 2 files changed, 60 insertions(+), 39 deletions(-) (limited to 'classes') diff --git a/classes/src_distribute.bbclass b/classes/src_distribute.bbclass index 30b2670011..3a033b9673 100644 --- a/classes/src_distribute.bbclass +++ b/classes/src_distribute.bbclass @@ -1,29 +1,44 @@ +SRC_DISTRIBUTE_DLONLY ?= "0" SRC_DISTRIBUTECOMMAND[func] = "1" + +addtask distribute_sources before do_build after do_fetch python do_distribute_sources () { + import os, re, bb + l = bb.data.createCopy(d) bb.data.update_data(l) - licenses = (bb.data.getVar('LICENSE', d, 1) or "unknown").split() - sources_dir = bb.data.getVar('SRC_DISTRIBUTEDIR', d, 1) - import re + licenses = (bb.data.getVar('LICENSE', d, 1) or "unknown").split() for license in licenses: for entry in license.split("|"): for url in ((bb.data.getVar('SRC_URI', d, 1) or '').split()): bb.fetch.init([url], d) s = bb.fetch.localpath(url, d) s = re.sub(';.*$', '', s) + + try: + dlonly = int(d.getVar("SRC_DISTRIBUTE_DLONLY", 1)) + except ValueError: + raise bb.build.FuncFailed("Invalid value for SRC_DISTRIBUTE_DLONLY: expected integer.") + if dlonly: + dldir = os.path.realpath(d.getVar("DL_DIR", 1) or "") + if dldir and not \ + os.path.realpath(s).startswith(dldir + os.path.sep): + continue + cmd = bb.data.getVar('SRC_DISTRIBUTECOMMAND', d, 1) if not cmd: - raise bb.build.FuncFailed("Unable to distribute sources, SRC_DISTRIBUTECOMMAND not defined") - bb.data.setVar('SRC', s, d) - bb.data.setVar('SRC_DISTRIBUTEDIR', "%s/%s" % (sources_dir, entry), d) - bb.build.exec_func('SRC_DISTRIBUTECOMMAND', d) + raise bb.build.FuncFailed("Unable to distribute sources, SRC_DISTRIBUTECOMMAND not set") + bb.debug(2, "srcdist: running %s" % cmd) + bb.data.setVar('SRC', os.path.normpath(s), l) + bb.data.setVar('LIC', entry, l) + bb.build.exec_func('SRC_DISTRIBUTECOMMAND', l) } -addtask distribute_sources before do_build after do_fetch +addtask distribute_sources_all after do_distribute_sources +do_distribute_sources_all[recrdeptask] = "do_distribute_sources" +do_distribute_sources_all[nostamp] = "1" -addtask distsrcall after do_distribute_sources -do_distsrcall[recrdeptask] = "do_distribute_sources" -base_do_distsrcall() { - : -} +# compatability wrapper +addtask distsrcall after do_distribute_sources_all +do_distsrcall[nostamp] = "1" diff --git a/classes/src_distribute_local.bbclass b/classes/src_distribute_local.bbclass index 5f0cef5bec..ed58ed14e1 100644 --- a/classes/src_distribute_local.bbclass +++ b/classes/src_distribute_local.bbclass @@ -1,31 +1,37 @@ inherit src_distribute -# SRC_DIST_LOCAL possible values: -# copy copies the files from ${A} to the distributedir -# 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 - : - else - exit 0; - fi - mkdir -p ${SRC_DISTRIBUTEDIR} - case "${SRC_DIST_LOCAL}" in - copy) - test -e $s.md5 && cp -f $s.md5 ${SRC_DISTRIBUTEDIR}/ - cp -f $s ${SRC_DISTRIBUTEDIR}/ - ;; - symlink) - test -e $s.md5 && ln -sf $s.md5 ${SRC_DISTRIBUTEDIR}/ - ln -sf $s ${SRC_DISTRIBUTEDIR}/ - ;; - move+symlink) - mv $s ${SRC_DISTRIBUTEDIR}/ - ln -sf ${SRC_DISTRIBUTEDIR}/`basename $s` $s - ;; - esac +SRC_DISTRIBUTECOMMAND[dirs] = "${SRC_DISTRIBUTEDIR}/${LIC}/${PN}" + +# symlinks the files to the SRC_DISTRIBUTEDIR +SRC_DISTRIBUTECOMMAND-symlink () { + test -e ${SRC}.md5 && ln -sf ${SRC}.md5 . + ln -sf ${SRC} . +} + +# copies the files to the SRC_DISTRIBUTEDIR +SRC_DISTRIBUTECOMMAND-copy () { + test -e ${SRC}.md5 && cp -f ${SRC}.md5 . + cp -f ${SRC} . +} + +# moves the files to the SRC_DISTRIBUTEDIR and symlinks them back +SRC_DISTRIBUTECOMMAND-move+symlink () { + if ! [ -L ${SRC} ]; then + mv ${SRC} . + ln -sf $PWD/`basename ${SRC}` ${SRC} + if [ -e ${SRC}.md5 ]; then + mv ${SRC}.md5 . + ln -sf $PWD/`basename ${SRC}.md5` ${SRC}.md5 + fi + fi +} + +#SRC_DISTRIBUTECOMMAND = "${@str(d.getVar('SRC_DISTRIBUTECOMMAND-%s' % d.getVar('SRC_DIST_LOCAL', 1), 1))}" +python () { + if d.getVar("SRC_DISTRIBUTECOMMAND", 1) is None: + cmd = d.getVar("SRC_DISTRIBUTECOMMAND-%s" % d.getVar("SRC_DIST_LOCAL", 1), 0) + if cmd: + d.setVar("SRC_DISTRIBUTECOMMAND", cmd) } -- cgit v1.2.3 From a6a23f7369bf725b6acdf45a42967558b2221659 Mon Sep 17 00:00:00 2001 From: Chris Larson Date: Thu, 7 May 2009 13:37:09 -0700 Subject: src_distribute: force do_fetch execution in do_distribute_sources. Works around src_distribute failures with the use of packaged staging. Signed-off-by: Chris Larson --- classes/src_distribute.bbclass | 2 ++ 1 file changed, 2 insertions(+) (limited to 'classes') diff --git a/classes/src_distribute.bbclass b/classes/src_distribute.bbclass index 3a033b9673..7d75c9e16f 100644 --- a/classes/src_distribute.bbclass +++ b/classes/src_distribute.bbclass @@ -5,6 +5,8 @@ addtask distribute_sources before do_build after do_fetch python do_distribute_sources () { import os, re, bb + bb.build.exec_func("do_fetch", d) + l = bb.data.createCopy(d) bb.data.update_data(l) -- cgit v1.2.3 From 7ab4382774acd717e4dfe85ba74d06851dfb5247 Mon Sep 17 00:00:00 2001 From: Jeremy Puhlman Date: Tue, 16 Jun 2009 16:53:41 -0700 Subject: src_distribute_local: Change cp -f to cp -fr to account for directories. Signed-off-by: Jeremy Puhlman Signed-off-by: Chris Larson --- classes/src_distribute_local.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'classes') diff --git a/classes/src_distribute_local.bbclass b/classes/src_distribute_local.bbclass index ed58ed14e1..5cec2880aa 100644 --- a/classes/src_distribute_local.bbclass +++ b/classes/src_distribute_local.bbclass @@ -13,7 +13,7 @@ SRC_DISTRIBUTECOMMAND-symlink () { # copies the files to the SRC_DISTRIBUTEDIR SRC_DISTRIBUTECOMMAND-copy () { test -e ${SRC}.md5 && cp -f ${SRC}.md5 . - cp -f ${SRC} . + cp -fr ${SRC} . } # moves the files to the SRC_DISTRIBUTEDIR and symlinks them back -- cgit v1.2.3