[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ft-devel] [PATCH 1/2] builds/windows/ftsystem.c: Added Unicode support.
From: |
Azamat H. Hackimov |
Subject: |
[ft-devel] [PATCH 1/2] builds/windows/ftsystem.c: Added Unicode support. |
Date: |
Mon, 30 Oct 2017 12:34:51 +0500 |
Now you can load filenames with Unicode characters.
Added ftsystem.c with customized ft_ansi_stream_io() function (used
MultiByteToWideChar() and _wfopen() functions from Windows API).
This feature only available from Windows 2000 and later. Windows 9x is
not supported and still uses default fopen() calls.
---
builds/windows/ftsystem.c | 343 +++++++++++++++++++++++++
builds/windows/vc2010/freetype.sln | 49 ++--
builds/windows/vc2010/freetype.vcxproj | 40 +--
builds/windows/vc2010/freetype.vcxproj.filters | 29 +--
4 files changed, 398 insertions(+), 63 deletions(-)
create mode 100644 builds/windows/ftsystem.c
diff --git a/builds/windows/ftsystem.c b/builds/windows/ftsystem.c
new file mode 100644
index 000000000..24bdf5fbe
--- /dev/null
+++ b/builds/windows/ftsystem.c
@@ -0,0 +1,343 @@
+/***************************************************************************/
+/* */
+/* ftsystem.c */
+/* */
+/* Windows-specific FreeType low-level system interface (body). */
+/* */
+/* Copyright 1996-2017 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. */
+/* */
+/***************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* This file contains the default interface used by FreeType to access */
+ /* low-level, i.e. memory management, i/o access as well as thread */
+ /* synchronisation. It can be replaced by user-specific routines if */
+ /* necessary. */
+ /* */
+ /*************************************************************************/
+
+
+#include <ft2build.h>
+#include FT_CONFIG_CONFIG_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_STREAM_H
+#include FT_SYSTEM_H
+#include FT_ERRORS_H
+#include FT_TYPES_H
+
+#ifdef UNICODE
+#include <windows.h>
+#include <stdio.h>
+#define MAX_WIN32_FNAME 2048
+#endif
+
+ /*************************************************************************/
+ /* */
+ /* MEMORY MANAGEMENT INTERFACE */
+ /* */
+ /*************************************************************************/
+
+ /*************************************************************************/
+ /* */
+ /* It is not necessary to do any error checking for the */
+ /* allocation-related functions. This will be done by the higher level */
+ /* routines like ft_mem_alloc() or ft_mem_realloc(). */
+ /* */
+ /*************************************************************************/
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_alloc */
+ /* */
+ /* <Description> */
+ /* The memory allocation function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* size :: The requested size in bytes. */
+ /* */
+ /* <Return> */
+ /* The address of newly allocated block. */
+ /* */
+ FT_CALLBACK_DEF( void* )
+ ft_alloc( FT_Memory memory,
+ long size )
+ {
+ FT_UNUSED( memory );
+
+ return ft_smalloc( (size_t)size );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_realloc */
+ /* */
+ /* <Description> */
+ /* The memory reallocation function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* cur_size :: The current size of the allocated memory block. */
+ /* */
+ /* new_size :: The newly requested size in bytes. */
+ /* */
+ /* block :: The current address of the block in memory. */
+ /* */
+ /* <Return> */
+ /* The address of the reallocated memory block. */
+ /* */
+ FT_CALLBACK_DEF( void* )
+ ft_realloc( FT_Memory memory,
+ long cur_size,
+ long new_size,
+ void* block )
+ {
+ FT_UNUSED( memory );
+ FT_UNUSED( cur_size );
+
+ return ft_srealloc( block, (size_t)new_size );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_free */
+ /* */
+ /* <Description> */
+ /* The memory release function. */
+ /* */
+ /* <Input> */
+ /* memory :: A pointer to the memory object. */
+ /* */
+ /* block :: The address of block in memory to be freed. */
+ /* */
+ FT_CALLBACK_DEF( void )
+ ft_free( FT_Memory memory,
+ void* block )
+ {
+ FT_UNUSED( memory );
+
+ ft_sfree( block );
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* RESOURCE MANAGEMENT INTERFACE */
+ /* */
+ /*************************************************************************/
+
+#ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT
+
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_io
+
+ /* We use the macro STREAM_FILE for convenience to extract the */
+ /* system-specific stream handle from a given FreeType stream object */
+#define STREAM_FILE( stream ) ( (FT_FILE*)stream->descriptor.pointer )
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_ansi_stream_close */
+ /* */
+ /* <Description> */
+ /* The function to close a stream. */
+ /* */
+ /* <Input> */
+ /* stream :: A pointer to the stream object. */
+ /* */
+ FT_CALLBACK_DEF( void )
+ ft_ansi_stream_close( FT_Stream stream )
+ {
+ ft_fclose( STREAM_FILE( stream ) );
+
+ stream->descriptor.pointer = NULL;
+ stream->size = 0;
+ stream->base = NULL;
+ }
+
+
+ /*************************************************************************/
+ /* */
+ /* <Function> */
+ /* ft_ansi_stream_io */
+ /* */
+ /* <Description> */
+ /* The function to open a stream. */
+ /* */
+ /* <Input> */
+ /* stream :: A pointer to the stream object. */
+ /* */
+ /* offset :: The position in the data stream to start reading. */
+ /* */
+ /* buffer :: The address of buffer to store the read data. */
+ /* */
+ /* count :: The number of bytes to read from the stream. */
+ /* */
+ /* <Return> */
+ /* The number of bytes actually read. If `count' is zero (this is, */
+ /* the function is used for seeking), a non-zero return value */
+ /* indicates an error. */
+ /* */
+ FT_CALLBACK_DEF( unsigned long )
+ ft_ansi_stream_io( FT_Stream stream,
+ unsigned long offset,
+ unsigned char* buffer,
+ unsigned long count )
+ {
+ FT_FILE* file;
+
+
+ if ( !count && offset > stream->size )
+ return 1;
+
+ file = STREAM_FILE( stream );
+
+ if ( stream->pos != offset )
+ ft_fseek( file, (long)offset, SEEK_SET );
+
+ return (unsigned long)ft_fread( buffer, 1, count, file );
+ }
+
+
+ /* documentation is in ftstream.h */
+
+ FT_BASE_DEF( FT_Error )
+ FT_Stream_Open( FT_Stream stream,
+ const char* filepathname )
+ {
+ FT_FILE* file;
+
+
+ if ( !stream )
+ return FT_THROW( Invalid_Stream_Handle );
+
+ stream->descriptor.pointer = NULL;
+ stream->pathname.pointer = (char*)filepathname;
+ stream->base = NULL;
+ stream->pos = 0;
+ stream->read = NULL;
+ stream->close = NULL;
+
+ /* Windows-specific handling for opening Unicode filenames */
+ file = ft_fopen( filepathname, "rb" );
+ /* First attempt failed, assume that is Unicode filename, try
+ _wfopen() */
+#ifdef UNICODE
+ if ( !file )
+ {
+ wchar_t fnameW[MAX_WIN32_FNAME];
+ if ( MultiByteToWideChar( CP_UTF8, 0, filepathname, -1,
+ fnameW, MAX_WIN32_FNAME) == 0 )
+ {
+ file = NULL;
+ }
+ else
+ {
+ file = _wfopen(fnameW, L"rb");
+ }
+ }
+#endif
+ if ( !file )
+ {
+ FT_ERROR(( "FT_Stream_Open:"
+ " could not open `%s'\n", filepathname ));
+
+ return FT_THROW( Cannot_Open_Resource );
+ }
+
+ ft_fseek( file, 0, SEEK_END );
+ stream->size = (unsigned long)ft_ftell( file );
+ if ( !stream->size )
+ {
+ FT_ERROR(( "FT_Stream_Open:" ));
+ FT_ERROR(( " opened `%s' but zero-sized\n", filepathname ));
+ ft_fclose( file );
+ return FT_THROW( Cannot_Open_Stream );
+ }
+ ft_fseek( file, 0, SEEK_SET );
+
+ stream->descriptor.pointer = file;
+ stream->read = ft_ansi_stream_io;
+ stream->close = ft_ansi_stream_close;
+
+ FT_TRACE1(( "FT_Stream_Open:" ));
+ FT_TRACE1(( " opened `%s' (%d bytes) successfully\n",
+ filepathname, stream->size ));
+
+ return FT_Err_Ok;
+ }
+
+#endif /* !FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
+
+#ifdef FT_DEBUG_MEMORY
+
+ extern FT_Int
+ ft_mem_debug_init( FT_Memory memory );
+
+ extern void
+ ft_mem_debug_done( FT_Memory memory );
+
+#endif
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( FT_Memory )
+ FT_New_Memory( void )
+ {
+ FT_Memory memory;
+
+
+ memory = (FT_Memory)ft_smalloc( sizeof ( *memory ) );
+ if ( memory )
+ {
+ memory->user = NULL;
+ memory->alloc = ft_alloc;
+ memory->realloc = ft_realloc;
+ memory->free = ft_free;
+#ifdef FT_DEBUG_MEMORY
+ ft_mem_debug_init( memory );
+#endif
+ }
+
+ return memory;
+ }
+
+
+ /* documentation is in ftobjs.h */
+
+ FT_BASE_DEF( void )
+ FT_Done_Memory( FT_Memory memory )
+ {
+#ifdef FT_DEBUG_MEMORY
+ ft_mem_debug_done( memory );
+#endif
+ ft_sfree( memory );
+ }
+
+
+/* END */
diff --git a/builds/windows/vc2010/freetype.sln
b/builds/windows/vc2010/freetype.sln
index b209eddd2..1e2465af0 100644
--- a/builds/windows/vc2010/freetype.sln
+++ b/builds/windows/vc2010/freetype.sln
@@ -1,49 +1,54 @@
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio Express 2012 for Windows Desktop
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27004.2005
+MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype",
"freetype.vcxproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Win32 = Debug|Win32
- Debug|x64 = Debug|x64
Debug Multithreaded|Win32 = Debug Multithreaded|Win32
Debug Multithreaded|x64 = Debug Multithreaded|x64
Debug Singlethreaded|Win32 = Debug Singlethreaded|Win32
Debug Singlethreaded|x64 = Debug Singlethreaded|x64
- Release|Win32 = Release|Win32
- Release|x64 = Release|x64
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
Release Multithreaded|Win32 = Release Multithreaded|Win32
Release Multithreaded|x64 = Release Multithreaded|x64
Release Singlethreaded|Win32 = Release Singlethreaded|Win32
Release Singlethreaded|x64 = Release Singlethreaded|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Multithreaded|Win32.ActiveCfg = Debug Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Multithreaded|Win32.Build.0 = Debug Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Multithreaded|x64.ActiveCfg = Debug Static|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Multithreaded|x64.Build.0 = Debug Static|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Singlethreaded|Win32.ActiveCfg = Debug Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Singlethreaded|Win32.Build.0 = Debug Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Singlethreaded|x64.ActiveCfg = Debug Static|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Singlethreaded|x64.Build.0 = Debug Static|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.ActiveCfg =
Debug|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.Build.0 =
Debug|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.ActiveCfg =
Debug|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|x64.Build.0 =
Debug|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Multithreaded|x64.ActiveCfg = Debug Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Multithreaded|x64.Build.0 = Debug Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Singlethreaded|x64.ActiveCfg = Debug Singlethreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug
Singlethreaded|x64.Build.0 = Debug Singlethreaded|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Multithreaded|Win32.ActiveCfg = Release Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Multithreaded|Win32.Build.0 = Release Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Multithreaded|x64.ActiveCfg = Release Static|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Multithreaded|x64.Build.0 = Release Static|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Singlethreaded|Win32.ActiveCfg = Release Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Singlethreaded|Win32.Build.0 = Release Static|Win32
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Singlethreaded|x64.ActiveCfg = Release Static|x64
+ {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Singlethreaded|x64.Build.0 = Release Static|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg
= Release|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 =
Release|Win32
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.ActiveCfg =
Release|x64
{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|x64.Build.0 =
Release|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Multithreaded|Win32.Build.0 = Release Multithreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Multithreaded|x64.ActiveCfg = Release Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Multithreaded|x64.Build.0 = Release Multithreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Singlethreaded|x64.ActiveCfg = Release Singlethreaded|x64
- {78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release
Singlethreaded|x64.Build.0 = Release Singlethreaded|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {A93CD4E1-A02E-4F16-9C92-A8502D82995C}
+ EndGlobalSection
EndGlobal
diff --git a/builds/windows/vc2010/freetype.vcxproj
b/builds/windows/vc2010/freetype.vcxproj
index 93e755acc..3daa4b93a 100644
--- a/builds/windows/vc2010/freetype.vcxproj
+++ b/builds/windows/vc2010/freetype.vcxproj
@@ -34,35 +34,35 @@
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
- <!--
+ <!--
Switch the PlatformToolset based on the Visual Studio Version
-->
-<PropertyGroup>
+ <PropertyGroup>
<!-- Assume Visual Studio 2010 / 4.0 as the default -->
<VisualStudioVersion Condition="'$(VisualStudioVersion)' ==
''">4.0</VisualStudioVersion>
-</PropertyGroup>
-<!-- Visual Studio 2010 (4.0) -->
-<PropertyGroup Condition="'$(VisualStudioVersion)' == '4.0'">
+ </PropertyGroup>
+ <!-- Visual Studio 2010 (4.0) -->
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '4.0'">
<PlatformToolset>v100</PlatformToolset>
-</PropertyGroup>
-<!-- Visual Studio 2013 (12.0) -->
-<PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'">
+ </PropertyGroup>
+ <!-- Visual Studio 2013 (12.0) -->
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'">
<PlatformToolset>v120</PlatformToolset>
-</PropertyGroup>
-<!-- Visual Studio 2015 (14.0) -->
-<PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'">
+ </PropertyGroup>
+ <!-- Visual Studio 2015 (14.0) -->
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'">
<PlatformToolset>v140</PlatformToolset>
-</PropertyGroup>
-<!-- Visual Studio 2017 (15.0) -->
-<PropertyGroup Condition="'$(VisualStudioVersion)' == '15.0'">
+ </PropertyGroup>
+ <!-- Visual Studio 2017 (15.0) -->
+ <PropertyGroup Condition="'$(VisualStudioVersion)' == '15.0'">
<PlatformToolset>v141</PlatformToolset>
-</PropertyGroup>
-<!--
+ </PropertyGroup>
+ <!--
End of: Switch the PlatformToolset based on the Visual Studio Version
-->
<PropertyGroup Label="Globals">
- <ProjectGuid>{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}</ProjectGuid>
- <RootNamespace>FreeType</RootNamespace>
+ <ProjectGuid>{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}</ProjectGuid>
+ <RootNamespace>FreeType</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"
Label="Configuration">
@@ -405,7 +405,6 @@
<ClCompile Include="..\..\..\src\base\ftinit.c" />
<ClCompile Include="..\..\..\src\lzw\ftlzw.c" />
<ClCompile Include="..\..\..\src\base\ftstroke.c" />
- <ClCompile Include="..\..\..\src\base\ftsystem.c" />
<ClCompile Include="..\..\..\src\smooth\smooth.c" />
<ClCompile Include="..\..\..\src\base\ftbbox.c" />
<ClCompile Include="..\..\..\src\base\ftfntfmt.c" />
@@ -433,6 +432,9 @@
<ClCompile Include="..\ftdebug.c">
<DisableLanguageExtensions>false</DisableLanguageExtensions>
</ClCompile>
+ <ClCompile Include="..\ftsystem.c">
+ <DisableLanguageExtensions>false</DisableLanguageExtensions>
+ </ClCompile>
<ResourceCompile Include="..\ftver.rc" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
diff --git a/builds/windows/vc2010/freetype.vcxproj.filters
b/builds/windows/vc2010/freetype.vcxproj.filters
index 0e947f4ba..9cd15a788 100644
--- a/builds/windows/vc2010/freetype.vcxproj.filters
+++ b/builds/windows/vc2010/freetype.vcxproj.filters
@@ -56,9 +56,6 @@
<ClCompile Include="..\..\..\src\base\ftstroke.c">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="..\..\..\src\base\ftsystem.c">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="..\..\..\src\smooth\smooth.c">
<Filter>Source Files</Filter>
</ClCompile>
@@ -131,25 +128,13 @@
<ClCompile Include="..\..\..\src\winfonts\winfnt.c">
<Filter>Source Files\FT_MODULES</Filter>
</ClCompile>
+ <ClCompile Include="..\ftsystem.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
- <ClInclude Include="..\..\..\include\ft2build.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftconfig.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftheader.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftmodule.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftoption.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="..\..\..\include\freetype\config\ftstdlib.h">
- <Filter>Header Files</Filter>
- </ClInclude>
+ <ResourceCompile Include="..\ftver.rc">
+ <Filter>Source Files</Filter>
+ </ResourceCompile>
</ItemGroup>
-</Project>
+</Project>
\ No newline at end of file
--
2.13.6
- [ft-devel] [PATCH 1/2] builds/windows/ftsystem.c: Added Unicode support.,
Azamat H. Hackimov <=