[PR] Makefile: create output directories during the makefile parse phase (PR #23593)

Kacper Michajłow via ffmpeg-devel <[email protected]>
Newsgroups gmane.comp.video.ffmpeg.devel
Message-ID <178234252316.59.8673266469307792828@29965ddac10e>
PR #23593 opened by Kacper Michajłow (kasper93)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23593
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23593.patch


From a28f7d755c34115568bb221985bc248c1890b248 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Thu, 25 Jun 2026 00:55:21 +0200
Subject: [PATCH 1/2] Makefile: create output directories during the makefile
 parse phase
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Output directories were created by a rule, with the relevant targets
carrying them as order-only prerequisites. Under parallel make this
still raced: intermediate resource targets such as
fftools/resources/graph.css.min and graph.html.gz reach their recipes
without carrying the directory as a prerequisite, so the shell redirect
into the not-yet-created directory fails:

  /bin/sh: cannot create fftools/resources/graph.css.min: Directory nonexistent
  make: *** [ffbuild/common.mak:145: fftools/resources/graph.css.min] Error 2

Create every output directory while the makefile is parsed instead, so
all of them exist before the first recipe runs and the race is no longer
possible.

Reported-by: Alexander Kanavin <[email protected]>
Co-Authored-By: Ramiro Polla <[email protected]>
Signed-off-by: Kacper Michajłow <[email protected]>
---
 Makefile | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index ca55556cee..d2302826c1 100644
--- a/Makefile
+++ b/Makefile
@@ -208,8 +208,11 @@ check: all alltools examples testprogs fate
 
 include $(SRC_PATH)/tests/Makefile
 
-$(sort $(OUTDIRS)):
-	$(Q)mkdir -p $@
+# Create all output directories during the parse phase, before any target is
+# built. Doing it here rather than via a rule guarantees the directories exist
+# before the first recipe runs, avoiding races between directory creation and
+# the rules that write into them under parallel make.
+$(foreach dir,$(sort $(OUTDIRS)),$(if $(wildcard $(dir)),,$(shell mkdir -p $(dir))))
 
 # Dummy rule to stop make trying to rebuild removed or renamed headers
 %.h:
-- 
2.52.0


From 9204c9be292cb69241701de02c31d8d4296edb45 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]>
Date: Thu, 25 Jun 2026 01:01:46 +0200
Subject: [PATCH 2/2] Makefile: drop now-redundant order-only directory
 prerequisites
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Kacper Michajłow <[email protected]>
---
 doc/Makefile                |  2 --
 doc/examples/Makefile       |  1 -
 ffbuild/common.mak          |  8 --------
 ffbuild/library.mak         |  4 ++--
 fftools/Makefile            |  3 +--
 tests/Makefile              | 22 ++++++++++-----------
 tests/api/Makefile          |  1 -
 tests/checkasm/Makefile     |  1 -
 tests/fate/dashenc.mak      |  2 +-
 tests/fate/demux.mak        |  4 ++--
 tests/fate/ffmpeg.mak       |  2 +-
 tests/fate/ffprobe.mak      |  2 +-
 tests/fate/filter-audio.mak |  4 ++--
 tests/fate/filter-video.mak |  2 +-
 tests/fate/fits.mak         |  2 +-
 tests/fate/generic-tags.mak |  2 +-
 tests/fate/hap.mak          |  4 ++--
 tests/fate/hevc.mak         |  2 +-
 tests/fate/hlsenc.mak       | 38 ++++++++++++++++++-------------------
 tests/fate/libavdevice.mak  |  2 +-
 tests/fate/mov.mak          |  2 +-
 tests/fate/seek.mak         |  2 +-
 tests/fate/segment.mak      | 10 +++++-----
 tools/Makefile              |  2 --
 24 files changed, 54 insertions(+), 70 deletions(-)

diff --git a/doc/Makefile b/doc/Makefile
index 7b683afa17..6dd9455a53 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -100,8 +100,6 @@ doc/%.1: doc/%.pod $(GENTEXI)
 doc/%.3: doc/%.pod $(GENTEXI)
 	$(M)pod2man --section=3 --center=" " --release=" " --date=" " $< > $@
 
-$(DOCS) doc/doxy/html: | doc/
-
 DOXY_INPUT      = $(INSTHEADERS)
 DOXY_INPUT_DEPS = $(addprefix $(SRC_PATH)/, $(DOXY_INPUT)) ffbuild/config.mak
 
diff --git a/doc/examples/Makefile b/doc/examples/Makefile
index 4efed6b11d..4c38f7b0db 100644
--- a/doc/examples/Makefile
+++ b/doc/examples/Makefile
@@ -37,7 +37,6 @@ $(EXAMPLES_G): %$(PROGSSUF)_g$(EXESUF): %.o
 
 examples: $(EXAMPLES)
 
-$(EXAMPLES:%$(PROGSSUF)$(EXESUF)=%.o): | doc/examples
 OUTDIRS += doc/examples
 
 DOXY_INPUT += $(EXAMPLES:%$(PROGSSUF)$(EXESUF)=%.c)
diff --git a/ffbuild/common.mak b/ffbuild/common.mak
index 059de5abf3..bff7e30f8e 100644
--- a/ffbuild/common.mak
+++ b/ffbuild/common.mak
@@ -244,14 +244,6 @@ $(HOSTOBJS): %.o: %.c
 $(HOSTPROGS): %$(HOSTEXESUF): %.o
 	$(HOSTLD) $(HOSTLDFLAGS) $(HOSTLD_O) $^ $(HOSTEXTRALIBS)
 
