# # 3 proxy Makefile for GCC/Linux/Cygwin # # add -DWITH_ODBC to CFLAGS and -lodbc to LIBS to compile with ODBC # library support. Add -DSAFESQL for poorely written ODBC library / drivers. BUILDDIR = ../bin/ PREFIX ?= 3proxy_ CRYPT_PREFIX ?= $(PREFIX) CC ?= gcc CFLAGS ?= -O3 -flto -fPIC CFLAGS += -fno-strict-aliasing -c -pthread -DWITHSPLICE -D_GNU_SOURCE -DGETHOSTBYNAME_R -D_THREAD_SAFE -D_REENTRANT -DFD_SETSIZE=4096 -DWITH_POLL -DWITH_NETFILTER -D WITH_UN COUT = -o LN ?= ${CC} DCFLAGS ?= LDFLAGS ?= -O3 -flto -fPIC LDFLAGS += -fno-strict-aliasing -pthread DLFLAGS ?= -shared DLSUFFICS = .ld.so # -lpthreads may be reuqired on some platforms instead of -pthreads LIBSPREFIX = -l LIBSSUFFIX = LNOUT = -o EXESUFFICS = OBJSUFFICS = .o DEFINEOPTION = -D COMPFILES = *~ REMOVECOMMAND = rm -f AFTERCLEAN = (find . -type f -name "*.o" -delete && find src/ -type f -name "Makefile.var" -delete && find bin/ -type f -executable -delete) || true TYPECOMMAND = cat COMPATLIBS = MAKEFILE = Makefile.Linux # PamAuth requires libpam, you may require pam-devel package to be installed # SSLPlugin requires -lcrypto -lssl #LIBS = -lcrypto -lssl -ldl #PLUGINS = SSLPlugin StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin PamAuth PLUGINS ?= StringsPlugin TrafficPlugin TransparentPlugin FilePlugin ifeq ($(STATIC), true) LDFLAGS += -static CFLAGS += -DNOPLUGINS -DNOSTDRESOLVE -DNOCRYPT ZLIB = -lz -lzstd PLUGINS = PAM_CHECK = false else LIBS += -ldl endif ifeq ($(LIBSTATIC), true) STATIC_PREFIX = -Wl,-Bstatic STATIC_SUFFIX = -Wl,-Bdynamic ZLIB = -lz -lzstd endif OPENSSL_CHECK ?= $(shell echo "\#include \\n int main(){return 0;}" | tr -d \\\\ | $(CC) -x c $(CFLAGS) -o testssl.o - 2>/dev/null && $(CC) $(LDFLAGS) -otestssl testssl.o $(STATIC_PREFIX) $(ZLIB) -lcrypto -lssl $(STATIC_SUFFIX) 2>/dev/null && rm testssl testssl.o && echo true||echo false) ifeq ($(OPENSSL_CHECK), true) LIBS += $(STATIC_PREFIX) $(ZLIB) -lcrypto -lssl $(STATIC_SUFFIX) CFLAGS += -DWITH_SSL SSL_OBJS = ssllib$(OBJSUFFICS) ssl$(OBJSUFFICS) else ZLIB := endif PCRE_CHECK ?= $(shell echo "\#define PCRE2_CODE_UNIT_WIDTH 8\\n\#include \\n int main(){return 0;}" | tr -d \\\\ | $(CC) -x c $(CFLAGS) -o testpcre.o - 2>/dev/null && $(CC) -o testpcre testpcre.o $(LDFLAGS) $(STATIC_PREFIX) -lpcre2-8 $(STATIC_SUFFIX) 2>/dev/null && rm testpcre testpcre.o && echo true||echo false) ifeq ($(PCRE_CHECK), true) CFLAGS += -DWITH_PCRE PCRE_OBJS = pcre$(OBJSUFFICS) PCRE_LIBS = $(STATIC_PREFIX) -lpcre2-8 $(STATIC_SUFFIX) endif PAM_CHECK ?= $(shell echo "\#include \\n int main(){return 0;}" | tr -d \\\\ | $(CC) -x c $(CFLAGS) -o testpam.o - 2>/dev/null && $(CC) $(LDFLAGS) -o testpam testpam.o -lpam 2>/dev/null && rm testpam testpam.o && echo true||echo false) ifeq ($(PAM_CHECK), true) PLUGINS += PamAuth endif include Makefile.inc allplugins: @list='$(PLUGINS)'; for p in $$list; do cp Makefile Makefile.var plugins/$$p; cd plugins/$$p ; make ; cd ../.. ; done DESTDIR ?= prefix ?= exec_prefix ?= $(prefix) man_prefix ?= /usr/share chroot_prefix ?= /usr/local INSTALL ?= /usr/bin/install INSTALL_BIN = $(INSTALL) -m 755 INSTALL_DATA = $(INSTALL) -m 644 INSTALL_OBJS = bin/3proxy \ bin/$(CRYPT_PREFIX)crypt \ bin/$(PREFIX)ftppr \ bin/$(PREFIX)pop3p \ bin/$(PREFIX)proxy \ bin/$(PREFIX)smtpp \ bin/$(PREFIX)socks \ bin/$(PREFIX)tcppm \ bin/$(PREFIX)tlspr \ bin/$(PREFIX)udppm INSTALL_CFG = scripts/3proxy.cfg.chroot INSTALL_CFG_INCHROOT = scripts/3proxy.cfg.inchroot INSTALL_CFG_OBJS2 = counters bandlimiters INSTALL_INITD_SCRIPT = scripts/init.d/3proxy.in INSTALL_SYSTEMD_SCRIPT = scripts/3proxy.service.in CHROOTDIR = $(DESTDIR)$(chroot_prefix)/3proxy CHROOTREL = ../..$(chroot_prefix)/3proxy MANDIR5 = $(DESTDIR)$(man_prefix)/man/man5 MANDIR8 = $(DESTDIR)$(man_prefix)/man/man8 BINDIR = $(DESTDIR)$(exec_prefix)/bin ETCDIR = $(DESTDIR)/etc/3proxy INITDDIR = $(DESTDIR)/etc/init.d LOGBASE = $(DESTDIR)/var/log LOGDIR = $(LOGBASE)/3proxy INSTALL_CFG_DEST = $(ETCDIR)/conf SYSTEMDDIR = $(DESTDIR)/usr/lib/systemd/system/ install-bin: $(INSTALL_BIN) -d $(BINDIR) $(INSTALL_BIN) -s $(INSTALL_OBJS) $(BINDIR) $(INSTALL_BIN) -s bin/*.ld.so $(CHROOTDIR)/libexec $(INSTALL_BIN) scripts/add3proxyuser.sh.in $(BINDIR)/add3proxyuser install-etc-dir: $(INSTALL_BIN) -d $(ETCDIR) install-chroot-dir: $(INSTALL_BIN) -d $(CHROOTDIR) $(INSTALL_BIN) -d $(CHROOTDIR)/conf $(INSTALL_BIN) -d $(CHROOTDIR)/logs $(INSTALL_BIN) -d $(CHROOTDIR)/count $(INSTALL_BIN) -d $(CHROOTDIR)/libexec install-etc-default-config: install-chroot-dir if [ ! -d $(INSTALL_CFG_DEST) ]; then \ ln -s $(CHROOTREL)/conf $(INSTALL_CFG_DEST); \ $(INSTALL_BIN) $(INSTALL_CFG) $(ETCDIR)/3proxy.cfg; \ $(INSTALL_BIN) $(INSTALL_CFG_INCHROOT) $(INSTALL_CFG_DEST)/3proxy.cfg; \ fi install-etc: install-etc-dir install-etc-default-config for file in $(INSTALL_CFG_OBJS2); \ do \ touch $(INSTALL_CFG_DEST)/$$file; chmod 0600 $(INSTALL_CFG_DEST)/$$file; \ done; install-man: $(INSTALL_BIN) -d $(MANDIR5) $(INSTALL_BIN) -d $(MANDIR8) $(INSTALL_DATA) man/3proxy.cfg.5 $(MANDIR5) $(INSTALL_DATA) man/3proxy.8 $(MANDIR8) for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ if [ -f man/$$f.8 ]; then $(INSTALL_DATA) man/$$f.8 $(MANDIR8)/$(PREFIX)$$f.8; fi; \ done $(INSTALL_DATA) man/3proxy_crypt.8 $(MANDIR8)/$(CRYPT_PREFIX)crypt.8 install-init: $(INSTALL_BIN) -d $(SYSTEMDDIR) sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(exec_prefix)/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' $(INSTALL_SYSTEMD_SCRIPT) > $(SYSTEMDDIR)/3proxy.service $(INSTALL_BIN) -d $(INITDDIR) $(INSTALL_BIN) $(INSTALL_INITD_SCRIPT) $(INITDDIR)/3proxy install-log: $(INSTALL_BIN) -d $(LOGBASE) @if [ ! -d $(LOGDIR) ]; then \ ln -s $(CHROOTREL)/logs $(LOGDIR);\ fi install: install-chroot-dir install-bin install-etc install-log install-man install-init @if [ "$(DESTDIR)" = "" ]; then \ sh debian/preinst; \ sh debian/postinst; \ fi