On Fri, Jun 24, 2011 at 12:19:27PM +0100, Christian Gagneraud wrote: > This quirk is needed for the WiMAX tools, the patch comes from the WiMAX > people. > The patch allows to build libeap.so. > An option has been added to select or not the installation of this library. > > Signed-off-by: Christian Gagneraud <ch...@techworks.ie> > ---
I've played with this a bit, and it's rather fragile. I think, until this is fixed upstream, a separate package is the way to go. With the changes I've committed this week, that's rather easy. Just set LIBEAP_DIR to something other than WPA_SUPPLICANT_DIR, and ptxdist will extract the sources there. Michael > .../00-generate-libeap-peer.patch | 395 > ++++++++++++++++++++ > patches/wpa_supplicant-0.7.3/series | 1 + > rules/wpa_supplicant.in | 6 + > rules/wpa_supplicant.make | 42 ++ > 4 files changed, 444 insertions(+), 0 deletions(-) > create mode 100644 patches/wpa_supplicant-0.7.3/00-generate-libeap-peer.patch > create mode 100644 patches/wpa_supplicant-0.7.3/series > > diff --git a/patches/wpa_supplicant-0.7.3/00-generate-libeap-peer.patch > b/patches/wpa_supplicant-0.7.3/00-generate-libeap-peer.patch > new file mode 100644 > index 0000000..6c6a7b3 > --- /dev/null > +++ b/patches/wpa_supplicant-0.7.3/00-generate-libeap-peer.patch > @@ -0,0 +1,395 @@ > +From 3de5e59b291b6f58317bb16736f8c0271754378e Mon Sep 17 00:00:00 2001 > +From: Inaky Perez-Gonzalez <inaky.perez-gonza...@intel.com> > +Date: Sat, 2 Oct 2010 00:11:51 -0700 > +Subject: [PATCH] eap_peer: create a libeap library, with header files and > pkg-config [v2] > + > +This adds infrastructe in src/eap_peer to make libeap.so and install > +the needed header files and pkg-config files. > + > +Now, this is quite dirty and probably not what we want in the long > +term, but serves as an starting point: > + > + - we don't build from the wpa_supplicant directory because the > + objects the .so have to be built with -fPIC. So if you need to > + build both the binary and the library: > + > + make -C wpa_supplicant > + make -C src/eap_peer clean > + make -C src/eap_peer > + > + As I said, it's dirty -- we'd need either wpa_supplicant linking > + against the library properly (but that seems not to be desirable) > + or a multiple object build approach ala automake. > + > + - need to use 'override CFLAGS' in src/eap_peer/Makefile, otherwise > + any CFLAGS setting will kill the build infrastructure. I miss > + AM_CFLAGS. > + > + - adds 'eap_register_methods()' that will register every compiled in > + method. > + > +Signed-off-by: Inaky Perez-Gonzalez <inaky.perez-gonza...@intel.com> > +--- > + build_release | 12 +++ > + src/eap_peer/Makefile | 191 > ++++++++++++++++++++++++++++++++++++++++++-- > + src/eap_peer/eap_methods.c | 114 ++++++++++++++++++++++++++ > + src/eap_peer/eap_methods.h | 1 + > + src/eap_peer/libeap0.pc | 10 +++ > + 5 files changed, 320 insertions(+), 8 deletions(-) > + create mode 100644 src/eap_peer/libeap0.pc > + > +diff --git a/src/eap_peer/Makefile b/src/eap_peer/Makefile > +index 3651056..58c067a 100644 > +--- a/src/eap_peer/Makefile > ++++ b/src/eap_peer/Makefile > +@@ -1,11 +1,186 @@ > +-all: > +- @echo Nothing to be made. > ++LIBEAP_NAME = libeap > ++LIBEAP_CURRENT = 0 > ++LIBEAP_REVISION = 0 > ++LIBEAP_AGE = 0 > ++ > ++LIBEAP = > $(LIBEAP_NAME).so.$(LIBEAP_CURRENT).$(LIBEAP_REVISION).$(LIBEAP_AGE) > ++LIBEAP_SO = $(LIBEAP_NAME).so.$(LIBEAP_CURRENT) > ++ > ++.PHONY: all clean install uninstall > ++ > ++all: $(LIBEAP) > ++ > ++ifndef CC > ++CC=gcc > ++endif > ++ > ++ifndef CFLAGS > ++CFLAGS = -MMD -O0 -Wall -g > ++endif > ++ > ++CONFIG_TLS=openssl > ++ > ++INCLUDE_INSTALL_DIR=/usr/include/eap_peer > ++ > ++# Got to use override all across the board, otherwise a 'make > ++# CFLAGS=XX' will kill us because the command line's CFLAGS will > ++# overwrite Make's and we'll loose all the infrastructure it sets. > ++override CFLAGS += -I. -I.. -I../crypto -I../utils -I../common > ++ > ++# at least for now, need to include config_ssid.h and config_blob.h from > ++# wpa_supplicant directory > ++override CFLAGS += -I ../../wpa_supplicant > ++ > ++OBJS_both += ../utils/common.o > ++OBJS_both += ../utils/os_unix.o > ++OBJS_both += ../utils/wpa_debug.o > ++OBJS_both += ../utils/base64.o > ++OBJS_both += ../utils/wpabuf.o > ++OBJS_both += ../crypto/md5.o > ++OBJS_both += ../crypto/sha1.o > ++OBJS_both += ../crypto/sha1-tlsprf.o > ++OBJS_both += ../crypto/aes-encblock.o > ++OBJS_both += ../crypto/aes-wrap.o > ++OBJS_both += ../crypto/aes-ctr.o > ++OBJS_both += ../crypto/aes-eax.o > ++OBJS_both += ../crypto/aes-omac1.o > ++OBJS_both += ../crypto/ms_funcs.o > ++OBJS_both += ../crypto/sha256.o > ++ > ++ > ++OBJS_both += ../eap_common/eap_peap_common.o > ++OBJS_both += ../eap_common/eap_psk_common.o > ++OBJS_both += ../eap_common/eap_pax_common.o > ++OBJS_both += ../eap_common/eap_sake_common.o > ++OBJS_both += ../eap_common/eap_gpsk_common.o > ++OBJS_both += ../eap_common/chap.o > ++ > ++OBJS_peer += ../eap_peer/eap_tls.o > ++OBJS_peer += ../eap_peer/eap_peap.o > ++OBJS_peer += ../eap_peer/eap_ttls.o > ++OBJS_peer += ../eap_peer/eap_md5.o > ++OBJS_peer += ../eap_peer/eap_mschapv2.o > ++OBJS_peer += ../eap_peer/mschapv2.o > ++OBJS_peer += ../eap_peer/eap_otp.o > ++OBJS_peer += ../eap_peer/eap_gtc.o > ++OBJS_peer += ../eap_peer/eap_leap.o > ++OBJS_peer += ../eap_peer/eap_psk.o > ++OBJS_peer += ../eap_peer/eap_pax.o > ++OBJS_peer += ../eap_peer/eap_sake.o > ++OBJS_peer += ../eap_peer/eap_gpsk.o > ++OBJS_peer += ../eap_peer/eap.o > ++OBJS_peer += ../eap_common/eap_common.o > ++OBJS_peer += ../eap_peer/eap_methods.o > ++OBJS_peer += ../eap_peer/eap_tls_common.o > ++ > ++override CFLAGS += -DEAP_TLS > ++override CFLAGS += -DEAP_PEAP > ++override CFLAGS += -DEAP_TTLS > ++override CFLAGS += -DEAP_MD5 > ++override CFLAGS += -DEAP_MSCHAPv2 > ++override CFLAGS += -DEAP_GTC > ++override CFLAGS += -DEAP_OTP > ++override CFLAGS += -DEAP_LEAP > ++override CFLAGS += -DEAP_PSK > ++override CFLAGS += -DEAP_PAX > ++override CFLAGS += -DEAP_SAKE > ++override CFLAGS += -DEAP_GPSK -DEAP_GPSK_SHA256 > ++override CFLAGS += -DEAP_TLS_FUNCS > ++ > ++override CFLAGS += -DIEEE8021X_EAPOL > ++ > ++ifeq ($(CONFIG_TLS), openssl) > ++override CFLAGS += -DEAP_TLS_OPENSSL > ++OBJS_both += ../crypto/tls_openssl.o > ++OBJS_both += ../crypto/crypto_openssl.o > ++LIBS += -lssl -lcrypto > ++override CFLAGS += -DINTERNAL_SHA256 > ++endif > ++ > ++ifeq ($(CONFIG_TLS), internal) > ++OBJS_both += ../crypto/tls_internal.o > ++OBJS_both += ../tls/tlsv1_common.o ../../tls/tlsv1_record.o > ++OBJS_both += ../tls/tlsv1_cred.o > ++OBJS_both += ../tls/asn1.o ../../tls/x509v3.o > ++OBJS_both += ../crypto/crypto_internal.o ../../tls/rsa.o ../../tls/bignum.o > ++ > ++OBJS_peer += ../tls/tlsv1_client.o > ++OBJS_peer += ../tls/tlsv1_client_write.o ../../tls/tlsv1_client_read.o > ++override CFLAGS += -DCONFIG_TLS_INTERNAL_CLIENT > ++ > ++OBJS_server += ../tls/tlsv1_server.o > ++OBJS_server += ../tls/tlsv1_server_write.o ../../tls/tlsv1_server_read.o > ++override CFLAGS += -DCONFIG_TLS_INTERNAL_SERVER > ++ > ++override CFLAGS += -DCONFIG_TLS_INTERNAL > ++override CFLAGS += -DCONFIG_CRYPTO_INTERNAL > ++override CFLAGS += -DCONFIG_INTERNAL_X509 > ++override CFLAGS += -DINTERNAL_AES > ++override CFLAGS += -DINTERNAL_SHA1 > ++override CFLAGS += -DINTERNAL_SHA256 > ++override CFLAGS += -DINTERNAL_MD5 > ++override CFLAGS += -DINTERNAL_MD4 > ++override CFLAGS += -DINTERNAL_DES > ++ifdef CONFIG_INTERNAL_LIBTOMMATH > ++override CFLAGS += -DCONFIG_INTERNAL_LIBTOMMATH > ++else > ++LIBS += -ltommath > ++endif > ++endif > ++ > ++ifndef LDO > ++LDO=$(CC) > ++endif > ++ > ++ > ++OBJS_lib=$(OBJS_both) $(OBJS_peer) > ++ > ++ #$(OBJS_server) > ++ > ++override CFLAGS += -fPIC -DPIC > ++LDFLAGS += -shared > ++ > ++$(LIBEAP): $(OBJS_lib) > ++ $(LDO) $(LDFLAGS) $(OBJS_lib) -Wl,-soname -Wl,$(LIBEAP_SO) -o $(LIBEAP) > $(LIBS) > ++ > ++ > ++UTIL_HEADERS = ../utils/includes.h ../utils/common.h \ > ++ ../utils/wpabuf.h ../utils/build_config.h \ > ++ ../utils/os.h ../utils/wpa_debug.h > ++COMMON_HEADERS = ../common/defs.h > ++EAP_COMMON_HEADERS = ../eap_common/eap_defs.h > ++MAIN_HEADERS = eap.h eap_methods.h eap_config.h > ++CRYPTO_HEADERS = ../crypto/tls.h > ++ > ++install: > ++ > ++ mkdir -p $(DESTDIR)/usr/lib > ++# copy the lib file to std lib location > ++ cp $(LIBEAP) $(DESTDIR)/usr/lib > ++ ln -fs $(LIBEAP_SO) $(DESTDIR)/usr/lib/$(LIBEAP_NAME).so > ++ > ++# copy the headers reqd by apps using eap peer library in its own > subfolder under /usr/include > ++ mkdir -p \ > ++ $(DESTDIR)/$(INCLUDE_INSTALL_DIR)/eap_common \ > ++ $(DESTDIR)/$(INCLUDE_INSTALL_DIR)/common \ > ++ $(DESTDIR)/$(INCLUDE_INSTALL_DIR)/util \ > ++ $(DESTDIR)/$(INCLUDE_INSTALL_DIR)/crypto > ++ install -m 0644 $(EAP_COMMON_HEADERS) > $(DESTDIR)/$(INCLUDE_INSTALL_DIR)/eap_common > ++ install -m 0644 $(COMMON_HEADERS) > $(DESTDIR)/$(INCLUDE_INSTALL_DIR)/common > ++ install -m 0644 $(CRYPTO_HEADERS) > $(DESTDIR)/$(INCLUDE_INSTALL_DIR)/crypto > ++ install -m 0644 $(UTIL_HEADERS) $(DESTDIR)/$(INCLUDE_INSTALL_DIR)/util > ++ install -m 0644 $(MAIN_HEADERS) $(DESTDIR)/$(INCLUDE_INSTALL_DIR)/ > ++ > ++ mkdir -p $(DESTDIR)/usr/lib/pkgconfig > ++ cp libeap0.pc $(DESTDIR)/usr/lib/pkgconfig > ++ > ++uninstall: > ++ > ++ rm $(DESTDIR)/usr/lib/$(LIBEAP) > ++ rm -fr $(DESTDIR)/$(INCLUDE_INSTALL_DIR) > ++ rm -f $(DESTDIR)/usr/lib/pkgconfig/libeap0.pc > + > + clean: > +- rm -f *~ *.o *.so *.d > ++ rm -f *~ *.o *.so *.d libeap.a $(LIBEAP) $(OBJS_lib) > + > +-install: > +- if ls *.so >/dev/null 2>&1; then \ > +- install -d $(DESTDIR)$(LIBDIR)/wpa_supplicant && \ > +- cp *.so $(DESTDIR)$(LIBDIR)/wpa_supplicant \ > +- ; fi > ++-include $(OBJS:%.o=%.d) > +diff --git a/src/eap_peer/eap_methods.c b/src/eap_peer/eap_methods.c > +index 3b0af05..092f266 100644 > +--- a/src/eap_peer/eap_methods.c > ++++ b/src/eap_peer/eap_methods.c > +@@ -340,6 +340,120 @@ int eap_peer_method_register(struct eap_method *method) > + > + > + /** > ++ * eap_peer_register_methods - Register all known EAP peer methods > ++ * > ++ * This function is called at program start to register all compiled > ++ * in EAP peer methods. > ++ */ > ++int eap_peer_register_methods(void) > ++{ > ++ int ret = 0; > ++ > ++#ifdef EAP_MD5 > ++ if (ret == 0) > ++ ret = eap_peer_md5_register(); > ++#endif /* EAP_MD5 */ > ++ > ++#ifdef EAP_TLS > ++ if (ret == 0) > ++ ret = eap_peer_tls_register(); > ++#endif /* EAP_TLS */ > ++ > ++#ifdef EAP_MSCHAPv2 > ++ if (ret == 0) > ++ ret = eap_peer_mschapv2_register(); > ++#endif /* EAP_MSCHAPv2 */ > ++ > ++#ifdef EAP_PEAP > ++ if (ret == 0) > ++ ret = eap_peer_peap_register(); > ++#endif /* EAP_PEAP */ > ++ > ++#ifdef EAP_TTLS > ++ if (ret == 0) > ++ ret = eap_peer_ttls_register(); > ++#endif /* EAP_TTLS */ > ++ > ++#ifdef EAP_GTC > ++ if (ret == 0) > ++ ret = eap_peer_gtc_register(); > ++#endif /* EAP_GTC */ > ++ > ++#ifdef EAP_OTP > ++ if (ret == 0) > ++ ret = eap_peer_otp_register(); > ++#endif /* EAP_OTP */ > ++ > ++#ifdef EAP_SIM > ++ if (ret == 0) > ++ ret = eap_peer_sim_register(); > ++#endif /* EAP_SIM */ > ++ > ++#ifdef EAP_LEAP > ++ if (ret == 0) > ++ ret = eap_peer_leap_register(); > ++#endif /* EAP_LEAP */ > ++ > ++#ifdef EAP_PSK > ++ if (ret == 0) > ++ ret = eap_peer_psk_register(); > ++#endif /* EAP_PSK */ > ++ > ++#ifdef EAP_AKA > ++ if (ret == 0) > ++ ret = eap_peer_aka_register(); > ++#endif /* EAP_AKA */ > ++ > ++#ifdef EAP_AKA_PRIME > ++ if (ret == 0) > ++ ret = eap_peer_aka_prime_register(); > ++#endif /* EAP_AKA_PRIME */ > ++ > ++#ifdef EAP_FAST > ++ if (ret == 0) > ++ ret = eap_peer_fast_register(); > ++#endif /* EAP_FAST */ > ++ > ++#ifdef EAP_PAX > ++ if (ret == 0) > ++ ret = eap_peer_pax_register(); > ++#endif /* EAP_PAX */ > ++ > ++#ifdef EAP_SAKE > ++ if (ret == 0) > ++ ret = eap_peer_sake_register(); > ++#endif /* EAP_SAKE */ > ++ > ++#ifdef EAP_GPSK > ++ if (ret == 0) > ++ ret = eap_peer_gpsk_register(); > ++#endif /* EAP_GPSK */ > ++ > ++#ifdef EAP_WSC > ++ if (ret == 0) > ++ ret = eap_peer_wsc_register(); > ++#endif /* EAP_WSC */ > ++ > ++#ifdef EAP_IKEV2 > ++ if (ret == 0) > ++ ret = eap_peer_ikev2_register(); > ++#endif /* EAP_IKEV2 */ > ++ > ++#ifdef EAP_VENDOR_TEST > ++ if (ret == 0) > ++ ret = eap_peer_vendor_test_register(); > ++#endif /* EAP_VENDOR_TEST */ > ++ > ++#ifdef EAP_TNC > ++ if (ret == 0) > ++ ret = eap_peer_tnc_register(); > ++#endif /* EAP_TNC */ > ++ > ++ return ret; > ++} > ++ > ++ > ++/** > + * eap_peer_unregister_methods - Unregister EAP peer methods > + * > + * This function is called at program termination to unregister all EAP peer > +diff --git a/src/eap_peer/eap_methods.h b/src/eap_peer/eap_methods.h > +index 384c61b..b83a46f 100644 > +--- a/src/eap_peer/eap_methods.h > ++++ b/src/eap_peer/eap_methods.h > +@@ -32,6 +32,7 @@ EapType eap_peer_get_type(const char *name, int *vendor); > + const char * eap_get_name(int vendor, EapType type); > + size_t eap_get_names(char *buf, size_t buflen); > + char ** eap_get_names_as_string_array(size_t *num); > ++int eap_peer_register_methods(void); > + void eap_peer_unregister_methods(void); > + > + #else /* IEEE8021X_EAPOL */ > +diff --git a/src/eap_peer/libeap0.pc b/src/eap_peer/libeap0.pc > +new file mode 100644 > +index 0000000..2f8463a > +--- /dev/null > ++++ b/src/eap_peer/libeap0.pc > +@@ -0,0 +1,10 @@ > ++prefix=/usr > ++exec_prefix=/usr > ++libdir=${exec_prefix}/lib > ++includedir=${prefix}/include/eap_peer > ++ > ++Name: libeap0 > ++Description: EAP Peer Library API > ++Version: 0.7.2 > ++Libs: -L${libdir} -leap > ++Cflags: -I${includedir} > +-- > +1.6.6.1 > + > diff --git a/patches/wpa_supplicant-0.7.3/series > b/patches/wpa_supplicant-0.7.3/series > new file mode 100644 > index 0000000..f0f7715 > --- /dev/null > +++ b/patches/wpa_supplicant-0.7.3/series > @@ -0,0 +1 @@ > +00-generate-libeap-peer.patch > diff --git a/rules/wpa_supplicant.in b/rules/wpa_supplicant.in > index 7221ce8..f5f0174 100644 > --- a/rules/wpa_supplicant.in > +++ b/rules/wpa_supplicant.in > @@ -10,6 +10,12 @@ menuconfig WPA_SUPPLICANT > > if WPA_SUPPLICANT > > +config WPA_SUPPLICANT_INSTALL_LIBEAP > + bool > + prompt "Install libeap" > + help > + TBD > + > config WPA_SUPPLICANT_DRIVER_HOSTAP > bool > prompt "hostap" > diff --git a/rules/wpa_supplicant.make b/rules/wpa_supplicant.make > index 0dc9b2b..bbb8eae 100644 > --- a/rules/wpa_supplicant.make > +++ b/rules/wpa_supplicant.make > @@ -80,6 +80,45 @@ $(STATEDIR)/wpa_supplicant.prepare: > @$(call touch) > > # > ---------------------------------------------------------------------------- > +# Compile > +# > ---------------------------------------------------------------------------- > + > +$(STATEDIR)/wpa_supplicant.compile: > + @$(call targetinfo) > + > + @$(call world/compile, WPA_SUPPLICANT) > +ifdef PTXCONF_WPA_SUPPLICANT_INSTALL_LIBEAP > + make -C $(WPA_SUPPLICANT_DIR)/src/eap_peer clean > + make -C $(WPA_SUPPLICANT_DIR)/src/eap_peer \ > + CC=$(CROSS_CC) \ > + CFLAGS=-I$(PTXDIST_SYSROOT_TARGET)/usr/include \ > + LDFLAGS="-L$(PTXDIST_SYSROOT_TARGET)/usr/lib -shared" > +# Avoid the linkage of these programs to be redone during install > + @for prog in wpa_supplicant wpa_passphrase wpa_cli; do \ > + touch $(WPA_SUPPLICANT_DIR)/wpa_supplicant/$$prog; \ > + done > +endif > + > + @$(call touch) > + > +# > ---------------------------------------------------------------------------- > +# Install > +# > ---------------------------------------------------------------------------- > + > +$(STATEDIR)/wpa_supplicant.install: > + @$(call targetinfo) > + > + @$(call install, WPA_SUPPLICANT) > +ifdef PTXCONF_WPA_SUPPLICANT_INSTALL_LIBEAP > + @make -C $(WPA_SUPPLICANT_DIR)/src/eap_peer install \ > + DESTDIR=$(WPA_SUPPLICANT_PKGDIR) > + @ln -sf libeap.so.0.0.0 $(WPA_SUPPLICANT_PKGDIR)/usr/lib/libeap.so.0 > +endif > + > + @$(call touch) > + > + > +# > ---------------------------------------------------------------------------- > # Target-Install > # > ---------------------------------------------------------------------------- > > @@ -96,6 +135,9 @@ $(STATEDIR)/wpa_supplicant.targetinstall: > /sbin/wpa_supplicant) > @$(call install_copy, wpa_supplicant, 0, 0, 0755, -, \ > /sbin/wpa_cli) > +ifdef PTXCONF_WPA_SUPPLICANT_INSTALL_LIBEAP > + @$(call install_lib, wpa_supplicant, 0, 0, 0755, libeap) > +endif > > @$(call install_finish, wpa_supplicant) > > -- > 1.7.4.1 > > > -- > ptxdist mailing list > ptxdist@pengutronix.de > -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | -- ptxdist mailing list ptxdist@pengutronix.de