From 3c2fa91c7521bb09aed089798448b5995e0882fa Mon Sep 17 00:00:00 2001 From: Pierre Muller Date: Wed, 18 Oct 2023 21:09:06 +0000 Subject: [PATCH] Extend support to all BSD systems for libfontconfig and fcl-pdf packages --- packages/fcl-pdf/fpmake.pp | 2 +- packages/fcl-pdf/src/fpttf.pp | 32 ++++++++++++++++++++++++-------- packages/libfontconfig/fpmake.pp | 2 +- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/packages/fcl-pdf/fpmake.pp b/packages/fcl-pdf/fpmake.pp index 1da2f95824..f0e90bde0c 100644 --- a/packages/fcl-pdf/fpmake.pp +++ b/packages/fcl-pdf/fpmake.pp @@ -34,7 +34,7 @@ begin P.Dependencies.Add('fcl-xml'); P.Dependencies.Add('paszlib'); P.Dependencies.add('winunits-base',AllWindowsOSes-[wince]); - P.Dependencies.add('libfontconfig',[linux,freebsd,darwin]); + P.Dependencies.add('libfontconfig',[linux] + AllBSDOses); P.Version:='3.3.1'; T:=P.Targets.AddUnit('src/fpttfencodings.pp'); T:=P.Targets.AddUnit('src/fpparsettf.pp'); diff --git a/packages/fcl-pdf/src/fpttf.pp b/packages/fcl-pdf/src/fpttf.pp index 9d6fbb4232..a19bfcb34f 100644 --- a/packages/fcl-pdf/src/fpttf.pp +++ b/packages/fcl-pdf/src/fpttf.pp @@ -587,28 +587,44 @@ end; procedure TFPFontCacheList.ReadStandardFonts; - {$ifdef linux} - {$define HasFontsConf} - const - cFontsConf = '/etc/fonts/fonts.conf'; - {$endif} - {$ifdef freebsd} {$define HasFontsConf} const cFontsConf = '/usr/local/etc/fonts/fonts.conf'; {$endif} + { Use same default for Linux and other BSD non-Darwin systems. } + {$if (defined(linux) or (defined(bsd) and not(defined(darwin)) and not defined(HasFontsConf)))} + {$define HasFontsConf} + const + cFontsConf = '/etc/fonts/fonts.conf'; + {$ifend} + {$ifdef HasFontsConf} var doc: TXMLDocument; lChild: TDOMNode; + FN : PFcChar8; lDir: string; + config: PfcConfig; +const + is_fc_loaded:integer=0; {$endif} begin - {$ifdef HasFontsConf} // Linux & FreeBSD - ReadXMLFile(doc, cFontsConf); + {$ifdef HasFontsConf} // Linux & BSD + if (is_fc_loaded=0) then + is_fc_loaded:=loadfontconfiglib(''); + + config := FcInitLoadConfigAndFonts(); + + if assigned(FcConfigGetFilename) then + FN:=FcConfigGetFilename(config,Nil) + else if assigned(FcConfigFilename) then + FN:=FcConfigFilename(Nil) + else + FN:=cFontsConf; + ReadXMLFile(doc, FN); try lChild := doc.DocumentElement.FirstChild; while Assigned(lChild) do diff --git a/packages/libfontconfig/fpmake.pp b/packages/libfontconfig/fpmake.pp index 7a136f977b..ff890b1dda 100644 --- a/packages/libfontconfig/fpmake.pp +++ b/packages/libfontconfig/fpmake.pp @@ -20,7 +20,7 @@ begin P.Version:='3.3.1'; P.SourcePath.Add('src'); P.IncludePath.Add('src'); - P.OSes := [linux,freebsd, darwin]; // Darwin was tested! + P.OSes := [linux] + AllBSDOses; // Darwin was tested! T:=P.Targets.AddUnit('libfontconfig.pp'); P.ExamplePath.Add('examples'); P.Targets.AddExampleProgram('testfc.pp');