0
votes

I'm trying to convert the build mechanism of ccextractor (Open source closed caption extractor) from custom Makefile to Autotools generated Makefile.

Supplied Makefile looks like this:

SHELL = /bin/sh

CC = gcc
SYS := $(shell gcc -dumpmachine)
CFLAGS = -O3 -std=gnu99 -s
INCLUDE = -Isrc/gpacmp4/ -Isrc/libpng -Isrc/lib_hash -Isrc/protobuf-c -Isrc/zlib -Isrc/lib_ccx -Isrc/.
INCLUDE += -Isrc/zvbi -Isrc/utf8proc
ALL_FLAGS = -Wno-write-strings -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT
LDFLAGS = -lm

ifneq (, $(findstring linux, $(SYS)))
CFLAGS +=-DGPAC_CONFIG_LINUX
endif
TARGET = ccextractor

OBJS_DIR = objs
VPATH = src:src/gpacmp4:src/libpng:src/zlib:src/lib_ccx:src/zvbi:src/lib_hash:src/utf8proc:src/protobuf-c

SRCS_DIR = src
SRCS_C = $(wildcard $(SRCS_DIR)/*.c)
OBJS = $(SRCS_C:$(SRCS_DIR)/%.c=$(OBJS_DIR)/%.o)

SRCS_CCX_DIR = $(SRCS_DIR)/lib_ccx
SRCS_CCX = $(wildcard $(SRCS_CCX_DIR)/*.c)
OBJS_CCX = $(SRCS_CCX:$(SRCS_CCX_DIR)/%.c=$(OBJS_DIR)/%.o)

SRCS_PNG_DIR = $(SRCS_DIR)/libpng
SRCS_PNG = $(wildcard $(SRCS_PNG_DIR)/*.c)
OBJS_PNG = $(SRCS_PNG:$(SRCS_PNG_DIR)/%.c=$(OBJS_DIR)/%.o)

SRCS_ZVBI_DIR = $(SRCS_DIR)/zvbi
SRCS_ZVBI = $(wildcard $(SRCS_ZVBI_DIR)/*.c)
OBJS_ZVBI = $(SRCS_ZVBI:$(SRCS_ZVBI_DIR)/%.c=$(OBJS_DIR)/%.o)

SRCS_GPACMP4_DIR = $(SRCS_DIR)/gpacmp4
SRCS_GPACMP4_C = $(wildcard $(SRCS_GPACMP4_DIR)/*.c)
SRCS_GPACMP4_CPP = $(wildcard $(SRCS_GPACMP4_DIR)/*.cpp)
OBJS_GPACMP4 = $(SRCS_GPACMP4_C:$(SRCS_GPACMP4_DIR)/%.c=$(OBJS_DIR)/%.o) \
               $(SRCS_GPACMP4_CPP:$(SRCS_GPACMP4_DIR)/%.cpp=$(OBJS_DIR)/%.o)

SRCS_ZLIB_DIR = $(SRCS_DIR)/zlib
SRCS_ZLIB = $(wildcard $(SRCS_ZLIB_DIR)/*.c)
OBJS_ZLIB = $(SRCS_ZLIB:$(SRCS_ZLIB_DIR)/%.c=$(OBJS_DIR)/%.o)

SRCS_HASH_DIR = $(SRCS_DIR)/lib_hash
SRCS_HASH = $(wildcard $(SRCS_HASH_DIR)/*.c)
OBJS_HASH = $(SRCS_HASH:$(SRCS_HASH_DIR)/%.c=$(OBJS_DIR)/%.o)

SRCS_UTF8_DIR = $(SRCS_DIR)/utf8proc
SRCS_UTF8 = $(SRCS_UTF8_DIR)/utf8proc.c
OBJS_UTF8 = $(SRCS_UTF8:$(SRCS_UTF8_DIR)/%.c=$(OBJS_DIR)/%.o)

INSTLALL = cp -f -p
INSTLALL_PROGRAM = $(INSTLALL)
DESTDIR = /usr/bin

ifeq ($(ENABLE_HARDSUBX),yes)
ENABLE_OCR=yes
CFLAGS+=-DENABLE_HARDSUBX
CFLAGS+= $(shell pkg-config --cflags libavcodec)
CFLAGS+= $(shell pkg-config --cflags libavformat)
CFLAGS+= $(shell pkg-config --cflags libavutil)
CFLAGS+= $(shell pkg-config --cflags libswscale)
AV_LDFLAGS+= $(shell pkg-config --libs libavcodec )
AV_LDFLAGS+= $(shell pkg-config --libs libavformat )
AV_LDFLAGS+= $(shell pkg-config --libs libavutil )
AV_LDFLAGS+= $(shell pkg-config --libs libswscale )
ifeq ($(AV_LDFLAGS),$(EMPTY))
$(error **ERROR** "libav not found")
else
$(info "libav found")
endif
LDFLAGS+= $(AV_LDFLAGS)
endif

ifeq ($(ENABLE_OCR),yes)
CFLAGS+=-DENABLE_OCR -DPNG_NO_CONFIG_H
LEPT_LDFLAGS+= $(shell pkg-config --libs lept)

ifneq ($(shell pkg-config --exists tesseract), $(EMPTY))
TESS_LDFLAGS+= $(shell pkg-config --libs tesseract)
TESS_CFLAGS+= $(shell pkg-config --cflags tesseract)
else
#fix for raspberry pi not having a pkgconfig file for tesseract
ifneq ($(wildcard /usr/include/tesseract/*),$(EMPTY))
TESS_LDFLAGS+= -ltesseract
TESS_CFLAGS+= -I/usr/include/tesseract
endif
endif

#error checking of library are there or not
ifeq ($(TESS_LDFLAGS),$(EMPTY))
$(error **ERROR** "tesseract not found")
else
#TODO print the version of library found
$(info  "tesseract found")
endif

ifeq ($(LEPT_LDFLAGS),$(EMPTY))
$(error **ERROR** "leptonica not found")
else
#TODO print the version of library found
$(info  "Leptonica found")
endif

CFLAGS  += $(TESS_CFLAGS)
CFLAGS  += $(shell pkg-config --cflags lept)
LDFLAGS += $(TESS_LDFLAGS)
LDFLAGS += $(LEPT_LDFLAGS)
endif


ifeq ($(ENABLE_FFMPEG),yes)
CFLAGS+=-DENABLE_FFMPEG
CFLAGS+= $(shell pkg-config --cflags libavcodec)
CFLAGS+= $(shell pkg-config --cflags libavformat)
CFLAGS+= $(shell pkg-config --cflags libavutil)
LDFLAGS+= $(shell pkg-config --libs libavcodec )
LDFLAGS+= $(shell pkg-config --libs libavformat )
LDFLAGS+= $(shell pkg-config --libs libavutil )
endif

.PHONY: all
all: pre-build objs_dir $(TARGET) 

.PHONY: objs_dir
objs_dir: 
    mkdir -p $(OBJS_DIR)

$(TARGET): $(OBJS) $(OBJS_PNG) $(OBJS_GPACMP4) $(OBJS_ZVBI) $(OBJS_ZLIB) $(OBJS_HASH) $(OBJS_CCX) $(OBJS_UTF8)
    $(CC) $(ALL_FLAGS) $(CFLAGS) $(OBJS) $(OBJS_CCX) $(OBJS_PNG) $(OBJS_ZVBI) $(OBJS_GPACMP4) $(OBJS_ZLIB) $(OBJS_HASH) $(OBJS_UTF8) $(LDFLAGS) -o $@

$(OBJS_DIR)/%.o: %.c
    $(CC) -c $(ALL_FLAGS) $(INCLUDE) $(CFLAGS) $< -o $@  

$(OBJS_DIR)/%.o: %.cpp
    $(CC) -c $(ALL_FLAGS) $(INCLUDE) $(CFLAGS) $< -o $@ -Isrc/gpacmp4 

$(OBJS_DIR)/ccextractor.o: ccextractor.c
    $(CC) -c $(ALL_FLAGS) $(INCLUDE) $(CFLAGS) -O0 $< -o $@  

.PHONY: clean
clean:
    rm -rf $(TARGET) 2>/dev/null || true
    rm -rf $(OBJS_CCX) $(OBJS_PNG) $(OBJS_ZLIB) $(OBJS_GPACMP4) $(OBJS_HASH) $(OBJS_UTF8) $(OBJS) 2>/dev/null || true
    rm -rdf $(OBJS_DIR) 2>/dev/null || true
    rm -rf .depend 2>/dev/null || true

.PHONY: install
install: $(TARGET)
    $(INSTLALL_PROGRAM) $(TARGET) $(DESTDIR)

.PHONY: uninstall
uninstall: 
    rm -iv $(DESTDIR)/$(TARGET) 

.PHONY: depend dep
depend dep:
    $(CC) $(CFLAGS) $(INCLUDE) -E -MM $(SRCS_C) $(SRCS_PNG) $(SRCS_ZVBI) $(SRCS_ZLIB) $(SRCS_HASH) $(SRCS_UTF8) $(SRCS_CCX) \
        $(SRCS_GPACMP4_C) $(SRCS_GPACMP4_CPP) |\
        sed 's/^[a-zA-Z_0-9]*.o/$(OBJS_DIR)\/&/' > .depend

.PHONY: pre-build
pre-build:
    ./pre-build.sh

-include .depend

"ccextractor" is also built through a shell script called build

The build script which builds "ccextractor" perfectly fine is:

#!/bin/bash
BLD_FLAGS="-std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR"
BLD_INCLUDE="-Isrc -I /usr/include/leptonica/ -I /usr/include/tesseract/ -Isrc/lib_ccx/ -Isrc/gpacmp4/ -Isrc/libpng/ -Isrc/zlib/ -Isrc/zvbi -Isrc/lib_hash -Isrc/protobuf-c -Isrc/utf8proc"
SRC_LIBPNG="$(find src/libpng/ -name '*.c')"
SRC_ZLIB="$(find src/zlib/ -name '*.c')"
SRC_ZVBI="$(find src/zvbi/ -name '*.c')"
SRC_CCX="$(find src/lib_ccx/ -name '*.c')"
SRC_GPAC="$(find src/gpacmp4/ -name '*.c')"
SRC_HASH="$(find src/lib_hash/ -name '*.c')"
SRC_PROTOBUF="$(find src/protobuf-c/ -name '*.c')"
SRC_UTF8PROC="src/utf8proc/utf8proc.c"
BLD_SOURCES="src/ccextractor.c $SRC_CCX $SRC_GPAC $SRC_ZLIB $SRC_ZVBI $SRC_LIBPNG $SRC_HASH $SRC_PROTOBUF $SRC_UTF8PROC"
BLD_LINKER="-lm -zmuldefs -l tesseract -l lept"

.**Stripped a call for shell script that checks git commit (Nothing that would interfere with the build**

out=$((LC_ALL=C gcc $BLD_FLAGS $BLD_INCLUDE -o ccextractor $BLD_SOURCES $BLD_LINKER) 2>&1)
res=$?
if [[ $out == *"gcc: command not found"* ]]
then
    echo "Error: please install gcc";
    exit 1
fi
if [[ $out == *"curl.h: No such file or directory"* ]]
then
    echo "Error: please install curl development library (libcurl4-gnutls-dev for Debian/Ubuntu)";
    exit 2
fi
if [[ $out == *"capi.h: No such file or directory"* ]]
then
    echo "Error: please install tesseract development library (tesseract-ocr-dev for Debian/Ubuntu)";
    exit 3
fi
if [[ $out == *"allheaders.h: No such file or directory"* ]]
then
    echo "Error: please install leptonica development library (libleptonica-dev for Debian/Ubuntu)";
    exit 4
fi
if [[ $res -ne 0 ]]  # Unknown error
then
    echo "Compiled with errors"
    >&2 echo "$out"
    exit 5
fi
echo "Compilation successful";

Building through above Makefile and build script works fine. My Makefile.am looks like this:

    AUTOMAKE_OPTIONS = foreign

bin_PROGRAMS = ccextractor
ccextractor_SOURCES = \
                src/ccextractor.c \
                src/gpacmp4/avc_ext.c \
                src/gpacmp4/avilib.c \
                src/gpacmp4/av_parsers.c \
                src/gpacmp4/base_encoding.c \
                src/gpacmp4/bitstream.c \
                src/gpacmp4/box_code_3gpp.c \
                src/gpacmp4/box_code_adobe.c \
                src/gpacmp4/box_code_apple.c \
                src/gpacmp4/box_code_base.c \
                src/gpacmp4/box_code_drm.c \
                src/gpacmp4/box_code_meta.c \
                src/gpacmp4/box_funcs.c \
                src/gpacmp4/configfile.c \
                src/gpacmp4/data_map.c \
                src/gpacmp4/desc_private.c \
                src/gpacmp4/descriptors.c \
                src/gpacmp4/drm_sample.c \
                src/gpacmp4/error.c \
                src/gpacmp4/gpac/avparse.h \
                src/gpacmp4/gpac/base_coding.h \
                src/gpacmp4/gpac/bitstream.h \
                src/gpacmp4/gpac/config_file.h \
                src/gpacmp4/gpac/configuration.h \
                src/gpacmp4/gpac/constants.h \
                src/gpacmp4/gpac/events_constants.h \
                src/gpacmp4/gpac/ietf.h \
                src/gpacmp4/gpac/internal
                src/gpacmp4/gpac/internal/avilib.h \
                src/gpacmp4/gpac/internal/isomedia_dev.h \
                src/gpacmp4/gpac/internal/media_dev.h \
                src/gpacmp4/gpac/internal/odf_dev.h \
                src/gpacmp4/gpac/internal/odf_parse_common.h \
                src/gpacmp4/gpac/internal/ogg.h \
                src/gpacmp4/gpac/isomedia.h \
                src/gpacmp4/gpac/list.h \
                src/gpacmp4/gpac/math.h \
                src/gpacmp4/gpac/media_tools.h \
                src/gpacmp4/gpac/mpeg4_odf.h \
                src/gpacmp4/gpac/network.h \
                src/gpacmp4/gpac/revision.h \
                src/gpacmp4/gpac/setup.h \
                src/gpacmp4/gpac/sync_layer.h \
                src/gpacmp4/gpac/tools.h \
                src/gpacmp4/gpac/utf.h \
                src/gpacmp4/gpac/version.h \
                src/gpacmp4/gpac_ogg.c \
                src/gpacmp4/hinting.c \
                src/gpacmp4/ipmpx_code.c \
                src/gpacmp4/ipmpx_parse.c \
                src/gpacmp4/isom_intern.c \
                src/gpacmp4/isom_read.c \
                src/gpacmp4/isom_store.c \
                src/gpacmp4/isom_write.c \
                src/gpacmp4/list.c \
                src/gpacmp4/math.c \
                src/gpacmp4/media.c \
                src/gpacmp4/media_odf.c \
                src/gpacmp4/meta.c \
                src/gpacmp4/movie_fragments.c \
                src/gpacmp4/mp4.c \
                src/gpacmp4/odf_code.c \
                src/gpacmp4/odf_codec.c \
                src/gpacmp4/odf_command.c \
                src/gpacmp4/os_config_init.c \
                src/gpacmp4/os_divers.c \
                src/gpacmp4/os_file.c \
                src/gpacmp4/qos.c \
                src/gpacmp4/ReadMe.txt
                src/gpacmp4/sample_descs.c \
                src/gpacmp4/slc.c \
                src/gpacmp4/stbl_read.c \
                src/gpacmp4/stbl_write.c \
                src/gpacmp4/track.c \
                src/gpacmp4/tx3g.c \
                src/gpacmp4/url.c \
                src/gpacmp4/utf.c \
                src/lib_ccx/activity.c \
                src/lib_ccx/activity.h \
                src/lib_ccx/asf_constants.h \
                src/lib_ccx/asf_functions.c \
                src/lib_ccx/avc_functions.c \
                src/lib_ccx/avc_functions.h \
                src/lib_ccx/bitstream.h \
                src/lib_ccx/cc_bitstream.c \
                src/lib_ccx/ccx_common_char_encoding.c \
                src/lib_ccx/ccx_common_char_encoding.h \
                src/lib_ccx/ccx_common_common.c \
                src/lib_ccx/ccx_common_common.h \
                src/lib_ccx/ccx_common_constants.c \
                src/lib_ccx/ccx_common_constants.h \
                src/lib_ccx/ccx_common_option.c \
                src/lib_ccx/ccx_common_option.h \
                src/lib_ccx/ccx_common_platform.h \
                src/lib_ccx/ccx_common_structs.h \
                src/lib_ccx/ccx_common_timing.c \
                src/lib_ccx/ccx_common_timing.h \
                src/lib_ccx/ccx_decoders_608.c \
                src/lib_ccx/ccx_decoders_608.h \
                src/lib_ccx/ccx_decoders_708.c \
                src/lib_ccx/ccx_decoders_708_encoding.c \
                src/lib_ccx/ccx_decoders_708_encoding.h \
                src/lib_ccx/ccx_decoders_708.h \
                src/lib_ccx/ccx_decoders_708_output.c \
                src/lib_ccx/ccx_decoders_708_output.h \
                src/lib_ccx/ccx_decoders_common.c \
                src/lib_ccx/ccx_decoders_common.h \
                src/lib_ccx/ccx_decoders_isdb.c \
                src/lib_ccx/ccx_decoders_isdb.h \
                src/lib_ccx/ccx_decoders_structs.h \
                src/lib_ccx/ccx_decoders_vbi.c \
                src/lib_ccx/ccx_decoders_vbi.h \
                src/lib_ccx/ccx_decoders_xds.c \
                src/lib_ccx/ccx_decoders_xds.h \
                src/lib_ccx/ccx_demuxer.c \
                src/lib_ccx/ccx_demuxer.h \
                src/lib_ccx/ccx_dtvcc.c \
                src/lib_ccx/ccx_dtvcc.h \
                src/lib_ccx/ccx_encoders_common.c \
                src/lib_ccx/ccx_encoders_common.h \
                src/lib_ccx/ccx_encoders_curl.c \
                src/lib_ccx/ccx_encoders_g608.c \
                src/lib_ccx/ccx_encoders_helpers.c \
                src/lib_ccx/ccx_encoders_helpers.h \
                src/lib_ccx/ccx_encoders_sami.c \
                src/lib_ccx/ccx_encoders_smptett.c \
                src/lib_ccx/ccx_encoders_splitbysentence.c \
                src/lib_ccx/ccx_encoders_spupng.c \
                src/lib_ccx/ccx_encoders_spupng.h \
                src/lib_ccx/ccx_encoders_srt.c \
                src/lib_ccx/ccx_encoders_ssa.c \
                src/lib_ccx/ccx_encoders_structs.h \
                src/lib_ccx/ccx_encoders_transcript.c \
                src/lib_ccx/ccx_encoders_webvtt.c \
                src/lib_ccx/ccx_encoders_xds.c \
                src/lib_ccx/ccx_encoders_xds.h \
                src/lib_ccx/ccx_gxf.c \
                src/lib_ccx/ccx_gxf.h \
                src/lib_ccx/ccx_mp4.h \
                src/lib_ccx/ccx_share.c \
                src/lib_ccx/ccx_share.h \
                src/lib_ccx/ccx_sub_entry_message.pb-c.c \
                src/lib_ccx/ccx_sub_entry_message.pb-c.h \
                src/lib_ccx/CMakeLists.txt
                src/lib_ccx/compile_info.h \
                src/lib_ccx/compile_info_real.h \
                src/lib_ccx/configuration.c \
                src/lib_ccx/configuration.h \
                src/lib_ccx/disable_warnings.h \
                src/lib_ccx/dvb_subtitle_decoder.c \
                src/lib_ccx/dvb_subtitle_decoder.h \
                src/lib_ccx/dvd_subtitle_decoder.c \
                src/lib_ccx/dvd_subtitle_decoder.h \
                src/lib_ccx/es_functions.c \
                src/lib_ccx/es_userdata.c \
                src/lib_ccx/ffmpeg_intgr.c \
                src/lib_ccx/ffmpeg_intgr.h \
                src/lib_ccx/file_buffer.h \
                src/lib_ccx/file_functions.c \
                src/lib_ccx/general_loop.c \
                src/lib_ccx/hamming.h \
                src/lib_ccx/hardsubx.c \
                src/lib_ccx/hardsubx_classifier.c \
                src/lib_ccx/hardsubx_decoder.c \
                src/lib_ccx/hardsubx.h \
                src/lib_ccx/hardsubx_imgops.c \
                src/lib_ccx/hardsubx_utility.c \
                src/lib_ccx/lib_ccx.c \
                src/lib_ccx/lib_ccx.h \
                src/lib_ccx/list.h \
                src/lib_ccx/matroska.c \
                src/lib_ccx/matroska.h \
                src/lib_ccx/myth.c \
                src/lib_ccx/networking.c \
                src/lib_ccx/networking.h \
                src/lib_ccx/ocr.c \
                src/lib_ccx/ocr.h \
                src/lib_ccx/output.c \
                src/lib_ccx/params.c \
                src/lib_ccx/params_dump.c \
                src/lib_ccx/sequencing.c \
                src/lib_ccx/spupng_encoder.c \
                src/lib_ccx/spupng_encoder.h \
                src/lib_ccx/stdintmsc.h \
                src/lib_ccx/stream_functions.c \
                src/lib_ccx/teletext.h \
                src/lib_ccx/telxcc.c \
                src/lib_ccx/ts_functions.c \
                src/lib_ccx/ts_functions.h \
                src/lib_ccx/ts_info.c \
                src/lib_ccx/ts_tables.c \
                src/lib_ccx/ts_tables_epg.c \
                src/lib_ccx/utility.c \
                src/lib_ccx/utility.h \
                src/lib_ccx/wtv_constants.h \
                src/lib_ccx/wtv_functions.c \
                src/lib_hash/sha2.c \
                src/lib_hash/sha2.h \
                src/libpng/png.c \
                src/libpng/pngconf.h \
                src/libpng/pngdebug.h \
                src/libpng/pngerror.c \
                src/libpng/pngget.c \
                src/libpng/png.h \
                src/libpng/pnginfo.h \
                src/libpng/pnglibconf.h \
                src/libpng/pngmem.c \
                src/libpng/pngpread.c \
                src/libpng/pngpriv.h \
                src/libpng/pngread.c \
                src/libpng/pngrio.c \
                src/libpng/pngrtran.c \
                src/libpng/pngrutil.c \
                src/libpng/pngset.c \
                src/libpng/pngstruct.h \
                src/libpng/pngtrans.c \
                src/libpng/pngwio.c \
                src/libpng/pngwrite.c \
                src/libpng/pngwtran.c \
                src/libpng/pngwutil.c \
                src/protobuf-c/protobuf-c.c \
                src/protobuf-c/protobuf-c.h \
                src/utf8proc/utf8proc.c \
                src/utf8proc/utf8proc_data.c \
                src/utf8proc/utf8proc.h \
                src/win_iconv/iconv.h \
                src/win_iconv/win_iconv.c \
                src/win_spec_incld/dirent.h \
                src/win_spec_incld/inttypes.h \
                src/win_spec_incld/stdint.h \
                src/zlib/adler32.c \
                src/zlib/compress.c \
                src/zlib/crc32.c \
                src/zlib/crc32.h \
                src/zlib/deflate.c \
                src/zlib/deflate.h \
                src/zlib/gzclose.c \
                src/zlib/gzguts.h \
                src/zlib/gzlib.c \
                src/zlib/gzread.c \
                src/zlib/gzwrite.c \
                src/zlib/infback.c \
                src/zlib/inffast.c \
                src/zlib/inffast.h \
                src/zlib/inffixed.h \
                src/zlib/inflate.c \
                src/zlib/inflate.h \
                src/zlib/inftrees.c \
                src/zlib/inftrees.h \
                src/zlib/trees.c \
                src/zlib/trees.h \
                src/zlib/uncompr.c \
                src/zlib/zconf.h \
                src/zlib/zlib.h \
                src/zlib/zutil.c \
                src/zlib/zutil.h \
                src/zvbi/bcd.h \
                src/zvbi/bit_slicer.c \
                src/zvbi/bit_slicer.h \
                src/zvbi/decoder.c \
                src/zvbi/macros.h \
                src/zvbi/misc.h \
                src/zvbi/raw_decoder.c \
                src/zvbi/raw_decoder.h \
                src/zvbi/sampling_par.c \
                src/zvbi/sampling_par.h \
                src/zvbi/sliced.h \
                src/zvbi/zvbi_decoder.h

ccextractor_CFLAGS =-std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR

ccextractor_CPPFLAGS =-I /usr/include/leptonica/ -I /usr/include/tesseract/ -I src/lib_ccx/ -I src/gpacmp4/ -I src/libpng/ -I src/zlib/ -I src/zvbi/ -I src/lib_hash/ -I src/protobuf-c/ -I src/utf8proc/

ccextractor_LDADD =-lm -ltesseract -llept

ccextractor_LDFLAGS=-zmuldefs

tree in src dir is:

.
├── ccextractor.c
├── CCExtractorConfig.h.in
├── ccextractor.o
├── CMakeLists.txt
├── gpacmp4
│   ├── avc_ext.c
│   ├── avc_ext.o
│   ├── avilib.c

│   ├── descriptors.o
│   ├── drm_sample.c
│   ├── drm_sample.o
│   ├── error.c
│   ├── error.o
│   ├── gpac
│   │   ├── avparse.h
│   │   ├── base_coding.h
│   │   ├── bitstream.h
│   │   ├── config_file.h
│   │   ├── configuration.h
│   │   ├── constants.h
│   │   ├── events_constants.h
│   │   ├── ietf.h
│   │   ├── internal
│   │   │   ├── avilib.h
│   │   │   ├── isomedia_dev.h
│   │   │   ├── media_dev.h
│   │   │   ├── odf_dev.h
│   │   │   ├── odf_parse_common.h
│   │   │   └── ogg.h
│   │   ├── isomedia.h
│   │   ├── list.h
│   │   ├── math.h
│   │   ├── media_tools.h
│   │   ├── mpeg4_odf.h
│   │   ├── network.h
│   │   ├── revision.h
│   │   ├── setup.h
│   │   ├── sync_layer.h
│   │   ├── tools.h
│   │   ├── utf.h
│   │   └── version.h
│   ├── gpac_ogg.c
│   ├── hinting.c
│   ├── ipmpx_code.c
│   ├── ipmpx_parse.c
│   ├── isom_intern.c
│   ├── isom_read.c
│   ├── isom_store.c
│   ├── isom_write.c
│   ├── list.c
│   ├── math.c
│   ├── media.c
│   ├── media_odf.c
│   ├── meta.c
│   ├── movie_fragments.c
│   ├── mp4.c
│   ├── odf_code.c
│   ├── odf_codec.c
│   ├── odf_command.c
│   ├── os_config_init.c
│   ├── os_divers.c
│   ├── os_file.c
│   ├── qos.c
│   ├── ReadMe.txt
│   ├── sample_descs.c
│   ├── slc.c
│   ├── stbl_read.c
│   ├── stbl_write.c
│   ├── track.c
│   ├── tx3g.c
│   ├── url.c
│   └── utf.c
├── lib_ccx
│   ├── activity.c
│   ├── activity.h
│   ├── asf_constants.h
│   ├── asf_functions.c
│   ├── avc_functions.c
│   ├── avc_functions.h
│   ├── bitstream.h
│   ├── hamming.h
│   ├── hardsubx.c
│   ├── hardsubx_classifier.c
│   ├── hardsubx_decoder.c
│   ├── hardsubx.h
│   ├── hardsubx_imgops.c
│   ├── hardsubx_utility.c
│   ├── ts_functions.h
│   ├── ts_info.c
│   ├── ts_tables.c
│   ├── ts_tables_epg.c
│   ├── utility.c
│   ├── utility.h
│   ├── wtv_constants.h
│   └── wtv_functions.c
├── lib_hash
│   ├── README
│   ├── sha2.c
│   └── sha2.h
├── libpng
│   ├── png.c
│   ├── pngconf.h
│   ├── pngdebug.h
│   ├── pngerror.c
│   ├── pngget.c
│   ├── png.h
│   ├── pnginfo.h
│   └── pngwutil.c
├── protobuf-c
│   ├── protobuf-c.c
│   └── protobuf-c.h
├── utf8proc
│   ├── utf8proc.c
│   ├── utf8proc_data.c
│   └── utf8proc.h
├── win_iconv
│   ├── iconv.h
│   └── win_iconv.c
├── win_spec_incld
│   ├── dirent.h
│   ├── inttypes.h
│   └── stdint.h
├── zlib
│   ├── adler32.c
│   ├── compress.c
│   ├── crc32.c
│   ├── crc32.h
│   ├── trees.c
│   ├── trees.h
│   ├── uncompr.c
│   ├── zconf.h
│   ├── zlib.h
│   ├── zutil.c
│   └── zutil.h
└── zvbi
    ├── bcd.h
    ├── bit_slicer.c
    ├── bit_slicer.h
    ├── decoder.c
    ├── macros.h
    ├── misc.h
    ├── raw_decoder.c
    ├── raw_decoder.h

And also, all includes are done with full path in sub directories of src, like for a file in gpacmp4 directory, #include <gpac/avparse.h>. All but the main ccextractor.c file, for which all the -I flags are provided.

Even the slightest help is appreciated.

Here are some initial statements which make invokes:

gcc -DHAVE_CONFIG_H -I.  -I /usr/include/leptonica/ -I /usr/include/tesseract/ -I src/lib_ccx/ -I src/gpacmp4/ -I src/libpng/ -I src/zlib/ -I src/zvbi/ -I src/lib_hash/ -I src/protobuf-c/ -I src/utf8proc/  -std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR -g -O2 -MT src/ccextractor-ccextractor.o -MD -MP -MF src/.deps/ccextractor-ccextractor.Tpo -c -o src/ccextractor-ccextractor.o `test -f 'src/ccextractor.c' || echo './'`src/ccextractor.c
mv -f src/gpacmp4/.deps/ccextractor-avc_ext.Tpo src/gpacmp4/.deps/ccextractor-avc_ext.Po
gcc -DHAVE_CONFIG_H -I.  -I /usr/include/leptonica/ -I /usr/include/tesseract/ -I src/lib_ccx/ -I src/gpacmp4/ -I src/libpng/ -I src/zlib/ -I src/zvbi/ -I src/lib_hash/ -I src/protobuf-c/ -I src/utf8proc/  -std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR -g -O2 -MT src/gpacmp4/ccextractor-avilib.o -MD -MP -MF src/gpacmp4/.deps/ccextractor-avilib.Tpo -c -o src/gpacmp4/ccextractor-avilib.o `test -f 'src/gpacmp4/avilib.c' || echo './'`src/gpacmp4/avilib.c
mv -f src/gpacmp4/.deps/ccextractor-avilib.Tpo src/gpacmp4/.deps/ccextractor-avilib.Po

Statement which make invokes just before showing undefined reference errors:

gcc -std=gnu99 -Wno-write-strings -DGPAC_CONFIG_LINUX -D_FILE_OFFSET_BITS=64 -DVERSION_FILE_PRESENT -DENABLE_OCR -g -O2 -zmuldefs  -o ccextractor src/ccextractor-ccextractor.o src/gpacmp4/ccextractor-avc_ext.o src/gpacmp4/ccextractor-avilib.o src/gpacmp4/ccextractor-av_parsers.o src/gpacmp4/ccextractor-base_encoding.o src/gpacmp4/ccextractor-bitstream.o src/gpacmp4/ccextractor-box_code_3gpp.o src/gpacmp4/ccextractor-box_code_adobe.o src/gpacmp4/ccextractor-box_code_apple.o src/gpacmp4/ccextractor-box_code_base.o src/gpacmp4/ccextractor-box_code_drm.o src/gpacmp4/ccextractor-box_code_meta.o src/gpacmp4/ccextractor-box_funcs.o src/gpacmp4/ccextractor-configfile.o src/gpacmp4/ccextractor-data_map.o src/gpacmp4/ccextractor-desc_private.o src/gpacmp4/ccextractor-descriptors.o src/gpacmp4/ccextractor-drm_sample.o src/gpacmp4/ccextractor-error.o -lm -ltesseract -llept

/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/ccextractor.c:32: undefined reference to `mprint'
/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/ccextractor.c:33: undefined reference to `change_filename_requested'
src/ccextractor-ccextractor.o: In function `main':
/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/ccextractor.c:68: undefined reference to `init_options'
/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/ccextractor.c:123: undefined reference to `params_dump'
src/gpacmp4/ccextractor-drm_sample.o: In function `gf_isom_ipmpx_remove_tool_list':
/media/mayank/Mayank/GSOC 2017/Projects/ccextractor/src/gpacmp4/drm_sample.c:1421: undefined reference to `gf_odf_desc_del'
collect2: error: ld returned 1 exit status
Makefile:497: recipe for target 'ccextractor' failed
make[1]: *** [ccextractor] Error 1
make[1]: Leaving directory '/media/mayank/Mayank/GSOC 2017/Projects/ccextractor'
Makefile:335: recipe for target 'all' failed
make: *** [all] Error 2

PS: Any help is appreciated.I tried many things including changing the path of the #include <path/to/header> statements in code and then adding -I statement for those path in CPPFLAGS but that didn't help either. Almost all the undefined reference errors are from the functions declared in the headers residing in subdirectories of directories in source like, src/dir/subdir the -I flags are added only till src/dir/ and then the files in src/dir/ have statements like #include<subdir/filename.h>.

PPS: I used grep -r "<Name_of_function_leading_to_error>" . in src to find out the declaration header.

1

1 Answers

0
votes

Undefined references mean missing libraries or wrong library order. So changing -I flags has no effect.

  1. Find out which library contains the symbols
  2. Check if they are on the linker line and add them if they are missing
  3. If they are on the linke line, verify that the order is correct