1ifndef CC
2CC=gcc
3endif
4
5ifndef CFLAGS
6CFLAGS = -MMD -O2 -Wall -g
7endif
8
9export LIBDIR ?= /usr/local/lib/
10export BINDIR ?= /usr/local/sbin/
11
12CFLAGS += -I../src
13CFLAGS += -I../src/crypto
14CFLAGS += -I../src/utils
15CFLAGS += -I../src/common
16CFLAGS += -I../src/rsn_supp
17
18ALL=wpa_supplicant wpa_passphrase wpa_cli
19
20all: verify_config $(ALL) dynamic_eap_methods
21
22verify_config:
23	@if [ ! -r .config ]; then \
24		echo 'Building wpa_supplicant requires a configuration file'; \
25		echo '(.config). See README for more instructions. You can'; \
26		echo 'run "cp defconfig .config" to create an example'; \
27		echo 'configuration.'; \
28		exit 1; \
29	fi
30
31mkconfig:
32	@if [ -e .config ]; then \
33		echo '.config exists - did not replace it'; \
34		exit 1; \
35	fi
36	echo CONFIG_DRIVER_HOSTAP=y >> .config
37	echo CONFIG_DRIVER_WEXT=y >> .config
38
39install: all
40	mkdir -p $(DESTDIR)$(BINDIR)
41	for i in $(ALL); do cp $$i $(DESTDIR)$(BINDIR)/$$i; done
42	$(MAKE) -C ../src install
43
44OBJS = config.o
45OBJS += ../src/utils/common.o
46OBJS += ../src/utils/wpa_debug.o
47OBJS += ../src/utils/wpabuf.o
48OBJS += ../src/crypto/md5.o
49OBJS += ../src/crypto/rc4.o
50OBJS += ../src/crypto/md4.o
51OBJS += ../src/crypto/sha1.o
52OBJS += ../src/crypto/des.o
53OBJS_p = wpa_passphrase.o
54OBJS_p += ../src/utils/common.o
55OBJS_p += ../src/utils/wpa_debug.o
56OBJS_p += ../src/crypto/md5.o
57OBJS_p += ../src/crypto/md4.o
58OBJS_p += ../src/crypto/sha1.o
59OBJS_p += ../src/crypto/des.o
60OBJS_c = wpa_cli.o ../src/common/wpa_ctrl.o
61
62-include .config
63
64ifndef CONFIG_OS
65ifdef CONFIG_NATIVE_WINDOWS
66CONFIG_OS=win32
67else
68CONFIG_OS=unix
69endif
70endif
71
72ifeq ($(CONFIG_OS), internal)
73CFLAGS += -DOS_NO_C_LIB_DEFINES
74endif
75
76OBJS += ../src/utils/os_$(CONFIG_OS).o
77OBJS_p += ../src/utils/os_$(CONFIG_OS).o
78OBJS_c += ../src/utils/os_$(CONFIG_OS).o
79
80ifndef CONFIG_ELOOP
81CONFIG_ELOOP=eloop
82endif
83OBJS += ../src/utils/$(CONFIG_ELOOP).o
84
85
86ifdef CONFIG_EAPOL_TEST
87CFLAGS += -Werror -DEAPOL_TEST
88endif
89
90ifndef CONFIG_BACKEND
91CONFIG_BACKEND=file
92endif
93
94ifeq ($(CONFIG_BACKEND), file)
95OBJS += config_file.o
96ifndef CONFIG_NO_CONFIG_BLOBS
97NEED_BASE64=y
98endif
99CFLAGS += -DCONFIG_BACKEND_FILE
100endif
101
102ifeq ($(CONFIG_BACKEND), winreg)
103OBJS += config_winreg.o
104endif
105
106ifeq ($(CONFIG_BACKEND), none)
107OBJS += config_none.o
108endif
109
110ifdef CONFIG_NO_CONFIG_WRITE
111CFLAGS += -DCONFIG_NO_CONFIG_WRITE
112endif
113
114ifdef CONFIG_NO_CONFIG_BLOBS
115CFLAGS += -DCONFIG_NO_CONFIG_BLOBS
116endif
117
118ifdef CONFIG_NO_SCAN_PROCESSING
119CFLAGS += -DCONFIG_NO_SCAN_PROCESSING
120endif
121
122ifdef CONFIG_DRIVER_HOSTAP
123CFLAGS += -DCONFIG_DRIVER_HOSTAP
124OBJS_d += ../src/drivers/driver_hostap.o
125CONFIG_WIRELESS_EXTENSION=y
126endif
127
128ifdef CONFIG_DRIVER_WEXT
129CFLAGS += -DCONFIG_DRIVER_WEXT
130CONFIG_WIRELESS_EXTENSION=y
131endif
132
133ifdef CONFIG_DRIVER_NL80211
134CFLAGS += -DCONFIG_DRIVER_NL80211
135OBJS_d += ../src/drivers/driver_nl80211.o
136LIBS += -lnl
137ifdef CONFIG_CLIENT_MLME
138OBJS_d += ../src/drivers/radiotap.o
139endif
140endif
141
142ifdef CONFIG_DRIVER_PRISM54
143CFLAGS += -DCONFIG_DRIVER_PRISM54
144OBJS_d += ../src/drivers/driver_prism54.o
145CONFIG_WIRELESS_EXTENSION=y
146endif
147
148ifdef CONFIG_DRIVER_HERMES
149CFLAGS += -DCONFIG_DRIVER_HERMES
150OBJS_d += ../src/drivers/driver_hermes.o
151CONFIG_WIRELESS_EXTENSION=y
152endif
153
154ifdef CONFIG_DRIVER_MADWIFI
155CFLAGS += -DCONFIG_DRIVER_MADWIFI
156OBJS_d += ../src/drivers/driver_madwifi.o
157CONFIG_WIRELESS_EXTENSION=y
158endif
159
160ifdef CONFIG_DRIVER_ATMEL
161CFLAGS += -DCONFIG_DRIVER_ATMEL
162OBJS_d += ../src/drivers/driver_atmel.o
163CONFIG_WIRELESS_EXTENSION=y
164endif
165
166ifdef CONFIG_DRIVER_NDISWRAPPER
167CFLAGS += -DCONFIG_DRIVER_NDISWRAPPER
168OBJS_d += ../src/drivers/driver_ndiswrapper.o
169CONFIG_WIRELESS_EXTENSION=y
170endif
171
172ifdef CONFIG_DRIVER_RALINK
173CFLAGS += -DCONFIG_DRIVER_RALINK
174OBJS_d += ../src/drivers/driver_ralink.o
175endif
176
177ifdef CONFIG_DRIVER_BROADCOM
178CFLAGS += -DCONFIG_DRIVER_BROADCOM
179OBJS_d += ../src/drivers/driver_broadcom.o
180endif
181
182ifdef CONFIG_DRIVER_IPW
183CFLAGS += -DCONFIG_DRIVER_IPW
184OBJS_d += ../src/drivers/driver_ipw.o
185CONFIG_WIRELESS_EXTENSION=y
186endif
187
188ifdef CONFIG_DRIVER_BSD
189CFLAGS += -DCONFIG_DRIVER_BSD
190OBJS_d += ../src/drivers/driver_bsd.o
191ifndef CONFIG_L2_PACKET
192CONFIG_L2_PACKET=freebsd
193endif
194endif
195
196ifdef CONFIG_DRIVER_NDIS
197CFLAGS += -DCONFIG_DRIVER_NDIS
198OBJS_d += ../src/drivers/driver_ndis.o
199ifdef CONFIG_NDIS_EVENTS_INTEGRATED
200OBJS_d += ../src/drivers/driver_ndis_.o
201endif
202ifndef CONFIG_L2_PACKET
203CONFIG_L2_PACKET=pcap
204endif
205CONFIG_WINPCAP=y
206ifdef CONFIG_USE_NDISUIO
207CFLAGS += -DCONFIG_USE_NDISUIO
208endif
209endif
210
211ifdef CONFIG_DRIVER_WIRED
212CFLAGS += -DCONFIG_DRIVER_WIRED
213OBJS_d += ../src/drivers/driver_wired.o
214endif
215
216ifdef CONFIG_DRIVER_TEST
217CFLAGS += -DCONFIG_DRIVER_TEST
218OBJS_d += ../src/drivers/driver_test.o
219endif
220
221ifdef CONFIG_DRIVER_OSX
222CFLAGS += -DCONFIG_DRIVER_OSX
223OBJS_d += ../src/drivers/driver_osx.o
224LDFLAGS += -framework CoreFoundation
225LDFLAGS += -F/System/Library/PrivateFrameworks -framework Apple80211
226endif
227
228ifdef CONFIG_DRIVER_PS3
229CFLAGS += -DCONFIG_DRIVER_PS3 -m64
230OBJS_d += ../src/drivers/driver_ps3.o
231LDFLAGS += -m64
232endif
233
234ifdef CONFIG_DRIVER_IPHONE
235CFLAGS += -DCONFIG_DRIVER_IPHONE
236OBJS_d += ../src/drivers/driver_iphone.o
237OBJS_d += ../src/drivers/MobileApple80211.o
238LIBS += -framework CoreFoundation
239endif
240
241ifdef CONFIG_DRIVER_ROBOSWITCH
242CFLAGS += -DCONFIG_DRIVER_ROBOSWITCH
243OBJS_d += ../src/drivers/driver_roboswitch.o
244endif
245
246ifndef CONFIG_L2_PACKET
247CONFIG_L2_PACKET=linux
248endif
249
250OBJS_l2 += ../src/l2_packet/l2_packet_$(CONFIG_L2_PACKET).o
251
252ifeq ($(CONFIG_L2_PACKET), pcap)
253ifdef CONFIG_WINPCAP
254CFLAGS += -DCONFIG_WINPCAP
255LIBS += -lwpcap -lpacket
256LIBS_w += -lwpcap
257else
258LIBS += -ldnet -lpcap
259endif
260endif
261
262ifeq ($(CONFIG_L2_PACKET), winpcap)
263LIBS += -lwpcap -lpacket
264LIBS_w += -lwpcap
265endif
266
267ifeq ($(CONFIG_L2_PACKET), freebsd)
268LIBS += -lpcap
269endif
270
271ifdef CONFIG_EAP_TLS
272# EAP-TLS
273ifeq ($(CONFIG_EAP_TLS), dyn)
274CFLAGS += -DEAP_TLS_DYNAMIC
275EAPDYN += ../src/eap_peer/eap_tls.so
276else
277CFLAGS += -DEAP_TLS
278OBJS += ../src/eap_peer/eap_tls.o
279OBJS_h += ../src/eap_server/eap_tls.o
280endif
281TLS_FUNCS=y
282CONFIG_IEEE8021X_EAPOL=y
283endif
284
285ifdef CONFIG_EAP_PEAP
286# EAP-PEAP
287ifeq ($(CONFIG_EAP_PEAP), dyn)
288CFLAGS += -DEAP_PEAP_DYNAMIC
289EAPDYN += ../src/eap_peer/eap_peap.so
290else
291CFLAGS += -DEAP_PEAP
292OBJS += ../src/eap_peer/eap_peap.o
293OBJS += ../src/eap_common/eap_peap_common.o
294OBJS_h += ../src/eap_server/eap_peap.o
295endif
296TLS_FUNCS=y
297CONFIG_IEEE8021X_EAPOL=y
298endif
299
300ifdef CONFIG_EAP_TTLS
301# EAP-TTLS
302ifeq ($(CONFIG_EAP_TTLS), dyn)
303CFLAGS += -DEAP_TTLS_DYNAMIC
304EAPDYN += ../src/eap_peer/eap_ttls.so
305else
306CFLAGS += -DEAP_TTLS
307OBJS += ../src/eap_peer/eap_ttls.o
308OBJS_h += ../src/eap_server/eap_ttls.o
309endif
310MS_FUNCS=y
311TLS_FUNCS=y
312CHAP=y
313CONFIG_IEEE8021X_EAPOL=y
314endif
315
316ifdef CONFIG_EAP_MD5
317# EAP-MD5
318ifeq ($(CONFIG_EAP_MD5), dyn)
319CFLAGS += -DEAP_MD5_DYNAMIC
320EAPDYN += ../src/eap_peer/eap_md5.so
321else
322CFLAGS += -DEAP_MD5
323OBJS += ../src/eap_peer/eap_md5.o
324OBJS_h += ../src/eap_server/eap_md5.o
325endif
326CHAP=y
327CONFIG_IEEE8021X_EAPOL=y
328endif
329
330# backwards compatibility for old spelling
331ifdef CONFIG_MSCHAPV2
332ifndef CONFIG_EAP_MSCHAPV2
333CONFIG_EAP_MSCHAPV2=y
334endif
335endif
336
337ifdef CONFIG_EAP_MSCHAPV2
338# EAP-MSCHAPv2
339ifeq ($(CONFIG_EAP_MSCHAPV2), dyn)
340CFLAGS += -DEAP_MSCHAPv2_DYNAMIC
341EAPDYN += ../src/eap_peer/eap_mschapv2.so
342EAPDYN += ../src/eap_peer/mschapv2.so
343else
344CFLAGS += -DEAP_MSCHAPv2
345OBJS += ../src/eap_peer/eap_mschapv2.o
346OBJS += ../src/eap_peer/mschapv2.o
347OBJS_h += ../src/eap_server/eap_mschapv2.o
348endif
349MS_FUNCS=y
350CONFIG_IEEE8021X_EAPOL=y
351endif
352
353ifdef CONFIG_EAP_GTC
354# EAP-GTC
355ifeq ($(CONFIG_EAP_GTC), dyn)
356CFLAGS += -DEAP_GTC_DYNAMIC
357EAPDYN += ../src/eap_peer/eap_gtc.so
358else
359CFLAGS += -DEAP_GTC
360OBJS += ../src/eap_peer/eap_gtc.o
361OBJS_h += ../src/eap_server/eap_gtc.o
362endif
363CONFIG_IEEE8021X_EAPOL=y
364endif
365
366ifdef CONFIG_EAP_OTP
367# EAP-OTP
368ifeq ($(CONFIG_EAP_OTP), dyn)
369CFLAGS += -DEAP_OTP_DYNAMIC
370EAPDYN += ../src/eap_peer/eap_otp.so
371else
372CFLAGS += -DEAP_OTP
373OBJS += ../src/eap_peer/eap_otp.o
374endif
375CONFIG_IEEE8021X_EAPOL=y
376endif
377
378ifdef CONFIG_EAP_SIM
379# EAP-SIM
380ifeq ($(CONFIG_EAP_SIM), dyn)
381CFLAGS += -DEAP_SIM_DYNAMIC
382EAPDYN += ../src/eap_peer/eap_sim.so
383else
384CFLAGS += -DEAP_SIM
385OBJS += ../src/eap_peer/eap_sim.o
386OBJS_h += ../src/eap_server/eap_sim.o
387endif
388CONFIG_IEEE8021X_EAPOL=y
389CONFIG_EAP_SIM_COMMON=y
390endif
391
392ifdef CONFIG_EAP_LEAP
393# EAP-LEAP
394ifeq ($(CONFIG_EAP_LEAP), dyn)
395CFLAGS += -DEAP_LEAP_DYNAMIC
396EAPDYN += ../src/eap_peer/eap_leap.so
397else
398CFLAGS += -DEAP_LEAP
399OBJS += ../src/eap_peer/eap_leap.o
400endif
401MS_FUNCS=y
402CONFIG_IEEE8021X_EAPOL=y
403endif
404
405ifdef CONFIG_EAP_PSK
406# EAP-PSK
407ifeq ($(CONFIG_EAP_PSK), dyn)
408CFLAGS += -DEAP_PSK_DYNAMIC
409EAPDYN += ../src/eap_peer/eap_psk.so
410else
411CFLAGS += -DEAP_PSK
412OBJS += ../src/eap_peer/eap_psk.o ../src/eap_common/eap_psk_common.o
413OBJS_h += ../src/eap_server/eap_psk.o
414endif
415CONFIG_IEEE8021X_EAPOL=y
416NEED_AES=y
417endif
418
419ifdef CONFIG_EAP_AKA
420# EAP-AKA
421ifeq ($(CONFIG_EAP_AKA), dyn)
422CFLAGS += -DEAP_AKA_DYNAMIC
423EAPDYN += ../src/eap_peer/eap_aka.so
424else
425CFLAGS += -DEAP_AKA
426OBJS += ../src/eap_peer/eap_aka.o
427OBJS_h += ../src/eap_server/eap_aka.o
428endif
429CONFIG_IEEE8021X_EAPOL=y
430CONFIG_EAP_SIM_COMMON=y
431endif
432
433ifdef CONFIG_EAP_AKA_PRIME
434# EAP-AKA'
435ifeq ($(CONFIG_EAP_AKA_PRIME), dyn)
436CFLAGS += -DEAP_AKA_PRIME_DYNAMIC
437else
438CFLAGS += -DEAP_AKA_PRIME
439endif
440NEED_SHA256=y
441endif
442
443ifdef CONFIG_EAP_SIM_COMMON
444OBJS += ../src/eap_common/eap_sim_common.o
445OBJS_h += ../src/eap_server/eap_sim_db.o
446NEED_AES=y
447NEED_FIPS186_2_PRF=y
448endif
449
450ifdef CONFIG_EAP_FAST
451# EAP-FAST
452ifeq ($(CONFIG_EAP_FAST), dyn)
453CFLAGS += -DEAP_FAST_DYNAMIC
454EAPDYN += ../src/eap_peer/eap_fast.so
455EAPDYN += ../src/eap_common/eap_fast_common.o
456else
457CFLAGS += -DEAP_FAST
458OBJS += ../src/eap_peer/eap_fast.o ../src/eap_peer/eap_fast_pac.o
459OBJS += ../src/eap_common/eap_fast_common.o
460OBJS_h += ../src/eap_server/eap_fast.o
461endif
462TLS_FUNCS=y
463CONFIG_IEEE8021X_EAPOL=y
464NEED_T_PRF=y
465endif
466
467ifdef CONFIG_EAP_PAX
468# EAP-PAX
469ifeq ($(CONFIG_EAP_PAX), dyn)
470CFLAGS += -DEAP_PAX_DYNAMIC
471EAPDYN += ../src/eap_peer/eap_pax.so
472else
473CFLAGS += -DEAP_PAX
474OBJS += ../src/eap_peer/eap_pax.o ../src/eap_common/eap_pax_common.o
475OBJS_h += ../src/eap_server/eap_pax.o
476endif
477CONFIG_IEEE8021X_EAPOL=y
478endif
479
480ifdef CONFIG_EAP_SAKE
481# EAP-SAKE
482ifeq ($(CONFIG_EAP_SAKE), dyn)
483CFLAGS += -DEAP_SAKE_DYNAMIC
484EAPDYN += ../src/eap_peer/eap_sake.so
485else
486CFLAGS += -DEAP_SAKE
487OBJS += ../src/eap_peer/eap_sake.o ../src/eap_common/eap_sake_common.o
488OBJS_h += ../src/eap_server/eap_sake.o
489endif
490CONFIG_IEEE8021X_EAPOL=y
491endif
492
493ifdef CONFIG_EAP_GPSK
494# EAP-GPSK
495ifeq ($(CONFIG_EAP_GPSK), dyn)
496CFLAGS += -DEAP_GPSK_DYNAMIC
497EAPDYN += ../src/eap_peer/eap_gpsk.so
498else
499CFLAGS += -DEAP_GPSK
500OBJS += ../src/eap_peer/eap_gpsk.o ../src/eap_common/eap_gpsk_common.o
501OBJS_h += ../src/eap_server/eap_gpsk.o
502endif
503CONFIG_IEEE8021X_EAPOL=y
504ifdef CONFIG_EAP_GPSK_SHA256
505CFLAGS += -DEAP_GPSK_SHA256
506endif
507NEED_SHA256=y
508endif
509
510ifdef CONFIG_WPS
511# EAP-WSC
512CFLAGS += -DCONFIG_WPS -DEAP_WSC
513OBJS += wps_supplicant.o
514OBJS += ../src/utils/uuid.o
515OBJS += ../src/eap_peer/eap_wsc.o ../src/eap_common/eap_wsc_common.o
516OBJS += ../src/wps/wps.o
517OBJS += ../src/wps/wps_common.o
518OBJS += ../src/wps/wps_attr_parse.o
519OBJS += ../src/wps/wps_attr_build.o
520OBJS += ../src/wps/wps_attr_process.o
521OBJS += ../src/wps/wps_dev_attr.o
522OBJS += ../src/wps/wps_enrollee.o
523OBJS += ../src/wps/wps_registrar.o
524OBJS_h += ../src/eap_server/eap_wsc.o
525CONFIG_IEEE8021X_EAPOL=y
526NEED_DH_GROUPS=y
527NEED_SHA256=y
528NEED_BASE64=y
529NEED_CRYPTO=y
530NEED_80211_COMMON=y
531
532ifdef CONFIG_WPS_UPNP
533CFLAGS += -DCONFIG_WPS_UPNP
534OBJS += ../src/wps/wps_upnp.o
535OBJS += ../src/wps/wps_upnp_ssdp.o
536OBJS += ../src/wps/wps_upnp_web.o
537OBJS += ../src/wps/wps_upnp_event.o
538OBJS += ../src/wps/httpread.o
539endif
540
541endif
542
543ifdef CONFIG_EAP_IKEV2
544# EAP-IKEv2
545ifeq ($(CONFIG_EAP_IKEV2), dyn)
546CFLAGS += -DEAP_IKEV2_DYNAMIC
547EAPDYN += ../src/eap_peer/eap_ikev2.so ../src/eap_peer/ikev2.o
548EAPDYN += ../src/eap_common/eap_ikev2_common.o ../src/eap_common/ikev2_common.o
549else
550CFLAGS += -DEAP_IKEV2
551OBJS += ../src/eap_peer/eap_ikev2.o ../src/eap_peer/ikev2.o
552OBJS += ../src/eap_common/eap_ikev2_common.o ../src/eap_common/ikev2_common.o
553OBJS_h += ../src/eap_server/eap_ikev2.o
554OBJS_h += ../src/eap_server/ikev2.o
555endif
556CONFIG_IEEE8021X_EAPOL=y
557NEED_DH_GROUPS=y
558NEED_DH_GROUPS_ALL=y
559endif
560
561ifdef CONFIG_EAP_VENDOR_TEST
562ifeq ($(CONFIG_EAP_VENDOR_TEST), dyn)
563CFLAGS += -DEAP_VENDOR_TEST_DYNAMIC
564EAPDYN += ../src/eap_peer/eap_vendor_test.so
565else
566CFLAGS += -DEAP_VENDOR_TEST
567OBJS += ../src/eap_peer/eap_vendor_test.o
568OBJS_h += ../src/eap_server/eap_vendor_test.o
569endif
570CONFIG_IEEE8021X_EAPOL=y
571endif
572
573ifdef CONFIG_EAP_TNC
574# EAP-TNC
575CFLAGS += -DEAP_TNC
576OBJS += ../src/eap_peer/eap_tnc.o
577OBJS += ../src/eap_peer/tncc.o
578NEED_BASE64=y
579ifndef CONFIG_NATIVE_WINDOWS
580ifndef CONFIG_DRIVER_BSD
581LIBS += -ldl
582endif
583endif
584endif
585
586ifdef CONFIG_IEEE8021X_EAPOL
587# IEEE 802.1X/EAPOL state machines (e.g., for RADIUS authentication)
588CFLAGS += -DIEEE8021X_EAPOL
589OBJS += ../src/eapol_supp/eapol_supp_sm.o ../src/eap_peer/eap.o ../src/eap_common/eap_common.o ../src/eap_peer/eap_methods.o
590ifdef CONFIG_DYNAMIC_EAP_METHODS
591CFLAGS += -DCONFIG_DYNAMIC_EAP_METHODS
592LIBS += -ldl -rdynamic
593endif
594endif
595
596ifdef CONFIG_EAP_SERVER
597CFLAGS += -DEAP_SERVER
598OBJS_h += ../src/eap_server/eap.o
599OBJS_h += ../src/eap_server/eap_identity.o
600OBJS_h += ../src/eap_server/eap_methods.o
601endif
602
603ifdef CONFIG_RADIUS_CLIENT
604OBJS_h += ../src/utils/ip_addr.o
605OBJS_h += ../src/radius/radius.o
606OBJS_h += ../src/radius/radius_client.o
607endif
608
609ifdef CONFIG_AUTHENTICATOR
610OBJS_h += ../hostapd/eapol_sm.o
611OBJS_h += ../hostapd/ieee802_1x.o
612endif
613
614ifdef CONFIG_WPA_AUTHENTICATOR
615OBJS_h += ../hostapd/wpa.o
616OBJS_h += ../hostapd/wpa_auth_ie.o
617ifdef CONFIG_IEEE80211R
618OBJS_h += ../hostapd/wpa_ft.o
619endif
620ifdef CONFIG_PEERKEY
621OBJS_h += ../hostapd/peerkey.o
622endif
623endif
624
625ifdef CONFIG_PCSC
626# PC/SC interface for smartcards (USIM, GSM SIM)
627CFLAGS += -DPCSC_FUNCS -I/usr/include/PCSC
628OBJS += ../src/utils/pcsc_funcs.o
629# -lpthread may not be needed depending on how pcsc-lite was configured
630ifdef CONFIG_NATIVE_WINDOWS
631#Once MinGW gets support for WinScard, -lwinscard could be used instead of the
632#dynamic symbol loading that is now used in pcsc_funcs.c
633#LIBS += -lwinscard
634else
635LIBS += -lpcsclite -lpthread
636endif
637endif
638
639ifdef CONFIG_SIM_SIMULATOR
640CFLAGS += -DCONFIG_SIM_SIMULATOR
641NEED_MILENAGE=y
642endif
643
644ifdef CONFIG_USIM_SIMULATOR
645CFLAGS += -DCONFIG_USIM_SIMULATOR
646NEED_MILENAGE=y
647endif
648
649ifdef NEED_MILENAGE
650OBJS += ../src/hlr_auc_gw/milenage.o
651endif
652
653ifndef CONFIG_TLS
654CONFIG_TLS=openssl
655endif
656
657ifeq ($(CONFIG_TLS), internal)
658ifndef CONFIG_CRYPTO
659CONFIG_CRYPTO=internal
660endif
661endif
662ifeq ($(CONFIG_CRYPTO), libtomcrypt)
663CFLAGS += -DCONFIG_INTERNAL_X509
664endif
665ifeq ($(CONFIG_CRYPTO), internal)
666CFLAGS += -DCONFIG_INTERNAL_X509
667endif
668
669
670ifdef TLS_FUNCS
671# Shared TLS functions (needed for EAP_TLS, EAP_PEAP, EAP_TTLS, and EAP_FAST)
672CFLAGS += -DEAP_TLS_FUNCS
673OBJS += ../src/eap_peer/eap_tls_common.o
674OBJS_h += ../src/eap_server/eap_tls_common.o
675NEED_TLS_PRF=y
676ifeq ($(CONFIG_TLS), openssl)
677CFLAGS += -DEAP_TLS_OPENSSL
678OBJS += ../src/crypto/tls_openssl.o
679LIBS += -lssl -lcrypto
680LIBS_p += -lcrypto
681endif
682ifeq ($(CONFIG_TLS), gnutls)
683OBJS += ../src/crypto/tls_gnutls.o
684LIBS += -lgnutls -lgcrypt -lgpg-error
685LIBS_p += -lgcrypt
686ifdef CONFIG_GNUTLS_EXTRA
687CFLAGS += -DCONFIG_GNUTLS_EXTRA
688LIBS += -lgnutls-extra
689endif
690endif
691ifeq ($(CONFIG_TLS), schannel)
692OBJS += ../src/crypto/tls_schannel.o
693endif
694ifeq ($(CONFIG_TLS), internal)
695OBJS += ../src/crypto/tls_internal.o
696OBJS += ../src/tls/tlsv1_common.o ../src/tls/tlsv1_record.o
697OBJS += ../src/tls/tlsv1_cred.o ../src/tls/tlsv1_client.o
698OBJS += ../src/tls/tlsv1_client_write.o ../src/tls/tlsv1_client_read.o
699OBJS += ../src/tls/asn1.o ../src/tls/rsa.o ../src/tls/x509v3.o
700OBJS_p += ../src/tls/asn1.o ../src/tls/rsa.o
701OBJS_p += ../src/crypto/rc4.o ../src/crypto/aes_wrap.o ../src/crypto/aes.o
702NEED_BASE64=y
703NEED_TLS_PRF=y
704CFLAGS += -DCONFIG_TLS_INTERNAL
705CFLAGS += -DCONFIG_TLS_INTERNAL_CLIENT
706ifeq ($(CONFIG_CRYPTO), internal)
707endif
708ifeq ($(CONFIG_CRYPTO), libtomcrypt)
709LIBS += -ltomcrypt -ltfm
710LIBS_p += -ltomcrypt -ltfm
711endif
712endif
713ifeq ($(CONFIG_TLS), none)
714OBJS += ../src/crypto/tls_none.o
715CFLAGS += -DEAP_TLS_NONE
716CONFIG_INTERNAL_AES=y
717CONFIG_INTERNAL_SHA1=y
718CONFIG_INTERNAL_MD5=y
719CONFIG_INTERNAL_SHA256=y
720endif
721ifdef CONFIG_SMARTCARD
722ifndef CONFIG_NATIVE_WINDOWS
723ifneq ($(CONFIG_L2_PACKET), freebsd)
724LIBS += -ldl
725endif
726endif
727endif
728NEED_CRYPTO=y
729else
730OBJS += ../src/crypto/tls_none.o
731endif
732
733ifdef CONFIG_PKCS12
734CFLAGS += -DPKCS12_FUNCS
735endif
736
737ifdef CONFIG_SMARTCARD
738CFLAGS += -DCONFIG_SMARTCARD
739endif
740
741ifdef MS_FUNCS
742OBJS += ../src/crypto/ms_funcs.o
743NEED_CRYPTO=y
744endif
745
746ifdef CHAP
747OBJS += ../src/eap_common/chap.o
748endif
749
750ifdef NEED_CRYPTO
751ifndef TLS_FUNCS
752ifeq ($(CONFIG_TLS), openssl)
753LIBS += -lcrypto
754LIBS_p += -lcrypto
755endif
756ifeq ($(CONFIG_TLS), gnutls)
757LIBS += -lgcrypt
758LIBS_p += -lgcrypt
759endif
760ifeq ($(CONFIG_TLS), schannel)
761endif
762ifeq ($(CONFIG_TLS), internal)
763ifeq ($(CONFIG_CRYPTO), libtomcrypt)
764LIBS += -ltomcrypt -ltfm
765LIBS_p += -ltomcrypt -ltfm
766endif
767endif
768endif
769ifeq ($(CONFIG_TLS), openssl)
770OBJS += ../src/crypto/crypto_openssl.o
771OBJS_p += ../src/crypto/crypto_openssl.o
772CONFIG_INTERNAL_SHA256=y
773endif
774ifeq ($(CONFIG_TLS), gnutls)
775OBJS += ../src/crypto/crypto_gnutls.o
776OBJS_p += ../src/crypto/crypto_gnutls.o
777CONFIG_INTERNAL_SHA256=y
778endif
779ifeq ($(CONFIG_TLS), schannel)
780OBJS += ../src/crypto/crypto_cryptoapi.o
781OBJS_p += ../src/crypto/crypto_cryptoapi.o
782CONFIG_INTERNAL_SHA256=y
783endif
784ifeq ($(CONFIG_TLS), internal)
785ifeq ($(CONFIG_CRYPTO), libtomcrypt)
786OBJS += ../src/crypto/crypto_libtomcrypt.o
787OBJS_p += ../src/crypto/crypto_libtomcrypt.o
788CONFIG_INTERNAL_SHA256=y
789endif
790ifeq ($(CONFIG_CRYPTO), internal)
791OBJS += ../src/crypto/crypto_internal.o ../src/tls/bignum.o
792OBJS_p += ../src/crypto/crypto_internal.o ../src/tls/bignum.o
793CFLAGS += -DCONFIG_CRYPTO_INTERNAL
794ifdef CONFIG_INTERNAL_LIBTOMMATH
795CFLAGS += -DCONFIG_INTERNAL_LIBTOMMATH
796ifdef CONFIG_INTERNAL_LIBTOMMATH_FAST
797CFLAGS += -DLTM_FAST
798endif
799else
800LIBS += -ltommath
801LIBS_p += -ltommath
802endif
803CONFIG_INTERNAL_AES=y
804CONFIG_INTERNAL_DES=y
805CONFIG_INTERNAL_SHA1=y
806CONFIG_INTERNAL_MD4=y
807CONFIG_INTERNAL_MD5=y
808CONFIG_INTERNAL_SHA256=y
809endif
810ifeq ($(CONFIG_CRYPTO), cryptoapi)
811OBJS += ../src/crypto/crypto_cryptoapi.o
812OBJS_p += ../src/crypto/crypto_cryptoapi.o
813CFLAGS += -DCONFIG_CRYPTO_CRYPTOAPI
814CONFIG_INTERNAL_SHA256=y
815endif
816endif
817ifeq ($(CONFIG_TLS), none)
818OBJS += ../src/crypto/crypto_none.o
819OBJS_p += ../src/crypto/crypto_none.o
820CONFIG_INTERNAL_SHA256=y
821endif
822else
823CONFIG_INTERNAL_AES=y
824CONFIG_INTERNAL_SHA1=y
825CONFIG_INTERNAL_MD5=y
826endif
827
828ifdef CONFIG_INTERNAL_AES
829CFLAGS += -DINTERNAL_AES
830endif
831ifdef CONFIG_INTERNAL_SHA1
832CFLAGS += -DINTERNAL_SHA1
833endif
834ifdef CONFIG_INTERNAL_SHA256
835CFLAGS += -DINTERNAL_SHA256
836endif
837ifdef CONFIG_INTERNAL_MD5
838CFLAGS += -DINTERNAL_MD5
839endif
840ifdef CONFIG_INTERNAL_MD4
841CFLAGS += -DINTERNAL_MD4
842endif
843ifdef CONFIG_INTERNAL_DES
844CFLAGS += -DINTERNAL_DES
845endif
846
847ifdef CONFIG_IEEE80211R
848NEED_SHA256=y
849endif
850
851ifdef CONFIG_IEEE80211W
852CFLAGS += -DCONFIG_IEEE80211W
853NEED_SHA256=y
854endif
855
856ifdef NEED_SHA256
857OBJS += ../src/crypto/sha256.o
858CFLAGS += -DNEED_SHA256
859endif
860
861ifdef CONFIG_WIRELESS_EXTENSION
862OBJS_d += ../src/drivers/driver_wext.o
863endif
864
865ifdef CONFIG_CTRL_IFACE
866ifeq ($(CONFIG_CTRL_IFACE), y)
867ifdef CONFIG_NATIVE_WINDOWS
868CONFIG_CTRL_IFACE=named_pipe
869else
870CONFIG_CTRL_IFACE=unix
871endif
872endif
873CFLAGS += -DCONFIG_CTRL_IFACE
874ifeq ($(CONFIG_CTRL_IFACE), unix)
875CFLAGS += -DCONFIG_CTRL_IFACE_UNIX
876endif
877ifeq ($(CONFIG_CTRL_IFACE), udp)
878CFLAGS += -DCONFIG_CTRL_IFACE_UDP
879endif
880ifeq ($(CONFIG_CTRL_IFACE), named_pipe)
881CFLAGS += -DCONFIG_CTRL_IFACE_NAMED_PIPE
882endif
883OBJS += ctrl_iface.o ctrl_iface_$(CONFIG_CTRL_IFACE).o
884endif
885
886ifdef CONFIG_CTRL_IFACE_DBUS
887CFLAGS += -DCONFIG_CTRL_IFACE_DBUS -DDBUS_API_SUBJECT_TO_CHANGE
888OBJS += ctrl_iface_dbus.o ctrl_iface_dbus_handlers.o dbus_dict_helpers.o
889ifndef DBUS_LIBS
890DBUS_LIBS := $(shell pkg-config --libs dbus-1)
891endif
892LIBS += $(DBUS_LIBS)
893ifndef DBUS_INCLUDE
894DBUS_INCLUDE := $(shell pkg-config --cflags dbus-1)
895endif
896dbus_version=$(subst ., ,$(shell pkg-config --modversion dbus-1))
897DBUS_VERSION_MAJOR=$(word 1,$(dbus_version))
898DBUS_VERSION_MINOR=$(word 2,$(dbus_version))
899ifeq ($(DBUS_VERSION_MAJOR),)
900DBUS_VERSION_MAJOR=0
901endif
902ifeq ($(DBUS_VERSION_MINOR),)
903DBUS_VERSION_MINOR=0
904endif
905DBUS_INCLUDE += -DDBUS_VERSION_MAJOR=$(DBUS_VERSION_MAJOR)
906DBUS_INCLUDE += -DDBUS_VERSION_MINOR=$(DBUS_VERSION_MINOR)
907CFLAGS += $(DBUS_INCLUDE)
908endif
909
910ifdef CONFIG_READLINE
911CFLAGS += -DCONFIG_READLINE
912LIBS_c += -lncurses -lreadline
913endif
914
915ifdef CONFIG_NATIVE_WINDOWS
916CFLAGS += -DCONFIG_NATIVE_WINDOWS
917LIBS += -lws2_32 -lgdi32 -lcrypt32
918LIBS_c += -lws2_32
919LIBS_p += -lws2_32 -lgdi32
920ifeq ($(CONFIG_CRYPTO), cryptoapi)
921LIBS_p += -lcrypt32
922endif
923endif
924
925ifdef CONFIG_NO_STDOUT_DEBUG
926CFLAGS += -DCONFIG_NO_STDOUT_DEBUG
927ifndef CONFIG_CTRL_IFACE
928CFLAGS += -DCONFIG_NO_WPA_MSG
929endif
930endif
931
932ifdef CONFIG_IPV6
933# for eapol_test only
934CFLAGS += -DCONFIG_IPV6
935endif
936
937ifdef CONFIG_PEERKEY
938CFLAGS += -DCONFIG_PEERKEY
939endif
940
941ifdef CONFIG_IEEE80211R
942CFLAGS += -DCONFIG_IEEE80211R
943OBJS += ../src/rsn_supp/wpa_ft.o
944endif
945
946ifndef CONFIG_NO_WPA
947OBJS += ../src/rsn_supp/wpa.o
948OBJS += ../src/rsn_supp/preauth.o
949OBJS += ../src/rsn_supp/pmksa_cache.o
950OBJS += ../src/rsn_supp/peerkey.o
951OBJS += ../src/rsn_supp/wpa_ie.o
952OBJS += ../src/common/wpa_common.o
953NEED_AES=y
954else
955CFLAGS += -DCONFIG_NO_WPA -DCONFIG_NO_WPA2
956endif
957
958ifdef CONFIG_NO_WPA2
959CFLAGS += -DCONFIG_NO_WPA2
960endif
961
962ifdef CONFIG_NO_WPA_PASSPHRASE
963CFLAGS += -DCONFIG_NO_PBKDF2
964endif
965
966ifdef CONFIG_NO_AES_EXTRAS
967CFLAGS += -DCONFIG_NO_AES_WRAP
968CFLAGS += -DCONFIG_NO_AES_CTR -DCONFIG_NO_AES_OMAC1
969CFLAGS += -DCONFIG_NO_AES_EAX -DCONFIG_NO_AES_CBC
970CFLAGS += -DCONFIG_NO_AES_ENCRYPT
971CFLAGS += -DCONFIG_NO_AES_ENCRYPT_BLOCK
972endif
973
974ifdef NEED_AES
975OBJS += ../src/crypto/aes_wrap.o ../src/crypto/aes.o
976endif
977
978ifdef NEED_DH_GROUPS
979OBJS += ../src/crypto/dh_groups.o
980ifdef NEED_DH_GROUPS_ALL
981CFLAGS += -DALL_DH_GROUPS
982endif
983endif
984
985ifndef NEED_FIPS186_2_PRF
986CFLAGS += -DCONFIG_NO_FIPS186_2_PRF
987endif
988
989ifndef NEED_T_PRF
990CFLAGS += -DCONFIG_NO_T_PRF
991endif
992
993ifndef NEED_TLS_PRF
994CFLAGS += -DCONFIG_NO_TLS_PRF
995endif
996
997ifdef NEED_BASE64
998OBJS += ../src/utils/base64.o
999endif
1000
1001ifdef CONFIG_CLIENT_MLME
1002OBJS += mlme.o ../src/common/ieee802_11_common.o
1003CFLAGS += -DCONFIG_CLIENT_MLME
1004endif
1005
1006ifndef CONFIG_MAIN
1007CONFIG_MAIN=main
1008endif
1009
1010ifdef CONFIG_DEBUG_SYSLOG
1011CFLAGS += -DCONFIG_DEBUG_SYSLOG
1012endif
1013
1014ifdef CONFIG_DEBUG_FILE
1015CFLAGS += -DCONFIG_DEBUG_FILE
1016endif
1017
1018ifdef CONFIG_DELAYED_MIC_ERROR_REPORT
1019CFLAGS += -DCONFIG_DELAYED_MIC_ERROR_REPORT
1020endif
1021
1022OBJS += ../src/drivers/scan_helpers.o
1023
1024OBJS_wpa_rm := ctrl_iface.o mlme.o ctrl_iface_unix.o
1025OBJS_wpa := $(filter-out $(OBJS_wpa_rm),$(OBJS)) $(OBJS_h) tests/test_wpa.o
1026ifdef CONFIG_AUTHENTICATOR
1027OBJS_wpa += tests/link_test.o
1028endif
1029OBJS_wpa += $(OBJS_l2)
1030OBJS += wpa_supplicant.o events.o blacklist.o wpas_glue.o scan.o
1031OBJS_t := $(OBJS) $(OBJS_l2) eapol_test.o ../src/radius/radius.o ../src/radius/radius_client.o
1032OBJS_t += ../src/utils/ip_addr.o
1033OBJS_t2 := $(OBJS) $(OBJS_l2) preauth_test.o
1034OBJS += $(CONFIG_MAIN).o
1035
1036ifdef CONFIG_PRIVSEP
1037OBJS_priv += $(OBJS_d) ../src/drivers/drivers.o ../src/drivers/scan_helpers.o
1038OBJS_priv += $(OBJS_l2)
1039OBJS_priv += ../src/utils/os_$(CONFIG_OS).o
1040OBJS_priv += ../src/utils/$(CONFIG_ELOOP).o
1041OBJS_priv += ../src/utils/common.o
1042OBJS_priv += ../src/utils/wpa_debug.o
1043OBJS_priv += ../src/utils/wpabuf.o
1044OBJS_priv += wpa_priv.o
1045ifdef CONFIG_DRIVER_TEST
1046OBJS_priv += ../src/crypto/sha1.o
1047OBJS_priv += ../src/crypto/md5.o
1048ifeq ($(CONFIG_TLS), openssl)
1049OBJS_priv += ../src/crypto/crypto_openssl.o
1050endif
1051ifeq ($(CONFIG_TLS), gnutls)
1052OBJS_priv += ../src/crypto/crypto_gnutls.o
1053endif
1054ifeq ($(CONFIG_TLS), internal)
1055ifeq ($(CONFIG_CRYPTO), libtomcrypt)
1056OBJS_priv += ../src/crypto/crypto_libtomcrypt.o
1057else
1058OBJS_priv += ../src/crypto/crypto_internal.o
1059endif
1060endif
1061endif # CONFIG_DRIVER_TEST
1062OBJS += ../src/l2_packet/l2_packet_privsep.o
1063OBJS += ../src/drivers/driver_privsep.o
1064EXTRA_progs += wpa_priv
1065else
1066OBJS += $(OBJS_d) ../src/drivers/drivers.o
1067OBJS += $(OBJS_l2)
1068endif
1069
1070ifdef CONFIG_NDIS_EVENTS_INTEGRATED
1071CFLAGS += -DCONFIG_NDIS_EVENTS_INTEGRATED
1072OBJS += ../src/drivers/ndis_events.o
1073EXTRALIBS += -loleaut32 -lole32 -luuid
1074ifdef PLATFORMSDKLIB
1075EXTRALIBS += $(PLATFORMSDKLIB)/WbemUuid.Lib
1076else
1077EXTRALIBS += WbemUuid.Lib
1078endif
1079endif
1080
1081ifndef LDO
1082LDO=$(CC)
1083endif
1084
1085dynamic_eap_methods: $(EAPDYN)
1086
1087wpa_priv: $(OBJS_priv)
1088	$(LDO) $(LDFLAGS) -o wpa_priv $(OBJS_priv) $(LIBS)
1089
1090wpa_supplicant: .config $(OBJS) $(EXTRA_progs)
1091	$(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS)
1092
1093eapol_test: .config $(OBJS_t)
1094	$(LDO) $(LDFLAGS) -o eapol_test $(OBJS_t) $(LIBS)
1095
1096preauth_test: .config $(OBJS_t2) 
1097	$(LDO) $(LDFLAGS) -o preauth_test $(OBJS_t2) $(LIBS)
1098
1099wpa_passphrase: $(OBJS_p)
1100	$(LDO) $(LDFLAGS) -o wpa_passphrase $(OBJS_p) $(LIBS_p)
1101
1102wpa_cli: $(OBJS_c)
1103	$(LDO) $(LDFLAGS) -o wpa_cli $(OBJS_c) $(LIBS_c)
1104
1105link_test: $(OBJS) $(OBJS_h) tests/link_test.o
1106	$(LDO) $(LDFLAGS) -o link_test $(OBJS) $(OBJS_h) tests/link_test.o $(LIBS)
1107
1108test_wpa: $(OBJS_wpa) $(OBJS_h)
1109	$(LDO) $(LDFLAGS) -o test_wpa $(OBJS_wpa) $(LIBS)
1110
1111OBJSa=../src/tls/asn1_test.o ../src/tls/asn1.o ../src/tls/x509v3.o ../src/utils/common.o ../src/utils/wpa_debug.o ../src/utils/os_unix.o \
1112	../src/crypto/crypto_$(CONFIG_CRYPTO).o ../src/crypto/md5.o ../src/crypto/sha1.o \
1113	../src/crypto/rc4.o ../src/crypto/des.o ../src/crypto/aes_wrap.o \
1114	../src/crypto/aes.o ../src/tls/bignum.o ../src/tls/rsa.o
1115asn1_test: $(OBJSa)
1116	$(LDO) $(LDFLAGS) -o asn1_test $(OBJSa)
1117
1118OBJSx=tests/test_x509v3.o ../src/tls/asn1.o ../src/tls/x509v3.o \
1119	../src/utils/common.o ../src/utils/wpa_debug.o ../src/utils/os_unix.o \
1120	../src/crypto/crypto_$(CONFIG_CRYPTO).o \
1121	../src/crypto/md5.o ../src/crypto/sha1.o ../src/crypto/aes.o \
1122	../src/crypto/rc4.o ../src/crypto/des.o ../src/crypto/aes_wrap.o \
1123	../src/crypto/sha256.o \
1124	../src/tls/bignum.o ../src/tls/rsa.o
1125test_x509v3: $(OBJSx)
1126	$(LDO) $(LDFLAGS) -o test_x509v3 $(OBJSx)
1127
1128win_if_list: win_if_list.c
1129	$(LDO) $(LDFLAGS) -o $@ win_if_list.c $(CFLAGS) $(LIBS_w)
1130
1131eap_psk.so: ../src/eap_peer/eap_psk.c ../src/eap_common/eap_psk_common.c
1132	$(CC) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1133		-Deap_peer_psk_register=eap_peer_method_dynamic_init
1134
1135eap_pax.so: ../src/eap_peer/eap_pax.c ../src/eap_common/eap_pax_common.c
1136	$(CC) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1137		-Deap_peer_pax_register=eap_peer_method_dynamic_init
1138
1139eap_sake.so: ../src/eap_peer/eap_sake.c ../src/eap_common/eap_sake_common.c
1140	$(CC) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1141		-Deap_peer_sake_register=eap_peer_method_dynamic_init
1142
1143eap_wsc.so: ../src/eap_peer/eap_wsc.c ../src/eap_common/eap_wsc_common.c ../src/wps/wps.c
1144	$(CC) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1145		-Deap_peer_wsc_register=eap_peer_method_dynamic_init
1146
1147eap_ikev2.so: ../src/eap_peer/eap_ikev2.c ../src/eap_peer/ikev2.c ../src/eap_common/eap_ikev2_common.o ../src/eap_common/ikev2_common.c
1148	$(CC) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $^ \
1149		-Deap_peer_ikev2_register=eap_peer_method_dynamic_init
1150
1151%.so: %.c
1152	$(CC) -o $@ $(CFLAGS) -shared -rdynamic -fPIC $< \
1153		-D$(*F:eap_%=eap_peer_%)_register=eap_peer_method_dynamic_init
1154
1155Q=@
1156E=echo
1157ifeq ($(V), 1)
1158Q=
1159E=true
1160endif
1161
1162%.o: %.c
1163	$(Q)$(CC) -c -o $@ $(CFLAGS) $<
1164	@$(E) "  CC " $<
1165
1166wpa_supplicant.exe: wpa_supplicant
1167	mv -f $< $@
1168wpa_cli.exe: wpa_cli
1169	mv -f $< $@
1170wpa_passphrase.exe: wpa_passphrase
1171	mv -f $< $@
1172win_if_list.exe: win_if_list
1173	mv -f $< $@
1174eapol_test.exe: eapol_test
1175	mv -f $< $@
1176
1177WINALL=wpa_supplicant.exe wpa_cli.exe wpa_passphrase.exe win_if_list.exe
1178
1179windows-bin: $(WINALL)
1180	$(STRIP) $(WINALL)
1181
1182wpa_gui/Makefile:
1183	qmake -o wpa_gui/Makefile wpa_gui/wpa_gui.pro 
1184
1185wpa_gui: wpa_gui/Makefile
1186	$(MAKE) -C wpa_gui
1187
1188wpa_gui-qt4/Makefile:
1189	qmake -o wpa_gui-qt4/Makefile wpa_gui-qt4/wpa_gui.pro 
1190
1191wpa_gui-qt4: wpa_gui-qt4/Makefile
1192	$(MAKE) -C wpa_gui-qt4
1193
1194TEST_MS_FUNCS_OBJS = ../src/crypto/crypto_openssl.o ../src/crypto/sha1.o ../src/crypto/md5.o \
1195	../src/utils/os_unix.o ../src/crypto/rc4.o tests/test_ms_funcs.o
1196test-ms_funcs: $(TEST_MS_FUNCS_OBJS)
1197	$(LDO) $(LDFLAGS) -o $@ $(TEST_MS_FUNCS_OBJS) $(LIBS) -lcrypto
1198	./test-ms_funcs
1199	rm test-ms_funcs
1200
1201TEST_SHA1_OBJS = ../src/crypto/sha1.o ../src/crypto/md5.o tests/test_sha1.o #../src/crypto/crypto_openssl.o
1202test-sha1: $(TEST_SHA1_OBJS)
1203	$(LDO) $(LDFLAGS) -o $@ $(TEST_SHA1_OBJS) $(LIBS)
1204	./test-sha1
1205	rm test-sha1
1206
1207TEST_SHA256_OBJS = ../src/crypto/sha256.o ../src/crypto/md5.o tests/test_sha256.o ../src/utils/os_unix.o ../src/crypto/crypto_openssl.o
1208test-sha256: $(TEST_SHA256_OBJS)
1209	$(LDO) $(LDFLAGS) -o $@ $(TEST_SHA256_OBJS) $(LIBS)
1210	./test-sha256
1211	rm test-sha256
1212
1213TEST_AES_OBJS = ../src/crypto/aes_wrap.o ../src/crypto/aes.o tests/test_aes.o
1214test-aes: $(TEST_AES_OBJS)
1215	$(LDO) $(LDFLAGS) -o $@ $(TEST_AES_OBJS) $(LIBS)
1216	./test-aes
1217	rm test-aes
1218
1219TEST_EAP_SIM_COMMON_OBJS = ../src/crypto/sha1.o ../src/crypto/md5.o \
1220	../src/crypto/aes_wrap.o ../src/utils/common.o ../src/utils/os_unix.o \
1221	../src/utils/wpa_debug.o ../src/crypto/aes.o \
1222	tests/test_eap_sim_common.o
1223test-eap_sim_common: $(TEST_EAP_SIM_COMMON_OBJS)
1224	$(LDO) $(LDFLAGS) -o $@ $(TEST_AES_OBJS) $(LIBS)
1225	./test-eap_sim_common
1226	rm test-eap_sim_common
1227
1228TEST_MD4_OBJS = ../src/crypto/md4.o tests/test_md4.o #../src/crypto/crypto_openssl.o
1229test-md4: $(TEST_MD4_OBJS)
1230	$(LDO) $(LDFLAGS) -o $@ $(TEST_MD4_OBJS) $(LIBS)
1231	./test-md4
1232	rm test-md4
1233
1234TEST_MD5_OBJS = ../src/crypto/md5.o tests/test_md5.o #../src/crypto/crypto_openssl.o
1235test-md5: $(TEST_MD5_OBJS)
1236	$(LDO) $(LDFLAGS) -o $@ $(TEST_MD5_OBJS) $(LIBS)
1237	./test-md5
1238	rm test-md5
1239
1240tests: test-ms_funcs test-sha1 test-aes test-eap_sim_common test-md4 test-md5
1241
1242clean:
1243	$(MAKE) -C ../src clean
1244	rm -f core *~ *.o *.d eap_*.so $(ALL) $(WINALL) eapol_test preauth_test
1245	rm -f wpa_priv
1246
1247%.eps: %.fig
1248	fig2dev -L eps $*.fig $*.eps
1249
1250%.png: %.fig
1251	fig2dev -L png -m 3 $*.fig | pngtopnm | pnmscale 0.4 | pnmtopng \
1252		> $*.png
1253
1254docs-pics: doc/wpa_supplicant.png doc/wpa_supplicant.eps
1255
1256docs: docs-pics
1257	(cd ..; doxygen wpa_supplicant/doc/doxygen.full; cd wpa_supplicant)
1258	$(MAKE) -C doc/latex
1259	cp doc/latex/refman.pdf wpa_supplicant-devel.pdf
1260
1261docs-fast: docs-pics
1262	(cd ..; doxygen wpa_supplicant/doc/doxygen.fast; cd wpa_supplicant)
1263
1264clean-docs:
1265	rm -rf doc/latex doc/html
1266	rm -f doc/wpa_supplicant.{eps,png} wpa_supplicant-devel.pdf
1267
1268-include $(OBJS:%.o=%.d)
1269