-$(OBJS):     | $(sort $(dir $(OBJS)))
-$(HOBJS):    | $(sort $(dir $(HOBJS)))
-$(HOSTOBJS): | $(sort $(dir $(HOSTOBJS)))
-$(SHLIBOBJS): | $(sort $(dir $(SHLIBOBJS)))
-$(STLIBOBJS): | $(sort $(dir $(STLIBOBJS)))
-$(TESTOBJS): | $(sort $(dir $(TESTOBJS)))
-$(TOOLOBJS): | tools
-
 OUTDIRS := $(OUTDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SHLIBOBJS) $(STLIBOBJS) $(TESTOBJS))
 
 CLEANSUFFIXES     = *.d *.gcda *.gcno *.h.c *.ho *.map *.o *.objs *.pc *.ptx *.ptx.gz *.ptx.c *.spv *.spv.gz *.spv.c *.gen.asm *.gen.c *.gen.S *.ver *.version *.html.gz *.html.c *.css.min.gz *.css.min *.css.c *~ *.ilk *.pdb
diff --git a/ffbuild/library.mak b/ffbuild/library.mak
index 5ab7eb4615..9b389f59a8 100644
--- a/ffbuild/library.mak
+++ b/ffbuild/library.mak
@@ -60,10 +60,10 @@ $(NAME)LINK_EXTRA = $(FFEXTRALIBS)
 $(TESTPROGS) $(TOOLS): %$(EXESUF): %.o
 	$$(call LINK,$$(call $(NAME)LINK_EXE_ARGS) $$(LD_O) $$(filter %.o,$$^) $$(THISLIB) $$(call $(NAME)LINK_EXTRA) $$(EXTRALIBS-$$(*F)) $$(ELIBS))
 
-$(SUBDIR)lib$(NAME).version: $(SUBDIR)version.h $(SUBDIR)version_major.h | $(SUBDIR)
+$(SUBDIR)lib$(NAME).version: $(SUBDIR)version.h $(SUBDIR)version_major.h
 	$$(M) $$(SRC_PATH)/ffbuild/libversion.sh $(NAME) $$^ > $$@
 
-$(SUBDIR)lib$(FULLNAME).pc: $(SUBDIR)version.h ffbuild/config.sh | $(SUBDIR)
+$(SUBDIR)lib$(FULLNAME).pc: $(SUBDIR)version.h ffbuild/config.sh
 	$$(M) $$(SRC_PATH)/ffbuild/pkgconfig_generate.sh $(NAME) "$(DESC)"
 
 $(SUBDIR)lib$(NAME).ver: $(SUBDIR)lib$(NAME).v $(OBJS)
diff --git a/fftools/Makefile b/fftools/Makefile
index 01b16fa8f4..fcdefd4f07 100644
--- a/fftools/Makefile
+++ b/fftools/Makefile
@@ -60,7 +60,6 @@ ifdef HAVE_GNU_WINDRES
 OBJS-$(1) += fftools/fftoolsres.o
 endif
 $(1)$(PROGSSUF)_g$(EXESUF): $$(OBJS-$(1))
-$$(OBJS-$(1)): | fftools fftools/textformat fftools/resources fftools/graph
 $$(OBJS-$(1)): CFLAGS  += $(CFLAGS-$(1))
 $(1)$(PROGSSUF)_g$(EXESUF): LDFLAGS += $(LDFLAGS-$(1))
 $(1)$(PROGSSUF)_g$(EXESUF): FF_EXTRALIBS += $(EXTRALIBS-$(1))
@@ -71,7 +70,7 @@ $(foreach P,$(AVPROGS-yes),$(eval $(call DOFFTOOL,$(P))))
 
 all: $(AVPROGS)
 
-fftools/ffprobe.o fftools/cmdutils.o: libavutil/ffversion.h | fftools
+fftools/ffprobe.o fftools/cmdutils.o: libavutil/ffversion.h
 OUTDIRS += fftools
 OUTDIRS += fftools/textformat
 OUTDIRS += fftools/resources
diff --git a/tests/Makefile b/tests/Makefile
index 8c7d4539a3..d5522cfbc8 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -26,25 +26,25 @@ APITESTSDIR := tests/api
 FATE_OUTDIRS = tests/data tests/data/fate tests/data/filtergraphs tests/data/maps tests/data/streamgroups tests/data/lavf tests/data/lavf-fate tests/data/pixfmt tests/vsynth1 $(APITESTSDIR)
 OUTDIRS += $(FATE_OUTDIRS)
 
-$(VREF): tests/videogen$(HOSTEXESUF) | tests/vsynth1
+$(VREF): tests/videogen$(HOSTEXESUF)
 	$(M)./$< 'tests/vsynth1/'
 
-$(AREF): tests/audiogen$(HOSTEXESUF) | tests/data
+$(AREF): tests/audiogen$(HOSTEXESUF)
 	$(M)./$< $@
 
-tests/data/asynth-%.wav: tests/audiogen$(HOSTEXESUF) | tests/data
+tests/data/asynth-%.wav: tests/audiogen$(HOSTEXESUF)
 	$(M)./$< $@ $(subst -, ,$*)
 
-tests/data/vsynth1.yuv: tests/videogen$(HOSTEXESUF) | tests/data
+tests/data/vsynth1.yuv: tests/videogen$(HOSTEXESUF)
 	$(M)$< $@
 
