Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix Openni2 build failed on linux (update to C99 standard) #2651

Merged
merged 4 commits into from
Nov 7, 2018

Conversation

Daichou
Copy link
Contributor

@Daichou Daichou commented Nov 1, 2018

original bug

  • original source code is use g++ 7.3.0 will build failed. Because in c99 FUNCTION marco should not use string concatenate.
  • VA_ARGS Variadic marco may be empty. So it need to add "##" to fix.
[ 14%] Building CXX object CMakeFiles/rs2driver.dir/src/Rs2Stream.cpp.o
In file included from /home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.h:3:0,
                 from /home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Device.h:3,
                 from /home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Driver.h:3,
                 from /home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:1:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘OniStatus oni::driver::Rs2Stream::initialize(oni::driver::Rs2Device*, rs2_sensor*, int, int, std::vector<oni::driver::Rs2StreamProfileInfo>*)’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:50: error: expected ‘)’ before ‘__FUNCTION__’
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                  ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:31:2: note: in expansion of macro ‘rsTraceFunc’
  rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, sensorId, streamId);
  ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:91: warning: too many arguments for format [-Wformat-extra-args]
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                                                           ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:31:2: note: in expansion of macro ‘rsTraceFunc’
  rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, sensorId, streamId);
  ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘void oni::driver::Rs2Stream::shutdown()’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:50: error: expected ‘)’ before ‘__FUNCTION__’
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                  ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:55:18: note: in expansion of macro ‘rsTraceFunc’
  if (m_sensor) { rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId); }
                  ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:91: warning: too many arguments for format [-Wformat-extra-args]
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                                                           ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:55:18: note: in expansion of macro ‘rsTraceFunc’
  if (m_sensor) { rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId); }
                  ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘virtual OniStatus oni::driver::Rs2Stream::start()’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:50: error: expected ‘)’ before ‘__FUNCTION__’
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                  ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:74:3: note: in expansion of macro ‘rsTraceFunc’
   rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId);
   ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:91: warning: too many arguments for format [-Wformat-extra-args]
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                                                           ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:74:3: note: in expansion of macro ‘rsTraceFunc’
   rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId);
   ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘virtual void oni::driver::Rs2Stream::stop()’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:50: error: expected ‘)’ before ‘__FUNCTION__’
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                  ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:86:3: note: in expansion of macro ‘rsTraceFunc’
   rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId);
   ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:40:91: warning: too many arguments for format [-Wformat-extra-args]
 #define rsTraceFunc(format, ...) printf("[RS2] " __FUNCTION__ " " format "\n", __VA_ARGS__)
                                                                                           ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:86:3: note: in expansion of macro ‘rsTraceFunc’
   rsTraceFunc("type=%d sensorId=%d streamId=%d", (int)m_rsType, m_sensorId, m_streamId);
   ^~~~~~~~~~~
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp: In member function ‘virtual OniStatus oni::driver::Rs2Stream::convertDepthToColorCoordinates(oni::driver::StreamBase*, int, int, OniDepthPixel, int*, int*)’:
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Base.h:39:145: error: expected primary-expression before ‘)’ token
 raceError(format, ...) printf("[RS2] ERROR at FILE %s LINE %d FUNC %s\n\t" format "\n", __FILE__, __LINE__, __FUNCTION__, __VA_ARGS__)
                                                                                                                                      ^
/home/tommycc/work/librealsense/wrappers/openni2/src/Rs2Stream.cpp:114:3: note: in expansion of macro ‘rsTraceError’
   rsTraceError("Invalid colorStream");
   ^~~~~~~~~~~~
CMakeFiles/rs2driver.dir/build.make:86: recipe for target 'CMakeFiles/rs2driver.dir/src/Rs2Stream.cpp.o' failed
make[2]: *** [CMakeFiles/rs2driver.dir/src/Rs2Stream.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/rs2driver.dir/all' failed
make[1]: *** [CMakeFiles/rs2driver.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

update

For FUNCTION marco, it must not use string concatenate I follow GNU GCC Function Names as Strings use %s format to fix.
For VA_ARGS variadic macro, I follow GNU GCC Variadic Macros to fix it.

__FUNCTION__ marco cannot use string concatenate in prinf() args, it
need %s format output.
__VA_ARGS__ will appear no empty argument situation. So we need add ##
before it to remove privious comma.
@dorodnic
Copy link
Contributor

dorodnic commented Nov 1, 2018

Thank you @Daichou
@timofey-aleynikov could you please take a look?

@dorodnic dorodnic merged commit a7bc600 into IntelRealSense:development Nov 7, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants