#
# Copyright (c) 2003, 2008, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

FILES_c_shared = \
        DrawGlyphList.c \
        sunFont.c

ifdef OPENJDK
FILES_c_shared += $(TARGDIR)freetypeScaler.c 
endif

FILES_cpp_shared = \
        CursiveAttachmentSubtables.cpp \
        ExtensionSubtables.cpp \
        MPreFixups.cpp \
        HanLayoutEngine.cpp \
        LEFontInstance.cpp \
        ContextualGlyphSubstProc.cpp \
        IndicRearrangementProcessor.cpp \
        LigatureSubstProc.cpp \
        LookupTables.cpp \
        MorphTables.cpp \
        NonContextualGlyphSubstProc.cpp \
        SegmentArrayProcessor.cpp \
        SegmentSingleProcessor.cpp \
        SimpleArrayProcessor.cpp \
        SingleTableProcessor.cpp \
        StateTableProcessor.cpp \
        SubtableProcessor.cpp \
        TrimmedArrayProcessor.cpp \
        AlternateSubstSubtables.cpp \
        AnchorTables.cpp \
        CanonData.cpp \
        CanonShaping.cpp \
        ClassDefinitionTables.cpp \
        ContextualSubstSubtables.cpp \
        CoverageTables.cpp \
        DeviceTables.cpp \
        Features.cpp \
        GDEFMarkFilter.cpp \
        GlyphDefinitionTables.cpp \
        GlyphIterator.cpp \
        GlyphLookupTables.cpp \
        GlyphPositionAdjustments.cpp \
        GlyphPosnLookupProc.cpp \
        GlyphPositioningTables.cpp \
        GlyphSubstLookupProc.cpp \
        GlyphSubstitutionTables.cpp \
        HebrewLigatureData.cpp \
        HebrewShaping.cpp \
        IndicClassTables.cpp \
        IndicReordering.cpp \
        KernTable.cpp \
        KhmerLayoutEngine.cpp \
        KhmerReordering.cpp \
        LEGlyphStorage.cpp \
        LEInsertionList.cpp \
        LigatureSubstSubtables.cpp \
        LookupProcessor.cpp \
        Lookups.cpp \
        MarkArrays.cpp \
        MarkToBasePosnSubtables.cpp \
        MarkToLigaturePosnSubtables.cpp \
        MarkToMarkPosnSubtables.cpp \
        MirroredCharData.cpp \
        MultipleSubstSubtables.cpp \
        OpenTypeUtilities.cpp \
        PairPositioningSubtables.cpp \
        ScriptAndLanguage.cpp \
        ShapingTypeData.cpp \
        SinglePositioningSubtables.cpp \
        SingleSubstitutionSubtables.cpp \
        SubstitutionLookups.cpp \
        ThaiShaping.cpp \
        ThaiStateTables.cpp \
        ValueRecords.cpp \
        ArabicLayoutEngine.cpp \
        ArabicShaping.cpp \
        GXLayoutEngine.cpp \
        IndicLayoutEngine.cpp \
        LayoutEngine.cpp \
        SunLayoutEngine.cpp \
        OpenTypeLayoutEngine.cpp \
        ThaiLayoutEngine.cpp \
        ScriptAndLanguageTags.cpp \
        FontInstanceAdapter.cpp


ifeq ($(PLATFORM),windows)
FILES_c_platform = fontpath.c \
                   lcdglyph.c

FILES_cpp_platform =
else
FILES_c_platform = X11FontScaler.c \
                   X11TextRenderer.c
FILES_cpp_platform =
endif

FILES_c = $(FILES_c_shared)  $(FILES_c_platform)
FILES_cpp = $(FILES_cpp_shared) $(FILES_cpp_platform)