-tests/data/vsynth2.yuv: tests/rotozoom$(HOSTEXESUF) | tests/data
+tests/data/vsynth2.yuv: tests/rotozoom$(HOSTEXESUF)
 	$(M)$< $(SRC_PATH)/tests/reference.pnm $@
 
-tests/data/vsynth_lena.yuv: tests/rotozoom$(HOSTEXESUF) | tests/data
+tests/data/vsynth_lena.yuv: tests/rotozoom$(HOSTEXESUF)
 	$(M)$< $(SAMPLES)/lena.pnm $@
 
-tests/data/vsynth3.yuv: tests/videogen$(HOSTEXESUF) | tests/data
+tests/data/vsynth3.yuv: tests/videogen$(HOSTEXESUF)
 	$(M)$< $@ $(FATEW) $(FATEH)
 
 tests/test_copy.ffmeta: TAG = COPY
@@ -54,15 +54,15 @@ tests/test_copy.ffmeta: tests/data
 tests/data/%.sw tests/data/asynth% tests/data/vsynth%.yuv tests/vsynth%/00.pgm tests/data/%.nut: TAG = GEN
 
 tests/data/filtergraphs/%: TAG = COPY
-tests/data/filtergraphs/%: $(SRC_PATH)/tests/filtergraphs/% | tests/data/filtergraphs
+tests/data/filtergraphs/%: $(SRC_PATH)/tests/filtergraphs/%
 	$(M)cp $< $@
 
 tests/data/maps/%: TAG = COPY
-tests/data/maps/%: $(SRC_PATH)/tests/maps/% | tests/data/maps
+tests/data/maps/%: $(SRC_PATH)/tests/maps/%
 	$(M)cp $< $@
 
 tests/data/streamgroups/%: TAG = COPY
-tests/data/streamgroups/%: $(SRC_PATH)/tests/streamgroups/% | tests/data/streamgroups
+tests/data/streamgroups/%: $(SRC_PATH)/tests/streamgroups/%
 	$(M)cp $< $@
 
 RUNNING_FATE := $(filter check fate%,$(filter-out fate-rsync,$(MAKECMDGOALS)))
@@ -322,7 +322,7 @@ FATE += $(FATE_HW-yes)
 $(FATE): export PROGSUF = $(PROGSSUF)
 $(FATE): export EXECSUF = $(EXESUF)
 $(FATE): export HOSTEXECSUF = $(HOSTEXESUF)
-$(FATE): $(FATE_UTILS:%=tests/%$(HOSTEXESUF)) | $(FATE_OUTDIRS)
+$(FATE): $(FATE_UTILS:%=tests/%$(HOSTEXESUF))
 	@echo "TEST    $(@:fate-%=%)$(FATE_SUFFIX)"
 	$(Q)$(SRC_PATH)/tests/fate-run.sh $@$(FATE_SUFFIX) "$(TARGET_SAMPLES)" "$(TARGET_EXEC)" "$(TARGET_PATH)" '$(CMD)' '$(CMP)' '$(REF)' '$(FUZZ)' '$(THREADS)' '$(THREAD_TYPE)' '$(CPUFLAGS)' '$(CMP_SHIFT)' '$(CMP_TARGET)' '$(SIZE_TOLERANCE)' '$(CMP_UNIT)' '$(GEN)' '$(HWACCEL)' '$(REPORT)' '$(KEEP_FILES)'
 
