[builds] Make necessary changes to compile dlg along with FreeType.

* autogen.sh (copy_submodule_files): New script to copy all the
	necessary dlg's source and include files from `submodules/dlg' to
	`src/dlg'

	* src/dlg/dlgwrap.c: A wrapper along `src/dlg.c', it enables the
	dlg's build only when `FT_LOGGING' maro is defined.

	* src/dlg/rules.mk: Makefile to compile dlg library along with
	rest of FreeType's modules.

	* builds/freetype.mk (DLG_DIR): New variable to include dlg's
	header files.
	(INCLUDES): Added `DLG_DIR'.
	(FT_CFLAGS): Added `-std=c99' flag.
	Include `src/dlg/rules.mk' file to build dlg.
	(OBJ_S, OBJ_M): Added `DLG_OBJS_M' and `DLG_OBJS_S'.

	* builds/toplevel.mk: For builds directly from the git repository
	we need to copy files from `submodule/dlg' to `src/dlg

	* {include/freetype/config, devel}/ftoption.h (FT_LOGGING): A new
	macro to enable or disable the logging facility in FreeType.
This commit is contained in:
Priyeshkkumar 2020-08-26 12:27:52 +05:30
parent 62e5220edb
commit c2da552c7f
7 changed files with 154 additions and 3 deletions

View File

