New upstream version 0.3.6
[anytun.git] / src / Makefile
index f3c9801..9d29cb5 100644 (file)
@@ -6,12 +6,12 @@
 ##  tunnel endpoints.  It has less protocol overhead than IPSec in Tunnel
 ##  mode and allows tunneling of every ETHER TYPE protocol (e.g.
 ##  ethernet, ip, arp ...). satp directly includes cryptography and
-##  message authentication based on the methodes used by SRTP.  It is
+##  message authentication based on the methods used by SRTP.  It is
 ##  intended to deliver a generic, scaleable and secure solution for
 ##  tunneling and relaying of packets of any protocol.
 ##
 ##
-##  Copyright (C) 2007-2009 Othmar Gsenger, Erwin Nindl, 
+##  Copyright (C) 2007-2014 Markus Grüneis, Othmar Gsenger, Erwin Nindl,
 ##                          Christian Pointner <satp@wirdorange.org>
 ##
 ##  This file is part of Anytun.
 ##  GNU General Public License for more details.
 ##
 ##  You should have received a copy of the GNU General Public License
-##  along with anytun.  If not, see <http://www.gnu.org/licenses/>.
+##  along with Anytun.  If not, see <http://www.gnu.org/licenses/>.
+##
+##  In addition, as a special exception, the copyright holders give
+##  permission to link the code of portions of this program with the
+##  OpenSSL library under certain conditions as described in each
+##  individual source file, and distribute linked combinations
+##  including the two.
+##  You must obey the GNU General Public License in all respects
+##  for all of the code used other than OpenSSL.  If you modify
+##  file(s) with this exception, you may extend this exception to your
+##  version of the file(s), but you are not obligated to do so.  If you
+##  do not wish to do so, delete this exception statement from your
+##  version.  If you delete this exception statement from all source
+##  files in the program, then also delete it here.
 ##
 
 ifneq ($(MAKECMDGOALS),distclean)
 include include.mk
 endif
 
-OBJS := tunDevice.o \
-        packetSource.o \
-        buffer.o \
-        syncBuffer.o \
-        plainPacket.o \
-        encryptedPacket.o \
-        cipher.o \
-        authAlgo.o \
-        keyDerivation.o \
-        cipherFactory.o \
-        authAlgoFactory.o \
-        keyDerivationFactory.o \
-        connectionList.o \
-        connectionParam.o \
-        networkAddress.o \
-        networkPrefix.o \
-        routingTable.o \
-        signalController.o \
-        log.o \
-        logTargets.o \
-        sysExec.o \
-        anytunError.o \
-        options.o \
-        seqWindow.o \
-        routingTreeNode.o \
-        resolver.o
+ANYTUNOBJS := packetSource.o \
+              authAlgo.o \
+              authAlgoFactory.o \
+              cipher.o \
+              cipherFactory.o \
+              plainPacket.o \
+              encryptedPacket.o \
+              options.o \
+              signalController.o \
+              sysExec.o \
+              resolver.o \
+              buffer.o \
+              syncBuffer.o \
+              keyDerivation.o \
+              keyDerivationFactory.o \
+              connectionList.o \
+              connectionParam.o \
+              networkAddress.o \
+              networkPrefix.o \
+              routingTable.o \
+              routingTreeNode.o \
+              log.o \
+              logTargets.o \
+              anytunError.o \
+              seqWindow.o
+
+ifneq ($(TARGET),mingw)
+ANYTUNOBJS := $(ANYTUNOBJS) \
+              tunDevice.o \
+              daemonService.o
+else
+ANYTUNOBJS := $(ANYTUNOBJS) \
+              win32/tunDevice.o \
+              nullDaemon.o \
+              win32/winService.o \
+              win32/registryKey.o
+endif
+
+
+ANYSHOWOBJS := buffer.o \
+               syncBuffer.o \
+               keyDerivation.o \
+               keyDerivationFactory.o \
+               connectionList.o \
+               connectionParam.o \
+               networkAddress.o \
+               networkPrefix.o \
+               routingTable.o \
+               routingTreeNode.o \
+               log.o \
+               logTargets.o \
+               anytunError.o \
+               seqWindow.o \
+               nullOptions.o \
+               resolver.o
+
 
 SYNCOBJS := syncServer.o \
             syncClient.o \
