Nmap Development mailing list archives

[PATCH] fix out-of-tree building


From: Mike Frysinger <vapier () gentoo org>
Date: Tue, 26 May 2009 21:51:48 -0400

This attempts to fix the out-of-tree building such as:
mkdir build && cd build
../configure && make

Many of these changes are patently correct while others might incur some
debate as to how to address them (like the nbase/ncat subdirs).

Signed-off-by: Mike Frysinger <vapier () gentoo org>
---
 Makefile.in            |   45 +++++++++++++++++++++++----------------------
 configure.ac           |   22 +++++++++++++++++-----
 nbase/Makefile.in      |   13 +++++++------
 ncat/Makefile.in       |   16 +++++++++++-----
 nsock/src/Makefile.in  |   15 ++++++++-------
 nsock/src/configure.ac |   44 +++++++++++++++++++++++++-------------------
 6 files changed, 91 insertions(+), 64 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index d1ed9f6..30dab9a 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,5 +1,6 @@
+srcdir = @srcdir@
 # 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')
+export NMAP_VERSION := $(shell grep '^\#[ \t]*define[ \t]\+NMAP_VERSION' $(srcdir)/nmap.h | sed -e 
's/.*"\(.*\)".*/\1/' -e 'q')
 NMAP_NAME= Nmap
 NMAP_URL= http://nmap.org
 NMAP_PLATFORM=@host@
@@ -8,7 +9,6 @@ exec_prefix = @exec_prefix@
 bindir = @bindir@
 sbindir = @sbindir@
 mandir = @mandir@
-srcdir = @srcdir@
 nmapdatadir = @datadir@/nmap
 deskdir = $(prefix)/share/applications
 NMAPDEVDIR=~/nmap-private-dev
@@ -40,7 +40,7 @@ DEFS += -D_FORTIFY_SOURCE=2
 # Should only be enabled during debugging and not in any real release.
 # DEFS += -DMTRACE=1
 CXXFLAGS = @CXXFLAGS@ $(DBGFLAGS) $(CCOPT) $(DEFS)
-CPPFLAGS = @CPPFLAGS@
+CPPFLAGS = @CPPFLAGS@ -I$(srcdir) -I.
 export CFLAGS = $(CXXFLAGS)
 # CFLAGS = $(DEFS) $(INCLS)
 STATIC =
@@ -77,13 +77,14 @@ NSE_OBJS+=nse_openssl.o
 endif
 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 
portreasons.cc $(NSE_SRC) @COMPAT_SRCS@
+export SRCS = $(shell printf '$(srcdir)/%s ' 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 portreasons.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 portreasons.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 portreasons.o $(NSE_OBJS) @COMPAT_OBJS@
 
 # %.o : %.cc -- nope this is a GNU extension
+VPATH = $(srcdir)
 .cc.o:
        $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $< -o $@
 
@@ -193,22 +194,22 @@ install-nmap: $(TARGET)
 # Use strip -x to avoid stripping dynamically loaded NSE functions. See
 # http://seclists.org/nmap-dev/2007/q4/0272.html.
        $(STRIP) -x $(DESTDIR)$(bindir)/nmap
-       $(INSTALL) -c -m 644 docs/$(TARGET).1 $(DESTDIR)$(mandir)/man1/
-       $(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-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) -c -m 644 $(srcdir)/docs/$(TARGET).1 $(DESTDIR)$(mandir)/man1/
+       $(INSTALL) -c -m 644 $(srcdir)/docs/nmap.xsl $(DESTDIR)$(nmapdatadir)/
+       $(INSTALL) -c -m 644 $(srcdir)/docs/nmap.dtd $(DESTDIR)$(nmapdatadir)/
+       $(INSTALL) -c -m 644 $(srcdir)/nmap-services $(DESTDIR)$(nmapdatadir)/
+       $(INSTALL) -c -m 644 $(srcdir)/nmap-rpc $(DESTDIR)$(nmapdatadir)/
+       $(INSTALL) -c -m 644 $(srcdir)/nmap-os-db $(DESTDIR)$(nmapdatadir)/
+       $(INSTALL) -c -m 644 $(srcdir)/nmap-service-probes $(DESTDIR)$(nmapdatadir)/
+       $(INSTALL) -c -m 644 $(srcdir)/nmap-protocols $(DESTDIR)$(nmapdatadir)/
+       $(INSTALL) -c -m 644 $(srcdir)/nmap-mac-prefixes $(DESTDIR)$(nmapdatadir)/
 
 # Update the Ncat version number.
-$(NCATDIR)/ncat.h: nmap.h
-       sed -i -e 's/^#[ \t]*define[ \t]\+NCAT_VERSION[ \t]\+\(".*"\)/#define NCAT_VERSION "$(NMAP_VERSION)"/' $@
+$(NCATDIR)/ncat.h: $(srcdir)/nmap.h
+       sed -i -e 's/^#[ \t]*define[ \t]\+NCAT_VERSION[ \t]\+\(".*"\)/#define NCAT_VERSION "$(NMAP_VERSION)"/' 
$(srcdir)/$@
 
 # Update the version number used by Zenmap.
-$(ZENMAPDIR)/zenmapCore/Version.py $(ZENMAPDIR)/share/zenmap/config/zenmap_version: nmap.h
+$(ZENMAPDIR)/zenmapCore/Version.py $(ZENMAPDIR)/share/zenmap/config/zenmap_version: $(srcdir)/nmap.h
        cd $(ZENMAPDIR) && $(PYTHON) install_scripts/utils/version_update.py "$(NMAP_VERSION)"
 
 # By default distutils rewrites installed scripts to hardcode the
@@ -243,11 +244,11 @@ build-ndiff:
 install-ndiff:
        cd $(NDIFFDIR) && $(PYTHON) setup.py install --prefix "$(prefix)" $(if $(DESTDIR),--root "$(DESTDIR)")
 
-NSE_FILES = scripts/script.db scripts/*.nse
-NSE_LIB_LUA_FILES = nselib/*.lua
+NSE_FILES = $(srcdir)/scripts/script.db $(srcdir)/scripts/*.nse
+NSE_LIB_LUA_FILES = $(srcdir)/nselib/*.lua
 
 install-nse: $(TARGET)
-       $(INSTALL) -c -m 644 nse_main.lua $(DESTDIR)$(nmapdatadir)/
+       $(INSTALL) -c -m 644 $(srcdir)/nse_main.lua $(DESTDIR)$(nmapdatadir)/
        $(INSTALL) -d $(DESTDIR)$(nmapdatadir)/scripts
        cp -f $(NSE_FILES) $(DESTDIR)$(nmapdatadir)/scripts
        $(INSTALL) -d $(DESTDIR)$(nmapdatadir)/nselib
@@ -278,7 +279,7 @@ uninstall-zenmap:
 uninstall-ncat:
        @cd $(NCATDIR) && $(MAKE) uninstall
 
-${srcdir}/configure: configure.ac 
+${srcdir}/configure: $(srcdir)/configure.ac
        cd ${srcdir} && autoconf
 
 ## autoheader might not change config.h.in, so touch a stamp file.
@@ -292,10 +293,10 @@ ${srcdir}/configure: configure.ac
 #stamp-h: config.h.in config.status
 #      ./config.status
 
-Makefile: Makefile.in config.status
+Makefile: $(srcdir)/Makefile.in config.status
        ./config.status
 
-config.status: configure
+config.status: $(srcdir)/configure
        ./config.status --recheck
 
 makefile.dep:
diff --git a/configure.ac b/configure.ac
index 5e2ec6c..c8198c7 100644
--- a/configure.ac
+++ b/configure.ac
@@ -509,7 +509,7 @@ AC_HELP_STRING([--with-libdnet=included], [Use the libdnet version included with
 # If they didn't provide location, we use the included one
 if test $have_dnet != yes ; then
   AC_CONFIG_SUBDIRS( libdnet-stripped )
-  CPPFLAGS="-I$LIBDNETDIR/include $CPPFLAGS"
+  CPPFLAGS="-I"'$(srcdir)/'"$LIBDNETDIR/include $CPPFLAGS"
   LIBDNET_LIBS="$LIBDNETDIR/src/.libs/libdnet.a"
   DNET_DEPENDS="$LIBDNETDIR/src/.libs/libdnet.a"
   DNET_BUILD="dnet_build"
@@ -724,8 +724,14 @@ NBASE_BUILD="nbase_build"
 NBASEDIR="nbase"
 )
 
-LDFLAGS="$LDFLAGS -L$NBASEDIR"
-CPPFLAGS="$CPPFLAGS -I$NBASEDIR"
+if test "x$NBASEDIR" != "x" ; then
+  LDFLAGS="$LDFLAGS -L$NBASEDIR"
+  if test "x$NBASEDIR" = "xnbase" ; then
+    CPPFLAGS="$CPPFLAGS -I"'$(srcdir)/'"$NBASEDIR -I$NBASEDIR"
+  else
+    CPPFLAGS="$CPPFLAGS -I$NBASEDIR"
+  fi
+fi
 LIBNBASE_LIBS="-lnbase"
 
 AC_SUBST(NBASEDIR)
@@ -748,8 +754,14 @@ AC_HELP_STRING([--with-libnsock=DIR], [Compile and link to libnsock in DIR]),
   esac]
 )
 
-LDFLAGS="$LDFLAGS -L$NSOCKDIR/src/"
-CPPFLAGS="$CPPFLAGS -I$NSOCKDIR/include"
+if test "x$NSOCKDIR" != "x" ; then
+  LDFLAGS="$LDFLAGS -L$NSOCKDIR/src/"
+  if test "x$NSOCKDIR" = "xnsock" ; then
+    CPPFLAGS="$CPPFLAGS -I"'$(srcdir)/'"$NSOCKDIR/include"
+  else
+    CPPFLAGS="$CPPFLAGS -I$NSOCKDIR/include"
+  fi
+fi
 LIBNSOCK_LIBS="-lnsock"
 
 AC_SUBST(NSOCKDIR)
diff --git a/nbase/Makefile.in b/nbase/Makefile.in
index c2e1a6e..03c5e0f 100644
--- a/nbase/Makefile.in
+++ b/nbase/Makefile.in
@@ -12,18 +12,18 @@ CCOPT =
 DEFS = @DEFS@
 # With GCC, add extra security checks to source code.
 DEFS += -D_FORTIFY_SOURCE=2
-CPPFLAGS = @CPPFLAGS@
+CPPFLAGS = @CPPFLAGS@ -I$(srcdir) -I.
 CFLAGS = @CFLAGS@ $(CCOPT) $(GLIB_CFLAGS) $(DEFS) $(INCLS)
 STATIC = 
 LDFLAGS = @LDFLAGS@ $(STATIC)
 LIBS =  @LIBS@ 
-SHTOOL = ./shtool
+SHTOOL = $(srcdir)/shtool
 INSTALL = $(SHTOOL) install 
 MAKEDEPEND = @MAKEDEPEND@
 
 TARGET = libnbase.a
 
-DEPS = getopt.h nbase.h nbase_winconfig.h nbase_config.h nbase_ipv6.h nbase_winunix.h nbase_crc32ct.h
+DEPS = $(shell printf '$(srcdir)/%s ' getopt.h nbase.h nbase_winconfig.h nbase_ipv6.h nbase_winunix.h nbase_crc32ct.h) 
nbase_config.h
 OBJS = @LIBOBJS@
 
 all: $(TARGET) 
@@ -42,15 +42,16 @@ distclean: clean
 depend:
        $(MAKEDEPEND) $(INCLS) -s "# DO NOT DELETE" -- $(DEFS) -- $(SRCS)
 
-configure: configure.ac
+configure: $(srcdir)/configure.ac
        autoconf
 
-Makefile: Makefile.in config.status
+Makefile: $(srcdir)/Makefile.in config.status
        ./config.status
 
-config.status: configure
+config.status: $(srcdir)/configure
        ./config.status --recheck
 
+VPATH = $(srcdir)
 .cc.o:
        $(CC) -c $(CFLAGS) $*.cc
 
diff --git a/ncat/Makefile.in b/ncat/Makefile.in
index 3e3f85a..b4f7d7a 100644
--- a/ncat/Makefile.in
+++ b/ncat/Makefile.in
@@ -58,23 +58,23 @@ LIBS = @LIBS@
 DEFS = @DEFS@ -DNCAT_DATADIR="\"$(pkgdatadir)\""
 # With GCC, add extra security checks to source code.
 DEFS += -D_FORTIFY_SOURCE=2
-INCLS = -I. -I.. -I../nsock/include/ -I$(NBASEDIR)
+INCLS = -I$(srcdir) -I. -I$(srcdir)/.. -I.. -I$(srcdir)/../nsock/include/ -I$(srcdir)/$(NBASEDIR) -I$(NBASEDIR)
 RM = rm -f
 OPENSSL_LIBS = @OPENSSL_LIBS@
 PCAP_LIBS = @PCAP_LIBS@
 
 CPPFLAGS += $(DEFS) $(INCLS)
 
-SHTOOL = ./shtool
+SHTOOL = $(srcdir)/shtool
 
 # DESTDIR can be used by package maintainers to install Ncat under its 
 # usual directory structure into a different tree.
 DESTDIR = 
 
-SRCS = ncat_main.c ncat_connect.c ncat_core.c ncat_posix.c ncat_listen.c ncat_proxy.c ncat_broker.c ncat_hostmatch.c 
ncat_ssl.c base64.c http.c util.c sys_wrap.c
+SRCS = $(shell printf '$(srcdir)/%s ' ncat_main.c ncat_connect.c ncat_core.c ncat_posix.c ncat_listen.c ncat_proxy.c 
ncat_broker.c ncat_hostmatch.c ncat_ssl.c base64.c http.c util.c sys_wrap.c)
 OBJS = ncat_main.o ncat_connect.o ncat_core.o ncat_posix.o ncat_listen.o ncat_proxy.o ncat_broker.o ncat_hostmatch.o 
ncat_ssl.o base64.o http.o util.o sys_wrap.o
 
-DATAFILES = certs/ca-bundle.crt
+DATAFILES = $(srcdir)/certs/ca-bundle.crt
 
 TARGET = ncat
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
@@ -107,6 +107,12 @@ config.h:
                        $(SHELL) ./config.status; \
        fi
 
+test/addrset.o: test
+
+.PHONY: test
+test:
+       mkdir -p test
+
 test/addrset: test/addrset.o ncat_core.o ncat_hostmatch.o sys_wrap.o util.o
        $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $^ $(NSOCKLIB) $(NBASELIB) $(OPENSSL_LIBS) $(PCAP_LIBS) $(LIBS)
 
@@ -128,7 +134,7 @@ install: $(TARGET)
        $(SHTOOL) mkdir -f -p -m 755 $(DESTDIR)$(bindir) $(DESTDIR)$(pkgdatadir) $(DESTDIR)$(mandir)/man1
        $(INSTALL) -c -m 755 -s ncat $(DESTDIR)$(bindir)/ncat
        $(INSTALL) -c -m 644 $(DATAFILES) $(DESTDIR)$(pkgdatadir)/
-       $(INSTALL) -c -m 644 docs/$(TARGET).1 $(DESTDIR)$(mandir)/man1/$(TARGET).1
+       $(INSTALL) -c -m 644 $(srcdir)/docs/$(TARGET).1 $(DESTDIR)$(mandir)/man1/$(TARGET).1
 
 uninstall:
        @echo Uninstalling Ncat;
diff --git a/nsock/src/Makefile.in b/nsock/src/Makefile.in
index 2af7601..cb43081 100644
--- a/nsock/src/Makefile.in
+++ b/nsock/src/Makefile.in
@@ -14,7 +14,7 @@ CCOPT =
 DEFS = @DEFS@ -DNSOCK_VERSION=\"$(NSOCK_VERSION)\"
 # With GCC, add extra security checks to source code.
 DEFS += -D_FORTIFY_SOURCE=2
-INCLS = -I../include -I../../libpcap
+INCLS = -I$(srcdir) -I. -I$(srcdir)/../include -I$(srcdir)/../../libpcap
 CFLAGS = @CFLAGS@ $(CCOPT) $(DEFS) $(INCLS)
 # CFLAGS = -g -Wall $(DEFS) $(INCLS)
 CPPFLAGS = @CPPFLAGS@
@@ -23,7 +23,7 @@ LDFLAGS = @LDFLAGS@ $(STATIC)
 LIBS =  @LIBS@ @LIBNBASE_LIBS@
 # LIBS =  -lefence @LIBS@ -lpcap -lm
 # LIBS =  -lrmalloc @LIBS@ -lpcap -lm
-SHTOOL = ./shtool
+SHTOOL = $(srcdir)/shtool
 INSTALL = $(SHTOOL) install 
 MAKEDEPEND = @MAKEDEPEND@
 RPMTDIR=$(HOME)/rpmdir
@@ -35,8 +35,9 @@ SRCS = error.c filespace.c gh_list.c nsock_connect.c nsock_core.c nsock_iod.c ns
 
 OBJS = error.o filespace.o gh_list.o nsock_connect.o nsock_core.o nsock_iod.o nsock_read.o nsock_timers.o 
nsock_write.o nsock_ssl.o nsock_utils.o nsock_event.o nsock_pool.o netutils.o nsock_pcap.o @COMPAT_OBJS@
 
-DEPS = error.h filespace.h gh_list.h nsock_internal.h nsock_utils.h netutils.h nsock_pcap.h ../include/nsock.h 
$(NBASEDIR)/libnbase.a
+DEPS = $(shell printf '$(srcdir)/%s ' error.h filespace.h gh_list.h nsock_internal.h nsock_utils.h netutils.h 
nsock_pcap.h ../include/nsock.h) $(NBASEDIR)/libnbase.a
 
+VPATH = $(srcdir)
 .c.o:
        $(CC) -c $(CPPFLAGS) $(CFLAGS) $< -o $@
 
@@ -59,12 +60,12 @@ distclean: clean
 depend:
        $(MAKEDEPEND) $(INCLS) -s "# DO NOT DELETE" -- $(DEFS) -- $(SRCS)
 
-${srcdir}/configure: configure.ac 
+${srcdir}/configure: $(srcdir)/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 \
+${srcdir}/stamp-h.in: $(srcdir)/configure.ac acconfig.h \
        config.h.top config.h.bot
        cd ${srcdir} && autoheader
        echo timestamp > ${srcdir}/stamp-h.in
@@ -73,10 +74,10 @@ config.h: stamp-h
 stamp-h: config.h.in config.status
        ./config.status
 
-Makefile: Makefile.in config.status
+Makefile: $(srcdir)/Makefile.in config.status
        ./config.status
 
-config.status: configure
+config.status: $(srcdir)/configure
        ./config.status --recheck
 
 # DO NOT DELETE -- Needed by makedepend
diff --git a/nsock/src/configure.ac b/nsock/src/configure.ac
index 728e925..61ec00d 100644
--- a/nsock/src/configure.ac
+++ b/nsock/src/configure.ac
@@ -140,25 +140,6 @@ AC_HEADER_STDC
 
 dnl Checks for typedefs, structures, and compiler characteristics.
 
-AC_ARG_WITH(libnbase,
-[  --with-libnbase=DIR     Look for nbase include/libs in DIR],
-[  case "$with_libnbase" in
-  yes)
-    ;;
-  *)
-    NBASEDIR="$with_libnbase"
-    ;;
-  esac],
-NBASEDIR="../../nbase"
-)
-
-LDFLAGS="$LDFLAGS -L$NBASEDIR"
-CFLAGS="$CFLAGS -I$NBASEDIR"
-LIBNBASE_LIBS="$LIBS -lnbase"
-
-AC_SUBST(LIBNBASE_LIBS)
-AC_SUBST(NBASEDIR)
-
 AC_MSG_CHECKING([struct ip])
 AC_TRY_COMPILE([#include <sys/types.h>
 #include <netinet/in.h>
@@ -273,4 +254,29 @@ if test $ac_cv_ip_has_ip_sum = yes ; then
         AC_DEFINE(HAVE_IP_IP_SUM)
 fi
 
+AC_ARG_WITH(libnbase,
+[  --with-libnbase=DIR     Look for nbase include/libs in DIR],
+[  case "$with_libnbase" in
+  yes)
+    ;;
+  *)
+    NBASEDIR="$with_libnbase"
+    ;;
+  esac],
+NBASEDIR="../../nbase"
+)
+
+if test "x$NBASEDIR" != "x" ; then
+  LDFLAGS="$LDFLAGS -L$NBASEDIR"
+  if test "x$NBASEDIR" = "x../../nbase" ; then
+    CFLAGS="$CFLAGS -I"'$(srcdir)/'"$NBASEDIR -I$NBASEDIR"
+  else
+    CFLAGS="$CFLAGS -I$NBASEDIR"
+  fi
+fi
+LIBNBASE_LIBS="$LIBS -lnbase"
+
+AC_SUBST(LIBNBASE_LIBS)
+AC_SUBST(NBASEDIR)
+
 AC_OUTPUT(Makefile)
-- 
1.6.3


_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://SecLists.Org


Current thread: