freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ft-devel] freetype under Windows


From: Saro Engels
Subject: [ft-devel] freetype under Windows
Date: Fri, 15 Feb 2008 00:54:08 +0100
User-agent: Thunderbird 2.0.0.9 (Windows/20071031)

Hi all,
I have currently put some effort in porting poppler[1] to the Windows
platform, compilable with both MinGW and Microsoft Compilers so I had to
work on freetype too (the main demand was to use the same buildsystem
for both compilers and not porting itself).
I didn't got ftjam working + the support for ftjam seems to be very
small compared so I decided to use CMake[2].

There are three small things that need to be mentioned:
- The compiler flags are only set on the windows platform currently; if
  you use the mingw flags, you can probably get it building on every
  other platform that is supported by gcc.
- There were some changes to use __declspec for the visibility on msvc;
  functions are not visible by default.
- I couldn't find the right place to use an external zlib - I left it
  outside for now, but it wouldn't be to hard to put it in if it is
  possible somehow.

This email is meant to inform you of this effort. If you like the patch,
you can add the files under BSD license. If not, you can leave them as I
will maintain them anyway.
note: the patch is against freetype-2.3.5.

regards
SaroEngels

[1] http://poppler.freedesktop.org/
[2] http://www.cmake.org/


--
web:                 http://windows.kde.org
mailing list:        address@hidden
irc:                 #kde-windows (irc.freenode.net)
diff -N -r -u freetype-2.3.5-orig/CMakeLists.txt freetype-2.3.5/CMakeLists.txt
--- freetype-2.3.5-orig/CMakeLists.txt  1970-01-01 01:00:00.000000000 +0100
+++ freetype-2.3.5/CMakeLists.txt       2008-02-07 18:59:32.765625000 +0100
@@ -0,0 +1,103 @@
+project( freetype )
+
+if( WIN32 )
+    if( MINGW )
+      add_definitions( -pedantic -ansi -Wall -g -O2 -DPIC )
+    else( MINGW )
+      add_definitions( -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE 
-D_SCL_SECURE_NO_WARNINGS -DWIN32_LEAN_AND_MEAN -D_REENTRANT )
+    endif( MINGW )
+endif( WIN32 )
+
+include( CheckIncludeFile )
+include( CheckTypeSize )
+
+CHECK_INCLUDE_FILE( "unistd.h" HAVE_UNISTD_H )
+CHECK_INCLUDE_FILE( "fcntl.h" HAVE_FCNTL_H )
+CHECK_TYPE_SIZE( int SIZEOF_INT )
+CHECK_TYPE_SIZE( long SIZEOF_LONG )
+
+configure_file( ftconfig.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/ftconfig.h )
+configure_file( ftmodule.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/ftmodule.h )
+
+set( freetype_SRC
+    src/base/ftsystem.c
+    src/base/ftdebug.c
+    src/base/ftinit.c
+    src/base/ftbase.c
+    src/base/ftbbox.c
+    src/base/ftbdf.c
+    src/base/ftbitmap.c
+    src/base/ftglyph.c
+    src/base/ftgxval.c
+    src/base/ftmm.c
+    src/base/ftotval.c
+    src/base/ftpfr.c
+    src/base/ftstroke.c
+    src/base/ftsynth.c
+    src/base/fttype1.c
+    src/base/ftwinfnt.c
+    src/base/ftxf86.c
+    src/base/ftlcdfil.c
+    src/base/ftgasp.c
+    src/base/ftpatent.c
+    src/truetype/truetype.c
+    src/type1/type1.c
+    src/cff/cff.c
+    src/cid/type1cid.c
+    src/pfr/pfr.c
+    src/type42/type42.c
+    src/winfonts/winfnt.c
+    src/pcf/pcf.c
+    src/bdf/bdf.c
+    src/sfnt/sfnt.c
+    src/autofit/autofit.c
+    src/pshinter/pshinter.c
+    src/raster/raster.c
+    src/smooth/smooth.c
+    src/cache/ftcache.c
+    src/gzip/ftgzip.c
+    src/lzw/ftlzw.c
+    src/psaux/psaux.c
+    src/psnames/psmodule.c
+)
+
+include_directories( 
+    builds/unix
+    src/base 
+    src/truetype 
+    src/type1 
+    src/cff 
+    src/cid 
+    src/pfr 
+    src/type42 
+    src/winfonts 
+    src/pcf 
+    src/bdf 
+    src/sfnt 
+    src/autofit 
+    src/pshinter 
+    src/raster 
+    src/smooth 
+    src/cache 
+    src/gzip 
+    src/lzw 
+    src/psaux 
+    src/psnames
+    include
+    ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+add_definitions( -DFT_CONFIG_CONFIG_H="<ftconfig.h>" -DFT2_BUILD_LIBRARY 
-DFT_CONFIG_MODULES_H="<ftmodule.h>" )
+
+add_library( freetype SHARED ${freetype_SRC} )
+
+install( TARGETS freetype RUNTIME DESTINATION bin LIBRARY DESTINATION lib 
ARCHIVE DESTINATION lib )
+
+file( GLOB include_files "include/freetype/*.h")
+file( GLOB include_config_files "include/freetype/config/*.h")
+file( GLOB include_internal_files "include/freetype/internal/*.h")
+
+install( FILES ${include_files} DESTINATION include/freetype2/freetype )
+install( FILES ${include_config_files} DESTINATION 
include/freetype2/freetype/config )
+install( FILES ${include_internal_files} DESTINATION 
include/freetype2/freetype/internal )
+install( FILES include/ft2build.h DESTINATION include/freetype2 )
diff -N -r -u freetype-2.3.5-orig/ftconfig.h.cmake 
freetype-2.3.5/ftconfig.h.cmake
--- freetype-2.3.5-orig/ftconfig.h.cmake        1970-01-01 01:00:00.000000000 
+0100
+++ freetype-2.3.5/ftconfig.h.cmake     2008-02-07 18:59:09.312500000 +0100
@@ -0,0 +1,364 @@
+/***************************************************************************/
+/*                                                                         */
+/*  ftconfig.in                                                            */
+/*                                                                         */
+/*    UNIX-specific configuration file (specification only).               */
+/*                                                                         */
+/*  Copyright 1996-2001, 2002, 2003, 2004, 2006, 2007 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 header file contains a number of macro definitions that are used */
+  /* by the rest of the engine.  Most of the macros here are automatically */
+  /* determined at compile time, and you should not need to change it to   */
+  /* port FreeType, except to compile the library with a non-ANSI          */
+  /* compiler.                                                             */
+  /*                                                                       */
+  /* Note however that if some specific modifications are needed, we       */
+  /* advise you to place a modified copy in your build directory.          */
+  /*                                                                       */
+  /* The build directory is usually `freetype/builds/<system>', and        */
+  /* contains system-specific files that are always included first when    */
+  /* building the library.                                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#ifndef __FTCONFIG_H__
+#define __FTCONFIG_H__
+
+#include <ft2build.h>
+#include FT_CONFIG_OPTIONS_H
+#include FT_CONFIG_STANDARD_LIBRARY_H
+
+
+FT_BEGIN_HEADER
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*               PLATFORM-SPECIFIC CONFIGURATION MACROS                  */
+  /*                                                                       */
+  /* These macros can be toggled to suit a specific system.  The current   */
+  /* ones are defaults used to compile FreeType in an ANSI C environment   */
+  /* (16bit compilers are also supported).  Copy this file to your own     */
+  /* `freetype/builds/<system>' directory, and edit it to port the engine. */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+#cmakedefine HAVE_UNISTD_H @HAVE_UNISTD_H@
+#cmakedefine HAVE_FCNTL_H @HAVE_FCNTL_H@
+
+#define SIZEOF_INT @SIZEOF_INT@
+#define SIZEOF_LONG @SIZEOF_LONG@
+
+
+#define FT_SIZEOF_INT   SIZEOF_INT
+#define FT_SIZEOF_LONG  SIZEOF_LONG
+
+#define FT_CHAR_BIT  CHAR_BIT
+
+  /* Preferred alignment of data */
+#define FT_ALIGNMENT  8
+
+
+  /* FT_UNUSED is a macro used to indicate that a given parameter is not  */
+  /* used -- this is only used to get rid of unpleasant compiler warnings */
+#ifndef FT_UNUSED
+#define FT_UNUSED( arg )  ( (arg) = (arg) )
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /*                     AUTOMATIC CONFIGURATION MACROS                    */
+  /*                                                                       */
+  /* These macros are computed from the ones defined above.  Don't touch   */
+  /* their definition, unless you know precisely what you are doing.  No   */
+  /* porter should need to mess with them.                                 */
+  /*                                                                       */
+  /*************************************************************************/
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* Mac support                                                           */
+  /*                                                                       */
+  /*   This is the only necessary change, so it is defined here instead    */
+  /*   providing a new configuration file.                                 */
+  /*                                                                       */
+#if ( defined( __APPLE__ ) && !defined( DARWIN_NO_CARBON ) ) || \
+    ( defined( __MWERKS__ ) && defined( macintosh )        )
+  /* no Carbon frameworks for 64bit 10.4.x */
+#include "AvailabilityMacros.h"
+#if defined( __LP64__ ) && \
+    ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 )
+#define DARWIN_NO_CARBON 1
+#else
+#define FT_MACINTOSH 1
+#endif
+#endif
+
+
+  /* Fix compiler warning with sgi compiler */
+#if defined( __sgi ) && !defined( __GNUC__ )
+#if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
+#pragma set woff 3505
+#endif
+#endif
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* IntN types                                                            */
+  /*                                                                       */
+  /*   Used to guarantee the size of some specific integers.               */
+  /*                                                                       */
+  typedef signed short    FT_Int16;
+  typedef unsigned short  FT_UInt16;
+
+#if FT_SIZEOF_INT == 4
+
+  typedef signed int      FT_Int32;
+  typedef unsigned int    FT_UInt32;
+
+#elif FT_SIZEOF_LONG == 4
+
+  typedef signed long     FT_Int32;
+  typedef unsigned long   FT_UInt32;
+
+#else
+#error "no 32bit type found -- please check your configuration files"
+#endif
+
+
+  /* look up an integer type that is at least 32 bits */
+#if FT_SIZEOF_INT >= 4
+
+  typedef int            FT_Fast;
+  typedef unsigned int   FT_UFast;
+
+#elif FT_SIZEOF_LONG >= 4
+
+  typedef long           FT_Fast;
+  typedef unsigned long  FT_UFast;
+
+#endif
+
+
+  /* determine whether we have a 64-bit int type for platforms without */
+  /* Autoconf                                                          */
+#if FT_SIZEOF_LONG == 8
+
+  /* FT_LONG64 must be defined if a 64-bit type is available */
+#define FT_LONG64
+#define FT_INT64  long
+
+#elif defined( _MSC_VER ) && _MSC_VER >= 900  /* Visual C++ (and Intel C++) */
+
+  /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64  __int64
+
+#elif defined( __BORLANDC__ )  /* Borland C++ */
+
+  /* XXXX: We should probably check the value of __BORLANDC__ in order */
+  /*       to test the compiler version.                               */
+
+  /* this compiler provides the __int64 type */
+#define FT_LONG64
+#define FT_INT64  __int64
+
+#elif defined( __WATCOMC__ )   /* Watcom C++ */
+
+  /* Watcom doesn't provide 64-bit data types */
+
+#elif defined( __MWERKS__ )    /* Metrowerks CodeWarrior */
+
+#define FT_LONG64
+#define FT_INT64  long long int
+
+#elif defined( __GNUC__ )
+
+  /* GCC provides the `long long' type */
+#define FT_LONG64
+#define FT_INT64  long long int
+
+#endif /* FT_SIZEOF_LONG == 8 */
+
+
+#define FT_BEGIN_STMNT  do {
+#define FT_END_STMNT    } while ( 0 )
+#define FT_DUMMY_STMNT  FT_BEGIN_STMNT FT_END_STMNT
+
+
+  /*************************************************************************/
+  /*                                                                       */
+  /* A 64-bit data type will create compilation problems if you compile    */
+  /* in strict ANSI mode.  To avoid them, we disable their use if          */
+  /* __STDC__ is defined.  You can however ignore this rule by             */
+  /* defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro.        */
+  /*                                                                       */
+#if defined( FT_LONG64 ) && !defined( FT_CONFIG_OPTION_FORCE_INT64 )
+
+#ifdef __STDC__
+
+  /* Undefine the 64-bit macros in strict ANSI compilation mode.  */
+  /* Since `#undef' doesn't survive in configuration header files */
+  /* we use the postprocessing facility of AC_CONFIG_HEADERS to   */
+  /* replace the leading `/' with `#'.                            */
+#undef FT_LONG64
+#undef FT_INT64
+
+#endif /* __STDC__ */
+
+#endif /* FT_LONG64 && !FT_CONFIG_OPTION_FORCE_INT64 */
+
+
+#ifdef FT_MAKE_OPTION_SINGLE_OBJECT
+
+#define FT_LOCAL( x )      static  x
+#define FT_LOCAL_DEF( x )  static  x
+
+#else
+
+#ifdef __cplusplus
+#define FT_LOCAL( x )      extern "C"  x
+#define FT_LOCAL_DEF( x )  extern "C"  x
+#else
+#define FT_LOCAL( x )      extern  x
+#define FT_LOCAL_DEF( x )  x
+#endif
+
+#endif /* FT_MAKE_OPTION_SINGLE_OBJECT */
+
+
+#ifndef FT_BASE
+
+#ifdef __cplusplus
+#define FT_BASE( x )  extern "C"  x
+#else
+#define FT_BASE( x )  extern  x
+#endif
+
+#endif /* !FT_BASE */
+
+
+#ifndef FT_BASE_DEF
+
+#ifdef __cplusplus
+#define FT_BASE_DEF( x )  x
+#else
+#define FT_BASE_DEF( x )  x
+#endif
+
+#endif /* !FT_BASE_DEF */
+
+
+#ifndef FT_EXPORT
+# ifdef WIN32
+#  ifdef freetype_EXPORTS
+#   ifdef __cplusplus
+#    define FT_EXPORT( x ) __declspec(dllexport) "C" x
+#   else
+#    define FT_EXPORT( x ) __declspec(dllexport) x
+#   endif
+#  else
+#   ifdef __cplusplus
+#    define FT_EXPORT( x ) __declspec(dllimport) "C" x
+#   else
+#    define FT_EXPORT( x ) __declspec(dllimport) x
+#   endif
+#  endif
+# else
+#  ifdef __cplusplus
+#   define FT_EXPORT( x ) extern "C" x
+#  else
+#   define FT_EXPORT( x ) extern x
+#  endif
+# endif
+#endif /* !FT_EXPORT */
+
+
+
+#ifndef FT_EXPORT_DEF
+
+#ifdef __cplusplus
+#define FT_EXPORT_DEF( x )  extern "C"  x
+#else
+#define FT_EXPORT_DEF( x )  extern  x
+#endif
+
+#endif /* !FT_EXPORT_DEF */
+
+
+#ifndef FT_EXPORT_VAR
+
+#ifdef __cplusplus
+#define FT_EXPORT_VAR( x )  extern "C"  x
+#else
+#define FT_EXPORT_VAR( x )  extern  x
+#endif
+
+#endif /* !FT_EXPORT_VAR */
+
+  /* The following macros are needed to compile the library with a   */
+  /* C++ compiler and with 16bit compilers.                          */
+  /*                                                                 */
+
+  /* This is special.  Within C++, you must specify `extern "C"' for */
+  /* functions which are used via function pointers, and you also    */
+  /* must do that for structures which contain function pointers to  */
+  /* assure C linkage -- it's not possible to have (local) anonymous */
+  /* functions which are accessed by (global) function pointers.     */
+  /*                                                                 */
+  /*                                                                 */
+  /* FT_CALLBACK_DEF is used to _define_ a callback function.        */
+  /*                                                                 */
+  /* FT_CALLBACK_TABLE is used to _declare_ a constant variable that */
+  /* contains pointers to callback functions.                        */
+  /*                                                                 */
+  /* FT_CALLBACK_TABLE_DEF is used to _define_ a constant variable   */
+  /* that contains pointers to callback functions.                   */
+  /*                                                                 */
+  /*                                                                 */
+  /* Some 16bit compilers have to redefine these macros to insert    */
+  /* the infamous `_cdecl' or `__fastcall' declarations.             */
+  /*                                                                 */
+#ifndef FT_CALLBACK_DEF
+#ifdef __cplusplus
+#define FT_CALLBACK_DEF( x )  extern "C"  x
+#else
+#define FT_CALLBACK_DEF( x )  static  x
+#endif
+#endif /* FT_CALLBACK_DEF */
+
+#ifndef FT_CALLBACK_TABLE
+#ifdef __cplusplus
+#define FT_CALLBACK_TABLE      extern "C"
+#define FT_CALLBACK_TABLE_DEF  extern "C"
+#else
+#define FT_CALLBACK_TABLE      extern
+#define FT_CALLBACK_TABLE_DEF  /* nothing */
+#endif
+#endif /* FT_CALLBACK_TABLE */
+
+
+FT_END_HEADER
+
+
+#endif /* __FTCONFIG_H__ */
+
+
+/* END */
diff -N -r -u freetype-2.3.5-orig/ftmodule.h.cmake 
freetype-2.3.5/ftmodule.h.cmake
--- freetype-2.3.5-orig/ftmodule.h.cmake        1970-01-01 01:00:00.000000000 
+0100
+++ freetype-2.3.5/ftmodule.h.cmake     2008-02-07 18:59:09.312500000 +0100
@@ -0,0 +1,20 @@
+/* This is a generated file. */
+FT_USE_MODULE(tt_driver_class)
+FT_USE_MODULE(t1_driver_class)
+FT_USE_MODULE(cff_driver_class)
+FT_USE_MODULE(t1cid_driver_class)
+FT_USE_MODULE(pfr_driver_class)
+FT_USE_MODULE(t42_driver_class)
+FT_USE_MODULE(winfnt_driver_class)
+FT_USE_MODULE(pcf_driver_class)
+FT_USE_MODULE(bdf_driver_class)
+FT_USE_MODULE(sfnt_module_class)
+FT_USE_MODULE(autofit_module_class)
+FT_USE_MODULE(pshinter_module_class)
+FT_USE_MODULE(ft_raster1_renderer_class)
+FT_USE_MODULE(ft_smooth_renderer_class)
+FT_USE_MODULE(ft_smooth_lcd_renderer_class)
+FT_USE_MODULE(ft_smooth_lcdv_renderer_class)
+FT_USE_MODULE(psaux_module_class)
+FT_USE_MODULE(psnames_module_class)
+/* EOF */

reply via email to

[Prev in Thread] Current Thread [Next in Thread]