summaryrefslogtreecommitdiffstats
path: root/Makefile
blob: f2587012420c39937c2c556d611d1ed40cb4dc8e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# SPDX-License-Identifier: GPL-2.0-or-later
prefix = /usr

ifdef DESTDIR
BASEDIR := $(DESTDIR)
endif

CFLAGS ?= -g -O2

PKG_CONFIG ?= pkg-config
PERL ?= perl
INSTALL ?= install

whois_OBJECTS := whois.o utils.o
mkpasswd_OBJECTS := mkpasswd.o utils.o

##############################################################################
# Solaris
#whois_LDADD += -lnsl -lsocket -liconv

# FreeBSD
#whois_LDADD += -liconv
#LIBS += -L/usr/local/lib -lintl
#DEFS += -I/usr/local/include

# OS/2 EMX
#whois_LDADD += -lsocket
#LDFLAGS += -Zexe -Dstrncasecmp=strnicmp

# OS X
#whois_LDADD += -liconv

ifdef CONFIG_FILE
DEFS += -DCONFIG_FILE=\"$(CONFIG_FILE)\"
endif

ifdef LOCALEDIR
DEFS += -DLOCALEDIR=\"$(BASEDIR)$(prefix)/share/locale\"
endif

# libidn support has been autodetected since 5.2.18
ifdef HAVE_LIBIDN
$(error Please fix your build system to stop defining HAVE_LIBIDN!)
endif

ifeq ($(shell $(PKG_CONFIG) --exists 'libidn2 >= 2.0.3' || echo NO),)
whois_LDADD += $(shell $(PKG_CONFIG) --libs libidn2)
DEFS += -DHAVE_LIBIDN2 $(shell $(PKG_CONFIG) --cflags libidn2)
else ifeq ($(shell $(PKG_CONFIG) --exists 'libidn' || echo NO),)
whois_LDADD += $(shell $(PKG_CONFIG) --libs libidn)
DEFS += -DHAVE_LIBIDN $(shell $(PKG_CONFIG) --cflags libidn)
endif

ifdef HAVE_ICONV
whois_OBJECTS += simple_recode.o
DEFS += -DHAVE_ICONV
endif

ifeq ($(shell $(PKG_CONFIG) --exists 'libxcrypt >= 4.1' || echo NO),)
DEFS += -DHAVE_CRYPT_H -DHAVE_LINUX_CRYPT_GENSALT $(shell $(PKG_CONFIG) --cflags libcrypt)
mkpasswd_LDADD += $(shell $(PKG_CONFIG) --libs libcrypt)
else ifdef HAVE_XCRYPT
DEFS += -DHAVE_XCRYPT_H -DHAVE_LINUX_CRYPT_GENSALT
mkpasswd_LDADD += -lxcrypt
else ifdef HAVE_LIBOWCRYPT
# owl and openSUSE have crypt_gensalt(3) in libowcrypt
DEFS += -DHAVE_CRYPT_H -DHAVE_LINUX_CRYPT_GENSALT -D_OW_SOURCE
mkpasswd_LDADD += -lcrypt -lowcrypt
else
mkpasswd_LDADD += -lcrypt
endif

CPPFLAGS += $(DEFS) $(INCLUDES)

BASHCOMPDIR ?= $(shell $(PKG_CONFIG) --variable=completionsdir bash-completion 2>/dev/null || echo /etc/bash_completion.d)

##############################################################################
all: Makefile.depend whois mkpasswd pos

##############################################################################
%.o: %.c
	$(CC) $(CPPFLAGS) $(CFLAGS) -c $<

whois: $(whois_OBJECTS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(whois_LDADD) $(LIBS)

mkpasswd: $(mkpasswd_OBJECTS)
	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(mkpasswd_LDADD) $(LIBS)

##############################################################################
version.h: debian/changelog make_version_h.pl
	$(PERL) make_version_h.pl $< > $@

as_del.h: as_del_list make_as_del.pl
	$(PERL) make_as_del.pl < $< > $@

ip_del.h: ip_del_list make_ip_del.pl
	$(PERL) make_ip_del.pl < $< > $@

ip6_del.h: ip6_del_list make_ip6_del.pl
	$(PERL) make_ip6_del.pl < $< > $@

new_gtlds.h: new_gtlds_list make_new_gtlds.pl
	$(PERL) make_new_gtlds.pl < $< > $@

nic_handles.h: nic_handles_list make_nic_handles.pl
	$(PERL) make_nic_handles.pl < $< > $@

tld_serv.h: tld_serv_list make_tld_serv.pl
	$(PERL) make_tld_serv.pl < $< > $@

servers_charset.h: servers_charset_list make_servers_charset.pl
	$(PERL) make_servers_charset.pl < $< > $@

##############################################################################
afl:
	-rm -f Makefile.depend
	DEFS=-DAFL_MODE=1 AFL_HARDEN=1 $(MAKE) whois CC=afl-gcc HAVE_ICONV=1

afl-run:
	nice afl-fuzz -i ../afl_in -o ../afl_out -- ./whois

##############################################################################
install: install-whois install-mkpasswd install-pos install-bashcomp

install-whois: whois
	$(INSTALL) -d $(BASEDIR)$(prefix)/bin/
	$(INSTALL) -d $(BASEDIR)$(prefix)/share/man/man1/
	$(INSTALL) -d $(BASEDIR)$(prefix)/share/man/man5/
	$(INSTALL) -m 0755 whois $(BASEDIR)$(prefix)/bin/
	$(INSTALL) -m 0644 whois.1 $(BASEDIR)$(prefix)/share/man/man1/
	$(INSTALL) -m 0644 whois.conf.5 $(BASEDIR)$(prefix)/share/man/man5/

install-mkpasswd: mkpasswd
	$(INSTALL) -d $(BASEDIR)$(prefix)/bin/
	$(INSTALL) -d $(BASEDIR)$(prefix)/share/man/man1/
	$(INSTALL) -m 0755 mkpasswd $(BASEDIR)$(prefix)/bin/
	$(INSTALL) -m 0644 mkpasswd.1 $(BASEDIR)$(prefix)/share/man/man1/

install-pos:
	cd po && $(MAKE) install

install-bashcomp:
	$(INSTALL) -d $(BASEDIR)$(BASHCOMPDIR)
	$(INSTALL) -m 0644 mkpasswd.bash $(BASEDIR)$(BASHCOMPDIR)/mkpasswd
	$(INSTALL) -m 0644 whois.bash $(BASEDIR)$(BASHCOMPDIR)/whois

distclean: clean
	rm -f version.h po/whois.pot

clean:
	rm -f Makefile.depend as_del.h ip_del.h ip6_del.h \
		nic_handles.h new_gtlds.h tld_serv.h servers_charset.h \
		*.o whois mkpasswd
	rm -f po/*.mo

pos:
	cd po && $(MAKE)

depend: Makefile.depend
Makefile.depend:
	$(CC) $(CPPFLAGS) $(CFLAGS) -MM -MG *.c > $@

-include Makefile.depend

.DELETE_ON_ERROR: