Re: Meson build, continued

2020-09-22 Thread Werner LEMBERG


> Please consider moving scripts into the build/meson folder for
> consistency.  This is where cmake keeps its stuff.

Done.


Werner



Re: Meson build, continued

2020-09-22 Thread Alexei Podtelezhnikov
On Mon, Sep 21, 2020 at 1:54 AM Werner LEMBERG  wrote:

>
> > All right, here's the same set of patches with Black applied.
>
> Applied to the repository, with some changes here and there.  Please
> check


Please consider moving scripts into the build/meson folder for consistency.
This is where cmake keeps its stuff.

Alexei


Re: Meson build, continued

2020-09-20 Thread Werner LEMBERG


> All right, here's the same set of patches with Black applied.

Applied to the repository, with some changes here and there.  Please
check!


Werner



Re: Meson build, continued

2020-09-18 Thread Werner LEMBERG


> All right, here's the same set of patches with Black applied.  The
> differences are minor, except for the use of double-quotes instead
> of single ones (I don't care personally).

Thanks!  Will check your stuff within the next few days.


Werner



Re: Meson build, continued

2020-09-18 Thread Werner LEMBERG


> I'll tell Werner that black is better, speaking in my capacity of a
> professional python font developer!

I believe you :-)


Werner



Re: Meson build, continued

2020-09-18 Thread Werner LEMBERG


>> Let's not clog the src folder please
>>
>> src/base/amiga (not src/amiga)
>> src/base/unix (not src/unix)
>
> What about using a _.c suffix, as in:

If at all I prefer a `-.c` suffix.  Underlines are an
abomination :-)

> src/base/ftsystem_amiga.c
> src/base/ftsystem_win32.c
> etc..
> 
> We are no longer limited to 8.3 filenames, and I find this approach
> makes it easy to spot source files which have platform-specific
> variants.

Mhmm.  Honestly, I like `src/base//` more.


   Werner



Re: Meson build, continued

2020-09-18 Thread David Turner
Le ven. 18 sept. 2020 à 16:22, Alexei Podtelezhnikov  a
écrit :

> Let's not clog the src folder please
>
> src/base/amiga (not src/amiga)
> src/base/unix (not src/unix)
>
> What about using a _.c suffix, as in:

src/base/ftsystem_amiga.c
src/base/ftsystem_win32.c
etc..

We are no longer limited to 8.3 filenames, and I find this approach makes
it easy to spot source files which have platform-specific variants.


> > don't you think that all those (source) files should be in src/ ? I
>> > would find these more logical. Maybe in subdirectories of src (like
>> > src/unix src/mac src/windows etc...)
>
>


Re: Meson build, continued

2020-09-18 Thread Alexei Podtelezhnikov
 Let's not clog the src folder please

src/base/amiga (not src/amiga)
src/base/unix (not src/unix)


> don't you think that all those (source) files should be in src/ ? I
> > would find these more logical. Maybe in subdirectories of src (like
> > src/unix src/mac src/windows etc...)


Re: Meson build, continued

2020-09-18 Thread Werner LEMBERG

> a quick find -name *.c gives files in src/ and also :
> 
> ./builds/amiga/src/base/ftdebug.c
> ./builds/amiga/src/base/ftsystem.c
> ./builds/mac/ftmac.c
> ./builds/unix/ftsystem.c
> ./builds/vms/ftsystem.c
> ./builds/wince/ftdebug.c
> ./builds/windows/ftdebug.c
> ./builds/windows/ftsystem.c
> 
> don't you think that all those (source) files should be in src/ ? I
> would find these more logical. Maybe in subdirectories of src (like
> src/unix src/mac src/windows etc...)

The latter is a nice idea.  However, this is nothing urgent IMHO.  On
the other hand, if someone is going to provide a patch, I won't
object :-)


Werner


Re: Meson build, continued

2020-09-18 Thread Vincent Torri
Hello

a quick find -name *.c gives files in src/ and also :

./builds/amiga/src/base/ftdebug.c
./builds/amiga/src/base/ftsystem.c
./builds/mac/ftmac.c
./builds/unix/ftsystem.c
./builds/vms/ftsystem.c
./builds/wince/ftdebug.c
./builds/windows/ftdebug.c
./builds/windows/ftsystem.c

don't you think that all those (source) files should be in src/ ? I
would find these more logical. Maybe in subdirectories of src (like
src/unix src/mac src/windows etc...)

thank you

Vincent Torri


