diff options
author | TheJackiMonster <thejackimonster@gmail.com> | 2022-09-25 12:37:58 +0200 |
---|---|---|
committer | TheJackiMonster <thejackimonster@gmail.com> | 2022-09-25 12:37:58 +0200 |
commit | 9aff43ff3b692f9fd15ae1f29e6522b5a4ee7642 (patch) | |
tree | 56ee5fbb8980e6642a0136875dd99837e3d7d043 | |
parent | 7deabe9ff611d68ae780903e4970b5d73cd13493 (diff) |
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r-- | .gitignore | 17 | ||||
-rw-r--r-- | ChangeLog (renamed from CHANGES.md) | 0 | ||||
-rw-r--r-- | INSTALL | 368 | ||||
-rw-r--r-- | Makefile | 102 | ||||
-rw-r--r-- | Makefile.am | 5 | ||||
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | README.md | 14 | ||||
-rwxr-xr-x | bootstrap | 2 | ||||
-rw-r--r-- | configure.ac | 67 | ||||
-rw-r--r-- | contrib/get_version.sh | 18 | ||||
-rw-r--r-- | src/.gitignore | 14 | ||||
-rw-r--r-- | src/Makefile.am | 30 | ||||
-rw-r--r-- | src/ui/Makefile.am | 17 |
13 files changed, 550 insertions, 105 deletions
@@ -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 @@ -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 deleted file mode 100644 index 66bb7e2..0000000 --- a/Makefile +++ /dev/null @@ -1,102 +0,0 @@ - -VERSION = 0.1.0 -TARGET_NAME = messenger-cli - -SOURCE_DIR = src/ -INSTALL_DIR ?= /usr/local/ - -PACKAGE = $(TARGET_NAME) -BINARY = $(TARGET_NAME) -SOURCES = messenger_cli.c\ - application.c\ - chat.c\ - util.c\ - ui/account_create_dialog.c\ - ui/accounts.c\ - ui/chat_open_dialog.c\ - ui/chats.c\ - ui/lobby_create_dialog.c\ - ui/lobby_enter_dialog.c\ - ui/members.c\ - ui/messages.c -HEADERS = application.h\ - chat.h\ - util.h\ - ui/account_create_dialog.h\ - ui/accounts.h\ - ui/chat.h\ - ui/chat_open_dialog.h\ - ui/chats.h\ - ui/list_input.h\ - ui/lobby_create_dialog.h\ - ui/lobby_enter_dialog.h\ - ui/members.h\ - ui/messages.h\ - ui/text_input.h - -LIBRARIES = gnunetchat gnunetutil ncurses - -DIST_FILES = Makefile\ - AUTHORS\ - CHANGES.md\ - COPYING\ - README.md - -GNU_CC ?= gcc -GNU_LD ?= gcc -GNU_RM ?= rm -GNU_CP ?= cp -GNU_TAR ?= tar - -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 - -SOURCE_FILES = $(addprefix $(SOURCE_DIR), $(SOURCES)) -OBJECT_FILES = $(SOURCE_FILES:%.c=%.o) -HEADER_FILES = $(addprefix $(SOURCE_DIR), $(HEADERS)) -LIBRARY_FLAGS = $(addprefix -l, $(LIBRARIES)) - -all: $(BINARY) - -debug: CFLAGS += $(DEBUGFLAGS) -debug: $(BINARY) - -release: CFLAGS += $(RELEASEFLAGS) -release: $(BINARY) - -%.o: %.c - $(GNU_CC) $(CFLAGS) -c $< -o $@ - -$(BINARY): $(OBJECT_FILES) - $(GNU_LD) $(LDFLAGS) $^ -o $@ $(LIBRARY_FLAGS) - -.PHONY: install - -install: - install -m 755 $(BINARY) $(addprefix $(INSTALL_DIR), bin/) - -.PHONY: uninstall - -uninstall: - $(GNU_RM) -f $(addsuffix $(BINARY), $(addprefix $(INSTALL_DIR), bin/)) - -.PHONY: dist - -dist: clean - mkdir $(DIST_DIR) - $(GNU_CP) -r $(SOURCE_DIR) $(DIST_DIR) - $(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) diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..e0f1ffe --- /dev/null +++ b/Makefile.am @@ -0,0 +1,5 @@ +# This Makefile.am is in the public domain + +SUBDIRS = src + +ACLOCAL_AMFLAGS = -I m4 @@ -0,0 +1 @@ +See ChangeLog. @@ -24,14 +24,22 @@ The following dependencies are required and need to be installed to build the ap - [libgnunetchat](https://git.gnunet.org/libgnunetchat.git/): For chatting via GNUnet messenger - [ncurses](https://www.gnu.org/software/ncurses/): For the general UI visualization -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 application using the Makefiles +sudo make install # Install the application +``` + +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 new file mode 100755 index 0000000..68341a5 --- /dev/null +++ b/bootstrap @@ -0,0 +1,2 @@ +#!/bin/sh +autoreconf -vfi diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..0a499ab --- /dev/null +++ b/configure.ac @@ -0,0 +1,67 @@ +# 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-cli],[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_cli_config.h +]) + +AC_CANONICAL_TARGET +AC_CANONICAL_HOST + +AM_INIT_AUTOMAKE +AM_SILENT_RULES([yes]) + +# 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 + src/Makefile + src/ui/Makefile +]) + +AC_OUTPUT diff --git a/contrib/get_version.sh b/contrib/get_version.sh new file mode 100644 index 0000000..2a41ed4 --- /dev/null +++ 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/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..937a67b --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,14 @@ +.deps/ +.libs/ + +Makefile.in +Makefile + +stamp-h1 + +messenger_cli_config.h +messenger_cli_config.h.in +messenger_cli_config.h.in~ + +*.o +*.a diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..dc4e4c4 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,30 @@ +# This Makefile.am is in the public domain + +SUBDIRS = ui + +bin_PROGRAMS = messenger-cli + +messenger_cli_SOURCES = \ + application.c application.h \ + chat.c chat.h \ + util.c util.h \ + messenger_cli.c + +messenger_cli_LDADD = \ + ui/libui.a + +messenger_cli_LDFLAGS = \ + -lgnunetchat \ + -lgnunetutil \ + -lncurses + +messenger_cli_CFLAGS = \ + -pedantic -Wall -Wextra -Wno-overlength-strings + +if DEBUG +messenger_cli_CFLAGS += \ + -O0 -D _DEBUG -ggdb3 +else +messenger_cli_CFLAGS += \ + -O2 -D NDEBUG +endif diff --git a/src/ui/Makefile.am b/src/ui/Makefile.am new file mode 100644 index 0000000..d998424 --- /dev/null +++ b/src/ui/Makefile.am @@ -0,0 +1,17 @@ +# This Makefile.am is in the public domain + +lib_LIBRARIES = libui.a + +libui_a_SOURCES = \ + account_create_dialog.c account_create_dialog.h \ + accounts.c accounts.h \ + chat.h \ + chat_open_dialog.c chat_open_dialog.h \ + chats.c chats.h \ + list_input.h \ + lobby_create_dialog.c lobby_create_dialog.h \ + lobby_enter_dialog.c lobby_enter_dialog.h \ + members.c members.h \ + messages.c messages.h \ + text_input.h + |