GitBucket
4.21.2
Toggle navigation
Snippets
Sign in
Files
Branches
1
Releases
Issues
1
Pull requests
Labels
Priorities
Milestones
Wiki
Forks
nigel.stanger
/
Handbook
Browse code
- Added XCF to PNG conversion.
master
1 parent
0c335fd
commit
af4e54b6e94b0b35cca9edc6078603d9499ead13
nstanger
authored
on 1 Jul 2012
Patch
Showing
3 changed files
make-includes/local_configuration.make.in
make-includes/standard_paths.make
make-includes/standard_rules.make
Ignore Space
Show notes
View
make-includes/local_configuration.make.in
################################################################################ # # $Id$ # # @configure_input@ # # This file sets up items that are system dependent (mostly paths to various) # tools, so it must always be loaded FIRST, before any other make includes! In # particular, it MUST be loaded before files that assume its existence, such # as standard_rules.make. # ################################################################################ # File system. MKDIR_P=@MKDIR_P@ MV=@MV@ CP=@CP@ RM=@RM@ TOUCH=@TOUCH@ # Searching. GREP=@GREP@ FIND=@FIND@ # Tests. TEST=@TEST_PROGRAM@ TRUE=@TRUE@ FALSE=@FALSE@ # Output. ECHO=@ECHO@ CAT=@CAT@ ANNOUNCE=@ANNOUNCE@ # Miscellaneous. SED=@SED@ CUT=@CUT@ PERL=@PERL@ DATE=@DATE@ EXPR=@EXPR@ JAVA=@JAVA@ MAKE=@MAKE@ # LaTeX and friends. LATEX=@latex@ PDFLATEX=@pdflatex@ XELATEX=@xelatex@ DVIPS=@dvips@ # XML manipulation. XMLLINT=@XMLLINT@ # Note: XSLTPROC is distinct from the XSLT environment variable. # We may not even use this directly, as the command-line arguments are # different for each processor anyway, which means that the current # approach of parameterised make functions is better in general. XSLTPROC=@XSLTPROC@ RESOLVER=@RESOLVER@ # Image manipulation and conversion (includes PDF & PS). CONVERT=@CONVERT@ COMPOSITE=@COMPOSITE@ PDFNUP=@PDFNUP@ PDFCROP=@PDFCROP@ PS2EPS=@PS2EPS@ PS2PDF=@PS2PDF@ SHIFTBBOX=@SHIFTBBOX@ EPSTOPDF=@EPSTOPDF@ INKSCAPE=@INKSCAPE@ GS=@GS@ XCF2PNG=@XCF2PNG@ # Plotting tools. PLOTICUS=@PLOTICUS@ R=@R@
################################################################################ # # $Id$ # # @configure_input@ # # This file sets up items that are system dependent (mostly paths to various) # tools, so it must always be loaded FIRST, before any other make includes! In # particular, it MUST be loaded before files that assume its existence, such # as standard_rules.make. # ################################################################################ # File system. MKDIR_P=@MKDIR_P@ MV=@MV@ CP=@CP@ RM=@RM@ TOUCH=@TOUCH@ # Searching. GREP=@GREP@ FIND=@FIND@ # Tests. TEST=@TEST_PROGRAM@ TRUE=@TRUE@ FALSE=@FALSE@ # Output. ECHO=@ECHO@ CAT=@CAT@ ANNOUNCE=@ANNOUNCE@ # Miscellaneous. SED=@SED@ CUT=@CUT@ PERL=@PERL@ DATE=@DATE@ EXPR=@EXPR@ JAVA=@JAVA@ MAKE=@MAKE@ # LaTeX and friends. LATEX=@latex@ PDFLATEX=@pdflatex@ XELATEX=@xelatex@ DVIPS=@dvips@ # XML manipulation. XMLLINT=@XMLLINT@ # Note: XSLTPROC is distinct from the XSLT environment variable. # We may not even use this directly, as the command-line arguments are # different for each processor anyway, which means that the current # approach of parameterised make functions is better in general. XSLTPROC=@XSLTPROC@ RESOLVER=@RESOLVER@ # Image manipulation and conversion (includes PDF & PS). CONVERT=@CONVERT@ COMPOSITE=@COMPOSITE@ PDFNUP=@PDFNUP@ PDFCROP=@PDFCROP@ PS2EPS=@PS2EPS@ PS2PDF=@PS2PDF@ SHIFTBBOX=@SHIFTBBOX@ EPSTOPDF=@EPSTOPDF@ INKSCAPE=@INKSCAPE@ GS=@GS@ # Plotting tools. PLOTICUS=@PLOTICUS@ R=@R@
Ignore Space
Show notes
View
make-includes/standard_paths.make
################################################################################ # # File: $Id$ # # Specify standard file path list. # ################################################################################ ################################################################################ # # Required make variables. These should be defined by the calling makefile. # # IMGDIR # The path to the directory that contains images, e.g., "images". # IMGDIR?=$(error The required make variable IMGDIR has not been defined. Please set it to the directory in which images are located) ################################################################################ # # Standard paths. # vpath %.pdf $(IMGDIR) vpath %.png $(IMGDIR) vpath %.tif $(IMGDIR) vpath %.jpg $(IMGDIR) vpath %.plo $(IMGDIR) vpath %.ps $(IMGDIR) vpath %.eps $(IMGDIR) vpath %.svg $(IMGDIR) vpath %.pict $(IMGDIR) vpath %.xcf $(IMGDIR) vpath %.R $(IMGDIR)
################################################################################ # # File: $Id$ # # Specify standard file path list. # ################################################################################ ################################################################################ # # Required make variables. These should be defined by the calling makefile. # # IMGDIR # The path to the directory that contains images, e.g., "images". # IMGDIR?=$(error The required make variable IMGDIR has not been defined. Please set it to the directory in which images are located) ################################################################################ # # Standard paths. # vpath %.pdf $(IMGDIR) vpath %.png $(IMGDIR) vpath %.tif $(IMGDIR) vpath %.jpg $(IMGDIR) vpath %.plo $(IMGDIR) vpath %.ps $(IMGDIR) vpath %.eps $(IMGDIR) vpath %.svg $(IMGDIR) vpath %.pict $(IMGDIR) vpath %.R $(IMGDIR)
Ignore Space
Show notes
View
make-includes/standard_rules.make
################################################################################ # # File: $Id$ # # Standard rules for a variety of situations. Includes standard suffixes and # paths. # # ################################################################################ ################################################################################ # # Required make variables. These should be defined by the calling makefile. # # PAPER_NUMBER # The paper number for the current paper, e.g., 212. # PAPER_NUMBER?=$(error The required make variable PAPER_NUMBER has not been defined. Please set it to the correct value) # # IMGDIR # The path to the directory that contains images, e.g., images. # IMGDIR?=$(error The required make variable IMGDIR has not been defined. Please set it to the directory in which images are located) ################################################################################ # # Default rules. # # # PDF from LaTeX via DVI, typically for images drawn using PSTricks). # %.pdf %-print.pdf: $(IMGDIR)/%.tex $(LATEX) --jobname=$(IMGDIR)/$* $< $(DVIPS) -q -f $(IMGDIR)/$* | $(PS2EPS) --quiet --loose | $(EPSTOPDF) --filter --outfile=$(IMGDIR)/$@ # # PDF from LaTeX. # %.pdf: %.tex ifdef UNICODE $(XELATEX) $< $(XELATEX) $< else $(PDFLATEX) $< $(PDFLATEX) $< endif # # 2-up PDF from 1-up PDF. # %-2up.pdf: %.pdf $(PDFNUP) $< --nup 2x1 --outfile $@ # # Derived XML with inclusions from source XML without inclusions. # # This is done by simply running the original source through xmllint # with the --xinclude option to process any xi:include elements. # The result of this could just be piped into the XSLT processor, # except that (a) not all of the processors support input from stdin, # and (b) combining both xmllint and XSLT processing into one command # means that make won't stop if there's any errors from xmllint. # # Sed is used to add a comment to the derived XML file, warning that this # is generated and shouldn't be edited. Sed was used because the <?xml?> # processing instruction MUST be on the first line. The implication here # is that all input source files have an <?xml?> processing instruction # (which they should anyway). # %-derived.xml: %.xml $(XMLLINT) --xinclude $< > $@ @$(SED) --in-place --expression='1a <!-- THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT! -->' $@ # # LaTeX from derived XML. # %.tex: %-derived.xml ifdef UNICODE $(call xslt,$<,xml2xelatex.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)'),$(call xslt_parameter,paper-number,'$(PAPER_NUMBER)'),$(call xslt_parameter,paper-year,'$(PAPER_YEAR)'),$(call xslt_parameter,paper-period,'$(PAPER_PERIOD)')) > $@ else $(call xslt,$<,xml2latex.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)'),$(call xslt_parameter,paper-number,'$(PAPER_NUMBER)'),$(call xslt_parameter,paper-year,'$(PAPER_YEAR)'),$(call xslt_parameter,paper-period,'$(PAPER_PERIOD)')) > $@ endif # # HTML from derived XML. # %.html: %-derived.xml ifdef UNICODE $(call xslt,$<,xml2xhtml.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)'),$(call xslt_parameter,paper-number,'$(PAPER_NUMBER)'),$(call xslt_parameter,paper-year,'$(PAPER_YEAR)'),$(call xslt_parameter,paper-period,'$(PAPER_PERIOD)')) > $@ else $(call xslt,$<,xml2html.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)'),$(call xslt_parameter,paper-number,'$(PAPER_NUMBER)'),$(call xslt_parameter,paper-year,'$(PAPER_YEAR)'),$(call xslt_parameter,paper-period,'$(PAPER_PERIOD)')) > $@ endif # # PNG from TIFF (normal) # %.png %-print.png %-web.png: %.tif $(CONVERT) "$<" $(IMGDIR)/$@ # # PNG from TIFF (slide background) # # We lighten these so that they don't overwhelm the text. Note that 15% is # too light for most data projectors, so let's try 33% and see what # happens... (this looks far too much on screen, but data projectors tend # to wash things out much, much more). # # Includes both blurred and unblurred versions, use as required. # %-BG.png: $(IMGDIR)/%.tif $(CONVERT) $< -threshold "-1" -depth 16 - | $(COMPOSITE) -dissolve 33% $< - $(IMGDIR)/$@ # %-BG-blur.png: %.tif $(CONVERT) -blur 0.5 $< $(IMGDIR)/$*.png $(CONVERT) $(IMGDIR)/$*.png -threshold "-1" -depth 16 - | $(COMPOSITE) -dissolve 33% $(IMGDIR)/$*.png - $(IMGDIR)/$@ @rm -f $(IMGDIR)/$*.png # # PNG from PICT. # %.png %-print.png %-web.png: %.pict $(CONVERT) "$<" $(IMGDIR)/$@ # # PNG from XCF. # %.png: %.xcf $(XCF2PNG) -o $(IMGDIR)/$@ $< # # PNG from EPS. # %.png %-print.png %-web.png: %.eps $(PS2EPS) --ignoreBB --nohires --loose --gsbbox < $< | \ $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r96 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ - %-web-zoom.png: %.eps $(PS2EPS) --ignoreBB --nohires --loose --gsbbox < $< | \ $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r144 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ - # # PNG from PS. # %-web.png: %.ps @$(PS2EPS) --ignoreBB --nohires --loose --gsbbox < $< | \ $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r96 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ - %-web-zoom.png: %.ps @$(PS2EPS) --ignoreBB --nohires --loose --gsbbox < $< | \ $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r144 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ - # # PNG from PDF. # %-web.png: %.pdf $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -r96 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ $< %-web-zoom.png: %.pdf $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -r144 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ $< # # PDF from Ploticus. # %.pdf %-print.pdf: %.plo $(PLOTICUS) -eps -tightcrop -o stdout $< | $(SHIFTBBOX) | $(EPSTOPDF) --filter --outfile=$(IMGDIR)/$@ # # PDF from R. # This assumes that the first argument to the R script is the output filename # for the resultant PDF. # %.pdf %-print.pdf: %.R $(R) --slave --file=$< --args "$(IMGDIR)/$@" $(PDFCROP) $(IMGDIR)/$@ $(IMGDIR)/$*-crop.pdf -$(MV) $(IMGDIR)/$*-crop.pdf $(IMGDIR)/$@ # # PDF from PS # %.pdf %-print.pdf: %.ps $(PS2EPS) --quiet --ignoreBB --nohires --loose < $< | $(EPSTOPDF) --filter --outfile=$(IMGDIR)/$@ # # PDF from EPS # %.pdf %-print.pdf: %.eps $(EPSTOPDF) --outfile=$(IMGDIR)/$@ $< # $(PS2EPS) --ignoreBB --nohires --loose < $< | $(PS2PDF) -dEPSCrop - $(IMGDIR)/$@ # # PDF from SVG (via Inkscape) # The --export-area-drawing option now appears to behave correctly with # PDFs (previously it over-cropped slightly). # %.pdf %-print.pdf: %.svg $(INKSCAPE) --file=$< --without-gui --export-area-drawing --export-pdf=$(IMGDIR)/$@ # # PNG from SVG (via Inkscape) # %.png %-print.png %-web.png: %.svg $(INKSCAPE) --file=$< --without-gui --export-area-drawing --export-background-opacity=1.0 --export-dpi=96 --export-png=$(IMGDIR)/$@ %-web-zoom.png: %.svg $(INKSCAPE) --file=$< --without-gui --export-area-drawing --export-background-opacity=1.0 --export-dpi=144 --export-png=$(IMGDIR)/$@ %-transparent.png: %.svg $(INKSCAPE) --file=$< --without-gui --export-area-drawing --export-background-opacity=0 --export-dpi=96 --export-png=$(IMGDIR)/$@ # # PNG from PNG (change the name). # These appear to need to be separate rules. If both variants need to be # created (i.e., both %-web.png and %-print.png), it only generates one of # them (most likely %-web.png as it's first in the rule) if the rules are # combined into one. This is Kind of Weird. # %-print.png: %.png $(CP) $< $(IMGDIR)/$@ %-web.png: %.png $(CP) $< $(IMGDIR)/$@
################################################################################ # # File: $Id$ # # Standard rules for a variety of situations. Includes standard suffixes and # paths. # # ################################################################################ ################################################################################ # # Required make variables. These should be defined by the calling makefile. # # PAPER_NUMBER # The paper number for the current paper, e.g., 212. # PAPER_NUMBER?=$(error The required make variable PAPER_NUMBER has not been defined. Please set it to the correct value) # # IMGDIR # The path to the directory that contains images, e.g., images. # IMGDIR?=$(error The required make variable IMGDIR has not been defined. Please set it to the directory in which images are located) ################################################################################ # # Default rules. # # # PDF from LaTeX via DVI, typically for images drawn using PSTricks). # %.pdf %-print.pdf: $(IMGDIR)/%.tex $(LATEX) --jobname=$(IMGDIR)/$* $< $(DVIPS) -q -f $(IMGDIR)/$* | $(PS2EPS) --quiet --loose | $(EPSTOPDF) --filter --outfile=$(IMGDIR)/$@ # # PDF from LaTeX. # %.pdf: %.tex ifdef UNICODE $(XELATEX) $< $(XELATEX) $< else $(PDFLATEX) $< $(PDFLATEX) $< endif # # 2-up PDF from 1-up PDF. # %-2up.pdf: %.pdf $(PDFNUP) $< --nup 2x1 --outfile $@ # # Derived XML with inclusions from source XML without inclusions. # # This is done by simply running the original source through xmllint # with the --xinclude option to process any xi:include elements. # The result of this could just be piped into the XSLT processor, # except that (a) not all of the processors support input from stdin, # and (b) combining both xmllint and XSLT processing into one command # means that make won't stop if there's any errors from xmllint. # # Sed is used to add a comment to the derived XML file, warning that this # is generated and shouldn't be edited. Sed was used because the <?xml?> # processing instruction MUST be on the first line. The implication here # is that all input source files have an <?xml?> processing instruction # (which they should anyway). # %-derived.xml: %.xml $(XMLLINT) --xinclude $< > $@ @$(SED) --in-place --expression='1a <!-- THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT! -->' $@ # # LaTeX from derived XML. # %.tex: %-derived.xml ifdef UNICODE $(call xslt,$<,xml2xelatex.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)'),$(call xslt_parameter,paper-number,'$(PAPER_NUMBER)'),$(call xslt_parameter,paper-year,'$(PAPER_YEAR)'),$(call xslt_parameter,paper-period,'$(PAPER_PERIOD)')) > $@ else $(call xslt,$<,xml2latex.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)'),$(call xslt_parameter,paper-number,'$(PAPER_NUMBER)'),$(call xslt_parameter,paper-year,'$(PAPER_YEAR)'),$(call xslt_parameter,paper-period,'$(PAPER_PERIOD)')) > $@ endif # # HTML from derived XML. # %.html: %-derived.xml ifdef UNICODE $(call xslt,$<,xml2xhtml.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)'),$(call xslt_parameter,paper-number,'$(PAPER_NUMBER)'),$(call xslt_parameter,paper-year,'$(PAPER_YEAR)'),$(call xslt_parameter,paper-period,'$(PAPER_PERIOD)')) > $@ else $(call xslt,$<,xml2html.xsl,$(call xslt_parameter,subject-code,'$(SUBJECT_CODE)'),$(call xslt_parameter,paper-number,'$(PAPER_NUMBER)'),$(call xslt_parameter,paper-year,'$(PAPER_YEAR)'),$(call xslt_parameter,paper-period,'$(PAPER_PERIOD)')) > $@ endif # # PNG from TIFF (normal) # %.png %-print.png %-web.png: %.tif $(CONVERT) "$<" $(IMGDIR)/$@ # # PNG from TIFF (slide background) # # We lighten these so that they don't overwhelm the text. Note that 15% is # too light for most data projectors, so let's try 33% and see what # happens... (this looks far too much on screen, but data projectors tend # to wash things out much, much more). # # Includes both blurred and unblurred versions, use as required. # %-BG.png: $(IMGDIR)/%.tif $(CONVERT) $< -threshold "-1" -depth 16 - | $(COMPOSITE) -dissolve 33% $< - $(IMGDIR)/$@ # %-BG-blur.png: %.tif $(CONVERT) -blur 0.5 $< $(IMGDIR)/$*.png $(CONVERT) $(IMGDIR)/$*.png -threshold "-1" -depth 16 - | $(COMPOSITE) -dissolve 33% $(IMGDIR)/$*.png - $(IMGDIR)/$@ @rm -f $(IMGDIR)/$*.png # # PNG from PICT. # %.png %-print.png %-web.png: %.pict $(CONVERT) "$<" $(IMGDIR)/$@ # # PNG from EPS. # %.png %-print.png %-web.png: %.eps $(PS2EPS) --ignoreBB --nohires --loose --gsbbox < $< | \ $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r96 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ - %-web-zoom.png: %.eps $(PS2EPS) --ignoreBB --nohires --loose --gsbbox < $< | \ $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r144 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ - # # PNG from PS. # %-web.png: %.ps @$(PS2EPS) --ignoreBB --nohires --loose --gsbbox < $< | \ $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r96 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ - %-web-zoom.png: %.ps @$(PS2EPS) --ignoreBB --nohires --loose --gsbbox < $< | \ $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r144 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ - # # PNG from PDF. # %-web.png: %.pdf $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -r96 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ $< %-web-zoom.png: %.pdf $(GS) -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -r144 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$(IMGDIR)/$@ $< # # PDF from Ploticus. # %.pdf %-print.pdf: %.plo $(PLOTICUS) -eps -tightcrop -o stdout $< | $(SHIFTBBOX) | $(EPSTOPDF) --filter --outfile=$(IMGDIR)/$@ # # PDF from R. # This assumes that the first argument to the R script is the output filename # for the resultant PDF. # %.pdf %-print.pdf: %.R $(R) --slave --file=$< --args "$(IMGDIR)/$@" $(PDFCROP) $(IMGDIR)/$@ $(IMGDIR)/$*-crop.pdf -$(MV) $(IMGDIR)/$*-crop.pdf $(IMGDIR)/$@ # # PDF from PS # %.pdf %-print.pdf: %.ps $(PS2EPS) --quiet --ignoreBB --nohires --loose < $< | $(EPSTOPDF) --filter --outfile=$(IMGDIR)/$@ # # PDF from EPS # %.pdf %-print.pdf: %.eps $(EPSTOPDF) --outfile=$(IMGDIR)/$@ $< # $(PS2EPS) --ignoreBB --nohires --loose < $< | $(PS2PDF) -dEPSCrop - $(IMGDIR)/$@ # # PDF from SVG (via Inkscape) # The --export-area-drawing option now appears to behave correctly with # PDFs (previously it over-cropped slightly). # %.pdf %-print.pdf: %.svg $(INKSCAPE) --file=$< --without-gui --export-area-drawing --export-pdf=$(IMGDIR)/$@ # # PNG from SVG (via Inkscape) # %.png %-print.png %-web.png: %.svg $(INKSCAPE) --file=$< --without-gui --export-area-drawing --export-background-opacity=1.0 --export-dpi=96 --export-png=$(IMGDIR)/$@ %-web-zoom.png: %.svg $(INKSCAPE) --file=$< --without-gui --export-area-drawing --export-background-opacity=1.0 --export-dpi=144 --export-png=$(IMGDIR)/$@ %-transparent.png: %.svg $(INKSCAPE) --file=$< --without-gui --export-area-drawing --export-background-opacity=0 --export-dpi=96 --export-png=$(IMGDIR)/$@ # # PNG from PNG (change the name). # These appear to need to be separate rules. If both variants need to be # created (i.e., both %-web.png and %-print.png), it only generates one of # them (most likely %-web.png as it's first in the rule) if the rules are # combined into one. This is Kind of Weird. # %-print.png: %.png $(CP) $< $(IMGDIR)/$@ %-web.png: %.png $(CP) $< $(IMGDIR)/$@
Show line notes below