[m-rev.] For review: Pull request 4.
Julien Fischer
jfischer at opturion.com
Wed Jan 9 15:23:39 AEDT 2013
On Wed, Jan 9, 2013 at 3:23 PM, Paul Bone <paul at bone.id.au> wrote:
> On Wed, Jan 09, 2013 at 12:50:24AM +1100, Julien Fischer wrote:
>> On Wed, Jan 9, 2013 at 12:40 AM, Paul Bone <paul at bone.id.au> wrote:
>> >
>> > Nikolay Orlyuk has submitted these four patches for review via github.
>> >
>> > The first three are concerned with installation, paths and the DESTDIR
>> > variable. The forth fixes an issue with parallel builds.
>> >
>> > I'm happy to review the first three, as I introduced the DESTDIR variable.
>> > Can someone review the last one?
>>
>> See my comments in the bug database re: bug #273. The reason for copying
>> the files from the mdcomp directory rather than just linking them normally is
>> because in debugging grades the versions in the slice and deep
>> profiling directories
>> need to be compiled differently.
>>
>> The problem here is caused by attempting to build the compiler from
>> scratch by doing
>>
>> $ make PARALLEL=-jN
>>
>> The parallel build should work without problems if you do
>>
>> $ mmake depend
>> $ mmake -jN
>>
>> instead, since it is the depend target that responsible for copying the files
>> from the mdbcomp directory. (This is of course precisely what INSTALL{git,_CVS)
>> says you should do**.)
>>
>> Invoking make instead of mmake should really be reserved for compiling
>> the source
>> distribution IMO. The problem obviously won't exist for the source
>> dist. since all the files have
>> already been copied.
>>
>> In short, this change would break our ability to test some grades and
>> can be worked around
>> anyway.
>>
>
> It turns out there's a really simple fix for the race condition, and it
> keeps the structure of the makefiles the same. I will prepare a full patch for
> this.
>
> diff --git a/deep_profiler/Mmakefile b/deep_profiler/Mmakefile
> index c43fc09..703c4f9 100644
> --- a/deep_profiler/Mmakefile
> +++ b/deep_profiler/Mmakefile
> @@ -121,17 +121,25 @@ Mercury.modules: DEEP_FLAGS
> .PHONY: all
> all: $(MDBCOMP_MODULES) $(ALL_DEEP_MODULES) $(TAGS_FILE_EXISTS)
>
> +# We use the sentinel file .mdbcomp_modules to avoid the race condition that
> +# exists because the rule would normally be invoked for each of the mdbcomp
> +# modules. However, we also need to use the no-op action '@' to allow make
> +# to see that the timestamps on the $(MDBCOMP_MODULES) have changed and that
> +# other things may need rebuilding.
> +$(MDBCOMP_MODULES): .mdbcomp_modules
> + @
> +
> # We need to start by turning write permission on for each copied file
> # in case some exist, but we need to ignore errors in case some don't exist.
> # The exit 0 is to prevent make itself from printing a message about the
> # (ignored) failure of an action.
> #
> # We could modify the action here to copy only the changed files.
> -
> -$(MDBCOMP_MODULES): $(MDBCOMP_ORIG_MODULES)
> +.mdbcomp_modules : $(MDBCOMP_ORIG_MODULES)
> - at chmod a+w $(MDBCOMP_MODULES) > /dev/null 2>&1; exit 0
> cp $(MDBCOMP_ORIG_MODULES) .
> @chmod a-w $(MDBCOMP_MODULES)
> + touch $@
>
> #-----------------------------------------------------------------------------#
Ok, that addresses the problem I had with the original patch.
Cheers,
Julien.
More information about the reviews
mailing list