summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrofl0r <rofl0r@users.noreply.github.com>2020-09-16 23:04:12 +0100
committerrofl0r <rofl0r@users.noreply.github.com>2020-09-16 23:04:12 +0100
commit22e4898519e9db7aabacad1343c20fc49176dbf4 (patch)
treea7f4edc6603cf447bcb41463b879645567bd915f
parent45b238fc6f2dc4705578e6a35cf6031e818a04c0 (diff)
add autoconf test and fallback code for systems without gperf
-rw-r--r--configure.ac9
-rw-r--r--src/Makefile.am7
-rw-r--r--src/conf-tokens.c70
3 files changed, 84 insertions, 2 deletions
diff --git a/configure.ac b/configure.ac
index cf2f19c..00f7f0e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -204,6 +204,15 @@ fi #manpage_support_enabled
AM_CONDITIONAL(HAVE_POD2MAN, test "x$POD2MAN" != "x" -a "x$POD2MAN" != "xno")
+AC_PATH_PROG(GPERF, gperf, no)
+AM_CONDITIONAL(HAVE_GPERF, test "x$GPERF" != "x" -a "x$GPERF" != "xno")
+AH_TEMPLATE([HAVE_GPERF],
+ [Whether you have gperf installed for faster config parsing.])
+
+if test "x$GPERF" != "x" -a "x$GPERF" != "xno" ; then
+ AC_DEFINE(HAVE_GPERF)
+fi
+
AC_CONFIG_FILES([
Makefile
src/Makefile
diff --git a/src/Makefile.am b/src/Makefile.am
index f028e4a..9c8458e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -60,5 +60,8 @@ EXTRA_tinyproxy_SOURCES = filter.c filter.h \
tinyproxy_DEPENDENCIES = @ADDITIONAL_OBJECTS@
tinyproxy_LDADD = @ADDITIONAL_OBJECTS@ -lpthread
-conf-tokens.c: conf-tokens.gperf
- gperf $< > $@
+if HAVE_GPERF
+conf-tokens.c: conf-tokens-gperf.inc
+conf-tokens-gperf.inc: conf-tokens.gperf
+ $(GPERF) $< > $@
+endif
diff --git a/src/conf-tokens.c b/src/conf-tokens.c
new file mode 100644
index 0000000..bad7013
--- /dev/null
+++ b/src/conf-tokens.c
@@ -0,0 +1,70 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <string.h>
+#include <stdlib.h>
+#include "conf-tokens.h"
+
+#ifdef HAVE_GPERF
+#include "conf-tokens-gperf.inc"
+#else
+
+#include <strings.h>
+
+const struct config_directive_entry *
+config_directive_find (register const char *str, register size_t len)
+{
+ size_t i;
+ static const struct config_directive_entry wordlist[] =
+ {
+ {"",CD_NIL}, {"",CD_NIL},
+ {"allow", CD_allow},
+ {"stathost", CD_stathost},
+ {"listen", CD_listen},
+ {"timeout", CD_timeout},
+ {"statfile", CD_statfile},
+ {"pidfile", CD_pidfile},
+ {"bindsame", CD_bindsame},
+ {"reversebaseurl", CD_reversebaseurl},
+ {"viaproxyname", CD_viaproxyname},
+ {"upstream", CD_upstream},
+ {"anonymous", CD_anonymous},
+ {"group", CD_group},
+ {"defaulterrorfile", CD_defaulterrorfile},
+ {"startservers", CD_startservers},
+ {"filtercasesensitive", CD_filtercasesensitive},
+ {"filterurls", CD_filterurls},
+ {"filter", CD_filter},
+ {"reversemagic", CD_reversemagic},
+ {"errorfile", CD_errorfile},
+ {"minspareservers", CD_minspareservers},
+ {"user", CD_user},
+ {"disableviaheader", CD_disableviaheader},
+ {"deny", CD_deny},
+ {"xtinyproxy", CD_xtinyproxy},
+ {"reversepath", CD_reversepath},
+ {"bind", CD_bind},
+ {"maxclients", CD_maxclients},
+ {"reverseonly", CD_reverseonly},
+ {"port", CD_port},
+ {"maxspareservers", CD_maxspareservers},
+ {"syslog", CD_syslog},
+ {"filterdefaultdeny", CD_filterdefaultdeny},
+ {"loglevel", CD_loglevel},
+ {"filterextended", CD_filterextended},
+ {"connectport", CD_connectport},
+ {"logfile", CD_logfile},
+ {"basicauth", CD_basicauth},
+ {"addheader", CD_addheader},
+ {"maxrequestsperchild", CD_maxrequestsperchild}
+ };
+
+ for(i=0;i<sizeof(wordlist)/sizeof(wordlist[0]);++i) {
+ if(!strcasecmp(str, wordlist[i].name))
+ return &wordlist[i];
+ }
+ return 0;
+}
+
+#endif