diff --git a/trunk/auto/depends.sh b/trunk/auto/depends.sh index b1fe69d21..bfc9a08b4 100755 --- a/trunk/auto/depends.sh +++ b/trunk/auto/depends.sh @@ -48,140 +48,92 @@ if [[ $SRS_OSX == YES ]]; then echo "Please install brew at https://brew.sh/"; exit $ret; fi fi -# Check perl, which is depended by automake for building libopus etc. -perl --version >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install perl by:" - echo " yum install -y perl" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install perl by:" - echo " apt install -y perl" - else - echo "Please install perl" + +# Arrays to track missing dependencies +MISSING_DEPS=() +MISSING_DEPS_UBUNTU=() +MISSING_DEPS_CENTOS=() +MISSING_DEPS_OSX=() + +# Helper function to check if a command exists +check_command() { + local cmd=$1 + local cmd_name=$2 + local ubuntu_pkg=$3 + local centos_pkg=$4 + local osx_pkg=$5 + + $cmd >/dev/null 2>/dev/null + if [[ $? -ne 0 ]]; then + MISSING_DEPS+=("$cmd_name") + if [[ ! -z "$ubuntu_pkg" ]]; then + MISSING_DEPS_UBUNTU+=("$ubuntu_pkg") + fi + if [[ ! -z "$centos_pkg" ]]; then + MISSING_DEPS_CENTOS+=("$centos_pkg") + fi + if [[ ! -z "$osx_pkg" ]]; then + MISSING_DEPS_OSX+=("$osx_pkg") + fi + return 1 fi - exit $ret; -fi -gcc --version >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install gcc by:" - echo " yum install -y gcc" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install gcc by:" - echo " apt install -y gcc" - else - echo "Please install gcc" - fi - exit $ret; -fi -g++ --version >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install g++ by:" - echo " yum install -y gcc-c++" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install g++ by:" - echo " apt install -y g++" - else - echo "Please install gcc-c++" - fi - exit $ret; -fi -make --version >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install make by:" - echo " yum install -y make" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install make by:" - echo " apt install -y make" - else - echo "Please install make" - fi - exit $ret; -fi -patch --version >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install patch by:" - echo " yum install -y patch" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install patch by:" - echo " apt install -y patch" - else - echo "Please install patch" - fi - exit $ret; -fi -unzip -v >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install unzip by:" - echo " yum install -y unzip" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install unzip by:" - echo " apt install -y unzip" - else - echo "Please install unzip" - fi - exit $ret; -fi -automake --version >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install automake by:" - echo " yum install -y automake" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install automake by:" - echo " apt install -y automake" - else - echo "Please install automake" - fi - exit $ret; -fi + return 0 +} + +# Check required tools +echo "Checking required tools: perl gcc g++ make patch unzip automake pkg-config which" +check_command "perl --version" "perl" "perl" "perl" "perl" +check_command "gcc --version" "gcc" "gcc" "gcc" "gcc" +check_command "g++ --version" "g++" "g++" "gcc-c++" "gcc" +check_command "make --version" "make" "make" "make" "make" +check_command "patch --version" "patch" "patch" "patch" "gpatch" +check_command "unzip -v" "unzip" "unzip" "unzip" "unzip" +check_command "automake --version" "automake" "automake" "automake" "automake" +check_command "pkg-config --version" "pkg-config" "pkg-config" "pkgconfig" "pkg-config" +check_command "which ls" "which" "which" "which" "which" + +# Check optional tools for valgrind if [[ $SRS_VALGRIND == YES ]]; then - valgrind --version >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - echo "Please install valgrind"; exit $ret; - fi + check_command "valgrind --version" "valgrind" "valgrind" "valgrind" "valgrind" if [[ ! -f /usr/include/valgrind/valgrind.h ]]; then - echo "Please install valgrind-dev"; exit $ret; + MISSING_DEPS+=("valgrind-dev") + MISSING_DEPS_UBUNTU+=("valgrind") + MISSING_DEPS_CENTOS+=("valgrind-devel") + MISSING_DEPS_OSX+=("valgrind") fi fi -# Check tclsh, which is depended by SRT. + +# Check optional tools for SRT if [[ $SRS_SRT == YES ]]; then - tclsh <<< "exit" >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install tclsh by:" - echo " yum install -y tcl" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install tclsh by:" - echo " apt install -y tclsh" - else - echo "Please install tclsh" - fi - exit $ret; - fi - cmake --version >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install cmake by:" - echo " yum install -y cmake" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install cmake by:" - echo " apt install -y cmake" - else - echo "Please install cmake" - fi - exit $ret; + echo "Checking optional tools for SRT: tclsh cmake" + # Special check for tclsh + tclsh <<< "exit" >/dev/null 2>&1 + if [[ $? -ne 0 ]]; then + MISSING_DEPS+=("tclsh") + MISSING_DEPS_UBUNTU+=("tclsh") + MISSING_DEPS_CENTOS+=("tcl") + MISSING_DEPS_OSX+=("tcl-tk") fi + check_command "cmake --version" "cmake" "cmake" "cmake" "cmake" fi -pkg-config --version >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - echo "Please install pkg-config"; exit $ret; -fi -which ls >/dev/null 2>/dev/null; ret=$?; if [[ 0 -ne $ret ]]; then - if [[ $OS_IS_CENTOS == YES ]]; then - echo "Please install which by:" - echo " yum install -y which" - elif [[ $OS_IS_UBUNTU == YES ]]; then - echo "Please install which by:" - echo " apt install -y which" + +# Report all missing dependencies at once +if [[ ${#MISSING_DEPS[@]} -gt 0 ]]; then + echo "" + echo -e "Missing dependencies (${#MISSING_DEPS[@]}): ${RED}${MISSING_DEPS[@]}${BLACK}" + + if [[ $OS_IS_UBUNTU == YES && ${#MISSING_DEPS_UBUNTU[@]} -gt 0 ]]; then + echo -e "Please install missing dependencies by: ${GREEN}sudo apt install -y ${MISSING_DEPS_UBUNTU[@]}${BLACK}" + elif [[ $OS_IS_CENTOS == YES && ${#MISSING_DEPS_CENTOS[@]} -gt 0 ]]; then + echo -e "Please install missing dependencies by: ${GREEN}sudo yum install -y ${MISSING_DEPS_CENTOS[@]}${BLACK}" + elif [[ $SRS_OSX == YES && ${#MISSING_DEPS_OSX[@]} -gt 0 ]]; then + echo -e "Please install missing dependencies by: ${GREEN}brew install ${MISSING_DEPS_OSX[@]}${BLACK}" else - echo "Please install which" + echo "Please install the missing dependencies above." fi - exit $ret; + + echo "Please install the missing dependencies above and rerun configure." + exit 1 fi ##################################################################################### diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 523d9d910..a82d3f70b 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -7,6 +7,7 @@ The changelog for SRS. ## SRS 7.0 Changelog +* v7.0, 2025-10-26, Build: Improve dependency checking to report all missing dependencies at once. v7.0.105 (#4293) * v7.0, 2025-10-26, HLS: Support hls_master_m3u8_path_relative for reverse proxy compatibility. v7.0.104 (#4338) * v7.0, 2025-10-25, API: Remove minimum limit of 10 for count parameter in /api/v1/streams and /api/v1/clients. v7.0.103 (#4358) * v7.0, 2025-10-22, AI: Only support AAC/MP3/Opus audio codec. v7.0.102 (#4516) diff --git a/trunk/src/core/srs_core_version7.hpp b/trunk/src/core/srs_core_version7.hpp index a28cde114..e74c5d5dd 100644 --- a/trunk/src/core/srs_core_version7.hpp +++ b/trunk/src/core/srs_core_version7.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 7 #define VERSION_MINOR 0 -#define VERSION_REVISION 104 +#define VERSION_REVISION 105 #endif \ No newline at end of file