mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-17 19:21:04 +00:00
qtscrcpy: init at 2.2.1 (#340257)
This commit is contained in:
commit
dafe71c75c
132
pkgs/by-name/qt/qtscrcpy/package.nix
Normal file
132
pkgs/by-name/qt/qtscrcpy/package.nix
Normal file
|
@ -0,0 +1,132 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
cmake,
|
||||
pkg-config,
|
||||
libsForQt5,
|
||||
scrcpy,
|
||||
android-tools,
|
||||
ffmpeg_4,
|
||||
makeDesktopItem,
|
||||
copyDesktopItems,
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "qtscrcpy";
|
||||
version = "2.2.1";
|
||||
|
||||
src =
|
||||
(fetchFromGitHub {
|
||||
owner = "barry-ran";
|
||||
repo = "QtScrcpy";
|
||||
rev = "refs/tags/v${version}";
|
||||
hash = "sha256-PL/UvRNqvLaFuvSHbkJsaJ2nqRp5+ERM+rmlKVtbShk=";
|
||||
fetchSubmodules = true;
|
||||
}).overrideAttrs
|
||||
(_: {
|
||||
GIT_CONFIG_COUNT = 1;
|
||||
GIT_CONFIG_KEY_0 = "url.https://github.com/.insteadOf";
|
||||
GIT_CONFIG_VALUE_0 = "git@github.com:";
|
||||
});
|
||||
|
||||
patches = [
|
||||
# remove vendored ffmpeg, adb and scrcpy-server
|
||||
./remove_vendors.patch
|
||||
|
||||
# remove predefined adb and scrcpy-server path
|
||||
# we later set them in wrapper
|
||||
./remove_predefined_paths.patch
|
||||
];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace QtScrcpy/QtScrcpyCore/{include/QtScrcpyCoreDef.h,src/device/server/server.h} \
|
||||
--replace-fail 'serverVersion = "2.1.1"' 'serverVersion = "${scrcpy.version}"'
|
||||
substituteInPlace QtScrcpy/util/config.cpp \
|
||||
--replace-fail 'COMMON_SERVER_VERSION_DEF "2.1.1"' 'COMMON_SERVER_VERSION_DEF "${scrcpy.version}"'
|
||||
substituteInPlace QtScrcpy/audio/audiooutput.cpp \
|
||||
--replace-fail 'sndcpy.sh' "$out/share/qtscrcpy/sndcpy.sh"
|
||||
substituteInPlace QtScrcpy/sndcpy/sndcpy.sh \
|
||||
--replace-fail 'ADB=./adb' "ADB=${lib.getExe' android-tools "adb"}" \
|
||||
--replace-fail 'SNDCPY_APK=sndcpy.apk' "SNDCPY_APK=$out/share/qtscrcpy/sndcpy.apk"
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [
|
||||
cmake
|
||||
pkg-config
|
||||
libsForQt5.wrapQtAppsHook
|
||||
copyDesktopItems
|
||||
];
|
||||
|
||||
buildInputs =
|
||||
[
|
||||
scrcpy
|
||||
ffmpeg_4
|
||||
]
|
||||
++ (with libsForQt5; [
|
||||
qtbase
|
||||
qtmultimedia
|
||||
qtx11extras
|
||||
]);
|
||||
|
||||
env.NIX_CFLAGS_COMPILE = toString [
|
||||
"-Wno-error=sign-compare"
|
||||
];
|
||||
|
||||
# Doesn't contain rule to install
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
pushd ../output/x64/Release
|
||||
install -Dm755 QtScrcpy -t $out/bin
|
||||
install -Dm755 sndcpy.sh -t $out/share/qtscrcpy
|
||||
install -Dm644 sndcpy.apk -t $out/share/qtscrcpy
|
||||
popd
|
||||
|
||||
install -Dm644 ../QtScrcpy/res/image/tray/logo.png $out/share/pixmaps/qtscrcpy.png
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
name = "QtScrcpy";
|
||||
exec = "QtScrcpy %U";
|
||||
icon = "qtscrcpy";
|
||||
desktopName = "QtScrcpy";
|
||||
genericName = "Android Display Control";
|
||||
categories = [
|
||||
"Utility"
|
||||
"RemoteAccess"
|
||||
];
|
||||
})
|
||||
];
|
||||
|
||||
preFixup = ''
|
||||
qtWrapperArgs+=(
|
||||
--set QTSCRCPY_ADB_PATH ${lib.getExe' android-tools "adb"}
|
||||
--set QTSCRCPY_SERVER_PATH ${scrcpy}/share/scrcpy/scrcpy-server
|
||||
)
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Android real-time display control software";
|
||||
homepage = "https://github.com/barry-ran/QtScrcpy";
|
||||
license = lib.licenses.asl20;
|
||||
maintainers = with lib.maintainers; [
|
||||
daru-san
|
||||
aleksana
|
||||
];
|
||||
mainProgram = "QtScrcpy";
|
||||
platforms = with lib.platforms; linux ++ darwin ++ windows;
|
||||
# needs some special handling on darwin as it generates .app bundle directly
|
||||
badPlatforms = lib.platforms.darwin;
|
||||
sourceProvenance = with lib.sourceTypes; [
|
||||
fromSource
|
||||
# Still includes sndcpy.apk vendored in the same repo
|
||||
# which will run on controlled Android device
|
||||
# https://github.com/barry-ran/QtScrcpy/blob/master/QtScrcpy/sndcpy/sndcpy.apk
|
||||
binaryBytecode
|
||||
];
|
||||
};
|
||||
}
|
27
pkgs/by-name/qt/qtscrcpy/remove_predefined_paths.patch
Normal file
27
pkgs/by-name/qt/qtscrcpy/remove_predefined_paths.patch
Normal file
|
@ -0,0 +1,27 @@
|
|||
diff --git a/QtScrcpy/main.cpp b/QtScrcpy/main.cpp
|
||||
index a24ba60..51e3d76 100644
|
||||
--- a/QtScrcpy/main.cpp
|
||||
+++ b/QtScrcpy/main.cpp
|
||||
@@ -22,22 +22,16 @@ int main(int argc, char *argv[])
|
||||
{
|
||||
// set env
|
||||
#ifdef Q_OS_WIN32
|
||||
- qputenv("QTSCRCPY_ADB_PATH", "../../../QtScrcpy/QtScrcpyCore/src/third_party/adb/win/adb.exe");
|
||||
- qputenv("QTSCRCPY_SERVER_PATH", "../../../QtScrcpy/QtScrcpyCore/src/third_party/scrcpy-server");
|
||||
qputenv("QTSCRCPY_KEYMAP_PATH", "../../../keymap");
|
||||
qputenv("QTSCRCPY_CONFIG_PATH", "../../../config");
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_OSX
|
||||
- qputenv("QTSCRCPY_ADB_PATH", "../../../../../../QtScrcpy/QtScrcpyCore/src/third_party/adb/mac/adb");
|
||||
- qputenv("QTSCRCPY_SERVER_PATH", "../../../../../../QtScrcpy/QtScrcpyCore/src/third_party/scrcpy-server");
|
||||
qputenv("QTSCRCPY_KEYMAP_PATH", "../../../../../../keymap");
|
||||
qputenv("QTSCRCPY_CONFIG_PATH", "../../../../../../config");
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
- qputenv("QTSCRCPY_ADB_PATH", "../../../QtScrcpy/QtScrcpyCore/src/third_party/adb/linux/adb");
|
||||
- qputenv("QTSCRCPY_SERVER_PATH", "../../../QtScrcpy/QtScrcpyCore/src/third_party/scrcpy-server");
|
||||
qputenv("QTSCRCPY_KEYMAP_PATH", "../../../keymap");
|
||||
qputenv("QTSCRCPY_CONFIG_PATH", "../../../config");
|
||||
#endif
|
96
pkgs/by-name/qt/qtscrcpy/remove_vendors.patch
Normal file
96
pkgs/by-name/qt/qtscrcpy/remove_vendors.patch
Normal file
|
@ -0,0 +1,96 @@
|
|||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index 85c733e..02fea2c 100644
|
||||
--- a/QtScrcpy/QtScrcpyCore/CMakeLists.txt
|
||||
+++ b/QtScrcpy/QtScrcpyCore/CMakeLists.txt
|
||||
@@ -139,87 +139,10 @@ target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DI
|
||||
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/device/recorder)
|
||||
target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/devicemanage)
|
||||
|
||||
-#
|
||||
-# plantform deps
|
||||
-#
|
||||
|
||||
-# windows
|
||||
-if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
- # ffmpeg
|
||||
- # include
|
||||
- target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/include)
|
||||
- # link
|
||||
- set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/${QSC_CPU_ARCH}")
|
||||
- target_link_directories(${QSC_PROJECT_NAME} PUBLIC ${FFMPEG_LIB_PATH})
|
||||
- target_link_libraries(${QSC_PROJECT_NAME} PRIVATE
|
||||
- avformat
|
||||
- avcodec
|
||||
- avutil
|
||||
- swscale
|
||||
- )
|
||||
- # copy
|
||||
- set(THIRD_PARTY_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party")
|
||||
- set(FFMPEG_BIN_PATH "${THIRD_PARTY_PATH}/ffmpeg/bin/${QSC_CPU_ARCH}")
|
||||
- add_custom_command(TARGET ${QSC_PROJECT_NAME} POST_BUILD
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avcodec-58.dll" "${QSC_DEPLOY_PATH}"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avformat-58.dll" "${QSC_DEPLOY_PATH}"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/avutil-56.dll" "${QSC_DEPLOY_PATH}"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swscale-5.dll" "${QSC_DEPLOY_PATH}"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FFMPEG_BIN_PATH}/swresample-3.dll" "${QSC_DEPLOY_PATH}"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${THIRD_PARTY_PATH}/adb/win/adb.exe" "${QSC_DEPLOY_PATH}"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${THIRD_PARTY_PATH}/adb/win/AdbWinApi.dll" "${QSC_DEPLOY_PATH}"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${THIRD_PARTY_PATH}/adb/win/AdbWinUsbApi.dll" "${QSC_DEPLOY_PATH}"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${THIRD_PARTY_PATH}/scrcpy-server" "${QSC_DEPLOY_PATH}"
|
||||
- )
|
||||
-endif()
|
||||
|
||||
-# MacOS
|
||||
-if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
- # ffmpeg
|
||||
- # include
|
||||
- target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/include)
|
||||
- # link
|
||||
- set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib")
|
||||
- target_link_directories(${QSC_PROJECT_NAME} PUBLIC ${FFMPEG_LIB_PATH})
|
||||
- target_link_libraries(${QSC_PROJECT_NAME} PRIVATE
|
||||
- avformat.58
|
||||
- avcodec.58
|
||||
- avutil.56
|
||||
- swscale.5
|
||||
- )
|
||||
-
|
||||
- # copy bundle file
|
||||
- add_custom_command(TARGET ${QSC_PROJECT_NAME} POST_BUILD
|
||||
- # dylib,scrcpy-server,adb copy to Contents/MacOS
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libavcodec.58.dylib" "${QSC_DEPLOY_PATH}/MacOS"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libavformat.58.dylib" "${QSC_DEPLOY_PATH}/MacOS"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libavutil.56.dylib" "${QSC_DEPLOY_PATH}/MacOS"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libswscale.5.dylib" "${QSC_DEPLOY_PATH}/MacOS"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib/libswresample.3.dylib" "${QSC_DEPLOY_PATH}/MacOS"
|
||||
-
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/scrcpy-server" "${QSC_DEPLOY_PATH}/MacOS"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/adb/mac/adb" "${QSC_DEPLOY_PATH}/MacOS"
|
||||
- )
|
||||
-endif()
|
||||
+find_package(PkgConfig REQUIRED)
|
||||
+pkg_check_modules(FFMPEG REQUIRED libavcodec libavformat libavutil libswscale)
|
||||
|
||||
-# Linux
|
||||
-if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
- # include
|
||||
- target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/include)
|
||||
- # link
|
||||
- set(FFMPEG_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/ffmpeg/lib")
|
||||
- target_link_directories(${QSC_PROJECT_NAME} PUBLIC ${FFMPEG_LIB_PATH})
|
||||
- target_link_libraries(${QSC_PROJECT_NAME} PRIVATE
|
||||
- # ffmpeg
|
||||
- avformat
|
||||
- avcodec
|
||||
- avutil
|
||||
- swscale
|
||||
- z
|
||||
- )
|
||||
-
|
||||
- add_custom_command(TARGET ${QSC_PROJECT_NAME} POST_BUILD
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/adb/linux/adb" "${QSC_DEPLOY_PATH}"
|
||||
- COMMAND ${CMAKE_COMMAND} -E copy_if_different "${CMAKE_CURRENT_SOURCE_DIR}/src/third_party/scrcpy-server" "${QSC_DEPLOY_PATH}"
|
||||
- )
|
||||
-endif()
|
||||
+target_link_libraries(${QSC_PROJECT_NAME} PRIVATE ${FFMPEG_LIBRARIES})
|
||||
+target_include_directories(${QSC_PROJECT_NAME} PRIVATE ${FFMPEG_INCLUDE_DIRS})
|
Loading…
Reference in a new issue