parent
4f8cecca97
commit
f72ee8e742
100 changed files with 3566 additions and 2649 deletions
@ -1,17 +1,31 @@ |
||||
# Conference presentations on Meson |
||||
|
||||
- FOSDEM 2014, [Introducing the Meson build system](https://video.fosdem.org/2014/H2215_Ferrer/Sunday/Introducing_the_Meson_build_system.webm) (jpakkane) |
||||
- FOSDEM 2014, [Introducing the Meson build |
||||
system](https://video.fosdem.org/2014/H2215_Ferrer/Sunday/Introducing_the_Meson_build_system.webm) |
||||
(jpakkane) |
||||
|
||||
- LCA 2015, [Making build systems not suck](https://www.youtube.com/watch?v=KPi0AuVpxLI) (jpakkane) |
||||
- LCA 2015, [Making build systems not |
||||
suck](https://www.youtube.com/watch?v=KPi0AuVpxLI) (jpakkane) |
||||
|
||||
- GUADEC 2015, [Improving the way Gnome apps are built](https://www.youtube.com/watch?v=wTf0NjjNwTU) (jpakkane) |
||||
- GUADEC 2015, [Improving the way Gnome apps are |
||||
built](https://www.youtube.com/watch?v=wTf0NjjNwTU) (jpakkane) |
||||
|
||||
- GStreamer conference 2015, [Done in 6.0 seconds](https://gstconf.ubicast.tv/videos/done-in-60-seconds-a-new-build-system-for-gstreamer) (jpakkane) |
||||
- GStreamer conference 2015, [Done in 6.0 |
||||
seconds](https://gstconf.ubicast.tv/videos/done-in-60-seconds-a-new-build-system-for-gstreamer) |
||||
(jpakkane) |
||||
|
||||
- LCA 2016, [Builds, dependencies and deployment in the modern multiplatform world](https://www.youtube.com/watch?v=CTJtKtQ8R5k) (jpakkane) |
||||
- LCA 2016, [Builds, dependencies and deployment in the modern |
||||
multiplatform world](https://www.youtube.com/watch?v=CTJtKtQ8R5k) |
||||
(jpakkane) |
||||
|
||||
- GUADEC 2016, [Making your GNOME app compile 2.4x faster](https://media.ccc.de/v/44-making_your_gnome_app_compile_24x_faster) (nirbheek) |
||||
- GUADEC 2016, [Making your GNOME app compile 2.4x |
||||
faster](https://media.ccc.de/v/44-making_your_gnome_app_compile_24x_faster) |
||||
(nirbheek) |
||||
|
||||
- Libre Application Summit 2016, [New world, new tools](https://youtu.be/0-gx1qU2pPo) (jpakkane) |
||||
- Libre Application Summit 2016, [New world, new |
||||
tools](https://youtu.be/0-gx1qU2pPo) (jpakkane) |
||||
|
||||
- GStreamer conference 2016, [GStreamer Development on Windows and faster builds everywhere with Meson](https://gstconf.ubicast.tv/videos/gstreamer-development-on-windows-ans-faster-builds-everywhere-with-meson/) (tpm) |
||||
- GStreamer conference 2016, [GStreamer Development on Windows and |
||||
faster builds everywhere with |
||||
Meson](https://gstconf.ubicast.tv/videos/gstreamer-development-on-windows-ans-faster-builds-everywhere-with-meson/) |
||||
(tpm) |
||||
|
@ -1,46 +1,43 @@ |
||||
# Meson CI setup |
||||
|
||||
This document is aimed for Meson contributors and documents |
||||
the CI setup used for testing Meson itself. The Meson |
||||
project uses multiple CI platforms for covering a wide |
||||
range of target systems. |
||||
This document is aimed for Meson contributors and documents the CI |
||||
setup used for testing Meson itself. The Meson project uses multiple |
||||
CI platforms for covering a wide range of target systems. |
||||
|
||||
## GitHub actions |
||||
|
||||
The configuration files for GitHub actions are located in |
||||
`.github/workflows`. Here, all [images](#docker-images) |
||||
are tested with the full `run_tests.py` run. Additionally, |
||||
some other, smaller, tests are run. |
||||
`.github/workflows`. Here, all [images](#docker-images) are tested |
||||
with the full `run_tests.py` run. Additionally, some other, smaller, |
||||
tests are run. |
||||
|
||||
## Docker images |
||||
|
||||
The Linux docker images are automatically built and |
||||
uploaded by GitHub actions. An image rebuild is triggerd |
||||
when any of the image definition files are changed (in |
||||
`ci/ciimage`) in the master branch. Additionally, the |
||||
images are also updated weekly. |
||||
The Linux docker images are automatically built and uploaded by GitHub |
||||
actions. An image rebuild is triggerd when any of the image definition |
||||
files are changed (in `ci/ciimage`) in the master branch. |
||||
Additionally, the images are also updated weekly. |
||||
|
||||
Each docker image has one corresponding dirctory in |
||||
`ci/ciimage` with an `image.json` and an `install.sh`. |
||||
Each docker image has one corresponding dirctory in `ci/ciimage` with |
||||
an `image.json` and an `install.sh`. |
||||
|
||||
### Image generation |
||||
|
||||
There are no manual Dockerfiles. Instead the Dockerfile is |
||||
automatically generated by the `build.py` script. This is |
||||
done to ensure that all images have the same layout and can |
||||
all be built and tested automatically. |
||||
automatically generated by the `build.py` script. This is done to |
||||
ensure that all images have the same layout and can all be built and |
||||
tested automatically. |
||||
|
||||
The Dockerfile is generated from the `image.json` file and |
||||
basically only adds a few common files and runs the |
||||
`install.sh` script which should contain all distribution |
||||
specific setup steps. The `common.sh` can be sourced via |
||||
`source /ci/common.sh` to access some shared functionalety. |
||||
The Dockerfile is generated from the `image.json` file and basically |
||||
only adds a few common files and runs the `install.sh` script which |
||||
should contain all distribution specific setup steps. The `common.sh` |
||||
can be sourced via `source /ci/common.sh` to access some shared |
||||
functionalety. |
||||
|
||||
To generate the image run `build.py -t build <image>`. A |
||||
generated image can be tested with `build.py -t test <image>`. |
||||
To generate the image run `build.py -t build <image>`. A generated |
||||
image can be tested with `build.py -t test <image>`. |
||||
|
||||
### Common image setup |
||||
|
||||
Each docker image has a `/ci` directory with an |
||||
`env_vars.sh` script. This script has to be sourced before |
||||
running the meson test suite. |
||||
Each docker image has a `/ci` directory with an `env_vars.sh` script. |
||||
This script has to be sourced before running the meson test suite. |
||||
|
@ -1,6 +1,7 @@ |
||||
# Performance comparison |
||||
|
||||
This page lists experiments comparing build performance between Meson and other build systems. |
||||
This page lists experiments comparing build performance between Meson |
||||
and other build systems. |
||||
|
||||
- [Simple comparison](Simple-comparison.md) |
||||
- [ARM performance test](ARM-performance-test.md) |
||||
|
@ -1,21 +1,48 @@ |
||||
# Use of Python |
||||
|
||||
Meson is implemented in Python. This has both positive and negative sides. The main thing people seem to be mindful about is the dependency on Python to build source code. This page discusses various aspects of this problem. |
||||
Meson is implemented in Python. This has both positive and negative |
||||
sides. The main thing people seem to be mindful about is the |
||||
dependency on Python to build source code. This page discusses various |
||||
aspects of this problem. |
||||
|
||||
# Dependency hell |
||||
|
||||
There have been many Python programs that are difficult to maintain on multiple platforms. The reasons come mostly from dependencies. The program may use dependencies that are hard to compile on certain platforms, are outdated, conflict with other dependencies, not available on a given Python version and so on. |
||||
There have been many Python programs that are difficult to maintain on |
||||
multiple platforms. The reasons come mostly from dependencies. The |
||||
program may use dependencies that are hard to compile on certain |
||||
platforms, are outdated, conflict with other dependencies, not |
||||
available on a given Python version and so on. |
||||
|
||||
Meson avoids dependency problems with one simple rule: Meson is not allowed to have any dependencies outside the Python basic library. The only thing you need is Python 3 (and possibly Ninja). |
||||
Meson avoids dependency problems with one simple rule: Meson is not |
||||
allowed to have any dependencies outside the Python basic library. The |
||||
only thing you need is Python 3 (and possibly Ninja). |
||||
|
||||
## Reimplementability |
||||
|
||||
Meson has been designed in such a way that the implementation language is never exposed in the build definitions. This makes it possible (and maybe even easy) to reimplement Meson in any other programming language. There are currently no plans to reimplement Meson, but we will make sure that Python is not exposed inside the build definitions. |
||||
Meson has been designed in such a way that the implementation language |
||||
is never exposed in the build definitions. This makes it possible (and |
||||
maybe even easy) to reimplement Meson in any other programming |
||||
language. There are currently no plans to reimplement Meson, but we |
||||
will make sure that Python is not exposed inside the build |
||||
definitions. |
||||
|
||||
## Cross platform tooling |
||||
|
||||
There is no one technical solution or programming language that works natively on all operating systems currently in use. When Autotools was designed in the late 80s, Unix shell was available pretty much anywhere. This is no longer the case. |
||||
|
||||
It is also the case that as any project gets larger, sooner or later it requires code generation, scripting or other tooling. This seems to be inevitable. Because there is no scripting language that would be available everywhere, these tools either need to be rewritten for each platform (which is a lot of work and is prone to errors) or the project needs to take a dependency on _something_. |
||||
|
||||
Any project that uses Meson (at least the current version) can rely on the fact that Python 3 will always be available, because you can't compile the project without it. All tooling can then be done in Python 3 with the knowledge that it will run on any platform without any extra dependencies (modulo the usual porting work). This reduces maintenance effort on multiplatform projects by a fair margin. |
||||
There is no one technical solution or programming language that works |
||||
natively on all operating systems currently in use. When Autotools was |
||||
designed in the late 80s, Unix shell was available pretty much |
||||
anywhere. This is no longer the case. |
||||
|
||||
It is also the case that as any project gets larger, sooner or later |
||||
it requires code generation, scripting or other tooling. This seems to |
||||
be inevitable. Because there is no scripting language that would be |
||||
available everywhere, these tools either need to be rewritten for each |
||||
platform (which is a lot of work and is prone to errors) or the |
||||
project needs to take a dependency on _something_. |
||||
|
||||
Any project that uses Meson (at least the current version) can rely on |
||||
the fact that Python 3 will always be available, because you can't |
||||
compile the project without it. All tooling can then be done in Python |
||||
3 with the knowledge that it will run on any platform without any |
||||
extra dependencies (modulo the usual porting work). This reduces |
||||
maintenance effort on multiplatform projects by a fair margin. |
||||
|
Loading…
Reference in new issue