@@ -69,6 +112,7 @@ SYNCOBJS := syncServer.o \
             syncConnectionCommand.o \
             syncTcpConnection.o
 
+
 ANYCTROBJS := signalController.o \
               anyCtrOptions.o \
               buffer.o \
@@ -79,6 +123,15 @@ ANYCTROBJS := signalController.o \
               syncServer.o \
               resolver.o
 
+ifneq ($(TARGET),mingw)
+ANYCTROBJS := $(ANYCTROBJS) \
+              daemonService.o
+else
+ANYCTROBJS := $(ANYCTROBJS) \
+              nullDaemon.o
+endif
+
+
 ANYCONFOBJS := log.o \
                logTargets.o \
                anytunError.o \
@@ -102,18 +155,25 @@ ANYCONFOBJS := log.o \
                syncConnectionCommand.o \
                resolver.o
 
-EXECUTABLES := anytun anytun-config anytun-controld anytun-showtables anytun-nosync
+ifneq ($(TARGET),mingw)
+  EXE :=
+else
+  EXE := .exe
+endif
+
+EXECUTABLES := anytun$(EXE) anytun-config$(EXE) anytun-controld$(EXE) anytun-showtables$(EXE) anytun-nosync$(EXE)
 EXEOBJS := anytun.o anytun-config.o anytun-controld.o anytun-showtables.o
 
-SRCS := $(OBJS:%.o=%.cpp)
+ANYTUNSRCS := $(ANYTUNOBJS:%.o=%.cpp)
+ANYSHOWSRCS := $(ANYSHOWOBJS:%.o=%.cpp)
 SYNCSRCS := $(SYNCOBJS:%.o=%.cpp)
 ANYCTRSRCS := $(ANYCTROBJS:%.o=%.cpp)
 ANYCONFSRCS := $(ANYCONFOBJS:%.o=%.cpp)
 EXESRCS := $(EXEOBJS:%.o=%.cpp)
 
-.PHONY: distclean cleanall clean manpage install install-bin install-etc install-man uninstall remove purge
+.PHONY: distclean cleanall clean manpage install install-bin install-etc install-man uninstall remove purge remove-systemd install-systemd remove-bin remove-man remove-examples
 
-all: $(EXECUTABLES) #libAnysync.a 
+all: $(EXECUTABLES) #libAnysync.a
 
 %.d: %.cpp
        @set -e; rm -f $@;                                    \
@@ -122,49 +182,49 @@ all: $(EXECUTABLES) #libAnysync.a
    rm -f $@.$$$$; echo '(re)building $@'
 
 ifneq ($(MAKECMDGOALS),distclean)
--include $(SRCS:%.cpp=%.d) $(SYNCSRCS:%.cpp=%.d) $(ANYCTRSRCS:%.cpp=%.d) $(ANYCONFSRCS:%.cpp=%.d) $(EXESRCS:%.cpp=%.d)
+-include $(ANYTUNSRCS:%.cpp=%.d) $(ANYSHOWSRCS:%.cpp=%.d) $(SYNCSRCS:%.cpp=%.d) $(ANYCTRSRCS:%.cpp=%.d) $(ANYCONFSRCS:%.cpp=%.d) $(EXESRCS:%.cpp=%.d)
 endif
 
 strip: $(EXECUTABLES)
-       $(STRIP) -s $(EXECUTABLES) 
+       $(STRIP) -s $(EXECUTABLES)
 
-anytun: $(OBJS) $(SYNCOBJS) anytun.o
-       $(LD) $(OBJS) $(SYNCOBJS) anytun.o -o $@ $(LDFLAGS)
+anytun$(EXE): $(ANYTUNOBJS) $(SYNCOBJS) anytun.o
+       $(LD) $(ANYTUNOBJS) $(SYNCOBJS) anytun.o -o $@ $(LDFLAGS)
 
-anytun-static: $(OBJS) $(SYNCOBJS) anytun-noprivdrop.o
-       $(LD) $(OBJS) $(SYNCOBJS) anytun-noprivdrop.o -o $@ -Bstatic -lstdc++ -static $(LDFLAGS) -lpthread
+anytun-static: $(ANYTUNOBJS) $(SYNCOBJS) anytun-noprivdrop.o
+       $(LD) $(ANYTUNOBJS) $(SYNCOBJS) anytun-noprivdrop.o -o $@ -Bstatic -lstdc++ -static $(LDFLAGS) -lpthread
        $(STRIP) -s anytun-static
 
-anytun-nosync: $(OBJS) anytun-nosync.o
-       $(LD) $(OBJS) anytun-nosync.o -o $@ $(LDFLAGS)
+anytun-nosync$(EXE): $(ANYTUNOBJS) anytun-nosync.o
+       $(LD) $(ANYTUNOBJS) anytun-nosync.o -o $@ $(LDFLAGS)
 
 anytun-nosync.o: anytun.cpp
        $(CXX) $(CXXFLAGS) -DANYTUN_NOSYNC $< -c -o anytun-nosync.o
 
-anytun-noprivdrop.o: anytun.cpp
-       $(CXX) $(CXXFLAGS) -DNO_PRIVDROP $< -c -o anytun-noprivdrop.o
-
-anytun-showtables: $(OBJS) $(SYNCOBJS) anytun-showtables.o
-       $(LD) $(OBJS) $(SYNCOBJS) anytun-showtables.o -o $@ $(LDFLAGS)
+anytun-showtables$(EXE): $(ANYSHOWOBJS) $(SYNCOBJS) anytun-showtables.o
+       $(LD) $(ANYSHOWOBJS) $(SYNCOBJS) anytun-showtables.o -o $@ $(LDFLAGS)
 
-anytun-config: $(ANYCONFOBJS) anytun-config.o
+anytun-config$(EXE): $(ANYCONFOBJS) anytun-config.o
        $(LD) $(ANYCONFOBJS) anytun-config.o -o $@ $(LDFLAGS)
 
-anytun-controld: $(ANYCTROBJS) anytun-controld.o
+anytun-controld$(EXE): $(ANYCTROBJS) anytun-controld.o
        $(LD) $(ANYCTROBJS) anytun-controld.o -o $@ $(LDFLAGS)
 
 
-options.o: options.cpp 
+options.o: options.cpp
        $(CXX) $(CXXFLAGS) -DANYTUN_OPTIONS $< -c -o $@
 
-anyCtrOptions.o: options.cpp 
+anyCtrOptions.o: options.cpp
        $(CXX) $(CXXFLAGS) -DANYCTR_OPTIONS $< -c -o $@
 
-anyConfOptions.o: options.cpp 
+anyConfOptions.o: options.cpp
        $(CXX) $(CXXFLAGS) -DANYCONF_OPTIONS $< -c -o $@
 
+nullOptions.o: options.cpp
+       $(CXX) $(CXXFLAGS) $< -c -o $@
+
 %.o: %.cpp
-       $(CXX) $(CXXFLAGS) $< -c
+       $(CXX) $(CXXFLAGS) $< -c -o $@
 
 
 libAnysync.a: $(OBJS)
@@ -174,21 +234,29 @@ libAnysync.a: $(OBJS)
 anyrtpproxy: anytun
        $(MAKE) --directory=$(CURDIR)/anyrtpproxy
 
-
 distclean: cleanall
        find . -name *.o -exec rm -f {} \;
        rm -f config.sub config.guess
+       rm -f daemonService.h
+       rm -f daemonService.cpp
+       rm -f signalHandler.hpp
+       rm -f sysExec.hpp
+       rm -f version.h
        rm -f tunDevice.cpp
        rm -f include.mk
 
 cleanall: clean
-       $(MAKE) --directory=$(CURDIR)/man clean
+       $(MAKE) --directory="../doc" clean
 
 clean:
        rm -f *.o
        rm -f *.d
        rm -f *.d.*
