1
1
#! /bin/bash
2
2
cd ` 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
+
5
50
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` "
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
+
7
56
SRC_CCX=" $( find ../src/lib_ccx -name ' *.c' ) "
8
57
SRC_LIB_HASH=" $( find ../src/thirdparty/lib_hash -name ' *.c' ) "
9
58
SRC_LIBPNG=" $( find ../src/thirdparty/libpng -name ' *.c' ) "
10
59
SRC_UTF8=" ../src/thirdparty/utf8proc/utf8proc.c"
11
60
SRC_ZLIB=" $( find ../src/thirdparty/zlib -name ' *.c' ) "
12
61
SRC_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
56
114
115
+ echo " Running pre-build script..."
57
116
./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