* Org Build System (aka Makefile) @ 2012-07-15 20:37 Achim Gratz 2012-07-15 21:38 ` Bastien 2012-08-09 17:03 ` Achim Gratz 0 siblings, 2 replies; 30+ messages in thread From: Achim Gratz @ 2012-07-15 20:37 UTC (permalink / raw) To: emacs-orgmode At long last the promised documentation for the build system starts to materialize on Worg: http://orgmode.org/worg/dev/org-build-system.html It undoubtedly needs improvement, so please let me know where and/or add to it yourself. Thank you. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ DIY Stuff: http://Synth.Stromeko.net/DIY.html ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-07-15 20:37 Org Build System (aka Makefile) Achim Gratz @ 2012-07-15 21:38 ` Bastien 2012-08-09 17:03 ` Achim Gratz 1 sibling, 0 replies; 30+ messages in thread From: Bastien @ 2012-07-15 21:38 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Achim Gratz <Stromeko@nexgo.de> writes: > At long last the promised documentation for the build system starts to > materialize on Worg: > > http://orgmode.org/worg/dev/org-build-system.html Great. Thanks for writing this up! -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-07-15 20:37 Org Build System (aka Makefile) Achim Gratz 2012-07-15 21:38 ` Bastien @ 2012-08-09 17:03 ` Achim Gratz 2012-08-10 7:17 ` Bastien 1 sibling, 1 reply; 30+ messages in thread From: Achim Gratz @ 2012-08-09 17:03 UTC (permalink / raw) To: emacs-orgmode I've just pushed a change to the Makefile to more easily allow customization of compilation methods. See http://orgmode.org/worg/dev/org-build-system.html#sec-3-2-1 for what is available. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ SD adaptations for Waldorf Q V3.00R3 and Q+ V3.54R2: http://Synth.Stromeko.net/Downloads.html#WaldorfSDada ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-09 17:03 ` Achim Gratz @ 2012-08-10 7:17 ` Bastien 2012-08-12 13:56 ` Achim Gratz 2012-08-12 16:58 ` Samuel Wales 0 siblings, 2 replies; 30+ messages in thread From: Bastien @ 2012-08-10 7:17 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Hi Achim, Achim Gratz <Stromeko@nexgo.de> writes: > I've just pushed a change to the Makefile to more easily allow > customization of compilation methods. See > > http://orgmode.org/worg/dev/org-build-system.html#sec-3-2-1 > > for what is available. Thanks for taking care of this page. Please make the default "make" procedure display all warnings that the user would see by compiling Emacs itself. I know we disagree about this: you think that compiler warnings are for the developers, not for the users. I think the default "make" should send as much warnings as Emacs sends with its own default "make". Moreover, I think we don't know who is a developer and who is a user. For example, I'm a developer, Eric is a developer, and we both ignored that the current "make" was hiding warnings. Even developers sometimes don't run "make helpall" -- only those who wants to use something else than the default compilation method. If a user wants the compilation to go faster, he can always use another instruction (the current "make" -- renamed "make quiet"?) Thanks, -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-10 7:17 ` Bastien @ 2012-08-12 13:56 ` Achim Gratz 2012-08-12 18:56 ` Eric Schulte ` (2 more replies) 2012-08-12 16:58 ` Samuel Wales 1 sibling, 3 replies; 30+ messages in thread From: Achim Gratz @ 2012-08-12 13:56 UTC (permalink / raw) To: emacs-orgmode Bastien writes: > Please make the default "make" procedure display all warnings that the > user would see by compiling Emacs itself. That isn't even possible, you'd need to use Emacs' build system (which, btw gives inconsistent results for repeated compiles). > I know we disagree about this: you think that compiler warnings are for > the developers, not for the users. I think the default "make" should > send as much warnings as Emacs sends with its own default "make". You continue to misunderstand what I was saying or at least trying to say. The primary function of Org's build system is to, well, build Org with the minimum fuzz. That's what it was designed to do and that is what it does — it can do other things as well, but you'll have to configure it to do that. Getting more warnings is a secondary function, however useful they might be. Now, Emacs Lisp as a dynamic language is notoriously difficult in the static checks department (warnings are but a small part of that) and Emacs lacks functions to do this thoroughly in an automated manner. There is _no_ complete tool for doing dependency checks at the source level (I'd love to be proved wrong) for instance. Emacs does have elint since version 23, which is properly separated from building, but again, is still incomplete. I've added two compilation methods that use elint, but they certainly aren't for casual use — the first one takes 25 times as long as a simple build and the other one 275 times. > If a user wants the compilation to go faster, he can always use another > instruction (the current "make" -- renamed "make quiet"?) And by the same argument, everybody can just as well add the line _COMPILE_=single to local.mk if wanted. This gives _different_ warnings (and in general more), but it is still no substitute for static checks and testing. I'm not going to degrade the build performance for everyone to save a handful of people the bother of doing that. If you insist, do the change yourself (it's defined in default.mk). Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Wavetables for the Waldorf Blofeld: http://Synth.Stromeko.net/Downloads.html#BlofeldUserWavetables ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-12 13:56 ` Achim Gratz @ 2012-08-12 18:56 ` Eric Schulte 2012-08-12 20:41 ` Achim Gratz 2012-08-12 22:27 ` Bastien 2012-08-13 5:34 ` Bastien 2 siblings, 1 reply; 30+ messages in thread From: Eric Schulte @ 2012-08-12 18:56 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode >> I know we disagree about this: you think that compiler warnings are for >> the developers, not for the users. I think the default "make" should >> send as much warnings as Emacs sends with its own default "make". > > You continue to misunderstand what I was saying or at least trying to > say. The primary function of Org's build system is to, well, build Org > with the minimum fuzz. That's what it was designed to do and that is > what it does — it can do other things as well, but you'll have to > configure it to do that. > > Getting more warnings is a secondary function, however useful they might > be. But we certainly shouldn't (and currently aren't?) inhibit the display of any warnings when the default make is run. I was surprised to run make compile-source and see additional warnings which weren't shown during regular make. What is the difference between "make" and "make compile-source" which results in different warnings? > Now, Emacs Lisp as a dynamic language is notoriously difficult in the > static checks department (warnings are but a small part of that) and > Emacs lacks functions to do this thoroughly in an automated manner. > There is _no_ complete tool for doing dependency checks at the source > level (I'd love to be proved wrong) for instance. Emacs does have > elint since version 23, which is properly separated from building, but > again, is still incomplete. I've added two compilation methods that > use elint, but they certainly aren't for casual use — the first one > takes 25 times as long as a simple build and the other one 275 times. > After some time digging through the make files, it looks to me like one must edit the local.mk file to run these. I'd propose that they are added as a separate Makefile target (mentioned by "make help") so that they can be easily run. Very few people (users or developers) are willing to edit make configuration files. Perhaps these elint build options should be used to build when "make check" is run. If a user is willing to run the test suite they should be willing to endure a slower build for more thorough warnings. Best, -- Eric Schulte http://cs.unm.edu/~eschulte ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-12 18:56 ` Eric Schulte @ 2012-08-12 20:41 ` Achim Gratz 2012-08-13 13:16 ` Eric Schulte 0 siblings, 1 reply; 30+ messages in thread From: Achim Gratz @ 2012-08-12 20:41 UTC (permalink / raw) To: emacs-orgmode Eric Schulte writes: > But we certainly shouldn't (and currently aren't?) inhibit the display > of any warnings when the default make is run. I was surprised to run > make compile-source and see additional warnings which weren't shown > during regular make. These warnings aren't reliable — the byte compiler doesn't really try to find and report problems. > What is the difference between "make" and "make > compile-source" which results in different warnings? make -n compile make -n _COMPILE_=single compile The difference is starting a single Emacs and then compiling all files vs. starting a fresh Emacs instance for each file to be compiled. The change was originally triggered by some differences to the builds in package manager (ELPA) and solidified due to the fact that this is the only method that does function with only Emacs available. Should have been discussed around November last year, IIRC. > After some time digging through the make files, it looks to me like one > must edit the local.mk file to run these. You are welcome to dig through whatever files, but maybe you might consult the documentation first? As you would read there and can see above, you can do it all on the command line if you wish. If you want to enact that change permanently, you should edit local.mk — that's the only reason it exists. > I'd propose that they are added as a separate Makefile target > (mentioned by "make help") so that they can be easily run. If you want additional make targets you can also implement those in local.mk; run `make helpall´ some time and ask yourself if you really need more. > Very few people (users or developers) are willing to edit make > configuration files. Those same people that have no problem to edit the sources? Come on, you can't be serious. > Perhaps these elint build options should be used to build when "make > check" is run. If a user is willing to run the test suite they should > be willing to endure a slower build for more thorough warnings. If they want to, they can edit local.mk. But since it is not necessary for the build and there won't be any warnings to see if the developers do a good job, it's not a useful default. It is maybe useful as an additional configuration for release tests (just as it is useful to have multiple configurations to be able to test different versions of Emacs). Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ SD adaptations for Waldorf Q V3.00R3 and Q+ V3.54R2: http://Synth.Stromeko.net/Downloads.html#WaldorfSDada ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-12 20:41 ` Achim Gratz @ 2012-08-13 13:16 ` Eric Schulte 2012-08-13 13:45 ` Bastien 2012-08-13 19:47 ` Achim Gratz 0 siblings, 2 replies; 30+ messages in thread From: Eric Schulte @ 2012-08-13 13:16 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Achim Gratz <Stromeko@nexgo.de> writes: > Eric Schulte writes: >> But we certainly shouldn't (and currently aren't?) inhibit the display >> of any warnings when the default make is run. I was surprised to run >> make compile-source and see additional warnings which weren't shown >> during regular make. > > These warnings aren't reliable — the byte compiler doesn't really try to > find and report problems. > Understood, however they are still a useful check, especially after large code changes or during code cleanup. In fact, because I never run compiled Org-mode, these checks are one of my main uses of the Makefile. > >> What is the difference between "make" and "make >> compile-source" which results in different warnings? > > make -n compile > make -n _COMPILE_=single compile > > The difference is starting a single Emacs and then compiling all files > vs. starting a fresh Emacs instance for each file to be compiled. The > change was originally triggered by some differences to the builds in > package manager (ELPA) and solidified due to the fact that this is the > only method that does function with only Emacs available. Should have > been discussed around November last year, IIRC. > Thanks for clarifying. It certainly does sound like we are using the correct default build option. It would be preferable if the Emacs compilation process produced more predictable warnings, but I doubt this is a high priority for the busy core Emacs devs. > >> After some time digging through the make files, it looks to me like one >> must edit the local.mk file to run these. > > You are welcome to dig through whatever files, but maybe you might > consult the documentation first? I don't find the strings "single compile", "compile-source" or "elint" anywhere in the Org documentation. Perhaps there is different documentation for the Makefile? > As you would read there and can see above, you can do it all on the > command line if you wish. If you want to enact that change > permanently, you should edit local.mk — that's the only reason it > exists. > >> I'd propose that they are added as a separate Makefile target >> (mentioned by "make help") so that they can be easily run. > > If you want additional make targets you can also implement those in > local.mk; run `make helpall´ some time and ask yourself if you really > need more. > Despite the huge number of Makefile targets (do we really need 12 different versions of "make clean"), I do think that a make target to run a static code check would be useful. > >> Very few people (users or developers) are willing to edit make >> configuration files. > > Those same people that have no problem to edit the sources? Come on, > you can't be serious. > I am one of these people and I am completely serious. This is the first time I've looked at Org-mode's make system -- beyond my help with the test infrastructure. The Makefile uses different languages and has different goals than the source code and I think there are many who feel comfortable editing one but not the other. If you'll permit me an exaggerated metaphor, asking developers to edit a Makefile is like asking a watch maker to rebuild the table in her workshop. She will likely find the task to be a waste of time, to be outside of her core competency, and not directly related to her real work, even if it results in a more comfortable work environment. > >> Perhaps these elint build options should be used to build when "make >> check" is run. If a user is willing to run the test suite they should >> be willing to endure a slower build for more thorough warnings. > > If they want to, they can edit local.mk. As I continue to contend, editing local.mk simply will not happen in most cases. > But since it is not necessary for the build and there won't be any > warnings to see if the developers do a good job, it's not a useful > default. It is maybe useful as an additional configuration for > release tests (just as it is useful to have multiple configurations to > be able to test different versions of Emacs). > Having spent some time playing around with the elint options, I withdraw my suggestion that this should be the default for running "make test" as it is often simply too slow, however, I do think it should be exposed as a make file target (listed by "make help"), or in some way made possible without requiring esoteric configuration (either on the command line or in local.mk). Thanks for your patient explanations and consideration. > > > Regards, > Achim. -- Eric Schulte http://cs.unm.edu/~eschulte ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 13:16 ` Eric Schulte @ 2012-08-13 13:45 ` Bastien 2012-08-13 19:27 ` Achim Gratz 2012-08-13 19:47 ` Achim Gratz 1 sibling, 1 reply; 30+ messages in thread From: Bastien @ 2012-08-13 13:45 UTC (permalink / raw) To: Eric Schulte; +Cc: Achim Gratz, emacs-orgmode Let's summarize. It is no a matter of "exposing the user to the warnings" or not. It is a matter of exposing the user to the warnings that might be useful to him -- i.e. the ones he might want to report to the list just to let the developers know, or in the context of a bug hunt. The warnings you get by compiling Elisp files within a single Emacs process are *not* useful to the users because these warnings happen during context-free compilation, and as such, they are not relevant to what the user evaluates when he loads Org (even worse: those warnings may lead him to misinterpret what is missing at run time, whereas they warn about things that are missing at comile time.) So let's stick to the current default `make' for compilation. However, I would suggest these changes to the current default.mk: - Have a target `make single' (useful for developers) - `make test' should use the default make compilation (within one Emacs process), because this target is primarily for performing tests, not for checking warnings. - `make test single' should run the tests *and* compile each file in a separate Emacs process -- so that it gives as much info as the developers may desire. - `make elint' would run the current `make _COMPILE_=slint3'. - `make elint single' would run the current `make _COMPILE_=slint4' (even though I would not complain if we get rid of this target.) - Let's get rid of the _COMPILE_ variable: it is not handy to have to edit this just for running checks. I hope our brains now all compile fine within the same context. :) Achim, if you are okay with the suggestions above, can you make the relevant changes? Thanks! -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 13:45 ` Bastien @ 2012-08-13 19:27 ` Achim Gratz 2012-08-13 22:43 ` Eric Schulte 2012-08-14 22:45 ` Bastien 0 siblings, 2 replies; 30+ messages in thread From: Achim Gratz @ 2012-08-13 19:27 UTC (permalink / raw) To: emacs-orgmode Bastien writes: > However, I would suggest these changes to the current default.mk: These changes do not belong into default.mk — default.mk is the fallback for when no changes to local.mk have been made. > - Have a target `make single' (useful for developers) > > - `make elint' would run the current `make _COMPILE_=slint3'. I don't like such proliferation of toplevel targets since they can't be overridden by users, things like this (an alias) are easy enough to set up in local.mk: --8<---------------cut here---------------start------------->8--- single: _COMPILE_=single single: compile elint: _COMPILE_=slint3 elint: compile --8<---------------cut here---------------end--------------->8--- That was (and still is) the point of having local.mk — putting customized functionality on top of the standard make mechanism. > - `make test single' should run the tests *and* compile each file > in a separate Emacs process -- so that it gives as much info as > the developers may desire. > > - `make elint single' would run the current `make _COMPILE_=slint4' > (even though I would not complain if we get rid of this target.) Make doesn't work that way, you can't give it two targets and hope for it to combine these into something else. > - Let's get rid of the _COMPILE_ variable: it is not handy to have > to edit this just for running checks. I need to keep it for communication with the sub-make in lisp/, although I'll probably rename it to something shorter. There's a reason everything is set up the way it is and it actually becomes more complicated rather than easier if I do it differently. I'd rather provide a sample local.mk for developers that implements these suggestions. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ SD adaptation for Waldorf rackAttack V1.04R1: http://Synth.Stromeko.net/Downloads.html#WaldorfSDada ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 19:27 ` Achim Gratz @ 2012-08-13 22:43 ` Eric Schulte 2012-08-14 6:13 ` Achim Gratz 2012-08-14 22:45 ` Bastien 1 sibling, 1 reply; 30+ messages in thread From: Eric Schulte @ 2012-08-13 22:43 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode [-- Attachment #1: Type: text/plain, Size: 1178 bytes --] Achim Gratz <Stromeko@nexgo.de> writes: > Bastien writes: >> However, I would suggest these changes to the current default.mk: > > These changes do not belong into default.mk — default.mk is the fallback > for when no changes to local.mk have been made. > >> - Have a target `make single' (useful for developers) >> >> - `make elint' would run the current `make _COMPILE_=slint3'. > > I don't like such proliferation of toplevel targets since they can't be > overridden by users, I second the idea that a top level 'make elint' would be very useful for developers (see the attached patch). In my opinion this would be more useful than a number of existing top-level targets, e.g., config-*, update, update2, cleanall, cleandirs, cleancontrib, cleantesting, cleanutils, cleanelc and targets. So if we want to have fewer top level targets (which I think would also be a good idea), perhaps one or more of the above could be removed before an elint target is added. > things like this (an alias) are easy enough to set up in local.mk: But many more people will use such a target if it exists at the top level and is mentioned by "make help". [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #2: 0001-adding-elint-top-level-Makefile-target.patch --] [-- Type: text/x-patch, Size: 1146 bytes --] From 39e1ce6e8f33561db94451248d1c17705bd8f4ee Mon Sep 17 00:00:00 2001 From: Eric Schulte <eric.schulte@gmx.com> Date: Mon, 13 Aug 2012 16:42:59 -0600 Subject: [PATCH] adding elint top-level Makefile target --- Makefile | 1 + targets.mk | 3 +++ 2 files changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 71e2765..0b9535e 100644 --- a/Makefile +++ b/Makefile @@ -29,6 +29,7 @@ help helpall:: $(info make compile - build Org ELisp files) $(info make autoloads - create org-install.el to load Org in-place) $(info make check - build Org ELisp files and run test suite) + $(info make elint - perform a static check of ELisp source files) helpall:: $(info make test - ditto) $(info make compile-dirty - build only stale Org ELisp files) diff --git a/targets.mk b/targets.mk index 29b0aa5..7ddaff1 100644 --- a/targets.mk +++ b/targets.mk @@ -80,6 +80,9 @@ compile compile-dirty:: all clean-install:: $(foreach dir, $(SUBDIRS), $(MAKE) -C $(dir) $@;) +elint: + $(MAKE) -b _COMPILE_=slint3 + check test:: compile check test test-dirty:: -$(MKDIR) $(testdir) -- 1.7.11.4 [-- Attachment #3: Type: text/plain, Size: 46 bytes --] -- Eric Schulte http://cs.unm.edu/~eschulte ^ permalink raw reply related [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 22:43 ` Eric Schulte @ 2012-08-14 6:13 ` Achim Gratz 2012-08-14 12:46 ` Eric Schulte 2012-08-14 22:06 ` Bastien 0 siblings, 2 replies; 30+ messages in thread From: Achim Gratz @ 2012-08-14 6:13 UTC (permalink / raw) To: emacs-orgmode Eric Schulte writes: > I second the idea that a top level 'make elint' would be very useful for > developers (see the attached patch). I'll see to implement that when and if I get elint to process the Org sources without throwing bogus warnings and errors because it runs into some depth limit. Until then I will not expose it on top level. I take it you're not using `elint-current-buffer´ before checking your edits in… which is how it was designed to be used, anyway. > In my opinion this would be more useful than a number of existing > top-level targets, > config-*, Try to replace that functionality any other way. I could hide the internal targets and document only the two or three that I want to be used (see below). > update Compatibility. > update2, This was specifically requested, not that I like it very much. > cleanall, Compatibility. > cleandirs, cleancontrib, cleantesting, cleanutils, cleanelc Internal use and compatibility, I could remove the documentation if Bastien changes his mind about all the target needing documentation. > targets Mandated by GNU Makefile standards which I try to adhere to. > But many more people will use such a target if it exists at the top > level and is mentioned by "make help". Speculation. I know that I won't use it very much because it simply runs far too long on my machine. An elint-dirty that just runs through the files that have been changed would probably be much more useful, but the time that could have been spent on trying to implement that went to bikeshedding about which file to edit. Thanks. You found the time and energy to edit Makefile and targets.mk, so presumably you might be able to edit local.mk as well as I suggested numerous times. So please go ahead and actually do it and then after you've used elint for a while tell me how useful you find it from your experience and if there are other things that need attending aside from that depth limit. Get other people to use it too, and have them chime in. > +elint: > + $(MAKE) -b _COMPILE_=slint3 This introduces a useless fork and GNU make doesn't even process the '-b' option. What happens then depends on what is the default target (which may or may not include `compile´). Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ DIY Stuff: http://Synth.Stromeko.net/DIY.html ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-14 6:13 ` Achim Gratz @ 2012-08-14 12:46 ` Eric Schulte 2012-08-14 22:06 ` Bastien 1 sibling, 0 replies; 30+ messages in thread From: Eric Schulte @ 2012-08-14 12:46 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Achim Gratz <Stromeko@nexgo.de> writes: > > You found the time and energy to edit Makefile and targets.mk, so > presumably you might be able to edit local.mk as well as I suggested > numerous times. So please go ahead and actually do it and then after > you've used elint for a while tell me how useful you find it from your > experience and if there are other things that need attending aside from > that depth limit. Will do. Thanks, -- Eric Schulte http://cs.unm.edu/~eschulte ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-14 6:13 ` Achim Gratz 2012-08-14 12:46 ` Eric Schulte @ 2012-08-14 22:06 ` Bastien 2012-08-15 16:35 ` Achim Gratz 1 sibling, 1 reply; 30+ messages in thread From: Bastien @ 2012-08-14 22:06 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Achim Gratz <Stromeko@nexgo.de> writes: >> cleandirs, cleancontrib, cleantesting, cleanutils, cleanelc > > Internal use and compatibility, I could remove the documentation if > Bastien changes his mind about all the target needing documentation. I'll stick to this: it is good to document all existing targets. The question is whether a target should be displayed by `make helpall' rather than just ̀make help'. The current make help is sober enough for me. >> targets > > Mandated by GNU Makefile standards which I try to adhere to. Sure, let's keep it. -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-14 22:06 ` Bastien @ 2012-08-15 16:35 ` Achim Gratz 0 siblings, 0 replies; 30+ messages in thread From: Achim Gratz @ 2012-08-15 16:35 UTC (permalink / raw) To: emacs-orgmode Bastien writes: > I'll stick to this: it is good to document all existing targets. > > The question is whether a target should be displayed by `make helpall' > rather than just ̀make help'. As long as `make helpall´ was all the documentation that meant it had to look like it does. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Waldorf MIDI Implementation & additional documentation: http://Synth.Stromeko.net/Downloads.html#WaldorfDocs ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 19:27 ` Achim Gratz 2012-08-13 22:43 ` Eric Schulte @ 2012-08-14 22:45 ` Bastien 2012-08-15 17:55 ` Achim Gratz 1 sibling, 1 reply; 30+ messages in thread From: Bastien @ 2012-08-14 22:45 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Hi Achim, I reverted the commits introducing the _COMPILE_ variable and the elint targets in the makefile. I'm with Eric on thinking that even the casual developer should not have to tweak his local.mk to run the equivalent of `make compile-single', as it is directly useful to get some warnings. Even further: if a user reports a bug and we want to give him directions to get more information on his environment, asking him to run `make compile-single' is simple. As for elint, your last email shows this is still largely experimental and I doubt many developers use it to get useful warnings. Maybe `make elint' would be useful at some point, but for now developers can simply do M-x elint-current-buffer RET if they want. I also reduced the number of targets displayed by `make targets': only the ones that may be directly useful to the user or the developers are shown. You were right on this -- I first needed all doc to be able to follow your development myself... I hope you'll understand the choices above. Best, -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-14 22:45 ` Bastien @ 2012-08-15 17:55 ` Achim Gratz 2012-08-15 18:56 ` Bastien 0 siblings, 1 reply; 30+ messages in thread From: Achim Gratz @ 2012-08-15 17:55 UTC (permalink / raw) To: emacs-orgmode Bastien writes: [...] > I hope you'll understand the choices above. You should know the answer from the previous discussion, but I've clearly failed to reach you. Given your obvious desire to take over direct control of the further development of the build system, I won't do any further development unless you ask. I'll see to complete the documentation on Worg in the next few weeks. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ SD adaptations for Waldorf Q V3.00R3 and Q+ V3.54R2: http://Synth.Stromeko.net/Downloads.html#WaldorfSDada ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-15 17:55 ` Achim Gratz @ 2012-08-15 18:56 ` Bastien 0 siblings, 0 replies; 30+ messages in thread From: Bastien @ 2012-08-15 18:56 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Hi Achim, it is not a matter of taking over the build system, it is a matter of making it simple for the users and useful for the developers. At least two of the core developers here want `make compile-single' and don't want to edit local.mk to do so. The reverts I did were just for this to be the case. If a majority of developers want a _COMPILE_ variable or whatever, I'll happily let you implement it. The decision I took of getting rid of the elint targets is perhaps more controversial, but I think elint targets are more gadgets than anything else right now, and potentially disconcerting ones. You sound a bit angry at me, which I'm sorry to read. FWIW, I 100% acknowledge your sense of rigor and completeness and the way you can handle complex stuff -- but as a maintainer, I also try to focus on simplicity. Thanks, -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 13:16 ` Eric Schulte 2012-08-13 13:45 ` Bastien @ 2012-08-13 19:47 ` Achim Gratz 2012-08-14 22:07 ` Bastien 1 sibling, 1 reply; 30+ messages in thread From: Achim Gratz @ 2012-08-13 19:47 UTC (permalink / raw) To: emacs-orgmode Eric Schulte writes: > I don't find the strings "single compile", "compile-source" or "elint" > anywhere in the Org documentation. Perhaps there is different > documentation for the Makefile? Yes, as mentioned several times in this thread: http://orgmode.org/worg/dev/org-build-system.html I'll add that link to `make help´. > Despite the huge number of Makefile targets (do we really need 12 > different versions of "make clean"), I do think that a make target to > run a static code check would be useful. Most of these are used only internally or are provided for backwards compatibility with the old Makefile. Bastien insisted they should all be documented, so they are. The elint methods have just been implemented, but for various reasons I don't really like the idea of yet more toplevel targets. If I add one it'll probably be what `slint3´ does. >> Those same people that have no problem to edit the sources? Come on, >> you can't be serious. >> > > I am one of these people and I am completely serious. This is the first > time I've looked at Org-mode's make system -- beyond my help with the > test infrastructure. > > The Makefile uses different languages and has different goals than the > source code and I think there are many who feel comfortable editing one > but not the other. If you'll permit me an exaggerated metaphor, asking > developers to edit a Makefile is like asking a watch maker to rebuild > the table in her workshop. She will likely find the task to be a waste > of time, to be outside of her core competency, and not directly related > to her real work, even if it results in a more comfortable work > environment. To spin that metaphor further, that watchmaker should have no problem telling a cabinetmaker exactly what her desk should be like and she'd hopefully be wise enough not to tell him which tools to use or how to join the table board to the legs. ALso I think she might listen when the cabinetmaker tells her how to take care of her new desk properly. > As I continue to contend, editing local.mk simply will not happen in > most cases. So, how did your .emacs come about? Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Factory and User Sound Singles for Waldorf rackAttack: http://Synth.Stromeko.net/Downloads.html#WaldorfSounds ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 19:47 ` Achim Gratz @ 2012-08-14 22:07 ` Bastien 0 siblings, 0 replies; 30+ messages in thread From: Bastien @ 2012-08-14 22:07 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Achim Gratz <Stromeko@nexgo.de> writes: > http://orgmode.org/worg/dev/org-build-system.html > > I'll add that link to `make help´. Good idea, thanks! -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-12 13:56 ` Achim Gratz 2012-08-12 18:56 ` Eric Schulte @ 2012-08-12 22:27 ` Bastien 2012-08-13 6:11 ` Achim Gratz 2012-08-13 5:34 ` Bastien 2 siblings, 1 reply; 30+ messages in thread From: Bastien @ 2012-08-12 22:27 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Hi Achim, Achim Gratz <Stromeko@nexgo.de> writes: > You continue to misunderstand what I was saying or at least trying to > say. The primary function of Org's build system is to, well, build Org > with the minimum fuzz. That's what it was designed to do and that is > what it does — it can do other things as well, but you'll have to > configure it to do that. This I understood perfectly :) > Emacs does have elint > since version 23, which is properly separated from building, but again, > is still incomplete. I've added two compilation methods that use elint, > but they certainly aren't for casual use — the first one takes 25 times > as long as a simple build and the other one 275 times. Please refrain from adding such new targets to the Makefile for now. Let's settle the issue first. > I'm not going to degrade the build performance for everyone to save a > handful of people the bother of doing that. If you insist, do the > change yourself (it's defined in default.mk). One thing I need to understand: what are the warnings that you have when compiling within a single process and you don't when compiling with one process per file? The next thing I'd like to know is _why_ -- but even a rough answer to the first question would help me take a decision about this. Thanks, -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-12 22:27 ` Bastien @ 2012-08-13 6:11 ` Achim Gratz 2012-08-13 7:40 ` Bastien 0 siblings, 1 reply; 30+ messages in thread From: Achim Gratz @ 2012-08-13 6:11 UTC (permalink / raw) To: emacs-orgmode Bastien writes: > One thing I need to understand: what are the warnings that you have > when compiling within a single process and you don't when compiling > with one process per file? Emacs Lisp as a dynamic language has no concept of a "well-formed" program that can be verified by just looking at the source. Correctness of the program depends on entirely on the context, specifically any bindings that have been made. Now, for the same reason it also doesn't really have a concept of "compilation" like other languages that need to be translated. Running the byte-compiler will not only byte-compile, but also alter the context (predominantly via special forms that are evaluated at compile-time; but in other ways, too). So, running it with one process per file provides the most minimal context, but not necessarily the "best" or "correct" one. I could just as well pre-load org-install into the context of each compilation and things would look different again. The warnings you get from the byte-compiler are just noting when the expected context and the encountered one differs (like the bytecompiler seeing a function `foo´ being invoked, but doesn't know that is defined). This may or may not be an error at runtime, depending on what the context looks like then. > The next thing I'd like to know is _why_ -- but even a rough answer > to the first question would help me take a decision about this. There is no right or wrong answer to this, there are literally an infinite number of ways to deal with that problem. But it all comes down to managing dependencies and ensuring proper setup of the context, both at compile-time and run-time. Org currently takes the heavy-handed approach of (mostly) requiring all dependencies at compile-time, except when that would create recursive requires. This drags in a lot of mostly useless context into each compilation and can even hide some problems when some of the context is only indirectly required. It also subverts the goals of dynamic (auto-)loading at run-time, since instead of just pulling in the functions needed it will pull in rather large bodies of code. I'd be in favor of automatic dependency management in the autoloads style, but that would be a larger undertaking for a later time. Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ SD adaptations for KORG EX-800 and Poly-800MkII V0.9: http://Synth.Stromeko.net/Downloads.html#KorgSDada ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 6:11 ` Achim Gratz @ 2012-08-13 7:40 ` Bastien 2012-08-13 11:42 ` Achim Gratz 0 siblings, 1 reply; 30+ messages in thread From: Bastien @ 2012-08-13 7:40 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Please give me an example of a warning that is shown while compiling within a single Emacs process and not shown while compiling files with one Emacs process per file. -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 7:40 ` Bastien @ 2012-08-13 11:42 ` Achim Gratz 2012-08-13 13:13 ` Bastien 0 siblings, 1 reply; 30+ messages in thread From: Achim Gratz @ 2012-08-13 11:42 UTC (permalink / raw) To: emacs-orgmode Bastien <bzg <at> gnu.org> writes: > Please give me an example of a warning that is shown while compiling > within a single Emacs process and not shown while compiling files with > one Emacs process per file. I don't know if something like that currently exists, if you want to check set _COMPILE_=slint2 and compare the outputs of the three passes. I doubt there is, since the in-process compilation should be clean on current Git master. Conceivably, you could have a defconst in file1 and the same symbol as a defvar with initial value in file2, no requires in either file. If you now compile them in the order file1 and file2, you will get a warning when compiling in a single process, but not when you compile them in isolation. If they were both defvars w/ initialization, you'd never get a warning even though it is still wrong and the result at runtime depends on which file gets loaded first. Regards, Achim. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 11:42 ` Achim Gratz @ 2012-08-13 13:13 ` Bastien 2012-08-13 14:17 ` Achim Gratz 0 siblings, 1 reply; 30+ messages in thread From: Bastien @ 2012-08-13 13:13 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode I tried _COMPILE_ = single and I tried ~$ emacs -batch -Q --eval "(byte-compile-file \"~/install/git/org-mode/lisp/ob.el\")" I get warnings in the second case, not in the first case. Is there anything that _COMPILE_=single loads/expands on top of a bare Emacs when compiling using one Emacs process per file? Thanks, -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 13:13 ` Bastien @ 2012-08-13 14:17 ` Achim Gratz 2012-08-13 14:48 ` Bastien 0 siblings, 1 reply; 30+ messages in thread From: Achim Gratz @ 2012-08-13 14:17 UTC (permalink / raw) To: emacs-orgmode Bastien <bzg <at> gnu.org> writes: > ~$ emacs -batch -Q --eval "(byte-compile-file \"~/install/git/org-mode/lisp/ob.el\")" > > I get warnings in the second case, not in the first case. You should, because the command line you use does not set up the load-path correctly. The requires will now use the standard Emacs load-path, which provides older files with the same name. Regards, Achim. ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 14:17 ` Achim Gratz @ 2012-08-13 14:48 ` Bastien 2012-08-13 18:56 ` Achim Gratz 0 siblings, 1 reply; 30+ messages in thread From: Bastien @ 2012-08-13 14:48 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode Achim Gratz <Stromeko@NexGo.DE> writes: > Bastien <bzg <at> gnu.org> writes: >> ~$ emacs -batch -Q --eval "(byte-compile-file > \"~/install/git/org-mode/lisp/ob.el\")" >> >> I get warnings in the second case, not in the first case. > > You should, because the command line you use does not set up the load-path > correctly. The requires will now use the standard Emacs load-path, which > provides older files with the same name. Here are the warnings I get: ,---- | In org-babel-sha1-hash: | ob.el:1022:4:Warning: `(rm (lst) (dolist (p (quote ("replace" "silent" | "append" "prepend"))) (setq lst (remove p lst))) lst)' is a malformed | function | ob.el:1033:54:Warning: reference to free variable `arg' | | In org-babel-noweb-p: | ob.el:2224:34:Warning: `(intersect (as bs) (when as (if (member (car as) bs) | (car as) (intersect (cdr as) bs))))' is a malformed function | | In end of data: | ob.el:2603:1:Warning: the following functions are not known to be defined: | org-labels, norm, arg, rm, intersect | Wrote /home/guerry/install/git/org-mode/lisp/ob.elc `---- (This is related to the use of cl-labels in ob.el.) Do you get those warnings with ~$ emacs -batch -Q --eval "(byte-compile-file \"~/install/git/org-mode/lisp/ob.el\")" ? Do you get them with make ~$ make _COMPILE_=single ? How do you set up the load-path when compiling with `make _COMPILE_=single'? Thanks, -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-13 14:48 ` Bastien @ 2012-08-13 18:56 ` Achim Gratz 0 siblings, 0 replies; 30+ messages in thread From: Achim Gratz @ 2012-08-13 18:56 UTC (permalink / raw) To: emacs-orgmode Bastien writes: > Do you get them with make > ~$ make _COMPILE_=single Not now, but I've seen them before. I think this is one of those cases where an indirect require provides a dependency. > How do you set up the load-path The current directory (which is lisp) is prepended to the load-path, so that any require will find the correct files. This is always the same regardless the compilation method. If you ever want to know what make is doing, just start a dry-run via `make -n´ and you'll see. The easiest way to compile a single file is to remove the Regards, Achim. -- +<[Q+ Matrix-12 WAVE#46+305 Neuron microQkb Andromeda XTk Blofeld]>+ Factory and User Sound Singles for Waldorf rackAttack: http://Synth.Stromeko.net/Downloads.html#WaldorfSounds ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-12 13:56 ` Achim Gratz 2012-08-12 18:56 ` Eric Schulte 2012-08-12 22:27 ` Bastien @ 2012-08-13 5:34 ` Bastien 2 siblings, 0 replies; 30+ messages in thread From: Bastien @ 2012-08-13 5:34 UTC (permalink / raw) To: Achim Gratz; +Cc: emacs-orgmode By the way, I just tried to compile with _COMPILE_ = source in default.mk (instead of _COMPILE_ = dirall, which I commented) and it seems to compile twice (as with "single+dirall") and it does not remove the *elc files, as advertized. Anything I miss here? Thanks, -- Bastien ^ permalink raw reply [flat|nested] 30+ messages in thread
* Re: Org Build System (aka Makefile) 2012-08-10 7:17 ` Bastien 2012-08-12 13:56 ` Achim Gratz @ 2012-08-12 16:58 ` Samuel Wales 1 sibling, 0 replies; 30+ messages in thread From: Samuel Wales @ 2012-08-12 16:58 UTC (permalink / raw) To: Bastien; +Cc: Achim Gratz, emacs-orgmode Wait, I must have missed something. Some warnings are not showing? I do something like make >output 2>&1 ; grep -i 'error\|warning' output. Good code has no warnings, I thought? Samuel -- The Kafka Pandemic: http://thekafkapandemic.blogspot.com ^ permalink raw reply [flat|nested] 30+ messages in thread
end of thread, other threads:[~2012-08-15 18:56 UTC | newest] Thread overview: 30+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-07-15 20:37 Org Build System (aka Makefile) Achim Gratz 2012-07-15 21:38 ` Bastien 2012-08-09 17:03 ` Achim Gratz 2012-08-10 7:17 ` Bastien 2012-08-12 13:56 ` Achim Gratz 2012-08-12 18:56 ` Eric Schulte 2012-08-12 20:41 ` Achim Gratz 2012-08-13 13:16 ` Eric Schulte 2012-08-13 13:45 ` Bastien 2012-08-13 19:27 ` Achim Gratz 2012-08-13 22:43 ` Eric Schulte 2012-08-14 6:13 ` Achim Gratz 2012-08-14 12:46 ` Eric Schulte 2012-08-14 22:06 ` Bastien 2012-08-15 16:35 ` Achim Gratz 2012-08-14 22:45 ` Bastien 2012-08-15 17:55 ` Achim Gratz 2012-08-15 18:56 ` Bastien 2012-08-13 19:47 ` Achim Gratz 2012-08-14 22:07 ` Bastien 2012-08-12 22:27 ` Bastien 2012-08-13 6:11 ` Achim Gratz 2012-08-13 7:40 ` Bastien 2012-08-13 11:42 ` Achim Gratz 2012-08-13 13:13 ` Bastien 2012-08-13 14:17 ` Achim Gratz 2012-08-13 14:48 ` Bastien 2012-08-13 18:56 ` Achim Gratz 2012-08-13 5:34 ` Bastien 2012-08-12 16:58 ` Samuel Wales
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/emacs.git https://git.savannah.gnu.org/cgit/emacs/org-mode.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.