Thread overview
setup-gcc.sh
Jun 07, 2013
eles
Jun 07, 2013
Iain Buclaw
Jun 07, 2013
Iain Buclaw
Jun 07, 2013
eles
Jun 07, 2013
Iain Buclaw
Jun 07, 2013
eles
June 07, 2013
Hello,

 What is the purpose of this code in setup-gcc.sh?

# 1. Remove d sources from d_gccsrc if already exist
test -h "$d_gccsrc/gcc/d" && rm "$d_gccsrc/gcc/d"
test -d "$d_gccsrc/libphobos" && rm -r "$d_gccsrc/libphobos"
if test -e "$d_gccsrc/gcc/d" -o -e "$d_gccsrc/libphobos"; then
    echo "error: cannot update gcc source, please remove D sources by hand."
    exit 1
fi

For example, the line

test -h "$d_gccsrc/gcc/d" && rm "$d_gccsrc/gcc/d"

should return 0 if $d_gccsrc/gcc/d both exists and is a symlink. The command fails if any of the two is not true, and the intended purpose is to remove the original D sources from the gcc package (that is, when the "d" folder exists, but is *not* a symlink).

However, if the "d" folder exists and is *not* a symlink, the exit code of "test" will be 1, that is the command will *not* succeed.

In that case, the "rm" part will not be executed, which destroys the purpose of it.

Do I miss something?


More, why testing for symlink-ness in the first place? Existing sources (or symlink towards them) should be deleted and, then, newly-provided sources should be provided, that's all. What if an existing symlink exists, but points to an outdated D source?
June 07, 2013
Slightly different question about setup-gcc.sh.

If you run it on the gcc-4.8.1 sources, having run it previously, you get the following error message:

	Reversed (or previously applied) patch detected!  Assume -R? [n]

... what's the correct response here? :-)
June 07, 2013
On 7 June 2013 13:55, Joseph Rushton Wakeling <joseph.wakeling@webdrake.net> wrote:
> Slightly different question about setup-gcc.sh.
>
> If you run it on the gcc-4.8.1 sources, having run it previously, you get the following error message:
>
>         Reversed (or previously applied) patch detected!  Assume -R? [n]
>
> ... what's the correct response here? :-)

You should run setup-gcc.sh with --update.  That skips applying the
patches (again)

--
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';
June 07, 2013
On 06/07/2013 04:05 PM, Iain Buclaw wrote:
> You should run setup-gcc.sh with --update.  That skips applying the
> patches (again)

Cool, thanks. :-)

June 07, 2013
On 7 June 2013 13:26, eles <eles@eles.com> wrote:
> Hello,
>
>  What is the purpose of this code in setup-gcc.sh?
>
> # 1. Remove d sources from d_gccsrc if already exist
> test -h "$d_gccsrc/gcc/d" && rm "$d_gccsrc/gcc/d"
> test -d "$d_gccsrc/libphobos" && rm -r "$d_gccsrc/libphobos"
> if test -e "$d_gccsrc/gcc/d" -o -e "$d_gccsrc/libphobos"; then
>     echo "error: cannot update gcc source, please remove D sources by hand."
>     exit 1
> fi
>
> For example, the line
>
> test -h "$d_gccsrc/gcc/d" && rm "$d_gccsrc/gcc/d"
>
> should return 0 if $d_gccsrc/gcc/d both exists and is a symlink. The command fails if any of the two is not true, and the intended purpose is to remove the original D sources from the gcc package (that is, when the "d" folder exists, but is *not* a symlink).
>
> However, if the "d" folder exists and is *not* a symlink, the exit code of "test" will be 1, that is the command will *not* succeed.
>
> In that case, the "rm" part will not be executed, which destroys the purpose of it.
>
> Do I miss something?
>
>
> More, why testing for symlink-ness in the first place? Existing sources (or symlink towards them) should be deleted and, then, newly-provided sources should be provided, that's all. What if an existing symlink exists, but points to an outdated D source?

