This isn't actually an optional extra: the build simply won't work
without it, so the ifdeffery is just unnecessary complication. Remove
it all.
Also, remove `#include <pcre.h>' from files which don't actually need
it.
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
-#if HAVE_PCRE_H
-# include <pcre.h>
-#endif
#include <ctype.h>
#if HAVE_GCRYPT_H
# include <gcrypt.h>
#include <ctype.h>
#if HAVE_GCRYPT_H
# include <gcrypt.h>
mem_init();
network_init();
mem_init();
network_init();
/* garbage-collect PCRE's memory */
pcre_malloc = xmalloc;
pcre_free = xfree;
/* garbage-collect PCRE's memory */
pcre_malloc = xmalloc;
pcre_free = xfree;
if(!setlocale(LC_CTYPE, "")) disorder_fatal(errno, "error calling setlocale");
if(!setlocale(LC_TIME, "")) disorder_fatal(errno, "error calling setlocale");
while((n = getopt_long(argc, argv, "+hVc:dHlNu:p:", options, 0)) >= 0) {
if(!setlocale(LC_CTYPE, "")) disorder_fatal(errno, "error calling setlocale");
if(!setlocale(LC_TIME, "")) disorder_fatal(errno, "error calling setlocale");
while((n = getopt_long(argc, argv, "+hVc:dHlNu:p:", options, 0)) >= 0) {
#if HAVE_NETDB_H
# include <netdb.h>
#endif
#if HAVE_NETDB_H
# include <netdb.h>
#endif
-#if HAVE_PCRE_H
-# include <pcre.h>
-#endif
#include "log.h"
#include "mem.h"
#include "log.h"
#include "mem.h"
#if HAVE_LANGINFO_H
# include <langinfo.h>
#endif
#if HAVE_LANGINFO_H
# include <langinfo.h>
#endif
-#if HAVE_PCRE_H
-# include <pcre.h>
-#endif
#if HAVE_SHLOBJ_H
# include <Shlobj.h>
#endif
#if HAVE_SHLOBJ_H
# include <Shlobj.h>
#endif
#include "charset.h"
#include "defs.h"
#include "printf.h"
#include "charset.h"
#include "defs.h"
#include "printf.h"
-#if HAVE_PCRE_H
-# include "regsub.h"
-#endif
#include "signame.h"
#include "authhash.h"
#include "vector.h"
#include "signame.h"
#include "authhash.h"
#include "vector.h"
static int set_namepart(const struct config_state *cs,
const struct conf *whoami,
int nvec, char **vec) {
static int set_namepart(const struct config_state *cs,
const struct conf *whoami,
int nvec, char **vec) {
static int set_rights(const struct config_state *cs,
const struct conf *whoami,
static int set_rights(const struct config_state *cs,
const struct conf *whoami,
static void free_namepartlist(struct config *c,
const struct conf *whoami) {
struct namepartlist *npl = ADDRESS(c, struct namepartlist);
static void free_namepartlist(struct config *c,
const struct conf *whoami) {
struct namepartlist *npl = ADDRESS(c, struct namepartlist);
static void free_netaddress(struct config *c,
const struct conf *whoami) {
static void free_netaddress(struct config *c,
const struct conf *whoami) {
type_stringlist_accum = { set_stringlist_accum, free_stringlistlist },
type_string_accum = { set_string_accum, free_stringlist },
type_sample_format = { set_sample_format, free_none },
type_stringlist_accum = { set_stringlist_accum, free_stringlistlist },
type_string_accum = { set_string_accum, free_stringlist },
type_sample_format = { set_sample_format, free_none },
type_namepart = { set_namepart, free_namepartlist },
type_transform = { set_transform, free_transformlist },
type_namepart = { set_namepart, free_namepartlist },
type_transform = { set_transform, free_transformlist },
type_netaddress = { set_netaddress, free_netaddress },
type_rights = { set_rights, free_string };
type_netaddress = { set_netaddress, free_netaddress },
type_rights = { set_rights, free_string };
{ C(mount_rescan), &type_boolean, validate_any },
{ C(multicast_loop), &type_boolean, validate_any },
{ C(multicast_ttl), &type_integer, validate_non_negative },
{ C(mount_rescan), &type_boolean, validate_any },
{ C(multicast_loop), &type_boolean, validate_any },
{ C(multicast_ttl), &type_integer, validate_non_negative },
{ C(namepart), &type_namepart, validate_any },
{ C(namepart), &type_namepart, validate_any },
{ C(new_bias), &type_integer, validate_positive },
{ C(new_bias_age), &type_integer, validate_positive },
{ C(new_max), &type_integer, validate_positive },
{ C(new_bias), &type_integer, validate_positive },
{ C(new_bias_age), &type_integer, validate_positive },
{ C(new_max), &type_integer, validate_positive },
{ C(stopword), &type_string_accum, validate_any },
{ C(templates), &type_string_accum, validate_isdir },
{ C(tracklength), &type_stringlist_accum, validate_tracklength },
{ C(stopword), &type_string_accum, validate_any },
{ C(templates), &type_string_accum, validate_isdir },
{ C(tracklength), &type_stringlist_accum, validate_tracklength },
{ C(transform), &type_transform, validate_any },
{ C(transform), &type_transform, validate_any },
{ C(url), &type_string, validate_url },
#if !_WIN32
{ C(user), &type_string, validate_isauser },
{ C(url), &type_string, validate_url },
#if !_WIN32
{ C(user), &type_string, validate_isauser },
static void config_postdefaults(struct config *c,
int server) {
struct config_state cs;
static void config_postdefaults(struct config *c,
int server) {
struct config_state cs;
const struct conf *whoami;
int n;
const struct conf *whoami;
int n;
static const char *namepart[][4] = {
{ "title", "/([0-9]+ *[-:]? *)?([^/]+)\\.[a-zA-Z0-9]+$", "$2", "display" },
{ "title", "/([^/]+)\\.[a-zA-Z0-9]+$", "$1", "sort" },
static const char *namepart[][4] = {
{ "title", "/([0-9]+ *[-:]? *)?([^/]+)\\.[a-zA-Z0-9]+$", "$2", "display" },
{ "title", "/([^/]+)\\.[a-zA-Z0-9]+$", "$1", "sort" },
{ "dir", "[[:punct:]]", "", "sort", "g", }
};
#define NTRANSFORM (int)(sizeof transform / sizeof *transform)
{ "dir", "[[:punct:]]", "", "sort", "g", }
};
#define NTRANSFORM (int)(sizeof transform / sizeof *transform)
cs.path = "<internal>";
cs.line = 0;
cs.config = c;
cs.path = "<internal>";
cs.line = 0;
cs.config = c;
if(!c->namepart.n) {
whoami = find("namepart");
for(n = 0; n < NNAMEPART; ++n)
if(!c->namepart.n) {
whoami = find("namepart");
for(n = 0; n < NNAMEPART; ++n)
for(n = 0; n < NTRANSFORM; ++n)
set_transform(&cs, whoami, 5, (char **)transform[n]);
}
for(n = 0; n < NTRANSFORM; ++n)
set_transform(&cs, whoami, 5, (char **)transform[n]);
}
if(!c->api) {
if(c->speaker_command)
c->api = xstrdup("command");
if(!c->api) {
if(c->speaker_command)
c->api = xstrdup("command");
disorder_error(0, "'nice_server' cannot be changed without a restart");
/* ...but we accept the new config anyway */
}
disorder_error(0, "'nice_server' cannot be changed without a restart");
/* ...but we accept the new config anyway */
}
if(namepartlist_compare(&c->namepart, &oldconfig->namepart)) {
disorder_error(0, "'namepart' settings cannot be changed without a restart");
failed = 1;
}
if(namepartlist_compare(&c->namepart, &oldconfig->namepart)) {
disorder_error(0, "'namepart' settings cannot be changed without a restart");
failed = 1;
}
if(stringlist_compare(&c->stopword, &oldconfig->stopword)) {
disorder_error(0, "'stopword' settings cannot be changed without a restart");
failed = 1;
if(stringlist_compare(&c->stopword, &oldconfig->stopword)) {
disorder_error(0, "'stopword' settings cannot be changed without a restart");
failed = 1;
/** @brief Order two namepart definitions
* @param a First namepart definition
* @param b Second namepart definition
/** @brief Order two namepart definitions
* @param a First namepart definition
* @param b Second namepart definition
/** @brief Verify configuration table.
* @return The number of problems found
/** @brief Verify configuration table.
* @return The number of problems found
#ifndef CONFIGURATION_H
#define CONFIGURATION_H
#ifndef CONFIGURATION_H
#define CONFIGURATION_H
-#if HAVE_PCRE_H
-# include <pcre.h>
-#endif
#include "speaker-protocol.h"
#include "rights.h"
#include "speaker-protocol.h"
#include "rights.h"
/** @brief A track name part */
struct namepart {
char *part; /* part */
/** @brief A track name part */
struct namepart {
char *part; /* part */
int n;
struct transform *t;
};
int n;
struct transform *t;
};
/** @brief System configuration */
struct config {
/** @brief System configuration */
struct config {
/** @brief Minimum time between a track being played again */
long replay_min;
/** @brief Minimum time between a track being played again */
long replay_min;
struct namepartlist namepart; /* transformations */
struct namepartlist namepart; /* transformations */
/** @brief Termination signal for subprocesses */
int signal;
/** @brief Termination signal for subprocesses */
int signal;
/** @brief ALSA output device */
const char *device;
/** @brief ALSA output device */
const char *device;
struct transformlist transform; /* path name transformations */
struct transformlist transform; /* path name transformations */
/** @brief Address to send audio data to */
struct netaddress broadcast;
/** @brief Address to send audio data to */
struct netaddress broadcast;
#include <errno.h>
#include <time.h>
#include <gcrypt.h>
#include <errno.h>
#include <time.h>
#include <gcrypt.h>
#include "cookies.h"
#include "hash.h"
#include "cookies.h"
#include "hash.h"
#include "rights.h"
#include "trackdb.h"
#include "rights.h"
#include "trackdb.h"
* @brief Track name calculation
*/
#include "common.h"
* @brief Track name calculation
*/
#include "common.h"
#include <fnmatch.h>
#include "trackname.h"
#include <fnmatch.h>
#include "trackname.h"
#include <fnmatch.h>
#include "trackname.h"
#include <fnmatch.h>
#include "trackname.h"
#include <grp.h>
#include <locale.h>
#include <netinet/in.h>
#include <grp.h>
#include <locale.h>
#include <netinet/in.h>
#include <pwd.h>
#include <signal.h>
#include <stddef.h>
#include <pwd.h>
#include <signal.h>
#include <stddef.h>