#
# FreeType 2 base layer configuration rules
#


# Copyright 1996-2000, 2002, 2003, 2004, 2005 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
# This file is part of the FreeType project, and may only be used, modified,
# and distributed under the terms of the FreeType project license,
# LICENSE.TXT.  By continuing to use, modify, or distribute this file you
# indicate that you have read the license and understand and accept it
# fully.


# It sets the following variables which are used by the master Makefile
# after the call:
#
#   BASE_OBJ_S:   The single-object base layer.
#   BASE_OBJ_M:   A list of all objects for a multiple-objects build.
#   BASE_EXT_OBJ: A list of base layer extensions, i.e., components found
#                 in `freetype/src/base' which are not compiled within the
#                 base layer proper.
#
# BASE_H is defined in freetype.mk to simplify the dependency rules.


BASE_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SRC_DIR)/base)


# Base layer sources
#
#   ftsystem, ftinit, and ftdebug are handled by freetype.mk
#
BASE_SRC := $(BASE_DIR)/ftapi.c    \
            $(BASE_DIR)/ftcalc.c   \
            $(BASE_DIR)/ftdbgmem.c \
            $(BASE_DIR)/ftgloadr.c \
            $(BASE_DIR)/ftnames.c  \
            $(BASE_DIR)/ftobjs.c   \
            $(BASE_DIR)/ftoutln.c  \
            $(BASE_DIR)/ftrfork.c  \
            $(BASE_DIR)/ftstream.c \
            $(BASE_DIR)/fttrigon.c \
            $(BASE_DIR)/ftutil.c

# Base layer `extensions' sources
#
# An extension is added to the library file (.a or .lib) as a separate
# object.  It will then be linked to the final executable only if one of its
# symbols is used by the application.
#
BASE_EXT_SRC := $(BASE_DIR)/ftbitmap.c \
                $(BASE_DIR)/ftbbox.c   \
                $(BASE_DIR)/ftbdf.c    \
                $(BASE_DIR)/ftglyph.c  \
                $(BASE_DIR)/ftgxval.c  \
                $(BASE_DIR)/ftmm.c     \
                $(BASE_DIR)/ftotval.c  \
                $(BASE_DIR)/ftpfr.c    \
                $(BASE_DIR)/ftstroke.c \
                $(BASE_DIR)/ftsynth.c  \
                $(BASE_DIR)/fttype1.c  \
                $(BASE_DIR)/ftwinfnt.c \
                $(BASE_DIR)/ftxf86.c

# Default extensions objects
#
BASE_EXT_OBJ := $(BASE_EXT_SRC:$(BASE_DIR)/%.c=$(OBJ_DIR)/%.$O)


# Base layer object(s)
#
#   BASE_OBJ_M is used during `multi' builds (each base source file compiles
#   to a single object file).
#
#   BASE_OBJ_S is used during `single' builds (the whole base layer is
#   compiled as a single object file using ftbase.c).
#
BASE_OBJ_M := $(BASE_SRC:$(BASE_DIR)/%.c=$(OBJ_DIR)/%.$O)
BASE_OBJ_S := $(OBJ_DIR)/ftbase.$O

# Base layer root source file for single build
#
BASE_SRC_S := $(BASE_DIR)/ftbase.c


# Base layer - single object build
#
$(BASE_OBJ_S): $(BASE_SRC_S) $(BASE_SRC) $(FREETYPE_H)
	$(BASE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(BASE_SRC_S))


# Multiple objects build + extensions
#
$(OBJ_DIR)/%.$O: $(BASE_DIR)/%.c $(FREETYPE_H)
	$(BASE_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)


# EOF
