Skip to content

Commit 059be2f

Browse files
authored
Merge branch 'CCExtractor:master' into feature/split-dvb-subs
2 parents 34e398a + 87c8984 commit 059be2f

File tree

16 files changed

+627
-176
lines changed

16 files changed

+627
-176
lines changed

.github/workflows/build_mac.yml

Lines changed: 63 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,19 @@ jobs:
4242
with:
4343
name: CCExtractor mac build
4444
path: ./mac/artifacts
45+
build_shell_system_libs:
46+
# Test building with system libraries via pkg-config (for Homebrew formula compatibility)
47+
runs-on: macos-latest
48+
steps:
49+
- name: Install dependencies
50+
run: brew install pkg-config autoconf automake libtool tesseract leptonica gpac freetype libpng protobuf-c utf8proc zlib
51+
- uses: actions/checkout@v6
52+
- name: build with system libs
53+
run: ./build.command -system-libs
54+
working-directory: ./mac
55+
- name: Display version information
56+
run: ./ccextractor --version
57+
working-directory: ./mac
4558
build_autoconf:
4659
runs-on: macos-latest
4760
steps:
@@ -90,11 +103,59 @@ jobs:
90103
working-directory: build
91104
- name: Display version information
92105
run: ./build/ccextractor --version
106+
build_shell_hardsubx:
107+
# Test build.command with -hardsubx flag (burned-in subtitle extraction)
108+
runs-on: macos-latest
109+
steps:
110+
- name: Install dependencies
111+
run: brew install pkg-config autoconf automake libtool tesseract leptonica gpac ffmpeg
112+
- uses: actions/checkout@v6
113+
- name: build with hardsubx
114+
run: ./build.command -hardsubx
115+
working-directory: ./mac
116+
- name: Display version information
117+
run: ./ccextractor --version
118+
working-directory: ./mac
119+
- name: Verify hardsubx support
120+
run: |
121+
# Check that -hardsubx is recognized (will fail if not compiled in)
122+
./ccextractor -hardsubx --help 2>&1 | head -20 || true
123+
working-directory: ./mac
124+
build_autoconf_hardsubx:
125+
# Test autoconf build with HARDSUBX enabled (fixes issue #1173)
126+
runs-on: macos-latest
127+
steps:
128+
- uses: actions/checkout@v6
129+
- name: Install dependencies
130+
run: brew install pkg-config autoconf automake libtool tesseract leptonica gpac ffmpeg
131+
- name: run autogen
132+
run: ./autogen.sh
133+
working-directory: ./mac
134+
- name: configure with hardsubx
135+
run: |
136+
# Set Homebrew paths for configure to find libraries
137+
export HOMEBREW_PREFIX="$(brew --prefix)"
138+
export LDFLAGS="-L${HOMEBREW_PREFIX}/lib"
139+
export CPPFLAGS="-I${HOMEBREW_PREFIX}/include"
140+
export PKG_CONFIG_PATH="${HOMEBREW_PREFIX}/lib/pkgconfig"
141+
./configure --enable-hardsubx --enable-ocr
142+
working-directory: ./mac
143+
- name: make
144+
run: make
145+
working-directory: ./mac
146+
- name: Display version information
147+
run: ./ccextractor --version
148+
working-directory: ./mac
149+
- name: Verify hardsubx support
150+
run: |
151+
# Check that -hardsubx is recognized
152+
./ccextractor -hardsubx --help 2>&1 | head -20 || true
153+
working-directory: ./mac
93154
build_rust:
94155
runs-on: macos-latest
95156
steps:
96157
- uses: actions/checkout@v6
97-
- name: cache
158+
- name: cache
98159
uses: actions/cache@v5
99160
with:
100161
path: |
@@ -108,5 +169,5 @@ jobs:
108169
toolchain: stable
109170
override: true
110171
- name: build
111-
run: cargo build
172+
run: cargo build
112173
working-directory: ./src/rust

