Thank you -- clearly given.
On Friday, October 23, 2015 at 12:07:07 PM UTC-4, Steven G. Johnson wrote:
>
>
>
> On Friday, October 23, 2015 at 8:37:58 AM UTC-4, Jeffrey Sarnoff wrote:
>>
>> I want to allow users of my Float12x module the choice of faster or more
>> precise trig
>> (at the moment, 103bits over 0..2pi is ~30% faster than 106bits; the
>> more precise version also handles larger arguments).
>> The choice needs to be made before the using statement, as it governs the
>> inclusion of either one of two small source files.
>>
>
> It would be better to refactor your code so that the choice can be made
> dynamically, after the module is loaded.
>
> However, if it is really impossible to do this dynamically, then this kind
> of "static" choice would normally be made at Pkg.build time, and a common
> mechanism for specifying it would be an environment variable. The
> advantage of using Pkg.build is that then your module can be precompiled.
> The procedure I've used is something like:
>
> 1) create a deps/build.jl file that looks at ENV["FASTTRIG"] (or whatever)
> and spits out:
>
> a) a deps/deps.jl file with a constant like `const FASTTRIG = true`
>
> b) a deps/FASTTRIG file to save the FASTRIG setting for the next
> time the file is built. This way, if your package is rebuilt on e.g. a
> Pkg.update, you won't "forget" the user's preference. i.e. you would
> read ENV["FASTTRIG"] by something like:
> get(ENV, "FASTTRIG", isfile("FASTTRIG") ?
> readchomp("FASTTRIG") : "no")
>
> 2) in your main module file, do
>
> const depfile = joinpath(dirname(@__FILE__), "..", "deps", "deps.jl")
>
> isfile(depfile) || error("Float12x not properly installed. Please run
> Pkg.build(\"Float12x\")")
>
> include(depfile) # generated by Pkg.build("Float12x")
>
>
> and then use the value of FASTTRIG to decide how to proceed.
>
>
> 3) Tell your users to do
>
>
> ENV["FASTTRIG"] = "yes" or "no"
>
> Pkg.build("Float12x")
>
>
> when they want to change the setting.
>