Add meson build system
parent
0cc0531e1a
commit
f5b2e047b9
@ -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…
Reference in New Issue