wireshark/packaging/nsis/Makefile.nmake

313 lines
9.8 KiB
Makefile

#
# NSIS is a free packager/installer/uninstaller program for Win32.
# It was originally written for the Winamp package, but various
# freeware and non-freeware packages are using it, too.
#
# http://www.nullsoft.com/free/nsis/
include ../../config.nmake
# Contains a list of custom plugins(default empty)
include Custom.nmake
TOP_SRC_DIR=$(MAKEDIR)\..\..
# Must be absolue for uninstall.nsi
STAGING_DIR=$(MAKEDIR)\..\..\$(INSTALL_DIR)
EXE=../../tshark.exe ../../editcap.exe \
!IFDEF GTK_DIR
../../wireshark-gtk.exe \
!ENDIF
../../text2pcap.exe ../../mergecap.exe ../../capinfos.exe $(WIRESHARK_LIB_DIR)\WinPcap_$(WINPCAP_VERSION).exe
DLL=../../wiretap/wiretap-$(WTAP_VERSION).dll ../../wsutil/libwsutil.dll ../../codecs/libwscodecs.dll
DOC=../../doc/ws.css \
../../doc/androiddump.html \
../../doc/capinfos.html \
../../doc/ciscodump.html \
../../doc/dumpcap.html \
../../doc/editcap.html \
../../doc/extcap.html \
../../doc/mergecap.html \
../../doc/randpktdump.html \
../../doc/rawshark.html \
../../doc/sshdump.html \
../../doc/text2pcap.html \
../../doc/tshark.html \
../../doc/wireshark-filter.html \
../../doc/wireshark.html \
$(STAGING_DIR)/COPYING.txt \
$(STAGING_DIR)/NEWS.txt \
$(STAGING_DIR)/README.txt \
$(STAGING_DIR)/README.windows.txt
GPL=../../COPYING
HELP=$(STAGING_DIR)/help/capture_filters.txt \
$(STAGING_DIR)/help/capturing.txt \
$(STAGING_DIR)/help/display_filters.txt \
$(STAGING_DIR)/help/faq.txt \
$(STAGING_DIR)/help/getting_started.txt \
$(STAGING_DIR)/help/overview.txt \
$(STAGING_DIR)/help/toc
PLUGINS= \
../../plugins/docsis/docsis.dll \
../../plugins/ethercat/ethercat.dll \
../../plugins/gryphon/gryphon.dll \
../../plugins/irda/irda.dll \
../../plugins/m2m/m2m.dll \
../../plugins/mate/mate.dll \
../../plugins/opcua/opcua.dll \
../../plugins/profinet/profinet.dll \
../../plugins/stats_tree/stats_tree.dll \
../../plugins/unistim/unistim.dll \
../../plugins/wimax/wimax.dll \
../../plugins/wimaxasncp/wimaxasncp.dll \
../../plugins/wimaxmacphy/wimaxmacphy.dll \
$(CUSTOM_PLUGINS)
NSI=\
wireshark.nsi \
uninstall.nsi \
common.nsh \
GetWindowsVersion.nsh \
servicelib.nsh \
AdditionalTasksPage.ini \
WinPcapPage.ini \
USBPcapPage.ini
UNINSTALL_INSTALLER = $(STAGING_DIR)\uninstall_installer.exe
DELIVERABLES=$(EXE) $(DLL) $(DOC) $(DOC_dos) $(GPL) $(HELP) $(PLUGINS)
!IFDEF MAKENSIS
all: wireshark-$(WIRESHARK_TARGET_PLATFORM)-$(VERSION).exe
!ELSE
all: _FORCE_
@echo ? NSIS not available (MAKENSIS not defined in config.nmake)
@echo.
@exit 1
!ENDIF
# fetch the latest available user-guide.chm version
user-guide.chm::
if exist ..\..\docbook\user-guide.chm xcopy ..\..\docbook\user-guide.chm . /Y /D
if exist $(WIRESHARK_LIB_DIR)\user-guide\user-guide.chm xcopy $(WIRESHARK_LIB_DIR)\user-guide\user-guide.chm . /Y /D
common.nsh: config.nsh
config.nsh: config.nsh.in ..\..\config.nmake
sed \
-e s/@PROGRAM_NAME@/$(PROGRAM_NAME)/ \
-e 's/@TOP_SRC_DIR@/$(TOP_SRC_DIR:\=\\\\)/' \
-e 's/@STAGING_DIR@/$(STAGING_DIR:\=\\\\)/' \
-e s/@USER_GUIDE_DIR@/./ \
-e s/@WIRESHARK_TARGET_PLATFORM@/$(WIRESHARK_TARGET_PLATFORM)/ \
-e s/@TARGET_MACHINE@/$(TARGET_MACHINE)/ \
-e s/@MSC_VER_REQUIRED@/$(MSC_VER_REQUIRED)/ \
-e 's/@WIRESHARK_LIB_DIR@/$(WIRESHARK_LIB_DIR:\=\\\\)/' \
-e s/@WINPCAP_PACKAGE_VERSION@/$(WINPCAP_VERSION)/ \
-e s/@PCAP_DISPLAY_VERSION@/$(WINPCAP_VERSION:_=.)/ \
-e s/@INTL_DLL@/$(INTL_DLL)/ \
-e s/@VERSION@/$(VERSION)/ \
-e s/@VERSION_MAJOR@/$(VERSION_MAJOR)/ \
-e s/@VERSION_MINOR@/$(VERSION_MINOR)/ \
-e s/@PRODUCT_VERSION@/$(PRODUCT_VERSION)/ \
-e s/@WTAP_VERSION@/$(WTAP_VERSION)/ \
-e 's/@MSVCR_DLL@/$(MSVCR_DLL:\=\\\\)/' \
!IFDEF VCREDIST_EXE
-e 's/@VCREDIST_EXE@/$(VCREDIST_EXE:\=\\\\)/' \
!ENDIF
-e s/@ENABLE_LIBWIRESHARK@/$(ENABLE_LIBWIRESHARK)/ \
-e 's/@SMI_DIR@/$(SMI_DIR:\=\\\\)/' \
!IFDEF GTK_DIR
-e 's/@GTK_DIR@/$(GTK_DIR:\=\\\\)/' \
!ENDIF
!IF EXIST("..\..\wireshark-qt-release\wireshark.exe")
-e s/@QT_DIR@/..\\..\\wireshark-qt-release/ \
!ENDIF
-e 's/\(^^!define .*\) \"*@.*@\"*/; \1/' \
< config.nsh.in > $@
wireshark.nsi: all-manifest.nsh qt-dll-manifest.nsh gtk-dll-manifest.nsh common.nsh
all-manifest.nsh: Makefile.nmake ..\..\config.nmake
@echo # Files required for all sections. Generated from Makefile.nmake > $@
@echo # GLib >> $@
@echo File "$(STAGING_DIR)\libgio-2.0-0.dll" >> $@
@echo File "$(STAGING_DIR)\libglib-2.0-0.dll" >> $@
@echo File "$(STAGING_DIR)\libgobject-2.0-0.dll" >> $@
@echo File "$(STAGING_DIR)\libgmodule-2.0-0.dll" >> $@
@echo File "$(STAGING_DIR)\$(INTL_DLL)" >> $@
@echo File "$(STAGING_DIR)\gspawn-$(WIRESHARK_TARGET_PLATFORM)-helper.exe" >> $@
@echo File "$(STAGING_DIR)\gspawn-$(WIRESHARK_TARGET_PLATFORM)-helper-console.exe" >> $@
!IF "$(C_ARES_DIR)" != ""
@echo # C-Ares >> $@
@echo File "$(STAGING_DIR)\libcares-2.dll" >> $@
!ENDIF
!IF "$(GNUTLS_DIR)" != ""
@echo # GnuTLS >> $@
@echo File "$(STAGING_DIR)\libffi-6.dll" >> $@
@echo File "$(STAGING_DIR)\$(GCC_DLL)" >> $@
@echo File "$(STAGING_DIR)\libgcrypt-20.dll" >> $@
@echo File "$(STAGING_DIR)\libgmp-10.dll" >> $@
@echo File "$(STAGING_DIR)\libgnutls-28.dll" >> $@
@echo File "$(STAGING_DIR)\$(GPGERROR_DLL)" >> $@
@echo File "$(STAGING_DIR)\libhogweed-2-4.dll" >> $@
@echo File "$(STAGING_DIR)\libnettle-4-6.dll" >> $@
@echo File "$(STAGING_DIR)\libp11-kit-0.dll" >> $@
@echo File "$(STAGING_DIR)\libtasn1-6.dll" >> $@
!ENDIF
!IF "$(KFW_DIR)" != ""
@echo # Kerberos >> $@
@echo File "$(STAGING_DIR)\$(COMERR_DLL)" >> $@
@echo File "$(STAGING_DIR)\$(KRB5_DLL)" >> $@
@echo File "$(STAGING_DIR)\$(K5SPRT_DLL)" >> $@
!ENDIF
!IFDEF LUA_DIR
@echo # Lua >> $@
@echo File "$(STAGING_DIR)\lua52.dll" >> $@
@echo File "..\..\epan\wslua\init.lua" >> $@
@echo File "..\..\epan\wslua\console.lua" >> $@
@echo File "..\..\epan\wslua\dtd_gen.lua" >> $@
!ENDIF
!IFDEF GEOIP_DIR
@echo File "$(STAGING_DIR)\libGeoIP-1.dll" >> $@
!ENDIF
!IFDEF SMI_DIR
@echo # SMI >> $@
@echo File "$(STAGING_DIR)\libsmi-2.dll" >> $@
!ENDIF
!IFDEF LIBSSH_DIR
@echo File "$(STAGING_DIR)\libssh.dll" >> $@
!ENDIF
!IFDEF WINSPARKLE_DIR
@echo # WinSparkle >> $@
@echo File "$(STAGING_DIR)\WinSparkle.dll" >> $@
!ENDIF
!IF "$(ZLIB_DIR)" != ""
@echo # Zlib >> $@
@echo File "$(STAGING_DIR)\zlib1.dll" >> $@
!ENDIF
gtk-dll-manifest.nsh: Makefile.nmake ..\..\config.nmake
@echo # Files required for the GTK+ section. Generated from Makefile.nmake > $@
@echo # Mandatory >> $@
@echo File "$(STAGING_DIR)\$(GDK_DLL)" >> $@
@echo File "$(STAGING_DIR)\libgdk_pixbuf-2.0-0.dll" >> $@
@echo File "$(STAGING_DIR)\$(GTK_DLL)" >> $@
@echo File "$(STAGING_DIR)\libatk-1.0-0.dll" >> $@
@echo File "$(STAGING_DIR)\libpango-1.0-0.dll" >> $@
@echo File "$(STAGING_DIR)\libpangowin32-1.0-0.dll" >> $@
@echo # Optional >> $@
!IFDEF NEED_CAIRO_DLL
@echo File "$(STAGING_DIR)\libcairo-2.dll" >> $@
@echo File "$(STAGING_DIR)\libpangocairo-1.0-0.dll" >> $@
!ENDIF
!IFDEF NEED_CAIRO_GOBJECT_DLL
@echo File "$(STAGING_DIR)\libcairo-gobject-2.dll" >> $@
!ENDIF
!IFDEF NEED_EXPAT_DLL
@echo File "$(STAGING_DIR)\${EXPAT_DLL)" >> $@
!ENDIF
!IFDEF NEED_FFI_DLL
@echo File "$(STAGING_DIR)\$(FFI_DLL)" >> $@
!ENDIF
!IFDEF NEED_FONTCONFIG_DLL
@echo File "$(STAGING_DIR)\$(FONTCONFIG_DLL)" >> $@
!ENDIF
!IFDEF NEED_FREETYPE_DLL
@echo File "$(STAGING_DIR)\libpangoft2-1.0-0.dll" >> $@
@echo File "$(STAGING_DIR)\$(FREETYPE_DLL)" >> $@
!ENDIF
!IFDEF NEED_HARFBUZZ_DLL
@echo File "$(STAGING_DIR)\$(HARFBUZZ_DLL)" >> $@
!ENDIF
!IFDEF NEED_JASPER_DLL
@echo File "$(STAGING_DIR)\$(JASPER_DLL)" >> $@
!ENDIF
!IFDEF NEED_JPEG_DLL
@echo File "$(STAGING_DIR)\$(JPEG_DLL)" >> $@
!ENDIF
!IFDEF NEED_LZMA_DLL
@echo File "$(STAGING_DIR)\$(LZMA_DLL)" >> $@
!ENDIF
!IFDEF NEED_PIXMAN_DLL
@echo File "$(STAGING_DIR)\$(PIXMAN_DLL)" >> $@
!ENDIF
!IFDEF NEED_PNG_DLL
@echo File "$(STAGING_DIR)\$(PNG_DLL)" >> $@
!ENDIF
!IFDEF NEED_SEH_DLL
@echo File "$(STAGING_DIR)\$(SEH_DLL)" >> $@
!ENDIF
!IFDEF NEED_SJLJ_DLL
@echo File "$(STAGING_DIR)\$(SJLJ_DLL)" >> $@
!ENDIF
!IFDEF NEED_TIFF_DLL
@echo File "$(STAGING_DIR)\$(TIFF_DLL)" >> $@
!ENDIF
!IFDEF NEED_XML_DLL
@echo File "$(STAGING_DIR)\$(XML_DLL)" >> $@
!ENDIF
@echo # Subdirectories >> $@
@echo SetOutPath ^$INSTDIR\$(GTK_ETC_DIR) >> $@
@echo File "$(GTK_DIR)\$(GTK_ETC_DIR)\*.*" >> $@
!IFDEF GTK_ENGINES_DIR
@echo SetOutPath ^$INSTDIR\$(GTK_ENGINES_DIR) >> $@
@echo File "$(STAGING_DIR)\$(GTK_ENGINES_DIR)\libpixmap.dll" >> $@
@echo File "$(STAGING_DIR)\$(GTK_ENGINES_DIR)\libwimp.dll" >> $@
!ENDIF
!IFDEF GTK_MODULES_DIR
@echo SetOutPath ^$INSTDIR\$(GTK_MODULES_DIR) >> $@
@echo File "$(STAGING_DIR)\$(GTK_MODULES_DIR)\libgail.dll" >> $@
!ENDIF
!IFDEF GTK_SCHEMAS_DIR
@echo SetOutPath ^$INSTDIR\$(GTK_SCHEMAS_DIR) >> $@
@echo File "$(STAGING_DIR)\$(GTK_SCHEMAS_DIR)\*.*" >> $@
!ENDIF
qt-dll-manifest.nsh: windeployqt-to-nsis.ps1 Makefile.nmake
!IF EXIST("$(QT5_BASE_DIR)\bin\qmake.exe")
set PATH=%PATH%;$(QT5_BASE_DIR)\bin
!ENDIF
$(POWERSHELL) windeployqt-to-nsis.ps1 \
-Executable ..\..\wireshark-qt-release\wireshark.exe \
-FilePath $@
$(STAGING_DIR)\uninstall.exe : $(NSI)
rm -f $(UNINSTALL_INSTALLER)
$(MAKENSIS) uninstall.nsi
$(UNINSTALL_INSTALLER)
rm -f $(UNINSTALL_INSTALLER)
uninstall-exe : $(STAGING_DIR)\uninstall.exe
wireshark-$(WIRESHARK_TARGET_PLATFORM)-$(VERSION).exe : user-guide.chm $(NSI) $(DELIVERABLES) Makefile.nmake $(STAGING_DIR)\uninstall.exe
$(MAKENSIS) wireshark.nsi
clean:
rm -f all-manifest.nsh
rm -f config.nsh
rm -f gtk-dll-manifest.nsh
rm -f NEWS.txt
rm -f qt-dll-manifest.nsh
rm -f user-guide.chm
rm -f $(UNINSTALL_INSTALLER)
rm -f wireshark-$(WIRESHARK_TARGET_PLATFORM)-$(VERSION).exe
distclean: clean
rm -f wireshark-$(WIRESHARK_TARGET_PLATFORM)-*.exe
maintainer-clean: distclean
$(DOC):
cd ../../doc
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
cd ../packaging/nsis
$(EXE) $(DLL):
cd ../..
$(MAKE) /$(MAKEFLAGS) -f Makefile.nmake
cd packaging/nsis
####
_FORCE_: ## Assumption: no file named _FORCE_ exists in the current directory