The gcc/d folder is symlinked to the gdc sources, so any updates in gdc will reflect in the gcc/d tree.

--
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';
June 07, 2013
On Friday, 7 June 2013 at 14:07:27 UTC, Iain Buclaw wrote:
> On 7 June 2013 13:26, eles <eles@eles.com> wrote:
>
> The gcc/d folder is symlinked to the gdc sources, so any updates in
> gdc will reflect in the gcc/d tree.

I think there is a confusion. The code that I quoted used to workk with gcc-4.8 (4.8.0) source package of Debian/ubuntu, since it did *not* include a src/gcc/d/ subfolder and a src/libphobos/ subfolder.

Things changed when the package was updated to gcc-4.8.1, as the changelog show it:

http://ftp-master.metadata.debian.org/changelogs//main/g/gcc-4.8/gcc-4.8_4.8.1-2_changelog

"* Build D and libphobos packages from this source package."

That makes the gcc-4.8 (4.8.1) package to include a src/libphobos and a src/gcc/d folders. The code that I quoted in the beginning will fail with asking to manually remove the d sources form the gcc tree.

The setup-gcc.sh should be modified accordingly: it does not try to remove the folders libphobos/ and gcc/d, still complains about their presence afterwards.

BTW, what version of gdc does the gcc-4.8 (4.8.1) package ships with?


June 07, 2013
On 7 June 2013 16:28, eles <eles@eles.com> wrote:
> On Friday, 7 June 2013 at 14:07:27 UTC, Iain Buclaw wrote:
>>
>> On 7 June 2013 13:26, eles <eles@eles.com> wrote:
>>
>> The gcc/d folder is symlinked to the gdc sources, so any updates in gdc will reflect in the gcc/d tree.
>
>
> I think there is a confusion. The code that I quoted used to workk with gcc-4.8 (4.8.0) source package of Debian/ubuntu, since it did *not* include a src/gcc/d/ subfolder and a src/libphobos/ subfolder.
>

Me and Matthias did this deliberately to make maintenance easier.


> Things changed when the package was updated to gcc-4.8.1, as the changelog show it:
>
> http://ftp-master.metadata.debian.org/changelogs//main/g/gcc-4.8/gcc-4.8_4.8.1-2_changelog
>
> "* Build D and libphobos packages from this source package."
>
> That makes the gcc-4.8 (4.8.1) package to include a src/libphobos and a src/gcc/d folders. The code that I quoted in the beginning will fail with asking to manually remove the d sources form the gcc tree.
>
> The setup-gcc.sh should be modified accordingly: it does not try to remove the folders libphobos/ and gcc/d, still complains about their presence afterwards.
>

So you must remove these by hand.  If it doesn't give that error to you, let me know.  =)


> BTW, what version of gdc does the gcc-4.8 (4.8.1) package ships with?
>
>

It is the current development snapshot as of 1st June 2013... or there abouts.

--
Iain Buclaw

*(p < e ? p++ : p) = (c & 0x0f) + '0';
June 07, 2013
On Friday, 7 June 2013 at 16:07:46 UTC, Iain Buclaw wrote:
> On 7 June 2013 16:28, eles <eles@eles.com> wrote:
>> On Friday, 7 June 2013 at 14:07:27 UTC, Iain Buclaw wrote:
>>>
>>> On 7 June 2013 13:26, eles <eles@eles.com> wrote:
>>>
> So you must remove these by hand.  If it doesn't give that error to
> you, let me know.  =)

Shouldn't be better to replace those lines:

test -h "$d_gccsrc/gcc/d" && rm "$d_gccsrc/gcc/d"
test -d "$d_gccsrc/libphobos" && rm -r "$d_gccsrc/libphobos"

with:

rm -rf "$d_gccsrc/gcc/d"
rm -rf "$d_gccsrc/libphobos"

?