new upstream release (3.3.0); modify package compatibility for Stretch
[ossec-hids.git] / src / Makefile
old mode 100755 (executable)
new mode 100644 (file)
index 7dfc8e0..b684b82
-# Makefile
-# Daniel B. Cid <dcid@sourcefire.com>||<daniel@underlinux.com.br>
-# http://www.ossec.net/hids/
-
-none:
-               @echo "Nothing selected ..."
-               @echo "\"make all\" to compile everything."
-               @echo "\"make server\" to build the server."
-               @echo "\"make local\" to build the local."
-               @echo "\"make agent\" to build the agent."
-               @echo "\"make libs\" to build the libraries only."
-               @echo "\"make clean\" to clean anything built."
-               @echo "\"make setagent\" to set agent install."
-               @echo "\"make setlocal\" to set local install."
-               @echo "\"make setclang\" to use clang for building ossec."
-               @echo "\"make unsetclang\" to use gcc for building ossec."
-               @echo "\"make setprelude\" to enable prelude output."
-               @echo "\"make setdb\" to enable database support."
-               @echo "\"make unsetdb\" to disable database support."
-               @echo "\"make setoneway\" to enable one-way connection to the manager."
-               @echo "\"make setgeoip\" to enable source IP geolocalization."
-
-clean:
-               @/bin/sh ./Makeall clean
-               rm -f ../bin/*
-               rmdir ../bin/
-               rm -f isbigendian
-               rm -rf win-pkg/
-               rm -f Config.OS
-               rm -f win32/LICENSE.txt
-               rm -f win32/help_win.txt
-               rm -f win32/internal_options-win.conf
-               rm -f win32/ossec-win.conf
-               rm -f win32/restart-ossec.cmd
-               rm -f win32/route-null.cmd
-
-all:
-               @/bin/sh ./Makeall all
-               
-test:
-               @/bin/sh ./Makeall test
-
-build:
-               @/bin/sh ./Makeall build
-
-libs:
-               @/bin/sh ./Makeall libs
-
-server:
-               @/bin/sh ./InstallServer.sh
-
-local:
-               @/bin/sh ./InstallServer.sh local
-
-agent:
-               @/bin/sh ./InstallAgent.sh
-
-windows_agent:
-               ( cd win32 && /bin/sh ./gen_win.sh )
-               ( cd win-pkg && /bin/sh ./make.sh )
-        
-setagent:
-               @echo "CEXTRA=-DCLIENT" >> ./Config.OS
-
-setclang:
-               @mv Config.Make Config.Make.backup
-               @sed -e "s/^CC?=.*/CC=clang/g" Config.Make.backup > Config.Make
-               @rm Config.Make.backup
-
-unsetclang:
-               @mv Config.Make Config.Make.backup
-               @sed -e "s/^CC=clang/CC?=cc/g" Config.Make.backup > Config.Make
-               @rm Config.Make.backup
-
-setprelude:
-               @echo "CPRELUDE=-DPRELUDE -lprelude `libprelude-config --pthread-cflags` `libprelude-config --libs`" >> ./Config.OS
-
-setgeoip:
-               @echo "CGEOIP=-DGEOIP" >> ./Config.OS
-               @echo "CGEOIPLIB=-I/usr/local/include -L/usr/local/lib -lGeoIP" >> ./Config.OS
-
-setdb:
-               @cd ./os_dbd; echo "CDB=`./dbmake.sh`" >> ../Config.OS;
-setmaxagents:
-               @/bin/sh ./Makeall setmaxagents
-unsetdb:
-               @echo "CDB=" >> ./Config.OS;
-setlocal:
-               @echo "CEXTRA=-DLOCAL" >> ./Config.OS
-
-setfullsubject:
-               @echo "FEXTRA=-DCLEANFULL" >> ./Config.OS
-
-setoneway:
-               @echo "FEXTRA=-DONEWAY" >> ./Config.OS
-
-setzeromq:
-               @echo "CZEROMQ_OUTPUT=-DZEROMQ_OUTPUT -lzmq -lczmq" >> ./Config.OS
+
+uname_S := $(shell sh -c 'uname -s 2>/dev/null || echo not')
+
+EXTERNAL_JSON=external/cJSON/
+EXTERNAL_LUA=external/lua-5.2.3/
+EXTERNAL_ZLIB=external/zlib-1.2.11/
+EXTERNAL_PCRE2=external/pcre2-10.32/
+ZLIB_SYSTEM?=yes
+PCRE2_SYSTEM?=no
+LUA_PLAT=posix
+LUA_ENABLE?=no
+MAXAGENTS?=2048
+REUSE_ID?=no
+# XXX Becareful NO EXTRA Spaces here
+PREFIX?=/var/ossec
+PG_CONFIG?=pg_config
+MY_CONFIG?=mysql_config
+PRELUDE_CONFIG?=libprelude-config
+OSSEC_GROUP?=ossec
+OSSEC_USER?=ossec
+OSSEC_USER_MAIL?=ossecm
+OSSEC_USER_REM?=ossecr
+
+INSTALL_CMD?=install -m $(1) -o $(2) -g $(3)
+INSTALL_LOCALTIME?=yes
+INSTALL_RESOLVCONF?=yes
+
+USE_PRELUDE?=no
+USE_ZEROMQ?=no
+USE_GEOIP?=no
+USE_INOTIFY=no
+USE_PCRE2_JIT=yes
+
+ifneq (${TARGET},winagent)
+       USE_OPENSSL?=auto
+else
+       USE_OPENSSL?=no
+endif
+
+ONEWAY?=no
+CLEANFULL?=no
+
+export MYLDFLAGS= "${LDFLAGS}"
+export MYCFLAGS= "${CFLAGS}"
+
+DEFINES=-DMAX_AGENTS=${MAXAGENTS} -DOSSECHIDS
+DEFINES+=-DDEFAULTDIR=\"${PREFIX}\"
+DEFINES+=-DUSER=\"${OSSEC_USER}\"
+DEFINES+=-DREMUSER=\"${OSSEC_USER_REM}\"
+DEFINES+=-DGROUPGLOBAL=\"${OSSEC_GROUP}\"
+DEFINES+=-DMAILUSER=\"${OSSEC_USER_MAIL}\"
+DEFINES+=-D${uname_S}
+
+# Uncomment the DEFINES statement below if you are
+# running Linux and want to use AF_UNSPEC instead of
+# AF_INET6 to fully support IPv4 addresses.
+#DEFINES+=-DNOV4MAP
+
+ifneq (,$(filter ${REUSE_ID},yes y Y 1))
+       DEFINES+=-DREUSE_ID
+endif
+
+OSSEC_LDFLAGS=${LDFLAGS} -lm
+
+ifneq (${TARGET},winagent)
+ifeq (${uname_S},Linux)
+               DEFINES+=-DINOTIFY_ENABLED
+#              DEFINES+=-DUSE_MAGIC
+               OSSEC_LDFLAGS+=-lpthread
+#              OSSEC_LDFLAGS+=-lmagic
+else
+ifeq (${uname_S},AIX)
+               DEFINES+=-DAIX
+               DEFINES+=-DHIGHFIRST
+               PATH:=${PATH}:/usr/vac/bin
+else
+ifeq (${uname_S},SunOS)
+               DEFINES+=-DSOLARIS
+               DEFINES+=-DHIGHFIRST
+               OSSEC_LDFLAGS+=-lsocket -lnsl -lresolv
+               LUA_PLAT=solaris
+               PATH:=${PATH}:/usr/ccs/bin:/usr/xpg4/bin:/opt/csw/gcc3/bin:/opt/csw/bin:/usr/sfw/bin
+
+else
+ifeq (${uname_S},Darwin)
+               DEFINES+=-DDarwin
+               DEFINES+=-DHIGHFIRST
+               LUA_PLAT=macosx
+
+else
+ifeq (${uname_S},FreeBSD)
+               DEFINES+=-DFreeBSD
+               OSSEC_LDFLAGS+=-pthread
+               LUA_PLAT=freebsd
+               CFLAGS+=-I/usr/local/include
+               OSSEC_LDFLAGS+=-L/usr/local/lib
+else
+ifeq (${uname_S},NetBSD)
+               DEFINES+=-DNetBSD
+               OSSEC_LDFLAGS+=-pthread
+               LUA_PLAT=posix
+               CFLAGS+=-I/usr/local/include
+               OSSEC_LDFLAGS+=-L/usr/local/lib
+else
+ifeq (${uname_S},OpenBSD)
+#              DEFINES+=-DOpenBSD
+               DEFINES+=-pthread
+               LUA_PLAT=posix
+               CFLAGS+=-I/usr/local/include
+               OSSEC_LDFLAGS+=-L/usr/local/lib
+else
+ifeq (${uname_S},HP-UX)
+               DEFINES+=-DHPUX
+               DEFINES+=-D_XOPEN_SOURCE_EXTENDED
+               DEFINES+=-DHIGHFIRST
+               DEFINES+=-D_REENTRANT
+else
+           $(warning Unknown platform)
+endif # HPUX
+endif # OpenBSD
+endif # NetBSD
+endif # FreeBSD
+endif # Darwin
+endif # SunOS
+endif # AIX
+endif # Linux
+endif # winagent
+
+ifdef DEBUGAD
+       DEFINES+=+DDEBUGAD
+endif
+
+OSSEC_CFLAGS=${CFLAGS}
+#ANALYSISD_FLAGS="-lsqlite3"
+
+ifdef DEBUG
+       OSSEC_CFLAGS+=-g
+endif #DEBUG
+
+ifneq (,$(filter ${CLEANFULL},yes y Y 1))
+       DEFINES+=-DCLEANFULL
+endif
+
+ifneq (,$(filter ${ONEWAY},yes y Y 1))
+       DEFINES+=-DONEWAY_ENABLED
+endif
+
+ifneq (${ZLIB_SYSTEM},no)
+       DEFINES+=-DZLIB_SYSTEM
+endif
+
+ifeq (${PCRE2_SYSTEM},no)
+       PCRE2_INCLUDE=-I./${EXTERNAL_PCRE2}/install/include/
+       DEFINES+=${PCRE2_INCLUDE}
+       DEFINES+=-DPCRE2_STATIC
+else
+       PCRE2_LOCATION?=$(shell pcre2-config --prefix)/lib
+       OSSEC_LDFLAGS+=-lpcre2-8
+endif
+
+
+OSSEC_CFLAGS+=${DEFINES}
+OSSEC_CFLAGS+=-Wall -Wextra
+OSSEC_CFLAGS+=-I./ -I./headers/
+
+CCCOLOR="\033[34m"
+LINKCOLOR="\033[34;1m"
+SRCCOLOR="\033[33m"
+BINCOLOR="\033[37;1m"
+MAKECOLOR="\033[32;1m"
+ENDCOLOR="\033[0m"
+
+MING_BASE:=
+ifeq (${TARGET}, winagent)
+CC=gcc
+ZLIB_SYSTEM=no
+PCRE2_SYSTEM=no
+ifneq (,$(shell which amd64-mingw32msvc-gcc))
+       MING_BASE:=amd64-mingw32msvc-
+else
+ifneq (,$(shell which i686-pc-mingw32-gcc))
+       MING_BASE:=i686-pc-mingw32-
+else
+ifneq (,$(shell which i686-w64-mingw32-gcc))
+       MING_BASE:=i686-w64-mingw32-
+else
+$(error No windows cross-compiler found!) #MING_BASE:=unknown-
+endif
+endif
+endif
+endif #winagent
+
+
+OSSEC_CC      =${QUIET_CC}${MING_BASE}${CC}
+OSSEC_CCBIN   =${QUIET_CCBIN}${MING_BASE}${CC}
+OSSEC_LINK    =${QUIET_LINK}${MING_BASE}ar -crs
+OSSEC_RANLIB  =${QUIET_RANLIB}${MING_BASE}ranlib
+OSSEC_WINDRES =${QUIET_CCBIN}${MING_BASE}windres
+
+
+ifneq (,$(filter ${USE_PCRE2_JIT},yes y Y 1))
+       DEFINES+=-DUSE_PCRE2_JIT
+       PCRE2_CONFIGURE_JIT=--enable-jit
+else
+       PCRE2_CONFIGURE_JIT=--disable-jit
+endif
+
+ifneq (,$(filter ${USE_INOTIFY},auto yes y Y 1))
+       DEFINES+=-DINOTIFY_ENABLED
+       ifeq (${uname_S},FreeBSD)
+               OSSEC_LDFLAGS+=-linotify -L/usr/local/lib -I/usr/local/include
+               OSSEC_CFLAGS+=-I/usr/local/include
+       endif
+endif
+
+ifneq (,$(filter ${USE_PRELUDE},auto yes y Y 1))
+       DEFINES+=-DPRELUDE_OUTPUT_ENABLED
+       OSSEC_LDFLAGS+=-lprelude
+       OSSEC_LDFLAGS+=$(shell sh -c '${PRELUDE_CONFIG} --pthread-cflags')
+       OSSEC_LDFLAGS+=$(shell sh -c '${PRELUDE_CONFIG} --libs')
+endif # USE_PRELUDE
+
+ifneq (,$(filter ${USE_ZEROMQ},auto yes y Y 1))
+       DEFINES+=-DZEROMQ_OUTPUT_ENABLED
+       #LDFLAGS+=-L/usr/local/lib -I/usr/local/include -lzmq -lczmq
+       OSSEC_LDFLAGS+=-lzmq -lczmq -lm
+endif # USE_ZEROMQ
+
+ifneq (,$(filter ${USE_GEOIP},auto yes y Y 1))
+       DEFINES+=-DLIBGEOIP_ENABLED
+       OSSEC_LDFLAGS+=-lGeoIP
+endif # USE_GEOIP
+
+ifneq (,$(filter ${USE_SQLITE},auto yes y Y 1))
+       DEFINES+=-DSQLITE_ENABLED
+       ANALYSISD_FLAGS="-lsqlite3"
+endif # USE_SQLITE
+
+MI :=
+PI :=
+ifdef DATABASE
+
+       ifeq (${DATABASE},mysql)
+               DEFINES+=-DMYSQL_DATABASE_ENABLED
+
+               ifdef MYSQL_CFLAGS
+                       MI = ${MYSQL_CFLAGS}
+               else
+                       MI := $(shell sh -c '${MY_CONFIG} --include 2>/dev/null || echo ')
+
+                       ifeq (${MI},) # BEGIN MI manual detection
+                               ifneq (,$(wildcard /usr/include/mysql/mysql.h))
+                                       MI="-I/usr/include/mysql/"
+                               else
+                                       ifneq (,$(wildcard /usr/local/include/mysql/mysql.h))
+                                               MI="-I/usr/local/include/mysql/"
+                                       endif  #
+                               endif  #MI
+
+                       endif
+               endif # MYSQL_CFLAGS
+
+               ifdef MYSQL_LIBS
+                       ML = ${MYSQL_LIBS}
+               else
+                       ML := $(shell sh -c '${MY_CONFIG} --libs 2>/dev/null || echo ')
+
+                       ifeq (${ML},)
+                               ifneq (,$(wildcard /usr/lib/mysql/*))
+                                       ML="-L/usr/lib/mysql -lmysqlclient"
+                               else
+                                       ifneq (,$(wildcard /usr/lib64/mysql/*))
+                                               ML="-L/usr/lib64/mysql -lmysqlclient"
+                                       else
+                                               ifneq (,$(wildcard /usr/local/lib/mysql/*))
+                                                       ML="-L/usr/local/lib/mysql -lmysqlclient"
+                                               else
+                                                       ifneq (,$(wildcard /usr/local/lib64/mysql/*))
+                                                               ML="-L/usr/local/lib64/mysql -lmysqlclient"
+                                                       endif # local/lib64
+                                               endif # local/lib
+                                       endif # lib54
+                               endif # lib
+                       endif
+               endif # MYSQL_LIBS
+
+               OSSEC_LDFLAGS+=${ML}
+
+       else # DATABASE
+
+               ifeq (${DATABASE}, pgsql)
+                       DEFINES+=-DPGSQL_DATABASE_ENABLED
+
+                       ifneq (${PGSQL_LIBS},)
+                               PL:=${PGSQL_LIBS}
+                       else
+                               PL:=$(shell sh -c '(${PG_CONFIG} --libdir --pkglibdir 2>/dev/null | sed "s/^/-L/g" | xargs ) || echo ')
+                       endif
+
+                       ifneq (${PGSQL_CFLAGS},)
+                               PI:=${PGSQL_CFLAGS}
+                       else
+                               PI:=$(shell sh -c '(${PG_CONFIG} --includedir --pkgincludedir 2>/dev/null | sed "s/^/-I/g" | xargs ) || echo ')
+                       endif
+
+                       # XXX need some basic autodetech stuff here.
+
+                       OSSEC_LDFLAGS+=${PL}
+                       OSSEC_LDFLAGS+=-lpq
+
+               endif # pgsql
+       endif # mysql
+endif # DATABASE
+
+
+# openssl ###########
+ifeq (${USE_OPENSSL},auto)
+       ifneq (,$(wildcard /usr/include/openssl/ssl.h))
+               DEFINES+=-DLIBOPENSSL_ENABLED
+               OSSEC_LDFLAGS+=-lssl -lcrypto
+       else
+               ifneq (,$(wildcard /usr/local/include/openssl/ssl.h))
+                       DEFINES+=-DLIBOPENSSL_ENABLED
+                       OSSEC_LDFLAGS+=-lssl -lcrypto
+               endif
+       endif
+endif # USE_OPENSSL
+
+ifneq (,$(filter ${USE_OPENSSL},yes y Y 1))
+       DEFINES+=-DLIBOPENSSL_ENABLED
+       ifeq (${OPENSSL_LIBS},)
+               OSSEC_LDFLAGS+=-lssl -lcrypto
+       else
+               OSSEC_LDFLAGS+=${OPENSSL_LIBS}
+       endif
+
+       ifneq (${OPENSSL_CFLAGS},)
+               OSSEC_CFLAGS+=${OPENSSL_CFLAGS}
+       endif
+endif
+
+####################
+#### Target ########
+####################
+
+OSSEC_CONTROL_SRC=./init/ossec-server.sh
+OSSEC_CONF_SRC=../etc/ossec-server.conf
+
+ifndef TARGET
+       TARGET=failtarget
+endif # TARGET
+
+ifeq (${TARGET},agent)
+       DEFINES+=-DCLIENT
+       OSSEC_CONTROL_SRC=./init/ossec-client.sh
+       OSSEC_CONF_SRC=../etc/ossec-agent.conf
+endif
+
+ifeq (${TARGET},local)
+       DEFINES+=-DLOCAL
+       OSSEC_CONTROL_SRC=./init/ossec-local.sh
+       OSSEC_CONF_SRC=../etc/ossec-local.conf
+endif
+
+
+.PHONY: build
+build: ${TARGET}
+ifneq (${TARGET},failtarget)
+       ${MAKE} settings
+       @echo
+       ${QUIET_NOTICE}
+       @echo "Done building ${TARGET}"
+       ${QUIET_ENDCOLOR}
+endif
+       @echo
+
+
+.PHONY: install install-agent install-server install-local install-hybrid
+install: install-${TARGET}
+
+install-agent: install-common
+       $(call INSTALL_CMD,0550,root,0) ossec-agentd ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) agent-auth ${PREFIX}/bin
+
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/rids
+
+install-local: install-server-generic
+
+install-hybrid: install-server-generic
+
+install-server: install-server-generic
+
+install-common: build
+       ./init/adduser.sh ${OSSEC_USER} ${OSSEC_USER_MAIL} ${OSSEC_USER_REM} ${OSSEC_GROUP} ${PREFIX}
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs
+       $(call INSTALL_CMD,0660,${OSSEC_USER},${OSSEC_GROUP}) /dev/null ${PREFIX}/logs/ossec.log
+
+       $(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-logcollector ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-syscheckd ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-execd ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) manage_agents ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ../contrib/util.sh ${PREFIX}/bin/
+       $(call INSTALL_CMD,0550,root,0) ${OSSEC_CONTROL_SRC} ${PREFIX}/bin/ossec-control
+
+ifeq (${LUA_ENABLE},yes)
+       $(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/lua
+       $(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/lua/native
+       $(call INSTALL_CMD,0550,root,0) -d ${PREFIX}/lua/compiled
+       $(call INSTALL_CMD,0550,root,0) ${EXTERNAL_LUA}src/ossec-lua ${PREFIX}/bin/
+       $(call INSTALL_CMD,0550,root,0) ${EXTERNAL_LUA}src/ossec-luac ${PREFIX}/bin/
+endif
+
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/queue
+       $(call INSTALL_CMD,0770,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/alerts
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/ossec
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/syscheck
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/diff
+
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/etc
+ifeq (${INSTALL_LOCALTIME},yes)
+       $(call INSTALL_CMD,0440,root,${OSSEC_GROUP}) /etc/localtime ${PREFIX}/etc
+endif
+ifeq (${INSTALL_RESOLVCONF},yes)
+       $(call INSTALL_CMD,0440,root,${OSSEC_GROUP}) /etc/resolv.conf ${PREFIX}/etc
+endif
+
+       $(call INSTALL_CMD,1550,root,${OSSEC_GROUP}) -d ${PREFIX}/tmp
+
+ifneq (,$(wildcard /etc/TIMEZONE))
+       $(call INSTALL_CMD,440,root,${OSSEC_GROUP}) /etc/TIMEZONE ${PREFIX}/etc/
+endif
+# Solaris Needs some extra files
+ifeq (${uname_S},SunOS)
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/usr/share/lib/zoneinfo/
+       cp -r /usr/share/lib/zoneinfo/* ${PREFIX}/usr/share/lib/zoneinfo/
+endif
+       $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) -b ../etc/internal_options.conf ${PREFIX}/etc/
+ifeq (,$(wildcard ${PREFIX}/etc/local_internal_options.conf))
+       $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ../etc/local_internal_options.conf ${PREFIX}/etc/local_internal_options.conf
+endif
+ifeq (,$(wildcard ${PREFIX}/etc/client.keys))
+       $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) /dev/null ${PREFIX}/etc/client.keys
+endif
+ifeq (,$(wildcard ${PREFIX}/etc/ossec.conf))
+ifneq (,$(wildcard ../etc/ossec.mc))
+       $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ../etc/ossec.mc ${PREFIX}/etc/ossec.conf
+else
+       $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ${OSSEC_CONF_SRC} ${PREFIX}/etc/ossec.conf
+endif
+endif
+
+       $(call INSTALL_CMD,0770,root,${OSSEC_GROUP}) -d ${PREFIX}/etc/shared
+       $(call INSTALL_CMD,0640,${OSSEC_USER},${OSSEC_GROUP}) rootcheck/db/*.txt ${PREFIX}/etc/shared/
+
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/active-response
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/active-response/bin
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/agentless
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) agentlessd/scripts/* ${PREFIX}/agentless/
+
+       $(call INSTALL_CMD,0700,root,${OSSEC_GROUP}) -d ${PREFIX}/.ssh
+
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) ../active-response/*.sh ${PREFIX}/active-response/bin/
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) ../active-response/firewalls/*.sh ${PREFIX}/active-response/bin/
+
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/var
+       $(call INSTALL_CMD,0770,root,${OSSEC_GROUP}) -d ${PREFIX}/var/run
+
+       ./init/fw-check.sh execute
+
+
+
+install-server-generic: install-common
+       $(call INSTALL_CMD,0660,${OSSEC_USER},${OSSEC_GROUP}) /dev/null ${PREFIX}/logs/active-responses.log
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs/archives
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs/alerts
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/logs/firewall
+
+       $(call INSTALL_CMD,0550,root,0) ossec-agentlessd ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-analysisd ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-monitord ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-reportd ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-maild ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-remoted ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-logtest ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-csyslogd ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-authd ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-dbd ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) ossec-makelists ${PREFIX}/bin
+       $(call INSTALL_CMD,0550,root,0) verify-agent-conf ${PREFIX}/bin/
+       $(call INSTALL_CMD,0550,root,0) clear_stats ${PREFIX}/bin/
+       $(call INSTALL_CMD,0550,root,0) list_agents ${PREFIX}/bin/
+       $(call INSTALL_CMD,0550,root,0) ossec-regex ${PREFIX}/bin/
+       $(call INSTALL_CMD,0550,root,0) syscheck_update ${PREFIX}/bin/
+       $(call INSTALL_CMD,0550,root,0) agent_control ${PREFIX}/bin/
+       $(call INSTALL_CMD,0550,root,0) syscheck_control ${PREFIX}/bin/
+       $(call INSTALL_CMD,0550,root,0) rootcheck_control ${PREFIX}/bin/
+
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/stats
+       $(call INSTALL_CMD,0550,root,${OSSEC_GROUP}) -d ${PREFIX}/rules
+ifneq (,$(wildcard ${PREFIX}/rules/local_rules.xml))
+       cp ${PREFIX}/rules/local_rules.xml ${PREFIX}/rules/local_rules.xml.installbackup
+       $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) -b ../etc/rules/*.xml ${PREFIX}/rules
+       $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ${PREFIX}/rules/local_rules.xml.installbackup ${PREFIX}/rules/local_rules.xml
+       rm ${PREFIX}/rules/local_rules.xml.installbackup
+else
+       $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) -b ../etc/rules/*.xml ${PREFIX}/rules
+endif
+
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/fts
+
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/rootcheck
+
+       $(call INSTALL_CMD,0750,${OSSEC_USER_REM},${OSSEC_GROUP}) -d ${PREFIX}/queue/agent-info
+       $(call INSTALL_CMD,0750,${OSSEC_USER},${OSSEC_GROUP}) -d ${PREFIX}/queue/agentless
+
+       $(call INSTALL_CMD,0750,${OSSEC_USER_REM},${OSSEC_GROUP}) -d ${PREFIX}/queue/rids
+
+       $(call INSTALL_CMD,0640,root,${OSSEC_GROUP}) ../etc/decoder.xml ${PREFIX}/etc/
+
+       rm -f ${PREFIX}/etc/shared/merged.mg
+
+
+.PHONY: failtarget
+failtarget:
+       @echo "TARGET is required: "
+       @echo "   make TARGET=server   to build the server"
+       @echo "   make TARGET=local      - local version of server"
+       @echo "   make TARGET=hybrid     - hybrid version of server"
+       @echo "   make TARGET=agent    to build the unix agent"
+       @echo "   make TARGET=winagent to build the windows agent"
+
+.PHONY: help
+help: failtarget
+       @echo
+       @echo "General options: "
+       @echo "   make V=1              Display full compiler messages"
+       @echo "   make DEBUG=1          Build with symbols and without optimization"
+       @echo "   make PREFIX=/path     Install OSSEC to '/path'. Defaults to /var/ossec"
+       @echo "   make MAXAGENTS=NUMBER Set the number of maximum agents to NUMBER. Defaults to 2048"
+       @echo "   make REUSE_ID=yes     Enables agent ID re-use"
+       @echo
+       @echo "Database options: "
+       @echo "   make DATABASE=mysql   Build with MYSQL Support"
+       @echo "                         Use MYSQL_CFLAGS and MYSQL_LIBS to override defaults"
+       @echo "   make DATABASE=pgsql   Build with PostgreSQL Support "
+       @echo "                         Use PGSQL_CFLAGS and PGSQL_LIBS to override defaults"
+       @echo
+       @echo "Geoip support: "
+       @echo "   make USE_GEOIP=1      Build with GeoIP support"
+       @echo
+       @echo "External source options: "
+       @echo "   make LUA_ENABLE=no    Disable LUA build"
+       @echo "   make ZLIB_SYSTEM=yes  Use zlib sources from system"
+       @echo "   make PCRE2_SYSTEM=yes Use pcre2 sources from system"
+       @echo
+       @echo "Examples: Client with debugging enabled"
+       @echo "   make TARGET=agent DEBUG=1"
+
+.PHONY: settings
+settings:
+       @echo
+       @echo "General settings:"
+       @echo "    TARGET:           ${TARGET}"
+       @echo "    V:                ${V}"
+       @echo "    DEBUG:            ${DEBUG}"
+       @echo "    DEBUGAD:          ${DEBUGAD}"
+       @echo "    PREFIX:           ${PREFIX}"
+       @echo "    MAXAGENTS:        ${MAXAGENTS}"
+       @echo "    REUSE_ID:         ${REUSE_ID}"
+       @echo "    DATABASE:         ${DATABASE}"
+       @echo "    ONEWAY:           ${ONEWAY}"
+       @echo "    CLEANFULL:        ${CLEANFULL}"
+       @echo "User settings:"
+       @echo "    OSSEC_GROUP:      ${OSSEC_GROUP}"
+       @echo "    OSSEC_USER:       ${OSSEC_USER}"
+       @echo "    OSSEC_USER_MAIL:  ${OSSEC_USER_MAIL}"
+       @echo "    OSSEC_USER_REM:   ${OSSEC_USER_REM}"
+       @echo "ZLIB settings:"
+       @echo "    ZLIB_SYSTEM:      ${ZLIB_SYSTEM}"
+       @echo "    ZLIB_INCLUDE:     ${ZLIB_INCLUDE}"
+       @echo "    ZLIB_LIB:         ${ZLIB_LIB}"
+       @echo "PCRE2 settings:"
+       @echo "    PCRE2_SYSTEM:     ${PCRE2_SYSTEM}"
+       @echo "    PCRE2_INCLUDE:    ${PCRE2_INCLUDE}"
+       @echo "Lua settings:"
+       @echo "    LUA_PLAT:         ${LUA_PLAT}"
+       @echo "    LUA_ENABLE:       ${LUA_ENABLE}"
+       @echo "USE settings:"
+       @echo "    USE_ZEROMQ:       ${USE_ZEROMQ}"
+       @echo "    USE_GEOIP:        ${USE_GEOIP}"
+       @echo "    USE_PRELUDE:      ${USE_PRELUDE}"
+       @echo "    USE_OPENSSL:      ${USE_OPENSSL}"
+       @echo "    USE_INOTIFY:      ${USE_INOTIFY}"
+       @echo "    USE_SQLITE:       ${USE_SQLITE}"
+       @echo "    USE_PCRE2_JIT:    ${USE_PCRE2_JIT}"
+       @echo "Mysql settings:"
+       @echo "    includes:         ${MI}"
+       @echo "    libs:             ${ML}"
+       @echo "Pgsql settings:"
+       @echo "    includes:         ${PI}"
+       @echo "    libs:             ${PL}"
+       @echo "Defines:"
+       @echo "    ${DEFINES}"
+       @echo "Compiler:"
+       @echo "    CFLAGS          ${OSSEC_CFLAGS}"
+       @echo "    LDFLAGS         ${OSSEC_LDFLAGS}"
+       @echo "    CC              ${CC}"
+       @echo "    MAKE            ${MAKE}"
+
+
+BUILD_SERVER+=external
+BUILD_SERVER+=ossec-maild
+BUILD_SERVER+=ossec-csyslogd
+BUILD_SERVER+=ossec-agentlessd
+BUILD_SERVER+=ossec-execd
+BUILD_SERVER+=ossec-logcollector
+BUILD_SERVER+=ossec-remoted
+BUILD_SERVER+=ossec-agentd
+BUILD_SERVER+=manage_agents
+BUILD_SERVER+=utils
+BUILD_SERVER+=ossec-syscheckd
+BUILD_SERVER+=ossec-monitord
+BUILD_SERVER+=ossec-reportd
+ifneq (,$(filter ${USE_OPENSSL},auto yes))
+BUILD_SERVER+=ossec-authd
+endif
+BUILD_SERVER+=ossec-analysisd
+BUILD_SERVER+=ossec-logtest
+BUILD_SERVER+=ossec-makelists
+BUILD_SERVER+=ossec-dbd
+
+BUILD_AGENT+=external
+BUILD_AGENT+=ossec-agentd
+ifneq (,$(filter ${USE_OPENSSL},auto yes))
+BUILD_AGENT+=agent-auth
+endif
+BUILD_AGENT+=ossec-logcollector
+BUILD_AGENT+=ossec-syscheckd
+BUILD_AGENT+=ossec-execd
+BUILD_AGENT+=manage_agents
+
+.PHONY: server local hybrid agent
+ifeq (${MAKECMDGOALS},server)
+$(error Do not use 'server' directly, use 'TARGET=server')
+endif
+server: ${BUILD_SERVER}
+
+ifeq (${MAKECMDGOALS},local)
+$(error Do not use 'local' directly, use 'TARGET=local')
+endif
+local: ${BUILD_SERVER}
+
+ifeq (${MAKECMDGOALS},hybrid)
+$(error Do not use 'hybrid' directly, use 'TARGET=hybrid')
+endif
+hybrid: ${BUILD_SERVER}
+
+ifeq (${MAKECMDGOALS},agent)
+$(error Do not use 'agent' directly, use 'TARGET=agent')
+endif
+agent: ${BUILD_AGENT}
+
+
+WINDOWS_BINS:=win32/ossec-agent.exe win32/ossec-agent-eventchannel.exe win32/ossec-rootcheck.exe win32/manage_agents.exe win32/setup-windows.exe win32/setup-syscheck.exe win32/setup-iis.exe win32/add-localfile.exe win32/os_win32ui.exe win32/agent-auth.exe
+
+ifeq (${MAKECMDGOALS},winagent)
+$(error Do not use 'winagent' directly, use 'TARGET=winagent')
+endif
+.PHONY: winagent
+winagent:
+       ${MAKE} ${WINDOWS_BINS} CFLAGS="-DCLIENT -DWIN32 -I./${EXTERNAL_ZLIB} -I./${EXTERNAL_PCRE2}/install/include" LDFLAGS="-lwsock32 -lwevtapi -lshlwapi -lcomctl32 -lws2_32"
+       #cd ${EXTERNAL_LUA}src/ && ${MAKE} CC=${MING_BASE}${CC} -f Makefile.mingw mingw
+       #cp ${EXTERNAL_LUA}src/ossec-lua.exe win32/
+       #cp ${EXTERNAL_LUA}src/ossec-luac.exe win32/
+       cd win32/ && ./unix2dos.pl ossec.conf > default-ossec.conf
+       cd win32/ && ./unix2dos.pl help.txt > help_win.txt
+       cd win32/ && ./unix2dos.pl ../../etc/internal_options.conf > internal_options.conf
+       cd win32/ && ./unix2dos.pl ../../etc/local_internal_options-win.conf > default-local_internal_options.conf
+       cd win32/ && ./unix2dos.pl ../../LICENSE > LICENSE.txt
+       cd win32/ && ./unix2dos.pl ../../active-response/win/route-null.cmd > route-null.cmd
+       cd win32/ && ./unix2dos.pl ../../active-response/win/restart-ossec.cmd > restart-ossec.cmd
+       cd win32/ && makensis ossec-installer.nsi
+
+
+####################
+#### External ######
+####################
+
+.PHONY: external lua
+ifeq (${PCRE2_SYSTEM},no)
+external: libcJSON.a ${EXTERNAL_ZLIB}libz.a lua libpcre2-8.a
+else
+external: libcJSON.a ${EXTERNAL_ZLIB}libz.a lua
+endif
+
+lua:
+ifeq (${LUA_ENABLE},yes)
+       cd ${EXTERNAL_LUA} && ${MAKE} ${LUA_PLAT}
+endif
+
+${EXTERNAL_ZLIB}libz.a:
+ifeq (${TARGET},winagent)
+       cd ${EXTERNAL_ZLIB} && cp zconf.h.in zconf.h && ${MAKE} -f win32/Makefile.gcc PREFIX=${MING_BASE} libz.a
+else
+ifeq (${ZLIB_SYSTEM},no)
+       cd ${EXTERNAL_ZLIB} && ./configure && ${MAKE} libz.a
+endif
+endif
+
+#### zlib ##########
+
+ifeq (${ZLIB_SYSTEM},no)
+ZLIB_LIB=os_zlib.a ${EXTERNAL_ZLIB}libz.a
+ZLIB_INCLUDE=-I./${EXTERNAL_ZLIB}
+else
+ZLIB_LIB=os_zlib.a
+ZLIB_INCLUDE=
+OSSEC_LDFLAGS+=-lz
+endif
+
+os_zlib_c := os_zlib/os_zlib.c
+os_zlib_o := $(os_zlib_c:.c=.o)
+
+os_zlib/%.o: os_zlib/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $< -o $@
+
+os_zlib.a: ${os_zlib_o}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+
+
+
+#### cJSON #########
+
+JSON_LIB=libcJSON.a
+JSON_INCLUDE=-I./${EXTERNAL_JSON}
+
+cjson_c := ${EXTERNAL_JSON}cJSON.c
+cjson_o := $(cjson_c:.c=.o)
+
+${EXTERNAL_JSON}%.o: ${EXTERNAL_JSON}%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
+
+libcJSON.a: ${cjson_o}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+
+
+
+#### pcre2 ##########
+
+ifeq (${PCRE2_SYSTEM},no)
+libpcre2-8.a: ${EXTERNAL_PCRE2}/install/lib/libpcre2-8.a
+       cp $< $@
+       ${OSSEC_RANLIB} $@
+
+${EXTERNAL_PCRE2}/install/lib/libpcre2-8.a:
+ifeq (${TARGET}, winagent)
+       cd ${EXTERNAL_PCRE2} && \
+       CC= ./configure \
+               --prefix=$(shell pwd)/${EXTERNAL_PCRE2}/install \
+               ${PCRE2_CONFIGURE_JIT} \
+               --disable-shared \
+               --enable-static \
+               --host=${MING_BASE:%-=%} && \
+       make install-libLTLIBRARIES install-nodist_includeHEADERS
+else
+       cd ${EXTERNAL_PCRE2} && \
+       ./configure \
+               --prefix=$(shell pwd)/${EXTERNAL_PCRE2}/install \
+               ${PCRE2_CONFIGURE_JIT} \
+               --disable-shared \
+               --enable-static && \
+       make install-libLTLIBRARIES install-nodist_includeHEADERS
+endif
+endif
+
+
+####################
+#### OSSEC Libs ####
+####################
+
+ossec_libs = os_crypto.a config.a shared.a os_net.a os_regex.a os_xml.a
+
+#### os_xml ########
+
+os_xml_c := $(wildcard os_xml/*.c)
+os_xml_o := $(os_xml_c:.c=.o)
+
+os_xml/%.o: os_xml/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
+
+os_xml.a: ${os_xml_o}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+
+
+#### os_regex ######
+
+os_regex_c := $(wildcard os_regex/*.c)
+os_regex_o := $(os_regex_c:.c=.o)
+
+os_regex/%.o: os_regex/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
+
+ifeq (${PCRE2_SYSTEM},no)
+os_regex.a: ${os_regex_o} libpcre2-8.a
+       (mkdir -p libpcre2_objs && cd libpcre2_objs && ${QUIET_LINK}${MING_BASE}ar -x ../libpcre2-8.a)
+       ${OSSEC_LINK} $@ ${os_regex_o} $(addprefix libpcre2_objs/,$(shell ${MING_BASE}ar -t libpcre2-8.a))
+       ${OSSEC_RANLIB} $@
+       rm -rf libpcre2_objs
+else
+os_regex.a: ${os_regex_o}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+endif
+
+#### os_net ##########
+
+os_net_c := $(wildcard os_net/*.c)
+os_net_o := $(os_net_c:.c=.o)
+
+os_net/%.o: os_net/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
+
+os_net.a: ${os_net_o}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+
+#### Shared ##########
+
+shared_c := $(wildcard shared/*.c)
+shared_o := $(shared_c:.c=.o)
+
+shared/%.o: shared/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
+
+shared.a: ${shared_o}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+
+#### Config ##########
+
+config_c := $(wildcard config/*.c)
+config_o := $(config_c:.c=.o)
+
+config/%.o: config/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
+
+config.a: ${config_o}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+
+#### crypto ##########
+
+crypto_blowfish_c := os_crypto/blowfish/bf_op.c \
+                                                                               os_crypto/blowfish/bf_skey.c \
+                                                                               os_crypto/blowfish/bf_enc.c
+crypto_blowfish_o := $(crypto_blowfish_c:.c=.o)
+
+os_crypto/blowfish/%.o: os_crypto/blowfish/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -Wno-implicit-fallthrough -c $^ -o $@
+
+crypto_md5_c := os_crypto/md5/md5.c \
+                                                        os_crypto/md5/md5_op.c
+crypto_md5_o := $(crypto_md5_c:.c=.o)
+
+os_crypto/md5/%.o: os_crypto/md5/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
+
+crypto_sha1_c := os_crypto/sha1/sha1_op.c
+crypto_sha1_o := $(crypto_sha1_c:.c=.o)
+
+os_crypto/sha1/%.o: os_crypto/sha1/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -Wno-implicit-fallthrough -c $^ -o $@
+
+crypto_md5_sha1_c := os_crypto/md5_sha1/md5_sha1_op.c
+crypto_md5_sha1_o := $(crypto_md5_sha1_c:.c=.o)
+
+os_crypto/md5_sha1/%.o: os_crypto/md5_sha1/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
+
+crypto_shared_c := $(wildcard os_crypto/shared/*.c)
+crypto_shared_o := $(crypto_shared_c:.c=.o)
+
+os_crypto/shared/%.o: os_crypto/shared/%.c ${ZLIB_LIB}
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $< -o $@
+
+
+crypto_o := ${crypto_blowfish_o} \
+                                        ${crypto_md5_o} \
+                                        ${crypto_sha1_o} \
+                                        ${crypto_shared_o} \
+                                        ${crypto_md5_sha1_o}
+
+os_crypto.a: ${crypto_o}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+
+
+#### os_mail #########
+
+os_maild_c := $(wildcard os_maild/*.c)
+os_maild_o := $(os_maild_c:.c=.o)
+
+os_maild/%.o: os_maild/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-maild\" -c $^ -o $@
+
+ossec-maild: ${os_maild_o} ${ossec_libs}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+#### os_dbd ##########
+
+os_dbd_c := $(wildcard os_dbd/*.c)
+os_dbd_o := $(os_dbd_c:.c=.o)
+
+os_dbd/%.o: os_dbd/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} ${MI} ${PI} -DARGV0=\"ossec-dbd\" -c $^ -o $@
+
+ossec-dbd: ${os_dbd_o} ${ossec_libs}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${MI} ${PI} ${JSON_INCLUDE} $^ -lm ${OSSEC_LDFLAGS} -o $@
+
+
+#### os_csyslogd #####
+
+os_csyslogd_c := $(wildcard os_csyslogd/*.c)
+os_csyslogd_o := $(os_csyslogd_c:.c=.o)
+
+os_csyslogd/%.o: os_csyslogd/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} ${JSON_INCLUDE} -DARGV0=\"ossec-csyslogd\" -c $^ -o $@
+
+ossec-csyslogd: ${os_csyslogd_o} ${ossec_libs} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${JSON_INCLUDE} $^ -lm ${OSSEC_LDFLAGS} -o $@
+
+
+#### agentlessd ####
+
+os_agentlessd_c := $(wildcard agentlessd/*.c)
+os_agentlessd_o := $(os_agentlessd_c:.c=.o)
+
+agentlessd/%.o: agentlessd/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-agentlessd\" -c $^ -o $@
+
+ossec-agentlessd: ${os_agentlessd_o} ${ossec_libs}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+#### os_execd #####
+
+os_execd_c := $(wildcard os_execd/*.c)
+os_execd_o := $(os_execd_c:.c=.o)
+
+os_execd/%.o: os_execd/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-execd\" -c $^ -o $@
+
+ossec-execd: ${os_execd_o} ${ossec_libs} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${JSON_INCLUDE} $^ -lm ${OSSEC_LDFLAGS} -o $@
+
+
+#### logcollectord ####
+
+os_logcollector_c := $(wildcard logcollector/*.c)
+os_logcollector_o := $(os_logcollector_c:.c=.o)
+os_logcollector_eventchannel_o := $(os_logcollector_c:.c=-event.o)
+
+logcollector/%.o: logcollector/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-logcollector\" -c $^ -o $@
+
+logcollector/%-event.o: logcollector/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DEVENTCHANNEL_SUPPORT -DARGV0=\"ossec-logcollector\" -c $^ -o $@
+
+ossec-logcollector: ${os_logcollector_o} ${ossec_libs}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+#### remoted #########
+
+remoted_c := $(wildcard remoted/*.c)
+remoted_o := $(remoted_c:.c=.o)
+
+remoted/%.o: remoted/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -I./remoted ${ZLIB_INCLUDE} -DARGV0=\"ossec-remoted\" -c $^ -o $@
+
+ossec-remoted: ${remoted_o} ${ossec_libs} ${ZLIB_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+#### ossec-agentd ####
+
+client_agent_c := $(wildcard client-agent/*.c)
+client_agent_o := $(client_agent_c:.c=.o)
+
+client-agent/%.o: client-agent/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -I./client-agent ${ZLIB_INCLUDE} -DARGV0=\"ossec-agentd\" -c $^ -o $@
+
+ossec-agentd: ${client_agent_o} ${ossec_libs} ${ZLIB_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+#### addagent ######
+
+addagent_c := $(wildcard addagent/*.c)
+addagent_o := $(addagent_c:.c=.o)
+
+addagent/%.o: addagent/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -I./addagent ${ZLIB_INCLUDE} -DARGV0=\"manage_agents\" -c $^ -o $@
+
+
+manage_agents: ${addagent_o} ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+#### Util ##########
+
+util_programs = syscheck_update clear_stats list_agents agent_control syscheck_control rootcheck_control verify-agent-conf ossec-regex ossec-regex-convert
+
+.PHONY: utils
+utils: ${util_programs}
+
+util_c := $(wildcard util/*.c)
+util_o := $(util_c:.c=.o)
+
+util/%.o: util/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -I./util ${ZLIB_INCLUDE} -DARGV0=\"utils\" -c $^ -o $@
+
+syscheck_update: util/syscheck_update.o addagent/validate.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+clear_stats: util/clear_stats.o ${ossec_libs} ${ZLIB_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+list_agents: util/list_agents.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+verify-agent-conf: util/verify-agent-conf.o ${ossec_libs} ${ZLIB_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+agent_control: util/agent_control.o addagent/validate.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ -lm ${OSSEC_LDFLAGS} -o $@
+
+syscheck_control: util/syscheck_control.o addagent/validate.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+rootcheck_control: util/rootcheck_control.o addagent/validate.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} ${JSON_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+ossec-regex: util/ossec-regex.o ${ossec_libs} ${ZLIB_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+ossec-regex-convert: util/ossec-regex-convert.o ${ossec_libs} ${ZLIB_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+#### rootcheck #####
+
+rootcheck_c := $(wildcard rootcheck/*.c)
+rootcheck_o := $(rootcheck_c:.c=.o)
+rootcheck_rk_o := $(rootcheck_c:.c=_rk.o)
+rootcheck_o_lib := $(filter-out rootcheck/rootcheck-config.o, ${rootcheck_o})
+rootcheck_o_cmd := $(filter-out rootcheck/config.o, ${rootcheck_o})
+
+
+rootcheck/%.o: rootcheck/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"rootcheck\" -c $^ -o $@
+
+rootcheck/%_rk.o: rootcheck/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"rootcheck\" -UOSSECHIDS -c $^ -o $@
+
+
+rootcheck.a: ${rootcheck_o_lib}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+
+#ossec-rootcheck: rootcheck/rootcheck-config.o rootcheck.a ${ossec_libs}
+#      @echo ${rootcheck_o_cmd}
+#      @echo ${rootcheck_o_lib}
+#      @echo ${rootcheck_o}
+#      ${OSSEC_CC} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} rootcheck/rootcheck-config.o rootcheck.a rootcheck/rootcheck.c ${ZLIB_LIB} ${ossec_libs}  -o $@
+
+#### syscheck ######
+
+
+syscheck_c := $(wildcard syscheckd/*.c)
+syscheck_o := $(syscheck_c:.c=.o)
+
+syscheckd/%.o: syscheckd/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-syscheckd\" -c $^ -o $@
+
+ossec-syscheckd: ${syscheck_o} rootcheck.a ${ossec_libs} ${ZLIB_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+#### Monitor #######
+
+monitor_c := $(wildcard monitord/*.c)
+monitor_o := $(monitor_c:.c=.o)
+
+monitord/%.o: monitord/%.c ${ZLIB_LIB}
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-monitord\" -c $< -o $@
+
+ossec-monitord: ${monitor_o} ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${ZLIB_INCLUDE} $^ ${OSSEC_LDFLAGS} -o $@
+
+
+#### reportd #######
+
+report_c := reportd/report.c
+report_o := $(report_c:.c=.o)
+
+reportd/%.o: reportd/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-reportd\" -c $^ -o $@
+
+ossec-reportd: ${report_o} ${ossec_libs}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+
+#### os_auth #######
+
+os_auth_c := ${wildcard os_auth/*.c}
+os_auth_o := $(os_auth_c:.c=.o)
+
+os_auth/%.o: os_auth/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS}  -I./os_auth -DARGV0=\"ossec-authd\" -c $^ -o $@
+
+agent-auth: addagent/validate.o os_auth/main-client.o os_auth/ssl.o os_auth/check_cert.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${JSON_INCLUDE} -I./os_auth $^ ${OSSEC_LDFLAGS} -o $@
+
+ossec-authd: addagent/validate.o os_auth/main-server.o os_auth/ssl.o os_auth/check_cert.o ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} ${JSON_INCLUDE} -I./os_auth $^ ${OSSEC_LDFLAGS} -o $@
+
+#### analysisd #####
+
+cdb_c := ${wildcard analysisd/cdb/*.c}
+cdb_o := $(cdb_c:.c=.o)
+all_analysisd_o += ${cdb_o}
+all_analysisd_libs += cdb.a
+
+analysisd/cdb/%.o: analysisd/cdb/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/cdb -c $^ -o $@
+
+cdb.a: ${cdb_o}
+       ${OSSEC_LINK} $@ $^
+       ${OSSEC_RANLIB} $@
+
+
+alerts_c := ${wildcard analysisd/alerts/*.c}
+alerts_o := $(alerts_c:.c=.o)
+all_analysisd_o += ${alerts_o}
+all_analysisd_libs += alerts.a
+
+analysisd/alerts/%.o: analysisd/alerts/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/alerts -c $^ -o $@
+
+alerts.a: ${alerts_o}
+       ${OSSEC_LINK} $@ $^
+
+decoders_c := ${wildcard analysisd/decoders/*.c} ${wildcard analysisd/decoders/plugins/*.c} ${wildcard analysisd/compiled_rules/*.c}
+decoders_o := $(decoders_c:.c=.o)
+## XXX Nasty hack
+decoders_test_o := $(decoders_c:.c=-test.o)
+decoders_live_o := $(decoders_c:.c=-live.o)
+
+all_analysisd_o += ${decoders_o} ${decoders_test_o} ${decoders_live_o}
+all_analysisd_libs += decoders.a decoders-test.a decoders-live.a
+
+
+analysisd/decoders/%-test.o: analysisd/decoders/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DTESTRULE -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
+
+
+analysisd/decoders/%-live.o: analysisd/decoders/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
+
+analysisd/decoders/plugins/%-test.o: analysisd/decoders/plugins/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DTESTRULE -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
+
+
+analysisd/decoders/plugins/%-live.o: analysisd/decoders/plugins/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
+
+analysisd/compiled_rules/compiled_rules.h: analysisd/compiled_rules/.function_list analysisd/compiled_rules/register_rule.sh
+       ./analysisd/compiled_rules/register_rule.sh build
+
+analysisd/compiled_rules/%-test.o: analysisd/compiled_rules/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DTESTRULE -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
+
+analysisd/compiled_rules/%-live.o: analysisd/compiled_rules/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
+
+decoders-live.a: ${decoders_live_o}
+       ${OSSEC_LINK} $@ $^
+
+decoders-test.a: ${decoders_test_o}
+       ${OSSEC_LINK} $@ $^
+
+format_c := ${wildcard analysisd/format/*.c}
+format_o := ${format_c:.c=.o}
+all_analysisd_o += ${format_o}
+
+analysisd/format/%.o: analysisd/format/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} ${JSON_INCLUDE} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
+
+output_c := ${wildcard analysisd/output/*c}
+output_o := ${output_c:.c=.o}
+all_analysisd_o += ${output_o}
+
+analysisd/output/%.o: analysisd/output/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -I./analysisd/decoders -c $^ -o $@
+
+
+
+analysisd_c := ${filter-out analysisd/analysisd.c, ${filter-out analysisd/testrule.c, ${filter-out analysisd/makelists.c, ${wildcard analysisd/*.c}}}}
+analysisd_o := ${analysisd_c:.c=.o}
+all_analysisd_o += ${analysisd_o}
+
+analysisd_test_o := $(analysisd_o:.o=-test.o)
+analysisd_live_o := $(analysisd_o:.o=-live.o)
+all_analysisd_o += ${analysisd_test_o} ${analysisd_live_o} analysisd/testrule-test.o analysisd/analysisd-live.o analysisd/analysisd-test.o analysisd/makelists-live.o
+
+analysisd/%-live.o: analysisd/%.c analysisd/compiled_rules/compiled_rules.h
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-analysisd\" -I./analysisd -c $< -o $@
+
+analysisd/%-test.o: analysisd/%.c analysisd/compiled_rules/compiled_rules.h
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DTESTRULE -DARGV0=\"ossec-analysisd\" -I./analysisd -c $< -o $@
+
+
+ossec-logtest: ${analysisd_test_o} ${output_o} ${format_o} analysisd/testrule-test.o analysisd/analysisd-test.o alerts.a cdb.a decoders-test.a ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} -DTESTRULE $^ ${OSSEC_LDFLAGS} ${ANALYSISD_FLAGS} -o $@
+
+ossec-analysisd: ${analysisd_live_o} analysisd/analysisd-live.o ${output_o} ${format_o} alerts.a cdb.a decoders-live.a ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS}  $^ ${OSSEC_LDFLAGS} ${ANALYSISD_FLAGS} -o $@
+
+ossec-makelists: analysisd/makelists-live.o ${analysisd_live_o} ${format_o} alerts.a cdb.a decoders-live.a ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS}  $^ ${OSSEC_LDFLAGS} -o $@
+
+
+####################
+#### test ##########
+####################
+
+CFLAGS_TEST = -g -O0 --coverage
+
+LDFLAGS_TEST = -lcheck -lm -pthread -lrt
+
+ifdef TEST
+       OSSEC_CFLAGS+=${CFLAGS_TEST}
+       OSSEC_LDFLAGS+=${LDFLAGS_TEST}
+endif #TEST
+
+test_programs = test_os_zlib test_os_xml test_os_regex test_os_crypto test_shared
+
+.PHONY: test run_tests build_tests test_valgrind test_coverage
+
+test: build_tests
+       ${MAKE} run_tests
+
+run_tests:
+       @$(foreach bin,${test_programs},./${bin} || exit 1;)
+
+build_tests: external
+       ${MAKE} DEBUG=1 TEST=1 ${test_programs}
+
+test_c := $(wildcard tests/*.c)
+test_o := $(test_c:.c=.o)
+
+tests/%.o: tests/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -c $^ -o $@
+
+test_os_zlib: tests/test_os_zlib.o ${ZLIB_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+test_os_xml: tests/test_os_xml.o os_xml.a
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+test_os_regex: tests/test_os_regex.c os_regex.a
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+test_os_crypto: tests/test_os_crypto.c os_crypto.a shared.a os_xml.a os_net.a os_regex.a ${ZLIB_LIB}  ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+#test_os_net: tests/test_os_net.c os_net.a shared.a os_regex.a os_xml.a
+#      ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+test_shared: tests/test_shared.c shared.a os_xml.a os_net.a os_regex.a ${JSON_LIB}
+       ${OSSEC_CCBIN} ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+test_valgrind: build_tests
+       valgrind --leak-check=full --track-origins=yes --trace-children=yes --vgdb=no --error-exitcode=1 --gen-suppressions=all --suppressions=tests/valgrind.supp ${MAKE} run_tests
+
+
+test_coverage: build_tests
+       lcov --base-directory . --directory . --zerocounters --rc lcov_branch_coverage=1 --quiet
+       @echo "Running tests\n"
+
+       ${MAKE} run_tests
+
+       @echo "\nTests finished."
+
+       lcov --base-directory . --directory . --capture --quiet --rc lcov_branch_coverage=1 --output-file ossec.test
+
+       rm -rf coverage-report/
+       genhtml --branch-coverage --output-directory coverage-report/ --title "ossec test coverage" --show-details --legend --num-spaces 4 --quiet ossec.test
+
+####################
+#### RUule Tests ###
+####################
+
+test-rules:
+       ( cd ../contrib/ossec-testing && sudo python runtests.py)
+
+
+####################
+#### windows #######
+####################
+
+win32/icon.o: win32/icofile.rc
+       ${OSSEC_WINDRES} -i $< -o $@
+
+win32_c := $(wildcard win32/*.c)
+win32_o := $(win32_c:.c=.o)
+
+win32/%.o: win32/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -DARGV0=\"ossec-agent\" -c $^ -o $@
+
+win32/%_rk.o: win32/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -UOSSECHIDS -DARGV0=\"ossec-agent\" -c $^ -o $@
+
+win32_ui_c := $(wildcard win32/ui/*.c)
+win32_ui_o := $(win32_ui_c:.c=.o)
+
+win32/ui/%.o: win32/ui/%.c
+       ${OSSEC_CC} ${OSSEC_CFLAGS} -UOSSECHIDS -DARGV0=\"ossec-win32ui\" -c $^ -o $@
+
+win32/ossec-agent.exe: win32/icon.o win32/win_agent.o win32/win_service.o $(filter-out syscheckd/seechanges.o, ${syscheck_o}) ${rootcheck_o} $(filter-out client-agent/main.o, $(filter-out client-agent/agentd.o, $(filter-out client-agent/event-forward.o, ${client_agent_o}))) $(filter-out logcollector/main.o, ${os_logcollector_o}) ${os_execd_o} ${ossec_libs} ${ZLIB_LIB}
+       ${OSSEC_CCBIN} -DARGV0=\"ossec-agent\" -DOSSECHIDS ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+win32/ossec-agent-eventchannel.exe: win32/icon.o win32/win_agent.o win32/win_service.o $(filter-out syscheckd/seechanges.o, ${syscheck_o}) ${rootcheck_o} $(filter-out client-agent/main.o, $(filter-out client-agent/agentd.o, $(filter-out client-agent/event-forward.o, ${client_agent_o}))) $(filter-out logcollector/main-event.o, ${os_logcollector_eventchannel_o}) ${os_execd_o} ${ossec_libs} ${ZLIB_LIB}
+       ${OSSEC_CCBIN} -DARGV0=\"ossec-agent\" -DOSSECHIDS -DEVENTCHANNEL_SUPPORT ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+win32/ossec-rootcheck.exe: win32/icon.o win32/win_service_rk.o ${rootcheck_rk_o} ${ossec_libs}
+       ${OSSEC_CCBIN} -DARGV0=\"ossec-rootcheck\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+win32/manage_agents.exe: win32/win_service_rk.o ${addagent_o} ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} -DARGV0=\"manage-agents\" -DMA ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+win32/setup-windows.exe: win32/win_service_rk.o win32/setup-win.o win32/setup-shared.o ${ossec_libs}
+       ${OSSEC_CCBIN} -DARGV0=\"setup-windows\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+win32/setup-syscheck.exe: win32/setup-syscheck.o win32/setup-shared.o ${ossec_libs}
+       ${OSSEC_CCBIN} -DARGV0=\"setup-syscheck\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+win32/setup-iis.exe: win32/setup-iis.o ${ossec_libs}
+       ${OSSEC_CCBIN} -DARGV0=\"setup-iis\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+win32/add-localfile.exe: win32/add-localfile.o ${ossec_libs}
+       ${OSSEC_CCBIN} -DARGV0=\"add-localfile\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -o $@
+
+win32/resource.o: win32/ui/win32ui.rc
+       ${OSSEC_WINDRES} -i $< -o $@
+
+win32/os_win32ui.exe: win32/resource.o win32/win_service_rk.o ${win32_ui_o} addagent/b64.o ${ossec_libs}
+       ${OSSEC_CCBIN} -DARGV0=\"ossec-win32ui\" ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -mwindows -o $@
+
+win32/agent-auth.exe: win32/win_service_rk.o addagent/validate.c win32/agent_auth.c ${ossec_libs} ${ZLIB_LIB} ${JSON_LIB}
+       ${OSSEC_CCBIN} -DARGV0=\"agent-auth\" -DOSSECHIDS ${OSSEC_CFLAGS} $^ ${OSSEC_LDFLAGS} -lshlwapi -lwsock32 -lsecur32 -flto -o $@
+
+
+
+
+####################
+#### Clean #########
+####################
+
+clean: clean-test clean-internals clean-external clean-windows
+
+clean-test:
+       rm -f ${test_o} ${test_programs} ossec.test
+       rm -Rf coverage-report/
+       find . -name "*.gcno" -exec rm {} \;
+       find . -name "*.gcda" -exec rm {} \;
+
+clean-external:
+       rm -f ${cjson_o} libcJSON.a libpcre2-8.a
+       cd ${EXTERNAL_ZLIB} && ${MAKE} -f Makefile.in distclean
+       cd ${EXTERNAL_LUA} && ${MAKE} clean
+       #cd ${EXTERNAL_PCRE2} && ${MAKE} distclean
+
+
+clean-internals:
+       rm -f ${os_zlib_o} os_zlib.a
+       rm -f ${os_xml_o} os_xml.a
+       rm -f ${os_regex_o} os_regex.a
+       rm -f ${os_net_o} os_net.a
+       rm -f ${shared_o} shared.a
+       rm -f ${config_o} config.a
+       rm -f ${os_maild_o} ossec-maild
+       rm -f ${crypto_o} os_crypto.a
+       rm -f ${os_csyslogd_o} ossec-csyslogd
+       rm -f ${os_dbd_o} ossec-dbd
+       rm -f ${os_agentlessd_o} ossec-agentlessd
+       rm -f ${os_execd_o} ossec-execd
+       rm -f ${os_logcollector_o} ${os_logcollector_eventchannel_o} ossec-logcollector
+       rm -f ${remoted_o} ossec-remoted
+       rm -f ${report_o} ossec-reportd
+       rm -f ${client_agent_o} ossec-agentd
+       rm -f ${addagent_o} manage_agents
+       rm -f ${util_o} ${util_programs}
+       rm -f ${rootcheck_o} ${rootcheck_rk_o} rootcheck.a
+       rm -f ${syscheck_o} ossec-syscheckd
+       rm -f ${monitor_o} ossec-monitord
+       rm -f ${os_auth_o} ossec-authd agent-auth
+       rm -f ${all_analysisd_o} ${all_analysisd_libs} analysisd/compiled_rules/compiled_rules.h
+       rm -f ossec-logtest ossec-analysisd ossec-makelists
+
+clean-windows:
+       rm -f win32/LICENSE.txt
+       rm -f win32/help_win.txt
+       rm -f win32/internal_options.conf
+       rm -f win32/default-local_internal_options.conf
+       rm -f win32/default-ossec.conf
+       rm -f win32/restart-ossec.cmd
+       rm -f win32/route-null.cmd
+       rm -f ${win32_o} ${win32_ui_o} win32/win_service_rk.o
+       rm -f win32/icon.o win32/resource.o
+       rm -f ${WINDOWS_BINS}
+       #rm -f ${EXTERNAL_LUA}src/lua52.dll
+       #rm -f ${EXTERNAL_LUA}src/ossec-lua.exe
+       #rm -f ${EXTERNAL_LUA}src/ossec-luac.exe
+       #rm -f win32/ossec-lua.exe
+       #rm -f win32/ossec-luac.exe
+       rm -f win32/ossec-win32-agent.exe