On Fri, Sep 18, 2020 at 3:03 PM David Turner  wrote:
>
> All right, here's the same set of patches with Black applied. The differences 
> are minor, except for the use of double-quotes instead of single ones (I 
> don't care personally).
> I'll let Werner choose which set is better :-)
>
>
>
> Le ven. 18 sept. 2020 à 14:54, Nikolaus Waxweiler  a 
> écrit :
>>>
>>> PS: This introduces several python scripts, I have been using the "yapf" 
>>> tool to format them. If you know of a better python reformatter, let me 
>>> know.
>>
>>
>> Black It's the best



Re: Meson build, continued

2020-09-18 Thread Nikolaus Waxweiler
I'll tell Werner that black is better, speaking in my capacity of a
professional python font developer!

@Werner: see above

Ps: thanks for doing meson work! Can't wait to see all other build systems
be dropped!


Re: Meson build, continued

2020-09-18 Thread David Turner
All right, here's the same set of patches with Black applied. The
differences are minor, except for the use of double-quotes instead of
single ones (I don't care personally).
I'll let Werner choose which set is better :-)



Le ven. 18 sept. 2020 à 14:54, Nikolaus Waxweiler  a
écrit :

> PS: This introduces several python scripts, I have been using the "yapf"
>> tool to format them. If you know of a better python reformatter, let me
>> know.
>>
>
> Black It's the best
>
>>
From 8dcb5c0789a8065947eb66d08ceae730b6afae87 Mon Sep 17 00:00:00 2001
From: David Turner 
Date: Tue, 25 Aug 2020 20:52:32 +0200
Subject: [build] Add scripts/make_distribution_archives.py

This standalone Python script should be equivalent to running
"make dist" with the Make-based build system, with the following
minor differences:

- Since 'make distclean' doesn't always cleanup objs/ properly,
  the 'make dist' archives may contain some stale binaries like
  objs/.libs/libfreetype.so.6 or others.

- The config.guess and config.sub files are not update, unless
  one uses the --gnu-config-dir=DIR option to specify were they
  are located.

- Some bits of the auto-generated reference documentation may
  appear in slightly different order, probably due to issues
  related to mkdocs and docwriter.

Usage example:

  scripts/make_distribution_archives.py /tmp/freetype2-dist

Will create files the following files under /tmp/freetype2-dist:

  freetype-.tar.gz
  freetype-.tar.xz
  ft.zip
---
 scripts/make_distribution_archives.py | 188 ++
 1 file changed, 188 insertions(+)
 create mode 100755 scripts/make_distribution_archives.py

diff --git a/scripts/make_distribution_archives.py b/scripts/make_distribution_archives.py
new file mode 100755
index 0..cf2bb544f
--- /dev/null
+++ b/scripts/make_distribution_archives.py
@@ -0,0 +1,188 @@
+#!/usr/bin/env python3
+"""Generate distribution archives for a given FreeType 2 release."""
+
+from __future__ import print_function
+
+import argparse
+import atexit
+import os
+import shutil
+import subprocess
+import sys
+import tempfile
+
+_SCRIPT_DIR = os.path.dirname(__file__)
+_TOP_DIR = os.path.abspath(os.path.join(_SCRIPT_DIR, ".."))
+
+
+def get_cmd_output(cmd, cwd=None):
+"""Run a command and return its output as a string."""
+if cwd is not None:
+out = subprocess.check_output(cmd, cwd=cwd)
+else:
+out = subprocess.check_output(cmd)
+return out.decode("utf-8").rstrip()
+
+
+def is_git_dir_clean(git_dir):
+"""Return True iff |git_dir| is a git directory in clean state."""
+out = get_cmd_output(["git", "status", "--porcelain"], cwd=git_dir)
+return len(out) == 0
+
+
+def main():
+parser = argparse.ArgumentParser(description=__doc__)
+
+parser.add_argument("--source_dir", default=_TOP_DIR, help="Source directory path.")
+
+parser.add_argument(
+"--version",
+help="Specify alternate FreeType version (it is otherwise extracted from "
+"current sources by default).",
+)
+
+parser.add_argument(
+"--gnu-config-dir",
+help=(
+"Path of input directory containing recent `config.guess` and "
+"`config.sub` files from GNU config."
+),
+)
+
+parser.add_argument(
+"--build-dir",
+help="Specify build directory. Only used for debugging this script.",
+)
+
+parser.add_argument(
+"--ignore-clean-check",
+action="store_true",
+help="Do not check for a clean source git repository. Only used for "
+"debugging this script.",
+)
+
+parser.add_argument("output_dir", help="Output directory for generated archives.")
+
+args = parser.parse_args()
+
+git_dir = args.source_dir if args.source_dir else _TOP_DIR
+if not args.ignore_clean_check and not is_git_dir_clean(git_dir):
+sys.stderr.write(
+"ERROR: Your git repository is not in a clean state: %s\n" % git_dir
+)
+return 1
+
+if args.version:
+version = args.version
+else:
+# Extract FreeType version from sources.
+version = get_cmd_output(
+[
+sys.executable,
+os.path.join(_SCRIPT_DIR, "extract_freetype_version.py"),
+os.path.join(_TOP_DIR, "include", "freetype", "freetype.h"),
+]
+)
+
+# Determine the build directory. This will be a temporary file that is
+# cleaned up on script exit by default, unless --build-dir=DIR is used,
+# in which case we only create and empty the directory, but never remove
+# its content on exit.
+if args.build_dir:
+build_dir = args.build_dir
+if not os.path.exists(build_dir):
+os.makedirs(build_dir)
+else:
+# Remove anything from the build directory, if any.
+for item in os.listdir(build_dir):
+file_path = os.path.join(build_dir, item)
+

Re: Meson build, continued

2020-09-18 Thread Nikolaus Waxweiler
>
> PS: This introduces several python scripts, I have been using the "yapf"
> tool to format them. If you know of a better python reformatter, let me
> know.
>

Black It's the best

>


Meson build, continued

2020-09-18 Thread David Turner
Hello

Here's my latest version of the Meson build support files for FreeType 2.
It works!
Compared to the previous versions, there are several improvements:

- The generated binaries are now the same size as the ones from the GNU
Make and CMake builds.

- The installed shared libraries have the proper libtool-compatible suffix,
and the generated pkg-config file is now using the correct FreeType
version, paths and other settings.

- The "docs" target will generate the documentation properly, except that
this will go into $BUILD_DIR/docs/ instead of $SRC_DIR/docs/, since Meson
doesn't support modifying the source tree (a good thing in my opinion).

I'd like to see this submitted to the tree, and I'll keep updating it as
needed. See the commit message for instructions on how to build and install
with Meson.

There is also a second patch that adds a new
scripts/make_distribution_archives.py script. it essentially does the same
thing as "make dist", but doesn't rely on GNU Make / CMake / Meson in any
way. I think it's a better way to generate our distribution archives and a
good way to transition to a different build system overall.

Let me know what you think about these.

- Digit

PS: This introduces several python scripts, I have been using the "yapf"
tool to format them. If you know of a better python reformatter, let me
know.
From 45017badeade312778b7e0107873e9649ff52e34 Mon Sep 17 00:00:00 2001
From: David Turner 
Date: Sun, 17 May 2020 18:45:41 +0200
Subject: [build] Add Meson build project files.

This adds a few files to build the FreeType 2 library
with the Meson build system:

- meson.build: top-level Meson build file for the library.

- meson_options.txt: user-selectable options for the build.
  These can be printed with 'meson configure', and selected
  as 'meson setup' or 'meson --reconfigure' time with
  -D=.

- scripts/parse_modules_cfg.py: A script invoked by
  meson.build to parse modules.cfg and extract important
  information out of it (i.e. the list of modules).

- scripts/process_ftoption_h.py: A script invoked by
  meson.build to process the original ftoption.h and
  enable or disabled configuration macro variables based
  on the available dependencies. This is similar to what
  other build systems are using (i.e. Meson configure_file()
  is not used here).

- scripts/extract_freetype_version.py: A script invoked by
  meson.build to extract the FreeType version number from
  

- scripts/extract_libtool_version.py: A script invoked by
  meson.build to extract the libtool revision_info from
  builds/unix/configure.raw and generate the corresponding
  shared library suffix.

- scripts/generate_reference_docs.py: A script invoked
  by meson.build to generate the FreeType 2 reference
  documentation (using the docwriter / mkdocs packages
  which must be installed previously).

Example usage:

  # Configure Meson build to generate release binaries comparable to
  # to the ones from the autotools/make build system.
  meson setup build-meson --prefix=/ --buildtype=debugoptimized --strip -Db_ndebug=true

  # Build and install to /tmp/aa/, this includes a pkg-config file.
  DESTDIR=/tmp/aa ninja -C build-meson install

  # Generate documentation under build-meson/docs
  ninja -C build-meson docs

Library size comparison for stripped libfreetype.so generated
by all three build systems:

  - Default build (autotools + libtool): 712 KiB
  - CMake build (RelWithDebInfo):712 KiB
  - Meson build: 712 KiB
---
 builds/unix/ftsystem.c  |   2 +-
 meson.build | 346 
 meson_options.txt   |   6 +
 scripts/extract_freetype_version.py | 101 
 scripts/extract_libtool_version.py  |  96 
 scripts/generate_reference_docs.py  |  63 +
 scripts/parse_modules_cfg.py| 141 
 scripts/process_ftoption_h.py   |  97 
 8 files changed, 851 insertions(+), 1 deletion(-)
 create mode 100644 meson.build
 create mode 100644 meson_options.txt
 create mode 100644 scripts/extract_freetype_version.py
 create mode 100644 scripts/extract_libtool_version.py
 create mode 100644 scripts/generate_reference_docs.py
 create mode 100644 scripts/parse_modules_cfg.py
 create mode 100644 scripts/process_ftoption_h.py

diff --git a/builds/unix/ftsystem.c b/builds/unix/ftsystem.c
index 8437a6689..b4d71d40e 100644
--- a/builds/unix/ftsystem.c
+++ b/builds/unix/ftsystem.c
@@ -18,7 +18,7 @@
 
 #include 
   /* we use our special ftconfig.h file, not the standard one */
-#include 
+#include FT_CONFIG_CONFIG_H
 #include 
 #include 
 #include 
diff --git a/meson.build b/meson.build
new file mode 100644
index 0..1d8f2672c
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,346 @@
+# Meson project file for FreeType 2
+
+project('freetype2', 'c', default_options: ['default_library=both'])
+
+#
+# Rules to compile the FreeType 2 library itself
+#
+
+# Apparently meson doesn't provide a read_file()