diff --git a/tests/api/Makefile b/tests/api/Makefile
index 987db1b785..f6633cecbd 100644
--- a/tests/api/Makefile
+++ b/tests/api/Makefile
@@ -11,7 +11,6 @@ APITESTOBJS  := $(APITESTOBJS:%=$(APITESTSDIR)%) $(APITESTPROGS:%=$(APITESTSDIR)
 APITESTPROGS := $(APITESTPROGS:%=$(APITESTSDIR)/%-test$(EXESUF))
 -include $(wildcard $(APITESTOBJS:.o=.d))
 
-$(APITESTOBJS): | $(sort $(dir $(APITESTOBJS)))
 $(APITESTOBJS) $(APITESTOBJS:.o=.i): CPPFLAGS += -DTEST
 $(APITESTOBJS) $(APITESTOBJS:.o=.i): CFLAGS += -Umain
 
diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile
index c154d19ed4..10d2e0a26f 100644
--- a/tests/checkasm/Makefile
+++ b/tests/checkasm/Makefile
@@ -140,7 +140,6 @@ CHECKASMOBJS := $(sort $(CHECKASMOBJS:%=tests/checkasm/%))
 -include $(CHECKASMOBJS:.o=.d)
 
 CHECKASMDIRS := $(sort $(dir $(CHECKASMOBJS)))
-$(CHECKASMOBJS): | $(CHECKASMDIRS)
 # Prepend the local checkasm include path before any potential external
 # (possibly outdated) version of libcheckasm.
 $(CHECKASMOBJS): CFLAGS  := -I$(SRC_PATH)/tests/checkasm/ext/include $(CFLAGS)
diff --git a/tests/fate/dashenc.mak b/tests/fate/dashenc.mak
index df9571f0b4..acefdfde74 100644
--- a/tests/fate/dashenc.mak
+++ b/tests/fate/dashenc.mak
@@ -1,5 +1,5 @@
 tests/data/dash_mpd_timing.mpd: TAG = GEN
-tests/data/dash_mpd_timing.mpd: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/dash_mpd_timing.mpd: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(RM) $(TARGET_PATH)/tests/data/dash_mpd_timing*
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin -loglevel error -re \
 	-f lavfi -i "testsrc2=size=128x72:rate=1" -map 0:v \
diff --git a/tests/fate/demux.mak b/tests/fate/demux.mak
index 4cdc1a583f..fc1ebf8a05 100644
--- a/tests/fate/demux.mak
+++ b/tests/fate/demux.mak
@@ -176,10 +176,10 @@ FATE_FFPROBE_DEMUX-$(CONFIG_MPEGTS_DEMUXER) += fate-ts-timed-id3-demux
 fate-ts-timed-id3-demux: CMD = ffprobe_demux $(TARGET_SAMPLES)/mpegts/id3.ts
 
 tests/data/id3.ts: TAG = GEN
-tests/data/id3.ts: $(SAMPLES)/mpegts/id3.ts | tests/data
+tests/data/id3.ts: $(SAMPLES)/mpegts/id3.ts
 	$(Q)cp $< $@
 
-tests/data/id3.m3u8: tests/data/id3.ts | tests/data
+tests/data/id3.m3u8: tests/data/id3.ts
 	$(Q)printf '#EXTM3U\n#EXT-X-TARGETDURATION:2\n#EXTINF:2,\nid3.ts\n#EXT-X-ENDLIST\n' > $@
 
 FATE_FFPROBE_DEMUX-$(call DEMDEC, MPEGTS HLS) += fate-ts-timed-id3-hls-demux
diff --git a/tests/fate/ffmpeg.mak b/tests/fate/ffmpeg.mak
index cd00275638..03794516ca 100644
--- a/tests/fate/ffmpeg.mak
+++ b/tests/fate/ffmpeg.mak
@@ -186,7 +186,7 @@ fate-ffmpeg-streamloop-copy: CMD = framemd5 -stream_loop 2 -i $(TARGET_SAMPLES)/
 
 tests/data/audio_shorter_than_video.nut: TAG = GEN
 tests/data/audio_shorter_than_video.nut: tests/data/vsynth_lena.yuv
-tests/data/audio_shorter_than_video.nut: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/audio_shorter_than_video.nut: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -sws_flags +accurate_rnd+bitexact -fflags +bitexact -flags +bitexact -idct simple -f rawvideo -s 352x288 -pix_fmt yuv420p -i $(TARGET_PATH)/tests/data/vsynth_lena.yuv \
         -f lavfi -i "sine=1000:d=1" \
diff --git a/tests/fate/ffprobe.mak b/tests/fate/ffprobe.mak
index f09e0ce3e8..d86b871374 100644
--- a/tests/fate/ffprobe.mak
+++ b/tests/fate/ffprobe.mak
@@ -1,4 +1,4 @@
-tests/data/ffprobe-test.nut: ffmpeg$(PROGSSUF)$(EXESUF) tests/test_copy.ffmeta | tests/data
+tests/data/ffprobe-test.nut: ffmpeg$(PROGSSUF)$(EXESUF) tests/test_copy.ffmeta
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -f lavfi -i "aevalsrc=sin(400*PI*2*t):d=0.125[out0]; testsrc=d=0.125[out1]; testsrc=s=100x100:d=0.125[out2]" \
         -f ffmetadata -i $(TARGET_PATH)/tests/test_copy.ffmeta \
diff --git a/tests/fate/filter-audio.mak b/tests/fate/filter-audio.mak
index 526645a634..2116864bfd 100644
--- a/tests/fate/filter-audio.mak
+++ b/tests/fate/filter-audio.mak
@@ -215,7 +215,7 @@ fate-filter-compand: SRC = $(TARGET_PATH)/tests/data/asynth-44100-2.wav
 fate-filter-compand: CMD = framecrc -auto_conversion_filters -i $(SRC) -frames:a 20 -/filter_complex $(TARGET_PATH)/tests/data/filtergraphs/compand
 
 tests/data/hls-list.m3u8: TAG = GEN
-tests/data/hls-list.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls-list.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -f lavfi -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=20" -f segment -segment_time 10 -map 0 -flags +bitexact -codec:a mp2fixed \
         -segment_list $(TARGET_PATH)/$@ -y $(TARGET_PATH)/tests/data/hls-out-%03d.ts 2>/dev/null
@@ -225,7 +225,7 @@ fate-filter-hls: tests/data/hls-list.m3u8
 fate-filter-hls: CMD = framecrc -flags +bitexact -i $(TARGET_PATH)/tests/data/hls-list.m3u8 -af aresample
 
 tests/data/hls-list-append.m3u8: TAG = GEN
-tests/data/hls-list-append.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls-list-append.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -f lavfi -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=20" -f segment -segment_time 10 -map 0 -flags +bitexact -codec:a mp2fixed \
         -segment_list $(TARGET_PATH)/$@ -y $(TARGET_PATH)/tests/data/hls-append-out-%03d.ts 2>/dev/null; \
diff --git a/tests/fate/filter-video.mak b/tests/fate/filter-video.mak
index d16fff4d6c..2cb7c0d5e8 100644
--- a/tests/fate/filter-video.mak
+++ b/tests/fate/filter-video.mak
@@ -653,7 +653,7 @@ fate-filter-drawvg-video: $(DRAWVG_SCRIPT_VIDEO)
 fate-filter-drawvg-video: CMD = video_filter scale,format=bgr0,drawvg=file=$(DRAWVG_SCRIPT_VIDEO)
 
 tests/pixfmts.mak: TAG = GEN
-tests/pixfmts.mak: ffmpeg$(PROGSSUF)$(EXESUF) | tests
+tests/pixfmts.mak: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)printf "PIXFMTS = " > $@
 	$(Q)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin -pix_fmts list 2> /dev/null | awk 'NR > 8 && /^IO/ { printf $$2 " " }' >> $@
 	$(Q)printf "\n" >> $@
