* [Caml-list] Announcing the OMake build system version 0.9.1 @ 2004-09-04 16:26 Jason Hickey 2004-09-04 17:42 ` Nicolas Cannasse ` (2 more replies) 0 siblings, 3 replies; 85+ messages in thread From: Jason Hickey @ 2004-09-04 16:26 UTC (permalink / raw) To: caml-list OMake is a build system, similar to GNU make, but with many additional features. The home site for OMake is http://omake.metaprl.org/ o Support for large projects spanning several directories or directory hierarchies. o Builtin support for OCaml and C projects, or a mixture thereof. o Fast, accurate, automated dependency analysis using MD5 digests. o Portability: omake provides a consistent interface on Win32 and on Unix systems including Linux, OSX, and Cygwin. o Builtin functions that provide the most common features of programs like grep, sed, and awk. These are especially useful on Win32. o Active filesystem monitoring, where the build automatically restarts whenever you modify a source file. This can be very useful during the edit/compile cycle. o A companion command interpreter, osh, that can be used interactively. In the MetaPRL (http://www.metaprl.org) and Mojave (http://mojave.caltech.edu) projects we develop and maintain several moderately large systems consisting of a mixture of OCaml, C, and theorem proving code. We developed OMake out of the need for a build system that was simple, flexible, and reliable, especially for large projects. OMake preserves the syntax and rule definitions used in Makefiles, making it easy to port your project to omake. There is no need to code in perl (cons), or Python (scons). However, there are a few things to keep in mind: 1. Indentation is significant, but tabs are not required. 2. The omake language is functional: functions are first-class and there are no side-effects apart from I/O. 3. Scoping is dynamic. To try it out, run the command "omake --install" in a project directory, and edit the generated OMakefile. Often, an OMakefile is as simple as a single line OCamlProgram(prog, foo bar baz) which states that the program "prog" is built from the files foo.ml, bar.ml, and baz.ml. You may want to choose which compiler is used (by default, omake builds native code). You can use the BYTE_ENABLED and NATIVE_ENABLED flags to control this. NATIVE_ENABLED = false BYTE_ENABLED = true OCamlProgram(prog, foo bar baz) If you have C files (say file1.c file2.c file3.c) in your project, you can add them using the StaticCLibrary function. StaticCLibrary(libx, file1 file2 file3) OCAML_CLIBS = libx OCamlProgram(prog, foo bar baz) If you have other directories in your project, you can include them with the directive .SUBDIRS: dir... For further information see the documentation at http://omake.metaprl.org/, especially the section on examples. OMake 0.9.1 is an alpha release. While we have made an effort to ensure that it is bug-free, it is possible some functions may not behave as you would expect. Please report any comments and/or bugs to the mailing list omake@metaprl.org -- Jason Hickey http://www.cs.caltech.edu/~jyh Caltech Computer Science Tel: 626-395-6568 FAX: 626-792-4257 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 16:26 [Caml-list] Announcing the OMake build system version 0.9.1 Jason Hickey @ 2004-09-04 17:42 ` Nicolas Cannasse 2004-09-04 18:27 ` chris.danx 2004-09-05 20:38 ` Aleksey Nogin 2004-09-04 18:01 ` [Caml-list] Announcing the OMake build system version 0.9.1 Yaron Minsky 2004-09-05 6:12 ` Yamagata Yoriyuki 2 siblings, 2 replies; 85+ messages in thread From: Nicolas Cannasse @ 2004-09-04 17:42 UTC (permalink / raw) To: Jason Hickey, caml-list > OMake is a build system, similar to GNU make, but with many additional > features. The home site for OMake is http://omake.metaprl.org/ Interesting ! However, I can't help thinking that I don't write to learn yet another language for writing my Makefiles... Why not using directly OCaml for writing Makefiles and exposing all nice OMake features through a library ? You would benefit of a good tool for error checks which is the Ocaml compiler. Other way to ask the question : what features make the OMake language better than OCaml for writing Makefiles ? Or is it just syntactic sugar ? Regards, Nicolas Cannasse ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 17:42 ` Nicolas Cannasse @ 2004-09-04 18:27 ` chris.danx 2004-09-04 19:59 ` Matthieu Dubuget 2004-09-04 23:58 ` Nicolas Cannasse 2004-09-05 20:38 ` Aleksey Nogin 1 sibling, 2 replies; 85+ messages in thread From: chris.danx @ 2004-09-04 18:27 UTC (permalink / raw) To: Nicolas Cannasse; +Cc: Jason Hickey, caml-list Nicolas Cannasse wrote: >>OMake is a build system, similar to GNU make, but with many additional >>features. The home site for OMake is http://omake.metaprl.org/ > > > Interesting ! > However, I can't help thinking that I don't write to learn yet another > language for writing my Makefiles... Why not using directly OCaml for > writing Makefiles and exposing all nice OMake features through a library ? > You would benefit of a good tool for error checks which is the Ocaml > compiler. I've started to use ocamlconf! That is a nice tool for doing 'configuration' based builds (./configure && make && make install style builds). You specify what you want to do in OCaml using some libs, run ocamlconf which calls the base system and end up with a configure file. That's not the same as `just' using a makefile, but does provide a good example of a DSL embedded in OCaml for the purpose of building software, and it's done entirely with library based code. This seems to work well for me, although I've only just started. Makefiles became problematic for managing the code (finding libraries, including paths, etc) and previous detours into things like autoconf/automake were less than encouraging. Compared to autoconf/automake ocamlconf is a dream. My only concern is compiling on Windows, but Cygwin is available here so I'm hoping that's not going to be a big problem. One question that springs to mind is why hasn't anyone made a tool that does the build process based on the semantics of Ocaml? Or have they? I used to (and sometimes still do) program in Ada using Gnat and most of the compilation can be handled by tools like gnatmake which handles all the dependancies. The Ada language has some specific rules on compilation and recompilation. Perhaps this is the difference? Of course you had to manage some configuration issues, but for the majority of tasks it was possible to use the gnatmake program to manage vast portions of the build process and it was great!!! This is the only thing I miss when not developing with Ada compilers and isn't unique to ocaml compilers. Ada developers are spoiled in this regard. :) Regards, Chris ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 18:27 ` chris.danx @ 2004-09-04 19:59 ` Matthieu Dubuget 2004-09-05 5:20 ` skaller 2004-09-04 23:58 ` Nicolas Cannasse 1 sibling, 1 reply; 85+ messages in thread From: Matthieu Dubuget @ 2004-09-04 19:59 UTC (permalink / raw) To: caml list chris.danx a écrit : > Nicolas Cannasse wrote: >> However, I can't help thinking that I don't write to learn yet another >> language for writing my Makefiles... Why not using directly OCaml for >> writing Makefiles and exposing all nice OMake features through a >> library ? > One question that springs to mind is why hasn't anyone made a tool that > does the build process based on the semantics of Ocaml? Or have they? May be YaM is a first step toward this. YaM was written by Damien Pous: http://perso.ens-lyon.fr/damien.pous/shared/ocaml/YaM/ I tried it some time ago and found it very interesting, but need to be improved (support of different platforms, more targets, etc.). I began to study it and had not the time to continue. Salutations Matthieu Dubuget ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 19:59 ` Matthieu Dubuget @ 2004-09-05 5:20 ` skaller 2004-09-05 13:20 ` David Brown ` (2 more replies) 0 siblings, 3 replies; 85+ messages in thread From: skaller @ 2004-09-05 5:20 UTC (permalink / raw) To: caml-list On Sun, 2004-09-05 at 05:59, Matthieu Dubuget wrote: > chris.danx a écrit : > > Nicolas Cannasse wrote: > > >> However, I can't help thinking that I don't write to learn yet another > >> language for writing my Makefiles... Why not using directly OCaml for > >> writing Makefiles and exposing all nice OMake features through a > >> library ? > May be YaM is a first step toward this. YaM was written by Damien Pous: > > http://perso.ens-lyon.fr/damien.pous/shared/ocaml/YaM/ My personal take is: all 'make' based build systems are fundamentally flawed because they're based on the wrong concept. The basic problem is that make assumes a fixed set of target outputs and has rules like: A depends on B: use P to make A from B This means you have to know all the outputs, dependencies, and build rules in advance which is *never* the case on any realistic system. The way forward is to rethink the fundamentals. Interscript works like this: if anything changes rebuild This rule is universal. Rebuild rules are arbitrary executable code, the process is terminated by detecting a fixpoint, which it can do by tracking all outputs. The logic here is reversed. You execute a 'rule' because it is part of an unfixed build (a process that hasn't converged to a fixpoint) NOT because you need to satifsy a dependency. The problems are ones of optimisation, not working around the fact 'make' is both incomplete and unsound. In other words, we can use mathematics to reason about how to optimise it, rather than trying to 'improve' something which is fundamentally broken. [Adding optimisations to a universal solution is fundamentally different to extending an incomplete one] For Omake -- the 'automatic file system monitoring' is not merely a 'convenience' to save typing 'omake'. Rather it should be viewed as *fundamental* change to the usual build paradigm -- its a step in the right direction. It should solve the following equation: d.dvi,d.aux = latex d.tex,d.aux,d.dvi which is necessary to use latex. (The aux file holds location of labels which are needed to generate forward references whose size may change with the location which may change the locations of labels ..) In interscript, I use dynamic code generation. This is very clumbsy -- print out a Python file then use 'execfile' to execute it. Some kind of more advanced partial evaluator is probably the way to go. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 5:20 ` skaller @ 2004-09-05 13:20 ` David Brown 2004-09-05 14:31 ` skaller 2004-09-05 15:07 ` chris.danx 2004-09-05 13:38 ` Marcin 'Qrczak' Kowalczyk 2004-09-06 1:06 ` Richard Jones 2 siblings, 2 replies; 85+ messages in thread From: David Brown @ 2004-09-05 13:20 UTC (permalink / raw) To: skaller; +Cc: caml-list On Sun, Sep 05, 2004 at 03:20:56PM +1000, skaller wrote: > The basic problem is that make assumes a fixed set > of target outputs and has rules like: > > A depends on B: use P to make A from B > > This means you have to know all the outputs, > dependencies, and build rules in advance > which is *never* the case on any realistic system. Amen. I asked a few years back why nobody had developed a tool similar to 'ghc --make' for Haskell or 'gnatmake' for Ada. The idea is that you give it the main module, and the tool works out all of the rules in advance. There are a couple of problems with these systems, especially in regards to ocaml. But, I think there are things to learn from them. - They tend to be very tied to their specific language. When source files in this language are themselves generated, this either has to be encoded in the make tool (yuck), or the make tool wrapped in a makefile, which kind of defeats the purpose. - Ocaml allows arbitrary code to be executed during module elaboration (to borrow an Ada term). This causes two issues: 1. elaboration order can be significant, and 2. modules can be required for the system, but not be dependent (in a module sense) on the "main" module. This also means that the notion of a main module is less meaningful on ocaml. It is very convenient to have a tool where the only rule needed is something like: myprog depends on foo.ml and its dependencies. In fact, if you specify the modules and also that dependencies are tracked, it solves the second problem above. Any time order is important, it can be specified (as well as additional modules), but when a module is required, any dependencies are checked and will be included before that module in the named list. I wrote a tool to do this, but ran into the first problem above. Perhaps I should investigate adding this capability to something like omake. Dave ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 13:20 ` David Brown @ 2004-09-05 14:31 ` skaller 2004-09-05 16:02 ` David Brown 2004-09-05 15:07 ` chris.danx 1 sibling, 1 reply; 85+ messages in thread From: skaller @ 2004-09-05 14:31 UTC (permalink / raw) To: David Brown; +Cc: caml-list On Sun, 2004-09-05 at 23:20, David Brown wrote: > I asked a few years back why nobody had developed a tool similar to > 'ghc --make' for Haskell or 'gnatmake' for Ada. Or just 'flx progname' for Felix, or python progname for Python, javac for java .. :) > The idea is that you give > it the main module, and the tool works out all of the rules in advance. > > There are a couple of problems with these systems, especially in regards to > ocaml. But, I think there are things to learn from them. > > - They tend to be very tied to their specific language. That's hard to avoid when you're basing dependency information on the language grammar :) > When source > files in this language are themselves generated, this either has to be > encoded in the make tool (yuck), or the make tool wrapped in a > makefile, which kind of defeats the purpose. To remove the 'yuck' requires two things I think: (a) the tool and target language are unified (b) the language is designed to generate itself Such systems do exist -- Forth and I guess Lisp fall into this category. > - Ocaml allows arbitrary code to be executed during module elaboration > (to borrow an Ada term). This causes two issues: 1. elaboration order > can be significant, and 2. modules can be required for the system, but > not be dependent (in a module sense) on the "main" module. This also > means that the notion of a main module is less meaningful on ocaml. I personally think this is, quite simply, a design fault. There is also a simple, clear and standard kind of solution, which Python uses -- mandate explicit specification. Python uses 'import' for this. Resolving the actual order of initialisation is another issue :) > I wrote a tool to do this, but ran into the first problem above. Perhaps I > should investigate adding this capability to something like omake. Well ocamldep already does most of the work -- for Ocaml code. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 14:31 ` skaller @ 2004-09-05 16:02 ` David Brown 2004-09-05 16:14 ` Nicolas Cannasse 0 siblings, 1 reply; 85+ messages in thread From: David Brown @ 2004-09-05 16:02 UTC (permalink / raw) To: skaller; +Cc: David Brown, caml-list On Mon, Sep 06, 2004 at 12:31:12AM +1000, skaller wrote: > > I wrote a tool to do this, but ran into the first problem above. Perhaps I > > should investigate adding this capability to something like omake. > > Well ocamldep already does most of the work -- for Ocaml code. camldep does give all of the necessary information (well, it used to). It seems to leave out dependencies that it thinks are obvious (foo.ml produces foo.cmo or foo.cmx). But, at least it has enough dependency information to produce build rules. I haven't seen anything actually use that information though. One problem it has is that if it can't find an appropriate file for a dependency, it leaves it out. Dave ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 16:02 ` David Brown @ 2004-09-05 16:14 ` Nicolas Cannasse 0 siblings, 0 replies; 85+ messages in thread From: Nicolas Cannasse @ 2004-09-05 16:14 UTC (permalink / raw) To: David Brown, skaller; +Cc: caml-list > > > I wrote a tool to do this, but ran into the first problem above. Perhaps I > > > should investigate adding this capability to something like omake. > > > > Well ocamldep already does most of the work -- for Ocaml code. > > camldep does give all of the necessary information (well, it used to). It > seems to leave out dependencies that it thinks are obvious (foo.ml produces > foo.cmo or foo.cmx). But, at least it has enough dependency information to > produce build rules. I haven't seen anything actually use that information > though. Ocamake is using ocamldep to build the dependency tree : http://tech.motion-twin.com/ocamake. However, two modules can be mutualy recursive from ocamldep point of view (both ML depending on other MLI), and this is not enough information to know in which order we need to link the CMO : this even might be impossible to link in the cases the modules are effectively recursive ! OCamake is doing some additional heuristics to try to guess which linking order is best. Nicolas Cannasse ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 13:20 ` David Brown 2004-09-05 14:31 ` skaller @ 2004-09-05 15:07 ` chris.danx 2004-09-05 15:53 ` skaller 1 sibling, 1 reply; 85+ messages in thread From: chris.danx @ 2004-09-05 15:07 UTC (permalink / raw) To: David Brown; +Cc: skaller, caml-list David Brown wrote: > Amen. > > I asked a few years back why nobody had developed a tool similar to > 'ghc --make' for Haskell or 'gnatmake' for Ada. The idea is that you give > it the main module, and the tool works out all of the rules in advance. > > There are a couple of problems with these systems, especially in regards to > ocaml. But, I think there are things to learn from them. > > - They tend to be very tied to their specific language. When source > files in this language are themselves generated, this either has to be > encoded in the make tool (yuck), or the make tool wrapped in a > makefile, which kind of defeats the purpose. I don't understand what you mean by this, but surely having a tool for the most common purposes is better than no tool at all. I also don't see how resorting to make defeats the purpose. I have had to do this with gnatmake when making and using libraries. Gnatmake builds the library but the library needs to exist before you can build the rest of the program so you need someway to tell it to biuld the lib first. Gnatmake doesn't handle that case. > - Ocaml allows arbitrary code to be executed during module elaboration > (to borrow an Ada term). This causes two issues: 1. elaboration order > can be significant, and 2. modules can be required for the system, but > not be dependent (in a module sense) on the "main" module. This also > means that the notion of a main module is less meaningful on ocaml. Ada has the elaboration problem and it is up to the programmer to solve. :) The programmer needs to know the elaboration order they want in order to get the program to work. If there are elaboration issues the programmer must solve them themselves unless the tool can sort them out for them. I see no problem with this. Perhaps I'm missing something, but I don't see the 2nd problem either. The main module depends on modules which depend on modules. When module X depended on by module Y depended on by main changes, X is recompiled, then Y then main. All other modules not dependant on X, Y and main are unchanged. "main" depends on modules, but to me those modules do not depend on main. Chris ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 15:07 ` chris.danx @ 2004-09-05 15:53 ` skaller 2004-09-06 0:25 ` chris.danx 0 siblings, 1 reply; 85+ messages in thread From: skaller @ 2004-09-05 15:53 UTC (permalink / raw) To: chris.danx; +Cc: David Brown, caml-list On Mon, 2004-09-06 at 01:07, chris.danx wrote: > David Brown wrote: > > - They tend to be very tied to their specific language. When source > > files in this language are themselves generated, this either has to be > > encoded in the make tool (yuck), or the make tool wrapped in a > > makefile, which kind of defeats the purpose. > > I don't understand what you mean by this, but surely having a tool for > the most common purposes is better than no tool at all. That may be so, but can we do better? I mean, programmers are always trying to automate things better, that's what our job is. > Gnatmake builds the > library but the library needs to exist before you can build the rest of > the program so you need someway to tell it to biuld the lib first. No you don't! You're making an assumption about build processes that specifying dependencies is fundamental. But that isn't the case. Here is a perfectly viable build script: build program build library You think that will work? It sure does! Here is the driver: limit = 10 run build while (--limit && new_outputs != old_outputs) run build This isn't efficient but it works *without* specifying dependencies or the correct build order. If you want it to be faster -- specify the component builds in the right order :) Point being -- getting the right order is an optimisation. > Ada has the elaboration problem and it is up to the programmer to solve. > :) The programmer needs to know the elaboration order they want in > order to get the program to work. If there are elaboration issues the > programmer must solve them themselves unless the tool can sort them out > for them. I see no problem with this. The problem is that the current technique for solving the ordering problem is to compile and link libraries in a particular order -- in other words, hand write the build script instead of generating it. However if the source code contained enough information, the build scripts could be generated automatically. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 15:53 ` skaller @ 2004-09-06 0:25 ` chris.danx 2004-09-06 8:17 ` skaller 0 siblings, 1 reply; 85+ messages in thread From: chris.danx @ 2004-09-06 0:25 UTC (permalink / raw) To: skaller; +Cc: David Brown, caml-list skaller wrote: > On Mon, 2004-09-06 at 01:07, chris.danx wrote: > >>I don't understand what you mean by this, but surely having a tool for >>the most common purposes is better than no tool at all. > > > That may be so, but can we do better? I mean, programmers are > always trying to automate things better, that's what our job is. Sometimes we do go to far, witness M$. :) Just a joke, please don't start a war over this little comment. > >> Gnatmake builds the >>library but the library needs to exist before you can build the rest of >>the program so you need someway to tell it to biuld the lib first. > > > No you don't! You're making an assumption about build processes > that specifying dependencies is fundamental. Yes, you're right. You don't need to make this assumption but you do need to specify what goes in the library and what does not. > But that isn't the case. Here is a perfectly viable build script: > > build program > build library > > You think that will work? It sure does! Here is the driver: > > limit = 10 > run build > while (--limit && new_outputs != old_outputs) > run build > > This isn't efficient but it works *without* specifying > dependencies or the correct build order. You didn't specify the dependancies in the "build" system, but you did in the files being compiled to some extent. Are you considering a language aware or language neutral solution? > If you want it to be faster -- specify > the component builds in the right order :) > > Point being -- getting the right order is an optimisation. > > >>Ada has the elaboration problem and it is up to the programmer to solve. >>:) The programmer needs to know the elaboration order they want in >>order to get the program to work. If there are elaboration issues the >>programmer must solve them themselves unless the tool can sort them out >>for them. I see no problem with this. > > > The problem is that the current technique for solving the ordering > problem is to compile and link libraries in a particular > order -- in other words, hand write the build script instead > of generating it. Yes this happens in Ada, but it is part of the Ada code (Ada elaboration is more complex). Putting Ada aside, I see no reason to do this in most cases for Ocaml though I am no expert. > However if the source code contained enough information, > the build scripts could be generated automatically. **That is what I want to happen** with the slight change that the program builds the actual program, library, whatever. For the cases the tool is not designed for we can rely on ocamlc/ocamlopt and the tools' semantics to cover it ourselves if need be. Ideally developers would not have to deal with that case but I'm not sure you can guarantee that when you're interfacing to other languages, etc. Chris ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 0:25 ` chris.danx @ 2004-09-06 8:17 ` skaller 0 siblings, 0 replies; 85+ messages in thread From: skaller @ 2004-09-06 8:17 UTC (permalink / raw) To: chris.danx; +Cc: David Brown, caml-list On Mon, 2004-09-06 at 10:25, chris.danx wrote: > You didn't specify the dependancies in the "build" system, but you did > in the files being compiled to some extent. Are you considering a > language aware or language neutral solution? Both: in the abstract, the system should be general, but it needs to be extensible to specialise for cases where optimisation is desired. Typically people optimise the 'inner loop' meaning if you spend much time developing code, you want good performance compiling things. If you spend much time running tests, you want to optimise that. For Felix, compilation is way faster than running the regression tests .. so I actually have optimisation in the form of dependency checking for the tests (to avoid rerunning slow tests that already passed). > > However if the source code contained enough information, > > the build scripts could be generated automatically. > > **That is what I want to happen** > > with the slight change that the program builds the actual program, > library, whatever. For the cases the tool is not designed for we can > rely on ocamlc/ocamlopt and the tools' semantics to cover it ourselves > if need be. Ideally developers would not have to deal with that case > but I'm not sure you can guarantee that when you're interfacing to other > languages, etc. Yes. My basic idea is that you need first generalised build semantics and optimisation model. Then you can tailor it, without sacrificing generality. If you start with a broken model like make, you just can't fix it. Make can't even handle trivial requrements such as unpacking a tarball. What's the target? Heck, you have to unpack the tarball to find what's in it. Even then, you have 200 targets, and one process that satisfies them all -- how do you code that in make? A typical trick is a dummy target -- GNU itself uses a file called TIMESTAMP I think, which is just a log file created as a side-effect of the process to represent the real set of 'targets'. Well that doesn't work when you have multiple processes with the common outputs .. interscript can tangle code files, or tangle code files AND weave documentation, so making documentation also makes code -- it would be silly to 'make code; make doc' since 'make doc' already satisfies the code target .. ugggg... G*d help you if you have complex recursive many-to-many processes -- its easier to just hand code your build process in some high level language than bother trying to represent it with make. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 5:20 ` skaller 2004-09-05 13:20 ` David Brown @ 2004-09-05 13:38 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 14:50 ` chris.danx ` (2 more replies) 2004-09-06 1:06 ` Richard Jones 2 siblings, 3 replies; 85+ messages in thread From: Marcin 'Qrczak' Kowalczyk @ 2004-09-05 13:38 UTC (permalink / raw) To: skaller; +Cc: caml-list skaller <skaller@users.sourceforge.net> writes: > The basic problem is that make assumes a fixed set > of target outputs and has rules like: > > A depends on B: use P to make A from B > > This means you have to know all the outputs, > dependencies, and build rules in advance > which is *never* the case on any realistic system. > > The way forward is to rethink the fundamentals. > Interscript works like this: > > if anything changes rebuild Rebuild what? Everything? It's not an option. When I repeatedly make a change in one file and try how it works, it would be silly to wait several minutes for recompilation of everything else. It would be interesting to invent some alternative paradigm, but I've never seen one. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 13:38 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-05 14:50 ` chris.danx 2004-09-05 15:01 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 15:08 ` skaller 2004-09-06 7:11 ` Christian Lindig 2 siblings, 1 reply; 85+ messages in thread From: chris.danx @ 2004-09-05 14:50 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: skaller, caml-list Marcin 'Qrczak' Kowalczyk wrote: > skaller <skaller@users.sourceforge.net> writes: > > >>The basic problem is that make assumes a fixed set >>of target outputs and has rules like: >> >> A depends on B: use P to make A from B >> >>This means you have to know all the outputs, >>dependencies, and build rules in advance >>which is *never* the case on any realistic system. >> >>The way forward is to rethink the fundamentals. >>Interscript works like this: >> >> if anything changes rebuild > > > Rebuild what? Everything? It's not an option. When I repeatedly make > a change in one file and try how it works, it would be silly to wait > several minutes for recompilation of everything else. Only what needs to be rebuilt! ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 14:50 ` chris.danx @ 2004-09-05 15:01 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 15:44 ` chris.danx 2004-09-05 16:11 ` skaller 0 siblings, 2 replies; 85+ messages in thread From: Marcin 'Qrczak' Kowalczyk @ 2004-09-05 15:01 UTC (permalink / raw) To: chris.danx; +Cc: skaller, caml-list "chris.danx" <chris.danx@ntlworld.com> writes: >> Rebuild what? Everything? It's not an option. When I repeatedly make >> a change in one file and try how it works, it would be silly to wait >> several minutes for recompilation of everything else. > > Only what needs to be rebuilt! But how does it know it? How to specify that in a different way than for make? -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 15:01 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-05 15:44 ` chris.danx 2004-09-05 16:10 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 17:15 ` skaller 2004-09-05 16:11 ` skaller 1 sibling, 2 replies; 85+ messages in thread From: chris.danx @ 2004-09-05 15:44 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: skaller, caml-list Marcin 'Qrczak' Kowalczyk wrote: > "chris.danx" <chris.danx@ntlworld.com> writes: > > >>>Rebuild what? Everything? It's not an option. When I repeatedly make >>>a change in one file and try how it works, it would be silly to wait >>>several minutes for recompilation of everything else. >> >>Only what needs to be rebuilt! > > > But how does it know it? How to specify that in a different way than > for make? Isn't that information encoded in the source files already? The tool extracts this information and uses it in the build process. ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 15:44 ` chris.danx @ 2004-09-05 16:10 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 17:38 ` skaller 2004-09-05 17:15 ` skaller 1 sibling, 1 reply; 85+ messages in thread From: Marcin 'Qrczak' Kowalczyk @ 2004-09-05 16:10 UTC (permalink / raw) To: chris.danx; +Cc: skaller, caml-list "chris.danx" <chris.danx@ntlworld.com> writes: >> But how does it know it? How to specify that in a different way than >> for make? > > Isn't that information encoded in the source files already? It's not encoded in an automatically extractable way. For example a Perl script in my project includes a statement open TABLES, ">char-tables.c"; but I don't expect a build tool to understand Perl and deduce that this script should be run to remake char-tables.c. And it will not know that sources in one subdirectory should be compiled using one compiler (the previous version) and sources in another using another (bootstrapped version of the same compiler). And it will not know the language of the sources to infer dependencies from them. So, how would I specify how files should be processed? -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 16:10 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-05 17:38 ` skaller 0 siblings, 0 replies; 85+ messages in thread From: skaller @ 2004-09-05 17:38 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: chris.danx, caml-list On Mon, 2004-09-06 at 02:10, Marcin 'Qrczak' Kowalczyk wrote: > "chris.danx" <chris.danx@ntlworld.com> writes: > > >> But how does it know it? How to specify that in a different way than > >> for make? > > > > Isn't that information encoded in the source files already? > > It's not encoded in an automatically extractable way. For example a > Perl script in my project includes a statement > open TABLES, ">char-tables.c"; > but I don't expect a build tool to understand Perl and deduce that > this script should be run to remake char-tables.c. Oh yes it does :) This is exactly what interscript DOES know how to do. Here is something similar, since I can't read Perl: @TABLES = ["Hello", "World"] @h = tangler("char-tables.c") @select(tangler) @for i in TABLES: tangle(i) This actually writes Hello World into the c file, its just Python with @ at the front so the parser doen't confuse it with text. If you change the TABLES, a new c file is created -- and interscript knows about it too (because the tangler function creates a tracked output sink ..) The only caveat here is: if you use a foreign script to write a file, interscript won't know about the file. If you use embedded Python, it does (provided you use an appropriate output object). > And it will not know that sources in one subdirectory should be > compiled using one compiler (the previous version) and sources in > another using another (bootstrapped version of the same compiler). It doesn't have to. It isn't a declarative system. It doesn't have to know how to compile files in one directory or the other.. it just executes the build commands you give it. > And it will not know the language of the sources to infer dependencies > from them. That isn't true either. It actually does know many languages, and you can plug in another if you want to. None of the tanglers I wrote actually bother to track dependencies but you could do it. The tanglers are mainly used to insert appropriate #line directives, but they can do other things. In particular the Perl tangler also understands perldoc, and the Python tangler can pretty print using coloured keywords. The thing is -- you don't need to know the dependencies. It helps, but it isn't necessary. > So, how would I specify how files should be processed? The usual way -- write the commands out. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 15:44 ` chris.danx 2004-09-05 16:10 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-05 17:15 ` skaller 1 sibling, 0 replies; 85+ messages in thread From: skaller @ 2004-09-05 17:15 UTC (permalink / raw) To: chris.danx; +Cc: Marcin 'Qrczak' Kowalczyk, caml-list On Mon, 2004-09-06 at 01:44, chris.danx wrote: > > But how does it know it? How to specify that in a different way than > > for make? > > Isn't that information encoded in the source files already? The tool > extracts this information and uses it in the build process. Not quite -- the build rules have to be encoded, yes. However the encoding is as executable code, so whilst technically you're right it is extracted and 'used' by the build process, from the client's viewpoint it is simply executed. The build tool itself is a small Python script which calls functions from a Python library, and the user can enhance the processing in Python embedded in the source being read -- so the integration is fairly seamless. Contrast to autoconf, make, cake, imake ... :) In theory, these tools are also well integrated by the Unix OS and shell -- but I find Python script better (Perl would no doubt be good too). -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 15:01 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 15:44 ` chris.danx @ 2004-09-05 16:11 ` skaller 2004-09-05 16:21 ` Marcin 'Qrczak' Kowalczyk 1 sibling, 1 reply; 85+ messages in thread From: skaller @ 2004-09-05 16:11 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: chris.danx, caml-list On Mon, 2004-09-06 at 01:01, Marcin 'Qrczak' Kowalczyk wrote: > "chris.danx" <chris.danx@ntlworld.com> writes: > > >> Rebuild what? Everything? It's not an option. When I repeatedly make > >> a change in one file and try how it works, it would be silly to wait > >> several minutes for recompilation of everything else. > > > > Only what needs to be rebuilt! > > But how does it know it? How to specify that in a different way than > for make? I could suggest some, but first: you could use the same way as for make. However your dependency specification is treated like an optimisation. So if you say: A depends on B it means 'A depends on B and some other things' rather than 'A depends only on B'. This allows you to take a random ordering and adjust it so B comes before A. The more hints you give, the more efficient the build. But it will (usually) converge (or fail to converge) independently of the ordering. Obviously one would like something less brain dead than specifying dependencies file by file -- like *.c -> *.o in make. Or perhaps 'ocamldep' for Ocaml :) -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 16:11 ` skaller @ 2004-09-05 16:21 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 19:09 ` skaller 0 siblings, 1 reply; 85+ messages in thread From: Marcin 'Qrczak' Kowalczyk @ 2004-09-05 16:21 UTC (permalink / raw) To: skaller; +Cc: chris.danx, caml-list skaller <skaller@users.sourceforge.net> writes: >> But how does it know it? How to specify that in a different way than >> for make? > > I could suggest some, but first: you could use the same > way as for make. How does it simplify my life if I have to write the same Makefile as for make? > However your dependency specification is treated like > an optimisation. It can't be so, because parts of the information about which sources to compile is encoded *only* in dependencies in a Makefile. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 16:21 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-05 19:09 ` skaller 0 siblings, 0 replies; 85+ messages in thread From: skaller @ 2004-09-05 19:09 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: chris.danx, caml-list On Mon, 2004-09-06 at 02:21, Marcin 'Qrczak' Kowalczyk wrote: > skaller <skaller@users.sourceforge.net> writes: > > >> But how does it know it? How to specify that in a different way than > >> for make? > > > > I could suggest some, but first: you could use the same > > way as for make. > > How does it simplify my life if I have to write the same Makefile as > for make? By build rule I mean the thing in a makefile after the TAB character. > > However your dependency specification is treated like > > an optimisation. > > It can't be so, because parts of the information about which sources > to compile is encoded *only* in dependencies in a Makefile. You can just compile the lot. For Ocaml code I personally use a linear list with my own timestamp checking, and when i find a change everything in the list thereafter is built. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 13:38 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 14:50 ` chris.danx @ 2004-09-05 15:08 ` skaller 2004-09-05 15:38 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 16:09 ` David Brown 2004-09-06 7:11 ` Christian Lindig 2 siblings, 2 replies; 85+ messages in thread From: skaller @ 2004-09-05 15:08 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: caml-list On Sun, 2004-09-05 at 23:38, Marcin 'Qrczak' Kowalczyk wrote: > skaller <skaller@users.sourceforge.net> writes: > > Interscript works like this: > > > > if anything changes rebuild > > Rebuild what? Everything? It's not an option. Please understand this as a semantic specification. Rebuild everything means 'make it so the result is as if you rebuilt everything' -- if you can tell there is no need to rebuild something of course you don't. The issue is how you determine what you can elide from the build. Interscript currently does do just what I said and it works. It does some automatic dependency checking for generating code, to avoid gratuitous processing. I'm not suggesting to get rid of explicitly stated dependencies -- I'm saying that they're to be treated as cuts -- optimisations. > When I repeatedly make > a change in one file and try how it works, it would be silly to wait > several minutes for recompilation of everything else. Of course but you're missing the point... > It would be interesting to invent some alternative paradigm, but I've > never seen one. Neither have I. What I mean is: make doesn't work, it's entirely wrong, so it isn't even a candidate for a build paradigm. Fixpoint iteration works and is universal. So really you don't have any choices here -- there is ONLY one known correct paradigm, fixpoint iteration. The issue is how to make it efficient without destroying its correct semantics and universal nature. I already have some ideas about that: one needs to build a categorical model of the processing by specifying some kind of graph -- note the graph allows cycles. I actually *implemented* quite a lot of this some years ago using iTcl and Tk. The graph was visual. The build system was functional with memoisation (fancy for saying it used time stamped intermediate product files :) Believe me I needed such a highly advanced tool: my job was much more complex than most software projects -- I was writing a book, and that adds a LOT of additional project viewpoints and targets, particularly as the whole thing was literate programmed and well over 3000 pages :) Trust Knuth -- he gave up book writing and spent years developing a typesetting and literate programming system for this reason. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 15:08 ` skaller @ 2004-09-05 15:38 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 17:04 ` skaller 2004-09-05 16:09 ` David Brown 1 sibling, 1 reply; 85+ messages in thread From: Marcin 'Qrczak' Kowalczyk @ 2004-09-05 15:38 UTC (permalink / raw) To: skaller; +Cc: caml-list skaller <skaller@users.sourceforge.net> writes: > The issue is how you determine what you can elide > from the build. > > Interscript currently does do just what I said and it works. I don't understand. *How* does it know what to rebuild and how? > Of course but you're missing the point... Indeed I am. I don't see how do you specify how code should be rebuilt. > What I mean is: make doesn't work, it's entirely wrong, so it isn't > even a candidate for a build paradigm. Make works for me. What method of specifying building instructions do you propose instead? > Fixpoint iteration works and is universal. What does "fixpoint iteration" mean in this concept? What is iterated? -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 15:38 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-05 17:04 ` skaller 2004-09-05 18:45 ` Marcin 'Qrczak' Kowalczyk 0 siblings, 1 reply; 85+ messages in thread From: skaller @ 2004-09-05 17:04 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: caml-list On Mon, 2004-09-06 at 01:38, Marcin 'Qrczak' Kowalczyk wrote: > skaller <skaller@users.sourceforge.net> writes: > > > The issue is how you determine what you can elide > > from the build. > > > > Interscript currently does do just what I said and it works. > > I don't understand. *How* does it know what to rebuild and how? It executes the build script, which basically is just a Python program with some library support thrown in. It is a literate programming tool, which has two commands of interest here: (1) include file (2) open output Function (2) opens output files, and also stores the name of the file in a persistent repository. I actually open a temporary file, write it, and the close() function actually compares the temporary with the pre-existing file, and overwrites it if they're different. The include function opens an input, and also keeps track of the source tree. together these two functions conspire to determine which input files generate which outputs. Now actually, instead of just opening an include file for input, what really happens is that the system first checks if the input, or any of its inputs, as determined by the last run, have changed (by checking time stamps). If not, the input is simply skipped over. The whole process is repeated until the output files are not changed (or a limit is exceeded). If you try to include a file that is generated, all is well even if it is generated *after* you include it. Either the subsequent generation will change the output or not. If not, there's no harm including an old copy, and if so, this will result in our current output being different and so the whole process will repeat. Whatever you do DO NOT print the time in seconds into a generated file :) Now, you may wonder what this has to do with building Ocaml programs, C programs, etc. There are two answers. The first is: the process is an instance of something more general: as I have noted interscript sources can contain arbitrary Python script to generate outputs, so there isn't anything in the process which is specific to a particular compiler or programming language. What seems to be required is the ability to track the output files -- it isn't relevant how they're constructed. However to *optimise* the process, you do need to have more project specific information. Now I want to give a kind of messy example why this process is more or less mandatory for bootrapped systems. The Felix build first imports configuration information, and uses it to condition the generated code. The configuration is defined as an executable Python file. The configuration file is generated by 'trial and error' execution of some scripts and C programs, in the autoconf style. The actual code that runs these programs is a Python script -- generated from the LP sources of course. There is also a makefile which hooks a Python script for doing the main Ocaml building. It is dependent on the configuration. It is *also* used to 'make' the configuration. So, there are quite a few circular dependencies here, and the client can actually edit the configuration by hand as well -- and those changes stick, even across new versions of the system. The process is bootstrapped with a makefile that I manually added to the LP sources -- its sure to be out of date and misconfigured for your system but that doesn't matter, because it is only used to launch the bootstrap -- after that a better one is extracted from the LP sources, and after making the config an even better one -- eventually all this stuff converges to a stable configuration. I don't need a long toolchain to do all this. One program -- interscript -- does everything including find your Ocaml installation :) > > Of course but you're missing the point... > > Indeed I am. I don't see how do you specify how code should be rebuilt. I specify the rebuild rules (in Python) in a reasonable order and just execute them. The rules are no different in principle than make rules, except that I use a full scale programming language to write them (and usually just call the system() function). > What does "fixpoint iteration" mean in this concept? What is iterated? The build process repeats until the generated outputs are the same twice in a row. Consider this function: build: file_set -> file_set Which takes all inputs + outputs and generates new outputs. Then we just apply 'build' repeatedly until it converges to a fixpoint 'files' specified by the equation: files = build (files) For example you could define 'build' as this: for b in *.ml do ocamlc b and just repeat it until the *.cmo files don't change. The initial compilation order is probably wrong. Fixpoint iteration will eventually lead to a correct ordering -- in fact the algorithm seems equivalent to a bubble sort: at least on of the ml files can't depend on anything so it will compile correctly on the first pass .. next pass things that depend on it will be ok .. etc.. so eventually all the files get built -- no matter what the order is. More generally this will work even with circular dependencies, provided of course you design the system so it converges. As a counter-example: latex doesn't always converge. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 17:04 ` skaller @ 2004-09-05 18:45 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 20:12 ` skaller 0 siblings, 1 reply; 85+ messages in thread From: Marcin 'Qrczak' Kowalczyk @ 2004-09-05 18:45 UTC (permalink / raw) To: skaller; +Cc: caml-list skaller <skaller@users.sourceforge.net> writes: > together these two functions conspire to determine which > input files generate which outputs. So I must either explicitly tell the dependencies, or run a script which computes them. Same as in make. Assume that I forget that compilation of a particular file also reads another included file, i.e. forget one dependency link. Then after changing the included file, the target will not be rebuilt (I don't believe that it will, because then all other targets are in the same situation and everything would be rebuilt, which is impractical). So *all* dependencies must be specified. Same as in make. The difference is in that that "changed" is determined by file contents rather than time stamps, that compilation is repeated until it stabilizes, and in the language the makefile is written in. > If you try to include a file that is generated, > all is well even if it is generated *after* you > include it. This implies that a compile error doesn't abort the compilation (because the error might result from lack of source which will be made later). So if I made a fatal error in a C header file included in many C sources, the time to rebuild all of them and detect the error multiple times will be wasted. The time to compile good but out of date files is sometimes wasted too. Imagine 3 modules: module A module B uses modules A and C module C uses module A where "uses" actually means "reexports at least a part of it, such that changes in one interface change the other". The modules happen to be processed in this order. Someone changed module A. Then A is recompiled; B is recompiled because A changed; C is recompiled because A changed; B is recompiled *again* because C changed. 'Make' would know that it makes no sense to compile B before C. > More generally this will work even with circular > dependencies, provided of course you design the > system so it converges. > > As a counter-example: latex doesn't always converge. It's the only counter-example I know. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 18:45 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-05 20:12 ` skaller 2004-09-05 21:30 ` Marcin 'Qrczak' Kowalczyk 0 siblings, 1 reply; 85+ messages in thread From: skaller @ 2004-09-05 20:12 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: caml-list On Mon, 2004-09-06 at 04:45, Marcin 'Qrczak' Kowalczyk wrote: > skaller <skaller@users.sourceforge.net> writes: > > > together these two functions conspire to determine which > > input files generate which outputs. > > So I must either explicitly tell the dependencies, or run a script > which computes them. Same as in make. This is getting too confusing. For interscript itself, the answer is no: it automatically extracts all sources no matter what you change. No dependency information is required, and no targets, and no makefile. It does this by fixpoint iteration -- the interscript program knows nothing about the source you're generating. It does know (a) the set of LP sources, because you give it the first one on the command line and it follows includes. It also knows every file you generated, because you called it to open the file and it keeps track. What I'm suggesting is that this process is quite general. It isn't restricted to 'extract source from LP source'. In particular I leverage that in interscript itself, by allowing the client to generate sources any way they think fit using embedded Python. This idea extends to any kind of build processes. There's no difference in principle between extracting sources from a tarball, running interscript, or compiling a C program to an object file. All such process will build by fixpoint iteration. Clearly the exact build commands must be given to build the system -- whether that is done the hard way or the commands are generated doesn't matter, since the fixpoint concept can rebuild the command script just like any other output. Clearly if you do NOT encode some dependency information, the process will be inefficient. If you lie, it may fail. If you provide partial information it speeds up, the more the better. > Assume that I forget that compilation of a particular file also reads > another included file, i.e. forget one dependency link. Then after > changing the included file, the target will not be rebuilt (I don't > believe that it will, because then all other targets are in the same > situation and everything would be rebuilt, which is impractical). > So *all* dependencies must be specified. Same as in make. You are missing the idea -- all the things are not only rebuilt every time (in principle) they're rebuilt AT LEAST TWICE. There is no way to check convergence in one pass. So in the first instance the dependency information is used to optimise the build order. This reduces the number of passes required. For example in worst case to build 26 files A-Z, where each is dependent on the previous one alphabetically, if the build order is ZY .. CBA then it will take 26 passes to build, and 27 to verify convergence. That's not 26 compiles, which you think is too slow -- its 26 SQUARED compiles. If you reorder the list using partial dependency information, that reduces the number of passes -- NOT the number of compiles per pass. If you have enough information to order the compiles ABCDE ... Z then it takes one pass to build (and one to verify convergence). Eliminating some of those compiles is a related but distinct problem. You may well need full dependency information to eliminate every eliminable compilation. As mentioned I personally don't bother with that in Felix package, I just use a hand coded linear order (one pass always converges) and check each object file against its *.ml file -- and then compile everything thereafter -- that always works (because it accounts for all the dependencies, since they've already been checked). This algorithm doesn't do the minimum compiles, but ocamlopt.opt is so damn fast it just doesn't matter: in practice it reduces my compile time by 5-10 times (since most work is on the backend implementation). So actually -- I'm not using the fixpoint iteration at all to compile ocaml code. Its main use in my package is to handle configuration (which can require three passes since there's stuff that generates stuff that generates stuff which the first generator needs .. :) In practice the fixpoint stuff is quite useful: first I naturally write things in dependency order anyhow, and secondly all those passes aren't done every time -- I just run one pass usually. Remember that the system uses a persistent store, so that one pass is probably pass 457 or something :) I try to strike a balance between reasonable build speed, and reasonable amount of script to specify the actual build -- that's important for platform independence and robustness -- remember the key use of the build process isn't me building the package, its for my clients to build the package -- and they really do have to compile everything :) > > If you try to include a file that is generated, > > all is well even if it is generated *after* you > > include it. > > This implies that a compile error doesn't abort the compilation Yes. More correctly an error in the build process doesn't stop the build continuing on (in general). If I want this, I have to actively program it. > (because the error might result from lack of source which will be made > later). So if I made a fatal error in a C header file included in many > C sources, the time to rebuild all of them and detect the error > multiple times will be wasted. Yes. As I have said, the fixpoint idea works, but is not automatically efficient -- you still need to do some work to make it efficient. However unlike make, you can do it as your project grows, and you can use arbitrary executable script. > 'Make' would > know that it makes no sense to compile B before C. Make is brain dead, it only know what you tell it. It can't compute anything you can't do in Python in a roughly similar number of lines of code. The converse is not true -- Python is much more expressive than make. In both cases if you want a completely optimal build order you have to maintain a complete dependency graph. > > As a counter-example: latex doesn't always converge. > > It's the only counter-example I know. You will discover another source of recusive build dependencies if you try to bootstrap your language -- and especially if you *also* try to write the build tool that manages that in your language too .. :)) -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 20:12 ` skaller @ 2004-09-05 21:30 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 22:41 ` Brandon J. Van Every 0 siblings, 1 reply; 85+ messages in thread From: Marcin 'Qrczak' Kowalczyk @ 2004-09-05 21:30 UTC (permalink / raw) To: skaller; +Cc: caml-list skaller <skaller@users.sourceforge.net> writes: > For interscript itself, the answer is no: it automatically extracts > all sources no matter what you change. > > No dependency information is required, and no targets, > and no makefile. My makefiles generally include the following types of information: - Rules which tell "how to compile a *.foo file into a *.bar file" and compiler options. - Variable definitions which gather sources from contents of directories. It's usually "all files with a particular extension from subdirectories, plus some additions which are generated, minus some exceptions which are conditionally excluded". - Rules which tell which sources and commands to use for many-to-one targets like programs and libraries, where source names are not derived from target names automatically because there are many sources. - Administrative rules for things like "make clean" and "make install". All this information is essential for building and impossible to infer automatically from other files. Another build tool can't eliminate the need of providing that information in some form. It can only provide a different language for expressing it. Dependencies between the source of module Foo which uses module Bar, and the interface of module Bar, are generated automatically by tools like ocamldep for particular languages. > It does know (a) the set of LP sources, because you give it the > first one on the command line and it follows includes. If a source is missing, how does it know which program to run in order to create it? >> Assume that I forget that compilation of a particular file also reads >> another included file, i.e. forget one dependency link. Then after >> changing the included file, the target will not be rebuilt (I don't >> believe that it will, because then all other targets are in the same >> situation and everything would be rebuilt, which is impractical). >> So *all* dependencies must be specified. Same as in make. > > You are missing the idea -- all the things are not only rebuilt > every time (in principle) they're rebuilt AT LEAST TWICE. So it's out for me. My project already takes 7 minutes to build (90% of the time is gcc, which is slow on generated files having hundreds of kilobytes). I don't want to turn it into 14 minutes without a good reason. And if I make small changes in one file in order to find some bug, it's essential to recompile only a few relevant files. How does it know which other files need to be rebuilt if it does not know *all* dependencies? Rebuilding everything is out of the question. It should take 7 seconds, not 7 minutes. And it does with make. I can't say I like make, but any tool which requires to compile some files twice, or insists on recompiling everything after a local change, is not a viable alternative. > As mentioned I personally don't bother with that in Felix package, > I just use a hand coded linear order (one pass always converges) and > check each object file against its *.ml file -- The project I have in mind, a compiler of my language Kogut, currently has 90 modules in its library. I don't even keep the *set* of filenames in a Makefile, because I would have to change it each time I add or rename a module. Maintaining a topologically sorted list by hand would be a nightmare. It's not written in OCaml, so there are no issues with module order for linking, but there are issues with slow compilation. So it's important to compile only what is needed, and to not compile anything twice. > You will discover another source of recusive build > dependencies if you try to bootstrap your language -- It's already self-hosting. The main compiler is written in the language it compiles. In order to build it you can either download a smaller package containing only "real" sources, if you have an earlier version installed, or download a larger package with pregenerated portable C files of (a conservative approximation of) the part of the library used by the compiler and the compiler proper. These C files are used to bootstrap some working compiler, which is then used instead of the "previous version". > and especially if you *also* try to write the build > tool that manages that in your language too .. :)) This is why I wrote the compiler driver in Perl :-) It's the program which calls the actual compiler, C compiler, assembler, assembler mangler (also written in Perl), and linker, and finds out what options to give to each. It also generates dependencies for make. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* RE: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 21:30 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-05 22:41 ` Brandon J. Van Every 2004-09-06 12:13 ` Marcin 'Qrczak' Kowalczyk 0 siblings, 1 reply; 85+ messages in thread From: Brandon J. Van Every @ 2004-09-05 22:41 UTC (permalink / raw) To: caml Marcin 'Qrczak' Kowalczyk wrote: > > My makefiles generally include the following types of information: > > - Rules which tell "how to compile a *.foo file into a *.bar file" > and compiler options. > > - Variable definitions which gather sources from contents of > directories. It's usually "all files with a particular extension > from subdirectories, plus some additions which are generated, > minus some exceptions which are conditionally excluded". > > - Rules which tell which sources and commands to use for many-to-one > targets like programs and libraries, where source names are not > derived from target names automatically because there are many > sources. > > - Administrative rules for things like "make clean" and "make > install". > > All this information is essential for building and impossible to infer > automatically from other files. Another build tool can't eliminate the > need of providing that information in some form. It can only provide a > different language for expressing it. 'Language', by your definition, can include a GUI. Under Visual Studio 2003, when doing C++ projects, the only one I definitely have to mess with is 'make install'. All the other jobs are common enough that I simply don't have to worry about them. Of course, I do have to point-n-click, drag-n-drop to get my source files properly organized. Of course, VS 2003 isn't pain free. I do have to know where various settings are located in the GUI, and it is definitely possible to put settings in a 'wrong' or 'poorly architected' place. It took me awhile to go up this learning curve - but I put far more effort into GNU Make, GNU Autoconf, and IMake, once upon a time. It helps that I have a grungy command line background, that I know this is really all that's going on under the hood. I view VS 2003 .sln files as 'just another kind of Makefile', and they are usually amenable to hand editing. You might argue that the 'language' is really in the .sln file, as it is in a Makefile. Well, the same can be said about Postscript, but end users rarely manipulate Postscript directly. They use tools, because it's too complicated for most users to edit by hand. So, part of the dimension of this discussion, which seems to have the quality of "my build tool is theoretically better than your tool," is how these things behave as *TOOLS*. One dimension of tool quality is how many people use the tool. I hope someone has some insight into my question about OCaml build tool critical mass. > And if I make small changes in one file in order to find some bug, > it's essential to recompile only a few relevant files. How does it > know which other files need to be rebuilt if it does not know *all* > dependencies? Rebuilding everything is out of the question. It should > take 7 seconds, not 7 minutes. And it does with make. In 20..30 years, we will be using cheap, massively parallel computers and exhaustively searching all the available options. These issues will go away. In fact, *lots* of "how do I interface X and Y?" issues will go away, we'll use brute force to glue all kinds of things together. Meanwhile, if you've got enough hardware and a maintainable network, maybe there's some distributed compilation thingamabob available somewhere. Of course, some problems are P-complete, but I'd hazard a guess that trying different permutations in the hope that one is faster in practice is not one of them. > I can't say I like make, but any tool which requires to compile some > files twice, or insists on recompiling everything after a > local change, is not a viable alternative. I'm sure there's probably a gradiated range of tradeoffs available for a tool designer. For instance, brute force could generate a provisional dependency graph, then be reused some of the time, if not all of the time. That might actually work to speed things up most of the time. Cheers, www.indiegamedesign.com Brand*n Van Every S*attle, WA Praise Be to the caml-list Bayesian filter! It blesseth my postings, it is evil crap! evil crap! Bigarray! Unboxed overhead group! Wondering! chant chant chant... Is my technical content showing? // return an array of 100 packed tuples temps int $[tvar0][2*100]; // what the c function needs value $[tvar1]; // one int value $[tvar2]; // one tuple int $[tvar3] // loop control var oncePre eachPre $[cvar0]=&($[tvar0][0]); eachPost $[lvar0] = alloc(2*100, 0 /*NB: zero-tagged block*/ ); for(int $[tvar3]=0;$[tvar3]<100;$[tvar3]++) { $[tvar2] = alloc_tuple(2); $[tvar1] = Val_int($[cvar0][0+2*$[tvar3]]); Store_field($[tvar2],0,$[tvar1]); $[tvar1] = Val_int($[cvar0][1]); Store_field($[tvar2],1,$[tvar1+2*$[tvar3]]); Array_store($[lvar0],$[tvar3],$[tvar0]); } oncePost ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 22:41 ` Brandon J. Van Every @ 2004-09-06 12:13 ` Marcin 'Qrczak' Kowalczyk 0 siblings, 0 replies; 85+ messages in thread From: Marcin 'Qrczak' Kowalczyk @ 2004-09-06 12:13 UTC (permalink / raw) To: Brandon J. Van Every; +Cc: caml "Brandon J. Van Every" <vanevery@indiegamedesign.com> writes: > 'Language', by your definition, can include a GUI. Under Visual Studio > 2003, when doing C++ projects, the only one I definitely have to mess > with is 'make install'. All the other jobs are common enough that I > simply don't have to worry about them. Of course, I do have to > point-n-click, drag-n-drop to get my source files properly organized. There are two problems with this approach. (Disclaimer: I've never seen VS.) 1. It relies on the fact that the project is manipulated only within VS. You can't just add or rename a file physically, you must register it in the project. I guess file metadata are kept with explicit lists of files, not with patterns like "all files with this extension in all subdirectories of this dir". A makefile allows to decouple tools for editing and distribution from tools for building. A person working on a project can use any editor she wants, even to add and remove files. I already switched editors once during this project (from jed to emacs). Only some kinds of changes need to be synchronized with makefiles. Adding a new "library" to be built currently requires adding it to makefiles. Adding a conditionally included module with a few alternative implementations too. If there are too many such modules, I will do something to automatize it better. If some another build tool allowed to manage less metadata explicitly, and instead derive them from file contents, it would be better. My compiler allows to put various options in parameter files stored along with sources, so they don't need to be put in makefiles. These parameter files allow to generate the transitive closure of "used library" dependencies automatically, and gather linker options from them. 2. Integrated environments like VS work better for typical projects. They may be hard to adapt to unusual requirements. Consider the basic issue of language choice. What one needs to do to use VS with a language unknown to VS? How to tell VS about dependencies which need to be generated by a custom tool? Will it work if the compiler to use on some files is built in this very project? How to say that files in this subdirectory are usually built with an earlier version of this compiler, whose location was determined at some time earlier, but I want to explicitly rebuild them with the compiler these files just produced? >> And if I make small changes in one file in order to find some bug, >> it's essential to recompile only a few relevant files. How does it >> know which other files need to be rebuilt if it does not know *all* >> dependencies? Rebuilding everything is out of the question. It should >> take 7 seconds, not 7 minutes. And it does with make. > > In 20..30 years, we will be using cheap, massively parallel computers > and exhaustively searching all the available options. These issues will > go away. I don't want to wait 20 years. I'm developing the project *now*. It would already be considered too slow 10 years ago. Unfortunately my compiler produces big output files which take some time to compile. This is due to design goals: I wanted it to be fast without the need of complicated static analysis, and with generating plain portable C. My way to archieve these goals had a side effect of producing lots of code. The resulting executable which does nothing except initializing the core library has the size of a megabyte (no dynamic linking for now, except stock C libraries). So it's already heavier than I wished to. If building was twice as slow, it would be noticeably slower. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 15:08 ` skaller 2004-09-05 15:38 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-05 16:09 ` David Brown 2004-09-05 18:31 ` skaller 1 sibling, 1 reply; 85+ messages in thread From: David Brown @ 2004-09-05 16:09 UTC (permalink / raw) To: skaller; +Cc: Marcin 'Qrczak' Kowalczyk, caml-list On Mon, Sep 06, 2004 at 01:08:13AM +1000, skaller wrote: > Fixpoint iteration works and is universal. It isn't universal, though. There are pathalogical cases, even with common tools where it never will stabilize. It is an exercise in the TeXbook. There are also some old Ada compilers that wouldn't build without proper ordering. Fortunately, with Ada, the order can be determined from the source. In fact, other than C, and the few things I mentioned earlier about ocaml, a possible (and correct) build order can be determined from an analysis of the source, and an understanding of the languages involved. I'm not sure if having a specific build order is a bad thing, I just think make's approach to determine it aren't right. Dave ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 16:09 ` David Brown @ 2004-09-05 18:31 ` skaller 2004-09-06 10:56 ` Andreas Rossberg 0 siblings, 1 reply; 85+ messages in thread From: skaller @ 2004-09-05 18:31 UTC (permalink / raw) To: David Brown; +Cc: Marcin 'Qrczak' Kowalczyk, caml-list On Mon, 2004-09-06 at 02:09, David Brown wrote: > On Mon, Sep 06, 2004 at 01:08:13AM +1000, skaller wrote: > > > Fixpoint iteration works and is universal. > > It isn't universal, though. There are pathalogical cases, even with common > tools where it never will stabilize. I think it is very rare to find a case which would stabilise with a manual order and not fixpoint iteration. Clearly, the claim to universality means 'the result will eventually converge to the same result as a correct hand crafted solution'. This claim isn't true. Every mathematician knows there are functions with local maxima which are not global maxima, and some algorithms which try to converge on the maxima will pick the wrong one. It is also possible to have processes which are so badly degenerate unless they're started with a sensible initial condition they just drop dead immediately and never recover. I know all about this one, since interscript is itself literate programmed and used to build itself -- and a few times I got a degenerate version with a hidden bug, installed it as the fallback, only to find the bug propagated .. and I had to manually edit the fallback Python script and LP sources (in parallel) to get the bootstrap converging. So yes, you're right, but in practice this is very rare, and its unlikely a conventional system would fare any better. . > There are also some old Ada compilers that wouldn't build without proper > ordering. Fortunately, with Ada, the order can be determined from the > source. I don't understand. If there is an partial order, fixpoint iteration should find it (eventually). It doesn't matter if a build fails, as long as at least one extra step succeeds each pass. > I'm not sure if having a specific build order is a bad thing, I just think > make's approach to determine it aren't right. Of course it isn't a bad thing! The point is to regard this kind of information as an optimisation. Fast builds are important. All real projects also contain test code, documentation, and all sorts of other stuff much of which is generated, and some of which is executed. And these relationships aren't flat either -- sometimes you need to generate a program to generate a program: in fact Autoconf is a perfect example of a long (and fragile) toolchain. The key thing is that the fixpoint just handles the lot automatically in almost all cases. [This isn't theory, I've been using it for well over a decade] In particular, you can certainly make the building of, for example, Ocaml codes fast by specifying an order -- possibly by executing some tool that generates it. [For the Felix project I just maintain a list by hand] However, to do that for every single tiny part of the system and get it right is probably quite hard, even harder to maintain, and at worst Goedel's theorem might intervene and make it completely impossible (since you'd have to manage the code managing the code ...) I guess the point I want to make here is that make systems just don't scale in practice, and that can't be fixed by extensions or new versions of it because the fault is fundamental to the concept of specified targets and dependencies. We need new concepts, and I'm proposing a new kind of solution: output tracking, convergence to fixpoints, an executable high power scripting system, a uniform packaging mechanism, and dependencies treated as optimisations. I'm not claiming interscript itself should be used: just that the ideas be considered as an alternative to the way make handles things. Interscript 1.0a11[123] Process Mon 06 Sep, 2004 04:22:36 (EST) SKIPPING (files skipped last run, which did not converge) BUILDNO 298 Unable to load sh tangler for "bagley/run.sh": using data $Id: flx_maker.ipk,v 1.75 2004/09/02 13:52:14 skaller Exp $ Pass 1 status: <not converged> Files : 277 New : 0 Changed : 1 Unchanged: 276 You see it knows what has changed. And that one file probably has the CVS time stamp in it or something because this particular process never converges. But it doesn't matter -- my program still builds :) -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 18:31 ` skaller @ 2004-09-06 10:56 ` Andreas Rossberg 2004-09-06 15:51 ` skaller 0 siblings, 1 reply; 85+ messages in thread From: Andreas Rossberg @ 2004-09-06 10:56 UTC (permalink / raw) To: caml-list skaller wrote: >> >>>Fixpoint iteration works and is universal. >> >>It isn't universal, though. There are pathalogical cases, even with common >>tools where it never will stabilize. > > I think it is very rare to find a case which would > stabilise with a manual order and not fixpoint iteration. That isn't the point, though. There are tools that are not intended to produce stable outputs! For example, a tool might be generating time stamps or guids in its output files. Such tools will never work with a fixpoint scheme, so you can hardly claim its universality. Also, I'm not convinced that the move from a declarative to an imperative build paradigm is really what most people into functional programming would like to see... ;-) - Andreas -- Andreas Rossberg, rossberg@ps.uni-sb.de Let's get rid of those possible thingies! -- TB ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 10:56 ` Andreas Rossberg @ 2004-09-06 15:51 ` skaller 0 siblings, 0 replies; 85+ messages in thread From: skaller @ 2004-09-06 15:51 UTC (permalink / raw) To: Andreas Rossberg; +Cc: caml-list On Mon, 2004-09-06 at 20:56, Andreas Rossberg wrote: > skaller wrote: > >> > >>>Fixpoint iteration works and is universal. > >> > >>It isn't universal, though. There are pathalogical cases, even with common > >>tools where it never will stabilize. > > > > I think it is very rare to find a case which would > > stabilise with a manual order and not fixpoint iteration. > > That isn't the point, though. There are tools that are not intended to > produce stable outputs! For example, a tool might be generating time > stamps or guids in its output files. Such tools will never work with a > fixpoint scheme, so you can hardly claim its universality. Yes that's true. So in fact the claim must be watered down. Perhaps you can help characterize the actual properties the system has? One needs to observe that a conventional build will also yield indeterminate results, if, for example, you encode the build time into the result -- build it again, you get a different timestamp. Where such artefacts are intended, you can modify the build specification to exclude this information from consideration as an output for the purposes of convergence checking. Interscript can handle this (you can just use the ordinary Python open() function instead of the special one :) So yes -- more work is needed to characterize what can and can't be done, and even more to figure out how to optimise the process. > Also, I'm not convinced that the move from a declarative to an > imperative build paradigm is really what most people into functional > programming would like to see... ;-) Well, the key concept is of finding a fixpoint, which is central to functional programming. The iterative algorithm for doing it is nothing but tail recursion.. :) The fact that the build rules are 'executable' is to obtain generality and is the same as for make. The thing is that functional programming is NOT declarative. Perhaps if there were a more universal and efficient way to specify how to compute a value, there could be, but so long as one is encoding functions the way we do in C, C++, Ocaml, and many other similar languages I can't conceive of it as 'declarative' programming -- the typing is declarative, and perhaps Mercury is declarative -- ML function codes certainly aren't. I hinted at a way to structure the build rules more declaratively using a graph generating a category -- but the fact is I don't really have more than a hint how this might work. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 13:38 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 14:50 ` chris.danx 2004-09-05 15:08 ` skaller @ 2004-09-06 7:11 ` Christian Lindig 2004-09-06 12:20 ` Marcin 'Qrczak' Kowalczyk 2 siblings, 1 reply; 85+ messages in thread From: Christian Lindig @ 2004-09-06 7:11 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: caml-list On Sep 5, 2004, at 3:38 PM, Marcin 'Qrczak' Kowalczyk wrote: > It would be interesting to invent some alternative paradigm, but I've > never seen one. Here are the paradigms for build systems that I know: Make - uses rules to specify the dependency tree, walks the dependency tree, analyzes the file system, and builds files concurrently (hence, no planning in advance) Vesta - specifies the build procedure in a functional language and evaluates the procedure for building. No concept of updating like in Make - all builds are complete in concept; efficiency comes from caching intermediate results and hence the evaluator knows that it does not have to rebuild everything. The Vesta system observes dependencies by observing the tools that are run during the build process: which files are read and written. Very powerful but is more an environment than a tool. Jam - like Make, but has procedural abstraction: a program is evaluated to build up the dependency tree. Unlike Make, clean separation of phases: analyzes the file system, makes a plan, and executes it. Hence, no checking the file system while executing the plan. Similar tools: Cons, SCons. You can find papers here: http://www.research.compaq.com/SRC/vesta/pubs/pldi-00-04-20.pdf http://www.dsmit.com/cons/ http://www.perforce.com/jam/jam.html http://www.perforce.com/jam/jam.html -- Christian -- http://www.st.cs.uni-sb.de/~lindig/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 7:11 ` Christian Lindig @ 2004-09-06 12:20 ` Marcin 'Qrczak' Kowalczyk 2004-09-06 14:12 ` Christian Lindig 0 siblings, 1 reply; 85+ messages in thread From: Marcin 'Qrczak' Kowalczyk @ 2004-09-06 12:20 UTC (permalink / raw) To: Christian Lindig; +Cc: caml-list Christian Lindig <lindig@cs.uni-sb.de> writes: > Jam - like Make, but has procedural abstraction: a program is > evaluated to build up the dependency tree. Unlike Make, clean > separation of phases: analyzes the file system, makes a plan, and > executes it. Hence, no checking the file system while executing the > plan. Similar tools: Cons, SCons. If changes to a module didn't result in changing its interface, my compiler is careful to not overwrite the interface file, so modules depending on this module will not be recompiled by make. How does Jam deal with this? Before we compile a module, we don't know whether modules which use it will need to be recompiled. Of course it can conservatively assume that they always will be, but then it's a disadvantage compared to make. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 12:20 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-06 14:12 ` Christian Lindig 0 siblings, 0 replies; 85+ messages in thread From: Christian Lindig @ 2004-09-06 14:12 UTC (permalink / raw) To: Marcin 'Qrczak' Kowalczyk; +Cc: caml-list On Sep 6, 2004, at 2:20 PM, Marcin 'Qrczak' Kowalczyk wrote: > If changes to a module didn't result in changing its interface, my > compiler is careful to not overwrite the interface file, so modules > depending on this module will not be recompiled by make. > > How does Jam deal with this? Before we compile a module, we don't know > whether modules which use it will need to be recompiled. In my understanding, Jam can't deal with this (and hence OCaml). While I find a separation of planning and execution highly desirable because it enables compilation of build scripts, there must be some kind of checking possible while a plan is executed. -- Christian -- http://www.st.cs.uni-sb.de/~lindig/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 5:20 ` skaller 2004-09-05 13:20 ` David Brown 2004-09-05 13:38 ` Marcin 'Qrczak' Kowalczyk @ 2004-09-06 1:06 ` Richard Jones 2004-09-06 1:50 ` Brandon J. Van Every 2004-09-06 8:59 ` skaller 2 siblings, 2 replies; 85+ messages in thread From: Richard Jones @ 2004-09-06 1:06 UTC (permalink / raw) Cc: caml-list [-- Attachment #1: Type: text/plain, Size: 957 bytes --] On Sun, Sep 05, 2004 at 03:20:56PM +1000, skaller wrote: > My personal take is: all 'make' based build systems > are fundamentally flawed because they're based on > the wrong concept. Can I stand up for 'make' (well, GNU make anyway) and point out that whatever its philosophical problems, it: (a) works (b) works on lots of different platforms, including Windows (c) works with lots of different languages (except Java, but that's Java's fault), including our favorite OCaml, and (d) is familiar and simple to use for most developers Sorry, just had to point out that sometimes the perfect tool fails for practical reasons. Rich. -- Richard Jones. http://www.annexia.org/ http://www.j-london.com/ Merjis Ltd. http://www.merjis.com/ - improving website return on investment C2LIB is a library of basic Perl/STL-like types for C. Vectors, hashes, trees, string funcs, pool allocator: http://www.annexia.org/freeware/c2lib/ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 85+ messages in thread
* RE: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 1:06 ` Richard Jones @ 2004-09-06 1:50 ` Brandon J. Van Every 2004-09-06 9:09 ` skaller 2004-09-06 8:59 ` skaller 1 sibling, 1 reply; 85+ messages in thread From: Brandon J. Van Every @ 2004-09-06 1:50 UTC (permalink / raw) To: caml Richard Jones wrote: > > Can I stand up for 'make' (well, GNU make anyway) and point out > that whatever its philosophical problems, it: > > (a) works As per discussion, YMMV. > (b) works on lots of different platforms, including Windows Um, sorta. Getting a GNU Make that is bug-free, up-to-date, and plays well with MSVC is more problematic than you'd think. Well at least, I ran around and around in circles about it for awhile. Somewhere somehow I came up with a valid one, and I'm not sure where I got it. There are some longstanding bugs pertaining to Windows that are still extant in the GNU source code, that they're not resolving "because it's not enough to make another release out of." This has been true for a few years. Other people have made patches, but these don't get incorporated into canonical builds and aren't readily distributed anywhere. It is more accurate to say that GNU Make works fine in a Cygwin / Mingw environment. That isn't really Windows, it's UNIX viralling into Windows. Many projects also orient themselves towards GNU Autoconf, which again is problematic in a pure MSVC environment. One of these days I may port Autoconf to MSVC, or track down someone else's effort. Last time I looked at that problem, I failed to get it done. It didn't look like such an easy problem, because m4 wasn't so easy to move over. But, solving *that* problem would be preferrable to going through the same UNIX dependency-and-elimination headaches one has to do anytime one moves a project from Cygwin / Mingw to MSVC. At least if Autoconf worked in the pure MSVC enviornment and targetted the right header files, you'd know how much of the Cygwin / Mingw project isn't portable. Then you could decide if it's trivial to eliminate UNIX dependencies, a lot of work, or impossible. So if someone came up with an OCaml-centric build tool that resolved configuration dependencies, was written in OCaml, worked well under all platforms including *native* Windows, and lotsa people used it, I'd be DAMN HAPPY. I think the Python community is strengthened in this regard. Seemingly they can run their stuff on all the platforms, they really don't have to care much at all which platform it's on. Getting OCaml to the point where it's really platform neutral is a worthy goal. I don't see GNU Make as part of that goal. I see it as a stepping stone that many of us would like to step over already, for all of our various reasons. > (c) works with lots of different languages (except Java, but that's > Java's fault), including our favorite OCaml, and Agreed. > (d) is familiar and simple to use for most developers Gimme a break. I put a *HUGE* learning curve into GNU Make, once upon a time. It's not simple, it's just familiar to a lot of UNIXen. Ok, it's simple for trivially sized projects. When you start getting into multiple directories, auto-generating dependencies, and keeping debug vs. release builds separated from one another, you end up doing tons of manual labor that IDEs like Visual Studio simply solve. > Sorry, just had to point out that sometimes the perfect tool fails for > practical reasons. Yes, again see my question on critical mass. Cheers, www.indiegamedesign.com Brand*n Van Every S*attle, WA Praise Be to the caml-list Bayesian filter! It blesseth my postings, it is evil crap! evil crap! Bigarray! Unboxed overhead group! Wondering! chant chant chant... Is my technical content showing? // return an array of 100 packed tuples temps int $[tvar0][2*100]; // what the c function needs value $[tvar1]; // one int value $[tvar2]; // one tuple int $[tvar3] // loop control var oncePre eachPre $[cvar0]=&($[tvar0][0]); eachPost $[lvar0] = alloc(2*100, 0 /*NB: zero-tagged block*/ ); for(int $[tvar3]=0;$[tvar3]<100;$[tvar3]++) { $[tvar2] = alloc_tuple(2); $[tvar1] = Val_int($[cvar0][0+2*$[tvar3]]); Store_field($[tvar2],0,$[tvar1]); $[tvar1] = Val_int($[cvar0][1]); Store_field($[tvar2],1,$[tvar1+2*$[tvar3]]); Array_store($[lvar0],$[tvar3],$[tvar0]); } oncePost ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* RE: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 1:50 ` Brandon J. Van Every @ 2004-09-06 9:09 ` skaller 0 siblings, 0 replies; 85+ messages in thread From: skaller @ 2004-09-06 9:09 UTC (permalink / raw) To: Brandon J. Van Every; +Cc: caml-list On Mon, 2004-09-06 at 11:50, Brandon J. Van Every wrote: > Many projects also orient themselves towards GNU Autoconf, which again > is problematic in a pure MSVC environment. Hahahah :) Autoconf doesn't even work on Linux! > I think the Python community is strengthened in this regard. Seemingly > they can run their stuff on all the platforms, they really don't have to > care much at all which platform it's on. Python worked pretty well cross platform, with some care, for pure Python code for quite some time -- but with distutils the transparency is enhanced to include C extensions which is a pretty major leap forward, since extensions are a vital part of Python. In fact, Ocaml is pretty close to this goal already: the lower level technology is largely in place, and tools like 'findlib' help with integration. There's just no top level tool, because to make one requires a standard package architecture (way of installing things so they get found and built if necessary). INRIA would probably say "that's not our problem". > Gimme a break. I put a *HUGE* learning curve into GNU Make, once upon a > time. It's not simple, it's just familiar to a lot of UNIXen. Ok, it's > simple for trivially sized projects. When you start getting into > multiple directories, auto-generating dependencies, and keeping debug > vs. release builds separated from one another, you end up doing tons of > manual labor that IDEs like Visual Studio simply solve. I doubt IDE's solve this -- they simply provide an interactive management facility with a higher level of automation, but the price is that extending them is much harder: they don't scale either, they just break later :) -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 1:06 ` Richard Jones 2004-09-06 1:50 ` Brandon J. Van Every @ 2004-09-06 8:59 ` skaller 1 sibling, 0 replies; 85+ messages in thread From: skaller @ 2004-09-06 8:59 UTC (permalink / raw) To: Richard Jones; +Cc: caml-list On Mon, 2004-09-06 at 11:06, Richard Jones wrote: > On Sun, Sep 05, 2004 at 03:20:56PM +1000, skaller wrote: > > My personal take is: all 'make' based build systems > > are fundamentally flawed because they're based on > > the wrong concept. > > Can I stand up for 'make' (well, GNU make anyway) and point out > that whatever its philosophical problems, it: > > (a) works No it doesn't. That's the problem. If it really did work, why do imake, omake, ocamake, cake, and many other such derivates exist? It fails to be even marginally scalable -- for any significant project it collapses almost immediately, and these days it fails -- totally and abysmally -- to cope with 99% of all C projects as well -- which is why those projects also use M4, Auto* tools, shell scripts, make templates, Perl or Python, and many other such tools. Extend that to a major system requiring multi-platform support, multiple target kinds (debugging, s tatic/dynamic link ...) multiple developers, versioning, documentation and testing, multiple languages, etc etc and the collapse is total -- the tool becomes an *impediment* to productivity. Mandating that the whole of such a control system be written in Perl plus a small set of external tools is a much better, more expressive and scalable solution. I'm not saying make isn't useful, I'm saying it isn't a general purpose project build tool. It doesn't even come close. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 18:27 ` chris.danx 2004-09-04 19:59 ` Matthieu Dubuget @ 2004-09-04 23:58 ` Nicolas Cannasse 2004-09-05 1:18 ` james woodyatt 1 sibling, 1 reply; 85+ messages in thread From: Nicolas Cannasse @ 2004-09-04 23:58 UTC (permalink / raw) To: chris.danx; +Cc: Jason Hickey, caml-list > One question that springs to mind is why hasn't anyone made a tool that > does the build process based on the semantics of Ocaml? Or have they? > I used to (and sometimes still do) program in Ada using Gnat and most of > the compilation can be handled by tools like gnatmake which handles all > the dependancies. The Ada language has some specific rules on > compilation and recompilation. Perhaps this is the difference? Well I think OCamake is doing this : http://tech.motion-twin.com/ocamake and it works well on all platforms running OCaml. Nicolas Cannasse ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 23:58 ` Nicolas Cannasse @ 2004-09-05 1:18 ` james woodyatt 2004-09-05 1:26 ` [Caml-list] Perl Conjury (alternative to Unix make) james woodyatt ` (2 more replies) 0 siblings, 3 replies; 85+ messages in thread From: james woodyatt @ 2004-09-05 1:18 UTC (permalink / raw) To: The Caml Trade everyone— [I have a question for the community at the end of this message. If you are interested in this general topic, then please consider commenting on my question. Thanks.] OMake looks good, but it is GPL— which prevents me from using it until it is a widely distributed and mature product. For developers interested in a non-GPL (yet still open source) alternative to the venerable Unix make(1) tool, I'd like to mention an old Perl project of mine: Conjury. Conjury was written entirely in modular Perl, and one of its interesting features is that the entire build system, including the implementation of its construction tools, can be distributed within the source code tree of the project which uses it. It depends only on a stock installation of the Perl distribution. Here is the README for the latest version: <http://www.cpan.org/modules/by-module/Conjury/conjury-1.004.readme> The rest of its documentation is bundled internally as Perldoc, and there is no online repository for HTML pages for it. Sorry. It is licensed under the 2-clause BSD license (like all of my code). And while I haven't maintained it in several years, I have been considering resurrecting it for use in my forthcoming OCaml Network Application Environment (NAE), which I am building out on SF.Net now. (This is the official project name on SourceForge for what I have previously called my Pagoda project. There is already an unrelated Pagoda project on SF.Net.) I looked at cons and gnatmake and jam and lots of other tools back in 1999 when I wrote Conjury, and I found them all wanting. I still need to write decent support for the OCaml toolchain before Conjury would work for me, but at the moment, it's looking like the best alternative available for my purposes. Would there be interest in Perl Conjury as a separate project if it supported the OCaml toolchain, or can I safely just bundle it inside OCaml NAE and hide it from the user with a shell written in the Unix make(1) language? Would anyone like to comment on that? Thanks. -- j h woodyatt <jhw@wetware.com> markets are only free to the people who own them. ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* [Caml-list] Perl Conjury (alternative to Unix make) 2004-09-05 1:18 ` james woodyatt @ 2004-09-05 1:26 ` james woodyatt 2004-09-05 2:03 ` [Caml-list] Announcing the OMake build system version 0.9.1 David Brown 2004-09-05 20:38 ` Aleksey Nogin 2 siblings, 0 replies; 85+ messages in thread From: james woodyatt @ 2004-09-05 1:26 UTC (permalink / raw) To: The Caml Trade On 04 Sep 2004, at 18:18, james woodyatt wrote: > [...] Here is the README for the latest version: > > <http://www.cpan.org/modules/by-module/Conjury/conjury-1.004.readme> > > The rest of its documentation is bundled internally as Perldoc, and > there is no online repository for HTML pages for it. Sorry. [...] Holy cats. Somebody autogenerated HTML man pages and put them on the web. <http://www.softbrain.co.kr/CPANdoc/Conjury.html> -- j h woodyatt <jhw@wetware.com> markets are only free to the people who own them. ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 1:18 ` james woodyatt 2004-09-05 1:26 ` [Caml-list] Perl Conjury (alternative to Unix make) james woodyatt @ 2004-09-05 2:03 ` David Brown 2004-09-05 2:37 ` james woodyatt 2004-09-05 20:38 ` Aleksey Nogin 2 siblings, 1 reply; 85+ messages in thread From: David Brown @ 2004-09-05 2:03 UTC (permalink / raw) To: james woodyatt; +Cc: The Caml Trade On Sat, Sep 04, 2004 at 06:18:58PM -0700, james woodyatt wrote: > OMake looks good, but it is GPL? which prevents me from using it until > it is a widely distributed and mature product. There isn't any particular reason you couldn't distribute a GPL program along with a program of another license. They aren't linked together, and therefore the licenses don't affect one another. Your program could even be a closed-source binary-only program that is distributed along with omake (but there is less of a need to do so). Dave ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 2:03 ` [Caml-list] Announcing the OMake build system version 0.9.1 David Brown @ 2004-09-05 2:37 ` james woodyatt 2004-09-05 6:24 ` Nathaniel Gray 0 siblings, 1 reply; 85+ messages in thread From: james woodyatt @ 2004-09-05 2:37 UTC (permalink / raw) To: The Caml Trade On 04 Sep 2004, at 19:03, David Brown wrote: > On Sat, Sep 04, 2004 at 06:18:58PM -0700, james woodyatt wrote: > >> OMake looks good, but it is GPL? which prevents me from using it until >> it is a widely distributed and mature product. > > There isn't any particular reason you couldn't distribute a GPL program > along with a program of another license. They aren't linked together, > and > therefore the licenses don't affect one another. Your program could > even > be a closed-source binary-only program that is distributed along with > omake > (but there is less of a need to do so). No. If I turn to a construction tool that comprises the functions I want in addition to what is available in the POSIX make(1) tool, then I will want to construct my project in such a way that establishes a linkage between my source code and the construction tool under the terms of the GPL. The GPL prevents me from using OMake for anything other than what I already use Make. That's no good for me. -- j h woodyatt <jhw@wetware.com> markets are only free to the people who own them. ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 2:37 ` james woodyatt @ 2004-09-05 6:24 ` Nathaniel Gray 0 siblings, 0 replies; 85+ messages in thread From: Nathaniel Gray @ 2004-09-05 6:24 UTC (permalink / raw) To: james woodyatt; +Cc: The Caml Trade On Sat, 4 Sep 2004 19:37:22 -0700, james woodyatt <jhw@wetware.com> wrote: > On 04 Sep 2004, at 19:03, David Brown wrote: > > On Sat, Sep 04, 2004 at 06:18:58PM -0700, james woodyatt wrote: > > > >> OMake looks good, but it is GPL? which prevents me from using it until > >> it is a widely distributed and mature product. > > > > There isn't any particular reason you couldn't distribute a GPL program > > along with a program of another license. They aren't linked together, > > and > > therefore the licenses don't affect one another. Your program could > > even > > be a closed-source binary-only program that is distributed along with > > omake > > (but there is less of a need to do so). > > No. If I turn to a construction tool that comprises the functions I > want in addition to what is available in the POSIX make(1) tool, then I > will want to construct my project in such a way that establishes a > linkage between my source code and the construction tool under the > terms of the GPL. Can you be more specific? What are the functions you want? Why would they require you to link OMake into your final project and distribute it to your end users? Assuming your project is not a build tool itself, why would you want to make it a derived work of a build tool? > The GPL prevents me from using OMake for anything other than what I > already use Make. That's no good for me. What use do you have in mind? Cheers, -n8 -- >>>-- Nathaniel Gray -- Caltech Computer Science ------> >>>-- Mojave Project -- http://mojave.cs.caltech.edu --> ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 1:18 ` james woodyatt 2004-09-05 1:26 ` [Caml-list] Perl Conjury (alternative to Unix make) james woodyatt 2004-09-05 2:03 ` [Caml-list] Announcing the OMake build system version 0.9.1 David Brown @ 2004-09-05 20:38 ` Aleksey Nogin 2004-09-06 0:12 ` james woodyatt 2 siblings, 1 reply; 85+ messages in thread From: Aleksey Nogin @ 2004-09-05 20:38 UTC (permalink / raw) To: james woodyatt, Caml List, omake On 04.09.2004 18:18, james woodyatt wrote: > OMake looks good, but it is GPL— which prevents me from using it until > it is a widely distributed and mature product. Could you please explain what kinds of things you might want to do and what license(s) would be needed to make it possible? Right now omake only contains code written by 3 people (if I am not mistaken), so if there is a strong argument for a different license, then we might consider it. -- Aleksey Nogin Home Page: http://nogin.org/ E-Mail: nogin@cs.caltech.edu (office), aleksey@nogin.org (personal) Office: Jorgensen 70, tel: (626) 395-2907 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 20:38 ` Aleksey Nogin @ 2004-09-06 0:12 ` james woodyatt 2004-09-06 0:33 ` [Omake] " Aleksey Nogin ` (3 more replies) 0 siblings, 4 replies; 85+ messages in thread From: james woodyatt @ 2004-09-06 0:12 UTC (permalink / raw) To: omake; +Cc: Caml List On 05 Sep 2004, at 13:38, Aleksey Nogin wrote: > On 04.09.2004 18:18, james woodyatt wrote: >> >> OMake looks good, but it is GPL— which prevents me from using it >> until it is a widely distributed and mature product. > > Could you please explain what kinds of things you might want to do and > what license(s) would be needed to make it possible? I want to be able to extend the functions so that my build system knows how to use more toolchains than just C and Ocaml, and I want those extensions to be bundled with my non-GPL code. If I were to use Omake, then I expect my code would link to the functions in the Omake distribution, and I would then be in violation of the GPL if I didn't use a GPL-compatible license for my distribution. > Right now omake only contains code written by 3 people (if I am not > mistaken), so if there is a strong argument for a different license, > then we might consider it. I think LGPL might be a more appropriate license for you if you are interested in broadening the user base for Omake beyond the GPL cybersphere. I'm not trying to argue for you to change the license. I am not nearly enough of an egomaniac to believe that my declining to use your tool should be considered a "strong argument" for you to adopt a different license. -- j h woodyatt <jhw@wetware.com> markets are only free to the people who own them. ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Omake] Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 0:12 ` james woodyatt @ 2004-09-06 0:33 ` Aleksey Nogin 2004-09-06 3:54 ` Brian Hurt 2004-09-06 1:14 ` Brandon J. Van Every ` (2 subsequent siblings) 3 siblings, 1 reply; 85+ messages in thread From: Aleksey Nogin @ 2004-09-06 0:33 UTC (permalink / raw) To: omake, james woodyatt; +Cc: Caml List On 05.09.2004 17:12, james woodyatt wrote: > I want to be able to extend the functions so that my build system knows > how to use more toolchains than just C and Ocaml, and I want those > extensions to be bundled with my non-GPL code. If I were to use Omake, > then I expect my code would link to the functions in the Omake > distribution, and I would then be in violation of the GPL if I didn't > use a GPL-compatible license for my distribution. There is no "linking" involved when you use the built-in rules of omake. The way it looks is that in your own OMakeroot file you will have something like: # # Include the standard configuration # include $(STDROOT) (although I do not really know what would be considered "linking" in a case of an interpreted language). As I mentioned in an earlier post, the "built-in" support of C, OCaml, LaTeX, etc is not some built-in magic - there is just a "global" omake file that is included in the distribution that defines a number of default rules, using the same syntax that you would use in your own OMakefile. The situation is identical to having a big make file with a lot of useful rules and you just adding include /usr/local/lib/make/UsefulMakeFile to the Makefile in your project. Doing something like that would in no way require modifying make itself in any way. I would guess there would be nothing wrong with using a liberal license (BSD or like) on this "global omake file", in order to allow users to borrow pieces of it and freely modify them as needed, while the main omake engine would still stay GPL... Do people feel that a license change of this sort would be helpful? -- Aleksey Nogin Home Page: http://nogin.org/ E-Mail: nogin@cs.caltech.edu (office), aleksey@nogin.org (personal) Office: Jorgensen 70, tel: (626) 395-2907 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Omake] Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 0:33 ` [Omake] " Aleksey Nogin @ 2004-09-06 3:54 ` Brian Hurt 2004-09-06 6:39 ` Jason Hickey ` (3 more replies) 0 siblings, 4 replies; 85+ messages in thread From: Brian Hurt @ 2004-09-06 3:54 UTC (permalink / raw) To: james woodyatt, Caml List, omake On Sun, 5 Sep 2004, Aleksey Nogin wrote: > On 05.09.2004 17:12, james woodyatt wrote: > > > I want to be able to extend the functions so that my build system knows > > how to use more toolchains than just C and Ocaml, and I want those > > extensions to be bundled with my non-GPL code. If I were to use Omake, > > then I expect my code would link to the functions in the Omake > > distribution, and I would then be in violation of the GPL if I didn't > > use a GPL-compatible license for my distribution. > > There is no "linking" involved when you use the built-in rules of omake. > The way it looks is that in your own OMakeroot file you will have > something like: > > # > # Include the standard configuration > # > include $(STDROOT) > > (although I do not really know what would be considered "linking" in a > case of an interpreted language). Having actually had a discussion with an IP lawyer over basically this issue, fears of the GPL in this case are (I think) unfounded. First off, the GPL only covers, can only cover, derived works. The GPL- nor any copyright license- can not "infect" anything other than derived works. No license can- as a copyright holder, you only have rights over the original work and derivitive works, you have no more rights than that, period. So the question becomes one of what is a derived work. Wether or not simply *linking* creates a derived work is one that has not been answered authoritively. Simply manipulating a work, the original work being manipulated is the work the result is derived from, not the manipulator. Simply because you write a document in Microsoft Word doesn't give Microsoft copyright to your document. Simply because you compile code with Microsoft compilers, and run them on Microsoft run times, doesn't give Microsoft any rights to your code. The "transformations" don't matter, the original work is where the copyright springs from. Likewise, compiling your code with the GPL'd Gnu C does not mean- can not mean- that your code has to be GPL. THe license on the compiler is irrelevent- you own both the original work (the code) and the derivitive work (the executable). And simply because your interpreted code gets run on a GPL'd interpreter doesn't mean your code has to be GPL'd. Note that the fact that there is only one place that the work "makes sense" is irrelevent. I.e. it doesn't matter if the script you wrote only makes sense as an Omake build script. In fact, what you wrote doesn't have to make sense at all, anywhere, anytime- you still own the copyright to it. You wrote it, not "deriving" it from any other source, you own the copyright. This is why it's an open question as to wether simply linking code makes the linked code "derivitive" enough for the GPL to cross the threshold. If this becomes important, hire a lawyer. > I would guess there would be nothing wrong with using a liberal license > (BSD or like) on this "global omake file", in order to allow users to > borrow pieces of it and freely modify them as needed, while the main > omake engine would still stay GPL... Do people feel that a license > change of this sort would be helpful? > Yes. On the core interpreter, no. On the global omake file, yes. For two reasons. First off, reimplementing someone else's code (even in a different language) does create a derivitive work. Just like translating a novel into a different language creates a derivitive work. Making it a BSD license or similiar quashes this concern. Also, it encourages people to grab the file in whole and just edit it, making an obvious derivitive work. -- "Usenet is like a herd of performing elephants with diarrhea -- massive, difficult to redirect, awe-inspiring, entertaining, and a source of mind-boggling amounts of excrement when you least expect it." - Gene Spafford Brian ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 3:54 ` Brian Hurt @ 2004-09-06 6:39 ` Jason Hickey 2004-09-06 8:10 ` james woodyatt 2004-09-06 7:50 ` [Omake] " Erik de Castro Lopo ` (2 subsequent siblings) 3 siblings, 1 reply; 85+ messages in thread From: Jason Hickey @ 2004-09-06 6:39 UTC (permalink / raw) To: Caml List; +Cc: omake >>On 05.09.2004 17:12, james woodyatt wrote: >>>I want to be able to extend the functions so that my build system knows >>>how to use more toolchains than just C and Ocaml, and I want those >>>extensions to be bundled with my non-GPL code... This is sensible, I'd say it is a requirement of a general-purpose build system. We have updated the OMake configuration files to include the MIT unrestricted-use license explicitly. The OMake interpreter remains GPL, which should not affect licensing in your project. The script files use the MIT license, which reads as follows: --- Permission is hereby granted, free of charge, to any person obtaining a copy of this file, to deal in the File without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the File, and to permit persons to whom the File is furnished to do so, subject to the following condition: THE FILE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE FILE OR THE USE OR OTHER DEALINGS IN THE FILE. Regards, Jason -- Jason Hickey http://www.cs.caltech.edu/~jyh Caltech Computer Science Tel: 626-395-6568 FAX: 626-792-4257 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 6:39 ` Jason Hickey @ 2004-09-06 8:10 ` james woodyatt 0 siblings, 0 replies; 85+ messages in thread From: james woodyatt @ 2004-09-06 8:10 UTC (permalink / raw) To: Caml List, omake On 05 Sep 2004, at 23:39, Jason Hickey wrote: > > [...] The script files use the MIT license [...] Excellent. That makes me happy happy. Thank you. -- j h woodyatt <jhw@wetware.com> that's my village calling... no doubt, they want their idiot back. ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Omake] Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 3:54 ` Brian Hurt 2004-09-06 6:39 ` Jason Hickey @ 2004-09-06 7:50 ` Erik de Castro Lopo 2004-09-06 14:52 ` Brian Hurt 2004-09-06 9:52 ` skaller 2004-09-07 13:26 ` David Brown 3 siblings, 1 reply; 85+ messages in thread From: Erik de Castro Lopo @ 2004-09-06 7:50 UTC (permalink / raw) To: caml-list On Sun, 5 Sep 2004 22:54:09 -0500 (CDT) Brian Hurt <bhurt@spnz.org> wrote: > Having actually had a discussion with an IP lawyer over basically this > issue, fears of the GPL in this case are (I think) unfounded. > > First off, the GPL only covers, can only cover, derived works. The GPL- > nor any copyright license- can not "infect" anything other than derived > works. No license can- as a copyright holder, you only have rights over > the original work and derivitive works, you have no more rights than that, > period. So the question becomes one of what is a derived work. Wether or > not simply *linking* creates a derived work is one that has not been > answered authoritively. I think (and hope) that existing practice supports the idea that linking does create a derived work. I am the (sole) author of a library released under dual license; the GPL for linking with GPL compatibale code and a commercial use license allowing people to use the library in closed source applications. This commercial use license earns me money. The very fact that I give people an option (GPL or commercial) shows the intention that the library can only be used with closed source programs if a license is paid for. I am hoping that not even the slimiest lawyer would try to get around this. > This is why it's an open question as to wether simply linking > code makes the linked code "derivitive" enough for the GPL to cross the > threshold. If this becomes important, hire a lawyer. If you do decide to hire a lawyer, be aware of the large body of existing practice that would be used by the defence to uphold the linking/derived work connection. Erik -- +-----------------------------------------------------------+ Erik de Castro Lopo nospam@mega-nerd.com (Yes it's valid) +-----------------------------------------------------------+ "Linux is produced to be used, whereas the others are produced to be sold" -- Bobby D. Bryant ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Omake] Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 7:50 ` [Omake] " Erik de Castro Lopo @ 2004-09-06 14:52 ` Brian Hurt 2004-09-06 17:20 ` skaller 0 siblings, 1 reply; 85+ messages in thread From: Brian Hurt @ 2004-09-06 14:52 UTC (permalink / raw) To: Erik de Castro Lopo; +Cc: caml-list On Mon, 6 Sep 2004, Erik de Castro Lopo wrote: > I think (and hope) that existing practice supports the idea that > linking does create a derived work. What I specifically meant by "not been answered authoritively" is that it's never been put in front of a judge. There is basically no precedent to cover this. While existing practice is helpfull, as it tells the judge what is "common sense", it's not as helpfull as precedent is. Personally, I'm not sure where common sense lies here. What's the definition of derivitive work? What's the definition of linking? -- "Usenet is like a herd of performing elephants with diarrhea -- massive, difficult to redirect, awe-inspiring, entertaining, and a source of mind-boggling amounts of excrement when you least expect it." - Gene Spafford Brian ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Omake] Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 14:52 ` Brian Hurt @ 2004-09-06 17:20 ` skaller 0 siblings, 0 replies; 85+ messages in thread From: skaller @ 2004-09-06 17:20 UTC (permalink / raw) To: Brian Hurt; +Cc: Erik de Castro Lopo, caml-list On Tue, 2004-09-07 at 00:52, Brian Hurt wrote: > Personally, I'm not sure where common sense lies here. What's the > definition of derivitive work? I think there is plenty of precedent for that. > What's the definition of linking? But none here. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Omake] Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 3:54 ` Brian Hurt 2004-09-06 6:39 ` Jason Hickey 2004-09-06 7:50 ` [Omake] " Erik de Castro Lopo @ 2004-09-06 9:52 ` skaller 2004-09-06 15:10 ` Brian Hurt 2004-09-07 13:26 ` David Brown 3 siblings, 1 reply; 85+ messages in thread From: skaller @ 2004-09-06 9:52 UTC (permalink / raw) To: Brian Hurt; +Cc: james woodyatt, Caml List, omake On Mon, 2004-09-06 at 13:54, Brian Hurt wrote: > THe license on the compiler is irrelevent- you > own both the original work (the code) and the derivitive work (the > executable). Except the executable is probably *also* derived from other header files and libraries. > If this becomes important, hire a lawyer. Why would you believe a lawyer who can't cite a long history of case law (decisions made by judges)? > First off, reimplementing someone else's code (even in a > different language) does create a derivitive work. Translating it creates a derived work. Recoding the original code creates a derived work. But reimplementing the same algorithm does not. So .. hehe .. I could take your module and copy the mli file and implement the functions and then the interface is a derived work but the implementation is not. And in Ocaml I could then simply discard the mli file, run ocaml -i to derive a new mli file -- and hey presto, now the interface isn't a derived work either .. even if line for line it is totally identical to the original :) -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Omake] Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 9:52 ` skaller @ 2004-09-06 15:10 ` Brian Hurt 0 siblings, 0 replies; 85+ messages in thread From: Brian Hurt @ 2004-09-06 15:10 UTC (permalink / raw) To: skaller; +Cc: james woodyatt, Caml List, omake On 6 Sep 2004, skaller wrote: > > If this becomes important, hire a lawyer. > > Why would you believe a lawyer who can't cite a long > history of case law (decisions made by judges)? Because they have knowledge and experience that your average programmer or blowhard on the internet doesn't have. I wouldn't trust the average lawyer to write code, and I wouldn't trust the average programmer to write a license. > So .. hehe .. I could take your module and > copy the mli file and implement the functions and > then the interface is a derived work but the > implementation is not. And in Ocaml I could then > simply discard the mli file, run ocaml -i > to derive a new mli file -- and hey presto, > now the interface isn't a derived work either .. > even if line for line it is totally identical > to the original :) I'm not 100% sure where the line is drawn here. Nor am I 100% sure anyone else is either. That "blowhard on the internet" quip includes me- IANAL. An analogy to make things clear: I can, with a few sentences, explain type inference to my grandmother. But there are a heck of a lot of intricies and subtlities that will get glossed over in this paragraph introduction- some of them not so intricate or subtle. Exactly how corner cases and gray areas get handled can not be deduced from this abstract. In this case, I am grandma- I've had the five minute abstract thrown at me over dinner in casual conversation. -- "Usenet is like a herd of performing elephants with diarrhea -- massive, difficult to redirect, awe-inspiring, entertaining, and a source of mind-boggling amounts of excrement when you least expect it." - Gene Spafford Brian ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Omake] Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 3:54 ` Brian Hurt ` (2 preceding siblings ...) 2004-09-06 9:52 ` skaller @ 2004-09-07 13:26 ` David Brown 3 siblings, 0 replies; 85+ messages in thread From: David Brown @ 2004-09-07 13:26 UTC (permalink / raw) To: omake; +Cc: james woodyatt, Caml List On Sun, Sep 05, 2004 at 10:54:09PM -0500, Brian Hurt wrote: > Yes. On the core interpreter, no. On the global omake file, yes. For > two reasons. First off, reimplementing someone else's code (even in a > different language) does create a derivitive work. Just like translating > a novel into a different language creates a derivitive work. Making it a > BSD license or similiar quashes this concern. Also, it encourages people > to grab the file in whole and just edit it, making an obvious derivitive > work. Although, if it needs to be changed, this should probably be reported as a bug. This is important, since this file changes as new versions of omake come out. Dave ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* RE: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 0:12 ` james woodyatt 2004-09-06 0:33 ` [Omake] " Aleksey Nogin @ 2004-09-06 1:14 ` Brandon J. Van Every 2004-09-06 2:35 ` Jacques GARRIGUE 2004-09-06 7:51 ` Daniel Andor 3 siblings, 0 replies; 85+ messages in thread From: Brandon J. Van Every @ 2004-09-06 1:14 UTC (permalink / raw) To: caml james woodyatt wrote: > > I'm not trying to argue for you to change the license. I am > not nearly > enough of an egomaniac to believe that my declining to use your tool > should be considered a "strong argument" for you to adopt a different > license. But what other argument could ever be made? "Strength" of argument is subjective for all parties, but the argument is inevitably stated in terms of other people's needs and desires. A dealbreaker is a dealbreaker. LGPL is more permissive than GPL, that much is clear. It's all a question of how much restriction you think is necessary for open source to function in the manner you want. I think the LGPL is more appealing to people who think that some restrictions on commerce are a good idea, but are more interested in commercial recombinative utility than FSF ideology. I would note that GNU Make is GPLed and the vast majority of people just use it, warts and all. People with special anti-GPL build needs are a special case. Such people may create better build methodologies for us someday, but in the present, GPLing a tool is not a barrier for the vast majority of build tasks. One of the few areas where I feel a GPL is acceptable and valid is for a tool that's particularly cut-and-dried. Why should I care if my paint program is GPLed, for instance? I just want to paint. I'm not looking for starter code for a commercial paint program. Ironically, the GPL defeats my freedom to recombine such code as I wish... the very thing the GPL purports to protect! But if I actually don't care about that freedom, if I just want to use the tool rather than write a new tool, GPL is fine. Maybe I'd fix a bug because it's open source, but otherwise, why do I care? The only true freedom is putting the code in the public domain. MIT/BSD licenses are pretty darned close to that freedom. The GPL is not a 'total freedom' license, but rather an 'anti-proprietary' license. The GPL philosophy is that proprietary code is Bad [TM]. Waiting for the flames to ensue, for having dared to discuss licenses, even and despite having made points for all of the main open source licenses. Please, do flame away for adding an off-topic licensing discussion to an already painfully long thread. I'm sooooooo waiting to hear how I'm the purveyor of Noise Pollution, in the AC/DC sense. ;-) Cheers, www.indiegamedesign.com Brand*n Van Every S*attle, WA Praise Be to the caml-list Bayesian filter! It blesseth my postings, it is evil crap! evil crap! Bigarray! Unboxed overhead group! Wondering! chant chant chant... Is my technical content showing? // return an array of 100 packed tuples temps int $[tvar0][2*100]; // what the c function needs value $[tvar1]; // one int value $[tvar2]; // one tuple int $[tvar3] // loop control var oncePre eachPre $[cvar0]=&($[tvar0][0]); eachPost $[lvar0] = alloc(2*100, 0 /*NB: zero-tagged block*/ ); for(int $[tvar3]=0;$[tvar3]<100;$[tvar3]++) { $[tvar2] = alloc_tuple(2); $[tvar1] = Val_int($[cvar0][0+2*$[tvar3]]); Store_field($[tvar2],0,$[tvar1]); $[tvar1] = Val_int($[cvar0][1]); Store_field($[tvar2],1,$[tvar1+2*$[tvar3]]); Array_store($[lvar0],$[tvar3],$[tvar0]); } oncePost ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 0:12 ` james woodyatt 2004-09-06 0:33 ` [Omake] " Aleksey Nogin 2004-09-06 1:14 ` Brandon J. Van Every @ 2004-09-06 2:35 ` Jacques GARRIGUE 2004-09-06 9:38 ` skaller 2004-09-06 7:51 ` Daniel Andor 3 siblings, 1 reply; 85+ messages in thread From: Jacques GARRIGUE @ 2004-09-06 2:35 UTC (permalink / raw) To: jhw; +Cc: omake, caml-list From: james woodyatt <jhw@wetware.com> > On 05 Sep 2004, at 13:38, Aleksey Nogin wrote: > > On 04.09.2004 18:18, james woodyatt wrote: > >> > >> OMake looks good, but it is GPL which prevents me from using it > >> until it is a widely distributed and mature product. > > > > Could you please explain what kinds of things you might want to do and > > what license(s) would be needed to make it possible? > > I want to be able to extend the functions so that my build system knows > how to use more toolchains than just C and Ocaml, and I want those > extensions to be bundled with my non-GPL code. If I were to use Omake, > then I expect my code would link to the functions in the Omake > distribution, and I would then be in violation of the GPL if I didn't > use a GPL-compatible license for my distribution. Looks like you make the classical confusion: 1) You have every right to use several (even incompatible) licenses in the same distribution (ocaml does it). The only restriction is that all code linked inside a GPLed tool must be provided under a GPL-compatible license. 2) For code you wrote yourself, you are also free to distribute it under several (even incompatible) licenses. So you can reuse your extension code in another project (I don't know exactly how if this code was intended for omake, but you can), without caring about the GPL. So I don't see how the fact a tool is distributed under the GPL could limit your ability to use it (and improve it). The only problem you might have is if you want to link omake itself with an existing library, and you cannot/would not provide it under a GPL-compatible license. But I don't see what kind library it would be. Jacques Garrigue ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 2:35 ` Jacques GARRIGUE @ 2004-09-06 9:38 ` skaller 2004-09-06 11:34 ` Jacques Garrigue 0 siblings, 1 reply; 85+ messages in thread From: skaller @ 2004-09-06 9:38 UTC (permalink / raw) To: Jacques GARRIGUE; +Cc: jhw, omake, caml-list On Mon, 2004-09-06 at 12:35, Jacques GARRIGUE wrote: > Looks like you make the classical confusion: > 1) You have every right to use several (even incompatible) licenses in > the same distribution (ocaml does it). The only restriction is that > all code linked inside a GPLed tool must be provided under a > GPL-compatible license. > So I don't see how the fact a tool is distributed under the GPL could > limit your ability to use it (and improve it). > The only problem you might have is if you want to link omake itself > with an existing library, By resting on unsustainable technical distinctions, any usage is likely to expose the client to legal risk. What the heck does 'linkage' actually mean outside of a Unix based C environment? How is it possible that you can dlopen an GPL library without infection, but if you statically link you're infected? Who says running a mix of programs together 'linked' with shell script isn't linkage? What about Ocaml code 'linked' by ocamlopt as opposed to a bytecode version, use of DynLink, use of top level -- GAK! Its all too confusing to bother -- especially if you have to explain it all to your clients as well.. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 9:38 ` skaller @ 2004-09-06 11:34 ` Jacques Garrigue 2004-09-06 16:28 ` skaller 0 siblings, 1 reply; 85+ messages in thread From: Jacques Garrigue @ 2004-09-06 11:34 UTC (permalink / raw) To: skaller; +Cc: caml-list From: skaller <skaller@users.sourceforge.net> > On Mon, 2004-09-06 at 12:35, Jacques GARRIGUE wrote: > > > Looks like you make the classical confusion: > > 1) You have every right to use several (even incompatible) licenses in > > the same distribution (ocaml does it). The only restriction is that > > all code linked inside a GPLed tool must be provided under a > > GPL-compatible license. > > > So I don't see how the fact a tool is distributed under the GPL could > > limit your ability to use it (and improve it). > > > The only problem you might have is if you want to link omake itself > > with an existing library, > > By resting on unsustainable technical distinctions, > any usage is likely to expose the client to legal risk. > > What the heck does 'linkage' actually mean outside > of a Unix based C environment? How is it possible > that you can dlopen an GPL library without infection, > but if you statically link you're infected? Please, do not muddy the issue. We were talking about a standalone tool which is managing compilation (not even a compiler!) There is no ambiguity about linkage here, for the good reason that there is nothing to link to. Or will you tell me that using gnu make forces me to put all my software under the GPL! --------------------------------------------------------------------------- Jacques Garrigue Kyoto University garrigue at kurims.kyoto-u.ac.jp <A HREF=http://wwwfun.kurims.kyoto-u.ac.jp/~garrigue/>JG</A> ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 11:34 ` Jacques Garrigue @ 2004-09-06 16:28 ` skaller 2004-09-06 16:42 ` Christopher A. Watford ` (2 more replies) 0 siblings, 3 replies; 85+ messages in thread From: skaller @ 2004-09-06 16:28 UTC (permalink / raw) To: Jacques Garrigue; +Cc: caml-list On Mon, 2004-09-06 at 21:34, Jacques Garrigue wrote: > From: skaller <skaller@users.sourceforge.net> > Or will you tell me that using gnu make forces me to put all my software > under the GPL! I have no idea -- that's the point. My guess is the license is unenforcible because it depends on terms such as 'linkage' which can't be well defined in a unique way. The only way acceptable to a court would be 'community consensus' about what constitues linkage. I believe most people believe that at the moment static linkage to even LGPL (without Ocaml exemption) infects, but dynamic linkage doesn't. Given such an absurd distinction I doubt I have any real idea what the GPL actually says for more difficult cases. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 16:28 ` skaller @ 2004-09-06 16:42 ` Christopher A. Watford 2004-09-06 16:59 ` Richard Jones 2004-09-07 2:21 ` Jacques GARRIGUE 2004-09-07 13:35 ` David Brown 2 siblings, 1 reply; 85+ messages in thread From: Christopher A. Watford @ 2004-09-06 16:42 UTC (permalink / raw) To: skaller; +Cc: Jacques Garrigue, caml-list > I have no idea -- that's the point. My guess is the license > is unenforcible because it depends on terms such as > 'linkage' which can't be well defined in a unique way. > > The only way acceptable to a court would be 'community > consensus' about what constitues linkage. > > I believe most people believe that > at the moment static linkage to even LGPL (without Ocaml > exemption) infects, but dynamic linkage doesn't. > > Given such an absurd distinction I doubt I have any > real idea what the GPL actually says for more > difficult cases. > > -- > John Skaller, mailto:skaller@users.sf.net > voice: 061-2-9660-0850, > snail: PO BOX 401 Glebe NSW 2037 Australia > Checkout the Felix programming language http://felix.sf.net The whole enforcement of licenses in dynamic linkage would mean that before using a DLL or SO you'd have to somehow accept an EULA or have some programatic way of saying your code agrees to their license. Hell, what about code injection? Would that be illegal if I don't accept the terms of their license? I'm fairly certain we run into very murky licensing laws in this regard. As for what you should do? Static linkage most definately should obey the license of the library. Dynamic linkage? The end-user has agreed to follow the library's license/terms, and has pointed an application to its location. The application shouldn't have to follow any terms, since its on the insistance of the user (dependency system, physically downloading it, etc) that the dynamic library be available. -- Christopher A. Watford christopher.watford@gmail.com http://dorm.tunkeymicket.com ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 16:42 ` Christopher A. Watford @ 2004-09-06 16:59 ` Richard Jones 0 siblings, 0 replies; 85+ messages in thread From: Richard Jones @ 2004-09-06 16:59 UTC (permalink / raw) Cc: caml-list [-- Attachment #1: Type: text/plain, Size: 1192 bytes --] On Mon, Sep 06, 2004 at 12:42:28PM -0400, Christopher A. Watford wrote: > The whole enforcement of licenses in dynamic linkage would mean that > before using a DLL or SO you'd have to somehow accept an EULA or have > some programatic way of saying your code agrees to their license. Not so. The GPL has nothing to say about using code. It's all about giving permission to copy the code. Since the default case in copyright law is you can't copy the code[1], you need to get permission if you want to copy, which is what the GPL grants. If you don't agree to the GPL, then you revert back to the default case - ie. you can't copy. Thus no "EULA" is required. Anyway, this is extremely off-topic for caml-list. Rich. [1] Except under extremely limited cases of fair dealing / fair use, and possibly being allowed to make a private back-up copy in some locales. -- Richard Jones. http://www.annexia.org/ http://www.j-london.com/ Merjis Ltd. http://www.merjis.com/ - improving website return on investment NET::FTPSERVER is a full-featured, secure, configurable, database-backed FTP server written in Perl: http://www.annexia.org/freeware/netftpserver/ [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 16:28 ` skaller 2004-09-06 16:42 ` Christopher A. Watford @ 2004-09-07 2:21 ` Jacques GARRIGUE 2004-09-07 6:17 ` skaller 2004-09-07 13:35 ` David Brown 2 siblings, 1 reply; 85+ messages in thread From: Jacques GARRIGUE @ 2004-09-07 2:21 UTC (permalink / raw) To: skaller; +Cc: caml-list From: skaller <skaller@users.sourceforge.net> > On Mon, 2004-09-06 at 21:34, Jacques Garrigue wrote: > > From: skaller <skaller@users.sourceforge.net> > > > Or will you tell me that using gnu make forces me to put all my software > > under the GPL! > > I have no idea -- that's the point. My guess is the license > is unenforcible because it depends on terms such as > 'linkage' which can't be well defined in a unique way. > > The only way acceptable to a court would be 'community > consensus' about what constitues linkage. > > I believe most people believe that > at the moment static linkage to even LGPL (without Ocaml > exemption) infects, but dynamic linkage doesn't. > > Given such an absurd distinction I doubt I have any > real idea what the GPL actually says for more > difficult cases. 1) this is not a problem of infection, but of right to do something or not. And the problem with the LGPL is not a problem of linkage (LGPL puts no restriction on the linkage itself), but that there are conditions in the LGPL which are difficult to fulfill without dynamic linking (difficult - not impossible). 2) the point I was trying to make was that the distinction between static and dynamic linkage is not relevant here, since the tool discussed does not link to anything anyway. Or do you just mean that since linkage has not been tested before the courts, it may mean just anything, including everything present on the same hard disk? An ambiguity is only a problem if you happen to be in the ambiguous area. I do not see how it can matter when you are well outside of it. (My last answer, this discussion is getting completely ridiculous) Jacques Garrigue ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-07 2:21 ` Jacques GARRIGUE @ 2004-09-07 6:17 ` skaller 2004-09-07 8:24 ` Benjamin Geer 0 siblings, 1 reply; 85+ messages in thread From: skaller @ 2004-09-07 6:17 UTC (permalink / raw) To: Jacques GARRIGUE; +Cc: caml-list On Tue, 2004-09-07 at 12:21, Jacques GARRIGUE wrote: > 2) the point I was trying to make was that the distinction between > static and dynamic linkage is not relevant here, since the tool > discussed does not link to anything anyway. As it stands. But a client might want to modify it. They might want to bind more strongly to it. They might want to add a custom routine to it. See below for a real example. > An ambiguity is only a problem if you happen to be in the ambiguous > area. I do not see how it can matter when you are well outside of it. Because things change -- what starts off clear may become less clear as you modify things. Here is a real example. Felix contains the CIL package, which is a C parser. It is used in a stand alone wrapper generator tool. Suppose CIL were GPL***, and I don't care if the wrapper generator is GPL. All is fine! Only -- a cute trick is to actually build the wrapper generator directly into the Felix compiler so you can #include a C file directly (and the compiler processes the generated wrappers). I actually DID do this (although I removed that feature). Well, if CIL were GPL that would make my core compiler also GPL -- simply because of a small change in the integration architecture. Such absurd artificial constraints in an experimental package make multi-licence situations undesirable. It also isn't just a legal problem that I might be able to sort out -- there is the issue of what potential clients might think with a cursory glance at the project. *** CIL is BSD. If it had been GPL I wouldn't have even considered it for inclusion. -- John Skaller, mailto:skaller@users.sf.net voice: 061-2-9660-0850, snail: PO BOX 401 Glebe NSW 2037 Australia Checkout the Felix programming language http://felix.sf.net ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-07 6:17 ` skaller @ 2004-09-07 8:24 ` Benjamin Geer 0 siblings, 0 replies; 85+ messages in thread From: Benjamin Geer @ 2004-09-07 8:24 UTC (permalink / raw) To: skaller; +Cc: caml-list skaller wrote: > On Tue, 2004-09-07 at 12:21, Jacques GARRIGUE wrote: >>2) the point I was trying to make was that the distinction between >> static and dynamic linkage is not relevant here, since the tool >> discussed does not link to anything anyway. > As it stands. But a client might want to modify it. > They might want to bind more strongly to it. > They might want to add a custom routine to it. The GPL exists precisely to require people to contribute to free software in that particular case. It is not a criticism of the GPL to say that it does its job well. If you don't wish to abide by the GPL, you are of course free not to use GPL'd software. Ben ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 16:28 ` skaller 2004-09-06 16:42 ` Christopher A. Watford 2004-09-07 2:21 ` Jacques GARRIGUE @ 2004-09-07 13:35 ` David Brown 2 siblings, 0 replies; 85+ messages in thread From: David Brown @ 2004-09-07 13:35 UTC (permalink / raw) To: skaller; +Cc: Jacques Garrigue, caml-list On Tue, Sep 07, 2004 at 02:28:24AM +1000, skaller wrote: > I believe most people believe that > at the moment static linkage to even LGPL (without Ocaml > exemption) infects, but dynamic linkage doesn't. > > Given such an absurd distinction I doubt I have any > real idea what the GPL actually says for more > difficult cases. This distinction is not absurd, at all. Dynamic linking allows the recipient of a binary to easily replace the LGPL'd library (which is a requirement of the LGPL). With static linking, you have to distribute objects, or a library consisting of the rest of the program. I wasn't aware that the GPL allowed dynamic linking. The only exception granted is that, since the GPL only covers distribution, the user is free to dynamic link whatever libraries they wish into the program. The only requirement the GPL makes is that these other libraries cannot be required for normal operation. But, yes, it starts to get kind of fuzzy when you move away from the C notion of static and dynamic linking to other systems that differ conceptually from what was thought of at the time the GPL and LGPL were written. Perhaps this is why the GPL-3 has never acheived a fixpoint :-) Dave ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 0:12 ` james woodyatt ` (2 preceding siblings ...) 2004-09-06 2:35 ` Jacques GARRIGUE @ 2004-09-06 7:51 ` Daniel Andor 3 siblings, 0 replies; 85+ messages in thread From: Daniel Andor @ 2004-09-06 7:51 UTC (permalink / raw) To: james woodyatt; +Cc: omake, Caml List On Monday 06 September 2004 1:12 am, james woodyatt wrote: > On 05 Sep 2004, at 13:38, Aleksey Nogin wrote: > > Could you please explain what kinds of things you might want to do and > > what license(s) would be needed to make it possible? > > I want to be able to extend the functions so that my build system knows > how to use more toolchains than just C and Ocaml, and I want those > extensions to be bundled with my non-GPL code. If I were to use Omake, > then I expect my code would link to the functions in the Omake > distribution, and I would then be in violation of the GPL if I didn't > use a GPL-compatible license for my distribution. If you are bundling, not linking, what's wrong with bundling the GPL OMake with your non-GPL code, and contributing your OMake improvements back to OMake? You are perfectly entitled to bundle incompatibly-licensed programs. If OMake's GPL license somehow compels people to contribute back more `toolchain-awareness' and therefore grows the program, then the GPL seems like the *ideal* license. Afterall, it is very unlikely that you will have anything of commercial value in the OMake extensions -- would it not be fair to say? D ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 17:42 ` Nicolas Cannasse 2004-09-04 18:27 ` chris.danx @ 2004-09-05 20:38 ` Aleksey Nogin 2004-09-05 22:57 ` Olivier Grisel 1 sibling, 1 reply; 85+ messages in thread From: Aleksey Nogin @ 2004-09-05 20:38 UTC (permalink / raw) To: Nicolas Cannasse, Caml List On 04.09.2004 10:42, Nicolas Cannasse wrote: > Other way to ask the question : what features make the OMake language better > than OCaml for writing Makefiles ? Or is it just syntactic sugar ? It's not about language, it's about the features that the build system provides. Here is a list of features of omake that I think would be hard or impossible to reproduce in a "Makefile generator": - Omake knows that a single build command can produce more that one file! (Think omcamlopt producing both .cmx and .o, or ocamlc on an .mli-free .ml producing both .cmo and .cmi). This really simplifies life as you do not have to hack around your build system not knowing the side-effects of commands you invoke. See also the "Quick example" below. - Persistent filesystem monitoring (based on FAM) mode - in this mode, as soon as one of the source files is changed, the build is process is restarted accordingly (whether omake was idle or already building something in the project). In my experience this significantly speeds up the process of fixing typos, type checking errors, etc. - As already mentioned by Yaron, the commands for building a file are themselves included in the dependency for the file. - Complete timestamp/MD5sum testing for file modifications. Note that once you make the dependency information truly complete (which is the goal of omake), then this becomes a must. Often not all changes in a dependencies result in the generated file being actually changed. When a file stays the same after it is rebuilt, you want to detect this to avoid rebuilding too much. - Being able to specify "dependencies of dependencies". In other words, not only you can specify how to scan a file for dependencies (e.g. ocamldep, "gcc -MM", etc), but you can also specify what the scanning process itself depends on. For example, if you have a custom ocamldep-like program, then you can specify that it needs to be built before scanning dependencies of certain files and that whenever that binary changes, the dependencies of those files need to be recomputed. - A global view of the whole project (not just per-directory). This not only helps in making sure that the dependency graph is as complete as possible, but also gives the parallelizer (omake supports the same -j option as make) more freedom. Of course, in a "Makefile generator" you could try to generate one huge Makefile for a project, but even with such a file if you ever end up calling make recursively, it will no longer have a complete view of the whole project. - Quick example: suppose that you have a file "foo.ml" (with no foo.mli) and a file "bar.ml" that refers to "Foo" and supposed that you are compiling bytecode. The standard ocamldep would generate foo.cmo: bar.cmo dependency. Which means that whenever bar.ml changes, foo.cmo (and everything that depends on it) will get rebuilt. In omake's case, our version of ocamldep will generate the "proper" foo.cmo: bar.cmi Then, omake's rule for building .cmi specifies that in the absence of an .mli file (and when no rule for building such an .mli is present), use "ocamlc %.ml" for building the .cmi. Next, omake will check whether .cmi have changed (compared to what it was the last time omake compiled it, not compared to what it was right before!) and if not (imagine that you've change the code in .ml without affecting the signature - bar.cmo would change, but bar.cmi would not), then foo.cmo will not get rebuilt. -- Aleksey Nogin Home Page: http://nogin.org/ E-Mail: nogin@cs.caltech.edu (office), aleksey@nogin.org (personal) Office: Jorgensen 70, tel: (626) 395-2907 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 20:38 ` Aleksey Nogin @ 2004-09-05 22:57 ` Olivier Grisel 2004-09-06 0:17 ` Aleksey Nogin 0 siblings, 1 reply; 85+ messages in thread From: Olivier Grisel @ 2004-09-05 22:57 UTC (permalink / raw) To: Aleksey Nogin, caml-list [-- Attachment #1: Type: text/plain, Size: 122 bytes --] OMake looks really interesting according to your description. Do you plan to provide a GODI package ? Best, -- Olivier [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 22:57 ` Olivier Grisel @ 2004-09-06 0:17 ` Aleksey Nogin 2004-09-06 13:31 ` Olivier Grisel 0 siblings, 1 reply; 85+ messages in thread From: Aleksey Nogin @ 2004-09-06 0:17 UTC (permalink / raw) To: Olivier Grisel; +Cc: caml-list On 05.09.2004 15:57, Olivier Grisel wrote: > OMake looks really interesting according to your description. Do you > plan to provide a GODI package ? We will probably try providing it if somebody requests it. Currently we provide Red Hat RPM packages (source and binaries for various releases of Red Hat Linux and Fedora Core) as well as zip files with sources and Windows binaries. See http://omake.metaprl.org/download.html -- Aleksey Nogin Home Page: http://nogin.org/ E-Mail: nogin@cs.caltech.edu (office), aleksey@nogin.org (personal) Office: Jorgensen 70, tel: (626) 395-2907 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-06 0:17 ` Aleksey Nogin @ 2004-09-06 13:31 ` Olivier Grisel 2004-09-06 19:28 ` [Caml-list] Godi for OMake [Was: Announcing the OMake build system version 0.9.1] Aleksey Nogin 0 siblings, 1 reply; 85+ messages in thread From: Olivier Grisel @ 2004-09-06 13:31 UTC (permalink / raw) To: Aleksey Nogin; +Cc: caml-list [-- Attachment #1: Type: text/plain, Size: 1059 bytes --] Aleksey Nogin a écrit : > On 05.09.2004 15:57, Olivier Grisel wrote: > >> OMake looks really interesting according to your description. Do you >> plan to provide a GODI package ? > > > We will probably try providing it if somebody requests it. I think it would make it easier to people distributing their packages with godi to have a ready to run omake GODI package. OMake, like any other build tool, would be a leaf in the GODI dependency tree and therefore providing a GODI package for it would be a first step to broaden its adoption among GODI users. The GODIVA tool can make it really easy to semi-automatically build GODI package out of the original tarball (with minor changes). Furthermore, it seems to me that the omake source tarball at http://cvs.metaprl.org:12000/omake/downloads/omake-0.9.1-1.tar.gz has been gzipped twice. And I needed to run ./omake before being able to run "make install" otherwise I get: $ ocamlopt.opt -warn-error A -c omake_node.ml $ omake_magic.cmi is not a compiled interface Thanks for all, -- Olivier [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 85+ messages in thread
* [Caml-list] Godi for OMake [Was: Announcing the OMake build system version 0.9.1] 2004-09-06 13:31 ` Olivier Grisel @ 2004-09-06 19:28 ` Aleksey Nogin 2004-09-06 20:18 ` Olivier Grisel 0 siblings, 1 reply; 85+ messages in thread From: Aleksey Nogin @ 2004-09-06 19:28 UTC (permalink / raw) To: Olivier Grisel, Diego.FERNANDEZ_PONS, omake, Caml List On 06.09.2004 06:31, Olivier Grisel wrote: > I think it would make it easier to people distributing their packages > with godi to have a ready to run omake GODI package. OMake, like any > other build tool, would be a leaf in the GODI dependency tree and > therefore providing a GODI package for it would be a first step to > broaden its adoption among GODI users. Well, I have created a godi package for omake that seems to work for me (any feedback would be appreciated as I have no previous experience with GODI) - http://cvs.metaprl.org:12000/cvsweb/omake/godi-omake/ Now, how do I go about getting it included in the GODI repository? Thank you! -- Aleksey Nogin Home Page: http://nogin.org/ E-Mail: nogin@cs.caltech.edu (office), aleksey@nogin.org (personal) Office: Jorgensen 70, tel: (626) 395-2907 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Godi for OMake [Was: Announcing the OMake build system version 0.9.1] 2004-09-06 19:28 ` [Caml-list] Godi for OMake [Was: Announcing the OMake build system version 0.9.1] Aleksey Nogin @ 2004-09-06 20:18 ` Olivier Grisel [not found] ` <41537DAE.1050601@cs.caltech.edu> 0 siblings, 1 reply; 85+ messages in thread From: Olivier Grisel @ 2004-09-06 20:18 UTC (permalink / raw) To: omake, Caml List; +Cc: Diego.FERNANDEZ_PONS [-- Attachment #1: Type: text/plain, Size: 940 bytes --] Aleksey Nogin a écrit : > On 06.09.2004 06:31, Olivier Grisel wrote: > >> I think it would make it easier to people distributing their packages >> with godi to have a ready to run omake GODI package. OMake, like any >> other build tool, would be a leaf in the GODI dependency tree and >> therefore providing a GODI package for it would be a first step to >> broaden its adoption among GODI users. > > > Well, I have created a godi package for omake that seems to work for me > (any feedback would be appreciated as I have no previous experience with > GODI) - http://cvs.metaprl.org:12000/cvsweb/omake/godi-omake/ You are fast! > Now, how do I go about getting it included in the GODI repository? Thank > you! I guess you should contact Gerd to get an account on his repository: https://gps.dynxs.de/ You might also want to subscribe to the GODI mailing-list: https://gps.dynxs.de/mailman/listinfo/godi-list Best, -- Olivier [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 85+ messages in thread
[parent not found: <41537DAE.1050601@cs.caltech.edu>]
* Re: [Caml-list] Godi for OMake [Was: Announcing the OMake build system version 0.9.1] [not found] ` <41537DAE.1050601@cs.caltech.edu> @ 2004-09-24 13:50 ` Olivier Grisel 2004-09-24 18:37 ` [Caml-list] OCamlFind support in OMake [Was: Godi for OMake] Aleksey Nogin 0 siblings, 1 reply; 85+ messages in thread From: Olivier Grisel @ 2004-09-24 13:50 UTC (permalink / raw) To: Aleksey Nogin, O'Caml Mailing List [-- Attachment #1: Type: text/plain, Size: 618 bytes --] Aleksey Nogin a écrit : > On 06.09.2004 13:18, Olivier Grisel wrote: > >> I guess you should contact Gerd to get an account on his repository: >> https://gps.dynxs.de/ >> >> You might also want to subscribe to the GODI mailing-list: >> https://gps.dynxs.de/mailman/listinfo/godi-list > > > Thanks, I've added it to the 3.08 version of the GODI repository. > Good news ! I'm currently experimenting with omake for some personal project, and it's really a great tool. It would be even greater if omake and findlib could better interoperate especially for installation targets. Thanks for your work ! -- Olivier [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 256 bytes --] ^ permalink raw reply [flat|nested] 85+ messages in thread
* [Caml-list] OCamlFind support in OMake [Was: Godi for OMake] 2004-09-24 13:50 ` Olivier Grisel @ 2004-09-24 18:37 ` Aleksey Nogin 0 siblings, 0 replies; 85+ messages in thread From: Aleksey Nogin @ 2004-09-24 18:37 UTC (permalink / raw) To: Olivier Grisel, Caml List On 24.09.2004 06:50, Olivier Grisel wrote: > It would be even greater if omake and findlib could better interoperate > especially for installation targets. We already have a patch (contributed by Bardur Arantsson) to add ocamlfind support - please see http://cvs.metaprl.org:12000/bugzilla/show_bug.cgi?id=304 I expect that some version of the patch will be included in OMake 0.9.3 -- Aleksey Nogin Home Page: http://nogin.org/ E-Mail: nogin@cs.caltech.edu (office), aleksey@nogin.org (personal) Office: Jorgensen 70, tel: (626) 395-2907 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 16:26 [Caml-list] Announcing the OMake build system version 0.9.1 Jason Hickey 2004-09-04 17:42 ` Nicolas Cannasse @ 2004-09-04 18:01 ` Yaron Minsky 2004-09-05 1:38 ` Eray Ozkural 2004-09-05 6:12 ` Yamagata Yoriyuki 2 siblings, 1 reply; 85+ messages in thread From: Yaron Minsky @ 2004-09-04 18:01 UTC (permalink / raw) To: Caml Mailing List On Sat, 04 Sep 2004 09:26:59 -0700, Jason Hickey <jyh@cs.caltech.edu> wrote: > > o Fast, accurate, automated dependency analysis using MD5 digests. > I've been using omake for a while now and it has worked very well for us. One nice feature of omake as opposed to ordinary make (not sure how this compare to scons and other competitors) is that omake takes a broader view of dependencies, including the rules themselves in the calculation. So, for example, when you modify a build command, everything that was built with that build command is recompiled. y ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 18:01 ` [Caml-list] Announcing the OMake build system version 0.9.1 Yaron Minsky @ 2004-09-05 1:38 ` Eray Ozkural 0 siblings, 0 replies; 85+ messages in thread From: Eray Ozkural @ 2004-09-05 1:38 UTC (permalink / raw) To: Caml Mailing List On Saturday 04 September 2004 21:01, Yaron Minsky wrote: > On Sat, 04 Sep 2004 09:26:59 -0700, Jason Hickey <jyh@cs.caltech.edu> wrote: > > o Fast, accurate, automated dependency analysis using MD5 digests. > > I've been using omake for a while now and it has worked very well for > us. One nice feature of omake as opposed to ordinary make (not sure > how this compare to scons and other competitors) is that omake takes a > broader view of dependencies, including the rules themselves in the > calculation. So, for example, when you modify a build command, > everything that was built with that build command is recompiled. Very good! I designed and implemented some build-things myself, this is one of the must requirements for any automatic dependency checker. It's sort of obvious to use MD5 and include rules in the hash, but the really good idea in omake is making one batteries-included package that doesn't depend on external scripts or anything like that. I believe that approach is much better than autotools approach, where everything is a mess. I know it, because I built KDE so many times! I was actually thinking of re-implementing GNU make in ocaml in a similar way, this shows that more can be done. Regards, -- Eray Ozkural (exa) <erayo@cs.bilkent.edu.tr> Comp. Sci. Dept., Bilkent University, Ankara KDE Project: http://www.kde.org http://www.cs.bilkent.edu.tr/~erayo Malfunction: http://malfunct.iuma.com GPG public key fingerprint: 360C 852F 88B0 A745 F31B EA0F 7C07 AE16 874D 539C ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-04 16:26 [Caml-list] Announcing the OMake build system version 0.9.1 Jason Hickey 2004-09-04 17:42 ` Nicolas Cannasse 2004-09-04 18:01 ` [Caml-list] Announcing the OMake build system version 0.9.1 Yaron Minsky @ 2004-09-05 6:12 ` Yamagata Yoriyuki 2004-09-05 12:48 ` Yaron Minsky 2 siblings, 1 reply; 85+ messages in thread From: Yamagata Yoriyuki @ 2004-09-05 6:12 UTC (permalink / raw) To: jyh; +Cc: caml-list From: Jason Hickey <jyh@cs.caltech.edu> Subject: [Caml-list] Announcing the OMake build system version 0.9.1 Date: Sat, 04 Sep 2004 09:26:59 -0700 > o Support for large projects spanning several directories or > directory hierarchies. > > o Builtin support for OCaml and C projects, or a mixture thereof. > > o Fast, accurate, automated dependency analysis using MD5 digests. > > o Portability: omake provides a consistent interface on Win32 and > on Unix systems including Linux, OSX, and Cygwin. > > o Builtin functions that provide the most common features of programs > like grep, sed, and awk. These are especially useful on Win32. > > o Active filesystem monitoring, where the build automatically > restarts whenever you modify a source file. This can be > very useful during the edit/compile cycle. > > o A companion command interpreter, osh, that can be used > interactively. Skimming the document, it appears to be possible, but could OMake build the arbitrary target, not limited to OCaml or C binary? For example, I want to convert data in plain text to a fast-loadable binary format in the installation time. -- Yamagata Yoriyuki ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 6:12 ` Yamagata Yoriyuki @ 2004-09-05 12:48 ` Yaron Minsky 2004-09-05 20:39 ` Aleksey Nogin 0 siblings, 1 reply; 85+ messages in thread From: Yaron Minsky @ 2004-09-05 12:48 UTC (permalink / raw) To: Yamagata Yoriyuki; +Cc: caml-list On Sun, 05 Sep 2004 15:12:05 +0900 (JST), Yamagata Yoriyuki <yoriyuki@mbg.ocn.ne.jp> wrote: > Skimming the document, it appears to be possible, but could OMake > build the arbitrary target, not limited to OCaml or C binary? For > example, I want to convert data in plain text to a fast-loadable > binary format in the installation time. Yes, omake is general purpose. The built in rules are of course for specific systems, but you can write rules for pretty much anything. y ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
* Re: [Caml-list] Announcing the OMake build system version 0.9.1 2004-09-05 12:48 ` Yaron Minsky @ 2004-09-05 20:39 ` Aleksey Nogin 0 siblings, 0 replies; 85+ messages in thread From: Aleksey Nogin @ 2004-09-05 20:39 UTC (permalink / raw) To: Caml List, yoriyuki On 05.09.2004 05:48, Yaron Minsky wrote: > On Sun, 05 Sep 2004 15:12:05 +0900 (JST), Yamagata Yoriyuki > <yoriyuki@mbg.ocn.ne.jp> wrote: > > >>Skimming the document, it appears to be possible, but could OMake >>build the arbitrary target, not limited to OCaml or C binary? For >>example, I want to convert data in plain text to a fast-loadable >>binary format in the installation time. > > > Yes, omake is general purpose. The built in rules are of course for > specific systems, but you can write rules for pretty much anything. Also note that in omake's case, builtin rules are just an external omake file, not some "internal" magic. This makes it possible to just take some of the internal rules into your own OMakefile and modify them to your liking. -- Aleksey Nogin Home Page: http://nogin.org/ E-Mail: nogin@cs.caltech.edu (office), aleksey@nogin.org (personal) Office: Jorgensen 70, tel: (626) 395-2907 ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners ^ permalink raw reply [flat|nested] 85+ messages in thread
end of thread, other threads:[~2004-09-24 18:37 UTC | newest] Thread overview: 85+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2004-09-04 16:26 [Caml-list] Announcing the OMake build system version 0.9.1 Jason Hickey 2004-09-04 17:42 ` Nicolas Cannasse 2004-09-04 18:27 ` chris.danx 2004-09-04 19:59 ` Matthieu Dubuget 2004-09-05 5:20 ` skaller 2004-09-05 13:20 ` David Brown 2004-09-05 14:31 ` skaller 2004-09-05 16:02 ` David Brown 2004-09-05 16:14 ` Nicolas Cannasse 2004-09-05 15:07 ` chris.danx 2004-09-05 15:53 ` skaller 2004-09-06 0:25 ` chris.danx 2004-09-06 8:17 ` skaller 2004-09-05 13:38 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 14:50 ` chris.danx 2004-09-05 15:01 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 15:44 ` chris.danx 2004-09-05 16:10 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 17:38 ` skaller 2004-09-05 17:15 ` skaller 2004-09-05 16:11 ` skaller 2004-09-05 16:21 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 19:09 ` skaller 2004-09-05 15:08 ` skaller 2004-09-05 15:38 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 17:04 ` skaller 2004-09-05 18:45 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 20:12 ` skaller 2004-09-05 21:30 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 22:41 ` Brandon J. Van Every 2004-09-06 12:13 ` Marcin 'Qrczak' Kowalczyk 2004-09-05 16:09 ` David Brown 2004-09-05 18:31 ` skaller 2004-09-06 10:56 ` Andreas Rossberg 2004-09-06 15:51 ` skaller 2004-09-06 7:11 ` Christian Lindig 2004-09-06 12:20 ` Marcin 'Qrczak' Kowalczyk 2004-09-06 14:12 ` Christian Lindig 2004-09-06 1:06 ` Richard Jones 2004-09-06 1:50 ` Brandon J. Van Every 2004-09-06 9:09 ` skaller 2004-09-06 8:59 ` skaller 2004-09-04 23:58 ` Nicolas Cannasse 2004-09-05 1:18 ` james woodyatt 2004-09-05 1:26 ` [Caml-list] Perl Conjury (alternative to Unix make) james woodyatt 2004-09-05 2:03 ` [Caml-list] Announcing the OMake build system version 0.9.1 David Brown 2004-09-05 2:37 ` james woodyatt 2004-09-05 6:24 ` Nathaniel Gray 2004-09-05 20:38 ` Aleksey Nogin 2004-09-06 0:12 ` james woodyatt 2004-09-06 0:33 ` [Omake] " Aleksey Nogin 2004-09-06 3:54 ` Brian Hurt 2004-09-06 6:39 ` Jason Hickey 2004-09-06 8:10 ` james woodyatt 2004-09-06 7:50 ` [Omake] " Erik de Castro Lopo 2004-09-06 14:52 ` Brian Hurt 2004-09-06 17:20 ` skaller 2004-09-06 9:52 ` skaller 2004-09-06 15:10 ` Brian Hurt 2004-09-07 13:26 ` David Brown 2004-09-06 1:14 ` Brandon J. Van Every 2004-09-06 2:35 ` Jacques GARRIGUE 2004-09-06 9:38 ` skaller 2004-09-06 11:34 ` Jacques Garrigue 2004-09-06 16:28 ` skaller 2004-09-06 16:42 ` Christopher A. Watford 2004-09-06 16:59 ` Richard Jones 2004-09-07 2:21 ` Jacques GARRIGUE 2004-09-07 6:17 ` skaller 2004-09-07 8:24 ` Benjamin Geer 2004-09-07 13:35 ` David Brown 2004-09-06 7:51 ` Daniel Andor 2004-09-05 20:38 ` Aleksey Nogin 2004-09-05 22:57 ` Olivier Grisel 2004-09-06 0:17 ` Aleksey Nogin 2004-09-06 13:31 ` Olivier Grisel 2004-09-06 19:28 ` [Caml-list] Godi for OMake [Was: Announcing the OMake build system version 0.9.1] Aleksey Nogin 2004-09-06 20:18 ` Olivier Grisel [not found] ` <41537DAE.1050601@cs.caltech.edu> 2004-09-24 13:50 ` Olivier Grisel 2004-09-24 18:37 ` [Caml-list] OCamlFind support in OMake [Was: Godi for OMake] Aleksey Nogin 2004-09-04 18:01 ` [Caml-list] Announcing the OMake build system version 0.9.1 Yaron Minsky 2004-09-05 1:38 ` Eray Ozkural 2004-09-05 6:12 ` Yamagata Yoriyuki 2004-09-05 12:48 ` Yaron Minsky 2004-09-05 20:39 ` Aleksey Nogin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox