11#! /bin/bash
22cd ` dirname $0 `
3- 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 -DDISABLE_RUST"
4- [[ $1 = " OCR" ]] && BLD_FLAGS=" $BLD_FLAGS -DENABLE_OCR"
3+
4+ RUST_LIB=" rust/release/libccx_rust.a"
5+ RUST_PROFILE=" --release"
6+ RUST_FEATURES=" "
7+
8+ # Parse command line arguments
9+ while [[ $# -gt 0 ]]; do
10+ case $1 in
11+ OCR)
12+ ENABLE_OCR=true
13+ shift
14+ ;;
15+ -debug)
16+ DEBUG=true
17+ RUST_PROFILE=" "
18+ RUST_LIB=" rust/debug/libccx_rust.a"
19+ shift
20+ ;;
21+ -hardsubx)
22+ HARDSUBX=true
23+ RUST_FEATURES=" --features hardsubx_ocr"
24+ shift
25+ ;;
26+ -* )
27+ echo " Unknown option $1 "
28+ exit 1
29+ ;;
30+ esac
31+ done
32+
33+ 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"
34+
35+ # Add debug flags if needed
36+ if [[ " $DEBUG " == " true" ]]; then
37+ BLD_FLAGS=" $BLD_FLAGS -g -fsanitize=address"
38+ fi
39+
40+ # Add OCR support if requested
41+ if [[ " $ENABLE_OCR " == " true" ]]; then
42+ BLD_FLAGS=" $BLD_FLAGS -DENABLE_OCR"
43+ fi
44+
45+ # Add hardsubx support if requested
46+ if [[ " $HARDSUBX " == " true" ]]; then
47+ BLD_FLAGS=" $BLD_FLAGS -DENABLE_HARDSUBX"
48+ fi
49+
550BLD_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` "
6- [[ $1 = " OCR" ]] && BLD_INCLUDE=" $BLD_INCLUDE ` pkg-config --cflags --silence-errors tesseract` "
51+
52+ if [[ " $ENABLE_OCR " == " true" ]]; then
53+ BLD_INCLUDE=" $BLD_INCLUDE ` pkg-config --cflags --silence-errors tesseract` "
54+ fi
55+
756SRC_CCX=" $( find ../src/lib_ccx -name ' *.c' ) "
857SRC_LIB_HASH=" $( find ../src/thirdparty/lib_hash -name ' *.c' ) "
958SRC_LIBPNG=" $( find ../src/thirdparty/libpng -name ' *.c' ) "
1059SRC_UTF8=" ../src/thirdparty/utf8proc/utf8proc.c"
1160SRC_ZLIB=" $( find ../src/thirdparty/zlib -name ' *.c' ) "
1261SRC_FREETYPE=" ../src/thirdparty/freetype/autofit/autofit.c \
13- ../src/thirdparty/freetype/base/ftbase.c \
14- ../src/thirdparty/freetype/base/ftbbox.c \
15- ../src/thirdparty/freetype/base/ftbdf.c \
16- ../src/thirdparty/freetype/base/ftbitmap.c \
17- ../src/thirdparty/freetype/base/ftcid.c \
18- ../src/thirdparty/freetype/base/ftfntfmt.c \
19- ../src/thirdparty/freetype/base/ftfstype.c \
20- ../src/thirdparty/freetype/base/ftgasp.c \
21- ../src/thirdparty/freetype/base/ftglyph.c \
22- ../src/thirdparty/freetype/base/ftgxval.c \
23- ../src/thirdparty/freetype/base/ftinit.c \
24- ../src/thirdparty/freetype/base/ftlcdfil.c \
25- ../src/thirdparty/freetype/base/ftmm.c \
26- ../src/thirdparty/freetype/base/ftotval.c \
27- ../src/thirdparty/freetype/base/ftpatent.c \
28- ../src/thirdparty/freetype/base/ftpfr.c \
29- ../src/thirdparty/freetype/base/ftstroke.c \
30- ../src/thirdparty/freetype/base/ftsynth.c \
31- ../src/thirdparty/freetype/base/ftsystem.c \
32- ../src/thirdparty/freetype/base/fttype1.c \
33- ../src/thirdparty/freetype/base/ftwinfnt.c \
34- ../src/thirdparty/freetype/bdf/bdf.c \
35- ../src/thirdparty/freetype/bzip2/ftbzip2.c \
36- ../src/thirdparty/freetype/cache/ftcache.c \
37- ../src/thirdparty/freetype/cff/cff.c \
38- ../src/thirdparty/freetype/cid/type1cid.c \
39- ../src/thirdparty/freetype/gzip/ftgzip.c \
40- ../src/thirdparty/freetype/lzw/ftlzw.c \
41- ../src/thirdparty/freetype/pcf/pcf.c \
42- ../src/thirdparty/freetype/pfr/pfr.c \
43- ../src/thirdparty/freetype/psaux/psaux.c \
44- ../src/thirdparty/freetype/pshinter/pshinter.c \
45- ../src/thirdparty/freetype/psnames/psnames.c \
46- ../src/thirdparty/freetype/raster/raster.c \
47- ../src/thirdparty/freetype/sfnt/sfnt.c \
48- ../src/thirdparty/freetype/smooth/smooth.c \
49- ../src/thirdparty/freetype/truetype/truetype.c \
50- ../src/thirdparty/freetype/type1/type1.c \
51- ../src/thirdparty/freetype/type42/type42.c \
52- ../src/thirdparty/freetype/winfonts/winfnt.c"
53- BLD_SOURCES=" ../src/ccextractor.c $SRC_API $SRC_CCX $SRC_LIB_HASH $SRC_LIBPNG $SRC_UTF8 $SRC_ZLIB $SRC_ZVBI $SRC_FREETYPE "
54- BLD_LINKER=" -lm -liconv -lpthread -ldl ` pkg-config --libs --silence-errors tesseract` ` pkg-config --libs --silence-errors gpac` "
55- [[ $1 = " OCR" ]] && BLD_LINKER=" $BLD_LINKER ` pkg-config --libs --silence-errors tesseract` ` pkg-config --libs --silence-errors lept` "
62+ ../src/thirdparty/freetype/base/ftbase.c \
63+ ../src/thirdparty/freetype/base/ftbbox.c \
64+ ../src/thirdparty/freetype/base/ftbdf.c \
65+ ../src/thirdparty/freetype/base/ftbitmap.c \
66+ ../src/thirdparty/freetype/base/ftcid.c \
67+ ../src/thirdparty/freetype/base/ftfntfmt.c \
68+ ../src/thirdparty/freetype/base/ftfstype.c \
69+ ../src/thirdparty/freetype/base/ftgasp.c \
70+ ../src/thirdparty/freetype/base/ftglyph.c \
71+ ../src/thirdparty/freetype/base/ftgxval.c \
72+ ../src/thirdparty/freetype/base/ftinit.c \
73+ ../src/thirdparty/freetype/base/ftlcdfil.c \
74+ ../src/thirdparty/freetype/base/ftmm.c \
75+ ../src/thirdparty/freetype/base/ftotval.c \
76+ ../src/thirdparty/freetype/base/ftpatent.c \
77+ ../src/thirdparty/freetype/base/ftpfr.c \
78+ ../src/thirdparty/freetype/base/ftstroke.c \
79+ ../src/thirdparty/freetype/base/ftsynth.c \
80+ ../src/thirdparty/freetype/base/ftsystem.c \
81+ ../src/thirdparty/freetype/base/fttype1.c \
82+ ../src/thirdparty/freetype/base/ftwinfnt.c \
83+ ../src/thirdparty/freetype/bdf/bdf.c \
84+ ../src/thirdparty/freetype/bzip2/ftbzip2.c \
85+ ../src/thirdparty/freetype/cache/ftcache.c \
86+ ../src/thirdparty/freetype/cff/cff.c \
87+ ../src/thirdparty/freetype/cid/type1cid.c \
88+ ../src/thirdparty/freetype/gzip/ftgzip.c \
89+ ../src/thirdparty/freetype/lzw/ftlzw.c \
90+ ../src/thirdparty/freetype/pcf/pcf.c \
91+ ../src/thirdparty/freetype/pfr/pfr.c \
92+ ../src/thirdparty/freetype/psaux/psaux.c \
93+ ../src/thirdparty/freetype/pshinter/pshinter.c \
94+ ../src/thirdparty/freetype/psnames/psnames.c \
95+ ../src/thirdparty/freetype/raster/raster.c \
96+ ../src/thirdparty/freetype/sfnt/sfnt.c \
97+ ../src/thirdparty/freetype/smooth/smooth.c \
98+ ../src/thirdparty/freetype/truetype/truetype.c \
99+ ../src/thirdparty/freetype/type1/type1.c \
100+ ../src/thirdparty/freetype/type42/type42.c \
101+ ../src/thirdparty/freetype/winfonts/winfnt.c"
102+
103+ BLD_SOURCES=" ../src/ccextractor.c $SRC_CCX $SRC_LIB_HASH $SRC_LIBPNG $SRC_UTF8 $SRC_ZLIB $SRC_FREETYPE "
104+
105+ BLD_LINKER=" -lm -liconv -lpthread -ldl ` pkg-config --libs --silence-errors gpac` "
106+
107+ if [[ " $ENABLE_OCR " == " true" ]]; then
108+ BLD_LINKER=" $BLD_LINKER ` pkg-config --libs --silence-errors tesseract` ` pkg-config --libs --silence-errors lept` "
109+ fi
110+
111+ if [[ " $HARDSUBX " == " true" ]]; then
112+ BLD_LINKER=" $BLD_LINKER -lswscale -lavutil -pthread -lavformat -lavcodec -lavfilter"
113+ fi
56114
115+ echo " Running pre-build script..."
57116./pre-build.sh
58- gcc $BLD_FLAGS $BLD_INCLUDE -o ccextractor $BLD_SOURCES $BLD_LINKER
117+ echo " Trying to compile..."
118+
119+ # Check for cargo
120+ echo " Checking for cargo..."
121+ if ! [ -x " $( command -v cargo) " ]; then
122+ echo ' Error: cargo is not installed.' >&2
123+ exit 1
124+ fi
125+
126+ # Check rust version
127+ rustc_version=" $( rustc --version) "
128+ semver=( ${rustc_version// ./ } )
129+ version=" ${semver[1]} .${semver[2]} .${semver[3]} "
130+ MSRV=" 1.54.0"
131+ if [ " $( printf ' %s\n' " $MSRV " " $version " | sort -V | head -n1) " = " $MSRV " ]; then
132+ echo " rustc >= MSRV(${MSRV} )"
133+ else
134+ echo " Minimum supported rust version(MSRV) is ${MSRV} , please upgrade rust"
135+ exit 1
136+ fi
137+
138+ echo " Building rust files..."
139+ (cd ../src/rust && CARGO_TARGET_DIR=../../mac/rust cargo build $RUST_PROFILE $RUST_FEATURES ) || { echo " Failed building Rust components." ; exit 1; }
140+
141+ # Copy the Rust library
142+ cp $RUST_LIB ./libccx_rust.a
143+
144+ # Add Rust library to linker flags
145+ BLD_LINKER=" $BLD_LINKER ./libccx_rust.a"
146+
147+ echo " Building ccextractor"
148+ out=$(( LC_ALL= C gcc $BLD_FLAGS $BLD_INCLUDE - o ccextractor $BLD_SOURCES $BLD_LINKER ) 2 >& 1 )
149+ res=$?
150+
151+ # Handle common error cases
152+ if [[ $out == *"gcc: command not found"* ]]; then
153+ echo "Error: please install gcc or Xcode command line tools"
154+ exit 1
155+ fi
156+
157+ if [[ $out == *"curl.h: No such file or directory"* ]]; then
158+ echo "Error: please install curl development library"
159+ exit 2
160+ fi
161+
162+ if [[ $out == *"capi.h: No such file or directory"* ]]; then
163+ echo "Error: please install tesseract development library"
164+ exit 3
165+ fi
166+
167+ if [[ $out == *"allheaders.h: No such file or directory"* ]]; then
168+ echo "Error: please install leptonica development library"
169+ exit 4
170+ fi
171+
172+ if [[ $res -ne 0 ]]; then # Unknown error
173+ echo "Compiled with errors"
174+ >&2 echo "$out "
175+ exit 5
176+ fi
177+
178+ if [[ "$out " != "" ]]; then
179+ echo "$out "
180+ echo "Compilation successful, compiler message shown in previous lines"
181+ else
182+ echo "Compilation successful, no compiler messages."
183+ fi
0 commit comments