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

Reply via email to