Add buildAppImage.sh.in and bool flag for AppImageKit build

This commit is contained in:
Charles J. Cliffe 2016-03-16 21:30:19 -04:00
parent b3b933c8dd
commit 8e82c23fbb
2 changed files with 71 additions and 0 deletions

View File

@ -919,4 +919,22 @@ IF(UNIX AND NOT APPLE AND NOT BUILD_DEB)
@ONLY IMMEDIATE)
ADD_CUSTOM_TARGET(uninstall
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
SET (ENABLE_APPIMAGEKIT OFF CACHE BOOL "Generate AppImageKit build script.")
IF (ENABLE_APPIMAGEKIT)
SET (APPIMAGEKIT_APPRUN "~/Develop/AppImageKit/AppRun" CACHE STRING "AppImageKit AppRun binary path")
SET (APPIMAGEKIT_APPASSIST "~/Develop/AppImageKit/AppImageAssistant" CACHE STRING "AppImageKit AppImageAssistant binary path")
CONFIGURE_FILE(
"${PROJECT_SOURCE_DIR}/cmake/buildAppImage.sh.in"
"${CMAKE_CURRENT_BINARY_DIR}/buildAppImage.sh"
)
ADD_CUSTOM_COMMAND(
TARGET CubicSDR
COMMAND chmod ARGS +x ${CMAKE_CURRENT_BINARY_DIR}/buildAppImage.sh
)
ENDIF(ENABLE_APPIMAGEKIT)
ENDIF()

53
cmake/buildAppImage.sh.in Executable file
View File

@ -0,0 +1,53 @@
#!/bin/bash
rm ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR
rm -rf ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir
mkdir ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir
cp ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.desktop ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/
cp ${CMAKE_CURRENT_SOURCE_DIR}/src/CubicSDR.png ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/
cp ${APPIMAGEKIT_APPRUN} ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/
mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/usr/bin
cp ${CMAKE_CURRENT_BINARY_DIR}/${EX_PLATFORM_NAME}/* ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/usr/bin
mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/usr/local/lib/
cp -R /usr/local/lib/SoapySDR ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/usr/local/lib/
mkdir -p ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/usr/lib
pushd .
cd ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/usr/
find . -type f -exec sed -i -e 's|/usr|././|g' {} \;
popd
IGNORE_PKG="libc6.* libusb.* libgcc.* libstd.* libudev.* libgtk.* libgdk.* libx.* libpango.* libglib.* libgl.* libcairo.* libfont.* libatk.* libwayland.* libthai.* libpixman.* zlib.* libpcre.* libice.* libuuid.* libpulse.* libjson.* libdbus.* libatspi.* libharf.* libselinux.* libmir.* libboost-system.* libprotobuf.* libdatrie.* libsystem.* libwrap.* libsndfile.* libasync.* libgraphite.* liblzma.* libgcrypt.* libflac.* libvorbis.* libgpg.* libogg.* libsm6 libpng.* libexpat.* libdrm.* libffi.* libfreetype.* libboost-filesystem.*"
for f in `find ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/usr/local/lib/SoapySDR/modules/ -type f` ${CMAKE_CURRENT_BINARY_DIR}/${EX_PLATFORM_NAME}/CubicSDR
do
for l in `ldd $f | grep so | sed -e '/^[^\t]/ d' | sed -e 's/\t//' | sed -e 's/.*=..//' | sed -e 's/ (0.*)//'`
do
echo "Checking what package owns $l: "
OWNER_PKG=`apt-file --package-only find $l`
SKIP_PKG=0
if [ "$OWNER_PKG" = "" ]; then
echo "$l has no package, copying to AppDir.."
cp $l ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/usr/lib/
SKIP_PKG=1
fi
for i in $IGNORE_PKG
do
if [[ $OWNER_PKG =~ $i ]]; then
echo "Ignoring lib $l in package $OWNER_PKG, matching regex $i"
SKIP_PKG=1
fi
done
if [ $SKIP_PKG = 0 ]; then
#SO_FILE=`echo $l | sed 's/\.so\.[^\.]*$//'`.so
echo "$OWNER_PKG not in ignore list, copying $l to AppDir.."
cp $l ${CMAKE_CURRENT_BINARY_DIR}/CubicSDR.AppDir/usr/lib/
fi
done
done
pushd .
cd ${CMAKE_CURRENT_BINARY_DIR}
${APPIMAGEKIT_APPASSIST} CubicSDR.AppDir CubicSDR
popd