1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
|
# This makefile builds a disk image (.dmg) containing the installer for Nmap,
# Zenmap, Ncat, and Ndiff.
NMAP_VERSION := $(shell grep '^\#[ \t]*define[ \t]\+NMAP_VERSION' ../nmap.h | sed -e 's/.*"\(.*\)".*/\1/' -e 'q')
NMAP_NUM_VERSION := $(shell grep '^\#[ \t]*define[ \t]\+NMAP_NUM_VERSION' ../nmap.h | sed -e 's/.*"\(.*\)".*/\1/' -e 'q')
OSX_MIN_VERSION = 10.9
NAME_VERSION = nmap-$(NMAP_VERSION)$(if $(APPENDAGE),-$(APPENDAGE))
IMAGE_NAME = $(NAME_VERSION).dmg
PKG_NAME = $(NAME_VERSION).mpkg
IMAGE_STAGING_DIR = $(NAME_VERSION)
NMAP_BUILD_DIR = nmap-build
NMAP_STAGING_DIR = nmap-root
ZENMAP_BUILD_DIR = zenmap-build
ZENMAP_STAGING_DIR = zenmap-root
NCAT_BUILD_DIR = ncat-build
NCAT_STAGING_DIR = ncat-root
NDIFF_BUILD_DIR = ndiff-build
NDIFF_STAGING_DIR = ndiff-root
NPING_BUILD_DIR = nping-build
NPING_STAGING_DIR = nping-root
NMAP_UPDATE_BUILD_DIR = nmap-update-build
NMAP_UPDATE_STAGING_DIR = nmap-update-root
JHBUILD_PREFIX=$(HOME)/gtk/inst
JHBUILD_SOURCE=$(HOME)/gtk/source
PREFIX = /usr/local
# Extra distribution file names
README_FILE = README.md
COPYING_FILE = COPYING
3RD_P_LIC_FILE = 3rd-party-licenses.txt
LICENSES_FILE = licenses
EXTRA_DIST = README.md ../COPYING ../docs/3rd-party-licenses.txt ../docs/licenses
CONFIGURE_ARGS = --prefix="$(PREFIX)" --with-libdnet=included --with-libpcap=included --with-libpcre=included --with-liblua=included CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" PYTHON="$(PYTHON)"
# Flags for building universal binaries. See
# http://developer.apple.com/documentation/Porting/Conceptual/PortingUnix/compiling/chapter_4_section_3.html.
UNIVERSAL_CONFIGURE_ARGS = --disable-dependency-tracking
UNIVERSAL_CC = gcc
UNIVERSAL_CXX = g++
# Setting ARCHFLAGS separately is required. distutils.util.get_platform
# sniffs it to determine whether to return a universal architecture
# ("fat" or "universal") or a single one ("i386" or "ppc"). py2app in
# turn uses the arch value to decide which of its bootstrappers to
# install.
UNIVERSAL_ARCHFLAGS = -arch x86_64
UNIVERSAL_CPPFLAGS = -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(OSX_VERSION).sdk
UNIVERSAL_CFLAGS = $(UNIVERSAL_CPPFLAGS) -mmacosx-version-min=$(OSX_MIN_VERSION) $(UNIVERSAL_ARCHFLAGS)
UNIVERSAL_CXXFLAGS = $(UNIVERSAL_CFLAGS)
# https://stackoverflow.com/questions/19637164/c-linking-error-after-upgrading-to-mac-os-x-10-9-xcode-5-0-1/19637199#19637199
UNIVERSAL_LDFLAGS = -stdlib=libstdc++ -Wl,-syslibroot,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX$(OSX_VERSION).sdk -mmacosx-version-min=$(OSX_MIN_VERSION) $(UNIVERSAL_ARCHFLAGS)
CC = $(UNIVERSAL_CC)
CXX = $(UNIVERSAL_CXX)
ARCHFLAGS += $(UNIVERSAL_ARCHFLAGS)
CONFIGURE_ARGS += $(UNIVERSAL_CONFIGURE_ARGS)
CPPFLAGS += $(UNIVERSAL_CPPFLAGS)
CFLAGS += $(UNIVERSAL_CFLAGS)
CXXFLAGS += $(UNIVERSAL_CXXFLAGS)
LDFLAGS += $(UNIVERSAL_LDFLAGS)
# Mac OS options for libraries used by nmap-update
MAC_FLAGS = -lsasl2 -liconv -framework CoreFoundation -framework Security
# Jhbuild static libraries
PYTHON = $(JHBUILD_PREFIX)/bin/python2.7
OPENSSL_STATIC = $(JHBUILD_PREFIX)/lib/libssl.a $(JHBUILD_PREFIX)/lib/libcrypto.a
LIBZ_STATIC = $(JHBUILD_PREFIX)/lib/libz.a
SVN_STATIC = $(JHBUILD_PREFIX)/lib/libsvn_client-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_wc-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_diff-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_delta-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_subr-1.a \
$(JHBUILD_PREFIX)/lib/libexpat.a \
$(JHBUILD_PREFIX)/lib/libsvn_ra-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_ra_svn-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_ra_local-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_fs-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_repos-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_fs_util-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_fs_fs-1.a \
$(JHBUILD_PREFIX)/lib/libsvn_fs_x-1.a \
$(JHBUILD_PREFIX)/lib/libintl.a \
$(JHBUILD_PREFIX)/lib/libsvn_ra_serf-1.a \
$(JHBUILD_PREFIX)/lib/libserf-1.a \
$(JHBUILD_PREFIX)/lib/libz.a \
$(JHBUILD_PREFIX)/lib/libsqlite3.a
APR_STATIC = $(JHBUILD_PREFIX)/lib/libapr-1.a \
$(JHBUILD_PREFIX)/lib/libaprutil-1.a \
$(JHBUILD_PREFIX)/lib/libapriconv-1.a
# These are the positions used by the createdmg.sh and check_test.sh scripts
export ICON_SIZE=88
export FONT_SIZE=13
export MPKG_POS_X=110
export MPKG_POS_Y=170
export APPS_POS_X=110
export APPS_POS_Y=310
export README_POS_X=802
export README_POS_Y=180
export COPYING_POS_X=802
export COPYING_POS_Y=310
export THIRD_P_POS_X=802
export THIRD_P_POS_Y=440
export LICENSES_POS_X=670
export LICENSES_POS_Y=60
$(IMAGE_NAME): tool-checks $(IMAGE_STAGING_DIR)/$(PKG_NAME)
rm -f $@
# Create the dmg disk image and convert it to read only disk
./createdmg.sh $(IMAGE_STAGING_DIR) $(README_FILE) $(COPYING_FILE) $(3RD_P_LIC_FILE) $(LICENSES_FILE)
# Check the created disk image for the sizes, backgrounds and icons presence and positions
./check_test.sh $(README_FILE) $(COPYING_FILE) $(3RD_P_LIC_FILE) $(LICENSES_FILE)
tool-checks: have-$(CC) have-jhbuild have-gtk-mac-bundler
have-%:
which $*
#$(IMAGE_STAGING_DIR)/$(PKG_NAME): check-nmap check-ncat check-ndiff check-zenmap check-nping check-nmap-update COPYING.formatted
$(IMAGE_STAGING_DIR)/$(PKG_NAME): check-nmap check-ncat check-ndiff check-zenmap check-nping COPYING.formatted
rm -rf $(IMAGE_STAGING_DIR)
mkdir -p $(IMAGE_STAGING_DIR)
cp -rf $(EXTRA_DIST) $(IMAGE_STAGING_DIR)/
# Create packages (.pkg) for all the components to install in the installer (.mpkg)
pkgbuild --root $(NMAP_STAGING_DIR) --identifier org.insecure.nmap --version $(NMAP_VERSION) --install-location /usr/local nmap.pkg
pkgbuild --root $(NCAT_STAGING_DIR) --identifier org.insecure.nmap.ncat --version $(NMAP_VERSION) --install-location /usr/local ncat.pkg
pkgbuild --root $(NDIFF_STAGING_DIR)/usr/local --identifier org.insecure.nmap.ndiff --version $(NMAP_VERSION) --install-location /usr/local ndiff.pkg
pkgbuild --root $(NPING_STAGING_DIR) --identifier org.insecure.nmap.nping --version $(NMAP_VERSION) --install-location /usr/local nping.pkg
#pkgbuild --root $(NMAP_UPDATE_STAGING_DIR) --identifier org.insecure.nmap.nmap-update --version $(NMAP_VERSION) --install-location /usr/local nmap-update.pkg
pkgbuild --root $(ZENMAP_STAGING_DIR) --identifier org.insecure.nmap.zenmap --version $(NMAP_VERSION) --install-location /Applications zenmap.pkg
# Produce a .xml with packages information
productbuild --synthesize \
--package 'nmap.pkg' \
--package 'ncat.pkg' \
--package 'ndiff.pkg' \
--package 'nping.pkg' \
--package 'zenmap.pkg' \
distribution.xml
# Make a new file and add background and title attributes
head -n 2 distribution.xml > finalDist.xml
echo " <title>Nmap $(NMAP_VERSION)</title>" >> finalDist.xml
# This line is for adding a background image to the .mpkg
echo " <background file=\"pkg_bg.jpg\" mime-type=\"image/jpeg\" scaling=\"proportional\" alignment=\"bottomleft\"/>" >> finalDist.xml
tail -n +3 distribution.xml >> finalDist.xml
# Build the .mpkg according to the final .xml file (and so all the .pkg)
productbuild --distribution finalDist.xml --resources . --package-path . $(NAME_VERSION).mpkg
mv $(NAME_VERSION).mpkg $(NAME_VERSION)/$(NAME_VERSION).mpkg
check-%: stage-%
if (find $*-root -perm -a+x -type f | xargs otool -L | grep -F "$(JHBUILD_PREFIX)"); then false; else echo "Libs are clean"; fi
export-%:
rm -rf $*
# Using @BASE discards local changes.
svn export .. $*
export-tarball:
rm -rf nmap-$(NMAP_VERSION)
svn export .. nmap-$(NMAP_VERSION)
tar czf nmap-$(NMAP_VERSION).tar.gz nmap-$(NMAP_VERSION)
cp nmap-$(NMAP_VERSION).tar.gz $(JHBUILD_SOURCE)/pkgs/
stage-nmap-update: export-$(NMAP_UPDATE_BUILD_DIR)
cd $(NMAP_UPDATE_BUILD_DIR) && ./configure --without-zenmap --without-ncat --without-ndiff --without-nping --with-nmap-update --with-apr=$(JHBUILD_PREFIX) --with-subversion=$(JHBUILD_PREFIX) --with-serf=$(JHBUILD_PREFIX) --with-openssl=$(JHBUILD_PREFIX) $(CONFIGURE_ARGS)
make -C $(NMAP_UPDATE_BUILD_DIR) build-nmap-update APR_LIBS="$(APR_STATIC)" SVN_LIBS="$(SVN_STATIC)" OPENSSL_LIBS="$(OPENSSL_STATIC)" MAC_FLAGS="$(MAC_FLAGS)"
rm -rf $(NMAP_UPDATE_STAGING_DIR)
make -C $(NMAP_UPDATE_BUILD_DIR) install-nmap-update DESTDIR="`pwd`/$(NMAP_UPDATE_STAGING_DIR)" APR_LIBS="$(APR_STATIC)" SVN_LIBS="$(SVN_STATIC)" OPENSSL_LIBS="$(OPENSSL_STATIC)" MAC_FLAGS="$(MAC_FLAGS)"
stage-%: export-tarball
jhbuild -m "file://`pwd`/openssl.modules" build $*
rm -rf $*-root
mkdir $*-root
rsync -a --files-from "$(JHBUILD_PREFIX)/_jhbuild/manifests/$*" "$(JHBUILD_PREFIX)" $*-root/
stage-zenmap: export-$(ZENMAP_BUILD_DIR)
cd $(ZENMAP_BUILD_DIR)/zenmap && jhbuild run install_scripts/macosx/make-bundle.sh
rm -rf $(ZENMAP_STAGING_DIR)
mkdir -p $(ZENMAP_STAGING_DIR)
cp -rf $(ZENMAP_BUILD_DIR)/zenmap/dist/Zenmap.app $(ZENMAP_STAGING_DIR)
stage-ndiff: export-$(NDIFF_BUILD_DIR)
mkdir -p $(NDIFF_STAGING_DIR)/usr/local/bin
mkdir -p $(NDIFF_STAGING_DIR)/usr/local/share/man/man1
cp $(NDIFF_BUILD_DIR)/ndiff/ndiff.py $(NDIFF_STAGING_DIR)/usr/local/bin/ndiff
cp $(NDIFF_BUILD_DIR)/ndiff/docs/ndiff.1 $(NDIFF_STAGING_DIR)/usr/local/share/man/man1/
COPYING.formatted:
# Use the license formatter from the Windows installer.
../mswin32/license-format/licformat.sh ../COPYING > $@
clean:
rm -rf $(IMAGE_STAGING_DIR)
rm -rf $(NMAP_BUILD_DIR)
rm -rf $(NMAP_STAGING_DIR)
rm -rf $(ZENMAP_BUILD_DIR)
rm -rf $(ZENMAP_STAGING_DIR)
rm -rf $(NCAT_BUILD_DIR)
rm -rf $(NCAT_STAGING_DIR)
rm -rf $(NDIFF_BUILD_DIR)
rm -rf $(NDIFF_STAGING_DIR)
rm -rf $(NPING_BUILD_DIR)
rm -rf $(NPING_STAGING_DIR)
rm -rf $(NMAP_UPDATE_BUILD_DIR)
rm -rf $(NMAP_UPDATE_STAGING_DIR)
rm -f COPYING.formatted
rm -f $(IMAGE_NAME)
rm -rf distribution.xml finalDist.xml nmap.pkg ncat.pkg ndiff.pkg nping.pkg nmap-update.pkg zenmap.pkg
.PHONY: clean export-% stage-%
|