diff --git a/tests/fate/fits.mak b/tests/fate/fits.mak
index 408a0cf23d..10b67d60a9 100644
--- a/tests/fate/fits.mak
+++ b/tests/fate/fits.mak
@@ -1,5 +1,5 @@
 tests/data/fits-multi.fits: TAG = GEN
-tests/data/fits-multi.fits: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/fits-multi.fits: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -i $(TARGET_SAMPLES)/gif/m4nb.gif \
         -y $(TARGET_PATH)/$(@) 2>/dev/null
diff --git a/tests/fate/generic-tags.mak b/tests/fate/generic-tags.mak
index a30a65d2b5..e3bf7e98a2 100644
--- a/tests/fate/generic-tags.mak
+++ b/tests/fate/generic-tags.mak
@@ -1,5 +1,5 @@
 tests/data/generic-tags.mp3: TAG = GEN
-tests/data/generic-tags.mp3: ffmpeg$(PROGSSUF)$(EXESUF) $(SRC_PATH)/tests/generic-tags.ffmeta | tests/data
+tests/data/generic-tags.mp3: ffmpeg$(PROGSSUF)$(EXESUF) $(SRC_PATH)/tests/generic-tags.ffmeta
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	    -i $(TARGET_SAMPLES)/audiomatch/square3.mp3 \
         -f ffmetadata -i $(SRC_PATH)/tests/generic-tags.ffmeta \
