                              Fontconfig
             Font configuration and customization library
                              Version 2.6
                              2008-05-31


Check INSTALL for compilation and installation instructions.
Report bugs to https://bugs.freedesktop.org in the fontconfig module.

2.6

2.5.93 (2.6 RC3)

Alexey Khoroshilov (1):
      Fix FcStrDirname documentation. (bug 16068)

Behdad Esfahbod (1):
      Persian conf update. (bug 16066).

Evgeniy Stepanov (1):
      Fix index/offset for 'decorative' matcher. Bug 15890.

Glen Low (1):
      Fix Win32 build error: install tries to run fc-cache locally (bug 15928).

Keith Packard (8):
      Call FcFini to make memory debugging easier
      Fix a few memory tracking mistakes.
      Add extended, caps, dunhill style mappings.
      Freetype 2.3.5 (2007-jul-02) fixes indic font hinting. re-enable (bug 15822)
      Add a copy of dolt.m4 to acinclude.m4.
      Libs.private needs freetype libraries
      Oops. Fix for bug 15928 used wrong path for installed fc-cache.
      Ignore empty <dir></dir> elements

Neskie Manuel (1):
      Add Secwepemctsin Orthography. Bug 15996.

Sayamindu Dasgupta (1):
      FcConfigUptoDate breaks if directory mtime is in the future. Bug 14424.

2.5.92 (2.6 RC2)

Carlo Bramini (1):
      Add FreeType-dependent functions to fontconfig.def file. (bug 15415)

Changwoo Ryu (1):
      Korean font in the default config - replacing baekmuk with un (bug 13569)

Dennis Schridde (1):
      Proper config path for static libraries in win32

Eric Anholt (1):
      Fix build with !ENABLE_DOCS and no built manpages.

Frederic Crozat (1):
      Merge some of Mandriva configuration into upstream configuration. Bug 13247

Keith Packard (11):
      Use DOLT if available
      Work around for bitmap-only TrueType fonts that are missing the glyf table.
      Remove size and dpi values from bitmap fonts. Bug 8765.
      Add some sample cursive and fantasy families.
      Add --all flag to fc-match to show the untrimmed list. Bug 13018.
      Remove doltcompile in distclean
      Use of ":=" in src/Makefile.am is unportable (bug 14420)
      Make fc-match behave better when style is unknown (bug 15332)
      Deal with libtool 2.2 which doesn't let us use LT_ variables. (bug 15692)
      Allow for RC versions in README update
      git ignore doltcompile

Ryan Schmidt (1):
      fontconfig build fails if "head" is missing or unusable (bug 14304)

Sylvain Pasche (1):
      Fontconfig options for freetype sub-pixel filter configuration

2.5.91 (2.6 RC1)

Hongbo Zhao (1):
      Not_contain should use strstr, not strcmp on strings. (bug 13632)

Keith Packard (11):
      Move conf.avail/README to conf.d/README (bug 13392)
      Fix OOM failure case in FcPStackPush.
      Remove freetype requirement for build-time applications.
      Include fcftaliastail.h so that the freetype funcs are exported.
      Eliminate references to freetype from utility Makefile.am's
      Distribute new fcftint.h file
      Create new-version.sh to help with releases, update INSTALL instructions
      Distribute khmer font aliases
      Add more files to .gitignore
      new-version.sh was mis-editing files
      git-tag requires space after -m flag

2.5

Keith Packard (4):
      Document several function return values (Bug 13145).
      Document that Match calls FcFontRenderPrepare (bug 13162).
      Document that FcConfigGetFonts returns the internal fontset (bug 13197)
      Revert "Remove fcprivate.h, move the remaining macros to fcint.h."

Tor Lillqvist (1):
      Workaround for stat() brokenness in Microsoft's C library (bug 8526)

2.4.92 (2.5 RC2)

Behdad Esfahbod (14):
      Make fc-match --sort call FcFontRenderPrepare.
      Port fonts-persian.conf to new alias syntax with binding="same"
      Fix trivial bugs in edit-sgml.c
      Add FcGetLangs() and FcLangGetCharSet().
      Add/update config files from Fedora.
      Split 40-generic.conf into 40-nonlatin.conf and 45-latin.conf
      Use binding="same" in 30-urw-aliases.conf and remove duplicate entries.
      Remove redundant/obsolete comments from conf files.
      Remove 20-lohit-gujarati.conf.  It's covered by 25-unhint-nonlatin.conf now.
      Oops, fix Makefile.am.
      Remove 25-unhint-nonlatin.conf from default configuration by not linking it.
      Fix documented conf-file naming format in README
      Remove list of available conf files from README.
      Simplify/improve 30-metric-aliases.conf

