diff --git a/mswin32/Makefile b/mswin32/Makefile index 33c95b86e..470463a0e 100644 --- a/mswin32/Makefile +++ b/mswin32/Makefile @@ -55,8 +55,8 @@ stage-common: $(NMAPDIR)/CHANGELOG $(NMAPDIR)/LICENSE $(NMAPDIR)/nmap-mac-prefix # Install the ndiff batch file wrapper in the zip distribution. cp $(NMAPDIR)/ndiff/ndiff.py nmap-$(NMAP_VERSION)/ndiff.py cp python-wrap.bat nmap-$(NMAP_VERSION)/ndiff.bat - cd $(NMAPDIR)/zenmap && install_scripts/windows/copy_and_compile.bat - cp -R $(NMAPDIR)/zenmap/dist/* nmap-$(NMAP_VERSION)/ + cd $(NMAPDIR)/zenmap && install_scripts/windows/build.sh + cp -R $(NMAPDIR)/zenmap/dist/zenmap-w64 nmap-$(NMAP_VERSION)/ cp $(NMAPDIR)/zenmap/README nmap-$(NMAP_VERSION)/ZENMAP_README cp $(NMAPDIR)/zenmap/COPYING_HIGWIDGETS nmap-$(NMAP_VERSION) cp $(NMAPDIR)/ndiff/README nmap-$(NMAP_VERSION)/NDIFF_README @@ -73,7 +73,7 @@ stage-nmap-main: build-nmap${OEM_SUFFIX} mkdir -p nmap-$(NMAP_VERSION)${OEM_SUFFIX} cp $(VCCONFIG)${OEM_SUFFIX}/nmap.exe nmap-$(NMAP_VERSION)${OEM_SUFFIX}/ -sign-files: nmap-$(NMAP_VERSION)-oem/nmap.exe nmap-$(NMAP_VERSION)/nmap.exe nmap-$(NMAP_VERSION)/ncat.exe nmap-$(NMAP_VERSION)/nping.exe nmap-$(NMAP_VERSION)/ndiff.exe nmap-$(NMAP_VERSION)/zenmap.exe nmap-$(NMAP_VERSION)/libssh2.dll nmap-$(NMAP_VERSION)/libcrypto-3.dll nmap-$(NMAP_VERSION)/libssl-3.dll nmap-$(NMAP_VERSION)/zlibwapi.dll +sign-files: nmap-$(NMAP_VERSION)-oem/nmap.exe nmap-$(NMAP_VERSION)/nmap.exe nmap-$(NMAP_VERSION)/ncat.exe nmap-$(NMAP_VERSION)/nping.exe nmap-$(NMAP_VERSION)/zenmap-w64/zenmap.exe nmap-$(NMAP_VERSION)/libssh2.dll nmap-$(NMAP_VERSION)/libcrypto-3.dll nmap-$(NMAP_VERSION)/libssl-3.dll nmap-$(NMAP_VERSION)/zlibwapi.dll # TODO: evaluate whether we should also sign the Python stuff for Zenmap, Ndiff "$(SIGNTOOL)" $(SIGNTOOL_ARGS) $^ touch sign-files @@ -110,14 +110,8 @@ bundle-zip-main: sign-files || true cp npcap-$(NPCAP_VERSION)${OEM_SUFFIX}.exe nmap-$(NMAP_VERSION)${OEM_SUFFIX} zip -x nmap-$(NMAP_VERSION)${OEM_SUFFIX}/ZENMAP_README \ - nmap-$(NMAP_VERSION)${OEM_SUFFIX}/zenmap/\* \ - nmap-$(NMAP_VERSION)${OEM_SUFFIX}/zenmap.exe \ - nmap-$(NMAP_VERSION)${OEM_SUFFIX}/share/\* \ - nmap-$(NMAP_VERSION)${OEM_SUFFIX}/python27.dll \ - nmap-$(NMAP_VERSION)${OEM_SUFFIX}/py2exe/\* \ + nmap-$(NMAP_VERSION)${OEM_SUFFIX}/zenmap-w64/\* \ nmap-$(NMAP_VERSION)${OEM_SUFFIX}/COPYING_HIGWIDGETS \ - nmap-$(NMAP_VERSION)${OEM_SUFFIX}/w9xpopen.exe \ - nmap-$(NMAP_VERSION)${OEM_SUFFIX}/ndiff.exe \ nmap-$(NMAP_VERSION)${OEM_SUFFIX}/Uninstall.exe \ nmap-$(NMAP_VERSION)${OEM_SUFFIX}/icon1.ico \ -r nmap-$(NMAP_VERSION)${OEM_SUFFIX}-win32.zip nmap-$(NMAP_VERSION)${OEM_SUFFIX} diff --git a/mswin32/nsis/Nmap.nsi b/mswin32/nsis/Nmap.nsi index 9a7cefdef..6127f6bc9 100644 --- a/mswin32/nsis/Nmap.nsi +++ b/mswin32/nsis/Nmap.nsi @@ -285,25 +285,21 @@ SectionEnd Section "Zenmap (GUI Frontend)" SecZenmap SetOutPath "$INSTDIR" SetOverwrite on - File ${STAGE_DIR}\zenmap.exe File ${STAGE_DIR}\ZENMAP_README File ${STAGE_DIR}\COPYING_HIGWIDGETS - File ${STAGE_DIR}\python27.dll - File /r ${STAGE_DIR}\share - File /r ${STAGE_DIR}\py2exe + File /r ${STAGE_DIR}\zenmap-w64 + WriteINIStr "$INSTDIR\zenmap-w64\mingw64\share\zenmap\config\zenmap.conf" paths nmap_command_path "$INSTDIR\nmap.exe" + WriteINIStr "$INSTDIR\zenmap-w64\mingw64\share\zenmap\config\zenmap.conf" paths ndiff_command_path "$INSTDIR\ndiff.bat" StrCpy $zenmapset "true" - Call vcredistinstaller Call create_uninstaller SectionEnd Section "Ndiff (Scan comparison tool)" SecNdiff SetOutPath "$INSTDIR" SetOverwrite on - File ${STAGE_DIR}\ndiff.exe + File ${STAGE_DIR}\ndiff.py + File ${STAGE_DIR}\ndiff.bat File ${STAGE_DIR}\NDIFF_README - File ${STAGE_DIR}\python27.dll - File /r ${STAGE_DIR}\py2exe - Call vcredistinstaller Call create_uninstaller SectionEnd !endif diff --git a/zenmap/install_scripts/windows/PKGBUILD b/zenmap/install_scripts/windows/PKGBUILD new file mode 100644 index 000000000..0045abaf5 --- /dev/null +++ b/zenmap/install_scripts/windows/PKGBUILD @@ -0,0 +1,34 @@ +# PKGBUILD for Zenmap targeting MinGW and MSYS2, for use in packaging Zenmap for Windows. +# Expected invocation: makepkg-mingw -RdfL +# -R: repackage, do not download source +# -d: do not verify dependencies (Python 3 is the only build dependency) +# -f: force, overwrite existing package. +# -L: log progress to file +_realname=zenmap +pkgbase=mingw-w64-python-${_realname} +pkgname=("${MINGW_PACKAGE_PREFIX}-python-${_realname}") +provides=("${MINGW_PACKAGE_PREFIX}-python3-${_realname}") +conflicts=("${MINGW_PACKAGE_PREFIX}-python3-${_realname}") +replaces=("${MINGW_PACKAGE_PREFIX}-python3-${_realname}") +pkgver=$(echo NMAP_VERSION | $(CC) -E -imacros nmap.h - | sed -n '$s/[" ]//g;$p') +pkgrel=1 +pkgdesc="Graphical Nmap frontend and results viewer" +url="https://nmap.org/zenmap/" +arch=("any") +license=("NPSL") +source=("https://nmap.org/dist/nmap-${pkgver}.tar.bz2") +sha256sums=("SKIP") +mingw_arch=('mingw64') +depends=("${MINGW_PACKAGE_PREFIX}-python" "${MINGW_PACKAGE_PREFIX}-python-gobject") +makedepends=("${MINGW_PACKAGE_PREFIX}-python-setuptools") + +package() { + # If this script is in zenmap/install_scripts/windows/PKGBUILD + # then a repackage (makepkg -R) will set srcdir=zenmap/install_scripts/windows/src + # We want to cd to zenmap/ + cd "${srcdir}/../../.." + ${MINGW_PREFIX}/bin/python setup.py build + MSYS2_ARG_CONV_EXCL="--prefix=" \ + ${MINGW_PREFIX}/bin/python setup.py install vanilla --prefix=${MINGW_PREFIX} --root="${pkgdir}" --optimize=1 + install -Dm644 install_scripts/unix/zenmap.desktop "${pkgdir}${MINGW_PREFIX}/share/applications/zenmap.desktop" +} diff --git a/zenmap/install_scripts/windows/build.sh b/zenmap/install_scripts/windows/build.sh new file mode 100644 index 000000000..a3e3ac685 --- /dev/null +++ b/zenmap/install_scripts/windows/build.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# bash shebang because MSYS2/Styrene require Bash, not just /bin/sh + +BUILDDIR=dist + +: << '#MULTILINE_COMMENT' +# Setup environment +pacman -S --needed zip mingw-w64-x86_64-{python3,gcc,nsis,binutils,git} +pacman -S --needed mingw-w64-x86_64-python3-pip +git clone https://github.com/achadwick/styrene.git +git apply < [^-]+ - \d+ ) + - any + [.]pkg[.]tar +- (?: [.](?:gz|xz) )? ++ (?: [.](?:gz|xz|zst) )? + $ + ''' + keyobj = functools.cmp_to_key(self._vercmp) +EOF +cd styrene +pip3 install . +#MULTILINE_COMMENT + +# make the zenmap package +makepkg-mingw -RdfL + +# make the minimal msys2 environment +styrene -p . -o "$BUILDDIR" styrene.cfg --no-exe --no-zip + +# Clean up unused Python modules +rm -rf "$BUILDDIR/**/*.opt-?.pyc" +rm -rf "$BUILDDIR/distutils/" +rm -rf "$BUILDDIR/pydoc_data/" +rm -rf "$BUILDDIR/ctypes/" +rm -rf "$BUILDDIR/asyncio/" +rm -rf "$BUILDDIR/multiprocessing/" +rm -rf "$BUILDDIR/html/" +rm -rf "$BUILDDIR/msilib/" +rm -rf "$BUILDDIR/venv/" +rm -rf "$BUILDDIR/xmlrpc/" +rm -rf "$BUILDDIR/concurrent/" +rm -rf "$BUILDDIR/json/" +rm -rf "$BUILDDIR/config-3.*/" +rm -rf "$BUILDDIR/zoneinfo/" + +# Remove pacman database +rm -rf var/lib/pacman/ + +# fake a new install script for what we removed: +mkdir -p var/lib/pacman/local/zenmap-fake-pkg/ +cat >var/lib/pacman/local/zenmap-fake-pkg/install <