| all: exes |
| |
| #################################################################### |
| # |
| # TOP is the directory where the main FreeType source is found, |
| # as well as the 'config.mk' file |
| # |
| # TOP2 is the directory is the top of the demonstration |
| # programs directory |
| # |
| |
| ifndef TOP |
| TOP := .. |
| endif |
| |
| ifndef TOP2 |
| TOP2 := $(TOP)/demos |
| endif |
| |
| ###################################################################### |
| # |
| # MY_CONFIG_MK points to the current "config.mk" to use. It is |
| # defined by default as $(TOP)/config.mk |
| # |
| ifndef CONFIG_MK |
| CONFIG_MK := $(TOP)/config.mk |
| endif |
| |
| #################################################################### |
| # |
| # Check that we have a working `config.mk' in the above directory. |
| # If not, issue a warning message, then stop there.. |
| # |
| ifeq ($(wildcard $(CONFIG_MK)),) |
| no_config_mk := 1 |
| endif |
| |
| ifdef no_config_mk |
| exes: |
| @echo Please compile the library before the demo programs! |
| clean distclean: |
| @echo "I need \`$(TOP)/config.mk' to do that!" |
| else |
| |
| #################################################################### |
| # |
| # Good, now include the `config.mk' in order to know how to build |
| # object files from sources, as well as other things (compiler flags) |
| # |
| include $(CONFIG_MK) |
| |
| |
| #################################################################### |
| # |
| # Define a few important variables now |
| # |
| TOP_ := $(TOP)$(SEP) |
| TOP2_ := $(TOP2)$(SEP) |
| SRC_ := $(TOP)$(SEP)src$(SEP) |
| |
| BIN_ := bin$(SEP) |
| OBJ_ := obj$(SEP) |
| |
| GRAPH_DIR := graph |
| |
| ifeq ($(TOP),..) |
| SRC_DIR := src |
| else |
| SRC_DIR := $(TOP2_)src |
| endif |
| |
| SRC_DIR_ := $(SRC_DIR)$(SEP) |
| |
| FT_INCLUDES := $(BUILD) $(TOP_)config $(TOP_)include $(SRC_)base $(SRC_DIR) |
| TT_INCLUDES := $(SRC_)shared $(SRC_)truetype |
| T1_INCLUDES := $(SRC_)shared $(SRC_)type1 |
| |
| COMPILE = $(CC) $(CFLAGS) $(INCLUDES:%=$I%) |
| LINK := $(CC) |
| FTLIB := $(TOP_)$(LIB_DIR)$(SEP)$(LIBRARY).$A |
| |
| # the default commands used to link the executables. These can |
| # be re-defined for platform-specific stuff.. |
| # |
| LINK = $(CC) $T$@ $< $(FTLIB) $(EFENCE) |
| COMMON_LINK = $(LINK) $(COMMON_OBJ) |
| GRAPH_LINK = $(COMMON_LINK) $(GRAPH_LIB) |
| |
| .PHONY: exes clean distclean |
| |
| ################################################################### |
| # |
| # Include the rules needed to compile the graphics sub-system. |
| # This will also select which graphics driver to compile to the |
| # sub-system.. |
| # |
| include $(GRAPH_DIR)/rules.mk |
| |
| #################################################################### |
| # |
| # Detect DOS-like platforms, currently DOS, Win 3.1, Win32 & OS/2 |
| # |
| ifneq ($(findstring $(PLATFORM),os2 win16 win32 dos),) |
| DOSLIKE := 1 |
| endif |
| |
| |
| ################################################################### |
| # |
| # Clean-up rules. Because the `del' command on DOS-like platforms |
| # cannot take a long list of arguments, we simply erase the directory |
| # contents. |
| # |
| ifdef DOSLIKE |
| |
| clean_demo: |
| -del obj\*.$O 2> nul |
| -del $(subst /,\,$(TOP2))\src\*.bak 2> nul |
| |
| distclean_demo: clean_demo |
| -del obj\*.lib 2> nul |
| -del bin\*.exe 2> nul |
| |
| else |
| |
| clean_demo: |
| -$(DELETE) $(OBJ_)*.$O |
| -$(DELETE) $(SRC_)*.bak graph$(SEP)*.bak |
| -$(DELETE) $(SRC_)*~ graph$(SEP)*~ |
| |
| distclean_demo: clean_demo |
| -$(DELETE) $(EXES:%=$(BIN_)%$E) |
| -$(DELETE) $(GRAPH_LIB) |
| |
| endif |
| |
| clean: clean_demo |
| distclean: distclean_demo |
| |
| #################################################################### |
| # |
| # Compute the executable suffix to use, and put it in `E'. |
| # It is ".exe" on DOS-ish platforms, and nothing otherwise. |
| # |
| ifdef DOSLIKE |
| E := .exe |
| else |
| E := |
| endif |
| |
| ################################################################### |
| # |
| # The list of demonstration programs to build. |
| # |
| EXES := ftlint ftview fttimer |
| |
| ifneq ($(findstring $(PLATFORM),os2 unix),) |
| EXES += ttdebug |
| endif |
| |
| exes: $(EXES:%=$(BIN_)%$E) |
| |
| |
| INCLUDES := $(FT_INCLUDES) |
| |
| #################################################################### |
| # |
| # Rules for compiling object files for text-only demos |
| # |
| COMMON_OBJ := $(OBJ_)common.$O |
| $(COMMON_OBJ): $(SRC_DIR_)common.c |
| ifdef DOSLIKE |
| $(COMPILE) $T$@ $< $DEXPAND_WILDCARDS |
| else |
| $(COMPILE) $T$@ $< |
| endif |
| |
| |
| $(OBJ_)%.$O: $(SRC_DIR_)%.c $(FTLIB) |
| $(COMPILE) $T$@ $< |
| |
| $(OBJ_)ftlint.$O: $(SRC_DIR_)ftlint.c |
| $(COMPILE) $T$@ $< |
| |
| $(OBJ_)ftgrays.$O: $(SRC_DIR_)ftgrays.c |
| $(COMPILE) $T$@ $< |
| |
| $(OBJ_)fttry.$O: $(SRC_DIR_)fttry.c |
| $(COMPILE) $T$@ $< |
| |
| |
| $(OBJ_)ftview.$O: $(SRC_DIR_)ftview.c $(GRAPH_LIB) |
| $(COMPILE) $(GRAPH_INCLUDES:%=$I%) $T$@ $< |
| |
| $(OBJ_)fttimer.$O: $(SRC_DIR_)fttimer.c $(GRAPH_LIB) |
| $(COMPILE) $(GRAPH_INCLUDES:%=$I%) $T$@ $< |
| |
| # $(OBJ_)ftsbit.$O: $(SRC_DIR)/ftsbit.c $(GRAPH_LIB) |
| # $(COMPILE) $T$@ $< |
| |
| |
| #################################################################### |
| # |
| # Special rule to compile the `t1dump' program as it includes |
| # the Type1 source path |
| # |
| $(OBJ_)t1dump.$O: $(SRC_DIR)/t1dump.c |
| $(COMPILE) $(T1_INCLUDES:%=$I%) $T$@ $< |
| |
| |
| #################################################################### |
| # |
| # Special rule to compile the `ttdebug' program as it includes |
| # the TrueType source path and needs extra flags for correct keyboard |
| # handling on Unix |
| |
| # POSIX TERMIOS: Do not define if you use OLD U*ix like 4.2BSD. |
| # |
| # detect a Unix system |
| ifeq ($(PLATFORM),unix) |
| EXTRAFLAGS = $DUNIX $DHAVE_POSIX_TERMIOS |
| endif |
| |
| $(OBJ_)ttdebug.$O: $(SRC_DIR)/ttdebug.c |
| $(COMPILE) $(TT_INCLUDES:%=$I%) $T$@ $< $(EXTRAFLAGS) |
| |
| |
| #################################################################### |
| # |
| # Rules used to link the executables. Note that they could be |
| # over-ridden by system-specific things.. |
| # |
| $(BIN_)ftlint$E: $(OBJ_)ftlint.$O $(FTLIB) $(COMMON_OBJ) |
| $(COMMON_LINK) |
| |
| $(BIN_)fttry$E: $(OBJ_)fttry.$O $(FTLIB) |
| $(LINK) |
| |
| $(BIN_)ftsbit$E: $(OBJ_)ftsbit.$O $(FTLIB) |
| $(LINK) |
| |
| $(BIN_)t1dump$E: $(OBJ_)t1dump.$O $(FTLIB) |
| $(LINK) |
| |
| $(BIN_)ttdebug$E: $(OBJ_)ttdebug.$O $(FTLIB) |
| $(LINK) |
| |
| |
| $(BIN_)ftview$E: $(OBJ_)ftview.$O $(FTLIB) $(GRAPH_LIB) $(COMMON_OBJ) $(OBJ_)ftgrays.$O |
| $(GRAPH_LINK) $(OBJ_)ftgrays.$O |
| |
| $(BIN_)fttimer$E: $(OBJ_)fttimer.$O $(FTLIB) $(GRAPH_LIB) $(COMMON_OBJ) $(OBJ_)ftgrays.$O |
| $(GRAPH_LINK) $(OBJ_)ftgrays.$O |
| |
| endif |
| |
| # EOF |