commit 13b486d6284151469f159b455e22fa0f0ee54cf7
parent 915c44becbc9aa2166e0476c3b47bda3b9d09838
Author: TheJackiMonster <thejackimonster@gmail.com>
Date: Sat, 4 Feb 2023 01:27:09 +0100
Use meson as build system
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
Diffstat:
19 files changed, 299 insertions(+), 640 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -19,6 +19,7 @@ Makefile
.cproject
.project
.settings/
+.vscode/
# Binary files:
*.o
diff --git a/INSTALL b/INSTALL
@@ -1,368 +0,0 @@
-Installation Instructions
-*************************
-
- Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free
-Software Foundation, Inc.
-
- Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved. This file is offered as-is,
-without warranty of any kind.
-
-Basic Installation
-==================
-
- Briefly, the shell command './configure && make && make install'
-should configure, build, and install this package. The following
-more-detailed instructions are generic; see the 'README' file for
-instructions specific to this package. Some packages provide this
-'INSTALL' file but do not implement all of the features documented
-below. The lack of an optional feature in a given package is not
-necessarily a bug. More recommendations for GNU packages can be found
-in *note Makefile Conventions: (standards)Makefile Conventions.
-
- The 'configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation. It uses
-those values to create a 'Makefile' in each directory of the package.
-It may also create one or more '.h' files containing system-dependent
-definitions. Finally, it creates a shell script 'config.status' that
-you can run in the future to recreate the current configuration, and a
-file 'config.log' containing compiler output (useful mainly for
-debugging 'configure').
-
- It can also use an optional file (typically called 'config.cache' and
-enabled with '--cache-file=config.cache' or simply '-C') that saves the
-results of its tests to speed up reconfiguring. Caching is disabled by
-default to prevent problems with accidental use of stale cache files.
-
- If you need to do unusual things to compile the package, please try
-to figure out how 'configure' could check whether to do them, and mail
-diffs or instructions to the address given in the 'README' so they can
-be considered for the next release. If you are using the cache, and at
-some point 'config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
- The file 'configure.ac' (or 'configure.in') is used to create
-'configure' by a program called 'autoconf'. You need 'configure.ac' if
-you want to change it or regenerate 'configure' using a newer version of
-'autoconf'.
-
- The simplest way to compile this package is:
-
- 1. 'cd' to the directory containing the package's source code and type
- './configure' to configure the package for your system.
-
- Running 'configure' might take a while. While running, it prints
- some messages telling which features it is checking for.
-
- 2. Type 'make' to compile the package.
-
- 3. Optionally, type 'make check' to run any self-tests that come with
- the package, generally using the just-built uninstalled binaries.
-
- 4. Type 'make install' to install the programs and any data files and
- documentation. When installing into a prefix owned by root, it is
- recommended that the package be configured and built as a regular
- user, and only the 'make install' phase executed with root
- privileges.
-
- 5. Optionally, type 'make installcheck' to repeat any self-tests, but
- this time using the binaries in their final installed location.
- This target does not install anything. Running this target as a
- regular user, particularly if the prior 'make install' required
- root privileges, verifies that the installation completed
- correctly.
-
- 6. You can remove the program binaries and object files from the
- source code directory by typing 'make clean'. To also remove the
- files that 'configure' created (so you can compile the package for
- a different kind of computer), type 'make distclean'. There is
- also a 'make maintainer-clean' target, but that is intended mainly
- for the package's developers. If you use it, you may have to get
- all sorts of other programs in order to regenerate files that came
- with the distribution.
-
- 7. Often, you can also type 'make uninstall' to remove the installed
- files again. In practice, not all packages have tested that
- uninstallation works correctly, even though it is required by the
- GNU Coding Standards.
-
- 8. Some packages, particularly those that use Automake, provide 'make
- distcheck', which can by used by developers to test that all other
- targets like 'make install' and 'make uninstall' work correctly.
- This target is generally not run by end users.
-
-Compilers and Options
-=====================
-
- Some systems require unusual options for compilation or linking that
-the 'configure' script does not know about. Run './configure --help'
-for details on some of the pertinent environment variables.
-
- You can give 'configure' initial values for configuration parameters
-by setting variables in the command line or in the environment. Here is
-an example:
-
- ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
- *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
- You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory. To do this, you can use GNU 'make'. 'cd' to the
-directory where you want the object files and executables to go and run
-the 'configure' script. 'configure' automatically checks for the source
-code in the directory that 'configure' is in and in '..'. This is known
-as a "VPATH" build.
-
- With a non-GNU 'make', it is safer to compile the package for one
-architecture at a time in the source code directory. After you have
-installed the package for one architecture, use 'make distclean' before
-reconfiguring for another architecture.
-
- On MacOS X 10.5 and later systems, you can create libraries and
-executables that work on multiple system types--known as "fat" or
-"universal" binaries--by specifying multiple '-arch' options to the
-compiler but only a single '-arch' option to the preprocessor. Like
-this:
-
- ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
- CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
- CPP="gcc -E" CXXCPP="g++ -E"
-
- This is not guaranteed to produce working output in all cases, you
-may have to build one architecture at a time and combine the results
-using the 'lipo' tool if you have problems.
-
-Installation Names
-==================
-
- By default, 'make install' installs the package's commands under
-'/usr/local/bin', include files under '/usr/local/include', etc. You
-can specify an installation prefix other than '/usr/local' by giving
-'configure' the option '--prefix=PREFIX', where PREFIX must be an
-absolute file name.
-
- You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files. If you
-pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
- In addition, if you use an unusual directory layout you can give
-options like '--bindir=DIR' to specify different values for particular
-kinds of files. Run 'configure --help' for a list of the directories
-you can set and what kinds of files go in them. In general, the default
-for these options is expressed in terms of '${prefix}', so that
-specifying just '--prefix' will affect all of the other directory
-specifications that were not explicitly provided.
-
- The most portable way to affect installation locations is to pass the
-correct locations to 'configure'; however, many packages provide one or
-both of the following shortcuts of passing variable assignments to the
-'make install' command line to change installation locations without
-having to reconfigure or recompile.
-
- The first method involves providing an override variable for each
-affected directory. For example, 'make install
-prefix=/alternate/directory' will choose an alternate location for all
-directory configuration variables that were expressed in terms of
-'${prefix}'. Any directories that were specified during 'configure',
-but not in terms of '${prefix}', must each be overridden at install time
-for the entire installation to be relocated. The approach of makefile
-variable overrides for each directory variable is required by the GNU
-Coding Standards, and ideally causes no recompilation. However, some
-platforms have known limitations with the semantics of shared libraries
-that end up requiring recompilation when using this method, particularly
-noticeable in packages that use GNU Libtool.
-
- The second method involves providing the 'DESTDIR' variable. For
-example, 'make install DESTDIR=/alternate/directory' will prepend
-'/alternate/directory' before all installation names. The approach of
-'DESTDIR' overrides is not required by the GNU Coding Standards, and
-does not work on platforms that have drive letters. On the other hand,
-it does better at avoiding recompilation issues, and works well even
-when some directory options were not specified in terms of '${prefix}'
-at 'configure' time.
-
-Optional Features
-=================
-
- If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving 'configure' the
-option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
-
- Some packages pay attention to '--enable-FEATURE' options to
-'configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to '--with-PACKAGE' options, where PACKAGE
-is something like 'gnu-as' or 'x' (for the X Window System). The
-'README' should mention any '--enable-' and '--with-' options that the
-package recognizes.
-
- For packages that use the X Window System, 'configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the 'configure' options '--x-includes=DIR' and
-'--x-libraries=DIR' to specify their locations.
-
- Some packages offer the ability to configure how verbose the
-execution of 'make' will be. For these packages, running './configure
---enable-silent-rules' sets the default to minimal output, which can be
-overridden with 'make V=1'; while running './configure
---disable-silent-rules' sets the default to verbose, which can be
-overridden with 'make V=0'.
-
-Particular systems
-==================
-
- On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC
-is not installed, it is recommended to use the following options in
-order to use an ANSI C compiler:
-
- ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
-
-and if that doesn't work, install pre-built binaries of GCC for HP-UX.
-
- HP-UX 'make' updates targets which have the same timestamps as their
-prerequisites, which makes it generally unusable when shipped generated
-files such as 'configure' are involved. Use GNU 'make' instead.
-
- On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
-parse its '<wchar.h>' header file. The option '-nodtk' can be used as a
-workaround. If GNU CC is not installed, it is therefore recommended to
-try
-
- ./configure CC="cc"
-
-and if that doesn't work, try
-
- ./configure CC="cc -nodtk"
-
- On Solaris, don't put '/usr/ucb' early in your 'PATH'. This
-directory contains several dysfunctional programs; working variants of
-these programs are available in '/usr/bin'. So, if you need '/usr/ucb'
-in your 'PATH', put it _after_ '/usr/bin'.
-
- On Haiku, software installed for all users goes in '/boot/common',
-not '/usr/local'. It is recommended to use the following options:
-
- ./configure --prefix=/boot/common
-
-Specifying the System Type
-==========================
-
- There may be some features 'configure' cannot figure out
-automatically, but needs to determine by the type of machine the package
-will run on. Usually, assuming the package is built to be run on the
-_same_ architectures, 'configure' can figure that out, but if it prints
-a message saying it cannot guess the machine type, give it the
-'--build=TYPE' option. TYPE can either be a short name for the system
-type, such as 'sun4', or a canonical name which has the form:
-
- CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
- OS
- KERNEL-OS
-
- See the file 'config.sub' for the possible values of each field. If
-'config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
- If you are _building_ compiler tools for cross-compiling, you should
-use the option '--target=TYPE' to select the type of system they will
-produce code for.
-
- If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with '--host=TYPE'.
-
-Sharing Defaults
-================
-
- If you want to set default values for 'configure' scripts to share,
-you can create a site shell script called 'config.site' that gives
-default values for variables like 'CC', 'cache_file', and 'prefix'.
-'configure' looks for 'PREFIX/share/config.site' if it exists, then
-'PREFIX/etc/config.site' if it exists. Or, you can set the
-'CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all 'configure' scripts look for a site script.
-
-Defining Variables
-==================
-
- Variables not defined in a site shell script can be set in the
-environment passed to 'configure'. However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost. In order to avoid this problem, you should set
-them in the 'configure' command line, using 'VAR=value'. For example:
-
- ./configure CC=/usr/local2/bin/gcc
-
-causes the specified 'gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
-Autoconf limitation. Until the limitation is lifted, you can use this
-workaround:
-
- CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-'configure' Invocation
-======================
-
- 'configure' recognizes the following options to control how it
-operates.
-
-'--help'
-'-h'
- Print a summary of all of the options to 'configure', and exit.
-
-'--help=short'
-'--help=recursive'
- Print a summary of the options unique to this package's
- 'configure', and exit. The 'short' variant lists options used only
- in the top level, while the 'recursive' variant lists options also
- present in any nested packages.
-
-'--version'
-'-V'
- Print the version of Autoconf used to generate the 'configure'
- script, and exit.
-
-'--cache-file=FILE'
- Enable the cache: use and save the results of the tests in FILE,
- traditionally 'config.cache'. FILE defaults to '/dev/null' to
- disable caching.
-
-'--config-cache'
-'-C'
- Alias for '--cache-file=config.cache'.
-
-'--quiet'
-'--silent'
-'-q'
- Do not print messages saying which checks are being made. To
- suppress all normal output, redirect it to '/dev/null' (any error
- messages will still be shown).
-
-'--srcdir=DIR'
- Look for the package's source code in directory DIR. Usually
- 'configure' can determine that directory automatically.
-
-'--prefix=DIR'
- Use DIR as the installation prefix. *note Installation Names:: for
- more details, including other options available for fine-tuning the
- installation locations.
-
-'--no-create'
-'-n'
- Run the configure checks, but stop before creating any output
- files.
-
-'configure' also accepts some other, not widely useful, options. Run
-'configure --help' for more details.
diff --git a/Makefile.am b/Makefile.am
@@ -1,7 +0,0 @@
-# This Makefile.am is in the public domain
-
-SUBDIRS = \
- resources \
- src
-
-ACLOCAL_AMFLAGS = -I m4
diff --git a/NEWS b/NEWS
@@ -1 +0,0 @@
-See ChangeLog.
diff --git a/README.md b/README.md
@@ -46,21 +46,21 @@ Here is the list of the used submodules:
- [gnome-characters](https://gitlab.gnome.org/GNOME/gnome-characters): For the emoji picker
-Then you can simply use [Autotools](https://www.gnu.org/software/automake/) as follows:
+Then you can simply use [Meson](https://mesonbuild.com/) as follows:
```
-./bootstrap # Generate the configure script
-./configure # Configure the Makefiles for your system
-make # Build the library using the Makefiles
-sudo make install # Install the library
+meson build # Configure the build files for your system
+ninja -C build # Build the application using those build files
+ninja -C build install # Install the application
```
-Here is a list of some useful build targets in the Makefile:
+Here is a list of some useful build commands using Meson and [Ninja](https://ninja-build.org/):
- - `make` to just compile everything with default parameters
- - `make clean` to cleanup build files in case you want to recompile
- - `make install` to install the compiled files (you might need sudo permissions to install)
+ - `meson compile -C build` to just compile everything with configured parameters
+ - `rm -r build` to cleanup build files in case you want to recompile
+ - `meson install -C build` to install the compiled files (you might need sudo permissions to install)
+ - `meson dist -C build` to create a tar file for distribution
-If you want to change the installation location, use the `--prefix=` parameter in the `configure` script. Also you can enable debugging builds by adding `--enable-debug` as parameter when running the `configure` script.
+If you want to change the installation location, use the `--prefix=` parameter in the initial meson command. Also you can enable optimized release builds by adding `--buildtype=release` as parameter.
## Runtime
diff --git a/bootstrap b/bootstrap
@@ -1,3 +0,0 @@
-#!/bin/sh
-git submodule update --init
-autoreconf -vfi
diff --git a/configure.ac b/configure.ac
@@ -1,82 +0,0 @@
-# This file is part of GNUnet.
-# Copyright (C) 2022 GNUnet e.V.
-#
-# GNUnet is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License as published
-# by the Free Software Foundation, either version 3 of the License,
-# or (at your option) any later version.
-#
-# GNUnet is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-# SPDX-License-Identifier: AGPL3.0-or-later
-#
-# Process this file with autoconf to produce a configure script.
-#
-#
-AC_INIT([messenger-gtk],[m4_esyscmd_s(sh contrib/get_version.sh)],[bug-gnunet@gnu.org])
-
-AC_CONFIG_AUX_DIR([build-aux])
-AC_CONFIG_MACRO_DIRS([m4])
-
-AC_CONFIG_HEADERS([
- src/messenger_gtk_config.h
-])
-
-AC_CANONICAL_TARGET
-AC_CANONICAL_HOST
-
-AM_INIT_AUTOMAKE
-AM_SILENT_RULES
-
-# maybe use AC_USE_SYSTEM_EXTENSIONS?
-AH_TOP([#define _GNU_SOURCE 1])
-
-AC_PROG_AWK
-AC_PROG_CC
-AC_PROG_CC_C_O
-AC_PROG_INSTALL
-AC_PROG_LN_S
-AC_PROG_MAKE_SET
-AC_PROG_MKDIR_P
-PKG_PROG_PKG_CONFIG([0.29.2])
-
-AC_DISABLE_STATIC
-LT_INIT
-
-AC_ARG_ENABLE([debug],
-[ --enable-debug turn on debugging],
-[case "${enableval}" in
- yes) debug=true ;;
- no) debug=false ;;
- *) AC_MSG_ERROR([bad value ${enableval} for --enable-debug]) ;;
-esac],[debug=false])
-AM_CONDITIONAL([DEBUG], [test x$debug = xtrue])
-
-AC_CONFIG_FILES([
- Makefile
- resources/Makefile
- resources/icon/Makefile
- src/Makefile
- src/chat/Makefile
- src/ui/Makefile
-])
-
-PKG_CHECK_MODULES([GLIB], [glib-2.0])
-PKG_CHECK_MODULES([GTK], [gtk+-3.0])
-PKG_CHECK_MODULES([HANDY], [libhandy-1])
-PKG_CHECK_MODULES([GNUNET], [gnunetutil >= 0.9.0])
-PKG_CHECK_MODULES([GST], [gstreamer-1.0])
-PKG_CHECK_MODULES([NOTIFY], [libnotify])
-PKG_CHECK_MODULES([QRENCODE], [libqrencode])
-
-CFLAGS="$CFLAGS $GTK_CFLAGS $GST_CFLAGS"
-CPPFLAGS="$CPPFLAGS $GTK_CFLAGS $GST_CFLAGS"
-LIBS="$LIBS $GTK_LIBS $GST_LIBS"
-
-AC_OUTPUT
diff --git a/meson.build b/meson.build
@@ -0,0 +1,66 @@
+#
+# This file is part of GNUnet.
+# Copyright (C) 2023 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+
+project(
+ 'messenger-gtk',
+ 'c',
+ license: 'AGPL3.0-or-later',
+ version: run_command('contrib/get_version.sh').stdout().strip(),
+)
+
+messenger_gtk_id = 'org.gnunet.Messenger'
+
+gnome = import('gnome')
+
+src_resources = include_directories('src', 'resources')
+
+subdir('submodules')
+
+messenger_gtk_deps = [
+ dependency('gnunetchat'),
+ dependency('gnunetutil'),
+ dependency('glib-2.0'),
+ dependency('gtk+-3.0'),
+ dependency('libhandy-1'),
+ dependency('gstreamer-1.0'),
+ dependency('libnotify'),
+ dependency('libqrencode'),
+]
+
+subdir('resources')
+subdir('src')
+
+messenger_gtk_exec = executable(
+ 'messenger-gtk',
+ messenger_gtk_resources + messenger_gtk_sources,
+ install: true,
+ dependencies: messenger_gtk_deps,
+ extra_files: submodules_headers,
+ include_directories: [
+ src_resources,
+ submodules_includes,
+ ],
+)
+
+gnome.post_install(
+ gtk_update_icon_cache: true,
+ glib_compile_schemas: true,
+ update_desktop_database: true,
+)
diff --git a/resources/Makefile.am b/resources/Makefile.am
@@ -1,33 +0,0 @@
-# This Makefile.am is in the public domain
-
-SUBDIRS = icon
-
-desktopdir = $(datadir)/applications
-desktop_DATA = \
- org.gnunet.Messenger.desktop
-
-appdatadir = $(datadir)/appdata
-appdata_DATA = \
- org.gnunet.Messenger.appdata.xml
-
-css.c ui.c: %.c: %.gresource.xml
- glib-compile-resources --sourcedir=$(top_srcdir)/resources $< --generate-source
- glib-compile-resources --sourcedir=$(top_srcdir)/resources $< --generate-header
-
-clean-local:
- rm css.c css.h
- rm ui.c ui.h
-
-AM_CFLAGS = \
- -I$(top_srcdir)/resources \
- @GLIB_CFLAGS@
-
-noinst_LIBRARIES = libresources.a
-
-libresources_a_SOURCES = \
- css.c css.h \
- ui.c ui.h
-
-EXTRA_DIST = \
- org.gnunet.Messenger.desktop \
- org.gnunet.Messenger.appdata.xml
diff --git a/resources/icon/Makefile.am b/resources/icon/Makefile.am
@@ -1,35 +0,0 @@
-# This Makefile.am is in the public domain
-
-theme=hicolor
-themedir=$(datadir)/icons/$(theme)
-theme_iconid=org.gnunet.Messenger
-theme_iconsizes = \
- 512 \
- 256 \
- 128 \
- 64 \
- 32
-
-install-data-local:
- @$(NORMAL_INSTALL)
- for iconsize in ${theme_iconsizes}; do \
- install -Dm644 "full_color_$${iconsize}.png" \
- "${themedir}/$${iconsize}x$${iconsize}/apps/${theme_iconid}.png"; \
- done
- install -Dm644 "full_color.svg" \
- "${themedir}/scalable/apps/${theme_iconid}.svg"
- gtk-update-icon-cache -f -t ${themedir}
-
-uninstall-hook:
- for iconsize in ${theme_iconsizes}; do \
- rm -f "${themedir}/$${iconsize}x$${iconsize}/apps/${theme_iconid}.png"; \
- done
- rm -f "${themedir}/scalable/apps/${theme_iconid}.svg"
-
-EXTRA_DIST = \
- full_color_512.png \
- full_color_256.png \
- full_color_128.png \
- full_color_64.png \
- full_color_32.png \
- full_color.svg
diff --git a/resources/icon/meson.build b/resources/icon/meson.build
@@ -0,0 +1,45 @@
+#
+# This file is part of GNUnet.
+# Copyright (C) 2023 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+
+theme = 'hicolor'
+theme_dir = get_option('datadir') / 'icons' / theme
+theme_icon_id = messenger_gtk_id
+theme_icon_sizes = [
+ 512,
+ 256,
+ 128,
+ 64,
+ 32,
+]
+
+foreach icon_size : theme_icon_sizes
+ icon_size_dir = icon_size.to_string() + 'x' + icon_size.to_string()
+ install_data(
+ 'full_color_' + icon_size.to_string() + '.png',
+ install_dir: theme_dir,
+ rename: icon_size_dir / 'apps' / theme_icon_id + '.png',
+ )
+endforeach
+
+install_data(
+ 'full_color.svg',
+ install_dir: theme_dir,
+ rename: 'scalable/apps' / theme_icon_id + '.svg',
+)
diff --git a/resources/meson.build b/resources/meson.build
@@ -0,0 +1,50 @@
+#
+# This file is part of GNUnet.
+# Copyright (C) 2023 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+
+applications_dir = get_option('datadir') / 'applications'
+appdata_dir = get_option('datadir') / 'appdata'
+application_id = messenger_gtk_id
+
+subdir('icon')
+
+css_resources = gnome.compile_resources(
+ 'css',
+ 'css.gresource.xml',
+)
+
+ui_resources = gnome.compile_resources(
+ 'ui',
+ 'ui.gresource.xml',
+)
+
+messenger_gtk_resources = [
+ css_resources,
+ ui_resources,
+]
+
+install_data(
+ application_id + '.desktop',
+ install_dir: applications_dir,
+)
+
+install_data(
+ application_id + '.appdata.xml',
+ install_dir: appdata_dir,
+)
diff --git a/src/Makefile.am b/src/Makefile.am
@@ -1,52 +0,0 @@
-# This Makefile.am is in the public domain
-
-SUBDIRS = \
- chat \
- ui
-
-AM_CFLAGS = \
- -I$(top_srcdir)/src \
- -I$(top_srcdir)/resources \
- @GLIB_CFLAGS@ \
- @GTK_CFLAGS@ \
- @GNUNET_CFLAGS@ \
- @HANDY_CFLAGS@ \
- @GST_CFLAGS@ \
- @NOTIFY_CFLAGS@ \
- @QRENCODE_CFLAGS@
-
-bin_PROGRAMS = messenger-gtk
-
-messenger_gtk_SOURCES = \
- application.c application.h \
- contact.c contact.h \
- event.c event.h \
- file.c file.h \
- resources.c resources.h \
- ui.c ui.h \
- util.h \
- messenger_gtk.c
-
-messenger_gtk_LDADD = \
- ../resources/libresources.a \
- chat/libchat.a \
- ui/libui.a \
- -lgnunetchat \
- -lgnunetutil \
- @GLIB_LIBS@ \
- @GTK_LIBS@ \
- @HANDY_LIBS@ \
- @GST_LIBS@ \
- @NOTIFY_LIBS@ \
- @QRENCODE_LIBS@
-
-messenger_gtk_CFLAGS = \
- -pedantic -Wall -Wextra -Wno-overlength-strings
-
-if DEBUG
-messenger_gtk_CFLAGS += \
- -O0 -D _DEBUG -ggdb3
-else
-messenger_gtk_CFLAGS += \
- -O2 -D NDEBUG
-endif
diff --git a/src/chat/Makefile.am b/src/chat/Makefile.am
@@ -1,11 +0,0 @@
-# This Makefile.am is in the public domain
-
-AM_CFLAGS = \
- -I$(top_srcdir)/src \
- @GNUNET_CFLAGS@
-
-noinst_LIBRARIES = libchat.a
-
-libchat_a_SOURCES = \
- messenger.c messenger.h
-
diff --git a/src/chat/meson.build b/src/chat/meson.build
@@ -0,0 +1,23 @@
+#
+# This file is part of GNUnet.
+# Copyright (C) 2023 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+
+messenger_gtk_chat_sources = files([
+ 'messenger.c', 'messenger.h',
+])
diff --git a/src/meson.build b/src/meson.build
@@ -0,0 +1,33 @@
+#
+# This file is part of GNUnet.
+# Copyright (C) 2023 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+
+subdir('chat')
+subdir('ui')
+
+messenger_gtk_sources = files([
+ 'application.c', 'application.h',
+ 'contact.c', 'contact.h',
+ 'event.c', 'event.h',
+ 'file.c', 'file.h',
+ 'resources.c', 'resources.h',
+ 'ui.c', 'ui.h',
+ 'util.h',
+ 'messenger_gtk.c',
+]) + messenger_gtk_chat_sources + messenger_gtk_ui_sources
diff --git a/src/ui/Makefile.am b/src/ui/Makefile.am
@@ -1,38 +0,0 @@
-# This Makefile.am is in the public domain
-
-AM_CFLAGS = \
- -I$(top_srcdir)/src \
- -I$(top_srcdir)/submodules/gnome-characters/lib \
- @GTK_CFLAGS@ \
- @GNUNET_CFLAGS@ \
- @HANDY_CFLAGS@ \
- @GST_CFLAGS@ \
- @NOTIFY_CFLAGS@ \
- @QRENCODE_CFLAGS@
-
-noinst_LIBRARIES = libui.a
-
-libui_a_SOURCES = \
- about.c about.h \
- account_entry.c account_entry.h \
- accounts.c accounts.h \
- chat.c chat.h \
- chat_entry.c chat_entry.h \
- contact_entry.c contact_entry.h \
- contact_info.c contact_info.h \
- contacts.c contacts.h \
- delete_messages.c delete_messages.h \
- file_load_entry.c file_load_entry.h \
- invite_contact.c invite_contact.h \
- message.c message.h \
- messenger.c messenger.h \
- new_account.c new_account.h \
- new_contact.c new_contact.h \
- new_group.c new_group.h \
- new_lobby.c new_lobby.h \
- new_platform.c new_platform.h \
- picker.c picker.h \
- play_media.c play_media.h \
- send_file.c send_file.h \
- settings.c settings.h
-
diff --git a/src/ui/meson.build b/src/ui/meson.build
@@ -0,0 +1,44 @@
+#
+# This file is part of GNUnet.
+# Copyright (C) 2023 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+
+messenger_gtk_ui_sources = files([
+ 'about.c', 'about.h',
+ 'account_entry.c', 'account_entry.h',
+ 'accounts.c', 'accounts.h',
+ 'chat_entry.c', 'chat_entry.h',
+ 'chat.c', 'chat.h',
+ 'contact_entry.c', 'contact_entry.h',
+ 'contact_info.c', 'contact_info.h',
+ 'contacts.c', 'contacts.h',
+ 'delete_messages.c', 'delete_messages.h',
+ 'file_load_entry.c', 'file_load_entry.h',
+ 'invite_contact.c', 'invite_contact.h',
+ 'message.c', 'message.h',
+ 'messenger.c', 'messenger.h',
+ 'new_account.c', 'new_account.h',
+ 'new_contact.c', 'new_contact.h',
+ 'new_group.c', 'new_group.h',
+ 'new_lobby.c', 'new_lobby.h',
+ 'new_platform.c', 'new_platform.h',
+ 'picker.c', 'picker.h',
+ 'play_media.c', 'play_media.h',
+ 'send_file.c', 'send_file.h',
+ 'settings.c', 'settings.h',
+])
diff --git a/submodules/meson.build b/submodules/meson.build
@@ -0,0 +1,27 @@
+#
+# This file is part of GNUnet.
+# Copyright (C) 2023 GNUnet e.V.
+#
+# GNUnet is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License as published
+# by the Free Software Foundation, either version 3 of the License,
+# or (at your option) any later version.
+#
+# GNUnet is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# SPDX-License-Identifier: AGPL3.0-or-later
+#
+
+submodules_includes = include_directories(
+ 'gnome-characters/lib',
+)
+
+submodules_headers = files([
+ 'gnome-characters/lib/emoji.h'
+])