Keith Packard (25):
      Also check configDirs mtimes in FcConfigUptoDate
      Respect "binding" attribute in <alias> entries.
      Correct documentation for FcAtomicLock (Bug 12947).
      Remove fcprivate.h, move the remaining macros to fcint.h.
      Correct documentation for FcConfigUptoDate (bug 12948).
      Document skipping of fonts from FcFileScan/FcDirScan.
      Make file_stat argument to FcDirCacheLoadFile optional.
      Clean up exported names in fontconfig.h.
      Track line numbers in sgml edit tool input.
      Typo error in function name: Inverval -> interval
      Don't check cache file time stamps when cleaning cache dir.
      Use FcLangDifferentTerritory instead of FcLangDifferentCountry.
      Verify documentation covers exposed symbols.
      Document previously undocumented functions. (bug 12963)
      Update documentation for FcStrCopyFilename (bug 12964).
      Update documentation for stale FcConfigGetConfig function.
      Have FcConfigSetCurrent accept the current configuration and simply return
      Remove references to FcConfigParse and FcConfigLoad.
      Replace incorrect documentation uses of 'char' with 'FcChar8' (bug 13002).
      Fix formatting syntax in doc/fccache.fncs
      Generate fccache.sgml, fcdircache.sgml and fclangset.sgml.
      Formatting syntax mistake in doc/fclangset.fncs.
      Link new function documentation into the fontconfig-devel.sgml
      Ignore new generated documentation
      Export FcConfig{G,S}etRescanInverval from .so, mark as deprecated.

2.4.91 (2.5 RC1)

Behdad Esfahbod (1):
      Update CaseFolding.txt to Unicode 5.1.0

Dwayne Bailey (1):
      Add/fix *.orth files for South African languages

