Commit Graph

2071 Commits

Author SHA1 Message Date
Behdad Esfahbod 32c1d32cbd Work around Sun CPP
According to Raimund Steger:

> [...]
> diff --git a/src/Makefile.am b/src/Makefile.am
> index dc082b7..57c34a2 100644
> [...]
> +fcobjshash.gperf: fcobjshash.gperf.h fcobjs.h
> +    $(AM_V_GEN) $(CPP) -I$(top_srcdir) $< | $(GREP) '^[^#]' | awk ' \
> +    /CUT_OUT_BEGIN/ { no_write=1; next; }; \
> +    /CUT_OUT_END/ { no_write=0; next; }; \
> +    { if (!no_write) print; next; }; \
> +    ' - > $@.tmp && \
> +    mv -f $@.tmp $@

Sun Studio CPP seems to insert whitespace in a different way than GCC's CPP.

GCC generates in src/fcobjshash.gperf:

[...]
"family", FC_FAMILY_OBJECT
"familylang", FC_FAMILYLANG_OBJECT
[...]

Sun Studio generates:

[...]
 "family" , FC_FAMILY_OBJECT
 "familylang" , FC_FAMILYLANG_OBJECT
[...]

leading to:

[...]
Making all in src
gmake[2]: Entering directory `/home/rs/src/fontconfig-git/fontconfig/src'
  GEN    fcobjshash.gperf
  GEN    fcobjshash.h
Key link: " " = " ", with key set "".
1 input keys have identical hash values,
use option -D.
gmake[2]: *** [fcobjshash.h] Error 1
gmake[2]: Leaving directory `/home/rs/src/fontconfig-git/fontconfig/src'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/home/rs/src/fontconfig-git/fontconfig'
gmake: *** [all] Error 2

...maybe we could tuck in an additional sed to remove the whitespace, like:

[...]
fcobjshash.gperf: fcobjshash.gperf.h fcobjs.h
    $(AM_V_GEN) $(CPP) -I$(top_srcdir) $< | \
    $(SED) 's/^\s*//;s/\s*,\s*/,/;' | \
    $(GREP) '^[^#]' | \
    $(AWK) '/CUT_OUT_BEGIN/,/CUT_OUT_END/ { next; }; { print; };' \
    > $@.tmp && \
    mv -f $@.tmp $@
[...]

though I'm not sure what kind of guarantee CPP can give us/what easier option I might have missed...
2013-01-02 19:04:17 -06:00
Behdad Esfahbod b1510145e7 Fix build around true/false 2013-01-02 18:57:47 -06:00
Behdad Esfahbod 538f1579e8 Trying to fix distcheck
Doesn't work though :(.  Building docs is very fragile...

At least, if docbook is present, distcheck passes now.
2013-01-02 18:23:55 -06:00
Behdad Esfahbod 46ab96b8fa Fix more warnings.
Linux build and mingw32 cross build warning-free now.
2013-01-02 18:00:09 -06:00
Behdad Esfahbod 558b3c65f9 Use CC_FOR_BUILD to generate source files
Previously we were failing if CROSS_COMPILING and the generated headers
were not present.  It works just fine now.

