What are the compiler differences between 1.0.5 and 1.5.8 ?

I have 2 working sketches that I want to combine into a single head tracking application for an XPlane flight simulator view control. However they will only compile on different levels of the Arduino IDE !

1 - Is a joystick app for the Arduino Micro / Leonardo that I can only get to run on 1.0.5 as any later IDE and ringbuffer.h is not resolved (called by the modified USBAPI code)....

/Applications/Arduino 158 USB.app/Contents/Java/hardware/arduino/avr/cores/arduino/USBAPI.h:31:2: error: 'RingBuffer' does not name a type
RingBuffer *_cdc_rx_buffer;

2 - Is for the MPU9150 (gyro tracker) that runs happily on 1.6.4 or 1.5.8 but on 1.0.5 I can not get it to resolve the floating point abs function fabsf().... (I have added extra includes for maths.h and Arduino.h) I can code around this (write my own function) but all these incompatibilities are annoying me...

error: 'fabsf' was not declared in this scope...

Any suggestions for either ?

Any suggestions for either ?

Change the library to use a function that IS defined. What, exactly, does fabsf() do, and how does it differ from abs()?

Floating point absolute value function

But that is the point - it is defined in 1.5 and 1.6 -

It is only a two line function to write and wrap in an #if ARDUINO = 105 but it just annoys me that I could not resolve it.

Similar to the RingBuffer resolving in 105 but not 158/164 - I would like to understand why and what has change so that I can fix similar problems in the future rather than work around them.

cheers
Bob

fabsf() is defined in ..//hardware/tools/avr/avr/include/math.h, where .. is the IDE's folder. For IDE versions of 1.5.7 or later, math.h has this line:

#define fabsf fabs /**< The alias for fabs(). */

Versions prior to 1.5.7 don't have that line, so, for them, fabsf() is undefined. It's not clear why someone would use fabsf() rather than fabs() for an AVR.

bcarteruk:
... wrap in an #if ARDUINO = 105 ...

You might be happier wrapping a #define inside "#if ARDUINO < 157 ..."

fabsf() takes a float and returns a float. fabs() (stupid name) takes a double and returns a double. Why do you need a function that SPECIFICALLY deals with floats? If you pass fabs() a float, and store the result in a float, what have you given up? On most Arduinos, NOTHING! On the DUE? NOTHING.