diff --git a/tests/fate/hap.mak b/tests/fate/hap.mak
index 8268798f4a..36ed6c7b2a 100644
--- a/tests/fate/hap.mak
+++ b/tests/fate/hap.mak
@@ -48,13 +48,13 @@ FATE_HAPQA_EXTRACT_BSF-$(call REMUX, FRAMECRC MOV, HAPQA_EXTRACT_BSF) += $(FATE_
 
 #Test bsf conversion and mov
 tests/data/hapq_nosnappy.mov: TAG = GEN
-tests/data/hapq_nosnappy.mov: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hapq_nosnappy.mov: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-i $(TARGET_SAMPLES)/hap/HAPQA_NoSnappy_127x1.mov -nostdin -c:v copy -bsf:v hapqa_extract=texture=color \
         -tag:v HapY -metadata:s:v:0 encoder="HAPQ" $(TARGET_PATH)/$@ -y 2>/dev/null
 
 tests/data/hapalphaonly_nosnappy.mov: TAG = GEN
-tests/data/hapalphaonly_nosnappy.mov: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hapalphaonly_nosnappy.mov: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-i $(TARGET_SAMPLES)/hap/HAPQA_NoSnappy_127x1.mov -nostdin -c:v copy -bsf:v hapqa_extract=texture=alpha \
         -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" $(TARGET_PATH)/$@ -y 2>/dev/null
diff --git a/tests/fate/hevc.mak b/tests/fate/hevc.mak
index 7ce9ff403b..5a8a01e2ea 100644
--- a/tests/fate/hevc.mak
+++ b/tests/fate/hevc.mak
@@ -225,7 +225,7 @@ fate-hevc-paramchange-yuv420p-yuv420p10: CMD = framecrc -i $(TARGET_SAMPLES)/hev
 FATE_HEVC-$(call FRAMECRC, HEVC, HEVC, HEVC_PARSER SCALE_FILTER LARGE_TESTS) += fate-hevc-paramchange-yuv420p-yuv420p10
 
 tests/data/hevc-mp4.mov: TAG = GEN
-tests/data/hevc-mp4.mov: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hevc-mp4.mov: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-i $(TARGET_SAMPLES)/hevc-conformance/WPP_A_ericsson_MAIN10_2.bit -c copy -flags +bitexact $(TARGET_PATH)/$@ -y 2>/dev/null
 
diff --git a/tests/fate/hlsenc.mak b/tests/fate/hlsenc.mak
index cd6cd60365..6603e0b2c2 100644
--- a/tests/fate/hlsenc.mak
+++ b/tests/fate/hlsenc.mak
@@ -1,5 +1,5 @@
 tests/data/live_no_endlist.m3u8: TAG = GEN
-tests/data/live_no_endlist.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/live_no_endlist.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -f lavfi -v verbose -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=20" -f hls -hls_time 3 -map 0 \
         -hls_flags omit_endlist -codec:a mp2fixed -hls_segment_filename $(TARGET_PATH)/tests/data/live_no_endlist_%03d.ts \
@@ -13,7 +13,7 @@ fate-hls-live-no-endlist: CMP = oneline
 fate-hls-live-no-endlist: REF = e038bb8e65d4c1745b9b3ed643e607a3
 
 tests/data/event_no_endlist.m3u8: TAG = GEN
-tests/data/event_no_endlist.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/event_no_endlist.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -f lavfi -v verbose -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=20" -f hls -hls_time 3 -map 0 \
         -hls_playlist_type event -hls_flags omit_endlist -hls_list_size 0 -codec:a mp2fixed \
@@ -28,7 +28,7 @@ fate-hls-event-no-endlist: CMP = oneline
 fate-hls-event-no-endlist: REF = d9cd56b6aaebf67a52a63dd44ec5b085
 
 tests/data/live_last_endlist.m3u8: TAG = GEN
-tests/data/live_last_endlist.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/live_last_endlist.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -f lavfi -v verbose -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=20" -f hls -hls_time 3 -map 0 \
         -codec:a mp2fixed -hls_segment_filename $(TARGET_PATH)/tests/data/live_last_endlist_%03d.ts \
@@ -43,7 +43,7 @@ fate-hls-live-last-endlist: REF = 2ca8567092dcf01e37bedd50454d1ab7
 
 
 tests/data/live_endlist.m3u8: TAG = GEN
-tests/data/live_endlist.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/live_endlist.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -f lavfi -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=20" -f hls -hls_time 3 -map 0 \
         -hls_list_size 0 -codec:a mp2fixed -hls_segment_filename $(TARGET_PATH)/tests/data/live_endlist_%d.ts \
@@ -57,7 +57,7 @@ fate-hls-live-endlist: CMP = oneline
 fate-hls-live-endlist: REF = e189ce781d9c87882f58e3929455167b
 
 tests/data/hls_segment_size.m3u8: TAG = GEN
-tests/data/hls_segment_size.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_segment_size.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=20" -f hls -hls_segment_size 300000 -map 0 \
 	-hls_list_size 0 -codec:a mp2fixed -hls_segment_filename $(TARGET_PATH)/tests/data/hls_segment_size_%d.ts \
@@ -68,7 +68,7 @@ fate-hls-segment-size: tests/data/hls_segment_size.m3u8
 fate-hls-segment-size: CMD = framecrc -auto_conversion_filters -flags +bitexact -i $(TARGET_PATH)/tests/data/hls_segment_size.m3u8 -vf setpts=N*23
 
 tests/data/hls_segment_single.m3u8: TAG = GEN
-tests/data/hls_segment_single.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_segment_single.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=20" -f hls -hls_flags single_file -map 0 \
 	-hls_list_size 0 -codec:a mp2fixed -hls_segment_filename $(TARGET_PATH)/tests/data/hls_segment_single.ts \
@@ -79,7 +79,7 @@ fate-hls-segment-single: tests/data/hls_segment_single.m3u8
 fate-hls-segment-single: CMD = framecrc -auto_conversion_filters -flags +bitexact -i $(TARGET_PATH)/tests/data/hls_segment_single.m3u8 -vf setpts=N*23
 
 tests/data/hls_init_time.m3u8: TAG = GEN
-tests/data/hls_init_time.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_init_time.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=11" -f hls -hls_init_time 1 -hls_time 3 -map 0 \
 	-hls_list_size 5 -codec:a mp2fixed -hls_segment_filename $(TARGET_PATH)/tests/data/hls_init_time_%d.ts \
@@ -90,7 +90,7 @@ fate-hls-init-time: tests/data/hls_init_time.m3u8
 fate-hls-init-time: CMD = framecrc -auto_conversion_filters -flags +bitexact -i $(TARGET_PATH)/tests/data/hls_init_time.m3u8 -vf setpts=N*23
 
 tests/data/hls_list_size.m3u8: TAG = GEN
-tests/data/hls_list_size.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_list_size.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=20" -f hls -hls_time 4 -map 0 \
 	-hls_list_size 4 -codec:a mp2fixed -hls_segment_filename $(TARGET_PATH)/tests/data/hls_list_size_%d.ts \
@@ -101,7 +101,7 @@ fate-hls-list-size: tests/data/hls_list_size.m3u8
 fate-hls-list-size: CMD = framecrc -auto_conversion_filters -flags +bitexact -i $(TARGET_PATH)/tests/data/hls_list_size.m3u8 -vf setpts=N*23
 
 tests/data/hls_fmp4.m3u8: TAG = GEN
-tests/data/hls_fmp4.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_fmp4.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -re -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=5" -map 0 -codec:a mp2fixed \
 	-hls_segment_type mpegts -hls_fmp4_init_filename now.mp4 -hls_list_size 0 \
@@ -113,7 +113,7 @@ fate-hls-fmp4: tests/data/hls_fmp4.m3u8
 fate-hls-fmp4: CMD = framecrc -auto_conversion_filters -flags +bitexact -i $(TARGET_PATH)/tests/data/hls_fmp4.m3u8 -vf setpts=N*23
 
 tests/data/hls_fmp4_ac3.m3u8: TAG = GEN
-tests/data/hls_fmp4_ac3.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_fmp4_ac3.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-stream_loop 4 -i $(TARGET_SAMPLES)/ac3/monsters_inc_5.1_448_small.ac3 -c copy -map 0 \
 	-hls_segment_type fmp4 -hls_fmp4_init_filename now_ac3.mp4 -hls_list_size 0 \
@@ -128,7 +128,7 @@ fate-hls-fmp4_ac3: CMD = probeaudiostream $(TARGET_PATH)/tests/data/now_ac3.mp4
 
 
 tests/data/hls_cmfa.m3u8: TAG = GEN
-tests/data/hls_cmfa.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_cmfa.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-i $(TARGET_SAMPLES)/aac/al06_44.mp4 -c copy -map 0 \
 	-hls_segment_type fmp4 -hls_fmp4_init_filename now.cmfa -hls_list_size 0 \
@@ -147,7 +147,7 @@ FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_HLSENC_PROBE-yes)
 # -- Tests below do not require FATE samples (lavfi-generated input only) --
 
 tests/data/hls_playlist_type_vod.m3u8: TAG = GEN
-tests/data/hls_playlist_type_vod.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_playlist_type_vod.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "testsrc2=size=128x72:rate=1:d=3" -f hls -hls_time 1 -map 0:v \
 	-hls_playlist_type vod -hls_list_size 0 -c:v mpeg2video -g 1 \
