summaryrefslogtreecommitdiff
path: root/components/external/freetype/SConscript
diff options
context:
space:
mode:
Diffstat (limited to 'components/external/freetype/SConscript')
-rw-r--r--components/external/freetype/SConscript183
1 files changed, 183 insertions, 0 deletions
diff --git a/components/external/freetype/SConscript b/components/external/freetype/SConscript
new file mode 100644
index 0000000000..29a000fcb4
--- /dev/null
+++ b/components/external/freetype/SConscript
@@ -0,0 +1,183 @@
+import os
+
+Import('RTT_ROOT')
+from building import *
+
+def _ft_get_src_path(fn):
+ # from docs/INSTALL.ANY
+ ft_base_src = set([
+ # use the ftsystem ourown
+ #'ftsystem.c'
+ 'ftinit.c',
+ 'ftdebug.c',
+
+ 'ftbase.c',
+
+ 'ftbbox.c',
+ 'ftglyph.c',
+
+ 'ftbdf.c',
+ 'ftbitmap.c',
+ 'ftcid.c',
+ 'ftfstype.c',
+ 'ftgasp.c',
+ 'ftgxval.c',
+ 'ftlcdfil.c',
+ 'ftmm.c',
+ 'ftotval.c',
+ 'ftpatent.c',
+ 'ftpfr.c',
+ 'ftstroke.c',
+ 'ftsynth.c',
+ 'fttype1.c',
+ 'ftwinfnt.c',
+ 'ftxf86.c',
+
+ 'ftmac.c',
+ ])
+ ft_s_fn = {
+ 'type1cid.c' : 'src/cid/',
+ 'winfnt.c' : 'src/winfonts/',
+ 'ftcache.c' : 'src/cache/',
+ 'ftgzip.c' : 'src/gzip/',
+ 'ftlzw.c' : 'src/lzw/',
+ 'ftbz2.c' : 'src/bz2/',
+ 'ftsystem.c' : 'builds/rt-thread/',
+ 'gb2312tounicode.c' : 'builds/rt-thread/',
+ }
+ # Always keep the path seperator in unix format.
+ if fn in ft_base_src:
+ return 'src/base/' + fn
+ # Handle special files
+ elif fn in ft_s_fn:
+ return ft_s_fn[fn] + fn
+ else:
+ # str.lstrip is not technically right here, but it just work(tm).
+ return 'src/' + fn.rstrip('.c') + '/' + fn
+
+# from docs/INSTALL.ANY
+ft_deps = {
+ 'ftcache.c' : ['ftglyph.c'],
+ 'ftfstype.c' : ['fttype1.c'],
+ 'ftglyph.c' : ['ftbitmap.c'],
+ 'ftstroke.c' : ['ftglyph.c'],
+ 'ftsynth.c' : ['ftbitmap.c'],
+
+ 'cff.c' : ['sfnt.c', 'pshinter.c', 'psnames.c'],
+ 'truetype.c' : ['sfnt.c', 'psnames.c'],
+ 'type1.c' : ['psaux.c' 'pshinter.c', 'psnames.c'],
+ 'type1cid.c' : ['psaux.c', 'pshinter.c', 'psnames.c'],
+ 'type42.c' : ['truetype.c'],
+}
+
+ft_modules = {
+'autofit.c' : ['FT_Module_Class' , 'autofit_module_class' ],
+'truetype.c': ['FT_Driver_ClassRec', 'tt_driver_class' ],
+'type1.c' : ['FT_Driver_ClassRec', 't1_driver_class' ],
+'cff.c' : ['FT_Driver_ClassRec', 'cff_driver_class' ],
+'type1cid.c': ['FT_Driver_ClassRec', 't1cid_driver_class' ],
+'pfr.c' : ['FT_Driver_ClassRec', 'pfr_driver_class' ],
+'type42.c' : ['FT_Driver_ClassRec', 't42_driver_class' ],
+'winfnt.c' : ['FT_Driver_ClassRec', 'winfnt_driver_class' ],
+'pcf.c' : ['FT_Driver_ClassRec', 'pcf_driver_class' ],
+'psaux.c' : ['FT_Module_Class' , 'psaux_module_class' ],
+'psnames.c' : ['FT_Module_Class' , 'psnames_module_class' ],
+'pshinter.c': ['FT_Module_Class' , 'pshinter_module_class' ],
+'raster.c' : ['FT_Renderer_Class' , 'ft_raster1_renderer_class' ],
+'sfnt.c' : ['FT_Module_Class' , 'sfnt_module_class' ],
+'smooth.c' : ['FT_Renderer_Class' , 'ft_smooth_renderer_class' ],
+#'smooth.c' : ['FT_Renderer_Class' , 'ft_smooth_lcd_renderer_class' ],
+#'smooth.c' : ['FT_Renderer_Class' , 'ft_smooth_lcdv_renderer_class'],
+'bdf.c' : ['FT_Driver_ClassRec', 'bdf_driver_class' ],
+}
+
+def _ft_build_dep_src(fnli):
+ dep_added = False
+ for i in fnli:
+ for k in ft_deps.get(i, []):
+ if k not in fnli:
+ dep_added = True
+ fnli.append(k)
+ if not dep_added:
+ return fnli
+ else:
+ return _ft_build_dep_src(fnli)
+
+def _ft_add_basic_system(fnli):
+ for i in ('ftbase.c',
+ 'ftbbox.c',
+ 'ftfstype.c',
+ 'ftglyph.c',
+ 'ftinit.c',
+ 'ftlcdfil.c',
+ 'ftmm.c',
+ 'ftpatent.c',
+ 'gb2312tounicode.c',
+ 'ftsystem.c',):
+ if i not in fnli:
+ fnli.append(i)
+ return fnli
+
+group = []
+
+# Test the depend before do any thing(copy config files etc).
+if not GetDepend(['RT_USING_RTGUI', 'RTGUI_USING_TTF']):
+ Return('group')
+
+###
+# Configurations
+###
+enabled_modules = ['autofit.c', 'truetype.c', 'smooth.c']
+
+###
+#
+###
+
+enabled_modules = _ft_add_basic_system(enabled_modules)
+enabled_modules = _ft_build_dep_src(enabled_modules)
+
+proj_dir = str(Dir('#'))
+config_dir = os.path.join(proj_dir, 'ftconfig')
+if not os.path.exists(config_dir):
+ os.mkdir(config_dir)
+
+for d, i in (('/include/config/', 'ftconfig.h'),
+ ('/builds/rt-thread/', 'ftoption.h')):
+ if not os.path.exists(os.path.join(config_dir, i)):
+ import shutil
+ shutil.copy(GetCurrentDir() + d + i, config_dir)
+
+if not os.path.exists(os.path.join(config_dir, 'ft2build.h')):
+ with open(os.path.join(config_dir, 'ft2build.h'), 'w') as e:
+ e.write('''
+#ifndef __FT2BUILD_H__
+#define __FT2BUILD_H__
+
+#define FT_CONFIG_OPTIONS_H <ftoption.h>
+#define FT_CONFIG_MODULES_H <ftmodule.h>
+#define FT_CONFIG_CONFIG_H <ftconfig.h>
+
+#include <config/ftheader.h>
+
+#endif /* __FT2BUILD_H__ */
+''')
+
+f = open(os.path.join(config_dir, 'ftmodule.h'), 'w')
+for m in enabled_modules:
+ if m in ft_modules:
+ f.write('FT_USE_MODULE( ' + ', '.join(ft_modules[m]) + ')\n')
+
+# proj_dir/ftconfig should precede include/ in freetype
+cpp_path = [config_dir, os.path.join(GetCurrentDir(), 'include/')]
+
+src_file = [_ft_get_src_path(i) for i in enabled_modules]
+
+group = DefineGroup('FreeType',
+ src_file,
+ CPPPATH = cpp_path,
+ # Depend is tested above
+ depend = [],
+ CPPDEFINES = ['FT2_BUILD_LIBRARY']
+ )
+
+Return('group')