One caveat: the fix is not fully correct since config.h is being
included in the files built with CC_FOR_BUILD, but config.h has config
for the host system, not the build system.  Should be fine though.
2013-01-02 17:49:41 -06:00
Behdad Esfahbod ec8a40d238 Fix build and warnings on win32 2013-01-02 17:35:56 -06:00
Behdad Esfahbod 5c0a4f2726 Minor 2013-01-02 02:27:57 -06:00
Behdad Esfahbod 766bed901f Fix compiler warnings 2013-01-02 02:19:04 -06:00
Behdad Esfahbod 93fb1d4bab Remove FcSharedStr* 2013-01-02 02:18:02 -06:00
Behdad Esfahbod 6b14378107 Fixup fcobjs.c
Ouch!
2013-01-02 01:54:38 -06:00
Behdad Esfahbod 6047ce7b9f Warn about undefined/invalid attributes during config parsing 2013-01-02 01:31:34 -06:00
Behdad Esfahbod b604f10c0c Make fcobjs.c thread-safe
With this, the library should be threadsafe as far as my analysis goes!
2013-01-02 01:09:43 -06:00
Behdad Esfahbod 2ae07bbcd2 Make FcDirCacheDispose() threadsafe 2013-01-02 01:04:58 -06:00
Behdad Esfahbod 68b8ae9af8 Make cache hash threadsafe
This concludes my first pass at making fontconfig threadsafe.  Now to
testing and actually fixing it!
2013-01-02 01:04:47 -06:00
Behdad Esfahbod adb03b730d Make random-state initialization threadsafe 2013-01-02 01:04:03 -06:00
Behdad Esfahbod 91dd7d28ff Add a big cache lock
Not used yet.
2013-01-02 01:03:49 -06:00
Behdad Esfahbod 8d2bbb193a Make cache refcounting threadsafe 2013-01-02 01:03:22 -06:00
Behdad Esfahbod 31ee38e541 Minor 2013-01-02 01:03:18 -06:00
Behdad Esfahbod b8f238e49d Make FcCacheIsMmapSafe() threadsafe 2013-01-02 01:03:06 -06:00
Behdad Esfahbod b27a22aae9 Minor 2013-01-02 01:01:52 -06:00
Behdad Esfahbod 0552f26016 Make default-FcConfig threadsafe 2013-01-02 01:01:29 -06:00
Behdad Esfahbod e53f5da54f Minor 2013-01-02 00:58:52 -06:00
Behdad Esfahbod 7ae24b4554 Refactor; contain default config in fccfg.c 2013-01-02 00:58:31 -06:00
Behdad Esfahbod 32b0d88923 Make FcDefaultFini() threadsafe 2013-01-02 00:57:26 -06:00
Behdad Esfahbod 7019896c99 Make FcInitDebug() idempotent 2013-01-02 00:53:16 -06:00
Behdad Esfahbod b97ab0c949 Make FcGetDefaultLang and FcGetDefaultLangs thread-safe 2013-01-02 00:52:14 -06:00
Behdad Esfahbod 64af9e1917 Make refcounts, patterns, charsets, strings, and FcLang thread-safe 2013-01-02 00:51:00 -06:00
Behdad Esfahbod 814871b2aa Add thread-safety primitives 2013-01-02 00:38:36 -06:00
Behdad Esfahbod f6d8306e56 Add build stuff for threadsafety primitives
Copied over from HarfBuzz.
2013-01-02 00:38:30 -06:00
Behdad Esfahbod b53744383d Fix build stuff 2013-01-02 00:38:18 -06:00
Behdad Esfahbod db6d86a6c1 Remove shared-str pool
We used to have a shared-str pool.  Removed to make thread-safety
work easier.  My measurements show that the extra overhead is not
significant by any means.
2013-01-02 00:37:00 -06:00
Behdad Esfahbod ed41b23765 Switch .gitignore to git.mk 2013-01-02 00:36:12 -06:00
Behdad Esfahbod d58c31e6dc Use a static perfect hash table for object-name lookup
The hash table is generated by gperf.  For runtime element types, we use
a append-only linked list.

A bit clumsy, but I think I got it right.
2013-01-02 00:35:39 -06:00
Behdad Esfahbod 7c0f79c5fe Deprecate FcName(Un)RegisterObjectTypes / FcName(Un)RegisterConstants
These never worked as intended.  The problem is, if Fontconfig tries to
read config files when these new types / constants are not registered,
it errs.  As a result, no defined types / constants are usable from
config files.  Which makes these really useless.  Xft was the only user
of this API and even there it's not really used.  Just kill it.

