From f052e6d328f55d709cf4a320761cba5e267b381c Mon Sep 17 00:00:00 2001 From: Chongyun Lee <45286352+licy183@users.noreply.github.com> Date: Mon, 6 Nov 2023 22:14:00 +0800 Subject: [PATCH] new package: ffplayout --- tur/ffplayout/0001-fix-hardcoded-paths.patch | 111 +++++++++++++++++++ tur/ffplayout/build.sh | 80 +++++++++++++ 2 files changed, 191 insertions(+) create mode 100644 tur/ffplayout/0001-fix-hardcoded-paths.patch create mode 100644 tur/ffplayout/build.sh diff --git a/tur/ffplayout/0001-fix-hardcoded-paths.patch b/tur/ffplayout/0001-fix-hardcoded-paths.patch new file mode 100644 index 000000000..edb24e204 --- /dev/null +++ b/tur/ffplayout/0001-fix-hardcoded-paths.patch @@ -0,0 +1,111 @@ +--- a/ffplayout-api/src/main.rs ++++ b/ffplayout-api/src/main.rs +@@ -41,8 +41,8 @@ + } + + fn public_path() -> &'static str { +- if Path::new("/usr/share/ffplayout/public/").is_dir() { +- return "/usr/share/ffplayout/public/"; ++ if Path::new("@TERMUX_PREFIX@/share/ffplayout/public/").is_dir() { ++ return "@TERMUX_PREFIX@/share/ffplayout/public/"; + } + + if Path::new("./public/").is_dir() { +--- a/ffplayout-api/src/utils/channels.rs ++++ b/ffplayout-api/src/utils/channels.rs +@@ -21,7 +21,7 @@ + return Err(ServiceError::BadRequest("Bad service name!".to_string())); + } + +- if !target_channel.config_path.starts_with("/etc/ffplayout") { ++ if !target_channel.config_path.starts_with("@TERMUX_PREFIX@/etc/ffplayout") { + return Err(ServiceError::BadRequest("Bad config path!".to_string())); + } + +@@ -32,7 +32,7 @@ + }; + + let mut config = +- PlayoutConfig::new(Some("/usr/share/ffplayout/ffplayout.yml.orig".to_string())); ++ PlayoutConfig::new(Some("@TERMUX_PREFIX@/share/ffplayout/ffplayout.yml.orig".to_string())); + + config.general.stat_file = format!(".ffp_{channel_name}",); + +--- a/ffplayout-api/src/utils/control.rs ++++ b/ffplayout-api/src/utils/control.rs +@@ -183,7 +183,7 @@ + + Ok(Self { + service: channel.service, +- cmd: vec_strings!["/usr/bin/systemctl"], ++ cmd: vec_strings!["@TERMUX_PREFIX@//bin/systemctl"], + }) + } + +--- a/ffplayout-api/src/utils/mod.rs ++++ b/ffplayout-api/src/utils/mod.rs +@@ -75,7 +75,7 @@ + } + + pub fn db_path() -> Result> { +- let sys_path = Path::new("/usr/share/ffplayout/db"); ++ let sys_path = Path::new("@TERMUX_PREFIX@/share/ffplayout/db"); + let mut db_path = "./ffplayout.db".to_string(); + + if sys_path.is_dir() && !sys_path.writable() { +@@ -83,7 +83,7 @@ + } + + if sys_path.is_dir() && sys_path.writable() { +- db_path = "/usr/share/ffplayout/db/ffplayout.db".to_string(); ++ db_path = "@TERMUX_PREFIX@/share/ffplayout/db/ffplayout.db".to_string(); + } else if Path::new("./assets").is_dir() { + db_path = "./assets/ffplayout.db".to_string(); + } +--- a/ffplayout-api/src/db/handles.rs ++++ b/ffplayout-api/src/db/handles.rs +@@ -104,7 +104,7 @@ + }; + + let config_path = if env::consts::OS == "linux" { +- "/etc/ffplayout/ffplayout.yml" ++ "@TERMUX_PREFIX@/etc/ffplayout/ffplayout.yml" + } else { + "./assets/ffplayout.yml" + }; +--- a/lib/src/utils/config.rs ++++ b/lib/src/utils/config.rs +@@ -318,7 +318,7 @@ + impl PlayoutConfig { + /// Read config from YAML file, and set some extra config values. + pub fn new(cfg_path: Option) -> Self { +- let mut config_path = PathBuf::from("/etc/ffplayout/ffplayout.yml"); ++ let mut config_path = PathBuf::from("@TERMUX_PREFIX@/etc/ffplayout/ffplayout.yml"); + + if let Some(cfg) = cfg_path { + config_path = PathBuf::from(cfg); +@@ -336,7 +336,7 @@ + Ok(file) => file, + Err(_) => { + println!( +- "{config_path:?} doesn't exists!\nPut \"ffplayout.yml\" in \"/etc/playout/\" or beside the executable!" ++ "{config_path:?} doesn't exists!\nPut \"ffplayout.yml\" in \"@TERMUX_PREFIX@/etc/playout/\" or beside the executable!" + ); + process::exit(1); + } +--- a/ffplayout-engine/src/utils/mod.rs ++++ b/ffplayout-engine/src/utils/mod.rs +@@ -19,11 +19,11 @@ + pub fn get_config(args: Args) -> PlayoutConfig { + let cfg_path = match args.channel { + Some(c) => { +- let path = PathBuf::from(format!("/etc/ffplayout/{c}.yml")); ++ let path = PathBuf::from(format!("@TERMUX_PREFIX@/etc/ffplayout/{c}.yml")); + + if !path.is_file() { + println!( +- "Config file \"{c}\" under \"/etc/ffplayout/\" not found.\n\nCheck arguments!" ++ "Config file \"{c}\" under \"@TERMUX_PREFIX@/etc/ffplayout/\" not found.\n\nCheck arguments!" + ); + exit(1) + } diff --git a/tur/ffplayout/build.sh b/tur/ffplayout/build.sh new file mode 100644 index 000000000..bf11fa596 --- /dev/null +++ b/tur/ffplayout/build.sh @@ -0,0 +1,80 @@ +TERMUX_PKG_HOMEPAGE=https://ffplayout.github.io +TERMUX_PKG_DESCRIPTION="Rust and ffmpeg based playout" +TERMUX_PKG_LICENSE="GPL-3.0" +TERMUX_PKG_MAINTAINER="@termux-user-repository" +TERMUX_PKG_VERSION=0.19.1 +TERMUX_PKG_SRCURL=git+https://github.com/ffplayout/ffplayout +TERMUX_PKG_BUILD_IN_SRC=true +TERMUX_PKG_AUTO_UPDATE=true +TERMUX_PKG_HOSTBUILD=true + +termux_step_get_source() { + local TMP_CHECKOUT=$TERMUX_PKG_CACHEDIR/tmp-checkout + local TMP_CHECKOUT_VERSION=$TERMUX_PKG_CACHEDIR/tmp-checkout-version + + if [ ! -f $TMP_CHECKOUT_VERSION ] || [ "$(cat $TMP_CHECKOUT_VERSION)" != "$TERMUX_PKG_VERSION" ]; then + if [ "$TERMUX_PKG_GIT_BRANCH" == "" ]; then + TERMUX_PKG_GIT_BRANCH=v$TERMUX_PKG_VERSION + fi + + rm -rf $TMP_CHECKOUT + git clone --depth 1 \ + --branch $TERMUX_PKG_GIT_BRANCH \ + ${TERMUX_PKG_SRCURL:4} \ + $TMP_CHECKOUT + + # Set git submoudle url to https rather than ssh + sed -i 's|git@github.com:|https://github.com/|g' $TMP_CHECKOUT/.gitmodules + + pushd $TMP_CHECKOUT + git submodule update --init --recursive --depth=1 + popd + + echo "$TERMUX_PKG_VERSION" > $TMP_CHECKOUT_VERSION + fi + + rm -rf $TERMUX_PKG_SRCDIR + cp -Rf $TMP_CHECKOUT $TERMUX_PKG_SRCDIR +} + +termux_step_host_build() { + termux_setup_nodejs + pushd $TERMUX_PKG_SRCDIR + bash ./scripts/man_create.sh + rm -rf public + cd ffplayout-frontend + npm install + npm run generate + cp -r .output/public ../public + popd +} + +termux_step_configure() { + # Remove this marker all the time + rm -rf $TERMUX_HOSTBUILD_MARKER +} + +termux_step_make() { + termux_setup_rust + + if [ "$TERMUX_ARCH" == "x86_64" ]; then + local libdir=target/x86_64-linux-android/release/deps + mkdir -p $libdir + pushd $libdir + RUSTFLAGS+=" -C link-arg=$($CC -print-libgcc-file-name)" + echo "INPUT(-l:libunwind.a)" > libgcc.so + popd + fi + + cargo build --jobs $TERMUX_MAKE_PROCESSES --release --target $CARGO_TARGET_NAME +} + +termux_step_make_install() { + cp ./target/$CARGO_TARGET_NAME/release/ffpapi . + cp ./target/$CARGO_TARGET_NAME/release/ffplayout . + tar -cvf "ffplayout-v${TERMUX_PKG_VERSION}_${CARGO_TARGET_NAME}.tar" --exclude='*.db' --exclude='*.db-shm' --exclude='*.db-wal' assets docker docs public LICENSE README.md CHANGELOG.md ffplayout ffpapi + mkdir -p $TERMUX_PREFIX/opt/ffplayout + tar -C $TERMUX_PREFIX/opt/ffplayout -xvf "ffplayout-v${TERMUX_PKG_VERSION}_${CARGO_TARGET_NAME}.tar" + ln -sfr $TERMUX_PREFIX/opt/ffplayout/ffpapi $TERMUX_PREFIX/bin + ln -sfr $TERMUX_PREFIX/opt/ffplayout/ffplayout $TERMUX_PREFIX/bin +}