# Copyright (C) 1989, 1996, 1997 Aladdin Enterprises. All rights reserved. # # This file is part of Aladdin Ghostscript. # # Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND. No author # or distributor accepts any responsibility for the consequences of using it, # or for whether it serves any particular purpose or works at all, unless he # or she says so in writing. Refer to the Aladdin Ghostscript Free Public # License (the "License") for full details. # # Every copy of Aladdin Ghostscript must include a copy of the License, # normally in a plain ASCII text file named PUBLIC. The License grants you # the right to copy, modify and redistribute Aladdin Ghostscript, but only # under certain conditions described in the License. Among other things, the # License requires that the copyright notice and this notice be preserved on # all copies. # Generic makefile, common to all platforms. # The platform-specific makefiles `include' this file. # They define the following symbols: # GS - the name of the executable (without the extension, if any). # GS_LIB_DEFAULT - the default directory/ies for searching for the # initialization and font files at run time. # SEARCH_HERE_FIRST - the default setting of -P (whether or not to # look for files in the current directory first). # GS_DOCDIR - the directory where documentation will be available # at run time. # JSRCDIR - the directory where the IJG JPEG library source code # is stored (at compilation time). # JVERSION - the major version number of the IJG JPEG library. # PSRCDIR, PVERSION - the same for libpng. # ZSRCDIR - the same for zlib. # SHARE_LIBPNG - normally 0; if set to 1, asks the linker to use # an existing compiled libpng (-lpng) instead of compiling and # linking libpng explicitly. # LIBPNG_NAME, the name of the shared libpng, currently always # png (libpng, -lpng). # SHARE_ZLIB - normally 0; if set to 1, asks the linker to use # an existing compiled zlib (-lgz or -lz) instead of compiling # and linking libgz/libz explicitly. # ZLIB_NAME - the name of the shared zlib, either gz (for libgz, -lgz) # or z (for libz, -lz). # CONFIG - a configuration ID, added at the request of a customer, # that is supposed to help in maintaining multiple variants in # a single directory. Normally this is an empty string; # it may be any string that is legal as part of a file name. # DEVICE_DEVS - the devices to include in the executable. # See devs.mak for details. # DEVICE_DEVS1...DEVICE_DEVS15 - additional devices, if the definition # of DEVICE_DEVS doesn't fit on one line. See devs.mak for details. # FEATURE_DEVS - what features to include in the executable. # Normally this is one of: # level1 - a standard PostScript Level 1 language # interpreter. # level2 - a standard PostScript Level 2 language # interpreter. # pdf - a PDF-capable interpreter. # You may include both level1 and pdf, or both level2 and pdf. # The following feature may be added to either of the standard # configurations: # ccfonts - precompile fonts into C, and link them # with the executable. See fonts.txt for details. # The remaining features are of interest primarily to developers # who want to "mix and match" features to create custom # configurations: # dps - (partial) support for Display PostScript extensions: # see language.txt for details. # btoken - support for binary token encodings. # Included automatically in the dps and level2 features. # cidfont - (currently partial) support for CID-keyed fonts. # color - support for the Level 1 CMYK color extensions. # Included automatically in the dps and level2 features. # compfont - support for composite (type 0) fonts. # Included automatically in the level2 feature. # dct - support for DCTEncode/Decode filters. # Included automatically in the level2 feature. # epsf - support for recognizing and skipping the binary # header of MS-DOS EPSF files. # filter - support for Level 2 filters (other than eexec, # ASCIIHexEncode/Decode, NullEncode, PFBDecode, # RunLengthEncode/Decode, and SubFileDecode, which are # always included, and DCTEncode/Decode, # which are separate). # Included automatically in the level2 feature. # fzlib - support for zlibEncode/Decode filters. # ttfont - support for TrueType fonts. # type1 - support for Type 1 fonts and eexec; # normally included automatically in all configurations. # type42 - support for Type 42 (embedded TrueType) fonts. # Included automatically in the level2 feature. # There are quite a number of other sub-features that can be # selectively included in or excluded from a configuration, # but the above are the ones that are most likely to be of # interest. # COMPILE_INITS - normally 0; if set to 1, compiles the PostScript # language initialization files (gs_init.ps et al) into the # executable, eliminating the need for these files to be present # at run time. # BAND_LIST_STORAGE - normally file; if set to memory, stores band # lists in memory (with compression if needed). # BAND_LIST_COMPRESSOR - normally zlib: selects the compression method # to use for band lists in memory. # FILE_IMPLEMENTATION - normally stdio; if set to fd, uses file # descriptors instead of buffered stdio for file I/O; if set to # both, provides both implementations with different procedure # names for the fd-based implementation (see sfxfd.c for # more information). # EXTEND_NAMES - a value N between 0 and 6, indicating that the name # table should have a capacity of 2^(16+N) names. This normally # should be set to 0 (or left undefined), since non-zero values # result in a larger fixed space overhead and slightly slower code. # EXTEND_NAMES is ignored in 16-bit environments. # # It is very unlikely that anyone would want to edit the remaining # symbols, but we describe them here for completeness: # GS_INIT - the name of the initialization file for the interpreter, # normally gs_init.ps. # PLATFORM - a "device" name for the platform, so that platforms can # add various kinds of resources like devices and features. # CMD - the suffix for shell command files (e.g., null or .bat). # (This is only needed in a few places.) # D - the directory separator character (\ for MS-DOS, / for Unix). # O - the string for specifying the output file from the C compiler # (-o for MS-DOS, -o ./ for Unix). # OBJ - the extension for relocatable object files (e.g., o or obj). # XE - the extension for executable files (e.g., null or .exe). # XEAUX - the extension for the executable files (e.g., null or .exe) # for the utility programs (ansi2knr and those compiled with # CCAUX). # BEGINFILES - the list of files that `make begin' and `make clean' # should delete. # CCA2K - the C invocation for the ansi2knr program, which is the only # one that doesn't use ANSI C syntax. (It is only needed if # the main C compiler also isn't an ANSI compiler.) # CCAUX - the C invocation for auxiliary programs (echogs, genarch, # genconf, geninit). # CCBEGIN - the compilation command for `make begin', normally # $(CCC) *.c. # CCC - the C invocation for normal compilation. # CCD - the C invocation for files that store into frame buffers or # device registers. Needed because some optimizing compilers # will eliminate necessary stores. # CCCF - the C invocation for compiled fonts and other large, # self-contained data modules. Needed because MS-DOS # requires using the 'huge' memory model for these. # CCINT - the C invocation for compiling the main interpreter module, # normally the same as CCC: this is needed because the # Borland compiler generates *worse* code for this module # (but only this module) when optimization (-O) is turned on. # CCLEAF - the C invocation for compiling modules that contain only # leaf procedures, which don't need to build stack frames. # This is needed only because many compilers aren't able to # recognize leaf procedures on their own. # AK - if source files must be converted from ANSI to K&R syntax, # this is $(ANSI2KNR_XE); if not, it is null. # If a particular platform requires other utility programs # to be built, AK must include them too. # SHP - the prefix for invoking a shell script in the current directory # (null for MS-DOS, $(SH) ./ for Unix). # EXPP, EXP - the prefix for invoking an executable program in the # current directory (null for MS-DOS, ./ for Unix). # SH - the shell for scripts (null on MS-DOS, sh on Unix). # CONFILES - the arguments for genconf to generate the appropriate # linker control files (various). # CP_ - the command for copying one file to another. Because of # limitations in the MS-DOS/MS Windows environment, the # second argument must either be '.' (in which case the # write date may be either preserved or set to the current # date) or a file name (in which case the write date is # always updated). # RM_ - the command for deleting (a) file(s) (including wild cards, # but limited to a single file or pattern). # RMN_ = the command for deleting multiple files / patterns. # # The platform-specific makefiles must also include rules for creating # certain dynamically generated files: # gconfig_.h - this indicates the presence or absence of # certain system header files that are located in different # places on different systems. (It could be generated by # the GNU `configure' program.) # gconfigv.h - this indicates the status of certain machine- # and configuration-specific features derived from definitions # in the platform-specific makefile. # Define the name of this makefile. GS_MAK=makefile # Define the names of the executables. GS_XE=$(GS)$(XE) ANSI2KNR_XE=ansi2knr$(XEAUX) ECHOGS_XE=echogs$(XEAUX) GENARCH_XE=genarch$(XEAUX) GENCONF_XE=genconf$(XEAUX) GENINIT_XE=geninit$(XEAUX) # Define the names of the CONFIG-dependent header files. # gconfig*.h and gconfx*.h are generated dynamically. gconfig_h=gconfxx$(CONFIG).h gconfigf_h=gconfxc$(CONFIG).h # Watcom make insists that rules have a non-empty body! all default: $(GS_XE) $(RM_) _temp_* distclean maintainer-clean realclean: clean $(RM_) makefile clean: mostlyclean $(RM_) arch.h $(RM_) $(GS_XE) mostlyclean: $(RMN_) *.$(OBJ) *.a core gmon.out $(RMN_) *.dev *.d_* devs*.tr gconfig*.h gconfx*.h j*.h o*.tr l*.tr $(RMN_) deflate.h zutil.h $(RMN_) gconfig*.c gscdefs*.c iconfig*.c $(RMN_) _temp_* _temp_*.* *.map *.sym $(RMN_) $(ANSI2KNR_XE) $(ECHOGS_XE) $(GENARCH_XE) $(GENCONF_XE) $(GENINIT_XE) $(RMN_) gs_init.c $(BEGINFILES) # Remove only configuration-dependent information. config-clean: $(RMN_) *.dev devs*.tr gconfig*.h gconfx*.h o*.tr l*.tr # A rule to do a quick and dirty compilation attempt when first installing # the interpreter. Many of the compilations will fail: # follow this with 'make'. begin: $(RMN_) arch.h gconfig*.h gconfx*.h $(GENARCH_XE) $(GS_XE) $(RMN_) gconfig*.c gscdefs*.c iconfig*.c $(RMN_) gs_init.c $(BEGINFILES) make arch.h gconfigv.h - $(CCBEGIN) $(RMN_) gconfig.$(OBJ) gdev*.$(OBJ) gp_*.$(OBJ) gscdefs.$(OBJ) gsmisc.$(OBJ) $(RMN_) ccfontab.$(OBJ) iconfig.$(OBJ) iinit.$(OBJ) interp.$(OBJ) # Auxiliary programs arch.h: $(GENARCH_XE) $(EXPP) $(EXP)genarch arch.h # Macros for constructing the *.dev files that describe features and # devices. SETDEV=$(EXP)echogs -e .dev -w- -l-dev -F -s -l-obj SETPDEV=$(EXP)echogs -e .dev -w- -l-dev -F -s -l-include -lpage -l-obj SETMOD=$(EXP)echogs -e .dev -w- -l-obj ADDMOD=$(EXP)echogs -e .dev -a- # Define the compilation commands for the third-party libraries. CCCP=$(CCC) -I$(PSRCDIR) -I$(ZSRCDIR) -DPNG_USE_CONST CCCJ=$(CCC) -I. -I$(srcdir) -I$(JSRCDIR) CCCZ=$(CCC) -I. -I$(srcdir) -I$(ZSRCDIR) ######################## How to define new 'features' ####################### # # One defines new 'features' exactly like devices (see devs.mak for details). # For example, one would define a feature abc by adding the following to # gs.mak: # # abc_=abc1.$(OBJ) ... # abc.dev: $(GS_MAK) $(ECHOGS_XE) $(abc_) # $(SETMOD) abc $(abc_) # $(ADDMOD) abc -obj ... [if needed] # $(ADDMOD) abc -oper ... [if appropriate] # $(ADDMOD) abc -ps ... [if appropriate] # # If the abc feature requires the presence of some other features jkl and # pqr, then the rules must look like this: # # abc_=abc1.$(OBJ) ... # abc.dev: $(GS_MAK) $(ECHOGS_XE) $(abc_) jkl.dev pqr.dev # $(SETMOD) abc $(abc_) # ... # $(ADDMOD) abc -include jkl pqr # --------------------- Configuration-dependent files --------------------- # # gconfig.h shouldn't have to depend on DEVS_ALL, but that would # involve rewriting gsconfig to only save the device name, not the # contents of the .dev files. # FEATURE_DEVS must precede DEVICE_DEVS so that devices can override # features in obscure cases. DEVS_ALL=$(PLATFORM).dev $(FEATURE_DEVS) \ $(DEVICE_DEVS) $(DEVICE_DEVS1) \ $(DEVICE_DEVS2) $(DEVICE_DEVS3) $(DEVICE_DEVS4) $(DEVICE_DEVS5) \ $(DEVICE_DEVS6) $(DEVICE_DEVS7) $(DEVICE_DEVS8) $(DEVICE_DEVS9) \ $(DEVICE_DEVS10) $(DEVICE_DEVS11) $(DEVICE_DEVS12) $(DEVICE_DEVS13) \ $(DEVICE_DEVS14) $(DEVICE_DEVS15) devs_tr=devs.tr$(CONFIG) $(devs_tr): $(GS_MAK) $(MAKEFILE) $(ECHOGS_XE) $(EXP)echogs -w $(devs_tr) - -include $(PLATFORM).dev $(EXP)echogs -a $(devs_tr) - $(FEATURE_DEVS) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS1) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS2) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS3) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS4) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS5) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS6) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS7) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS8) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS9) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS10) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS11) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS12) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS13) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS14) $(EXP)echogs -a $(devs_tr) - $(DEVICE_DEVS15) # GCONFIG_EXTRAS can be set on the command line. # Note that it consists of arguments for echogs, i.e., # it isn't just literal text. GCONFIG_EXTRAS= ld_tr=ld$(CONFIG).tr $(gconfig_h) $(ld_tr) lib.tr: \ $(GS_MAK) $(MAKEFILE) version.mak $(GENCONF_XE) $(ECHOGS_XE) $(devs_tr) $(DEVS_ALL) libcore.dev $(EXP)genconf $(devs_tr) libcore.dev -h $(gconfig_h) $(CONFILES) $(EXP)echogs -a $(gconfig_h) -x 23 define -s -u GS_LIB_DEFAULT -x 2022 $(GS_LIB_DEFAULT) -x 22 $(EXP)echogs -a $(gconfig_h) -x 23 define -s -u SEARCH_HERE_FIRST -s $(SEARCH_HERE_FIRST) $(EXP)echogs -a $(gconfig_h) -x 23 define -s -u GS_DOCDIR -x 2022 $(GS_DOCDIR) -x 22 $(EXP)echogs -a $(gconfig_h) -x 23 define -s -u GS_INIT -x 2022 $(GS_INIT) -x 22 $(EXP)echogs -a $(gconfig_h) -x 23 define -s -u GS_REVISION -s $(GS_REVISION) $(EXP)echogs -a $(gconfig_h) -x 23 define -s -u GS_REVISIONDATE -s $(GS_REVISIONDATE) $(EXP)echogs -a $(gconfig_h) $(GCONFIG_EXTRAS) ################################################################ # The other platform-independent makefiles are concatenated # (or included) after this one: # lib.mak # int.mak # jpeg.mak # libpng.mak # zlib.mak # devs.mak ################################################################