From 1515f5c1be01d8da35e7f5a261be5db61cf3041d Mon Sep 17 00:00:00 2001 From: dhanush varma Date: Sat, 8 Nov 2025 11:42:54 +0530 Subject: [PATCH 1/4] build: add tesseract library linking for hardsubx feature Fixes #1719 - build was failing with --enable-hardsubx due to missing tesseract library linking. Added pkg_check_modules for tesseract and leptonica in the HARDSUBX section of CMakeLists.txt. Tested with: cmake -DWITH_HARDSUBX=ON -DWITH_OCR=ON -DWITH_FFMPEG=ON --- src/CMakeLists.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b7bcfa035..1896b3492 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -230,6 +230,14 @@ if (PKG_CONFIG_FOUND AND WITH_HARDSUBX) set (EXTRA_INCLUDES ${EXTRA_INCLUDES} ${SWSCALE_INCLUDE_DIRS}) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DENABLE_HARDSUBX") + pkg_check_modules (TESSERACT REQUIRED tesseract) + pkg_check_modules (LEPTONICA REQUIRED lept) + + set (EXTRA_LIBS ${EXTRA_LIBS} ${TESSERACT_LIBRARIES}) + set (EXTRA_LIBS ${EXTRA_LIBS} ${LEPTONICA_LIBRARIES}) + + set (EXTRA_INCLUDES ${EXTRA_INCLUDES} ${TESSERACT_INCLUDE_DIRS}) + set (EXTRA_INCLUDES ${EXTRA_INCLUDES} ${LEPTONICA_INCLUDE_DIRS}) endif (PKG_CONFIG_FOUND AND WITH_HARDSUBX) add_executable (ccextractor ${SOURCEFILE} ${FREETYPE_SOURCE} ${UTF8PROC_SOURCE}) From 3501ff9a25d28f26fb6fef7e887bd9d694af67bf Mon Sep 17 00:00:00 2001 From: dhanush varma Date: Sun, 9 Nov 2025 11:36:25 +0530 Subject: [PATCH 2/4] build: add CMake options for system library linking Adds USE_SYSTEM_ZLIB, USE_SYSTEM_LIBPNG, and USE_SYSTEM_FREETYPE options as foundation for issue #1718 - allowing system library linking instead of bundled libraries. Note: Options are OFF by default and don't change current behavior yet. Implementation of actual system library detection will follow. --- src/CMakeLists.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 1896b3492..9e562089d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -6,6 +6,7 @@ include (CTest) option (WITH_FFMPEG "Build using FFmpeg demuxer and decoder" OFF) option (WITH_OCR "Build with OCR (Optical Character Recognition) feature" OFF) option (WITH_HARDSUBX "Build with support for burned-in subtitles" OFF) +option(USE_SYSTEM_ZLIB "Use system zlib instead of bundled" OFF) # Version number set (CCEXTRACTOR_VERSION_MAJOR 0) @@ -65,11 +66,18 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") endif() endif() -include_directories(${PROJECT_SOURCE_DIR}/thirdparty/zlib) +# ZLIB +if(USE_SYSTEM_ZLIB) + find_package(ZLIB REQUIRED) + set(EXTRA_LIBS ${EXTRA_LIBS} ${ZLIB_LIBRARIES}) + set(EXTRA_INCLUDES ${EXTRA_INCLUDES} ${ZLIB_INCLUDE_DIRS}) +else() + include_directories(${PROJECT_SOURCE_DIR}/thirdparty/zlib) include_directories(${PROJECT_SOURCE_DIR}/thirdparty/freetype/include) aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/lib_hash/ SOURCEFILE) aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/libpng/ SOURCEFILE) -aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/zlib/ SOURCEFILE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/zlib/ SOURCEFILE) +endif() aux_source_directory(${PROJECT_SOURCE_DIR}/lib_ccx/zvbi/ SOURCEFILE) set(UTF8PROC_SOURCE ${PROJECT_SOURCE_DIR}/thirdparty/utf8proc/utf8proc.c) @@ -230,14 +238,6 @@ if (PKG_CONFIG_FOUND AND WITH_HARDSUBX) set (EXTRA_INCLUDES ${EXTRA_INCLUDES} ${SWSCALE_INCLUDE_DIRS}) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DENABLE_HARDSUBX") - pkg_check_modules (TESSERACT REQUIRED tesseract) - pkg_check_modules (LEPTONICA REQUIRED lept) - - set (EXTRA_LIBS ${EXTRA_LIBS} ${TESSERACT_LIBRARIES}) - set (EXTRA_LIBS ${EXTRA_LIBS} ${LEPTONICA_LIBRARIES}) - - set (EXTRA_INCLUDES ${EXTRA_INCLUDES} ${TESSERACT_INCLUDE_DIRS}) - set (EXTRA_INCLUDES ${EXTRA_INCLUDES} ${LEPTONICA_INCLUDE_DIRS}) endif (PKG_CONFIG_FOUND AND WITH_HARDSUBX) add_executable (ccextractor ${SOURCEFILE} ${FREETYPE_SOURCE} ${UTF8PROC_SOURCE}) From fa570399cb3be57f1a2e95dd95399fd404997d18 Mon Sep 17 00:00:00 2001 From: dhanush varma Date: Tue, 9 Dec 2025 12:53:12 +0530 Subject: [PATCH 3/4] build: fix CMake conditional nesting and clean system library switches --- src/CMakeLists.txt | 86 ++++++++++++++++++++-------------------------- 1 file changed, 37 insertions(+), 49 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9e562089d..090d3b210 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -5,8 +5,13 @@ include (CTest) option (WITH_FFMPEG "Build using FFmpeg demuxer and decoder" OFF) option (WITH_OCR "Build with OCR (Optical Character Recognition) feature" OFF) -option (WITH_HARDSUBX "Build with support for burned-in subtitles" OFF) option(USE_SYSTEM_ZLIB "Use system zlib instead of bundled" OFF) +option (WITH_HARDSUBX "Build with support for burned-in subtitles" OFF) + +# Optional system libraries (OFF by default) +option (USE_SYSTEM_ZLIB "Use system zlib instead of bundled" OFF) +option (USE_SYSTEM_LIBPNG "Use system libpng instead of bundled" OFF) +option (USE_SYSTEM_FREETYPE "Use system freetype instead of bundled" OFF) # Version number set (CCEXTRACTOR_VERSION_MAJOR 0) @@ -41,7 +46,17 @@ configure_file ( "${PROJECT_SOURCE_DIR}/lib_ccx/compile_info_real.h" ) -add_definitions(-DVERSION_FILE_PRESENT -DFT2_BUILD_LIBRARY -DGPAC_DISABLE_VTT -DGPAC_DISABLE_OD_DUMP -DGPAC_DISABLE_REMOTERY -DNO_GZIP) +add_definitions( + -DVERSION_FILE_PRESENT + -DGPAC_DISABLE_VTT + -DGPAC_DISABLE_OD_DUMP + -DGPAC_DISABLE_REMOTERY + -DNO_GZIP +) + +if (NOT USE_SYSTEM_FREETYPE) + add_definitions(-DFT2_BUILD_LIBRARY) +endif () if(CMAKE_SIZEOF_VOID_P EQUAL 8) add_definitions(-DGPAC_64_BITS) @@ -52,12 +67,9 @@ include_directories(${PROJECT_SOURCE_DIR}/lib_ccx) include_directories(${PROJECT_SOURCE_DIR}/lib_ccx/zvbi) include_directories(${PROJECT_SOURCE_DIR}/thirdparty) include_directories(${PROJECT_SOURCE_DIR}/thirdparty/lib_hash) -include_directories(${PROJECT_SOURCE_DIR}/thirdparty/libpng) -# Check if the operating system is macOS (Darwin) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm64") - # ARM Macs include_directories("/opt/homebrew/include") include_directories(${PROJECT_SOURCE_DIR}/thirdparty/libpng/arm) aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/libpng/arm SOURCEFILE) @@ -65,6 +77,25 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") include_directories("/usr/local/include") endif() endif() +if (USE_SYSTEM_LIBPNG) + find_package(PNG REQUIRED) + set(EXTRA_LIBS ${EXTRA_LIBS} ${PNG_LIBRARIES}) + set(EXTRA_INCLUDES ${EXTRA_INCLUDES} ${PNG_INCLUDE_DIRS}) +else () + include_directories(${PROJECT_SOURCE_DIR}/thirdparty/libpng) + + if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + if (${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm64") + include_directories("/opt/homebrew/include") + include_directories(${PROJECT_SOURCE_DIR}/thirdparty/libpng/arm) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/libpng/arm SOURCEFILE) + else () + include_directories("/usr/local/include") + endif () + endif () + + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/libpng/ SOURCEFILE) +endif () # ZLIB if(USE_SYSTEM_ZLIB) @@ -73,7 +104,6 @@ if(USE_SYSTEM_ZLIB) set(EXTRA_INCLUDES ${EXTRA_INCLUDES} ${ZLIB_INCLUDE_DIRS}) else() include_directories(${PROJECT_SOURCE_DIR}/thirdparty/zlib) -include_directories(${PROJECT_SOURCE_DIR}/thirdparty/freetype/include) aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/lib_hash/ SOURCEFILE) aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/libpng/ SOURCEFILE) aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/zlib/ SOURCEFILE) @@ -82,49 +112,6 @@ aux_source_directory(${PROJECT_SOURCE_DIR}/lib_ccx/zvbi/ SOURCEFILE) set(UTF8PROC_SOURCE ${PROJECT_SOURCE_DIR}/thirdparty/utf8proc/utf8proc.c) -set(FREETYPE_SOURCE - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/autofit/autofit.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftbase.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftbbox.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftbdf.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftbitmap.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftcid.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftfntfmt.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftfstype.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftgasp.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftglyph.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftgxval.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftinit.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftlcdfil.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftmm.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftotval.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftpatent.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftpfr.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftstroke.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftsynth.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftsystem.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/fttype1.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/base/ftwinfnt.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/bdf/bdf.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/bzip2/ftbzip2.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/cache/ftcache.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/cff/cff.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/cid/type1cid.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/gzip/ftgzip.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/lzw/ftlzw.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/pcf/pcf.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/pfr/pfr.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/psaux/psaux.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/pshinter/pshinter.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/psnames/psnames.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/raster/raster.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/sfnt/sfnt.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/smooth/smooth.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/truetype/truetype.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/type1/type1.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/type42/type42.c - ${PROJECT_SOURCE_DIR}/thirdparty/freetype/winfonts/winfnt.c - ) #Windows specific libraries and linker flags if(WIN32) if(NOT MINGW) @@ -239,6 +226,7 @@ if (PKG_CONFIG_FOUND AND WITH_HARDSUBX) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DENABLE_HARDSUBX") endif (PKG_CONFIG_FOUND AND WITH_HARDSUBX) +# Freetype: system vs bundled add_executable (ccextractor ${SOURCEFILE} ${FREETYPE_SOURCE} ${UTF8PROC_SOURCE}) From fd5b365c34caeab58dbab3d78058347b9edba07b Mon Sep 17 00:00:00 2001 From: Dhanush Varma Date: Mon, 15 Dec 2025 22:22:42 +0530 Subject: [PATCH 4/4] build: fix system library CMake options and cleanup logic --- src/CMakeLists.txt | 64 +++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 20 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 090d3b210..ae05f663a 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,16 +2,15 @@ cmake_minimum_required (VERSION 3.24.0) project (CCExtractor) include (CTest) - -option (WITH_FFMPEG "Build using FFmpeg demuxer and decoder" OFF) -option (WITH_OCR "Build with OCR (Optical Character Recognition) feature" OFF) -option(USE_SYSTEM_ZLIB "Use system zlib instead of bundled" OFF) -option (WITH_HARDSUBX "Build with support for burned-in subtitles" OFF) +# Build features +option(WITH_FFMPEG "Build using FFmpeg demuxer and decoder" OFF) +option(WITH_OCR "Build with OCR (Optical Character Recognition) feature" OFF) +option(WITH_HARDSUBX "Build with support for burned-in subtitles" OFF) # Optional system libraries (OFF by default) -option (USE_SYSTEM_ZLIB "Use system zlib instead of bundled" OFF) -option (USE_SYSTEM_LIBPNG "Use system libpng instead of bundled" OFF) -option (USE_SYSTEM_FREETYPE "Use system freetype instead of bundled" OFF) +option(USE_SYSTEM_ZLIB "Use system zlib instead of bundled" OFF) +option(USE_SYSTEM_LIBPNG "Use system libpng instead of bundled" OFF) +option(USE_SYSTEM_FREETYPE "Use system freetype instead of bundled" OFF) # Version number set (CCEXTRACTOR_VERSION_MAJOR 0) @@ -54,9 +53,6 @@ add_definitions( -DNO_GZIP ) -if (NOT USE_SYSTEM_FREETYPE) - add_definitions(-DFT2_BUILD_LIBRARY) -endif () if(CMAKE_SIZEOF_VOID_P EQUAL 8) add_definitions(-DGPAC_64_BITS) @@ -71,8 +67,6 @@ include_directories(${PROJECT_SOURCE_DIR}/thirdparty/lib_hash) if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if(${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "arm64") include_directories("/opt/homebrew/include") - include_directories(${PROJECT_SOURCE_DIR}/thirdparty/libpng/arm) - aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/libpng/arm SOURCEFILE) else() include_directories("/usr/local/include") endif() @@ -99,15 +93,15 @@ endif () # ZLIB if(USE_SYSTEM_ZLIB) - find_package(ZLIB REQUIRED) - set(EXTRA_LIBS ${EXTRA_LIBS} ${ZLIB_LIBRARIES}) - set(EXTRA_INCLUDES ${EXTRA_INCLUDES} ${ZLIB_INCLUDE_DIRS}) + find_package(ZLIB REQUIRED) + list(APPEND EXTRA_LIBS ${ZLIB_LIBRARIES}) + list(APPEND EXTRA_INCLUDES ${ZLIB_INCLUDE_DIRS}) else() - include_directories(${PROJECT_SOURCE_DIR}/thirdparty/zlib) -aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/lib_hash/ SOURCEFILE) -aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/libpng/ SOURCEFILE) - aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/zlib/ SOURCEFILE) + include_directories(${PROJECT_SOURCE_DIR}/thirdparty/zlib) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/zlib SOURCEFILE) endif() + + aux_source_directory(${PROJECT_SOURCE_DIR}/lib_ccx/zvbi/ SOURCEFILE) set(UTF8PROC_SOURCE ${PROJECT_SOURCE_DIR}/thirdparty/utf8proc/utf8proc.c) @@ -228,6 +222,36 @@ if (PKG_CONFIG_FOUND AND WITH_HARDSUBX) endif (PKG_CONFIG_FOUND AND WITH_HARDSUBX) # Freetype: system vs bundled +# FreeType: system vs bundled +if(USE_SYSTEM_FREETYPE) + find_package(Freetype REQUIRED) + include_directories(${FREETYPE_INCLUDE_DIRS}) + list(APPEND EXTRA_LIBS ${FREETYPE_LIBRARIES}) +else() + add_definitions(-DFT2_BUILD_LIBRARY) + include_directories(${PROJECT_SOURCE_DIR}/thirdparty/freetype/include) + + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/autofit FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/base FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/bdf FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/cache FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/cff FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/cid FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/gzip FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/lzw FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/pcf FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/pfr FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/psaux FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/pshinter FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/psnames FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/raster FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/sfnt FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/smooth FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/truetype FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/type1 FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/type42 FREETYPE_SOURCE) + aux_source_directory(${PROJECT_SOURCE_DIR}/thirdparty/freetype/winfonts FREETYPE_SOURCE) +endif() add_executable (ccextractor ${SOURCEFILE} ${FREETYPE_SOURCE} ${UTF8PROC_SOURCE}) ########################################################