forked from minhngoc25a/freetype2
Compare commits
2 Commits
master
...
GSoC-2020-
Author | SHA1 | Date |
---|---|---|
Greg Williamson | 8d73e559bb | |
Greg Williamson | 3f82a109c0 |
|
@ -1,7 +1,3 @@
|
||||||
/build/
|
config.mk
|
||||||
/config.mk
|
objs/vc2010/
|
||||||
include/dlg/
|
build
|
||||||
src/dlg/dlg.c
|
|
||||||
subprojects/*
|
|
||||||
!subprojects/*.wrap
|
|
||||||
/tests/data/*
|
|
||||||
|
|
230
.gitlab-ci.yml
230
.gitlab-ci.yml
|
@ -1,230 +0,0 @@
|
||||||
# CI setup for FreeType.
|
|
||||||
|
|
||||||
stages:
|
|
||||||
- build
|
|
||||||
|
|
||||||
# FIXME: Use --werror once warnings are fixed.
|
|
||||||
variables:
|
|
||||||
MESON_ARGS: --fatal-meson-warnings --default-library=both
|
|
||||||
MESON_ARGS_WINDOWS: ${MESON_ARGS} --force-fallback-for=zlib
|
|
||||||
|
|
||||||
.build windows common:
|
|
||||||
# See
|
|
||||||
# https://gitlab.freedesktop.org/gstreamer/gst-ci/container_registry/213
|
|
||||||
image: 'registry.freedesktop.org/gstreamer/gst-ci/amd64/windows:2021-09-09.0-master'
|
|
||||||
stage: 'build'
|
|
||||||
tags:
|
|
||||||
- 'docker'
|
|
||||||
- 'windows'
|
|
||||||
- '1809'
|
|
||||||
- 'gstreamer-windows'
|
|
||||||
|
|
||||||
.build linux common:
|
|
||||||
# See
|
|
||||||
# https://gitlab.freedesktop.org/freetype/docker-images/container_registry/20896
|
|
||||||
image: 'registry.freedesktop.org/freetype/docker-images/debian:latest'
|
|
||||||
stage: 'build'
|
|
||||||
|
|
||||||
.build macos common:
|
|
||||||
stage: 'build'
|
|
||||||
tags:
|
|
||||||
- 'gst-macos-11.1'
|
|
||||||
|
|
||||||
.build windows meson:
|
|
||||||
extends: '.build windows common'
|
|
||||||
variables:
|
|
||||||
# Make sure any failure in PowerShell scripts is fatal.
|
|
||||||
ErrorActionPreference: 'Stop'
|
|
||||||
WarningPreference: 'Stop'
|
|
||||||
# Uncomment the following key if you need to pass custom args, as well
|
|
||||||
# with the `$env:MESON_ARGS` line in the `script:` blocks.
|
|
||||||
# MESON_ARGS: >-
|
|
||||||
# -Dfoo=enabled
|
|
||||||
# -Dbar=disabled
|
|
||||||
before_script:
|
|
||||||
# Update RootCAs in order to access to some sites.
|
|
||||||
- certutil -generateSSTFromWU "C:\roots.sst"
|
|
||||||
- Import-Certificate -CertStoreLocation "Cert:\LocalMachine\Root" "C:\roots.sst"
|
|
||||||
# Make sure meson is up to date so we don't need to rebuild the image
|
|
||||||
# with each release.
|
|
||||||
- pip3 install -U 'meson==0.59.*'
|
|
||||||
- pip3 install --upgrade certifi
|
|
||||||
- pip3 install -U ninja
|
|
||||||
|
|
||||||
# Generate a UWP cross-file in case it's used
|
|
||||||
- $PSDefaultParameterValues['Out-File:Encoding'] = 'ASCII'
|
|
||||||
- echo "[binaries]" > uwp-crossfile.meson
|
|
||||||
- echo "c = 'cl'" >> uwp-crossfile.meson
|
|
||||||
- echo "strip = ['true']" >> uwp-crossfile.meson
|
|
||||||
- echo "[built-in options]" >> uwp-crossfile.meson
|
|
||||||
- echo "c_args = ['-DWINAPI_FAMILY=WINAPI_FAMILY_APP', '-DUNICODE', '-D_WIN32_WINNT=0x0A00', '-we4013']" >> uwp-crossfile.meson
|
|
||||||
- echo "c_winlibs = ['windowsapp.lib']" >> uwp-crossfile.meson
|
|
||||||
script:
|
|
||||||
# For some reason, options are separated by newlines instead of spaces,
|
|
||||||
# so we have to replace them first.
|
|
||||||
#
|
|
||||||
# - $env:MESON_ARGS = $env:MESON_ARGS.replace("`n"," ")
|
|
||||||
#
|
|
||||||
# Gitlab executes PowerShell in docker, but `VsDevCmd.bat` is a batch
|
|
||||||
# script. Environment variables substitutions is done by PowerShell
|
|
||||||
# before calling `cmd.exe`, that's why we use `$env:FOO` instead of
|
|
||||||
# `%FOO%`.
|
|
||||||
- cmd.exe /C "C:\BuildTools\Common7\Tools\VsDevCmd.bat -host_arch=amd64 -arch=$env:ARCH $env:VS_UWP &&
|
|
||||||
meson setup build $env:MESON_ARGS_WINDOWS $env:MESON_ARGS_UWP &&
|
|
||||||
meson compile --verbose -C build
|
|
||||||
$env:MESON_WINDOWS_TESTS"
|
|
||||||
|
|
||||||
|
|
||||||
# Format of job names:
|
|
||||||
# <OS> <Build-Tool> <Build-Params> <Architecture>
|
|
||||||
|
|
||||||
|
|
||||||
# Windows jobs.
|
|
||||||
|
|
||||||
windows meson vs2017 amd64:
|
|
||||||
extends: '.build windows meson'
|
|
||||||
variables:
|
|
||||||
ARCH: 'amd64'
|
|
||||||
MESON_WINDOWS_TESTS: '&& meson test -C build && meson test -C build --benchmark'
|
|
||||||
|
|
||||||
windows meson vs2017 x86:
|
|
||||||
extends: '.build windows meson'
|
|
||||||
variables:
|
|
||||||
ARCH: 'x86'
|
|
||||||
MESON_WINDOWS_TESTS: '&& meson test -C build && meson test -C build --benchmark'
|
|
||||||
|
|
||||||
windows meson vs2017 amd64 uwp:
|
|
||||||
extends: '.build windows meson'
|
|
||||||
variables:
|
|
||||||
ARCH: 'amd64'
|
|
||||||
VS_UWP: '-app_platform=UWP'
|
|
||||||
MESON_ARGS_UWP: '--cross-file uwp-crossfile.meson -Dc_winlibs="windowsapp.lib"'
|
|
||||||
|
|
||||||
# Linux Jobs.
|
|
||||||
#
|
|
||||||
# Jobs with "libs" in the name force-enable libraries.
|
|
||||||
# They are disabled for the remaining jobs.
|
|
||||||
|
|
||||||
linux autotools:
|
|
||||||
extends: '.build linux common'
|
|
||||||
script: |
|
|
||||||
./autogen.sh
|
|
||||||
./configure --with-brotli=no \
|
|
||||||
--with-bzip2=no \
|
|
||||||
--with-harfbuzz=no \
|
|
||||||
--with-png=no \
|
|
||||||
--with-zlib=no \
|
|
||||||
CC=gcc
|
|
||||||
|
|
||||||
make -j$(nproc) && make install
|
|
||||||
|
|
||||||
linux autotools libs:
|
|
||||||
extends: '.build linux common'
|
|
||||||
script: |
|
|
||||||
./autogen.sh
|
|
||||||
./configure --with-brotli=yes \
|
|
||||||
--with-bzip2=yes \
|
|
||||||
--with-harfbuzz=yes \
|
|
||||||
--with-png=yes \
|
|
||||||
--with-zlib=yes \
|
|
||||||
CC=gcc
|
|
||||||
|
|
||||||
make -j$(nproc) && make install
|
|
||||||
|
|
||||||
linux autotools libs clang:
|
|
||||||
extends: '.build linux common'
|
|
||||||
script: |
|
|
||||||
./autogen.sh
|
|
||||||
./configure --with-brotli=yes \
|
|
||||||
--with-bzip2=yes \
|
|
||||||
--with-harfbuzz=yes \
|
|
||||||
--with-png=yes \
|
|
||||||
--with-zlib=yes \
|
|
||||||
CC=clang
|
|
||||||
|
|
||||||
make -j$(nproc) && make install
|
|
||||||
|
|
||||||
linux meson:
|
|
||||||
extends: '.build linux common'
|
|
||||||
script: |
|
|
||||||
meson setup build ${MESON_ARGS} \
|
|
||||||
-Dbrotli=disabled \
|
|
||||||
-Dbzip2=disabled \
|
|
||||||
-Dharfbuzz=disabled \
|
|
||||||
-Dpng=disabled \
|
|
||||||
-Dzlib=disabled
|
|
||||||
|
|
||||||
meson compile --verbose -C build
|
|
||||||
meson install -C build
|
|
||||||
|
|
||||||
linux meson libs:
|
|
||||||
extends: '.build linux common'
|
|
||||||
script: |
|
|
||||||
meson setup build ${MESON_ARGS} \
|
|
||||||
-Dbrotli=enabled \
|
|
||||||
-Dbzip2=enabled \
|
|
||||||
-Dharfbuzz=disabled \
|
|
||||||
-Dpng=disabled \
|
|
||||||
-Dzlib=disabled
|
|
||||||
|
|
||||||
meson compile --verbose -C build
|
|
||||||
meson install -C build
|
|
||||||
|
|
||||||
linux cmake:
|
|
||||||
extends: '.build linux common'
|
|
||||||
script: |
|
|
||||||
cmake -B build -D FT_DISABLE_BROTLI=TRUE \
|
|
||||||
-D FT_DISABLE_BZIP2=TRUE \
|
|
||||||
-D FT_DISABLE_HARFBUZZ=TRUE \
|
|
||||||
-D FT_DISABLE_PNG=TRUE \
|
|
||||||
-D FT_DISABLE_ZLIB=TRUE
|
|
||||||
|
|
||||||
cmake --build build --target install
|
|
||||||
|
|
||||||
linux cmake libs:
|
|
||||||
extends: '.build linux common'
|
|
||||||
script: |
|
|
||||||
cmake -B build -D FT_REQUIRE_BROTLI=TRUE \
|
|
||||||
-D FT_REQUIRE_BZIP2=TRUE \
|
|
||||||
-D FT_REQUIRE_HARFBUZZ=TRUE \
|
|
||||||
-D FT_REQUIRE_PNG=TRUE \
|
|
||||||
-D FT_REQUIRE_ZLIB=TRUE
|
|
||||||
|
|
||||||
cmake --build build --target install
|
|
||||||
|
|
||||||
|
|
||||||
# MacOS jobs.
|
|
||||||
|
|
||||||
macos autotools:
|
|
||||||
extends: '.build macos common'
|
|
||||||
before_script:
|
|
||||||
- '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"'
|
|
||||||
script:
|
|
||||||
- brew install autoconf automake libtool
|
|
||||||
- ./autogen.sh
|
|
||||||
- ./configure
|
|
||||||
- 'make -j$(sysctl -n hw.logicalcpu)'
|
|
||||||
- make install
|
|
||||||
|
|
||||||
macos autotools clang:
|
|
||||||
extends: '.build macos common'
|
|
||||||
before_script:
|
|
||||||
- '/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"'
|
|
||||||
script:
|
|
||||||
- brew install autoconf automake libtool
|
|
||||||
- ./autogen.sh
|
|
||||||
- './configure CC=clang'
|
|
||||||
- 'make -j$(sysctl -n hw.logicalcpu)'
|
|
||||||
- make install
|
|
||||||
|
|
||||||
macos meson:
|
|
||||||
extends: '.build macos common'
|
|
||||||
script:
|
|
||||||
- pip3 install --upgrade pip
|
|
||||||
- pip3 install -U meson
|
|
||||||
- pip3 install --upgrade certifi
|
|
||||||
- pip3 install -U ninja
|
|
||||||
|
|
||||||
- meson setup build ${MESON_ARGS}
|
|
||||||
- meson compile --verbose -C build
|
|
||||||
- sudo meson install -C build
|
|
|
@ -1,3 +0,0 @@
|
||||||
[submodule "dlg"]
|
|
||||||
path = subprojects/dlg
|
|
||||||
url = https://github.com/nyorain/dlg.git
|
|
26
.mailmap
26
.mailmap
|
@ -1,24 +1,10 @@
|
||||||
Behdad Esfahbod (بهداد اسفهبد) <behdad@behdad.org> <behdad.esfahbod@gmail.com>
|
|
||||||
Behdad Esfahbod (بهداد اسفهبد) <behdad@behdad.org> <behdad@google.com>
|
|
||||||
Behdad Esfahbod (بهداد اسفهبد) <behdad@behdad.org>
|
|
||||||
Alexander Borsuk <me@alex.bio> <alexander.borsuk@qnective.com>
|
|
||||||
Ewald Hew (Hew Yih Shiuan 丘毅宣) <ewaldhew@gmail.com>
|
|
||||||
Moazin Khatti (موؤذن کھٹی) <moazinkhatri@gmail.com>
|
|
||||||
Priyesh Kumar (प्रियेश कुमार) <priyeshkkumar@gmail.com>
|
|
||||||
Alexei Podtelezhnikov (Алексей Подтележников) <apodtele@gmail.com>
|
Alexei Podtelezhnikov (Алексей Подтележников) <apodtele@gmail.com>
|
||||||
Nikhil Ramakrishnan (निखिल रामकृष्णन) <ramakrishnan.nikhil@gmail.com>
|
Behdad Esfahbod <behdad@behdad.org> <behdad.esfahbod@gmail.com>
|
||||||
Dominik Röttsches <drott@chromium.org> <drott@google.com>
|
|
||||||
Kostya Serebryany <kcc@google.com> <konstantin.s.serebryany@gmail.com>
|
|
||||||
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> <sssa@flavor1.ipc.hiroshima-u.ac.jp>
|
|
||||||
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> sssa <sssa@IPA2004-mps.local>
|
|
||||||
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> sssa <sssa@sssas-powerbook-g4-12.local>
|
|
||||||
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
|
||||||
Bram Tassyns <bramt@enfocus.be> bram tassyns <BramT@enfocus.be>
|
Bram Tassyns <bramt@enfocus.be> bram tassyns <BramT@enfocus.be>
|
||||||
Bram Tassyns <bramt@enfocus.be> <BramT@enfocus.com>
|
Bram Tassyns <bramt@enfocus.be> <BramT@enfocus.com>
|
||||||
David Turner <david@freetype.org> <david.turner.dev@gmail.com>
|
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> <sssa@flavor1.ipc.hiroshima-u.ac.jp>
|
||||||
David Turner <david@freetype.org> <digit@google.com>
|
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> sssa <sssa@IPA2004-mps.local>
|
||||||
Anuj Verma (अनुज वर्मा) <anujv@iitbhilai.ac.in>
|
Suzuki, Toshiya (鈴木俊哉) <mpsuzuki@hiroshima-u.ac.jp> suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
|
||||||
Ben Wagner <bungeman@gmail.com> Bungeman <bungeman@gmail.com>
|
Ben Wagner <bungeman@gmail.com> Bungeman <bungeman@gmail.com>
|
||||||
Ben Wagner <bungeman@gmail.com> <bungeman@google.com>
|
Ewald Hew (Hew Yih Shiuan 丘毅宣) <ewaldhew@gmail.com>
|
||||||
Ben Wagner <bungeman@gmail.com> <bungeman@chromium.org>
|
Nikhil Ramakrishnan (निखिल रामकृष्णन) <ramakrishnan.nikhil@gmail.com>
|
||||||
Nikolaus Waxweiler <madigens@gmail.com> <nikolaus.waxweiler@daltonmaag.com>
|
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
# Freetype2 CI
|
||||||
|
|
||||||
|
Continuous integration is a tool used in software development to ensure that
|
||||||
|
your application and/or library builds and runs correctly.
|
||||||
|
Continuous deployment takes this a step further and uses the builds from
|
||||||
|
the CI to create releases for developers and other users to download and
|
||||||
|
use. In this folder are several configuration files and scripts drafted by
|
||||||
|
Greg Williamson for a 2020 GSoC
|
||||||
|
project: https://summerofcode.withgoogle.com/projects/#5724074732421120
|
||||||
|
|
||||||
|
# How it works
|
||||||
|
|
||||||
|
Upon each commit, several builds are triggered for various operating systems
|
||||||
|
and build configurations. Each build status is then reported back to the
|
||||||
|
developers in the Pull Request comment section on GitLab or GitHub. Each
|
||||||
|
build creates artifacts containing the newly-built FreeType libraries for
|
||||||
|
developers and users to download. There are also special pipeline phases
|
||||||
|
called "Regression Tests" that run FreeType's built-in demo programs to
|
||||||
|
compare visual outputs between commits. An HTML report that contains a
|
||||||
|
table of the results is uploaded as an artifact for these tests. For text
|
||||||
|
output there is an HTML page displaying a .diff generated and for images a
|
||||||
|
special page is generated that shows both images, layered, so that you can
|
||||||
|
mouse over each to see differences. There is also a generated heatmap image
|
||||||
|
which will draw matching regions of the image in green, and any mismatching
|
||||||
|
regions in red.
|
||||||
|
|
||||||
|
# Running locally
|
||||||
|
|
||||||
|
All of the "Regression Tests" can be run locally (Currently only on
|
||||||
|
Linux-based platforms). You will need to have xvfb, imagemagick, and
|
||||||
|
prettydiff installed. You can find more details about this in
|
||||||
|
CI/ft-regression.sh. You will also need "Liberation Fonts" which can be
|
||||||
|
found here: https://releases.pagure.org/liberation-fonts/. The current
|
||||||
|
tests expect the .ttf files to be extracted to ${HOME}/test-fonts. Once set
|
||||||
|
up, you can run all tests by running ./CI/ft-regression.sh <TEST_INDEX>,
|
||||||
|
where TEST_INDEX is the index of the test you wish to run (or "all" to run
|
||||||
|
all tests). Run this command from inside the directory you cloned FreeType
|
||||||
|
to. An HTML report will then be generated to /tmp/ft-test for you to
|
||||||
|
inspect.
|
||||||
|
|
||||||
|
# Adding / Changing Tests
|
||||||
|
|
||||||
|
All regular build tests are listed and configured in azure-pipelines.yml and
|
||||||
|
the several templates it includes in the CI/ folder. If you wish to add an
|
||||||
|
additional platform or build configuration, azure-pipelines.yml is the place
|
||||||
|
to do so. For "Regression Tests", there exists a configuration file at
|
||||||
|
CI/ft-tests.config that contains an array where you can add, remove or change
|
||||||
|
test configurations. Each line in the array is a separate test. In order to
|
||||||
|
have Azure run new tests, you will also need to modify azure-pipelines.yml
|
||||||
|
at the root of the project to add/remove tests from the matrix. For each
|
||||||
|
test, you will need to add a line to the yaml like so:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
Test1:
|
||||||
|
TEST: 0
|
||||||
|
Test2:
|
||||||
|
TEST: 1
|
||||||
|
Test3:
|
||||||
|
TEST: 2
|
||||||
|
```
|
||||||
|
|
||||||
|
# Todo
|
||||||
|
|
||||||
|
Savannah doesn't allow for integration with any modern CI so this cannot be
|
||||||
|
implemented directly until FreeType moves to GitLab or GitHub. GitHub makes
|
||||||
|
integrating this as simple as a few mouse clicks. For the GitLab route,
|
||||||
|
however, we may need to port my yaml configurations to their CI's format.
|
||||||
|
Another alternative is mirroring the repo. GitLab does have some mirroring
|
||||||
|
capabilities, but for Savannah, developers would need to upload their commit
|
||||||
|
to both manually.
|
|
@ -0,0 +1,21 @@
|
||||||
|
steps:
|
||||||
|
- bash: |
|
||||||
|
set -e
|
||||||
|
cd $(Build.BinariesDirectory)
|
||||||
|
ARCH_URL=`curl -s https://mirrors.acm.wpi.edu/archlinux/iso/latest/ | egrep -o 'archlinux-bootstrap-([0-9._]+)-x86_64.tar.gz' | head -n1`
|
||||||
|
echo https://mirrors.acm.wpi.edu/archlinux/iso/latest/$ARCH_URL
|
||||||
|
curl https://mirrors.acm.wpi.edu/archlinux/iso/latest/$ARCH_URL -o arch.tar.gz
|
||||||
|
sudo tar xzf arch.tar.gz
|
||||||
|
sudo mount --bind ./root.x86_64/ ./root.x86_64/
|
||||||
|
sudo cp -R $(Agent.BuildDirectory)/freetype2 ./root.x86_64/
|
||||||
|
sudo mkdir -p ./root.x86_64/$(Build.BinariesDirectory)
|
||||||
|
sudo mount --bind $(Build.BinariesDirectory) ./root.x86_64/$(Build.BinariesDirectory)
|
||||||
|
cat << EOF | sudo ./root.x86_64/bin/arch-chroot ./root.x86_64/
|
||||||
|
set -e
|
||||||
|
echo 'Server = https://mirrors.kernel.org/archlinux/\$repo/os/\$arch' >> /etc/pacman.d/mirrorlist
|
||||||
|
pacman-key --init
|
||||||
|
pacman-key --populate archlinux
|
||||||
|
pacman -Syu --noconfirm base base-devel git gcc cmake harfbuzz zlib libpng xorg-server-xvfb imagemagick npm xorg-xwd
|
||||||
|
npm install -g pretty-diff
|
||||||
|
EOF
|
||||||
|
displayName: 'Bootstrap Archlinux'
|
|
@ -0,0 +1,86 @@
|
||||||
|
# This is a template for building and publishing freetype2 build artifacts using autotools
|
||||||
|
parameters:
|
||||||
|
- name: buildArgs # Configure flags
|
||||||
|
default: ''
|
||||||
|
- name: mingw # Mingw requires special enviormental setup
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
- name: preCMD # Command(s) executed before calling configure
|
||||||
|
default: ''
|
||||||
|
- name: srcDIR # Location of freetype2 sources
|
||||||
|
default: '.'
|
||||||
|
- name: postCMD # Command(s) executed after calling make
|
||||||
|
default: ''
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- ${{ if eq(parameters.mingw, true) }}:
|
||||||
|
- script: |
|
||||||
|
set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem
|
||||||
|
cd $(Build.SourcesDirectory)
|
||||||
|
%CD:~0,2%\msys64\usr\bin\bash -lc "./autogen.sh && ./configure"
|
||||||
|
displayName: 'Configure'
|
||||||
|
env:
|
||||||
|
MSYSTEM: $(MINGW_UPPER)
|
||||||
|
CHERE_INVOKING: yes
|
||||||
|
MINGW_INSTALLS: $(MINGW_LOWER)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem
|
||||||
|
%CD:~0,2%\msys64\usr\bin\bash -lc "make && make install DESTDIR=$(echo \"$(Build.BinariesDirectory)/install\" | tr '\\' '/')"
|
||||||
|
%CD:~0,2%\msys64\usr\bin\bash -lc "cp -R ${{ parameters.srcDIR }} $(echo \"$(Build.BinariesDirectory)/freetype2\" | tr '\\' '/')"
|
||||||
|
displayName: 'Build and Package'
|
||||||
|
env:
|
||||||
|
MSYSTEM: $(MINGW_UPPER)
|
||||||
|
CHERE_INVOKING: yes
|
||||||
|
MINGW_INSTALLS: $(MINGW_LOWER)
|
||||||
|
|
||||||
|
# Building Demos in mingw seems broken do to configuration error of it including termios.h in ttdebug.c which doesn't exist in mingw
|
||||||
|
#- script: |
|
||||||
|
# set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem
|
||||||
|
# %CD:~0,2%\msys64\usr\bin\bash -lc "cd $(echo \"$(Build.BinariesDirectory)\" | tr '\\' '/') && git clone git://git.sv.nongnu.org/freetype/freetype2-demos.git && cd freetype2-demos && make && mv bin/ $(echo \"$(Build.BinariesDirectory)/install/demos\" | tr '\\' '/')"
|
||||||
|
# displayName: 'Build Demos'
|
||||||
|
# env:
|
||||||
|
# MSYSTEM: $(MINGW_UPPER)
|
||||||
|
# CHERE_INVOKING: yes
|
||||||
|
# MINGW_INSTALLS: $(MINGW_LOWER)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem"
|
||||||
|
%CD:~0,2%\msys64\usr\bin\bash -lc "zip -r $(echo \"$(Build.ArtifactStagingDirectory)/freetype-build.zip\" | tr '\\' '/') $(echo \"$(Build.BinariesDirectory)/install\" | tr '\\' '/')"
|
||||||
|
displayName: 'Stage Artifacts'
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.mingw, false) }}:
|
||||||
|
- script: |
|
||||||
|
${{ parameters.preCMD }}
|
||||||
|
cd ${{ parameters.srcDIR }}
|
||||||
|
./autogen.sh
|
||||||
|
./configure ${{ parameters.buildArgs }}
|
||||||
|
${{ parameters.postCMD }}
|
||||||
|
displayName: 'Configure'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
${{ parameters.preCMD }}
|
||||||
|
cd ${{ parameters.srcDIR }}
|
||||||
|
make
|
||||||
|
make install DESTDIR=$(Build.BinariesDirectory)/install
|
||||||
|
${{ parameters.postCMD }}
|
||||||
|
displayName: 'Build and Install'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
cd ${{ parameters.srcDIR }}
|
||||||
|
git clone git://git.sv.nongnu.org/freetype/freetype2-demos.git
|
||||||
|
cd freetype2-demos
|
||||||
|
ln -s ${{ parameters.srcDIR }} ../freetype2
|
||||||
|
make
|
||||||
|
mv bin/ $(Build.BinariesDirectory)/install/demos
|
||||||
|
displayName: 'Build Demos'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
zip -r $(Build.ArtifactStagingDirectory)/freetype-build.zip $(Build.BinariesDirectory)/install
|
||||||
|
displayName: 'Stage Artifacts'
|
||||||
|
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: 'Push Build Artifacts'
|
||||||
|
inputs:
|
||||||
|
pathtoPublish: $(Build.ArtifactStagingDirectory)
|
||||||
|
artifactName: $(Agent.JobName)
|
|
@ -0,0 +1,59 @@
|
||||||
|
# This is a template for building and publishing freetype2 build artifacts using CMake
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- name: buildArgs # CMake configure flags
|
||||||
|
default: ''
|
||||||
|
- name: mingw # Mingw requires special enviormental setup
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
- name: preCMD # Command(s) executed before calling CMake
|
||||||
|
default: ''
|
||||||
|
- name: srcDIR # Location of freetype2 sources
|
||||||
|
default: '.'
|
||||||
|
- name: postCMD # Command(s) executed after calling CMake
|
||||||
|
default: ''
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- ${{ if eq(parameters.mingw, true) }}:
|
||||||
|
- script: |
|
||||||
|
set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem
|
||||||
|
cd $(Build.SourcesDirectory)
|
||||||
|
%CD:~0,2%\msys64\usr\bin\bash -lc "cmake . ${{ parameters.buildArgs }} -B $(echo \"$(Build.BinariesDirectory)\" | tr '\\' '/') -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=install"
|
||||||
|
displayName: 'CMake Configure'
|
||||||
|
env:
|
||||||
|
MSYSTEM: $(MINGW_UPPER)
|
||||||
|
CHERE_INVOKING: yes
|
||||||
|
MINGW_INSTALLS: $(MINGW_LOWER)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem
|
||||||
|
%CD:~0,2%\msys64\usr\bin\bash -lc "cmake --build $(echo \"$(Build.BinariesDirectory)\" | tr '\\' '/') --config Release --target package"
|
||||||
|
displayName: 'CMake Build and Package'
|
||||||
|
env:
|
||||||
|
MSYSTEM: $(MINGW_UPPER)
|
||||||
|
CHERE_INVOKING: yes
|
||||||
|
MINGW_INSTALLS: $(MINGW_LOWER)
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.mingw, false) }}:
|
||||||
|
- script: |
|
||||||
|
${{ parameters.preCMD }}
|
||||||
|
cd ${{ parameters.srcDIR }}
|
||||||
|
cmake . ${{ parameters.buildArgs }} -B $(Build.BinariesDirectory) -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=install
|
||||||
|
${{ parameters.postCMD }}
|
||||||
|
displayName: 'CMake Configure'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
${{ parameters.preCMD }}
|
||||||
|
cd ${{ parameters.srcDIR }}
|
||||||
|
cmake --build $(Build.BinariesDirectory) --config Release --target package
|
||||||
|
${{ parameters.postCMD }}
|
||||||
|
displayName: 'CMake Build and Package'
|
||||||
|
|
||||||
|
- script: mv $(Build.BinariesDirectory)/freetype-* $(Build.ArtifactStagingDirectory)
|
||||||
|
displayName: 'Stage Artifacts'
|
||||||
|
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: 'Push Build Artifacts'
|
||||||
|
inputs:
|
||||||
|
pathtoPublish: $(Build.ArtifactStagingDirectory)
|
||||||
|
artifactName: $(Agent.JobName)
|
|
@ -0,0 +1,23 @@
|
||||||
|
# passthrough templateto call other build templates
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- name: buildArgs # CMake configure flags
|
||||||
|
default: ''
|
||||||
|
- name: buildArgs # CMake configure flags
|
||||||
|
default: ''
|
||||||
|
- name: mingw # Mingw requires special enviormental setup
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
- name: preCMD # Command(s) executed before calling CMake
|
||||||
|
default: ''
|
||||||
|
- name: srcDIR # Location of freetype2 sources
|
||||||
|
default: '.'
|
||||||
|
- name: postCMD # Command(s) executed after calling CMake
|
||||||
|
default: ''
|
||||||
|
|
||||||
|
- template: build-autotools.yml
|
||||||
|
parameters:
|
||||||
|
preCMD: ${{ parameters.preCMD }}
|
||||||
|
srcDIR: ${{ parameters.srcDIR }}
|
||||||
|
postCMD: ${{ parameters.postCMD }}
|
||||||
|
buildArgs: ${{ parameters.buildArgs }}
|
|
@ -0,0 +1,98 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Include our configuration
|
||||||
|
. ./CI/ft-tests.config
|
||||||
|
|
||||||
|
# Usage: ./CI/ft-regression.sh <commit to test against> <test to run (a number or "all")>
|
||||||
|
|
||||||
|
# The following script checks the source code in the current folder for
|
||||||
|
# regressions or changes against previous commits. This is the main script you
|
||||||
|
# should be calling and the rest are more for utility.
|
||||||
|
|
||||||
|
# These scripts requires xvfb (for capturing demos), imagick
|
||||||
|
# (for comparing images) and pretty-diff which can be installed via npm
|
||||||
|
# (for diffing text)
|
||||||
|
|
||||||
|
# Below is utility function used to build both versions of freetype and
|
||||||
|
# respective demos exes linked against the specific builds
|
||||||
|
function build() {
|
||||||
|
# Here we set the script to exit on any failed command because if the build
|
||||||
|
# fails, then there's nothing to compare so no point in continuing.
|
||||||
|
set -e
|
||||||
|
./autogen.sh
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
pushd ..
|
||||||
|
[[ -d ./freetype2-demos ]]\
|
||||||
|
|| git clone ${DEMOS_URL}
|
||||||
|
pushd freetype2-demos
|
||||||
|
git checkout `git rev-list -n 1 --first-parent --before="$(git show -s --format=%ci $1)" master`
|
||||||
|
make
|
||||||
|
popd
|
||||||
|
popd
|
||||||
|
# Unset exit on error so the tests will continue to run despie any errors.
|
||||||
|
set +e
|
||||||
|
}
|
||||||
|
|
||||||
|
# The script wasn't passed a git hash to compare so we exit early and print.
|
||||||
|
if [ -z "$1" ]; then
|
||||||
|
echo "No commit specified to check out master for regression tests."
|
||||||
|
echo "Aborting!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$2" ]; then
|
||||||
|
echo "No tests specified running all tests"
|
||||||
|
export RUN_TEST="all"
|
||||||
|
else
|
||||||
|
export RUN_TEST="$2"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# We want a fresh checkout and work dir in order to prevent any stale changes
|
||||||
|
# from slipping through.
|
||||||
|
rm -rf "${COMP_COMMIT_DIR}" "${TEST_OUTDIR}"
|
||||||
|
|
||||||
|
# Here we store the current directories shortened commit hash which is used as
|
||||||
|
# the subdirectory name for where to dump the logs and images.
|
||||||
|
PREV_GIT_HASH=$(git log --pretty=format:'%h' -n 1)
|
||||||
|
|
||||||
|
# Again we export this because it's used in the other scripts later.
|
||||||
|
export PREVIOUS_PWD=${PWD}
|
||||||
|
|
||||||
|
# This is the first build/run of the current dir that will dump our "A"
|
||||||
|
# metricts.
|
||||||
|
build ${PREV_GIT_HASH}
|
||||||
|
./CI/ft-test.sh
|
||||||
|
|
||||||
|
# Next we set up our "B" directory by copyiing our current sources.
|
||||||
|
echo "Copying ${PWD} to ${COMP_COMMIT_DIR}"
|
||||||
|
cp -p -r "${PWD}" "${COMP_COMMIT_DIR}"
|
||||||
|
pushd "${COMP_COMMIT_DIR}"
|
||||||
|
|
||||||
|
# Clean before we checkout
|
||||||
|
make clean
|
||||||
|
|
||||||
|
# Here we stash / clean in the copied "B" directory to prevent any issues
|
||||||
|
# checking out the desired test commit.
|
||||||
|
if [[ "${PWD}" == "${COMP_COMMIT_DIR}" ]]; then
|
||||||
|
git stash
|
||||||
|
git clean -f -d
|
||||||
|
git checkout "$1"
|
||||||
|
GIT_HASH=$(git log --pretty=format:'%h' -n 1)
|
||||||
|
# Here we start the build / metrics for build "B"
|
||||||
|
build ${GIT_HASH}
|
||||||
|
# We call the scripts from the current directory as they may not exist in
|
||||||
|
# previous commits and to prevent confusion when modifying them. One set of
|
||||||
|
# scripts is called but on each call they call different versions of the demos
|
||||||
|
# exes.
|
||||||
|
${PREVIOUS_PWD}/CI/ft-test.sh ${PREV_GIT_HASH} ${GIT_HASH}
|
||||||
|
EXIT=$?
|
||||||
|
popd
|
||||||
|
else
|
||||||
|
echo "Failed to change directory to ${COMP_COMMIT_DIR}.\
|
||||||
|
Something is horribly wrong..."
|
||||||
|
echo "Aborting!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,177 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Include our configuration
|
||||||
|
. ${PREVIOUS_PWD}/CI/ft-tests.config
|
||||||
|
|
||||||
|
# Arguments
|
||||||
|
FONT=$1
|
||||||
|
SIZE=$2
|
||||||
|
COMMIT_A=$3
|
||||||
|
COMMIT_B=$4
|
||||||
|
|
||||||
|
# This script generates diffs and html reports from the metrics previously
|
||||||
|
# generated.
|
||||||
|
|
||||||
|
EXIT=0
|
||||||
|
|
||||||
|
metrics_dir="$(basename ${FONT})/${SIZE}/"
|
||||||
|
diff_dir="${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs/${metrics_dir}"
|
||||||
|
mkdir -p "${diff_dir}"
|
||||||
|
|
||||||
|
OUTDIR_A="${TEST_OUTDIR}/${COMMIT_A}/$(basename ${FONT})/${SIZE}/"
|
||||||
|
OUTDIR_B="${TEST_OUTDIR}/${COMMIT_B}/$(basename ${FONT})/${SIZE}/"
|
||||||
|
|
||||||
|
RELATIVE_OUTDIR_A="${COMMIT_A}/$(basename ${FONT})/${SIZE}/"
|
||||||
|
RELATIVE_OUTDIR_B="${COMMIT_B}/$(basename ${FONT})/${SIZE}/"
|
||||||
|
|
||||||
|
# Function below generates a page to compare images. The image should change
|
||||||
|
# between the two versions on mouse over to easily spot differences.
|
||||||
|
function write_img_comp() {
|
||||||
|
echo "<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
.comp {
|
||||||
|
width: $(identify -format '%w' $1)px;
|
||||||
|
height: $(identify -format '%h' $1)px;
|
||||||
|
background: url(\"${RELATIVE_OUTDIR_A}/$(basename $1)\") no-repeat;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.comp:hover {
|
||||||
|
background: url(\"${RELATIVE_OUTDIR_B}/$(basename $1)\") no-repeat;
|
||||||
|
}
|
||||||
|
.diff {
|
||||||
|
width: $(identify -format '%w' $1)px;
|
||||||
|
height: $(identify -format '%h' $1)px;
|
||||||
|
background: url(\"${diff_dir}/$(basename $1 .png)_diff.png\") no-repeat;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2>
|
||||||
|
Comparison of $(basename $1) between commits ${COMMIT_A} and ${COMMIT_B}
|
||||||
|
</h2>
|
||||||
|
<div class=\"comp\"></div>
|
||||||
|
<div class=\"diff\"></div>
|
||||||
|
</body>
|
||||||
|
</html>"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Here we start generating html report. It is just a simple table of pass / fail
|
||||||
|
# results.
|
||||||
|
echo "<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
table, tr {
|
||||||
|
border: 1px solid black;
|
||||||
|
display:table;
|
||||||
|
margin-right:auto;
|
||||||
|
margin-left:auto;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.fail {
|
||||||
|
color: red
|
||||||
|
}
|
||||||
|
|
||||||
|
th.pass {
|
||||||
|
color: green
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h2>Freetype2 Difference Report</h2>
|
||||||
|
<h3>
|
||||||
|
Commit A: ${COMMIT_A}
|
||||||
|
Commit B: ${COMMIT_B}
|
||||||
|
</h3>
|
||||||
|
<h3>
|
||||||
|
Font: $(basename $1)
|
||||||
|
</h3>
|
||||||
|
<h3>
|
||||||
|
Size: $2
|
||||||
|
</h3>
|
||||||
|
<table>"
|
||||||
|
|
||||||
|
PASS=()
|
||||||
|
FAIL=()
|
||||||
|
FILES=${OUTDIR_A}/*
|
||||||
|
|
||||||
|
for f in $FILES
|
||||||
|
do
|
||||||
|
filename=$(basename $f)
|
||||||
|
extension="${filename##*.}"
|
||||||
|
|
||||||
|
# If is png compare with imagick
|
||||||
|
if [[ "$extension" == "png" ]];
|
||||||
|
then
|
||||||
|
diif_cmd=$(compare -metric AE -highlight-color Red -lowlight-color PaleGreen $f ${OUTDIR_B}/$(basename $f)\
|
||||||
|
"${diff_dir}/$(basename $f .png)_diff.png" &> /dev/null)
|
||||||
|
result=$?
|
||||||
|
# Else if txt compare with
|
||||||
|
else
|
||||||
|
diif_cmd=$(diff $f ${OUTDIR_B}/$(basename $f) &>\
|
||||||
|
$diff_dir/$(basename $f .$extension).diff) # we only care about return result
|
||||||
|
result=$?
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Generate approriate diff page
|
||||||
|
PAGE="$(basename $f .$extension)_${COMMIT_A}_${COMMIT_B}_diff.html"
|
||||||
|
if [ "$result" -eq "0" ];
|
||||||
|
then
|
||||||
|
PASS+="$f "
|
||||||
|
else
|
||||||
|
if [[ "$extension" == "png" ]];
|
||||||
|
then
|
||||||
|
write_img_comp $f &> "${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs/$PAGE"
|
||||||
|
else
|
||||||
|
DISPLAY=-1 pretty-diff $f ${OUTDIR_B}/$(basename $f)
|
||||||
|
mv /tmp/diff.html "${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs/$PAGE"
|
||||||
|
fi
|
||||||
|
FAIL+="$f "
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Below we fill out the results table
|
||||||
|
echo "<tr><th class=\"fail\">FAIL</th></tr>"
|
||||||
|
|
||||||
|
for f in $FAIL
|
||||||
|
do
|
||||||
|
filename=$(basename $f)
|
||||||
|
extension="${filename##*.}"
|
||||||
|
if [[ "$filename" != "bench.txt" ]];
|
||||||
|
then
|
||||||
|
EXIT=1
|
||||||
|
fi
|
||||||
|
PAGE="$(basename $f .$extension).html"
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td><a href=\"${COMMIT_A}_${COMMIT_B}_diffs/$(basename $f .$extension)_${COMMIT_A}_${COMMIT_B}_diff.html\">$(basename $f)</a></td>
|
||||||
|
</tr>"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "<tr><th class=\"pass\">PASS</th></tr>"
|
||||||
|
|
||||||
|
for f in $PASS
|
||||||
|
do
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td><a href=\"${COMMIT_A}_${COMMIT_B}_diffs/${COMMIT_A}/${metrics_dir}/$(basename $f)\">$(basename $f)</a></td>
|
||||||
|
</tr>"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>"
|
||||||
|
|
||||||
|
# Move our tests results into dir so html refrences work
|
||||||
|
cp -R ${TEST_OUTDIR}/${COMMIT_A}/ ${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs &> /dev/null
|
||||||
|
cp -R ${TEST_OUTDIR}/${COMMIT_B}/ ${TEST_OUTDIR}/${COMMIT_A}_${COMMIT_B}_diffs &> /dev/null
|
||||||
|
|
||||||
|
exit $EXIT
|
|
@ -0,0 +1,94 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Include our configuration
|
||||||
|
. ${PREVIOUS_PWD}/CI/ft-tests.config
|
||||||
|
|
||||||
|
# Arguments
|
||||||
|
COMMIT=$1
|
||||||
|
FONT=$2
|
||||||
|
SIZE=$3
|
||||||
|
DPI=$4
|
||||||
|
DUMP=$5
|
||||||
|
BENCH=$6
|
||||||
|
VIEW=$7
|
||||||
|
STRING=$8
|
||||||
|
START_GLYPH=$9
|
||||||
|
END_GLYPH=${10}
|
||||||
|
|
||||||
|
OUT_DIR="${TEST_OUTDIR}/${COMMIT}/$(basename ${FONT})/${SIZE}/"
|
||||||
|
|
||||||
|
# Ensure directory we want to write to exists.
|
||||||
|
mkdir -p $OUT_DIR
|
||||||
|
|
||||||
|
# This script dumps specified metrics for a specified font. The arguments listed
|
||||||
|
# above allow you to specify which metricts to dum when this script is called
|
||||||
|
# from ft-test.sh
|
||||||
|
|
||||||
|
|
||||||
|
# Below sets up a virtual X framebuffer to run the demos in. It is 1024x768 at
|
||||||
|
# 24b depth. If you need a larget screen to fit the demos change the resolution
|
||||||
|
# here.
|
||||||
|
function startX {
|
||||||
|
if [ ! -f "/tmp/.X${1}-lock" ]; then
|
||||||
|
Xvfb :"$1" -screen 0 1024x768x24 &
|
||||||
|
# Wait 2 seconds to ensure X is ready.
|
||||||
|
sleep 2
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Below is a utility function to run a command inside the virtual frame buffer,
|
||||||
|
# wait 1 second and capture the screen and kill it.The first two arguments are
|
||||||
|
# the xvfb ID and the output image file name.
|
||||||
|
function xvfbRunAndScreenShot {
|
||||||
|
display="$1"
|
||||||
|
shift
|
||||||
|
screenshot_name="$1"
|
||||||
|
shift
|
||||||
|
DISPLAY=:"$display" $@ &
|
||||||
|
PID=$!
|
||||||
|
sleep 1
|
||||||
|
DISPLAY=:"$display" xwd -root -silent\
|
||||||
|
| convert -colorspace sRGB -define png:color-type=2 -trim xwd:- png:${OUT_DIR}/${screenshot_name}
|
||||||
|
kill $PID
|
||||||
|
}
|
||||||
|
|
||||||
|
# Because witing 1 second for every command can be slow we set up multiple xvfbs
|
||||||
|
# in order to expedite the proccess.
|
||||||
|
for worker in $(seq 1 $WORKERS)
|
||||||
|
do
|
||||||
|
startX $((98 + ${worker})) &
|
||||||
|
done
|
||||||
|
|
||||||
|
# Below are simple metricts to test that only require one run per font.
|
||||||
|
if [[ "$DUMP" -eq 1 ]]; then
|
||||||
|
${DEMOS_DIR}/ftdump ${FONT} &> ${OUT_DIR}/dump.txt
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$BENCH" -eq 1 ]]; then
|
||||||
|
${DEMOS_DIR}/ftbench ${FONT} &> ${OUT_DIR}/bench.txt
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$STRING" -eq 1 ]]; then
|
||||||
|
xvfbRunAndScreenShot 99 "ftstring.png" ${DEMOS_DIR}/ftstring\
|
||||||
|
-r $DPI ${SIZE} ${FONT}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$VIEW" -eq 1 ]]; then
|
||||||
|
xvfbRunAndScreenShot 99 "ftview.png" ${DEMOS_DIR}/ftview -r $DPI ${SIZE} ${FONT}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For ftgrid we run it on thousands of glyphys so this loop takes advantage of
|
||||||
|
# the above mentioned xvfb workers to speed it up.
|
||||||
|
for GLYPH in $(seq ${START_GLYPH} ${END_GLYPH})
|
||||||
|
do
|
||||||
|
((i=i%WORKERS)); ((i++==0)) && wait
|
||||||
|
echo "$(basename $FONT) ftgrid ${GLYPH}"
|
||||||
|
# Pad name with 0s to maintain order
|
||||||
|
GLYPH_padded=$(printf "%04d" ${GLYPH})
|
||||||
|
xvfbRunAndScreenShot $((98 + ${i})) "ftgrid_${GLYPH_padded}.png"\
|
||||||
|
${DEMOS_DIR}/ftgrid -r $DPI -f ${GLYPH} ${SIZE} ${FONT} &
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep 2 # wait for workers to finish up
|
||||||
|
#killall Xvfb
|
||||||
|
sleep 2 # wait for all xvfb to die
|
|
@ -0,0 +1,124 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Include our configuration
|
||||||
|
. ${PREVIOUS_PWD}/CI/ft-tests.config
|
||||||
|
|
||||||
|
# Arguments to /ft-test-font.sh
|
||||||
|
#COMMIT=$1
|
||||||
|
#FONT=$2
|
||||||
|
#SIZE=$3
|
||||||
|
#DPI=$4
|
||||||
|
#DUMP=$5
|
||||||
|
#BENCH=$6
|
||||||
|
#VIEW=$7
|
||||||
|
#STRING=$8
|
||||||
|
#START_GLYPH=$9
|
||||||
|
#END_GLYPH=$10
|
||||||
|
|
||||||
|
# This script is where one might add additional tests. Currently, it cycles
|
||||||
|
# through the below directory and call the metric dumping script for any files
|
||||||
|
# in that directory. Currently, it only tests all files at pt 16 and dpi 72 and
|
||||||
|
# with ft-grid's default rendering mode.
|
||||||
|
|
||||||
|
GIT_HASH=$(git log --pretty=format:'%h' -n 1)
|
||||||
|
|
||||||
|
EXIT=0
|
||||||
|
PASS=()
|
||||||
|
FAIL=()
|
||||||
|
|
||||||
|
# Ensure directory we want to write to exists.
|
||||||
|
mkdir -p $TEST_OUTDIR
|
||||||
|
|
||||||
|
if [[ "$RUN_TEST" == "all" ]]; then
|
||||||
|
for ((i = 0; i < ${#FT_TESTS[@]}; i++))
|
||||||
|
do
|
||||||
|
args=(${FT_TESTS[$i]})
|
||||||
|
${PREVIOUS_PWD}/CI/ft-test-font.sh ${GIT_HASH} ${FT_TESTS[$i]}
|
||||||
|
if [ ! -z "$1" ]; then
|
||||||
|
${PREVIOUS_PWD}/CI/ft-report.sh ${args[0]} ${args[1]} ${1} ${2}\
|
||||||
|
&> ${TEST_OUTDIR}/ft-$(basename ${args[0]})-${args[1]}-report.html
|
||||||
|
result=$?
|
||||||
|
if [ "$result" -eq "0" ];
|
||||||
|
then
|
||||||
|
RESULT_STR="PASS"
|
||||||
|
PASS+="ft-$(basename ${args[0]})-${args[1]}-report.html "
|
||||||
|
else
|
||||||
|
RESULT_STR="FAIL"
|
||||||
|
FAIL+="ft-$(basename ${args[0]})-${args[1]}-report.html "
|
||||||
|
# We store any failure to use later in the exit command.
|
||||||
|
EXIT=1
|
||||||
|
fi
|
||||||
|
echo "ft-$(basename ${args[0]})-${args[1]}-report.html [$RESULT_STR]"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
else
|
||||||
|
args=(${FT_TESTS[$RUN_TEST]})
|
||||||
|
${PREVIOUS_PWD}/CI/ft-test-font.sh ${GIT_HASH} ${FT_TESTS[$RUN_TEST]}
|
||||||
|
if [ ! -z "$1" ]; then
|
||||||
|
${PREVIOUS_PWD}/CI/ft-report.sh ${args[0]} ${args[1]} ${1} ${2}\
|
||||||
|
&> ${TEST_OUTDIR}/ft-$(basename ${args[0]})-${args[1]}-report.html
|
||||||
|
result=$?
|
||||||
|
if [ "$result" -eq "0" ];
|
||||||
|
then
|
||||||
|
RESULT_STR="PASS"
|
||||||
|
PASS+="ft-$(basename ${args[0]})-${args[1]}-report.html "
|
||||||
|
else
|
||||||
|
RESULT_STR="FAIL"
|
||||||
|
FAIL+="ft-$(basename ${args[0]})-${args[1]}-report.html "
|
||||||
|
# We store any failure to use later in the exit command.
|
||||||
|
EXIT=1
|
||||||
|
fi
|
||||||
|
echo "ft-$(basename ${args[0]})-${args[1]}-report.html [$RESULT_STR]"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Below we generate an index of all reports generated
|
||||||
|
echo "<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
table, tr {
|
||||||
|
border: 1px solid black;
|
||||||
|
display:table;
|
||||||
|
margin-right:auto;
|
||||||
|
margin-left:auto;
|
||||||
|
width:100%;
|
||||||
|
}
|
||||||
|
th.fail {
|
||||||
|
color: red
|
||||||
|
}
|
||||||
|
th.pass {
|
||||||
|
color: green
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2>Freetype2 Difference Reports Index</h2>
|
||||||
|
<table>" &> "${TEST_OUTDIR}/index.html"
|
||||||
|
|
||||||
|
echo "<tr><th class=\"fail\">FAIL</th></tr>" &>> "${TEST_OUTDIR}/index.html"
|
||||||
|
|
||||||
|
for f in $FAIL
|
||||||
|
do
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td><a href=\"$f\">$(basename $f .html)</a></td>
|
||||||
|
</tr>" &>> "${TEST_OUTDIR}/index.html"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "<tr><th class=\"pass\">PASS</th></tr>" &>> "${TEST_OUTDIR}/index.html"
|
||||||
|
|
||||||
|
for f in $PASS
|
||||||
|
do
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td><a href=\"$f\">$(basename $f .html)</a></td>
|
||||||
|
</tr>" &>> "${TEST_OUTDIR}/index.html"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>" &>> "${TEST_OUTDIR}/index.html"
|
||||||
|
|
||||||
|
exit $EXIT
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# URL to clone demos from
|
||||||
|
DEMOS_URL="git://git.sv.nongnu.org/freetype/freetype2-demos.git"
|
||||||
|
|
||||||
|
# Directory of demos relative to freetype
|
||||||
|
DEMOS_DIR="../freetype2-demos/bin"
|
||||||
|
|
||||||
|
# Base directory to ouptut test results
|
||||||
|
TEST_OUTDIR="/tmp/ft-tests"
|
||||||
|
|
||||||
|
# This is where we build the commit of freetype we wish to compare against. We
|
||||||
|
# export it here because this variable is used in other scripts invoked later.
|
||||||
|
COMP_COMMIT_DIR="/tmp/freetype2"
|
||||||
|
|
||||||
|
# Number of xvfb threads to use
|
||||||
|
WORKERS=20
|
||||||
|
|
||||||
|
# List of tests Below
|
||||||
|
## Arguments (in order)
|
||||||
|
### FONT: path to ttf
|
||||||
|
### SIZE: size to render test at
|
||||||
|
### DPI: dpi to render test at
|
||||||
|
### DUMP: boolean, run dump test
|
||||||
|
### BENCH: boolean, run bench test
|
||||||
|
### VIEW: boolean, run dump view test
|
||||||
|
### STRING: boolean, run string test
|
||||||
|
### START_GLYPH: first glyph to use in ftview tests
|
||||||
|
### END_GLYPH: last glyph to use in ftview tests
|
||||||
|
|
||||||
|
FT_TESTS=(
|
||||||
|
"${HOME}/test-fonts/LiberationSerif-Regular.ttf 16 72 1 1 1 1 0 10"
|
||||||
|
"${HOME}/test-fonts/LiberationSans-Bold.ttf 32 72 1 1 1 1 10 30"
|
||||||
|
"${HOME}/test-fonts/LiberationMono-BoldItalic.ttf 32 72 1 1 1 1 0 2394"
|
||||||
|
)
|
|
@ -0,0 +1,24 @@
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
git clone https://github.com/msys2/msys2-ci-base.git %CD:~0,2%\msys64
|
||||||
|
%CD:~0,2%\msys64\usr\bin\rm -rf %CD:~0,2%\msys64\.git
|
||||||
|
displayName: Install MSYS2
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set PATH=%CD:~0,2%\msys64\usr\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem
|
||||||
|
%CD:~0,2%\msys64\usr\bin\curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz
|
||||||
|
%CD:~0,2%\msys64\usr\bin\curl -O http://repo.msys2.org/msys/x86_64/msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig
|
||||||
|
%CD:~0,2%\msys64\usr\bin\pacman-key --verify msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz.sig
|
||||||
|
%CD:~0,2%\msys64\usr\bin\pacman --overwrite='*' --noconfirm -U msys2-keyring-r21.b39fb11-1-any.pkg.tar.xz
|
||||||
|
%CD:~0,2%\msys64\usr\bin\pacman --noconfirm -Syyuu
|
||||||
|
displayName: Update MSYS2
|
||||||
|
|
||||||
|
- script: taskkill /f /fi "MODULES eq msys-2.0.dll" || exit /b 0s
|
||||||
|
displayName: Reset MSYS2
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set PATH=%CD:~0,2%\msys64\usr\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem
|
||||||
|
%CD:~0,2%\msys64\usr\bin\pacman --noconfirm -Syyuu
|
||||||
|
%CD:~0,2%\msys64\usr\bin\pacman --noconfirm --needed -S zip git base-devel mingw-w64-$(MINGW_ARCH)-toolchain mingw-w64-$(MINGW_ARCH)-cmake mingw-w64-$(MINGW_ARCH)-harfbuzz
|
||||||
|
%CD:~0,2%\msys64\usr\bin\pacman --noconfirm -Scc
|
||||||
|
displayName: Install Toolchain
|
|
@ -0,0 +1,39 @@
|
||||||
|
# This is a template for building, running and publishing freetype2 build
|
||||||
|
# regression test artifacts
|
||||||
|
parameters:
|
||||||
|
- name: preCMD # Command(s) executed before calling configure
|
||||||
|
default: ''
|
||||||
|
- name: srcDIR # Location of freetype2 sources
|
||||||
|
default: '.'
|
||||||
|
- name: postCMD # Command(s) executed after calling make
|
||||||
|
default: ''
|
||||||
|
- name: testNum # Test number to run
|
||||||
|
default: '0'
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
${{ parameters.preCMD }}
|
||||||
|
curl https://releases.pagure.org/liberation-fonts/liberation-fonts-ttf-2.00.1.tar.gz -o /tmp/fonts.tar.gz
|
||||||
|
tar -xf /tmp/fonts.tar.gz
|
||||||
|
mkdir -p ~/test-fonts/
|
||||||
|
mv liberation-fonts-*/*.ttf ~/test-fonts/
|
||||||
|
cd ${{ parameters.srcDIR }}
|
||||||
|
git clone git://git.sv.nongnu.org/freetype/freetype2-demos.git
|
||||||
|
cd freetype2-demos
|
||||||
|
ln -s ${{ parameters.srcDIR }} ../freetype2
|
||||||
|
cd /freetype2
|
||||||
|
./CI/ft-regression.sh master ${{ parameters.testNum }}
|
||||||
|
chmod -R 755 /tmp/ft-tests/
|
||||||
|
mv /tmp/ft-tests/ /
|
||||||
|
${{ parameters.postCMD }}
|
||||||
|
displayName: 'Run Regression Tests'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
cp -R $(Build.BinariesDirectory)/root.x86_64/ft-tests $(Build.ArtifactStagingDirectory)
|
||||||
|
displayName: 'Stage Artifacts'
|
||||||
|
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: 'Push Build Artifacts'
|
||||||
|
inputs:
|
||||||
|
pathtoPublish: $(Build.ArtifactStagingDirectory)
|
||||||
|
artifactName: $(Agent.JobName)
|
304
CMakeLists.txt
304
CMakeLists.txt
|
@ -1,6 +1,6 @@
|
||||||
# CMakeLists.txt
|
# CMakeLists.txt
|
||||||
#
|
#
|
||||||
# Copyright (C) 2013-2022 by
|
# Copyright (C) 2013-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# Written originally by John Cary <cary@txcorp.com>
|
# Written originally by John Cary <cary@txcorp.com>
|
||||||
|
@ -12,17 +12,13 @@
|
||||||
# fully.
|
# fully.
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# The following will (1) create a build directory, and (2) change into it and
|
# The following will 1. create a build directory and 2. change into it and
|
||||||
# call cmake to configure the build with default parameters as a static
|
# call cmake to configure the build with default parameters as a static
|
||||||
# library. See
|
# library. See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
|
||||||
#
|
# for information about Debug, Release, etc. builds.
|
||||||
# https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
|
|
||||||
#
|
|
||||||
# for information about debug or release builds, for example
|
|
||||||
#
|
#
|
||||||
# cmake -B build -D CMAKE_BUILD_TYPE=Release
|
# cmake -B build -D CMAKE_BUILD_TYPE=Release
|
||||||
#
|
#
|
||||||
#
|
|
||||||
# For a dynamic library, use
|
# For a dynamic library, use
|
||||||
#
|
#
|
||||||
# cmake -B build -D BUILD_SHARED_LIBS=true -D CMAKE_BUILD_TYPE=Release
|
# cmake -B build -D BUILD_SHARED_LIBS=true -D CMAKE_BUILD_TYPE=Release
|
||||||
|
@ -43,8 +39,7 @@
|
||||||
#
|
#
|
||||||
# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=SIMULATOR64 ..
|
# cmake -E chdir build cmake -G Xcode -D IOS_PLATFORM=SIMULATOR64 ..
|
||||||
#
|
#
|
||||||
#
|
# Finally, build the project with:
|
||||||
# Finally, build the project with
|
|
||||||
#
|
#
|
||||||
# cmake --build build
|
# cmake --build build
|
||||||
#
|
#
|
||||||
|
@ -61,66 +56,56 @@
|
||||||
#
|
#
|
||||||
# Some notes.
|
# Some notes.
|
||||||
#
|
#
|
||||||
# - `cmake' creates configuration files in
|
# . `cmake' creates configuration files in
|
||||||
#
|
#
|
||||||
# <build-directory>/include/freetype/config
|
# <build-directory>/include/freetype/config
|
||||||
#
|
#
|
||||||
# which should be further modified if necessary.
|
# which should be further modified if necessary.
|
||||||
#
|
#
|
||||||
# - You can use `cmake' directly on a freshly cloned FreeType git
|
# . You can use `cmake' directly on a freshly cloned FreeType git
|
||||||
# repository.
|
# repository.
|
||||||
#
|
#
|
||||||
# - `CMakeLists.txt' is provided as-is since it is normally not used by the
|
# . `CMakeLists.txt' is provided as-is since it is normally not used by the
|
||||||
# developer team.
|
# developer team.
|
||||||
#
|
#
|
||||||
# - Set the `FT_REQUIRE_ZLIB', `FT_REQUIRE_BZIP2', `FT_REQUIRE_PNG',
|
# . Set the `FT_WITH_ZLIB', `FT_WITH_BZIP2', `FT_WITH_PNG',
|
||||||
# `FT_REQUIRE_HARFBUZZ', and `FT_REQUIRE_BROTLI' CMake variables to `ON'
|
# `FT_WITH_HARFBUZZ', and `FT_WITH_BROTLI' CMake variables to `ON' to
|
||||||
# or `TRUE' to force using a dependency. Leave a variable undefined
|
# force using a dependency. Leave a variable undefined (which is the
|
||||||
# (which is the default) to use the dependency only if it is available.
|
# default) to use the dependency only if it is available. Example:
|
||||||
# Example:
|
|
||||||
#
|
#
|
||||||
# cmake -B build -D FT_REQUIRE_ZLIB=TRUE \
|
# cmake -B build -D FT_WITH_ZLIB=ON \
|
||||||
# -D FT_REQUIRE_BZIP2=TRUE \
|
# -D FT_WITH_BZIP2=ON \
|
||||||
# -D FT_REQUIRE_PNG=TRUE \
|
# -D FT_WITH_PNG=ON \
|
||||||
# -D FT_REQUIRE_HARFBUZZ=TRUE \
|
# -D FT_WITH_HARFBUZZ=ON \
|
||||||
# -D FT_REQUIRE_BROTLI=TRUE [...]
|
# -D FT_WITH_BROTLI=ON [...]
|
||||||
#
|
#
|
||||||
# - Set `FT_DISABLE_XXX=TRUE' to disable a dependency completely (where
|
# Set `CMAKE_DISABLE_FIND_PACKAGE_XXX=TRUE' to disable a dependency completely
|
||||||
# `XXX' is a CMake package name like `BZip2'). Example for disabling all
|
# (where `XXX' is a CMake package name like `BZip2'). Example for disabling all
|
||||||
# dependencies:
|
# dependencies:
|
||||||
#
|
#
|
||||||
# cmake -B build -D FT_DISABLE_ZLIB=TRUE \
|
# cmake -B build -D CMAKE_DISABLE_FIND_PACKAGE_ZLIB=TRUE \
|
||||||
# -D FT_DISABLE_BZIP2=TRUE \
|
# -D CMAKE_DISABLE_FIND_PACKAGE_BZip2=TRUE \
|
||||||
# -D FT_DISABLE_PNG=TRUE \
|
# -D CMAKE_DISABLE_FIND_PACKAGE_PNG=TRUE \
|
||||||
# -D FT_DISABLE_HARFBUZZ=TRUE \
|
# -D CMAKE_DISABLE_FIND_PACKAGE_HarfBuzz=TRUE \
|
||||||
# -D FT_DISABLE_BROTLI=TRUE [...]
|
# -D CMAKE_DISABLE_FIND_PACKAGE_BrotliDec=TRUE [...]
|
||||||
#
|
#
|
||||||
# - NOTE: If a package is set as DISABLED, it cannot be set as REQUIRED
|
# . Installation of FreeType can be controlled with the CMake variables
|
||||||
# without unsetting the DISABLED value first. For example, if
|
|
||||||
# `FT_DISABLE_HARFBUZZ=TRUE' has been set (Cache is present), you need to
|
|
||||||
# call `FT_DISABLE_HARFBUZZ=FALSE' before calling
|
|
||||||
# `FT_REQUIRE_HARFBUZZ=TRUE'.
|
|
||||||
#
|
|
||||||
# - Installation of FreeType can be controlled with the CMake variables
|
|
||||||
# `SKIP_INSTALL_HEADERS', `SKIP_INSTALL_LIBRARIES', and `SKIP_INSTALL_ALL'
|
# `SKIP_INSTALL_HEADERS', `SKIP_INSTALL_LIBRARIES', and `SKIP_INSTALL_ALL'
|
||||||
# (this is compatible with the same CMake variables in zlib's CMake
|
# (this is compatible with the same CMake variables in zlib's CMake
|
||||||
# support).
|
# support).
|
||||||
|
|
||||||
# To minimize the number of cmake_policy() workarounds,
|
# FreeType explicitly marks the API to be exported and relies on the compiler
|
||||||
# CMake >= 3 is requested.
|
# to hide all other symbols. CMake supports a C_VISBILITY_PRESET property
|
||||||
cmake_minimum_required(VERSION 3.0)
|
# starting with 2.8.12.
|
||||||
|
cmake_minimum_required(VERSION 2.8.12)
|
||||||
|
|
||||||
if (NOT CMAKE_VERSION VERSION_LESS 3.3)
|
if (NOT CMAKE_VERSION VERSION_LESS 3.3)
|
||||||
# Allow symbol visibility settings also on static libraries. CMake < 3.3
|
# Allow symbol visibility settings also on static libraries. CMake < 3.3
|
||||||
# only sets the property on a shared library build.
|
# only sets the property on a shared library build.
|
||||||
cmake_policy(SET CMP0063 NEW)
|
cmake_policy(SET CMP0063 NEW)
|
||||||
|
|
||||||
# Support new IN_LIST if() operator.
|
|
||||||
cmake_policy(SET CMP0057 NEW)
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
include(CheckIncludeFile)
|
include(CheckIncludeFile)
|
||||||
include(CMakeDependentOption)
|
|
||||||
|
|
||||||
# CMAKE_TOOLCHAIN_FILE must be set before `project' is called, which
|
# CMAKE_TOOLCHAIN_FILE must be set before `project' is called, which
|
||||||
# configures the base build environment and references the toolchain file
|
# configures the base build environment and references the toolchain file
|
||||||
|
@ -161,8 +146,8 @@ endif ()
|
||||||
project(freetype C)
|
project(freetype C)
|
||||||
|
|
||||||
set(VERSION_MAJOR "2")
|
set(VERSION_MAJOR "2")
|
||||||
set(VERSION_MINOR "12")
|
set(VERSION_MINOR "10")
|
||||||
set(VERSION_PATCH "1")
|
set(VERSION_PATCH "2")
|
||||||
|
|
||||||
# Generate LIBRARY_VERSION and LIBRARY_SOVERSION.
|
# Generate LIBRARY_VERSION and LIBRARY_SOVERSION.
|
||||||
set(LIBTOOL_REGEX "version_info='([0-9]+):([0-9]+):([0-9]+)'")
|
set(LIBTOOL_REGEX "version_info='([0-9]+):([0-9]+):([0-9]+)'")
|
||||||
|
@ -183,37 +168,13 @@ string(REGEX REPLACE
|
||||||
math(EXPR LIBRARY_SOVERSION "${LIBTOOL_CURRENT} - ${LIBTOOL_AGE}")
|
math(EXPR LIBRARY_SOVERSION "${LIBTOOL_CURRENT} - ${LIBTOOL_AGE}")
|
||||||
set(LIBRARY_VERSION "${LIBRARY_SOVERSION}.${LIBTOOL_AGE}.${LIBTOOL_REVISION}")
|
set(LIBRARY_VERSION "${LIBRARY_SOVERSION}.${LIBTOOL_AGE}.${LIBTOOL_REVISION}")
|
||||||
|
|
||||||
# External dependency library detection is automatic. See the notes at the
|
# External dependency library detection is automatic. See the notes at the top
|
||||||
# top of this file, for how to force or disable dependencies completely.
|
# of this file, for how to force or disable dependencies completely.
|
||||||
option(FT_DISABLE_ZLIB
|
option(FT_WITH_ZLIB "Use system zlib instead of internal library." OFF)
|
||||||
"Disable use of system zlib and use internal zlib library instead." OFF)
|
option(FT_WITH_BZIP2 "Support bzip2 compressed fonts." OFF)
|
||||||
cmake_dependent_option(FT_REQUIRE_ZLIB
|
option(FT_WITH_PNG "Support PNG compressed OpenType embedded bitmaps." OFF)
|
||||||
"Require system zlib instead of internal zlib library." OFF
|
option(FT_WITH_HARFBUZZ "Improve auto-hinting of OpenType fonts." OFF)
|
||||||
"NOT FT_DISABLE_ZLIB" OFF)
|
option(FT_WITH_BROTLI "Support compressed WOFF2 fonts." OFF)
|
||||||
|
|
||||||
option(FT_DISABLE_BZIP2
|
|
||||||
"Disable support of bzip2 compressed fonts." OFF)
|
|
||||||
cmake_dependent_option(FT_REQUIRE_BZIP2
|
|
||||||
"Require support of bzip2 compressed fonts." OFF
|
|
||||||
"NOT FT_DISABLE_BZIP2" OFF)
|
|
||||||
|
|
||||||
option(FT_DISABLE_PNG
|
|
||||||
"Disable support of PNG compressed OpenType embedded bitmaps." OFF)
|
|
||||||
cmake_dependent_option(FT_REQUIRE_PNG
|
|
||||||
"Require support of PNG compressed OpenType embedded bitmaps." OFF
|
|
||||||
"NOT FT_DISABLE_PNG" OFF)
|
|
||||||
|
|
||||||
option(FT_DISABLE_HARFBUZZ
|
|
||||||
"Disable HarfBuzz (used for improving auto-hinting of OpenType fonts)." OFF)
|
|
||||||
cmake_dependent_option(FT_REQUIRE_HARFBUZZ
|
|
||||||
"Require HarfBuzz for improving auto-hinting of OpenType fonts." OFF
|
|
||||||
"NOT FT_DISABLE_HARFBUZZ" OFF)
|
|
||||||
|
|
||||||
option(FT_DISABLE_BROTLI
|
|
||||||
"Disable support of compressed WOFF2 fonts." OFF)
|
|
||||||
cmake_dependent_option(FT_REQUIRE_BROTLI
|
|
||||||
"Require support of compressed WOFF2 fonts." OFF
|
|
||||||
"NOT FT_DISABLE_BROTLI" OFF)
|
|
||||||
|
|
||||||
|
|
||||||
# Disallow in-source builds
|
# Disallow in-source builds
|
||||||
|
@ -238,58 +199,41 @@ if (BUILD_FRAMEWORK)
|
||||||
message(FATAL_ERROR
|
message(FATAL_ERROR
|
||||||
"You should use Xcode generator with BUILD_FRAMEWORK enabled")
|
"You should use Xcode generator with BUILD_FRAMEWORK enabled")
|
||||||
endif ()
|
endif ()
|
||||||
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD)")
|
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
|
||||||
set(BUILD_SHARED_LIBS ON)
|
set(BUILD_SHARED_LIBS ON)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
# Find dependencies
|
# Find dependencies
|
||||||
include(FindPkgConfig)
|
set(HARFBUZZ_MIN_VERSION "1.8.0")
|
||||||
|
if (FT_WITH_HARFBUZZ)
|
||||||
if (NOT FT_DISABLE_HARFBUZZ)
|
find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION} REQUIRED)
|
||||||
set(HARFBUZZ_MIN_VERSION "2.0.0")
|
else ()
|
||||||
if (FT_REQUIRE_HARFBUZZ)
|
find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION})
|
||||||
find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION} REQUIRED)
|
|
||||||
else ()
|
|
||||||
find_package(HarfBuzz ${HARFBUZZ_MIN_VERSION})
|
|
||||||
endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT FT_DISABLE_PNG)
|
if (FT_WITH_PNG)
|
||||||
if (FT_REQUIRE_PNG)
|
find_package(PNG REQUIRED)
|
||||||
find_package(PNG REQUIRED)
|
else ()
|
||||||
else ()
|
find_package(PNG)
|
||||||
find_package(PNG)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT FT_DISABLE_ZLIB)
|
if (FT_WITH_ZLIB)
|
||||||
if (FT_REQUIRE_ZLIB)
|
find_package(ZLIB REQUIRED)
|
||||||
find_package(ZLIB REQUIRED)
|
else ()
|
||||||
else ()
|
find_package(ZLIB)
|
||||||
find_package(ZLIB)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT FT_DISABLE_BZIP2)
|
if (FT_WITH_BZIP2)
|
||||||
# Genuine BZip2 does not provide bzip2.pc, but some platforms have it.
|
find_package(BZip2 REQUIRED)
|
||||||
# For better dependency in freetype2.pc, bzip2.pc is searched
|
else ()
|
||||||
# regardless of the availability of libbz2. If bzip2.pc is found,
|
find_package(BZip2)
|
||||||
# Requires.private is used instead of Libs.private.
|
|
||||||
if (FT_REQUIRE_BZIP2)
|
|
||||||
find_package(BZip2 REQUIRED)
|
|
||||||
else ()
|
|
||||||
find_package(BZip2)
|
|
||||||
endif ()
|
|
||||||
pkg_check_modules(PC_BZIP2 bzip2)
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
if (NOT FT_DISABLE_BROTLI)
|
if (FT_WITH_BROTLI)
|
||||||
if (FT_REQUIRE_BROTLI)
|
find_package(BrotliDec REQUIRED)
|
||||||
find_package(BrotliDec REQUIRED)
|
else ()
|
||||||
else ()
|
find_package(BrotliDec)
|
||||||
find_package(BrotliDec)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Create the configuration file
|
# Create the configuration file
|
||||||
|
@ -403,10 +347,8 @@ set(BASE_SRCS
|
||||||
src/pshinter/pshinter.c
|
src/pshinter/pshinter.c
|
||||||
src/psnames/psnames.c
|
src/psnames/psnames.c
|
||||||
src/raster/raster.c
|
src/raster/raster.c
|
||||||
src/sdf/sdf.c
|
|
||||||
src/sfnt/sfnt.c
|
src/sfnt/sfnt.c
|
||||||
src/smooth/smooth.c
|
src/smooth/smooth.c
|
||||||
src/svg/svg.c
|
|
||||||
src/truetype/truetype.c
|
src/truetype/truetype.c
|
||||||
src/type1/type1.c
|
src/type1/type1.c
|
||||||
src/type42/type42.c
|
src/type42/type42.c
|
||||||
|
@ -415,8 +357,6 @@ set(BASE_SRCS
|
||||||
|
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
list(APPEND BASE_SRCS "builds/unix/ftsystem.c")
|
list(APPEND BASE_SRCS "builds/unix/ftsystem.c")
|
||||||
elseif (WIN32)
|
|
||||||
list(APPEND BASE_SRCS "builds/windows/ftsystem.c")
|
|
||||||
else ()
|
else ()
|
||||||
list(APPEND BASE_SRCS "src/base/ftsystem.c")
|
list(APPEND BASE_SRCS "src/base/ftsystem.c")
|
||||||
endif ()
|
endif ()
|
||||||
|
@ -480,7 +420,7 @@ target_include_directories(
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/include
|
${CMAKE_CURRENT_BINARY_DIR}/include
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||||
|
|
||||||
# Make <ftconfig.h> available for builds/unix/ftsystem.c.
|
# Make <ftconfig.h> available for builds/unix/ftsystem.c.
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/include/freetype/config
|
${CMAKE_CURRENT_BINARY_DIR}/include/freetype/config
|
||||||
)
|
)
|
||||||
|
@ -492,55 +432,41 @@ if (BUILD_FRAMEWORK)
|
||||||
)
|
)
|
||||||
set_target_properties(freetype PROPERTIES
|
set_target_properties(freetype PROPERTIES
|
||||||
FRAMEWORK TRUE
|
FRAMEWORK TRUE
|
||||||
MACOSX_FRAMEWORK_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/builds/mac/freetype-Info.plist
|
MACOSX_FRAMEWORK_INFO_PLIST builds/mac/freetype-Info.plist
|
||||||
PUBLIC_HEADER "${PUBLIC_HEADERS}"
|
PUBLIC_HEADER "${PUBLIC_HEADERS}"
|
||||||
XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
|
XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
|
||||||
)
|
)
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# 'freetype-interface' is an interface library, to be accessed with
|
|
||||||
# `EXPORT_NAME Freetype::Freetype`. This is the target name provided by
|
|
||||||
# CMake's `FindFreetype.cmake`, so we provide it for compatibility.
|
|
||||||
add_library(freetype-interface INTERFACE)
|
|
||||||
set_target_properties(freetype-interface PROPERTIES
|
|
||||||
EXPORT_NAME Freetype::Freetype
|
|
||||||
INTERFACE_LINK_LIBRARIES freetype)
|
|
||||||
|
|
||||||
set(PKGCONFIG_REQUIRES "")
|
set(PKG_CONFIG_REQUIRED_PRIVATE "")
|
||||||
set(PKGCONFIG_REQUIRES_PRIVATE "")
|
|
||||||
set(PKGCONFIG_LIBS "-L\${libdir} -lfreetype")
|
|
||||||
set(PKGCONFIG_LIBS_PRIVATE "")
|
|
||||||
|
|
||||||
if (ZLIB_FOUND)
|
if (ZLIB_FOUND)
|
||||||
target_link_libraries(freetype PRIVATE ${ZLIB_LIBRARIES})
|
target_link_libraries(freetype PRIVATE ${ZLIB_LIBRARIES})
|
||||||
target_include_directories(freetype PRIVATE ${ZLIB_INCLUDE_DIRS})
|
target_include_directories(freetype PRIVATE ${ZLIB_INCLUDE_DIRS})
|
||||||
list(APPEND PKGCONFIG_REQUIRES_PRIVATE "zlib")
|
list(APPEND PKG_CONFIG_REQUIRED_PRIVATE "zlib")
|
||||||
endif ()
|
endif ()
|
||||||
if (BZIP2_FOUND)
|
if (BZIP2_FOUND)
|
||||||
target_link_libraries(freetype PRIVATE ${BZIP2_LIBRARIES})
|
target_link_libraries(freetype PRIVATE ${BZIP2_LIBRARIES})
|
||||||
target_include_directories(freetype PRIVATE ${BZIP2_INCLUDE_DIR}) # not BZIP2_INCLUDE_DIRS
|
target_include_directories(freetype PRIVATE ${BZIP2_INCLUDE_DIR}) # not BZIP2_INCLUDE_DIRS
|
||||||
if (PC_BZIP2_FOUND)
|
list(APPEND PKG_CONFIG_REQUIRED_PRIVATE "bzip2")
|
||||||
list(APPEND PKGCONFIG_REQUIRES_PRIVATE "bzip2")
|
|
||||||
else ()
|
|
||||||
list(APPEND PKGCONFIG_LIBS_PRIVATE "-lbz2")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
if (PNG_FOUND)
|
if (PNG_FOUND)
|
||||||
target_link_libraries(freetype PRIVATE ${PNG_LIBRARIES})
|
target_link_libraries(freetype PRIVATE ${PNG_LIBRARIES})
|
||||||
target_compile_definitions(freetype PRIVATE ${PNG_DEFINITIONS})
|
target_compile_definitions(freetype PRIVATE ${PNG_DEFINITIONS})
|
||||||
target_include_directories(freetype PRIVATE ${PNG_INCLUDE_DIRS})
|
target_include_directories(freetype PRIVATE ${PNG_INCLUDE_DIRS})
|
||||||
list(APPEND PKGCONFIG_REQUIRES_PRIVATE "libpng")
|
list(APPEND PKG_CONFIG_REQUIRED_PRIVATE "libpng")
|
||||||
endif ()
|
endif ()
|
||||||
if (HarfBuzz_FOUND)
|
if (HARFBUZZ_FOUND)
|
||||||
target_link_libraries(freetype PRIVATE ${HarfBuzz_LIBRARY})
|
target_link_libraries(freetype PRIVATE ${HARFBUZZ_LIBRARIES})
|
||||||
target_include_directories(freetype PRIVATE ${HarfBuzz_INCLUDE_DIRS})
|
target_include_directories(freetype PRIVATE ${HARFBUZZ_INCLUDE_DIRS})
|
||||||
list(APPEND PKGCONFIG_REQUIRES_PRIVATE "harfbuzz >= ${HARFBUZZ_MIN_VERSION}")
|
list(APPEND PKG_CONFIG_REQUIRED_PRIVATE "harfbuzz >= ${HARFBUZZ_MIN_VERSION}")
|
||||||
endif ()
|
endif ()
|
||||||
if (BROTLIDEC_FOUND)
|
if (BROTLIDEC_FOUND)
|
||||||
target_link_libraries(freetype PRIVATE ${BROTLIDEC_LIBRARIES})
|
target_link_libraries(freetype PRIVATE ${BROTLIDEC_LIBRARIES})
|
||||||
target_compile_definitions(freetype PRIVATE ${BROTLIDEC_DEFINITIONS})
|
target_compile_definitions(freetype PRIVATE ${BROTLIDEC_DEFINITIONS})
|
||||||
target_include_directories(freetype PRIVATE ${BROTLIDEC_INCLUDE_DIRS})
|
target_include_directories(freetype PRIVATE ${BROTLIDEC_INCLUDE_DIRS})
|
||||||
list(APPEND PKGCONFIG_REQUIRES_PRIVATE "libbrotlidec")
|
list(APPEND PKG_CONFIG_REQUIRED_PRIVATE "libbrotlidec")
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
|
@ -565,64 +491,44 @@ endif ()
|
||||||
|
|
||||||
if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
|
if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
|
||||||
# Generate the pkg-config file
|
# Generate the pkg-config file
|
||||||
file(READ "${PROJECT_SOURCE_DIR}/builds/unix/freetype2.in" FREETYPE2_PC_IN)
|
if (UNIX)
|
||||||
|
file(READ "${PROJECT_SOURCE_DIR}/builds/unix/freetype2.in" FREETYPE2_PC_IN)
|
||||||
|
|
||||||
string(REPLACE ";" ", " PKGCONFIG_REQUIRES_PRIVATE "${PKGCONFIG_REQUIRES_PRIVATE}")
|
string(REPLACE ";" ", " PKG_CONFIG_REQUIRED_PRIVATE "${PKG_CONFIG_REQUIRED_PRIVATE}")
|
||||||
|
|
||||||
string(REPLACE "%prefix%" ${CMAKE_INSTALL_PREFIX}
|
string(REPLACE "%prefix%" ${CMAKE_INSTALL_PREFIX}
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
||||||
string(REPLACE "%exec_prefix%" "\${prefix}"
|
string(REPLACE "%exec_prefix%" "\${prefix}"
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
||||||
string(REPLACE "%libdir%" "\${prefix}/${CMAKE_INSTALL_LIBDIR}"
|
string(REPLACE "%libdir%" "\${prefix}/${CMAKE_INSTALL_LIBDIR}"
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
||||||
string(REPLACE "%includedir%" "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}"
|
string(REPLACE "%includedir%" "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}"
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
||||||
string(REPLACE "%ft_version%" "${LIBTOOL_CURRENT}.${LIBTOOL_REVISION}.${LIBTOOL_AGE}"
|
string(REPLACE "%ft_version%" "${LIBTOOL_CURRENT}.${LIBTOOL_REVISION}.${LIBTOOL_AGE}"
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
||||||
|
string(REPLACE "%REQUIRES_PRIVATE%" "${PKG_CONFIG_REQUIRED_PRIVATE}"
|
||||||
|
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
||||||
|
string(REPLACE "%LIBS_PRIVATE%" "" # All libs support pkg-config
|
||||||
|
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
||||||
|
|
||||||
if (BUILD_SHARED_LIBS)
|
set(FREETYPE2_PC_IN_NAME "${PROJECT_BINARY_DIR}/freetype2.pc")
|
||||||
string(REPLACE "%PKGCONFIG_REQUIRES%" "${PKGCONFIG_REQUIRES}"
|
if (EXISTS "${FREETYPE2_PC_IN_NAME}")
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
file(READ "${FREETYPE2_PC_IN_NAME}" ORIGINAL_FREETYPE2_PC_IN)
|
||||||
string(REPLACE "%PKGCONFIG_REQUIRES_PRIVATE%" "${PKGCONFIG_REQUIRES_PRIVATE}"
|
else ()
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
set(ORIGINAL_FREETYPE2_PC_IN "")
|
||||||
string(REPLACE "%PKGCONFIG_LIBS%" "${PKGCONFIG_LIBS}"
|
endif ()
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
if (NOT (ORIGINAL_FREETYPE2_PC_IN STREQUAL FREETYPE2_PC_IN))
|
||||||
string(REPLACE "%PKGCONFIG_LIBS_PRIVATE%" "${PKGCONFIG_LIBS_PRIVATE}"
|
file(WRITE "${FREETYPE2_PC_IN_NAME}" ${FREETYPE2_PC_IN})
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
endif ()
|
||||||
else ()
|
|
||||||
string(REPLACE "%PKGCONFIG_REQUIRES%" "${PKGCONFIG_REQUIRES} ${PKGCONFIG_REQUIRES_PRIVATE}"
|
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
|
||||||
string(REPLACE "%PKGCONFIG_REQUIRES_PRIVATE%" ""
|
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
|
||||||
string(REPLACE "%PKGCONFIG_LIBS%" "${PKGCONFIG_LIBS} ${PKGCONFIG_LIBS_PRIVATE}"
|
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
|
||||||
string(REPLACE "%PKGCONFIG_LIBS_PRIVATE%" ""
|
|
||||||
FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
set(FREETYPE2_PC_IN_NAME "${PROJECT_BINARY_DIR}/freetype2.pc")
|
install(
|
||||||
if (EXISTS "${FREETYPE2_PC_IN_NAME}")
|
FILES ${PROJECT_BINARY_DIR}/freetype2.pc
|
||||||
file(READ "${FREETYPE2_PC_IN_NAME}" ORIGINAL_FREETYPE2_PC_IN)
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
||||||
else ()
|
COMPONENT pkgconfig)
|
||||||
set(ORIGINAL_FREETYPE2_PC_IN "")
|
|
||||||
endif ()
|
|
||||||
if (NOT (ORIGINAL_FREETYPE2_PC_IN STREQUAL FREETYPE2_PC_IN))
|
|
||||||
file(WRITE "${FREETYPE2_PC_IN_NAME}" ${FREETYPE2_PC_IN})
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
install(
|
install(
|
||||||
FILES ${PROJECT_BINARY_DIR}/freetype2.pc
|
TARGETS freetype
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig
|
|
||||||
COMPONENT pkgconfig)
|
|
||||||
|
|
||||||
include(CMakePackageConfigHelpers)
|
|
||||||
write_basic_package_version_file(
|
|
||||||
${PROJECT_BINARY_DIR}/freetype-config-version.cmake
|
|
||||||
VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}
|
|
||||||
COMPATIBILITY SameMajorVersion)
|
|
||||||
|
|
||||||
install(
|
|
||||||
TARGETS freetype freetype-interface
|
|
||||||
EXPORT freetype-targets
|
EXPORT freetype-targets
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
@ -634,10 +540,6 @@ if (NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL)
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/freetype
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/freetype
|
||||||
FILE freetype-config.cmake
|
FILE freetype-config.cmake
|
||||||
COMPONENT headers)
|
COMPONENT headers)
|
||||||
install(
|
|
||||||
FILES ${PROJECT_BINARY_DIR}/freetype-config-version.cmake
|
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/freetype
|
|
||||||
COMPONENT headers)
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
|
||||||
|
@ -645,7 +547,7 @@ endif ()
|
||||||
set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
|
set(CPACK_PACKAGE_NAME ${CMAKE_PROJECT_NAME})
|
||||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The FreeType font rendering library.")
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "The FreeType font rendering library.")
|
||||||
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
|
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
|
||||||
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.TXT")
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/docs/LICENSE.TXT")
|
||||||
|
|
||||||
set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
|
set(CPACK_PACKAGE_VERSION_MAJOR ${VERSION_MAJOR})
|
||||||
set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
|
set(CPACK_PACKAGE_VERSION_MINOR ${VERSION_MINOR})
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -2597,7 +2597,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2000-2022 by
|
Copyright (C) 2000-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
|
@ -9422,7 +9422,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2002-2022 by
|
Copyright (C) 2002-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
|
@ -2821,7 +2821,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2005-2022 by
|
Copyright (C) 2005-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
|
@ -7932,7 +7932,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2006-2022 by
|
Copyright (C) 2006-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
|
@ -707,7 +707,7 @@
|
||||||
[base] Fix integer overflow.
|
[base] Fix integer overflow.
|
||||||
|
|
||||||
* src/base/ftoutln.c (FT_Outline_EmboldenXY): Normalize incoming and
|
* src/base/ftoutln.c (FT_Outline_EmboldenXY): Normalize incoming and
|
||||||
outgoing vectors and use fixed-point arithmetic.
|
outgoing vectors and use fixed point arithmetic.
|
||||||
|
|
||||||
2013-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
|
2013-01-23 Alexei Podtelezhnikov <apodtele@gmail.com>
|
||||||
|
|
||||||
|
@ -6344,7 +6344,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2010-2022 by
|
Copyright (C) 2010-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
|
@ -5145,7 +5145,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2013-2022 by
|
Copyright (C) 2013-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
|
@ -5695,7 +5695,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2015-2022 by
|
Copyright (C) 2015-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
|
@ -2090,7 +2090,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2016-2022 by
|
Copyright (C) 2016-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
|
@ -3120,7 +3120,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2016-2022 by
|
Copyright (C) 2016-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
|
@ -2336,7 +2336,7 @@
|
||||||
|
|
||||||
----------------------------------------------------------------------------
|
----------------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2017-2022 by
|
Copyright (C) 2017-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
42
LICENSE.TXT
42
LICENSE.TXT
|
@ -1,42 +0,0 @@
|
||||||
FREETYPE LICENSES
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
The FreeType 2 font engine is copyrighted work and cannot be used
|
|
||||||
legally without a software license. In order to make this project
|
|
||||||
usable to a vast majority of developers, we distribute it under two
|
|
||||||
mutually exclusive open-source licenses.
|
|
||||||
|
|
||||||
This means that *you* must choose *one* of the two licenses described
|
|
||||||
below, then obey all its terms and conditions when using FreeType 2 in
|
|
||||||
any of your projects or products.
|
|
||||||
|
|
||||||
- The FreeType License, found in the file `docs/FTL.TXT`, which is
|
|
||||||
similar to the original BSD license *with* an advertising clause
|
|
||||||
that forces you to explicitly cite the FreeType project in your
|
|
||||||
product's documentation. All details are in the license file.
|
|
||||||
This license is suited to products which don't use the GNU General
|
|
||||||
Public License.
|
|
||||||
|
|
||||||
Note that this license is compatible to the GNU General Public
|
|
||||||
License version 3, but not version 2.
|
|
||||||
|
|
||||||
- The GNU General Public License version 2, found in
|
|
||||||
`docs/GPLv2.TXT` (any later version can be used also), for
|
|
||||||
programs which already use the GPL. Note that the FTL is
|
|
||||||
incompatible with GPLv2 due to its advertisement clause.
|
|
||||||
|
|
||||||
The contributed BDF and PCF drivers come with a license similar to
|
|
||||||
that of the X Window System. It is compatible to the above two
|
|
||||||
licenses (see files `src/bdf/README` and `src/pcf/README`). The same
|
|
||||||
holds for the source code files `src/base/fthash.c` and
|
|
||||||
`include/freetype/internal/fthash.h`; they wer part of the BDF driver
|
|
||||||
in earlier FreeType versions.
|
|
||||||
|
|
||||||
The gzip module uses the zlib license (see `src/gzip/zlib.h`) which
|
|
||||||
too is compatible to the above two licenses.
|
|
||||||
|
|
||||||
The MD5 checksum support (only used for debugging in development
|
|
||||||
builds) is in the public domain.
|
|
||||||
|
|
||||||
|
|
||||||
--- end of LICENSE.TXT ---
|
|
2
Makefile
2
Makefile
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
116
README
116
README
|
@ -1,100 +1,92 @@
|
||||||
FreeType 2.12.1
|
FreeType 2.10.2
|
||||||
===============
|
===============
|
||||||
|
|
||||||
Homepage: https://www.freetype.org
|
Homepage: https://www.freetype.org
|
||||||
|
|
||||||
FreeType is a freely available software library to render fonts.
|
FreeType is a freely available software library to render fonts.
|
||||||
|
|
||||||
It is written in C, designed to be small, efficient, highly
|
It is written in C, designed to be small, efficient, highly
|
||||||
customizable, and portable while capable of producing high-quality
|
customizable, and portable while capable of producing high-quality
|
||||||
output (glyph images) of most vector and bitmap font formats.
|
output (glyph images) of most vector and bitmap font formats.
|
||||||
|
|
||||||
Please read the `docs/CHANGES` file, it contains IMPORTANT
|
Please read the docs/CHANGES file, it contains IMPORTANT
|
||||||
INFORMATION.
|
INFORMATION.
|
||||||
|
|
||||||
Read the files `docs/INSTALL*` for installation instructions; see the
|
Read the files `docs/INSTALL*' for installation instructions; see
|
||||||
file `docs/LICENSE.TXT` for the available licenses.
|
the file `docs/LICENSE.TXT' for the available licenses.
|
||||||
|
|
||||||
For using FreeType's git repository instead of a distribution bundle,
|
The FreeType 2 API reference is located in `docs/reference/site';
|
||||||
please read file `README.git`. Note that you have to actually clone
|
use the file `index.html' as the top entry point. [Please note that
|
||||||
the repository; using a snapshot will not work (in other words, don't
|
currently the search function for locally installed documentation
|
||||||
use gitlab's 'Download' button).
|
doesn't work due to cross-site scripting issues.]
|
||||||
|
|
||||||
The FreeType 2 API reference is located in directory `docs/reference`;
|
Additional documentation is available as a separate package from our
|
||||||
use the file `index.html` as the top entry point. [Please note that
|
sites. Go to
|
||||||
currently the search function for locally installed documentation
|
|
||||||
doesn't work due to cross-site scripting issues.]
|
|
||||||
|
|
||||||
Additional documentation is available as a separate package from our
|
https://download.savannah.gnu.org/releases/freetype/
|
||||||
sites. Go to
|
|
||||||
|
|
||||||
https://download.savannah.gnu.org/releases/freetype/
|
and download one of the following files.
|
||||||
|
|
||||||
and download one of the following files.
|
freetype-doc-2.10.2.tar.xz
|
||||||
|
freetype-doc-2.10.2.tar.gz
|
||||||
|
ftdoc2102.zip
|
||||||
|
|
||||||
freetype-doc-2.12.1.tar.xz
|
To view the documentation online, go to
|
||||||
freetype-doc-2.12.1.tar.gz
|
|
||||||
ftdoc2121.zip
|
|
||||||
|
|
||||||
To view the documentation online, go to
|
https://www.freetype.org/freetype2/docs/
|
||||||
|
|
||||||
https://www.freetype.org/freetype2/docs/
|
|
||||||
|
|
||||||
|
|
||||||
Mailing Lists
|
Mailing Lists
|
||||||
-------------
|
=============
|
||||||
|
|
||||||
The preferred way of communication with the FreeType team is using
|
The preferred way of communication with the FreeType team is using
|
||||||
e-mail lists.
|
e-mail lists.
|
||||||
|
|
||||||
general use and discussion: freetype@nongnu.org
|
general use and discussion: freetype@nongnu.org
|
||||||
engine internals, porting, etc.: freetype-devel@nongnu.org
|
engine internals, porting, etc.: freetype-devel@nongnu.org
|
||||||
announcements: freetype-announce@nongnu.org
|
announcements: freetype-announce@nongnu.org
|
||||||
git repository tracker: freetype-commit@nongnu.org
|
git repository tracker: freetype-commit@nongnu.org
|
||||||
|
|
||||||
The lists are moderated; see
|
The lists are moderated; see
|
||||||
|
|
||||||
https://www.freetype.org/contact.html
|
https://www.freetype.org/contact.html
|
||||||
|
|
||||||
how to subscribe.
|
how to subscribe.
|
||||||
|
|
||||||
|
|
||||||
Bugs
|
Bugs
|
||||||
----
|
====
|
||||||
|
|
||||||
Please submit bug reports at
|
Please submit bug reports at
|
||||||
|
|
||||||
https://gitlab.freedesktop.org/freetype/freetype/-/issues
|
https://savannah.nongnu.org/bugs/?group=freetype
|
||||||
|
|
||||||
Alternatively, you might report bugs by e-mail to
|
Alternatively, you might report bugs by e-mail to
|
||||||
`freetype-devel@nongnu.org`. Don't forget to send a detailed
|
`freetype-devel@nongnu.org'. Don't forget to send a detailed
|
||||||
explanation of the problem -- there is nothing worse than receiving a
|
explanation of the problem -- there is nothing worse than receiving
|
||||||
terse message that only says 'it doesn't work'.
|
a terse message that only says `it doesn't work'.
|
||||||
|
|
||||||
|
|
||||||
Patches
|
Patches
|
||||||
-------
|
=======
|
||||||
|
|
||||||
For larger changes please provide merge requests at
|
Please submit patches to the `freetype-devel@nongnu.org' mailing
|
||||||
|
list -- and thank you in advance for your work on improving
|
||||||
|
FreeType!
|
||||||
|
|
||||||
https://gitlab.freedesktop.org/freetype/freetype/-/merge_requests
|
Details on the process can be found here:
|
||||||
|
|
||||||
Alternatively, you can send patches to the `freetype-devel@nongnu.org`
|
https://www.freetype.org/developer.html#patches
|
||||||
mailing list -- and thank you in advance for your work on improving
|
|
||||||
FreeType!
|
|
||||||
|
|
||||||
Details on the process can be found here:
|
|
||||||
|
|
||||||
https://www.freetype.org/developer.html#patches
|
|
||||||
|
|
||||||
|
|
||||||
Enjoy!
|
Enjoy!
|
||||||
|
|
||||||
The FreeType Team
|
|
||||||
|
The FreeType Team
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2006-2022 by
|
Copyright (C) 2006-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used,
|
This file is part of the FreeType project, and may only be used,
|
||||||
|
|
80
README.git
80
README.git
|
@ -1,36 +1,4 @@
|
||||||
README.git
|
The git archive doesn't contain pre-built configuration scripts for
|
||||||
==========
|
|
||||||
|
|
||||||
|
|
||||||
repository issues
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
FreeType's official repository site is
|
|
||||||
|
|
||||||
https://gitlab.freedesktop.org/freetype ,
|
|
||||||
|
|
||||||
from which the 'freetype.git' and 'freetype-demos.git' repositories
|
|
||||||
can be cloned in the usual way.
|
|
||||||
|
|
||||||
git clone https://gitlab.freedesktop.org/freetype/freetype.git
|
|
||||||
git clone https://gitlab.freedesktop.org/freetype/freetype-demos.git
|
|
||||||
|
|
||||||
If you want to use the Savannah mirror instead, you have to do a
|
|
||||||
slightly different incantation because the repository names contain
|
|
||||||
digit '2' for historical reasons.
|
|
||||||
|
|
||||||
git clone \
|
|
||||||
https://git.savannah.nongnu.org/git/freetype/freetype2.git \
|
|
||||||
freetype
|
|
||||||
git clone \
|
|
||||||
https://git.savannah.nongnu.org/git/freetype/freetype2-demos.git \
|
|
||||||
freetype-demos
|
|
||||||
|
|
||||||
|
|
||||||
standard builds with `configure`
|
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
The git repository doesn't contain pre-built configuration scripts for
|
|
||||||
UNIXish platforms. To generate them say
|
UNIXish platforms. To generate them say
|
||||||
|
|
||||||
sh autogen.sh
|
sh autogen.sh
|
||||||
|
@ -42,54 +10,34 @@ which in turn depends on the following packages:
|
||||||
autoconf (2.62)
|
autoconf (2.62)
|
||||||
|
|
||||||
The versions given in parentheses are known to work. Newer versions
|
The versions given in parentheses are known to work. Newer versions
|
||||||
should work too, of course. Note that `autogen.sh` also sets up
|
should work too, of course. Note that autogen.sh also sets up proper
|
||||||
proper file permissions for the `configure` and auxiliary scripts.
|
file permissions for the `configure' and auxiliary scripts.
|
||||||
|
|
||||||
The `autogen.sh` script checks whether the versions of the above three
|
The autogen.sh script now checks the version of above three packages
|
||||||
tools match the numbers above. Otherwise it will complain and suggest
|
whether they match the numbers above. Otherwise it will complain and
|
||||||
either upgrading or using environment variables to point to more
|
suggest either upgrading or using an environment variable to point to
|
||||||
recent versions of the required tools.
|
a more recent version of the required tool(s).
|
||||||
|
|
||||||
Note that `aclocal` is provided by the 'automake' package on Linux,
|
Note that `aclocal' is provided by the `automake' package on Linux,
|
||||||
and that `libtoolize` is called `glibtoolize` on Darwin (OS X).
|
and that `libtoolize' is called `glibtoolize' on Darwin (OS X).
|
||||||
|
|
||||||
|
|
||||||
alternative build methods
|
For static builds which don't use platform specific optimizations, no
|
||||||
-------------------------
|
|
||||||
|
|
||||||
For static builds that don't use platform-specific optimizations, no
|
|
||||||
configure script is necessary at all; saying
|
configure script is necessary at all; saying
|
||||||
|
|
||||||
make setup ansi
|
make setup ansi
|
||||||
make
|
make
|
||||||
|
|
||||||
should work on all platforms that have GNU `make` (or `makepp`).
|
should work on all platforms which have GNU make (or makepp).
|
||||||
|
|
||||||
A build with `cmake` or `meson` can be done directly from the git
|
|
||||||
repository. However, if you want to use the `FT_DEBUG_LOGGING` macro
|
|
||||||
(see file `docs/DEBUG` for more information) it is currently mandatory
|
|
||||||
to execute `autogen.sh` in advance; this script clones the 'dlg' git
|
|
||||||
submodule and copies some files into FreeType's source tree.
|
|
||||||
|
|
||||||
|
|
||||||
Code of Conduct
|
Similarly, a build with `cmake' can be done directly from the git
|
||||||
---------------
|
repository.
|
||||||
|
|
||||||
Please note that this project is released with a Contributor Code of
|
|
||||||
Conduct (CoC). By participating in this project you agree to abide by
|
|
||||||
its terms, which you can find in the following link:
|
|
||||||
|
|
||||||
https://www.freedesktop.org/wiki/CodeOfConduct
|
|
||||||
|
|
||||||
CoC issues may be raised to the project maintainers at the following
|
|
||||||
address:
|
|
||||||
|
|
||||||
wl@gnu.org
|
|
||||||
apodtele@gmail.com
|
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (C) 2005-2022 by
|
Copyright (C) 2005-2020 by
|
||||||
David Turner, Robert Wilhelm, and Werner Lemberg.
|
David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used,
|
This file is part of the FreeType project, and may only be used,
|
||||||
|
|
51
autogen.sh
51
autogen.sh
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
# Copyright (C) 2005-2022 by
|
# Copyright (C) 2005-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -110,10 +110,7 @@ check_tool_version ()
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Solaris 10's shell doesn't like the `!` operator to negate the exit status.
|
if test ! -f ./builds/unix/configure.raw; then
|
||||||
if test -f ./builds/unix/configure.raw; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
echo "You must be in the same directory as \`autogen.sh'."
|
echo "You must be in the same directory as \`autogen.sh'."
|
||||||
echo "Bootstrapping doesn't work if srcdir != builddir."
|
echo "Bootstrapping doesn't work if srcdir != builddir."
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -141,25 +138,18 @@ check_tool_version $ACLOCAL aclocal ACLOCAL 1.10.1
|
||||||
check_tool_version $LIBTOOLIZE libtoolize LIBTOOLIZE 2.2.4
|
check_tool_version $LIBTOOLIZE libtoolize LIBTOOLIZE 2.2.4
|
||||||
check_tool_version $AUTOCONF autoconf AUTOCONF 2.62
|
check_tool_version $AUTOCONF autoconf AUTOCONF 2.62
|
||||||
|
|
||||||
# This sets FREETYPE version.
|
# This sets freetype_major, freetype_minor, and freetype_patch.
|
||||||
eval `sed -n \
|
eval `sed -nf version.sed include/freetype/freetype.h`
|
||||||
-e 's/^#define *\(FREETYPE_MAJOR\) *\([0-9][0-9]*\).*/\1=\2/p' \
|
|
||||||
-e 's/^#define *\(FREETYPE_MINOR\) *\([0-9][0-9]*\).*/\1=\2/p' \
|
|
||||||
-e 's/^#define *\(FREETYPE_PATCH\) *\([0-9][0-9]*\).*/\1=\2/p' \
|
|
||||||
include/freetype/freetype.h`
|
|
||||||
|
|
||||||
if test "$FREETYPE_PATCH" = "0"; then
|
# We set freetype-patch to an empty value if it is zero.
|
||||||
FREETYPE=$FREETYPE_MAJOR.$FREETYPE_MINOR
|
if test "$freetype_patch" = ".0"; then
|
||||||
else
|
freetype_patch=
|
||||||
FREETYPE=$FREETYPE_MAJOR.$FREETYPE_MINOR.$FREETYPE_PATCH
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "FreeType $FREETYPE:"
|
|
||||||
|
|
||||||
cd builds/unix
|
cd builds/unix
|
||||||
|
|
||||||
echo "generating \`configure.ac'"
|
echo "generating \`configure.ac'"
|
||||||
sed -e "s;@VERSION@;$FREETYPE;" \
|
sed -e "s;@VERSION@;$freetype_major$freetype_minor$freetype_patch;" \
|
||||||
< configure.raw > configure.ac
|
< configure.raw > configure.ac
|
||||||
|
|
||||||
run aclocal -I . --force
|
run aclocal -I . --force
|
||||||
|
@ -172,29 +162,4 @@ cd ../..
|
||||||
|
|
||||||
chmod +x ./configure
|
chmod +x ./configure
|
||||||
|
|
||||||
# Copy all necessary 'dlg' files.
|
|
||||||
copy_submodule_files ()
|
|
||||||
{
|
|
||||||
echo "Copying files from \`subprojects/dlg' to \`src/dlg' and \`include/dlg'"
|
|
||||||
mkdir include/dlg 2> /dev/null
|
|
||||||
cp $DLG_INC_DIR/output.h include/dlg
|
|
||||||
cp $DLG_INC_DIR/dlg.h include/dlg
|
|
||||||
cp $DLG_SRC_DIR/* src/dlg
|
|
||||||
}
|
|
||||||
|
|
||||||
if test -e ".git"; then
|
|
||||||
DLG_INC_DIR=subprojects/dlg/include/dlg
|
|
||||||
DLG_SRC_DIR=subprojects/dlg/src/dlg
|
|
||||||
|
|
||||||
if test -d "$DLG_INC_DIR"; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
echo "Checking out submodule in \`subprojects/dlg':"
|
|
||||||
git submodule init
|
|
||||||
git submodule update
|
|
||||||
fi
|
|
||||||
|
|
||||||
copy_submodule_files
|
|
||||||
fi
|
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
|
|
|
@ -0,0 +1,232 @@
|
||||||
|
# This file is responsible for seting up several compiler enviorments.
|
||||||
|
# Once setup is done, the template "CI/build-cmake.yml" is invoked to test freetype
|
||||||
|
# compiles successfully on various operating systems and compilers liststed
|
||||||
|
# below. Artifacts of all builds are also published to azure.
|
||||||
|
|
||||||
|
# TODO: Add functionality tests
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
- master
|
||||||
|
|
||||||
|
variables:
|
||||||
|
vcpkgGitRef: a41c53c14794bb32cb03269069cdd3b66fedda5f # Update this git ref to update vcpkg
|
||||||
|
vckpgPackages: zlib bzip2 libpng harfbuzz
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
## Linux ##
|
||||||
|
- job: ArchLinux_Regression
|
||||||
|
displayName: "Archlinux Regression tests"
|
||||||
|
pool:
|
||||||
|
vmImage: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
Test1:
|
||||||
|
TEST: 0
|
||||||
|
Test2:
|
||||||
|
TEST: 1
|
||||||
|
Test3:
|
||||||
|
TEST: 2
|
||||||
|
|
||||||
|
timeoutInMinutes: 360
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
path: freetype2
|
||||||
|
|
||||||
|
- template: CI/arch-setup.yml
|
||||||
|
|
||||||
|
- template: CI/regression-test.yml
|
||||||
|
parameters:
|
||||||
|
preCMD: 'cd $(Build.BinariesDirectory) && cat << EOF | sudo ./root.x86_64/bin/arch-chroot ./root.x86_64/'
|
||||||
|
srcDIR: freetype2
|
||||||
|
postCMD: 'EOF'
|
||||||
|
testNum: $(TEST)
|
||||||
|
|
||||||
|
- job: ArchLinux_Autotools
|
||||||
|
displayName: "Archlinux Autotools"
|
||||||
|
pool:
|
||||||
|
vmImage: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
path: freetype2
|
||||||
|
|
||||||
|
- template: CI/arch-setup.yml
|
||||||
|
|
||||||
|
- template: CI/build-autotools.yml
|
||||||
|
|
||||||
|
- job: ArchLinux_Cmake
|
||||||
|
displayName: "Archlinux CMake"
|
||||||
|
pool:
|
||||||
|
vmImage: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
shared:
|
||||||
|
BUILD_SHARED_LIBS: true
|
||||||
|
BUILD_ARGS: '-G "Unix Makefiles" -D BUILD_SHARED_LIBS=$(BUILD_SHARED_LIBS)'
|
||||||
|
static:
|
||||||
|
BUILD_SHARED_LIBS: false
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
path: freetype2
|
||||||
|
|
||||||
|
- template: CI/arch-setup.yml
|
||||||
|
|
||||||
|
- template: CI/build-cmake.yml
|
||||||
|
parameters:
|
||||||
|
preCMD: 'cd $(Build.BinariesDirectory) && cat << EOF | sudo ./root.x86_64/bin/arch-chroot ./root.x86_64/'
|
||||||
|
srcDIR: freetype2
|
||||||
|
postCMD: 'EOF'
|
||||||
|
buildArgs: $(BUILD_ARGS)
|
||||||
|
|
||||||
|
## Windows ##
|
||||||
|
|
||||||
|
- job: MSVC_2019_CMake
|
||||||
|
displayName: "MVSC 2019 CMake"
|
||||||
|
pool:
|
||||||
|
vmImage: windows-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
i686_shared:
|
||||||
|
TRIPLET: x86-windows
|
||||||
|
BUILD_SHARED_LIBS: true
|
||||||
|
ARCH: Win32
|
||||||
|
x86_64_shared:
|
||||||
|
TRIPLET: x64-windows
|
||||||
|
BUILD_SHARED_LIBS: true
|
||||||
|
ARCH: x64
|
||||||
|
i686_static:
|
||||||
|
TRIPLET: x86-windows-static
|
||||||
|
BUILD_SHARED_LIBS: false
|
||||||
|
ARCH: Win32
|
||||||
|
x86_64_static:
|
||||||
|
TRIPLET: x64-windows-static
|
||||||
|
BUILD_SHARED_LIBS: false
|
||||||
|
ARCH: x64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- task: Cache@2
|
||||||
|
displayName: 'Cache VCPKG Artifacts'
|
||||||
|
inputs:
|
||||||
|
key: '"$(TRIPLET)" | "$(vckpgPackages)" | "$(vcpkgGitRef)" | "$(Agent.OS)"'
|
||||||
|
path: '$(Build.BinariesDirectory)/vcpkg'
|
||||||
|
|
||||||
|
- task: run-vcpkg@0
|
||||||
|
displayName: 'Run VCPKG'
|
||||||
|
inputs:
|
||||||
|
vcpkgArguments: --triplet $(TRIPLET) $(vckpgPackages)
|
||||||
|
vcpkgGitCommitId: $(vcpkgGitRef)
|
||||||
|
vcpkgGitURL: https://github.com/microsoft/vcpkg.git
|
||||||
|
|
||||||
|
- template: CI/build-cmake.yml
|
||||||
|
parameters:
|
||||||
|
buildArgs: '-G "Visual Studio 16 2019" -A $(ARCH) -D CMAKE_TOOLCHAIN_FILE=$(Build.BinariesDirectory)\vcpkg\scripts\buildsystems\vcpkg.cmake -D VCPKG_ROOT=$(Build.BinariesDirectory)\vcpkg -D VCPKG_TARGET_TRIPLET=$(TRIPLET) -D BUILD_SHARED_LIBS=$(BUILD_SHARED_LIBS)'
|
||||||
|
|
||||||
|
- job: MINGW_Autotools
|
||||||
|
displayName: "Mingw Autotools"
|
||||||
|
pool:
|
||||||
|
vmImage: windows-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
i686:
|
||||||
|
MINGW_UPPER: MINGW32
|
||||||
|
MINGW_LOWER: mingw32
|
||||||
|
MINGW_ARCH: i686
|
||||||
|
x86_64:
|
||||||
|
MINGW_UPPER: MINGW64
|
||||||
|
MINGW_LOWER: mingw64
|
||||||
|
MINGW_ARCH: x86_64
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- template: CI/mingw-setup.yml
|
||||||
|
|
||||||
|
- template: CI/build-autotools.yml
|
||||||
|
parameters:
|
||||||
|
mingw: true
|
||||||
|
|
||||||
|
- job: MINGW_CMake
|
||||||
|
displayName: "MingGW CMake"
|
||||||
|
pool:
|
||||||
|
vmImage: windows-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
i686_shared:
|
||||||
|
MINGW_UPPER: MINGW32
|
||||||
|
MINGW_LOWER: mingw32
|
||||||
|
MINGW_ARCH: i686
|
||||||
|
BUILD_SHARED_LIBS: true
|
||||||
|
x86_64_shared:
|
||||||
|
MINGW_UPPER: MINGW64
|
||||||
|
MINGW_LOWER: mingw64
|
||||||
|
MINGW_ARCH: x86_64
|
||||||
|
BUILD_SHARED_LIBS: true
|
||||||
|
i686_static:
|
||||||
|
MINGW_UPPER: MINGW32
|
||||||
|
MINGW_LOWER: mingw32
|
||||||
|
MINGW_ARCH: i686
|
||||||
|
BUILD_SHARED_LIBS: false
|
||||||
|
x86_64_static:
|
||||||
|
MINGW_UPPER: MINGW64
|
||||||
|
MINGW_LOWER: mingw64
|
||||||
|
MINGW_ARCH: x86_64
|
||||||
|
BUILD_SHARED_LIBS: false
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- template: CI/mingw-setup.yml
|
||||||
|
|
||||||
|
- template: CI/build-cmake.yml
|
||||||
|
parameters:
|
||||||
|
mingw: true
|
||||||
|
buildArgs: '-G \"MSYS Makefiles\" -D BUILD_SHARED_LIBS=$(BUILD_SHARED_LIBS)'
|
||||||
|
|
||||||
|
## MacOS X ##
|
||||||
|
|
||||||
|
- job: MacOS_X_Autotools
|
||||||
|
displayName: "MacOS X Autotools"
|
||||||
|
pool:
|
||||||
|
vmImage: macos-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh
|
||||||
|
bash ./install.sh
|
||||||
|
brew install autoconf automake
|
||||||
|
displayName: 'Install Brew'
|
||||||
|
|
||||||
|
- template: CI/build-autotools.yml
|
||||||
|
|
||||||
|
- job: MacOS_X_CMake
|
||||||
|
displayName: "MacOS X CMake"
|
||||||
|
pool:
|
||||||
|
vmImage: macos-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- template: CI/build-cmake.yml
|
||||||
|
parameters:
|
||||||
|
buildArgs: '-G Xcode -D BUILD_FRAMEWORK:BOOL=true'
|
||||||
|
|
||||||
|
### iOS ##
|
||||||
|
|
||||||
|
- job: iOS_CMake
|
||||||
|
displayName: "iOS CMake"
|
||||||
|
pool:
|
||||||
|
vmImage: macos-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
OS:
|
||||||
|
IOS_PLATFORM: OS
|
||||||
|
Simulator:
|
||||||
|
IOS_PLATFORM: SIMULATOR64
|
||||||
|
TV_OS:
|
||||||
|
IOS_PLATFORM: TVOS
|
||||||
|
TV_OS_Simulator:
|
||||||
|
IOS_PLATFORM: SIMULATOR_TVOS
|
||||||
|
Watch_OS:
|
||||||
|
IOS_PLATFORM: WATCHOS
|
||||||
|
Watch_OS_Simulator:
|
||||||
|
IOS_PLATFORM: SIMULATOR_WATCHOS
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- template: CI/build-cmake.yml
|
||||||
|
parameters:
|
||||||
|
buildArgs: '-G Xcode -D PLATFORM=$(IOS_PLATFORM)'
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
README for the builds/amiga subdirectory.
|
README for the builds/amiga subdirectory.
|
||||||
|
|
||||||
Copyright (C) 2005-2022 by
|
Copyright (C) 2005-2020 by
|
||||||
Werner Lemberg and Detlef Würkner.
|
Werner Lemberg and Detlef Würkner.
|
||||||
|
|
||||||
This file is part of the FreeType project, and may only be used, modified,
|
This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
/* */
|
/* */
|
||||||
/* Amiga-specific configuration file (specification only). */
|
/* Amiga-specific configuration file (specification only). */
|
||||||
/* */
|
/* */
|
||||||
/* Copyright (C) 2005-2022 by */
|
/* Copyright (C) 2005-2020 by */
|
||||||
/* Werner Lemberg and Detlef Würkner. */
|
/* Werner Lemberg and Detlef Würkner. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of the FreeType project, and may only be used, */
|
/* This file is part of the FreeType project, and may only be used, */
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
/* */
|
/* */
|
||||||
/* Amiga-specific FreeType module selection. */
|
/* Amiga-specific FreeType module selection. */
|
||||||
/* */
|
/* */
|
||||||
/* Copyright (C) 2005-2022 by */
|
/* Copyright (C) 2005-2020 by */
|
||||||
/* Werner Lemberg and Detlef Würkner. */
|
/* Werner Lemberg and Detlef Würkner. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of the FreeType project, and may only be used, */
|
/* This file is part of the FreeType project, and may only be used, */
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 2005-2022 by
|
# Copyright (C) 2005-2020 by
|
||||||
# Werner Lemberg and Detlef Würkner.
|
# Werner Lemberg and Detlef Würkner.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 2005-2022 by
|
# Copyright (C) 2005-2020 by
|
||||||
# Werner Lemberg and Detlef Würkner.
|
# Werner Lemberg and Detlef Würkner.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 2005-2022 by
|
# Copyright (C) 2005-2020 by
|
||||||
# Werner Lemberg and Detlef Würkner.
|
# Werner Lemberg and Detlef Würkner.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
*
|
*
|
||||||
* Debugging and logging component for amiga (body).
|
* Debugging and logging component for amiga (body).
|
||||||
*
|
*
|
||||||
* Copyright (C) 1996-2022 by
|
* Copyright (C) 1996-2020 by
|
||||||
* David Turner, Robert Wilhelm, Werner Lemberg, and Detlef Wuerkner.
|
* David Turner, Robert Wilhelm, Werner Lemberg, and Detlef Wuerkner.
|
||||||
*
|
*
|
||||||
* This file is part of the FreeType project, and may only be used,
|
* This file is part of the FreeType project, and may only be used,
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
/* */
|
/* */
|
||||||
/* Amiga-specific FreeType low-level system interface (body). */
|
/* Amiga-specific FreeType low-level system interface (body). */
|
||||||
/* */
|
/* */
|
||||||
/* Copyright (C) 1996-2022 by */
|
/* Copyright (C) 1996-2020 by */
|
||||||
/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */
|
/* David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of the FreeType project, and may only be used, */
|
/* This file is part of the FreeType project, and may only be used, */
|
||||||
|
@ -264,7 +264,7 @@ Free_VecPooled( APTR poolHeader,
|
||||||
|
|
||||||
stream->descriptor.pointer = NULL;
|
stream->descriptor.pointer = NULL;
|
||||||
stream->size = 0;
|
stream->size = 0;
|
||||||
stream->base = NULL;
|
stream->base = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -13,11 +13,11 @@
|
||||||
# fully.
|
# fully.
|
||||||
|
|
||||||
|
|
||||||
DELETE := rm -f
|
DELETE := rm -f
|
||||||
CAT := cat
|
CAT := cat
|
||||||
SEP := /
|
SEP := /
|
||||||
PLATFORM_DIR := $(TOP_DIR)/builds/ansi
|
BUILD_DIR := $(TOP_DIR)/builds/ansi
|
||||||
PLATFORM := ansi
|
PLATFORM := ansi
|
||||||
|
|
||||||
# This is used for `make refdoc' and `make refdoc-venv'
|
# This is used for `make refdoc' and `make refdoc-venv'
|
||||||
#
|
#
|
||||||
|
@ -64,14 +64,14 @@ T := -o$(space)
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -c
|
CFLAGS ?= -c
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?=
|
ANSIFLAGS :=
|
||||||
|
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -15,7 +15,7 @@ To compile FreeType 2 as a library the following changes must be applied:
|
||||||
|
|
||||||
INCLUDE;E:\freetype2\include
|
INCLUDE;E:\freetype2\include
|
||||||
|
|
||||||
- The file `freetype/include/Ft2build.h' must be patched as follows to
|
- The file `freetype2/include/Ft2build.h' must be patched as follows to
|
||||||
include ATARI.H:
|
include ATARI.H:
|
||||||
|
|
||||||
#ifndef FT2_BUILD_GENERIC_H_
|
#ifndef FT2_BUILD_GENERIC_H_
|
||||||
|
@ -40,7 +40,7 @@ ge
|
||||||
|
|
||||||
INCLUDE;E:\freetype2\include
|
INCLUDE;E:\freetype2\include
|
||||||
|
|
||||||
- In der Datei freetype/include/Ft2build.h muss zu Beginn
|
- In der Datei freetype2/include/Ft2build.h muss zu Beginn
|
||||||
ein #include "ATARI.H" wie folgt eingef<65>gt werden:
|
ein #include "ATARI.H" wie folgt eingef<65>gt werden:
|
||||||
|
|
||||||
#ifndef FT2_BUILD_GENERIC_H_
|
#ifndef FT2_BUILD_GENERIC_H_
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -15,11 +15,11 @@
|
||||||
# fully.
|
# fully.
|
||||||
|
|
||||||
|
|
||||||
DELETE := rm -f
|
DELETE := rm -f
|
||||||
CAT := cat
|
CAT := cat
|
||||||
SEP := /
|
SEP := /
|
||||||
PLATFORM_DIR := $(TOP_DIR)/builds/beos
|
BUILD_DIR := $(TOP_DIR)/builds/beos
|
||||||
PLATFORM := beos
|
PLATFORM := beos
|
||||||
|
|
||||||
# This is used for `make refdoc' and `make refdoc-venv'
|
# This is used for `make refdoc' and `make refdoc-venv'
|
||||||
#
|
#
|
||||||
|
@ -66,14 +66,14 @@ T := -o$(space)
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -c
|
CFLAGS ?= -c
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?=
|
ANSIFLAGS :=
|
||||||
|
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# FreeType 2 configuration rules for a BeOS system
|
# FreeType 2 configuration rules for a BeOS system
|
||||||
#
|
#
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -27,11 +27,11 @@ endif
|
||||||
|
|
||||||
ifeq ($(PLATFORM),beos)
|
ifeq ($(PLATFORM),beos)
|
||||||
|
|
||||||
DELETE := rm -f
|
DELETE := rm -f
|
||||||
CAT := cat
|
CAT := cat
|
||||||
SEP := /
|
SEP := /
|
||||||
PLATFORM_DIR := $(TOP_DIR)/builds/beos
|
BUILD_DIR := $(TOP_DIR)/builds/beos
|
||||||
CONFIG_FILE := beos.mk
|
CONFIG_FILE := beos.mk
|
||||||
|
|
||||||
setup: std_setup
|
setup: std_setup
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# FindBrotliDec.cmake
|
# FindBrotliDec.cmake
|
||||||
#
|
#
|
||||||
# Copyright (C) 2019-2022 by
|
# Copyright (C) 2019-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# Written by Werner Lemberg <wl@gnu.org>
|
# Written by Werner Lemberg <wl@gnu.org>
|
||||||
|
@ -19,8 +19,7 @@
|
||||||
# BROTLIDEC_INCLUDE_DIRS
|
# BROTLIDEC_INCLUDE_DIRS
|
||||||
# BROTLIDEC_LIBRARIES
|
# BROTLIDEC_LIBRARIES
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
include(FindPkgConfig)
|
||||||
|
|
||||||
pkg_check_modules(PC_BROTLIDEC QUIET libbrotlidec)
|
pkg_check_modules(PC_BROTLIDEC QUIET libbrotlidec)
|
||||||
|
|
||||||
if (PC_BROTLIDEC_VERSION)
|
if (PC_BROTLIDEC_VERSION)
|
||||||
|
@ -42,7 +41,7 @@ find_library(BROTLIDEC_LIBRARIES
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
find_package_handle_standard_args(
|
find_package_handle_standard_args(
|
||||||
BrotliDec
|
brotlidec
|
||||||
REQUIRED_VARS BROTLIDEC_INCLUDE_DIRS BROTLIDEC_LIBRARIES
|
REQUIRED_VARS BROTLIDEC_INCLUDE_DIRS BROTLIDEC_LIBRARIES
|
||||||
FOUND_VAR BROTLIDEC_FOUND
|
FOUND_VAR BROTLIDEC_FOUND
|
||||||
VERSION_VAR BROTLIDEC_VERSION)
|
VERSION_VAR BROTLIDEC_VERSION)
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
# Copyright (c) 2012, Intel Corporation
|
# Copyright (c) 2012, Intel Corporation
|
||||||
# Copyright (c) 2019 Sony Interactive Entertainment Inc.
|
|
||||||
#
|
#
|
||||||
# Redistribution and use in source and binary forms, with or without
|
# Redistribution and use in source and binary forms, with or without
|
||||||
# modification, are permitted provided that the following conditions are met:
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
@ -24,180 +23,65 @@
|
||||||
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
# POSSIBILITY OF SUCH DAMAGE.
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
#
|
|
||||||
# Try to find Harfbuzz include and library directories.
|
|
||||||
|
# Try to find HarfBuzz include and library directories.
|
||||||
#
|
#
|
||||||
# After successful discovery, this will set for inclusion where needed:
|
# After successful discovery, this will set for inclusion where needed:
|
||||||
# HarfBuzz_INCLUDE_DIRS - containg the HarfBuzz headers
|
#
|
||||||
# HarfBuzz_LIBRARIES - containg the HarfBuzz library
|
# HARFBUZZ_INCLUDE_DIRS - containg the HarfBuzz headers
|
||||||
|
# HARFBUZZ_LIBRARIES - containg the HarfBuzz library
|
||||||
|
|
||||||
#[=======================================================================[.rst:
|
include(FindPkgConfig)
|
||||||
FindHarfBuzz
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Find HarfBuzz headers and libraries.
|
|
||||||
|
|
||||||
Imported Targets
|
|
||||||
^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
``HarfBuzz::HarfBuzz``
|
|
||||||
The HarfBuzz library, if found.
|
|
||||||
|
|
||||||
``HarfBuzz::ICU``
|
|
||||||
The HarfBuzz ICU library, if found.
|
|
||||||
|
|
||||||
Result Variables
|
|
||||||
^^^^^^^^^^^^^^^^
|
|
||||||
|
|
||||||
This will define the following variables in your project:
|
|
||||||
|
|
||||||
``HarfBuzz_FOUND``
|
|
||||||
true if (the requested version of) HarfBuzz is available.
|
|
||||||
``HarfBuzz_VERSION``
|
|
||||||
the version of HarfBuzz.
|
|
||||||
``HarfBuzz_LIBRARIES``
|
|
||||||
the libraries to link against to use HarfBuzz.
|
|
||||||
``HarfBuzz_INCLUDE_DIRS``
|
|
||||||
where to find the HarfBuzz headers.
|
|
||||||
``HarfBuzz_COMPILE_OPTIONS``
|
|
||||||
this should be passed to target_compile_options(), if the
|
|
||||||
target is not used for linking
|
|
||||||
|
|
||||||
#]=======================================================================]
|
|
||||||
|
|
||||||
find_package(PkgConfig QUIET)
|
|
||||||
pkg_check_modules(PC_HARFBUZZ QUIET harfbuzz)
|
pkg_check_modules(PC_HARFBUZZ QUIET harfbuzz)
|
||||||
set(HarfBuzz_COMPILE_OPTIONS ${PC_HARFBUZZ_CFLAGS_OTHER})
|
|
||||||
set(HarfBuzz_VERSION ${PC_HARFBUZZ_CFLAGS_VERSION})
|
|
||||||
|
|
||||||
find_path(HarfBuzz_INCLUDE_DIR
|
find_path(HARFBUZZ_INCLUDE_DIRS
|
||||||
NAMES hb.h
|
NAMES hb.h
|
||||||
HINTS ${PC_HARFBUZZ_INCLUDEDIR} ${PC_HARFBUZZ_INCLUDE_DIRS}
|
HINTS ${PC_HARFBUZZ_INCLUDEDIR}
|
||||||
PATH_SUFFIXES harfbuzz
|
${PC_HARFBUZZ_INCLUDE_DIRS}
|
||||||
)
|
PATH_SUFFIXES harfbuzz)
|
||||||
|
|
||||||
find_library(HarfBuzz_LIBRARY
|
find_library(HARFBUZZ_LIBRARIES
|
||||||
NAMES ${HarfBuzz_NAMES} harfbuzz
|
NAMES harfbuzz
|
||||||
HINTS ${PC_HARFBUZZ_LIBDIR} ${PC_HARFBUZZ_LIBRARY_DIRS}
|
HINTS ${PC_HARFBUZZ_LIBDIR}
|
||||||
)
|
${PC_HARFBUZZ_LIBRARY_DIRS})
|
||||||
|
|
||||||
if (HarfBuzz_INCLUDE_DIR AND NOT HarfBuzz_VERSION)
|
if (HARFBUZZ_INCLUDE_DIRS)
|
||||||
if (EXISTS "${HarfBuzz_INCLUDE_DIR}/hb-version.h")
|
if (EXISTS "${HARFBUZZ_INCLUDE_DIRS}/hb-version.h")
|
||||||
file(READ "${HarfBuzz_INCLUDE_DIR}/hb-version.h" _harfbuzz_version_content)
|
file(READ "${HARFBUZZ_INCLUDE_DIRS}/hb-version.h" _harfbuzz_version_content)
|
||||||
|
|
||||||
string(REGEX MATCH "#define +HB_VERSION_STRING +\"([0-9]+\\.[0-9]+\\.[0-9]+)\"" _dummy "${_harfbuzz_version_content}")
|
string(REGEX MATCH
|
||||||
set(HarfBuzz_VERSION "${CMAKE_MATCH_1}")
|
"#define +HB_VERSION_STRING +\"([0-9]+\\.[0-9]+\\.[0-9]+)\""
|
||||||
endif ()
|
_dummy "${_harfbuzz_version_content}")
|
||||||
endif ()
|
set(HARFBUZZ_VERSION "${CMAKE_MATCH_1}")
|
||||||
|
|
||||||
if ("${HarfBuzz_FIND_VERSION}" VERSION_GREATER "${HarfBuzz_VERSION}")
|
|
||||||
if (HarfBuzz_FIND_REQUIRED)
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Required version (" ${HarfBuzz_FIND_VERSION} ")"
|
|
||||||
" is higher than found version (" ${HarfBuzz_VERSION} ")")
|
|
||||||
else ()
|
|
||||||
message(WARNING
|
|
||||||
"Required version (" ${HarfBuzz_FIND_VERSION} ")"
|
|
||||||
" is higher than found version (" ${HarfBuzz_VERSION} ")")
|
|
||||||
unset(HarfBuzz_VERSION)
|
|
||||||
unset(HarfBuzz_INCLUDE_DIRS)
|
|
||||||
unset(HarfBuzz_LIBRARIES)
|
|
||||||
return ()
|
|
||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Find components
|
if ("${harfbuzz_FIND_VERSION}" VERSION_GREATER "${HARFBUZZ_VERSION}")
|
||||||
if (HarfBuzz_INCLUDE_DIR AND HarfBuzz_LIBRARY)
|
message(FATAL_ERROR
|
||||||
set(_HarfBuzz_REQUIRED_LIBS_FOUND ON)
|
"Required version (" ${harfbuzz_FIND_VERSION} ")"
|
||||||
set(HarfBuzz_LIBS_FOUND "HarfBuzz (required): ${HarfBuzz_LIBRARY}")
|
" is higher than found version (" ${HARFBUZZ_VERSION} ")")
|
||||||
else ()
|
|
||||||
set(_HarfBuzz_REQUIRED_LIBS_FOUND OFF)
|
|
||||||
set(HarfBuzz_LIBS_NOT_FOUND "HarfBuzz (required)")
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (NOT CMAKE_VERSION VERSION_LESS 3.3)
|
|
||||||
if ("ICU" IN_LIST HarfBuzz_FIND_COMPONENTS)
|
|
||||||
pkg_check_modules(PC_HARFBUZZ_ICU QUIET harfbuzz-icu)
|
|
||||||
set(HarfBuzz_ICU_COMPILE_OPTIONS ${PC_HARFBUZZ_ICU_CFLAGS_OTHER})
|
|
||||||
|
|
||||||
find_path(HarfBuzz_ICU_INCLUDE_DIR
|
|
||||||
NAMES hb-icu.h
|
|
||||||
HINTS ${PC_HARFBUZZ_ICU_INCLUDEDIR} ${PC_HARFBUZZ_ICU_INCLUDE_DIRS}
|
|
||||||
PATH_SUFFIXES harfbuzz
|
|
||||||
)
|
|
||||||
|
|
||||||
find_library(HarfBuzz_ICU_LIBRARY
|
|
||||||
NAMES ${HarfBuzz_ICU_NAMES} harfbuzz-icu
|
|
||||||
HINTS ${PC_HARFBUZZ_ICU_LIBDIR} ${PC_HARFBUZZ_ICU_LIBRARY_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
if (HarfBuzz_ICU_LIBRARY)
|
|
||||||
if (HarfBuzz_FIND_REQUIRED_ICU)
|
|
||||||
list(APPEND HarfBuzz_LIBS_FOUND "ICU (required): ${HarfBuzz_ICU_LIBRARY}")
|
|
||||||
else ()
|
|
||||||
list(APPEND HarfBuzz_LIBS_FOUND "ICU (optional): ${HarfBuzz_ICU_LIBRARY}")
|
|
||||||
endif ()
|
|
||||||
else ()
|
|
||||||
if (HarfBuzz_FIND_REQUIRED_ICU)
|
|
||||||
set(_HarfBuzz_REQUIRED_LIBS_FOUND OFF)
|
|
||||||
list(APPEND HarfBuzz_LIBS_NOT_FOUND "ICU (required)")
|
|
||||||
else ()
|
|
||||||
list(APPEND HarfBuzz_LIBS_NOT_FOUND "ICU (optional)")
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (NOT HarfBuzz_FIND_QUIETLY)
|
|
||||||
if (HarfBuzz_LIBS_FOUND)
|
|
||||||
message(STATUS "Found the following HarfBuzz libraries:")
|
|
||||||
foreach (found ${HarfBuzz_LIBS_FOUND})
|
|
||||||
message(STATUS " ${found}")
|
|
||||||
endforeach ()
|
|
||||||
endif ()
|
|
||||||
if (HarfBuzz_LIBS_NOT_FOUND)
|
|
||||||
message(STATUS "The following HarfBuzz libraries were not found:")
|
|
||||||
foreach (found ${HarfBuzz_LIBS_NOT_FOUND})
|
|
||||||
message(STATUS " ${found}")
|
|
||||||
endforeach ()
|
|
||||||
endif ()
|
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
include(FindPackageHandleStandardArgs)
|
include(FindPackageHandleStandardArgs)
|
||||||
find_package_handle_standard_args(HarfBuzz
|
find_package_handle_standard_args(
|
||||||
FOUND_VAR HarfBuzz_FOUND
|
harfbuzz
|
||||||
REQUIRED_VARS HarfBuzz_INCLUDE_DIR HarfBuzz_LIBRARY _HarfBuzz_REQUIRED_LIBS_FOUND
|
REQUIRED_VARS HARFBUZZ_INCLUDE_DIRS HARFBUZZ_LIBRARIES
|
||||||
VERSION_VAR HarfBuzz_VERSION
|
VERSION_VAR HARFBUZZ_VERSION)
|
||||||
)
|
|
||||||
|
|
||||||
if (NOT CMAKE_VERSION VERSION_LESS 3.1)
|
|
||||||
if (HarfBuzz_LIBRARY AND NOT TARGET HarfBuzz::HarfBuzz)
|
|
||||||
add_library(HarfBuzz::HarfBuzz UNKNOWN IMPORTED GLOBAL)
|
|
||||||
set_target_properties(HarfBuzz::HarfBuzz PROPERTIES
|
|
||||||
IMPORTED_LOCATION "${HarfBuzz_LIBRARY}"
|
|
||||||
INTERFACE_COMPILE_OPTIONS "${HarfBuzz_COMPILE_OPTIONS}"
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${HarfBuzz_INCLUDE_DIR}"
|
|
||||||
)
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
if (HarfBuzz_ICU_LIBRARY AND NOT TARGET HarfBuzz::ICU)
|
|
||||||
add_library(HarfBuzz::ICU UNKNOWN IMPORTED GLOBAL)
|
|
||||||
set_target_properties(HarfBuzz::ICU PROPERTIES
|
|
||||||
IMPORTED_LOCATION "${HarfBuzz_ICU_LIBRARY}"
|
|
||||||
INTERFACE_COMPILE_OPTIONS "${HarfBuzz_ICU_COMPILE_OPTIONS}"
|
|
||||||
INTERFACE_INCLUDE_DIRECTORIES "${HarfBuzz_ICU_INCLUDE_DIR}"
|
|
||||||
)
|
|
||||||
endif ()
|
|
||||||
endif ()
|
|
||||||
|
|
||||||
mark_as_advanced(
|
mark_as_advanced(
|
||||||
HarfBuzz_INCLUDE_DIR
|
HARFBUZZ_INCLUDE_DIRS
|
||||||
HarfBuzz_ICU_INCLUDE_DIR
|
HARFBUZZ_LIBRARIES)
|
||||||
HarfBuzz_LIBRARY
|
|
||||||
HarfBuzz_ICU_LIBRARY
|
|
||||||
)
|
|
||||||
|
|
||||||
if (HarfBuzz_FOUND)
|
# Allow easy linking as in
|
||||||
set(HarfBuzz_LIBRARIES ${HarfBuzz_LIBRARY} ${HarfBuzz_ICU_LIBRARY})
|
#
|
||||||
set(HarfBuzz_INCLUDE_DIRS ${HarfBuzz_INCLUDE_DIR} ${HarfBuzz_ICU_INCLUDE_DIR})
|
# target_link_libraries(freetype PRIVATE Harfbuzz::Harfbuzz)
|
||||||
|
#
|
||||||
|
if (NOT CMAKE_VERSION VERSION_LESS 3.1)
|
||||||
|
if (HARFBUZZ_FOUND AND NOT TARGET Harfbuzz::Harfbuzz)
|
||||||
|
add_library(Harfbuzz::Harfbuzz INTERFACE IMPORTED)
|
||||||
|
set_target_properties(
|
||||||
|
Harfbuzz::Harfbuzz PROPERTIES
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${HARFBUZZ_INCLUDE_DIRS}")
|
||||||
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
|
@ -1,270 +1,726 @@
|
||||||
# iOS.cmake
|
# This file is part of the ios-cmake project. It was retrieved from
|
||||||
|
# https://github.com/cristeab/ios-cmake.git, which is a fork of
|
||||||
|
# https://code.google.com/p/ios-cmake/. Which in turn is based off of
|
||||||
|
# the Platform/Darwin.cmake and Platform/UnixPaths.cmake files which
|
||||||
|
# are included with CMake 2.8.4
|
||||||
#
|
#
|
||||||
# Copyright (C) 2014-2022 by
|
# The ios-cmake project is licensed under the new BSD license.
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
|
||||||
#
|
#
|
||||||
# Written by David Wimsey <david@wimsey.us>
|
# Copyright (c) 2014, Bogdan Cristea and LTE Engineering Software,
|
||||||
|
# Kitware, Inc., Insight Software Consortium. All rights reserved.
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions
|
||||||
|
# are met:
|
||||||
|
# 1. Redistributions of source code must retain the above copyright
|
||||||
|
# notice, this list of conditions and the following disclaimer.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# 2. Redistributions in binary form must reproduce the above copyright
|
||||||
# and distributed under the terms of the FreeType project license,
|
# notice, this list of conditions and the following disclaimer in the
|
||||||
# LICENSE.TXT. By continuing to use, modify, or distribute this file you
|
# documentation and/or other materials provided with the distribution.
|
||||||
# indicate that you have read the license and understand and accept it
|
|
||||||
# fully.
|
|
||||||
#
|
#
|
||||||
|
# 3. Neither the name of the copyright holder nor the names of its
|
||||||
|
# contributors may be used to endorse or promote products derived from
|
||||||
|
# this software without specific prior written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
#
|
||||||
|
# This file is based off of the Platform/Darwin.cmake and
|
||||||
|
# Platform/UnixPaths.cmake files which are included with CMake 2.8.4
|
||||||
|
# It has been altered for iOS development.
|
||||||
|
#
|
||||||
|
# Updated by Alex Stewart (alexs.mac@gmail.com)
|
||||||
|
#
|
||||||
|
# *****************************************************************************
|
||||||
|
# Now maintained by Alexander Widerberg (widerbergaren [at] gmail.com)
|
||||||
|
# under the BSD-3-Clause license
|
||||||
|
# https://github.com/leetal/ios-cmake
|
||||||
|
# *****************************************************************************
|
||||||
|
#
|
||||||
|
# INFORMATION / HELP
|
||||||
|
#
|
||||||
|
# The following arguments control the behaviour of this toolchain:
|
||||||
|
#
|
||||||
|
# PLATFORM: (default "OS")
|
||||||
|
# OS = Build for iPhoneOS.
|
||||||
|
# OS64 = Build for arm64 iphoneOS.
|
||||||
|
# OS64COMBINED = Build for arm64 x86_64 iphoneOS. Combined into FAT STATIC lib (supported on 3.14+ of CMakewith "-G Xcode" argument ONLY)
|
||||||
|
# SIMULATOR = Build for x86 i386 iphoneOS Simulator.
|
||||||
|
# SIMULATOR64 = Build for x86_64 iphoneOS Simulator.
|
||||||
|
# TVOS = Build for arm64 tvOS.
|
||||||
|
# TVOSCOMBINED = Build for arm64 x86_64 tvOS. Combined into FAT STATIC lib (supported on 3.14+ of CMake with "-G Xcode" argument ONLY)
|
||||||
|
# SIMULATOR_TVOS = Build for x86_64 tvOS Simulator.
|
||||||
|
# WATCHOS = Build for armv7k arm64_32 for watchOS.
|
||||||
|
# WATCHOSCOMBINED = Build for armv7k arm64_32 x86_64 watchOS. Combined into FAT STATIC lib (supported on 3.14+ of CMake with "-G Xcode" argument ONLY)
|
||||||
|
# SIMULATOR_WATCHOS = Build for x86_64 for watchOS Simulator.
|
||||||
|
#
|
||||||
|
# CMAKE_OSX_SYSROOT: Path to the SDK to use. By default this is
|
||||||
|
# automatically determined from PLATFORM and xcodebuild, but
|
||||||
|
# can also be manually specified (although this should not be required).
|
||||||
|
#
|
||||||
|
# CMAKE_DEVELOPER_ROOT: Path to the Developer directory for the platform
|
||||||
|
# being compiled for. By default this is automatically determined from
|
||||||
|
# CMAKE_OSX_SYSROOT, but can also be manually specified (although this should
|
||||||
|
# not be required).
|
||||||
|
#
|
||||||
|
# DEPLOYMENT_TARGET: Minimum SDK version to target. Default 2.0 on watchOS and 9.0 on tvOS+iOS
|
||||||
|
#
|
||||||
|
# ENABLE_BITCODE: (1|0) Enables or disables bitcode support. Default 1 (true)
|
||||||
|
#
|
||||||
|
# ENABLE_ARC: (1|0) Enables or disables ARC support. Default 1 (true, ARC enabled by default)
|
||||||
|
#
|
||||||
|
# ENABLE_VISIBILITY: (1|0) Enables or disables symbol visibility support. Default 0 (false, visibility hidden by default)
|
||||||
|
#
|
||||||
|
# ENABLE_STRICT_TRY_COMPILE: (1|0) Enables or disables strict try_compile() on all Check* directives (will run linker
|
||||||
|
# to actually check if linking is possible). Default 0 (false, will set CMAKE_TRY_COMPILE_TARGET_TYPE to STATIC_LIBRARY)
|
||||||
|
#
|
||||||
|
# ARCHS: (armv7 armv7s armv7k arm64 arm64_32 i386 x86_64) If specified, will override the default architectures for the given PLATFORM
|
||||||
|
# OS = armv7 armv7s arm64 (if applicable)
|
||||||
|
# OS64 = arm64 (if applicable)
|
||||||
|
# SIMULATOR = i386
|
||||||
|
# SIMULATOR64 = x86_64
|
||||||
|
# TVOS = arm64
|
||||||
|
# SIMULATOR_TVOS = x86_64 (i386 has since long been deprecated)
|
||||||
|
# WATCHOS = armv7k arm64_32 (if applicable)
|
||||||
|
# SIMULATOR_WATCHOS = x86_64 (i386 has since long been deprecated)
|
||||||
|
#
|
||||||
|
# This toolchain defines the following variables for use externally:
|
||||||
|
#
|
||||||
|
# XCODE_VERSION: Version number (not including Build version) of Xcode detected.
|
||||||
|
# SDK_VERSION: Version of SDK being used.
|
||||||
|
# CMAKE_OSX_ARCHITECTURES: Architectures being compiled for (generated from PLATFORM).
|
||||||
|
# APPLE_TARGET_TRIPLE: Used by autoconf build systems. NOTE: If "ARCHS" are overridden, this will *NOT* be set!
|
||||||
|
#
|
||||||
|
# This toolchain defines the following macros for use externally:
|
||||||
|
#
|
||||||
|
# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE XCODE_VARIANT)
|
||||||
|
# A convenience macro for setting xcode specific properties on targets.
|
||||||
|
# Available variants are: All, Release, RelWithDebInfo, Debug, MinSizeRel
|
||||||
|
# example: set_xcode_property (myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1" "all").
|
||||||
|
#
|
||||||
|
# find_host_package (PROGRAM ARGS)
|
||||||
|
# A macro used to find executable programs on the host system, not within the
|
||||||
|
# environment. Thanks to the android-cmake project for providing the
|
||||||
|
# command.
|
||||||
|
#
|
||||||
|
# ******************************** DEPRECATIONS *******************************
|
||||||
|
#
|
||||||
|
# IOS_DEPLOYMENT_TARGET: (Deprecated) Alias to DEPLOYMENT_TARGET
|
||||||
|
# CMAKE_IOS_DEVELOPER_ROOT: (Deprecated) Alias to CMAKE_DEVELOPER_ROOT
|
||||||
|
# IOS_PLATFORM: (Deprecated) Alias to PLATFORM
|
||||||
|
# IOS_ARCH: (Deprecated) Alias to ARCHS
|
||||||
|
#
|
||||||
|
# *****************************************************************************
|
||||||
#
|
#
|
||||||
# This file is derived from the files `Platform/Darwin.cmake' and
|
|
||||||
# `Platform/UnixPaths.cmake', which are part of CMake 2.8.4. It has been
|
|
||||||
# altered for iOS development.
|
|
||||||
|
|
||||||
|
# Fix for PThread library not in path
|
||||||
|
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
|
||||||
|
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||||
|
set(CMAKE_USE_WIN32_THREADS_INIT 0)
|
||||||
|
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||||
|
|
||||||
# Options
|
# Cache what generator is used
|
||||||
# -------
|
set(USED_CMAKE_GENERATOR "${CMAKE_GENERATOR}" CACHE STRING "Expose CMAKE_GENERATOR" FORCE)
|
||||||
#
|
|
||||||
# IOS_PLATFORM = OS | SIMULATOR
|
|
||||||
#
|
|
||||||
# This decides whether SDKS are selected from the `iPhoneOS.platform' or
|
|
||||||
# `iPhoneSimulator.platform' folders.
|
|
||||||
#
|
|
||||||
# OS - the default, used to build for iPhone and iPad physical devices,
|
|
||||||
# which have an ARM architecture.
|
|
||||||
# SIMULATOR - used to build for the Simulator platforms, which have an
|
|
||||||
# x86 architecture.
|
|
||||||
#
|
|
||||||
# CMAKE_IOS_DEVELOPER_ROOT = /path/to/platform/Developer folder
|
|
||||||
#
|
|
||||||
# By default, this location is automatically chosen based on the
|
|
||||||
# IOS_PLATFORM value above. If you manually set this variable, it
|
|
||||||
# overrides the default location and forces the use of a particular
|
|
||||||
# Developer Platform.
|
|
||||||
#
|
|
||||||
# CMAKE_IOS_SDK_ROOT = /path/to/platform/Developer/SDKs/SDK folder
|
|
||||||
#
|
|
||||||
# By default, this location is automatically chosen based on the
|
|
||||||
# CMAKE_IOS_DEVELOPER_ROOT value. In this case it is always the most
|
|
||||||
# up-to-date SDK found in the CMAKE_IOS_DEVELOPER_ROOT path. If you
|
|
||||||
# manually set this variable, it forces the use of a specific SDK
|
|
||||||
# version.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# Macros
|
|
||||||
# ------
|
|
||||||
#
|
|
||||||
# set_xcode_property (TARGET XCODE_PROPERTY XCODE_VALUE)
|
|
||||||
#
|
|
||||||
# A convenience macro for setting Xcode specific properties on targets.
|
|
||||||
#
|
|
||||||
# Example:
|
|
||||||
#
|
|
||||||
# set_xcode_property(myioslib IPHONEOS_DEPLOYMENT_TARGET "3.1")
|
|
||||||
#
|
|
||||||
# find_host_package (PROGRAM ARGS)
|
|
||||||
#
|
|
||||||
# A macro to find executable programs on the host system, not within the
|
|
||||||
# iOS environment. Thanks to the `android-cmake' project for providing
|
|
||||||
# the command.
|
|
||||||
|
|
||||||
|
if(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.14")
|
||||||
|
set(MODERN_CMAKE YES)
|
||||||
|
endif()
|
||||||
|
|
||||||
# standard settings
|
# Get the Xcode version being used.
|
||||||
set(CMAKE_SYSTEM_NAME Darwin)
|
execute_process(COMMAND xcodebuild -version
|
||||||
set(CMAKE_SYSTEM_VERSION 1)
|
OUTPUT_VARIABLE XCODE_VERSION
|
||||||
set(UNIX True)
|
ERROR_QUIET
|
||||||
set(APPLE True)
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
set(IOS True)
|
string(REGEX MATCH "Xcode [0-9\\.]+" XCODE_VERSION "${XCODE_VERSION}")
|
||||||
|
string(REGEX REPLACE "Xcode ([0-9\\.]+)" "\\1" XCODE_VERSION "${XCODE_VERSION}")
|
||||||
|
|
||||||
# required as of cmake 2.8.10
|
######## ALIASES (DEPRECATION WARNINGS)
|
||||||
set(CMAKE_OSX_DEPLOYMENT_TARGET ""
|
|
||||||
CACHE STRING "Force unset of the deployment target for iOS" FORCE
|
|
||||||
)
|
|
||||||
|
|
||||||
# determine the cmake host system version so we know where to find the iOS
|
if(DEFINED IOS_PLATFORM)
|
||||||
# SDKs
|
set(PLATFORM ${IOS_PLATFORM})
|
||||||
find_program(CMAKE_UNAME uname /bin /usr/bin /usr/local/bin)
|
message(DEPRECATION "IOS_PLATFORM argument is DEPRECATED. Consider using the new PLATFORM argument instead.")
|
||||||
if (CMAKE_UNAME)
|
endif()
|
||||||
exec_program(uname ARGS -r OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION)
|
|
||||||
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*$" "\\1"
|
|
||||||
DARWIN_MAJOR_VERSION "${CMAKE_HOST_SYSTEM_VERSION}")
|
|
||||||
endif (CMAKE_UNAME)
|
|
||||||
|
|
||||||
# skip the platform compiler checks for cross compiling
|
if(DEFINED IOS_DEPLOYMENT_TARGET)
|
||||||
set(CMAKE_CXX_COMPILER_WORKS TRUE)
|
set(DEPLOYMENT_TARGET ${IOS_DEPLOYMENT_TARGET})
|
||||||
set(CMAKE_C_COMPILER_WORKS TRUE)
|
message(DEPRECATION "IOS_DEPLOYMENT_TARGET argument is DEPRECATED. Consider using the new DEPLOYMENT_TARGET argument instead.")
|
||||||
|
endif()
|
||||||
|
|
||||||
# all iOS/Darwin specific settings - some may be redundant
|
if(DEFINED CMAKE_IOS_DEVELOPER_ROOT)
|
||||||
|
set(CMAKE_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT})
|
||||||
|
message(DEPRECATION "CMAKE_IOS_DEVELOPER_ROOT argument is DEPRECATED. Consider using the new CMAKE_DEVELOPER_ROOT argument instead.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(DEFINED IOS_ARCH)
|
||||||
|
set(ARCHS ${IOS_ARCH})
|
||||||
|
message(DEPRECATION "IOS_ARCH argument is DEPRECATED. Consider using the new ARCHS argument instead.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
######## END ALIASES
|
||||||
|
|
||||||
|
# Unset the FORCE on cache variables if in try_compile()
|
||||||
|
set(FORCE_CACHE FORCE)
|
||||||
|
get_property(_CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE)
|
||||||
|
if(_CMAKE_IN_TRY_COMPILE)
|
||||||
|
unset(FORCE_CACHE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Default to building for iPhoneOS if not specified otherwise, and we cannot
|
||||||
|
# determine the platform from the CMAKE_OSX_ARCHITECTURES variable. The use
|
||||||
|
# of CMAKE_OSX_ARCHITECTURES is such that try_compile() projects can correctly
|
||||||
|
# determine the value of PLATFORM from the root project, as
|
||||||
|
# CMAKE_OSX_ARCHITECTURES is propagated to them by CMake.
|
||||||
|
if(NOT DEFINED PLATFORM)
|
||||||
|
if (CMAKE_OSX_ARCHITECTURES)
|
||||||
|
if(CMAKE_OSX_ARCHITECTURES MATCHES ".*arm.*" AND CMAKE_OSX_SYSROOT MATCHES ".*iphoneos.*")
|
||||||
|
set(PLATFORM "OS")
|
||||||
|
elseif(CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_SYSROOT MATCHES ".*iphonesimulator.*")
|
||||||
|
set(PLATFORM "SIMULATOR")
|
||||||
|
elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" AND CMAKE_OSX_SYSROOT MATCHES ".*iphonesimulator.*")
|
||||||
|
set(PLATFORM "SIMULATOR64")
|
||||||
|
elseif(CMAKE_OSX_ARCHITECTURES MATCHES "arm64" AND CMAKE_OSX_SYSROOT MATCHES ".*appletvos.*")
|
||||||
|
set(PLATFORM "TVOS")
|
||||||
|
elseif(CMAKE_OSX_ARCHITECTURES MATCHES "x86_64" AND CMAKE_OSX_SYSROOT MATCHES ".*appletvsimulator.*")
|
||||||
|
set(PLATFORM "SIMULATOR_TVOS")
|
||||||
|
elseif(CMAKE_OSX_ARCHITECTURES MATCHES ".*armv7k.*" AND CMAKE_OSX_SYSROOT MATCHES ".*watchos.*")
|
||||||
|
set(PLATFORM "WATCHOS")
|
||||||
|
elseif(CMAKE_OSX_ARCHITECTURES MATCHES "i386" AND CMAKE_OSX_SYSROOT MATCHES ".*watchsimulator.*")
|
||||||
|
set(PLATFORM "SIMULATOR_WATCHOS")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
if (NOT PLATFORM)
|
||||||
|
set(PLATFORM "OS")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(PLATFORM_INT "${PLATFORM}" CACHE STRING "Type of platform for which the build targets.")
|
||||||
|
|
||||||
|
# Handle the case where we are targeting iOS and a version above 10.3.4 (32-bit support dropped officially)
|
||||||
|
if(PLATFORM_INT STREQUAL "OS" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4)
|
||||||
|
set(PLATFORM_INT "OS64")
|
||||||
|
message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.")
|
||||||
|
elseif(PLATFORM_INT STREQUAL "SIMULATOR" AND DEPLOYMENT_TARGET VERSION_GREATER_EQUAL 10.3.4)
|
||||||
|
set(PLATFORM_INT "SIMULATOR64")
|
||||||
|
message(STATUS "Targeting minimum SDK version ${DEPLOYMENT_TARGET}. Dropping 32-bit support.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Determine the platform name and architectures for use in xcodebuild commands
|
||||||
|
# from the specified PLATFORM name.
|
||||||
|
if(PLATFORM_INT STREQUAL "OS")
|
||||||
|
set(SDK_NAME iphoneos)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
set(ARCHS armv7 armv7s arm64)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT arm-apple-ios)
|
||||||
|
endif()
|
||||||
|
elseif(PLATFORM_INT STREQUAL "OS64")
|
||||||
|
set(SDK_NAME iphoneos)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
if (XCODE_VERSION VERSION_GREATER 10.0)
|
||||||
|
set(ARCHS arm64) # Add arm64e when Apple have fixed the integration issues with it, libarclite_iphoneos.a is currently missung bitcode markers for example
|
||||||
|
else()
|
||||||
|
set(ARCHS arm64)
|
||||||
|
endif()
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT aarch64-apple-ios)
|
||||||
|
endif()
|
||||||
|
elseif(PLATFORM_INT STREQUAL "OS64COMBINED")
|
||||||
|
set(SDK_NAME iphoneos)
|
||||||
|
if(MODERN_CMAKE)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
if (XCODE_VERSION VERSION_GREATER 10.0)
|
||||||
|
set(ARCHS arm64 x86_64) # Add arm64e when Apple have fixed the integration issues with it, libarclite_iphoneos.a is currently missung bitcode markers for example
|
||||||
|
else()
|
||||||
|
set(ARCHS arm64 x86_64)
|
||||||
|
endif()
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT aarch64-x86_64-apple-ios)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the OS64COMBINED setting work")
|
||||||
|
endif()
|
||||||
|
elseif(PLATFORM_INT STREQUAL "SIMULATOR")
|
||||||
|
set(SDK_NAME iphonesimulator)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
set(ARCHS i386)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT i386-apple-ios)
|
||||||
|
endif()
|
||||||
|
message(DEPRECATION "SIMULATOR IS DEPRECATED. Consider using SIMULATOR64 instead.")
|
||||||
|
elseif(PLATFORM_INT STREQUAL "SIMULATOR64")
|
||||||
|
set(SDK_NAME iphonesimulator)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
set(ARCHS x86_64)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT x86_64-apple-ios)
|
||||||
|
endif()
|
||||||
|
elseif(PLATFORM_INT STREQUAL "TVOS")
|
||||||
|
set(SDK_NAME appletvos)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
set(ARCHS arm64)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT aarch64-apple-tvos)
|
||||||
|
endif()
|
||||||
|
elseif (PLATFORM_INT STREQUAL "TVOSCOMBINED")
|
||||||
|
set(SDK_NAME appletvos)
|
||||||
|
if(MODERN_CMAKE)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
set(ARCHS arm64 x86_64)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT aarch64-x86_64-apple-tvos)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the TVOSCOMBINED setting work")
|
||||||
|
endif()
|
||||||
|
elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS")
|
||||||
|
set(SDK_NAME appletvsimulator)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
set(ARCHS x86_64)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT x86_64-apple-tvos)
|
||||||
|
endif()
|
||||||
|
elseif(PLATFORM_INT STREQUAL "WATCHOS")
|
||||||
|
set(SDK_NAME watchos)
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fgnu-inline-asm")
|
||||||
|
if(NOT ARCHS)
|
||||||
|
if (XCODE_VERSION VERSION_GREATER 10.0)
|
||||||
|
set(ARCHS armv7k arm64_32)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT aarch64_32-apple-watchos)
|
||||||
|
else()
|
||||||
|
set(ARCHS armv7k)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT arm-apple-watchos)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
elseif(PLATFORM_INT STREQUAL "WATCHOSCOMBINED")
|
||||||
|
set(SDK_NAME watchos)
|
||||||
|
if(MODERN_CMAKE)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
if (XCODE_VERSION VERSION_GREATER 10.0)
|
||||||
|
set(ARCHS armv7k arm64_32 i386)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT aarch64_32-i386-apple-watchos)
|
||||||
|
else()
|
||||||
|
set(ARCHS armv7k i386)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT arm-i386-apple-watchos)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Please make sure that you are running CMake 3.14+ to make the WATCHOSCOMBINED setting work")
|
||||||
|
endif()
|
||||||
|
elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS")
|
||||||
|
set(SDK_NAME watchsimulator)
|
||||||
|
if(NOT ARCHS)
|
||||||
|
set(ARCHS i386)
|
||||||
|
set(APPLE_TARGET_TRIPLE_INT i386-apple-watchos)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Invalid PLATFORM: ${PLATFORM_INT}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(MODERN_CMAKE AND PLATFORM_INT MATCHES ".*COMBINED" AND NOT USED_CMAKE_GENERATOR MATCHES "Xcode")
|
||||||
|
message(FATAL_ERROR "The COMBINED options only work with Xcode generator, -G Xcode")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# If user did not specify the SDK root to use, then query xcodebuild for it.
|
||||||
|
execute_process(COMMAND xcodebuild -version -sdk ${SDK_NAME} Path
|
||||||
|
OUTPUT_VARIABLE CMAKE_OSX_SYSROOT_INT
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if (NOT DEFINED CMAKE_OSX_SYSROOT_INT AND NOT DEFINED CMAKE_OSX_SYSROOT)
|
||||||
|
message(SEND_ERROR "Please make sure that Xcode is installed and that the toolchain"
|
||||||
|
"is pointing to the correct path. Please run:"
|
||||||
|
"sudo xcode-select -s /Applications/Xcode.app/Contents/Developer"
|
||||||
|
"and see if that fixes the problem for you.")
|
||||||
|
message(FATAL_ERROR "Invalid CMAKE_OSX_SYSROOT: ${CMAKE_OSX_SYSROOT} "
|
||||||
|
"does not exist.")
|
||||||
|
elseif(DEFINED CMAKE_OSX_SYSROOT_INT)
|
||||||
|
set(CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT_INT}" CACHE INTERNAL "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Set Xcode property for SDKROOT as well if Xcode generator is used
|
||||||
|
if(USED_CMAKE_GENERATOR MATCHES "Xcode")
|
||||||
|
set(CMAKE_OSX_SYSROOT "${SDK_NAME}" CACHE INTERNAL "")
|
||||||
|
if(NOT DEFINED CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM)
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "123456789A" CACHE INTERNAL "")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Specify minimum version of deployment target.
|
||||||
|
if(NOT DEFINED DEPLOYMENT_TARGET)
|
||||||
|
if (PLATFORM_INT STREQUAL "WATCHOS" OR PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS")
|
||||||
|
# Unless specified, SDK version 2.0 is used by default as minimum target version (watchOS).
|
||||||
|
set(DEPLOYMENT_TARGET "2.0"
|
||||||
|
CACHE STRING "Minimum SDK version to build for." )
|
||||||
|
else()
|
||||||
|
# Unless specified, SDK version 9.0 is used by default as minimum target version (iOS, tvOS).
|
||||||
|
set(DEPLOYMENT_TARGET "9.0"
|
||||||
|
CACHE STRING "Minimum SDK version to build for." )
|
||||||
|
endif()
|
||||||
|
message(STATUS "Using the default min-version since DEPLOYMENT_TARGET not provided!")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Use bitcode or not
|
||||||
|
if(NOT DEFINED ENABLE_BITCODE AND NOT ARCHS MATCHES "((^|;|, )(i386|x86_64))+")
|
||||||
|
# Unless specified, enable bitcode support by default
|
||||||
|
message(STATUS "Enabling bitcode support by default. ENABLE_BITCODE not provided!")
|
||||||
|
set(ENABLE_BITCODE TRUE)
|
||||||
|
elseif(NOT DEFINED ENABLE_BITCODE)
|
||||||
|
message(STATUS "Disabling bitcode support by default on simulators. ENABLE_BITCODE not provided for override!")
|
||||||
|
set(ENABLE_BITCODE FALSE)
|
||||||
|
endif()
|
||||||
|
set(ENABLE_BITCODE_INT ${ENABLE_BITCODE} CACHE BOOL "Whether or not to enable bitcode" ${FORCE_CACHE})
|
||||||
|
# Use ARC or not
|
||||||
|
if(NOT DEFINED ENABLE_ARC)
|
||||||
|
# Unless specified, enable ARC support by default
|
||||||
|
set(ENABLE_ARC TRUE)
|
||||||
|
message(STATUS "Enabling ARC support by default. ENABLE_ARC not provided!")
|
||||||
|
endif()
|
||||||
|
set(ENABLE_ARC_INT ${ENABLE_ARC} CACHE BOOL "Whether or not to enable ARC" ${FORCE_CACHE})
|
||||||
|
# Use hidden visibility or not
|
||||||
|
if(NOT DEFINED ENABLE_VISIBILITY)
|
||||||
|
# Unless specified, disable symbols visibility by default
|
||||||
|
set(ENABLE_VISIBILITY FALSE)
|
||||||
|
message(STATUS "Hiding symbols visibility by default. ENABLE_VISIBILITY not provided!")
|
||||||
|
endif()
|
||||||
|
set(ENABLE_VISIBILITY_INT ${ENABLE_VISIBILITY} CACHE BOOL "Whether or not to hide symbols (-fvisibility=hidden)" ${FORCE_CACHE})
|
||||||
|
# Set strict compiler checks or not
|
||||||
|
if(NOT DEFINED ENABLE_STRICT_TRY_COMPILE)
|
||||||
|
# Unless specified, disable strict try_compile()
|
||||||
|
set(ENABLE_STRICT_TRY_COMPILE FALSE)
|
||||||
|
message(STATUS "Using NON-strict compiler checks by default. ENABLE_STRICT_TRY_COMPILE not provided!")
|
||||||
|
endif()
|
||||||
|
set(ENABLE_STRICT_TRY_COMPILE_INT ${ENABLE_STRICT_TRY_COMPILE} CACHE BOOL "Whether or not to use strict compiler checks" ${FORCE_CACHE})
|
||||||
|
# Get the SDK version information.
|
||||||
|
execute_process(COMMAND xcodebuild -sdk ${CMAKE_OSX_SYSROOT} -version SDKVersion
|
||||||
|
OUTPUT_VARIABLE SDK_VERSION
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
|
||||||
|
# Find the Developer root for the specific iOS platform being compiled for
|
||||||
|
# from CMAKE_OSX_SYSROOT. Should be ../../ from SDK specified in
|
||||||
|
# CMAKE_OSX_SYSROOT. There does not appear to be a direct way to obtain
|
||||||
|
# this information from xcrun or xcodebuild.
|
||||||
|
if (NOT DEFINED CMAKE_DEVELOPER_ROOT AND NOT USED_CMAKE_GENERATOR MATCHES "Xcode")
|
||||||
|
get_filename_component(PLATFORM_SDK_DIR ${CMAKE_OSX_SYSROOT} PATH)
|
||||||
|
get_filename_component(CMAKE_DEVELOPER_ROOT ${PLATFORM_SDK_DIR} PATH)
|
||||||
|
if (NOT DEFINED CMAKE_DEVELOPER_ROOT)
|
||||||
|
message(FATAL_ERROR "Invalid CMAKE_DEVELOPER_ROOT: "
|
||||||
|
"${CMAKE_DEVELOPER_ROOT} does not exist.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
# Find the C & C++ compilers for the specified SDK.
|
||||||
|
if(NOT CMAKE_C_COMPILER)
|
||||||
|
execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang
|
||||||
|
OUTPUT_VARIABLE CMAKE_C_COMPILER
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
message(STATUS "Using C compiler: ${CMAKE_C_COMPILER}")
|
||||||
|
endif()
|
||||||
|
if(NOT CMAKE_CXX_COMPILER)
|
||||||
|
execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find clang++
|
||||||
|
OUTPUT_VARIABLE CMAKE_CXX_COMPILER
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
message(STATUS "Using CXX compiler: ${CMAKE_CXX_COMPILER}")
|
||||||
|
endif()
|
||||||
|
# Find (Apple's) libtool.
|
||||||
|
execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find libtool
|
||||||
|
OUTPUT_VARIABLE BUILD_LIBTOOL
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
message(STATUS "Using libtool: ${BUILD_LIBTOOL}")
|
||||||
|
# Configure libtool to be used instead of ar + ranlib to build static libraries.
|
||||||
|
# This is required on Xcode 7+, but should also work on previous versions of
|
||||||
|
# Xcode.
|
||||||
|
set(CMAKE_C_CREATE_STATIC_LIBRARY
|
||||||
|
"${BUILD_LIBTOOL} -static -o <TARGET> <LINK_FLAGS> <OBJECTS> ")
|
||||||
|
set(CMAKE_CXX_CREATE_STATIC_LIBRARY
|
||||||
|
"${BUILD_LIBTOOL} -static -o <TARGET> <LINK_FLAGS> <OBJECTS> ")
|
||||||
|
# Find the toolchain's provided install_name_tool if none is found on the host
|
||||||
|
if(NOT CMAKE_INSTALL_NAME_TOOL)
|
||||||
|
execute_process(COMMAND xcrun -sdk ${CMAKE_OSX_SYSROOT} -find install_name_tool
|
||||||
|
OUTPUT_VARIABLE CMAKE_INSTALL_NAME_TOOL_INT
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
set(CMAKE_INSTALL_NAME_TOOL ${CMAKE_INSTALL_NAME_TOOL_INT} CACHE STRING "" ${FORCE_CACHE})
|
||||||
|
endif()
|
||||||
|
# Get the version of Darwin (OS X) of the host.
|
||||||
|
execute_process(COMMAND uname -r
|
||||||
|
OUTPUT_VARIABLE CMAKE_HOST_SYSTEM_VERSION
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
|
if(SDK_NAME MATCHES "iphone")
|
||||||
|
set(CMAKE_SYSTEM_NAME iOS CACHE INTERNAL "" ${FORCE_CACHE})
|
||||||
|
endif()
|
||||||
|
# CMake 3.14+ support building for iOS, watchOS and tvOS out of the box.
|
||||||
|
if(MODERN_CMAKE)
|
||||||
|
if(SDK_NAME MATCHES "appletv")
|
||||||
|
set(CMAKE_SYSTEM_NAME tvOS CACHE INTERNAL "" ${FORCE_CACHE})
|
||||||
|
elseif(SDK_NAME MATCHES "watch")
|
||||||
|
set(CMAKE_SYSTEM_NAME watchOS CACHE INTERNAL "" ${FORCE_CACHE})
|
||||||
|
endif()
|
||||||
|
# Provide flags for a combined FAT library build on newer CMake versions
|
||||||
|
if(PLATFORM_INT MATCHES ".*COMBINED")
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO" CACHE INTERNAL "" ${FORCE_CACHE})
|
||||||
|
set(CMAKE_IOS_INSTALL_COMBINED YES CACHE INTERNAL "" ${FORCE_CACHE})
|
||||||
|
message(STATUS "Will combine built (static) artifacts into FAT lib...")
|
||||||
|
endif()
|
||||||
|
elseif(${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.10")
|
||||||
|
# Legacy code path prior to CMake 3.14 or fallback if no SDK_NAME specified
|
||||||
|
set(CMAKE_SYSTEM_NAME iOS CACHE INTERNAL "" ${FORCE_CACHE})
|
||||||
|
else()
|
||||||
|
# Legacy code path prior to CMake 3.14 or fallback if no SDK_NAME specified
|
||||||
|
set(CMAKE_SYSTEM_NAME Darwin CACHE INTERNAL "" ${FORCE_CACHE})
|
||||||
|
endif()
|
||||||
|
# Standard settings.
|
||||||
|
set(CMAKE_SYSTEM_VERSION ${SDK_VERSION} CACHE INTERNAL "")
|
||||||
|
set(UNIX TRUE CACHE BOOL "")
|
||||||
|
set(APPLE TRUE CACHE BOOL "")
|
||||||
|
set(IOS TRUE CACHE BOOL "")
|
||||||
|
set(CMAKE_AR ar CACHE FILEPATH "" FORCE)
|
||||||
|
set(CMAKE_RANLIB ranlib CACHE FILEPATH "" FORCE)
|
||||||
|
set(CMAKE_STRIP strip CACHE FILEPATH "" FORCE)
|
||||||
|
# Set the architectures for which to build.
|
||||||
|
set(CMAKE_OSX_ARCHITECTURES ${ARCHS} CACHE STRING "Build architecture for iOS")
|
||||||
|
# Change the type of target generated for try_compile() so it'll work when cross-compiling, weak compiler checks
|
||||||
|
if(ENABLE_STRICT_TRY_COMPILE_INT)
|
||||||
|
message(STATUS "Using strict compiler checks (default in CMake).")
|
||||||
|
else()
|
||||||
|
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
|
||||||
|
endif()
|
||||||
|
# All iOS/Darwin specific settings - some may be redundant.
|
||||||
|
set(CMAKE_MACOSX_BUNDLE YES)
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_REQUIRED "NO")
|
||||||
set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
|
set(CMAKE_SHARED_LIBRARY_PREFIX "lib")
|
||||||
set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
|
set(CMAKE_SHARED_LIBRARY_SUFFIX ".dylib")
|
||||||
set(CMAKE_SHARED_MODULE_PREFIX "lib")
|
set(CMAKE_SHARED_MODULE_PREFIX "lib")
|
||||||
set(CMAKE_SHARED_MODULE_SUFFIX ".so")
|
set(CMAKE_SHARED_MODULE_SUFFIX ".so")
|
||||||
|
set(CMAKE_C_COMPILER_ABI ELF)
|
||||||
|
set(CMAKE_CXX_COMPILER_ABI ELF)
|
||||||
|
set(CMAKE_C_HAS_ISYSROOT 1)
|
||||||
|
set(CMAKE_CXX_HAS_ISYSROOT 1)
|
||||||
set(CMAKE_MODULE_EXISTS 1)
|
set(CMAKE_MODULE_EXISTS 1)
|
||||||
set(CMAKE_DL_LIBS "")
|
set(CMAKE_DL_LIBS "")
|
||||||
|
set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG "-compatibility_version ")
|
||||||
|
set(CMAKE_C_OSX_CURRENT_VERSION_FLAG "-current_version ")
|
||||||
|
set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG "${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
|
||||||
|
set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG "${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
|
||||||
|
|
||||||
set(CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG
|
if(ARCHS MATCHES "((^|;|, )(arm64|arm64e|x86_64))+")
|
||||||
"-compatibility_version ")
|
set(CMAKE_C_SIZEOF_DATA_PTR 8)
|
||||||
set(CMAKE_C_OSX_CURRENT_VERSION_FLAG
|
set(CMAKE_CXX_SIZEOF_DATA_PTR 8)
|
||||||
"-current_version ")
|
if(ARCHS MATCHES "((^|;|, )(arm64|arm64e))+")
|
||||||
set(CMAKE_CXX_OSX_COMPATIBILITY_VERSION_FLAG
|
set(CMAKE_SYSTEM_PROCESSOR "aarch64")
|
||||||
"${CMAKE_C_OSX_COMPATIBILITY_VERSION_FLAG}")
|
else()
|
||||||
set(CMAKE_CXX_OSX_CURRENT_VERSION_FLAG
|
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
|
||||||
"${CMAKE_C_OSX_CURRENT_VERSION_FLAG}")
|
endif()
|
||||||
|
else()
|
||||||
|
set(CMAKE_C_SIZEOF_DATA_PTR 4)
|
||||||
|
set(CMAKE_CXX_SIZEOF_DATA_PTR 4)
|
||||||
|
set(CMAKE_SYSTEM_PROCESSOR "arm")
|
||||||
|
endif()
|
||||||
|
|
||||||
# hidden visibility is required for cxx on iOS
|
# Note that only Xcode 7+ supports the newer more specific:
|
||||||
set(CMAKE_C_FLAGS_INIT "")
|
# -m${SDK_NAME}-version-min flags, older versions of Xcode use:
|
||||||
set(CMAKE_CXX_FLAGS_INIT
|
# -m(ios/ios-simulator)-version-min instead.
|
||||||
"-headerpad_max_install_names -fvisibility=hidden -fvisibility-inlines-hidden")
|
if(${CMAKE_VERSION} VERSION_LESS "3.11")
|
||||||
|
if(PLATFORM_INT STREQUAL "OS" OR PLATFORM_INT STREQUAL "OS64")
|
||||||
|
if(XCODE_VERSION VERSION_LESS 7.0)
|
||||||
|
set(SDK_NAME_VERSION_FLAGS
|
||||||
|
"-mios-version-min=${DEPLOYMENT_TARGET}")
|
||||||
|
else()
|
||||||
|
# Xcode 7.0+ uses flags we can build directly from SDK_NAME.
|
||||||
|
set(SDK_NAME_VERSION_FLAGS
|
||||||
|
"-m${SDK_NAME}-version-min=${DEPLOYMENT_TARGET}")
|
||||||
|
endif()
|
||||||
|
elseif(PLATFORM_INT STREQUAL "TVOS")
|
||||||
|
set(SDK_NAME_VERSION_FLAGS
|
||||||
|
"-mtvos-version-min=${DEPLOYMENT_TARGET}")
|
||||||
|
elseif(PLATFORM_INT STREQUAL "SIMULATOR_TVOS")
|
||||||
|
set(SDK_NAME_VERSION_FLAGS
|
||||||
|
"-mtvos-simulator-version-min=${DEPLOYMENT_TARGET}")
|
||||||
|
elseif(PLATFORM_INT STREQUAL "WATCHOS")
|
||||||
|
set(SDK_NAME_VERSION_FLAGS
|
||||||
|
"-mwatchos-version-min=${DEPLOYMENT_TARGET}")
|
||||||
|
elseif(PLATFORM_INT STREQUAL "SIMULATOR_WATCHOS")
|
||||||
|
set(SDK_NAME_VERSION_FLAGS
|
||||||
|
"-mwatchos-simulator-version-min=${DEPLOYMENT_TARGET}")
|
||||||
|
else()
|
||||||
|
# SIMULATOR or SIMULATOR64 both use -mios-simulator-version-min.
|
||||||
|
set(SDK_NAME_VERSION_FLAGS
|
||||||
|
"-mios-simulator-version-min=${DEPLOYMENT_TARGET}")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
# Newer versions of CMake sets the version min flags correctly
|
||||||
|
set(CMAKE_OSX_DEPLOYMENT_TARGET ${DEPLOYMENT_TARGET} CACHE STRING
|
||||||
|
"Set CMake deployment target" ${FORCE_CACHE})
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_C_LINK_FLAGS
|
if(DEFINED APPLE_TARGET_TRIPLE_INT)
|
||||||
"-Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
|
set(APPLE_TARGET_TRIPLE ${APPLE_TARGET_TRIPLE_INT} CACHE STRING
|
||||||
set(CMAKE_CXX_LINK_FLAGS
|
"Autoconf target triple compatible variable" ${FORCE_CACHE})
|
||||||
"-Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_BITCODE_INT)
|
||||||
|
set(BITCODE "-fembed-bitcode")
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_BITCODE_GENERATION_MODE "bitcode" CACHE INTERNAL "")
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "YES" CACHE INTERNAL "")
|
||||||
|
else()
|
||||||
|
set(BITCODE "")
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" CACHE INTERNAL "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_ARC_INT)
|
||||||
|
set(FOBJC_ARC "-fobjc-arc")
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "YES" CACHE INTERNAL "")
|
||||||
|
else()
|
||||||
|
set(FOBJC_ARC "-fno-objc-arc")
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC "NO" CACHE INTERNAL "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT ENABLE_VISIBILITY_INT)
|
||||||
|
set(VISIBILITY "-fvisibility=hidden")
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "YES" CACHE INTERNAL "")
|
||||||
|
else()
|
||||||
|
set(VISIBILITY "")
|
||||||
|
set(CMAKE_XCODE_ATTRIBUTE_GCC_SYMBOLS_PRIVATE_EXTERN "NO" CACHE INTERNAL "")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT IOS_TOOLCHAIN_HAS_RUN)
|
||||||
|
#Check if Xcode generator is used, since that will handle these flags automagically
|
||||||
|
if(USED_CMAKE_GENERATOR MATCHES "Xcode")
|
||||||
|
message(STATUS "Not setting any manual command-line buildflags, since Xcode is selected as generator.")
|
||||||
|
else()
|
||||||
|
set(CMAKE_C_FLAGS
|
||||||
|
"${SDK_NAME_VERSION_FLAGS} ${BITCODE} -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_C_FLAGS}")
|
||||||
|
# Hidden visibilty is required for C++ on iOS.
|
||||||
|
set(CMAKE_CXX_FLAGS
|
||||||
|
"${SDK_NAME_VERSION_FLAGS} ${BITCODE} ${VISIBILITY} -fvisibility-inlines-hidden -fobjc-abi-version=2 ${FOBJC_ARC} ${CMAKE_CXX_FLAGS}")
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} -O0 -g ${CMAKE_CXX_FLAGS_DEBUG}")
|
||||||
|
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS} -DNDEBUG -Os -ffast-math ${CMAKE_CXX_FLAGS_MINSIZEREL}")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} -DNDEBUG -O2 -g -ffast-math ${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -DNDEBUG -O3 -ffast-math ${CMAKE_CXX_FLAGS_RELEASE}")
|
||||||
|
set(CMAKE_C_LINK_FLAGS "${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_C_LINK_FLAGS}")
|
||||||
|
set(CMAKE_CXX_LINK_FLAGS "${SDK_NAME_VERSION_FLAGS} -Wl,-search_paths_first ${CMAKE_CXX_LINK_FLAGS}")
|
||||||
|
set(CMAKE_ASM_FLAGS "${CFLAGS} -x assembler-with-cpp")
|
||||||
|
|
||||||
|
# In order to ensure that the updated compiler flags are used in try_compile()
|
||||||
|
# tests, we have to forcibly set them in the CMake cache, not merely set them
|
||||||
|
# in the local scope.
|
||||||
|
set(VARS_TO_FORCE_IN_CACHE
|
||||||
|
CMAKE_C_FLAGS
|
||||||
|
CMAKE_CXX_FLAGS
|
||||||
|
CMAKE_CXX_FLAGS_DEBUG
|
||||||
|
CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||||
|
CMAKE_CXX_FLAGS_MINSIZEREL
|
||||||
|
CMAKE_CXX_FLAGS_RELEASE
|
||||||
|
CMAKE_C_LINK_FLAGS
|
||||||
|
CMAKE_CXX_LINK_FLAGS)
|
||||||
|
foreach(VAR_TO_FORCE ${VARS_TO_FORCE_IN_CACHE})
|
||||||
|
set(${VAR_TO_FORCE} "${${VAR_TO_FORCE}}" CACHE STRING "" ${FORCE_CACHE})
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
## Print status messages to inform of the current state
|
||||||
|
message(STATUS "Configuring ${SDK_NAME} build for platform: ${PLATFORM_INT}, architecture(s): ${ARCHS}")
|
||||||
|
message(STATUS "Using SDK: ${CMAKE_OSX_SYSROOT_INT}")
|
||||||
|
if(DEFINED APPLE_TARGET_TRIPLE)
|
||||||
|
message(STATUS "Autoconf target triple: ${APPLE_TARGET_TRIPLE}")
|
||||||
|
endif()
|
||||||
|
message(STATUS "Using minimum deployment version: ${DEPLOYMENT_TARGET}"
|
||||||
|
" (SDK version: ${SDK_VERSION})")
|
||||||
|
if(MODERN_CMAKE)
|
||||||
|
message(STATUS "Merging integrated CMake 3.14+ iOS,tvOS,watchOS,macOS toolchain(s) with this toolchain!")
|
||||||
|
endif()
|
||||||
|
if(USED_CMAKE_GENERATOR MATCHES "Xcode")
|
||||||
|
message(STATUS "Using Xcode version: ${XCODE_VERSION}")
|
||||||
|
endif()
|
||||||
|
if(DEFINED SDK_NAME_VERSION_FLAGS)
|
||||||
|
message(STATUS "Using version flags: ${SDK_NAME_VERSION_FLAGS}")
|
||||||
|
endif()
|
||||||
|
message(STATUS "Using a data_ptr size of: ${CMAKE_CXX_SIZEOF_DATA_PTR}")
|
||||||
|
message(STATUS "Using install_name_tool: ${CMAKE_INSTALL_NAME_TOOL}")
|
||||||
|
if(ENABLE_BITCODE_INT)
|
||||||
|
message(STATUS "Enabling bitcode support.")
|
||||||
|
else()
|
||||||
|
message(STATUS "Disabling bitcode support.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(ENABLE_ARC_INT)
|
||||||
|
message(STATUS "Enabling ARC support.")
|
||||||
|
else()
|
||||||
|
message(STATUS "Disabling ARC support.")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(NOT ENABLE_VISIBILITY_INT)
|
||||||
|
message(STATUS "Hiding symbols (-fvisibility=hidden).")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
|
set(CMAKE_PLATFORM_HAS_INSTALLNAME 1)
|
||||||
set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS
|
set(CMAKE_SHARED_LINKER_FLAGS "-rpath @executable_path/Frameworks -rpath @loader_path/Frameworks")
|
||||||
"-dynamiclib -headerpad_max_install_names")
|
set(CMAKE_SHARED_LIBRARY_CREATE_C_FLAGS "-dynamiclib -Wl,-headerpad_max_install_names")
|
||||||
set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS
|
set(CMAKE_SHARED_MODULE_CREATE_C_FLAGS "-bundle -Wl,-headerpad_max_install_names")
|
||||||
"-bundle -headerpad_max_install_names")
|
set(CMAKE_SHARED_MODULE_LOADER_C_FLAG "-Wl,-bundle_loader,")
|
||||||
set(CMAKE_SHARED_MODULE_LOADER_C_FLAG
|
set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG "-Wl,-bundle_loader,")
|
||||||
"-Wl,-bundle_loader,")
|
set(CMAKE_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a")
|
||||||
set(CMAKE_SHARED_MODULE_LOADER_CXX_FLAG
|
set(CMAKE_SHARED_LIBRARY_SONAME_C_FLAG "-install_name")
|
||||||
"-Wl,-bundle_loader,")
|
|
||||||
set(CMAKE_FIND_LIBRARY_SUFFIXES
|
|
||||||
".dylib" ".so" ".a")
|
|
||||||
|
|
||||||
# hack: If a new cmake (which uses CMAKE_INSTALL_NAME_TOOL) runs on an old
|
# Set the find root to the iOS developer roots and to user defined paths.
|
||||||
# build tree (where `install_name_tool' was hardcoded), and where
|
set(CMAKE_FIND_ROOT_PATH ${CMAKE_OSX_SYSROOT_INT} ${CMAKE_PREFIX_PATH} CACHE STRING "Root path that will be prepended
|
||||||
# CMAKE_INSTALL_NAME_TOOL isn't in the cache and still cmake didn't
|
to all search paths")
|
||||||
# fail in `CMakeFindBinUtils.cmake' (because it isn't rerun), hardcode
|
# Default to searching for frameworks first.
|
||||||
# CMAKE_INSTALL_NAME_TOOL here to `install_name_tool' so it behaves as
|
|
||||||
# it did before.
|
|
||||||
if (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
|
|
||||||
find_program(CMAKE_INSTALL_NAME_TOOL install_name_tool)
|
|
||||||
endif (NOT DEFINED CMAKE_INSTALL_NAME_TOOL)
|
|
||||||
|
|
||||||
# set up iOS platform unless specified manually with IOS_PLATFORM
|
|
||||||
if (NOT DEFINED IOS_PLATFORM)
|
|
||||||
set(IOS_PLATFORM "OS")
|
|
||||||
endif (NOT DEFINED IOS_PLATFORM)
|
|
||||||
|
|
||||||
set(IOS_PLATFORM ${IOS_PLATFORM} CACHE STRING "Type of iOS Platform")
|
|
||||||
|
|
||||||
# check the platform selection and setup for developer root
|
|
||||||
if (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
set(IOS_PLATFORM_LOCATION "iPhoneOS.platform")
|
|
||||||
|
|
||||||
# this causes the installers to properly locate the output libraries
|
|
||||||
set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphoneos")
|
|
||||||
|
|
||||||
elseif (${IOS_PLATFORM} STREQUAL "SIMULATOR")
|
|
||||||
set(IOS_PLATFORM_LOCATION "iPhoneSimulator.platform")
|
|
||||||
|
|
||||||
# this causes the installers to properly locate the output libraries
|
|
||||||
set(CMAKE_XCODE_EFFECTIVE_PLATFORMS "-iphonesimulator")
|
|
||||||
|
|
||||||
else (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"Unsupported IOS_PLATFORM value selected. Please choose OS or SIMULATOR.")
|
|
||||||
|
|
||||||
endif (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
|
|
||||||
# set up iOS developer location unless specified manually with
|
|
||||||
# CMAKE_IOS_DEVELOPER_ROOT --
|
|
||||||
# note that Xcode 4.3 changed the installation location; choose the most
|
|
||||||
# recent one available
|
|
||||||
set(XCODE_POST_43_ROOT
|
|
||||||
"/Applications/Xcode.app/Contents/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
|
|
||||||
set(XCODE_PRE_43_ROOT
|
|
||||||
"/Developer/Platforms/${IOS_PLATFORM_LOCATION}/Developer")
|
|
||||||
|
|
||||||
if (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
|
|
||||||
if (EXISTS ${XCODE_POST_43_ROOT})
|
|
||||||
set(CMAKE_IOS_DEVELOPER_ROOT ${XCODE_POST_43_ROOT})
|
|
||||||
elseif (EXISTS ${XCODE_PRE_43_ROOT})
|
|
||||||
set(CMAKE_IOS_DEVELOPER_ROOT ${XCODE_PRE_43_ROOT})
|
|
||||||
endif (EXISTS ${XCODE_POST_43_ROOT})
|
|
||||||
endif (NOT DEFINED CMAKE_IOS_DEVELOPER_ROOT)
|
|
||||||
|
|
||||||
set(CMAKE_IOS_DEVELOPER_ROOT ${CMAKE_IOS_DEVELOPER_ROOT}
|
|
||||||
CACHE PATH "Location of iOS Platform"
|
|
||||||
)
|
|
||||||
|
|
||||||
# find and use the most recent iOS SDK unless specified manually with
|
|
||||||
# CMAKE_IOS_SDK_ROOT
|
|
||||||
if (NOT DEFINED CMAKE_IOS_SDK_ROOT)
|
|
||||||
file(GLOB _CMAKE_IOS_SDKS "${CMAKE_IOS_DEVELOPER_ROOT}/SDKs/*")
|
|
||||||
if (_CMAKE_IOS_SDKS)
|
|
||||||
list(SORT _CMAKE_IOS_SDKS)
|
|
||||||
list(REVERSE _CMAKE_IOS_SDKS)
|
|
||||||
list(GET _CMAKE_IOS_SDKS 0 CMAKE_IOS_SDK_ROOT)
|
|
||||||
else (_CMAKE_IOS_SDKS)
|
|
||||||
message(FATAL_ERROR
|
|
||||||
"No iOS SDK's found in default search path ${CMAKE_IOS_DEVELOPER_ROOT}. Manually set CMAKE_IOS_SDK_ROOT or install the iOS SDK.")
|
|
||||||
endif (_CMAKE_IOS_SDKS)
|
|
||||||
|
|
||||||
message(STATUS "Toolchain using default iOS SDK: ${CMAKE_IOS_SDK_ROOT}")
|
|
||||||
endif (NOT DEFINED CMAKE_IOS_SDK_ROOT)
|
|
||||||
|
|
||||||
set(CMAKE_IOS_SDK_ROOT ${CMAKE_IOS_SDK_ROOT}
|
|
||||||
CACHE PATH "Location of the selected iOS SDK"
|
|
||||||
)
|
|
||||||
|
|
||||||
# set the sysroot default to the most recent SDK
|
|
||||||
set(CMAKE_OSX_SYSROOT ${CMAKE_IOS_SDK_ROOT}
|
|
||||||
CACHE PATH "Sysroot used for iOS support"
|
|
||||||
)
|
|
||||||
|
|
||||||
# set the architecture for iOS --
|
|
||||||
# note that currently both ARCHS_STANDARD_32_BIT and
|
|
||||||
# ARCHS_UNIVERSAL_IPHONE_OS set armv7 only, so set both manually
|
|
||||||
if (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
set(IOS_ARCH $(ARCHS_STANDARD_32_64_BIT))
|
|
||||||
else (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
set(IOS_ARCH i386)
|
|
||||||
endif (${IOS_PLATFORM} STREQUAL "OS")
|
|
||||||
|
|
||||||
set(CMAKE_OSX_ARCHITECTURES ${IOS_ARCH}
|
|
||||||
CACHE string "Build architecture for iOS"
|
|
||||||
)
|
|
||||||
|
|
||||||
# set the find root to the iOS developer roots and to user defined paths
|
|
||||||
set(CMAKE_FIND_ROOT_PATH
|
|
||||||
${CMAKE_IOS_DEVELOPER_ROOT}
|
|
||||||
${CMAKE_IOS_SDK_ROOT}
|
|
||||||
${CMAKE_PREFIX_PATH}
|
|
||||||
CACHE string "iOS find search path root"
|
|
||||||
)
|
|
||||||
|
|
||||||
# default to searching for frameworks first
|
|
||||||
set(CMAKE_FIND_FRAMEWORK FIRST)
|
set(CMAKE_FIND_FRAMEWORK FIRST)
|
||||||
|
# Set up the default search directories for frameworks.
|
||||||
|
set(CMAKE_FRAMEWORK_PATH
|
||||||
|
${CMAKE_DEVELOPER_ROOT}/Library/PrivateFrameworks
|
||||||
|
${CMAKE_OSX_SYSROOT_INT}/System/Library/Frameworks
|
||||||
|
${CMAKE_FRAMEWORK_PATH} CACHE STRING "Frameworks search paths" ${FORCE_CACHE})
|
||||||
|
|
||||||
# set up the default search directories for frameworks
|
set(IOS_TOOLCHAIN_HAS_RUN TRUE CACHE BOOL "Has the CMake toolchain run already?" ${FORCE_CACHE})
|
||||||
set(CMAKE_SYSTEM_FRAMEWORK_PATH
|
|
||||||
${CMAKE_IOS_SDK_ROOT}/System/Library/Frameworks
|
|
||||||
${CMAKE_IOS_SDK_ROOT}/System/Library/PrivateFrameworks
|
|
||||||
${CMAKE_IOS_SDK_ROOT}/Developer/Library/Frameworks
|
|
||||||
)
|
|
||||||
|
|
||||||
# only search the iOS SDKs, not the remainder of the host filesystem
|
# By default, search both the specified iOS SDK and the remainder of the host filesystem.
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
|
if(NOT CMAKE_FIND_ROOT_PATH_MODE_PROGRAM)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH CACHE STRING "" ${FORCE_CACHE})
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
endif()
|
||||||
|
if(NOT CMAKE_FIND_ROOT_PATH_MODE_LIBRARY)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH CACHE STRING "" ${FORCE_CACHE})
|
||||||
|
endif()
|
||||||
|
if(NOT CMAKE_FIND_ROOT_PATH_MODE_INCLUDE)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH CACHE STRING "" ${FORCE_CACHE})
|
||||||
|
endif()
|
||||||
|
if(NOT CMAKE_FIND_ROOT_PATH_MODE_PACKAGE)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH CACHE STRING "" ${FORCE_CACHE})
|
||||||
|
endif()
|
||||||
|
|
||||||
# this little macro lets you set any Xcode specific property
|
#
|
||||||
macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
|
# Some helper-macros below to simplify and beautify the CMakeFile
|
||||||
set_property(TARGET ${TARGET}
|
#
|
||||||
PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
|
|
||||||
|
# This little macro lets you set any Xcode specific property.
|
||||||
|
macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE XCODE_RELVERSION)
|
||||||
|
set(XCODE_RELVERSION_I "${XCODE_RELVERSION}")
|
||||||
|
if(XCODE_RELVERSION_I STREQUAL "All")
|
||||||
|
set_property(TARGET ${TARGET} PROPERTY
|
||||||
|
XCODE_ATTRIBUTE_${XCODE_PROPERTY} "${XCODE_VALUE}")
|
||||||
|
else()
|
||||||
|
set_property(TARGET ${TARGET} PROPERTY
|
||||||
|
XCODE_ATTRIBUTE_${XCODE_PROPERTY}[variant=${XCODE_RELVERSION_I}] "${XCODE_VALUE}")
|
||||||
|
endif()
|
||||||
endmacro(set_xcode_property)
|
endmacro(set_xcode_property)
|
||||||
|
|
||||||
# this macro lets you find executable programs on the host system
|
# This macro lets you find executable programs on the host system.
|
||||||
macro(find_host_package)
|
macro(find_host_package)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY NEVER)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE NEVER)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER)
|
||||||
set(IOS FALSE)
|
set(IOS FALSE)
|
||||||
|
|
||||||
find_package(${ARGN})
|
find_package(${ARGN})
|
||||||
|
|
||||||
set(IOS TRUE)
|
set(IOS TRUE)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
|
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
|
||||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
|
||||||
|
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
|
||||||
endmacro(find_host_package)
|
endmacro(find_host_package)
|
||||||
|
|
||||||
# eof
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
# Copyright (C) 2015-2022 by
|
# Copyright (C) 2015-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -59,7 +59,7 @@ T := -o$(space)
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -c
|
CFLAGS ?= -c
|
||||||
|
@ -68,7 +68,7 @@ CFLAGS ?= -c
|
||||||
#
|
#
|
||||||
# we assume the compiler is already strictly ANSI
|
# we assume the compiler is already strictly ANSI
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?=
|
ANSIFLAGS :=
|
||||||
|
|
||||||
|
|
||||||
# Library linking
|
# Library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -60,14 +60,14 @@ TE := -e
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -q -c -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus
|
CFLAGS ?= -q -c -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?= -A
|
ANSIFLAGS := -A
|
||||||
|
|
||||||
|
|
||||||
# Library linking
|
# Library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -60,14 +60,14 @@ TE := -e
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -c -q -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus
|
CFLAGS ?= -c -q -y -d -v -Od -w-par -w-ccc -w-rch -w-pro -w-aus
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?= -A
|
ANSIFLAGS := -A
|
||||||
|
|
||||||
|
|
||||||
# Library linking
|
# Library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 2003-2022 by
|
# Copyright (C) 2003-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -58,14 +58,14 @@ T := -o$(space)
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -c -g -O6 -Wall
|
CFLAGS ?= -c -g -O6 -Wall
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?=
|
ANSIFLAGS :=
|
||||||
|
|
||||||
|
|
||||||
# Library linking
|
# Library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -59,7 +59,7 @@ T := -o$(space)
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
ifndef CFLAGS
|
ifndef CFLAGS
|
||||||
|
@ -82,9 +82,8 @@ ifndef CFLAGS
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
# You can override this on the command line.
|
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?= -std=c99 -pedantic
|
ANSIFLAGS := -ansi -pedantic
|
||||||
|
|
||||||
|
|
||||||
# Library linking
|
# Library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -58,14 +58,14 @@ T := -o$(space)
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -c -g -O3 -Wall
|
CFLAGS ?= -c -g -O3 -Wall
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?= -std=c99 -pedantic
|
ANSIFLAGS := -ansi -pedantic
|
||||||
|
|
||||||
|
|
||||||
# Library linking
|
# Library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -61,7 +61,7 @@ TE := /Fe
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
# Note that the Intel C/C++ compiler version 4.5 complains about
|
# Note that the Intel C/C++ compiler version 4.5 complains about
|
||||||
|
@ -74,7 +74,7 @@ CFLAGS ?= /nologo /c /Ox /G5 /W3 /Qwd32
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?= /Qansi_alias /Za
|
ANSIFLAGS := /Qansi_alias /Za
|
||||||
|
|
||||||
# Library linking
|
# Library linking
|
||||||
#
|
#
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -60,7 +60,7 @@ T := -o$(space)
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -c -g
|
CFLAGS ?= -c -g
|
||||||
|
@ -71,7 +71,7 @@ CFLAGS ?= -c -g
|
||||||
#
|
#
|
||||||
# the "-A" flag simply increments verbosity about non ANSI code
|
# the "-A" flag simply increments verbosity about non ANSI code
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?= -A
|
ANSIFLAGS := -A
|
||||||
|
|
||||||
|
|
||||||
# library linking
|
# library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -63,14 +63,14 @@ TE := /Fe
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= /nologo /c /Ox /W3 /WX
|
CFLAGS ?= /nologo /c /Ox /W3 /WX
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?= /Za /D_CRT_SECURE_NO_DEPRECATE
|
ANSIFLAGS := /Za /D_CRT_SECURE_NO_DEPRECATE
|
||||||
|
|
||||||
|
|
||||||
# Library linking
|
# Library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -60,14 +60,14 @@ T := -FO=
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -zq
|
CFLAGS ?= -zq
|
||||||
|
|
||||||
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
# ANSIFLAGS: Put there the flags used to make your compiler ANSI-compliant.
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?= -za
|
ANSIFLAGS := -za
|
||||||
|
|
||||||
|
|
||||||
# Library linking
|
# Library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -60,7 +60,7 @@ T := -Fo
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
CFLAGS ?= -c -g2 -O
|
CFLAGS ?= -c -g2 -O
|
||||||
|
@ -69,7 +69,7 @@ CFLAGS ?= -c -g2 -O
|
||||||
#
|
#
|
||||||
# LCC is pure ANSI anyway!
|
# LCC is pure ANSI anyway!
|
||||||
#
|
#
|
||||||
ANSIFLAGS ?=
|
ANSIFLAGS :=
|
||||||
|
|
||||||
|
|
||||||
# library linking
|
# library linking
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
# This sub-Makefile is in charge of detecting the current platform. It sets
|
# This sub-Makefile is in charge of detecting the current platform. It sets
|
||||||
# the following variables:
|
# the following variables:
|
||||||
#
|
#
|
||||||
# PLATFORM_DIR The configuration and system-specific directory. Usually
|
# BUILD_DIR The configuration and system-specific directory. Usually
|
||||||
# `builds/$(PLATFORM)' but can be different for custom builds
|
# `builds/$(PLATFORM)' but can be different for custom builds
|
||||||
# of the library.
|
# of the library.
|
||||||
#
|
#
|
||||||
|
@ -49,8 +49,8 @@ SEP := /
|
||||||
BUILD_CONFIG := $(TOP_DIR)/builds
|
BUILD_CONFIG := $(TOP_DIR)/builds
|
||||||
|
|
||||||
# These two assignments must be delayed.
|
# These two assignments must be delayed.
|
||||||
PLATFORM_DIR = $(BUILD_CONFIG)/$(PLATFORM)
|
BUILD_DIR = $(BUILD_CONFIG)/$(PLATFORM)
|
||||||
CONFIG_RULES = $(PLATFORM_DIR)/$(CONFIG_FILE)
|
CONFIG_RULES = $(BUILD_DIR)/$(CONFIG_FILE)
|
||||||
|
|
||||||
# We define the BACKSLASH variable to hold a single back-slash character.
|
# We define the BACKSLASH variable to hold a single back-slash character.
|
||||||
# This is needed because a line like
|
# This is needed because a line like
|
||||||
|
@ -113,7 +113,7 @@ std_setup:
|
||||||
$(info )
|
$(info )
|
||||||
$(info $(empty) platform $(PLATFORM))
|
$(info $(empty) platform $(PLATFORM))
|
||||||
$(info $(empty) compiler $(CC))
|
$(info $(empty) compiler $(CC))
|
||||||
$(info $(empty) configuration directory $(subst /,$(SEP),$(PLATFORM_DIR)))
|
$(info $(empty) configuration directory $(subst /,$(SEP),$(BUILD_DIR)))
|
||||||
$(info $(empty) configuration rules $(subst /,$(SEP),$(CONFIG_RULES)))
|
$(info $(empty) configuration rules $(subst /,$(SEP),$(CONFIG_RULES)))
|
||||||
$(info )
|
$(info )
|
||||||
$(info If this does not correspond to your system or settings please remove the file)
|
$(info If this does not correspond to your system or settings please remove the file)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -13,11 +13,11 @@
|
||||||
# fully.
|
# fully.
|
||||||
|
|
||||||
|
|
||||||
DELETE := del
|
DELETE := del
|
||||||
CAT := type
|
CAT := type
|
||||||
SEP := $(strip \ )
|
SEP := $(strip \ )
|
||||||
PLATFORM_DIR := $(TOP_DIR)/builds/dos
|
BUILD_DIR := $(TOP_DIR)/builds/dos
|
||||||
PLATFORM := dos
|
PLATFORM := dos
|
||||||
|
|
||||||
# This is used for `make refdoc' and `make refdoc-venv'
|
# This is used for `make refdoc' and `make refdoc-venv'
|
||||||
#
|
#
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 2003-2022 by
|
# Copyright (C) 2003-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 2003-2022 by
|
# Copyright (C) 2003-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 2005-2022 by
|
# Copyright (C) 2005-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -20,8 +20,8 @@
|
||||||
# The following variables (set by other Makefile components, in the
|
# The following variables (set by other Makefile components, in the
|
||||||
# environment, or on the command line) are used:
|
# environment, or on the command line) are used:
|
||||||
#
|
#
|
||||||
# PLATFORM_DIR The architecture-dependent directory,
|
# BUILD_DIR The architecture dependent directory,
|
||||||
# e.g., `$(TOP_DIR)/builds/unix'. Added to INCLUDES also.
|
# e.g. `$(TOP_DIR)/builds/unix'. Added to INCLUDES also.
|
||||||
#
|
#
|
||||||
# OBJ_DIR The directory in which object files are created.
|
# OBJ_DIR The directory in which object files are created.
|
||||||
#
|
#
|
||||||
|
@ -121,7 +121,7 @@ PROJECT_LIBRARY := $(LIB_DIR)/$(LIBRARY).$A
|
||||||
#
|
#
|
||||||
INCLUDES := $(subst /,$(COMPILER_SEP),$(OBJ_DIR) \
|
INCLUDES := $(subst /,$(COMPILER_SEP),$(OBJ_DIR) \
|
||||||
$(DEVEL_DIR) \
|
$(DEVEL_DIR) \
|
||||||
$(PLATFORM_DIR) \
|
$(BUILD_DIR) \
|
||||||
$(TOP_DIR)/include)
|
$(TOP_DIR)/include)
|
||||||
|
|
||||||
INCLUDE_FLAGS := $(INCLUDES:%=$I%)
|
INCLUDE_FLAGS := $(INCLUDES:%=$I%)
|
||||||
|
@ -150,9 +150,9 @@ endif
|
||||||
#
|
#
|
||||||
# `CPPFLAGS' might be specified by the user in the environment.
|
# `CPPFLAGS' might be specified by the user in the environment.
|
||||||
#
|
#
|
||||||
FT_CFLAGS = $(CPPFLAGS) \
|
FT_CFLAGS = $(CPPFLAGS) \
|
||||||
$(CFLAGS) \
|
$(CFLAGS) \
|
||||||
$DFT2_BUILD_LIBRARY
|
$DFT2_BUILD_LIBRARY
|
||||||
|
|
||||||
FT_COMPILE := $(CC) $(ANSIFLAGS) $(INCLUDE_FLAGS) $(FT_CFLAGS)
|
FT_COMPILE := $(CC) $(ANSIFLAGS) $(INCLUDE_FLAGS) $(FT_CFLAGS)
|
||||||
|
|
||||||
|
@ -175,16 +175,16 @@ OBJECTS_LIST :=
|
||||||
# changes, the whole library is recompiled.
|
# changes, the whole library is recompiled.
|
||||||
#
|
#
|
||||||
ifneq ($(wildcard $(OBJ_DIR)/ftoption.h),)
|
ifneq ($(wildcard $(OBJ_DIR)/ftoption.h),)
|
||||||
FTOPTION_H := $(OBJ_DIR)/ftoption.h
|
FTOPTION_H := $(OBJ_DIR)/ftoption.h
|
||||||
else ifneq ($(wildcard $(PLATFORM_DIR)/ftoption.h),)
|
else ifneq ($(wildcard $(BUILD_DIR)/ftoption.h),)
|
||||||
FTOPTION_H := $(PLATFORM_DIR)/ftoption.h
|
FTOPTION_H := $(BUILD_DIR)/ftoption.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
PUBLIC_H := $(wildcard $(PUBLIC_DIR)/*.h)
|
PUBLIC_H := $(wildcard $(PUBLIC_DIR)/*.h)
|
||||||
INTERNAL_H := $(wildcard $(INTERNAL_DIR)/*.h) \
|
INTERNAL_H := $(wildcard $(INTERNAL_DIR)/*.h) \
|
||||||
$(wildcard $(SERVICES_DIR)/*.h)
|
$(wildcard $(SERVICES_DIR)/*.h)
|
||||||
CONFIG_H := $(wildcard $(CONFIG_DIR)/*.h) \
|
CONFIG_H := $(wildcard $(CONFIG_DIR)/*.h) \
|
||||||
$(wildcard $(PLATFORM_DIR)/config/*.h) \
|
$(wildcard $(BUILD_DIR)/config/*.h) \
|
||||||
$(FTMODULE_H) \
|
$(FTMODULE_H) \
|
||||||
$(FTOPTION_H)
|
$(FTOPTION_H)
|
||||||
DEVEL_H := $(wildcard $(TOP_DIR)/devel/*.h)
|
DEVEL_H := $(wildcard $(TOP_DIR)/devel/*.h)
|
||||||
|
@ -220,7 +220,6 @@ $(FTDEBUG_OBJ): $(FTDEBUG_SRC) $(FREETYPE_H)
|
||||||
#
|
#
|
||||||
include $(SRC_DIR)/base/rules.mk
|
include $(SRC_DIR)/base/rules.mk
|
||||||
include $(patsubst %,$(SRC_DIR)/%/rules.mk,$(MODULES))
|
include $(patsubst %,$(SRC_DIR)/%/rules.mk,$(MODULES))
|
||||||
include $(SRC_DIR)/dlg/rules.mk
|
|
||||||
|
|
||||||
|
|
||||||
# ftinit component
|
# ftinit component
|
||||||
|
@ -261,8 +260,8 @@ endif
|
||||||
|
|
||||||
# All FreeType library objects.
|
# All FreeType library objects.
|
||||||
#
|
#
|
||||||
OBJ_M := $(BASE_OBJ_M) $(BASE_EXT_OBJ) $(DRV_OBJS_M) $(DLG_OBJS_M)
|
OBJ_M := $(BASE_OBJ_M) $(BASE_EXT_OBJ) $(DRV_OBJS_M)
|
||||||
OBJ_S := $(BASE_OBJ_S) $(BASE_EXT_OBJ) $(DRV_OBJS_S) $(DLG_OBJS_S)
|
OBJ_S := $(BASE_OBJ_S) $(BASE_EXT_OBJ) $(DRV_OBJS_S)
|
||||||
|
|
||||||
|
|
||||||
# The target `multi' on the Make command line indicates that we want to
|
# The target `multi' on the Make command line indicates that we want to
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<string>English</string>
|
<string>English</string>
|
||||||
|
|
||||||
<key>CFBundleExecutable</key>
|
<key>CFBundleExecutable</key>
|
||||||
<string>freetype</string>
|
<string>FreeType</string>
|
||||||
|
|
||||||
<key>CFBundleGetInfoString</key>
|
<key>CFBundleGetInfoString</key>
|
||||||
<string>FreeType ${PROJECT_VERSION}</string>
|
<string>FreeType ${PROJECT_VERSION}</string>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
/* Mac FOND support. Written by just@letterror.com. */
|
/* Mac FOND support. Written by just@letterror.com. */
|
||||||
/* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */
|
/* Heavily Fixed by mpsuzuki, George Williams and Sean McBride */
|
||||||
/* */
|
/* */
|
||||||
/* Copyright (C) 1996-2022 by */
|
/* Copyright (C) 1996-2020 by */
|
||||||
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
|
/* Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||||
/* */
|
/* */
|
||||||
/* This file is part of the FreeType project, and may only be used, */
|
/* This file is part of the FreeType project, and may only be used, */
|
||||||
|
@ -97,7 +97,7 @@
|
||||||
|
|
||||||
#define FT_DEPRECATED_ATTRIBUTE
|
#define FT_DEPRECATED_ATTRIBUTE
|
||||||
|
|
||||||
#include <freetype/ftmac.h>
|
#include FT_MAC_H
|
||||||
|
|
||||||
/* undefine blocking-macros in ftmac.h */
|
/* undefine blocking-macros in ftmac.h */
|
||||||
#undef FT_GetFile_From_Mac_Name
|
#undef FT_GetFile_From_Mac_Name
|
||||||
|
@ -447,7 +447,7 @@ typedef short ResourceIndex;
|
||||||
|
|
||||||
stream->descriptor.pointer = NULL;
|
stream->descriptor.pointer = NULL;
|
||||||
stream->size = 0;
|
stream->size = 0;
|
||||||
stream->base = NULL;
|
stream->base = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -939,7 +939,7 @@ typedef short ResourceIndex;
|
||||||
if ( lwfn_file_name[0] )
|
if ( lwfn_file_name[0] )
|
||||||
{
|
{
|
||||||
err = lookup_lwfn_by_fond( pathname, lwfn_file_name,
|
err = lookup_lwfn_by_fond( pathname, lwfn_file_name,
|
||||||
buff, sizeof ( buff ) );
|
buff, sizeof ( buff ) );
|
||||||
if ( !err )
|
if ( !err )
|
||||||
have_lwfn = 1;
|
have_lwfn = 1;
|
||||||
}
|
}
|
||||||
|
@ -1011,7 +1011,7 @@ typedef short ResourceIndex;
|
||||||
old_total_size = total_size;
|
old_total_size = total_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( FT_QALLOC( buffer, (FT_Long)total_size ) )
|
if ( FT_ALLOC( buffer, (FT_Long)total_size ) )
|
||||||
goto Error;
|
goto Error;
|
||||||
|
|
||||||
/* Second pass: append all POST data to the buffer, add PFB fields. */
|
/* Second pass: append all POST data to the buffer, add PFB fields. */
|
||||||
|
@ -1127,7 +1127,7 @@ typedef short ResourceIndex;
|
||||||
return FT_THROW( Invalid_Handle );
|
return FT_THROW( Invalid_Handle );
|
||||||
|
|
||||||
sfnt_size = (FT_ULong)GetHandleSize( sfnt );
|
sfnt_size = (FT_ULong)GetHandleSize( sfnt );
|
||||||
if ( FT_QALLOC( sfnt_data, (FT_Long)sfnt_size ) )
|
if ( FT_ALLOC( sfnt_data, (FT_Long)sfnt_size ) )
|
||||||
{
|
{
|
||||||
ReleaseResource( sfnt );
|
ReleaseResource( sfnt );
|
||||||
return error;
|
return error;
|
||||||
|
|
|
@ -1,117 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# Copyright (C) 2020-2022 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.
|
|
||||||
|
|
||||||
"""Extract the FreeType version numbers from `<freetype/freetype.h>`.
|
|
||||||
|
|
||||||
This script parses the header to extract the version number defined there.
|
|
||||||
By default, the full dotted version number is printed, but `--major`,
|
|
||||||
`--minor` or `--patch` can be used to only print one of these values
|
|
||||||
instead.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
# Expected input:
|
|
||||||
#
|
|
||||||
# ...
|
|
||||||
# #define FREETYPE_MAJOR 2
|
|
||||||
# #define FREETYPE_MINOR 10
|
|
||||||
# #define FREETYPE_PATCH 2
|
|
||||||
# ...
|
|
||||||
|
|
||||||
RE_MAJOR = re.compile(r"^ \#define \s+ FREETYPE_MAJOR \s+ (.*) $", re.X)
|
|
||||||
RE_MINOR = re.compile(r"^ \#define \s+ FREETYPE_MINOR \s+ (.*) $", re.X)
|
|
||||||
RE_PATCH = re.compile(r"^ \#define \s+ FREETYPE_PATCH \s+ (.*) $", re.X)
|
|
||||||
|
|
||||||
|
|
||||||
def parse_freetype_header(header):
|
|
||||||
major = None
|
|
||||||
minor = None
|
|
||||||
patch = None
|
|
||||||
|
|
||||||
for line in header.splitlines():
|
|
||||||
line = line.rstrip()
|
|
||||||
m = RE_MAJOR.match(line)
|
|
||||||
if m:
|
|
||||||
assert major == None, "FREETYPE_MAJOR appears more than once!"
|
|
||||||
major = m.group(1)
|
|
||||||
continue
|
|
||||||
|
|
||||||
m = RE_MINOR.match(line)
|
|
||||||
if m:
|
|
||||||
assert minor == None, "FREETYPE_MINOR appears more than once!"
|
|
||||||
minor = m.group(1)
|
|
||||||
continue
|
|
||||||
|
|
||||||
m = RE_PATCH.match(line)
|
|
||||||
if m:
|
|
||||||
assert patch == None, "FREETYPE_PATCH appears more than once!"
|
|
||||||
patch = m.group(1)
|
|
||||||
continue
|
|
||||||
|
|
||||||
assert (
|
|
||||||
major and minor and patch
|
|
||||||
), "This header is missing one of FREETYPE_MAJOR, FREETYPE_MINOR or FREETYPE_PATCH!"
|
|
||||||
|
|
||||||
return (major, minor, patch)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(description=__doc__)
|
|
||||||
|
|
||||||
group = parser.add_mutually_exclusive_group()
|
|
||||||
group.add_argument(
|
|
||||||
"--major",
|
|
||||||
action="store_true",
|
|
||||||
help="Only print the major version number.",
|
|
||||||
)
|
|
||||||
group.add_argument(
|
|
||||||
"--minor",
|
|
||||||
action="store_true",
|
|
||||||
help="Only print the minor version number.",
|
|
||||||
)
|
|
||||||
group.add_argument(
|
|
||||||
"--patch",
|
|
||||||
action="store_true",
|
|
||||||
help="Only print the patch version number.",
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"input",
|
|
||||||
metavar="FREETYPE_H",
|
|
||||||
help="The input freetype.h header to parse.",
|
|
||||||
)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
with open(args.input) as f:
|
|
||||||
header = f.read()
|
|
||||||
|
|
||||||
version = parse_freetype_header(header)
|
|
||||||
|
|
||||||
if args.major:
|
|
||||||
print(version[0])
|
|
||||||
elif args.minor:
|
|
||||||
print(version[1])
|
|
||||||
elif args.patch:
|
|
||||||
print(version[2])
|
|
||||||
else:
|
|
||||||
print("%s.%s.%s" % version)
|
|
||||||
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
sys.exit(main())
|
|
|
@ -1,115 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# Copyright (C) 2020-2022 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.
|
|
||||||
|
|
||||||
"""Extract the libtool version from `configure.raw`.
|
|
||||||
|
|
||||||
This script parses the `configure.raw` file to extract the libtool version
|
|
||||||
number. By default, the full dotted version number is printed, but
|
|
||||||
`--major`, `--minor` or `--patch` can be used to only print one of these
|
|
||||||
values instead.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
# Expected input:
|
|
||||||
#
|
|
||||||
# ...
|
|
||||||
# version_info='23:2:17'
|
|
||||||
# ...
|
|
||||||
|
|
||||||
RE_VERSION_INFO = re.compile(r"^version_info='(\d+):(\d+):(\d+)'")
|
|
||||||
|
|
||||||
|
|
||||||
def parse_configure_raw(header):
|
|
||||||
major = None
|
|
||||||
minor = None
|
|
||||||
patch = None
|
|
||||||
|
|
||||||
for line in header.splitlines():
|
|
||||||
line = line.rstrip()
|
|
||||||
m = RE_VERSION_INFO.match(line)
|
|
||||||
if m:
|
|
||||||
assert major == None, "version_info appears more than once!"
|
|
||||||
major = m.group(1)
|
|
||||||
minor = m.group(2)
|
|
||||||
patch = m.group(3)
|
|
||||||
continue
|
|
||||||
|
|
||||||
assert (
|
|
||||||
major and minor and patch
|
|
||||||
), "This input file is missing a version_info definition!"
|
|
||||||
|
|
||||||
return (major, minor, patch)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(description=__doc__)
|
|
||||||
|
|
||||||
group = parser.add_mutually_exclusive_group()
|
|
||||||
group.add_argument(
|
|
||||||
"--major",
|
|
||||||
action="store_true",
|
|
||||||
help="Only print the major version number.",
|
|
||||||
)
|
|
||||||
group.add_argument(
|
|
||||||
"--minor",
|
|
||||||
action="store_true",
|
|
||||||
help="Only print the minor version number.",
|
|
||||||
)
|
|
||||||
group.add_argument(
|
|
||||||
"--patch",
|
|
||||||
action="store_true",
|
|
||||||
help="Only print the patch version number.",
|
|
||||||
)
|
|
||||||
group.add_argument(
|
|
||||||
"--soversion",
|
|
||||||
action="store_true",
|
|
||||||
help="Only print the libtool library suffix.",
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"input",
|
|
||||||
metavar="CONFIGURE_RAW",
|
|
||||||
help="The input configure.raw file to parse.",
|
|
||||||
)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
with open(args.input) as f:
|
|
||||||
raw_file = f.read()
|
|
||||||
|
|
||||||
version = parse_configure_raw(raw_file)
|
|
||||||
|
|
||||||
if args.major:
|
|
||||||
print(version[0])
|
|
||||||
elif args.minor:
|
|
||||||
print(version[1])
|
|
||||||
elif args.patch:
|
|
||||||
print(version[2])
|
|
||||||
elif args.soversion:
|
|
||||||
# Convert libtool version_info to the library suffix.
|
|
||||||
# (current,revision, age) -> (current - age, age, revision)
|
|
||||||
print(
|
|
||||||
"%d.%s.%s"
|
|
||||||
% (int(version[0]) - int(version[2]), version[2], version[1])
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
print("%s.%s.%s" % version)
|
|
||||||
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
sys.exit(main())
|
|
|
@ -1,89 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# Copyright (C) 2020-2022 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.
|
|
||||||
|
|
||||||
"""Generate FreeType reference documentation."""
|
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import glob
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(description=__doc__)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--input-dir",
|
|
||||||
required=True,
|
|
||||||
help="Top-level FreeType source directory.",
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--version", required=True, help='FreeType version (e.g. "2.x.y").'
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--output-dir", required=True, help="Output directory."
|
|
||||||
)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
# Get the list of input files of interest.
|
|
||||||
include_dir = os.path.join(args.input_dir, "include")
|
|
||||||
include_config_dir = os.path.join(include_dir, "config")
|
|
||||||
include_cache_dir = os.path.join(include_dir, "cache")
|
|
||||||
|
|
||||||
all_headers = (
|
|
||||||
glob.glob(os.path.join(args.input_dir, "include", "freetype", "*.h"))
|
|
||||||
+ glob.glob(
|
|
||||||
os.path.join(
|
|
||||||
args.input_dir, "include", "freetype", "config", "*.h"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
+ glob.glob(
|
|
||||||
os.path.join(
|
|
||||||
args.input_dir, "include", "freetype", "cache", "*.h"
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if not os.path.exists(args.output_dir):
|
|
||||||
os.makedirs(args.output_dir)
|
|
||||||
else:
|
|
||||||
assert os.path.isdir(args.output_dir), (
|
|
||||||
"Not a directory: " + args.output_dir
|
|
||||||
)
|
|
||||||
|
|
||||||
cmds = [
|
|
||||||
sys.executable,
|
|
||||||
"-m",
|
|
||||||
"docwriter",
|
|
||||||
"--prefix=ft2",
|
|
||||||
"--title=FreeType-" + args.version,
|
|
||||||
"--site=reference",
|
|
||||||
"--output=" + args.output_dir,
|
|
||||||
] + all_headers
|
|
||||||
|
|
||||||
print("Running docwriter...")
|
|
||||||
subprocess.check_call(cmds)
|
|
||||||
|
|
||||||
print("Building static site...")
|
|
||||||
subprocess.check_call(
|
|
||||||
[sys.executable, "-m", "mkdocs", "build"], cwd=args.output_dir
|
|
||||||
)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
sys.exit(main())
|
|
|
@ -1,171 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# Copyright (C) 2020-2022 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.
|
|
||||||
|
|
||||||
"""Parse modules.cfg and dump its output either as ftmodule.h or a list of
|
|
||||||
base extensions.
|
|
||||||
"""
|
|
||||||
|
|
||||||
from __future__ import print_function
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
# Expected input:
|
|
||||||
#
|
|
||||||
# ...
|
|
||||||
# FONT_MODULES += <name>
|
|
||||||
# HINTING_MODULES += <name>
|
|
||||||
# RASTER_MODULES += <name>
|
|
||||||
# AUX_MODULES += <name>
|
|
||||||
# BASE_EXTENSIONS += <name>
|
|
||||||
# ...
|
|
||||||
|
|
||||||
|
|
||||||
def parse_modules_cfg(input_file):
|
|
||||||
|
|
||||||
lists = {
|
|
||||||
"FONT_MODULES": [],
|
|
||||||
"HINTING_MODULES": [],
|
|
||||||
"RASTER_MODULES": [],
|
|
||||||
"AUX_MODULES": [],
|
|
||||||
"BASE_EXTENSIONS": [],
|
|
||||||
}
|
|
||||||
|
|
||||||
for line in input_file.splitlines():
|
|
||||||
line = line.rstrip()
|
|
||||||
# Ignore empty lines and those that start with a comment.
|
|
||||||
if not line or line[0] == "#":
|
|
||||||
continue
|
|
||||||
|
|
||||||
items = line.split()
|
|
||||||
assert len(items) == 3 and items[1] == "+=", (
|
|
||||||
"Unexpected input line [%s]" % line
|
|
||||||
)
|
|
||||||
assert items[0] in lists, (
|
|
||||||
"Unexpected configuration variable name " + items[0]
|
|
||||||
)
|
|
||||||
|
|
||||||
lists[items[0]].append(items[2])
|
|
||||||
|
|
||||||
return lists
|
|
||||||
|
|
||||||
|
|
||||||
def generate_ftmodule(lists):
|
|
||||||
result = "/* This is a generated file. */\n"
|
|
||||||
for driver in lists["FONT_MODULES"]:
|
|
||||||
if driver == "sfnt": # Special case for the sfnt 'driver'.
|
|
||||||
result += "FT_USE_MODULE( FT_Module_Class, sfnt_module_class )\n"
|
|
||||||
continue
|
|
||||||
|
|
||||||
name = {
|
|
||||||
"truetype": "tt",
|
|
||||||
"type1": "t1",
|
|
||||||
"cid": "t1cid",
|
|
||||||
"type42": "t42",
|
|
||||||
"winfonts": "winfnt",
|
|
||||||
}.get(driver, driver)
|
|
||||||
result += (
|
|
||||||
"FT_USE_MODULE( FT_Driver_ClassRec, %s_driver_class )\n" % name
|
|
||||||
)
|
|
||||||
|
|
||||||
for module in lists["HINTING_MODULES"]:
|
|
||||||
result += (
|
|
||||||
"FT_USE_MODULE( FT_Module_Class, %s_module_class )\n" % module
|
|
||||||
)
|
|
||||||
|
|
||||||
for module in lists["RASTER_MODULES"]:
|
|
||||||
name = {
|
|
||||||
"raster": "ft_raster1",
|
|
||||||
"smooth": "ft_smooth",
|
|
||||||
"svg": "ft_svg",
|
|
||||||
}.get(module)
|
|
||||||
result += (
|
|
||||||
"FT_USE_MODULE( FT_Renderer_Class, %s_renderer_class )\n" % name
|
|
||||||
)
|
|
||||||
|
|
||||||
for module in lists["AUX_MODULES"]:
|
|
||||||
if module in ("psaux", "psnames", "otvalid", "gxvalid"):
|
|
||||||
result += (
|
|
||||||
"FT_USE_MODULE( FT_Module_Class, %s_module_class )\n" % module
|
|
||||||
)
|
|
||||||
|
|
||||||
result += "/* EOF */\n"
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def generate_main_modules(lists):
|
|
||||||
return "\n".join(
|
|
||||||
lists["FONT_MODULES"]
|
|
||||||
+ lists["HINTING_MODULES"]
|
|
||||||
+ lists["RASTER_MODULES"]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def generate_aux_modules(lists):
|
|
||||||
return "\n".join(lists["AUX_MODULES"])
|
|
||||||
|
|
||||||
|
|
||||||
def generate_base_extensions(lists):
|
|
||||||
return "\n".join(lists["BASE_EXTENSIONS"])
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(description=__doc__)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--format",
|
|
||||||
required=True,
|
|
||||||
choices=(
|
|
||||||
"ftmodule.h",
|
|
||||||
"main-modules",
|
|
||||||
"aux-modules",
|
|
||||||
"base-extensions-list",
|
|
||||||
),
|
|
||||||
help="Select output format.",
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"input",
|
|
||||||
metavar="CONFIGURE_RAW",
|
|
||||||
help="The input configure.raw file to parse.",
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument("--output", help="Output file (default is stdout).")
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
with open(args.input) as f:
|
|
||||||
input_data = f.read()
|
|
||||||
|
|
||||||
lists = parse_modules_cfg(input_data)
|
|
||||||
|
|
||||||
if args.format == "ftmodule.h":
|
|
||||||
result = generate_ftmodule(lists)
|
|
||||||
elif args.format == "main-modules":
|
|
||||||
result = generate_main_modules(lists)
|
|
||||||
elif args.format == "aux-modules":
|
|
||||||
result = generate_aux_modules(lists)
|
|
||||||
elif args.format == "base-extensions-list":
|
|
||||||
result = generate_base_extensions(lists)
|
|
||||||
else:
|
|
||||||
assert False, "Invalid output format!"
|
|
||||||
|
|
||||||
if args.output:
|
|
||||||
with open(args.output, "w") as f:
|
|
||||||
f.write(result)
|
|
||||||
else:
|
|
||||||
print(result)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
sys.exit(main())
|
|
|
@ -1,115 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
#
|
|
||||||
# Copyright (C) 2020-2022 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.
|
|
||||||
|
|
||||||
"""Toggle settings in `ftoption.h` file based on command-line arguments.
|
|
||||||
|
|
||||||
This script takes an `ftoption.h` file as input and rewrites
|
|
||||||
`#define`/`#undef` lines in it based on `--enable=CONFIG_VARNAME` or
|
|
||||||
`--disable=CONFIG_VARNAME` arguments passed to it, where `CONFIG_VARNAME` is
|
|
||||||
configuration variable name, such as `FT_CONFIG_OPTION_USE_LZW`, that may
|
|
||||||
appear in the file.
|
|
||||||
|
|
||||||
Note that if one of `CONFIG_VARNAME` is not found in the input file, this
|
|
||||||
script exits with an error message listing the missing variable names.
|
|
||||||
"""
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(description=__doc__)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"input", metavar="FTOPTION_H", help="Path to input ftoption.h file."
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument("--output", help="Output to file instead of stdout.")
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--enable",
|
|
||||||
action="append",
|
|
||||||
default=[],
|
|
||||||
help="Enable a given build option (e.g. FT_CONFIG_OPTION_USE_LZW).",
|
|
||||||
)
|
|
||||||
|
|
||||||
parser.add_argument(
|
|
||||||
"--disable",
|
|
||||||
action="append",
|
|
||||||
default=[],
|
|
||||||
help="Disable a given build option.",
|
|
||||||
)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
common_options = set(args.enable) & set(args.disable)
|
|
||||||
if common_options:
|
|
||||||
parser.error(
|
|
||||||
"Options cannot be both enabled and disabled: %s"
|
|
||||||
% sorted(common_options)
|
|
||||||
)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
with open(args.input) as f:
|
|
||||||
input_file = f.read()
|
|
||||||
|
|
||||||
options_seen = set()
|
|
||||||
|
|
||||||
new_lines = []
|
|
||||||
for line in input_file.splitlines():
|
|
||||||
# Expected formats:
|
|
||||||
# #define <CONFIG_VAR>
|
|
||||||
# /* #define <CONFIG_VAR> */
|
|
||||||
# #undef <CONFIG_VAR>
|
|
||||||
line = line.rstrip()
|
|
||||||
if line.startswith("/* #define ") and line.endswith(" */"):
|
|
||||||
option_name = line[11:-3].strip()
|
|
||||||
option_enabled = False
|
|
||||||
elif line.startswith("#define "):
|
|
||||||
option_name = line[8:].strip()
|
|
||||||
option_enabled = True
|
|
||||||
elif line.startswith("#undef "):
|
|
||||||
option_name = line[7:].strip()
|
|
||||||
option_enabled = False
|
|
||||||
else:
|
|
||||||
new_lines.append(line)
|
|
||||||
continue
|
|
||||||
|
|
||||||
options_seen.add(option_name)
|
|
||||||
if option_enabled and option_name in args.disable:
|
|
||||||
line = "#undef " + option_name
|
|
||||||
elif not option_enabled and option_name in args.enable:
|
|
||||||
line = "#define " + option_name
|
|
||||||
new_lines.append(line)
|
|
||||||
|
|
||||||
result = "\n".join(new_lines) + "\n"
|
|
||||||
|
|
||||||
# Sanity check that all command-line options were actually processed.
|
|
||||||
cmdline_options = set(args.enable) | set(args.disable)
|
|
||||||
assert cmdline_options.issubset(
|
|
||||||
options_seen
|
|
||||||
), "Could not find options in input file: " + ", ".join(
|
|
||||||
sorted(cmdline_options - options_seen)
|
|
||||||
)
|
|
||||||
|
|
||||||
if args.output:
|
|
||||||
with open(args.output, "w") as f:
|
|
||||||
f.write(result)
|
|
||||||
else:
|
|
||||||
print(result)
|
|
||||||
|
|
||||||
return 0
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
sys.exit(main())
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -13,11 +13,11 @@
|
||||||
# fully.
|
# fully.
|
||||||
|
|
||||||
|
|
||||||
DELETE := del
|
DELETE := del
|
||||||
CAT := type
|
CAT := type
|
||||||
SEP := $(strip \ )
|
SEP := $(strip \ )
|
||||||
PLATFORM_DIR := $(TOP_DIR)/builds/os2
|
BUILD_DIR := $(TOP_DIR)/builds/os2
|
||||||
PLATFORM := os2
|
PLATFORM := os2
|
||||||
|
|
||||||
# This is used for `make refdoc' and `make refdoc-venv'
|
# This is used for `make refdoc' and `make refdoc-venv'
|
||||||
#
|
#
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// FreeType 2 project for the symbian platform
|
// FreeType 2 project for the symbian platform
|
||||||
//
|
//
|
||||||
|
|
||||||
// Copyright (C) 2008-2022 by
|
// Copyright (C) 2008-2020 by
|
||||||
// David Turner, Robert Wilhelm, and Werner Lemberg.
|
// David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
//
|
//
|
||||||
// This file is part of the FreeType project, and may only be used, modified,
|
// This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// FreeType 2 makefile for the symbian platform
|
// FreeType 2 makefile for the symbian platform
|
||||||
//
|
//
|
||||||
|
|
||||||
// Copyright (C) 2008-2022 by
|
// Copyright (C) 2008-2020 by
|
||||||
// David Turner, Robert Wilhelm, and Werner Lemberg.
|
// David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
//
|
//
|
||||||
// This file is part of the FreeType project, and may only be used, modified,
|
// This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -103,7 +103,6 @@ ifneq ($(findstring setup,$(MAKECMDGOALS)),)
|
||||||
check_platform := 1
|
check_platform := 1
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
# Include the automatic host platform detection rules when we need to
|
# Include the automatic host platform detection rules when we need to
|
||||||
# check the platform.
|
# check the platform.
|
||||||
#
|
#
|
||||||
|
@ -113,17 +112,6 @@ ifdef check_platform
|
||||||
|
|
||||||
include $(TOP_DIR)/builds/detect.mk
|
include $(TOP_DIR)/builds/detect.mk
|
||||||
|
|
||||||
# For builds directly from the git repository we need to copy files
|
|
||||||
# from `subprojects/dlg' to `src/dlg' and `include/dlg'.
|
|
||||||
#
|
|
||||||
ifeq ($(wildcard $(TOP_DIR)/src/dlg/dlg.*),)
|
|
||||||
ifeq ($(wildcard $(TOP_DIR)/subprojects/dlg/*),)
|
|
||||||
copy_submodule: check_out_submodule
|
|
||||||
endif
|
|
||||||
|
|
||||||
setup: copy_submodule
|
|
||||||
endif
|
|
||||||
|
|
||||||
# This rule makes sense for Unix only to remove files created by a run of
|
# This rule makes sense for Unix only to remove files created by a run of
|
||||||
# the configure script which hasn't been successful (so that no
|
# the configure script which hasn't been successful (so that no
|
||||||
# `config.mk' has been created). It uses the built-in $(RM) command of
|
# `config.mk' has been created). It uses the built-in $(RM) command of
|
||||||
|
@ -166,23 +154,6 @@ else
|
||||||
endif # test check_platform
|
endif # test check_platform
|
||||||
|
|
||||||
|
|
||||||
.PHONY: check_out_submodule copy_submodule
|
|
||||||
|
|
||||||
check_out_submodule:
|
|
||||||
$(info Checking out submodule in `subprojects/dlg')
|
|
||||||
git submodule init
|
|
||||||
git submodule update
|
|
||||||
|
|
||||||
copy_submodule:
|
|
||||||
$(info Copying files from `subprojects/dlg' to `src/dlg' and `include/dlg')
|
|
||||||
ifeq ($(wildcard include/dlg),)
|
|
||||||
mkdir $(subst /,$(SEP),include/dlg)
|
|
||||||
endif
|
|
||||||
$(COPY) $(subst /,$(SEP),subprojects/dlg/include/dlg/output.h include/dlg)
|
|
||||||
$(COPY) $(subst /,$(SEP),subprojects/dlg/include/dlg/dlg.h include/dlg)
|
|
||||||
$(COPY) $(subst /,$(SEP),subprojects/dlg/src/dlg/dlg.c src/dlg)
|
|
||||||
|
|
||||||
|
|
||||||
# We always need the list of modules in ftmodule.h.
|
# We always need the list of modules in ftmodule.h.
|
||||||
#
|
#
|
||||||
all setup: $(FTMODULE_H)
|
all setup: $(FTMODULE_H)
|
||||||
|
@ -226,7 +197,6 @@ patch := $(firstword $(patch))
|
||||||
# else
|
# else
|
||||||
version := $(major).$(minor).$(patch)
|
version := $(major).$(minor).$(patch)
|
||||||
winversion := $(major)$(minor)$(patch)
|
winversion := $(major)$(minor)$(patch)
|
||||||
version_tag := VER-$(major)-$(minor)-$(patch)
|
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
|
||||||
|
@ -249,10 +219,7 @@ dist:
|
||||||
|
|
||||||
currdir=`pwd` ; \
|
currdir=`pwd` ; \
|
||||||
for f in `find . -wholename '*/.git' -prune \
|
for f in `find . -wholename '*/.git' -prune \
|
||||||
-o -name .gitattributes \
|
|
||||||
-o -name .gitignore \
|
-o -name .gitignore \
|
||||||
-o -name .gitlab-ci.yml \
|
|
||||||
-o -name .gitmodules \
|
|
||||||
-o -name .mailmap \
|
-o -name .mailmap \
|
||||||
-o -type d \
|
-o -type d \
|
||||||
-o -print` ; do \
|
-o -print` ; do \
|
||||||
|
@ -283,10 +250,6 @@ dist:
|
||||||
CONFIG_GUESS = ~/git/config/config.guess
|
CONFIG_GUESS = ~/git/config/config.guess
|
||||||
CONFIG_SUB = ~/git/config/config.sub
|
CONFIG_SUB = ~/git/config/config.sub
|
||||||
|
|
||||||
# We also use this repository to access the gnulib script that converts git
|
|
||||||
# commit messages to a ChangeLog file.
|
|
||||||
CHANGELOG_SCRIPT = ~/git/config/gitlog-to-changelog
|
|
||||||
|
|
||||||
|
|
||||||
# Don't say `make do-dist'. Always use `make dist' instead.
|
# Don't say `make do-dist'. Always use `make dist' instead.
|
||||||
#
|
#
|
||||||
|
@ -304,19 +267,8 @@ do-dist: distclean refdoc
|
||||||
cp $(CONFIG_GUESS) builds/unix
|
cp $(CONFIG_GUESS) builds/unix
|
||||||
cp $(CONFIG_SUB) builds/unix
|
cp $(CONFIG_SUB) builds/unix
|
||||||
|
|
||||||
@# Generate `ChangeLog' file with commits since release 2.11.0
|
|
||||||
@# (when we stopped creating this file manually).
|
|
||||||
$(CHANGELOG_SCRIPT) \
|
|
||||||
--format='%B%n' \
|
|
||||||
--no-cluster \
|
|
||||||
-- VER-2-11-0..$(version_tag) \
|
|
||||||
> ChangeLog
|
|
||||||
|
|
||||||
@# Remove intermediate files created by the `refdoc' target.
|
@# Remove intermediate files created by the `refdoc' target.
|
||||||
rm -rf docs/markdown
|
rm -rf docs/markdown
|
||||||
rm -f docs/mkdocs.yml
|
rm -f docs/mkdocs.yml
|
||||||
|
|
||||||
@# Remove more stuff related to git.
|
|
||||||
rm -rf subprojects/dlg
|
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
|
|
|
@ -1,522 +0,0 @@
|
||||||
# ===========================================================================
|
|
||||||
# https://www.gnu.org/software/autoconf-archive/ax_pthread.html
|
|
||||||
# ===========================================================================
|
|
||||||
#
|
|
||||||
# SYNOPSIS
|
|
||||||
#
|
|
||||||
# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
|
|
||||||
#
|
|
||||||
# DESCRIPTION
|
|
||||||
#
|
|
||||||
# This macro figures out how to build C programs using POSIX threads. It
|
|
||||||
# sets the PTHREAD_LIBS output variable to the threads library and linker
|
|
||||||
# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
|
|
||||||
# flags that are needed. (The user can also force certain compiler
|
|
||||||
# flags/libs to be tested by setting these environment variables.)
|
|
||||||
#
|
|
||||||
# Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is
|
|
||||||
# needed for multi-threaded programs (defaults to the value of CC
|
|
||||||
# respectively CXX otherwise). (This is necessary on e.g. AIX to use the
|
|
||||||
# special cc_r/CC_r compiler alias.)
|
|
||||||
#
|
|
||||||
# NOTE: You are assumed to not only compile your program with these flags,
|
|
||||||
# but also to link with them as well. For example, you might link with
|
|
||||||
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
|
||||||
# $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
|
|
||||||
#
|
|
||||||
# If you are only building threaded programs, you may wish to use these
|
|
||||||
# variables in your default LIBS, CFLAGS, and CC:
|
|
||||||
#
|
|
||||||
# LIBS="$PTHREAD_LIBS $LIBS"
|
|
||||||
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
|
||||||
# CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
|
|
||||||
# CC="$PTHREAD_CC"
|
|
||||||
# CXX="$PTHREAD_CXX"
|
|
||||||
#
|
|
||||||
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
|
|
||||||
# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
|
|
||||||
# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
|
|
||||||
#
|
|
||||||
# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
|
|
||||||
# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
|
|
||||||
# PTHREAD_CFLAGS.
|
|
||||||
#
|
|
||||||
# ACTION-IF-FOUND is a list of shell commands to run if a threads library
|
|
||||||
# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
|
|
||||||
# is not found. If ACTION-IF-FOUND is not specified, the default action
|
|
||||||
# will define HAVE_PTHREAD.
|
|
||||||
#
|
|
||||||
# Please let the authors know if this macro fails on any platform, or if
|
|
||||||
# you have any other suggestions or comments. This macro was based on work
|
|
||||||
# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
|
|
||||||
# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
|
|
||||||
# Alejandro Forero Cuervo to the autoconf macro repository. We are also
|
|
||||||
# grateful for the helpful feedback of numerous users.
|
|
||||||
#
|
|
||||||
# Updated for Autoconf 2.68 by Daniel Richard G.
|
|
||||||
#
|
|
||||||
# LICENSE
|
|
||||||
#
|
|
||||||
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
|
|
||||||
# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
|
|
||||||
# Copyright (c) 2019 Marc Stevens <marc.stevens@cwi.nl>
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify it
|
|
||||||
# under the terms of the GNU General Public License as published by the
|
|
||||||
# Free Software Foundation, either version 3 of the License, or (at your
|
|
||||||
# option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful, but
|
|
||||||
# WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
|
||||||
# Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License along
|
|
||||||
# with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
|
||||||
# gives unlimited permission to copy, distribute and modify the configure
|
|
||||||
# scripts that are the output of Autoconf when processing the Macro. You
|
|
||||||
# need not follow the terms of the GNU General Public License when using
|
|
||||||
# or distributing such scripts, even though portions of the text of the
|
|
||||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
|
||||||
# all other use of the material that constitutes the Autoconf Macro.
|
|
||||||
#
|
|
||||||
# This special exception to the GPL applies to versions of the Autoconf
|
|
||||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
|
||||||
# modified version of the Autoconf Macro, you may extend this special
|
|
||||||
# exception to the GPL to apply to your modified version as well.
|
|
||||||
|
|
||||||
#serial 30
|
|
||||||
|
|
||||||
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
|
|
||||||
AC_DEFUN([AX_PTHREAD], [
|
|
||||||
AC_REQUIRE([AC_CANONICAL_TARGET])
|
|
||||||
AC_REQUIRE([AC_PROG_CC])
|
|
||||||
AC_REQUIRE([AC_PROG_SED])
|
|
||||||
AC_LANG_PUSH([C])
|
|
||||||
ax_pthread_ok=no
|
|
||||||
|
|
||||||
# We used to check for pthread.h first, but this fails if pthread.h
|
|
||||||
# requires special compiler flags (e.g. on Tru64 or Sequent).
|
|
||||||
# It gets checked for in the link test anyway.
|
|
||||||
|
|
||||||
# First of all, check if the user has set any of the PTHREAD_LIBS,
|
|
||||||
# etcetera environment variables, and if threads linking works using
|
|
||||||
# them:
|
|
||||||
if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
|
|
||||||
ax_pthread_save_CC="$CC"
|
|
||||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
|
||||||
ax_pthread_save_LIBS="$LIBS"
|
|
||||||
AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
|
|
||||||
AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"])
|
|
||||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
|
||||||
LIBS="$PTHREAD_LIBS $LIBS"
|
|
||||||
AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
|
|
||||||
AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
|
|
||||||
AC_MSG_RESULT([$ax_pthread_ok])
|
|
||||||
if test "x$ax_pthread_ok" = "xno"; then
|
|
||||||
PTHREAD_LIBS=""
|
|
||||||
PTHREAD_CFLAGS=""
|
|
||||||
fi
|
|
||||||
CC="$ax_pthread_save_CC"
|
|
||||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
|
||||||
LIBS="$ax_pthread_save_LIBS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# We must check for the threads library under a number of different
|
|
||||||
# names; the ordering is very important because some systems
|
|
||||||
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
|
|
||||||
# libraries is broken (non-POSIX).
|
|
||||||
|
|
||||||
# Create a list of thread flags to try. Items with a "," contain both
|
|
||||||
# C compiler flags (before ",") and linker flags (after ","). Other items
|
|
||||||
# starting with a "-" are C compiler flags, and remaining items are
|
|
||||||
# library names, except for "none" which indicates that we try without
|
|
||||||
# any flags at all, and "pthread-config" which is a program returning
|
|
||||||
# the flags for the Pth emulation library.
|
|
||||||
|
|
||||||
ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
|
|
||||||
|
|
||||||
# The ordering *is* (sometimes) important. Some notes on the
|
|
||||||
# individual items follow:
|
|
||||||
|
|
||||||
# pthreads: AIX (must check this before -lpthread)
|
|
||||||
# none: in case threads are in libc; should be tried before -Kthread and
|
|
||||||
# other compiler flags to prevent continual compiler warnings
|
|
||||||
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
|
|
||||||
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
|
|
||||||
# (Note: HP C rejects this with "bad form for `-t' option")
|
|
||||||
# -pthreads: Solaris/gcc (Note: HP C also rejects)
|
|
||||||
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
|
|
||||||
# doesn't hurt to check since this sometimes defines pthreads and
|
|
||||||
# -D_REENTRANT too), HP C (must be checked before -lpthread, which
|
|
||||||
# is present but should not be used directly; and before -mthreads,
|
|
||||||
# because the compiler interprets this as "-mt" + "-hreads")
|
|
||||||
# -mthreads: Mingw32/gcc, Lynx/gcc
|
|
||||||
# pthread: Linux, etcetera
|
|
||||||
# --thread-safe: KAI C++
|
|
||||||
# pthread-config: use pthread-config program (for GNU Pth library)
|
|
||||||
|
|
||||||
case $target_os in
|
|
||||||
|
|
||||||
freebsd*)
|
|
||||||
|
|
||||||
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
|
|
||||||
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
|
|
||||||
|
|
||||||
ax_pthread_flags="-kthread lthread $ax_pthread_flags"
|
|
||||||
;;
|
|
||||||
|
|
||||||
hpux*)
|
|
||||||
|
|
||||||
# From the cc(1) man page: "[-mt] Sets various -D flags to enable
|
|
||||||
# multi-threading and also sets -lpthread."
|
|
||||||
|
|
||||||
ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
|
|
||||||
;;
|
|
||||||
|
|
||||||
openedition*)
|
|
||||||
|
|
||||||
# IBM z/OS requires a feature-test macro to be defined in order to
|
|
||||||
# enable POSIX threads at all, so give the user a hint if this is
|
|
||||||
# not set. (We don't define these ourselves, as they can affect
|
|
||||||
# other portions of the system API in unpredictable ways.)
|
|
||||||
|
|
||||||
AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
|
|
||||||
[
|
|
||||||
# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
|
|
||||||
AX_PTHREAD_ZOS_MISSING
|
|
||||||
# endif
|
|
||||||
],
|
|
||||||
[AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
|
|
||||||
;;
|
|
||||||
|
|
||||||
solaris*)
|
|
||||||
|
|
||||||
# On Solaris (at least, for some versions), libc contains stubbed
|
|
||||||
# (non-functional) versions of the pthreads routines, so link-based
|
|
||||||
# tests will erroneously succeed. (N.B.: The stubs are missing
|
|
||||||
# pthread_cleanup_push, or rather a function called by this macro,
|
|
||||||
# so we could check for that, but who knows whether they'll stub
|
|
||||||
# that too in a future libc.) So we'll check first for the
|
|
||||||
# standard Solaris way of linking pthreads (-mt -lpthread).
|
|
||||||
|
|
||||||
ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Are we compiling with Clang?
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([whether $CC is Clang],
|
|
||||||
[ax_cv_PTHREAD_CLANG],
|
|
||||||
[ax_cv_PTHREAD_CLANG=no
|
|
||||||
# Note that Autoconf sets GCC=yes for Clang as well as GCC
|
|
||||||
if test "x$GCC" = "xyes"; then
|
|
||||||
AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
|
|
||||||
[/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
|
|
||||||
# if defined(__clang__) && defined(__llvm__)
|
|
||||||
AX_PTHREAD_CC_IS_CLANG
|
|
||||||
# endif
|
|
||||||
],
|
|
||||||
[ax_cv_PTHREAD_CLANG=yes])
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
|
|
||||||
|
|
||||||
|
|
||||||
# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
|
|
||||||
|
|
||||||
# Note that for GCC and Clang -pthread generally implies -lpthread,
|
|
||||||
# except when -nostdlib is passed.
|
|
||||||
# This is problematic using libtool to build C++ shared libraries with pthread:
|
|
||||||
# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460
|
|
||||||
# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333
|
|
||||||
# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555
|
|
||||||
# To solve this, first try -pthread together with -lpthread for GCC
|
|
||||||
|
|
||||||
AS_IF([test "x$GCC" = "xyes"],
|
|
||||||
[ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"])
|
|
||||||
|
|
||||||
# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first
|
|
||||||
|
|
||||||
AS_IF([test "x$ax_pthread_clang" = "xyes"],
|
|
||||||
[ax_pthread_flags="-pthread,-lpthread -pthread"])
|
|
||||||
|
|
||||||
|
|
||||||
# The presence of a feature test macro requesting re-entrant function
|
|
||||||
# definitions is, on some systems, a strong hint that pthreads support is
|
|
||||||
# correctly enabled
|
|
||||||
|
|
||||||
case $target_os in
|
|
||||||
darwin* | hpux* | linux* | osf* | solaris*)
|
|
||||||
ax_pthread_check_macro="_REENTRANT"
|
|
||||||
;;
|
|
||||||
|
|
||||||
aix*)
|
|
||||||
ax_pthread_check_macro="_THREAD_SAFE"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
ax_pthread_check_macro="--"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
AS_IF([test "x$ax_pthread_check_macro" = "x--"],
|
|
||||||
[ax_pthread_check_cond=0],
|
|
||||||
[ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
|
|
||||||
|
|
||||||
|
|
||||||
if test "x$ax_pthread_ok" = "xno"; then
|
|
||||||
for ax_pthread_try_flag in $ax_pthread_flags; do
|
|
||||||
|
|
||||||
case $ax_pthread_try_flag in
|
|
||||||
none)
|
|
||||||
AC_MSG_CHECKING([whether pthreads work without any flags])
|
|
||||||
;;
|
|
||||||
|
|
||||||
*,*)
|
|
||||||
PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"`
|
|
||||||
PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"`
|
|
||||||
AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"])
|
|
||||||
;;
|
|
||||||
|
|
||||||
-*)
|
|
||||||
AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
|
|
||||||
PTHREAD_CFLAGS="$ax_pthread_try_flag"
|
|
||||||
;;
|
|
||||||
|
|
||||||
pthread-config)
|
|
||||||
AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
|
|
||||||
AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
|
|
||||||
PTHREAD_CFLAGS="`pthread-config --cflags`"
|
|
||||||
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
|
|
||||||
PTHREAD_LIBS="-l$ax_pthread_try_flag"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
|
||||||
ax_pthread_save_LIBS="$LIBS"
|
|
||||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
|
||||||
LIBS="$PTHREAD_LIBS $LIBS"
|
|
||||||
|
|
||||||
# Check for various functions. We must include pthread.h,
|
|
||||||
# since some functions may be macros. (On the Sequent, we
|
|
||||||
# need a special flag -Kthread to make this header compile.)
|
|
||||||
# We check for pthread_join because it is in -lpthread on IRIX
|
|
||||||
# while pthread_create is in libc. We check for pthread_attr_init
|
|
||||||
# due to DEC craziness with -lpthreads. We check for
|
|
||||||
# pthread_cleanup_push because it is one of the few pthread
|
|
||||||
# functions on Solaris that doesn't have a non-functional libc stub.
|
|
||||||
# We try pthread_create on general principles.
|
|
||||||
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
|
|
||||||
# if $ax_pthread_check_cond
|
|
||||||
# error "$ax_pthread_check_macro must be defined"
|
|
||||||
# endif
|
|
||||||
static void *some_global = NULL;
|
|
||||||
static void routine(void *a)
|
|
||||||
{
|
|
||||||
/* To avoid any unused-parameter or
|
|
||||||
unused-but-set-parameter warning. */
|
|
||||||
some_global = a;
|
|
||||||
}
|
|
||||||
static void *start_routine(void *a) { return a; }],
|
|
||||||
[pthread_t th; pthread_attr_t attr;
|
|
||||||
pthread_create(&th, 0, start_routine, 0);
|
|
||||||
pthread_join(th, 0);
|
|
||||||
pthread_attr_init(&attr);
|
|
||||||
pthread_cleanup_push(routine, 0);
|
|
||||||
pthread_cleanup_pop(0) /* ; */])],
|
|
||||||
[ax_pthread_ok=yes],
|
|
||||||
[])
|
|
||||||
|
|
||||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
|
||||||
LIBS="$ax_pthread_save_LIBS"
|
|
||||||
|
|
||||||
AC_MSG_RESULT([$ax_pthread_ok])
|
|
||||||
AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
|
|
||||||
|
|
||||||
PTHREAD_LIBS=""
|
|
||||||
PTHREAD_CFLAGS=""
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# Clang needs special handling, because older versions handle the -pthread
|
|
||||||
# option in a rather... idiosyncratic way
|
|
||||||
|
|
||||||
if test "x$ax_pthread_clang" = "xyes"; then
|
|
||||||
|
|
||||||
# Clang takes -pthread; it has never supported any other flag
|
|
||||||
|
|
||||||
# (Note 1: This will need to be revisited if a system that Clang
|
|
||||||
# supports has POSIX threads in a separate library. This tends not
|
|
||||||
# to be the way of modern systems, but it's conceivable.)
|
|
||||||
|
|
||||||
# (Note 2: On some systems, notably Darwin, -pthread is not needed
|
|
||||||
# to get POSIX threads support; the API is always present and
|
|
||||||
# active. We could reasonably leave PTHREAD_CFLAGS empty. But
|
|
||||||
# -pthread does define _REENTRANT, and while the Darwin headers
|
|
||||||
# ignore this macro, third-party headers might not.)
|
|
||||||
|
|
||||||
# However, older versions of Clang make a point of warning the user
|
|
||||||
# that, in an invocation where only linking and no compilation is
|
|
||||||
# taking place, the -pthread option has no effect ("argument unused
|
|
||||||
# during compilation"). They expect -pthread to be passed in only
|
|
||||||
# when source code is being compiled.
|
|
||||||
#
|
|
||||||
# Problem is, this is at odds with the way Automake and most other
|
|
||||||
# C build frameworks function, which is that the same flags used in
|
|
||||||
# compilation (CFLAGS) are also used in linking. Many systems
|
|
||||||
# supported by AX_PTHREAD require exactly this for POSIX threads
|
|
||||||
# support, and in fact it is often not straightforward to specify a
|
|
||||||
# flag that is used only in the compilation phase and not in
|
|
||||||
# linking. Such a scenario is extremely rare in practice.
|
|
||||||
#
|
|
||||||
# Even though use of the -pthread flag in linking would only print
|
|
||||||
# a warning, this can be a nuisance for well-run software projects
|
|
||||||
# that build with -Werror. So if the active version of Clang has
|
|
||||||
# this misfeature, we search for an option to squash it.
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
|
|
||||||
[ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
|
|
||||||
[ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
|
|
||||||
# Create an alternate version of $ac_link that compiles and
|
|
||||||
# links in two steps (.c -> .o, .o -> exe) instead of one
|
|
||||||
# (.c -> exe), because the warning occurs only in the second
|
|
||||||
# step
|
|
||||||
ax_pthread_save_ac_link="$ac_link"
|
|
||||||
ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
|
|
||||||
ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"`
|
|
||||||
ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
|
|
||||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
|
||||||
for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
|
|
||||||
AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
|
|
||||||
CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
|
|
||||||
ac_link="$ax_pthread_save_ac_link"
|
|
||||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
|
|
||||||
[ac_link="$ax_pthread_2step_ac_link"
|
|
||||||
AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
|
|
||||||
[break])
|
|
||||||
])
|
|
||||||
done
|
|
||||||
ac_link="$ax_pthread_save_ac_link"
|
|
||||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
|
||||||
AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
|
|
||||||
ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
|
|
||||||
])
|
|
||||||
|
|
||||||
case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
|
|
||||||
no | unknown) ;;
|
|
||||||
*) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
fi # $ax_pthread_clang = yes
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Various other checks:
|
|
||||||
if test "x$ax_pthread_ok" = "xyes"; then
|
|
||||||
ax_pthread_save_CFLAGS="$CFLAGS"
|
|
||||||
ax_pthread_save_LIBS="$LIBS"
|
|
||||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
|
||||||
LIBS="$PTHREAD_LIBS $LIBS"
|
|
||||||
|
|
||||||
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
|
|
||||||
AC_CACHE_CHECK([for joinable pthread attribute],
|
|
||||||
[ax_cv_PTHREAD_JOINABLE_ATTR],
|
|
||||||
[ax_cv_PTHREAD_JOINABLE_ATTR=unknown
|
|
||||||
for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
|
|
||||||
[int attr = $ax_pthread_attr; return attr /* ; */])],
|
|
||||||
[ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
|
|
||||||
[])
|
|
||||||
done
|
|
||||||
])
|
|
||||||
AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
|
|
||||||
test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
|
|
||||||
test "x$ax_pthread_joinable_attr_defined" != "xyes"],
|
|
||||||
[AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
|
|
||||||
[$ax_cv_PTHREAD_JOINABLE_ATTR],
|
|
||||||
[Define to necessary symbol if this constant
|
|
||||||
uses a non-standard name on your system.])
|
|
||||||
ax_pthread_joinable_attr_defined=yes
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([whether more special flags are required for pthreads],
|
|
||||||
[ax_cv_PTHREAD_SPECIAL_FLAGS],
|
|
||||||
[ax_cv_PTHREAD_SPECIAL_FLAGS=no
|
|
||||||
case $target_os in
|
|
||||||
solaris*)
|
|
||||||
ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
])
|
|
||||||
AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
|
|
||||||
test "x$ax_pthread_special_flags_added" != "xyes"],
|
|
||||||
[PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
|
|
||||||
ax_pthread_special_flags_added=yes])
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
|
|
||||||
[ax_cv_PTHREAD_PRIO_INHERIT],
|
|
||||||
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
|
|
||||||
[[int i = PTHREAD_PRIO_INHERIT;
|
|
||||||
return i;]])],
|
|
||||||
[ax_cv_PTHREAD_PRIO_INHERIT=yes],
|
|
||||||
[ax_cv_PTHREAD_PRIO_INHERIT=no])
|
|
||||||
])
|
|
||||||
AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
|
|
||||||
test "x$ax_pthread_prio_inherit_defined" != "xyes"],
|
|
||||||
[AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
|
|
||||||
ax_pthread_prio_inherit_defined=yes
|
|
||||||
])
|
|
||||||
|
|
||||||
CFLAGS="$ax_pthread_save_CFLAGS"
|
|
||||||
LIBS="$ax_pthread_save_LIBS"
|
|
||||||
|
|
||||||
# More AIX lossage: compile with *_r variant
|
|
||||||
if test "x$GCC" != "xyes"; then
|
|
||||||
case $target_os in
|
|
||||||
aix*)
|
|
||||||
AS_CASE(["x/$CC"],
|
|
||||||
[x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
|
|
||||||
[#handle absolute path differently from PATH based program lookup
|
|
||||||
AS_CASE(["x$CC"],
|
|
||||||
[x/*],
|
|
||||||
[
|
|
||||||
AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])
|
|
||||||
AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])])
|
|
||||||
],
|
|
||||||
[
|
|
||||||
AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])
|
|
||||||
AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
])
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
|
|
||||||
test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX"
|
|
||||||
|
|
||||||
AC_SUBST([PTHREAD_LIBS])
|
|
||||||
AC_SUBST([PTHREAD_CFLAGS])
|
|
||||||
AC_SUBST([PTHREAD_CC])
|
|
||||||
AC_SUBST([PTHREAD_CXX])
|
|
||||||
|
|
||||||
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
|
|
||||||
if test "x$ax_pthread_ok" = "xyes"; then
|
|
||||||
ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
|
|
||||||
:
|
|
||||||
else
|
|
||||||
ax_pthread_ok=no
|
|
||||||
$2
|
|
||||||
fi
|
|
||||||
AC_LANG_POP
|
|
||||||
])dnl AX_PTHREAD
|
|
|
@ -2,7 +2,7 @@
|
||||||
#
|
#
|
||||||
# Process this file with autoconf to produce a configure script.
|
# Process this file with autoconf to produce a configure script.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2001-2022 by
|
# Copyright (C) 2001-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -17,7 +17,7 @@ AC_CONFIG_SRCDIR([ftconfig.h.in])
|
||||||
|
|
||||||
# Don't forget to update `docs/VERSIONS.TXT'!
|
# Don't forget to update `docs/VERSIONS.TXT'!
|
||||||
|
|
||||||
version_info='24:3:18'
|
version_info='23:2:17'
|
||||||
AC_SUBST([version_info])
|
AC_SUBST([version_info])
|
||||||
ft_version=`echo $version_info | tr : .`
|
ft_version=`echo $version_info | tr : .`
|
||||||
AC_SUBST([ft_version])
|
AC_SUBST([ft_version])
|
||||||
|
@ -97,12 +97,85 @@ esac
|
||||||
|
|
||||||
# checks for header files
|
# checks for header files
|
||||||
|
|
||||||
|
AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS([fcntl.h unistd.h])
|
AC_CHECK_HEADERS([fcntl.h unistd.h])
|
||||||
|
|
||||||
|
|
||||||
# checks for typedefs, structures, and compiler characteristics
|
# checks for typedefs, structures, and compiler characteristics
|
||||||
|
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
|
AC_CHECK_SIZEOF([int])
|
||||||
|
AC_CHECK_SIZEOF([long])
|
||||||
|
AC_TYPE_LONG_LONG_INT
|
||||||
|
|
||||||
|
|
||||||
|
# check whether cpp computation of size of int and long in ftconfig.h.in works
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether cpp computation of bit length in ftconfig.h.in works])
|
||||||
|
orig_CPPFLAGS="${CPPFLAGS}"
|
||||||
|
CPPFLAGS="-I${srcdir} -I. -I${srcdir}/../../include ${CPPFLAGS}"
|
||||||
|
|
||||||
|
ac_clean_files=
|
||||||
|
if test ! -f ft2build.h; then
|
||||||
|
ac_clean_files=ft2build.h
|
||||||
|
touch ft2build.h
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat > conftest.c <<\_ACEOF
|
||||||
|
#include <limits.h>
|
||||||
|
#define FT_CONFIG_OPTIONS_H <freetype/config/ftoption.h>
|
||||||
|
#define FT_CONFIG_STANDARD_LIBRARY_H <freetype/config/ftstdlib.h>
|
||||||
|
#define FT_UINT_MAX UINT_MAX
|
||||||
|
#define FT_ULONG_MAX ULONG_MAX
|
||||||
|
#include "ftconfig.h.in"
|
||||||
|
_ACEOF
|
||||||
|
echo >> conftest.c "#if FT_SIZEOF_INT == "${ac_cv_sizeof_int}
|
||||||
|
echo >> conftest.c "ac_cpp_ft_sizeof_int="${ac_cv_sizeof_int}
|
||||||
|
echo >> conftest.c "#endif"
|
||||||
|
echo >> conftest.c "#if FT_SIZEOF_LONG == "${ac_cv_sizeof_long}
|
||||||
|
echo >> conftest.c "ac_cpp_ft_sizeof_long="${ac_cv_sizeof_long}
|
||||||
|
echo >> conftest.c "#endif"
|
||||||
|
|
||||||
|
${CPP} ${CPPFLAGS} conftest.c | ${GREP} ac_cpp_ft > conftest.sh
|
||||||
|
eval `cat conftest.sh`
|
||||||
|
rm -f conftest.* $ac_clean_files
|
||||||
|
|
||||||
|
if test x != "x${ac_cpp_ft_sizeof_int}" \
|
||||||
|
-a x != x"${ac_cpp_ft_sizeof_long}"; then
|
||||||
|
unset ft_use_autoconf_sizeof_types
|
||||||
|
else
|
||||||
|
ft_use_autoconf_sizeof_types=yes
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(biarch-config,
|
||||||
|
[ --enable-biarch-config install biarch ftconfig.h to support multiple
|
||||||
|
architectures by single file], [], [])
|
||||||
|
|
||||||
|
case :${ft_use_autoconf_sizeof_types}:${enable_biarch_config}: in
|
||||||
|
:yes:yes:)
|
||||||
|
AC_MSG_RESULT([broken but use it])
|
||||||
|
unset ft_use_autoconf_sizeof_types
|
||||||
|
;;
|
||||||
|
::no:)
|
||||||
|
AC_MSG_RESULT([works but ignore it])
|
||||||
|
ft_use_autoconf_sizeof_types=yes
|
||||||
|
;;
|
||||||
|
::yes: | :::)
|
||||||
|
AC_MSG_RESULT([yes])
|
||||||
|
unset ft_use_autoconf_sizeof_types
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_MSG_RESULT([no])
|
||||||
|
ft_use_autoconf_sizeof_types=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if test x"${ft_use_autoconf_sizeof_types}" = xyes; then
|
||||||
|
AC_DEFINE([FT_USE_AUTOCONF_SIZEOF_TYPES], [],
|
||||||
|
[Define if autoconf sizeof types should be used.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
CPPFLAGS="${orig_CPPFLAGS}"
|
||||||
|
|
||||||
AC_ARG_ENABLE([freetype-config],
|
AC_ARG_ENABLE([freetype-config],
|
||||||
AS_HELP_STRING([--enable-freetype-config], [install freetype-config]),
|
AS_HELP_STRING([--enable-freetype-config], [install freetype-config]),
|
||||||
|
@ -119,59 +192,53 @@ AC_SUBST(INSTALL_FT2_CONFIG, [$enable_freetype_config])
|
||||||
AC_SYS_LARGEFILE
|
AC_SYS_LARGEFILE
|
||||||
|
|
||||||
# Here we check whether we can use our mmap file component.
|
# Here we check whether we can use our mmap file component.
|
||||||
#
|
|
||||||
# Note that `ftsystem.c` for Windows has its own mmap-like implementation
|
|
||||||
# not covered by `AC_FUNC_MMAP` and/or `FT_UNMAP_PARAM`.
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([mmap],
|
AC_ARG_ENABLE([mmap],
|
||||||
AS_HELP_STRING([--disable-mmap],
|
AS_HELP_STRING([--disable-mmap],
|
||||||
[do not check mmap() and do not use]),
|
[do not check mmap() and do not use]),
|
||||||
[enable_mmap="no"], [enable_mmap="yes"])
|
[enable_mmap="no"], [enable_mmap="yes"])
|
||||||
if test "x${enable_mmap}" != "xno"; then
|
if test "x${enable_mmap}" != "xno"; then
|
||||||
case "$host" in
|
AC_FUNC_MMAP
|
||||||
*-*-mingw*)
|
fi
|
||||||
AC_MSG_CHECKING([for working mmap])
|
if test "x${enable_mmap}" = "xno" \
|
||||||
AC_MSG_RESULT([using MapViewOfFile in Windows])
|
-o "$ac_cv_func_mmap_fixed_mapped" != "yes"; then
|
||||||
FTSYS_SRC='$(TOP_DIR)/builds/windows/ftsystem.c'
|
FTSYS_SRC='$(BASE_DIR)/ftsystem.c'
|
||||||
;;
|
else
|
||||||
*)
|
FTSYS_SRC='$(BUILD_DIR)/ftsystem.c'
|
||||||
AC_FUNC_MMAP
|
|
||||||
if test "$ac_cv_func_mmap_fixed_mapped" = "yes"; then
|
|
||||||
FTSYS_SRC='$(PLATFORM_DIR)/ftsystem.c'
|
|
||||||
|
|
||||||
AC_CHECK_DECLS([munmap],
|
AC_CHECK_DECLS([munmap],
|
||||||
[],
|
[],
|
||||||
[],
|
[],
|
||||||
[
|
[
|
||||||
|
|
||||||
#ifdef HAVE_UNISTD_H
|
#ifdef HAVE_UNISTD_H
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
FT_MUNMAP_PARAM
|
FT_MUNMAP_PARAM
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "$FTSYS_SRC"; then
|
|
||||||
FTSYS_SRC='$(BASE_DIR)/ftsystem.c'
|
|
||||||
fi
|
fi
|
||||||
AC_SUBST([FTSYS_SRC])
|
AC_SUBST([FTSYS_SRC])
|
||||||
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS([memcpy memmove])
|
AC_CHECK_FUNCS([memcpy memmove])
|
||||||
|
|
||||||
|
|
||||||
# get compiler flags right
|
# get compiler flags right
|
||||||
#
|
#
|
||||||
# We try to make the compiler work for C99-strict source. Even if the
|
# We try to make the compiler work for C89-strict source. Even if the
|
||||||
# C compiler is gcc and C99 flags are available, some system headers
|
# C compiler is gcc and C89 flags are available, some system headers
|
||||||
# might be broken in C99 mode. We have to check whether compilation
|
# (e.g., Android Bionic libc) are broken in C89 mode. We have to check
|
||||||
# finishes successfully.
|
# whether the compilation finishes successfully.
|
||||||
|
#
|
||||||
|
# Due to bugs in mingwrt 4.0.3 we don't use `-ansi' for MinGW.
|
||||||
|
#
|
||||||
|
# To avoid zillions of
|
||||||
|
#
|
||||||
|
# ISO C90 does not support 'long long'
|
||||||
|
#
|
||||||
|
# warnings, we disable `-pedantic' for gcc version < 4.6.
|
||||||
#
|
#
|
||||||
if test "x$GCC" = xyes; then
|
if test "x$GCC" = xyes; then
|
||||||
XX_CFLAGS="-Wall"
|
XX_CFLAGS="-Wall"
|
||||||
|
@ -183,11 +250,23 @@ if test "x$GCC" = xyes; then
|
||||||
XX_ANSIFLAGS="-pedantic"
|
XX_ANSIFLAGS="-pedantic"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
XX_ANSIFLAGS=""
|
GCC_VERSION=`$CC -dumpversion`
|
||||||
|
GCC_MAJOR=`echo "$GCC_VERSION" | sed 's/\([[^.]][[^.]]*\).*/\1/'`
|
||||||
|
GCC_MINOR=`echo "$GCC_VERSION" | sed 's/[[^.]][[^.]]*.\([[^.]][[^.]]*\).*/\1/'`
|
||||||
|
|
||||||
for a in "-pedantic" "-std=c99"
|
XX_PEDANTIC=-pedantic
|
||||||
|
if test $GCC_MAJOR -lt 4; then
|
||||||
|
XX_PEDANTIC=
|
||||||
|
else
|
||||||
|
if test $GCC_MAJOR -eq 4 -a $GCC_MINOR -lt 6; then
|
||||||
|
XX_PEDANTIC=
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
XX_ANSIFLAGS=""
|
||||||
|
for a in $XX_PEDANTIC -ansi
|
||||||
do
|
do
|
||||||
AC_MSG_CHECKING([$CC compiler flag ${a} to assure ANSI C99 works correctly])
|
AC_MSG_CHECKING([gcc compiler flag ${a} to assure ANSI C works correctly])
|
||||||
orig_CFLAGS="${CFLAGS}"
|
orig_CFLAGS="${CFLAGS}"
|
||||||
CFLAGS="${CFLAGS} ${XX_ANSIFLAGS} ${a}"
|
CFLAGS="${CFLAGS} ${XX_ANSIFLAGS} ${a}"
|
||||||
AC_COMPILE_IFELSE([
|
AC_COMPILE_IFELSE([
|
||||||
|
@ -317,12 +396,6 @@ if test x"$with_zlib" = xyes -a "$have_zlib" = no; then
|
||||||
AC_MSG_ERROR([external zlib support requested but library not found])
|
AC_MSG_ERROR([external zlib support requested but library not found])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SYSTEM_ZLIB=
|
|
||||||
if test "$have_zlib" != no; then
|
|
||||||
SYSTEM_ZLIB=yes
|
|
||||||
fi
|
|
||||||
AC_SUBST([SYSTEM_ZLIB])
|
|
||||||
|
|
||||||
|
|
||||||
# check for system libbz2
|
# check for system libbz2
|
||||||
|
|
||||||
|
@ -435,7 +508,7 @@ AC_ARG_WITH([harfbuzz],
|
||||||
|
|
||||||
have_harfbuzz=no
|
have_harfbuzz=no
|
||||||
if test x"$with_harfbuzz" = xyes -o x"$with_harfbuzz" = xauto; then
|
if test x"$with_harfbuzz" = xyes -o x"$with_harfbuzz" = xauto; then
|
||||||
harfbuzz_pkg="harfbuzz >= 2.0.0"
|
harfbuzz_pkg="harfbuzz >= 1.8.0"
|
||||||
have_harfbuzz_pkg=no
|
have_harfbuzz_pkg=no
|
||||||
|
|
||||||
if test x"$HARFBUZZ_CFLAGS" = x -a x"$HARFBUZZ_LIBS" = x; then
|
if test x"$HARFBUZZ_CFLAGS" = x -a x"$HARFBUZZ_LIBS" = x; then
|
||||||
|
@ -514,48 +587,19 @@ if test x"$with_brotli" = xyes -a "$have_brotli" = no; then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Checks for the demo programs.
|
# check for librt
|
||||||
#
|
#
|
||||||
# FreeType doesn't need this. However, since the demo program repository
|
# We need `clock_gettime' for the `ftbench' demo program.
|
||||||
# doesn't come with a `configure` script of its own, we integrate the tests
|
|
||||||
# here for simplicity.
|
|
||||||
|
|
||||||
# We need `clock_gettime` from 'librt' for the `ftbench` demo program.
|
|
||||||
#
|
#
|
||||||
# The code is modeled after gnulib's file `clock_time.m4`, ignoring
|
# The code is modeled after gnulib's file `clock_time.m4', ignoring
|
||||||
# very old Solaris systems.
|
# very old Solaris systems.
|
||||||
|
|
||||||
LIB_CLOCK_GETTIME=
|
LIB_CLOCK_GETTIME=
|
||||||
AC_SEARCH_LIBS([clock_gettime],
|
AC_SEARCH_LIBS([clock_gettime],
|
||||||
[rt],
|
[rt],
|
||||||
[test "$ac_cv_search_clock_gettime" = "none required" \
|
[test "$ac_cv_search_clock_gettime" = "none required" \
|
||||||
|| LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
|
|| LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime])
|
||||||
|
AC_SUBST([LIB_CLOCK_GETTIME])
|
||||||
FT_DEMO_CFLAGS=""
|
|
||||||
FT_DEMO_LDFLAGS="$LIB_CLOCK_GETTIME"
|
|
||||||
|
|
||||||
# 'librsvg' is needed to demonstrate SVG support.
|
|
||||||
AC_ARG_WITH([librsvg],
|
|
||||||
[AS_HELP_STRING([--with-librsvg=@<:@yes|no|auto@:>@],
|
|
||||||
[support OpenType SVG fonts in FreeType demo programs @<:@default=auto@:>@])],
|
|
||||||
[], [with_librsvg=auto])
|
|
||||||
|
|
||||||
have_librsvg=no
|
|
||||||
if test x"$with_librsvg" = xyes -o x"$with_librsvg" = xauto; then
|
|
||||||
PKG_CHECK_MODULES([LIBRSVG], [librsvg-2.0 >= 2.46.0],
|
|
||||||
[have_librsvg="yes (pkg-config)"], [:])
|
|
||||||
|
|
||||||
if test "$have_librsvg" != no; then
|
|
||||||
FT_DEMO_CFLAGS="$FT_DEMO_CFLAGS $LIBRSVG_CFLAGS -DHAVE_LIBRSVG"
|
|
||||||
FT_DEMO_LDFLAGS="$FT_DEMO_LDFLAGS $LIBRSVG_LIBS"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test x"$with_librsvg" = xyes -a "$have_librsvg" = no; then
|
|
||||||
AC_MSG_ERROR([librsvg support requested but library not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST([FT_DEMO_CFLAGS])
|
|
||||||
AC_SUBST([FT_DEMO_LDFLAGS])
|
|
||||||
|
|
||||||
|
|
||||||
# Some options handling SDKs/archs in CFLAGS should be copied
|
# Some options handling SDKs/archs in CFLAGS should be copied
|
||||||
|
@ -968,10 +1012,6 @@ case "$CFLAGS" in
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# Check for pthreads
|
|
||||||
|
|
||||||
AX_PTHREAD([have_pthread=yes], [have_pthread=no])
|
|
||||||
|
|
||||||
# Check for Python and docwriter
|
# Check for Python and docwriter
|
||||||
|
|
||||||
have_py3=no
|
have_py3=no
|
||||||
|
@ -984,7 +1024,7 @@ if test "x$PYTHON" != "xmissing"; then
|
||||||
|
|
||||||
if test "x$have_py3" = "xyes"; then
|
if test "x$have_py3" = "xyes"; then
|
||||||
PIP="$PYTHON -m $PIP"
|
PIP="$PYTHON -m $PIP"
|
||||||
AC_MSG_CHECKING([for `docwriter' Python module])
|
AC_MSG_CHECKING([for \`docwriter' Python module])
|
||||||
$PYTHON -m docwriter -h > /dev/null 2>&1
|
$PYTHON -m docwriter -h > /dev/null 2>&1
|
||||||
if test "x$?" = "x0"; then
|
if test "x$?" = "x0"; then
|
||||||
have_docwriter=yes
|
have_docwriter=yes
|
||||||
|
@ -997,32 +1037,32 @@ fi
|
||||||
|
|
||||||
|
|
||||||
# entries in Requires.private are separated by commas
|
# entries in Requires.private are separated by commas
|
||||||
PKGCONFIG_REQUIRES_PRIVATE="$zlib_reqpriv, \
|
REQUIRES_PRIVATE="$zlib_reqpriv, \
|
||||||
$bzip2_reqpriv, \
|
$bzip2_reqpriv, \
|
||||||
$libpng_reqpriv, \
|
$libpng_reqpriv, \
|
||||||
$harfbuzz_reqpriv, \
|
$harfbuzz_reqpriv, \
|
||||||
$brotli_reqpriv"
|
$brotli_reqpriv"
|
||||||
# beautify
|
# beautify
|
||||||
PKGCONFIG_REQUIRES_PRIVATE=`echo "$PKGCONFIG_REQUIRES_PRIVATE" \
|
REQUIRES_PRIVATE=`echo "$REQUIRES_PRIVATE" \
|
||||||
| sed -e 's/^ *//' \
|
| sed -e 's/^ *//' \
|
||||||
-e 's/ *$//' \
|
-e 's/ *$//' \
|
||||||
-e 's/, */,/g' \
|
-e 's/, */,/g' \
|
||||||
-e 's/,,*/,/g' \
|
-e 's/,,*/,/g' \
|
||||||
-e 's/^,*//' \
|
-e 's/^,*//' \
|
||||||
-e 's/,*$//' \
|
-e 's/,*$//' \
|
||||||
-e 's/,/, /g'`
|
-e 's/,/, /g'`
|
||||||
|
|
||||||
PKGCONFIG_LIBS_PRIVATE="$zlib_libspriv \
|
LIBS_PRIVATE="$zlib_libspriv \
|
||||||
$bzip2_libspriv \
|
$bzip2_libspriv \
|
||||||
$libpng_libspriv \
|
$libpng_libspriv \
|
||||||
$harfbuzz_libspriv \
|
$harfbuzz_libspriv \
|
||||||
$brotli_libspriv \
|
$brotli_libspriv \
|
||||||
$ft2_extra_libs"
|
$ft2_extra_libs"
|
||||||
# beautify
|
# beautify
|
||||||
PKGCONFIG_LIBS_PRIVATE=`echo "$PKGCONFIG_LIBS_PRIVATE" \
|
LIBS_PRIVATE=`echo "$LIBS_PRIVATE" \
|
||||||
| sed -e 's/^ *//' \
|
| sed -e 's/^ *//' \
|
||||||
-e 's/ *$//' \
|
-e 's/ *$//' \
|
||||||
-e 's/ */ /g'`
|
-e 's/ */ /g'`
|
||||||
|
|
||||||
LIBSSTATIC_CONFIG="-lfreetype \
|
LIBSSTATIC_CONFIG="-lfreetype \
|
||||||
$zlib_libsstaticconf \
|
$zlib_libsstaticconf \
|
||||||
|
@ -1040,28 +1080,10 @@ LIBSSTATIC_CONFIG=`echo "$LIBSSTATIC_CONFIG" \
|
||||||
-e 's/ *$//' \
|
-e 's/ *$//' \
|
||||||
-e 's/ */ /g'`
|
-e 's/ */ /g'`
|
||||||
|
|
||||||
# If FreeType gets installed with `--disable-shared', don't use
|
|
||||||
# 'private' fields. `pkg-config' only looks into `.pc' files and is
|
|
||||||
# completely agnostic to whether shared libraries are actually present
|
|
||||||
# or not. As a consequence, the user had to specify `--static' while
|
|
||||||
# calling `pkg-config', which configure scripts are normally not
|
|
||||||
# prepared for.
|
|
||||||
|
|
||||||
PKGCONFIG_REQUIRES=
|
|
||||||
PKGCONFIG_LIBS='-L${libdir} -lfreetype'
|
|
||||||
|
|
||||||
if test $enable_shared = "no"; then
|
|
||||||
PKGCONFIG_REQUIRES="$PKGCONFIG_REQUIRES $PKGCONFIG_REQUIRES_PRIVATE"
|
|
||||||
PKGCONFIG_REQUIRES_PRIVATE=
|
|
||||||
PKGCONFIG_LIBS="$PKGCONFIG_LIBS $PKGCONFIG_LIBS_PRIVATE"
|
|
||||||
PKGCONFIG_LIBS_PRIVATE=
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST([ftmac_c])
|
AC_SUBST([ftmac_c])
|
||||||
AC_SUBST([PKGCONFIG_REQUIRES])
|
AC_SUBST([REQUIRES_PRIVATE])
|
||||||
AC_SUBST([PKGCONFIG_LIBS])
|
AC_SUBST([LIBS_PRIVATE])
|
||||||
AC_SUBST([PKGCONFIG_REQUIRES_PRIVATE])
|
|
||||||
AC_SUBST([PKGCONFIG_LIBS_PRIVATE])
|
|
||||||
AC_SUBST([LIBSSTATIC_CONFIG])
|
AC_SUBST([LIBSSTATIC_CONFIG])
|
||||||
|
|
||||||
AC_SUBST([hardcode_libdir_flag_spec])
|
AC_SUBST([hardcode_libdir_flag_spec])
|
||||||
|
@ -1120,11 +1142,6 @@ else
|
||||||
ftoption_unset FT_CONFIG_OPTION_USE_BROTLI
|
ftoption_unset FT_CONFIG_OPTION_USE_BROTLI
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "$have_pthread" != no; then
|
|
||||||
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
|
|
||||||
LDFLAGS="$LDFLAGS $PTHREAD_CFLAGS $PTHREAD_LIBS"
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST([CFLAGS])
|
AC_SUBST([CFLAGS])
|
||||||
AC_SUBST([LDFLAGS])
|
AC_SUBST([LDFLAGS])
|
||||||
|
|
||||||
|
@ -1159,27 +1176,16 @@ Library configuration:
|
||||||
libpng: $have_libpng
|
libpng: $have_libpng
|
||||||
harfbuzz: $have_harfbuzz
|
harfbuzz: $have_harfbuzz
|
||||||
brotli: $have_brotli
|
brotli: $have_brotli
|
||||||
pthread: $have_pthread
|
|
||||||
])
|
])
|
||||||
|
|
||||||
# Warn if docwriter is not installed
|
# Warn if docwriter is not installed
|
||||||
|
|
||||||
if test $have_docwriter = no; then
|
if test $have_docwriter = no; then
|
||||||
AC_MSG_WARN([
|
AC_MSG_WARN([
|
||||||
`make refdoc' will fail since pip package `docwriter' is not installed.
|
\`make refdoc' will fail since pip package \`docwriter' is not installed.
|
||||||
To install, run `$PIP install docwriter', or to use a Python
|
To install, run \`$PIP install docwriter', or to use a Python
|
||||||
virtual environment, run `make refdoc-venv' (requires pip package
|
virtual environment, run \`make refdoc-venv' (requires pip package
|
||||||
`virtualenv'). These operations require Python >= 3.5.
|
\`virtualenv'). These operations require Python >= 3.5.
|
||||||
])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Warn if pthread is not available
|
|
||||||
|
|
||||||
if test $have_pthread = no; then
|
|
||||||
AC_MSG_WARN([
|
|
||||||
`FT_DEBUG_LOGGING' will not work since the `pthread' library is not
|
|
||||||
available. This warning can be safely ignored if you don't plan to use
|
|
||||||
this configuration macro.
|
|
||||||
])
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
#
|
#
|
||||||
# Copyright (C) 2000-2022 by
|
# Copyright (C) 2000-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -7,8 +7,8 @@ Name: FreeType 2
|
||||||
URL: https://freetype.org
|
URL: https://freetype.org
|
||||||
Description: A free, high-quality, and portable font engine.
|
Description: A free, high-quality, and portable font engine.
|
||||||
Version: %ft_version%
|
Version: %ft_version%
|
||||||
Requires: %PKGCONFIG_REQUIRES%
|
Requires:
|
||||||
Requires.private: %PKGCONFIG_REQUIRES_PRIVATE%
|
Requires.private: %REQUIRES_PRIVATE%
|
||||||
Libs: %PKGCONFIG_LIBS%
|
Libs: -L${libdir} -lfreetype
|
||||||
Libs.private: %PKGCONFIG_LIBS_PRIVATE%
|
Libs.private: %LIBS_PRIVATE%
|
||||||
Cflags: -I${includedir}/freetype2
|
Cflags: -I${includedir}/freetype2
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Configure paths for FreeType2
|
# Configure paths for FreeType2
|
||||||
# Marcelo Magallon 2001-10-26, based on `gtk.m4` by Owen Taylor
|
# Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
|
||||||
#
|
#
|
||||||
# Copyright (C) 2001-2022 by
|
# Copyright (C) 2001-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -15,32 +15,32 @@
|
||||||
# generated by Autoconf, under the same distribution terms as the rest of
|
# generated by Autoconf, under the same distribution terms as the rest of
|
||||||
# that program.
|
# that program.
|
||||||
#
|
#
|
||||||
# serial 6
|
# serial 5
|
||||||
|
|
||||||
# AC_CHECK_FT2([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
|
# AC_CHECK_FT2([MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
|
||||||
# Test for FreeType 2, and define FT2_CFLAGS and FT2_LIBS.
|
# Test for FreeType 2, and define FT2_CFLAGS and FT2_LIBS.
|
||||||
# MINIMUM-VERSION is what libtool reports; the default is '7.0.1' (this is
|
# MINIMUM-VERSION is what libtool reports; the default is `7.0.1' (this is
|
||||||
# FreeType 2.0.4).
|
# FreeType 2.0.4).
|
||||||
#
|
#
|
||||||
# To make this code work with older autoconf versions, `AS_HELP_STRING` is
|
|
||||||
# not quoted.
|
|
||||||
#
|
|
||||||
AC_DEFUN([AC_CHECK_FT2],
|
AC_DEFUN([AC_CHECK_FT2],
|
||||||
[# Get the cflags and libraries from the freetype-config script
|
[# Get the cflags and libraries from the freetype-config script
|
||||||
#
|
#
|
||||||
AC_ARG_WITH([ft-prefix],
|
AC_ARG_WITH([ft-prefix],
|
||||||
|
dnl don't quote AS_HELP_STRING!
|
||||||
AS_HELP_STRING([--with-ft-prefix=PREFIX],
|
AS_HELP_STRING([--with-ft-prefix=PREFIX],
|
||||||
[Prefix where FreeType is installed (optional)]),
|
[Prefix where FreeType is installed (optional)]),
|
||||||
[ft_config_prefix="$withval"],
|
[ft_config_prefix="$withval"],
|
||||||
[ft_config_prefix=""])
|
[ft_config_prefix=""])
|
||||||
|
|
||||||
AC_ARG_WITH([ft-exec-prefix],
|
AC_ARG_WITH([ft-exec-prefix],
|
||||||
|
dnl don't quote AS_HELP_STRING!
|
||||||
AS_HELP_STRING([--with-ft-exec-prefix=PREFIX],
|
AS_HELP_STRING([--with-ft-exec-prefix=PREFIX],
|
||||||
[Exec prefix where FreeType is installed (optional)]),
|
[Exec prefix where FreeType is installed (optional)]),
|
||||||
[ft_config_exec_prefix="$withval"],
|
[ft_config_exec_prefix="$withval"],
|
||||||
[ft_config_exec_prefix=""])
|
[ft_config_exec_prefix=""])
|
||||||
|
|
||||||
AC_ARG_ENABLE([freetypetest],
|
AC_ARG_ENABLE([freetypetest],
|
||||||
|
dnl don't quote AS_HELP_STRING!
|
||||||
AS_HELP_STRING([--disable-freetypetest],
|
AS_HELP_STRING([--disable-freetypetest],
|
||||||
[Do not try to compile and run a test FreeType program]),
|
[Do not try to compile and run a test FreeType program]),
|
||||||
[],
|
[],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
## FreeType specific autoconf tests
|
## FreeType specific autoconf tests
|
||||||
#
|
#
|
||||||
# Copyright (C) 2002-2022 by
|
# Copyright (C) 2002-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
*
|
*
|
||||||
* UNIX-specific configuration file (specification only).
|
* UNIX-specific configuration file (specification only).
|
||||||
*
|
*
|
||||||
* Copyright (C) 1996-2022 by
|
* Copyright (C) 1996-2020 by
|
||||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
*
|
*
|
||||||
* This file is part of the FreeType project, and may only be used,
|
* This file is part of the FreeType project, and may only be used,
|
||||||
|
@ -42,6 +42,16 @@
|
||||||
#undef HAVE_UNISTD_H
|
#undef HAVE_UNISTD_H
|
||||||
#undef HAVE_FCNTL_H
|
#undef HAVE_FCNTL_H
|
||||||
|
|
||||||
|
#undef FT_USE_AUTOCONF_SIZEOF_TYPES
|
||||||
|
#ifdef FT_USE_AUTOCONF_SIZEOF_TYPES
|
||||||
|
|
||||||
|
#undef SIZEOF_INT
|
||||||
|
#undef SIZEOF_LONG
|
||||||
|
#define FT_SIZEOF_INT SIZEOF_INT
|
||||||
|
#define FT_SIZEOF_LONG SIZEOF_LONG
|
||||||
|
|
||||||
|
#endif /* FT_USE_AUTOCONF_SIZEOF_TYPES */
|
||||||
|
|
||||||
#include <freetype/config/integer-types.h>
|
#include <freetype/config/integer-types.h>
|
||||||
#include <freetype/config/public-macros.h>
|
#include <freetype/config/public-macros.h>
|
||||||
#include <freetype/config/mac-support.h>
|
#include <freetype/config/mac-support.h>
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
/****************************************************************************
|
/***************************************************************************/
|
||||||
*
|
/* */
|
||||||
* ftsystem.c
|
/* ftsystem.c */
|
||||||
*
|
/* */
|
||||||
* Unix-specific FreeType low-level system interface (body).
|
/* Unix-specific FreeType low-level system interface (body). */
|
||||||
*
|
/* */
|
||||||
* Copyright (C) 1996-2022 by
|
/* Copyright (C) 1996-2020 by */
|
||||||
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
||||||
*
|
/* */
|
||||||
* This file is part of the FreeType project, and may only be used,
|
/* This file is part of the FreeType project, and may only be used, */
|
||||||
* modified, and distributed under the terms of the FreeType project
|
/* modified, and distributed under the terms of the FreeType project */
|
||||||
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
/* license, LICENSE.TXT. By continuing to use, modify, or distribute */
|
||||||
* this file you indicate that you have read the license and
|
/* this file you indicate that you have read the license and */
|
||||||
* understand and accept it fully.
|
/* understand and accept it fully. */
|
||||||
*
|
/* */
|
||||||
*/
|
/***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include <ft2build.h>
|
#include <ft2build.h>
|
||||||
/* we use our special ftconfig.h file, not the standard one */
|
/* we use our special ftconfig.h file, not the standard one */
|
||||||
#include FT_CONFIG_CONFIG_H
|
#include <ftconfig.h>
|
||||||
#include <freetype/internal/ftdebug.h>
|
#include <freetype/internal/ftdebug.h>
|
||||||
#include <freetype/ftsystem.h>
|
#include <freetype/ftsystem.h>
|
||||||
#include <freetype/fterrors.h>
|
#include <freetype/fterrors.h>
|
||||||
|
@ -70,40 +70,29 @@
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/*************************************************************************/
|
||||||
*
|
/* */
|
||||||
* MEMORY MANAGEMENT INTERFACE
|
/* MEMORY MANAGEMENT INTERFACE */
|
||||||
*
|
/* */
|
||||||
*/
|
/*************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/*************************************************************************/
|
||||||
*
|
/* */
|
||||||
* It is not necessary to do any error checking for the
|
/* <Function> */
|
||||||
* allocation-related functions. This will be done by the higher level
|
/* ft_alloc */
|
||||||
* routines like ft_mem_alloc() or ft_mem_realloc().
|
/* */
|
||||||
*
|
/* <Description> */
|
||||||
*/
|
/* The memory allocation function. */
|
||||||
|
/* */
|
||||||
|
/* <Input> */
|
||||||
/**************************************************************************
|
/* memory :: A pointer to the memory object. */
|
||||||
*
|
/* */
|
||||||
* @Function:
|
/* size :: The requested size in bytes. */
|
||||||
* ft_alloc
|
/* */
|
||||||
*
|
/* <Return> */
|
||||||
* @Description:
|
/* The address of newly allocated block. */
|
||||||
* The memory allocation function.
|
/* */
|
||||||
*
|
|
||||||
* @Input:
|
|
||||||
* memory ::
|
|
||||||
* A pointer to the memory object.
|
|
||||||
*
|
|
||||||
* size ::
|
|
||||||
* The requested size in bytes.
|
|
||||||
*
|
|
||||||
* @Return:
|
|
||||||
* The address of newly allocated block.
|
|
||||||
*/
|
|
||||||
FT_CALLBACK_DEF( void* )
|
FT_CALLBACK_DEF( void* )
|
||||||
ft_alloc( FT_Memory memory,
|
ft_alloc( FT_Memory memory,
|
||||||
long size )
|
long size )
|
||||||
|
@ -114,30 +103,26 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/*************************************************************************/
|
||||||
*
|
/* */
|
||||||
* @Function:
|
/* <Function> */
|
||||||
* ft_realloc
|
/* ft_realloc */
|
||||||
*
|
/* */
|
||||||
* @Description:
|
/* <Description> */
|
||||||
* The memory reallocation function.
|
/* The memory reallocation function. */
|
||||||
*
|
/* */
|
||||||
* @Input:
|
/* <Input> */
|
||||||
* memory ::
|
/* memory :: A pointer to the memory object. */
|
||||||
* A pointer to the memory object.
|
/* */
|
||||||
*
|
/* cur_size :: The current size of the allocated memory block. */
|
||||||
* cur_size ::
|
/* */
|
||||||
* The current size of the allocated memory block.
|
/* new_size :: The newly requested size in bytes. */
|
||||||
*
|
/* */
|
||||||
* new_size ::
|
/* block :: The current address of the block in memory. */
|
||||||
* The newly requested size in bytes.
|
/* */
|
||||||
*
|
/* <Return> */
|
||||||
* block ::
|
/* The address of the reallocated memory block. */
|
||||||
* The current address of the block in memory.
|
/* */
|
||||||
*
|
|
||||||
* @Return:
|
|
||||||
* The address of the reallocated memory block.
|
|
||||||
*/
|
|
||||||
FT_CALLBACK_DEF( void* )
|
FT_CALLBACK_DEF( void* )
|
||||||
ft_realloc( FT_Memory memory,
|
ft_realloc( FT_Memory memory,
|
||||||
long cur_size,
|
long cur_size,
|
||||||
|
@ -151,21 +136,19 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/*************************************************************************/
|
||||||
*
|
/* */
|
||||||
* @Function:
|
/* <Function> */
|
||||||
* ft_free
|
/* ft_free */
|
||||||
*
|
/* */
|
||||||
* @Description:
|
/* <Description> */
|
||||||
* The memory release function.
|
/* The memory release function. */
|
||||||
*
|
/* */
|
||||||
* @Input:
|
/* <Input> */
|
||||||
* memory ::
|
/* memory :: A pointer to the memory object. */
|
||||||
* A pointer to the memory object.
|
/* */
|
||||||
*
|
/* block :: The address of block in memory to be freed. */
|
||||||
* block ::
|
/* */
|
||||||
* The address of block in memory to be freed.
|
|
||||||
*/
|
|
||||||
FT_CALLBACK_DEF( void )
|
FT_CALLBACK_DEF( void )
|
||||||
ft_free( FT_Memory memory,
|
ft_free( FT_Memory memory,
|
||||||
void* block )
|
void* block )
|
||||||
|
@ -176,19 +159,19 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/*************************************************************************/
|
||||||
*
|
/* */
|
||||||
* RESOURCE MANAGEMENT INTERFACE
|
/* RESOURCE MANAGEMENT INTERFACE */
|
||||||
*
|
/* */
|
||||||
*/
|
/*************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/*************************************************************************/
|
||||||
*
|
/* */
|
||||||
* The macro FT_COMPONENT is used in trace mode. It is an implicit
|
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */
|
||||||
* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
|
/* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
|
||||||
* messages during execution.
|
/* messages during execution. */
|
||||||
*/
|
/* */
|
||||||
#undef FT_COMPONENT
|
#undef FT_COMPONENT
|
||||||
#define FT_COMPONENT io
|
#define FT_COMPONENT io
|
||||||
|
|
||||||
|
@ -197,17 +180,17 @@
|
||||||
#define STREAM_FILE( stream ) ( (FILE*)stream->descriptor.pointer )
|
#define STREAM_FILE( stream ) ( (FILE*)stream->descriptor.pointer )
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/*************************************************************************/
|
||||||
*
|
/* */
|
||||||
* @Function:
|
/* <Function> */
|
||||||
* ft_close_stream_by_munmap
|
/* ft_close_stream_by_munmap */
|
||||||
*
|
/* */
|
||||||
* @Description:
|
/* <Description> */
|
||||||
* The function to close a stream which is opened by mmap.
|
/* The function to close a stream which is opened by mmap. */
|
||||||
*
|
/* */
|
||||||
* @Input:
|
/* <Input> */
|
||||||
* stream :: A pointer to the stream object.
|
/* stream :: A pointer to the stream object. */
|
||||||
*/
|
/* */
|
||||||
FT_CALLBACK_DEF( void )
|
FT_CALLBACK_DEF( void )
|
||||||
ft_close_stream_by_munmap( FT_Stream stream )
|
ft_close_stream_by_munmap( FT_Stream stream )
|
||||||
{
|
{
|
||||||
|
@ -215,29 +198,29 @@
|
||||||
|
|
||||||
stream->descriptor.pointer = NULL;
|
stream->descriptor.pointer = NULL;
|
||||||
stream->size = 0;
|
stream->size = 0;
|
||||||
stream->base = NULL;
|
stream->base = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/*************************************************************************/
|
||||||
*
|
/* */
|
||||||
* @Function:
|
/* <Function> */
|
||||||
* ft_close_stream_by_free
|
/* ft_close_stream_by_free */
|
||||||
*
|
/* */
|
||||||
* @Description:
|
/* <Description> */
|
||||||
* The function to close a stream which is created by ft_alloc.
|
/* The function to close a stream which is created by ft_alloc. */
|
||||||
*
|
/* */
|
||||||
* @Input:
|
/* <Input> */
|
||||||
* stream :: A pointer to the stream object.
|
/* stream :: A pointer to the stream object. */
|
||||||
*/
|
/* */
|
||||||
FT_CALLBACK_DEF( void )
|
FT_CALLBACK_DEF( void )
|
||||||
ft_close_stream_by_free( FT_Stream stream )
|
ft_close_stream_by_free( FT_Stream stream )
|
||||||
{
|
{
|
||||||
ft_free( stream->memory, stream->descriptor.pointer );
|
ft_free( NULL, stream->descriptor.pointer );
|
||||||
|
|
||||||
stream->descriptor.pointer = NULL;
|
stream->descriptor.pointer = NULL;
|
||||||
stream->size = 0;
|
stream->size = 0;
|
||||||
stream->base = NULL;
|
stream->base = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -313,7 +296,8 @@
|
||||||
file,
|
file,
|
||||||
0 );
|
0 );
|
||||||
|
|
||||||
if ( stream->base != MAP_FAILED )
|
/* on some RTOS, mmap might return 0 */
|
||||||
|
if ( (long)stream->base != -1 && stream->base != NULL )
|
||||||
stream->close = ft_close_stream_by_munmap;
|
stream->close = ft_close_stream_by_munmap;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -323,7 +307,7 @@
|
||||||
FT_ERROR(( "FT_Stream_Open:" ));
|
FT_ERROR(( "FT_Stream_Open:" ));
|
||||||
FT_ERROR(( " could not `mmap' file `%s'\n", filepathname ));
|
FT_ERROR(( " could not `mmap' file `%s'\n", filepathname ));
|
||||||
|
|
||||||
stream->base = (unsigned char*)ft_alloc( stream->memory, stream->size );
|
stream->base = (unsigned char*)ft_alloc( NULL, stream->size );
|
||||||
|
|
||||||
if ( !stream->base )
|
if ( !stream->base )
|
||||||
{
|
{
|
||||||
|
@ -364,7 +348,7 @@
|
||||||
stream->descriptor.pointer = stream->base;
|
stream->descriptor.pointer = stream->base;
|
||||||
stream->pathname.pointer = (char*)filepathname;
|
stream->pathname.pointer = (char*)filepathname;
|
||||||
|
|
||||||
stream->read = NULL;
|
stream->read = 0;
|
||||||
|
|
||||||
FT_TRACE1(( "FT_Stream_Open:" ));
|
FT_TRACE1(( "FT_Stream_Open:" ));
|
||||||
FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n",
|
FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n",
|
||||||
|
@ -373,7 +357,7 @@
|
||||||
return FT_Err_Ok;
|
return FT_Err_Ok;
|
||||||
|
|
||||||
Fail_Read:
|
Fail_Read:
|
||||||
ft_free( stream->memory, stream->base );
|
ft_free( NULL, stream->base );
|
||||||
|
|
||||||
Fail_Map:
|
Fail_Map:
|
||||||
close( file );
|
close( file );
|
||||||
|
@ -408,7 +392,7 @@
|
||||||
memory = (FT_Memory)malloc( sizeof ( *memory ) );
|
memory = (FT_Memory)malloc( sizeof ( *memory ) );
|
||||||
if ( memory )
|
if ( memory )
|
||||||
{
|
{
|
||||||
memory->user = NULL;
|
memory->user = 0;
|
||||||
memory->alloc = ft_alloc;
|
memory->alloc = ft_alloc;
|
||||||
memory->realloc = ft_realloc;
|
memory->realloc = ft_realloc;
|
||||||
memory->free = ft_free;
|
memory->free = ft_free;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -62,7 +62,7 @@ endif
|
||||||
$(DESTDIR)$(includedir)/freetype2/freetype/config/ftmodule.h
|
$(DESTDIR)$(includedir)/freetype2/freetype/config/ftmodule.h
|
||||||
$(INSTALL_DATA) $(OBJ_BUILD)/ftoption.h \
|
$(INSTALL_DATA) $(OBJ_BUILD)/ftoption.h \
|
||||||
$(DESTDIR)$(includedir)/freetype2/freetype/config/ftoption.h
|
$(DESTDIR)$(includedir)/freetype2/freetype/config/ftoption.h
|
||||||
$(INSTALL_SCRIPT) -m 644 $(PLATFORM_DIR)/freetype2.m4 \
|
$(INSTALL_SCRIPT) -m 644 $(BUILD_DIR)/freetype2.m4 \
|
||||||
$(DESTDIR)$(datadir)/aclocal/freetype2.m4
|
$(DESTDIR)$(datadir)/aclocal/freetype2.m4
|
||||||
$(INSTALL_SCRIPT) -m 644 $(OBJ_BUILD)/freetype2.pc \
|
$(INSTALL_SCRIPT) -m 644 $(OBJ_BUILD)/freetype2.pc \
|
||||||
$(DESTDIR)$(libdir)/pkgconfig/freetype2.pc
|
$(DESTDIR)$(libdir)/pkgconfig/freetype2.pc
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# FreeType 2 template for Unix-specific compiler definitions
|
# FreeType 2 template for Unix-specific compiler definitions
|
||||||
#
|
#
|
||||||
|
|
||||||
# Copyright (C) 1996-2022 by
|
# Copyright (C) 1996-2020 by
|
||||||
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
# David Turner, Robert Wilhelm, and Werner Lemberg.
|
||||||
#
|
#
|
||||||
# This file is part of the FreeType project, and may only be used, modified,
|
# This file is part of the FreeType project, and may only be used, modified,
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
CC := @CC@
|
CC := @CC@
|
||||||
COMPILER_SEP := $(SEP)
|
COMPILER_SEP := $(SEP)
|
||||||
FT_LIBTOOL_DIR ?= $(PLATFORM_DIR)
|
FT_LIBTOOL_DIR ?= $(BUILD_DIR)
|
||||||
|
|
||||||
LIBTOOL := $(FT_LIBTOOL_DIR)/libtool
|
LIBTOOL := $(FT_LIBTOOL_DIR)/libtool
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ T := -o$(space)
|
||||||
#
|
#
|
||||||
# These should concern: debug output, optimization & warnings.
|
# These should concern: debug output, optimization & warnings.
|
||||||
#
|
#
|
||||||
# Use the ANSIFLAGS variable to define the compiler flags used to enforce
|
# Use the ANSIFLAGS variable to define the compiler flags used to enfore
|
||||||
# ANSI compliance.
|
# ANSI compliance.
|
||||||
#
|
#
|
||||||
# We use our own FreeType configuration files overriding defaults.
|
# We use our own FreeType configuration files overriding defaults.
|
||||||
|
@ -106,7 +106,9 @@ endif
|
||||||
|
|
||||||
# Linker flags.
|
# Linker flags.
|
||||||
#
|
#
|
||||||
LDFLAGS := @LDFLAGS@
|
LDFLAGS := @LDFLAGS@
|
||||||
|
LIB_CLOCK_GETTIME := @LIB_CLOCK_GETTIME@ # for ftbench
|
||||||
|
|
||||||
|
|
||||||
# export symbols
|
# export symbols
|
||||||
#
|
#
|
||||||
|
@ -116,15 +118,11 @@ EXPORTS_LIST := $(OBJ_DIR)/ftexport.sym
|
||||||
CCexe := $(CCraw_build) # used to compile `apinames' only
|
CCexe := $(CCraw_build) # used to compile `apinames' only
|
||||||
|
|
||||||
|
|
||||||
# Library linking.
|
# Library linking
|
||||||
#
|
#
|
||||||
LINK_LIBRARY = $(LIBTOOL) --mode=link $(CCraw) -o $@ $(OBJECTS_LIST) \
|
LINK_LIBRARY = $(LIBTOOL) --mode=link $(CCraw) -o $@ $(OBJECTS_LIST) \
|
||||||
-rpath $(libdir) -version-info $(version_info) \
|
-rpath $(libdir) -version-info $(version_info) \
|
||||||
$(LDFLAGS) -no-undefined \
|
$(LDFLAGS) -no-undefined \
|
||||||
-export-symbols $(EXPORTS_LIST)
|
-export-symbols $(EXPORTS_LIST)
|
||||||
|
|
||||||
# For the demo programs.
|
|
||||||
FT_DEMO_CFLAGS := @FT_DEMO_CFLAGS@
|
|
||||||
FT_DEMO_LDFLAGS := @FT_DEMO_LDFLAGS@
|
|
||||||
|
|
||||||
# EOF
|
# EOF
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue