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 paths & rules for building print and web graphics from PNG sources.
master
1 parent
37ddeda
commit
a561cb5a923cc3e94bb2ced8766cda0c53d5d054
nstanger
authored
on 23 Jan 2005
Patch
Showing
1 changed file
make-includes/build_content_rules.make
Ignore Space
Show notes
View
make-includes/build_content_rules.make
################################################################################ # # File: $Id$ # # Standard variables and rules for building everything associated with a # content file, including graphics and supporting files. Only content # files that have such supporting files need to have (custom) rules # defined for them, all other content files will be handled by make's # default behaviour. # # Note that all versions of the graphics for a content file will be # generated, regardless of whether we are building the web or print # versions. This may seem a little wasteful, but there are two points to # consider here: # # 1. At the time this makefile is executed, we have no easy way # to determine which "build mode" we are in. (It could be done # with exported variables from the parent makefile, but see below.) # # 2. This makefile will only be executed once for the document in # question anyway, because once make has processed the parent # file, that file will be considered "up-to-date", and make will # therefore not come back to it again, even though both the print # and web targets depend on it. # # So, even if we just were clever enough to set up conditionals based on # the "build mode", if we just went "make", we would almost certainly find # that make would build either the web graphics only, or the print # graphics only, but not both. We therefore leave this file as is, and # build both web and print graphics regardless. It doesn't take that much # longer anyway, especially since we won't be regenerating all of the # graphics for _everything_ when only one file has changed :) # ################################################################################ ################################################################################ # # Path to the build directory. This must be passed in from the calling # environment. We don't default to the current directory because it makes # it more difficult to clean up. # BUILD_DIR?=$(error The variable BUILD_DIR has not been defined) ################################################################################ # # Paths. All original graphics should normally be in ./graphics (where . # represents the current content directory), and derived versions should # normally be placed in $(BUILD_DIR). If you want something different, # write your own rules, you deviant! # vpath %-web.png $(BUILD_DIR) vpath %-web-zoom.png $(BUILD_DIR) # vpath %-web-hires.png $(BUILD_DIR) vpath %-print.pdf $(BUILD_DIR) vpath %.eps graphics vpath %-print.png $(BUILD_DIR) vpath %.png graphics ################################################################################ # # List of possible targets. If you need to add to this for a specific # case, use TARGETS+=xxx in the actual makefile. # TARGETS:=all clean web-clean print-clean targets debug .PHONY: $(TARGETS) ################################################################################ # # Default rule, for those who are misguided enough to try running a bare # "make" on the makefile. # all: $(error You need to call this makefile with the name of a specific content file as the target) ################################################################################ # # Build correctly cropped EPS (for printing) from original source EPS. # %-print.pdf: %.eps @announce "Generating $@ (print)" @ps2pdf -dEPSCrop -dNOCACHE $< $@ @mv $@ $(BUILD_DIR) ################################################################################ # # Build correctly cropped PNGs for web display from the original source # EPS. # # It might seem to make more sense to generate the PNGs from the print # EPS, which has already been appropriately cropped. However, the results # of directory searches using vpath are rather unpredictable when the # source file is not guaranteed to exist. If we depended on %-print.eps, # which is generated by the rule above, it's not guaranteed that the file # will exist at the time that make performs its directory search (which # seems to be done statically). The source EPS isn't generated and can # thus be guaranteed to always exist. Give me guaranteed correct operation # over efficiency any day! :) # # Build 96 DPI version for normal web display # %-web.png: %.eps @announce "Generating $@ (web)" @gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r96 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$@ $< @mv $@ $(BUILD_DIR) # # Build 144 DPI version for zoomed web display # %-web-zoom.png: %.eps @announce "Generating $@ (zoomed web)" @gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r144 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$@ $< @mv $@ $(BUILD_DIR) # # Are 600 DPI versions even needed?? They don't seem to be used anywhere... # # %-web-hires.png: %.eps # @announce "Generating $@ (600 dpi)" # @gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r600 \ # -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$@ $< # @mv $@ $(BUILD_DIR) ################################################################################ # # Some graphics start out as bitmaps (e.g., screenshots) and will # therefore not have an EPS version. We assume that the source for such # images is a PNG file instead. We don't need to generate anything; rather # we just copy the original file to the build directory, because we're # using PNG for the web version anyway, and PDFLaTeX supports PNG # natively. # %-print.png: %.png @announce "Generating $@ (print)" @cp $< $(BUILD_DIR)/$@ %-web.png: %.png @announce "Generating $@ (web)" @cp $< $(BUILD_DIR)/$@ ################################################################################ # # Clean up. These targets are probably no longer needed, as the build # versions are now generated in the build directory. There should # consequently be no extraneous files floating around in the content # directory that need to be cleaned. # # clean: web-clean print-clean # # web-clean: # rm -f *.png # # print-clean: # rm -f *.pdf ################################################################################ # # Debugging information, mostly lists of the generated variables. # debug: @announce Externally defined variables @echo "TEACHING_SHARED = [$(TEACHING_SHARED)]" @echo "BUILD_DIR = [$(BUILD_DIR)]" @announce Internally defined variables @echo "GLOBAL_HANDBOOK_INCLUDE = [$(GLOBAL_HANDBOOK_INCLUDE)]" @echo "LOCAL_HANDBOOK_INCLUDE = [$(LOCAL_HANDBOOK_INCLUDE)]" ################################################################################ # # Print out the list of targets. Handy for when you forget! # targets: @echo $(TARGETS)
################################################################################ # # File: $Id$ # # Standard variables and rules for building everything associated with a # content file, including graphics and supporting files. Only content # files that have such supporting files need to have (custom) rules # defined for them, all other content files will be handled by make's # default behaviour. # # Note that all versions of the graphics for a content file will be # generated, regardless of whether we are building the web or print # versions. This may seem a little wasteful, but there are two points to # consider here: # # 1. At the time this makefile is executed, we have no easy way # to determine which "build mode" we are in. (It could be done # with exported variables from the parent makefile, but see below.) # # 2. This makefile will only be executed once for the document in # question anyway, because once make has processed the parent # file, that file will be considered "up-to-date", and make will # therefore not come back to it again, even though both the print # and web targets depend on it. # # So, even if we just were clever enough to set up conditionals based on # the "build mode", if we just went "make", we would almost certainly find # that make would build either the web graphics only, or the print # graphics only, but not both. We therefore leave this file as is, and # build both web and print graphics regardless. It doesn't take that much # longer anyway, especially since we won't be regenerating all of the # graphics for _everything_ when only one file has changed :) # ################################################################################ ################################################################################ # # Path to the build directory. This must be passed in from the calling # environment. We don't default to the current directory because it makes # it more difficult to clean up. # BUILD_DIR?=$(error The variable BUILD_DIR has not been defined) ################################################################################ # # Paths. All original graphics should normally be in ./graphics/source, # and derived versions should normally be placed in ./graphics. If you # want something different, write your own rules, you deviant! # vpath %-web.png $(BUILD_DIR) vpath %-web-zoom.png $(BUILD_DIR) # vpath %-web-hires.png $(BUILD_DIR) vpath %-print.pdf $(BUILD_DIR) vpath %.eps graphics ################################################################################ # # List of possible targets. If you need to add to this for a specific # case, use TARGETS+=xxx in the actual makefile. # TARGETS:=all clean web-clean print-clean targets debug .PHONY: $(TARGETS) ################################################################################ # # Default rule, for those who are misguided enough to try running a bare # "make" on the makefile. # all: $(error You need to call this makefile with the name of a specific content file as the target) ################################################################################ # # Build correctly cropped EPS (for printing) from original source EPS. # %-print.pdf: %.eps @announce "Generating $@ (print)" @ps2pdf -dEPSCrop -dNOCACHE $< $@ @mv $@ $(BUILD_DIR) ################################################################################ # # Build correctly cropped PNGs for web display from the original source # EPS. # # It might seem to make more sense to generate the PNGs from the print # EPS, which has already been appropriately cropped. However, the results # of directory searches using vpath are rather unpredictable when the # source file is not guaranteed to exist. If we depended on %-print.eps, # which is generated by the rule above, it's not guaranteed that the file # will exist at the time that make performs its directory search (which # seems to be done statically). The source EPS isn't generated and can # thus be guaranteed to always exist. Give me guaranteed correct operation # over efficiency any day! :) # # Build 96 DPI version for normal web display # %-web.png: %.eps @announce "Generating $@ (web)" @gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r96 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$@ $< @mv $@ $(BUILD_DIR) # # Build 144 DPI version for zoomed web display # %-web-zoom.png: %.eps @announce "Generating $@ (zoomed web)" @gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r144 \ -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$@ $< @mv $@ $(BUILD_DIR) # # Are 600 DPI versions even needed?? They don't seem to be used anywhere... # # %-web-hires.png: %.eps # @announce "Generating $@ (600 dpi)" # @gs -q -dNOPAUSE -dBATCH -dSAFER -sDEVICE=png16m -dEPSCrop -r600 \ # -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile=$@ $< # @mv $@ $(BUILD_DIR) ################################################################################ # # Clean up. These targets are probably no longer needed, as the build # versions are now generated in the build directory. There should # consequently be no extraneous files floating around in the content # directory that need to be cleaned. # # clean: web-clean print-clean # # web-clean: # rm -f *.png # # print-clean: # rm -f *.pdf ################################################################################ # # Debugging information, mostly lists of the generated variables. # debug: @announce Externally defined variables @echo "TEACHING_SHARED = [$(TEACHING_SHARED)]" @echo "BUILD_DIR = [$(BUILD_DIR)]" @announce Internally defined variables @echo "GLOBAL_HANDBOOK_INCLUDE = [$(GLOBAL_HANDBOOK_INCLUDE)]" @echo "LOCAL_HANDBOOK_INCLUDE = [$(LOCAL_HANDBOOK_INCLUDE)]" ################################################################################ # # Print out the list of targets. Handy for when you forget! # targets: @echo $(TARGETS)
Show line notes below