diff --git a/Makefile.in b/Makefile.in
index d28d87507a44e9baf2f3afa0511f9bec92de4ad7..78959f0120bab850e780ca7f47f3cc150a8ad560 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -176,18 +176,20 @@ des.$(OBJEXT): des.c des.h $(des_headers)
 
 .texinfo.html:
 	cd $(srcdir) && $(MAKEINFO) --html --no-split \
-	  --output $@T `basename $<` \
+	  --output $@T `basename "$<"` \
 	  && test -s $@T && mv -f $@T $@
 
 .texinfo.dvi:
-	cd $(srcdir) && texi2dvi `basename $<`
+	cd $(srcdir) && texi2dvi `basename "$<"`
 
 .dvi.ps:
 	cd $(srcdir) && dvips -Ppdf -G0 -o `basename $< .dvi`.ps `basename $<`
 
+# Avoid rebuilding .dvi and .ps files when the .texinfo source is unchanged.
 PS2PDFFLAGS=-dCompatibilityLevel=1.3 -dMAxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true
-.ps.pdf:
-	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename $<`
+.texinfo.pdf:
+	$(MAKE) `basename "$<" .texinfo`.ps
+	cd $(srcdir) && ps2pdf $(PS2PDFFLAGS) `basename "$<" .texinfo`.ps
 
 # Configure-related rules, mostly copied from the autoconf manual. No
 # $(srcdir) prefixes on the targets, though.