2019-03-01 13:24:23 +00:00
#!/usr/bin/env bash
2018-09-13 09:44:33 +00:00
set -e
2020-03-02 11:18:01 +00:00
GIT_ROOT = $( cd " ${ BASH_SOURCE %/* } " && git rev-parse --show-toplevel)
source " ${ GIT_ROOT } /scripts/colors.sh "
2018-09-13 09:44:33 +00:00
2020-03-02 11:18:01 +00:00
VERBOSE_LEVEL = ${ VERBOSE_LEVEL :- 1 }
2018-09-13 09:44:33 +00:00
SCRIPTPATH = " $( cd " $( dirname " $0 " ) " ; pwd -P ) "
OS = $( uname -s)
2019-11-29 10:20:08 +00:00
if [ -z " $TARGET " ] ; then
TARGET = $( uname -s | tr '[:upper:]' '[:lower:]' )
2018-09-26 14:40:41 +00:00
fi
WINDOWS_CROSSTOOLCHAIN_PKG_NAME = 'mxetoolchain-x86_64-w64-mingw32'
2018-09-13 09:44:33 +00:00
2019-01-10 18:32:30 +00:00
source " $SCRIPTPATH /lib/setup/path-support.sh "
source_lib "packages.sh"
2019-09-11 11:27:13 +00:00
source_lib "platform.sh"
2018-09-13 09:44:33 +00:00
2018-09-26 14:40:41 +00:00
function is_windows_target( ) {
2019-11-29 10:20:08 +00:00
[ [ " $TARGET " = ~ windows ] ]
2018-09-26 14:40:41 +00:00
}
2018-09-13 09:44:33 +00:00
function joinPath( ) {
if program_exists 'realpath' ; then
2019-02-20 14:05:12 +00:00
realpath -m " $1 / $2 " 2> /dev/null
2018-09-13 09:44:33 +00:00
else
echo " $1 / $2 " | tr -s /
fi
}
function joinExistingPath( ) {
if program_exists 'realpath' ; then
2019-02-20 14:05:12 +00:00
realpath " $1 / $2 " 2> /dev/null
2018-09-13 09:44:33 +00:00
else
echo " $1 / $2 " | tr -s /
fi
}
2019-02-15 08:04:03 +00:00
function join { local IFS = " $1 " ; shift; echo " $* " ; }
2019-03-22 12:02:25 +00:00
CMAKE_EXTRA_FLAGS = "-DCMAKE_CXX_FLAGS:='-DBUILD_FOR_BUNDLE=1'"
2019-02-15 08:04:03 +00:00
[ -n $STATUS_NO_LOGGING ] && CMAKE_EXTRA_FLAGS = " $CMAKE_EXTRA_FLAGS -DSTATUS_NO_LOGGING=1 "
if is_windows_target; then
CMAKE_EXTRA_FLAGS = " $CMAKE_EXTRA_FLAGS -DCMAKE_TOOLCHAIN_FILE='Toolchain-Ubuntu-mingw64.cmake' "
CMAKE_EXTRA_FLAGS = " $CMAKE_EXTRA_FLAGS -DCMAKE_C_COMPILER='x86_64-w64-mingw32.shared-gcc' "
CMAKE_EXTRA_FLAGS = " $CMAKE_EXTRA_FLAGS -DCMAKE_CXX_COMPILER='x86_64-w64-mingw32.shared-g++' "
CMAKE_EXTRA_FLAGS = " $CMAKE_EXTRA_FLAGS -DCMAKE_RC_COMPILER='x86_64-w64-mingw32.shared-windres' "
fi
2019-06-04 17:00:19 +00:00
WORKFOLDER = " $( joinExistingPath " $STATUS_REACT_HOME " 'StatusImPackage' ) "
JS_BUNDLE_PATH = " $WORKFOLDER /index.desktop.bundle "
2018-09-13 09:44:33 +00:00
function init( ) {
2019-06-04 17:00:19 +00:00
if [ -z $STATUS_REACT_HOME ] ; then
2020-03-02 11:18:01 +00:00
echo " ${ RED } STATUS_REACT_HOME environment variable is not defined! ${ RST } "
2018-09-13 09:44:33 +00:00
exit 1
fi
2018-09-26 14:40:41 +00:00
if ! is_windows_target; then
if [ -z $QT_PATH ] ; then
2020-03-02 11:18:01 +00:00
echo " ${ RED } QT_PATH environment variable is not defined! ${ RST } "
2018-09-26 14:40:41 +00:00
exit 1
fi
fi
2020-02-19 13:15:28 +00:00
if [ [ " $OS " = ~ Linux ] ] ; then
2018-09-26 14:40:41 +00:00
rm -rf ./desktop/toolchain/
# TODO: Use Conan for Linux and MacOS builds too
if is_windows_target; then
2019-06-04 17:00:19 +00:00
export PATH = $STATUS_REACT_HOME :$PATH
2018-09-26 14:40:41 +00:00
if ! program_exists 'conan' ; then
2020-03-02 11:18:01 +00:00
echo " ${ RED } Conan package manager not found. Exiting... ${ RST } "
2019-02-15 08:04:03 +00:00
exit 1
2018-09-26 14:40:41 +00:00
fi
conan remote add --insert 0 -f status-im https://conan.status.im
echo "Generating cross-toolchain profile..."
conan install -if ./desktop/toolchain/ -g json $WINDOWS_CROSSTOOLCHAIN_PKG_NAME /5.5.0-1@status-im/stable \
-pr ./node_modules/status-conan/profiles/status-mingw32-x86_64
python3 ./node_modules/status-conan/profiles/generate-profiles.py ./node_modules/status-conan/profiles ./desktop/toolchain/conanbuildinfo.json
echo "Installing cross-toolchain..."
conan install -if ./desktop/toolchain/ -g json -g cmake $WINDOWS_CROSSTOOLCHAIN_PKG_NAME /5.5.0-1@status-im/stable \
-pr ./node_modules/status-conan/profiles/status-mxe-mingw32-x86_64-gcc55-libstdcxx
fi
2018-09-13 09:44:33 +00:00
fi
}
2019-07-23 20:54:17 +00:00
function buildJSBundle( ) {
2018-09-13 09:44:33 +00:00
# create directory for all work related to bundling
rm -rf $WORKFOLDER
mkdir -p $WORKFOLDER
2020-03-02 11:18:01 +00:00
echo -e " ${ GRN } Work folder created: $WORKFOLDER ${ RST } "
2018-09-13 09:44:33 +00:00
echo ""
# from index.desktop.js create javascript bundle and resources folder
2019-06-04 17:00:19 +00:00
echo " Generating $JS_BUNDLE_PATH and assets folder... "
2019-07-24 01:38:38 +00:00
react-native bundle \
--reset-cache \
--dev false \
--entry-file index.desktop.js \
--bundle-output " $JS_BUNDLE_PATH " \
--assets-dest " $WORKFOLDER /assets " \
--platform desktop
2020-03-02 11:18:01 +00:00
echo -e " ${ GRN } Generating done. ${ RST } "
2018-09-13 09:44:33 +00:00
echo ""
2019-03-17 18:15:16 +00:00
}
2018-09-13 09:44:33 +00:00
2019-03-17 18:15:16 +00:00
function compile( ) {
# Temporarily add path to javascript bundle to package.json
2019-03-22 12:02:25 +00:00
local jsBundleLine = " \"desktopJSBundlePath\": \" $JS_BUNDLE_PATH \" "
2019-09-12 14:30:56 +00:00
local jsPackagePath = $( joinExistingPath " $STATUS_REACT_HOME " 'desktop/js_files/package.json' )
2019-09-13 12:50:49 +00:00
jq " .=(. + { $jsBundleLine }) " " $jsPackagePath " | sponge " $jsPackagePath "
2020-03-02 11:18:01 +00:00
echo -e " ${ YLW } Added 'desktopJSBundlePath' line to $jsPackagePath : ${ RST } "
2019-02-19 18:20:47 +00:00
echo ""
2018-09-13 09:44:33 +00:00
2019-09-11 11:27:13 +00:00
local EXTERNAL_MODULES_DIR = " $( jq -r '.desktopExternalModules | @tsv | @text' " $jsPackagePath " | tr '\t' ';' ) "
local DESKTOP_FONTS = " $( jq -r '.desktopFonts | @tsv | @text' " $jsPackagePath " | tr '\t' ';' ) "
2019-10-01 17:52:20 +00:00
local DESKTOP_IMAGES = " $( jq -r '.desktopImages | @tsv | @text' " $jsPackagePath " | tr '\t' ';' ) "
2018-09-13 09:44:33 +00:00
pushd desktop
2018-09-26 14:40:41 +00:00
rm -rf CMakeFiles CMakeCache.txt cmake_install.cmake Makefile modules reportApp/CMakeFiles desktop/node_modules/google-breakpad/CMakeFiles desktop/node_modules/react-native-keychain/desktop/qtkeychain-prefix/src/qtkeychain-build/CMakeFiles desktop/node_modules/react-native-keychain/desktop/qtkeychain
if is_windows_target; then
2019-06-04 17:00:19 +00:00
export PATH = $STATUS_REACT_HOME :$PATH
2018-09-26 14:40:41 +00:00
# Get the toolchain bin folder from toolchain/conanbuildinfo.json
2019-03-22 12:02:25 +00:00
local bin_dirs = $( jq -r '.dependencies[0].bin_paths | .[]' toolchain/conanbuildinfo.json)
2018-09-26 14:40:41 +00:00
while read -r bin_dir; do
if [ ! -d $bin ] ; then
2020-03-02 11:18:01 +00:00
echo -e " ${ RED } Could not find $bin_dir directory from 'toolchain/conanbuildinfo.json', aborting ${ RST } "
2018-09-26 14:40:41 +00:00
exit 1
fi
export PATH = $bin_dir :$PATH
done <<< " $bin_dirs "
fi
2019-02-15 08:04:03 +00:00
cmake -Wno-dev \
2019-03-22 12:02:25 +00:00
$CMAKE_EXTRA_FLAGS \
2019-02-15 08:04:03 +00:00
-DCMAKE_BUILD_TYPE= Release \
-DEXTERNAL_MODULES_DIR= " $EXTERNAL_MODULES_DIR " \
-DDESKTOP_FONTS= " $DESKTOP_FONTS " \
2019-10-01 17:52:20 +00:00
-DDESKTOP_IMAGES= " $DESKTOP_IMAGES " \
2019-03-22 12:02:25 +00:00
-DJS_BUNDLE_PATH= " $JS_BUNDLE_PATH " || exit 1
2018-11-16 16:34:39 +00:00
make -S -j5 || exit 1
2018-09-26 14:40:41 +00:00
popd
2019-03-17 18:15:16 +00:00
git checkout $jsPackagePath # remove the bundle from the package.json file
2018-09-26 14:40:41 +00:00
}
function bundleWindows( ) {
2018-11-16 16:34:39 +00:00
local buildType = " $1 "
2018-11-05 09:40:11 +00:00
2019-06-04 17:00:19 +00:00
local version_file = " ${ STATUS_REACT_HOME } /VERSION "
2018-11-05 09:40:11 +00:00
VERSION = $( cat $version_file )
if [ -z " $VERSION " ] ; then
2020-03-02 11:18:01 +00:00
echo " ${ RED } Could not read version from ${ version_file } ! ${ RST } "
2018-11-05 09:40:11 +00:00
exit 1
fi
2019-06-04 17:00:19 +00:00
pushd $STATUS_REACT_HOME /desktop/bin
2019-03-21 16:56:22 +00:00
rm -rf cmake_install.cmake Makefile CMakeFiles Status_autogen
2018-09-13 09:44:33 +00:00
popd
2018-11-05 09:40:11 +00:00
local compressionAlgo = "lzma"
local compressionType = "/SOLID"
if [ -z $buildType ] ; then
compressionAlgo = "bzip2"
compressionType = ""
elif [ " $buildType " = "pr" ] ; then
compressionAlgo = "zlib"
fi
2019-03-21 16:56:22 +00:00
# TODO this needs to be fixed: status-react/issues/5378
2019-06-04 17:00:19 +00:00
local top_srcdir = $( joinExistingPath " $STATUS_REACT_HOME " '.' )
2018-11-05 09:40:11 +00:00
VERSION_MAJOR = " $( cut -d'.' -f1 <<< " $VERSION " ) "
VERSION_MINOR = " $( cut -d'.' -f2 <<< " $VERSION " ) "
VERSION_BUILD = " $( cut -d'.' -f3 <<< " $VERSION " ) "
makensis -Dtop_srcdir= ${ top_srcdir } \
2019-04-03 22:05:59 +00:00
-Dbase_image_dir= ${ STATUSREACT_WINDOWS_BASEIMAGE_PATH } \
2018-11-05 09:40:11 +00:00
-DCOMPRESSION_ALGO= ${ compressionAlgo } \
-DCOMPRESSION_TYPE= ${ compressionType } \
-DVERSION_MAJOR= $VERSION_MAJOR \
-DVERSION_MINOR= $VERSION_MINOR \
-DVERSION_BUILD= $VERSION_BUILD \
-DPUBLISHER= Status.im \
-DWEBSITE_URL= "https://status.im/" \
./deployment/windows/nsis/setup.nsi
2018-09-13 09:44:33 +00:00
}
function bundleLinux( ) {
local QTBIN = $( joinExistingPath " $QT_PATH " 'gcc_64/bin' )
if [ ! -d " $QTBIN " ] ; then
# CI environment doesn't contain gcc_64 path component
QTBIN = $( joinExistingPath " $QT_PATH " 'bin' )
fi
echo "Creating AppImage..."
pushd $WORKFOLDER
2019-03-21 16:56:22 +00:00
rm -rf StatusImAppImage AppDir
2018-09-13 09:44:33 +00:00
# TODO this needs to be fixed: status-react/issues/5378
2019-04-03 22:05:59 +00:00
cp -r ${ STATUSREACT_LINUX_BASEIMAGE_PATH } /StatusImAppImage .
2019-03-21 16:56:22 +00:00
chmod -R +w StatusImAppImage/
2018-09-13 09:44:33 +00:00
mkdir AppDir
popd
2019-03-21 16:56:22 +00:00
# invoke linuxdeployqt to create Status.AppImage
local qmakePath = " $( joinExistingPath " ${ QTBIN } " 'qmake' ) "
local usrBinPath = " $( joinPath " $WORKFOLDER " "AppDir/usr/bin" ) "
2018-09-13 09:44:33 +00:00
cp -r ./deployment/linux/usr $WORKFOLDER /AppDir
cp ./.env $usrBinPath
2018-12-21 14:17:49 +00:00
cp ./desktop/bin/Status ./desktop/bin/reportApp $usrBinPath
2018-10-19 15:50:35 +00:00
2018-12-21 14:17:49 +00:00
rm -f Application-x86_64.AppImage Status-x86_64.AppImage
2018-09-13 09:44:33 +00:00
2019-02-15 08:04:03 +00:00
[ $VERBOSE_LEVEL -ge 1 ] && ldd $( joinExistingPath " $usrBinPath " 'Status' )
2018-12-21 14:17:49 +00:00
pushd $WORKFOLDER
cp -r assets/share/assets $usrBinPath
cp -rf StatusImAppImage/* $usrBinPath
rm -f $usrBinPath /Status.AppImage
popd
2019-03-21 16:56:22 +00:00
local desktopFilePath = " $( joinExistingPath " $WORKFOLDER " 'AppDir/usr/share/applications/Status.desktop' ) "
2019-02-15 08:04:03 +00:00
linuxdeployqt \
2018-09-13 09:44:33 +00:00
$desktopFilePath \
2019-03-12 12:11:49 +00:00
-verbose= $VERBOSE_LEVEL -always-overwrite -no-strip \
2018-09-13 09:44:33 +00:00
-no-translations -bundle-non-qt-libs \
-qmake= " $qmakePath " \
2018-12-21 14:17:49 +00:00
-executable= " $( joinExistingPath " $usrBinPath " 'reportApp' ) " \
2019-06-04 17:00:19 +00:00
-qmldir= " $( joinExistingPath " $STATUS_REACT_HOME " 'node_modules/react-native' ) " \
-qmldir= " $( joinExistingPath " $STATUS_REACT_HOME " 'desktop/reportApp' ) " \
2019-03-12 12:11:49 +00:00
-extra-plugins= imageformats/libqsvg.so
2019-03-07 14:10:14 +00:00
2018-09-13 09:44:33 +00:00
pushd $WORKFOLDER
2018-12-21 14:17:49 +00:00
rm -f $usrBinPath /Status.AppImage
2019-03-12 12:11:49 +00:00
# Patch libraries and executables to remove references to /nix/store
set +e
for f in ` find ./AppDir/usr/lib/*` ; do
patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 $f 2> /dev/null
patchelf --set-rpath "\$ORIGIN" $f
done
set -e
for f in $usrBinPath /Status $usrBinPath /reportApp; do
patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 --set-rpath "\$ORIGIN:\$ORIGIN/../lib" $f
done
# To make the output more reproducible, always set the timestamps to the same value
2019-03-07 14:10:14 +00:00
for f in ` find ./AppDir` ; do
touch --no-create -h -t 197001010000.00 $f
done
2018-12-21 14:17:49 +00:00
[ $VERBOSE_LEVEL -ge 1 ] && ldd $usrBinPath /Status
2019-03-07 14:10:14 +00:00
appimagetool ./AppDir
2019-03-12 12:11:49 +00:00
# Ensure the AppImage itself isn't using the interpreter in Nix's store
patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 --set-rpath "\$ORIGIN" ./Status-x86_64.AppImage
2019-03-07 14:10:14 +00:00
chmod +x ./Status-x86_64.AppImage
2018-10-19 15:50:35 +00:00
rm -rf Status.AppImage
2019-03-12 12:11:49 +00:00
mv -f ./Status-x86_64.AppImage ..
2018-09-13 09:44:33 +00:00
popd
2020-03-02 11:18:01 +00:00
echo -e " ${ GRN } Package ready in ./Status-x86_64.AppImage! ${ RST } "
2018-09-13 09:44:33 +00:00
echo ""
}
2020-02-19 13:15:28 +00:00
if [ [ " $OS " = ~ Darwin ] ] ; then
2019-02-15 08:04:03 +00:00
function copyDylibNixDependenciesToPackage( ) {
local dylib = " $1 "
local contentsDir = " $2 "
local frameworksDir = " $contentsDir /Frameworks "
local exeDir = " $contentsDir /MacOS "
# Walk through the dependencies of $dylib
local dependencies = $( otool -L " $dylib " | grep -E "\s+/nix/" | awk -F "(" '{print $1}' | xargs)
local moduleDirPath = $( basename $dylib )
for depDylib in $dependencies ; do
local targetDepDylib = $( joinPath " $frameworksDir " " $( basename $depDylib ) " )
# Copy any dependencies that: are not in the Frameworks directory, do not already exist in /usr/lib and are not a Qt5 module (will be handled by macdeployqt anyway)
if [ ! -f " $targetDepDylib " ] && [ [ " $( basename $targetDepDylib ) " != "libQt5" * ] ] && [ ! -f " /usr/lib/ $( basename $depDylib ) " ] ; then
[ $VERBOSE_LEVEL -ge 1 ] && echo " Copying $depDylib to $frameworksDir ... "
cp -a -L " $depDylib " " $frameworksDir "
chmod 0755 " $targetDepDylib "
copyDylibNixDependenciesToPackage " $depDylib " " $contentsDir "
fi
done
}
function copyQtPlugInToPackage( ) {
local qtPath = " $1 "
local pluginName = " $2 "
local contentsPath = " $3 "
local filter = ""
local targetPath = " $contentsPath /PlugIns "
local pluginTargetPath = " $targetPath / $pluginName "
[ " $pluginName " = = 'platforms' ] && filter = 'libqcocoa.dylib'
mkdir -p $pluginTargetPath
local qtLibPath = $( find $qtPath /lib -maxdepth 1 -name qt-*)
local srcPath = $( readlink -f " $qtLibPath /plugins/ $pluginName " )
echo " Copying $srcPath to $targetPath "
if [ -z " $filter " ] ; then
cp -a -f -L " $srcPath " " $targetPath "
else
cp -f $( readlink -f " $srcPath / $filter " ) " $pluginTargetPath "
fi
chmod 755 $pluginTargetPath
chmod 755 $pluginTargetPath /*
for dylib in ` find $pluginTargetPath -name *.dylib` ; do
copyDylibNixDependenciesToPackage " $dylib " " $contentsPath "
done
}
function fixupRPathsInDylib( ) {
local dylib = " $1 "
local contentsDir = " $2 "
local frameworksDir = " $contentsDir /Frameworks "
local exeDir = " $contentsDir /MacOS "
[ $VERBOSE_LEVEL -ge 1 ] && echo " Checking rpaths in ${ dylib } "
2019-10-01 17:52:20 +00:00
2019-02-15 08:04:03 +00:00
# Walk through the dependencies of $dylib
local dependencies = $( otool -L " $dylib " | grep -E "\s+/nix/" | sed " s|@executable_path| $exeDir | " | awk -F "(" '{print $1}' | xargs)
local moduleDirPath = $( dirname $dylib )
for depDylib in $dependencies ; do
# Fix rpath and copy library to target
local replacementTargetPath = ""
local framework = $( echo $depDylib | sed -E " s|^\/nix\/.+\/Library\/Frameworks\/(.+)\.framework\/\1 $|\1| " 2> /dev/null)
if [ -n " $framework " ] && [ " $framework " != " $depDylib " ] ; then
# Handle macOS framework
local targetDepDylib = $( joinExistingPath "/System/Library/Frameworks" " ${ framework } .framework/ ${ framework } " )
if [ ! -f " $targetDepDylib " ] ; then
2020-03-02 11:18:01 +00:00
echo -e " ${ RED } FATAL: system framework not found: ${ targetDepDylib } ${ RST } "
2019-02-15 08:04:03 +00:00
exit 1
fi
# Change dependency rpath in $dylib to point to $targetDepDylib
replacementTargetPath = $targetDepDylib
else
# Handle other libraries
local targetDepDylib = $( joinPath " $frameworksDir " " $( basename $depDylib ) " )
if [ ! -f " $targetDepDylib " ] ; then
2020-03-02 11:18:01 +00:00
echo -e " ${ RED } FATAL: macdeployqt should have copied the dependency to ${ targetDepDylib } ${ RST } "
2019-02-15 08:04:03 +00:00
exit 1
fi
2018-09-13 09:44:33 +00:00
2019-02-15 08:04:03 +00:00
# Change dependency rpath in $dylib to point to $replacementTargetPath
local replacementPath = ""
local targetDepModuleDirPath = $( dirname $targetDepDylib )
if [ [ $targetDepModuleDirPath -ef $moduleDirPath ] ] ; then
replacementPath = "@loader_path"
else
replacementPath = " @executable_path/ $( realpath --relative-to= " $exeDir " " $targetDepModuleDirPath " ) "
fi
local modulePathRegExp = " ( $( pwd ) /)? $moduleDirPath "
replacementTargetPath = $( echo $targetDepDylib | sed -E " s| $modulePathRegExp | $replacementPath | " )
fi
if [ -n " $replacementTargetPath " ] ; then
[ $VERBOSE_LEVEL -ge 1 ] && echo " Updating $dylib to point to $replacementTargetPath "
install_name_tool -change " $depDylib " " $replacementTargetPath " " $dylib "
fi
done
}
function fixupRemainingRPaths( ) {
local searchRootPath = " $1 "
local contentsDir = " $2 "
for dylib in ` find $searchRootPath -name *.dylib` ; do
fixupRPathsInDylib " $dylib " " $contentsDir "
# Sanity check for absolute paths
2019-06-04 17:00:19 +00:00
local dependencies = $( otool -L " $dylib " | grep -E " \s+ ${ STATUS_REACT_HOME } " )
2019-02-15 08:04:03 +00:00
if [ -n " $dependencies " ] ; then
echo " Absolute path detected in dependencies of $dylib . Aborting... "
echo " ${ dependencies [@] } "
exit 1
fi
done
}
fi
function bundleMacOS( ) {
2018-09-13 09:44:33 +00:00
pushd $WORKFOLDER
2019-02-15 08:04:03 +00:00
# download prepared package with mac bundle files (it contains qt libraries, icon)
2018-09-13 09:44:33 +00:00
rm -rf Status.app
# TODO this needs to be fixed: status-react/issues/5378
2019-04-03 22:05:59 +00:00
cp -r ${ STATUSREACT_MACOS_BASEIMAGE_PATH } /Status.app .
2019-03-21 16:56:22 +00:00
chmod -R +w Status.app/
2019-02-15 08:04:03 +00:00
local contentsPath = 'Status.app/Contents'
local usrBinPath = $( joinExistingPath " $WORKFOLDER " " $contentsPath /MacOS " )
cp -r assets/share/assets $contentsPath /Resources
2019-10-01 17:52:20 +00:00
ln -sf ../Resources/assets ../Resources/ubuntu-server $usrBinPath
2019-02-15 08:04:03 +00:00
chmod +x $contentsPath /Resources/ubuntu-server
cp ../desktop/bin/Status $usrBinPath /Status
cp ../desktop/bin/reportApp $usrBinPath
cp ../.env $contentsPath /Resources
ln -sf ../Resources/.env $usrBinPath /.env
cp -f ../deployment/macos/qt-reportApp.conf $contentsPath /Resources
ln -sf ../Resources/qt-reportApp.conf $usrBinPath /qt.conf
cp -f ../deployment/macos/Info.plist $contentsPath
cp -f ../deployment/macos/status-icon.icns $contentsPath /Resources
local qtbaseplugins = ( bearer platforms printsupport styles)
local qtfullplugins = ( iconengines imageformats webview)
2019-05-07 06:43:53 +00:00
if [ -n " $IN_NIX_SHELL " ] ; then
2019-02-15 08:04:03 +00:00
# Since in the Nix qt.full package the different Qt modules are spread across several directories,
# macdeployqt cannot find some qtbase plugins, so we copy them in its place
mkdir -p " $contentsPath /PlugIns "
2019-04-03 22:05:59 +00:00
for plugin in ${ qtbaseplugins [@] } ; do copyQtPlugInToPackage " $QT_BASEBIN_PATH " " $plugin " " $contentsPath " ; done
for plugin in ${ qtfullplugins [@] } ; do copyQtPlugInToPackage " $QT_PATH " " $plugin " " $contentsPath " ; done
2019-02-15 08:04:03 +00:00
fi
macdeployqt Status.app \
-verbose= $VERBOSE_LEVEL \
-executable= " $( joinExistingPath " $usrBinPath " 'reportApp' ) " \
2019-06-04 17:00:19 +00:00
-qmldir= " $( joinExistingPath " $STATUS_REACT_HOME " 'node_modules/react-native' ) " \
-qmldir= " $( joinExistingPath " $STATUS_REACT_HOME " 'desktop/reportApp' ) "
2019-02-15 08:04:03 +00:00
# macdeployqt doesn't fix rpaths for all the libraries (although it copies them all), so we'll just walk through them and update rpaths to not point to /nix
echo "Fixing remaining rpaths in modules..."
fixupRemainingRPaths " $contentsPath /Frameworks " " $contentsPath "
fixupRemainingRPaths " $contentsPath /PlugIns " " $contentsPath "
echo "Done fixing rpaths in modules"
2018-09-13 09:44:33 +00:00
rm -f Status.app.zip
popd
2020-03-02 11:18:01 +00:00
echo -e " ${ GRN } Package ready in $WORKFOLDER /Status.app! ${ RST } "
2018-09-13 09:44:33 +00:00
echo ""
}
function bundle( ) {
2020-02-19 13:15:28 +00:00
if [ [ " $OS " = ~ Darwin ] ] ; then
2018-09-13 09:44:33 +00:00
bundleMacOS
2020-02-19 13:15:28 +00:00
elif [ [ " $OS " = ~ Linux ] ] ; then
2018-09-26 14:40:41 +00:00
if is_windows_target; then
bundleWindows
else
bundleLinux
fi
2018-09-13 09:44:33 +00:00
fi
}
init
if [ -z " $@ " ] ; then
2019-07-23 20:54:17 +00:00
buildJSBundle
2018-09-13 09:44:33 +00:00
compile
bundle
else
" $@ "
fi