diff --git a/ChangeLog.md b/ChangeLog.md
index dda445f..c5623ea 100644
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,11 @@
+## Changes between libo3d3xx 0.7.6 and 0.7.7
+
+* Updated cmake/packaging scripts to support the Ubuntu 18.04 toolchain
+* Disabled FindXMLRPC CMake module when cross compiling. This fixes a build
+ failure when cross compiling for the O3D303 with CMake 3.10.2 on Ubuntu
+ 18.04)
+* Backported PR#180 from ifm3d to handle spurious wakeups in WaitForFrame
+
## Changes between libo3d3xx 0.7.5 and 0.7.6
* Makes unit tests pass for the 1.23.1522 firmware (json dumps still do not
diff --git a/README.md b/README.md
index c033a4e..ed07880 100644
--- a/README.md
+++ b/README.md
@@ -189,6 +189,12 @@ Software Compatibility Matrix
O3D303 |
Ethernet/IP assembly size configuration and PCIC schema auto update |
+
+ 0.7.7 |
+ 1.25.4073 |
+ O3D303 |
+ Support for building with Ubuntu 18.04 toolchain, bugfixes |
+
Features
@@ -257,6 +263,7 @@ validated:
* g++ 4.8.x on Ubuntu Linux 14.04 LTS
* g++ 5.3.x on Ubuntu Linux 16.04 LTS
+* g++ 7.3.x on Ubuntu Linux 18.04 LTS
Installation (from source)
--------------------------
diff --git a/cmake/modules/o3d3xx_version.cmake b/cmake/modules/o3d3xx_version.cmake
index d472858..d6fd5ea 100644
--- a/cmake/modules/o3d3xx_version.cmake
+++ b/cmake/modules/o3d3xx_version.cmake
@@ -4,6 +4,6 @@
################################################
set(O3D3XX_VERSION_MAJOR 0)
set(O3D3XX_VERSION_MINOR 7)
-set(O3D3XX_VERSION_PATCH 6)
+set(O3D3XX_VERSION_PATCH 7)
set(O3D3XX_VERSION_STRING
"${O3D3XX_VERSION_MAJOR}.${O3D3XX_VERSION_MINOR}.${O3D3XX_VERSION_PATCH}")
diff --git a/modules/camera/CMakeLists.txt b/modules/camera/CMakeLists.txt
index 6c67eb4..f167292 100644
--- a/modules/camera/CMakeLists.txt
+++ b/modules/camera/CMakeLists.txt
@@ -84,7 +84,9 @@ get_ubuntu_version(${UBUNTU_VERSION})
################################################
## Bring in dependent projects
################################################
-find_package(XMLRPC REQUIRED c++ client)
+if (NOT CMAKE_CROSSCOMPILING)
+ find_package(XMLRPC REQUIRED c++ client)
+endif()
find_package(Boost REQUIRED COMPONENTS program_options system)
################################################
diff --git a/modules/camera/test/CMakeLists.txt b/modules/camera/test/CMakeLists.txt
index 4cf369e..3ec9fb8 100644
--- a/modules/camera/test/CMakeLists.txt
+++ b/modules/camera/test/CMakeLists.txt
@@ -1,6 +1,6 @@
set(GTEST_CMAKE_DIR "/usr/src/gtest")
enable_testing()
-add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin)
+add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL)
file(GLOB CAMERA_TEST_SOURCES *.cpp)
add_executable(o3d3xx-camera-tests ${CAMERA_TEST_SOURCES})
if(BUILD_SHARED_LIBS)
diff --git a/modules/camera/test/o3d3xx-camera-tests.cpp b/modules/camera/test/o3d3xx-camera-tests.cpp
index da53c70..145aa33 100644
--- a/modules/camera/test/o3d3xx-camera-tests.cpp
+++ b/modules/camera/test/o3d3xx-camera-tests.cpp
@@ -179,7 +179,7 @@ TEST(Camera_Tests, GetDeviceConfig)
// std::cout << kv.first << "=" << kv.second << std::endl;
// }
- EXPECT_EQ(params.size(), 38);
+ EXPECT_EQ(params.size(), 40);
EXPECT_EQ(params.at("Name"), dev->Name());
EXPECT_EQ(params.at("Description"), dev->Description());
diff --git a/modules/framegrabber/src/libo3d3xx_framegrabber/frame_grabber.cpp b/modules/framegrabber/src/libo3d3xx_framegrabber/frame_grabber.cpp
index 4b83d03..daab4da 100644
--- a/modules/framegrabber/src/libo3d3xx_framegrabber/frame_grabber.cpp
+++ b/modules/framegrabber/src/libo3d3xx_framegrabber/frame_grabber.cpp
@@ -180,15 +180,26 @@ o3d3xx::FrameGrabber::WaitForFrame(o3d3xx::ByteBuffer* buff,
try
{
+ // Store the current pointer backing the front buffer - this will be the
+ // condition checked by the condition_variable predicate (pointer should
+ // have changed) below
+ std::uint8_t* initial_buff_ptr = this->front_buffer_.data();
+ auto predicate =
+ [this, initial_buff_ptr]()
+ {
+ return this->front_buffer_.data() != initial_buff_ptr;
+ };
+
if (timeout_millis <= 0)
{
- this->front_buffer_cv_.wait(lock);
+ this->front_buffer_cv_.wait(lock, predicate);
}
else
{
- if (this->front_buffer_cv_.wait_for(
- lock, std::chrono::milliseconds(timeout_millis)) ==
- std::cv_status::timeout)
+ if (!this->front_buffer_cv_.wait_for(
+ lock,
+ std::chrono::milliseconds(timeout_millis),
+ predicate))
{
LOG(WARNING) << "Timeout waiting for image buffer from camera";
return false;
diff --git a/modules/framegrabber/test/CMakeLists.txt b/modules/framegrabber/test/CMakeLists.txt
index 74e47db..70ed6d2 100644
--- a/modules/framegrabber/test/CMakeLists.txt
+++ b/modules/framegrabber/test/CMakeLists.txt
@@ -1,6 +1,6 @@
set(GTEST_CMAKE_DIR "/usr/src/gtest")
enable_testing()
-add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin)
+add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL)
file(GLOB FRAMEGRABBER_TEST_SOURCES *.cpp)
add_executable(o3d3xx-framegrabber-tests
${FRAMEGRABBER_TEST_SOURCES})
diff --git a/modules/image/CMakeLists.txt b/modules/image/CMakeLists.txt
index d02f754..aeb0fa4 100644
--- a/modules/image/CMakeLists.txt
+++ b/modules/image/CMakeLists.txt
@@ -240,7 +240,7 @@ if(BUILD_EXE_VIEWER)
set(CPACK_DEBIAN_PACKAGE_DEPENDS
"${CPACK_DEBIAN_PACKAGE_DEPENDS},
libvtk6-dev,
- libpcl1.7,
+ libpcl-dev,
libopencv-highgui-dev,
libopencv-contrib-dev")
else()
diff --git a/modules/image/test/CMakeLists.txt b/modules/image/test/CMakeLists.txt
index ae2f807..67d043b 100644
--- a/modules/image/test/CMakeLists.txt
+++ b/modules/image/test/CMakeLists.txt
@@ -2,7 +2,7 @@ find_library(LIB_boost_system NAMES boost_system)
set(GTEST_CMAKE_DIR "/usr/src/gtest")
enable_testing()
-add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin)
+add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL)
file(GLOB IMAGE_TEST_SOURCES *.cpp)
add_executable(o3d3xx-image-tests
${IMAGE_TEST_SOURCES})
diff --git a/modules/oem/test/CMakeLists.txt b/modules/oem/test/CMakeLists.txt
index 181a8f9..9eea9c6 100644
--- a/modules/oem/test/CMakeLists.txt
+++ b/modules/oem/test/CMakeLists.txt
@@ -2,7 +2,7 @@ set(GTEST_CMAKE_DIR "${SYSROOT_CONTRIB}/usr/src/gtest")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I${SYSROOT_CONTRIB}/usr/include")
enable_testing()
-add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin)
+add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL)
file(GLOB TEST_SOURCES *.cpp)
add_executable(o3d3xx-oem-tests ${TEST_SOURCES})
target_link_libraries(o3d3xx-oem-tests
diff --git a/modules/pcicclient/test/CMakeLists.txt b/modules/pcicclient/test/CMakeLists.txt
index 101c0a8..f6e7d2a 100644
--- a/modules/pcicclient/test/CMakeLists.txt
+++ b/modules/pcicclient/test/CMakeLists.txt
@@ -1,6 +1,6 @@
set(GTEST_CMAKE_DIR "/usr/src/gtest")
enable_testing()
-add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin)
+add_subdirectory(${GTEST_CMAKE_DIR} gtest_bin EXCLUDE_FROM_ALL)
file(GLOB PCICCLIENT_TEST_SOURCES *.cpp)
add_executable(o3d3xx-pcicclient-tests
${PCICCLIENT_TEST_SOURCES})