On 19 October 2013 19:20, Kay Schenk <kay.sch...@gmail.com> wrote: > On Fri, Oct 18, 2013 at 7:52 AM, Andre Fischer <awf....@gmail.com> wrote: > > > On 18.10.2013 15:58, janI wrote: > > > >> On 18 October 2013 15:00, Andre Fischer <awf....@gmail.com> wrote: > >> > >> On 18.10.2013 14:02, janI wrote: > >>> > >>> sd > >>>> > >>>> > >>>> On 18 October 2013 13:36, Andre Fischer <awf....@gmail.com> wrote: > >>>> > >>>> On 18.10.2013 11:32, janI wrote: > >>>> > >>>>> Hi. > >>>>> > >>>>>> due to the discussion in thread "Mentor a new build system", I have > >>>>>> made a > >>>>>> proposal for a central Makefile located in main. > >>>>>> > >>>>>> Hi Jan, > >>>>>> > >>>>> it is great that you are going to improve this part of the build > >>>>> system. > >>>>> But I think that we need more details about how the proposed build > >>>>> system > >>>>> works. Without them I can not really evaluate the proposal. > >>>>> > >>>>> First of all, I agree with juergens remarks that this should be > >>>>> > >>>> discussed > >>>> before implemented, hence the wiki page. > >>>> > >>>> Secondly this has nothing directly to do with the proposed build > system, > >>>> its a simple replacement of build.pl in the current system. > >>>> > >>>> Yes, that is how I understood it. I just did not know how to call > the > >>> build.pl replacement. > >>> > >>> > >>> > >>> I know that build.pl works, but having a Makefile in main, would make > >>>> us > >>>> one step closer on being compatible with the distros. To me this job > is > >>>> a > >>>> simple cleanup, not something we deadly need, but nice to have. > >>>> > >>>> > >>>> Some remarks regarding the missing options: > >>>> > >>>>> --from <module> > >>>>> This is one of the more important options and one that I use > >>>>> frequently > >>>>> (also in the form --all:<module>). > >>>>> Note that if you are in <moduleA> and call 'make --from > <moduleB>' > >>>>> then > >>>>> all modules are built > >>>>> a) which <moduleA> depends on > >>>>> b) but not those that <moduleB> depends on > >>>>> c) Both <moduleA> and <moduleB> are built. > >>>>> > >>>>> I have changed the documentation. > >>>>> > >>>> I use the --all:<module> myself very often, and have changed the > >>>> documentation, because it is of course supported. > >>>> > >>>> The difference is that you do the call in main, but that is a minor > >>>> detail > >>>> that can be easily corrected (have <module>/Makefile calling > >>>> main/Makefile. > >>>> > >>>> I have also changed documentation on --html due to juergens comments. > >>>> > >>>> I am not sure that we understand --from and --since in the same way > so > >>> I > >>> will try to explain what I think they do. > >>> > >>> Let's imagine that we have a simple project with modules A, B, C, D and > >>> E. > >>> where B depends on A, C on B, D on C, and E on D. > >>> A ' make all' would mean 'make E'. The dependencies would then lead to > >>> building modules A, B, C, D, E in this order. > >>> If I am in E and call 'make --from C' then only C, D, and E should be > >>> built. A 'make --since C' would only build D and E. > >>> > >>> If I am in D and call 'make --from B' then modules B, C, and D are > built. > >>> Call 'make --since B' to build only C and D. > >>> Note that 'make --from' accepts more than one module name (while 'make > >>> --all:<module>' does not). > >>> Note also that in the above case (stand in D, call 'make --from B') > >>> module > >>> A is not built, regardless of whether there are changes in A or not. > >>> Whereas a simple call to make (still standing in D) would build all > >>> modules that D depends on, directly or indirectly. Thus the options > >>> '--from' and '--since' exist to actively exclude modules from being > >>> built. > >>> > >>> The whole thing becomes a little bit more complicated with multiple > >>> options to '--from' (I never use '--since' and also don't know a valid > >>> use > >>> case so I will ignore it for now) and more complex dependencies then in > >>> the > >>> simple example above. Let's say that if we stand in instsetoo_native > and > >>> call 'make --from svx sfx2'. Note that svx depends on sfx2. This > would > >>> build svx, sfx2 and all modules that depend (directly or indirectly) on > >>> svx > >>> OR sfx2. > >>> > >>> got it, now I just have one problem, why would you not build the > >> dependent > >> modules, if they needed to be built, thats a scenario I dont understand. > >> With a central makefile, <module>/makefile will not be called so we do > not > >> waste cpu cycles. > >> > >> With the .done files, we know when a module was last built and all > modules > >> that depend it should be rebuilt which the rule > >> <module>.done : <module_depend>.done > >> > >> will ensure, so If we have A -> B -> C -> D > >> > >> I go in B, and call make, then when I go in D and make, B,C,D will be > >> made. > >> > >> If we have A -> B -> D C -> D > >> and do the same then only D will be made. > >> > >> So --from is not really saving anything ? > >> > > > > a) In your example you first go into B then, in a second step, into D. > > The '--from' option lets you do the same (well, not really the same, but > > see below) just from D. > > > > b) You go first to B and call make. This makes A, if necessary, then B. > > The making of A is exactly the thing that you want to prevent with the > > '--from' option. Go into D and call 'make --from B'. A is not built. > > > > c) After the discussion with you I am not sure if we still need --from > > because the two reasons I know for its existence my not be relevant with > > the new approach. > > > > c1) With the '--from' option you can tweak the dependency rules at > runtime > > (a bit). This allows you to exclude projects from being built when you > > know that that is not necessary. But from experience I know that can > lead > > to very subtle errors. Letting the system determine what to built is > > usually more reliable. > > > > c2) With build.pl a 'build --all' still builds every module on which the > > one you are standing in depends on. When those modules have been built > > previously, then no compilation takes place. But calling dmake for a > > couple of directories for close to 200 modules (when you stand in > > instsetoo_native) takes a lot of time (several minutes on Windows), even > > when no file has to be compiled. This wasteful way of doing nothing can > be > > prevented with the --from option. > > However, with the new approach and its .done flag files you can determine > > which modules need to be built much faster. You don't have to call dmake > > on directories that where already built. Hm, but this again, does only > > work if your .done files have dependencies on all relevant source files. > > That is something that is missing at least from my script. > > > > > > So, reasons for the existence of '--from' are a result of old/slow > > computers, slow files systems (still valid on Windows), missing global > > dependencies (which we now have for gbuild) and impatient developers. > > > Looking at what Jan has proposed and this discussion so far, I think we > should make some attempt at moving in this direction -- using standard > makefiles. > > Given this discussion, I do understand the additional flexibility of > build.pl, but I also wonder if the flexibility is worth it considering the > IDE tools new developers are likely to be familiar with. > > A complete build will take a while no matter what is used, depending on > your situation. I think this proposal has a lot of merit. >
Thx for the kind words. I have updated the wiki page, to reflect the specific make calls. and R1533869 shows my first version of the central Makefile https://svn.apache.org/repos/asf/openoffice/branches/capstone2013/main/Makefile you will see it contains the intermodule dependencies and nothing more. The setup in every module is kept in a Makefile in the respective module, so we have a clear seperation of module and intermodule dependencies. hope you like it. rgds jan I. > > > > > > > > > > >> > >> While this is easy to do with eg Perl I am not sure how to handle this > >>> with just a Makefile. The straightforward approach with handling > >>> <module>.done files does not work. And that is one of the reasons why > I > >>> don't think that (GNU) makefiles are a good solution for any problem. > >>> Most > >>> of us are used to program object oriented/imperative. Makefiles > require > >>> a > >>> declarative approach. Maybe the use of Perl is not such a bad idea. > >>> Maybe > >>> it would be better to reimplement build.pl with a lot fewer options > and > >>> with better readable code. > >>> > >>> I agree that makefiles are nowhere near a good solution to many of > these > >> problems, but its like windows, I dont like it, but everybody uses it. > >> > >> We could easily write a new build.pl, that also took care of the local > >> makefiles, but our build system would not be in the mainstream, and e.g. > >> the distros would not like to integrate AOO. > >> > >> I have over the last years followed research in building systems, and > >> there > >> are (sadly enough) nobody that tries a real object oriented aproach. > Also > >> if you look at packages like visual studio, QT, eclipse they all use the > >> principle of makefiles with declarative approach. > >> > >> So my simple question is, do we want to approach the main road > (makefiles > >> for unix, visual studio for windows/mac) or do we want to have better > but > >> non standard system. > >> > > > > Good analysis. Maybe I should answer with Faust: "Zwei Seelen wohnen, > > ach! in meiner Brust" (two souls alas! are dwelling in my breast). The > > pragmatist says to use the make. It is good enough for others, it is > good > > enough for use. > > On the other hand, when I start a new project I usually start with the > > question of what are the best tools for the problem at hand. And make > does > > not seem to be the first or the best answer. Look at our dmake or gbuild > > system. Both don't use make in a standard way. gmake even defines its > own > > language, object oriented and imperative, on top of the GNU make macros. > > That is, for me, an act of desperation. > > I have made experiments with an alternative approach, a domain specific > > language somewhat similar to Java. I personally like this approach > because > > a) it uses the paradigm that I already use when writing C++ code. That > > means that I can apply my existing knowledge to the build process and > that > > I don't have to remember all the tricks and pitfalls of makefiles. > > b) as expected it was much easier to handle file dependencies and > parallel > > processing of build jobs in Java than adding object orientation and > > imperative control flow to makefiles. > > > > If I had the time and if I would be the one working on it then I would > > prefer an non-Makefile approach. But maybe I am just suffering too much > > from one of the 'three great virtues of a programmer': hubris. > > > > You are the one who leads the build project changes, so you have to > decide > > which approach to use. I am not trying to make your life harder (than > > necessary), I am only trying to point out some of the pitfalls that I > have > > encountered in the past. And to prevent you from removing features that > I > > use :-) > > > > > > > > > >> rgds > >> jan I. > >> > >> Ps. its always refreshing to discuss with you, you often have an > >> alternative approach, which is not just a dream but doable. > >> > > > > Thanks. That makes two of us. > > > > Have a nice weekend, > > Andre > > > > > > > >> > >> -Andre > >>> > >>> > >>> --prepare > >>>> > >>>>> Also one option that is important for our every day work. Use > >>>>> case: > >>>>> You make changes in <module> and are not sure if these changes are > >>>>> compatible/incompatible. To be on the safe side you discard the > output > >>>>> of > >>>>> all depending modules. To save time you keep the output of all other > >>>>> modules. > >>>>> > >>>>> Often used together with '--from' like 'make --prepare --from > >>>>> svx' to > >>>>> prepare a build after making changes in svx. > >>>>> > >>>>> Documentation changed, funny thing is that svx does not clear > >>>>> correctly > >>>>> > >>>> on > >>>> my ubuntu build. > >>>> > >>>> > >>>> --since <module> > >>>> > >>>>> A variant of '--from'. The only difference is that <module> > >>>>> itself > >>>>> is > >>>>> not built. > >>>>> > >>>>> If your proposed approach is similar to what my script produces > >>>>> then > >>>>> it > >>>>> is not too difficult to support --from/--since. I made some > >>>>> experiments > >>>>> in > >>>>> this direction but was to lazy to finish them. > >>>>> > >>>>> My approach is very similar, but I failed to see how --since is > >>>>> > >>>> supported. > >>>> And question is if its real important. > >>>> > >>>> > >>>> --job > >>>> > >>>>> --pre_job > >>>>> --post_job > >>>>> These are sometimes handy to run a non-standard command for all > >>>>> modules. > >>>>> > >>>>> I have added them, they are by the way a good example why we need a > >>>>> > >>>> discussion I have never used them. > >>>> > >>>> However maybe the real discussion is "do we want to replace build and > >>>> have > >>>> a main/Makefile instead?" > >>>> > >>>> > >>>> > >>>> - I have not used the rest of the unsupported options and would not > >>>> miss > >>>> > >>>>> them. Others may have other sets of options that are important to > >>>>> them. > >>>>> > >>>>> > >>>>> Some general remarks: > >>>>> > >>>>> - Why keep one makefile per module? Why not put all the inter-module > >>>>> dependencies into one file (like my script does)? > >>>>> > >>>>> Ups, I did not explain that correctly, I propose 1 Makefile > >>>>> > >>>> "main/Makefile" > >>>> with all inter-module and 1 Makefile "<module>/Makefile" that today > just > >>>> will call the old makefiles as described in prj/build.lst > >>>> > >>>> - Why not use the oportunity to move (a part of) the build environment > >>>> out > >>>> > >>>> of the way to, say, build/ ? > >>>>> > >>>>> You have guessed my next step. > >>>>> > >>>> > >>>> - How are dependencies between modules handled (just the manual > >>>> > >>>>> dependencies from prj/build.lst or also the file dependencies > >>>>> introduced > >>>>> by > >>>>> gmake). > >>>>> > >>>>> See doc. on --from. Its done with <module>.done files > >>>>> > >>>> > >>>> - How is the output of the individual calls to dmake or GNU make > >>>> > >>>>> handled/made accessible. Ie. if there is a build error, how can I > look > >>>>> up > >>>>> the corresponding build output? > >>>>> > >>>>> see doc. script make_log > >>>>> > >>>> - Are the gmake makefiles included (run in the same process) or is > GNU > >>>> > >>>>> make started for them it its own process? > >>>>> > >>>>> For a start they would be called (own process), but its something > >>>>> where > >>>>> > >>>> I > >>>> have no strong opinions. > >>>> > >>>> Please (just to be sure), this proposal has nothing to do with the > >>>> students > >>>> work, its simply because I saw a positive discussion on removing > >>>> build.pl > >>>> , > >>>> and spent a couple of hours looking at it. If there is a preference > not > >>>> to > >>>> remove build.pl I will simply forget it. > >>>> > >>>> rgds > >>>> jan I. > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> Regards, > >>>>> Andre > >>>>> > >>>>> > >>>>> > >>>>> It has been roughly tested it, thanks to a clever utility from > andre. > >>>>> > >>>>>> As discussed build.pl contains a lot of options, which need to be > >>>>>> considered in a makefile. > >>>>>> > >>>>>> My suggestion is on > >>>>>> http://wiki.openoffice.org/******wiki/Build_System_Analysis:**< > http://wiki.openoffice.org/****wiki/Build_System_Analysis:**> > >>>>>> **<http://wiki.openoffice.org/****wiki/Build_System_Analysis:**< > http://wiki.openoffice.org/**wiki/Build_System_Analysis:**> > >>>>>> > > >>>>>> build.pl_versus_makefile<http:****//wiki.openoffice.org/wiki/****< > http://wiki.openoffice.org/wiki/**> > >>>>>> Build_System_Analysis:build.****pl_versus_makefile<http://** > >>>>>> wiki.openoffice.org/wiki/**Build_System_Analysis:build.** > >>>>>> pl_versus_makefile< > http://wiki.openoffice.org/wiki/Build_System_Analysis:build.pl_versus_makefile > > > >>>>>> > > >>>>>> > >>>>>> Please feel free to edit/comment on the page. I have reduced to > >>>>>> options > >>>>>> a > >>>>>> lot, and some of them might be in use. > >>>>>> > >>>>>> thanks in advance for your comments. > >>>>>> > >>>>>> > >>>>>> ------------------------------******--------------------------** > >>>>>> --** > >>>>>> > >>>>> --**--------- > >>>>> To unsubscribe, e-mail: dev-unsubscribe@openoffice.****a**pache.org< > >>>>> http://apache.org**> > >>>>> <dev-unsubscribe@**openoffice.**apache.org< > http://openoffice.apache.org> > >>>>> <dev-unsubscribe@**openoffice.apache.org< > dev-unsubscr...@openoffice.apache.org> > >>>>> > > >>>>> For additional commands, e-mail: dev-h...@openoffice.apache.org > >>>>> > >>>>> > >>>>> > >>>>> ------------------------------****----------------------------** > >>> --**--------- > >>> To unsubscribe, e-mail: dev-unsubscribe@openoffice.**a**pache.org< > http://apache.org> > >>> <dev-unsubscribe@**openoffice.apache.org< > dev-unsubscr...@openoffice.apache.org> > >>> > > >>> For additional commands, e-mail: dev-h...@openoffice.apache.org > >>> > >>> > >>> > > > > ------------------------------**------------------------------**--------- > > To unsubscribe, e-mail: dev-unsubscribe@openoffice.**apache.org< > dev-unsubscr...@openoffice.apache.org> > > > > For additional commands, e-mail: dev-h...@openoffice.apache.org > > > > > > > -- > > ------------------------------------------------------------------------------------------------- > MzK > > "Truth is stranger than fiction, but it is because Fiction is obliged > to stick to possibilities. Truth isn't." > -- "Following the Equator", Mark Twain >