@@ -160,7 +160,7 @@ fate-hls-playlist-type-vod: CMD = sed -n -e /^\#EXT-X-PLAYLIST-TYPE:/p -e /^\#EX
 fate-hls-playlist-type-vod: CMP = diff
 
 tests/data/hls_playlist_type_event.m3u8: TAG = GEN
-tests/data/hls_playlist_type_event.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_playlist_type_event.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "testsrc2=size=128x72:rate=1:d=3" -f hls -hls_time 1 -map 0:v \
 	-hls_playlist_type event -hls_list_size 0 -c:v mpeg2video -g 1 \
@@ -173,7 +173,7 @@ fate-hls-playlist-type-event: CMD = sed -n -e /^\#EXT-X-PLAYLIST-TYPE:/p -e /^\#
 fate-hls-playlist-type-event: CMP = diff
 
 tests/data/hls_round_durations.m3u8: TAG = GEN
-tests/data/hls_round_durations.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_round_durations.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "testsrc2=size=128x72:rate=1:d=3" -f hls -hls_time 1 -map 0:v \
 	-hls_flags round_durations -hls_list_size 0 -c:v mpeg2video -g 1 \
@@ -186,7 +186,7 @@ fate-hls-round-durations: CMD = sed -n -e /^\#EXTINF:/p $(TARGET_PATH)/tests/dat
 fate-hls-round-durations: CMP = diff
 
 tests/data/hls_discont_start.m3u8: TAG = GEN
-tests/data/hls_discont_start.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_discont_start.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "testsrc2=size=128x72:rate=1:d=3" -f hls -hls_time 1 -map 0:v \
 	-hls_flags discont_start -hls_list_size 0 -c:v mpeg2video -g 1 \
@@ -199,7 +199,7 @@ fate-hls-discont-start: CMD = sed -n -e /^\#EXT-X-DISCONTINUITY/p -e /^\#EXTINF:
 fate-hls-discont-start: CMP = diff
 
 tests/data/hls_independent_segments.m3u8: TAG = GEN
-tests/data/hls_independent_segments.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_independent_segments.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "testsrc2=size=128x72:rate=1:d=3" -f hls -hls_time 1 -map 0:v \
 	-hls_flags independent_segments -hls_list_size 0 -c:v mpeg2video -g 1 \
@@ -212,7 +212,7 @@ fate-hls-independent-segments: CMD = sed -n -e /^\#EXT-X-INDEPENDENT-SEGMENTS/p
 fate-hls-independent-segments: CMP = diff
 
 tests/data/hls_start_number.m3u8: TAG = GEN
-tests/data/hls_start_number.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_start_number.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "testsrc2=size=128x72:rate=1:d=3" -f hls -hls_time 1 -map 0:v \
 	-start_number 100 -hls_list_size 0 -c:v mpeg2video -g 1 \
@@ -225,7 +225,7 @@ fate-hls-start-number: CMD = sed -n -e /^\#EXT-X-MEDIA-SEQUENCE:/p -e /^[^\#]/p
 fate-hls-start-number: CMP = diff
 
 tests/data/hls_iframes_single_mpegts.m3u8: TAG = GEN
-tests/data/hls_iframes_single_mpegts.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_iframes_single_mpegts.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "testsrc2=size=128x72:rate=1:d=3" -f hls -hls_time 1 -map 0:v \
 	-hls_list_size 0 -c:v mpeg2video -g 1 -bitexact \
@@ -239,7 +239,7 @@ fate-hls-iframes-single-mpegts: CMD = sed -n -e /^\#EXT-X-BYTERANGE:/p $(TARGET_
 fate-hls-iframes-single-mpegts: CMP = diff
 
 tests/data/hls_iframes_single_fmp4.m3u8: TAG = GEN
-tests/data/hls_iframes_single_fmp4.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls_iframes_single_fmp4.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
 	-f lavfi -i "testsrc2=size=128x72:rate=1:d=3" -f hls -hls_time 1 -map 0:v \
 	-hls_list_size 0 -c:v mpeg2video -g 1 -bitexact -dct int \
diff --git a/tests/fate/libavdevice.mak b/tests/fate/libavdevice.mak
index 3ccbf0731d..3a2cbde456 100644
--- a/tests/fate/libavdevice.mak
+++ b/tests/fate/libavdevice.mak
@@ -2,7 +2,7 @@ FATE_LIBAVDEVICE-$(CONFIG_JACK_INDEV) += fate-timefilter
 fate-timefilter: libavdevice/tests/timefilter$(EXESUF)
 fate-timefilter: CMD = run libavdevice/tests/timefilter
 
-tests/data/alsa_nodesc.conf: | tests/data
+tests/data/alsa_nodesc.conf:
 	$(Q)printf 'pcm.nodesc {\n\ttype null\n\thint {\n\t\tshow on\n\t}\n}\n' > $@
 
 FATE_FFMPEG-$(CONFIG_ALSA_INDEV) += fate-alsa-device-list-nodesc
