mirror of
https://github.com/matrix-construct/construct
synced 2024-12-25 23:14:13 +01:00
configure/ircd: Overhaul install system directory related.
This commit is contained in:
parent
e388d28585
commit
8fb580aaf5
8 changed files with 161 additions and 234 deletions
199
configure.ac
199
configure.ac
|
@ -9,7 +9,7 @@ AC_INIT([construct], [1.0])
|
||||||
AC_GNU_SOURCE
|
AC_GNU_SOURCE
|
||||||
AC_USE_SYSTEM_EXTENSIONS
|
AC_USE_SYSTEM_EXTENSIONS
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_PREFIX_DEFAULT($HOME/ircd)
|
AC_PREFIX_DEFAULT([/])
|
||||||
|
|
||||||
AC_PATH_PROG(AUTOMAKE, automake)
|
AC_PATH_PROG(AUTOMAKE, automake)
|
||||||
AC_PATH_PROG(ACLOCAL, aclocal)
|
AC_PATH_PROG(ACLOCAL, aclocal)
|
||||||
|
@ -713,8 +713,7 @@ AM_COND_IF(LINUX,
|
||||||
AC_ARG_ENABLE(aio, AC_HELP_STRING([--disable-aio], [Disable kernel AIO support]),
|
AC_ARG_ENABLE(aio, AC_HELP_STRING([--disable-aio], [Disable kernel AIO support]),
|
||||||
[
|
[
|
||||||
aio=$enableval
|
aio=$enableval
|
||||||
],
|
], [
|
||||||
[
|
|
||||||
aio=yes
|
aio=yes
|
||||||
])
|
])
|
||||||
], [])
|
], [])
|
||||||
|
@ -736,180 +735,96 @@ dnl
|
||||||
PKG_PROG_PKG_CONFIG
|
PKG_PROG_PKG_CONFIG
|
||||||
|
|
||||||
if test "$prefix" = "NONE"; then
|
if test "$prefix" = "NONE"; then
|
||||||
AC_DEFINE_UNQUOTED(RB_PREFIX, "$ac_default_prefix", [Prefix where librb is installed.])
|
prefix="$ac_default_prefix"
|
||||||
else
|
else
|
||||||
dnl Don't get bitten by Cygwin's stupidity if the user specified
|
dnl Don't get bitten by Cygwin's stupidity if the user specified
|
||||||
dnl a custom prefix with a trailing slash
|
dnl a custom prefix with a trailing slash
|
||||||
prefix=`echo $prefix | sed 's/\/$//'`
|
prefix=`echo $prefix | sed 's/\/$//'`
|
||||||
AC_DEFINE_UNQUOTED(RB_PREFIX, "$prefix", [Prefix where librb is installed.])
|
|
||||||
AC_SUBST(RB_PREFIX)
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
RB_DEFINE_UNQUOTED(PREFIX, ["$prefix"], [Prefix of IRCd install])
|
||||||
|
AC_SUBST_DIR([prefix])
|
||||||
|
|
||||||
if test "$prefix" = "NONE"; then
|
dnl
|
||||||
AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$ac_default_prefix", [Prefix where the ircd is installed.])
|
dnl bindir
|
||||||
else
|
dnl
|
||||||
dnl Don't get bitten by Cygwin's stupidity if the user specified
|
|
||||||
dnl a custom prefix with a trailing slash
|
|
||||||
prefix=`echo $prefix | sed 's/\/$//'`
|
|
||||||
AC_DEFINE_UNQUOTED(IRCD_PREFIX, "$prefix", [Prefix where the ircd is installed.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
RB_DEFINE_UNQUOTED([BIN_DIR], ["$(bindir)"], [Directory where binary executables are to be found.])
|
||||||
|
AC_SUBST_DIR([bindir])
|
||||||
|
|
||||||
AC_ARG_ENABLE([fhs-paths],
|
dnl
|
||||||
[AS_HELP_STRING([--enable-fhs-paths], [Use more FHS-like pathnames (for packagers).])],
|
dnl libdir
|
||||||
[],
|
dnl
|
||||||
[dnl detect if the user appears to want --enable-fhs-paths
|
|
||||||
AS_IF([test "$libexecdir" = '${exec_prefix}/libexec' && \
|
|
||||||
test "$localstatedir" = '${prefix}/var' && \
|
|
||||||
test "$libdir" = '${exec_prefix}/lib'],
|
|
||||||
[enable_fhs_paths=no],
|
|
||||||
[enable_fhs_paths=yes])
|
|
||||||
])
|
|
||||||
dnl use directory structure of cached as default (hack)
|
|
||||||
AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
|
||||||
[dnl Avoid name collisions.
|
|
||||||
pkglibexecdir='${libexecdir}/${PACKAGE_TARNAME}'
|
|
||||||
rundir=${rundir-'${prefix}/run'}
|
|
||||||
pkgrundir='${rundir}/${PACKAGE_TARNAME}'
|
|
||||||
pkglocalstatedir='${localstatedir}/${PACKAGE_TARNAME}'
|
|
||||||
AC_DEFINE([ENABLE_FHS_PATHS], [1], [Uncomment if FHS pathnames are enabled])],
|
|
||||||
[libexecdir='${bindir}'
|
|
||||||
pkglibexecdir='${libexecdir}'
|
|
||||||
rundir='${sysconfdir}'
|
|
||||||
pkgrundir='${rundir}'
|
|
||||||
localstatedir='${prefix}'
|
|
||||||
pkglocalstatedir='${sysconfdir}'])
|
|
||||||
pkglibdir='${libdir}/${PACKAGE_TARNAME}'
|
|
||||||
AC_SUBST([pkglibdir])
|
|
||||||
AC_SUBST([rundir])
|
|
||||||
AC_SUBST([pkgrundir])
|
|
||||||
AC_SUBST([pkglocalstatedir])
|
|
||||||
AC_DEFINE_DIR([PKGLOCALSTATEDIR], [pkglocalstatedir], [[Directory in which to store state, such as ban database]])
|
|
||||||
AC_SUBST([pkglibexecdir])
|
|
||||||
AC_DEFINE_DIR([PKGLIBEXECDIR], [pkglibexecdir], [Directory where binaries the IRCd itself spawns live])
|
|
||||||
|
|
||||||
|
RB_DEFINE_UNQUOTED([LIB_DIR], ["$(libdir)"], [Prefix where libs are installed.])
|
||||||
|
AC_SUBST_DIR([libdir])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl localstatedir
|
||||||
|
dnl
|
||||||
|
|
||||||
|
dnl Avoid name collisions.
|
||||||
|
RB_DEFINE_UNQUOTED([LOCALSTATE_DIR], ["$(localstatedir)"], [Prefix where db and logs go.])
|
||||||
|
AC_SUBST_DIR([localstatedir])
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Check for --with-confdir [deprecated, use --sysconfdir instead]
|
dnl Check for --with-confdir [deprecated, use --sysconfdir instead]
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
AC_ARG_WITH([confdir],
|
RB_DEFINE_UNQUOTED([CONF_DIR], ["$(sysconfdir)"], [Prefix where config files are installed.])
|
||||||
[AC_HELP_STRING([--with-confdir=DIR],
|
AC_SUBST_DIR([sysconfdir])
|
||||||
[Directory to install config files [deprecated, use --sysconfdir instead].])],
|
|
||||||
[ sysconfdir=`echo $withval | sed 's/\/$//'` ],
|
|
||||||
[ confdir='etc' ])
|
|
||||||
RB_DEFINE_UNQUOTED([ETC_DIR], ["${prefix}/${confdir}"], [Prefix where config files are installed.])
|
|
||||||
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Check for --with-bindir
|
dnl Check for --with-dbdir
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to modify binary directory])
|
AC_MSG_CHECKING([whether to modify database directory])
|
||||||
AC_ARG_WITH(bindir,
|
AC_ARG_WITH(dbdir, AC_HELP_STRING([--with-dbdir=DIR], [Directory where databases are located]),
|
||||||
AC_HELP_STRING([--with-bindir=DIR],
|
[
|
||||||
[Directory where binary executables are placed.]),
|
AC_MSG_RESULT(yes)
|
||||||
[ logdir=`echo $withval | sed 's/\/$//'`
|
dbdir=`echo $withval | sed 's/\/$//'`
|
||||||
AC_MSG_RESULT(yes)],
|
], [
|
||||||
[ AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
AC_MSG_RESULT(no)
|
||||||
[bindir="${prefix}/bin"],
|
dbdir="${localstatedir}/db/${PACKAGE_TARNAME}"
|
||||||
[bindir="${prefix}/bin"])
|
])
|
||||||
AC_MSG_RESULT(no)])
|
|
||||||
RB_DEFINE_UNQUOTED([BIN_DIR], ["${bindir}"], [Directory where binary executables are to be found.])
|
|
||||||
AC_SUBST_DIR([bindir])
|
|
||||||
|
|
||||||
|
RB_DEFINE_UNQUOTED([DB_DIR], ["$dbdir"], [Directory where databases are located])
|
||||||
|
AC_SUBST_DIR([dbdir])
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Check for --with-logdir
|
dnl Check for --with-logdir
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to modify logdir])
|
AC_MSG_CHECKING([whether to modify logdir])
|
||||||
AC_ARG_WITH(logdir,
|
AC_ARG_WITH(logdir, AC_HELP_STRING([--with-logdir=DIR], [Directory where to write logfiles.]),
|
||||||
AC_HELP_STRING([--with-logdir=DIR],
|
[
|
||||||
[Directory where to write logfiles.]),
|
AC_MSG_RESULT(yes)
|
||||||
[ logdir=`echo $withval | sed 's/\/$//'`
|
logdir=`echo $withval | sed 's/\/$//'`
|
||||||
AC_MSG_RESULT(yes)],
|
], [
|
||||||
[ AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
AC_MSG_RESULT(no)
|
||||||
[logdir="${prefix}/var/log"],
|
logdir="${localstatedir}/log/${PACKAGE_TARNAME}"
|
||||||
[logdir="${prefix}/var/${PACKAGE_TARNAME}/log"])
|
])
|
||||||
AC_MSG_RESULT(no)])
|
|
||||||
RB_DEFINE_UNQUOTED([LOG_DIR], ["${logdir}"], [Prefix where to write logfiles.])
|
RB_DEFINE_UNQUOTED([LOG_DIR], ["$logdir"], [Prefix where to write logfiles.])
|
||||||
AC_SUBST_DIR([logdir])
|
AC_SUBST_DIR([logdir])
|
||||||
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Check for --with-helpdir
|
|
||||||
dnl
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to modify helpdir])
|
|
||||||
AC_ARG_WITH(helpdir,
|
|
||||||
AC_HELP_STRING([--with-helpdir=DIR],
|
|
||||||
[Directory to install help files.]),
|
|
||||||
[ helpdir=`echo $withval | sed 's/\/$//'`
|
|
||||||
AC_MSG_RESULT(yes) ],
|
|
||||||
[ AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
|
||||||
[helpdir="${prefix}/share/help"],
|
|
||||||
[helpdir="${prefix}/share/${PACKAGE_TARNAME}/help"])
|
|
||||||
AC_MSG_RESULT(no) ])
|
|
||||||
RB_DEFINE_UNQUOTED([HELP_DIR], ["${helpdir}"], [Prefix where help files are installed.])
|
|
||||||
AC_SUBST_DIR([helpdir])
|
|
||||||
|
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Check for --with-moduledir
|
dnl Check for --with-moduledir
|
||||||
dnl
|
dnl
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to modify moduledir])
|
AC_MSG_CHECKING([whether to modify moduledir])
|
||||||
AC_ARG_WITH(moduledir,
|
AC_ARG_WITH(moduledir, [AC_HELP_STRING([--with-moduledir=DIR], [Directory to install modules.])],
|
||||||
[AC_HELP_STRING([--with-moduledir=DIR],
|
[
|
||||||
[Directory to install modules.])],
|
AC_MSG_RESULT(yes)
|
||||||
[ moduledir=`echo $withval | sed 's/\/$//'`
|
moduledir=`echo $withval | sed 's/\/$//'`
|
||||||
AC_MSG_RESULT(yes)],
|
], [
|
||||||
[ AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
AC_MSG_RESULT(no)
|
||||||
[moduledir="${prefix}/lib/modules"],
|
moduledir="${libdir}/modules/${PACKAGE_TARNAME}"
|
||||||
[moduledir="${prefix}/lib/${PACKAGE_TARNAME}/modules"])
|
])
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
])
|
RB_DEFINE_UNQUOTED([MODULE_DIR], ["$moduledir"], [Prefix where modules are installed.])
|
||||||
RB_DEFINE_UNQUOTED([MODULE_DIR], ["${moduledir}"], [Prefix where modules are installed.])
|
|
||||||
AC_SUBST_DIR([moduledir])
|
AC_SUBST_DIR([moduledir])
|
||||||
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Check for --with-rundir
|
|
||||||
dnl
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether or modify rundir])
|
|
||||||
AC_ARG_WITH([rundir],
|
|
||||||
[AC_HELP_STRING([--with-rundir=DIR],
|
|
||||||
[Directory in which to store pidfile.])],
|
|
||||||
[AC_MSG_RESULT([yes])
|
|
||||||
rundir=`echo $withval | sed 's/\/$//'`],
|
|
||||||
[AC_MSG_RESULT([no])
|
|
||||||
AS_IF([test "x$enable_fhs_paths" = "xyes"],
|
|
||||||
[rundir="${prefix}/var/run"],
|
|
||||||
[rundir="${prefix}/${PACKAGE_TARNAME}/run"])])
|
|
||||||
AC_SUBST([rundir])
|
|
||||||
AC_DEFINE_DIR([PKGRUNDIR], ["${rundir}"], [Directory to store pidfile in.])
|
|
||||||
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl Check for --with-program-prefix
|
|
||||||
dnl
|
|
||||||
|
|
||||||
dnl Installed utility program prefixes (does not affect binaries
|
|
||||||
dnl installed into pkglibexecdir)
|
|
||||||
AC_MSG_CHECKING([for program prefix])
|
|
||||||
AC_ARG_WITH([program-prefix],
|
|
||||||
[AS_HELP_STRING([--with-program-prefix=], [If set, programs installed into PATH will be installed with names prefixed by this prefix.])],
|
|
||||||
[test "x$with_program_prefix" = "xno" && with_program_prefix=],
|
|
||||||
[with_program_prefix=])
|
|
||||||
AC_MSG_RESULT(["$with_program_prefix"])
|
|
||||||
PROGRAM_PREFIX="$with_program_prefix"
|
|
||||||
AC_SUBST([PROGRAM_PREFIX])
|
|
||||||
AC_DEFINE_UNQUOTED([PROGRAM_PREFIX], ["$with_program_prefix"], [String with which all programs intended to be in PATH are prefixed.])
|
|
||||||
|
|
||||||
|
|
||||||
dnl ***************************************************************************
|
dnl ***************************************************************************
|
||||||
dnl
|
dnl
|
||||||
dnl Third party
|
dnl Third party
|
||||||
|
|
|
@ -92,7 +92,7 @@ try
|
||||||
// argument or fall back to the default.
|
// argument or fall back to the default.
|
||||||
const std::string confpath
|
const std::string confpath
|
||||||
{
|
{
|
||||||
configfile?: fs::get(fs::IRCD_CONF)
|
configfile?: ""
|
||||||
};
|
};
|
||||||
|
|
||||||
// Associates libircd with our io_context and posts the initial routines
|
// Associates libircd with our io_context and posts the initial routines
|
||||||
|
|
|
@ -36,38 +36,17 @@ namespace ircd::fs
|
||||||
{
|
{
|
||||||
struct aio;
|
struct aio;
|
||||||
struct init;
|
struct init;
|
||||||
|
enum index :int;
|
||||||
|
|
||||||
IRCD_EXCEPTION(ircd::error, error)
|
IRCD_EXCEPTION(ircd::error, error)
|
||||||
IRCD_EXCEPTION(error, filesystem_error)
|
IRCD_EXCEPTION(error, filesystem_error)
|
||||||
|
|
||||||
constexpr auto DPATH = IRCD_PREFIX;
|
constexpr size_t PATH_MAX { 2048 };
|
||||||
constexpr auto BINPATH = IRCD_PREFIX "/bin";
|
|
||||||
constexpr auto ETCPATH = RB_ETC_DIR;
|
|
||||||
constexpr auto LOGPATH = RB_LOG_DIR;
|
|
||||||
constexpr auto MODPATH = RB_MODULE_DIR;
|
|
||||||
constexpr auto CPATH = RB_ETC_DIR "/ircd.conf"; // ircd.conf file
|
|
||||||
constexpr auto SPATH = RB_BIN_DIR "/" BRANDING_NAME; // ircd executable
|
|
||||||
constexpr auto DBPATH = PKGLOCALSTATEDIR "/db"; // database prefix
|
|
||||||
|
|
||||||
// Below are the elements for default paths.
|
extern aio *aioctx;
|
||||||
enum index
|
|
||||||
{
|
|
||||||
PREFIX,
|
|
||||||
BIN,
|
|
||||||
ETC,
|
|
||||||
LOG,
|
|
||||||
LIBEXEC,
|
|
||||||
MODULES,
|
|
||||||
IRCD_CONF,
|
|
||||||
IRCD_EXEC,
|
|
||||||
DB,
|
|
||||||
|
|
||||||
_NUM_
|
|
||||||
};
|
|
||||||
|
|
||||||
const char *get(index) noexcept;
|
|
||||||
const char *name(index) noexcept;
|
|
||||||
|
|
||||||
|
string_view get(index) noexcept;
|
||||||
|
string_view name(index) noexcept;
|
||||||
std::string make_path(const vector_view<const string_view> &);
|
std::string make_path(const vector_view<const string_view> &);
|
||||||
|
|
||||||
bool exists(const string_view &path);
|
bool exists(const string_view &path);
|
||||||
|
@ -80,17 +59,29 @@ namespace ircd::fs
|
||||||
|
|
||||||
bool rename(std::nothrow_t, const string_view &old, const string_view &new_);
|
bool rename(std::nothrow_t, const string_view &old, const string_view &new_);
|
||||||
void rename(const string_view &old, const string_view &new_);
|
void rename(const string_view &old, const string_view &new_);
|
||||||
|
|
||||||
bool remove(std::nothrow_t, const string_view &path);
|
bool remove(std::nothrow_t, const string_view &path);
|
||||||
bool remove(const string_view &path);
|
bool remove(const string_view &path);
|
||||||
|
|
||||||
std::string cwd();
|
|
||||||
void chdir(const string_view &path);
|
void chdir(const string_view &path);
|
||||||
bool mkdir(const string_view &path);
|
bool mkdir(const string_view &path);
|
||||||
|
|
||||||
extern aio *aioctx;
|
std::string cwd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// elements for default paths.
|
||||||
|
enum ircd::fs::index
|
||||||
|
:int
|
||||||
|
{
|
||||||
|
PREFIX,
|
||||||
|
BIN,
|
||||||
|
CONF,
|
||||||
|
DB,
|
||||||
|
LOG,
|
||||||
|
MODULES,
|
||||||
|
|
||||||
|
_NUM_
|
||||||
|
};
|
||||||
|
|
||||||
#include "fd.h"
|
#include "fd.h"
|
||||||
#include "read.h"
|
#include "read.h"
|
||||||
#include "write.h"
|
#include "write.h"
|
||||||
|
|
|
@ -139,4 +139,5 @@ libircd_la_SOURCES += \
|
||||||
endif
|
endif
|
||||||
|
|
||||||
install-data-local:
|
install-data-local:
|
||||||
test -d $(prefix)/@logdir@ || mkdir -p $(prefix)/@logdir@
|
test -d $(logdir) || mkdir -p $(logdir)
|
||||||
|
test -d $(dbdir) || mkdir -p $(dbdir)
|
||||||
|
|
19
ircd/conf.cc
19
ircd/conf.cc
|
@ -10,8 +10,10 @@
|
||||||
|
|
||||||
namespace ircd::conf
|
namespace ircd::conf
|
||||||
{
|
{
|
||||||
|
extern const string_view default_filename;
|
||||||
|
|
||||||
std::string _config;
|
std::string _config;
|
||||||
static std::string read_json_file(string_view filename);
|
static std::string read_json_file(std::string filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: X
|
//TODO: X
|
||||||
|
@ -21,10 +23,16 @@ ircd::conf::config
|
||||||
_config
|
_config
|
||||||
};
|
};
|
||||||
|
|
||||||
|
decltype(ircd::conf::default_filename)
|
||||||
|
ircd::conf::default_filename
|
||||||
|
{
|
||||||
|
"ircd.conf"
|
||||||
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
ircd::conf::init(const string_view &filename)
|
ircd::conf::init(const string_view &filename)
|
||||||
{
|
{
|
||||||
_config = read_json_file(filename);
|
_config = read_json_file(std::string{filename});
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
@ -149,7 +157,7 @@ const
|
||||||
//
|
//
|
||||||
|
|
||||||
std::string
|
std::string
|
||||||
ircd::conf::read_json_file(string_view filename)
|
ircd::conf::read_json_file(std::string filename)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if(!filename.empty())
|
if(!filename.empty())
|
||||||
|
@ -159,7 +167,10 @@ try
|
||||||
};
|
};
|
||||||
|
|
||||||
if(filename.empty())
|
if(filename.empty())
|
||||||
filename = fs::CPATH;
|
filename = fs::make_path(
|
||||||
|
{
|
||||||
|
fs::get(fs::CONF), conf::default_filename
|
||||||
|
});
|
||||||
|
|
||||||
if(!fs::exists(filename))
|
if(!fs::exists(filename))
|
||||||
return {};
|
return {};
|
||||||
|
|
119
ircd/fs.cc
119
ircd/fs.cc
|
@ -19,10 +19,6 @@ namespace filesystem = boost::filesystem;
|
||||||
|
|
||||||
namespace ircd::fs
|
namespace ircd::fs
|
||||||
{
|
{
|
||||||
enum { NAME, PATH };
|
|
||||||
using ent = std::pair<std::string, std::string>;
|
|
||||||
extern const std::array<ent, num_of<index>()> paths;
|
|
||||||
|
|
||||||
filesystem::path path(std::string);
|
filesystem::path path(std::string);
|
||||||
filesystem::path path(const string_view &);
|
filesystem::path path(const string_view &);
|
||||||
filesystem::path path(const vector_view<const string_view> &);
|
filesystem::path path(const vector_view<const string_view> &);
|
||||||
|
@ -33,20 +29,6 @@ decltype(ircd::fs::aioctx)
|
||||||
ircd::fs::aioctx
|
ircd::fs::aioctx
|
||||||
{};
|
{};
|
||||||
|
|
||||||
decltype(ircd::fs::paths)
|
|
||||||
ircd::fs::paths
|
|
||||||
{{
|
|
||||||
{ "prefix", DPATH },
|
|
||||||
{ "binary dir", BINPATH },
|
|
||||||
{ "config", ETCPATH },
|
|
||||||
{ "log", LOGPATH },
|
|
||||||
{ "libexec dir", PKGLIBEXECDIR },
|
|
||||||
{ "modules", MODPATH },
|
|
||||||
{ "ircd.conf", CPATH },
|
|
||||||
{ "ircd binary", SPATH },
|
|
||||||
{ "db", DBPATH },
|
|
||||||
}};
|
|
||||||
|
|
||||||
ircd::fs::init::init()
|
ircd::fs::init::init()
|
||||||
{
|
{
|
||||||
#ifdef IRCD_USE_AIO
|
#ifdef IRCD_USE_AIO
|
||||||
|
@ -71,6 +53,55 @@ noexcept
|
||||||
assert(!aioctx);
|
assert(!aioctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Compile-time path index
|
||||||
|
//
|
||||||
|
|
||||||
|
namespace ircd::fs
|
||||||
|
{
|
||||||
|
struct sysent;
|
||||||
|
extern const std::array<struct sysent, num_of<index>()> syspaths;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ircd::fs::sysent
|
||||||
|
{
|
||||||
|
string_view name;
|
||||||
|
string_view path;
|
||||||
|
};
|
||||||
|
|
||||||
|
decltype(ircd::fs::syspaths)
|
||||||
|
ircd::fs::syspaths
|
||||||
|
{{
|
||||||
|
{ "prefix", RB_PREFIX },
|
||||||
|
{ "binary dir", RB_BIN_DIR },
|
||||||
|
{ "database", RB_DB_DIR },
|
||||||
|
{ "conf", RB_CONF_DIR },
|
||||||
|
{ "log", RB_LOG_DIR },
|
||||||
|
{ "modules", RB_MODULE_DIR },
|
||||||
|
}};
|
||||||
|
|
||||||
|
ircd::string_view
|
||||||
|
ircd::fs::get(index index)
|
||||||
|
noexcept try
|
||||||
|
{
|
||||||
|
return syspaths.at(index).path;
|
||||||
|
}
|
||||||
|
catch(const std::out_of_range &e)
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
ircd::string_view
|
||||||
|
ircd::fs::name(index index)
|
||||||
|
noexcept try
|
||||||
|
{
|
||||||
|
return syspaths.at(index).name;
|
||||||
|
}
|
||||||
|
catch(const std::out_of_range &e)
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// fs/stdin.h
|
// fs/stdin.h
|
||||||
|
@ -355,7 +386,7 @@ catch(const std::exception &e)
|
||||||
|
|
||||||
namespace ircd::fs
|
namespace ircd::fs
|
||||||
{
|
{
|
||||||
thread_local char path_buf[2048];
|
thread_local char path_buf[PATH_MAX];
|
||||||
static const char *path_str(const string_view &);
|
static const char *path_str(const string_view &);
|
||||||
static uint posix_flags(const std::ios::open_mode &mode);
|
static uint posix_flags(const std::ios::open_mode &mode);
|
||||||
}
|
}
|
||||||
|
@ -481,6 +512,20 @@ noexcept(false)
|
||||||
// fs.h / misc
|
// fs.h / misc
|
||||||
//
|
//
|
||||||
|
|
||||||
|
std::string
|
||||||
|
ircd::fs::cwd()
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return filesystem::current_path().string();
|
||||||
|
}
|
||||||
|
catch(const filesystem::filesystem_error &e)
|
||||||
|
{
|
||||||
|
throw filesystem_error
|
||||||
|
{
|
||||||
|
"%s", e.what()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ircd::fs::chdir(const string_view &path)
|
ircd::fs::chdir(const string_view &path)
|
||||||
try
|
try
|
||||||
|
@ -509,20 +554,6 @@ catch(const filesystem::filesystem_error &e)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string
|
|
||||||
ircd::fs::cwd()
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return filesystem::current_path().string();
|
|
||||||
}
|
|
||||||
catch(const filesystem::filesystem_error &e)
|
|
||||||
{
|
|
||||||
throw filesystem_error
|
|
||||||
{
|
|
||||||
"%s", e.what()
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
ircd::fs::remove(const string_view &path)
|
ircd::fs::remove(const string_view &path)
|
||||||
try
|
try
|
||||||
|
@ -703,25 +734,3 @@ ircd::fs::path(std::string s)
|
||||||
{
|
{
|
||||||
return filesystem::path(std::move(s));
|
return filesystem::path(std::move(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
|
||||||
ircd::fs::get(index index)
|
|
||||||
noexcept try
|
|
||||||
{
|
|
||||||
return std::get<PATH>(paths.at(index)).c_str();
|
|
||||||
}
|
|
||||||
catch(const std::out_of_range &e)
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
ircd::fs::name(index index)
|
|
||||||
noexcept try
|
|
||||||
{
|
|
||||||
return std::get<NAME>(paths.at(index)).c_str();
|
|
||||||
}
|
|
||||||
catch(const std::out_of_range &e)
|
|
||||||
{
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
|
@ -473,7 +473,7 @@ namespace ircd::mods
|
||||||
decltype(ircd::mods::modroot)
|
decltype(ircd::mods::modroot)
|
||||||
ircd::mods::modroot
|
ircd::mods::modroot
|
||||||
{
|
{
|
||||||
ircd::fs::get(ircd::fs::MODULES)
|
std::string{ircd::fs::get(ircd::fs::MODULES)}
|
||||||
};
|
};
|
||||||
|
|
||||||
decltype(ircd::mods::paths)
|
decltype(ircd::mods::paths)
|
||||||
|
|
|
@ -1878,7 +1878,7 @@ console_cmd__db__list(opt &out, const string_view &line)
|
||||||
{
|
{
|
||||||
const auto name
|
const auto name
|
||||||
{
|
{
|
||||||
replace(lstrip(lstrip(path, fs::DBPATH), '/'), "/", ":")
|
replace(lstrip(lstrip(path, fs::get(fs::DB)), '/'), "/", ":")
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto &d
|
const auto &d
|
||||||
|
|
Loading…
Reference in a new issue