On Wed, Jan 6, 2021, at 10:56, Greg Reagle wrote: > On Wed, Jan 6, 2021, at 09:57, Sergey Matveev wrote: > > > clean) > > > redo-always > > > > No need to add redo-always to the targets that only can be "called" by > > the human/user. User uses "redo" command, that forces specified targets > > to be rebuild. So "redo clean/dst/install/whatever" will always do the > > target. redo-always here is completely useless. > > Thank you. I applied this change.
I am experiencing a problem with phony targets in redo [1]. If there exists a file named clean or all or dist or install or uninstall, then redo does not work properly (i.e. it won't run). Even if I put redo-always in the rule. Can I force redo to treat a target as phony somehow? Typescript included followed by redo file. [1] https://github.com/apenwarr/redo $ cat typescript Script started on 2021-01-08 09:54:05-05:00 [TERM="dumb" TTY="/dev/pts/2" COLUMNS="111" LINES="61"] ~/a/st (master|✚3…) $ redo clean redo clean ~/a/st (master|✚3…) $ touch clean ~/a/st (master|✚3…) $ redo clean redo: clean - you modified it; skipping redo: clean - old: '0' redo: clean - new: '1610117657.081428-0-26608022-33184-1000-1000' ~/a/st (master|✚3…) $ Script done on 2021-01-08 09:54:22-05:00 [COMMAND_EXIT_CODE="0"] :::::::::::::: default.do :::::::::::::: CC=${CC:-cc} VERSION=0.8.4 PREFIX=/usr/local MANPREFIX=${PREFIX}/share/man X11INC=/usr/X11R6/include X11LIB=/usr/X11R6/lib PKG_CONFIG=pkg-config INCS="-I${X11INC}" INCS="$INCS `${PKG_CONFIG} --cflags fontconfig`" INCS="$INCS `${PKG_CONFIG} --cflags freetype2`" LIBS="-L${X11LIB} -lm -lrt -lX11 -lutil -lXft" LIBS="$LIBS `${PKG_CONFIG} --libs fontconfig`" LIBS="$LIBS `${PKG_CONFIG} --libs freetype2`" STCPPFLAGS="-DVERSION=\"${VERSION}\" -D_XOPEN_SOURCE=600" STCFLAGS="${INCS} ${STCPPFLAGS} ${CPPFLAGS} ${CFLAGS}" STLDFLAGS="${LIBS} ${LDFLAGS}" SRC="st.c x.c" OBJ="st.o x.o" case "$1" in # Actual file targets in alphabetical order config.h) cp config.def.h "$3" ;; st) redo-ifchange $OBJ $CC -o "$3" $OBJ $STLDFLAGS ;; *.o) source="${1%.o}.c" redo-ifchange "$source" `sed -n 's/#include "\(.*\)"$/\1/p' "$source"` $CC $STCFLAGS -o "$3" -c "$source" ;; # ".Phony" targets in alphabetical order all) # what if there is a file named all redo-ifchange st ;; clean) redo-always rm -f st $OBJ st-"$VERSION".tar.gz ;; dist) # this creates an actual file, but it's not called "dist" mkdir -p st-"$VERSION" cp -R FAQ LEGACY TODO LICENSE Makefile README config.mk\ config.def.h st.info st.1 arg.h st.h win.h $SRC\ st-"$VERSION" tar -cf - st-"$VERSION" | gzip > st-"$VERSION".tar.gz rm -rf st-"$VERSION" ;; install) redo-ifchange st exec >&2 mkdir -p "$DESTDIR$PREFIX"/bin cp -f st "$DESTDIR$PREFIX"/bin chmod 755 "$DESTDIR$PREFIX"/bin/st mkdir -p "$DESTDIR$MANPREFIX"/man1 sed "s/VERSION/$VERSION/g" < st.1 > "$DESTDIR$MANPREFIX"/man1/st.1 chmod 644 "$DESTDIR$MANPREFIX"/man1/st.1 tic -sx st.info echo Please see the README file regarding the terminfo entry of st. ;; uninstall) rm -f "$DESTDIR$PREFIX"/bin/st rm -f "$DESTDIR$MANPREFIX"/man1/st.1 ;; *) echo "no rule to build '$1'" >&2 exit 1 ;; esac