Skip to content
This repository was archived by the owner on Oct 10, 2022. It is now read-only.

Commit 2315060

Browse files
authored
Fix osx iidc driver (#76)
* Minor fixes to build (particularly OSX): - Get correct library path for libdc1394 (fixing link errors in OSX) - Use QMap instead of std::hash (which also gave some linking errors in OSX) - Fix OSX package suffix - implement a retry mechanism for deploy script * Replace QMap with QHash * Try to improve OSX build speed by installing brew dependencies via travis.yml * Use macOS 10.14 in travis build * Restore previous brew installation script
1 parent 03dfd81 commit 2315060

7 files changed

Lines changed: 35 additions & 22 deletions

File tree

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ matrix:
1313
include:
1414
- env: 'SKIP_TESTS=0 BUILD_OS_FAMILY=osx'
1515
os: osx
16+
osx_image: xcode10.2
1617
- dist: xenial
1718
env: 'SKIP_TESTS=0 DOCKER_IMAGE=gulinux/planetaryimager_build:ubuntu-19.04-x86_64 IMAGE_ARCH=x86_64 BUILD_OS_FAMILY=linux CMAKE_BINARY=cmake'
1819
os: linux

scripts/release-travis.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
from github.GithubException import UnknownObjectException
44
import os
55
import sys
6+
import traceback
7+
import time
68

79
github = Github(os.environ['GITHUB_OAUTH_USER'], os.environ['GITHUB_OAUTH_TOKEN'])
810
repo = github.get_repo('GuLinux/PlanetaryImager')
@@ -21,14 +23,24 @@
2123
except ValueError:
2224
pass
2325

24-
if not pr:
26+
27+
def find_pr()
2528
all_pulls = [pr for pr in repo.get_pulls(state='closed', sort='updated')]
2629
all_pulls.reverse()
2730
for merged_pr in all_pulls:
2831
if merged_pr.merge_commit_sha == commit_id:
29-
pr = merged_pr
32+
return merged_pr
33+
return None
3034

31-
35+
if not pr:
36+
retry = 0
37+
while not pr and retry < 5:
38+
time.sleep(retry * 10)
39+
try:
40+
pr = find_pr()
41+
except:
42+
traceback.print_exc()
43+
retry += 1
3244

3345
if pr:
3446
release_body='''# {}

scripts/travis/before_install

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ if [ "${TRAVIS_OS_NAME}" == "linux" ]; then
1616
fi
1717
if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
1818
bash support/osx/install-deps
19-
brew install python@3
2019
fi
2120
echo "export GIT_COMMIT_DATE=\"$(git show -s --format='%cd' --date=short | tr -d '-')\"" > ${TRAVIS_BUILD_DIR}/git_commit_date.sh
2221
cat ${TRAVIS_BUILD_DIR}/git_commit_date.sh

scripts/travis/ci-build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ fi
1616
if [ "${TRAVIS_OS_NAME}" == "osx" ]; then
1717
mkdir "$TRAVIS_BUILD_DIR/build"
1818
cd "$TRAVIS_BUILD_DIR/build"
19-
bash "$TRAVIS_BUILD_DIR/support/osx/cmake" -DBUILD_DRIVER_iidc=Off -DCPACK_GENERATOR=DragNDrop \
19+
bash "$TRAVIS_BUILD_DIR/support/osx/cmake" -DCPACK_GENERATOR=DragNDrop -DPACKAGE_SYSTEM_NAME=MacOSX \
2020
-DPACKAGE_VERSION_SUFFIX="_${GIT_COMMIT_DATE}_ci${TRAVIS_BUILD_NUMBER}" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DENABLE_PLANETARYIMAGER_TESTING=${ENABLE_PLANETARYIMAGER_TESTING} \
2121
"$TRAVIS_BUILD_DIR"
2222
make -j4

src/drivers/iidc/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ add_driver(NAME iidc OS Linux Darwin DEFAULT_ON SRCS ${iidc_SRCS})
44

55
if(BUILD_DRIVER_iidc)
66
pkg_check_modules(LIBDC1394 libdc1394-2 REQUIRED)
7+
find_library(IIDC_LIBRARIES ${LIBDC1394_LIBRARIES} HINTS ${LIBDC1394_LIBRARY_DIRS})
78
include_directories(${LIBDC1394_INCLUDEDIR})
8-
link_directories(${LIBDC1394_LIBRARY_DIRS})
9-
target_link_libraries(iidc ${LIBDC1394_LIBRARIES})
9+
target_link_libraries(iidc ${IIDC_LIBRARIES})
1010
endif()

src/drivers/iidc/iidc_imager.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
#include <map>
2828
#include <QRect>
2929
#include "Qt/qt_strings_helper.h"
30-
#include <unordered_map>
30+
#include <QHash>
3131

3232
using namespace std::chrono;
3333

@@ -49,7 +49,7 @@ struct EnumHash
4949
size_t operator()(T t) const { return static_cast<size_t>(t); }
5050
};
5151

52-
static std::unordered_map<dc1394color_coding_t, const char *, EnumHash> COLOR_CODING_NAME
52+
static QHash<dc1394color_coding_t, const char *> COLOR_CODING_NAME
5353
{
5454
{ DC1394_COLOR_CODING_MONO8, "Mono 8-bit" },
5555
{ DC1394_COLOR_CODING_YUV411, "YUV411" },
@@ -74,11 +74,11 @@ DPTR_IMPL(IIDCImager)
7474
dc1394video_modes_t videoModes;
7575
dc1394video_mode_t currentVidMode;
7676
dc1394color_coding_t currentPixFmt;
77-
std::unordered_map<dc1394video_mode_t, dc1394framerates_t, EnumHash> frameRates; ///< Key: non-scalable video mode from 'videoModes'
78-
std::unordered_map<dc1394video_mode_t, dc1394format7mode_t, EnumHash> fmt7Info; ///< Key: scalable video mode form 'videoModes'
77+
QHash<dc1394video_mode_t, dc1394framerates_t> frameRates; ///< Key: non-scalable video mode from 'videoModes'
78+
QHash<dc1394video_mode_t, dc1394format7mode_t> fmt7Info; ///< Key: scalable video mode form 'videoModes'
7979

8080
dc1394featureset_t features;
81-
std::unordered_map<dc1394feature_t, bool, EnumHash> hasAbsoluteControl;
81+
QHash<dc1394feature_t, bool> hasAbsoluteControl;
8282

8383
Properties properties;
8484

@@ -190,7 +190,7 @@ Imager::Control IIDCImager::Private::getFrameRates(dc1394video_mode_t vidMode)
190190
const auto frloc = frameRates.find(vidMode);
191191
assert(frloc != frameRates.end());
192192

193-
const dc1394framerates_t &fr = frloc->second;
193+
const dc1394framerates_t &fr = frloc.value();
194194

195195
auto frameRatesCtrl = Imager::Control{ ControlID::FrameRate, "Fixed Frame Rate", Control::Combo };
196196

@@ -232,14 +232,14 @@ IIDCImager::IIDCImager(std::unique_ptr<dc1394camera_t, Deleters::camera> camera,
232232

233233
if (!dc1394_is_video_mode_scalable(vidMode))
234234
{
235-
auto modeFrameRates = d->frameRates.emplace(vidMode, dc1394framerates_t{ });
236-
IIDC_CHECK << dc1394_video_get_supported_framerates(d->camera.get(), vidMode, &modeFrameRates.first->second)
235+
auto modeFrameRates = d->frameRates.insert(vidMode, dc1394framerates_t{ });
236+
IIDC_CHECK << dc1394_video_get_supported_framerates(d->camera.get(), vidMode, &modeFrameRates.value())
237237
<< "Get supported frame rates";
238238
}
239239
else
240240
{
241-
auto fmt7loc = d->fmt7Info.emplace(vidMode, dc1394format7mode_t{ });
242-
dc1394format7mode_t &fmt7 = fmt7loc.first->second;
241+
auto fmt7loc = d->fmt7Info.insert(vidMode, dc1394format7mode_t{ });
242+
dc1394format7mode_t &fmt7 = fmt7loc.value();
243243
fmt7.present = DC1394_TRUE;
244244

245245
IIDC_CHECK << dc1394_format7_get_mode_info(d->camera.get(), vidMode, &fmt7)
@@ -311,14 +311,14 @@ Imager::Properties IIDCImager::properties() const
311311

312312
const auto maxImageWidth = std::max_element(d->fmt7Info.begin(), d->fmt7Info.end(),
313313
[](const auto &i1, const auto &i2)
314-
{ return i1.second.max_size_x < i2.second.max_size_x; });
314+
{ return i1.max_size_x < i2.max_size_x; });
315315

316316
const auto maxImageHeight = std::max_element(d->fmt7Info.begin(), d->fmt7Info.end(),
317317
[](const auto &i1, const auto &i2)
318-
{ return i1.second.max_size_y < i2.second.max_size_y; });
318+
{ return i1.max_size_y < i2.max_size_y; });
319319

320-
properties.set_resolution({ (int)maxImageWidth->second.max_size_x,
321-
(int)maxImageHeight->second.max_size_y });
320+
properties.set_resolution({ (int)maxImageWidth.value().max_size_x,
321+
(int)maxImageHeight.value().max_size_y });
322322

323323

324324
return properties;

support/docker/travis.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ def generate(self, args):
3232
if not 'osx' in args.exclude_images:
3333
includes.append({
3434
'os': 'osx',
35-
'env': 'SKIP_TESTS={} BUILD_OS_FAMILY=osx'.format(b2i('osx' in args.skip_tests))
35+
'env': 'SKIP_TESTS={} BUILD_OS_FAMILY=osx'.format(b2i('osx' in args.skip_tests)),
36+
'osx_image': 'xcode10.2',
3637
})
3738
for image in self.images:
3839
exclude_image = False

0 commit comments

Comments
 (0)