Mailing List Archive

Let's look at another build system
Hello everyone,

We have been ranting at autotools for years now, and it's been a couple of
years since we tried to get rid of them, so, let's try again, this time
with the "new" kid on the block: meson (https://mesonbuild.com/)

Some expectation management first:
- I'm not touching varnish-cache at the moment (but yes, eventually, that'd
be the plan)
- instead, I tried my hand at vmod_digest and varnish-modules to collect
feedback first
- I'm not here to take away your beloved build system, the two options can
coexist

For the eager and curious, here's what it would entail code-wise:
- https://github.com/varnish/varnish-modules/compare/master...meson
- https://github.com/varnish/libvmod-digest/compare/master...meson

So, let's start with the cons I found first:
- the syntax is not amazing, and feels a bit clunky at times
- it has some weird opinions about some apparently non-consequential stuff,
but you can work around it if you really need to
- it's "not like autotools", but you don't make progress without breaking a
few habits, or something like that

And that's about it. On the other hand, I saw quite a few benefits
- it's super boring, with very few install targets (build, test, install,
clean, and that's about it)
- about test: they can be tagged so you can run a subset of them
- it's fast: varnish-modules goes from zero to everything build in less
than seconds
- it's pretty complete and I was able to easily implement the vsc/vcc
processing
- on that note, it support recipes with multiple outputs, unlike make
- while we can use subdir, it understand the full project as a whole, which
would speed things up in varnish-cache
- there are only two dependencies: python that we need anyway, and ninja
that doesn't need anything help
- the amount of "code" to write is way smaller than the
autogen+configure+Makefile combo from autotools
- out-of tree builds are the default and only option, keeping the source
tree pristin
- no need for "dist" tarballs, we can just do "git archive" and be done
with it
- it's terse and doesn't bore you with pages of logs
- but the "-t graph" option creates a graphviz dependency graph, nice!
- it's only to commands: "meson yourdir" and "ninja -C yourdir"
- if you touch the meson.build file, no need to re-run the meson command,
it's the same thing as if you edited a source file

Honestly, I'm sold, and I'm possibly seeing this with rosy glasses, so feel
free to bring me back down to earth. I plan on merging the two PRs above
soon, and to try to get some mileage from users (*cough* OpenSolaris
*cough*) and maintainers both, but keeping autotools around for now.

If there's not too much outcry, I'd like to have a go at varnish-cache some
time later (and if you are interested in helping with that fun little
project, let me know).

Cheers!

--
Guillaume Quintard
Re: Let's look at another build system [ In reply to ]
--------
In message <CAJ6ZYQy_tL8C7yWsyuxk-=gjsFy3Zy_U-wcbeGD63HsVkZ+3Zw@mail.gmail.com>
, Guillaume Quintard writes:

>
>We have been ranting at autotools for years now, and it's been a couple of
>years since we tried to get rid of them, so, let's try again, this time
>with the "new" kid on the block: meson (https://mesonbuild.com/)

I'm all for improving our build system, but it has to be an improvement.

One thing that would worry me a bit about meson is the sheer number
of dependencies involved.

To build it from scratch seems to involve at total of 238 ports on FreeBSD
(list below), including both python2, python3, tcl86, mecurial and as far
as I can tell anything anybody ever spotted on github.

Meson is probably not directly to blame for all 238 ports, but blame
or not: They sit at the top of a very, *very* tall tower.

Considering how seldom we do nontrivial changes to our build instructions,
I would be far more tempted towards a python script which produces a bunch
of powerful but tedious Makefiles with full dependency tracking.

Poul-Henning

/freebsd/ports/archivers/libarchive
/freebsd/ports/archivers/liblz4
/freebsd/ports/archivers/lzo2
/freebsd/ports/converters/libiconv
/freebsd/ports/converters/p5-Text-Unidecode
/freebsd/ports/converters/py-webencodings
/freebsd/ports/databases/db5
/freebsd/ports/databases/gdbm
/freebsd/ports/databases/py-sqlite3
/freebsd/ports/databases/sqlite3
/freebsd/ports/devel/apr1
/freebsd/ports/devel/atf
/freebsd/ports/devel/autoconf
/freebsd/ports/devel/autoconf-wrapper
/freebsd/ports/devel/automake
/freebsd/ports/devel/bison
/freebsd/ports/devel/boehm-gc
/freebsd/ports/devel/bzr
/freebsd/ports/devel/check
/freebsd/ports/devel/cmake
/freebsd/ports/devel/cvsps
/freebsd/ports/devel/dbus
/freebsd/ports/devel/dbus-glib
/freebsd/ports/devel/gettext-runtime
/freebsd/ports/devel/gettext-tools
/freebsd/ports/devel/git
/freebsd/ports/devel/glib20
/freebsd/ports/devel/gmake
/freebsd/ports/devel/jsoncpp
/freebsd/ports/devel/kyua
/freebsd/ports/devel/libatomic_ops
/freebsd/ports/devel/libedit
/freebsd/ports/devel/libffi
/freebsd/ports/devel/libltdl
/freebsd/ports/devel/libpthread-stubs
/freebsd/ports/devel/libtextstyle
/freebsd/ports/devel/libtool
/freebsd/ports/devel/libunistring
/freebsd/ports/devel/libuv
/freebsd/ports/devel/lutok
/freebsd/ports/devel/m4
/freebsd/ports/devel/mercurial
/freebsd/ports/devel/meson
/freebsd/ports/devel/ninja
/freebsd/ports/devel/npth
/freebsd/ports/devel/p5-Locale-libintl
/freebsd/ports/devel/p5-Sub-Uplevel
/freebsd/ports/devel/p5-Term-ReadKey
/freebsd/ports/devel/p5-Test-Deep
/freebsd/ports/devel/p5-Test-Exception
/freebsd/ports/devel/p5-Test-NoWarnings
/freebsd/ports/devel/p5-Test-Warn
/freebsd/ports/devel/p5-subversion
/freebsd/ports/devel/pcre
/freebsd/ports/devel/pkgconf
/freebsd/ports/devel/py-Jinja2
/freebsd/ports/devel/py-apipkg
/freebsd/ports/devel/py-asn1crypto
/freebsd/ports/devel/py-atomicwrites
/freebsd/ports/devel/py-attrs
/freebsd/ports/devel/py-babel
/freebsd/ports/devel/py-cffi
/freebsd/ports/devel/py-click
/freebsd/ports/devel/py-coverage
/freebsd/ports/devel/py-dateutil
/freebsd/ports/devel/py-dbus
/freebsd/ports/devel/py-entrypoints
/freebsd/ports/devel/py-extras
/freebsd/ports/devel/py-flaky
/freebsd/ports/devel/py-freezegun
/freebsd/ports/devel/py-fs
/freebsd/ports/devel/py-genty
/freebsd/ports/devel/py-hypothesis
/freebsd/ports/devel/py-importlib-metadata
/freebsd/ports/devel/py-incremental
/freebsd/ports/devel/py-invoke
/freebsd/ports/devel/py-iso8601
/freebsd/ports/devel/py-linecache2
/freebsd/ports/devel/py-mock
/freebsd/ports/devel/py-more-itertools
/freebsd/ports/devel/py-nose
/freebsd/ports/devel/py-pbr
/freebsd/ports/devel/py-pip
/freebsd/ports/devel/py-pluggy
/freebsd/ports/devel/py-pretend
/freebsd/ports/devel/py-py
/freebsd/ports/devel/py-pyasn1
/freebsd/ports/devel/py-pycparser
/freebsd/ports/devel/py-pympler
/freebsd/ports/devel/py-pytest
/freebsd/ports/devel/py-pytest-capturelog
/freebsd/ports/devel/py-pytest-cov
/freebsd/ports/devel/py-pytest-forked
/freebsd/ports/devel/py-pytest-mock
/freebsd/ports/devel/py-pytest-rerunfailures
/freebsd/ports/devel/py-pytest-runner
/freebsd/ports/devel/py-pytest-timeout
/freebsd/ports/devel/py-pytest-xdist
/freebsd/ports/devel/py-python-mimeparse
/freebsd/ports/devel/py-pytz
/freebsd/ports/devel/py-readme_renderer
/freebsd/ports/devel/py-scripttest
/freebsd/ports/devel/py-semantic_version
/freebsd/ports/devel/py-setuptools
/freebsd/ports/devel/py-setuptools_scm
/freebsd/ports/devel/py-simplejson
/freebsd/ports/devel/py-six
/freebsd/ports/devel/py-sortedcontainers
/freebsd/ports/devel/py-testtools
/freebsd/ports/devel/py-tox
/freebsd/ports/devel/py-traceback2
/freebsd/ports/devel/py-twine
/freebsd/ports/devel/py-unittest2
/freebsd/ports/devel/py-virtualenv
/freebsd/ports/devel/py-wcwidth
/freebsd/ports/devel/py-wheel
/freebsd/ports/devel/py-yaml
/freebsd/ports/devel/py-zipp
/freebsd/ports/devel/py-zope.interface
/freebsd/ports/devel/pydbus-common
/freebsd/ports/devel/readline
/freebsd/ports/devel/scons
/freebsd/ports/devel/subversion
/freebsd/ports/devel/xorg-macros
/freebsd/ports/dns/libidn2
/freebsd/ports/dns/py-idna
/freebsd/ports/emulators/tpm-emulator
/freebsd/ports/ftp/curl
/freebsd/ports/graphics/py-imagesize
/freebsd/ports/lang/cython
/freebsd/ports/lang/expect
/freebsd/ports/lang/lua52
/freebsd/ports/lang/p5-Error
/freebsd/ports/lang/perl5.30
/freebsd/ports/lang/python27
/freebsd/ports/lang/python37
/freebsd/ports/lang/tcl86
/freebsd/ports/math/gmp
/freebsd/ports/misc/dejagnu
/freebsd/ports/misc/getopt
/freebsd/ports/misc/help2man
/freebsd/ports/misc/py-pexpect
/freebsd/ports/misc/py-tqdm
/freebsd/ports/net/p5-IO-Socket-INET6
/freebsd/ports/net/p5-Socket6
/freebsd/ports/net/py-pysocks
/freebsd/ports/net/py-urllib3
/freebsd/ports/ports-mgmt/pkg
/freebsd/ports/print/indexinfo
/freebsd/ports/print/libpaper
/freebsd/ports/print/texinfo
/freebsd/ports/security/ca_root_nss
/freebsd/ports/security/gnupg
/freebsd/ports/security/gnutls
/freebsd/ports/security/libassuan
/freebsd/ports/security/libgcrypt
/freebsd/ports/security/libgpg-error
/freebsd/ports/security/libksba
/freebsd/ports/security/libsodium
/freebsd/ports/security/libtasn1
/freebsd/ports/security/nettle
/freebsd/ports/security/p11-kit
/freebsd/ports/security/p5-Authen-SASL
/freebsd/ports/security/p5-Digest-HMAC
/freebsd/ports/security/p5-GSSAPI
/freebsd/ports/security/p5-IO-Socket-SSL
/freebsd/ports/security/p5-Net-SSLeay
/freebsd/ports/security/pinentry
/freebsd/ports/security/pinentry-tty
/freebsd/ports/security/py-SecretStorage
/freebsd/ports/security/py-bcrypt
/freebsd/ports/security/py-certifi
/freebsd/ports/security/py-cryptography
/freebsd/ports/security/py-cryptography-vectors
/freebsd/ports/security/py-keyring
/freebsd/ports/security/py-keyrings.alt
/freebsd/ports/security/py-openssl
/freebsd/ports/security/py-paramiko
/freebsd/ports/security/py-pycrypto
/freebsd/ports/security/py-pynacl
/freebsd/ports/security/rhash
/freebsd/ports/security/trousers
/freebsd/ports/shells/bash
/freebsd/ports/sysutils/py-execnet
/freebsd/ports/sysutils/py-filelock
/freebsd/ports/sysutils/py-pkginfo
/freebsd/ports/sysutils/py-ptyprocess
/freebsd/ports/textproc/asciidoc
/freebsd/ports/textproc/docbook
/freebsd/ports/textproc/docbook-sgml
/freebsd/ports/textproc/docbook-xml
/freebsd/ports/textproc/docbook-xsl
/freebsd/ports/textproc/expat2
/freebsd/ports/textproc/html2text
/freebsd/ports/textproc/iso8879
/freebsd/ports/textproc/libxml2
/freebsd/ports/textproc/libxslt
/freebsd/ports/textproc/minixmlto
/freebsd/ports/textproc/p5-Unicode-EastAsianWidth
/freebsd/ports/textproc/py-MarkupSafe
/freebsd/ports/textproc/py-alabaster
/freebsd/ports/textproc/py-chardet
/freebsd/ports/textproc/py-docutils
/freebsd/ports/textproc/py-pygments
/freebsd/ports/textproc/py-pystemmer
/freebsd/ports/textproc/py-snowballstemmer
/freebsd/ports/textproc/py-sphinx
/freebsd/ports/textproc/py-sphinx_rtd_theme
/freebsd/ports/textproc/py-sphinxcontrib-websupport
/freebsd/ports/textproc/py-toml
/freebsd/ports/textproc/py-towncrier
/freebsd/ports/textproc/sdocbook-xml
/freebsd/ports/textproc/utf8proc
/freebsd/ports/textproc/xmlcatmgr
/freebsd/ports/textproc/xmlcharent
/freebsd/ports/textproc/xmlto
/freebsd/ports/www/libnghttp2
/freebsd/ports/www/p5-CGI
/freebsd/ports/www/p5-HTML-Parser
/freebsd/ports/www/p5-HTML-Tagset
/freebsd/ports/www/p5-Mozilla-CA
/freebsd/ports/www/py-bleach
/freebsd/ports/www/py-django111
/freebsd/ports/www/py-html5lib
/freebsd/ports/www/py-requests
/freebsd/ports/www/py-requests-toolbelt
/freebsd/ports/www/py-tornado
/freebsd/ports/www/serf
/freebsd/ports/www/w3m
/freebsd/ports/x11/libICE
/freebsd/ports/x11/libSM
/freebsd/ports/x11/libX11
/freebsd/ports/x11/libXau
/freebsd/ports/x11/libXdmcp
/freebsd/ports/x11/libxcb
/freebsd/ports/x11/xcb-proto
/freebsd/ports/x11/xorgproto
/freebsd/ports/x11/xtrans

--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
phk@FreeBSD.ORG | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
_______________________________________________
varnish-misc mailing list
varnish-misc@varnish-cache.org
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
Re: Let's look at another build system [ In reply to ]
> One thing that would worry me a bit about meson is the sheer number
> of dependencies involved.

I'm going to vote for "that freeBSD port is absolutely bonkers and probably
deserves the behind-the-barn treatment", specially considering the debian
dependency graph: https://ibb.co/YdXMHRZ

I'm not fully against rolling out our own system, but for the love of all
that is holy, let's not base it on Make.

--
Guillaume Quintard


On Thu, May 14, 2020 at 7:48 AM Poul-Henning Kamp <phk@phk.freebsd.dk>
wrote:

> --------
> In message <CAJ6ZYQy_tL8C7yWsyuxk-=
> gjsFy3Zy_U-wcbeGD63HsVkZ+3Zw@mail.gmail.com>
> , Guillaume Quintard writes:
>
> >
> >We have been ranting at autotools for years now, and it's been a couple of
> >years since we tried to get rid of them, so, let's try again, this time
> >with the "new" kid on the block: meson (https://mesonbuild.com/)
>
> I'm all for improving our build system, but it has to be an improvement.
>
> One thing that would worry me a bit about meson is the sheer number
> of dependencies involved.
>
> To build it from scratch seems to involve at total of 238 ports on FreeBSD
> (list below), including both python2, python3, tcl86, mecurial and as far
> as I can tell anything anybody ever spotted on github.
>
> Meson is probably not directly to blame for all 238 ports, but blame
> or not: They sit at the top of a very, *very* tall tower.
>
> Considering how seldom we do nontrivial changes to our build instructions,
> I would be far more tempted towards a python script which produces a bunch
> of powerful but tedious Makefiles with full dependency tracking.
>
> Poul-Henning
>
> /freebsd/ports/archivers/libarchive
> /freebsd/ports/archivers/liblz4
> /freebsd/ports/archivers/lzo2
> /freebsd/ports/converters/libiconv
> /freebsd/ports/converters/p5-Text-Unidecode
> /freebsd/ports/converters/py-webencodings
> /freebsd/ports/databases/db5
> /freebsd/ports/databases/gdbm
> /freebsd/ports/databases/py-sqlite3
> /freebsd/ports/databases/sqlite3
> /freebsd/ports/devel/apr1
> /freebsd/ports/devel/atf
> /freebsd/ports/devel/autoconf
> /freebsd/ports/devel/autoconf-wrapper
> /freebsd/ports/devel/automake
> /freebsd/ports/devel/bison
> /freebsd/ports/devel/boehm-gc
> /freebsd/ports/devel/bzr
> /freebsd/ports/devel/check
> /freebsd/ports/devel/cmake
> /freebsd/ports/devel/cvsps
> /freebsd/ports/devel/dbus
> /freebsd/ports/devel/dbus-glib
> /freebsd/ports/devel/gettext-runtime
> /freebsd/ports/devel/gettext-tools
> /freebsd/ports/devel/git
> /freebsd/ports/devel/glib20
> /freebsd/ports/devel/gmake
> /freebsd/ports/devel/jsoncpp
> /freebsd/ports/devel/kyua
> /freebsd/ports/devel/libatomic_ops
> /freebsd/ports/devel/libedit
> /freebsd/ports/devel/libffi
> /freebsd/ports/devel/libltdl
> /freebsd/ports/devel/libpthread-stubs
> /freebsd/ports/devel/libtextstyle
> /freebsd/ports/devel/libtool
> /freebsd/ports/devel/libunistring
> /freebsd/ports/devel/libuv
> /freebsd/ports/devel/lutok
> /freebsd/ports/devel/m4
> /freebsd/ports/devel/mercurial
> /freebsd/ports/devel/meson
> /freebsd/ports/devel/ninja
> /freebsd/ports/devel/npth
> /freebsd/ports/devel/p5-Locale-libintl
> /freebsd/ports/devel/p5-Sub-Uplevel
> /freebsd/ports/devel/p5-Term-ReadKey
> /freebsd/ports/devel/p5-Test-Deep
> /freebsd/ports/devel/p5-Test-Exception
> /freebsd/ports/devel/p5-Test-NoWarnings
> /freebsd/ports/devel/p5-Test-Warn
> /freebsd/ports/devel/p5-subversion
> /freebsd/ports/devel/pcre
> /freebsd/ports/devel/pkgconf
> /freebsd/ports/devel/py-Jinja2
> /freebsd/ports/devel/py-apipkg
> /freebsd/ports/devel/py-asn1crypto
> /freebsd/ports/devel/py-atomicwrites
> /freebsd/ports/devel/py-attrs
> /freebsd/ports/devel/py-babel
> /freebsd/ports/devel/py-cffi
> /freebsd/ports/devel/py-click
> /freebsd/ports/devel/py-coverage
> /freebsd/ports/devel/py-dateutil
> /freebsd/ports/devel/py-dbus
> /freebsd/ports/devel/py-entrypoints
> /freebsd/ports/devel/py-extras
> /freebsd/ports/devel/py-flaky
> /freebsd/ports/devel/py-freezegun
> /freebsd/ports/devel/py-fs
> /freebsd/ports/devel/py-genty
> /freebsd/ports/devel/py-hypothesis
> /freebsd/ports/devel/py-importlib-metadata
> /freebsd/ports/devel/py-incremental
> /freebsd/ports/devel/py-invoke
> /freebsd/ports/devel/py-iso8601
> /freebsd/ports/devel/py-linecache2
> /freebsd/ports/devel/py-mock
> /freebsd/ports/devel/py-more-itertools
> /freebsd/ports/devel/py-nose
> /freebsd/ports/devel/py-pbr
> /freebsd/ports/devel/py-pip
> /freebsd/ports/devel/py-pluggy
> /freebsd/ports/devel/py-pretend
> /freebsd/ports/devel/py-py
> /freebsd/ports/devel/py-pyasn1
> /freebsd/ports/devel/py-pycparser
> /freebsd/ports/devel/py-pympler
> /freebsd/ports/devel/py-pytest
> /freebsd/ports/devel/py-pytest-capturelog
> /freebsd/ports/devel/py-pytest-cov
> /freebsd/ports/devel/py-pytest-forked
> /freebsd/ports/devel/py-pytest-mock
> /freebsd/ports/devel/py-pytest-rerunfailures
> /freebsd/ports/devel/py-pytest-runner
> /freebsd/ports/devel/py-pytest-timeout
> /freebsd/ports/devel/py-pytest-xdist
> /freebsd/ports/devel/py-python-mimeparse
> /freebsd/ports/devel/py-pytz
> /freebsd/ports/devel/py-readme_renderer
> /freebsd/ports/devel/py-scripttest
> /freebsd/ports/devel/py-semantic_version
> /freebsd/ports/devel/py-setuptools
> /freebsd/ports/devel/py-setuptools_scm
> /freebsd/ports/devel/py-simplejson
> /freebsd/ports/devel/py-six
> /freebsd/ports/devel/py-sortedcontainers
> /freebsd/ports/devel/py-testtools
> /freebsd/ports/devel/py-tox
> /freebsd/ports/devel/py-traceback2
> /freebsd/ports/devel/py-twine
> /freebsd/ports/devel/py-unittest2
> /freebsd/ports/devel/py-virtualenv
> /freebsd/ports/devel/py-wcwidth
> /freebsd/ports/devel/py-wheel
> /freebsd/ports/devel/py-yaml
> /freebsd/ports/devel/py-zipp
> /freebsd/ports/devel/py-zope.interface
> /freebsd/ports/devel/pydbus-common
> /freebsd/ports/devel/readline
> /freebsd/ports/devel/scons
> /freebsd/ports/devel/subversion
> /freebsd/ports/devel/xorg-macros
> /freebsd/ports/dns/libidn2
> /freebsd/ports/dns/py-idna
> /freebsd/ports/emulators/tpm-emulator
> /freebsd/ports/ftp/curl
> /freebsd/ports/graphics/py-imagesize
> /freebsd/ports/lang/cython
> /freebsd/ports/lang/expect
> /freebsd/ports/lang/lua52
> /freebsd/ports/lang/p5-Error
> /freebsd/ports/lang/perl5.30
> /freebsd/ports/lang/python27
> /freebsd/ports/lang/python37
> /freebsd/ports/lang/tcl86
> /freebsd/ports/math/gmp
> /freebsd/ports/misc/dejagnu
> /freebsd/ports/misc/getopt
> /freebsd/ports/misc/help2man
> /freebsd/ports/misc/py-pexpect
> /freebsd/ports/misc/py-tqdm
> /freebsd/ports/net/p5-IO-Socket-INET6
> /freebsd/ports/net/p5-Socket6
> /freebsd/ports/net/py-pysocks
> /freebsd/ports/net/py-urllib3
> /freebsd/ports/ports-mgmt/pkg
> /freebsd/ports/print/indexinfo
> /freebsd/ports/print/libpaper
> /freebsd/ports/print/texinfo
> /freebsd/ports/security/ca_root_nss
> /freebsd/ports/security/gnupg
> /freebsd/ports/security/gnutls
> /freebsd/ports/security/libassuan
> /freebsd/ports/security/libgcrypt
> /freebsd/ports/security/libgpg-error
> /freebsd/ports/security/libksba
> /freebsd/ports/security/libsodium
> /freebsd/ports/security/libtasn1
> /freebsd/ports/security/nettle
> /freebsd/ports/security/p11-kit
> /freebsd/ports/security/p5-Authen-SASL
> /freebsd/ports/security/p5-Digest-HMAC
> /freebsd/ports/security/p5-GSSAPI
> /freebsd/ports/security/p5-IO-Socket-SSL
> /freebsd/ports/security/p5-Net-SSLeay
> /freebsd/ports/security/pinentry
> /freebsd/ports/security/pinentry-tty
> /freebsd/ports/security/py-SecretStorage
> /freebsd/ports/security/py-bcrypt
> /freebsd/ports/security/py-certifi
> /freebsd/ports/security/py-cryptography
> /freebsd/ports/security/py-cryptography-vectors
> /freebsd/ports/security/py-keyring
> /freebsd/ports/security/py-keyrings.alt
> /freebsd/ports/security/py-openssl
> /freebsd/ports/security/py-paramiko
> /freebsd/ports/security/py-pycrypto
> /freebsd/ports/security/py-pynacl
> /freebsd/ports/security/rhash
> /freebsd/ports/security/trousers
> /freebsd/ports/shells/bash
> /freebsd/ports/sysutils/py-execnet
> /freebsd/ports/sysutils/py-filelock
> /freebsd/ports/sysutils/py-pkginfo
> /freebsd/ports/sysutils/py-ptyprocess
> /freebsd/ports/textproc/asciidoc
> /freebsd/ports/textproc/docbook
> /freebsd/ports/textproc/docbook-sgml
> /freebsd/ports/textproc/docbook-xml
> /freebsd/ports/textproc/docbook-xsl
> /freebsd/ports/textproc/expat2
> /freebsd/ports/textproc/html2text
> /freebsd/ports/textproc/iso8879
> /freebsd/ports/textproc/libxml2
> /freebsd/ports/textproc/libxslt
> /freebsd/ports/textproc/minixmlto
> /freebsd/ports/textproc/p5-Unicode-EastAsianWidth
> /freebsd/ports/textproc/py-MarkupSafe
> /freebsd/ports/textproc/py-alabaster
> /freebsd/ports/textproc/py-chardet
> /freebsd/ports/textproc/py-docutils
> /freebsd/ports/textproc/py-pygments
> /freebsd/ports/textproc/py-pystemmer
> /freebsd/ports/textproc/py-snowballstemmer
> /freebsd/ports/textproc/py-sphinx
> /freebsd/ports/textproc/py-sphinx_rtd_theme
> /freebsd/ports/textproc/py-sphinxcontrib-websupport
> /freebsd/ports/textproc/py-toml
> /freebsd/ports/textproc/py-towncrier
> /freebsd/ports/textproc/sdocbook-xml
> /freebsd/ports/textproc/utf8proc
> /freebsd/ports/textproc/xmlcatmgr
> /freebsd/ports/textproc/xmlcharent
> /freebsd/ports/textproc/xmlto
> /freebsd/ports/www/libnghttp2
> /freebsd/ports/www/p5-CGI
> /freebsd/ports/www/p5-HTML-Parser
> /freebsd/ports/www/p5-HTML-Tagset
> /freebsd/ports/www/p5-Mozilla-CA
> /freebsd/ports/www/py-bleach
> /freebsd/ports/www/py-django111
> /freebsd/ports/www/py-html5lib
> /freebsd/ports/www/py-requests
> /freebsd/ports/www/py-requests-toolbelt
> /freebsd/ports/www/py-tornado
> /freebsd/ports/www/serf
> /freebsd/ports/www/w3m
> /freebsd/ports/x11/libICE
> /freebsd/ports/x11/libSM
> /freebsd/ports/x11/libX11
> /freebsd/ports/x11/libXau
> /freebsd/ports/x11/libXdmcp
> /freebsd/ports/x11/libxcb
> /freebsd/ports/x11/xcb-proto
> /freebsd/ports/x11/xorgproto
> /freebsd/ports/x11/xtrans
>
> --
> Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
> phk@FreeBSD.ORG | TCP/IP since RFC 956
> FreeBSD committer | BSD since 4.3-tahoe
> Never attribute to malice what can adequately be explained by incompetence.
>
Re: Let's look at another build system [ In reply to ]
--------
In message <CAJ6ZYQxTCZO7gS0_o7iehr2gYOJ58XKheOaPxW1zSRO68hfK9w@mail.gmail.com>
, Guillaume Quintard writes:

>I'm going to vote for "that freeBSD port is absolutely bonkers and probably
>deserves the behind-the-barn treatment", specially considering the debian
>dependency graph: https://ibb.co/YdXMHRZ

The FreeBSD graph is a fully recursive "all dependencies" graph, both for
building and running, the debian graph seems to be truncated somehow,
because otherwise that would be a very handicapped py3 instance.

And as I said: meson is probably not to blame, I just wanted to illustrate
my concern.

>I'm not fully against rolling out our own system, but for the love of all
>that is holy, let's not base it on Make.

If all you use make(1) for is running processes, it's as good as anything
(except maybe jam(1)). The hard part about make(1) is getting _all_
your dependencies recorded _correctly_ in the makefile.

--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
phk@FreeBSD.ORG | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
_______________________________________________
varnish-misc mailing list
varnish-misc@varnish-cache.org
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc
Re: Let's look at another build system [ In reply to ]
> The FreeBSD graph is a fully recursive "all dependencies" graph, both for
> building and running, the debian graph seems to be truncated somehow,
> because otherwise that would be a very handicapped py3 instance.

My bad, I was only considering the run dependencies, the build+run
dependency list is bigger.

BUT! I dug a bit, and the insanity is really only introduced by the test
dependency on devel/py-pytest-xdist, snip it and meson+ninja only need 33
ports, which isn't that crazy when compared with the 20 items in the
automake+autotools+autoconf+libtool case.
Now, I have now idea if that detail matters or not, as I'm not a freeBSD,
but hopefully that number isn't as shocking anymore.

> If all you use make(1) for is running processes, it's as good as anything
> (except maybe jam(1)). The hard part about make(1) is getting _all_
> your dependencies recorded _correctly_ in the makefile.

That's the biggest footgun of make because it doesn't know about recipes
producing multiple files (and we do love those), so you have to bend over
backwards to teach it how to do it correctly. Add to this the dumb
recursive mode, its lack of dependency regarding the build commands and all
the dark magic it *tries* to accomplish to handle C compilation correctly
(I'd rather have something truly dumb that doesn't get in the way) and you
get a nice recipe (pun intended) for disaster.

I don't know jam and so have no problem with it. Since you talked about the
generator+builder pattern, I feel like i need to link to this very recent
post: http://neugierig.org/software/blog/2020/05/ninja.html It's from the
ninja creator, where he writes about it a bit (and also apologies for the
terrible name).

--
Guillaume Quintard


On Thu, May 14, 2020 at 9:25 AM Poul-Henning Kamp <phk@phk.freebsd.dk>
wrote:

> --------
> In message <
> CAJ6ZYQxTCZO7gS0_o7iehr2gYOJ58XKheOaPxW1zSRO68hfK9w@mail.gmail.com>
> , Guillaume Quintard writes:
>
> >I'm going to vote for "that freeBSD port is absolutely bonkers and
> probably
> >deserves the behind-the-barn treatment", specially considering the debian
> >dependency graph: https://ibb.co/YdXMHRZ
>
> The FreeBSD graph is a fully recursive "all dependencies" graph, both for
> building and running, the debian graph seems to be truncated somehow,
> because otherwise that would be a very handicapped py3 instance.
>
> And as I said: meson is probably not to blame, I just wanted to illustrate
> my concern.
>
> >I'm not fully against rolling out our own system, but for the love of all
> >that is holy, let's not base it on Make.
>
> If all you use make(1) for is running processes, it's as good as anything
> (except maybe jam(1)). The hard part about make(1) is getting _all_
> your dependencies recorded _correctly_ in the makefile.
>
> --
> Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
> phk@FreeBSD.ORG | TCP/IP since RFC 956
> FreeBSD committer | BSD since 4.3-tahoe
> Never attribute to malice what can adequately be explained by incompetence.
>
Re: Let's look at another build system [ In reply to ]
--------
In message <CAJ6ZYQyJgEq=DOShx4=MMF6W32DJPu05U-cTx6Tx_iKsBwb8Yg@mail.gmail.com>
, Guillaume Quintard writes:

>> If all you use make(1) for is running processes, it's as good as anything
>> (except maybe jam(1)). The hard part about make(1) is getting _all_
>> your dependencies recorded _correctly_ in the makefile.
>
>That's the biggest footgun of make because it doesn't know about recipes
>producing multiple files [...]

Dont get me started:i I know perfectly well what the problems are,
which is why I only said I was "tempted" :-)

>I don't know jam [...]

Jam(1) was make(1) done right. Unfortunately there were absolutely
no way to migrate, short of starting from scratch, not even for
highly stylized Makefiles like the FreeBSD tree, so it never caught
on and is sadly no longer of relevance.

But as I said: By all means lets look at this.

--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
phk@FreeBSD.ORG | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
_______________________________________________
varnish-misc mailing list
varnish-misc@varnish-cache.org
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc