[Omake] OMake 0.9.8.5-3 released
Jason Hickey
jyh at cs.caltech.edu
Tue Aug 14 09:18:53 PDT 2007
I have just released an update that addresses several issues with the
0.9.8.5 release. This is a bugfix release.
- ocamlfind should not be used with ocamldep-omake
- OCamlPackage was reporting "these files are targeted separately"
- The export function also takes a list of variables.
state = $(export A B C)
...
export($(state))
The updated release is available
- on the downloads page http://omake.metaprl.org/download.html
- through GODI http://godi.ocaml-programming.de/
Aleksey's RPMs at http://rpm.nogin.org have not been updated yet, but
I've posted a few relevant RPMs on the OMake downloads page.
Jason
On Aug 7, 2007, at 5:24 PM, Aleksey Nogin wrote:
> We are proud to announce the latest release of the OMake Build
> System - OMake 0.9.8.5. OMake 0.9.8.5 is substantial feature
> enhancements and bugfixes release. The changes in this release
> include:
>
> - Fixed Ctrl-C handling on Windows (with now correctly interrupt
> OMake)
> - Added .STATIC and .MEMO rules, allowing defining lazy
> computations
> and lazy memoization maps
> - Added export sections, making it much easier to manage variable
> scoping
> - Fields in sub-objects can now be referenced directly
> - Many new built-in and library functions
> - Significant bug-fixes
>
> A more detailed change log is the following:
>
> * Made sure that Ctrl-C would correctly stop OMake on Windows, making
> it much easier to use -p and -P on Windows.
>
> * Added export sections.
> o Exports take effect for all sections within their static scope.
> For example,
>
> section
> export
> section
> public.X = 1
>
> println($X) # Prints 1
>
> o In addition, exports augment any existing exports. For example,
>
> section
> public.X = 1
> public.Y = 2
>
> export X
> section
> X = 3
> Y = 4
> export Y
> # X is 3
> # Y is 2
>
> o Variable definitions also allow exports. For example,
>
> public.X = 1
> public.f() =
> X = 2
> export
>
> public.Y = $f
> # X is 2
> # Y is 2
>
> Note: this is, of course, not the same as imperative
> programming,
> because functions can always choose not to export. In
> particular,
> the string "functions" do not export.
>
> public.X = 1
> export X
> public.f() =
> X = 2
> Y = $"$f"
> # X = 1
> # Y = 2
>
> * Added .STATIC and .MEMO rules - an enhanced, yet lazy (delayed)
> version of the static. sections.
> o Basic usage:
>
> .STATIC:
> println(foo)
> X = 1
> Y = $X
>
> The variable X is exported, with a "delayed" value. The rule is
> only evaluated if the value for $X is needed, but it is lazy.
> The
> definition of Y does not force evaluation.
> o .STATIC rules allow dependencies, for example:
>
> .STATIC: x.input
> X = $(expensive-function x.input)
>
> This is be evaluated if x.input changes and X is forced.
> o .STATIC rules also allow explicitly specifying which
> variables are exported, for example:
>
> .STATIC: X: x.input
> Y = 1
> X = $Y
>
> Here, Y is not exported from the section.
> o By default, if a .STATIC rule is evaluated several times (for
> example, if the .STATIC rule is present inside a body of a
> function that is called several times), the result is the
> same set
> of delayed variables.
> o .STATIC rules can have :key: dependency that specify whether we
> are getting the same set of delayed variables or not, when
> re-executing the same .STATIC rule. For example,
>
> g(x) =
> eprintln($"g($x)")
> add($x, 1)
>
> f(x) =
> .STATIC: :key: $x
> y = $(g $x)
> value $y
>
> println($(f 1))
> println($(f 2))
> println($(f 1))
>
> will call function g twice - only once for each argument,
> printing:
>
> g(1)
> 2
> g(2)
> 3
> 2
>
> o .STATIC rules have their values are stored in .omakedb, not in
> .omc, so they are distinct between different projects (while the
> static. sections in common library files are shared between
> projects).
> o The .MEMO rules are very similar to the .STATIC, except
> the .MEMO
> values are not preserved across runs of OMake. They are,
> however,
> preserved for the duration of OMake session.
>
> * Fields in sub-objects can now be referenced directly using the
> $(X.Y.Z) form (bug 580). For example,
>
> X. =
> Y. =
> Z. =
> x = 1
> X.Y.Z.y = 2
> X.Y.Z.f() =
> value $(add $x, $y)
> echo $(X.Y.Z.f)
> # prints "3"
>
> * Allow functions to take their bodies as array arguments (bug 645).
> The [...] argument to a function call stands for an array body and
> ... stands for a normal body argument. For example,
>
> X =
> file([...])
> a
> b
> c
> - :
> : Array
>
> * Corrected several cases where the exit shell alias would not do the
> right thing. For example, pipelines like false || exit 5 will now
> return the correct exit code.
>
> * Added a build function, so that builds can be performed from osh
> scripts (the function may be called only from osh).
>
> * build/C.om: new functions for building DLLs: DynamicCLibrary,
> DynamicCLibraryCopy, DynamicCLibraryInstall, DynamicCXXLibrary,
> DynamicCXXLibraryCXXopy, DynamicCXXLibraryInstall.
>
> * New built-in functions: sort (AKA Sequence.sort), replace-nth,
> input-line (AKA InChannel.readln), channel-name (AKA Channel.name),
> sequence-sub (AKA Sequence.sub).
>
> * New Shell alias: Shell.pwd
>
> * The defined, getvar, setvar now allow qualified names (e.g public.x
> or private.y).
>
> * Built-in awk will now set the FILENAME and FNR ("line number")
> variables when evaluating its body.
>
> * The run-time is now included in - exit messages (e.g. when
> --print-exit is enabled) - bug 680. Note that this only indicates
> when OMake have noticed that the command have finished, which
> may be
> quite inaccurate in parallel builds (where OMake may be busy
> setting
> up parallel jobs and not paying attention).
>
> * Significant code reorganization in preparation for OMake 0.9.9,
> should be largely transparent to the end-users
>
> As usual, for more information on OMake and on this release, please
> visit the OMake Home Page at http://omake.metaprl.org/ . Source and
> binary packages of OMake 0.9.8.5 may be downloaded from http://
> omake.metaprl.org/download.html. In addition, OMake may be obtained
> via the GODI packaging system.
>
> OMake 0.9.8.5 should still be considered 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 at metaprl.org and/
> or at http://bugzilla.metaprl.org/
>
> --
> Aleksey Nogin, Research Scientist
> Advanced Technologies Department, Information & System Sciences Lab
> HRL Laboratories, LLC, Malibu, CA
> _______________________________________________
> OMake-Devel mailing list
> OMake-Devel at metaprl.org
> https://lists.metaprl.org/mailman/listinfo/omake-devel
--
Jason Hickey http://www.cs.caltech.edu/~jyh
Caltech Computer Science Tel: 626-395-6568 FAX: 626-792-4257
More information about the Omake
mailing list