Add meson build system

master
Joonas Henriksson 3 years ago
parent 0cc0531e1a
commit f5b2e047b9
No known key found for this signature in database
GPG Key ID: FAEDBC4FB5AA3B17

@ -6,7 +6,7 @@ This theme uses libsass to process the various .scss files. Never edit any of th
* Edit the `common/*/sass/*.scss` files.
* Run `make` to generate all css files using `sassc`.
* Rebuild to generate all css files using `sassc`.
#### Editing the GTK 2 themes
@ -30,7 +30,7 @@ Because this theme is heavily based on the pixmap engine, a lot of the styling c
* Find the object you want to edit and make your changes. **Important:** Don't change the object *id*!
* Save `assets.svg` and run `make` (or `make -j$(nproc)` if you're in a hurry) from a terminal in the parent directory.
* Save `assets.svg` and rebuild.
---

@ -0,0 +1,118 @@
## Installing Arc from the source
#### Getting the source
To get the source, either clone the git repository with:
git clone https://github.com/jnsh/arc-theme --depth 1
cd arc-theme/
Or download and extract a [snapshot](https://github.com/jnsh/arc-theme/archive/master.zip) of the master branch:
wget https://github.com/jnsh/arc-theme/archive/master.zip
unzip master.zip
cd arc-theme-master/
#### Build and install
##### Installing system wide for all users
Install to `/usr/share/themes` for all users by running the following with root permissions:
./autogen.sh --prefix=/usr
make install
##### Installing for single user
Use the following commands to install the theme to `~/.local/share/themes/` for your user only:
./autogen.sh --prefix=$HOME/.local
make install
**Note:** Some themes (at least GTK 2) aren't loaded from `~/.local/share/themes/`. You can work around this e.g. by symlinking the Arc theme directories in `~/.local/share/themes/` to `~/.themes/` with following commands:
mkdir -p ~/.themes/
for d in Arc{,-Dark,-Darker,-Lighter}{,-solid}; do
[ -d ~/.local/share/themes/$d ] && ln -s ~/.local/share/themes/$d ~/.themes/;
done
## Dependencies
#### Build dependencies
To build the theme the following packages are required:
* `autoconf`
* `automake`
* `make`
* `pkgconf`
The following packages are only required for building certain themes:
* `sassc` for GTK 3, Cinnamon, and GNOME Shell
* `inkscape` for GTK 2, GTK 3, and XFWM
* `glib2` for GTK 3 (needs `glib-compile-resources` binary, the exact package name varies between distributions)
You can avoid these dependencies by disabling support for the specific themes with build options detailed below.
##### Optional build dependencies
The following packages are optional, but used to optimize the built theme if available:
* `optipng` for optimizing PNG assets for GTK 2, GTK 3, and XFWM
#### Runtime dependencies
For the GTK 2 theme to function properly, install the following:
* `gnome-themes-extra`, or `gnome-themes-standard` before GNOME version 3.28
* The murrine GTK 2 engine. This has different names depending on the distribution:
* `gtk-engine-murrine` (Arch Linux)
* `gtk2-engines-murrine` (Debian, Ubuntu, elementary OS)
* `gtk-murrine-engine` (Fedora)
* `gtk2-engine-murrine` (openSUSE)
* `gtk-engines-murrine` (Gentoo)
## Versioned themes
The source code comes branched for different versions of GTK 3, GNOME Shell, and Cinnamon. Only one version of those themes will be installed, and using the wrong versions will result in issues of varying severity.
The theme versions that will be built can be set manually with build options. Otherwise the build system tries to determine correct versions using the following packages on the build environment:
* `gnome-shell` for detecting GNOME Shell version
* `cinnamon` for detecting Cinnamon version
* the GTK 3 package, or its development files for distributions that ship those separately (e.g. `libgtk-3-dev` for Debian based distros or `gtk3-devel` for RPM based distros), for detecting GTK 3 version
The above packages are not required if the theme versions are defined manually (see build options below).
**Note:** The build will fail, if GTK 3, Cinnamon, or GNOME Shell versions can't be determined. You can work around this by either disabling the build of a specific theme, or by specifying the versions manually with build options detailed below.
## Build options
Options to pass to `autogen.sh`:
--disable-transparency disable transparency in the theme
--disable-light disable Arc Light support
--disable-darker disable Arc Darker support
--disable-dark disable Arc Dark support
--disable-lighter disable Arc Lighter support
--disable-cinnamon disable Cinnamon support
--disable-gnome-shell disable GNOME Shell support
--disable-gtk2 disable GTK 2 support
--disable-gtk3 disable GTK 3 support
--disable-metacity disable Metacity support
--disable-plank disable Plank support
--disable-unity disable Unity support
--disable-xfwm disable XFWM support
--with-cinnamon=<version> build the Cinnamon theme for a specific version
--with-gnome-shell=<version> build the GNOME Shell theme for a specific version
--with-gtk3=<version> build the GTK 3 theme for a specific version
If the `--disable-transparency` option was used, the theme will be installed with `-solid` suffix.
## Uninstallation
Run the following from the source code directory:
make uninstall
Or simply remove the theme directories from your install location, e.g.
rm -rf ~/.local/share/themes/Arc{,-Dark,-Darker,-Lighter}{,-solid}

@ -1,118 +1,104 @@
## Installing Arc from the source
**Note:** Arc-theme has switched to [Meson](https://mesonbuild.com/) build system. The old GNU Autotools based build system is still present, and the old build documentation is available in [INSTALL.autotools.md](https://github.com/jnsh/arc-theme/blob/master/INSTALL.autotools.md), but it will be removed in future releases. Please open [an issue](https://github.com/jnsh/arc-theme/issues/new), if you have any problems with the new build system.
#### Getting the source
To get the source, either clone the git repository with:
To get the source, either clone the git repository with e.g.
git clone https://github.com/jnsh/arc-theme --depth 1
cd arc-theme/
Or download and extract a [snapshot](https://github.com/jnsh/arc-theme/archive/master.zip) of the master branch:
Or download and extract a [snapshot](https://github.com/jnsh/arc-theme/archive/master.zip) of the master git branch, or the latest [release tarball](https://github.com/jnsh/arc-theme/releases/latest).
wget https://github.com/jnsh/arc-theme/archive/master.zip
unzip master.zip
cd arc-theme-master/
#### Dependencies
#### Build and install
##### Build dependencies
##### Installing system wide for all users
To build the theme the following packages are required:
* `meson`
Install to `/usr/share/themes` for all users by running the following with root permissions:
The following packages are only required for building certain themes:
* `sassc` for GTK 3, Cinnamon, and GNOME Shell
* `inkscape` for GTK 2, GTK 3, and Xfwm
./autogen.sh --prefix=/usr
make install
You can avoid these dependencies by choosing to not build specific themes using the `themes` build option.
##### Installing for single user
##### Runtime dependencies
Use the following commands to install the theme to `~/.local/share/themes/` for your user only:
For the GTK 2 theme to function properly, install the following:
* `gnome-themes-extra`, or `gnome-themes-standard` before GNOME version 3.28
* The murrine GTK 2 engine. This has different names depending on the distribution:
* `gtk-engine-murrine` (Arch Linux)
* `gtk2-engines-murrine` (Debian, Ubuntu, elementary OS)
* `gtk-murrine-engine` (Fedora)
* `gtk2-engine-murrine` (openSUSE)
* `gtk-engines-murrine` (Gentoo)
./autogen.sh --prefix=$HOME/.local
make install
#### Building and installation
**Note:** Some themes (at least GTK 2) aren't loaded from `~/.local/share/themes/`. You can work around this e.g. by symlinking the Arc theme directories in `~/.local/share/themes/` to `~/.themes/` with following commands:
Arc-theme uses [Meson](https://mesonbuild.com/) build system, refer to its documentation for further information about the build process.
mkdir -p ~/.themes/
for d in Arc{,-Dark,-Darker,-Lighter}{,-solid}; do
[ -d ~/.local/share/themes/$d ] && ln -s ~/.local/share/themes/$d ~/.themes/;
done
The following instructions should work for most common cases.
## Dependencies
##### Setup and configure a build direcortry
#### Build dependencies
First you need to setup and configure a new build directory (e.g. `build/`) from the cloned/extracted source code directory.
To build the theme the following packages are required:
* `autoconf`
* `automake`
* `make`
* `pkgconf`
You should at least configure the build prefix with `--prefix=` option, usually `/usr` for system wide installation, or `$HOME/.local` for installing for your user only. Additionally you may set any Arc-theme specific [build options](#build-options) according to your needs and preferences, with `-Doption=value` command line argument.
The following packages are only required for building certain themes:
* `sassc` for GTK 3, Cinnamon, and GNOME Shell
* `inkscape` for GTK 2, GTK 3, and XFWM
* `glib2` for GTK 3 (needs `glib-compile-resources` binary, the exact package name varies between distributions)
For example, configure to install in your home directory, and to only build the Arc-Darker variant with:
You can avoid these dependencies by disabling support for the specific themes with build options detailed below.
meson setup --prefix=$HOME/.local -Dvariants=darker build/
##### Optional build dependencies
The build options can later be changed with `meson configure` command, e.g.
The following packages are optional, but used to optimize the built theme if available:
* `optipng` for optimizing PNG assets for GTK 2, GTK 3, and XFWM
meson configure --prefix=/usr -Dvariants=light,darker build/
#### Runtime dependencies
##### Build and install
For the GTK 2 theme to function properly, install the following:
* `gnome-themes-extra`, or `gnome-themes-standard` before GNOME version 3.28
* The murrine GTK 2 engine. This has different names depending on the distribution:
* `gtk-engine-murrine` (Arch Linux)
* `gtk2-engines-murrine` (Debian, Ubuntu, elementary OS)
* `gtk-murrine-engine` (Fedora)
* `gtk2-engine-murrine` (openSUSE)
* `gtk-engines-murrine` (Gentoo)
Build and install the theme according to your configuration by running the following:
## Versioned themes
meson install -C build/
The source code comes branched for different versions of GTK 3, GNOME Shell, and Cinnamon. Only one version of those themes will be installed, and using the wrong versions will result in issues of varying severity.
##### Note about installation in user's home directory
The theme versions that will be built can be set manually with build options. Otherwise the build system tries to determine correct versions using the following packages on the build environment:
* `gnome-shell` for detecting GNOME Shell version
* `cinnamon` for detecting Cinnamon version
* the GTK 3 package, or its development files for distributions that ship those separately (e.g. `libgtk-3-dev` for Debian based distros or `gtk3-devel` for RPM based distros), for detecting GTK 3 version
Some themes (at least GTK 2) aren't loaded from `~/.local/share/themes/`. You can work around this e.g. by symlinking the Arc theme directories in `~/.local/share/themes/` to `~/.themes/` with following commands:
The above packages are not required if the theme versions are defined manually (see build options below).
mkdir -p ~/.themes/
for d in Arc{,-Dark,-Darker,-Lighter}{,-solid}; do
[ -d ~/.local/share/themes/$d ] && ln -s ~/.local/share/themes/$d ~/.themes/;
done
**Note:** The build will fail, if GTK 3, Cinnamon, or GNOME Shell versions can't be determined. You can work around this by either disabling the build of a specific theme, or by specifying the versions manually with build options detailed below.
#### Versioned themes
## Build options
The source code comes branched for different versions of GTK 3, GNOME Shell, and Cinnamon. Only one version of those themes will be built and installed, and using the wrong versions will likely result in visual issues.
Options to pass to `autogen.sh`:
The versions that will be built can be set manually with `cinnamon_version`, `gnome_shell_version` and `gtk3_version` build options.
--disable-transparency disable transparency in the theme
--disable-light disable Arc Light support
--disable-darker disable Arc Darker support
--disable-dark disable Arc Dark support
--disable-lighter disable Arc Lighter support
Otherwise the build system tries to determine correct versions using the following packages on the build environment:
* `gnome-shell` for detecting GNOME Shell version
* `cinnamon` for detecting Cinnamon version
* `pkgconf` and the GTK 3 package, or its development files for distributions that ship those separately (e.g. `libgtk-3-dev` for Debian based distros or `gtk3-devel` for RPM based distros), for detecting GTK 3 version
--disable-cinnamon disable Cinnamon support
--disable-gnome-shell disable GNOME Shell support
--disable-gtk2 disable GTK 2 support
--disable-gtk3 disable GTK 3 support
--disable-metacity disable Metacity support
--disable-plank disable Plank support
--disable-unity disable Unity support
--disable-xfwm disable XFWM support
**Note:** The build setup for GTK 3, Cinnamon and GNOME Shell themes will fail, if their versions can't be determined either from the build options, or from installed packages.
--with-cinnamon=<version> build the Cinnamon theme for a specific version
--with-gnome-shell=<version> build the GNOME Shell theme for a specific version
--with-gtk3=<version> build the GTK 3 theme for a specific version
#### Build options
If the `--disable-transparency` option was used, the theme will be installed with `-solid` suffix.
Arc-theme specific build options can be set or changed with `meson configure -Doption=value <build_directory>` e.g.
## Uninstallation
meson configure -Dthemes=gtk3,plank,xfwm -Dtransparency=false -Dgtk3_version=3.24 build/
Run the following from the source code directory:
Option | Default value | Description
--- | --- | ---
`themes` | `cinnamon,gnome-shell,gtk2,gtk3,metacity,plank,unity,xfwm` | List of themes to build
`variants` | `light,darker,dark,lighter` | List of theme variants to build
`transparency` | `true` | Enable or disable transparency
`cinnamon_version` | - | Build Cinnamon theme for specific version
`gnome_shell_version` | - | Build GNOME Shell theme for specific version
`gtk3_version` | - | Build GTK 3 theme for specific version
make uninstall
#### Uninstallation
Or simply remove the theme directories from your install location, e.g.
Manually remove the theme directories from your install location, e.g.
rm -rf ~/.local/share/themes/Arc{,-Dark,-Darker,-Lighter}{,-solid}

@ -0,0 +1,78 @@
# supported versions
cinnamon_versions = ['2.8', '3.0', '3.2', '3.4', '3.6', '3.8', '4.0', '4.2', '4.4', '4.6', '4.8']
# cinnamon version
cinnamon = find_program('cinnamon', required : false)
if get_option('cinnamon_version') != ''
cinnamon_full_ver = get_option('cinnamon_version')
elif cinnamon.found()
cinnamon_full_ver = run_command(cinnamon, '--version').stdout().split()[-1]
else
error('Could not determine Cinnamon version')
endif
cinnamon_ver_array = cinnamon_full_ver.split('.')
if cinnamon_ver_array[1].to_int().is_even()
cinnamon_ver = cinnamon_ver_array[0] + '.' + cinnamon_ver_array[1]
else
# evenize development versions
cinnamon_ver = cinnamon_ver_array[0] + '.' + (cinnamon_ver_array[1].to_int() + 1).to_string()
endif
if cinnamon_ver not in cinnamon_versions
if cinnamon_ver.version_compare('>' + cinnamon_versions[-1])
warning('Cinnamon version ' + cinnamon_ver + ' not supported yet, building theme for ' + cinnamon_versions[-1])
cinnamon_ver = cinnamon_versions[-1]
else
error('Unsupported Cinnamon version')
endif
endif
# compile and install
sass_depend_files = run_command(
'find', '-L',
meson.current_source_dir() / cinnamon_ver / 'sass',
'-name', '_*.scss',
check : true
).stdout().split()
foreach variant : get_option('variants')
if variant != 'darker' and variant != 'lighter'
input_scss = (variant == 'light' ? 'cinnamon.scss' : 'cinnamon-' + variant + '.scss')
output_css = (variant == 'light' ? 'cinnamon.css' : 'cinnamon-' + variant + '.css')
cinnamon_css = custom_target(
output_css,
input : meson.current_source_dir() / cinnamon_ver / 'sass' / input_scss,
output : output_css,
command : [sassc, '@INPUT@', '@OUTPUT@'],
build_by_default : true,
depend_files : sass_depend_files
)
meson.add_install_script(
'sh', '-c',
'install -DT' + ' ' +
cinnamon_css.full_path() + ' ' +
'$MESON_INSTALL_DESTDIR_PREFIX' / install_dir.get(variant) / common_dirs.get('cinnamon') / 'cinnamon.css'
)
install_subdir(
cinnamon_ver / 'common-assets',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('cinnamon')
)
install_subdir(
cinnamon_ver / variant + '-assets',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('cinnamon')
)
install_data(
variant == 'light' ? 'thumbnail.png' : 'thumbnail-dark.png',
rename : 'thumbnail.png',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('cinnamon')
)
endif
endforeach

@ -0,0 +1,82 @@
# supported versions
gnome_shell_versions = ['3.18', '3.20', '3.22', '3.24', '3.26', '3.28', '3.30', '3.32', '3.34', '3.36',
'3.38']
# gnome-shell version
gnome_shell = find_program('gnome-shell', required : false)
if get_option('gnome_shell_version') != ''
gnome_shell_full_ver = get_option('gnome_shell_version')
elif gnome_shell.found()
gnome_shell_full_ver = run_command(gnome_shell, '--version').stdout().split()[-1]
else
error('Could not determine GNOME Shell version')
endif
gnome_shell_ver_array = gnome_shell_full_ver.split('.')
if gnome_shell_ver_array[1].to_int().is_even()
gnome_shell_ver = gnome_shell_ver_array[0] + '.' + gnome_shell_ver_array[1]
else
# evenize development versions
gnome_shell_ver = gnome_shell_ver_array[0] + '.' + (gnome_shell_ver_array[1].to_int() + 1).to_string()
endif
if gnome_shell_ver not in gnome_shell_versions
if gnome_shell_ver.version_compare('>' + gnome_shell_versions[-1])
warning('GNOME Shell version ' + gnome_shell_ver + ' not supported yet, building theme for ' + gnome_shell_versions[-1])
gnome_shell_ver = gnome_shell_versions[-1]
else
error('Unsupported GNOME Shell version')
endif
endif
# compile and install
sass_depend_files = run_command(
'find', '-L',
meson.current_source_dir() / gnome_shell_ver / 'sass',
'-name', '_*.scss',
check : true
).stdout().split()
foreach variant : get_option('variants')
if variant != 'darker'
if not (variant == 'lighter' and gnome_shell_ver.version_compare('<=3.30'))
if not get_option('transparency') and not gnome_shell_ver.version_compare('<=3.30')
input_scss = (variant == 'light' ? 'gnome-shell-solid.scss' : 'gnome-shell-solid-' + variant + '.scss')
else
input_scss = (variant == 'light' ? 'gnome-shell.scss' : 'gnome-shell-' + variant + '.scss')
endif
output_css = (variant == 'light' ? 'gnome-shell.css' : 'gnome-shell-' + variant + '.css')
gnome_shell_css = custom_target(
output_css,
input : meson.current_source_dir() / gnome_shell_ver / 'sass' / input_scss,
output : output_css,
command : [sassc, '@INPUT@', '@OUTPUT@'],
build_by_default : true,
depend_files : sass_depend_files
)
meson.add_install_script(
'sh', '-c',
'install -DT' + ' ' +
gnome_shell_css.full_path() + ' ' +
'$MESON_INSTALL_DESTDIR_PREFIX' / install_dir.get(variant) / common_dirs.get('gnome-shell') / 'gnome-shell.css'
)
install_subdir(
gnome_shell_ver / 'common-assets',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('gnome-shell')
)
install_subdir(
gnome_shell_ver / variant + '-assets',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('gnome-shell')
)
endif
endif
endforeach

@ -0,0 +1,18 @@
gtk2_dark_assets = []
foreach asset : gtk2_asset_names
gtk2_dark_assets += custom_target(
'gtk2-dark-' + asset,
input : 'assets.svg',
output : asset + '.png',
command : [
inkscape,
'--export-id-only',
inkscape_ver.version_compare('>1.0.0') ? '--export-filename=@OUTPUT@' : '--export-png=@OUTPUT@',
'--export-id=' + asset,
'--export-dpi=96',
'@INPUT@'
],
build_by_default : true
)
endforeach

@ -0,0 +1,18 @@
gtk2_light_assets = []
foreach asset : gtk2_asset_names
gtk2_light_assets += custom_target(
'gtk2-light-' + asset,
input : 'assets.svg',
output : asset + '.png',
command : [
inkscape,
'--export-id-only',
inkscape_ver.version_compare('>1.0.0') ? '--export-filename=@OUTPUT@' : '--export-png=@OUTPUT@',
'--export-id=' + asset,
'--export-dpi=96',
'@INPUT@'
],
build_by_default : true
)
endforeach

@ -0,0 +1,92 @@
gtk2_asset_names = run_command(
'cat', 'assets.txt',
check : true
).stdout().split()
if 'light' in get_option('variants') or 'lighter' in get_option('variants')
subdir('light')
endif
if 'dark' in get_option('variants') or 'darker' in get_option('variants')
subdir('dark')
endif
foreach variant : get_option('variants')
light_assets = gtk2_light_assets
if variant == 'dark'
dark_assets = gtk2_dark_assets
endif
if variant == 'dark'
install_assets = dark_assets
else
install_assets = light_assets
endif
if variant == 'light' or variant == 'lighter'
light_menubar_toolbar_assets = [
'entry-active-toolbar.png',
'entry-disabled-toolbar.png',
'entry-toolbar.png',
'menubar_button.png',
'menubar.png'
]
elif variant == 'dark' or variant == 'darker'
light_menubar_toolbar_assets = [
'button-active.png',
'button-hover.png',
'button-insensitive.png',
'button.png'
]
dark_menubar_toolbar_assets = [
'entry-active-toolbar.png',
'entry-disabled-toolbar.png',
'entry-toolbar.png',
'menubar_button.png',
'menubar.png'
]
endif
install_data(
[variant / 'gtkrc', 'apps.rc', 'main.rc', 'panel.rc', 'xfce-notify.rc'],
install_dir : prefix / install_dir.get(variant) / common_dirs.get('gtk2')
)
install_data(
variant == 'light' or variant == 'lighter' ? 'menubar-toolbar' / 'menubar-toolbar.rc' : 'menubar-toolbar' / 'menubar-toolbar-dark.rc',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('gtk2') / 'menubar-toolbar',
)
foreach asset : install_assets
meson.add_install_script(
'sh', '-c',
'install -D' + ' ' +
'-t $MESON_INSTALL_DESTDIR_PREFIX' / install_dir.get(variant) / common_dirs.get('gtk2') / 'assets' + ' ' +
asset.full_path()
)
endforeach
foreach asset : light_menubar_toolbar_assets
meson.add_install_script(
'sh', '-c',
'install -D' + ' ' +
'-t $MESON_INSTALL_DESTDIR_PREFIX' / install_dir.get(variant) / common_dirs.get('gtk2') / 'menubar-toolbar' + ' ' +
meson.current_build_dir() / 'light' / asset
)
endforeach
if variant == 'dark' or variant == 'darker'
foreach asset : dark_menubar_toolbar_assets
new_asset = asset.substring(0, -4) + '-dark' + asset.substring(-4)
meson.add_install_script(
'sh', '-c',
'install -DT' + ' ' +
meson.current_build_dir() / 'dark' / asset + ' ' +
'$MESON_INSTALL_DESTDIR_PREFIX' / install_dir.get(variant) / common_dirs.get('gtk2') / 'menubar-toolbar' / new_asset
)
endforeach
endif
endforeach

@ -0,0 +1,207 @@
# supported versions
gtk3_versions = ['3.18', '3.20', '3.22', '3.24']
# glib-compile-resources dependency
glib_compile_resources = find_program('glib-compile-resources')
# determine gtk3 version
if get_option('gtk3_version') != ''
gtk3_full_ver = get_option('gtk3_version')
else
gtk3_dep = dependency(
'gtk+-3.0',
version: '>= 3.17.0',
not_found_message : 'Could not determine GTK 3 version'
)
gtk3_full_ver = gtk3_dep.version()
endif
gtk3_ver_array = gtk3_full_ver.split('.')
if gtk3_ver_array[1].to_int().is_even()
gtk3_ver = gtk3_ver_array[0] + '.' + gtk3_ver_array[1]
else
# evenize development versions
gtk3_ver = gtk3_ver_array[0] + '.' + (gtk3_ver_array[1].to_int() + 1).to_string()
endif
if gtk3_ver not in gtk3_versions
if gtk3_ver.version_compare('>' + gtk3_versions[-1])
warning('GTK 3 version ' + gtk3_ver + ' not supported yet, building theme for ' + gtk3_versions[-1])
gtk3_ver = gtk3_versions[-1]
else
error('Unsupported GTK 3 version')
endif
endif
# render PNG assets
gtk3_asset_names = run_command(
'cat', gtk3_ver / 'assets.txt',
check : true
).stdout().split()
assets_svg = gtk3_ver / 'assets.svg'
foreach asset : gtk3_asset_names
gtk3_assets = custom_target(
'gtk3-' + asset,
input : assets_svg,
output : asset + '.png',
command : [
inkscape,
'--export-id-only',
inkscape_ver.version_compare('>1.0.0') ? '--export-filename=@OUTPUT@' : '--export-png=@OUTPUT@',
'--export-id=' + asset,
'--export-dpi=96',
'@INPUT@'
],
build_by_default : true
)
gtk3_hidpi_assets = custom_target(
'gtk3-' + asset + '-hidpi',
input : assets_svg,
output : asset + '@2.png',
command : [
inkscape,
'--export-id-only',
inkscape_ver.version_compare('>1.0.0') ? '--export-filename=@OUTPUT@' : '--export-png=@OUTPUT@',
'--export-id=' + asset,
'--export-dpi=192',
'@INPUT@'
],
build_by_default : true
)
endforeach
# compile CSS
sass_path = meson.current_source_dir() / gtk3_ver / 'sass'
sass_depend_files = run_command(
'find',
sass_path,
'-name', '_*.scss',
check : true
).stdout().split()
# always compile the dark CSS
input_scss_dark = sass_path / (get_option('transparency') ? 'gtk-dark.scss' : 'gtk-solid-dark.scss')
output_css_dark = 'gtk-main-dark.css'
gtk3_stylesheet = custom_target(
output_css_dark,
input : input_scss_dark,
output : output_css_dark,
command : [sassc, '@INPUT@', '@OUTPUT@'],
build_by_default : true,
depend_files : sass_depend_files
)
foreach variant : get_option('variants')
output_css = (variant == 'light' ? 'gtk-main.css' : 'gtk-main-' + variant + '.css')
if variant != 'dark'
if get_option('transparency')
input_scss = sass_path / (variant == 'light' ? 'gtk.scss' : 'gtk-' + variant + '.scss')
else
input_scss = sass_path / (variant == 'light' ? 'gtk-solid.scss' : 'gtk-solid-' + variant + '.scss')
endif
gtk3_stylesheet = custom_target(
output_css,
input : input_scss,
output : output_css,
command : [sassc, '@INPUT@', '@OUTPUT@'],
build_by_default : true,
depend_files : sass_depend_files
)
endif
# generate the gresource XML
gresource_xml_array = [
'<?xml version="1.0" encoding="UTF-8"?>',
'<gresources>',
'<gresource prefix="/org/gnome/arc-theme">'
]
#TODO update asset paths in SASS files and get rid of the alias=
foreach asset : gtk3_asset_names
gresource_xml_array += [
'<file preprocess="to-pixdata" alias="assets/' + asset + '.png">' + asset + '.png</file>',
'<file preprocess="to-pixdata" alias="assets/' + asset + '@2.png">' + asset + '@2.png</file>'
]
endforeach
gresource_xml_array += ['<file>' + output_css + '</file>']
if variant != 'dark'
gresource_xml_array += ['<file>' + output_css_dark + '</file>']
endif
gresource_xml_array += [
'</gresource>',
'</gresources>'
]
# compile the gresource
gresource_xml = configure_file(
capture : true,
command : ['echo', gresource_xml_array],
output : 'gtk-' + variant + '.gresource.xml'
)
#TODO use gnome.compile_resources()???
gresource = custom_target(
'gresource-' + variant,
input : gresource_xml,
output : 'gtk-' + variant + '.gresource',
command : [
glib_compile_resources,
'--sourcedir=@OUTDIR@',
'--target=@OUTPUT@',
'@INPUT@'
],
depends : [gtk3_assets, gtk3_hidpi_assets, gtk3_stylesheet],
build_by_default : true
)
# install gresource
meson.add_install_script(
'sh', '-c',
'install -DT' + ' ' +
gresource.full_path() + ' ' +
'$MESON_INSTALL_DESTDIR_PREFIX' / install_dir.get(variant) / common_dirs.get('gtk3') / 'gtk.gresource'
)
# install gtk.css files
gtk3_css = configure_file(
capture : true,
command : ['echo', '@import url("resource:///org/gnome/arc-theme/' + output_css + '");'],
output : 'gtk-' + variant + '.css'
)
install_data(
gtk3_css,
install_dir : prefix / install_dir.get(variant) / common_dirs.get('gtk3'),
rename : ['gtk.css']
)
if variant != 'dark'
#FIXME gtk-dark.css gets overwritten for subsequent variants, resulting in build warnings
gtk3_dark_css = configure_file(
capture : true,
command : ['echo', '@import url("resource:///org/gnome/arc-theme/' + output_css_dark + '");'],
output : 'gtk-dark.css',
install : true,
install_dir : prefix / install_dir.get(variant) / common_dirs.get('gtk3')
)
endif
# install thumbnail
install_data(
variant != 'dark' ? 'light/thumbnail.png' : 'dark/thumbnail.png',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('gtk3')
)
endforeach

@ -0,0 +1,6 @@
foreach variant : get_option('variants')
install_data(
variant / 'index.theme',
install_dir : prefix / install_dir.get(variant),
)
endforeach

@ -0,0 +1,16 @@
subdir('index')
common_dirs = {
'cinnamon' : 'cinnamon',
'gnome-shell' : 'gnome-shell',
'gtk2' : 'gtk-2.0',
'gtk3' : 'gtk-3.0',
'metacity' : 'metacity-1',
'plank' : 'plank',
'unity' : 'unity',
'xfwm' : 'xfwm4'
}
foreach theme : get_option('themes')
subdir(common_dirs.get(theme))
endforeach

@ -0,0 +1,26 @@
foreach variant : get_option('variants')
svg_assets = run_command('find', meson.current_source_dir(), '-name', '*.svg', check : true).stdout().split()
xml_assets = [
variant == 'light' or variant == 'lighter' ? 'metacity-theme-1.xml' : 'metacity-theme-1-dark.xml',
variant == 'light' or variant == 'lighter' ? 'metacity-theme-2.xml' : 'metacity-theme-2-dark.xml',
'metacity-theme-3.xml'
]
install_data(
svg_assets,
install_dir : prefix / install_dir.get(variant) / common_dirs.get('metacity')
)
install_data(
xml_assets,
rename : ['metacity-theme-1.xml', 'metacity-theme-2.xml', 'metacity-theme-3.xml'],
install_dir : prefix / install_dir.get(variant) / common_dirs.get('metacity')
)
install_data(
variant == 'light' or variant == 'lighter' ? 'thumbnail.png' : 'thumbnail-dark.png',
rename : 'thumbnail.png',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('metacity')
)
endforeach

@ -0,0 +1,7 @@
foreach variant : get_option('variants')
install_data(
variant != 'lighter' ? 'dock.theme' : 'dock-lighter.theme',
rename: 'dock.theme',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('plank')
)
endforeach

@ -0,0 +1,22 @@
foreach variant : get_option('variants')
# custom install script is necessary here, since install_subdir() currently installs
# the symlink target file, instead of the actual symlink, which doesn't install
# dark variant correctly
meson.add_install_script(
'sh', '-c',
'cp -P' + ' ' +
'-t $MESON_INSTALL_DESTDIR_PREFIX' / install_dir.get(variant) / common_dirs.get('unity') + ' ' +
meson.current_source_dir() / '*.svg'
)
install_subdir(
'dash',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('unity'),
)
install_subdir(
variant == 'light' or variant == 'lighter' ? 'window-buttons' : 'window-buttons-dark',
install_dir : prefix / install_dir.get(variant) / common_dirs.get('unity') / 'window-buttons',
strip_directory : true
)
endforeach

@ -0,0 +1,18 @@
xfwm_dark_assets = []
foreach asset : xfwm_asset_names
xfwm_dark_assets += custom_target(
'xfwm-dark-' + asset,
input : 'assets.svg',
output : asset + '.png',
command : [
inkscape,
'--export-id-only',
inkscape_ver.version_compare('>1.0.0') ? '--export-filename=@OUTPUT@' : '--export-png=@OUTPUT@',
'--export-id=' + asset,
'--export-dpi=96',
'@INPUT@'
],
build_by_default : true
)
endforeach

@ -0,0 +1,18 @@
xfwm_light_assets = []
foreach asset : xfwm_asset_names
xfwm_light_assets += custom_target(
'xfwm-light-' + asset,
input : 'assets.svg',
output : asset + '.png',
command : [
inkscape,
'--export-id-only',
inkscape_ver.version_compare('>1.0.0') ? '--export-filename=@OUTPUT@' : '--export-png=@OUTPUT@',
'--export-id=' + asset,
'--export-dpi=96',
'@INPUT@'
],
build_by_default : true
)
endforeach

@ -0,0 +1,36 @@
xfwm_asset_names = run_command(
'cat', 'assets.txt',
check : true
).stdout().split()
if 'light' in get_option('variants') or 'lighter' in get_option('variants')
subdir('light')
endif
if 'dark' in get_option('variants') or 'darker' in get_option('variants')
subdir('dark')
endif
foreach variant : get_option('variants')
if variant == 'light' or variant == 'lighter'
themerc = 'light/themerc'
assets = xfwm_light_assets
elif variant == 'dark' or variant == 'darker'
themerc = 'dark/themerc'
assets = xfwm_dark_assets
endif
install_data(
themerc,
install_dir : prefix / install_dir.get(variant) / common_dirs.get('xfwm')
)
foreach asset : assets
meson.add_install_script(
'sh', '-c',
'install -D ' +
'-t $MESON_INSTALL_DESTDIR_PREFIX' / install_dir.get(variant) / common_dirs.get('xfwm') + ' ' +
asset.full_path()
)
endforeach
endforeach

@ -0,0 +1,42 @@
project(
'arc-theme',
version : '20200819',
meson_version: '>= 0.50.0',
license : 'GPL3'
)
variant_name = {
'light' : (get_option('transparency') ? 'Arc' : 'Arc-solid'),
'darker' : (get_option('transparency') ? 'Arc-Darker' : 'Arc-Darker-solid'),
'dark' : (get_option('transparency') ? 'Arc-Dark' : 'Arc-Dark-solid'),
'lighter' : (get_option('transparency') ? 'Arc-Lighter' : 'Arc-Lighter-solid'),
}
prefix = get_option('prefix')
datadir = get_option('datadir')
install_dir = {
'light' : datadir / 'themes' / variant_name.get('light'),
'darker' : datadir / 'themes' / variant_name.get('darker'),
'dark' : datadir / 'themes' / variant_name.get('dark'),
'lighter' : datadir / 'themes' / variant_name.get('lighter'),
}
# sassc dependency
foreach theme : ['cinnamon', 'gnome-shell', 'gtk3']
if theme in get_option('themes')
sassc = find_program('sassc')
break
endif
endforeach
# inkscape dependency
foreach theme : ['gtk2', 'gtk3', 'xfwm']
if theme in get_option('themes')
inkscape = find_program('inkscape')
inkscape_ver = run_command(inkscape, '--version').stdout().split()[1]
break
endif
endforeach
subdir('common')

@ -0,0 +1,38 @@
option(
'themes',
type: 'array',
choices: ['cinnamon', 'gnome-shell', 'gtk2', 'gtk3', 'metacity', 'plank', 'unity', 'xfwm'],
description: 'List of themes to build',
)
option(
'variants',
type: 'array',
choices: ['light', 'darker', 'dark', 'lighter'],
description: 'List of theme variants to build',
)
option(
'transparency',
type: 'boolean',
value: true,
description: 'Enable or disable transparency',
)
option(
'cinnamon_version',
type: 'string',
description: 'Build Cinnamon theme for specific version',
)
option(
'gnome_shell_version',
type: 'string',
description: 'Build GNOME Shell theme for specific version',
)
option(
'gtk3_version',
type: 'string',
description: 'Build GTK 3 theme for specific version',
)
Loading…
Cancel
Save