mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-18 20:57:56 +00:00
Add Swift 3/4 'servaldswift' executable
If the Swift 3 or Swift 4 compiler is present or passed to the configure script in the SWIFTC variable, then the Makefile will compile a Swift 'servaldswift' executable to ensure that the module map links correctly into a stand-alone Swift program. Use the gold linker if supported, to avoid relocation errors on symbols produced by Swift when linking dynamic libraries.
This commit is contained in:
parent
e9d91d04ca
commit
f2eb2bf9ab
1
.gitignore
vendored
1
.gitignore
vendored
@ -21,6 +21,7 @@
|
||||
/config.h
|
||||
/servald
|
||||
/servaldwrap
|
||||
/servaldswift
|
||||
/serval-tests
|
||||
/directory_service
|
||||
/tfw_createfile
|
||||
|
65
INSTALL.md
65
INSTALL.md
@ -1,6 +1,6 @@
|
||||
Serval DNA Build and Test
|
||||
=========================
|
||||
[Serval Project][], September 2017
|
||||
[Serval Project][], December 2017
|
||||
|
||||
Supported Architectures
|
||||
-----------------------
|
||||
@ -54,6 +54,7 @@ Mandatory dependencies:
|
||||
Optional:
|
||||
|
||||
* Java compiler and SDK 1.6.0 or later
|
||||
* [Swift][] 3 or 4 compiler
|
||||
* ALSA sound library and headers (present on Linux, not on Android)
|
||||
|
||||
Test dependencies:
|
||||
@ -68,11 +69,15 @@ Test dependencies:
|
||||
OS-X using the [homebrew][] package manager. The [Notes for Developers][] give
|
||||
more details.
|
||||
|
||||
Build
|
||||
-----
|
||||
Native Build
|
||||
------------
|
||||
|
||||
To compile a native (ie, not cross-compiled) Serval DNA from source, run the
|
||||
following commands:
|
||||
A *native build* of Serval DNA will produce libraries and executable programs
|
||||
that can be run on the same platform on which the build is performed. This is
|
||||
useful for development and testing.
|
||||
|
||||
The following commands will compile a native (ie, not cross-compiled) Serval
|
||||
DNA from source:
|
||||
|
||||
$ cd $HOME/src/serval-dna
|
||||
$ autoreconf -f -i -I m4
|
||||
@ -125,9 +130,20 @@ A successful session should appear something like:
|
||||
LIB CC cli.c
|
||||
LIB CC cli_stdio.c
|
||||
...
|
||||
LINK simulator
|
||||
LINK servald
|
||||
CC directory_service.c
|
||||
LINK directory_service
|
||||
SERVALD CC servalwrap.c
|
||||
LINK servaldwrap
|
||||
SERVALD CC test_features.c
|
||||
LINK serval-tests
|
||||
CC fakeradio.c
|
||||
LINK fakeradio
|
||||
CC simulator.c
|
||||
LINK simulator
|
||||
CC tfw_createfile.c
|
||||
LINK tfw_createfile
|
||||
SWIFT servaldswift
|
||||
make[1]: Entering directory '/home/username/src/serval-dna/java-api'
|
||||
JAVAC classes
|
||||
JAVAC testclasses
|
||||
@ -152,16 +168,27 @@ In the event of a build failure:
|
||||
* consult the [Notes for Developers][]
|
||||
* as a last resort, [contact the Serval Project][]
|
||||
|
||||
Android build
|
||||
-------------
|
||||
|
||||
The [batphone][] app for Android builds Serval DNA from source by including
|
||||
[Android.mk](./Android.mk) in its own build process; see the [batphone build
|
||||
instructions][] for more information.
|
||||
|
||||
It is not necessary to perform a [native build](#native-build) before or after
|
||||
an Android build; the two produce completely unrelated artifacts.
|
||||
|
||||
Built artifacts
|
||||
---------------
|
||||
|
||||
The build process produces the following artifacts:
|
||||
The [native build](#native-build) process produces the following artifacts:
|
||||
|
||||
* **servald** is the main Serval DNA daemon executable. All the Serval DNA
|
||||
daemon, SQLite and libsodium code is statically linked into this executable,
|
||||
so it does not need to load any Serval or libsodium shared libraries at
|
||||
run-time. Its unstripped size is about 9.5 MB on a typical 64-bit system, of
|
||||
which about 7 MB is SQLite. Its stripped size is about 3 MB.
|
||||
and only common system libraries are dynamically linked, which keeps its
|
||||
run-time dependencies to a minimum. Its unstripped size is about 9.5 MB on a
|
||||
typical 64-bit system, of which about 7 MB is SQLite. Its stripped size is
|
||||
about 3 MB.
|
||||
|
||||
* **servaldwrap** is a Serval DNA executable identical to *servald*, but
|
||||
it loads `libservaldaemon.so` at run-time using [dlopen(3)][] instead of
|
||||
@ -182,8 +209,9 @@ The build process produces the following artifacts:
|
||||
|
||||
* **libservaldaemon.so** is a dynamic library containing the complete executable
|
||||
code of the Serval DNA daemon, including [JNI][] entry points, SQLite and
|
||||
libsodium cryptographic functions. The Serval DNA Java API, which is used by
|
||||
[batphone][], and the *servaldwrap* executable both use this dynamic library.
|
||||
libsodium cryptographic functions. The *servaldwrap* executable and the
|
||||
Serval DNA Java API, which is used by [batphone][], both use this dynamic
|
||||
library.
|
||||
|
||||
* **directory_service** is the executable for the [Serval Infrastructure][]
|
||||
daemon.
|
||||
@ -213,6 +241,16 @@ The build process produces the following artifacts:
|
||||
* **tfw_createfile** is an executable utility needed by test scripts for
|
||||
creating large data files with unique, non-repeating content.
|
||||
|
||||
In addition, the following artifacts are produced [if a Swift compiler is
|
||||
present][Swift development]:
|
||||
|
||||
* **servaldswift** is a statically linked Serval DNA executable identical to
|
||||
*servald*, but its *main* entry point is compiled from a [Swift][] program to
|
||||
prove that Swift code can invoke internal Serval DNA daemon APIs. It
|
||||
dynamically links to many more system libraries than *servald* because of the
|
||||
Swift language's run-time support and resultant library dependencies, so is
|
||||
not suitable for deployment.
|
||||
|
||||
Test scripts
|
||||
------------
|
||||
|
||||
@ -270,6 +308,7 @@ This document is available under the [Creative Commons Attribution 4.0 Internati
|
||||
[Serval DNA]: ./README.md
|
||||
[serval-dna]: https://github.com/servalproject/serval-dna
|
||||
[batphone]: https://github.com/servalproject/batphone
|
||||
[batphone build instructions]: https://github.com/servalproject/batphone/blob/development/INSTALL.md
|
||||
[Android 2.2 “Froyo”]: http://developer.android.com/about/versions/android-2.2-highlights.html
|
||||
[Android NDK]: http://developer.android.com/tools/sdk/ndk/index.html
|
||||
[Xcode]: https://developer.apple.com/xcode/
|
||||
@ -277,6 +316,7 @@ This document is available under the [Creative Commons Attribution 4.0 Internati
|
||||
[gcc 5]: http://gcc.gnu.org/gcc-5/
|
||||
[gcc 6]: http://gcc.gnu.org/gcc-6/
|
||||
[Notes for Developers]: ./doc/Development.md
|
||||
[Swift development]: ./doc/Development.md#swift
|
||||
[OpenWRT]: ./doc/OpenWRT.md
|
||||
[Serval Infrastructure]: ./doc/Serval-Infrastructure.md
|
||||
[Serval Mesh Extender]: http://developer.servalproject.org/dokuwiki/doku.php?id=content:meshextender:
|
||||
@ -288,6 +328,7 @@ This document is available under the [Creative Commons Attribution 4.0 Internati
|
||||
[MDP API]: ./doc/Mesh-Datagram-Protocol.md#mdp-api
|
||||
[CLI API]: ./doc/CLI-API.md
|
||||
[JNI]: http://en.wikipedia.org/wiki/Java_Native_Interface
|
||||
[Swift]: https://en.wikipedia.org/wiki/Swift_(programming_language)
|
||||
[Bash]: http://en.wikipedia.org/wiki/Bash_(Unix_shell)
|
||||
[GNU make]: http://www.gnu.org/software/make/
|
||||
[Git]: http://git-scm.com/
|
||||
|
67
Makefile.in
67
Makefile.in
@ -8,7 +8,21 @@ sysconfdir=@sysconfdir@
|
||||
localstatedir=@localstatedir@
|
||||
srcdir=@srcdir@
|
||||
|
||||
SQLITE3_AMALGAMATION = sqlite-amalgamation-3140200
|
||||
CC = @CC@
|
||||
AR = @AR@
|
||||
RANLIB = @RANLIB@
|
||||
JAVAC= @JAVAC@
|
||||
SWIFTC= @SWIFTC@
|
||||
|
||||
SWIFTCFLAGS= @SWIFTCFLAGS@ -I. -I $(srcdir)
|
||||
SWIFTLIBS= @LIBS@
|
||||
SWIFT_MODULE_NAME= ServalDNA
|
||||
|
||||
INSTALL= install
|
||||
INSTALL_PROGRAM= $(INSTALL)
|
||||
INSTALL_DATA= $(INSTALL) -m 644
|
||||
|
||||
SQLITE3_AMALGAMATION = sqlite-amalgamation-3140200
|
||||
|
||||
include $(srcdir)/sourcefiles.mk
|
||||
include $(srcdir)/headerfiles.mk
|
||||
@ -62,8 +76,6 @@ SIMULATOR_OBJS = \
|
||||
PREFIXED_HEADERS = $(addprefix $(srcdir)/, $(HDRS))
|
||||
PREFIXED_SOURCES = $(addprefix $(srcdir)/, $(ALL_SOURCES))
|
||||
|
||||
CC= @CC@
|
||||
|
||||
LDFLAGS=@LDFLAGS@ @LIBS@
|
||||
|
||||
CFLAGS= -I. -I$(srcdir)/$(SQLITE3_AMALGAMATION) @CPPFLAGS@ @CFLAGS@
|
||||
@ -83,35 +95,38 @@ CFLAGS+=-DSHA2_USE_INTTYPES_H -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED=1 -D_
|
||||
CFLAGS+=-D_DARWIN_C_SOURCE
|
||||
CFLAGS_SQLITE= @CFLAGS_SQLITE@
|
||||
|
||||
JAVAC= @JAVAC@
|
||||
|
||||
INSTALL= install
|
||||
INSTALL_PROGRAM=$(INSTALL)
|
||||
INSTALL_DATA= $(INSTALL) -m 644
|
||||
|
||||
-include $(srcdir)/Makefile.dbg
|
||||
|
||||
DEFS= @DEFS@
|
||||
# More warnings, discover problems that only happen on some archs
|
||||
CFLAGS+=-Wextra
|
||||
# Security enhancements from Debian
|
||||
CFLAGS+=-Wformat -Werror=format-security -D_FORTIFY_SOURCE=2
|
||||
|
||||
CONFIG_H = @CONFIG_H@
|
||||
CONFIG_H = @CONFIG_H@
|
||||
|
||||
DEFS= @DEFS@
|
||||
SWIFTDEFS= $(addprefix -Xcc , $(DEFS))
|
||||
|
||||
# Usage: $(call MERGE_STATIC_LIBS, libdest.a, libsrcfoo.a libsrcbar.a)
|
||||
MERGE_STATIC_LIBS = echo MERGE $(1) = $(2); \
|
||||
tmp="$$(mktemp -d)" && \
|
||||
( cd "$$tmp" $(foreach LIB, $(2), && $(AR) -x $(abspath $(LIB))) ) && \
|
||||
$(RM) $@ && \
|
||||
$(AR) -cr $(1) "$$tmp"/* && \
|
||||
$(RM) $(1) && \
|
||||
$(AR) -cr $(1) "$$tmp"/*.o && \
|
||||
$(RANLIB) $(1) && \
|
||||
$(RM) -r "$$tmp"
|
||||
|
||||
.PHONY: all libs test install uninstall clean
|
||||
|
||||
all: libs servald servaldwrap test
|
||||
all: libs servald directory_service test
|
||||
|
||||
libs: libservaldaemon.so \
|
||||
libs: libservaldaemon.so libservaldaemon.a \
|
||||
libservalclient.so libservalclient.a \
|
||||
libmonitorclient.so libmonitorclient.a
|
||||
|
||||
test: tfw_createfile directory_service fakeradio simulator serval-tests
|
||||
test: servaldwrap serval-tests \
|
||||
fakeradio simulator \
|
||||
tfw_createfile
|
||||
|
||||
install: servald
|
||||
$(INSTALL_PROGRAM) -D servald $(DESTDIR)$(sbindir)/servald
|
||||
@ -321,6 +336,26 @@ servald: $(OBJSDIR_SERVALD)/servald_features.o \
|
||||
@echo LINK $@
|
||||
@$(CC) -Wall -o $@ $^ $(LDFLAGS)
|
||||
|
||||
ifneq ($(SWIFTC),) # Only provide Swift targets if the Swift compiler is available.
|
||||
|
||||
test: servaldswift
|
||||
|
||||
# A servald equivalent whose main entry point and logging output is implemented
|
||||
# in the Swift language, rather than the C entry point in main.c. This exists
|
||||
# mainly to ensure that the Serval daemon library can be linked into a Swift
|
||||
# program and executed. This linkage support is needed by the iOS framework
|
||||
# package.
|
||||
servaldswift: $(srcdir)/servaldswift.swift \
|
||||
$(OBJSDIR_SERVALD)/servald_features.o \
|
||||
$(OBJSDIR_SERVALD)/log_output_console.o \
|
||||
$(OBJSDIR_SERVALD)/log_output_file.o \
|
||||
libservaldaemon.a \
|
||||
$(srcdir)/module.modulemap
|
||||
@echo SWIFT $@
|
||||
@$(SWIFTC) -emit-executable $(SWIFTCFLAGS) $(SWIFTDEFS) -o $@ $(filter %.swift, $^) $(filter %.o, $^) $(filter %.a, $^) $(SWIFTLIBS)
|
||||
|
||||
endif # $(SWIFTC)
|
||||
|
||||
servaldwrap: $(OBJSDIR_SERVALD)/servalwrap.o
|
||||
@echo LINK $@
|
||||
@$(CC) -Wall -o $@ $^ $(LDFLAGS)
|
||||
|
85
configure.ac
85
configure.ac
@ -4,26 +4,13 @@ AC_INIT(servald, 0.9)
|
||||
AC_CONFIG_SRCDIR([serval_types.h])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
AC_ARG_VAR([AR], [Library archiver])
|
||||
AC_ARG_VAR([RANLIB], [Archive indexer])
|
||||
AC_ARG_VAR([SWIFTC], [Swift compiler])
|
||||
AC_ARG_VAR([SWIFTCFLAGS], [Swift compiler flags])
|
||||
|
||||
CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
|
||||
|
||||
dnl Set $host_os, which is needed by javac detection.
|
||||
AC_CANONICAL_SYSTEM
|
||||
|
||||
dnl Various GCC function and variable attributes
|
||||
AX_GCC_FUNC_ATTRIBUTE(aligned)
|
||||
AX_GCC_FUNC_ATTRIBUTE(alloc_size)
|
||||
AX_GCC_FUNC_ATTRIBUTE(error)
|
||||
AX_GCC_FUNC_ATTRIBUTE(format)
|
||||
AX_GCC_FUNC_ATTRIBUTE(malloc)
|
||||
AX_GCC_FUNC_ATTRIBUTE(unused)
|
||||
AX_GCC_FUNC_ATTRIBUTE(used)
|
||||
AX_GCC_VAR_ATTRIBUTE(section)
|
||||
AX_GCC_VAR_ATTRIBUTE(section_seg)
|
||||
AX_GCC_STMT_ATTRIBUTE(fallthrough)
|
||||
|
||||
dnl Init pkg-config
|
||||
PKG_PROG_PKG_CONFIG()
|
||||
|
||||
dnl Specify default instance path
|
||||
AC_ARG_VAR([INSTANCE_PATH], [default instance path for servald])
|
||||
AS_IF([test "x$INSTANCE_PATH" != x], [AC_DEFINE_UNQUOTED([INSTANCE_PATH], ["$INSTANCE_PATH"], [default instance path])])
|
||||
@ -52,10 +39,58 @@ dnl Specify default Rhizome store directory
|
||||
AC_ARG_VAR([RHIZOME_STORE_PATH], [default Rhizome store directory])
|
||||
AS_IF([test "x$RHIZOME_STORE_PATH" != x], [AC_DEFINE_UNQUOTED([RHIZOME_STORE_PATH], ["$RHIZOME_STORE_PATH"], [default Rhizome store directory])])
|
||||
|
||||
dnl Check for programs.
|
||||
AC_PROG_CC
|
||||
dnl Set $host_os, which is needed by javac detection.
|
||||
AC_CANONICAL_SYSTEM
|
||||
|
||||
dnl Check for compiler options
|
||||
dnl Check for C99 compiler and other tools.
|
||||
AC_PROG_CC_C99
|
||||
AC_PROG_CPP
|
||||
|
||||
AC_CHECK_TOOL([AR], [ar], [:])
|
||||
AS_IF([test "x$AR" = x:], [AC_MSG_ERROR([Library archiver not found: ar])])
|
||||
|
||||
AC_CHECK_TOOL([RANLIB], [ranlib], [:])
|
||||
AS_IF([test "x$RANLIB" = x:], [AC_MSG_ERROR([Archive indexer not found: ranlib])])
|
||||
|
||||
dnl Check for a Swift 3 or 4 compiler; set SWIFTC if found.
|
||||
AC_PROG_SWIFTC
|
||||
|
||||
AS_IF([test "x$SWIFTC" != x], [ dnl
|
||||
dnl Check whether the Swift compiler will compile a simple Swift 4 program with the supplied flags.
|
||||
dnl If not, report failure but keep going.
|
||||
AC_PROG_SWIFTC_IS_SWIFT4
|
||||
AS_IF([test "x$ac_cv_prog_swiftc_is_swift4" = xyes], [SWIFT_VERSION=4], [ dnl
|
||||
AC_PROG_SWIFTC_IS_SWIFT3
|
||||
AS_IF([test "x$ac_cv_prog_swiftc_is_swift3" = xyes], [SWIFT_VERSION=3], [ dnl
|
||||
AC_MSG_WARN([$SWIFTC version is too old; omitting Swift API])
|
||||
SWIFT_VERSION=
|
||||
SWIFTC=
|
||||
])
|
||||
])
|
||||
])
|
||||
|
||||
AC_SUBST([SWIFTC])
|
||||
AC_SUBST([SWIFTCFLAGS])
|
||||
AC_SUBST([SWIFT_VERSION])
|
||||
|
||||
dnl Various GCC function and variable attributes
|
||||
AX_GCC_FUNC_ATTRIBUTE(aligned)
|
||||
AX_GCC_FUNC_ATTRIBUTE(alloc_size)
|
||||
AX_GCC_FUNC_ATTRIBUTE(error)
|
||||
AX_GCC_FUNC_ATTRIBUTE(format)
|
||||
AX_GCC_FUNC_ATTRIBUTE(malloc)
|
||||
AX_GCC_FUNC_ATTRIBUTE(unused)
|
||||
AX_GCC_FUNC_ATTRIBUTE(used)
|
||||
AX_GCC_VAR_ATTRIBUTE(section)
|
||||
AX_GCC_VAR_ATTRIBUTE(section_seg)
|
||||
AX_GCC_STMT_ATTRIBUTE(fallthrough)
|
||||
|
||||
dnl The default GNU linker (BFD) cannot relocate some symbols produced by the
|
||||
dnl Swift compiler, so the gold linker is used to create dynamic libraries.
|
||||
dnl See doc/Development.md for details.
|
||||
AX_APPEND_LINK_FLAGS(-fuse-ld=gold)
|
||||
|
||||
dnl Check compiler options for compiling SQLite.
|
||||
AX_APPEND_COMPILE_FLAGS(
|
||||
-Wno-empty-body \
|
||||
-Wno-unused-value \
|
||||
@ -81,7 +116,7 @@ popdef([AC_MSG_ERROR])
|
||||
AC_SUBST([JAVAC])
|
||||
|
||||
dnl Check Java version, ditch Java if not adequate
|
||||
if test -n "$JAVAC"; then
|
||||
AS_IF([test -n "$JAVAC"], [ dnl
|
||||
dnl Discover the version of the Java compiler
|
||||
AC_PROG_JAVAC_VERSION
|
||||
dnl Check that the Java compiler is modern enough
|
||||
@ -94,9 +129,9 @@ if test -n "$JAVAC"; then
|
||||
AC_MSG_WARN([Java version $ax_cv_prog_javac_version is too old; omitting Java API])
|
||||
JAVAC=""
|
||||
])
|
||||
fi
|
||||
])
|
||||
|
||||
if test -n "$JAVAC"; then
|
||||
AS_IF([test -n "$JAVAC"], [ dnl
|
||||
dnl Discover the locations of JNI header files
|
||||
dnl *** Kludge: override AC_MSG_ERROR because AC_JNI_INCLUDE_DIR does not have
|
||||
dnl *** [if-found] and [if-not-found] action parameters.
|
||||
@ -106,7 +141,7 @@ if test -n "$JAVAC"; then
|
||||
CPPFLAGS="$CPPFLAGS -I$JNI_INCLUDE_DIR"
|
||||
done
|
||||
popdef([AC_MSG_ERROR])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl XXX Isn't this pointless? we are always linked against libc
|
||||
AC_CHECK_LIB(c,srandomdev)
|
||||
|
@ -1,6 +1,6 @@
|
||||
Notes for Serval DNA Developers
|
||||
===============================
|
||||
[Serval Project][], September 2017
|
||||
[Serval Project][], December 2017
|
||||
|
||||
Introduction
|
||||
------------
|
||||
@ -11,12 +11,12 @@ non-developers who are experiencing errors in the [build][] process.
|
||||
Autotools
|
||||
---------
|
||||
|
||||
The [configure.ac](../configure.ac) file is an [autoconf][] script that
|
||||
contains instructions for adapting the build of Serval DNA to different
|
||||
platforms and CPU architectures. This script makes use of many [GNU M4][]
|
||||
macros, each of which tests an aspect of the build environment, such as the
|
||||
make and version of the C compiler (eg, [GCC][], [Clang][]), the availability
|
||||
of headers, functions and system calls in the standard library, and so forth.
|
||||
The [configure.ac][] file is an [autoconf][] script that contains instructions
|
||||
for adapting the build of Serval DNA to different platforms and CPU
|
||||
architectures. This script makes use of many [GNU M4][] macros, each of which
|
||||
tests an aspect of the build environment, such as the make and version of the C
|
||||
compiler (eg, [GCC][], [Clang][]), the availability of headers, functions and
|
||||
system calls in the standard library, and so forth.
|
||||
|
||||
Most of these M4 macros are standard, either supplied with [autoconf][] or from
|
||||
the [autoconf macro archive][]. Some macros are specific to Serval DNA, either
|
||||
@ -27,8 +27,7 @@ sub-directory.
|
||||
The [autoreconf][] command used in the [build][] instructions generates an
|
||||
`aclocal.m4` file that includes all the necessary files from the [m4](../m4)
|
||||
directory. In turn, it then includes this `aclocal.m4` file when invoking [GNU
|
||||
M4][] to convert the [configure.ac](../configure.ac) file into the
|
||||
`./configure` script.
|
||||
M4][] to convert the [configure.ac][] file into the `./configure` script.
|
||||
|
||||
When invoked without arguments, all [autoreconf][] versions up to 2.69 will
|
||||
emit warning messages like this:
|
||||
@ -63,7 +62,18 @@ the `-I m4` option, which will eliminate the warnings:
|
||||
|
||||
The `-I m4` option should be unnecessary in [autoreconf][] versions 2.70 and
|
||||
later, because they will deduce it from the `AC_CONFIG_MACRO_DIR([m4])`
|
||||
directive near the top of `configure.ac`.
|
||||
directive near the top of [configure.ac][].
|
||||
|
||||
Linker
|
||||
------
|
||||
|
||||
The default GNU linker (based on the BFD library) does not support relocation
|
||||
of some symbols produced by the Swift compiler:
|
||||
|
||||
relocation R_X86_64_PC32 against protected symbol `...' can not be used when making a shared object
|
||||
|
||||
The Serval DNA dynamic library is linked using the GNU [gold][] linker
|
||||
(available in GNU binutils since 2008), which does not have this problem.
|
||||
|
||||
libsodium
|
||||
---------
|
||||
@ -217,6 +227,34 @@ using the [homebrew][] package manager:
|
||||
/usr/local/Cellar/jq/1.5_2: 18 files, 958K
|
||||
$
|
||||
|
||||
Java
|
||||
----
|
||||
|
||||
The Serval DNA *libservaldeamon* static and dynamic libraries provide a [JNI][]
|
||||
API so that the Serval [command line][CLI] can be called from Java programs,
|
||||
and the daemon server can be run in a Java thread.
|
||||
|
||||
Swift
|
||||
-----
|
||||
|
||||
Serval DNA supports [Swift][], the language that Apple recommend for developing
|
||||
iOS apps for their mobile devices such as phones and tablets. The
|
||||
`./configure` script [generated from configure.ac](#autotools) detects whether
|
||||
a [Swift 4][] compiler is present, or failing that, a [Swift 3][] compiler, and
|
||||
if so, then produces a Makefile that will compile
|
||||
[servaldswift.swift](../servaldswift.swift) into the *servaldswift* executable,
|
||||
to prove that the Swift [module map](../module.modulemap) allows Swift source
|
||||
code to invoke internal Serval DNA functions.
|
||||
|
||||
The `./configure` script can be passed the following variables, either as
|
||||
environment variables or using the `VARNAME=value` syntax on its command line:
|
||||
|
||||
* `SWIFTC` the path name of the Swift compiler to use; by default the configure
|
||||
script searches `$PATH` for `swiftc`
|
||||
|
||||
* `SWIFTCFLAGS` extra command-line arguments to pass to the Swift compiler;
|
||||
analogous to `CFLAGS` for the C compiler
|
||||
|
||||
About the examples
|
||||
------------------
|
||||
|
||||
@ -241,6 +279,7 @@ Available under the [Creative Commons Attribution 4.0 International licence][CC
|
||||
[CC BY 4.0]: ../LICENSE-DOCUMENTATION.md
|
||||
[Serval DNA]: ../README.md
|
||||
[build]: ../INSTALL.md
|
||||
[configure.ac]: ../configure.ac
|
||||
[autoconf]: http://www.gnu.org/software/autoconf/autoconf.html
|
||||
[autoconf macro archive]: http://www.gnu.org/software/autoconf-archive/
|
||||
[GNU M4]: http://www.gnu.org/software/m4/m4.html
|
||||
@ -262,4 +301,11 @@ Available under the [Creative Commons Attribution 4.0 International licence][CC
|
||||
[OS X awk(1)]: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/awk.1.html
|
||||
[jq(1)]: https://stedolan.github.io/jq/
|
||||
[homebrew]: http://brew.sh/
|
||||
[CLI]: ./CLI-API.md
|
||||
[JNI]: http://en.wikipedia.org/wiki/Java_Native_Interface
|
||||
[Swift]: https://en.wikipedia.org/wiki/Swift_(programming_language)
|
||||
[Swift module]: https://swift.org/package-manager/#modules
|
||||
[Swift 3]: https://swift.org/blog/swift-3-0-released/
|
||||
[Swift 4]: https://swift.org/blog/swift-4-0-released/
|
||||
[gold]: https://en.wikipedia.org/wiki/Gold_(linker)
|
||||
[Bourne shell]: http://en.wikipedia.org/wiki/Bourne_shell
|
||||
|
61
m4/ax_append_link_flags.m4
Normal file
61
m4/ax_append_link_flags.m4
Normal file
@ -0,0 +1,61 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_append_link_flags.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_APPEND_LINK_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# For every FLAG1, FLAG2 it is checked whether the linker works with the
|
||||
# flag. If it does, the flag is added FLAGS-VARIABLE
|
||||
#
|
||||
# If FLAGS-VARIABLE is not specified, the linker's flags (LDFLAGS) is
|
||||
# used. During the check the flag is always added to the linker's flags.
|
||||
#
|
||||
# If EXTRA-FLAGS is defined, it is added to the linker's default flags
|
||||
# when the check is done. The check is thus made with the flags: "LDFLAGS
|
||||
# EXTRA-FLAGS FLAG". This can for example be used to force the linker to
|
||||
# issue an error when a bad flag is given.
|
||||
#
|
||||
# NOTE: This macro depends on the AX_APPEND_FLAG and AX_CHECK_LINK_FLAG.
|
||||
# Please keep this macro in sync with AX_APPEND_COMPILE_FLAGS.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program 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 General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 2
|
||||
|
||||
AC_DEFUN([AX_APPEND_LINK_FLAGS],
|
||||
[for flag in $1; do
|
||||
AX_CHECK_LINK_FLAG([$flag], [AX_APPEND_FLAG([$flag], [m4_default([$2], [LDFLAGS])])], [], [$3])
|
||||
done
|
||||
])dnl AX_APPEND_LINK_FLAGS
|
71
m4/ax_check_link_flag.m4
Normal file
71
m4/ax_check_link_flag.m4
Normal file
@ -0,0 +1,71 @@
|
||||
# ===========================================================================
|
||||
# http://www.gnu.org/software/autoconf-archive/ax_check_link_flag.html
|
||||
# ===========================================================================
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_CHECK_LINK_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Check whether the given FLAG works with the linker or gives an error.
|
||||
# (Warnings, however, are ignored)
|
||||
#
|
||||
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
|
||||
# success/failure.
|
||||
#
|
||||
# If EXTRA-FLAGS is defined, it is added to the linker's default flags
|
||||
# when the check is done. The check is thus made with the flags: "LDFLAGS
|
||||
# EXTRA-FLAGS FLAG". This can for example be used to force the linker to
|
||||
# issue an error when a bad flag is given.
|
||||
#
|
||||
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
|
||||
# macro in sync with AX_CHECK_{PREPROC,COMPILE}_FLAG.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
|
||||
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation, either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program 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 General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
#serial 2
|
||||
|
||||
AC_DEFUN([AX_CHECK_LINK_FLAG],
|
||||
[AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_ldflags_$4_$1])dnl
|
||||
AC_CACHE_CHECK([whether the linker accepts $1], CACHEVAR, [
|
||||
ax_check_save_flags=$LDFLAGS
|
||||
LDFLAGS="$LDFLAGS $4 $1"
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM()],
|
||||
[AS_VAR_SET(CACHEVAR,[yes])],
|
||||
[AS_VAR_SET(CACHEVAR,[no])])
|
||||
LDFLAGS=$ax_check_save_flags])
|
||||
AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
|
||||
[m4_default([$2], :)],
|
||||
[m4_default([$3], :)])
|
||||
AS_VAR_POPDEF([CACHEVAR])dnl
|
||||
])dnl AX_CHECK_LINK_FLAGS
|
56
m4/ax_prog_swiftc.m4
Normal file
56
m4/ax_prog_swiftc.m4
Normal file
@ -0,0 +1,56 @@
|
||||
# Serval Project Swift language support
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_SWIFTC
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_PROG_SWIFTC tests for the presence of a Swift compiler.
|
||||
#
|
||||
# Sets the SWIFTC shell variable to the name of the Swift executable (not the
|
||||
# Swift compiler!) either relative to $PATH or an absolute path if necessary;
|
||||
# this is usually just "swiftc".
|
||||
#
|
||||
# To force a specific compiler, either:
|
||||
#
|
||||
# - in configure.ac, set SWIFTC=yourcompiler before calling AX_PROG_SWIFTC,
|
||||
# or
|
||||
#
|
||||
# - before invoking ./configure, export SWIFTC=yourcompiler
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (C) 2016 Flinders University
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program 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 General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
AU_ALIAS([AC_PROG_SWIFTC], [AX_PROG_SWIFTC])
|
||||
AC_DEFUN([AX_PROG_SWIFTC],[
|
||||
test "x$SWIFTC" = x && AC_CHECK_PROGS(SWIFTC, swiftc)
|
||||
AC_PROVIDE([$0])dnl
|
||||
])
|
74
m4/ax_prog_swiftc_is_swift3.m4
Normal file
74
m4/ax_prog_swiftc_is_swift3.m4
Normal file
@ -0,0 +1,74 @@
|
||||
# Serval Project Swift language support
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_SWIFTC_IS_SWIFT3
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_PROG_SWIFTC_IS_SWIFT3 tests whether the Swift compiler in the SWIFTC
|
||||
# variable (eg, as detected by the AX_PROG_SWIFTC macro) can compile a Swift
|
||||
# 3 program to a working native executable, with the given SWIFTCFLAGS
|
||||
# compiler options.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (C) 2016 Flinders University
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program 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 General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
AU_ALIAS([AC_PROG_SWIFTC_IS_SWIFT3], [AX_PROG_SWIFTC_IS_SWIFT3])
|
||||
AC_DEFUN([AX_PROG_SWIFTC_IS_SWIFT3],[
|
||||
AC_REQUIRE([AX_TMPDIR_SWIFT])
|
||||
AC_CACHE_CHECK([if $SWIFTC supports Swift 3], ac_cv_prog_swiftc_is_swift3, [
|
||||
cat <<EOF > "$ax_tmpdir_swift/Test.swift"
|
||||
/* Swift 2 uses Process.arguments, so this only compiles in Swift 3 */
|
||||
print(CommandLine.arguments)
|
||||
EOF
|
||||
if AC_TRY_COMMAND($SWIFTC $SWIFTCFLAGS -emit-executable -o "$ax_tmpdir_swift/Test" "$ax_tmpdir_swift/Test.swift") >/dev/null 2>&1; then
|
||||
if AC_TRY_COMMAND("$ax_tmpdir_swift/Test" one two three) > "$ax_tmpdir_swift/Test.out" 2>&1; then
|
||||
ac_swift_test_out=`cat "$ax_tmpdir_swift/Test.out"`
|
||||
if test "x$ac_swift_test_out" = ['x["'"$ax_tmpdir_swift"'/Test", "one", "two", "three"]']; then
|
||||
ac_cv_prog_swiftc_is_swift3=yes
|
||||
else
|
||||
echo "incorrect output was: $ac_swift_test_out" >&AS_MESSAGE_LOG_FD
|
||||
ac_cv_prog_swiftc_is_swift3=no
|
||||
fi
|
||||
else
|
||||
echo "failed "$ax_tmpdir_swift/Test" execution produced output:" >&AS_MESSAGE_LOG_FD
|
||||
cat "$ax_tmpdir_swift/Test.out" >&AS_MESSAGE_LOG_FD
|
||||
ac_cv_prog_swiftc_is_swift3=no
|
||||
fi
|
||||
else
|
||||
echo "compilation failed for:" >&AS_MESSAGE_LOG_FD
|
||||
cat "$ax_tmpdir_swift/Test.swift" >&AS_MESSAGE_LOG_FD
|
||||
ac_cv_prog_swiftc_is_swift3=no
|
||||
fi
|
||||
rm -f Test.swift Test Test.out
|
||||
])
|
||||
AC_PROVIDE([$0])dnl
|
||||
])
|
80
m4/ax_prog_swiftc_is_swift4.m4
Normal file
80
m4/ax_prog_swiftc_is_swift4.m4
Normal file
@ -0,0 +1,80 @@
|
||||
# Serval Project Swift language support
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_PROG_SWIFTC_IS_SWIFT4
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_PROG_SWIFTC_IS_SWIFT4 tests whether the Swift compiler in the SWIFTC
|
||||
# variable (eg, as detected by the AX_PROG_SWIFTC macro) can compile a Swift
|
||||
# 4 program to a working native executable, with the given SWIFTCFLAGS
|
||||
# compiler options.
|
||||
#
|
||||
# LICENSE
|
||||
#
|
||||
# Copyright (C) 2017 Flinders University
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the
|
||||
# Free Software Foundation; either version 2 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# This program 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 General
|
||||
# Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# As a special exception, the respective Autoconf Macro's copyright owner
|
||||
# gives unlimited permission to copy, distribute and modify the configure
|
||||
# scripts that are the output of Autoconf when processing the Macro. You
|
||||
# need not follow the terms of the GNU General Public License when using
|
||||
# or distributing such scripts, even though portions of the text of the
|
||||
# Macro appear in them. The GNU General Public License (GPL) does govern
|
||||
# all other use of the material that constitutes the Autoconf Macro.
|
||||
#
|
||||
# This special exception to the GPL applies to versions of the Autoconf
|
||||
# Macro released by the Autoconf Archive. When you make and distribute a
|
||||
# modified version of the Autoconf Macro, you may extend this special
|
||||
# exception to the GPL to apply to your modified version as well.
|
||||
|
||||
AU_ALIAS([AC_PROG_SWIFTC_IS_SWIFT4], [AX_PROG_SWIFTC_IS_SWIFT4])
|
||||
AC_DEFUN([AX_PROG_SWIFTC_IS_SWIFT4],[
|
||||
AC_REQUIRE([AX_TMPDIR_SWIFT])
|
||||
AC_CACHE_CHECK([if $SWIFTC supports Swift 4], ac_cv_prog_swiftc_is_swift4, [
|
||||
[
|
||||
cat <<EOF > "$ax_tmpdir_swift/Test.swift"
|
||||
/* Substring was introduced in Swift 4 */
|
||||
let a = "test"
|
||||
let b : Substring = a[a.startIndex ... a.index(a.startIndex, offsetBy: 2)]
|
||||
precondition(b == "tes")
|
||||
/* Swift 2 uses Process.arguments, so this only compiles in Swift 3 and later */
|
||||
print(CommandLine.arguments)
|
||||
EOF
|
||||
]
|
||||
if AC_TRY_COMMAND($SWIFTC $SWIFTCFLAGS -emit-executable -o "$ax_tmpdir_swift/Test" "$ax_tmpdir_swift/Test.swift") >/dev/null 2>&1; then
|
||||
if AC_TRY_COMMAND("$ax_tmpdir_swift/Test" one two three) > "$ax_tmpdir_swift/Test.out" 2>&1; then
|
||||
ac_swift_test_out=`cat "$ax_tmpdir_swift/Test.out"`
|
||||
if test "x$ac_swift_test_out" = ['x["'"$ax_tmpdir_swift"'/Test", "one", "two", "three"]']; then
|
||||
ac_cv_prog_swiftc_is_swift4=yes
|
||||
else
|
||||
echo "incorrect output was: $ac_swift_test_out" >&AS_MESSAGE_LOG_FD
|
||||
ac_cv_prog_swiftc_is_swift4=no
|
||||
fi
|
||||
else
|
||||
echo "failed "$ax_tmpdir_swift/Test" execution produced output:" >&AS_MESSAGE_LOG_FD
|
||||
cat "$ax_tmpdir_swift/Test.out" >&AS_MESSAGE_LOG_FD
|
||||
ac_cv_prog_swiftc_is_swift4=no
|
||||
fi
|
||||
else
|
||||
echo "compilation failed for:" >&AS_MESSAGE_LOG_FD
|
||||
cat "$ax_tmpdir_swift/Test.swift" >&AS_MESSAGE_LOG_FD
|
||||
ac_cv_prog_swiftc_is_swift4=no
|
||||
fi
|
||||
rm -f Test.swift Test Test.out
|
||||
])
|
||||
AC_PROVIDE([$0])dnl
|
||||
])
|
22
m4/ax_tmpdir_swift.m4
Normal file
22
m4/ax_tmpdir_swift.m4
Normal file
@ -0,0 +1,22 @@
|
||||
# Serval Project Swift language support
|
||||
#
|
||||
# SYNOPSIS
|
||||
#
|
||||
# AX_TMPDIR_SWIFT
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# AX_TMPDIR_SWIFT creates a temporary directory prefixed with "swft" that
|
||||
# will be deleted when the shell exits. It sets the ax_tmpdir_swift shell
|
||||
# variable to the absolute path of the created directory.
|
||||
#
|
||||
# Uses AS_TMPDIR() internally but preserves the value of the 'tmp' shell
|
||||
# variable.
|
||||
#
|
||||
|
||||
AC_DEFUN([AX_TMPDIR_SWIFT],[
|
||||
AS_VAR_COPY([_swift_tmp], [tmp])
|
||||
AS_TMPDIR([swft])
|
||||
ax_tmpdir_swift="$tmp"
|
||||
AS_VAR_COPY([tmp], [_swift_tmp])
|
||||
])
|
2
main.c
2
main.c
@ -17,7 +17,7 @@ along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
extern int servald_main(int, char**);
|
||||
#include "servald_main.h"
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
|
27
module.modulemap
Normal file
27
module.modulemap
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
Serval DNA module map
|
||||
Copyright (C) 2016-2017 Flinders University
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
module servald {
|
||||
|
||||
requires tls // thread-local storage
|
||||
|
||||
module main {
|
||||
header "servald_main.h"
|
||||
}
|
||||
}
|
@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <signal.h>
|
||||
#include "servald_main.h"
|
||||
#include "commandline.h"
|
||||
#include "sighandlers.h"
|
||||
#include "conf.h"
|
||||
|
20
servald_main.h
Normal file
20
servald_main.h
Normal file
@ -0,0 +1,20 @@
|
||||
/*
|
||||
Serval DNA main command-line entry point
|
||||
Copyright (C) 2016 Flinders University
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
int servald_main(int argc, char **argv);
|
14
servaldswift.swift
Normal file
14
servaldswift.swift
Normal file
@ -0,0 +1,14 @@
|
||||
import Foundation
|
||||
import servald.main
|
||||
|
||||
public func serval_daemon_main(args: [String]) -> CInt {
|
||||
// print "args = \(args)"
|
||||
var argv = args.map { strdup($0) }
|
||||
argv.append(nil)
|
||||
defer {
|
||||
argv.forEach { free($0) }
|
||||
}
|
||||
return servald_main(CInt(argv.count - 1), &argv)
|
||||
}
|
||||
|
||||
exit(serval_daemon_main(args: CommandLine.arguments))
|
Loading…
Reference in New Issue
Block a user