yes -- I suppose choosing one happyesque medium is the way to go at first.
On Friday, October 23, 2015 at 12:22:24 PM UTC-4, Tom Breloff wrote:
>
> 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]
> <javascript:>> 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.
>>>
>>
>