Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
8bd40ba8
Commit
8bd40ba8
authored
Apr 12, 2016
by
Gus Grubba
Browse files
Merge pull request #3206 from dogmaphobic/fixGStreamerRuntime
Fix GStreamer relocation for Mac OS release (installer) builds.
parents
fdcfd3c0
7b1f7bad
Changes
4
Hide whitespace changes
Inline
Side-by-side
qgroundcontrol.pro
View file @
8bd40ba8
...
...
@@ -65,7 +65,15 @@ LinuxBuild {
CONFIG
+=
qt
\
thread
\
c
++
11
\
contains
(
DEFINES
,
ENABLE_VERBOSE_OUTPUT
)
{
message
(
"Enable verbose compiler output (manual override from command line)"
)
}
else
:
exists
(
user_config
.
pri
)
:
infile
(
user_config
.
pri
,
DEFINES
,
ENABLE_VERBOSE_OUTPUT
)
{
message
(
"Enable verbose compiler output (manual override from user_config.pri)"
)
}
else
{
CONFIG
+=
\
silent
}
QT
+=
\
concurrent
\
...
...
src/VideoStreaming/VideoStreaming.cc
View file @
8bd40ba8
...
...
@@ -69,41 +69,35 @@ static void qgcputenv(const QString& key, const QString& root, const QString& pa
void
initializeVideoStreaming
(
int
&
argc
,
char
*
argv
[])
{
#if defined(QGC_GST_STREAMING)
// Initialize GStreamer
GError
*
error
=
NULL
;
if
(
!
gst_init_check
(
&
argc
,
&
argv
,
&
error
))
{
qCritical
()
<<
"gst_init_check() failed: "
<<
error
->
message
;
g_error_free
(
error
);
}
// Our own plugin
GST_PLUGIN_STATIC_REGISTER
(
QGC_VIDEOSINK_PLUGIN
);
// The static plugins we use
#if defined(__mobile__)
GST_PLUGIN_STATIC_REGISTER
(
coreelements
);
GST_PLUGIN_STATIC_REGISTER
(
libav
);
GST_PLUGIN_STATIC_REGISTER
(
rtp
);
GST_PLUGIN_STATIC_REGISTER
(
udp
);
GST_PLUGIN_STATIC_REGISTER
(
videoparsersbad
);
GST_PLUGIN_STATIC_REGISTER
(
x264
);
#endif
#ifdef __macos__
#ifdef QGC_INSTALL_RELEASE
QString
currentDir
=
QCoreApplication
::
applicationDirPath
();
qgcputenv
(
"GST_PLUGIN_SCANNER"
,
currentDir
,
"/gst-plugin-scanner"
);
qgcputenv
(
"GTK_PATH"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current"
);
qgcputenv
(
"GIO_EXTRA_MODULES"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gio/modules"
);
qgcputenv
(
"GST_PLUGIN_SYSTEM_PATH_1_0"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gstreamer-1.0"
);
qgcputenv
(
"GST_PLUGIN_SYSTEM_PATH"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gstreamer-1.0"
);
qgcputenv
(
"GST_PLUGIN_PATH_1_0"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gstreamer-1.0"
);
qgcputenv
(
"GST_PLUGIN_PATH"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gstreamer-1.0"
);
// QStringList env = QProcessEnvironment::systemEnvironment().keys();
// foreach(const QString &key, env) {
// qDebug() << key << QProcessEnvironment::systemEnvironment().value(key);
// }
#endif
#endif
#ifdef __macos__
#ifdef QGC_INSTALL_RELEASE
QString
currentDir
=
QCoreApplication
::
applicationDirPath
();
qgcputenv
(
"GST_PLUGIN_SCANNER"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/1.0/libexec/gstreamer-1.0/gst-plugin-scanner"
);
qgcputenv
(
"GTK_PATH"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current"
);
qgcputenv
(
"GIO_EXTRA_MODULES"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gio/modules"
);
qgcputenv
(
"GST_PLUGIN_SYSTEM_PATH_1_0"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gstreamer-1.0"
);
qgcputenv
(
"GST_PLUGIN_SYSTEM_PATH"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gstreamer-1.0"
);
qgcputenv
(
"GST_PLUGIN_PATH_1_0"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gstreamer-1.0"
);
qgcputenv
(
"GST_PLUGIN_PATH"
,
currentDir
,
"/../Frameworks/GStreamer.framework/Versions/Current/lib/gstreamer-1.0"
);
#endif
#endif
// Initialize GStreamer
GError
*
error
=
NULL
;
if
(
!
gst_init_check
(
&
argc
,
&
argv
,
&
error
))
{
qCritical
()
<<
"gst_init_check() failed: "
<<
error
->
message
;
g_error_free
(
error
);
}
// Our own plugin
GST_PLUGIN_STATIC_REGISTER
(
QGC_VIDEOSINK_PLUGIN
);
// The static plugins we use
#if defined(__mobile__)
GST_PLUGIN_STATIC_REGISTER
(
coreelements
);
GST_PLUGIN_STATIC_REGISTER
(
libav
);
GST_PLUGIN_STATIC_REGISTER
(
rtp
);
GST_PLUGIN_STATIC_REGISTER
(
udp
);
GST_PLUGIN_STATIC_REGISTER
(
videoparsersbad
);
GST_PLUGIN_STATIC_REGISTER
(
x264
);
#endif
#else
Q_UNUSED
(
argc
);
Q_UNUSED
(
argv
);
...
...
tools/osxrelocator.py
View file @
8bd40ba8
...
...
@@ -26,7 +26,7 @@ OTOOL_CMD = 'otool'
def
shell_call
(
cmd
,
cmd_dir
=
'.'
,
fail
=
True
):
print
"call"
,
cmd
#
print
(
"call", cmd
)
try
:
ret
=
subprocess
.
check_call
(
cmd
,
cwd
=
cmd_dir
,
...
...
@@ -40,7 +40,7 @@ def shell_call(cmd, cmd_dir='.', fail=True):
def
shell_check_call
(
cmd
):
print
"ccall"
,
cmd
#
print
(
"ccall", cmd
)
try
:
process
=
subprocess
.
Popen
(
cmd
,
stdout
=
subprocess
.
PIPE
)
...
...
@@ -54,6 +54,7 @@ class OSXRelocator(object):
'''
Wrapper for OS X's install_name_tool and otool commands to help
relocating shared libraries.
It parses lib/ /libexec and bin/ directories, changes the prefix path of
the shared libraries that an object file uses and changes it's library
ID if the file is a shared library.
...
...
@@ -61,19 +62,19 @@ class OSXRelocator(object):
def
__init__
(
self
,
root
,
lib_prefix
,
new_lib_prefix
,
recursive
):
self
.
root
=
root
self
.
lib_prefix
=
self
.
_fix_path
(
lib_prefix
)
self
.
new_lib_prefix
=
self
.
_fix_path
(
new_lib_prefix
)
self
.
lib_prefix
=
self
.
_fix_path
(
lib_prefix
)
.
encode
(
'utf-8'
)
self
.
new_lib_prefix
=
self
.
_fix_path
(
new_lib_prefix
)
.
encode
(
'utf-8'
)
self
.
recursive
=
recursive
def
relocate
(
self
):
self
.
parse_dir
(
self
.
root
,
filters
=
[
''
,
'.dylib'
,
'.so'
,
'0'
])
self
.
parse_dir
(
self
.
root
,
filters
=
[
''
,
'.dylib'
,
'.so'
])
def
relocate_file
(
self
,
object_file
,
id
=
None
):
self
.
change_libs_path
(
object_file
)
self
.
change_id
(
object_file
,
id
)
def
change_id
(
self
,
object_file
,
id
=
None
):
id
=
id
or
object_file
.
replace
(
self
.
lib_prefix
,
self
.
new_lib_prefix
)
id
=
id
or
object_file
.
replace
(
self
.
lib_prefix
.
decode
(
'utf-8'
)
,
self
.
new_lib_prefix
.
decode
(
'utf-8'
)
)
filename
=
os
.
path
.
basename
(
object_file
)
if
not
(
filename
.
endswith
(
'so'
)
or
filename
.
endswith
(
'dylib'
)):
return
...
...
@@ -105,13 +106,13 @@ class OSXRelocator(object):
@
staticmethod
def
list_shared_libraries
(
object_file
):
cmd
=
[
OTOOL_CMD
,
"-L"
,
object_file
]
res
=
shell_check_call
(
cmd
).
split
(
'
\n
'
)
res
=
shell_check_call
(
cmd
).
split
(
b
'
\n
'
)
# We don't use the first line
libs
=
res
[
1
:]
# Remove the first character tabulation
libs
=
[
x
[
1
:]
for
x
in
libs
]
# Remove the version info
libs
=
[
x
.
split
(
' '
,
1
)[
0
]
for
x
in
libs
]
libs
=
[
x
.
split
(
b
' '
,
1
)[
0
]
for
x
in
libs
]
return
libs
@
staticmethod
...
...
@@ -157,4 +158,3 @@ def main():
if
__name__
==
"__main__"
:
main
()
tools/prepare_gstreamer_framework.sh
View file @
8bd40ba8
...
...
@@ -26,6 +26,9 @@ GST_ROOT=/Library/Frameworks/GStreamer.framework
GST_BASE
=
$GST_ROOT
/Versions/
$GST_VER
RELOC
=
$(
dirname
$0
)
/osxrelocator.py
OLDDLPATH
=
/Library/Frameworks/GStreamer.framework/
NEWDLPATH
=
@executable_path/../Frameworks/GStreamer.framework/
echo
"GST Installer"
[
"$#"
-eq
3
]
||
die
"3 arguments required,
$#
provided"
[
-d
"
$2
"
]
||
die
"Could not find
$2
"
...
...
@@ -46,6 +49,8 @@ process_framework() {
rsync
-a
--delete
"
$GST_ROOT
"
"
$FMWORK_TARGET
"
||
die
"Error copying
$GST_ROOT
to
$FMWORK_TARGET
"
#-- Prune unused stuff
rm
-rf
$GST_TARGET
/bin
rm
-rf
$GST_TARGET
/etc
rm
-rf
$GST_TARGET
/share
rm
-rf
$GST_TARGET
/Headers
rm
-rf
$GST_TARGET
/include
rm
-rf
$GST_TARGET
/lib/
*
.a
...
...
@@ -57,32 +62,9 @@ process_framework() {
rm
-rf
$GST_TARGET
/lib/libffi-3.0.13
rm
-rf
$GST_TARGET
/lib/pkgconfig
rm
$GST_TARGET
/Commands
#-- Some dylibs are dupes instead of symlinks.
#-- This will do a minimum job in trying to clean those.
#-- Doesn't work. The stupid thing can't load a dlyb symlink.
#for f in $GST_TARGET/lib/*.dylib
#do
# foo=$(basename "$f")
# bar="${foo%.*}"
# for i in `seq 0 9`;
# do
# if [ -e $GST_TARGET/lib/$bar.$i.dylib ]; then
# DUPES="$DUPES
#rm -f $GST_TARGET/lib/$bar.$i.dylib"
# DUPES="$DUPES
#ln -s $f $GST_TARGET/lib/$bar.$i.dylib"
# fi
# done
#done
#IFS=$'\n'
#for c in $DUPES
#do
# eval $c
#done
#-- Now relocate the embeded paths
echo
"GST Installer: Relocating"
python
$RELOC
-r
$GST_TARGET
/lib /Library/Frameworks/GStreamer.framework/ @executable_path/../Frameworks/GStreamer.framework/
>
/dev/null
||
die
"Error relocating binaries in
$GST_TARGET
/lib"
python
$RELOC
-r
$GST_TARGET
/libexec /Library/Frameworks/GStreamer.framework/ @executable_path/../Frameworks/GStreamer.framework/
>
/dev/null
||
die
"Error relocating binaries in
$GST_TARGET
/libexec"
python
$RELOC
-r
"
$GST_TARGET
"
"
$OLDDLPATH
"
"
$NEWDLPATH
"
>
/dev/null
||
die
"Error relocating binaries in
$GST_TARGET
/lib"
}
#-- Check and see if we've already processed the framework
...
...
@@ -91,9 +73,12 @@ echo "GST Installer: Checking $GST_TARGET"
#-- Now copy the framework to the app bundle
echo
"GST Installer: Copying
$GST_SOURCE
to
$BUNDLE_TARGET
/Contents/Frameworks/"
rsync
-a
--delete
$GST_SOURCE
$BUNDLE_TARGET
/Contents/Frameworks/
||
die
"Error copying framework into app bundle"
#-- Move this gst binary to MacOS
mv
$BUNDLE_TARGET
/Contents/Frameworks/GStreamer.framework/Versions/1.0/libexec/gstreamer-1.0/gst-plugin-scanner
$BUNDLE_TARGET
/Contents/MacOS/
||
die
"Error moving gst-plugin-scanner"
#-- The plugin scanner needs to find the GStreamer libraries
GSTINBUNDLE
=
$BUNDLE_TARGET
/Contents/Frameworks/GStreamer.framework/Versions/
$GST_VER
pushd
$GSTINBUNDLE
/libexec
&&
ln
-sf
../../../../../Frameworks
.
&&
popd
||
die
"Error creating Frameworks symlink in
$GST_TARGET
/libexec"
#-- Fix main binary
python
$RELOC
$QGC_BINARY
/Library/Frameworks/GStreamer.framework/ @executable_path/../Frameworks/GStreamer.framework/
>
/dev/null
||
die
"Error relocating
$QGC_BINARY
"
install_name_tool
-change
/Library/Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer @executable_path/../Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer
"
$QGC_BINARY
"
>
/dev/null
||
die
"Error relocating
$QGC_BINARY
"
pushd
$GSTINBUNDLE
&&
install_name_tool
-id
@executable_path/../Frameworks/GStreamer.framework/Versions/1.0/lib/GStreamer GStreamer
&&
popd
||
die
"Error relocating GStreamer"
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment