# Extract the version string from nmap.h. export NMAP_VERSION := $(shell grep '^\#[ \t]*define[ \t]\+NMAP_VERSION' nmap.h | sed -e 's/.*"\(.*\)".*/\1/' -e 'q') NMAP_NAME= Nmap NMAP_URL= http://insecure.org NMAP_PLATFORM=@host@ prefix = @prefix@ exec_prefix = @exec_prefix@ bindir = @bindir@ sbindir = @sbindir@ mandir = @mandir@ srcdir = @srcdir@ nmapdatadir = @datadir@/nmap deskdir = $(prefix)/share/applications NMAPDEVDIR=~/nmap-dev export NBASEDIR=@NBASEDIR@ export NSOCKDIR=@NSOCKDIR@ export LIBLUADIR = @LIBLUADIR@ export NDIR=$(shell pwd) export LIBLUA_LIBS = @LIBLUA_LIBS@ CC = @CC@ CXX = @CXX@ CCOPT = DBGFLAGS = LIBPCAPDIR = @libpcapdir@ LIBPCREDIR = @LIBPCREDIR@ export LIBDNETDIR = @LIBDNETDIR@ DEFS = @DEFS@ -DNMAP_NAME=\"$(NMAP_NAME)\" -DNMAP_URL=\"$(NMAP_URL)\" -DNMAP_PLATFORM=\"$(NMAP_PLATFORM)\" -DNMAPDATADIR=\"$(nmapdatadir)\" # For mtrace debugging -- see MTRACE define in main.cc for instructions # Should only be enabled during debugging and not in any real release. # DEFS += -DMTRACE=1 CXXFLAGS = @CXXFLAGS@ $(DBGFLAGS) $(CCOPT) $(DEFS) CPPFLAGS = @CPPFLAGS@ export CFLAGS = $(CXXFLAGS) # CFLAGS = $(DEFS) $(INCLS) STATIC = LDFLAGS = @LDFLAGS@ $(DBGFLAGS) $(STATIC) LIBS = @LIBNBASE_LIBS@ @LIBNSOCK_LIBS@ @LIBPCRE_LIBS@ @LIBPCAP_LIBS@ @OPENSSL_LIBS@ @LIBDNET_LIBS@ @LIBLUA_LIBS@ @LIBS@ # LIBS = -lefence @LIBS@ # LIBS = -lrmalloc @LIBS@ SHTOOL = ./shtool INSTALL = $(SHTOOL) install # MAKEDEPEND = @MAKEDEPEND@ export RPMTDIR=$(HOME)/rpm # DESTDIR is used by some package maintainers to install Nmap under # its usual directory structure into a different tree. See the # CHANGELOG for more info. DESTDIR = TARGET = nmap TARGETNMAPFE=@TARGETNMAPFE@ INSTALLNMAPFE=@INSTALLNMAPFE@ INSTALLNSE=@INSTALLNSE@ INSTALLUMIT=@INSTALLUMIT@ ifneq (@LIBLUA_LIBS@,) NSE_SRC=nse_main.cc nse_auxiliar.cc nse_nsock.cc nse_init.cc nse_nmaplib.cc nse_debug.cc nse_pcrelib.cc nse_string.cc NSE_HDRS=nse_main.h nse_auxiliar.h nse_nsock.h nse_init.h nse_nmaplib.h nse_debug.h nse_macros.h nse_pcrelib.h nse_string.h NSE_OBJS=nse_main.o nse_auxiliar.o nse_nsock.o nse_init.o nse_nmaplib.o nse_debug.o nse_pcrelib.o nse_string.o NSESTDLIB=nsestdlib endif export SRCS = main.cc nmap.cc targets.cc tcpip.cc nmap_error.cc utils.cc idle_scan.cc osscan.cc osscan2.cc output.cc scan_engine.cc timing.cc charpool.cc services.cc protocols.cc nmap_rpc.cc portlist.cc NmapOps.cc TargetGroup.cc Target.cc FingerPrintResults.cc service_scan.cc NmapOutputTable.cc MACLookup.cc nmap_tty.cc nmap_dns.cc traceroute.cc reason.cc $(NSE_SRC) @COMPAT_SRCS@ export HDRS = charpool.h FingerPrintResults.h global_structures.h idle_scan.h MACLookup.h nmap_amigaos.h nmap_dns.h nmap_error.h nmap.h NmapOps.h NmapOutputTable.h nmap_rpc.h nmap_tty.h nmap_winconfig.h osscan.h osscan2.h output.h portlist.h protocols.h scan_engine.h service_scan.h services.h TargetGroup.h Target.h targets.h tcpip.h timing.h utils.h traceroute.h reason.h $(NSE_HDRS) OBJS = main.o nmap.o targets.o tcpip.o nmap_error.o utils.o idle_scan.o osscan.o osscan2.o output.o scan_engine.o timing.o charpool.o services.o protocols.o nmap_rpc.o portlist.o NmapOps.o TargetGroup.o Target.o FingerPrintResults.o service_scan.o NmapOutputTable.o MACLookup.o nmap_tty.o nmap_dns.o traceroute.o reason.o $(NSE_OBJS) @COMPAT_OBJS@ # %.o : %.cc -- nope this is a GNU extension .cc.o: $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@ all: $(TARGET) $(TARGETNMAPFE) $(TARGET): $(DEPS) @LUA_DEPENDS@ @PCAP_DEPENDS@ @PCRE_DEPENDS@ @DNET_DEPENDS@ $(NBASEDIR)/libnbase.a $(NSOCKDIR)/src/libnsock.a $(NSESTDLIB) $(OBJS) echo Compiling nmap rm -f $@ $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) nsestdlib: nselib/Makefile @echo Compiling nse-standard-library; cd nselib && $(MAKE) # This empty rule is used to force execution of certain rules where I can't conveniently specify # all of the prerequisites (e.g. recursive makes and such) FORCE: $(LIBPCREDIR)/libpcre.a: $(LIBPCREDIR)/Makefile FORCE @echo Compiling libpcre; cd $(LIBPCREDIR) && $(MAKE) $(LIBDNETDIR)/src/.libs/libdnet.a: $(LIBDNETDIR)/Makefile FORCE @echo Compiling libdnet; cd $(LIBDNETDIR) && $(MAKE) $(LIBPCAPDIR)/libpcap.a: $(LIBPCAPDIR)/Makefile FORCE @echo Compiling libpcap; cd $(LIBPCAPDIR) && $(MAKE) $(NBASEDIR)/libnbase.a: $(NBASEDIR)/Makefile FORCE @echo Compiling libnbase; cd $(NBASEDIR) && $(MAKE) $(NSOCKDIR)/src/libnsock.a: $(NSOCKDIR)/src/Makefile FORCE @echo Compiling libnsock; cd $(NSOCKDIR)/src && $(MAKE) $(LIBLUADIR)/liblua.a: $(LIBLUADIR)/Makefile FORCE @echo Compiling liblua; cd $(LIBLUADIR) && $(MAKE) liblua.a @LUAFLAGS@ #$(LIBPCAPDIR)/Makefile: # @echo Configuring libpcap; cd $(LIBPCAPDIR); ./configure nmapfe/nmapfe: # @echo "FAILURES HERE ARE OK -- THEY JUST MEAN YOU CANNOT USE nmapfe" # -rm -f nmapfe/Makefile # -cd nmapfe; ./configure; @if test -f nmapfe/Makefile; then echo "Building NmapFE graphical frontend"; cd nmapfe && $(MAKE) VERSION=$(NMAP_VERSION); else echo "NmapFE will not be made -- your system lacks the capabilities (perhaps GTK) for this graphical frontend. You can still run command-line nmap!"; fi # -cd nmapfe; test -f Makefile && $(MAKE) VERSION=$(NMAP_VERSION) STATIC=$(STATIC); # @echo "END OF SECTION WHERE FAILURES ARE OK" # Make a statically compiled binary for portability between distributions static: $(MAKE) STATIC=-static debug: $(MAKE) DBGFLAGS="-O0 -g -pg -ftest-coverage -fprofile-arcs" # Make the Nmap tarball distro: cd $(NMAPDEVDIR) && $(MAKE) distro # Update the web site web: cd $(NMAPDEVDIR) && $(MAKE) web clean: @LUA_CLEAN@ @PCAP_CLEAN@ @PCRE_CLEAN@ @DNET_CLEAN@ nmapfe_clean nsock_clean nbase_clean my_clean @NSELIB_CLEAN@ my_clean: rm -f dependencies.mk rm -f $(OBJS) $(TARGET) config.cache pcap_clean: -cd $(LIBPCAPDIR) && $(MAKE) clean pcre_clean: -cd $(LIBPCREDIR) && $(MAKE) clean dnet_clean: -cd $(LIBDNETDIR) && $(MAKE) clean nmapfe_clean: -cd nmapfe && $(MAKE) clean nbase_clean: -cd $(NBASEDIR) && $(MAKE) clean nsock_clean: -cd $(NSOCKDIR)/src && $(MAKE) clean lua_clean: -cd $(LIBLUADIR) && $(MAKE) clean nselib_clean: -cd nselib && $(MAKE) clean pcap_dist_clean: -cd $(LIBPCAPDIR) && $(MAKE) distclean pcre_dist_clean: -cd $(LIBPCREDIR) && $(MAKE) distclean dnet_dist_clean: -cd $(LIBDNETDIR) && $(MAKE) distclean nmapfe_dist_clean: -cd nmapfe && $(MAKE) distclean lua_dist_clean: -cd $(LIBLUADIR) && $(MAKE) clean nselib_dist_clean: -cd nselib && $(MAKE) distclean nbase_dist_clean: -cd $(NBASEDIR) && $(MAKE) distclean nsock_dist_clean: -cd $(NSOCKDIR)/src && $(MAKE) distclean debugclean: rm -f *.gcov *.gcda *.gcno gmon.out distclean: my_clean my_distclean @LUA_DIST_CLEAN@ @PCAP_DIST_CLEAN@ @PCRE_DIST_CLEAN@ @DNET_DIST_CLEAN@ nmapfe_dist_clean @NSELIB_DIST_CLEAN@ my_distclean: rm -f Makefile Makefile.bak makefile.dep config.h stamp-h stamp-h.in \ config.cache config.log config.status install-nmap: $(TARGET) $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(nmapdatadir) $(INSTALL) -c -m 755 -s nmap $(DESTDIR)$(bindir)/nmap $(INSTALL) -c -m 644 docs/$(TARGET).1 $(DESTDIR)$(mandir)/man1/$(TARGET).1 $(INSTALL) -c -m 644 docs/nmap.xsl $(DESTDIR)$(nmapdatadir)/ $(INSTALL) -c -m 644 docs/nmap.dtd $(DESTDIR)$(nmapdatadir)/ $(INSTALL) -c -m 644 nmap-services $(DESTDIR)$(nmapdatadir)/ $(INSTALL) -c -m 644 nmap-rpc $(DESTDIR)$(nmapdatadir)/ $(INSTALL) -c -m 644 nmap-os-fingerprints $(DESTDIR)$(nmapdatadir)/ $(INSTALL) -c -m 644 nmap-os-db $(DESTDIR)$(nmapdatadir)/ $(INSTALL) -c -m 644 nmap-service-probes $(DESTDIR)$(nmapdatadir)/ $(INSTALL) -c -m 644 nmap-protocols $(DESTDIR)$(nmapdatadir)/ $(INSTALL) -c -m 644 nmap-mac-prefixes $(DESTDIR)$(nmapdatadir)/ install-nmapfe: $(TARGETNMAPFE) $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(mandir)/man1 $(DESTDIR)$(nmapdatadir) $(DESTDIR)$(deskdir) @echo "If the next command fails -- you cannot use the X front end" -test -f nmapfe/nmapfe && $(INSTALL) -c -m 755 -s nmapfe/nmapfe $(DESTDIR)$(bindir)/nmapfe && rm -f $(DESTDIR)$(bindir)/xnmap && $(SHTOOL) mkln -f -s $(DESTDIR)$(bindir)/nmapfe $(DESTDIR)$(bindir)/xnmap && $(INSTALL) -c -m 644 nmapfe.desktop $(DESTDIR)$(deskdir)/nmapfe.desktop && $(INSTALL) -c -m 644 docs/nmapfe.1 $(DESTDIR)$(mandir)/man1/nmapfe.1 && $(INSTALL) -c -m 644 docs/xnmap.1 $(DESTDIR)$(mandir)/man1/xnmap.1 install-umit: umit/setup.py cd umit && python setup.py install --prefix $(DESTDIR)$(prefix) NSE_FILES = scripts/script.db scripts/*.nse NSE_LIB_FILES = nselib/*lua nselib/*so install-nse: $(TARGET) $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(nmapdatadir)/scripts cp -f $(NSE_FILES) $(DESTDIR)$(nmapdatadir)/scripts $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(nmapdatadir)/nselib cp -f $(NSE_LIB_FILES) $(DESTDIR)$(nmapdatadir)/nselib install: install-nmap $(INSTALLNMAPFE) $(INSTALLNSE) $(INSTALLUMIT) @echo "NMAP SUCCESSFULLY INSTALLED" uninstall: rm -f $(bindir)/$(TARGET) $(bindir)/nmapfe $(bindir)/xnmap rm -f $(deskdir)/nmapfe.desktop $(mandir)/man1/nmapfe.1 rm -f $(mandir)/man1/xnmap.1 $(mandir)/man1/nmap.1 rm -rf $(nmapdatadir) ${srcdir}/configure: configure.ac cd ${srcdir} && autoconf ## autoheader might not change config.h.in, so touch a stamp file. #${srcdir}/config.h.in: stamp-h.in #${srcdir}/stamp-h.in: configure.ac acconfig.h \ # config.h.top config.h.bot # cd ${srcdir} && autoheader # echo timestamp > ${srcdir}/stamp-h.in # #config.h: stamp-h #stamp-h: config.h.in config.status # ./config.status Makefile: Makefile.in config.status ./config.status config.status: configure ./config.status --recheck makefile.dep: $(CXX) -MM $(CXXFLAGS) $(CPPFLAGS) $(SRCS) > $@ include makefile.dep