Hideki Yamane (1):
      Handle Japanese fonts better. (debian bug #435971)

Keith Packard (32):
      rehash increment could be zero, causing rehash infinite loop.
      Work around FreeType bug when glyph name buffer is too small.
      Free temporary string in FcDirCacheUnlink (Bug #11758)
      Fix ChangeLog generation to avoid circular make dependency
      Store font directory mtime in cache file.
      Comment about mmaping cache files was misleading.
      Make FC_FULLNAME include all fullname entries, elide nothing. [bug 12827]
      Remove unneeded call to access(2) in fc-cache.
      Improve verbose messages from fc-cache.
      Verbose message about cleaning directories was imprecise
      Don't use X_OK bit when checking for writable directories (bug 12438)
      Have fc-cache remove invalid cache files from cache directories.
      FcConfigParseAndLoad doc was missing the last param.
      Place language name in constant array instead of pointer.
      Must not insert cache into hash table before completely validating.
      Eliminate relocations for glyph name table.
      Eliminate relocations from FcCodePageRange structure (bug 10982).
      Leave generated headers out of distribution (bug 12734).
      Move <cachedir> elements to the end of fonts.conf.
      Add BRAILLE PATTERN BLANK to list of blank glyphs.
      Replace makealias pattern with something supported by POSIX grep (bug 11083)
      FcInit should return FcFalse when FcInitLoadConfigAndFonts fails. (bug 10976)
      There is no U+1257 (bug 10899).
      Spelling errors in documentation. (bug 10879).
      Oops. Left debugging printf in previous commit.
      Handle UltraBlack weight.
      Fix parallel build in fontconfig/docs (bug 10481).
      Distribute man source files for command line programs (bug 9678).
      Ensure weight/slant values present even when style is supplied (bug 9313).
      fontconfig needs configure option to use gnu iconv (bug 4083).
      Match 'ultra' on word boundaries to detect ultra bold fonts. (bug 2511)
      Build fix for Solaris 10 with GCC.

Mike FABIAN (1):
      Avoid crashes if config files contain junk.

Stephan Kulow (1):
      Make FcPatternDuplicate copy the binding instead of always using Strong.

Tilman Sauerbeck (2):
      Store FcNoticeFoundries in read-only memory.
      Store FcVendorFoundries in read-only memory.

2.4.2

Han-Wen Nienhuys:
      FcStrCanonFileName buggy for mingw. (bug 8311)
      More fixes for Win32 building (bug 8311)

Kean Johnston:
      Don't use varargs CPP macros in fccache.c. (bug 8733)

Keith Packard:
      Remove documentation for non-existant FcConfigNormalizeFontDir.
      Build fontconfig.def from header files when needed.
      Detect and use available random number generator (bug 8308)
      Add sparc64 architecture string.
      FcStrCanonAbsoluteFilename should be static.
      Use explicit platform/nameid order when scanning ttf files.
      Warn (and recover) from config file without <cachedir> elements.
      Avoid writing uninitialized structure pad bytes to cache files.
      Fix grep pattern in makealias to work on non-Gnu grep (bug 8368).
      Add FcFreeTypeQueryFace external API. Bug #7311.
      Segfault scanning non-font files. Disallow scan edit of user vars. (#8767)
      Add space between type and formal in devel man pages (bug 8935)

Mike FABIAN:
      Do not clean cache files for different architectures

Peter Breitenlohner:
      A VPATH build of fontconfig-2.4.1 fails for various reasons. Bug 8933.
      Use <literal> instead of <sgmltag> when documenting fonts.conf. Bug 8935.
      Fix fc-cat documentation (bug 8935).


2.4.1

Keith Packard:
      Update installation notes for 2.4 base.
      Add ppc64 signature. Bug 8227
      Add signatures for m68k and mipsel (thanks debian buildd)
      Add warning flags to fc-cache build. Clean up warnings in fc-cache.
      Reimplement FcConfigAppFontAddDir; function was lost in 2.4.0.

2.4.0

David Turner:
      Replace character discovery loop with simpler, faster version.

James Cloos:
      Move files from conf.d to conf.avail
      Standardize conf.avail number prefixing convention
      Support all five possibilities for sub-pixel
      Move user and local conf file loading into conf.avail files
      Number the remaining conf.avail files
      Update Makefile.am to match conf.avail changes
      Replace load of conf.d in fonts.conf.in
      Make room for chunks from fonts.conf in conf.avail
      Re-order old conf.d files
      Move some section from fonts.conf into conf.avail files
      Update Makefile.am files
      Make conf.avail and conf.d work

Keith Packard:
      Create fc_cachedir at install time. Bug 8157.
      Reference patterns in FcCacheCopySet.
      Replace gnu-specific sed command with simple grep.
      Attempt to fix makealias usage for build on Mac OS X.
      Accept locale environment variables that do not contain territory.
      Merge branch 'jhcloos'
      Insert newly created caches into reference data structure.
      Add XML headers to new conf files. Move link make commands to conf.avail dir
      Rename conf.avail to conf.d
      Fix conf.d directory sorting.
      Include cachedir in fonts.dtd.
      Don't display tests for DESTDIR on make install.
      Split much of the configuration into separate files. Renumber files

2.3.97

Carl Worth:
      Rename FcPatternThawAll to FcPatternFini.
      Add a configuration file that disables hinting for the Lohit Gujarati font

Keith Packard:
      Various GCC 4 cleanups for signed vs unsigned char
      Finish INSTALL changes. .gitignore ChangeLog
      Merge branch 'fc-2_4_branch' to master
      Remove all .cvsignore files
      Hide private functions in shared library. Export functionality for utilities.
      Hide FreeType glue code from library ABI.
      Can't typecheck values for objects with no known type.
      Leave cache files mapped permanently.
      Reference count cache objects.
      Make cache reference counting more efficient.
      Oops, fc-lang broke when I added cache referencing.
      Correct reference count when sharing cache file objects.
      Eliminate .so PLT entries for local symbols. (thanks to Arjan van de Ven)
      Update architecture signatures for x86-64 and ppc.
      Parallel build fix for fcalias.h and fcaliastail.h
      Charset hashing depended on uniqueness of leaves.

Patrick Lam:
      file Makefile.am was initially added on branch fc-2_4_branch.
      Modify config file to use Greek fonts before Asian fonts with Greek glyphs.
      Use libtool -no-undefined flag on all platforms.
      file ftglue.c was initially added on branch fc-2_4_branch.
      2005-11-23 Frederic Crozat <fcrozat@mandriva.com>: reviewed by: plam
      file 10-fonts-persian.conf was initially added on branch fc-2_4_branch.
      Sort directory entries while scanning them from disk; prevents Heisenbugs
      file ln.orth was initially added on branch fc-2_4_branch.
      Fix typos in orth files. Reported by Denis Jacquerye.
      On Windows, unlink before rename. Reported by Tim Evans.
      file fc-match.sgml was initially added on branch fc-2_4_branch.

2.3.96

Keith Packard:
      Make path names in cache files absolute (NB, cache format change) Stop
      Eliminate pattern freezing
      Add .gitignore
      Construct short architecture name from architecture signature.
      Write caches to first directory with permission. Valid cache in FcDirCacheOpen.
      Eliminate NormalizeDir. Eliminate gratuitous stat/access calls per dir.
      Add architecture to cache filename.
      Eliminate global cache. Eliminate multi-arch cache code.
      Fix up fc-cache and fc-cat for no global cache changes.
      Eliminate ./ and ../ elements from font directory names when scanning.
      Regenerate x86 line in fcarch.tmpl.h to match change in cache data.
      Add x86-64 architecture and signature.
      During test run, remove cache directory to avoid stale cache usage.
      Add ppc architecture
      Revert to original FcFontSetMatch algorithm to avoid losing fonts.
      Rework cache files to use offsets for all data structures.
      Fix build problems caused by cache rework.
      FcCharSetSerialize was using wrong offset for leaves. Make fc-cat work.
      Rework Object name database to unify typechecking and object lookup.
      Skip broken caches. Cache files are auto-written, don't rewrite in fc-cache.
      Fix fc-cat again. Sigh.
      Use intptr_t instead of off_t inside FcCache structure.
      Serialized value lists were only including one value.
      Automatically remove invalid cache files.
      With no args, fc-cat now dumps all directories.
      Revert ABI changes from version 2.3
      Change $(pkgcachedir) to $(fc_cachedir) in fc-cat and fc-cache Makefile.am
      Allow FcTypeLangSet to match either FcTypeLangSet or FcTypeString.
      Remove stale architecture signatures.
      Pass directory information around in FcCache structure. Freeze charsets.
      Fix fc-lang to use new charset freezer API.
      Fontset pattern references are relative to fontset, not array.
      Add some ignores
      Only rebuild caches for system fonts at make install time.
      Fix memory leaks in fc-cache directory cleaning code.
      Add @EXPAT_LIBS@ to Libs.private in fontconfig.pc (bug 7683)
      Avoid #warning directives on non-GCC compilers. (bug 7683)
      Chinese/Macau needs the Hong Kong orthography instead of Taiwan (bug 7884)
      Add Assamese orthography (as.orth). Bug #8050
      Really only rebuild caches for system fonts at make install time.
      Fonts matching lang not territory should satisfy sort pattern lang.
      Prefer Bitstream Vera to DejaVu families.
      Guess that mac roman names with lots of high bits are actually SJIS.
      Document FC_DEBUG values (bug 6393). Document name \ escape syntax.
      Move Free family names to bottom of respective aliases. (bug 7429)
      Unify directory canonicalization into FcStrAddFilename.
      Allow font caches to contain newer version numbers
      Add FcMatchScan to resolve Delicious font matching issues (bug #6769)
      Fix missing initialization/destruction of new 'scan' target subst list.
      Don't segfault when string values can't be parsed as charsets or langsets.
      Using uninitialized (and wrong) variable in FcStrCopyFilename.
      Oops; missed the 60-delicious.conf file.

Patrick Lam:
      Keith Packard <keithp@keithp.com>
      2006-04-27 Paolo Borelli (pborelli@katamail.com) reviewed by: plam
      2006-05-31 Yong Li (rigel863@gmail.com) reviewed by: plam, Bedhad Esfahbod
      2006-07-19 Jon Burgess (jburgess@uklinux.net) reviewed by: plam
      2006-08-04 Keith Packard (keithp@keithp.com) reviewed by: plam

2.3.95

Match 'Standard Symbols L' for 'Symbol'.  Add URW fonts as aliases for
all of the PostScript fonts.  (reported by Miguel Rodriguez).  Fix a
number of Coverity defects (Frederic Crozat).  Speed up FcFontSort
(fix suggested by Kenichi Handa).  Fix error with charsets.  Survive
missing docbook2pdf.  Compile on HP-UX, AIX, SGI and Windows (Cygwin,
MinGW).  Fix intel compiler warnings.  Fix multiarch support (don't
destroy multiarch files!)  Require pkg-config.  (Thanks Behdad; better
solution wanted for libxml2 detection!)  Fix typos in orth files and
add orth for Lingala (reported by Denis Jacquerye).  Remove debian/
directory.  Add a configuration file that disables hinting for the
Lohit Gujarati font (since the hinting distorts some glyphs quite
badly).  Sort directory entries while scanning them from disk;
prevents Heisenbugs due to file ordering in a directory (due to Egmont
Koblinger).  Fix Wine's problem with finding fonts.  (Reported by
Bernhard Rosenkraenzer.)  Fix the issues with GNU libiconv vs. libc
iconv (which especially appear on Solarii); patch by Behdad Esfahbod,
approach suggested by Tim Mooney.

2.3.94

fc-cat can take directories as input and creates old-style fonts.cache
listings.
fc-cache takes -r --really-force which blows away all old caches and
regenerates.
Robustness fixes, integer overflow fixes (notably to cache handling
code), toast broken global cache files.
Change binary format to make it compatible with static langset
information (thanks to Takashi Iwai).
Open hashed caches before fonts.cache-2 (Takashi Iwai).
Fix FcFontSetMatch's algorithm, which used to unjustly kill fonts for
not declaring certain elements (Takashi Iwai).
Fix matching bug when multiple elements match; don't use
the sum of all scores, but the best score (James Su).
Make fc-lang more friendly to Windows systems.
Remove archaic chars from Georgian charset; add Euro character to
charsets for European languages.
Fix treatment of broken PCF fonts that don't declare family names.
Pass O_BINARY to open if appropriate (reported by Doodle).
Normalize font directories to the form in which they appear in 
config files.  
Add a record of the cached directory to the cache file.
Perf optimizations (Dirk Mueller; some reported by Michael Meeks.)
Don't loop infinitely on recursive symlinks.
Make 'make distcheck' work with automake 1.6.3.
Replace 'stamp' target with mkinstalldirs.
Don't stop scanning if a directory in fonts.conf doesn't exist,
because subsequent directories might exist.
Put directory names into global cache (reported by Ronny V. Vindenes).
Treat zh-hk fonts differently from zh-tw fonts.  This patch may cause
fontconfig to treat A-X fonts differently from A-Y fonts; please mail
the fontconfig list if this causes any problems.
Fix for unaligned memory accesses (Andreas Schwab).
Fix treatment of cache directory as read from cache file; don't use
string equality to determine if we have the right file, use inode
equality.
Properly skip past dir caches that contain zero fonts, as occurs
in global caches (reported by Mike Fabian).
Print out full pathname in fc-match -v (reported by Frederic Crozat).
Fix bug where fc-match crashes when given __DUMMY__ property to
match on.

2.3.93

Create cache files in /var/cache/fontconfig with hashed filenames, if
possible, for added FHS compliance.  
Make fc-cat read both per-directory and global cache files.  
Add config file for Persian fonts from Sharif FarsiWeb, Inc.  
Major performance improvements by Dirk Mueller, Stephen Kulow, and Michael Matz at SuSE: in particular, speed up FcFontSetMatch, and inline many functions.
Fix treatment of globs in config files, broken since 2.3.2 and discovered by Mathias Clasen.
Don't use freetype internal headers (patch by Matthias Clasen).  
Further space improvements: create langsets statically, so that they can live in .rodata.
Properly align mmapped data structures to make e.g. ia64 happy.  
Bug fixes.

2.3.92

Fix corrupted caches bugs from 2.3.91 (reported by Mike Fabian).
Store only basename in the cache, reconstitute on demand 
(reported by James Cloos).
Change the rule for artificial emboldening in fonts.conf.in.  This
enables the support for artificial emboldening included in cairo
(patch by Zhe Su).
Add FC_EMBEDDED_BITMAP object type to tell Xft/Cairo whether
to load embedded bitmaps or not (patch by Jinghua Luo).
Fix GCC4 warnings (some by Behdad Esfahbod).
Support localized font family and style names; this has been reported
to break old apps like xfd, but modern (gtk+/qt/mozilla) apps work
fine (patch by Zhe Su).
Prevent fc-list from escaping strings when printing them (reported by
Matthias Clasen).
Add valist sentinel markup for FcObjectSetBuild and 
FcPatternBuild (patch by Marcus Meissner).
Add consts to variables so as to move arrays into .rodata (patch by
Ross Burton).
Modify config file to use Greek fonts before Asian fonts with
Greek glyphs. (patch by Simos Xenitellis).
Use libtool -no-undefined flag on all platforms (patch by Christian
Biesinger).

2.3.91

Use libxml2 if requested or if expat not available. (Mathias Hasselmann)
Fix multi-arch cache files: compute the position for the
block to be added using info from OrigFile, not NewFile. (plam)
Cast results of sizeof() to unsigned int to get rid of
warnings on x86_64 (reported by Matthias Clasen).
Use FcAtomic to rewrite cache files; don't unlink the fonts.cache-2
file even if there's no data to write; just write an empty cache file.
(Reported by Lubos Lunak)
Allocate room for the subdirectory names in each directory cache. 
(Reported by James Cloos)

2.3.90

Development release of mmap patch: load pattern information
directly from cache files.  (Patrick Lam)

2.3.2

Patch memory leaks in using iconv.  (Reported by Chris Capoccia)
Patch memory leaks in fc-cache. (Reported by Chris Capoccia)
Fetch bitmap glyphs to get widths during font evaluation. (keithp)
Share strings through FcObjectStaticName (Ross Burton)
Windows build updates (Tor Lillqvist)

2.3.1

Be more careful about broken GSUB/GPOS tables (Manish Singh)
Include debian packaging stuff in CVS (Josselin Mouette)
Add more conf.d examples (Keith Packard)
Make manuals build again (Keith Packard)
Johap -> Johab (Funda Wang)

2.3.0

Fix memory leak of patterns rejected by configuration (#2518)

Create prototype /etc/fonts/conf.d directory and populate it with a few
sample files.  These samples are unused as the file names don't start with
numbers.

Update documentation.

2.2.99

Verify cache for FC_FILE and FC_FAMILY in every entry (#2219)

Update blanks list from recent Unicode docs (#86)

Various small build fixes (#280, #2278, 

Documentation fixes (#2085, #2284, #2285)

Add polite typechecking to config file loader (#229)

2.2.98

Share object name strings (Michael Meeks)

Eliminate a couple of codepoints from Russian orthography (John Thacker)

Add synthetic emboldening configuration changes (Jakub Pavelek)

Change FcFontSetSort to ignore language after fonts with the requested
languages have been found. (Owen Taylor)

Add some RedHat font configuration changes (Owen Tayler).

Add full Unicode case folding support to case-ignoring string functions
(Keith Packard)

Remove Han characters from Korean orthography (Tor Andersson)

2.2.97

Fc-cache sleeps before exiting to ensure filesystem timestamps are well
ordered.

Added Punjai orthography.

The timestamp in fonts.conf is gone now.  Too many problems.

The default font path includes all of the X fonts; use selectfont/rejectfont
to eliminate bitmaps, as shown in the sample local.conf file.

<include> configuration elements may now reference a directory.  Files
in that directory matching [0-9]* are loaded in UTF-8 collating sequence order.

<selectfont> configuration added to control which fonts are used.

fontformat font pattern elements built from the FT_Get_X11_Font_Format
function in newer versions of FreeType.

'capability' list constructed from gsub/gpos and silf values in TrueType
files.

Multi-lingual names (style, family, fullname) extracted and stored with
parallel <foo>lang properties marking language.

2.2.96

Fix FcConfigUpToDate to actually check all font directories and eliminate
a typo which completely prevented it from working (Lubos Lunak
<l.lunak@suse.cz>)

Remove comma at end of FcResult enum definition for picky compilers.

2.2.95

Add FcResultOutOfMemory so FcFontSetMatch can return accurate error.

Replace MIN/MAX/ABS macros which happened to be in old FreeType releases
with FC_MIN/FC_MAX/FC_ABS macros owned by fontconfig.

2.2.94

The 2.2.93 release was prepared with a broken libtool which created
the shared library without the '.so' in the file names.

2.2.93

This is the third prerelease of fontconfig 2.3.  Significant changes from
2.2.92 are:

 o	Use new FreeType #include syntax
 o	use y_ppem field instead of 'height' in bitmap sizes rec -
 	FreeType changed the semantics.  Still uses height for
	older versions of FreeType
 o	Don't construct program manuals unless docbook is available

2.2.92

 o	make distcheck work

2.2.91

 o	Switch to SGML manuals
 o	Add FC_DUAL width spacing value
 o	Add FcFini to close out fontconfig and release all memory
 
2.2

This is the third public release of fontconfig, a font configuration and
customization library.  Fontconfig is designed to locate fonts within the
system and select them according to requirements specified by applications.

Fontconfig is not a rasterization library, nor does it impose a particular
rasterization library on the application.  The X-specific library
'Xft' uses fontconfig along with freetype to specify and rasterize fonts.

Keith Packard
keithp@keithp.com
