mirror of
https://github.com/rizinorg/cutter.git
synced 2024-12-18 19:06:10 +00:00
Use cutter-deps on macOS (#1238)
* Update deps scripts for macOS * Update deps * Update appbundle_embed_python.sh * Use cutter-deps for macOS * Remove qt from Brewfile * Fix .travis.yml * Disable Homebrew update * Fix llvm for macOS * Fix regex in update_deps.py * Fix PYTHON_FRAMEWORK_DIR * Some debug output in travis * Enable Python Bindings for cmake on macOS * QMake debug * Update deps * Hopefully fix pkg-config * QMake hack for shiboken2 and pyside2 * Deploy on deps-test * Update deps * Fix call to appbundle_embed_python.sh * Update deps * Fix Python for cmake on macOS * Update deps * Fix appbundle_embed_python.sh * Copy pyside libs in appbundle_embed_python.sh * Fix includes for CMake on macOS * Copy PySide2 and Shiboke2 libs to Frameworks dir * Manually deploy QtDBus and QtPrintSupport * Print plugins dir * Fix appbundle_embed_python.sh * Update deps * Remove some debug output * Use last release of linuxdeployqt
This commit is contained in:
parent
7ea1f0b281
commit
732f2d8cde
51
.travis.yml
51
.travis.yml
@ -8,6 +8,7 @@ branches:
|
||||
- debug
|
||||
- /^v\d.*$/
|
||||
- deploy-test
|
||||
- deps-test
|
||||
|
||||
matrix:
|
||||
include:
|
||||
@ -27,18 +28,14 @@ dist: xenial
|
||||
|
||||
addons:
|
||||
homebrew:
|
||||
update: true
|
||||
brewfile: scripts/Brewfile
|
||||
|
||||
install:
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH="/usr/local/opt/qt/bin:$PATH" ; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then source scripts/prepare_python_macos.sh ; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
|
||||
scripts/fetch_deps.sh &&
|
||||
source cutter-deps/env.sh &&
|
||||
export LD_LIBRARY_PATH="`llvm-config --libdir`:$LD_LIBRARY_PATH" &&
|
||||
python3 -m pip install -r scripts/pip_requirements.txt
|
||||
; fi
|
||||
- scripts/fetch_deps.sh
|
||||
- source cutter-deps/env.sh
|
||||
- python3 -m pip install -r scripts/pip_requirements.txt
|
||||
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then export PATH=/usr/local/opt/llvm/bin:$PATH; fi
|
||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then export LD_LIBRARY_PATH="`llvm-config --libdir`:$LD_LIBRARY_PATH"; fi
|
||||
|
||||
before_script:
|
||||
- git submodule init ; git submodule update
|
||||
@ -55,7 +52,15 @@ script:
|
||||
- cd build
|
||||
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
|
||||
if [[ "$BUILD_SYSTEM" == "qmake" ]]; then
|
||||
qmake CUTTER_ENABLE_PYTHON=true CUTTER_ENABLE_PYTHON_BINDINGS=true CUTTER_ENABLE_JUPYTER=true CUTTER_ENABLE_QTWEBENGINE=false PREFIX=/usr APPIMAGE=1 ../src && make -j4;
|
||||
qmake
|
||||
CUTTER_ENABLE_PYTHON=true
|
||||
CUTTER_ENABLE_PYTHON_BINDINGS=true
|
||||
CUTTER_ENABLE_JUPYTER=true
|
||||
CUTTER_ENABLE_QTWEBENGINE=false
|
||||
PREFIX=/usr
|
||||
APPIMAGE=1
|
||||
../src &&
|
||||
make -j4;
|
||||
elif [[ "$BUILD_SYSTEM" == "cmake" ]]; then
|
||||
cmake
|
||||
-DCMAKE_BUILD_TYPE=Release
|
||||
@ -71,10 +76,27 @@ script:
|
||||
fi
|
||||
elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
|
||||
if [[ "$BUILD_SYSTEM" == "qmake" ]]; then
|
||||
qmake CUTTER_ENABLE_PYTHON=true CUTTER_ENABLE_PYTHON_BINDINGS=false CUTTER_ENABLE_JUPYTER=true CUTTER_ENABLE_QTWEBENGINE=false CUTTER_BUNDLE_R2_APPBUNDLE=true PYTHON_FRAMEWORK_DIR=$PYTHON_FRAMEWORK_DIR ../src &&
|
||||
qmake
|
||||
CUTTER_ENABLE_PYTHON=true
|
||||
CUTTER_ENABLE_PYTHON_BINDINGS=true
|
||||
CUTTER_ENABLE_JUPYTER=true
|
||||
CUTTER_ENABLE_QTWEBENGINE=false
|
||||
CUTTER_BUNDLE_R2_APPBUNDLE=true
|
||||
PYTHON_FRAMEWORK_DIR=$CUTTER_DEPS_PYTHON_FRAMEWORK_DIR
|
||||
../src &&
|
||||
make -j4;
|
||||
elif [[ "$BUILD_SYSTEM" == "cmake" ]]; then
|
||||
cmake -DCUTTER_ENABLE_PYTHON=ON -DCUTTER_ENABLE_PYTHON_BINDINGS=OFF -DCUTTER_ENABLE_JUPYTER=ON -DCUTTER_ENABLE_QTWEBENGINE=OFF ../src && make -j4;
|
||||
cmake
|
||||
-DCMAKE_BUILD_TYPE=Release
|
||||
-DPYTHON_LIBRARY="$CUTTER_DEPS_PYTHON_PREFIX/lib/libpython3.6m.dylib"
|
||||
-DPYTHON_INCLUDE_DIR="$CUTTER_DEPS_PYTHON_PREFIX/include/python3.6m"
|
||||
-DPYTHON_EXECUTABLE="$CUTTER_DEPS_PYTHON_PREFIX/bin/python3"
|
||||
-DCUTTER_ENABLE_PYTHON=ON
|
||||
-DCUTTER_ENABLE_PYTHON_BINDINGS=ON
|
||||
-DCUTTER_ENABLE_JUPYTER=ON
|
||||
-DCUTTER_ENABLE_QTWEBENGINE=OFF
|
||||
../src &&
|
||||
make -j4;
|
||||
fi
|
||||
fi
|
||||
|
||||
@ -86,7 +108,8 @@ after_success:
|
||||
cp ../src/translations/*.qm Cutter.app/Contents/Resources/translations/ &&
|
||||
macdeployqt Cutter.app -executable=Cutter.app/Contents/MacOS/Cutter -libpath="../Frameworks" &&
|
||||
macdeployqt Cutter.app -executable=Cutter.app/Contents/MacOS/Cutter -libpath="../Frameworks" &&
|
||||
"$TRAVIS_BUILD_DIR/scripts/appbundle_embed_python.sh" "$PYTHON_FRAMEWORK_DIR/Python.framework" Cutter.app Cutter.app/Contents/MacOS/Cutter &&
|
||||
cp -a "$QTDIR/lib/QtDBus.framework" "$QTDIR/lib/QtPrintSupport.framework" Cutter.app/Contents/Frameworks &&
|
||||
"$TRAVIS_BUILD_DIR/scripts/appbundle_embed_python.sh" "$CUTTER_DEPS_PYTHON_FRAMEWORK_DIR/Python.framework" Cutter.app Cutter.app/Contents/MacOS/Cutter &&
|
||||
mkdir -p Cutter.app/Contents/Resources/r2/share &&
|
||||
cp -a /usr/local/share/radare2 Cutter.app/Contents/Resources/r2/share/ &&
|
||||
mkdir image && cp -a Cutter.app image/ &&
|
||||
@ -109,7 +132,7 @@ after_success:
|
||||
mkdir -p appdir/usr/bin/translations &&
|
||||
cp ../src/translations/*.qm appdir/usr/bin/translations/ &&
|
||||
"$TRAVIS_BUILD_DIR/scripts/appimage_embed_python.sh" appdir &&
|
||||
wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage" &&
|
||||
wget -c "https://github.com/probonopd/linuxdeployqt/releases/download/6/linuxdeployqt-6-x86_64.AppImage" &&
|
||||
chmod a+x linuxdeployqt*.AppImage &&
|
||||
./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -bundle-non-qt-libs -no-strip -exclude-libs=libnss3.so,libnssutil3.so -ignore-glob=usr/lib/python3.6/** -verbose=2 &&
|
||||
./linuxdeployqt*.AppImage ./appdir/usr/share/applications/*.desktop -appimage -no-strip -exclude-libs=libnss3.so,libnssutil3.so -ignore-glob=usr/lib/python3.6/** -verbose=2 &&
|
||||
|
@ -1,5 +1,5 @@
|
||||
brew "p7zip"
|
||||
brew "ccache"
|
||||
brew "qt5"
|
||||
brew "openssl"
|
||||
brew "xz"
|
||||
brew "llvm"
|
||||
|
@ -5,6 +5,8 @@ if ! [[ $# -eq 3 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
python_version=python3.6
|
||||
|
||||
py_framework=$1
|
||||
appbundle=$2
|
||||
executable=$3
|
||||
@ -22,3 +24,17 @@ cd "$appbundle/Contents/Frameworks/Python.framework" || exit 1
|
||||
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf || exit 1
|
||||
rm -r Versions/Current/Resources/* Versions/Current/lib/python3.6/test Versions/Current/lib/python3.6/idlelib Versions/Current/lib/python3.6/curses Versions/Current/lib/python3.6/lib2to3 || exit 1
|
||||
|
||||
echo "Checking if PySide2 is available"
|
||||
|
||||
pyside_prefix=$(pkg-config --variable=prefix pyside2)
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "PySide2 is not available, ignoring."
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "PySide is at $pyside_prefix"
|
||||
|
||||
cp -va "$pyside_prefix/lib/$python_version/" "Versions/Current/lib/$python_version" || exit 1
|
||||
cd .. # $appbundle/Contents/Frameworks
|
||||
cp -va "$pyside_prefix/lib/"*.dylib . || exit 1
|
||||
|
||||
|
@ -3,12 +3,41 @@
|
||||
cd $(dirname "${BASH_SOURCE[0]}")/..
|
||||
mkdir -p cutter-deps && cd cutter-deps
|
||||
|
||||
FILE=cutter-deps.tar.gz
|
||||
MD5=0805fa6a1626ce787f952b300e2b321d
|
||||
URL=https://github.com/radareorg/cutter-deps/releases/download/v2/cutter-deps.tar.gz
|
||||
LINUX_FILE="cutter-deps-linux.tar.gz"
|
||||
LINUX_MD5=b52ab4f06cb9e4b92372022c37920bf1
|
||||
LINUX_URL=https://github.com/radareorg/cutter-deps/releases/download/v6/cutter-deps-linux.tar.gz
|
||||
|
||||
MACOS_FILE="cutter-deps-macos.tar.gz"
|
||||
MACOS_MD5=85b663ea73b80663a532dfafe998905d
|
||||
MACOS_URL=https://github.com/radareorg/cutter-deps/releases/download/v6/cutter-deps-macos.tar.gz
|
||||
|
||||
UNAME_S="$(uname -s)"
|
||||
if [ "$UNAME_S" == "Linux" ]; then
|
||||
FILE="${LINUX_FILE}"
|
||||
MD5="${LINUX_MD5}"
|
||||
URL="${LINUX_URL}"
|
||||
elif [ "$UNAME_S" == "Darwin" ]; then
|
||||
FILE="${MACOS_FILE}"
|
||||
MD5="${MACOS_MD5}"
|
||||
URL="${MACOS_URL}"
|
||||
else
|
||||
echo "Unsupported Platform: $UNAME_S"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
curl -L "$URL" -o "$FILE" || exit 1
|
||||
echo "$MD5 $FILE" | md5sum -c - || exit 1
|
||||
|
||||
if [ "$UNAME_S" == "Darwin" ]; then
|
||||
if [ "$(md5 -r "$FILE")" != "$MD5 $FILE" ]; then \
|
||||
echo "MD5 mismatch for file $FILE"; \
|
||||
exit 1; \
|
||||
else \
|
||||
echo "$FILE OK"; \
|
||||
fi
|
||||
else
|
||||
echo "$MD5 $FILE" | md5sum -c - || exit 1
|
||||
fi
|
||||
|
||||
tar -xf "$FILE" || exit 1
|
||||
./relocate.sh || exit 1
|
||||
|
||||
|
@ -5,28 +5,42 @@ import requests
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
platforms = ["linux", "macos", "win"]
|
||||
|
||||
if sys.platform == "darwin":
|
||||
md5sum_cmd = ["md5", "-r"]
|
||||
else:
|
||||
md5sum_cmd = ["md5sum"]
|
||||
|
||||
fetch_deps_path = os.path.join(os.path.dirname(sys.argv[0]), "fetch_deps.sh")
|
||||
|
||||
print("Fetching latest release")
|
||||
json = requests.get("https://api.github.com/repos/radareorg/cutter-deps/releases/latest").json()
|
||||
|
||||
release_url = json["assets"][0]["browser_download_url"]
|
||||
|
||||
print(f"Getting MD5 for {release_url}")
|
||||
|
||||
curl = subprocess.Popen(["curl", "-L", release_url], stdout=subprocess.PIPE)
|
||||
md5sum = subprocess.run(["md5sum"], stdin=curl.stdout, capture_output=True, encoding="utf-8").stdout
|
||||
curl.wait()
|
||||
|
||||
md5sum = re.match("([a-zA-Z0-9]+) ", md5sum).group(1)
|
||||
|
||||
print(f"MD5: {md5sum}")
|
||||
for platform in platforms:
|
||||
release_url = release_url.replace(platform, "${PLATFORM}")
|
||||
|
||||
with open(fetch_deps_path) as f:
|
||||
fetch_deps = f.read()
|
||||
|
||||
fetch_deps = re.sub("^URL=.*$", f"URL={release_url}".replace("\\", r"\\"), fetch_deps, flags=re.MULTILINE)
|
||||
fetch_deps = re.sub("^MD5=.*$", f"MD5={md5sum}".replace("\\", r"\\"), fetch_deps, flags=re.MULTILINE)
|
||||
md5 = {}
|
||||
for platform in platforms:
|
||||
platform_url = release_url.replace("${PLATFORM}", platform)
|
||||
print(f"Getting MD5 for {platform_url}")
|
||||
|
||||
curl = subprocess.Popen(["curl", "-fL", platform_url], stdout=subprocess.PIPE)
|
||||
md5sum = subprocess.run(md5sum_cmd, stdin=curl.stdout, capture_output=True, encoding="utf-8").stdout
|
||||
curl.wait()
|
||||
if curl.returncode != 0:
|
||||
print(f"Failed to download {platform_url}, skipping.")
|
||||
continue
|
||||
|
||||
md5sum = re.fullmatch("([a-zA-Z0-9]+)( +-)?\n?", md5sum).group(1)
|
||||
|
||||
print(f"MD5: {md5sum}")
|
||||
fetch_deps = re.sub(f"^{platform.upper()}_URL=.*$", f"{platform.upper()}_URL={platform_url}".replace("\\", r"\\"), fetch_deps, flags=re.MULTILINE)
|
||||
fetch_deps = re.sub(f"^{platform.upper()}_MD5=.*$", f"{platform.upper()}_MD5={md5sum}".replace("\\", r"\\"), fetch_deps, flags=re.MULTILINE)
|
||||
|
||||
with open(fetch_deps_path, "w") as f:
|
||||
f.write(fetch_deps)
|
||||
|
@ -191,7 +191,14 @@ if(CUTTER_ENABLE_PYTHON)
|
||||
target_link_libraries(Cutter ${SHIBOKEN_LIBRARY} ${PYSIDE_LIBRARY})
|
||||
|
||||
get_target_property(BINDINGS_INCLUDE_DIRS Cutter INCLUDE_DIRECTORIES)
|
||||
list(APPEND BINDINGS_INCLUDE_DIRS ${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
if(APPLE AND _qt5Core_install_prefix)
|
||||
list(APPEND BINDINGS_INCLUDE_DIRS "${_qt5Core_install_prefix}/include")
|
||||
list(APPEND BINDINGS_INCLUDE_DIRS "${_qt5Core_install_prefix}/include/QtCore")
|
||||
list(APPEND BINDINGS_INCLUDE_DIRS "${_qt5Core_install_prefix}/include/QtGui")
|
||||
list(APPEND BINDINGS_INCLUDE_DIRS "${_qt5Core_install_prefix}/include/QtWidgets")
|
||||
endif()
|
||||
list(APPEND BINDINGS_INCLUDE_DIRS ${Qt5Core_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS})
|
||||
list(APPEND BINDINGS_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
string(REPLACE ";" ":" BINDINGS_INCLUDE_DIRS "${BINDINGS_INCLUDE_DIRS}")
|
||||
|
||||
qmake_configure_file("${BINDINGS_SRC_DIR}/bindings.txt.in" "${BINDINGS_BUILD_DIR}/bindings.txt")
|
||||
@ -201,3 +208,4 @@ endif()
|
||||
if(CUTTER_ENABLE_PYTHON AND CUTTER_ENABLE_JUPYTER AND CUTTER_ENABLE_QTWEBENGINE)
|
||||
target_link_libraries(Cutter Qt5::WebEngineWidgets)
|
||||
endif()
|
||||
|
||||
|
@ -118,6 +118,10 @@ unix {
|
||||
# Libraries
|
||||
include(lib_radare2.pri)
|
||||
|
||||
!win32 {
|
||||
CONFIG += link_pkgconfig
|
||||
}
|
||||
|
||||
CUTTER_ENABLE_PYTHON {
|
||||
win32 {
|
||||
PYTHON_EXECUTABLE = $$quote($$system("where python"))
|
||||
@ -135,7 +139,6 @@ CUTTER_ENABLE_PYTHON {
|
||||
LIBS += -F$$PYTHON_FRAMEWORK_DIR -framework Python
|
||||
DEFINES += MACOS_PYTHON_FRAMEWORK_BUNDLED
|
||||
} else {
|
||||
CONFIG += link_pkgconfig
|
||||
!packagesExist(python3) {
|
||||
error("ERROR: Python 3 could not be found. Make sure it is available to pkg-config.")
|
||||
}
|
||||
@ -177,7 +180,13 @@ CUTTER_ENABLE_PYTHON {
|
||||
GENERATED_SOURCES += $${BINDINGS_SOURCE}
|
||||
INCLUDEPATH += "$${BINDINGS_BUILD_DIR}/CutterBindings"
|
||||
PRE_TARGETDEPS += bindings_target
|
||||
macx {
|
||||
# Hack needed because with regular PKGCONFIG qmake will mess up everything
|
||||
QMAKE_CXXFLAGS += $$system("pkg-config --cflags shiboken2 pyside2")
|
||||
LIBS += $$system("pkg-config --libs shiboken2 pyside2")
|
||||
} else {
|
||||
PKGCONFIG += shiboken2 pyside2
|
||||
}
|
||||
INCLUDEPATH += "$$PYSIDE_INCLUDEDIR/QtCore" "$$PYSIDE_INCLUDEDIR/QtWidgets" "$$PYSIDE_INCLUDEDIR/QtGui"
|
||||
}
|
||||
}
|
||||
|
@ -6,7 +6,7 @@
|
||||
#define CUTTERCORE_H
|
||||
|
||||
#include "r_core.h"
|
||||
#include <QtCore/QtCore>
|
||||
#include <QString>
|
||||
|
||||
// Workaround for compile errors on Windows
|
||||
#ifdef _WIN32
|
||||
|
@ -5,6 +5,11 @@
|
||||
#ifndef DESCRIPTIONS_H
|
||||
#define DESCRIPTIONS_H
|
||||
|
||||
#include <QString>
|
||||
#include <QList>
|
||||
#include <QStringList>
|
||||
#include <QMetaType>
|
||||
|
||||
struct FunctionDescription {
|
||||
RVA offset;
|
||||
RVA size;
|
||||
|
@ -42,6 +42,8 @@ void PluginManager::loadPlugins()
|
||||
QDir pluginsDir(locations.first());
|
||||
pluginsDir.mkpath(".");
|
||||
|
||||
qInfo() << "Plugins are loaded from" << pluginsDir.absolutePath();
|
||||
|
||||
pluginsDir.mkdir("plugins");
|
||||
if (!pluginsDir.cd("plugins")) {
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user