From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <440304D2.2030302@domain.hid> Date: Mon, 27 Feb 2006 14:55:30 +0100 From: Philippe Gerum MIME-Version: 1.0 Subject: Re: [Xenomai-core] Xenomai patch packaging concerns References: <200602231224.38519.rlenglet@domain.hid> <200602242056.15814.rlenglet@domain.hid> <17407.3428.428108.146818@domain.hid> <200602251413.10410.rlenglet@domain.hid> <4402C1FC.6060005@domain.hid> In-Reply-To: <4402C1FC.6060005@domain.hid> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: "Xenomai life and development \(bug reports, patches, discussions\)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Philippe Gerum Cc: xenomai@xenomai.org Philippe Gerum wrote: > Romain Lenglet wrote: > >> Gilles Chanteperdrix wrote: >> >>> Romain Lenglet wrote: >>> > + while read f; do >>> > + f=`echo $f | cut -d/ -f2-` >>> > + d=`dirname $f` >>> > + if test "x$output_patch" = "x"; then >>> > + mkdir -p $linux_tree/$link_dir/$d && \ >>> > + rm -f $linux_tree/$link_dir/$f && \ >>> >>> Could you remove this rm ? It causes Xenomai to be rebuilt >>> everytime the prepare-kernel is run. And when using configure >>> option --enable-linux-build, prepare-kernel is run for every >>> build. >> >> >> >> OK, here is a corrected patch. >> > > Applied, thanks. > This patch temporarily reverted; it currently breaks. >> >> >> ------------------------------------------------------------------------ >> >> --- xenomai/ChangeLog 2006-02-25 13:43:31.193371768 +0900 >> +++ xenomai-new2/ChangeLog 2006-02-25 14:08:09.657611040 +0900 >> @@ -1,3 +1,12 @@ >> +2006-02-25 Romain Lenglet >> + >> + * scripts/prepare-kernel.sh: Added option to generate a diff file >> + instead of actually modifying the Linux source tree. Cleanup to not >> + link / copy files for other architectures than the built >> architecture, >> + and to not link / copy some files twice. Links to Xenomai files >> in the >> + Linux tree are no more created by default if they already exists. >> Added >> + --forcelink option to force the creation of links. >> + >> 2006-02-24 Philippe Gerum >> >> * ksrc/nucleus/pod.c: Make sure that >> --- xenomai/CREDITS 2006-02-22 10:28:53.229253976 +0900 >> +++ xenomai-new2/CREDITS 2006-02-25 13:34:54.115979480 +0900 >> @@ -80,7 +80,7 @@ >> >> N: Romain Lenglet >> E: >> -D: Man pages. >> +D: Man pages, and patch generation script changes. >> >> N: Heikki Lindholm >> E: holindho@domain.hid >> --- xenomai/scripts/prepare-kernel.sh 2006-02-24 19:48:17.038186464 >> +0900 >> +++ xenomai-new2/scripts/prepare-kernel.sh 2006-02-25 >> 14:07:30.838512440 +0900 >> @@ -1,38 +1,122 @@ >> #! /bin/bash >> set -e >> >> -do_links() { >> - ( if test -x $2; then >> - cd $2 && >> - find . \( -name Makefile -o -name $config_file -o -name >> '*.[chS]' \) | >> - while read f; do >> - if test ! -e $1/$f; then rm -f $f; fi >> - done; else true; fi && >> - cd $1 && >> - find . \( -name Makefile -o -name $config_file -o -name >> '*.[chS]' \) | >> - while read f; do >> - f=`echo $f | cut -d/ -f2-` >> - d=`dirname $f` >> - mkdir -p $2/$d && ln -sf $1/$f $2/$f >> - done ) >> +patch_copytempfile() { >> + file="$1" >> + if ! test -f "$temp_tree/$file"; then >> + subdir=`dirname "$file"` >> + mkdir -p "$temp_tree/$subdir" >> + cp "$linux_tree/$file" "$temp_tree/$file" >> + fi >> } >> >> -usage='usage: prepare-kernel --linux= >> --adeos= [--arch=]' >> +patch_append() { >> + file="$1" >> + if test "x$output_patch" = "x"; then >> + realfile="$linux_tree/$file" >> + else >> + patch_copytempfile "$file" >> + realfile="$temp_tree/$file" >> + fi >> + cat >> "$realfile" >> +} >> + >> +patch_ed() { >> + file="$1" >> + if test "x$output_patch" = "x"; then >> + realfile="$linux_tree/$file" >> + else >> + patch_copytempfile "$file" >> + realfile="$temp_tree/$file" >> + fi >> + ed -s "$realfile" > /dev/null >> +} >> + >> +patch_link() { >> + recursive="$1" # "r" or "n" >> + link_makefiles="$2" # "m" or "n" >> + target_dir="$3" >> + link_dir="$4" >> + >> + ( >> + recursive_opt="" >> + directorytype_opt="" >> + if test x$recursive = xr; then >> + directorytype_opt="\( -type d -mindepth 1 \) -o" >> + else >> + recursive_opt="-maxdepth 1" >> + fi >> + link_makefiles_opt="" >> + if test x$link_makefiles = xm; then >> + link_makefiles_opt="-name Makefile -o" >> + fi >> + >> + if test "x$output_patch" = "x"; then >> + cd $linux_tree/$link_dir && >> + find . $recursive_opt \( $directorytype_opt \ >> + $link_makefiles_opt -name $config_file -o -name >> '*.[chS]' \) | >> + while read f; do >> + if test ! -e $xenomai_root/$target_dir/$f; then rm >> -Rf $f; fi >> + done; else true; fi && >> + fi >> + >> + cd $xenomai_root/$target_dir && >> + find . $recursive_opt \ >> + \( $link_makefiles_opt -name $config_file -o -name >> '*.[chS]' \) | >> + while read f; do >> + f=`echo $f | cut -d/ -f2-` >> + d=`dirname $f` >> + if test "x$output_patch" = "x"; then >> + mkdir -p $linux_tree/$link_dir/$d >> + if test x$forcelink = x1 -o ! -h >> $linux_tree/$link_dir/$f; then >> + ln -sf $xenomai_root/$target_dir/$f >> $linux_tree/$link_dir/$f >> + fi >> + else >> + mkdir -p $temp_tree/$link_dir/$d >> + cp $xenomai_root/$target_dir/$f $temp_tree/$link_dir/$f >> + fi >> + done >> + ) >> + >> +} >> + >> +generate_patch() { >> + ( >> + cd "$temp_tree" >> + find . -type f | >> + while read f; do >> + diff -Naurd "$linux_tree/$f" "$f" | >> + sed -e "s,^--- ${linux_tree}/\.\(/.*\)$,--- linux\1," \ >> + -e "s,^+++ \.\(/.*\)$,+++ linux-patched\1," >> + done >> + ) >> +} >> + >> + >> +usage='usage: prepare-kernel --linux= >> --adeos= [--arch=] [--outpatch= ] >> [--forcelink]' >> me=`basename $0` >> >> while test $# -gt 0; do >> case "$1" in >> --linux=*) >> - linux_tree=`echo $1|sed -e 's,--linux=\\(.*\\)$,\\1,g'`; >> + linux_tree=`echo $1|sed -e 's,^--linux=\\(.*\\)$,\\1,g'` >> linux_tree=`eval "echo $linux_tree"` >> ;; >> --adeos=*) >> - adeos_patch=`echo $1|sed -e 's,--adeos=\\(.*\\)$,\\1,g'`; >> + adeos_patch=`echo $1|sed -e 's,^--adeos=\\(.*\\)$,\\1,g'` >> adeos_patch=`eval "echo $adeos_patch"` >> ;; >> --arch=*) >> - linux_arch=`echo $1|sed -e 's,--arch=\\(.*\\)$,\\1,g'`; >> + linux_arch=`echo $1|sed -e 's,^--arch=\\(.*\\)$,\\1,g'` >> + ;; >> + --outpatch=*) >> + output_patch=`echo $1|sed -e 's,^--outpatch=\\(.*\\)$,\\1,g'` >> + shift >> + temp_tree=`echo $1|sed -e 's,^--tempdir=\\(.*\\)$,\\1,g'` >> ;; >> + --forcelink) >> + forcelink=1 >> + ;; >> --verbose) >> verbose=1 >> ;; >> @@ -41,8 +125,8 @@ >> exit 0 >> ;; >> *) >> - echo "$me: unknown flag: $1" >> - echo "$usage" >> + echo "$me: unknown flag: $1" >&2 >> + echo "$usage" >&2 >> exit 1 >> ;; >> esac >> @@ -82,6 +166,22 @@ >> exit 2 >> fi >> >> +# Create an empty output patch file, and initialize the temporary tree. >> +if test "x$output_patch" != "x"; then >> + >> + if test ! -d $temp_tree; then >> + echo "$me: $temp_tree (temporary tree) is not an existing >> directory" >> + exit 2 >> + fi >> + temp_tree=`cd $temp_tree && pwd` >> + >> + patchdir=`dirname $output_patch` >> + patchdir=`cd $patchdir && pwd` >> + output_patch=$patchdir/`basename $output_patch` >> + echo > "$output_patch" >> + >> +fi >> + >> # Infer the default architecture if unspecified. >> >> if test x$linux_arch = x; then >> @@ -159,13 +259,17 @@ >> >> linux_version="$linux_VERSION.$linux_PATCHLEVEL.$linux_SUBLEVEL$linux_EXTRAVERSION" >> >> >> +if test x$verbose = x1; then >> echo "Preparing kernel $linux_version in $linux_tree..." >> +fi >> >> if test -r $linux_tree/include/linux/ipipe.h; then >> + if test x$verbose = x1; then >> echo "Adeos found - bypassing patch." >> + fi >> elif test -r $linux_tree/include/linux/adeos.h; then >> - echo "$me: Deprecated Adeos (oldgen) support found in $linux_tree;" >> - echo "Upgrade required to Adeos/I-pipe (newgen)." >> + echo "$me: Deprecated Adeos (oldgen) support found in >> $linux_tree;" >&2 >> + echo "Upgrade required to Adeos/I-pipe (newgen)." >&2 >> exit 2 >> else >> if test x$adeos_patch = x; then >> @@ -191,7 +295,7 @@ >> curdir=$PWD >> cd $linux_tree && patch --dry-run -p1 -f < $adeos_patch || { >> cd $curdir; >> - echo "$me: Unable to patch kernel $linux_version with >> `basename $adeos_patch`." >> + echo "$me: Unable to patch kernel $linux_version with >> `basename $adeos_patch`." >&2 >> exit 2; >> } >> patch -p1 -f -s < $adeos_patch >> @@ -201,9 +305,11 @@ >> adeos_version=`grep '^#define.*IPIPE_ARCH_STRING.*"' >> $linux_tree/include/asm-$linux_arch/ipipe.h|sed -e 's,.*"\(.*\)"$,\1,'` >> >> if test \! x$adeos_version = x; then >> + if test x$verbose = x1; then >> echo "Adeos/$linux_arch $adeos_version installed." >> + fi >> else >> - echo "$me: $linux_tree has no Adeos support for $linux_arch" >> + echo "$me: $linux_tree has no Adeos support for $linux_arch" >&2 >> exit 2 >> fi >> >> @@ -218,22 +324,23 @@ >> config_file=Kconfig >> >> if ! grep -q XENOMAI $linux_tree/init/Kconfig; then >> - sed -e "s,@LINUX_ARCH@,$linux_arch,g" >> $xenomai_root/scripts/Kconfig.frag >> $linux_tree/init/Kconfig >> + sed -e "s,@LINUX_ARCH@,$linux_arch,g" >> $xenomai_root/scripts/Kconfig.frag | >> + patch_append init/Kconfig >> fi >> >> if ! grep -q CONFIG_XENOMAI >> $linux_tree/arch/$linux_arch/Makefile; then >> p="drivers-\$(CONFIG_XENOMAI) += arch/$linux_arch/xenomai/" >> - ( echo ; echo $p ) >> $linux_tree/arch/$linux_arch/Makefile >> + ( echo ; echo $p ) | patch_append arch/$linux_arch/Makefile >> fi >> >> if ! grep -q CONFIG_XENOMAI $linux_tree/drivers/Makefile; then >> p="obj-\$(CONFIG_XENOMAI) += xenomai/" >> - ( echo ; echo $p ) >> $linux_tree/drivers/Makefile >> + ( echo ; echo $p ) | patch_append drivers/Makefile >> fi >> >> if ! grep -q CONFIG_XENOMAI $linux_tree/kernel/Makefile; then >> p="obj-\$(CONFIG_XENOMAI) += xenomai/" >> - ( echo ; echo $p ) >> $linux_tree/kernel/Makefile >> + ( echo ; echo $p ) | patch_append kernel/Makefile >> fi >> ;; >> >> @@ -247,7 +354,7 @@ >> config_file=Config.in >> >> if ! grep -q CONFIG_XENO $linux_tree/Makefile; then >> - ed -s $linux_tree/Makefile > /dev/null <> + patch_ed Makefile <> /DRIVERS := \$(DRIVERS-y) >> ^r $xenomai_root/scripts/Modules.frag >> >> @@ -255,10 +362,10 @@ >> wq >> EOF >> fi >> - for defconfig_file in .config >> $linux_tree/arch/$linux_arch/defconfig; do >> - if test -w $defconfig_file; then >> - if ! grep -q CONFIG_XENO $defconfig_file; then >> - ed -s $defconfig_file > /dev/null <> + for defconfig_file in .config arch/$linux_arch/defconfig; do >> + if test -w $linux_tree/$defconfig_file; then >> + if ! grep -q CONFIG_XENO $linux_tree/$defconfig_file; then >> + patch_ed $defconfig_file <> $ >> r $xenomai_root/scripts/defconfig.frag >> . >> @@ -268,7 +375,7 @@ >> fi >> done >> if ! grep -q CONFIG_XENO $linux_tree/arch/$linux_arch/Makefile; then >> - ed -s $linux_tree/arch/$linux_arch/Makefile > /dev/null <> + patch_ed arch/$linux_arch/Makefile <> $ >> a >> >> @@ -281,7 +388,7 @@ >> EOF >> fi >> if ! grep -q CONFIG_XENO $linux_tree/drivers/Makefile; then >> - ed -s $linux_tree/drivers/Makefile > /dev/null <> + patch_ed drivers/Makefile <> /include \$(TOPDIR)\/Rules.make >> i >> mod-subdirs := xenomai >> @@ -292,7 +399,7 @@ >> EOF >> fi >> if ! grep -q CONFIG_XENO $linux_tree/kernel/Makefile; then >> - ed -s $linux_tree/kernel/Makefile > /dev/null <> + patch_ed kernel/Makefile <> /include \$(TOPDIR)\/Rules.make >> i >> mod-subdirs := xenomai >> @@ -304,7 +411,7 @@ >> EOF >> fi >> if ! grep -iq xenomai $linux_tree/arch/$linux_arch/config.in; then >> - ed -s $linux_tree/arch/$linux_arch/config.in > /dev/null <> + patch_ed arch/$linux_arch/config.in <> $ >> a >> >> @@ -321,7 +428,7 @@ >> >> *) >> >> - echo "$me: Unsupported kernel version >> $linux_VERSION.$linux_PATCHLEVEL.x" >> + echo "$me: Unsupported kernel version >> $linux_VERSION.$linux_PATCHLEVEL.x" >&2 >> exit 2 >> ;; >> >> @@ -331,15 +438,34 @@ >> # there, so that we don't pollute the Xenomai source tree with >> # compilation files. >> >> -do_links $xenomai_root/ksrc/arch/$xenomai_arch >> $linux_tree/arch/$linux_arch/xenomai >> -do_links $xenomai_root/ksrc $linux_tree/kernel/xenomai >> -do_links $xenomai_root/ksrc/drivers $linux_tree/drivers/xenomai >> -do_links $xenomai_root/include/asm-$xenomai_arch >> $linux_tree/include/asm-$linux_arch/xenomai >> -do_links $xenomai_root/include/asm-generic >> $linux_tree/include/asm-generic/xenomai >> -do_links $xenomai_root/include $linux_tree/include/xenomai >> +patch_link r m ksrc/arch/$xenomai_arch arch/$linux_arch/xenomai >> +patch_link n m ksrc/ kernel/xenomai >> +patch_link n m ksrc/arch kernel/xenomai/arch >> +patch_link r m ksrc/arch/generic kernel/xenomai/arch/generic >> +patch_link r m ksrc/nucleus kernel/xenomai/nucleus >> +patch_link r m ksrc/skins kernel/xenomai/skins >> +patch_link r m ksrc/drivers drivers/xenomai >> +patch_link r n include/asm-$xenomai_arch include/asm-$linux_arch/xenomai >> +patch_link r n include/asm-generic include/asm-generic/xenomai >> +patch_link n n include include/xenomai >> +for d in include/* ; do >> + if test -d $d -a -z "`echo $d | grep '^include/asm-'`"; then >> + destdir=`echo $d | sed -e >> 's,^\(include\)\(/.*\)$,\1/xenomai\2,'` >> + patch_link r n $d $destdir >> + fi >> +done >> >> -echo 'Links installed.' >> +if test "x$output_patch" != "x"; then >> + if test x$verbose = x1; then >> + echo 'Generating patch.' >> + fi >> + generate_patch > "$output_patch" >> +fi >> >> +if test x$verbose = x1; then >> +echo 'Links installed.' >> echo 'Build system ready.' >> +fi >> >> exit 0 >> + >> >> >> ------------------------------------------------------------------------ >> >> _______________________________________________ >> Xenomai-core mailing list >> Xenomai-core@domain.hid >> https://mail.gna.org/listinfo/xenomai-core > > > -- Philippe.