docs/HARDSUBX.txt

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,32 @@ To build the program with hardsubx support,
5454

5555
NOTE: The build has been tested with FFMpeg version 3.1.0, and Tesseract 3.04.
5656

57+
macOS
58+
-----
59+
60+
Install the required dependencies using Homebrew:
61+
brew install tesseract leptonica ffmpeg
62+
63+
To build the program with hardsubx support, use one of these methods:
64+
65+
== Using build.command (Recommended):
66+
cd ccextractor/mac
67+
./build.command -hardsubx
68+
69+
== Using autoconf:
70+
cd ccextractor/mac
71+
./autogen.sh
72+
./configure --enable-hardsubx --enable-ocr
73+
make
74+
75+
== Using cmake:
76+
cd ccextractor
77+
mkdir build && cd build
78+
cmake -DWITH_OCR=ON -DWITH_HARDSUBX=ON ../src/
79+
make
80+
81+
NOTE: The -hardsubx parameter uses a single dash (not --hardsubx).
82+
5783
Windows
5884
-------
5985

linux/build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ BLD_INCLUDE="-I../src -I /usr/include/leptonica/ -I /usr/include/tesseract/ -I..
4040
SRC_LIBPNG="$(find ../src/thirdparty/libpng/ -name '*.c')"
4141
SRC_ZLIB="$(find ../src/thirdparty/zlib/ -name '*.c')"
4242
SRC_CCX="$(find ../src/lib_ccx/ -name '*.c')"
43-
SRC_GPAC="$(find /usr/include/gpac/ -name '*.c')"
43+
SRC_GPAC="$(find /usr/include/gpac/ -name '*.c' 2>/dev/null)"
4444
SRC_HASH="$(find ../src/thirdparty/lib_hash/ -name '*.c')"
4545
SRC_UTF8PROC="../src/thirdparty/utf8proc/utf8proc.c"
4646
SRC_FREETYPE="../src/thirdparty/freetype/autofit/autofit.c

