construct/nix/package/default.nix

1184 lines
68 KiB
Nix

{ source, rev, pkgs, lib, stdenv ? if useClang
then (if pkgs.stdenv.cc.isClang
then pkgs.stdenv
else pkgs.llvmPackages_latest.stdenv)
else (if pkgs.stdenv.cc.isGNU
then pkgs.stdenv
else pkgs.gcc.stdenv)
, debug ? false # Debug Build
, useClang ? false # Use Clang over GCC
, useJemalloc ? false # Use the Dynamic Memory Allocator
, withGraphicsMagick ? true # Allow Media Thumbnails
}:
let
pname = "matrix-construct";
version = lib.substring 0 9 rev;
buildArgs = buildInputs: nativeBuildInputs: {
inherit buildInputs nativeBuildInputs;
preferLocalBuild = true;
allowSubstitutes = false;
};
in stdenv.mkDerivation rec {
inherit pname version;
src = source;
buildPhase = with pkgs; ''
'';
CXXOPTS = "-pipe -mtune=generic -O3 -fgcse-sm -fgcse-las -fsched-stalled-insns=0 -fsched-pressure -fsched-spec-load -fira-hoist-pressure -fbranch-target-load-optimize -frerun-loop-opt -fdevirtualize-at-ltrans -fipa-pta -fmodulo-sched -fmodulo-sched-allow-regmoves -ftracer -ftree-loop-im -ftree-switch-conversion -g -ggdb -frecord-gcc-switches -fstack-protector-explicit -fvtable-verify=none -fvisibility-inlines-hidden -fnothrow-opt -fno-threadsafe-statics -fverbose-asm -fsigned-char";
WARNOPTS = "-Wall -Wextra -Wpointer-arith -Wcast-align -Wcast-qual -Wfloat-equal -Wwrite-strings -Wparentheses -Wundef -Wpacked -Wformat -Wformat-y2k -Wformat-nonliteral -Wstrict-aliasing=2 -Wstrict-overflow=5 -Wdisabled-optimization -Winvalid-pch -Winit-self -Wuninitialized -Wunreachable-code -Wno-overloaded-virtual -Wnon-virtual-dtor -Wnoexcept -Wsized-deallocation -Wctor-dtor-privacy -Wsign-promo -Wtrampolines -Wduplicated-cond -Wrestrict -Wnull-dereference -Wplacement-new=2 -Wundef -Wodr -Werror=return-type -Wno-missing-field-initializers -Wno-unused -Wno-unused-function -Wno-unused-label -Wno-unused-value -Wno-unused-variable -Wno-unused-parameter -Wno-endif-labels -Wmissing-noreturn -Wno-unknown-attributes -Wno-unknown-pragmas -Wlogical-op -Wformat-security -Wstack-usage=16384 -Wframe-larger-than=8192 -Walloca";
nativeBuildInputs = with pkgs; [
libtool makeWrapper
] ++ lib.optional useClang llvmPackages_latest.llvm;
buildInputs = with pkgs; [
libsodium openssl file boost gmp zlib jemalloc rocksdb
] ++ lib.optional withGraphicsMagick graphicsmagick;
includes = stdenv.mkDerivation rec {
name = "${pname}-includes";
src = "${source}/include/";
configHeader = with pkgs; writeText "config.h" ''
#define BRANDING_NAME "construct"
/* #undef CUSTOM_BRANDING */
#define HAVE_ALGORITHM 1
#define HAVE_ARRAY 1
#define HAVE_ASSERT_H 1
#define HAVE_ATOMIC 1
#define HAVE_BACKTRACE 1
#define HAVE_BITSET 1
#define HAVE_BOOST /**/
#define HAVE_BOOST_ASIO /**/
#define HAVE_BOOST_CHRONO /**/
/* #undef HAVE_BOOST_CONTEXT */
#define HAVE_BOOST_COROUTINE /**/
#define HAVE_BOOST_FILESYSTEM /**/
#define HAVE_BOOST_SYSTEM /**/
#define HAVE_CERRNO 1
#define HAVE_CFENV 1
#define HAVE_CHRONO 1
#define HAVE_CMATH 1
#define HAVE_CODECVT 1
#define HAVE_CONDITION_VARIABLE 1
#define HAVE_CPUID_H 1
#define HAVE_CRYPTO 1
#define HAVE_CSTDDEF 1
#define HAVE_CSTDINT 1
#define HAVE_CSTDIO 1
#define HAVE_CSTDLIB 1
#define HAVE_CSTRING 1
#define HAVE_CTIME 1
#define HAVE_CXX17 1
#define HAVE_CXXABI_H 1
#define HAVE_DEQUE 1
#define HAVE_DLFCN_H 1
#define HAVE_DLINFO 1
#define HAVE_ELF_H 1
#define HAVE_ENDPROTOENT 1
#define HAVE_EXCEPTION 1
#define HAVE_EXECINFO_H 1
#define HAVE_EXPERIMENTAL_MEMORY_RESOURCE 1
#define HAVE_EXPERIMENTAL_OPTIONAL 1
#define HAVE_EXPERIMENTAL_STRING_VIEW 1
#define HAVE_FCNTL_H 1
#define HAVE_FILESYSTEM 1
#define HAVE_FORWARD_LIST 1
#define HAVE_FSTREAM 1
#define HAVE_FUNCTIONAL 1
#define HAVE_GETPROTOBYNAME 1
#define HAVE_GETPROTOBYNAME_R 1
#define HAVE_GETTIMEOFDAY 1
#define HAVE_GNU_LIBC_VERSION_H 1
#define HAVE_GNU_LIB_NAMES_H 1
#define HAVE_IFADDRS_H 1
/* #undef HAVE_INT128_T */
#define HAVE_INTPTR_T 1
#define HAVE_INTTYPES_H 1
#define HAVE_IOMANIP 1
#define HAVE_IOSFWD 1
#define HAVE_IOSTREAM 1
/* #undef HAVE_IPHLPAPI_H */
#define HAVE_IPV6 1
#define HAVE_JEMALLOC_H 1
#define HAVE_LIBNSS_DB 1
#define HAVE_LIBROCKSDB 1
#define HAVE_LIMITS 1
#define HAVE_LINK_H 1
#define HAVE_LINUX_AIO_ABI_H 1
#define HAVE_LINUX_HW_BREAKPOINT_H 1
#define HAVE_LINUX_ICMP_H 1
#define HAVE_LINUX_IO_URING_H 1
#define HAVE_LINUX_MAGIC_H 1
#define HAVE_LINUX_PERF_EVENT_H 1
#define HAVE_LIST 1
#define HAVE_LOCALE 1
#define HAVE_LONG_DOUBLE 1
/* #undef HAVE_LZ4_H */
#define HAVE_MAGICKPP_H 1
#define HAVE_MAGICK_API_H 1
#define HAVE_MAGICK_WAND_API_H 1
#define HAVE_MAGIC_H 1
#define HAVE_MALLOC_H 1
#define HAVE_MAP 1
#define HAVE_MEMORY 1
#define HAVE_MEMORY_H 1
#define HAVE_MEMORY_RESOURCE 1
#define HAVE_MUTEX 1
#define HAVE_NANOSLEEP 1
#define HAVE_NETDB_H 1
#define HAVE_NEW 1
#define HAVE_NUMERIC 1
#define HAVE_OPENSSL_ASN1_H 1
#define HAVE_OPENSSL_DH_H 1
#define HAVE_OPENSSL_EC_H 1
#define HAVE_OPENSSL_ERR_H 1
#define HAVE_OPENSSL_EVP_H 1
#define HAVE_OPENSSL_HMAC_H 1
#define HAVE_OPENSSL_RIPEMD_H 1
#define HAVE_OPENSSL_RSA_H 1
#define HAVE_OPENSSL_SHA_H 1
#define HAVE_OPENSSL_SSL_H 1
#define HAVE_OPENSSL_TLS1_H 1
#define HAVE_OPENSSL_X509_H 1
#define HAVE_OPTIONAL 1
/* #undef HAVE_PBC */
#define HAVE_POSIX_FADVISE 1
#define HAVE_PREADV2 1
#define HAVE_PWRITEV2 1
#define HAVE_QUEUE 1
#define HAVE_RANDOM 1
#define HAVE_REGEX 1
#define HAVE_SET 1
#define HAVE_SETPROTOENT 1
#define HAVE_SHARED_MUTEX 1
#define HAVE_SIGNAL_H 1
/* #undef HAVE_SNAPPY_H */
#define HAVE_SNPRINTF 1
#define HAVE_SODIUM 1
/* #undef HAVE_SODIUM_H */
#define HAVE_SSTREAM 1
#define HAVE_STACK 1
#define HAVE_STDARG_H 1
/* #undef HAVE_STDBOOL_H */
#define HAVE_STDINT_H 1
#define HAVE_STDLIB_H 1
#define HAVE_STRCPY 1
#define HAVE_STRING 1
#define HAVE_STRINGS_H 1
#define HAVE_STRING_H 1
#define HAVE_STRING_VIEW 1
/* #undef HAVE_STRLCAT */
/* #undef HAVE_STRLCPY */
#define HAVE_STRNCPY 1
#define HAVE_STRNLEN 1
#define HAVE_SYSTEM_ERROR 1
#define HAVE_SYS_AUXV_H 1
#define HAVE_SYS_EVENTFD_H 1
#define HAVE_SYS_INOTIFY_H 1
#define HAVE_SYS_IOCTL_H 1
#define HAVE_SYS_MMAN_H 1
#define HAVE_SYS_RESOURCE_H 1
#define HAVE_SYS_STATFS_H 1
#define HAVE_SYS_STATVFS_H 1
#define HAVE_SYS_STAT_H 1
#define HAVE_SYS_SYSCALL_H 1
#define HAVE_SYS_SYSINFO_H 1
#define HAVE_SYS_SYSMACROS_H 1
#define HAVE_SYS_TIME_H 1
#define HAVE_SYS_TYPES_H 1
#define HAVE_SYS_UTSNAME_H 1
#define HAVE_THREAD 1
#define HAVE_TYPEINDEX 1
#define HAVE_TYPE_TRAITS 1
/* #undef HAVE_UINT128_T */
#define HAVE_UINTPTR_T 1
#define HAVE_UNISTD_H 1
#define HAVE_UNORDERED_MAP 1
#define HAVE_UTILITY 1
/* #undef HAVE_VALGRIND_CALLGRIND_H */
/* #undef HAVE_VALGRIND_MEMCHECK_H */
/* #undef HAVE_VALGRIND_VALGRIND_H */
#define HAVE_VARIANT 1
#define HAVE_VECTOR 1
#define HAVE_VSNPRINTF 1
/* #undef HAVE_WIN32 */
/* #undef HAVE_WINDOWS_H */
/* #undef HAVE_WINSOCK2_H */
/* #undef HAVE_WS2TCPIP_H */
#define HAVE_X86INTRIN_H 1
#define HAVE_ZLIB_H 1
/* #undef HAVE__BOOL */
#define HAVE___INT128 1
#define HAVE___INT128_T 1
#define HAVE___UINT128_T 1
/* Use the default allocator */
${if useJemalloc then "" else "#define IRCD_ALLOCATOR_USE_DEFAULT 1"}
/* Use jemalloc as the allocator */
${if useJemalloc then "#define IRCD_ALLOCATOR_USE_JEMALLOC 1" else ""}
/* Linux AIO is supported and will be used */
#define IRCD_USE_AIO 1
/* Linux io_uring is supported and may be used */
#define IRCD_USE_IOU 1
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#define LT_OBJDIR ".libs/"
/* Name of package */
#define PACKAGE "construct"
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT ""
/* Define to the full name of this package. */
#define PACKAGE_NAME "construct"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "construct 1.0-dev"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "construct"
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.0-dev"
/* #undef RB_ASSERT */
/* #undef RB_ASSERT_INTRINSIC */
#define RB_BIN_DIR "@out@/bin"
/* #undef RB_COMPACT */
#define RB_CONF_DIR "@out@/etc"
#define RB_CXX "${stdenv.cc}/bin/g++ -std=gnu++17"
#define RB_CXX_EPOCH 9.3.0
#define RB_CXX_VERSION "9.3.0"
#define RB_DATAROOT_DIR "@out@/share"
#define RB_DATA_DIR "@out@/share/construct"
#define RB_DATESTR "Thu 1 Jan 01:00:00 BST 1970"
#define RB_DATE_CONFIGURED "Thu 1 Jan 01:00:00 BST 1970"
#define RB_DB_DIR "@out@/var/db/construct"
/* #undef RB_DEBUG */
#define RB_DEBUG_LEVEL 0
/* #undef RB_ENABLE_JS */
#define RB_GENERIC 1
/* #undef RB_INCLUDED_BOOST */
#define RB_INCLUDE_DIR "@out@/include"
#define RB_INC_ALGORITHM algorithm>
#define RB_INC_ARRAY array>
#define RB_INC_ASSERT_H assert.h>
#define RB_INC_ATOMIC atomic>
#define RB_INC_BITSET bitset>
#define RB_INC_CERRNO cerrno>
#define RB_INC_CFENV cfenv>
#define RB_INC_CHRONO chrono>
#define RB_INC_CMATH cmath>
#define RB_INC_CODECVT codecvt>
#define RB_INC_CONDITION_VARIABLE condition_variable>
#define RB_INC_CPUID_H cpuid.h>
#define RB_INC_CSTDDEF cstddef>
#define RB_INC_CSTDINT cstdint>
#define RB_INC_CSTDIO cstdio>
#define RB_INC_CSTDLIB cstdlib>
#define RB_INC_CSTRING cstring>
#define RB_INC_CTIME ctime>
#define RB_INC_CXXABI_H cxxabi.h>
#define RB_INC_DEQUE deque>
#define RB_INC_DLFCN_H dlfcn.h>
#define RB_INC_ELF_H elf.h>
#define RB_INC_EXCEPTION exception>
#define RB_INC_EXECINFO_H execinfo.h>
#define RB_INC_EXPERIMENTAL_MEMORY_RESOURCE experimental/memory_resource>
#define RB_INC_EXPERIMENTAL_OPTIONAL experimental/optional>
#define RB_INC_EXPERIMENTAL_STRING_VIEW experimental/string_view>
#define RB_INC_FCNTL_H fcntl.h>
#define RB_INC_FILESYSTEM filesystem>
#define RB_INC_FORWARD_LIST forward_list>
#define RB_INC_FSTREAM fstream>
#define RB_INC_FUNCTIONAL functional>
#define RB_INC_GNU_LIBC_VERSION_H gnu/libc-version.h>
#define RB_INC_GNU_LIB_NAMES_H gnu/lib-names.h>
#define RB_INC_IFADDRS_H ifaddrs.h>
#define RB_INC_IOMANIP iomanip>
#define RB_INC_IOSFWD iosfwd>
#define RB_INC_IOSTREAM iostream>
#define RB_INC_IPHLPAPI_H stddef.h>
#define RB_INC_JEMALLOC_H jemalloc/jemalloc.h>
/* #undef RB_INC_JSAPI_H */
/* #undef RB_INC_JSFRIENDAPI_H */
/* #undef RB_INC_JS_CONVERSIONS_H */
#define RB_INC_LIMITS limits>
#define RB_INC_LINK_H link.h>
#define RB_INC_LINUX_AIO_ABI_H linux/aio_abi.h>
#define RB_INC_LINUX_HW_BREAKPOINT_H linux/hw_breakpoint.h>
#define RB_INC_LINUX_ICMP_H linux/icmp.h>
#define RB_INC_LINUX_IO_URING_H linux/io_uring.h>
#define RB_INC_LINUX_MAGIC_H linux/magic.h>
#define RB_INC_LINUX_PERF_EVENT_H linux/perf_event.h>
#define RB_INC_LIST list>
#define RB_INC_LOCALE locale>
#define RB_INC_LZ4_H stddef.h>
#define RB_INC_MAGICKPP_H Magick++.h>
#define RB_INC_MAGICK_API_H magick/api.h>
#define RB_INC_MAGICK_WAND_API_H wand/wand_api.h>
#define RB_INC_MAGIC_H magic.h>
#define RB_INC_MALLOC_H malloc.h>
#define RB_INC_MAP map>
#define RB_INC_MEMORY memory>
#define RB_INC_MEMORY_RESOURCE memory_resource>
#define RB_INC_MUTEX mutex>
#define RB_INC_NETDB_H netdb.h>
#define RB_INC_NEW new>
#define RB_INC_NUMERIC numeric>
#define RB_INC_OPENSSL_ASN1_H openssl/asn1.h>
#define RB_INC_OPENSSL_DH_H openssl/dh.h>
#define RB_INC_OPENSSL_EC_H openssl/ec.h>
#define RB_INC_OPENSSL_ERR_H openssl/err.h>
#define RB_INC_OPENSSL_EVP_H openssl/evp.h>
#define RB_INC_OPENSSL_HMAC_H openssl/hmac.h>
#define RB_INC_OPENSSL_RIPEMD_H openssl/ripemd.h>
#define RB_INC_OPENSSL_RSA_H openssl/rsa.h>
#define RB_INC_OPENSSL_SHA_H openssl/sha.h>
#define RB_INC_OPENSSL_SSL_H openssl/ssl.h>
#define RB_INC_OPENSSL_TLS1_H openssl/tls1.h>
#define RB_INC_OPENSSL_X509_H openssl/x509.h>
#define RB_INC_OPTIONAL optional>
#define RB_INC_QUEUE queue>
#define RB_INC_RANDOM random>
#define RB_INC_REGEX regex>
#define RB_INC_SET set>
#define RB_INC_SHARED_MUTEX shared_mutex>
#define RB_INC_SIGNAL_H signal.h>
#define RB_INC_SNAPPY_H stddef.h>
/* #undef RB_INC_SODIUM_H */
#define RB_INC_SSTREAM sstream>
#define RB_INC_STACK stack>
#define RB_INC_STDARG_H stdarg.h>
#define RB_INC_STRING string>
#define RB_INC_STRING_VIEW string_view>
#define RB_INC_SYSTEM_ERROR system_error>
#define RB_INC_SYS_AUXV_H sys/auxv.h>
#define RB_INC_SYS_EVENTFD_H sys/eventfd.h>
#define RB_INC_SYS_INOTIFY_H sys/inotify.h>
#define RB_INC_SYS_IOCTL_H sys/ioctl.h>
#define RB_INC_SYS_MMAN_H sys/mman.h>
#define RB_INC_SYS_RESOURCE_H sys/resource.h>
#define RB_INC_SYS_STATFS_H sys/statfs.h>
#define RB_INC_SYS_STATVFS_H sys/statvfs.h>
#define RB_INC_SYS_STAT_H sys/stat.h>
#define RB_INC_SYS_SYSCALL_H sys/syscall.h>
#define RB_INC_SYS_SYSINFO_H sys/sysinfo.h>
#define RB_INC_SYS_SYSMACROS_H sys/sysmacros.h>
#define RB_INC_SYS_TIME_H sys/time.h>
#define RB_INC_SYS_TYPES_H sys/types.h>
#define RB_INC_SYS_UTSNAME_H sys/utsname.h>
#define RB_INC_THREAD thread>
#define RB_INC_TYPEINDEX typeindex>
#define RB_INC_TYPE_TRAITS type_traits>
#define RB_INC_UNISTD_H unistd.h>
#define RB_INC_UNORDERED_MAP unordered_map>
#define RB_INC_UTILITY utility>
#define RB_INC_VALGRIND_CALLGRIND_H stddef.h>
#define RB_INC_VALGRIND_MEMCHECK_H stddef.h>
#define RB_INC_VALGRIND_VALGRIND_H stddef.h>
#define RB_INC_VARIANT variant>
#define RB_INC_VECTOR vector>
#define RB_INC_WINDOWS_H stddef.h>
#define RB_INC_WINSOCK2_H stddef.h>
#define RB_INC_WS2TCPIP_H stddef.h>
#define RB_INC_X86INTRIN_H x86intrin.h>
#define RB_INC_ZLIB_H zlib.h>
#define RB_LIB_DIR "@out@/lib"
#define RB_LOCALSTATE_DIR "@out@/var"
#define RB_LOG_DIR "@out@/var/log/construct"
#define RB_LOG_LEVEL 4
#define RB_MAGIC_FILE "${file.out}/share/misc/magic.mgc"
#define RB_MODULE_DIR "@out@/lib/modules"
#define RB_MXID_MAXLEN 255
#define RB_OPTIMIZE_LEVEL 3
#define RB_OS "${stdenv.system}"
#define RB_PREFIX "@out@"
#define RB_RUN_DIR "/construct"
#define RB_TIME_CONFIGURED 0
/* #undef RB_UNTUNED */
#define RB_WEBAPP_DIR "@out@/share/webapp"
#define SIZEOF_CHAR 1
#define SIZEOF_DOUBLE 8
#define SIZEOF_FLOAT 4
#define SIZEOF_INT 4
#define SIZEOF_INT128_T 0
#define SIZEOF_LONG 8
#define SIZEOF_LONG_DOUBLE 16
#define SIZEOF_LONG_LONG 8
#define SIZEOF_SHORT 2
#define SIZEOF_UINT128_T 0
#define SIZEOF___INT128 16
#define SIZEOF___INT128_T 16
#define SIZEOF___UINT128_T 16
#define STDC_HEADERS 1
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
/* Enable threading extensions on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# define __EXTENSIONS__ 1
#endif
/* Version number of package */
#define VERSION "1.0-dev"
/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
significant byte first (like Motorola and SPARC, unlike Intel). */
#if defined AC_APPLE_UNIVERSAL_BUILD
# if defined __BIG_ENDIAN__
# define WORDS_BIGENDIAN 1
# endif
#else
# ifndef WORDS_BIGENDIAN
/* # undef WORDS_BIGENDIAN */
# endif
#endif
'';
buildInputs = with pkgs; [
boost openssl
];
buildPhase = with pkgs; ''
mkdir -p $out
cp -Lr --no-preserve=all ${source}/include/ircd $out/
cd $out/ircd
substituteAll ${configHeader} config.h
$CXX -std=gnu++17 ${CXXOPTS} -x c++-header -pthread -fpch-deps -o ircd.h.gch -DHAVE_CONFIG_H -DPCH -DNDEBUG ${WARNOPTS} -I$out ircd.h
$CXX -std=gnu++17 ${CXXOPTS} -x c++-header -pthread -fpch-deps -fPIC -o asio.h.gch -DHAVE_CONFIG_H -DPCH -DNDEBUG ${WARNOPTS} -I$out -I${boost.dev}/include -DPIC asio.h
$CXX -std=gnu++17 ${CXXOPTS} -x c++-header -pthread -fpch-deps -o matrix.h.gch -DHAVE_CONFIG_H -DPCH -DNDEBUG ${WARNOPTS} -I$out matrix.h
cp matrix.h matrix.pic.h
$CXX -std=gnu++17 ${CXXOPTS} -x c++-header -pthread -fpch-deps -fPIC -o matrix.pic.h.gch -DHAVE_CONFIG_H -DPCH -DNDEBUG ${WARNOPTS} -I$out -DPIC matrix.pic.h
$CXX -std=gnu++17 ${CXXOPTS} -x c++-header -pthread -fpch-deps -I${boost.dev}/include -fPIC -o spirit.h.gch -DHAVE_CONFIG_H -DPCH -DNDEBUG ${WARNOPTS} -I$out -DPIC spirit.h
cp ircd.h ircd.pic.h
$CXX -std=gnu++17 ${CXXOPTS} -x c++-header -pthread -fpch-deps -fPIC -o ircd.pic.h.gch -DHAVE_CONFIG_H -DPCH -DNDEBUG ${WARNOPTS} -I$out -DPIC ircd.pic.h
'';
installPhase = "true";
dontStrip = true;
};
installPhase = let
ircdUnitCXX = ccFile: loFile: extraArgs: "${pkgs.runCommandCC (lib.strings.sanitizeDerivationName loFile) (buildArgs buildInputs nativeBuildInputs) ''
libtool --tag=CXX --mode=compile $CXX -std=gnu++17 -DHAVE_CONFIG_H -DIRCD_UNIT ${extraArgs} \
-I${includes} -include ircd/ircd.pic.h -DPCH -DNDEBUG ${WARNOPTS} -ftls-model=initial-exec -pthread ${CXXOPTS} \
-c -o $out/${loFile} ${source}/ircd/${ccFile}
''}/${loFile}";
ircdUnitCC = asFile: loFile: extraArgs: "${pkgs.runCommandCC (lib.strings.sanitizeDerivationName loFile) (buildArgs buildInputs nativeBuildInputs) ''
libtool --tag=CC --mode=compile $CC -DHAVE_CONFIG_H -DIRCD_UNIT ${extraArgs} \
-I${includes} -DPCH -DNDEBUG ${WARNOPTS} \
-c -o $out/${loFile} ${source}/ircd/${asFile}
''}/${loFile}";
ircdLD = loFiles: laFile: extraArgs: "${pkgs.runCommandCC (lib.strings.sanitizeDerivationName laFile) (buildArgs buildInputs nativeBuildInputs) ''
libtool --tag=CXX --mode=link g++ -std=gnu++17 -ftls-model=initial-exec -pthread ${CXXOPTS} -version-info 3:2:0 \
-Wl,--no-undefined-version -Wl,--weak-unresolved-symbols -Wl,--unresolved-symbols=ignore-in-shared-libs \
-Wl,--wrap=pthread_create -Wl,--wrap=pthread_join -Wl,--wrap=pthread_timedjoin_np -Wl,--wrap=pthread_self -Wl,--wrap=pthread_setname_np \
-Wl,-z,nodelete -Wl,-z,nodlopen -Wl,-z,lazy -L${pkgs.boost.out}/lib \
-Wl,-fuse-ld=gold -Wl,--gdb-index -Wl,--warn-common -Wl,--warn-execstack -Wl,--detect-odr-violations -Wl,--rosegment -Wl,-z,noexecstack -Wl,-z,combreloc -Wl,-z,text-unlikely-segment \
-o $out/${laFile} ${lib.concatStringsSep " " loFiles} ${extraArgs} \
-lrocksdb -lboost_coroutine -lboost_context -lboost_thread -lboost_filesystem -lboost_chrono -lboost_system -lssl -lcrypto -L${pkgs.libsodium.out}/lib -lsodium -lmagic -lz -lpthread -latomic -lrocksdb -ldl
''}/${laFile}";
matrixUnitCXX = ccFile: loFile: extraArgs: "${pkgs.runCommandCC (lib.strings.sanitizeDerivationName loFile) (buildArgs buildInputs nativeBuildInputs) ''
libtool --tag=CXX --mode=compile $CXX -std=gnu++17 -DHAVE_CONFIG_H -DIRCD_UNIT -DIRCD_MATRIX_UNIT ${extraArgs} \
-I${includes} -include ircd/matrix.pic.h -include ircd/mods/mapi.h -DPCH -DNDEBUG ${WARNOPTS} -ftls-model=local-dynamic -pthread ${CXXOPTS} \
-c -o $out/${loFile} ${source}/matrix/${ccFile}
''}/${loFile}";
matrixLD = loFiles: laFile: extraArgs: "${pkgs.runCommandCC (lib.strings.sanitizeDerivationName laFile) (buildArgs buildInputs nativeBuildInputs) ''
libtool --tag=CXX --mode=link g++ -std=gnu++17 -pthread -ftls-model=local-dynamic ${CXXOPTS} -version-info 0:1:0 \
-Wl,--no-undefined-version -Wl,--allow-shlib-undefined -Wl,--unresolved-symbols=ignore-in-shared-libs -Wl,-z,lazy -L${dirOf ircd}/ \
-Wl,-fuse-ld=gold -Wl,--gdb-index -Wl,--warn-common -Wl,--warn-execstack -Wl,--detect-odr-violations -Wl,--rosegment -Wl,-z,noexecstack -Wl,-z,combreloc -Wl,-z,text-unlikely-segment \
-o $out/${laFile} ${lib.concatStringsSep " " loFiles} ${extraArgs} -lrocksdb -ldl ${if useJemalloc then "-ljemalloc" else ""}
''}/${laFile}";
moduleUnitCXX = subdir: ccFile: loFile: extraArgs: "${pkgs.runCommandCC (lib.strings.sanitizeDerivationName loFile) (buildArgs buildInputs nativeBuildInputs) ''
libtool --tag=CXX --mode=compile $CXX -std=gnu++17 -DHAVE_CONFIG_H -DIRCD_UNIT -DIRCD_UNIT_MODULE ${extraArgs} \
-I${includes} -include ${includes}/ircd/matrix.pic.h -include ${includes}/ircd/mods/mapi.h -DPCH -DNDEBUG ${WARNOPTS} -ftls-model=global-dynamic -pthread ${CXXOPTS} \
-I ${source}/modules/${lib.concatStringsSep "/" subdir} -c -o $out/${loFile} ${source}/modules/${lib.concatStringsSep "/" subdir}/${ccFile}
''}/${loFile}";
moduleLD = loFiles: laFile: extraArgs: "${pkgs.runCommandCC (lib.strings.sanitizeDerivationName laFile) (buildArgs buildInputs nativeBuildInputs) ''
libtool --tag=CXX --mode=link $CXX -std=gnu++17 -ftls-model=global-dynamic -pthread ${CXXOPTS} -module -avoid-version \
-Wl,--allow-shlib-undefined -Wl,-z,lazy -L${dirOf ircd}/ -L${dirOf matrix}/ \
-Wl,-fuse-ld=gold -Wl,--gdb-index -Wl,--warn-common -Wl,--warn-execstack -Wl,--detect-odr-violations -Wl,--rosegment -Wl,-z,noexecstack -Wl,-z,combreloc -Wl,-z,text-unlikely-segment \
-o $out/${laFile} ${lib.concatStringsSep " " loFiles} -lrocksdb -ldl ${extraArgs}
''}/${laFile}";
constructUnitCXX = ccFile: obFile: extraArgs: "${pkgs.runCommandCC (lib.strings.sanitizeDerivationName obFile) (buildArgs buildInputs nativeBuildInputs) ''
mkdir -p $out
$CXX -std=gnu++17 -DHAVE_CONFIG_H -I${includes} -I${pkgs.boost.dev}/include -DPCH -DNDEBUG ${WARNOPTS} -ftls-model=initial-exec -pthread ${CXXOPTS} \
-c -o $out/${obFile} ${source}/construct/${ccFile} ${extraArgs}
''}/${obFile}";
constructLD = obFiles: exFile: "${pkgs.runCommandCC (lib.strings.sanitizeDerivationName exFile) (buildArgs buildInputs nativeBuildInputs) ''
libtool --tag=CXX --mode=link g++ -std=gnu++17 -ftls-model=initial-exec -pthread ${CXXOPTS} -dlopen self \
-Wl,--warn-execstack -Wl,--warn-common -Wl,--detect-odr-violations -Wl,--unresolved-symbols=report-all -Wl,--allow-shlib-undefined -Wl,--dynamic-list-data -Wl,--dynamic-list-cpp-new -Wl,--dynamic-list-cpp-typeinfo -Wl,--rosegment -Wl,-z,noexecstack \
-L${dirOf ircd}/ ${lib.concatMapStringsSep " " (mod: "-L${dirOf mod}/") modules} -L${pkgs.boost.out}/lib \
-Wl,-fuse-ld=gold -Wl,--gdb-index -Wl,--warn-common -Wl,--warn-execstack -Wl,--detect-odr-violations -Wl,--rosegment -Wl,-z,noexecstack -Wl,-z,combreloc -Wl,-z,text-unlikely-segment \
-o $out/bin/${exFile} ${lib.concatStringsSep " " obFiles} -lircd -lboost_coroutine -lboost_context -lboost_thread -lboost_filesystem -lboost_chrono -lboost_system -lssl -lcrypto -lpthread -latomic -lrocksdb -ldl
''}/bin/${exFile}";
versionDefs = let
versions = {
BRANDING_VERSION = lib.substring 0 9 rev;
RB_VERSION = lib.substring 0 9 rev;
RB_VERSION_BRANCH = "master";
RB_VERSION_COMMIT = rev;
RB_VERSION_TAG = rev;
};
in lib.concatStringsSep " " (lib.mapAttrsToList (k: v: "-U${k} -D'${k}=\"${v}\"'") versions);
ircd = with pkgs; ircdLD [
"${ircdUnitCXX "assert.cc" "assert.lo" ""}"
"${ircdUnitCXX "info.cc" "info.lo" "${versionDefs}"}"
"${ircdUnitCXX "allocator.cc" "allocator.lo" ""}"
"${ircdUnitCXX "allocator_gnu.cc" "allocator_gnu.lo" ""}"
"${ircdUnitCXX "allocator_je.cc" "allocator_je.lo" ""}"
"${ircdUnitCXX "vg.cc" "vg.lo" ""}"
"${ircdUnitCXX "exception.cc" "exception.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "util.cc" "util.lo" ""}"
"${ircdUnitCXX "demangle.cc" "demangle.lo" ""}"
"${ircdUnitCXX "backtrace.cc" "backtrace.lo" ""}"
"${ircdUnitCXX "locale.cc" "locale.lo" "-I${boost.dev}/include"}"
"${ircdUnitCXX "timedate.cc" "timedate.lo" ""}"
"${ircdUnitCXX "lex_cast.cc" "lex_cast.lo" "-I${boost.dev}/include"}"
"${ircdUnitCXX "stringops.cc" "stringops.lo" ""}"
"${ircdUnitCXX "globular.cc" "globular.lo" ""}"
"${ircdUnitCXX "tokens.cc" "tokens.lo" "-I${boost.dev}/include"}"
"${ircdUnitCXX "parse.cc" "parse.lo" "-I${boost.dev}/include -include ircd/spirit.h -fno-var-tracking -fno-var-tracking-assignments -femit-struct-debug-baseonly"}"
"${ircdUnitCXX "rand.cc" "rand.lo" ""}"
"${ircdUnitCXX "base.cc" "base.lo" "-I${boost.dev}/include"}"
"${ircdUnitCXX "crh.cc" "crh.lo" ""}"
"${ircdUnitCXX "fmt.cc" "fmt.lo" "-I${boost.dev}/include -include ircd/spirit.h -fno-var-tracking -fno-var-tracking-assignments -femit-struct-debug-baseonly"}"
"${ircdUnitCXX "json.cc" "json.lo" "-I${boost.dev}/include -include ircd/spirit.h -fno-var-tracking -fno-var-tracking-assignments -femit-struct-debug-baseonly"}"
"${ircdUnitCXX "cbor.cc" "cbor.lo" ""}"
"${ircdUnitCXX "conf.cc" "conf.lo" ""}"
"${ircdUnitCXX "stats.cc" "stats.lo" ""}"
"${ircdUnitCXX "logger.cc" "logger.lo" ""}"
"${ircdUnitCXX "run.cc" "run.lo" ""}"
"${ircdUnitCXX "magic.cc" "magic.lo" ""}"
"${ircdUnitCXX "sodium.cc" "sodium.lo" ""}"
# pbc.cc would go here
"${ircdUnitCXX "openssl.cc" "openssl.lo" ""}"
"${ircdUnitCXX "rfc1459.cc" "rfc1459.lo" "-I${boost.dev}/include -include ircd/spirit.h -fno-var-tracking -fno-var-tracking-assignments -femit-struct-debug-baseonly"}"
"${ircdUnitCXX "rfc3986.cc" "rfc3986.lo" "-I${boost.dev}/include -include ircd/spirit.h -fno-var-tracking -fno-var-tracking-assignments -femit-struct-debug-baseonly"}"
"${ircdUnitCXX "rfc1035.cc" "rfc1035.lo" ""}"
"${ircdUnitCXX "http.cc" "http.lo" "-I${boost.dev}/include -include ircd/spirit.h -fno-var-tracking -fno-var-tracking-assignments -femit-struct-debug-baseonly"}"
"${ircdUnitCXX "http2.cc" "http2.lo" ""}"
"${ircdUnitCXX "prof.cc" "prof.lo" "-I${boost.dev}/include"}"
"${ircdUnitCXX "prof_linux.cc" "prof_linux.lo" ""}"
"${ircdUnitCXX "fs.cc" "fs.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "fs_path.cc" "fs_path.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "ios.cc" "ios.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCC "ctx_x86_64.S" "ctx_x86_64.lo " "-pipe"}"
"${ircdUnitCXX "ctx.cc" "ctx.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "ctx_eh.cc" "ctx_eh.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "ctx_ole.cc" "ctx_ole.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "ctx_posix.cc" "ctx_posix.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "fs_aio.cc" "fs_aio.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "fs_iou.cc" "fs_iou.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "mods.cc" "mods.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "mods_ldso.cc" "mods_ldso.lo" ""}"
"${ircdUnitCXX "db_port.cc" "db_port.lo" ""}"
"${ircdUnitCXX "db_fixes.cc" "db_fixes.lo" "-I${rocksdb.src} -I${rocksdb.out}/include"}"
"${ircdUnitCXX "db_env.cc" "db_env.lo" ""}"
"${ircdUnitCXX "db.cc" "db.lo" ""}"
"${ircdUnitCXX "net.cc" "net.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "net_addrs.cc" "net_addrs.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "net_dns.cc" "net_dns.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "net_dns_netdb.cc" "net_dns_netdb.lo" ""}"
"${ircdUnitCXX "net_dns_cache.cc" "net_dns_cache.lo" ""}"
"${ircdUnitCXX "net_dns_resolver.cc" "net_dns_resolver.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "net_listener.cc" "net_listener.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "net_listener_udp.cc" "net_listener_udp.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "server.cc" "server.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "client.cc" "client.lo" "-I${boost.dev}/include -include ircd/asio.h"}"
"${ircdUnitCXX "resource.cc" "resource.lo" ""}"
"${ircdUnitCXX "ircd.cc" "ircd.lo" "${versionDefs}"}"
] "libircd.la" "-rpath $out/lib";
matrix = with pkgs; matrixLD [
"${matrixUnitCXX "name.cc" "name.lo" ""}"
"${matrixUnitCXX "id.cc" "id.lo" "-I${boost.dev}/include -include ircd/spirit.h"}"
"${matrixUnitCXX "dbs.cc" "dbs.lo" ""}"
"${matrixUnitCXX "dbs_event_idx.cc" "dbs_event_idx.lo" ""}"
"${matrixUnitCXX "dbs_event_json.cc" "dbs_event_json.lo" ""}"
"${matrixUnitCXX "dbs_event_column.cc" "dbs_event_column.lo" ""}"
"${matrixUnitCXX "dbs_event_refs.cc" "dbs_event_refs.lo" ""}"
"${matrixUnitCXX "dbs_event_horizon.cc" "dbs_event_horizon.lo" ""}"
"${matrixUnitCXX "dbs_event_sender.cc" "dbs_event_sender.lo" ""}"
"${matrixUnitCXX "dbs_event_type.cc" "dbs_event_type.lo" ""}"
"${matrixUnitCXX "dbs_event_state.cc" "dbs_event_state.lo" ""}"
"${matrixUnitCXX "dbs_room_events.cc" "dbs_room_events.lo" ""}"
"${matrixUnitCXX "dbs_room_type.cc" "dbs_room_type.lo" ""}"
"${matrixUnitCXX "dbs_room_state.cc" "dbs_room_state.lo" ""}"
"${matrixUnitCXX "dbs_room_state_space.cc" "dbs_room_state_space.lo" ""}"
"${matrixUnitCXX "dbs_room_joined.cc" "dbs_room_joined.lo" ""}"
"${matrixUnitCXX "dbs_room_head.cc" "dbs_room_head.lo" ""}"
"${matrixUnitCXX "dbs_desc.cc" "dbs_desc.lo" ""}"
"${matrixUnitCXX "hook.cc" "hook.lo" ""}"
"${matrixUnitCXX "event.cc" "event.lo" ""}"
"${matrixUnitCXX "event_cached.cc" "event_cached.lo" ""}"
"${matrixUnitCXX "event_conforms.cc" "event_conforms.lo" ""}"
"${matrixUnitCXX "event_fetch.cc" "event_fetch.lo" ""}"
"${matrixUnitCXX "event_get.cc" "event_get.lo" ""}"
"${matrixUnitCXX "event_id.cc" "event_id.lo" ""}"
"${matrixUnitCXX "event_index.cc" "event_index.lo" ""}"
"${matrixUnitCXX "event_prefetch.cc" "event_prefetch.lo" ""}"
"${matrixUnitCXX "event_prev.cc" "event_prev.lo" ""}"
"${matrixUnitCXX "event_refs.cc" "event_refs.lo" ""}"
"${matrixUnitCXX "room.cc" "room.lo" ""}"
"${matrixUnitCXX "room_auth.cc" "room_auth.lo" ""}"
"${matrixUnitCXX "room_aliases.cc" "room_aliases.lo" ""}"
"${matrixUnitCXX "room_bootstrap.cc" "room_bootstrap.lo" ""}"
"${matrixUnitCXX "room_create.cc" "room_create.lo" ""}"
"${matrixUnitCXX "room_events.cc" "room_events.lo" ""}"
"${matrixUnitCXX "room_head.cc" "room_head.lo" ""}"
"${matrixUnitCXX "room_join.cc" "room_join.lo" ""}"
"${matrixUnitCXX "room_leave.cc" "room_leave.lo" ""}"
"${matrixUnitCXX "room_visible.cc" "room_visible.lo" ""}"
"${matrixUnitCXX "room_members.cc" "room_members.lo" ""}"
"${matrixUnitCXX "room_origins.cc" "room_origins.lo" ""}"
"${matrixUnitCXX "room_type.cc" "room_type.lo" ""}"
"${matrixUnitCXX "room_power.cc" "room_power.lo" ""}"
"${matrixUnitCXX "room_state.cc" "room_state.lo" ""}"
"${matrixUnitCXX "room_state_history.cc" "room_state_history.lo" ""}"
"${matrixUnitCXX "room_state_space.cc" "room_state_space.lo" ""}"
"${matrixUnitCXX "room_server_acl.cc" "room_server_acl.lo" ""}"
"${matrixUnitCXX "room_stats.cc" "room_stats.lo" ""}"
"${matrixUnitCXX "user.cc" "user.lo" ""}"
"${matrixUnitCXX "user_account_data.cc" "user_account_data.lo" ""}"
"${matrixUnitCXX "user_devices.cc" "user_devices.lo" ""}"
"${matrixUnitCXX "user_events.cc" "user_events.lo" ""}"
"${matrixUnitCXX "user_filter.cc" "user_filter.lo" ""}"
"${matrixUnitCXX "user_ignores.cc" "user_ignores.lo" ""}"
"${matrixUnitCXX "user_mitsein.cc" "user_mitsein.lo" ""}"
"${matrixUnitCXX "user_notifications.cc" "user_notifications.lo" ""}"
"${matrixUnitCXX "user_profile.cc" "user_profile.lo" ""}"
"${matrixUnitCXX "user_pushers.cc" "user_pushers.lo" ""}"
"${matrixUnitCXX "user_pushrules.cc" "user_pushrules.lo" ""}"
"${matrixUnitCXX "user_register.cc" "user_register.lo" ""}"
"${matrixUnitCXX "user_room_account_data.cc" "user_room_account_data.lo" ""}"
"${matrixUnitCXX "user_room_tags.cc" "user_room_tags.lo" ""}"
"${matrixUnitCXX "user_rooms.cc" "user_rooms.lo" ""}"
"${matrixUnitCXX "user_tokens.cc" "user_tokens.lo" ""}"
"${matrixUnitCXX "acquire.cc" "acquire.lo" ""}"
"${matrixUnitCXX "bridge.cc" "bridge.lo" ""}"
"${matrixUnitCXX "breadcrumb_rooms.cc" "breadcrumb_rooms.lo" ""}"
"${matrixUnitCXX "burst.cc" "burst.lo" ""}"
"${matrixUnitCXX "display_name.cc" "display_name.lo" ""}"
"${matrixUnitCXX "event_append.cc" "event_append.lo" ""}"
"${matrixUnitCXX "event_horizon.cc" "event_horizon.lo" ""}"
"${matrixUnitCXX "events.cc" "events.lo" ""}"
"${matrixUnitCXX "fed.cc" "fed.lo" ""}"
"${matrixUnitCXX "feds.cc" "feds.lo" ""}"
"${matrixUnitCXX "fetch.cc" "fetch.lo" ""}"
"${matrixUnitCXX "gossip.cc" "gossip.lo" ""}"
"${matrixUnitCXX "request.cc" "request.lo" ""}"
"${matrixUnitCXX "keys.cc" "keys.lo" ""}"
"${matrixUnitCXX "node.cc" "node.lo" ""}"
"${matrixUnitCXX "presence.cc" "presence.lo" ""}"
"${matrixUnitCXX "pretty.cc" "pretty.lo" ""}"
"${matrixUnitCXX "receipt.cc" "receipt.lo" ""}"
"${matrixUnitCXX "rooms.cc" "rooms.lo" ""}"
"${matrixUnitCXX "membership.cc" "membership.lo" ""}"
"${matrixUnitCXX "rooms_summary.cc" "rooms_summary.lo" ""}"
"${matrixUnitCXX "sync.cc" "sync.lo" ""}"
"${matrixUnitCXX "typing.cc" "typing.lo" ""}"
"${matrixUnitCXX "users.cc" "users.lo" ""}"
"${matrixUnitCXX "users_servers.cc" "users_servers.lo" ""}"
"${matrixUnitCXX "error.cc" "error.lo" ""}"
"${matrixUnitCXX "push.cc" "push.lo" ""}"
"${matrixUnitCXX "filter.cc" "filter.lo" ""}"
"${matrixUnitCXX "txn.cc" "txn.lo" ""}"
"${matrixUnitCXX "vm.cc" "vm.lo" ""}"
"${matrixUnitCXX "vm_eval.cc" "vm_eval.lo" ""}"
"${matrixUnitCXX "vm_inject.cc" "vm_inject.lo" ""}"
"${matrixUnitCXX "vm_execute.cc" "vm_execute.lo" ""}"
"${matrixUnitCXX "init_backfill.cc" "init_backfill.lo" ""}"
"${matrixUnitCXX "homeserver.cc" "homeserver.lo" ""}"
"${matrixUnitCXX "resource.cc" "resource.lo" ""}"
"${matrixUnitCXX "matrix.cc" "matrix.lo" ""}"
] "libircd_matrix.la" "-rpath $out/lib";
modules = with pkgs; [
(moduleLD [
"${moduleUnitCXX [] "m_breadcrumb_rooms.cc" "m_breadcrumb_rooms.lo" ""}"
] "m_breadcrumb_rooms.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_bridge.cc" "m_bridge.lo" ""}"
] "m_bridge.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_command.cc" "m_command.lo" ""}"
] "m_command.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_control.cc" "m_control.lo" ""}"
] "m_control.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_device.cc" "m_device.lo" ""}"
] "m_device.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_device_list_update.cc" "m_device_list_update.lo" ""}"
] "m_device_list_update.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_direct.cc" "m_direct.lo" ""}"
] "m_direct.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_direct_to_device.cc" "m_direct_to_device.lo" ""}"
] "m_direct_to_device.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_ignored_user_list.cc" "m_ignored_user_list.lo" ""}"
] "m_ignored_user_list.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_listen.cc" "m_listen.lo" ""}"
] "m_listen.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_noop.cc" "m_noop.lo" ""}"
] "m_noop.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_presence.cc" "m_presence.lo" ""}"
] "m_presence.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_profile.cc" "m_profile.lo" ""}"
] "m_profile.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_push.cc" "m_push.lo" ""}"
] "m_push.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_receipt.cc" "m_receipt.lo" ""}"
] "m_receipt.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_relation.cc" "m_relation.lo" ""}"
] "m_relation.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_aliases.cc" "m_room_aliases.lo" ""}"
] "m_room_aliases.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_canonical_alias.cc" "m_room_canonical_alias.lo" ""}"
] "m_room_canonical_alias.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_create.cc" "m_room_create.lo" ""}"
] "m_room_create.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_history_visibility.cc" "m_room_history_visibility.lo" ""}"
] "m_room_history_visibility.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_join_rules.cc" "m_room_join_rules.lo" ""}"
] "m_room_join_rules.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_member.cc" "m_room_member.lo" ""}"
] "m_room_member.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_message.cc" "m_room_message.lo" ""}"
] "m_room_message.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_name.cc" "m_room_name.lo" ""}"
] "m_room_name.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_power_levels.cc" "m_room_power_levels.lo" ""}"
] "m_room_power_levels.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_redaction.cc" "m_room_redaction.lo" ""}"
] "m_room_redaction.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_server_acl.cc" "m_room_server_acl.lo" ""}"
] "m_room_server_acl.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_room_third_party_invite.cc" "m_room_third_party_invite.lo" ""}"
] "m_room_third_party_invite.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "m_vm_fetch.cc" "m_vm_fetch.lo" ""}"
] "m_vm_fetch.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "net_dns_cache.cc" "net_dns_cache.lo" ""}"
] "net_dns_cache.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "stats.cc" "stats.lo" ""}"
] "stats.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "console.cc" "console.lo" "${versionDefs}"}"
] "console.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "web_root.cc" "web_root.lo" ""}"
] "web_root.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "web_hook.cc" "web_hook.lo" ""}"
] "web_hook.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "well_known.cc" "well_known.lo" ""}"
] "well_known.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "admin" ] "users.cc" "users.lo" ""}"
] "admin_users.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "admin" ] "deactivate.cc" "deactivate.lo" ""}"
] "admin_deactivate.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "versions.cc" "versions.lo" ""}"
] "client_versions.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "events.cc" "events.lo" ""}"
] "client_events.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "login.cc" "login.lo" ""}"
] "client_login.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "logout.cc" "logout.lo" ""}"
] "client_logout.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "sync.cc" "sync.lo" ""}"
] "client_sync.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "presence.cc" "presence.lo" ""}"
] "client_presence.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "profile.cc" "profile.lo" ""}"
] "client_profile.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "devices.cc" "devices.lo" ""}"
] "client_devices.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "pushers.cc" "pushers.lo" ""}"
] "client_pushers.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "publicrooms.cc" "publicrooms.lo" ""}"
] "client_publicrooms.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "createroom.cc" "createroom.lo" ""}"
] "client_createroom.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "pushrules.cc" "pushrules.lo" ""}"
] "client_pushrules.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "join.cc" "join.lo" ""}"
] "client_join.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "publicised_groups.cc" "publicised_groups.lo" ""}"
] "client_publicised_groups.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "initialsync.cc" "initialsync.lo" ""}"
] "client_initialsync.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "search.cc" "search.lo" ""}"
] "client_search.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "joined_groups.cc" "joined_groups.lo" ""}"
] "client_joined_groups.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "register_available.cc" "register_available.lo" ""}"
] "client_register_available.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "capabilities.cc" "capabilities.lo" ""}"
] "client_capabilities.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "send_to_device.cc" "send_to_device.lo" ""}"
] "client_send_to_device.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "delete_devices.cc" "delete_devices.lo" ""}"
] "client_delete_devices.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "notifications.cc" "notifications.lo" ""}"
] "client_notifications.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "register_email.cc" "register_email.lo" ""}"
] "client_register_email.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" ] "register.cc" "register.lo" ""}"
] "client_register.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "rooms" ] "messages.cc" "messages.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "state.cc" "state.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "members.cc" "members.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "context.cc" "context.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "event.cc" "event.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "send.cc" "send.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "typing.cc" "typing.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "redact.cc" "redact.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "receipt.cc" "receipt.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "join.cc" "join.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "invite.cc" "invite.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "leave.cc" "leave.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "forget.cc" "forget.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "kick.cc" "kick.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "ban.cc" "ban.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "unban.cc" "unban.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "read_markers.cc" "read_markers.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "initialsync.cc" "initialsync.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "report.cc" "report.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "relations.cc" "relations.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "upgrade.cc" "upgrade.lo" ""}"
"${moduleUnitCXX [ "client" "rooms" ] "rooms.cc" "rooms.lo" ""}"
] "client_rooms.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "user" ] "openid.cc" "openid.lo" ""}"
"${moduleUnitCXX [ "client" "user" ] "filter.cc" "filter.lo" ""}"
"${moduleUnitCXX [ "client" "user" ] "account_data.cc" "account_data.lo" ""}"
"${moduleUnitCXX [ "client" "user" ] "rooms.cc" "rooms.lo" ""}"
"${moduleUnitCXX [ "client" "user" ] "user.cc" "user.lo" ""}"
] "client_user.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "directory" ] "room.cc" "room.lo" ""}"
] "client_directory_room.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "directory" ] "user.cc" "user.lo" ""}"
] "client_directory_user.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "directory" "list" ] "room.cc" "room.lo" ""}"
] "client_directory_list_room.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "directory" "list" ] "appservice.cc" "appservice.lo" ""}"
] "client_directory_list_appservice.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "voip" ] "turnserver.cc" "turnserver.lo" ""}"
] "client_voip_turnserver.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "thirdparty" ] "protocols.cc" "protocols.lo" ""}"
] "client_thirdparty_protocols.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" ] "account_data.cc" "account_data.lo" ""}"
] "client_sync_account_data.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" ] "presence.cc" "presence.lo" ""}"
] "client_sync_presence.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" ] "rooms.cc" "rooms.lo" ""}"
] "client_sync_rooms.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" ] "to_device.cc" "to_device.lo" ""}"
] "client_sync_to_device.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" ] "device_lists.cc" "device_lists.lo" ""}"
] "client_sync_device_lists.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" ] "device_one_time_keys_count.cc" "device_one_time_keys_count.lo" ""}"
] "client_sync_device_one_time_keys_count.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" "rooms" ] "account_data.cc" "account_data.lo" ""}"
] "client_sync_rooms_account_data.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" "rooms" ] "ephemeral.cc" "ephemeral.lo" ""}"
] "client_sync_rooms_ephemeral.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" "rooms" ] "state.cc" "state.lo" ""}"
] "client_sync_rooms_state.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" "rooms" ] "timeline.cc" "timeline.lo" ""}"
] "client_sync_rooms_timeline.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" "rooms" ] "unread_notifications.cc" "unread_notifications.lo" ""}"
] "client_sync_rooms_unread_notifications.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" "rooms" ] "summary.cc" "summary.lo" ""}"
] "client_sync_rooms_summary.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" "rooms" ] "ephemeral/receipt.cc" "ephemeral/receipt.lo" ""}"
] "client_sync_rooms_ephemeral_receipt.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "sync" "rooms" ] "ephemeral/typing.cc" "ephemeral/typing.lo" ""}"
] "client_sync_rooms_ephemeral_typing.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "keys" ] "upload.cc" "upload.lo" ""}"
] "client_keys_upload.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "keys" ] "query.cc" "query.lo" ""}"
] "client_keys_query.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "keys" ] "claim.cc" "claim.lo" ""}"
] "client_keys_claim.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "keys" ] "changes.cc" "changes.lo" ""}"
] "client_keys_changes.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "keys" ] "signatures/upload.cc" "signatures/upload.lo" ""}"
] "client_keys_signatures_upload.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "keys" ] "device_signing/upload.cc" "device_signing/upload.lo" ""}"
] "client_keys_device_signing_upload.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "room_keys" ] "version.cc" "version.lo" ""}"
] "client_room_keys_version.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "room_keys" ] "keys.cc" "keys.lo" ""}"
] "client_room_keys_keys.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "client" "account" ] "3pid.cc" "3pid.lo" ""}"
"${moduleUnitCXX [ "client" "account" ] "whoami.cc" "whoami.lo" ""}"
"${moduleUnitCXX [ "client" "account" ] "password.cc" "password.lo" ""}"
"${moduleUnitCXX [ "client" "account" ] "deactivate.cc" "deactivate.lo" ""}"
"${moduleUnitCXX [ "client" "account" ] "account.cc" "account.lo" ""}"
] "client_account.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "send.cc" "send.lo" ""}"
] "federation_send.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "event.cc" "event.lo" ""}"
] "federation_event.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "get_missing_events.cc" "get_missing_events.lo" ""}"
] "federation_get_missing_events.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "get_groups_publicised.cc" "get_groups_publicised.lo" ""}"
] "federation_get_groups_publicised.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "version.cc" "version.lo" ""}"
] "federation_version.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "sender.cc" "sender.lo" ""}"
] "federation_sender.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "query.cc" "query.lo" ""}"
] "federation_query.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "invite.cc" "invite.lo" ""}"
] "federation_invite.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "invite2.cc" "invite2.lo" ""}"
] "federation_invite2.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "make_join.cc" "make_join.lo" ""}"
] "federation_make_join.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "send_join.cc" "send_join.lo" ""}"
] "federation_send_join.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "state_ids.cc" "state_ids.lo" ""}"
] "federation_state_ids.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "state.cc" "state.lo" ""}"
] "federation_state.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "make_leave.cc" "make_leave.lo" ""}"
] "federation_make_leave.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "send_leave.cc" "send_leave.lo" ""}"
] "federation_send_leave.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "backfill.cc" "backfill.lo" ""}"
] "federation_backfill.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "backfill_ids.cc" "backfill_ids.lo" ""}"
] "federation_backfill_ids.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "event_auth.cc" "event_auth.lo" ""}"
] "federation_event_auth.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "query_auth.cc" "query_auth.lo" ""}"
] "federation_query_auth.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "publicrooms.cc" "publicrooms.lo" ""}"
] "federation_publicrooms.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "user_devices.cc" "user_devices.lo" ""}"
] "federation_user_devices.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "user_keys_query.cc" "user_keys_query.lo" ""}"
] "federation_user_keys_query.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "user_keys_claim.cc" "user_keys_claim.lo" ""}"
] "federation_user_keys_claim.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "federation" ] "rooms.cc" "rooms.lo" ""}"
] "federation_rooms.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "identity" ] "v1.cc" "v1.lo" ""}"
] "identity_v1.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "identity" ] "pubkey.cc" "pubkey.lo" ""}"
] "identity_pubkey.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "key" ] "server.cc" "server.lo" ""}"
] "key_server.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "key" ] "query.cc" "query.lo" ""}"
] "key_query.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [ "media" ] "download.cc" "download.lo" ""}"
"${moduleUnitCXX [ "media" ] "upload.cc" "upload.lo" ""}"
"${moduleUnitCXX [ "media" ] "thumbnail.cc" "thumbnail.lo" ""}"
"${moduleUnitCXX [ "media" ] "preview_url.cc" "preview_url.lo" ""}"
"${moduleUnitCXX [ "media" ] "config.cc" "config.lo" ""}"
"${moduleUnitCXX [ "media" ] "media.cc" "media.lo" ""}"
] "media_media.la" "-rpath $out/lib/modules")
(moduleLD [
"${moduleUnitCXX [] "magick.cc" "magick_la-magick.lo" "-I${graphicsmagick.out}/include/GraphicsMagick"}"
] "magick.la" "-rpath $out/lib/modules -lGraphicsMagick++ -lGraphicsMagickWand -lGraphicsMagick")
];
construct = with pkgs; constructLD [
"${constructUnitCXX "construct.cc" "construct.o" "${versionDefs}"}"
"${constructUnitCXX "lgetopt.cc" "lgetopt.o" ""}"
"${constructUnitCXX "console.cc" "console.o" ""}"
"${constructUnitCXX "signals.cc" "signals.o" ""}"
] "construct";
in with pkgs; ''
mkdir -p $out
ln -s ${includes} $out/include
mkdir -p $out/share
ln -s ${source}/share/webapp $out/share/webapp
mkdir -p $out/lib
libtool --mode=install ${coreutils.out}/bin/install -c ${ircd} $out/lib
libtool --mode=install ${coreutils.out}/bin/install -c ${matrix} $out/lib
mkdir -p $out/lib/modules
libtool --mode=install ${coreutils.out}/bin/install -c ${lib.concatStringsSep " " modules} $out/lib/modules
mkdir -p $out/bin
libtool --mode=install ${coreutils.out}/bin/install -c ${construct} $out/bin
wrapProgram $out/bin/construct \
--set-default ircd_web_root_path ${riot-web.out} \
--set-default ircd_fs_base_prefix $out \
--set-default ircd_fs_base_bin $out/bin \
--set-default ircd_fs_base_lib $out/lib \
--set-default ircd_fs_base_modules $out/lib/modules \
--argv0 $out/bin/construct
makeWrapper ${gdb}/bin/gdb $out/bin/construct-gdb \
--set-default ircd_web_root_path $out/share/webapp \
--set-default ircd_fs_base_prefix $out \
--set-default ircd_fs_base_bin $out/bin \
--set-default ircd_fs_base_lib $out/lib \
--set-default ircd_fs_base_modules $out/lib/modules \
--add-flags "$out/bin/.construct-wrapped"
'';
doInstallCheck = true;
installCheckPhase = ''
chmod -R a-w $out
mkdir -p /tmp/cache/construct
export RUNTIME_DIRECTORY=/tmp/run/construct
export STATE_DIRECTORY=/tmp/lib/construct
export LOGS_DIRECTORY=/tmp/log/construct
cd /tmp/cache/construct
$out/bin/construct -smoketest localhost
'';
#outputs = [ "bin" "dev" "out" "doc" ];
#separateDebugInfo = true;
enableParallelBuilding = true;
}