diff --git a/tests/fate/mov.mak b/tests/fate/mov.mak
index 5b45ea675c..5530427d9b 100644
--- a/tests/fate/mov.mak
+++ b/tests/fate/mov.mak
@@ -321,7 +321,7 @@ fate-mov-mp4-iamf-5_1_4: CMD = transcode wav $(SRC) mp4 "-auto_conversion_filter
 # Test muxing an IAMF track alongside a video one, with video as the first track.
 tests/data/mov-mp4-iamf-7_1_4-video-first.mp4: TAG = GEN
 tests/data/mov-mp4-iamf-7_1_4-video-first.mp4: tests/data/asynth-44100-12.wav tests/data/vsynth1.yuv tests/data/filtergraphs/iamf_7_1_4 tests/data/streamgroups/audio_element-7_1_4-2 tests/data/streamgroups/mix_presentation-7_1_4
-tests/data/mov-mp4-iamf-7_1_4-video-first.mp4: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/mov-mp4-iamf-7_1_4-video-first.mp4: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
   -f wav -i $(TARGET_PATH)/tests/data/asynth-44100-12.wav \
   -f rawvideo -s 352x288 -pix_fmt yuv420p -flags +bitexact -sws_flags +accurate_rnd+bitexact -i $(TARGET_PATH)/tests/data/vsynth1.yuv \
diff --git a/tests/fate/seek.mak b/tests/fate/seek.mak
index 106cc0578d..90cc6c999f 100644
--- a/tests/fate/seek.mak
+++ b/tests/fate/seek.mak
@@ -200,7 +200,7 @@ fate-seek-cache-pipe: CMD = cat $(SAMPLES)/gapless/gapless.mp3 | run libavformat
 fate-seek-mkv-codec-delay:   CMD = run libavformat/tests/seek$(EXESUF) $(TARGET_SAMPLES)/mkv/codec_delay_opus.mkv
 
 # A master playlist with separate audio and video media playlists with different DTS.
-tests/data/hls-seek.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/hls-seek.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -f lavfi -i "testsrc2=size=128x72:rate=10:d=6" \
         -f lavfi -i "aevalsrc=cos(2*PI*t)*sin(2*PI*(440+4*t)*t):d=6" \
diff --git a/tests/fate/segment.mak b/tests/fate/segment.mak
index 8537462762..32b4b974fa 100644
--- a/tests/fate/segment.mak
+++ b/tests/fate/segment.mak
@@ -1,19 +1,19 @@
 tests/data/mp4-to-ts.m3u8: TAG = GEN
-tests/data/mp4-to-ts.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/mp4-to-ts.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -i $(TARGET_SAMPLES)/h264/interlaced_crop.mp4 \
         -f ssegment -segment_time 1 -map 0 -flags +bitexact -codec copy \
         -segment_list $(TARGET_PATH)/$@ -y $(TARGET_PATH)/tests/data/mp4-to-ts-%03d.ts 2>/dev/null
 
 tests/data/adts-to-mkv.m3u8: TAG = GEN
-tests/data/adts-to-mkv.m3u8: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/adts-to-mkv.m3u8: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -i $(TARGET_SAMPLES)/audiomatch/tones_afconvert_16000_mono_aac_lc.m4a \
         -f segment -segment_time 1 -map 0 -flags +bitexact -codec copy -segment_format_options live=1 \
         -segment_list $(TARGET_PATH)/$@ -y $(TARGET_PATH)/tests/data/adts-to-mkv-%03d.mkv 2>/dev/null
 
 tests/data/adts-to-mkv-header.mkv: TAG = GEN
-tests/data/adts-to-mkv-header.mkv: ffmpeg$(PROGSSUF)$(EXESUF) | tests/data
+tests/data/adts-to-mkv-header.mkv: ffmpeg$(PROGSSUF)$(EXESUF)
 	$(M)$(TARGET_EXEC) $(TARGET_PATH)/$< -nostdin \
         -i $(TARGET_SAMPLES)/audiomatch/tones_afconvert_16000_mono_aac_lc.m4a \
         -f segment -segment_time 1 -map 0 -flags +bitexact -codec copy -segment_format_options live=1 \
@@ -25,11 +25,11 @@ tests/data/adts-to-mkv-header-%.mkv: tests/data/adts-to-mkv-header.mkv ;
 FATE_SEGMENT_PARTS += 000 001 002
 
 tests/data/adts-to-mkv-cated-all.mkv: TAG = GEN
-tests/data/adts-to-mkv-cated-all.mkv: tests/data/adts-to-mkv-header.mkv $(FATE_SEGMENT_PARTS:%=tests/data/adts-to-mkv-header-%.mkv) | tests/data
+tests/data/adts-to-mkv-cated-all.mkv: tests/data/adts-to-mkv-header.mkv $(FATE_SEGMENT_PARTS:%=tests/data/adts-to-mkv-header-%.mkv)
 	$(M)cat $^ >$@
 
 tests/data/adts-to-mkv-cated-%.mkv: TAG = GEN
-tests/data/adts-to-mkv-cated-%.mkv: tests/data/adts-to-mkv-header.mkv tests/data/adts-to-mkv-header-%.mkv | tests/data
+tests/data/adts-to-mkv-cated-%.mkv: tests/data/adts-to-mkv-header.mkv tests/data/adts-to-mkv-header-%.mkv
 	$(M)cat $^ >$@
 
 FATE_SEGMENT += fate-segment-mp4-to-ts
diff --git a/tools/Makefile b/tools/Makefile
index 7ae6e3cb75..bb80ba5e80 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -30,8 +30,6 @@ tools/enc_recon_frame_test$(EXESUF): tools/decode_simple.o
 tools/venc_data_dump$(EXESUF): tools/decode_simple.o
 tools/scale_slice_test$(EXESUF): tools/decode_simple.o
 
-tools/decode_simple.o: | tools
-
 OUTDIRS += tools
 
 clean::
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.