If someone does:

ENV["FASTTRIG"] = "yes"
Pkg.build("Float12x")

and then in another session does Pkg.build(), (presumably for some other
package or update), then won't the setting be overwritten with the default
build setting?

On Fri, Oct 23, 2015 at 12:11 PM, Jeffrey Sarnoff <[email protected]
> wrote:

> 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.
>>
>

Reply via email to