configure: Fix gperf length parameter determination

gperf is not actually a build dependency as the generated files are
shipped in the tarball.  So the type depends on the gperf version on
the host that ran gperf and created the tarball, which might not be
the same as that on the actual build host, and gperf might not even
be installed there, leaving the type undetermined.

Fixes: e0e4322973 ("configure: Detect type of length parameter for gperf generated function")
This commit is contained in:
Tobias Brunner 2017-09-26 12:23:36 +02:00
parent 7dd29ab4ed
commit 0ae19f0ced
12 changed files with 39 additions and 15 deletions

View File

@ -392,7 +392,7 @@ if test -x "$GPERF"; then
[AC_MSG_ERROR([unable to determine gperf len type])]
)]
)
AC_DEFINE_UNQUOTED([GPERF_LEN_TYPE], [$GPERF_LEN_TYPE], [gperf len type])
AC_SUBST(GPERF_LEN_TYPE)
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])

View File

@ -1,2 +1,2 @@
oid.[ch]
proposal_keywords_static.c
proposal_keywords_static.[ch]

View File

@ -195,16 +195,19 @@ endif
EXTRA_DIST = \
asn1/oid.txt asn1/oid.pl \
crypto/proposal/proposal_keywords_static.txt \
crypto/proposal/proposal_keywords_static.h.in \
plugins/plugin_constructors.py \
Android.mk
BUILT_SOURCES = \
$(srcdir)/asn1/oid.c $(srcdir)/asn1/oid.h \
$(srcdir)/crypto/proposal/proposal_keywords_static.h \
$(srcdir)/crypto/proposal/proposal_keywords_static.c \
settings/settings_parser.h
MAINTAINERCLEANFILES = \
$(srcdir)/asn1/oid.c $(srcdir)/asn1/oid.h \
$(srcdir)/crypto/proposal/proposal_keywords_static.h \
$(srcdir)/crypto/proposal/proposal_keywords_static.c
$(srcdir)/asn1/oid.c : $(srcdir)/asn1/oid.pl $(srcdir)/asn1/oid.txt
@ -215,6 +218,12 @@ $(srcdir)/asn1/oid.h : $(srcdir)/asn1/oid.pl $(srcdir)/asn1/oid.txt
$(AM_V_GEN) \
(cd $(srcdir)/asn1/ && $(PERL) oid.pl)
$(srcdir)/crypto/proposal/proposal_keywords_static.h: $(srcdir)/crypto/proposal/proposal_keywords_static.h.in
$(AM_V_GEN) \
sed \
-e "s:\@GPERF_LEN_TYPE\@:$(GPERF_LEN_TYPE):" \
$< > $@
$(srcdir)/crypto/proposal/proposal_keywords_static.c: $(srcdir)/crypto/proposal/proposal_keywords_static.txt \
$(srcdir)/crypto/proposal/proposal_keywords_static.h
$(AM_V_GEN) \

View File

@ -19,7 +19,7 @@
#include "proposal_keywords.h"
const proposal_token_t* proposal_get_token_static(register const char *str,
register GPERF_LEN_TYPE len);
register @GPERF_LEN_TYPE@ len);
#endif /* PROPOSAL_KEYWORDS_STATIC_H_ */

View File

@ -1,4 +1,5 @@
starter
keywords.[ch]
parser/lexer.c
parser/parser.[ch]
parser/parser.output

View File

@ -39,14 +39,20 @@ starter_LDADD = \
libstarter.la \
$(SOCKLIB) $(PTHREADLIB) $(ATOMICLIB)
EXTRA_DIST = keywords.txt ipsec.conf ipsec.secrets Android.mk
MAINTAINERCLEANFILES = keywords.c
BUILT_SOURCES = keywords.c parser/parser.h
EXTRA_DIST = keywords.h keywords.txt ipsec.conf ipsec.secrets Android.mk
MAINTAINERCLEANFILES = keywords.h keywords.c
BUILT_SOURCES = keywords.h keywords.c parser/parser.h
if USE_LOAD_WARNING
AM_CPPFLAGS += -DLOAD_WARNING
endif
keywords.h: $(srcdir)/keywords.h.in
$(AM_V_GEN) \
sed \
-e "s:\@GPERF_LEN_TYPE\@:$(GPERF_LEN_TYPE):" \
$< > $@
keywords.c: $(srcdir)/keywords.txt $(srcdir)/keywords.h
$(AM_V_GEN) \
$(GPERF) -m 10 -C -G -D -t < $(srcdir)/keywords.txt > $@

View File

@ -45,11 +45,6 @@ static const char esp_defaults[] = "aes128-sha256";
static const char firewall_defaults[] = IPSEC_SCRIPT " _updown iptables";
/**
* Provided by GPERF
*/
extern const kw_entry_t *in_word_set(register const char*, register GPERF_LEN_TYPE);
/**
* Process deprecated keywords
*/

View File

@ -196,4 +196,8 @@ struct kw_entry_t {
kw_token_t token;
};
#ifndef IN_GPERF_GENERATED_FILE
const kw_entry_t *in_word_set(register const char*, register @GPERF_LEN_TYPE@);
#endif
#endif /* _KEYWORDS_H_ */

View File

@ -16,6 +16,7 @@
#include <string.h>
#define IN_GPERF_GENERATED_FILE
#include "keywords.h"
%}

View File

@ -1 +1,2 @@
stroke
stroke_keywords.[ch]

View File

@ -4,13 +4,19 @@ stroke_SOURCES = \
stroke.c stroke_msg.h stroke_keywords.c stroke_keywords.h
stroke_LDADD = $(top_builddir)/src/libstrongswan/libstrongswan.la $(SOCKLIB)
EXTRA_DIST = stroke_keywords.txt Android.mk
BUILT_SOURCES = stroke_keywords.c
MAINTAINERCLEANFILES = stroke_keywords.c
EXTRA_DIST = stroke_keywords.h.in stroke_keywords.txt Android.mk
BUILT_SOURCES = stroke_keywords.h stroke_keywords.c
MAINTAINERCLEANFILES = stroke_keywords.h stroke_keywords.c
AM_CPPFLAGS = \
-I$(top_srcdir)/src/libstrongswan \
-DIPSEC_PIDDIR=\"${piddir}\"
stroke_keywords.h: $(srcdir)/stroke_keywords.h.in
$(AM_V_GEN) \
sed \
-e "s:\@GPERF_LEN_TYPE\@:$(GPERF_LEN_TYPE):" \
$< > $@
stroke_keywords.c: $(srcdir)/stroke_keywords.txt $(srcdir)/stroke_keywords.h
$(AM_V_GEN) \
$(GPERF) -m 10 -D -C -G -t < $(srcdir)/stroke_keywords.txt > $@

View File

@ -73,6 +73,7 @@ typedef enum {
typedef struct stroke_token stroke_token_t;
extern const stroke_token_t* in_word_set(register const char *str, register GPERF_LEN_TYPE len);
extern const stroke_token_t* in_word_set(register const char *str,
register @GPERF_LEN_TYPE@ len);
#endif /* _STROKE_KEYWORDS_H_ */