+       rm -f win32/*.o
+       rm -f win32/*.d
+       rm -f win32/*.d.*
        rm -f $(EXECUTABLES)
+       rm -f *.exe
        rm -f anytun-nosync
        rm -f -r doc/html/*
        rm -f -r doc/latex/*
@@ -196,7 +264,7 @@ clean:
        $(MAKE) --directory=$(CURDIR)/anyrtpproxy clean
 
 manpage:
-       @cd man ; $(MAKE)
+       $(MAKE) --directory="../doc" manpage
 
 
 INSTALL_TARGETS := install-bin install-etc
@@ -212,6 +280,11 @@ INSTALL_TARGETS += install-examples
 REMOVE_TARGETS += remove-examples
 endif
 
+ifdef SYSTEMDDIR
+INSTALL_TARGETS += install-systemd
+REMOVE_TARGETS := remove-systemd
+endif
+
 install: all $(INSTALL_TARGETS)
 
 install-bin: $(EXECUTABLES)
@@ -221,18 +294,36 @@ install-bin: $(EXECUTABLES)
        $(INSTALL) -m 755 anytun-config $(DESTDIR)$(BINDIR)
        $(INSTALL) -m 755 anytun-controld $(DESTDIR)$(BINDIR)
        $(INSTALL) -m 755 anytun-showtables $(DESTDIR)$(BINDIR)
+       $(INSTALL) -d $(DESTDIR)$(LIBDIR)
+       @ sed -e 's#/usr/local/sbin#$(SBINDIR)#' -e 's#/usr/local/bin#$(BINDIR)#' \
+        -e 's#/usr/local/etc#$(ETCDIR)#' ../usr/lib/anytun-launcher > ../usr/lib/anytun-launcher.bak
+       $(INSTALL) -m 755 ../usr/lib/anytun-launcher.bak $(DESTDIR)$(LIBDIR)/anytun-launcher
+       rm -f ../usr/lib/anytun-launcher.bak
 
 install-etc:
        $(INSTALL) -d $(DESTDIR)$(ETCDIR)/anytun
        @ echo "example configurations can be found at $(EXAMPLESDIR)/anytun" > $(DESTDIR)$(ETCDIR)/anytun/README
        $(INSTALL) -d $(DESTDIR)$(ETCDIR)/init.d
-       @ sed -e 's#DAEMON=/usr/sbin/anytun#DAEMON=$(SBINDIR)/anytun#'                               \
-        -e 's#ANYTUNCONFIG=/usr/bin/anytun-config#ANYTUNCONFIG=$(BINDIR)/anytun-config#'       \
-        -e 's#CONTROLDAEMON=/usr/bin/anytun-controld#CONTROLDAEMON=$(BINDIR)/anytun-controld#' \
-        -e 's#CONFIG_DIR=/etc/anytun#CONFIG_DIR=$(ETCDIR)/anytun#' ../etc/init.d/anytun > ../etc/init.d/anytun.bak
+       @ sed -e 's#/usr/local/bin#$(BINDIR)#' -e 's#/usr/local/lib#$(LIBDIR)#' -e 's#/usr/local/etc#$(ETCDIR)#' ../etc/init.d/anytun > ../etc/init.d/anytun.bak
        $(INSTALL) -m 755 ../etc/init.d/anytun.bak $(DESTDIR)$(ETCDIR)/init.d/anytun
        rm -f ../etc/init.d/anytun.bak
 
+install-systemd:
+       $(INSTALL) -d $(DESTDIR)$(SYSTEMDDIR)
+       $(INSTALL) -m 644 ../usr/lib/systemd/system/anytun.service $(DESTDIR)$(SYSTEMDDIR)/anytun.service
+       @ sed -e 's#/usr/local/lib#$(LIBDIR)#' ../usr/lib/systemd/system/anytun@.service > ../usr/lib/systemd/system/anytun@.service.bak
+       @ sed -e 's#/usr/local/lib#$(LIBDIR)#' ../usr/lib/systemd/system/anytun-controld@.service > ../usr/lib/systemd/system/anytun-controld@.service.bak
+       $(INSTALL) -m 644 ../usr/lib/systemd/system/anytun@.service.bak $(DESTDIR)$(SYSTEMDDIR)/anytun@.service
+       $(INSTALL) -m 644 ../usr/lib/systemd/system/anytun-controld@.service.bak $(DESTDIR)$(SYSTEMDDIR)/anytun-controld@.service
+       rm -f ../usr/lib/systemd/system/anytun@.service.bak
+       rm -f ../usr/lib/systemd/system/anytun-controld@.service.bak
+       $(INSTALL) -d $(DESTDIR)$(SYSTEMDGENERATORDIR)
+       @ sed -e 's#/usr/local/etc#$(ETCDIR)#' ../usr/lib/systemd/system-generator/anytun-generator > ../usr/lib/systemd/system-generator/anytun-generator.bak
+       $(INSTALL) -m 755 ../usr/lib/systemd/system-generator/anytun-generator.bak $(DESTDIR)$(SYSTEMDGENERATORDIR)/anytun-generator
+       rm -f ../usr/lib/systemd/system-generator/anytun-generator.bak
+       $(INSTALL) -d $(DESTDIR)$(TMPFILESDDIR)
+       $(INSTALL) -m 644 ../usr/lib/tmpfiles.d/anytun.conf $(DESTDIR)$(TMPFILESDDIR)/anytun.conf
+
 install-examples:
        $(INSTALL) -d $(DESTDIR)$(EXAMPLESDIR)/anytun
        $(INSTALL) -m 644 ../etc/anytun/autostart $(DESTDIR)$(EXAMPLESDIR)/anytun/autostart
@@ -251,7 +342,7 @@ install-examples:
            cd conf.d ;                                                                       \
            for file in `ls`; do                                                              \
              if [ -f $$file ]; then                                                          \
-               $(INSTALL) -m 644 $$file $(DESTDIR)$(EXAMPLESDIR)/anytun/$$dir/conf.d ;       \
+               $(INSTALL) -m 600 $$file $(DESTDIR)$(EXAMPLESDIR)/anytun/$$dir/conf.d ;       \
              fi ;                                                                            \
            done ;                                                                            \
            cd .. ;                                                                           \
@@ -263,10 +354,10 @@ install-examples:
 
 install-man: manpage
        $(INSTALL) -d $(DESTDIR)$(MANDIR)/man8/
-       $(INSTALL) -m 644 man/anytun.8 $(DESTDIR)$(MANDIR)/man8/
-       $(INSTALL) -m 644 man/anytun-config.8 $(DESTDIR)$(MANDIR)/man8/
-       $(INSTALL) -m 644 man/anytun-controld.8 $(DESTDIR)$(MANDIR)/man8/
-       $(INSTALL) -m 644 man/anytun-showtables.8 $(DESTDIR)$(MANDIR)/man8/
+       $(INSTALL) -m 644 ../doc/anytun.8 $(DESTDIR)$(MANDIR)/man8/
+       $(INSTALL) -m 644 ../doc/anytun-config.8 $(DESTDIR)$(MANDIR)/man8/
+       $(INSTALL) -m 644 ../doc/anytun-controld.8 $(DESTDIR)$(MANDIR)/man8/
+       $(INSTALL) -m 644 ../doc/anytun-showtables.8 $(DESTDIR)$(MANDIR)/man8/
 
 uninstall: remove
 
@@ -282,6 +373,13 @@ remove-bin:
 remove-etc:
        rm -f $(DESTDIR)$(ETCDIR)/init.d/anytun
 
+remove-systemd:
+       rm -f $(DESTDIR)$(SYSTEMDDIR)/anytun.service
+       rm -f $(DESTDIR)$(SYSTEMDDIR)/anytun@.service
+       rm -f $(DESTDIR)$(SYSTEMDDIR)/anytun-controld@.service
+       rm -f $(DESTDIR)$(SYSTEMDGENERATORDIR)/anytun-generator
+       rm -f $(DESTDIR)$(TMPFILESDDIR)/anytun.conf
+
 remove-examples:
        rm -rf $(DESTDIR)$(EXAMPLESDIR)/anytun/