shithub: freetype+ttf2subf

ref: e98e4af73c4d8899ee88c3e7f8f13fc3b6dc7032
dir: /demos/Makefile/

View raw version
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_)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)
	  $(GRAPH_LINK) 

  $(BIN_)fttimer$E: $(OBJ_)fttimer.$O $(FTLIB) $(GRAPH_LIB) $(COMMON_OBJ)
	  $(GRAPH_LINK)

endif

# EOF