linux/configure.ac

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ AC_CHECK_LIB([avformat], [avformat_version], [HAS_AVFORMAT=1 && PKG_CHECK_MODULE
3232
AC_CHECK_LIB([avutil], [avutil_version], [HAS_AVUTIL=1 && PKG_CHECK_MODULES([libavutil], [libavutil])], [HAS_AVUTIL=0])
3333
AC_CHECK_LIB([swscale], [swscale_version], [HAS_SWSCALE=1 && PKG_CHECK_MODULES([libswscale], [libswscale])], [HAS_SWSCALE=0])
3434

35+
# Check for GPAC library (required for MP4 support)
36+
PKG_CHECK_MODULES([gpac], [gpac], [HAS_GPAC=1], [HAS_GPAC=0])
37+
AS_IF([test $HAS_GPAC -eq 0],
38+
[AC_MSG_ERROR([GPAC library not found. Install gpac-devel (Fedora/RHEL), libgpac-dev (Debian/Ubuntu), or gpac (Arch) before proceeding.])])
39+
3540
# Checks for header files.
3641
AC_CHECK_HEADERS([arpa/inet.h fcntl.h float.h inttypes.h limits.h locale.h malloc.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h string.h sys/socket.h sys/time.h sys/timeb.h termios.h unistd.h wchar.h])
3742

@@ -149,7 +154,7 @@ AS_IF([ (test x$ocr = xtrue || test x$hardsubx = xtrue) && test ! $HAS_LEPT -gt
149154
AM_CONDITIONAL(HARDSUBX_IS_ENABLED, [ test x$hardsubx = xtrue ])
150155
AM_CONDITIONAL(OCR_IS_ENABLED, [ test x$ocr = xtrue || test x$hardsubx = xtrue ])
151156
AM_CONDITIONAL(FFMPEG_IS_ENABLED, [ test x$ffmpeg = xtrue ])
152-
AM_CONDITIONAL(TESSERACT_PRESENT, [ test ! -z $(pkg-config --libs-only-l --silence-errors tesseract) ])
157+
AM_CONDITIONAL(TESSERACT_PRESENT, [ test ! -z "$(pkg-config --libs-only-l --silence-errors tesseract)" ])
153158
AM_CONDITIONAL(TESSERACT_PRESENT_RPI, [ test -d "/usr/include/tesseract" && test $(ls -A /usr/include/tesseract | wc -l) -gt 0 ])
154159
AM_CONDITIONAL(SYS_IS_LINUX, [ test $(uname -s) = "Linux"])
155160
AM_CONDITIONAL(SYS_IS_MAC, [ test $(uname -s) = "Darwin"])

mac/build.command

Lines changed: 88 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,25 @@ while [[ $# -gt 0 ]]; do
2929
fi
3030
shift
3131
;;
32+
-system-libs)
33+
# Use system-installed libraries via pkg-config instead of bundled ones
34+
# This is required for Homebrew formula compatibility
35+
USE_SYSTEM_LIBS=true
36+
shift
37+
;;
3238
-*)
3339
echo "Unknown option $1"
3440
exit 1
3541
;;
3642
esac
3743
done
3844

39-
BLD_FLAGS="-std=gnu99 -Wno-write-strings -Wno-pointer-sign -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -Dfopen64=fopen -Dopen64=open -Dlseek64=lseek -DFT2_BUILD_LIBRARY -DGPAC_DISABLE_VTT -DGPAC_DISABLE_OD_DUMP -DGPAC_DISABLE_REMOTERY -DNO_GZIP"
45+
BLD_FLAGS="-std=gnu99 -Wno-write-strings -Wno-pointer-sign -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -Dfopen64=fopen -Dopen64=open -Dlseek64=lseek"
46+
47+
# Add flags for bundled libraries (not needed when using system libs)
48+
if [[ "$USE_SYSTEM_LIBS" != "true" ]]; then
49+
BLD_FLAGS="$BLD_FLAGS -DFT2_BUILD_LIBRARY -DGPAC_DISABLE_VTT -DGPAC_DISABLE_OD_DUMP -DGPAC_DISABLE_REMOTERY -DNO_GZIP"
50+
fi
4051

4152
# Add debug flags if needed
4253
if [[ "$DEBUG" == "true" ]]; then
@@ -53,7 +64,21 @@ if [[ "$HARDSUBX" == "true" ]]; then
5364
BLD_FLAGS="$BLD_FLAGS -DENABLE_HARDSUBX"
5465
fi
5566

56-
BLD_INCLUDE="-I../src/ -I../src/lib_ccx -I../src/lib_hash -I../src/thirdparty/libpng -I../src/thirdparty -I../src/thirdparty/zlib -I../src/thirdparty/freetype/include `pkg-config --cflags --silence-errors gpac`"
67+
# Set up include paths based on whether we're using system libs or bundled
68+
if [[ "$USE_SYSTEM_LIBS" == "true" ]]; then
69+
# Use system libraries via pkg-config (for Homebrew compatibility)
70+
# Note: -I../src/thirdparty/lib_hash is needed so that "../lib_hash/sha2.h" resolves correctly
71+
# (the .. goes up from lib_hash to thirdparty, then lib_hash/sha2.h finds the file)
72+
BLD_INCLUDE="-I../src/ -I../src/lib_ccx -I../src/thirdparty/lib_hash -I../src/thirdparty"
73+
BLD_INCLUDE="$BLD_INCLUDE $(pkg-config --cflags --silence-errors freetype2)"
74+
BLD_INCLUDE="$BLD_INCLUDE $(pkg-config --cflags --silence-errors gpac)"
75+
BLD_INCLUDE="$BLD_INCLUDE $(pkg-config --cflags --silence-errors libpng)"
76+
BLD_INCLUDE="$BLD_INCLUDE $(pkg-config --cflags --silence-errors libprotobuf-c)"
77+
BLD_INCLUDE="$BLD_INCLUDE $(pkg-config --cflags --silence-errors libutf8proc)"
78+
else
79+
# Use bundled libraries (default for standalone builds)
80+
BLD_INCLUDE="-I../src/ -I../src/lib_ccx -I../src/thirdparty/lib_hash -I../src/thirdparty/libpng -I../src/thirdparty -I../src/thirdparty/zlib -I../src/thirdparty/freetype/include $(pkg-config --cflags --silence-errors gpac)"
81+
fi
5782

5883
# Add FFmpeg include path for Mac
5984
if [[ -d "/opt/homebrew/Cellar/ffmpeg" ]]; then
@@ -108,54 +133,69 @@ fi
108133

109134
SRC_CCX="$(find ../src/lib_ccx -name '*.c')"
110135
SRC_LIB_HASH="$(find ../src/thirdparty/lib_hash -name '*.c')"
111-
SRC_LIBPNG="$(find ../src/thirdparty/libpng -name '*.c')"
112-
SRC_UTF8="../src/thirdparty/utf8proc/utf8proc.c"
113-
SRC_ZLIB="$(find ../src/thirdparty/zlib -name '*.c')"
114-
SRC_FREETYPE="../src/thirdparty/freetype/autofit/autofit.c \
115-
../src/thirdparty/freetype/base/ftbase.c \
116-
../src/thirdparty/freetype/base/ftbbox.c \
117-
../src/thirdparty/freetype/base/ftbdf.c \
118-
../src/thirdparty/freetype/base/ftbitmap.c \
119-
../src/thirdparty/freetype/base/ftcid.c \
120-
../src/thirdparty/freetype/base/ftfntfmt.c \
121-
../src/thirdparty/freetype/base/ftfstype.c \
122-
../src/thirdparty/freetype/base/ftgasp.c \
123-
../src/thirdparty/freetype/base/ftglyph.c \
124-
../src/thirdparty/freetype/base/ftgxval.c \
125-
../src/thirdparty/freetype/base/ftinit.c \
126-
../src/thirdparty/freetype/base/ftlcdfil.c \
127-
../src/thirdparty/freetype/base/ftmm.c \
128-
../src/thirdparty/freetype/base/ftotval.c \
129-
../src/thirdparty/freetype/base/ftpatent.c \
130-
../src/thirdparty/freetype/base/ftpfr.c \
131-
../src/thirdparty/freetype/base/ftstroke.c \
132-
../src/thirdparty/freetype/base/ftsynth.c \
133-
../src/thirdparty/freetype/base/ftsystem.c \
134-
../src/thirdparty/freetype/base/fttype1.c \
135-
../src/thirdparty/freetype/base/ftwinfnt.c \
136-
../src/thirdparty/freetype/bdf/bdf.c \
137-
../src/thirdparty/freetype/bzip2/ftbzip2.c \
138-
../src/thirdparty/freetype/cache/ftcache.c \
139-
../src/thirdparty/freetype/cff/cff.c \
140-
../src/thirdparty/freetype/cid/type1cid.c \
141-
../src/thirdparty/freetype/gzip/ftgzip.c \
142-
../src/thirdparty/freetype/lzw/ftlzw.c \
143-
../src/thirdparty/freetype/pcf/pcf.c \
144-
../src/thirdparty/freetype/pfr/pfr.c \
145-
../src/thirdparty/freetype/psaux/psaux.c \
146-
../src/thirdparty/freetype/pshinter/pshinter.c \
147-
../src/thirdparty/freetype/psnames/psnames.c \
148-
../src/thirdparty/freetype/raster/raster.c \
149-
../src/thirdparty/freetype/sfnt/sfnt.c \
150-
../src/thirdparty/freetype/smooth/smooth.c \
151-
../src/thirdparty/freetype/truetype/truetype.c \
152-
../src/thirdparty/freetype/type1/type1.c \
153-
../src/thirdparty/freetype/type42/type42.c \
154-
../src/thirdparty/freetype/winfonts/winfnt.c"
155136

156-
BLD_SOURCES="../src/ccextractor.c $SRC_CCX $SRC_LIB_HASH $SRC_LIBPNG $SRC_UTF8 $SRC_ZLIB $SRC_FREETYPE"
137+
# Set up sources and linker based on whether we're using system libs or bundled
138+
if [[ "$USE_SYSTEM_LIBS" == "true" ]]; then
139+
# Use system libraries - don't compile bundled sources
140+
BLD_SOURCES="../src/ccextractor.c $SRC_CCX $SRC_LIB_HASH"
141+
142+
BLD_LINKER="-lm -liconv -lpthread -ldl"
143+
BLD_LINKER="$BLD_LINKER $(pkg-config --libs --silence-errors freetype2)"
144+
BLD_LINKER="$BLD_LINKER $(pkg-config --libs --silence-errors gpac)"
145+
BLD_LINKER="$BLD_LINKER $(pkg-config --libs --silence-errors libpng)"
146+
BLD_LINKER="$BLD_LINKER $(pkg-config --libs --silence-errors libprotobuf-c)"
147+
BLD_LINKER="$BLD_LINKER $(pkg-config --libs --silence-errors libutf8proc)"
148+
BLD_LINKER="$BLD_LINKER $(pkg-config --libs --silence-errors zlib)"
149+
else
150+
# Use bundled libraries (default)
151+
SRC_LIBPNG="$(find ../src/thirdparty/libpng -name '*.c')"
152+
SRC_UTF8="../src/thirdparty/utf8proc/utf8proc.c"
153+
SRC_ZLIB="$(find ../src/thirdparty/zlib -name '*.c')"
154+
SRC_FREETYPE="../src/thirdparty/freetype/autofit/autofit.c \
155+
../src/thirdparty/freetype/base/ftbase.c \
156+
../src/thirdparty/freetype/base/ftbbox.c \
157+
../src/thirdparty/freetype/base/ftbdf.c \
158+
../src/thirdparty/freetype/base/ftbitmap.c \
159+
../src/thirdparty/freetype/base/ftcid.c \
160+
../src/thirdparty/freetype/base/ftfntfmt.c \
161+
../src/thirdparty/freetype/base/ftfstype.c \
162+
../src/thirdparty/freetype/base/ftgasp.c \
163+
../src/thirdparty/freetype/base/ftglyph.c \
164+
../src/thirdparty/freetype/base/ftgxval.c \
165+
../src/thirdparty/freetype/base/ftinit.c \
166+
../src/thirdparty/freetype/base/ftlcdfil.c \
167+
../src/thirdparty/freetype/base/ftmm.c \
168+
../src/thirdparty/freetype/base/ftotval.c \
169+
../src/thirdparty/freetype/base/ftpatent.c \
170+
../src/thirdparty/freetype/base/ftpfr.c \
171+
../src/thirdparty/freetype/base/ftstroke.c \
172+
../src/thirdparty/freetype/base/ftsynth.c \
173+
../src/thirdparty/freetype/base/ftsystem.c \
174+
../src/thirdparty/freetype/base/fttype1.c \
175+
../src/thirdparty/freetype/base/ftwinfnt.c \
176+
../src/thirdparty/freetype/bdf/bdf.c \
177+
../src/thirdparty/freetype/bzip2/ftbzip2.c \
178+
../src/thirdparty/freetype/cache/ftcache.c \
179+
../src/thirdparty/freetype/cff/cff.c \
180+
../src/thirdparty/freetype/cid/type1cid.c \
181+
../src/thirdparty/freetype/gzip/ftgzip.c \
182+
../src/thirdparty/freetype/lzw/ftlzw.c \
183+
../src/thirdparty/freetype/pcf/pcf.c \
184+
../src/thirdparty/freetype/pfr/pfr.c \
185+
../src/thirdparty/freetype/psaux/psaux.c \
186+
../src/thirdparty/freetype/pshinter/pshinter.c \
187+
../src/thirdparty/freetype/psnames/psnames.c \
188+
../src/thirdparty/freetype/raster/raster.c \
189+
../src/thirdparty/freetype/sfnt/sfnt.c \
190+
../src/thirdparty/freetype/smooth/smooth.c \
191+
../src/thirdparty/freetype/truetype/truetype.c \
192+
../src/thirdparty/freetype/type1/type1.c \
193+
../src/thirdparty/freetype/type42/type42.c \
194+
../src/thirdparty/freetype/winfonts/winfnt.c"
157195

158-
BLD_LINKER="-lm -liconv -lpthread -ldl `pkg-config --libs --silence-errors gpac`"
196+
BLD_SOURCES="../src/ccextractor.c $SRC_CCX $SRC_LIB_HASH $SRC_LIBPNG $SRC_UTF8 $SRC_ZLIB $SRC_FREETYPE"
197+
BLD_LINKER="-lm -liconv -lpthread -ldl $(pkg-config --libs --silence-errors gpac)"
198+
fi
159199

160200
if [[ "$ENABLE_OCR" == "true" ]]; then
161201
BLD_LINKER="$BLD_LINKER `pkg-config --libs --silence-errors tesseract` `pkg-config --libs --silence-errors lept`"

mac/configure.ac

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ fi
2525

2626
# Checks for libraries.
2727
AC_CHECK_LIB([m], [sin], [], [AC_MSG_ERROR(Math library not installed. Install it before proceeding.)])
28-
AC_CHECK_LIB([lept], [getLeptonicaVersion], [HAS_LEPT=1 && PKG_CHECK_MODULES([lept], [lept])], [HAS_LEPT=0])
28+
AC_CHECK_LIB([leptonica], [getLeptonicaVersion], [HAS_LEPT=1 && PKG_CHECK_MODULES([lept], [lept])], [HAS_LEPT=0])
2929
AC_CHECK_LIB([tesseract], [TessVersion], [HAS_TESSERACT=1 && PKG_CHECK_MODULES([tesseract], [tesseract])], [HAS_TESSERACT=0])
3030
AC_CHECK_LIB([avcodec], [avcodec_version], [HAS_AVCODEC=1 && PKG_CHECK_MODULES([libavcodec], [libavcodec])], [HAS_AVCODEC=0])
3131
AC_CHECK_LIB([avformat], [avformat_version], [HAS_AVFORMAT=1 && PKG_CHECK_MODULES([libavformat], [libavformat])], [HAS_AVFORMAT=0])
@@ -148,7 +148,7 @@ AS_IF([ (test x$ocr = xtrue || test x$hardsubx = xtrue) && test ! $HAS_LEPT -gt
148148
AM_CONDITIONAL(HARDSUBX_IS_ENABLED, [ test x$hardsubx = xtrue ])
149149
AM_CONDITIONAL(OCR_IS_ENABLED, [ test x$ocr = xtrue || test x$hardsubx = xtrue ])
150150
AM_CONDITIONAL(FFMPEG_IS_ENABLED, [ test x$ffmpeg = xtrue ])
151-
AM_CONDITIONAL(TESSERACT_PRESENT, [ test ! -z $(pkg-config --libs-only-l --silence-errors tesseract) ])
151+
AM_CONDITIONAL(TESSERACT_PRESENT, [ test ! -z "$(pkg-config --libs-only-l --silence-errors tesseract)" ])
152152
AM_CONDITIONAL(TESSERACT_PRESENT_RPI, [ test -d "/usr/include/tesseract" && test $(ls -A /usr/include/tesseract | wc -l) -gt 0 ])
153153
AM_CONDITIONAL(SYS_IS_LINUX, [ test $(uname -s) = "Linux"])
154154
AM_CONDITIONAL(SYS_IS_MAC, [ test $(uname -s) = "Darwin"])

0 commit comments

Comments
 (0)