@@ -6,6 +6,9 @@ DOCKER=$(shell which docker)
66FFMPEG_VERSION =ffmpeg-7.1.1
77CHROMAPRINT_VERSION =chromaprint-1.5.1
88
9+ # CGO configuration - set CGO vars for C++ libraries
10+ CGO_ENV=PKG_CONFIG_PATH ="$(shell realpath ${PREFIX}) /lib/pkgconfig" CGO_LDFLAGS_ALLOW="-(W|D).*" CGO_LDFLAGS="-lstdc++ -lavutil"
11+
912# Build flags
1013BUILD_MODULE := $(shell cat go.mod | head -1 | cut -d ' ' -f 2)
1114BUILD_LD_FLAGS += -X $(BUILD_MODULE ) /pkg/version.GitSource=${BUILD_MODULE}
@@ -31,19 +34,19 @@ PREFIX ?= ${BUILD_DIR}/install
3134# TARGETS
3235
3336.PHONY : all
34- all : clean ffmpeg cli
37+ all : clean ffmpeg chromaprint cli
3538
3639.PHONY : cmds
3740cmds : $(CMD_DIR )
3841
3942.PHONY : cli
4043cli : go-dep go-tidy mkdir
4144 @echo Build media tool
42- @PKG_CONFIG_PATH= " $( shell realpath ${PREFIX} ) /lib/pkgconfig " CGO_LDFLAGS_ALLOW= " -(W|D).* " ${GO} build ${BUILD_FLAGS} -o ${BUILD_DIR} /media ./cmd/media
45+ @${CGO_ENV} ${GO} build ${BUILD_FLAGS} -o ${BUILD_DIR} /media ./cmd/media
4346
4447$(CMD_DIR ) : go-dep go-tidy mkdir
4548 @echo Build cmd $(notdir $@ )
46- @PKG_CONFIG_PATH= " $( shell realpath ${PREFIX} ) /lib/pkgconfig " CGO_LDFLAGS_ALLOW= " -(W|D).* " ${GO} build ${BUILD_FLAGS} -o ${BUILD_DIR} /$(notdir $@ ) ./$@
49+ @${CGO_ENV} ${GO} build ${BUILD_FLAGS} -o ${BUILD_DIR} /$(notdir $@ ) ./$@
4750
4851# ##############################################################################
4952# FFMPEG
@@ -84,7 +87,7 @@ ffmpeg: ffmpeg-build
8487# ##############################################################################
8588# CHROMAPRINT
8689
87- # Download ffmpeg sources
90+ # Download chromaprint sources
8891${BUILD_DIR}/${CHROMAPRINT_VERSION} :
8992 @if [ ! -d " $( BUILD_DIR) /$( CHROMAPRINT_VERSION) " ]; then \
9093 echo " Downloading $( CHROMAPRINT_VERSION) " ; \
@@ -97,14 +100,16 @@ ${BUILD_DIR}/${CHROMAPRINT_VERSION}:
97100
98101# Configure chromaprint
99102.PHONY : chromaprint-configure
100- chromaprint-configure : mkdir ${BUILD_DIR}/${CHROMAPRINT_VERSION}
103+ chromaprint-configure : mkdir ${BUILD_DIR}/${CHROMAPRINT_VERSION} ffmpeg
101104 @echo " Configuring ${CHROMAPRINT_VERSION} => ${PREFIX} "
102105 cmake \
103106 -DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
104107 -DCMAKE_BUILD_TYPE=Release \
105108 -DBUILD_SHARED_LIBS=0 \
106109 -DBUILD_TESTS=0 \
107110 -DBUILD_TOOLS=0 \
111+ -DFFT_LIB=avfft \
112+ -DCMAKE_PREFIX_PATH=" $( shell realpath ${PREFIX} ) " \
108113 --install-prefix " $( shell realpath ${PREFIX} ) " \
109114 -S ${BUILD_DIR} /${CHROMAPRINT_VERSION} \
110115 -B ${BUILD_DIR}
@@ -116,10 +121,13 @@ chromaprint-build: chromaprint-configure
116121 @cd $(BUILD_DIR ) && make -j2
117122
118123# Install chromaprint
124+ # Create a modified pkg-config file that ensures correct linking order for C++
119125.PHONY : chromaprint
120126chromaprint : chromaprint-build
121127 @echo " Installing ${CHROMAPRINT_VERSION} => ${PREFIX} "
122128 @cd $(BUILD_DIR ) && make install
129+ @sed -i.bak ' s/Libs: -L\${libdir} -lchromaprint/Libs: -L\${libdir} -lchromaprint -lstdc++ -lavutil/g' " ${PREFIX} /lib/pkgconfig/libchromaprint.pc"
130+ @rm -f " ${PREFIX} /lib/pkgconfig/libchromaprint.pc.bak"
123131
124132# ##############################################################################
125133# DOCKER
@@ -148,11 +156,11 @@ test: test-ffmpeg
148156test-ffmpeg : go-dep go-tidy ffmpeg chromaprint
149157 @echo Test
150158 @echo ... test sys/ffmpeg71
151- @PKG_CONFIG_PATH= " $( shell realpath ${PREFIX} ) /lib/pkgconfig " CGO_LDFLAGS_ALLOW= " -(W|D).* " ${GO} test ./sys/ffmpeg71
159+ @${CGO_ENV} ${GO} test ./sys/ffmpeg71
152160 @echo ... test pkg/segmenter
153- @PKG_CONFIG_PATH= " $( shell realpath ${PREFIX} ) /lib/pkgconfig " CGO_LDFLAGS_ALLOW= " -(W|D).* " ${GO} test ./pkg/segmenter
161+ @${CGO_ENV} ${GO} test ./pkg/segmenter
154162 @echo ... test pkg/chromaprint
155- @PKG_CONFIG_PATH= " $( shell realpath ${PREFIX} ) /lib/pkgconfig " CGO_LDFLAGS_ALLOW= " -(W|D).* " ${GO} test ./pkg/chromaprint
163+ @${CGO_ENV} ${GO} test ./pkg/chromaprint
156164
157165
158166# @echo ... test pkg/ffmpeg
@@ -173,11 +181,11 @@ test-ffmpeg: go-dep go-tidy ffmpeg chromaprint
173181container-test : go-dep go-tidy ffmpeg chromaprint
174182 @echo Test
175183 @echo ... test sys/ffmpeg71
176- @PKG_CONFIG_PATH= " $( shell realpath ${PREFIX} ) /lib/pkgconfig " CGO_LDFLAGS_ALLOW= " -(W|D).* " ${GO} test ./sys/ffmpeg71
184+ @${CGO_ENV} ${GO} test ./sys/ffmpeg71
177185 @echo ... test pkg/segmenter
178- @PKG_CONFIG_PATH= " $( shell realpath ${PREFIX} ) /lib/pkgconfig " CGO_LDFLAGS_ALLOW= " -(W|D).* " ${GO} test ./pkg/segmenter
186+ @${CGO_ENV} ${GO} test ./pkg/segmenter
179187 @echo ... test pkg/chromaprint
180- @PKG_CONFIG_PATH= " $( shell realpath ${PREFIX} ) /lib/pkgconfig " CGO_LDFLAGS_ALLOW= " -(W|D).* " ${GO} test ./pkg/chromaprint
188+ @${CGO_ENV} ${GO} test ./pkg/chromaprint
181189
182190# ##############################################################################
183191# DEPENDENCIES, ETC
@@ -216,9 +224,9 @@ ffmpeg-dep:
216224 $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists freetype2 && echo "--enable-libfreetype") )
217225 $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists theora && echo "--enable-libtheora") )
218226 $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists vorbis && echo "--enable-libvorbis") )
219- $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists vpx && echo "--enable-libvpx ") )
227+ $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists opus && echo "--enable-libopus ") )
220228 $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists x264 && echo "--enable-libx264") )
221229 $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists x265 && echo "--enable-libx265") )
222- $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists opus && echo "--enable-libopus") )
223230 $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists xvid && echo "--enable-libxvid") )
231+ $(eval FFMPEG_CONFIG := $(FFMPEG_CONFIG ) $(shell pkg-config --exists vpx && echo "--enable-libvpx") )
224232 @echo " FFmpeg configuration: $( FFMPEG_CONFIG) "
0 commit comments