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

Reply via email to