From 7e2edad8efea55e8df1faa695d1389ef4e326d7c Mon Sep 17 00:00:00 2001 From: Stefano Pigozzi Date: Tue, 16 Jul 2013 13:28:28 +0200 Subject: switch the build system to waf This commit adds a new build system based on waf. configure and Makefile are deprecated effective immediately and someday in the future they will be removed (they are still available by running ./old-configure). You can find how the choice for waf came to be in `DOCS/waf-buildsystem.rst`. TL;DR: we couldn't get the same level of abstraction and customization with other build systems we tried (CMake and autotools). For guidance on how to build the software now, take a look at README.md and the cross compilation guide. CREDITS: This is a squash of ~250 commits. Some of them are not by me, so here is the deserved attribution: - @wm4 contributed some Windows fixes, renamed configure to old-configure and contributed to the bootstrap script. Also, GNU/Linux testing. - @lachs0r contributed some Windows fixes and the bootstrap script. - @Nikoli contributed a lot of testing and discovered many bugs. - @CrimsonVoid contributed changes to the bootstrap script. --- old-makefile | 565 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 565 insertions(+) create mode 100644 old-makefile (limited to 'old-makefile') diff --git a/old-makefile b/old-makefile new file mode 100644 index 0000000000..a6902fbb1a --- /dev/null +++ b/old-makefile @@ -0,0 +1,565 @@ +# MPlayer Makefile +# +# copyright (c) 2008 Diego Biurrun +# Rewritten entirely from a set of Makefiles written by Arpi and many others. +# +# This file is part of MPlayer. +# +# MPlayer is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# MPlayer is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with MPlayer; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +include old_build/config.mak + +###### variable declarations ####### + +SOURCES_AUDIO_INPUT-$(ALSA) += stream/ai_alsa1x.c +SOURCES_AUDIO_INPUT-$(OSS) += stream/ai_oss.c +SOURCES_AUDIO_INPUT-$(SNDIO) += stream/ai_sndio.c +SOURCES-$(AUDIO_INPUT) += $(SOURCES_AUDIO_INPUT-yes) +SOURCES-$(CDDA) += stream/stream_cdda.c \ + stream/cdinfo.c +SOURCES-$(DVBIN) += stream/dvb_tune.c \ + stream/stream_dvb.c +SOURCES-$(DVDREAD) += stream/stream_dvd.c \ + stream/stream_dvd_common.c + +SOURCES-$(HAVE_SYS_MMAN_H) += audio/filter/af_export.c +SOURCES-$(LADSPA) += audio/filter/af_ladspa.c +SOURCES-$(LIBASS) += sub/ass_mp.c sub/sd_ass.c \ + demux/demux_libass.c + +SOURCES-$(LIBBLURAY) += stream/stream_bluray.c +SOURCES-$(LIBBS2B) += audio/filter/af_bs2b.c + +SOURCES-$(LIBPOSTPROC) += video/filter/vf_pp.c +SOURCES-$(LIBSMBCLIENT) += stream/stream_smb.c + +SOURCES-$(COCOA) += video/out/cocoa/view.m \ + video/out/cocoa/window.m \ + video/out/cocoa/additions.m \ + video/out/cocoa_common.m \ + osdep/macosx_application.m \ + osdep/macosx_events.m \ + osdep/ar/HIDRemote.m \ + osdep/path-macosx.m + +SOURCES-$(MPG123) += audio/decode/ad_mpg123.c + +SOURCES-$(NEED_GETTIMEOFDAY) += osdep/gettimeofday.c +SOURCES-$(NEED_GLOB) += osdep/glob-win.c +SOURCES-$(WIN32) += osdep/path-win.c + +SOURCES-$(PRIORITY) += osdep/priority.c +SOURCES-$(PVR) += stream/stream_pvr.c +SOURCES-$(RADIO) += stream/stream_radio.c +SOURCES-$(RADIO_CAPTURE) += stream/audio_in.c +SOURCES-$(STREAM_CACHE) += stream/cache.c + +SOURCES-$(TV) += stream/stream_tv.c stream/tv.c \ + stream/frequencies.c stream/tvi_dummy.c + +SOURCES-$(TV_V4L2) += stream/tvi_v4l2.c stream/audio_in.c +SOURCES-$(VCD) += stream/stream_vcd.c +SOURCES-$(DUMMY_OSD) += sub/osd_dummy.c +SOURCES-$(LIBASS_OSD) += sub/osd_libass.c + +SOURCES-$(ALSA) += audio/out/ao_alsa.c +SOURCES-$(CACA) += video/out/vo_caca.c +SOURCES-$(SDL) += audio/out/ao_sdl.c +SOURCES-$(SDL2) += video/out/vo_sdl.c +SOURCES-$(COREAUDIO) += audio/out/ao_coreaudio.c \ + audio/out/ao_coreaudio_utils.c \ + audio/out/ao_coreaudio_properties.c +SOURCES-$(COREVIDEO) += video/out/vo_corevideo.c +SOURCES-$(DIRECT3D) += video/out/vo_direct3d.c \ + video/out/w32_common.c +SOURCES-$(DSOUND) += audio/out/ao_dsound.c +SOURCES-$(WASAPI) += audio/out/ao_wasapi.c +SOURCES-$(GL) += video/out/gl_common.c video/out/gl_osd.c \ + video/out/vo_opengl.c video/out/gl_lcms.c \ + video/out/gl_video.c video/out/dither.c \ + video/out/vo_opengl_old.c \ + video/out/pnm_loader.c + +SOURCES-$(ENCODING) += video/out/vo_lavc.c audio/out/ao_lavc.c \ + mpvcore/encode_lavc.c + +SOURCES-$(GL_WIN32) += video/out/w32_common.c video/out/gl_w32.c +SOURCES-$(GL_X11) += video/out/x11_common.c video/out/gl_x11.c +SOURCES-$(GL_COCOA) += video/out/gl_cocoa.c +SOURCES-$(GL_WAYLAND) += video/out/wayland_common.c \ + video/out/gl_wayland.c + +SOURCES-$(JACK) += audio/out/ao_jack.c +SOURCES-$(JOYSTICK) += mpvcore/input/joystick.c +SOURCES-$(LIBQUVI) += mpvcore/resolve_quvi.c +SOURCES-$(LIBQUVI9) += mpvcore/resolve_quvi9.c +SOURCES-$(LIRC) += mpvcore/input/lirc.c +SOURCES-$(OPENAL) += audio/out/ao_openal.c +SOURCES-$(OSS) += audio/out/ao_oss.c +SOURCES-$(PULSE) += audio/out/ao_pulse.c +SOURCES-$(PORTAUDIO) += audio/out/ao_portaudio.c +SOURCES-$(RSOUND) += audio/out/ao_rsound.c +SOURCES-$(SNDIO) += audio/out/ao_sndio.c +SOURCES-$(VDPAU) += video/vdpau.c video/out/vo_vdpau.c +SOURCES-$(VDPAU_GL_X11) += video/out/gl_hwdec_vdpau.c +SOURCES-$(VDA) += video/decode/vda.c +SOURCES-$(VDPAU_DEC) += video/decode/vdpau.c +SOURCES-$(VDPAU_DEC_OLD) += video/decode/vdpau_old.c +SOURCES-$(VAAPI) += video/out/vo_vaapi.c \ + video/decode/vaapi.c \ + video/vaapi.c +SOURCES-$(VAAPI_VPP) += video/filter/vf_vavpp.c +SOURCES-$(VAAPI_GLX) += video/out/gl_hwdec_vaglx.c + +SOURCES-$(X11) += video/out/vo_x11.c video/out/x11_common.c +SOURCES-$(XV) += video/out/vo_xv.c +SOURCES-$(WAYLAND) += video/out/vo_wayland.c video/out/wayland_common.c + +SOURCES-$(VF_LAVFI) += video/filter/vf_lavfi.c +SOURCES-$(AF_LAVFI) += audio/filter/af_lavfi.c + +SOURCES-$(LUA) += mpvcore/player/mp_lua.c + +ifeq ($(HAVE_AVUTIL_REFCOUNTING),no) + SOURCES-yes += video/decode/lavc_dr1.c +endif + +SOURCES-$(DLOPEN) += video/filter/vf_dlopen.c + +SOURCES = audio/audio.c \ + audio/audio_buffer.c \ + audio/chmap.c \ + audio/chmap_sel.c \ + audio/fmt-conversion.c \ + audio/format.c \ + audio/mixer.c \ + audio/reorder_ch.c \ + audio/decode/ad_lavc.c \ + audio/decode/ad_spdif.c \ + audio/decode/dec_audio.c \ + audio/filter/af.c \ + audio/filter/af_center.c \ + audio/filter/af_channels.c \ + audio/filter/af_convert24.c \ + audio/filter/af_convertsignendian.c \ + audio/filter/af_delay.c \ + audio/filter/af_dummy.c \ + audio/filter/af_equalizer.c \ + audio/filter/af_extrastereo.c \ + audio/filter/af_format.c \ + audio/filter/af_hrtf.c \ + audio/filter/af_karaoke.c \ + audio/filter/af_lavcac3enc.c \ + audio/filter/af_lavrresample.c \ + audio/filter/af_pan.c \ + audio/filter/af_scaletempo.c \ + audio/filter/af_sinesuppress.c \ + audio/filter/af_sub.c \ + audio/filter/af_surround.c \ + audio/filter/af_sweep.c \ + audio/filter/af_drc.c \ + audio/filter/af_volume.c \ + audio/filter/filter.c \ + audio/filter/tools.c \ + audio/filter/window.c \ + audio/out/ao.c \ + audio/out/ao_null.c \ + audio/out/ao_pcm.c \ + demux/codec_tags.c \ + demux/demux.c \ + demux/demux_edl.c \ + demux/demux_cue.c \ + demux/demux_lavf.c \ + demux/demux_mf.c \ + demux/demux_mkv.c \ + demux/demux_playlist.c \ + demux/demux_raw.c \ + demux/demux_subreader.c \ + demux/ebml.c \ + demux/mf.c \ + mpvcore/asxparser.c \ + mpvcore/av_common.c \ + mpvcore/av_log.c \ + mpvcore/av_opts.c \ + mpvcore/bstr.c \ + mpvcore/charset_conv.c \ + mpvcore/codecs.c \ + mpvcore/cpudetect.c \ + mpvcore/m_config.c \ + mpvcore/m_option.c \ + mpvcore/m_property.c \ + mpvcore/mp_common.c \ + mpvcore/mp_msg.c \ + mpvcore/mp_ring.c \ + mpvcore/options.c \ + mpvcore/parser-cfg.c \ + mpvcore/parser-mpcmd.c \ + mpvcore/path.c \ + mpvcore/playlist.c \ + mpvcore/playlist_parser.c \ + mpvcore/version.c \ + mpvcore/input/input.c \ + mpvcore/player/audio.c \ + mpvcore/player/configfiles.c \ + mpvcore/player/command.c \ + mpvcore/player/loadfile.c \ + mpvcore/player/main.c \ + mpvcore/player/misc.c \ + mpvcore/player/osd.c \ + mpvcore/player/playloop.c \ + mpvcore/player/screenshot.c \ + mpvcore/player/sub.c \ + mpvcore/player/video.c \ + mpvcore/player/timeline/tl_matroska.c \ + mpvcore/player/timeline/tl_mpv_edl.c \ + mpvcore/player/timeline/tl_cue.c \ + osdep/io.c \ + osdep/numcores.c \ + osdep/timer.c \ + osdep/threads.c \ + stream/cookies.c \ + stream/rar.c \ + stream/stream.c \ + stream/stream_avdevice.c \ + stream/stream_edl.c \ + stream/stream_file.c \ + stream/stream_lavf.c \ + stream/stream_memory.c \ + stream/stream_mf.c \ + stream/stream_null.c \ + stream/stream_rar.c \ + sub/dec_sub.c \ + sub/draw_bmp.c \ + sub/find_subfiles.c \ + sub/img_convert.c \ + sub/sd_lavc.c \ + sub/sd_lavc_conv.c \ + sub/sd_lavf_srt.c \ + sub/sd_microdvd.c \ + sub/sd_movtext.c \ + sub/sd_spu.c \ + sub/sd_srt.c \ + sub/spudec.c \ + sub/sub.c \ + ta/ta.c \ + ta/ta_utils.c \ + ta/ta_talloc.c \ + video/csputils.c \ + video/fmt-conversion.c \ + video/image_writer.c \ + video/img_format.c \ + video/mp_image.c \ + video/mp_image_pool.c \ + video/sws_utils.c \ + video/decode/dec_video.c \ + video/decode/vd.c \ + video/decode/vd_lavc.c \ + video/filter/vf.c \ + video/filter/pullup.c \ + video/filter/vf_crop.c \ + video/filter/vf_delogo.c \ + video/filter/vf_divtc.c \ + video/filter/vf_down3dright.c \ + video/filter/vf_dsize.c \ + video/filter/vf_eq.c \ + video/filter/vf_expand.c \ + video/filter/vf_flip.c \ + video/filter/vf_format.c \ + video/filter/vf_gradfun.c \ + video/filter/vf_hqdn3d.c \ + video/filter/vf_ilpack.c \ + video/filter/vf_mirror.c \ + video/filter/vf_noformat.c \ + video/filter/vf_noise.c \ + video/filter/vf_phase.c \ + video/filter/vf_pullup.c \ + video/filter/vf_rotate.c \ + video/filter/vf_scale.c \ + video/filter/vf_screenshot.c \ + video/filter/vf_softpulldown.c \ + video/filter/vf_stereo3d.c \ + video/filter/vf_sub.c \ + video/filter/vf_swapuv.c \ + video/filter/vf_unsharp.c \ + video/filter/vf_vo.c \ + video/filter/vf_yadif.c \ + video/out/bitmap_packer.c \ + video/out/aspect.c \ + video/out/filter_kernels.c \ + video/out/vo.c \ + video/out/vo_null.c \ + video/out/vo_image.c \ + osdep/$(GETCH) \ + osdep/$(TIMER) \ + $(SOURCES-yes) + +OBJECTS += $(addsuffix .o, $(basename $(SOURCES))) +OBJECTS-$(PE_EXECUTABLE) += osdep/mpv-rc.o +OBJECTS += $(OBJECTS-yes) + +DEP_FILES = $(patsubst %.S,%.d,$(patsubst %.cpp,%.d,$(patsubst %.c,%.d,$(SOURCES:.m=.d) $(SOURCES:.m=.d)))) + +ALL_TARGETS += mpv$(EXESUF) + +INSTALL_BIN += install-mpv +INSTALL_BIN_STRIP += install-mpv-strip +INSTALL_MAN = +INSTALL_PDF = + +ifeq ($(BUILD_MAN),yes) + INSTALL_MAN += install-mpv-man + ALL_TARGETS += DOCS/man/en/mpv.1 +endif + +ifeq ($(BUILD_PDF),yes) + INSTALL_PDF += install-mpv-pdf + ALL_TARGETS += DOCS/man/en/mpv.pdf +endif + +DIRS = . \ + audio \ + audio/decode \ + audio/filter \ + audio/out \ + mpvcore \ + mpvcore/input \ + mpvcore/timeline \ + demux \ + osdep \ + osdep/ar \ + stream \ + sub \ + video \ + video/decode \ + video/filter \ + video/out + + +ADDSUFFIXES = $(foreach suf,$(1),$(addsuffix $(suf),$(2))) +ADD_ALL_DIRS = $(call ADDSUFFIXES,$(1),$(DIRS)) +ADD_ALL_EXESUFS = $(1) $(call ADDSUFFIXES,$(EXESUFS_ALL),$(1)) + +###### brief build output ####### + +ifndef V +$(eval override CC = @printf "CC\t$$@\n"; $(CC)) +$(eval override RM = @$(RM)) +endif + +###### generic rules ####### + +all: $(ALL_TARGETS) + +%.tex: %.rst + $(RST2LATEX) --config=DOCS/man/docutils.conf $< $@ + +%.pdf: %.tex + pdflatex -interaction=batchmode -jobname=$(basename $@) $<; pdflatex -interaction=batchmode -jobname=$(basename $@) $< + +%.1: %.rst + $(RST2MAN) $< $@ + +%.o: %.S + $(CC) $(DEPFLAGS) $(CFLAGS) -c -o $@ $< + +%.o: %.c + $(CC) $(DEPFLAGS) $(CFLAGS) -c -o $@ $< + +%.o: %.cpp + $(CC) $(DEPFLAGS) $(CXXFLAGS) -c -o $@ $< + +%.o: %.m + $(CC) $(DEPFLAGS) $(CFLAGS) -c -o $@ $< + +%-rc.o: %.rc + $(WINDRES) -I. $< $@ + +mpv$(EXESUF): $(OBJECTS) +mpv$(EXESUF): + $(CC) -o $@ $^ $(EXTRALIBS) + +mpvcore/input/input.c: mpvcore/input/input_conf.h +mpvcore/input/input_conf.h: TOOLS/file2string.pl etc/input.conf + ./$^ >$@ + +MKVLIB_DEPS = TOOLS/lib/Parse/Matroska.pm \ + TOOLS/lib/Parse/Matroska/Definitions.pm \ + TOOLS/lib/Parse/Matroska/Element.pm \ + TOOLS/lib/Parse/Matroska/Reader.pm \ + TOOLS/lib/Parse/Matroska/Utils.pm \ + +demux/ebml.c demux/demux_mkv.c: demux/ebml_types.h +demux/ebml_types.h: TOOLS/matroska.pl $(MKVLIB_DEPS) + ./$< --generate-header > $@ + +demux/ebml.c: demux/ebml_defs.c +demux/ebml_defs.c: TOOLS/matroska.pl $(MKVLIB_DEPS) + ./$< --generate-definitions > $@ + +video/out/gl_video.c: video/out/gl_video_shaders.h +video/out/gl_video_shaders.h: TOOLS/file2string.pl video/out/gl_video_shaders.glsl + ./$^ >$@ + +video/out/x11_common.c: video/out/x11_icon.inc +video/out/x11_icon.inc: TOOLS/file2string.pl video/out/x11_icon.bin + ./$^ >$@ + +sub/osd_libass.c: sub/osd_font.h +sub/osd_font.h: TOOLS/file2string.pl sub/osd_font.otf + ./$^ >$@ + +mpvcore/player/mp_lua.c: mpvcore/player/lua/defaults.inc +mpvcore/player/lua/defaults.inc: TOOLS/file2string.pl mpvcore/player/lua/defaults.lua + ./$^ >$@ + +mpvcore/player/mp_lua.c: mpvcore/player/lua/assdraw.inc +mpvcore/player/lua/assdraw.inc: TOOLS/file2string.pl mpvcore/player/lua/assdraw.lua + ./$^ >$@ + +mpvcore/player/mp_lua.c: mpvcore/player/lua/osc.inc +mpvcore/player/lua/osc.inc: TOOLS/file2string.pl mpvcore/player/lua/osc.lua + ./$^ >$@ + +# ./configure must be rerun if it changed +config.mak: configure + @echo "############################################################" + @echo "####### Please run ./configure again - it's changed! #######" + @echo "############################################################" + +version.h .version: version.sh + ./$< + +# Force version.sh to run to potentially regenerate version.h +-include .version + +%$(EXESUF): %.c + $(CC) $(CFLAGS) -o $@ $^ + + +###### dependency declarations / specific CFLAGS ###### + +mpvcore/version.c osdep/mpv-rc.o: version.h + +osdep/mpv-rc.o: osdep/mpv.exe.manifest etc/mpv-icon.ico + +DOCS/man/en/mpv.1 DOCS/man/en/mpv.pdf: DOCS/man/en/af.rst \ + DOCS/man/en/ao.rst \ + DOCS/man/en/changes.rst \ + DOCS/man/en/encode.rst \ + DOCS/man/en/input.rst \ + DOCS/man/en/options.rst \ + DOCS/man/en/vf.rst \ + DOCS/man/en/vo.rst + +###### installation / clean / generic rules ####### + +install: $(INSTALL_BIN) install-data $(INSTALL_MAN) $(INSTALL_PDF) +install-no-man: $(INSTALL_BIN) install-data +install-strip: $(INSTALL_BIN_STRIP) install-data $(INSTALL_MAN) $(INSTALL_PDF) +install-strip-no-man: $(INSTALL_BIN_STRIP) install-data + +install-dirs: + if test ! -d $(BINDIR) ; then $(INSTALL) -d $(BINDIR) ; fi + +install-%: %$(EXESUF) install-dirs + $(INSTALL) -m 755 $< $(BINDIR) + +install-%-strip: %$(EXESUF) install-dirs + $(INSTALL) -m 755 -s $< $(BINDIR) + +install-mpv-man: install-mpv-man-en + +install-mpv-man-en: DOCS/man/en/mpv.1 + if test ! -d $(MANDIR)/man1 ; then $(INSTALL) -d $(MANDIR)/man1 ; fi + $(INSTALL) -m 644 DOCS/man/en/mpv.1 $(MANDIR)/man1/ + +install-mpv-pdf: install-mpv-pdf-en + +install-mpv-pdf-en: DOCS/man/en/mpv.pdf + if test ! -d $(DOCDIR) ; then $(INSTALL) -d $(DOCDIR) ; fi + $(INSTALL) -m 644 DOCS/man/en/mpv.pdf $(DOCDIR)/ + +ICONSIZES = 16x16 32x32 64x64 + +define ICON_INSTALL_RULE +install-mpv-icon-$(size): etc/mpv-icon-8bit-$(size).png + $(INSTALL) -d $(prefix)/share/icons/hicolor/$(size)/apps + $(INSTALL) -m 644 etc/mpv-icon-8bit-$(size).png $(prefix)/share/icons/hicolor/$(size)/apps/mpv.png +endef + +$(foreach size,$(ICONSIZES),$(eval $(ICON_INSTALL_RULE))) + +install-mpv-icons: $(foreach size,$(ICONSIZES),install-mpv-icon-$(size)) + +install-mpv-desktop: etc/mpv.desktop + $(INSTALL) -d $(prefix)/share/applications + $(INSTALL) -m 644 etc/mpv.desktop $(prefix)/share/applications/ + +install-data: install-mpv-icons install-mpv-desktop + +uninstall: + $(RM) $(BINDIR)/mpv$(EXESUF) + $(RM) $(MANDIR)/man1/mpv.1 + $(RM) $(MANDIR)/en/man1/mpv.1 + $(RM) $(DOCDIR)/mpv.pdf + $(RM) $(prefix)/share/applications/mpv.desktop + $(RM) $(foreach size,$(ICONSIZES),$(prefix)/share/icons/hicolor/$(size)/apps/mpv.png) + +clean: + -$(RM) $(call ADD_ALL_DIRS,/*.o /*.d /*.a /*.ho /*~) + -$(RM) $(call ADD_ALL_DIRS,/*.o /*.a /*.ho /*~) + -$(RM) $(call ADD_ALL_EXESUFS,mpv) + -$(RM) $(call ADDSUFFIXES,.pdf .tex .log .aux .out .toc,DOCS/man/*/mpv) + -$(RM) DOCS/man/*/mpv.1 + -$(RM) version.h + -$(RM) mpvcore/input/input_conf.h + -$(RM) video/out/vdpau_template.c + -$(RM) demux/ebml_types.h demux/ebml_defs.c + -$(RM) video/out/gl_video_shaders.h + -$(RM) video/out/x11_icon.inc + -$(RM) sub/osd_font.h + -$(RM) mpvcore/player/lua/defaults.inc + -$(RM) mpvcore/player/lua/assdraw.inc + -$(RM) mpvcore/player/lua/osc.inc + +distclean: clean + -$(RM) config.log old_build/config.h old_build/config.mak Makefile config.mak config.h TAGS tags + -rmdir old_build/ + +TAGS: + $(RM) $@; find . -name '*.[chS]' -o -name '*.asm' | xargs etags -a + +tags: + $(RM) $@; find . -name '*.[chS]' -o -name '*.asm' | xargs ctags -a + +osxbundle: + @TOOLS/osxbundle.py mpv + +osxbundle-skip-deps: + @TOOLS/osxbundle.py --skip-deps mpv + +-include $(DEP_FILES) + +.PHONY: all *install* *clean .version + +# Disable suffix rules. Most of the builtin rules are suffix rules, +# so this saves some time on slow systems. +.SUFFIXES: + +# If a command returns failure but changed its target file, delete the +# (presumably malformed) file. Otherwise the file would be considered to +# be up to date if make is restarted. + +.DELETE_ON_ERROR: -- cgit v1.2.3