One inch closer to thread-safety since we can fix the object-type hash
table at compile time.
2013-01-01 22:55:08 -06:00
Behdad Esfahbod 1e2c0d7052 Whitespace 2013-01-01 20:28:08 -06:00
Behdad Esfahbod a498f2f717 Minor 2013-01-01 20:27:54 -06:00
Behdad Esfahbod 8198127b25 Don't crash in FcPatternFormat() with NULL pattern 2013-01-01 20:20:31 -06:00
Behdad Esfahbod c9581b47c4 Don't crash in FcPatternDestroy with NULL pattern 2013-01-01 20:20:12 -06:00
Behdad Esfahbod e7d3e21632 Add NULL check 2013-01-01 20:19:57 -06:00
Behdad Esfahbod 5bb5da4c4a Refuse to set value to unsupported types during config too 2013-01-01 20:19:57 -06:00
Behdad Esfahbod 3878a12541 Make FC_DBG_OBJTYPES debug messages into warnings
And remove FC_DBG_OBJTYPES since it has no use now.
2013-01-01 20:19:53 -06:00
Behdad Esfahbod 209750a4e0 Warn if <name target="font"> appears in <match target="pattern"> 2012-12-31 20:11:12 -06:00
Behdad Esfahbod 424cfa1684 Adjust docs for recent changes 2012-12-31 20:00:17 -06:00
Behdad Esfahbod 31ce352bb3 Initialize matrix during name parsing
Before:
$ fc-match sans:matrix=2 -v | grep matrix
	matrix: [2 6.95183e-310; 0 0](s)

After:
$ fc-match sans:matrix=2 -v | grep matrix
	matrix: [2 0; 0 1](s)
2012-12-31 19:56:06 -06:00
Behdad Esfahbod 6bfef3ca4e Make tests run on Windows 2012-12-31 17:21:07 -06:00
Behdad Esfahbod b1630dc00e Enable fcarch assert checks even when FC_ARCHITECTURE is explicitly given
After all, if the asserts fail, the resulting library simply can't be
working correctly.
2012-12-31 17:20:29 -06:00
Behdad Esfahbod a0638ff0c7 Remove unneeded stuff 2012-12-31 17:20:12 -06:00
Behdad Esfahbod a603be89cd Unbreak build when FC_ARCHITECTURE is defined 2012-12-31 17:00:19 -06:00
Behdad Esfahbod 1fbb0b3b15 Don't warn if an unknown element is used in an expression
The type will be resolved at runtime...

For example, we can do this now without getting a warning:

<match target="font">
  <test name="scalable" compare="eq">
    <bool>false</bool>
  </test>
  <edit name="pixelsizefixupfactor" mode="assign">
    <divide>
      <name target="pattern">pixelsize</name>
      <name target="font"   >pixelsize</name>
    </divide>
  </edit>
  <edit name="matrix" mode="assign">
    <times>
      <name>matrix</name>
      <matrix>
        <name>pixelsizefixupfactor</name> <double>0</double>
        <double>0</double> <name>pixelsizefixupfactor</name>
       </matrix>
    </times>
  </edit>
  <edit name="size" mode="assign">
    <divide>
      <name>size</name>
      <name>pixelsizefixupfactor</name>
    </divide>
  </edit>
</match>

Previously the last edit was generating:

Fontconfig warning: "/home/behdad/.local/etc/fonts/conf.d/00-scale-bitmap-fonts.conf", line 29: saw unknown, expected number
2012-12-30 19:08:42 -06:00
Behdad Esfahbod 51b0044648 Allow target="font/pattern/default" in <name> elements
Based on idea from Raimund Steger.

For example, one can do something like this:

<match target="font">
  <test name="scalable" compare="eq">
    <bool>false</bool>
  </test>
  <edit name="pixelsizefixupfactor" mode="assign">
    <divide>
      <name target="pattern">pixelsize</name>
      <name target="font"   >pixelsize</name>
    </divide>
  </edit>
  <edit name="matrix" mode="assign">
    <times>
      <name>matrix</name>
      <matrix>
        <name>pixelsizefixupfactor</name> <double>0</double>
        <double>0</double> <name>pixelsizefixupfactor</name>
       </matrix>
    </times>
  </edit>
</match>

Part of work to make bitmap font scaling possible.  See thread
discussion:

http://lists.freedesktop.org/archives/fontconfig/2012-December/004498.html
2012-12-30 19:01:23 -06:00