Or have two versions that share almost all of the code. .. appreciate the
feedback, moving on.
On Friday, October 23, 2015 at 1:10:22 PM UTC-4, Jeffrey Sarnoff wrote:
>
> 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]>
>> 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.
>>>>
>>>
>>