diff --git a/ChangeLog b/ChangeLog index c96e9f49d..90ab3ec51 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2000-11-30 David Turner + * INSTALL: slightly updated the quick starter documentation to + include IDE compilation, prevent agains BSD Make, and specify + "make setup" instead of a single "make" for build configuration. + * include/config/ftbuild.h, include/internal/internal.h: added a new configuration file used to determine where are all public, configuration and internal header files for FreeType 2. I also @@ -7,9 +11,18 @@ change. Note that we still need to change the library source files themselves though.. - * include/freetype.h: modified all public, configuration and - internal header files to use the new - + * builds/compiler/bcc.mk, builds/compiler/bcc-dev.mk, + builds/win32/w32-bcc.mk, builds/win32/w32-bccd.mk, + builds/win32/detect.mk: added new files to support compilation with + the free Borland C++ command-line compiler. Modified the detection + rules to recognize the new "bcc32" target in "make setup bcc32" + + * src/sfnt/ttcmap.c, src/sfnt/ttpost.c, src/sfnt/ttsbit.c, + src/truetype/ttobjs.c, src/truetype/ttgload.c, src/truetype/ttinterp.c: + fixed a few comparisons that Borland C++ didn't really like. Basically, + this compiler complains when a FT_UInt is compared to a FT_UShort + (apparently, it promotes the UShort to an Int in these cases) + 2000-11-30 Tom Kacvinsky * t2objs.c (T2_Init_Face): Added calculation of `face->height' for diff --git a/INSTALL b/INSTALL index 151ae8ea5..c9492ead1 100644 --- a/INSTALL +++ b/INSTALL @@ -1,33 +1,90 @@ In order to build the library, read the `BUILD' document in the `docs' -directory. Quick starter: Go to `freetype2', then: +directory. This is only a quick starter: - Unix + GNU Make: +I. From the command line: - - make (don't worry, this will invoke a configure script) + You need to have GNU Make installed on your system to compile the + library from the command line. This will _not_ work with other + Make tools (including the BSD ones !!) + + - Go to the 'freetype2' directory + + - on Unix (any C compiler should work): + + - make setup (don't worry, this will invoke a configure script) - make - make install alternatively, you can pass parameters to the configure script with the CFG variable, as in: - - make CFG="--prefix=/usr" + - make setup CFG="--prefix=/usr" - make - make install + - On Windows: - Windows + gcc + GNU Make: + we provide a version of GNU Make for Win32 on the FreeType site. + See http://www.freetype.org/download.html for details.. - - make - - make + o if you're using gcc: - Windows + Visual C++ + GNU Make: + - make setup + - make - - make setup visualc - - make + o if you're using Visual C++: + + - make setup visualc + - make + + o if you're using Win32-lCC: + + - make setup lcc + - make + + o if you're using the Borland C++ Builder compiler: + + - make setup bcc32 + - make - Windows + Win32-LCC + GNU Make: - - make setup lcc - - make +II. In your own environment (IDE): + + you need to add the directories "freetype2/include" and "freetype2/src" + to your include path when compiling the library. + + compile each library component through the following files: + + -- base components (required) + + src/base/ftsystem.c + src/base/ftinit.c + src/base/ftdebug.c + src/base/ftbase.c + src/base/ftglyph.c + src/base/ftbbox.c + src/base/ftmm.c + + src/base/ftmac.c -- only on the Macintosh + + -- other components are optional + + src/autohint/autohint.c -- auto hinting module + src/cache/ftcache.c -- cache sub-system (in beta) + src/sfnt/sfnt.c -- SFNT files support (TrueType & OpenType) + src/cff/cff.c -- CFF/OpenType font driver + src/psnames/psnames.c -- Postscript glyph names support + src/psaux/psaux.c -- Postscript Type 1 parsing + src/truetype/truetype.c -- TrueType font driver + src/type1/type1.c -- Type 1 font driver + src/cid/type1cid.c -- Type 1 CID-keyed font driver + src/winfonts/winfonts.c -- Windows FONT / FNT font driver + + note that: + + 'truetype.c' needs 'sfnt.c' and 'psnames.c' + 'type1.c' needs 'psaux.c' and 'psnames.c' + 'type1cid.c' needs 'psaux.c' and 'psnames.c' + 'cff.c' needs 'sfnt.c', 'psaux.c' and 'psnames.c' etc. diff --git a/builds/compiler/bcc-dev.mk b/builds/compiler/bcc-dev.mk new file mode 100644 index 000000000..52b188c3a --- /dev/null +++ b/builds/compiler/bcc-dev.mk @@ -0,0 +1,69 @@ +# Copyright 2000 David Turner +# +# Borland C++-specific with NO OPTIMISATIONS + DEBUGGING +# + +# Compiler command line name +CC := bcc32 + +# The object file extension (for standard and static libraries). This can be +# .o, .tco, .obj, etc., depending on the platform. +# +O := obj +SO := obj + +# The library file extension (for standard and static libraries). This can +# be .a, .lib, etc., depending on the platform. +# +A := lib +SA := lib + + +# Path inclusion flag. Some compilers use a different flag than `-I' to +# specify an additional include path. Examples are `/i=' or `-J'. +# +I := -I + + +# C flag used to define a macro before the compilation of a given source +# object. Usually is `-D' like in `-DDEBUG'. +# +D := -D + + +# The link flag used to specify a given library file on link. Note that +# this is only used to compile the demo programs, not the library itself. +# +L := + + +# Target flag. - no trailing space +# +T := -o + + +# C flags +# +# These should concern: debug output, optimization & warnings. +# +# Use the ANSIFLAGS variable to define the compiler flags used to enfore +# ANSI compliance. +# +ifndef CFLAGS + CFLAGS := -c -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus +endif + +# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant. +# +ANSIFLAGS := -A + + +# Library linking +# +ifndef CLEAN_LIBRARY +CLEAN_LIBRARY = $(DELETE) $(subst $(SEP),$(HOSTSEP),$(PROJECT_LIBRARY)) $(NO_OUTPUT) +endif +TARGET_OBJECTS = $(subst $(SEP),\\,$(OBJECTS_LIST)) +LINK_LIBRARY = tlib /u $(subst $(SEP),\\,$@) $(TARGET_OBJECTS:%=+%) + +# EOF diff --git a/builds/compiler/bcc.mk b/builds/compiler/bcc.mk new file mode 100644 index 000000000..2d70ffeb4 --- /dev/null +++ b/builds/compiler/bcc.mk @@ -0,0 +1,69 @@ +# Copyright 2000 David Turner +# +# Borland C++-specific rules +# + +# Compiler command line name +CC := bcc32 + +# The object file extension (for standard and static libraries). This can be +# .o, .tco, .obj, etc., depending on the platform. +# +O := obj +SO := obj + +# The library file extension (for standard and static libraries). This can +# be .a, .lib, etc., depending on the platform. +# +A := lib +SA := lib + + +# Path inclusion flag. Some compilers use a different flag than `-I' to +# specify an additional include path. Examples are `/i=' or `-J'. +# +I := -I + + +# C flag used to define a macro before the compilation of a given source +# object. Usually is `-D' like in `-DDEBUG'. +# +D := -D + + +# The link flag used to specify a given library file on link. Note that +# this is only used to compile the demo programs, not the library itself. +# +L := + + +# Target flag. - no trailing space +# +T := -o + + +# C flags +# +# These should concern: debug output, optimization & warnings. +# +# Use the ANSIFLAGS variable to define the compiler flags used to enfore +# ANSI compliance. +# +ifndef CFLAGS + CFLAGS := -c -q -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus +endif + +# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant. +# +ANSIFLAGS := -A + + +# Library linking +# +ifndef CLEAN_LIBRARY +CLEAN_LIBRARY = $(DELETE) $(subst $(SEP),$(HOSTSEP),$(PROJECT_LIBRARY)) $(NO_OUTPUT) +endif +TARGET_OBJECTS = $(subst $(SEP),\\,$(OBJECTS_LIST)) +LINK_LIBRARY = tlib /u $(subst $(SEP),\\,$@) $(TARGET_OBJECTS:%=+%) + +# EOF diff --git a/builds/win32/detect.mk b/builds/win32/detect.mk index 665a4416b..be6d3d9f8 100644 --- a/builds/win32/detect.mk +++ b/builds/win32/detect.mk @@ -89,6 +89,13 @@ ifeq ($(PLATFORM),ansi) mingw32: setup endif + ifneq ($(findstring bcc32,$(MAKECMDGOALS)),) # Borland C++ + CONFIG_FILE := w32-bcc.mk + SEP := $(BACKSLASH) + CC := bcc32 + bcc32: setup + endif + ifneq ($(findstring devel,$(MAKECMDGOALS)),) # development target CONFIG_FILE := w32-dev.mk CC := gcc diff --git a/builds/win32/w32-bcc.mk b/builds/win32/w32-bcc.mk new file mode 100644 index 000000000..76991a4e4 --- /dev/null +++ b/builds/win32/w32-bcc.mk @@ -0,0 +1,12 @@ +# +# Borland C++ on Win32 +# + +SEP := / +include $(TOP)/builds/win32/win32-def.mk +include $(TOP)/builds/compiler/bcc.mk + +# include linking instructions +include $(TOP)/builds/link_dos.mk + +# EOF diff --git a/builds/win32/w32-bccd.mk b/builds/win32/w32-bccd.mk new file mode 100644 index 000000000..4c307165c --- /dev/null +++ b/builds/win32/w32-bccd.mk @@ -0,0 +1,12 @@ +# +# Borland C++ on Win32 + debugging +# + +SEP := / +include $(TOP)/builds/win32/win32-def.mk +include $(TOP)/builds/compiler/bcc-dev.mk + +# include linking instructions +include $(TOP)/builds/link_dos.mk + +# EOF diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c index 1aa53e196..b62ec2c93 100644 --- a/src/sfnt/ttcmap.c +++ b/src/sfnt/ttcmap.c @@ -417,10 +417,10 @@ sh2 = cmap2->subHeaders + index1; char_lo -= sh2->firstCode; - if ( char_lo < sh2->entryCount ) + if ( char_lo < (FT_UInt)sh2->entryCount ) { offset = sh2->idRangeOffset / 2 + char_lo; - if ( offset < cmap2->numGlyphId ) + if ( offset < (FT_UInt)cmap2->numGlyphId ) { result = cmap2->glyphIdArray[offset]; if ( result ) @@ -484,10 +484,10 @@ /* the ranges are sorted in increasing order. If we are out of */ /* the range here, the char code isn't in the charmap, so exit. */ - if ( charCode > seg4->endCount ) + if ( charCode > (FT_UInt)seg4->endCount ) continue; - if ( charCode >= seg4->startCount ) + if ( charCode >= (FT_UInt)seg4->startCount ) goto Found; } return 0; @@ -508,7 +508,7 @@ + ( seg4 - cmap4->segments ) - segCount; - if ( index1 < cmap4->numGlyphId && + if ( index1 < (FT_UInt)cmap4->numGlyphId && cmap4->glyphIdArray[index1] != 0 ) result = ( cmap4->glyphIdArray[index1] + seg4->idDelta ) & 0xFFFF; } @@ -544,7 +544,7 @@ result = 0; charCode -= cmap6->firstCode; - if ( charCode < cmap6->entryCount ) + if ( charCode < (FT_UInt)cmap6->entryCount ) result = cmap6->glyphIdArray[charCode]; return result; diff --git a/src/sfnt/ttpost.c b/src/sfnt/ttpost.c index 24315692e..6fe7e2b21 100644 --- a/src/sfnt/ttpost.c +++ b/src/sfnt/ttpost.c @@ -500,7 +500,7 @@ break; } - if ( index < table->num_glyphs ) + if ( index < (FT_UInt)table->num_glyphs ) { FT_UShort name_index = table->glyph_indices[index]; @@ -525,7 +525,7 @@ break; } - if ( index < table->num_glyphs ) /* paranoid checking */ + if ( index < (FT_UInt)table->num_glyphs ) /* paranoid checking */ { index += table->offsets[index]; *PSname = MAC_NAME( index ); diff --git a/src/sfnt/ttsbit.c b/src/sfnt/ttsbit.c index 505e44ed3..a31f6ed63 100644 --- a/src/sfnt/ttsbit.c +++ b/src/sfnt/ttsbit.c @@ -689,8 +689,8 @@ /* check whether the glyph index is within this strike's */ /* glyph range */ - if ( glyph_index < strike->start_glyph || - glyph_index > strike->end_glyph ) + if ( glyph_index < (FT_UInt)strike->start_glyph || + glyph_index > (FT_UInt)strike->end_glyph ) goto Fail; /* scan all ranges in strike */ @@ -701,8 +701,8 @@ for ( ; range < range_limit; range++ ) { - if ( glyph_index >= range->first_glyph && - glyph_index <= range->last_glyph ) + if ( glyph_index >= (FT_UInt)range->first_glyph && + glyph_index <= (FT_UInt)range->last_glyph ) { FT_UShort delta = glyph_index - range->first_glyph; @@ -727,7 +727,7 @@ for ( n = 0; n < range->num_glyphs; n++ ) { - if ( range->glyph_codes[n] == glyph_index ) + if ( (FT_UInt)range->glyph_codes[n] == glyph_index ) { if ( range->index_format == 4 ) *aglyph_offset = range->glyph_offsets[n]; diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c index b414e2b3a..9bb313f87 100644 --- a/src/truetype/ttgload.c +++ b/src/truetype/ttgload.c @@ -97,7 +97,7 @@ FT_UShort k = header->number_Of_HMetrics; - if ( index < k ) + if ( index < (FT_UInt)k ) { longs_m = (TT_LongMetrics*)header->long_metrics + index; *bearing = longs_m->bearing; diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c index 1e9a39947..e9dd074b1 100644 --- a/src/truetype/ttinterp.c +++ b/src/truetype/ttinterp.c @@ -6430,7 +6430,7 @@ for ( ; def < limit; def++ ) { - if ( def->opc == CUR.opcode && def->active ) + if ( (FT_Byte)def->opc == CUR.opcode && def->active ) { TT_CallRec* call; @@ -7414,7 +7414,7 @@ for ( ; def < limit; def++ ) { - if ( def->active && CUR.opcode == def->opc ) + if ( def->active && CUR.opcode == (FT_Byte)def->opc ) { TT_CallRec* callrec; diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c index a1d1c3516..0df6a9560 100644 --- a/src/truetype/ttobjs.c +++ b/src/truetype/ttobjs.c @@ -602,7 +602,7 @@ size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale ); /* All twilight points are originally zero */ - for ( j = 0; j < size->twilight.n_points; j++ ) + for ( j = 0; j < (FT_UInt)size->twilight.n_points; j++ ) { size->twilight.org[j].x = 0; size->twilight.org[j].y = 0; @@ -611,7 +611,7 @@ } /* clear storage area */ - for ( i = 0; i < size->storage_size; i++ ) + for ( i = 0; i < (FT_UInt)size->storage_size; i++ ) size->storage[i] = 0; size->GS = tt_default_graphics_state;