From: "Vasiliy Molostov" <molostoff@gmail.com>
Subject: Re: how to tell gnatmake to send executables to a different directory when compiling multi source?
Date: Mon, 30 Jul 2012 04:20:15 +0400
Date: 2012-07-30T04:20:15+04:00 [thread overview]
Message-ID: <op.wh8gj1ckka8ora@aspire.local> (raw)
In-Reply-To: wcc6296cpvg.fsf@shell01.TheWorld.com
Robert A Duff <bobduff@shell01.theworld.com> писал(а) в своём письме Sun,
29 Jul 2012 23:46:11 +0400:
> "Vasiliy Molostov" <molostoff@gmail.com> writes:
>
> Well, I don't see any need for "war" here. ;-)
> But anyway, I agree with Ludovic that recursive make
> causes a lot of trouble, and is best avoided.
I think that the problem is not in "recursive", but in the fact that GNAT
produces objects in other way than usual gnu/gcc tools do, I mean that not
every input ada (gnat ada) source file refers to the corresponding output
object file, and thus breaks makefile "predefined rules" approach used
with C or other gcc related stuff, where each input source file type
corresponds to its output file type. And this cause dependency
inconsistency (in terms usual to makefile related tools), and one of the
issues here is well expressed by Ludovic in his debian-ada policy against
ALI files problem.
But why the "recursive" is devil? Usual project contains many files that
needs to be built, not only source code, but data, man pages and docs,
configurations, all these are separate and usually built via recursive
makefiles. Why to name a good time-proven tool as devil? I see no reason,
only tendentious and imperatively expressed opinion.
> I can sympathize with the OP not wanting to learn about .gpr files
> for simple projects, but in that case, a simple 'make' file
> (non-recursive!) that invokes gnatmake can work well.
> If you can't figure out how to get gnatmake to put the executables
> where you want them, you can write some 'make' rules to copy them there.
>
>> It is well known that appropriate tool utilization can give appropriate
>> result, and vise versa.
>
> I'm not sure what you mean by "vice versa" in this case, but appropriate
> tool *choice* is also a good idea.
What I meant by vise versa: not well known tool utilization can give
inappropriate
result, and vise versa.
> Learning about .gpr files isn't
> trivial, but it won't kill you. And you might want to look at
> 'gprbuild', which can deal with multi-language projects -- .gpr
> is not just for Ada.
How about recursive gprbuild? How about distributed gprbuild?
>> Most open-source gnu c software are built using autotools with recursive
>> make use, and it is ok.
>
> I disagree that it is OK.
I doubt. I prefer makefiles in any kind, just because its widely used in
unices, where most open-source software lives. Difficulty rises when
someone comes with its own interface and tools, this makes things less
compatible against environment. It is just an opinion, but I sure here is
nothing devil or just anti-devil.
> In my experience, recursive make leads to
> complications and inefficiencies. For small projects, the
> inefficiencies might not matter, but I once converted a large
> project from recursive make to non-recursive, and went from
> over-10-hour builds to under-1-hour builds in the from-scratch
> case, and even better speedups in the incremental re-build case.
How much time spending postgres sources build, what do you think?
There are many recursive makefiles (at least up to 8.4) and I see no
inefficiencies there. How about building it distributed across several
hosts?
> Even for small projects, the difference between "few seconds" and
> "go get a cup of coffee" involves forgetting one's train
> of thought.
I doubt that makeing or building binaries can provide some possibility for
thoughts about it. It is a final phase before 'make install'.
> As for autotools, I think they are a nightmare, and totally unnecessary
> for a language like Ada. Gnat itself is built that way (because it's
> part of gcc), and it's nothing but trouble.
No. very good, while used appropriately, especially for C related stuff.
For Ada with gnat these are not appropriate enough of course, but it is
not due to
recursively calling make, or autotools by itself. They are just other
tools for doing another things, and nothing else. Regarding autotools and
ada, take a look at AWS source - I dont know why but you still need to
'configure' it. Would you like to know why?
> Hmm. I don't know any good way to deal with ``"inter-goal" dependencies
> between subprojects'' via recursive 'make'. Could you please outline
> your techniques?
I mean dependencies between subprojects (makefile "goals") defined for
recursive make passes (directories with makefile, indeed), they become
problematic when things depend on a subset of output files, not augmented
in a component as a common standalone dependant unit and thus are not
independent and atomic part of overall build process. This indeed can lead
to an inconvenient problem of incomplete dependency "decomposition". But I
suppose that this way make is used in unusual way as intermediate and
temporary solution, so it can not be considered as devil. Just it can not
handle all possible cases by itself, as every tool does - a hand and a
head is required.
> I don't much like 'make', but if I can learn some
> better 'make' techniques, that's a good thing, since I have to deal
> with it all the time!
It is better to get some large (old-school) open source tar-ball (I have
learned it via compiling suse distribution sources under solaris,
including gnat gcc jgnat and the rest of 4+Gb raw source code) and at the
same time to read gnu makefile reference manual - after two-three days of
"sick" reading any well-motivated person can find himself well-grounded to
do anything with makefiles.
Also I think that debian is not good enough to learn usual "good"
makefiles, since many debian package maintainers try to reach their
package and subcomponent compatibility and do incorporating changes
(patches and build instructions) that break build process defined by
authors (this is a need, due to debian packaging and build bots
environment, and is not a voluntary decision, but not always correct
indeed). It is why better to get native tarball and all its dependencies,
and it is why fsf gnat differs from debian gnat and from what we can get
from libre.adacore. Why these last four do not use the same gprbuild
project file everywhere?
--
Написано в почтовом клиенте браузера Opera: http://www.opera.com/mail/
next prev parent reply other threads:[~2012-08-07 7:14 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-29 9:31 how to tell gnatmake to send executables to a different directory when compiling multi source? Nasser M. Abbasi
2012-07-29 10:00 ` Dmitry A. Kazakov
2012-07-29 11:35 ` Nasser M. Abbasi
2012-07-29 12:29 ` Patrick
2012-07-29 13:02 ` Nasser M. Abbasi
2012-07-29 13:49 ` Ludovic Brenta
2012-07-29 14:09 ` Nasser M. Abbasi
2012-07-29 15:35 ` Ludovic Brenta
2012-07-29 15:42 ` Patrick
2012-07-29 16:41 ` Ludovic Brenta
2012-07-29 16:46 ` Patrick
2012-07-29 17:35 ` Vasiliy Molostov
2012-07-29 19:40 ` Dmitry A. Kazakov
2012-07-29 22:22 ` Vasiliy Molostov
2012-07-29 19:46 ` Robert A Duff
2012-07-30 0:20 ` Vasiliy Molostov [this message]
2012-07-30 3:01 ` Nasser M. Abbasi
2012-07-30 4:48 ` Nasser M. Abbasi
2012-07-30 21:05 ` Robert A Duff
2012-07-30 5:50 ` Dmitry A. Kazakov
2012-07-30 11:16 ` Vasiliy Molostov
2012-07-30 12:25 ` Georg Bauhaus
2012-07-30 12:59 ` Vasiliy Molostov
2012-07-30 14:07 ` Georg Bauhaus
2012-07-30 13:03 ` Nasser M. Abbasi
2012-07-30 14:02 ` Georg Bauhaus
2012-07-30 19:40 ` J-P. Rosen
2012-08-01 7:32 ` Miles Bader
2012-08-01 9:37 ` Ludovic Brenta
2012-08-02 5:01 ` Miles Bader
2012-08-01 15:15 ` J-P. Rosen
2012-08-02 15:08 ` Robert A Duff
2012-08-02 16:37 ` J-P. Rosen
2012-07-30 19:50 ` Ludovic Brenta
2012-07-30 3:21 ` Nasser M. Abbasi
2012-07-30 8:19 ` Simon Wright
2012-07-30 6:12 ` Dirk Heinrichs
2012-07-30 6:40 ` Ludovic Brenta
2012-07-30 10:31 ` Vasiliy Molostov
2012-07-30 11:05 ` Ludovic Brenta
2012-07-30 11:33 ` Simon Wright
2012-07-30 12:16 ` Vasiliy Molostov
2012-07-30 12:48 ` Ludovic Brenta
2012-07-30 13:09 ` Vasiliy Molostov
2012-07-30 6:06 ` Dirk Heinrichs
2012-07-29 12:31 ` Nasser M. Abbasi
2012-07-29 13:46 ` Ludovic Brenta
2012-07-29 14:15 ` Simon Wright
2012-07-29 13:54 ` Dmitry A. Kazakov
2012-07-29 14:16 ` Nasser M. Abbasi
2012-07-29 14:32 ` Dmitry A. Kazakov
2012-07-30 5:57 ` General purpose build tools (was: Re: how to tell gnatmake to send executables to a different directory when compiling multi source?) Dirk Heinrichs
2012-07-30 10:50 ` Vasiliy Molostov
2012-07-30 11:10 ` Ludovic Brenta
2012-07-30 12:39 ` Vasiliy Molostov
2012-08-30 10:49 ` General purpose build tools Stephen Leake
2012-07-29 18:33 ` how to tell gnatmake to send executables to a different directory when compiling multi source? björn lundin
2012-07-29 19:06 ` onox
2012-07-31 11:12 ` Patrick
2012-07-31 11:30 ` Dmitry A. Kazakov
2012-07-31 11:31 ` Dmitry A. Kazakov
2012-07-31 11:34 ` Patrick
2012-07-31 12:33 ` Ludovic Brenta
2012-07-31 15:14 ` Patrick
2012-07-31 16:04 ` Ludovic Brenta
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox