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