@ -162,4 +162,29 @@ cd ../..
chmod +x ./configure
# Copy all necessary dlg files.
copy_submodule_files()
{
echo "Copying files from \`submodules/dlg' to \`src/dlg'"
mkdir src/dlg/dlg
cp $DLG_INC_DIR/dlg.h src/dlg/dlg
cp $DLG_INC_DIR/output.h src/dlg/dlg
cp $DLG_SRC_DIR/* src/dlg
}
DLG_INC_DIR=submodules/dlg/include/dlg
DLG_SRC_DIR=submodules/dlg/src/dlg
if ! test -d "$DLG_INC_DIR"; then
echo "Submodule check out in \`submodules/dlg':"
git submodule init
git submodule update
copy_submodule_files
else
copy_submodule_files
fi
# EOF

View File

@ -101,6 +101,7 @@ PUBLIC_DIR := $(TOP_DIR)/include/freetype
INTERNAL_DIR := $(PUBLIC_DIR)/internal
SERVICES_DIR := $(INTERNAL_DIR)/services
CONFIG_DIR := $(PUBLIC_DIR)/config
DLG_DIR := $(TOP_DIR)/src/dlg
# The documentation directory.
#
@ -122,6 +123,7 @@ PROJECT_LIBRARY := $(LIB_DIR)/$(LIBRARY).$A
INCLUDES := $(subst /,$(COMPILER_SEP),$(OBJ_DIR) \
$(DEVEL_DIR) \
$(BUILD_DIR) \
$(DLG_DIR) \
$(TOP_DIR)/include)
INCLUDE_FLAGS := $(INCLUDES:%=$I%)
@ -152,7 +154,7 @@ endif
#
FT_CFLAGS = $(CPPFLAGS) \
$(CFLAGS) \
$DFT2_BUILD_LIBRARY
$DFT2_BUILD_LIBRARY -std=c99
FT_COMPILE := $(CC) $(ANSIFLAGS) $(INCLUDE_FLAGS) $(FT_CFLAGS)
@ -220,6 +222,7 @@ $(FTDEBUG_OBJ): $(FTDEBUG_SRC) $(FREETYPE_H)
#
include $(SRC_DIR)/base/rules.mk
include $(patsubst %,$(SRC_DIR)/%/rules.mk,$(MODULES))
include $(SRC_DIR)/dlg/rules.mk
# ftinit component
@ -260,8 +263,8 @@ endif
# All FreeType library objects.
#
OBJ_M := $(BASE_OBJ_M) $(BASE_EXT_OBJ) $(DRV_OBJS_M)
OBJ_S := $(BASE_OBJ_S) $(BASE_EXT_OBJ) $(DRV_OBJS_S)
OBJ_M := $(BASE_OBJ_M) $(BASE_EXT_OBJ) $(DRV_OBJS_M) $(DLG_OBJS_M)
OBJ_S := $(BASE_OBJ_S) $(BASE_EXT_OBJ) $(DRV_OBJS_S) $(DLG_OBJS_S)
# The target `multi' on the Make command line indicates that we want to

View File

@ -103,6 +103,23 @@ ifneq ($(findstring setup,$(MAKECMDGOALS)),)
check_platform := 1
endif
# For builds directly from the git repository we need to copy files
# from `submodule/dlg' to `src/dlg'
#
ifeq ($(wildcard src/dlg/dlg.*),)
ifeq ($(wildcard submodules/dlg/dlg.*),)
$(info Submodule check out in `submodules/dlg' )
$(shell git submodule init)
$(shell git submodule update)
endif
$(info Copying files from `submodules/dlg' to `src/dlg')
$(shell mkdir src/dlg/dlg)
$(shell cp submodules/dlg/include/dlg/dlg.h src/dlg/dlg)
$(shell cp submodules/dlg/include/dlg/output.h src/dlg/dlg)
$(shell cp submodules/dlg/src/dlg/dlg.c src/dlg/)
endif
# Include the automatic host platform detection rules when we need to
# check the platform.
#

View File

@ -431,6 +431,21 @@ FT_BEGIN_HEADER
#define FT_DEBUG_LEVEL_TRACE
/*************************************************************************
*
* Logging
*
* Compiling FreeType in debug or trace mode will make FreeType to write
* error and trace log messages to `stderr`.
* Enabling this macro will automatically force the `FT_DEBUG_LEVEL_ERROR`
* and `FT_DEBUG_LEVEL_TRACE` macros and will allow FreeType to write
* error and trace log messages to a file instead of `stderr`.
* For writing logs to file FreeType uses an external library `dlg`
* Source Code - `src/dlg`
*
*/
#define FT_LOGGING
/**************************************************************************
*
* Autofitter debugging

View File

@ -431,6 +431,21 @@ FT_BEGIN_HEADER
/* #define FT_DEBUG_LEVEL_TRACE */
/*************************************************************************
*
* Logging
*
* Compiling FreeType in debug or trace mode will make FreeType to write
* error and trace log messages to `stderr`.
* Enabling this macro will automatically force the `FT_DEBUG_LEVEL_ERROR`
* and `FT_DEBUG_LEVEL_TRACE` macros and will allow FreeType to write
* error and trace log messages to a file instead of `stderr`.
* For writing logs to file FreeType uses an external library `dlg`
* Source Code - `src/dlg`
*
*/
/* #define FT_LOGGING */
/**************************************************************************
*
* Autofitter debugging

9
src/dlg/dlgwrap.c Normal file
View File

@ -0,0 +1,9 @@
#include <freetype/freetype.h>
#ifdef FT_LOGGING
#include "dlg.c"
#else
/* ANSI C doesn't like empty source files */
typedef int _dlg_dummy;
#endif

67
src/dlg/rules.mk Normal file
View File

@ -0,0 +1,67 @@
#
# FreeType 2 dlg logging library configuration rules
#
# Copyright (C) 1996-2020 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.
# dlg logging library directory
#
DLG_DIR := $(SRC_DIR)/dlg
DLG_COMPILE := $(CC) $(ANSIFLAGS) \
$I$(subst /,$(COMPILER_SEP),$(DLG_DIR)) \
$(INCLUDE_FLAGS) \
$(FT_CFLAGS)
# dlg logging library sources (i.e., C files)
#
DLG_SRC := $(DLG_DIR)/dlgwrap.c
# dlg logging library headers
#
DLG_H := $(DLG_DIR)/dlg/dlg.h \
$(DLG_DIR)/dlg/output.h
# dlg logging library object(s)
#
# DLG_OBJ_M is used during `multi' builds
# DLG_OBJ_S is used during `single' builds
#
DLG_OBJ_M := $(DLG_SRC:$(DLG_DIR)/%.c=$(OBJ_DIR)/%.$O)
DLG_OBJ_S := $(OBJ_DIR)/dlg.$O
# dlg logging library source file for single build
#
DLG_SRC_S := $(DLG_DIR)/dlgwrap.c
# dlg logging library - single object
#
$(DLG_OBJ_S): $(DLG_SRC_S) $(DLG_SRC) $(FREETYPE_H) $(DLG_H)
$(DLG_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(DLG_SRC_S))
# dlg logging library - multiple objects
#
$(OBJ_DIR)/%.$O: $(DLG_DIR)/%.c $(FREETYPE_H) $(DLG_H)
$(DLG_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
# update main object lists
#
DLG_OBJS_S += $(DLG_OBJ_S)
DLG_OBJS_M += $(DLG_OBJ_M)
# EOF