commit 113612d5c11d774f806c412b0e8a60ca5dac53f2
parent b9736f95b64eaef0b0f52278be861f7b899ebda7
Author: TheJackiMonster <thejackimonster@gmail.com>
Date: Mon, 17 Oct 2022 16:23:46 +0200
Transition from single makefile to automake
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
Diffstat:
15 files changed, 651 insertions(+), 180 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -1,3 +1,20 @@
+.version
+
+aclocal.m4
+autom4te.cache/
+build-aux/
+
+config.log
+config.status
+configure
+configure~
+
+libtool
+m4/
+
+Makefile.in
+Makefile
+
# IDE specific files:
.cproject
.project
diff --git a/INSTALL b/INSTALL
@@ -0,0 +1,368 @@
+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 b/Makefile
@@ -1,175 +0,0 @@
-
-VERSION = 0.7.0
-APP_ID = org.gnunet.Messenger
-TARGET_NAME = messenger-gtk
-
-RESOURCES_DIR = resources/
-SOURCE_DIR = src/
-INSTALL_DIR ?= /usr/local/
-
-PACKAGE = $(TARGET_NAME)
-BINARY = $(TARGET_NAME)
-SOURCES = messenger_gtk.c\
- application.c\
- contact.c\
- event.c\
- file.c\
- resources.c\
- ui.c\
- chat/messenger.c\
- ui/about.c\
- ui/account_entry.c\
- ui/accounts.c\
- ui/chat_entry.c\
- ui/chat.c\
- ui/contact_entry.c\
- ui/contact_info.c\
- ui/contacts.c\
- ui/delete_messages.c\
- ui/file_load_entry.c\
- ui/invite_contact.c\
- ui/message.c\
- ui/messenger.c\
- ui/new_account.c\
- ui/new_contact.c\
- ui/new_group.c\
- ui/new_lobby.c\
- ui/new_platform.c\
- ui/picker.c\
- ui/send_file.c\
- ui/settings.c
-
-HEADERS = util.h
-
-RESOURCES = css.gresource.xml\
- ui.gresource.xml
-
-LIBRARIES = gnunetchat
-PACKAGES = gnunetutil\
- glib-2.0\
- gstreamer-1.0\
- gstreamer-app-1.0\
- gtk+-3.0\
- libhandy-1\
- libnotify\
- libqrencode
-
-INCLUDES = submodules/gnome-characters/lib
-
-DIST_FILES = submodules/gnome-characters/lib/emoji.h\
- Makefile\
- AUTHORS\
- CHANGES.md\
- COPYING\
- README.md
-
-GNU_CC ?= gcc
-GNU_LD ?= gcc
-GNU_RM ?= rm
-GNU_CP ?= cp
-GNU_TAR ?= tar
-
-GLIB_COMPILE_RESOURCES ?= glib-compile-resources
-
-CFLAGS += -pedantic -Wall -Wextra -ggdb3 -Wno-overlength-strings
-LDFLAGS +=
-
-DEBUGFLAGS = -O0 -D _DEBUG
-RELEASEFLAGS = -O2 -D NDEBUG
-
-DIST_DIR = $(PACKAGE)-$(VERSION)/
-DIST_TAR = $(PACKAGE)-$(VERSION).tar.gz
-
-ICON_SIZES = 32\
- 64\
- 128\
- 256\
- 512
-
-APPICON_DIR = $(addprefix $(RESOURCES_DIR), icon/)
-
-RESOURCES_FILES = $(addprefix $(RESOURCES_DIR), $(RESOURCES))
-
-SOURCE_FILES = $(RESOURCES_FILES:%.gresource.xml=%.c)\
- $(addprefix $(SOURCE_DIR), $(SOURCES))
-
-RESOURCES_HEADERS = $(RESOURCES_FILES:%.gresource.xml=%.h)
-
-HEADER_FILES = $(addprefix $(SOURCE_DIR), $(HEADERS))
-
-OBJECT_FILES = $(SOURCE_FILES:%.c=%.o)
-
-LIBRARY_FLAGS = $(addprefix -l, $(LIBRARIES)) $(shell pkg-config --libs $(PACKAGES))
-PACKAGE_FLAGS = $(shell pkg-config --cflags $(PACKAGES))
-INCLUDE_FLAGS = $(addprefix -I, $(INCLUDES))
-
-all: $(BINARY)
-
-%.c: %.gresource.xml
- $(GLIB_COMPILE_RESOURCES) --sourcedir=$(RESOURCES_DIR) $< --generate-source
- $(GLIB_COMPILE_RESOURCES) --sourcedir=$(RESOURCES_DIR) $< --generate-header
-
-debug: CFLAGS += $(DEBUGFLAGS)
-debug: $(BINARY)
-
-release: CFLAGS += $(RELEASEFLAGS)
-release: $(BINARY)
-
-%.o: %.c
- $(GNU_CC) $(CFLAGS) -c $< -o $@ $(PACKAGE_FLAGS) $(INCLUDE_FLAGS)
-
-$(BINARY): $(OBJECT_FILES)
- $(GNU_LD) $(LDFLAGS) $^ -o $@ $(LIBRARY_FLAGS)
-
-.PHONY: mobile
-
-mobile: $(BINARY)
- ./$(BINARY) --mobile
-
-.PHONY: install
-
-define install-icon
- install -Dm644 $(addprefix $(APPICON_DIR), full_color_$(1).png) $(addprefix $(INSTALL_DIR), share/icons/hicolor/$(1)x$(1)/apps/$(APP_ID).png)
-endef
-
-install:
- install -Dm755 $(BINARY) $(addprefix $(INSTALL_DIR), bin/)
- $(foreach SIZE,$(ICON_SIZES),$(call install-icon,$(SIZE));)
- install -Dm644 $(addprefix $(APPICON_DIR), full_color.svg) $(addprefix $(INSTALL_DIR), share/icons/hicolor/scalable/apps/$(APP_ID).svg)
- desktop-file-install --dir=$(addprefix $(INSTALL_DIR), share/applications/) $(addprefix $(RESOURCES_DIR), $(APP_ID).desktop)
- mkdir -p $(addprefix $(INSTALL_DIR), share/appdata/)
- install -Dm644 $(addprefix $(RESOURCES_DIR), $(APP_ID).appdata.xml) $(addprefix $(INSTALL_DIR), share/appdata/)
- gtk-update-icon-cache -f -t $(addprefix $(INSTALL_DIR), share/icons/hicolor)
-
-.PHONY: uninstall
-
-define uninstall-icon
- $(GNU_RM) -f $(addprefix $(INSTALL_DIR), share/icons/hicolor/$(1)x$(1)/apps/$(APP_ID).png)
-endef
-
-uninstall:
- $(GNU_RM) -f $(addsuffix $(BINARY), $(addprefix $(INSTALL_DIR), bin/))
- $(foreach SIZE,$(ICON_SIZES),$(call uninstall-icon,$(SIZE));)
- $(GNU_RM) -f $(addprefix $(INSTALL_DIR), share/icons/hicolor/scalable/apps/$(APP_ID).svg)
- $(GNU_RM) -f $(addsuffix $(APP_ID).desktop, $(addprefix $(INSTALL_DIR), share/applications/))
- $(GNU_RM) -f $(addsuffix $(APP_ID).appdata.xml, $(addprefix $(INSTALL_DIR), share/appdata/))
-
-.PHONY: dist
-
-dist: clean
- mkdir $(DIST_DIR)
- $(foreach INCLUDE_DIR,$(INCLUDES),mkdir -p $(addprefix $(DIST_DIR), $(INCLUDE_DIR));)
- $(GNU_CP) -r $(SOURCE_DIR) $(DIST_DIR)
- $(GNU_CP) -r $(RESOURCES_DIR) $(DIST_DIR)
- $(GNU_RM) -f $(addprefix $(addprefix $(DIST_DIR), $(RESOURCES_DIR)), ui/*.ui~)
- $(foreach DIST_FILE,$(DIST_FILES),$(GNU_CP) $(DIST_FILE) $(addprefix $(DIST_DIR), $(DIST_FILE));)
- $(GNU_TAR) -czf $(DIST_TAR) $(DIST_DIR)
- $(GNU_RM) -r $(DIST_DIR)
-
-.PHONY: clean
-
-clean:
- $(GNU_RM) -f $(BINARY)
- $(GNU_RM) -f $(OBJECT_FILES)
- $(GNU_RM) -f $(RESOURCES_HEADERS)
- $(GNU_RM) -f $(DIST_TAR)
diff --git a/Makefile.am b/Makefile.am
@@ -0,0 +1,7 @@
+# This Makefile.am is in the public domain
+
+SUBDIRS = \
+ resources \
+ src
+
+ACLOCAL_AMFLAGS = -I m4
diff --git a/NEWS b/NEWS
@@ -0,0 +1 @@
+See ChangeLog.
diff --git a/README.md b/README.md
@@ -47,14 +47,22 @@ 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 the provided Makefile as follows:
+Then you can simply use [Autotools](https://www.gnu.org/software/automake/) 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
+```
+
+Here is a list of some useful build targets in the Makefile:
- `make` to just compile everything with default parameters
- `make clean` to cleanup build files in case you want to recompile
- - `make debug` to compile everything with debug parameters
- - `make release` to compile everything with build optimizations enabled
- `make install` to install the compiled files (you might need sudo permissions to install)
+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.
+
## Contribution
If you want to contribute to this project as well, the following options are available:
diff --git a/bootstrap b/bootstrap
@@ -0,0 +1,2 @@
+#!/bin/sh
+autoreconf -vfi
diff --git a/configure.ac b/configure.ac
@@ -0,0 +1,82 @@
+# 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
+ 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([GST_APP], [gstreamer-app-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/contrib/get_version.sh b/contrib/get_version.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Gets the version number from git, or from the contents of .version
+VERSION=
+if test -f ".version"
+then
+ VERSION=$(cat .version)
+fi
+if test -d "./.git"
+then
+ VERSION=$(git describe --tags)
+ VERSION=${VERSION#v}
+ echo $VERSION > .version
+fi
+if test "x$VERSION" = "x"
+then
+ VERSION="unknown"
+fi
+echo "$VERSION"
diff --git a/resources/.gitignore b/resources/.gitignore
@@ -1 +1,7 @@
-*.h
-\ No newline at end of file
+.deps/
+
+*.c
+*.h
+
+*.o
+*.a
diff --git a/resources/Makefile.am b/resources/Makefile.am
@@ -0,0 +1,19 @@
+# This Makefile.am is in the public domain
+
+%.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@
+
+lib_LIBRARIES = libresources.a
+
+libresources_a_SOURCES = \
+ css.c css.h \
+ ui.c ui.h
diff --git a/src/.gitignore b/src/.gitignore
@@ -0,0 +1,14 @@
+.deps/
+.libs/
+
+Makefile.in
+Makefile
+
+stamp-h1
+
+messenger_gtk_config.h
+messenger_gtk_config.h.in
+messenger_gtk_config.h.in~
+
+*.o
+*.a
diff --git a/src/Makefile.am b/src/Makefile.am
@@ -0,0 +1,56 @@
+# 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@ \
+ @GST_APP_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
+
+messenger_gtk_LDFLAGS = \
+ -lgnunetchat \
+ -lgnunetutil \
+ @GLIB_LIBS@ \
+ @GTK_LIBS@ \
+ @HANDY_LIBS@ \
+ @GST_LIBS@ \
+ @GST_APP_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
@@ -0,0 +1,11 @@
+# This Makefile.am is in the public domain
+
+AM_CFLAGS = \
+ -I$(top_srcdir)/src \
+ @GNUNET_CFLAGS@
+
+lib_LIBRARIES = libchat.a
+
+libchat_a_SOURCES = \
+ messenger.c messenger.h
+
diff --git a/src/ui/Makefile.am b/src/ui/Makefile.am
@@ -0,0 +1,38 @@
+# 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@ \
+ @GST_APP_CFLAGS@ \
+ @NOTIFY_CFLAGS@ \
+ @QRENCODE_CFLAGS@
+
+lib_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 \
+ send_file.c send_file.h \
+ settings.c settings.h
+