JaneliaSciComp / NIDAQ.jl

National Instruments Data Acquisition Interface
Other
47 stars 16 forks source link

WIP: support julia 0.7 #14

Closed bjarthur closed 5 years ago

bjarthur commented 5 years ago

fixes https://github.com/JaneliaSciComp/NIDAQ.jl/issues/13

Cody-G commented 5 years ago

I'm just wondering how this is going? If it seems like you'll need a few more days then I'll start from this branch and try wrapping the headers with Clang tomorrow (I'm in a bit of a time crunch unfortunately).

bjarthur commented 5 years ago

go for it. i won't have time for awhile.

Cody-G commented 5 years ago

So I've made some progress on this, and I've done a bit of manual editing of Clang's output files to fix some issues. However Clang is still skipping a lot of stuff, and my understanding is that this is expected because it (and Julia) doesn't handle varargs C functions well?

julia> run(wc)
[ Info: wrapping header: NIDAQmx.h ...
┌ Warning: not wrapping CLCursor (CLMacroInstantiation) _WIN64
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:398
┌ Warning: not wrapping CLCursor (CLMacroInstantiation) _WIN64
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:398
┌ Warning: not wrapping CLCursor (CLMacroInstantiation) _WIN64
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:398
┌ Warning: not wrapping CLCursor (CLMacroInstantiation) CVICALLBACK
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:398
┌ Warning: not wrapping CLCursor (CLMacroInstantiation) CVICALLBACK
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:398
┌ Warning: not wrapping CLCursor (CLMacroInstantiation) CVICALLBACK
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:398
┌ Warning: Skipping struct: "CLCursor (CLStructDecl) CVITime" due to unsupported field: CLCursor (CLUnexposedAttr)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:151
┌ Warning:   incorrect typesize for CXType_Invalid field
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\clang2julia.jl:89
┌ Warning:   incorrect typesize for CXType_Invalid field
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\clang2julia.jl:89
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetTaskAttribute(TaskHandle, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetChanAttribute(TaskHandle, const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetChanAttribute(TaskHandle, const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetTimingAttribute(TaskHandle, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetTimingAttribute(TaskHandle, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetTimingAttributeEx(TaskHandle, const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetTimingAttributeEx(TaskHandle, const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetTrigAttribute(TaskHandle, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetTrigAttribute(TaskHandle, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetReadAttribute(TaskHandle, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetReadAttribute(TaskHandle, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetWriteAttribute(TaskHandle, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetWriteAttribute(TaskHandle, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetExportedSignalAttribute(TaskHandle, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetExportedSignalAttribute(TaskHandle, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetScaleAttribute(const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetScaleAttribute(const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetBufferAttribute(TaskHandle, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetSwitchChanAttribute(const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetSwitchDeviceAttribute(const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetSwitchDeviceAttribute(const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetSwitchScanAttribute(TaskHandle, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetDeviceAttribute(const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxCreateWatchdogTimerTask(const char *, const char *, TaskHandle *, float64, const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetWatchdogAttribute(TaskHandle, const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetWatchdogAttribute(TaskHandle, const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetCalInfoAttribute(const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetCalInfoAttribute(const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetPhysicalChanAttribute(const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetRealTimeAttribute(TaskHandle, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetRealTimeAttribute(TaskHandle, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetPersistedTaskAttribute(const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetPersistedChanAttribute(const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetPersistedScaleAttribute(const char *, int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetSystemInfoAttribute(int32, void *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetDigitalPowerUpStates(const char *, const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetDigitalPowerUpStates(const char *, const char *, int32 *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetDigitalPullUpPullDownStates(const char *, const char *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetDigitalPullUpPullDownStates(const char *, const char *, int32 *, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxSetAnalogPowerUpStates(const char *, const char *, float64, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
┌ Warning: Skipping VarArg Function CLCursor (CLFunctionDecl) DAQmxGetAnalogPowerUpStates(const char *, const char *, float64 *, int32, ...)
└ @ Clang C:\Users\user\.julia\packages\Clang\7sP4h\src\wrap_c.jl:15
[ Info: writing C:\Program Files (x86)\National Instruments\NI-DAQ\DAQmx ANSI C Dev\include\NIDAQmx.jl

I searched for a couple of these skipped functions in the code for the last version of NIDAQmx that you wrapped, and I didn't get any hits. So maybe it's harmless to skip these functions? I'll try running tests anyway and see, but any guidance you have is appreciated (I haven't used Clang before).

bjarthur commented 5 years ago

clang can be quite difficult. thanks for taking a stab at this.

if the tests pass, and you don't find any problems in your use case, i'd say it's good to go. the only guidance i can offer is here. please update this section of the README with any tips you find noteworthy.

i suspect that there will be more depwarns to fix as femtocleaner doesn't get them all.

Cody-G commented 5 years ago

Thanks! The manual edits turned out to be just as you listed, and I now have tests passing with a USB device. I'll still test some more before we merge, see #15. It was painful, not really because of Clang but because I spent a whole day trying to understand a mysterious error that in the end was fixed by rebooting Windows. And also the instructions for building Julia on Windows were out-of-date. And also BinaryProvider.jl needed patches for Windows.

bjarthur commented 5 years ago

closing in favor of #15