pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

zoneminder: Add draft 1.29.0



Module Name:	pkgsrc-wip
Committed By:	Greg Troxel <gdt%lexort.com@localhost>
Pushed By:	gdt
Date:		Tue Jun 18 10:38:29 2019 -0400
Changeset:	52c83af6d2b818447610953c3b1ac7e820e2417e

Added Files:
	zoneminder/DESCR
	zoneminder/MESSAGE
	zoneminder/Makefile
	zoneminder/PLIST
	zoneminder/distinfo
	zoneminder/files/zoneminder.conf
	zoneminder/patches/patch-Makefile_am
	zoneminder/patches/patch-configure_ac
	zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm
	zoneminder/patches/patch-scripts_zm_in
	zoneminder/patches/patch-src_Makefile_am
	zoneminder/patches/patch-src_zm__event.cpp
	zoneminder/patches/patch-src_zm__monitor.cpp
	zoneminder/patches/patch-src_zm__rtp__source.cpp
	zoneminder/patches/patch-src_zm__sdp.cpp
	zoneminder/patches/patch-src_zm__thread.h
	zoneminder/patches/patch-src_zm__timer.h
	zoneminder/patches/patch-src_zm__utils.cpp
	zoneminder/patches/patch-src_zm__utils.h
	zoneminder/patches/patch-src_zm_comms_cpp
	zoneminder/patches/patch-src_zm_comms_h
	zoneminder/patches/patch-src_zm_logger_cpp
	zoneminder/patches/patch-src_zm_remote_camera_h
	zoneminder/patches/patch-src_zm_signal_cpp
	zoneminder/patches/patch-src_zm_thread_cpp
	zoneminder/patches/patch-src_zmc_cpp
	zoneminder/patches/patch-src_zmf.cpp
	zoneminder/patches/patch-src_zmu.cpp
	zoneminder/patches/patch-web_Makefile.am
	zoneminder/patches/patch-web_ajax_stream_php

Log Message:
zoneminder: Add draft 1.29.0

(This does not yet build.)

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=52c83af6d2b818447610953c3b1ac7e820e2417e

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 zoneminder/DESCR                                   |  10 +
 zoneminder/MESSAGE                                 |  53 ++
 zoneminder/Makefile                                | 267 +++++++++++
 zoneminder/PLIST                                   | 532 +++++++++++++++++++++
 zoneminder/distinfo                                |  30 ++
 zoneminder/files/zoneminder.conf                   |  24 +
 zoneminder/patches/patch-Makefile_am               |  27 ++
 zoneminder/patches/patch-configure_ac              | 150 ++++++
 ...ch-scripts_ZoneMinder_lib_ZoneMinder_General_pm |  53 ++
 zoneminder/patches/patch-scripts_zm_in             |  51 ++
 zoneminder/patches/patch-src_Makefile_am           |  15 +
 zoneminder/patches/patch-src_zm__event.cpp         |  66 +++
 zoneminder/patches/patch-src_zm__monitor.cpp       |  22 +
 zoneminder/patches/patch-src_zm__rtp__source.cpp   |  24 +
 zoneminder/patches/patch-src_zm__sdp.cpp           |  15 +
 zoneminder/patches/patch-src_zm__thread.h          |  41 ++
 zoneminder/patches/patch-src_zm__timer.h           |  28 ++
 zoneminder/patches/patch-src_zm__utils.cpp         |  26 +
 zoneminder/patches/patch-src_zm__utils.h           |  12 +
 zoneminder/patches/patch-src_zm_comms_cpp          |  17 +
 zoneminder/patches/patch-src_zm_comms_h            |  36 ++
 zoneminder/patches/patch-src_zm_logger_cpp         |  16 +
 zoneminder/patches/patch-src_zm_remote_camera_h    |  20 +
 zoneminder/patches/patch-src_zm_signal_cpp         |  28 ++
 zoneminder/patches/patch-src_zm_thread_cpp         |  30 ++
 zoneminder/patches/patch-src_zmc_cpp               |  25 +
 zoneminder/patches/patch-src_zmf.cpp               |  13 +
 zoneminder/patches/patch-src_zmu.cpp               |  43 ++
 zoneminder/patches/patch-web_Makefile.am           |  13 +
 zoneminder/patches/patch-web_ajax_stream_php       |  15 +
 30 files changed, 1702 insertions(+)

diffs:
diff --git a/zoneminder/DESCR b/zoneminder/DESCR
new file mode 100644
index 0000000000..55951b1556
--- /dev/null
+++ b/zoneminder/DESCR
@@ -0,0 +1,10 @@
+ZoneMinder is intended for use in single or multi-camera video security
+applications, including commercial or home CCTV, theft prevention and child,
+family member or home monitoring and other domestic care scenarios such as
+nanny cam installations.  It supports capture, analysis, recording, and
+monitoring of video data coming from one or more video or network cameras
+attached to a system.  ZoneMinder also support web and semi-automatic control
+of Pan/Tilt/Zoom cameras using a variety of protocols.  It is suitable for use
+as a DIY home video security system and for commercial or professional video
+security and surveillance.  It can also be integrated into a home automation
+system via X.10 or other protocols.
diff --git a/zoneminder/MESSAGE b/zoneminder/MESSAGE
new file mode 100644
index 0000000000..d0995f10f6
--- /dev/null
+++ b/zoneminder/MESSAGE
@@ -0,0 +1,53 @@
+===========================================================================
+$NetBSD: MESSAGE,v 1.3 2015/04/05 08:51:08 dsainty Exp $
+
+All documentation for ZoneMinder is now online at:
+
+  http://www.zoneminder.com/wiki/index.php/Documentation
+
+
+Performance:
+
+  ZoneMinder benefits dramatically from using libjpeg-turbo.  Consider
+  building from Pkgsrc with:
+
+  JPEG_DEFAULT=libjpeg-turbo
+
+
+To get ZoneMinder started a MySQL database is required.
+
+First, create a MySQL user "zmuser":
+
+echo "create user 'zmuser'@'localhost' identified by 'zmpass';" | mysql -u root
+
+The default password is "zmpass".  You may change this to something else, and
+update ZM_DB_PASS in ${PKG_SYSCONFDIR}/zm.conf.
+
+
+Create the initial database via:
+
+  mysql -u root < ${PREFIX}/share/zoneminder/db/zm_create.sql
+
+
+Assign rights to the "zmuser" user via:
+
+  echo "grant all on * to 'zmuser';" | mysql -u root zm
+
+
+Upgrade a database from an older version of ZoneMinder via:
+
+  zmupdate.pl -u root [-p <password>]
+
+
+To enable the web interface via Apache, add the following line to httpd.conf:
+
+  Include ${PREFIX}/share/examples/zoneminder/apache/zoneminder.conf
+
+Also follow the configuration instructions for www/ap-php,
+databases/php-mysql, databases/php-pdo and databases/php-pdo_mysql packages.
+Use pkg_info to read their MESSAGE files.
+
+PHP may log warnings if the PHP date.timezone configuration is not set.
+Consider assigning a default system time zone to date.timezone in
+${PKG_SYSCONFDIR}/php.ini.
+===========================================================================
diff --git a/zoneminder/Makefile b/zoneminder/Makefile
new file mode 100644
index 0000000000..7908361da7
--- /dev/null
+++ b/zoneminder/Makefile
@@ -0,0 +1,267 @@
+# $NetBSD: Makefile,v 1.42 2019/06/18 12:36:59 gdt Exp $
+
+VERSION=	1.29.0
+# Sometimes the distfile unpacks to ZoneMinder and sometimes zoneminder.
+NAME_DIST=	ZoneMinder
+NAME_LOWER=	zoneminder
+
+PKGNAME=	${DISTNAME:S/${NAME_DIST}-/${NAME_LOWER}-/}
+DISTNAME=	${NAME_DIST}-${VERSION}
+WRKSRC=		${WRKDIR}/${NAME_LOWER}-${VERSION}
+CATEGORIES=	security
+MASTER_SITES=	${MASTER_SITE_GITHUB:=${NAME_DIST}/}
+GITHUB_PROJECT=	${NAME_DIST}
+GITHUB_TYPE=	tag
+GITHUB_TAG=	v${PKGVERSION_NOREV}
+
+MAINTAINER=	dsainty%NetBSD.org@localhost
+HOMEPAGE=	https://www.zoneminder.com/
+COMMENT=	Video camera security and surveillance solution
+LICENSE=	gnu-gpl-v2
+
+# NetBSD tar: Invalid header, starting valid header search.
+EXTRACT_USING=  gtar
+
+DEPENDS+=	netpbm-[0-9]*:../../graphics/netpbm
+
+PHP_VERSIONS_ACCEPTED=	56
+
+PKG_OPTIONS_VAR=	PKG_OPTIONS.zoneminder
+PKG_SUPPORTED_OPTIONS=	apache
+PKG_SUGGESTED_OPTIONS=	apache
+
+.include "../../mk/bsd.options.mk"
+
+GNU_CONFIGURE=	yes
+USE_LANGUAGES=	c c++
+USE_TOOLS+=	aclocal autoconf autoheader automake gmake perl pkg-config
+
+# zoneminder can depend on a number of perl modules depending on
+# configuration.  We take the view that if an installation can be
+# reasonably configured to use a module, that module should be a
+# dependency, absent some reason that it is so heavyweight that it
+# shoudl be an option.
+
+# MIME::Entity is needed from p5-MIME-tools
+# LWP::UserAgent is needed from p5-libwww
+DEPENDS+=	p5-Archive-Zip-[0-9]*:../../archivers/p5-Archive-Zip
+DEPENDS+=	p5-Date-Manip-[0-9]*:../../devel/p5-Date-Manip
+DEPENDS+=	p5-Device-SerialPort-[0-9]*:../../comms/p5-Device-SerialPort
+DEPENDS+=	p5-DBD-mysql-[0-9]*:../../databases/p5-DBD-mysql
+DEPENDS+=	p5-MIME-Lite-[0-9]*:../../mail/p5-MIME-Lite
+DEPENDS+=	p5-MIME-tools-[0-9]*:../../mail/p5-MIME-tools
+DEPENDS+=	p5-Net-SFTP-Foreign-[0-9]*:../../net/p5-Net-SFTP-Foreign
+DEPENDS+=	p5-PHP-Serialization-[0-9]*:../../devel/p5-PHP-Serialization
+#DEPENDS+=	{perl>=5.7.3,p5-Time-HiRes-[0-9]*}:../../time/p5-Time-HiRes
+DEPENDS+=	p5-libwww-[0-9]*:../../www/p5-libwww
+
+CONFIGURE_ARGS+=	--sysconfdir=${PKG_SYSCONFDIR}
+
+ZM_HTTPD_ROOT=		share/zoneminder/htdocs
+PLIST_SUBST+=		ZM_HTTPD_ROOT=${ZM_HTTPD_ROOT:Q}
+OWN_DIRS+=		${ZM_HTTPD_ROOT:Q}
+
+ZM_HTTPD_CGIBIN=	libexec/zoneminder/cgi-bin
+PLIST_SUBST+=		ZM_HTTPD_CGIBIN=${ZM_HTTPD_CGIBIN:Q}
+BUILD_DEFS+=		ZM_HTTPD_CGIBIN
+OWN_DIRS+=		${ZM_HTTPD_CGIBIN:Q}
+
+INSTALLATION_DIRS+=	share/zoneminder ${ZM_HTTPD_ROOT}
+INSTALLATION_DIRS+=	libexec/zoneminder ${ZM_HTTPD_CGIBIN}
+
+BUILD_DEFS+=		VARBASE
+CONFIGURE_ARGS+=	--with-webdir=${PREFIX}/${ZM_HTTPD_ROOT:Q}
+CONFIGURE_ARGS+=	--with-cgidir=${PREFIX}/${ZM_HTTPD_CGIBIN:Q}
+CONFIGURE_ARGS+=	--with-mysql=${BUILDLINK_PREFIX.mysql-client}
+CONFIGURE_ARGS+=	--localstatedir=${VARBASE}
+
+# PolicyKit doesn't actually seem to be necessary.  This hack disables
+# configure's hunt for PolicyKit, but has no other apparent ill effects.
+CONFIGURE_ENV+=		POLKIT_CFLAGS=" " POLKIT_LIBS=" "
+
+PTHREAD_AUTO_VARS=	yes
+.include "../../mk/pthread.buildlink3.mk"
+
+CONFIGURE_ENV+=		OPT_NETPBM=yes
+CONFIGURE_ENV+=		PATH_NETPBM=${PREFIX}/bin/pnmscale
+
+.include "../../multimedia/ffmpeg2/buildlink3.mk"
+CONFIGURE_ARGS+=	--with-ffmpeg=${BUILDLINK_PREFIX.ffmpeg2}
+CONFIGURE_ENV+=		PATH_FFMPEG=${BUILDLINK_PREFIX.ffmpeg2}/bin/ffmpeg2
+CONFIGURE_ENV+=		OPT_FFMPEG=yes
+
+# The backtrace requires Linux's unportable <execinfo.h> header.
+CONFIGURE_ARGS+=	--enable-crashtrace=no
+
+# Need Perl Sys::Mmap module for (default) mmap support.
+CONFIGURE_ARGS+=	--enable-mmap=no
+
+# This is somewhat awkward.  ffmpeg's libavformat/avformat.h requires
+# constant macros from stdint.h, but these are only defined under C++ if
+# __STDC_CONSTANT_MACROS is requested, so we have to do that on behalf
+# of ffmpeg.  Failure to do so causes configure time failures, and
+# build failures complaining about UINT64_C not being defined.
+CFLAGS+=		-D__STDC_CONSTANT_MACROS
+
+# Since MySQL uses openssl, use the same library instead of defaulting to
+# gnutls.
+CONFIGURE_ENV+=		ZM_SSL_LIB=openssl
+
+# Control where run-time state (PID file and sockets) get stored.
+# Default is "/var/run/zm", but we want to conform to VARBASE.
+CONFIGURE_ENV+=		ZM_RUNDIR=${VARBASE}/run/zm
+CONFIGURE_ENV+=		ZM_SOCKDIR=${VARBASE}/run/zm
+
+#
+# Darwin does have sendfile(), but the API differs from ZoneMinder's
+# expectation.
+#
+CONFIGURE_ARGS.Darwin+=	ac_cv_func_sendfile=no ac_cv_header_sys_sendfile_h=no
+
+.if !empty(PKG_OPTIONS:Mapache)
+.include "../../mk/apache.mk"
+
+PKG_USERS_VARS+=	APACHE_USER
+PKG_GROUPS_VARS+=	APACHE_GROUP
+BUILD_DEFS+=		APACHE_USER APACHE_GROUP
+
+# This directory contains no useful state, so use MAKE_DIRS instead of
+# OWN_DIRS.
+MAKE_DIRS_PERMS+=	${VARBASE}/run/zm ${REAL_ROOT_USER} ${APACHE_GROUP} 775
+
+CONFIGURE_ARGS+=	--with-webuser=${APACHE_USER}
+CONFIGURE_ARGS+=	--with-webgroup=${APACHE_GROUP}
+
+# If we're using Apache we're going to need PHP, and PHP MySQL support.
+.include "../../lang/php/phpversion.mk"
+DEPENDS+=	${APACHE_PKG_PREFIX}-${PHP_PKG_PREFIX}-[0-9]*:../../www/ap-php
+DEPENDS+=	${PHP_PKG_PREFIX}-mysql-[0-9]*:../../databases/php-mysql
+DEPENDS+=	${PHP_PKG_PREFIX}-pdo_mysql-[0-9]*:../../databases/php-pdo_mysql
+.endif
+
+# \todo Somehow, this permission setup still fails.
+# This directory contains state, so use OWN_DIRS instead of MAKE_DIRS.
+ZM_CACHE=	${VARBASE}/cache/zoneminder
+OWN_DIRS_PERMS+=	${ZM_CACHE} ${REAL_ROOT_USER} ${REAL_ROOT_GROUP} 755
+OWN_DIRS_PERMS+=	${ZM_CACHE}/temp ${REAL_ROOT_USER} ${APACHE_GROUP} 775
+OWN_DIRS_PERMS+=	${ZM_CACHE}/images ${REAL_ROOT_USER} ${APACHE_GROUP} 775
+OWN_DIRS_PERMS+=	${ZM_CACHE}/events ${REAL_ROOT_USER} ${APACHE_GROUP} 775
+
+REPLACE_PERL+=	scripts/zmaudit.pl.in
+REPLACE_PERL+=	scripts/zmcamtool.pl.in
+REPLACE_PERL+=	scripts/zmcontrol.pl.in
+REPLACE_PERL+=	scripts/zmdc.pl.in
+REPLACE_PERL+=	scripts/zmfilter.pl.in
+REPLACE_PERL+=	scripts/zmpkg.pl.in
+REPLACE_PERL+=	scripts/zmtrack.pl.in
+REPLACE_PERL+=	scripts/zmtrigger.pl.in
+REPLACE_PERL+=	scripts/zmupdate.pl.in
+REPLACE_PERL+=	scripts/zmvideo.pl.in
+REPLACE_PERL+=	scripts/zmwatch.pl.in
+REPLACE_PERL+=	scripts/zmx10.pl.in
+
+#
+# The intention of zmsystemctl.pl is to use bin/pkexec to allow the
+# apache user to start and stop the ZoneMinder services on operating
+# systems using systemd and newer versions of Polkit than Pkgsrc
+# currently has.
+#
+# If the base OS doesn't use systemd (E.g. anything not Linux), this
+# file shouldn't be used anyway.
+#
+# In Pkgsrc we ignore the potentially absent pkexec interpreter in
+# this file.  If the base OS uses systemd, it probably also has pkexec
+# in its base installation.
+#
+
+CHECK_INTERPRETER_SKIP+=	bin/zmsystemctl.pl
+EXTRA_PERL+=			scripts/zmsystemctl.pl.in
+
+SUBST_CLASSES+=			systemd-perl
+SUBST_MESSAGE.systemd-perl=	Adjusting systemd pkexec perl.
+SUBST_STAGE.systemd-perl=	pre-configure
+SUBST_FILES.systemd-perl=	scripts/zmsystemctl.pl.in
+SUBST_SED.systemd-perl=		-e 's|/usr/bin/perl|${PERL5}|g'
+
+
+SUBST_CLASSES+=			dbpaths-path
+SUBST_MESSAGE.dbpaths-path=	Adjusting default paths in configuration.
+SUBST_STAGE.dbpaths-path=	pre-configure
+SUBST_FILES.dbpaths-path=	db/zm_create.sql.in
+SUBST_SED.dbpaths-path=		-e 's|/usr/local/bin/|${PREFIX}/bin/|g'
+SUBST_SED.dbpaths-path+=	-e 's|/usr/bin|${PREFIX}/bin|g'
+SUBST_SED.dbpaths-path+=	-e 's|/cgi-bin/nph-zms|/zm/cgi-bin/nph-zms|g'
+
+#
+# Required to find the 'mysql' client executable, and may also use 'sudo' if
+# installed.
+#
+SUBST_CLASSES+=			script-path
+SUBST_MESSAGE.script-path=	Adjusting paths in scripts.
+SUBST_STAGE.script-path=	pre-configure
+SUBST_FILES.script-path=	${REPLACE_PERL} ${EXTRA_PERL}
+SUBST_SED.script-path=	-e "s|^\\([\$$]ENV{PATH} *= *'\\).*';\$$|\\1${PREFIX}/bin:/bin:/usr/bin';|g"
+
+SUBST_CLASSES+=		files
+SUBST_STAGE.files=	pre-configure
+SUBST_FILES.files=	zoneminder.conf
+SUBST_SED.files=	-e "s|@ZM_HTTPD_ROOT@|${PREFIX}/${ZM_HTTPD_ROOT}|g"
+SUBST_SED.files+=	-e "s|@ZM_HTTPD_CGIBIN@|${PREFIX}/${ZM_HTTPD_CGIBIN}|g"
+SUBST_MESSAGE.files=	Fixing ZoneMinder configuration file for Apache.
+
+PLIST_VARS+=		rcd
+
+.if ${INIT_SYSTEM} == "rc.d"
+PLIST.rcd=		yes
+.endif
+
+.if ${OPSYS} == "NetBSD" && exists(/usr/include/execinfo.h)
+LIBS+=		-lexecinfo
+.endif
+
+post-extract:
+	${CP} ${FILESDIR}/zoneminder.conf ${WRKSRC}/zoneminder.conf
+
+pre-configure:
+	set -e; cd ${WRKSRC}; \
+	aclocal; autoheader; automake -a --foreign -i; autoconf
+
+#
+# Arrange for module.mk to perform its magic here on top of the non-Perl
+# build tasks.
+#
+PERL5_REQD+=		5.6.0
+PERL5_CONFIGURE=	no
+PERL5_CONFIGURE_DIRS=	${WRKSRC}/scripts/ZoneMinder
+PERL5_PACKLIST=		auto/ZoneMinder/.packlist
+.include "../../lang/perl5/module.mk"
+
+post-configure: perl5-configure
+
+EGDIR=			share/examples/${PKGBASE}
+INSTALLATION_DIRS+=	${EGDIR} ${EGDIR}/config ${EGDIR}/apache
+CONF_FILES+=		${PREFIX}/${EGDIR}/config/zm.conf ${PKG_SYSCONFDIR}/zm.conf
+INSTALLATION_DIRS+=	bin share/examples/rc.d share/zoneminder/db
+post-install:
+	${INSTALL_DATA} ${WRKSRC}/zoneminder.conf ${DESTDIR}${PREFIX}/${EGDIR}/apache/zoneminder.conf
+	${INSTALL_DATA} ${WRKSRC}/zm.conf ${DESTDIR}${PREFIX}/${EGDIR}/config/zm.conf
+.if ${INIT_SYSTEM} == "rc.d"
+	${INSTALL_SCRIPT} ${WRKSRC}/scripts/zm ${DESTDIR}${PREFIX}/share/examples/rc.d/zoneminder
+.endif
+	${INSTALL_DATA} ${WRKSRC}/db/*.sql ${DESTDIR}${PREFIX}/share/zoneminder/db/
+	rmdir ${DESTDIR}${PREFIX}/${ZM_HTTPD_ROOT:Q}/events || true
+	rmdir ${DESTDIR}${PREFIX}/${ZM_HTTPD_ROOT:Q}/images || true
+	${LN} -s ${ZM_CACHE}/temp ${DESTDIR}${PREFIX}/${ZM_HTTPD_ROOT:Q}/temp
+	${LN} -s ${ZM_CACHE}/events ${DESTDIR}${PREFIX}/${ZM_HTTPD_ROOT:Q}/events
+	${LN} -s ${ZM_CACHE}/images ${DESTDIR}${PREFIX}/${ZM_HTTPD_ROOT:Q}/images
+
+
+.include "../../mk/dlopen.buildlink3.mk"
+.include "../../mk/jpeg.buildlink3.mk"
+.include "../../mk/mysql.buildlink3.mk"
+.include "../../mk/pthread.buildlink3.mk"
+.include "../../archivers/bzip2/buildlink3.mk"
+.include "../../devel/pcre/buildlink3.mk"
+.include "../../devel/zlib/buildlink3.mk"
+.include "../../security/openssl/buildlink3.mk"
+.include "../../mk/bsd.pkg.mk"
diff --git a/zoneminder/PLIST b/zoneminder/PLIST
new file mode 100644
index 0000000000..ca5b0d3153
--- /dev/null
+++ b/zoneminder/PLIST
@@ -0,0 +1,532 @@
+@comment $NetBSD: PLIST,v 1.4 2015/04/05 08:51:08 dsainty Exp $
+bin/zma
+bin/zmaudit.pl
+bin/zmc
+bin/zmcamtool.pl
+bin/zmcontrol.pl
+bin/zmdc.pl
+bin/zmf
+bin/zmfilter.pl
+bin/zmpkg.pl
+bin/zmstreamer
+bin/zmsystemctl.pl
+bin/zmtrack.pl
+bin/zmtrigger.pl
+bin/zmu
+bin/zmupdate.pl
+bin/zmvideo.pl
+bin/zmwatch.pl
+bin/zmx10.pl
+${ZM_HTTPD_CGIBIN}/nph-zms
+${ZM_HTTPD_CGIBIN}/zms
+${PLIST.rcd}share/examples/rc.d/zoneminder
+share/examples/zoneminder/apache/zoneminder.conf
+share/examples/zoneminder/config/zm.conf
+${PERL5_SUB_INSTALLVENDORARCH}/auto/ZoneMinder/.packlist
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Base.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/ConfigAdmin.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/ConfigData.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Config.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/AxisV2.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/FI8608W_Y2k.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/FI8620_Y2k.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/FI8908W.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/FI9821W_Y2k.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/LoftekSentinel.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/M8640.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/mjpgStreamer.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Ncs370.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/PanasonicIP.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/PelcoD.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/PelcoP.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/SkyIPCam7xx.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Toshiba_IK_WB11A.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/TVIP862.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Visca.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Control/Wanscam.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Database.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/General.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/General.pm.orig
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Logger.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Memory/Mapped.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Memory.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Memory/Shared.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel/File.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel/Handle.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel/Inet.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel/Serial.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel/Spawning.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Channel/Unix.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Connection/Example.pm
+${PERL5_SUB_INSTALLVENDORLIB}/ZoneMinder/Trigger/Connection.pm
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Base.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Config.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::ConfigAdmin.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::ConfigData.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::AxisV2.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::FI8608W_Y2k.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::FI8620_Y2k.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::FI8908W.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::FI9821W_Y2k.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::M8640.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::mjpgStreamer.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Ncs370.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::PanasonicIP.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::PelcoD.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::PelcoP.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::SkyIPCam7xx.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Toshiba_IK_WB11A.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::TVIP862.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Visca.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Control::Wanscam.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Database.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::General.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Logger.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Memory.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel::File.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel::Handle.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel::Inet.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel::Serial.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel::Spawning.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Channel::Unix.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Connection.3
+${PERL5_SUB_INSTALLVENDORMAN3DIR}/ZoneMinder::Trigger::Connection::Example.3
+share/zoneminder/db/test.monitor.sql
+share/zoneminder/db/zm_create.sql
+share/zoneminder/db/zm_update-0.0.1.sql
+share/zoneminder/db/zm_update-0.9.10.sql
+share/zoneminder/db/zm_update-0.9.11.sql
+share/zoneminder/db/zm_update-0.9.12.sql
+share/zoneminder/db/zm_update-0.9.13.sql
+share/zoneminder/db/zm_update-0.9.15.sql
+share/zoneminder/db/zm_update-0.9.16.sql
+share/zoneminder/db/zm_update-0.9.7.sql
+share/zoneminder/db/zm_update-0.9.8.sql
+share/zoneminder/db/zm_update-0.9.9.sql
+share/zoneminder/db/zm_update-1.17.1.sql
+share/zoneminder/db/zm_update-1.17.2.sql
+share/zoneminder/db/zm_update-1.18.0.sql
+share/zoneminder/db/zm_update-1.18.1.sql
+share/zoneminder/db/zm_update-1.19.0.sql
+share/zoneminder/db/zm_update-1.19.1.sql
+share/zoneminder/db/zm_update-1.19.2.sql
+share/zoneminder/db/zm_update-1.19.3.sql
+share/zoneminder/db/zm_update-1.19.4.sql
+share/zoneminder/db/zm_update-1.19.5.sql
+share/zoneminder/db/zm_update-1.20.0.sql
+share/zoneminder/db/zm_update-1.20.1.sql
+share/zoneminder/db/zm_update-1.21.0.sql
+share/zoneminder/db/zm_update-1.21.1.sql
+share/zoneminder/db/zm_update-1.21.2.sql
+share/zoneminder/db/zm_update-1.21.3.sql
+share/zoneminder/db/zm_update-1.21.4.sql
+share/zoneminder/db/zm_update-1.22.0.sql
+share/zoneminder/db/zm_update-1.22.1.sql
+share/zoneminder/db/zm_update-1.22.2.sql
+share/zoneminder/db/zm_update-1.22.3.sql
+share/zoneminder/db/zm_update-1.23.0.sql
+share/zoneminder/db/zm_update-1.23.1.sql
+share/zoneminder/db/zm_update-1.23.2.sql
+share/zoneminder/db/zm_update-1.23.3.sql
+share/zoneminder/db/zm_update-1.24.0.sql
+share/zoneminder/db/zm_update-1.24.1.sql
+share/zoneminder/db/zm_update-1.24.2.sql
+share/zoneminder/db/zm_update-1.24.3.sql
+share/zoneminder/db/zm_update-1.24.4.sql
+share/zoneminder/db/zm_update-1.26.0.sql
+share/zoneminder/db/zm_update-1.26.1.sql
+share/zoneminder/db/zm_update-1.26.2.sql
+share/zoneminder/db/zm_update-1.26.3.sql
+share/zoneminder/db/zm_update-1.26.5.sql
+share/zoneminder/db/zm_update-1.27.0.sql
+share/zoneminder/db/zm_update-1.27.99.0.sql
+share/zoneminder/db/zm_update-1.28.0.sql
+share/zoneminder/db/zm_update-1.28.1.sql
+${ZM_HTTPD_ROOT}/ajax/alarm.php
+${ZM_HTTPD_ROOT}/ajax/control.php
+${ZM_HTTPD_ROOT}/ajax/event.php
+${ZM_HTTPD_ROOT}/ajax/log.php
+${ZM_HTTPD_ROOT}/ajax/status.php
+${ZM_HTTPD_ROOT}/ajax/stream.php
+${ZM_HTTPD_ROOT}/ajax/zone.php
+${ZM_HTTPD_ROOT}/css/overlay.css
+${ZM_HTTPD_ROOT}/css/reset.css
+${ZM_HTTPD_ROOT}/css/spinner.css
+${ZM_HTTPD_ROOT}/events
+${ZM_HTTPD_ROOT}/graphics/favicon.ico
+${ZM_HTTPD_ROOT}/graphics/spinner.gif
+${ZM_HTTPD_ROOT}/graphics/transparent.gif
+${ZM_HTTPD_ROOT}/images
+${ZM_HTTPD_ROOT}/includes/actions.php
+${ZM_HTTPD_ROOT}/includes/config.php
+${ZM_HTTPD_ROOT}/includes/control_functions.php
+${ZM_HTTPD_ROOT}/includes/database.php
+${ZM_HTTPD_ROOT}/includes/functions.php
+${ZM_HTTPD_ROOT}/includes/lang.php
+${ZM_HTTPD_ROOT}/includes/logger.php
+${ZM_HTTPD_ROOT}/index.php
+${ZM_HTTPD_ROOT}/js/logger.js
+${ZM_HTTPD_ROOT}/js/mootools.ext.js
+${ZM_HTTPD_ROOT}/js/overlay.js
+${ZM_HTTPD_ROOT}/lang/big5_big5.php
+${ZM_HTTPD_ROOT}/lang/cn_zh.php
+${ZM_HTTPD_ROOT}/lang/cs_cz.php
+${ZM_HTTPD_ROOT}/lang/de_de.php
+${ZM_HTTPD_ROOT}/lang/dk_dk.php
+${ZM_HTTPD_ROOT}/lang/en_gb.php
+${ZM_HTTPD_ROOT}/lang/en_us.php
+${ZM_HTTPD_ROOT}/lang/es_ar.php
+${ZM_HTTPD_ROOT}/lang/et_ee.php
+${ZM_HTTPD_ROOT}/lang/fr_fr.php
+${ZM_HTTPD_ROOT}/lang/he_il.php
+${ZM_HTTPD_ROOT}/lang/hu_hu.php
+${ZM_HTTPD_ROOT}/lang/it_it.php
+${ZM_HTTPD_ROOT}/lang/ja_jp.php
+${ZM_HTTPD_ROOT}/lang/nl_nl.php
+${ZM_HTTPD_ROOT}/lang/pl_pl.php
+${ZM_HTTPD_ROOT}/lang/pt_br.php
+${ZM_HTTPD_ROOT}/lang/ro_ro.php
+${ZM_HTTPD_ROOT}/lang/ru_ru.php
+${ZM_HTTPD_ROOT}/lang/se_se.php
+${ZM_HTTPD_ROOT}/skins/classic/css/control.css
+${ZM_HTTPD_ROOT}/skins/classic/css/export.css
+${ZM_HTTPD_ROOT}/skins/classic/css/skin.css
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-d.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-dl.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-dr.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-l-d.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-l-u.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-l.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-r.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-s-d.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-s-u.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-u.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-ul.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/arrow-ur.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/center.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/point-g.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/point-o.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/point-r.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/seq-d.gif
+${ZM_HTTPD_ROOT}/skins/classic/graphics/seq-u.gif
+${ZM_HTTPD_ROOT}/skins/classic/includes/config.php
+${ZM_HTTPD_ROOT}/skins/classic/includes/control_functions.php
+${ZM_HTTPD_ROOT}/skins/classic/includes/export_functions.php
+${ZM_HTTPD_ROOT}/skins/classic/includes/functions.php
+${ZM_HTTPD_ROOT}/skins/classic/includes/init.php
+${ZM_HTTPD_ROOT}/skins/classic/includes/timeline_functions.php
+${ZM_HTTPD_ROOT}/skins/classic/js/skin.js
+${ZM_HTTPD_ROOT}/skins/classic/js/skin.js.php
+${ZM_HTTPD_ROOT}/skins/classic/skin.php
+${ZM_HTTPD_ROOT}/skins/classic/views/Makefile.am
+${ZM_HTTPD_ROOT}/skins/classic/views/bandwidth.php
+${ZM_HTTPD_ROOT}/skins/classic/views/blank.php
+${ZM_HTTPD_ROOT}/skins/classic/views/console.php
+${ZM_HTTPD_ROOT}/skins/classic/views/control.php
+${ZM_HTTPD_ROOT}/skins/classic/views/controlcap.php
+${ZM_HTTPD_ROOT}/skins/classic/views/controlcaps.php
+${ZM_HTTPD_ROOT}/skins/classic/views/controlpreset.php
+${ZM_HTTPD_ROOT}/skins/classic/views/css/console.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/control.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/controlcaps.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/devices.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/event.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/events.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/export.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/filter.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/frame.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/frames.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/groups.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/log.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/monitor.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/montage.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/montage_2wide.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/montage_3wide.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/montage_3wide50enlarge.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/montage_4wide.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/montage_freeform.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/options.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/stats.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/timeline.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/timeline.css.php
+${ZM_HTTPD_ROOT}/skins/classic/views/css/video.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/watch.css
+${ZM_HTTPD_ROOT}/skins/classic/views/css/zone.css
+${ZM_HTTPD_ROOT}/skins/classic/views/cycle.php
+${ZM_HTTPD_ROOT}/skins/classic/views/device.php
+${ZM_HTTPD_ROOT}/skins/classic/views/devices.php
+${ZM_HTTPD_ROOT}/skins/classic/views/donate.php
+${ZM_HTTPD_ROOT}/skins/classic/views/error.php
+${ZM_HTTPD_ROOT}/skins/classic/views/event.php
+${ZM_HTTPD_ROOT}/skins/classic/views/eventdetail.php
+${ZM_HTTPD_ROOT}/skins/classic/views/events.php
+${ZM_HTTPD_ROOT}/skins/classic/views/export.php
+${ZM_HTTPD_ROOT}/skins/classic/views/filter.php
+${ZM_HTTPD_ROOT}/skins/classic/views/filtersave.php
+${ZM_HTTPD_ROOT}/skins/classic/views/frame.php
+${ZM_HTTPD_ROOT}/skins/classic/views/frames.php
+${ZM_HTTPD_ROOT}/skins/classic/views/function.php
+${ZM_HTTPD_ROOT}/skins/classic/views/group.php
+${ZM_HTTPD_ROOT}/skins/classic/views/groups.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/Makefile.am
+${ZM_HTTPD_ROOT}/skins/classic/views/js/console.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/console.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/control.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/controlpreset.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/controlpreset.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/cycle.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/cycle.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/devices.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/donate.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/donate.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/event.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/event.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/events.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/events.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/export.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/export.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/filter.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/filter.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/group.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/groups.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/log.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/login.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/monitor.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/monitor.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/monitorpreset.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/monitorprobe.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/montage.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/montage.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/options.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/postlogin.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/state.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/state.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/timeline.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/timeline.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/user.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/version.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/version.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/video.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/video.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/watch.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/watch.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/js/zone.js
+${ZM_HTTPD_ROOT}/skins/classic/views/js/zone.js.php
+${ZM_HTTPD_ROOT}/skins/classic/views/log.php
+${ZM_HTTPD_ROOT}/skins/classic/views/login.php
+${ZM_HTTPD_ROOT}/skins/classic/views/logout.php
+${ZM_HTTPD_ROOT}/skins/classic/views/monitor.php
+${ZM_HTTPD_ROOT}/skins/classic/views/monitorpreset.php
+${ZM_HTTPD_ROOT}/skins/classic/views/monitorprobe.php
+${ZM_HTTPD_ROOT}/skins/classic/views/montage.php
+${ZM_HTTPD_ROOT}/skins/classic/views/none.php
+${ZM_HTTPD_ROOT}/skins/classic/views/optionhelp.php
+${ZM_HTTPD_ROOT}/skins/classic/views/options.php
+${ZM_HTTPD_ROOT}/skins/classic/views/postlogin.php
+${ZM_HTTPD_ROOT}/skins/classic/views/settings.php
+${ZM_HTTPD_ROOT}/skins/classic/views/state.php
+${ZM_HTTPD_ROOT}/skins/classic/views/stats.php
+${ZM_HTTPD_ROOT}/skins/classic/views/status.php
+${ZM_HTTPD_ROOT}/skins/classic/views/timeline.php
+${ZM_HTTPD_ROOT}/skins/classic/views/user.php
+${ZM_HTTPD_ROOT}/skins/classic/views/version.php
+${ZM_HTTPD_ROOT}/skins/classic/views/video.php
+${ZM_HTTPD_ROOT}/skins/classic/views/watch.php
+${ZM_HTTPD_ROOT}/skins/classic/views/zone.php
+${ZM_HTTPD_ROOT}/skins/classic/views/zones.php
+${ZM_HTTPD_ROOT}/skins/flat/css/control.css
+${ZM_HTTPD_ROOT}/skins/flat/css/export.css
+${ZM_HTTPD_ROOT}/skins/flat/css/skin.css
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-d.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-dl.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-dr.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-l-d.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-l-u.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-l.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-r.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-s-d.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-s-u.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-u.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-ul.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/arrow-ur.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/center.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/point-g.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/point-o.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/point-r.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/seq-d.gif
+${ZM_HTTPD_ROOT}/skins/flat/graphics/seq-u.gif
+${ZM_HTTPD_ROOT}/skins/flat/includes/config.php
+${ZM_HTTPD_ROOT}/skins/flat/includes/control_functions.php
+${ZM_HTTPD_ROOT}/skins/flat/includes/export_functions.php
+${ZM_HTTPD_ROOT}/skins/flat/includes/functions.php
+${ZM_HTTPD_ROOT}/skins/flat/includes/init.php
+${ZM_HTTPD_ROOT}/skins/flat/includes/timeline_functions.php
+${ZM_HTTPD_ROOT}/skins/flat/js/skin.js
+${ZM_HTTPD_ROOT}/skins/flat/js/skin.js.php
+${ZM_HTTPD_ROOT}/skins/flat/skin.php
+${ZM_HTTPD_ROOT}/skins/flat/views/Makefile.am
+${ZM_HTTPD_ROOT}/skins/flat/views/bandwidth.php
+${ZM_HTTPD_ROOT}/skins/flat/views/blank.php
+${ZM_HTTPD_ROOT}/skins/flat/views/console.php
+${ZM_HTTPD_ROOT}/skins/flat/views/control.php
+${ZM_HTTPD_ROOT}/skins/flat/views/controlcap.php
+${ZM_HTTPD_ROOT}/skins/flat/views/controlcaps.php
+${ZM_HTTPD_ROOT}/skins/flat/views/controlpreset.php
+${ZM_HTTPD_ROOT}/skins/flat/views/css/console.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/control.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/controlcaps.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/devices.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/event.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/events.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/export.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/filter.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/frame.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/frames.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/groups.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/log.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/monitor.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/montage.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/montage_2wide.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/montage_3wide.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/montage_3wide50enlarge.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/montage_4wide.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/montage_freeform.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/options.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/stats.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/timeline.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/timeline.css.php
+${ZM_HTTPD_ROOT}/skins/flat/views/css/video.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/watch.css
+${ZM_HTTPD_ROOT}/skins/flat/views/css/zone.css
+${ZM_HTTPD_ROOT}/skins/flat/views/cycle.php
+${ZM_HTTPD_ROOT}/skins/flat/views/device.php
+${ZM_HTTPD_ROOT}/skins/flat/views/devices.php
+${ZM_HTTPD_ROOT}/skins/flat/views/donate.php
+${ZM_HTTPD_ROOT}/skins/flat/views/error.php
+${ZM_HTTPD_ROOT}/skins/flat/views/event.php
+${ZM_HTTPD_ROOT}/skins/flat/views/eventdetail.php
+${ZM_HTTPD_ROOT}/skins/flat/views/events.php
+${ZM_HTTPD_ROOT}/skins/flat/views/export.php
+${ZM_HTTPD_ROOT}/skins/flat/views/filter.php
+${ZM_HTTPD_ROOT}/skins/flat/views/filtersave.php
+${ZM_HTTPD_ROOT}/skins/flat/views/frame.php
+${ZM_HTTPD_ROOT}/skins/flat/views/frames.php
+${ZM_HTTPD_ROOT}/skins/flat/views/function.php
+${ZM_HTTPD_ROOT}/skins/flat/views/group.php
+${ZM_HTTPD_ROOT}/skins/flat/views/groups.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/Makefile.am
+${ZM_HTTPD_ROOT}/skins/flat/views/js/console.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/console.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/control.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/controlpreset.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/controlpreset.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/cycle.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/cycle.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/devices.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/donate.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/donate.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/event.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/event.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/events.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/events.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/export.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/export.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/filter.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/filter.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/group.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/groups.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/log.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/login.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/monitor.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/monitor.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/monitorpreset.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/monitorprobe.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/montage.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/montage.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/options.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/postlogin.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/state.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/state.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/timeline.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/timeline.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/user.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/version.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/version.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/video.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/video.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/watch.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/watch.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/js/zone.js
+${ZM_HTTPD_ROOT}/skins/flat/views/js/zone.js.php
+${ZM_HTTPD_ROOT}/skins/flat/views/log.php
+${ZM_HTTPD_ROOT}/skins/flat/views/login.php
+${ZM_HTTPD_ROOT}/skins/flat/views/logout.php
+${ZM_HTTPD_ROOT}/skins/flat/views/monitor.php
+${ZM_HTTPD_ROOT}/skins/flat/views/monitorpreset.php
+${ZM_HTTPD_ROOT}/skins/flat/views/monitorprobe.php
+${ZM_HTTPD_ROOT}/skins/flat/views/montage.php
+${ZM_HTTPD_ROOT}/skins/flat/views/none.php
+${ZM_HTTPD_ROOT}/skins/flat/views/optionhelp.php
+${ZM_HTTPD_ROOT}/skins/flat/views/options.php
+${ZM_HTTPD_ROOT}/skins/flat/views/postlogin.php
+${ZM_HTTPD_ROOT}/skins/flat/views/settings.php
+${ZM_HTTPD_ROOT}/skins/flat/views/state.php
+${ZM_HTTPD_ROOT}/skins/flat/views/stats.php
+${ZM_HTTPD_ROOT}/skins/flat/views/status.php
+${ZM_HTTPD_ROOT}/skins/flat/views/timeline.php
+${ZM_HTTPD_ROOT}/skins/flat/views/user.php
+${ZM_HTTPD_ROOT}/skins/flat/views/version.php
+${ZM_HTTPD_ROOT}/skins/flat/views/video.php
+${ZM_HTTPD_ROOT}/skins/flat/views/watch.php
+${ZM_HTTPD_ROOT}/skins/flat/views/zone.php
+${ZM_HTTPD_ROOT}/skins/flat/views/zones.php
+${ZM_HTTPD_ROOT}/skins/mobile/css/skin.css
+${ZM_HTTPD_ROOT}/skins/mobile/includes/config.php
+${ZM_HTTPD_ROOT}/skins/mobile/includes/control_functions.php
+${ZM_HTTPD_ROOT}/skins/mobile/includes/functions.php
+${ZM_HTTPD_ROOT}/skins/mobile/includes/init.php
+${ZM_HTTPD_ROOT}/skins/mobile/skin.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/console.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/css/console.css
+${ZM_HTTPD_ROOT}/skins/mobile/views/devices.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/error.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/event.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/eventdetails.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/events.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/filter.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/frame.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/function.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/login.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/montage.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/state.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/video.php
+${ZM_HTTPD_ROOT}/skins/mobile/views/watch.php
+${ZM_HTTPD_ROOT}/skins/xml/includes/config.php
+${ZM_HTTPD_ROOT}/skins/xml/includes/functions.php
+${ZM_HTTPD_ROOT}/skins/xml/includes/init.php
+${ZM_HTTPD_ROOT}/skins/xml/skin.php
+${ZM_HTTPD_ROOT}/skins/xml/views/actions.php
+${ZM_HTTPD_ROOT}/skins/xml/views/console.php
+${ZM_HTTPD_ROOT}/skins/xml/views/none.php
+${ZM_HTTPD_ROOT}/skins/xml/views/notfound.png
+${ZM_HTTPD_ROOT}/temp
+${ZM_HTTPD_ROOT}/tools/mootools/mootools-core-1.3.2-nc.js
+${ZM_HTTPD_ROOT}/tools/mootools/mootools-core-1.3.2-yc.js
+${ZM_HTTPD_ROOT}/tools/mootools/mootools-core.js
+${ZM_HTTPD_ROOT}/tools/mootools/mootools-more-1.3.2.1-nc.js
+${ZM_HTTPD_ROOT}/tools/mootools/mootools-more-1.3.2.1-yc.js
+${ZM_HTTPD_ROOT}/tools/mootools/mootools-more.js
+${ZM_HTTPD_ROOT}/views/file.php
+${ZM_HTTPD_ROOT}/views/image.php
+@pkgdir ${ZM_HTTPD_ROOT}/sounds
+@pkgdir ${ZM_HTTPD_ROOT}/skins/mobile/lang
+@pkgdir ${ZM_HTTPD_ROOT}/skins/mobile/graphics
+@pkgdir ${ZM_HTTPD_ROOT}/skins/mobile/ajax
+@pkgdir ${ZM_HTTPD_ROOT}/skins/classic/lang
+@pkgdir ${ZM_HTTPD_ROOT}/skins/classic/ajax
diff --git a/zoneminder/distinfo b/zoneminder/distinfo
new file mode 100644
index 0000000000..d1cd625898
--- /dev/null
+++ b/zoneminder/distinfo
@@ -0,0 +1,30 @@
+$NetBSD: distinfo,v 1.12 2018/07/14 15:03:57 gdt Exp $
+
+SHA1 (ZoneMinder-1.29.0.tar.gz) = 1e1fb9aeb7f482c27b4275ad84556b6c3910e4dc
+RMD160 (ZoneMinder-1.29.0.tar.gz) = d744a68552651489cc17f369c11baa3cc45621ff
+SHA512 (ZoneMinder-1.29.0.tar.gz) = 4716e0788db29880eeafc817fe63662d07c3b805214b4d2eb29b346dd3493b0215c9e79370e3414220c812065eefbe253548a70d8128c253aa4535f66f9544df
+Size (ZoneMinder-1.29.0.tar.gz) = 9302624 bytes
+SHA1 (patch-Makefile_am) = d3b66d8d741b739e2e6b354cef29881d8bcde31c
+SHA1 (patch-configure_ac) = aa258339263476b672b7683d8a6f0f378f8f7d6b
+SHA1 (patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm) = 841d897662958698a4dfcb95dd5bc43bb5fed568
+SHA1 (patch-scripts_zm_in) = a05727261bb8be6b707e9a14ae4ff52ea3770d51
+SHA1 (patch-src_Makefile_am) = 0f6571c9d5a3e688544f93d687d266e1b71f0f43
+SHA1 (patch-src_zm__event.cpp) = 3adf6439da64fb991a9197dac2819bab22c53b44
+SHA1 (patch-src_zm__monitor.cpp) = dcc3816686a6a7c375d4716d3663b4c922c90439
+SHA1 (patch-src_zm__rtp__source.cpp) = 5341938eefe5def49dc8f3e3b760d86cabd17772
+SHA1 (patch-src_zm__sdp.cpp) = ed89bc14ae557281bb43baca9c90b78d801d8eb1
+SHA1 (patch-src_zm__thread.h) = c44a6b6a4fc187b742002b86bbcc9ca06f32f2cf
+SHA1 (patch-src_zm__timer.h) = f911310c52cad52ca47f632c370aca39858fbe44
+SHA1 (patch-src_zm__utils.cpp) = f6a109296146822014d57d39094390adcc5df760
+SHA1 (patch-src_zm__utils.h) = dbda8ba527f08b0337f6d2afa155ce4adc733e1e
+SHA1 (patch-src_zm_comms_cpp) = bd3c3e6dd4d11ea0845d2da662e99169cd6e6680
+SHA1 (patch-src_zm_comms_h) = 75ceba7e2c725c02a09cb2203a94142b1a987bce
+SHA1 (patch-src_zm_logger_cpp) = 2009be43b7a95cda662ea11703155dc892e7ad48
+SHA1 (patch-src_zm_remote_camera_h) = 0d4bd7dae0188df7e463586250ac2ed530230f3d
+SHA1 (patch-src_zm_signal_cpp) = 0e53c30d408cf926d9a1f05a683e10cd8b9f2d8e
+SHA1 (patch-src_zm_thread_cpp) = c5f64697c3024c6c382f9ae2c5dbe9c21b529b6e
+SHA1 (patch-src_zmc_cpp) = 9fee2df53603a26a086fc2d8a56b29e4059f3ed1
+SHA1 (patch-src_zmf.cpp) = a059b9ae068037c6f68c16dab861ed830dd1c7e2
+SHA1 (patch-src_zmu.cpp) = c83283c1ac38e7c39201f72099b9830d84566c41
+SHA1 (patch-web_Makefile.am) = ddb3815fa1b1799658034789302c8d3840f2b894
+SHA1 (patch-web_ajax_stream_php) = e8f811e63bedec03345b74db72c3d8014b3cc7f6
diff --git a/zoneminder/files/zoneminder.conf b/zoneminder/files/zoneminder.conf
new file mode 100644
index 0000000000..bee99bc406
--- /dev/null
+++ b/zoneminder/files/zoneminder.conf
@@ -0,0 +1,24 @@
+# This Apache configuration puts ZoneMinder under /zm.
+# Access is limited to localhost, as a safe default until
+# intentionally changed.
+
+ScriptAlias /zm/cgi-bin/ "@ZM_HTTPD_CGIBIN@/"
+
+<Directory "@ZM_HTTPD_CGIBIN@">
+  <RequireAny>
+    Require ip 127.0.0.1
+    Require ip 172.16.32.0/24
+  </RequireAny>
+</Directory>
+
+Alias /zm "@ZM_HTTPD_ROOT@"
+
+<Directory "@ZM_HTTPD_ROOT@">
+  php_flag register_globals off
+  php_flag short_open_tag on
+  DirectoryIndex index.php
+  <RequireAny>
+    Require ip 127.0.0.1
+    Require ip 172.16.32.0/24
+  </RequireAny>
+</Directory>
diff --git a/zoneminder/patches/patch-Makefile_am b/zoneminder/patches/patch-Makefile_am
new file mode 100644
index 0000000000..2e36786c53
--- /dev/null
+++ b/zoneminder/patches/patch-Makefile_am
@@ -0,0 +1,27 @@
+$NetBSD: patch-Makefile_am,v 1.3 2015/04/05 08:51:08 dsainty Exp $
+
+Disable the hacks around ownership setup so Pkgsrc can take responsibility.
+Don't install zm.conf at all - let Pkgsrc install it into EGDIR.
+
+--- Makefile.am.orig	2016-02-03 18:40:30.000000000 +0000
++++ Makefile.am
+@@ -6,8 +6,8 @@ webuser = @WEB_USER@
+ webgroup = @WEB_GROUP@
+ zmconfigdir = @ZM_CONFIG_DIR@
+ 
+-zmconfig_DATA = \
+-	zm.conf
++#zmconfig_DATA = \
++#	zm.conf
+ 
+ if COND_ONVIF
+    MAYBE_ONVIF = onvif
+@@ -26,7 +26,7 @@ EXTRA_DIST = \
+ 	zmconfgen.pl.in
+ 
+ # Yes, you are correct. This is a HACK!
+-install-data-hook:
++pkgsrc-disabled-install-data-hook:
+ 	( cd $(DESTDIR)$(zmconfigdir); chown $(webuser):$(webgroup) $(zmconfig_DATA); chmod 600 $(zmconfig_DATA) )
+ 	( if ! test -e $(DESTDIR)$(ZM_RUNDIR); then mkdir -p $(DESTDIR)$(ZM_RUNDIR); fi; if test "$(DESTDIR)$(ZM_RUNDIR)" != "/var/run"; then chown $(webuser):$(webgroup) $(DESTDIR)$(ZM_RUNDIR); chmod u+w $(DESTDIR)$(ZM_RUNDIR); fi )
+ 	( if ! test -e $(DESTDIR)$(ZM_SOCKDIR); then mkdir -p $(DESTDIR)$(ZM_SOCKDIR); fi; if test "$(DESTDIR)$(ZM_SOCKDIR)" != "/var/run"; then chown $(webuser):$(webgroup) $(DESTDIR)$(ZM_SOCKDIR); chmod u+w $(DESTDIR)$(ZM_SOCKDIR); fi )
diff --git a/zoneminder/patches/patch-configure_ac b/zoneminder/patches/patch-configure_ac
new file mode 100644
index 0000000000..df0593fda7
--- /dev/null
+++ b/zoneminder/patches/patch-configure_ac
@@ -0,0 +1,150 @@
+$NetBSD: patch-configure_ac,v 1.4 2015/04/07 12:54:36 dsainty Exp $
+
+Recognise lower-case "netbsd" as BSD.
+
+Correct shell test = syntax.
+
+Allow Pkgsrc to manage dlopen() support.
+
+--- configure.ac.orig	2016-02-03 18:40:30.000000000 +0000
++++ configure.ac
+@@ -64,41 +64,41 @@ AC_ARG_VAR(ZM_TMPDIR,[Location of tempor
+ AC_ARG_VAR(ZM_LOGDIR,[Location of generated log files, default /var/log/zm])
+ AC_ARG_VAR(ZM_CONFIG_DIR,[Location of ZoneMinder configuration, default system config directory])
+ 
+-if test "$ZM_DB_TYPE" == ""; then
++if test "$ZM_DB_TYPE" = ""; then
+ 	AC_SUBST(ZM_DB_TYPE,[mysql])
+ fi
+-if test "$ZM_DB_HOST" == ""; then
++if test "$ZM_DB_HOST" = ""; then
+ 	AC_SUBST(ZM_DB_HOST,[localhost])
+ fi
+-if test "$ZM_DB_NAME" == ""; then
++if test "$ZM_DB_NAME" = ""; then
+ 	AC_SUBST(ZM_DB_NAME,[zm])
+ fi
+-if test "$ZM_DB_USER" == ""; then
++if test "$ZM_DB_USER" = ""; then
+ 	AC_SUBST(ZM_DB_USER,[zmuser])
+ fi
+-if test "$ZM_DB_PASS" == ""; then
++if test "$ZM_DB_PASS" = ""; then
+ 	AC_SUBST(ZM_DB_PASS,[zmpass])
+ fi
+-if test "$ZM_SSL_LIB" == ""; then
++if test "$ZM_SSL_LIB" = ""; then
+ 	AC_SUBST(ZM_SSL_LIB,gnutls)
+ fi
+-if test "$ZM_MYSQL_ENGINE" == ""; then
++if test "$ZM_MYSQL_ENGINE" = ""; then
+ 	AC_SUBST(ZM_MYSQL_ENGINE,InnoDB)
+ fi
+-if test "$ZM_RUNDIR" == ""; then
++if test "$ZM_RUNDIR" = ""; then
+ 	AC_SUBST(ZM_RUNDIR,[/var/run/zm])
+ fi
+-if test "$ZM_SOCKDIR" == ""; then
++if test "$ZM_SOCKDIR" = ""; then
+ 	AC_SUBST(ZM_SOCKDIR,[/var/run/zm])
+ fi
+-if test "$ZM_TMPDIR" == ""; then
++if test "$ZM_TMPDIR" = ""; then
+ 	AC_SUBST(ZM_TMPDIR,[/tmp/zm])
+ fi
+-if test "$ZM_LOGDIR" == ""; then
++if test "$ZM_LOGDIR" = ""; then
+ 	AC_SUBST(ZM_LOGDIR,[/var/log/zm])
+ fi
+ AC_DEFINE_DIR([SYSCONFDIR],[sysconfdir],[Expanded configuration directory])
+-if test "$ZM_CONFIG_DIR" == ""; then
++if test "$ZM_CONFIG_DIR" = ""; then
+ 	AC_SUBST(ZM_CONFIG_DIR,[$SYSCONFDIR])
+ fi
+ 
+@@ -270,7 +270,7 @@ AC_ARG_ENABLE(mmap,
+     filesystem which will normally be the case by default.
+     e.g. --enable-mmap=yes or --disable-mmap])
+ )
+-if test "$ENABLE_MMAP" == "yes"; then
++if test "$ENABLE_MMAP" = "yes"; then
+   AC_DEFINE(ZM_MEM_MAPPED,1,"Whether to use mapped rather than shared memory")
+ else
+   AC_DEFINE(ZM_MEM_MAPPED,0,"Whether to use mapped rather than shared memory")
+@@ -292,7 +292,7 @@ AM_CONDITIONAL([COND_ONVIF], [test "$ena
+ 
+ # Compiler
+ AC_LANG_CPLUSPLUS
+-if test "$ENABLE_ONVIF" == "yes"; then
++if test "$ENABLE_ONVIF" = "yes"; then
+   AC_SUBST(ZM_HAS_ONVIF,1)
+ else
+   AC_SUBST(ZM_HAS_ONVIF,0)
+@@ -342,22 +342,22 @@ AC_CHECK_LIB(rt,clock_gettime,,AC_MSG_ER
+ AC_SEARCH_LIBS(mysql_init,[mysqlclient mariadbclient],,AC_MSG_ERROR(zm requires libmysqlclient.a or libmariadbclient.a))
+ AC_CHECK_LIB(jpeg,jpeg_start_compress,,AC_MSG_ERROR(zm requires libjpeg.a))
+ AC_CHECK_LIB(pthread,pthread_create,,AC_MSG_ERROR(zm requires libpthread.a))
+-if test "$BSD" == "0"; then
++if test "$BSD" = "0"; then
+ AC_CHECK_LIB(dl,dlsym,,AC_MSG_ERROR(zm requires libdl.a))
+ fi
+-if test "$ZM_SSL_LIB" == "openssl"; then
++if test "$ZM_SSL_LIB" = "openssl"; then
+ AC_CHECK_HEADERS(openssl/md5.h,,AC_MSG_WARN(zm requires openssl/md5.h header to be installed for openssl),)
+ AC_CHECK_LIB(crypto,MD5,,AC_MSG_WARN([libcrypto.a is required for authenticated streaming - use ZM_SSL_LIB option to select gnutls instead]))
+ else
+ AC_CHECK_HEADERS(gnutls/openssl.h,AC_SUBST(ZM_HAS_GNUTLS_OPENSSL,1),AC_SUBST(ZM_HAS_GNUTLS_OPENSSL,0),)
+ AC_CHECK_HEADERS(gnutls/gnutls.h,AC_SUBST(ZM_HAS_GNUTLS,1),AC_SUBST(ZM_HAS_GNUTLS,0),)
+-if test "$ZM_HAS_GNUTLS_OPENSSL" == "0" && test "$ZM_HAS_GNUTLS" == "0"; then
++if test "$ZM_HAS_GNUTLS_OPENSSL" = "0" && test "$ZM_HAS_GNUTLS" = "0"; then
+ AC_MSG_WARN(gnutls is required for authenticated streaming - use ZM_SSL_LIB option to select openssl instead)
+ fi
+ AC_CHECK_HEADERS(gcrypt.h,,AC_MSG_WARN(zm requires libgcrypt headers to be installed for gnutls),)
+ AC_CHECK_LIB(gcrypt,gcry_check_version,,AC_MSG_WARN([libgcrypt.a is required for authenticated streaming - use ZM_SSL_LIB option to select openssl instead]))
+ AC_CHECK_LIB(gnutls,gnutls_fingerprint,,AC_MSG_WARN([libgnutls.a is required for authenticated streaming - use ZM_SSL_LIB option to select openssl instead]))
+-if test "$ZM_HAS_GNUTLS_OPENSSL" == "1"; then
++if test "$ZM_HAS_GNUTLS_OPENSSL" = "1"; then
+ AC_CHECK_LIB(gnutls-openssl,MD5,,AC_MSG_WARN([libgnutls.a is required for authenticated streaming - use ZM_SSL_LIB option to select openssl instead]))
+ fi
+ fi
+@@ -400,7 +400,7 @@ AC_SUBST(ZM_HAS_V4L2)
+ 
+ # Set global Video for Linux flag
+ ZM_HAS_V4L=0
+-if test "$ZM_HAS_V4L1" == "1" || test "$ZM_HAS_V4L2" == "1"; then
++if test "$ZM_HAS_V4L1" = "1" || test "$ZM_HAS_V4L2" = "1"; then
+ ZM_HAS_V4L=1
+ else
+ AC_MSG_WARN(zm requires Video4Linux or Video4Linux2 to be installed for analog or USB camera support)
+@@ -417,7 +417,7 @@ AC_CHECK_HEADERS(libswscale/swscale.h,,,
+ AC_LANG_POP([C])
+ AC_CHECK_HEADERS(pcre/pcre.h,AC_SUBST(ZM_PCRE,"1"),,)
+ AC_CHECK_HEADERS(pcre.h,AC_SUBST(ZM_PCRE,"1"),,)
+-if test "$ENABLE_MMAP" == "yes"; then
++if test "$ENABLE_MMAP" = "yes"; then
+ AC_CHECK_HEADERS(sys/mman.h,,,)
+ AC_CHECK_HEADERS(fcntl.h,,,)
+ else
+@@ -428,11 +428,11 @@ AC_CHECK_HEADERS(zlib.h,,,)
+ AC_CHECK_HEADERS(vlc/vlc.h,,,)
+ AC_CHECK_HEADERS(curl/curl.h,,,)
+ 
+-if test "$ZM_SSL_LIB" == "openssl"; then
++if test "$ZM_SSL_LIB" = "openssl"; then
+ AC_CHECK_DECLS(MD5,,AC_MSG_ERROR([zm requires openssl/md5.h - use ZM_SSL_LIB option to select gnutls instead]),[#include <stdlib.h>
+ #include <openssl/md5.h>])
+ else
+-if test "$ZM_HAS_GNUTLS_OPENSSL" == "1"; then
++if test "$ZM_HAS_GNUTLS_OPENSSL" = "1"; then
+ AC_CHECK_DECLS(MD5,,AC_MSG_ERROR([zm requires gnutls/openssl.h - use ZM_SSL_LIB option to select openssl instead]),[#include <stdlib.h>
+ #include <gnutls/openssl.h>])
+ else
+@@ -457,7 +457,7 @@ AC_PROG_PERL_MODULES(Time::HiRes,,AC_MSG
+ AC_PROG_PERL_MODULES(Date::Manip,,AC_MSG_ERROR(zm requires Date::Manip))
+ AC_PROG_PERL_MODULES(LWP::UserAgent,,AC_MSG_ERROR(zm requires LWP::UserAgent))
+ AC_PROG_PERL_MODULES(ExtUtils::MakeMaker,,AC_MSG_ERROR(zm requires ExtUtils::MakeMaker))
+-if test "$ENABLE_MMAP" == "yes"; then
++if test "$ENABLE_MMAP" = "yes"; then
+ AC_PROG_PERL_MODULES(Sys::Mmap,,AC_MSG_ERROR(zm requires Sys::Mmap for mapped memory - set --enable-mmap=no to use IPC shared memory instead))
+ fi
+ 
diff --git a/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm b/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm
new file mode 100644
index 0000000000..b3df6c6a36
--- /dev/null
+++ b/zoneminder/patches/patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm
@@ -0,0 +1,53 @@
+$NetBSD: patch-scripts_ZoneMinder_lib_ZoneMinder_General_pm,v 1.2 2015/04/05 08:51:08 dsainty Exp $
+
+Perl doesn't really support "> /dev/null", so just capture into $output.
+
+% ktruss -i perl -e 'qx(does-not-exist >/dev/null 2>&1);'|egrep 'dup2.*2'
+does-not-exist: not found
+% ktruss -i perl -e 'qx(does-not-exist 2>&1);'|egrep 'dup2.*2'           
+ 16954      1 perl     dup2(0x1, 0x2)              = 2
+
+The problem is that, whilst Perl supports 2>&1 internally (and does not use
+the shell at all) if there is no other redirection, it does not support file
+redirection - it defers that (and therefore necessarily must also defer the
+stderr redirection) to the shell.  If the system's shell happens to report
+"Not found" errors before redirection is processed (E.g. NetBSD shell) then
+the stderr redirection is happening too late to be captured.
+
+That leads to unintended errors reported on stderr - primarily if sudo is not
+installed on the system, or not in the $PATH.
+
+Use the -m parameter to su, as ZM_WEB_USER shouldn't require a login shell.
+
+--- scripts/ZoneMinder/lib/ZoneMinder/General.pm.orig	2015-04-01 19:40:39.708621257 +1300
++++ scripts/ZoneMinder/lib/ZoneMinder/General.pm	2015-04-01 19:50:47.372646449 +1300
+@@ -107,7 +107,7 @@
+     my $suffix = "";
+     my $command = $prefix.$null_command.$suffix;
+     Debug( "Testing \"$command\"\n" );
+-    $command .= " > /dev/null 2>&1"; 
++    $command .= " 2>&1";
+     my $output = qx($command);
+     my $status = $? >> 8;
+     if ( !$status )
+@@ -124,6 +124,7 @@
+         $suffix = "'";
+         $command = $prefix.$null_command.$suffix;
+         Debug( "Testing \"$command\"\n" );
++        $command .= " 2>&1";
+         my $output = qx($command);
+         my $status = $? >> 8;
+         if ( !$status )
+@@ -136,10 +137,11 @@
+             chomp( $output );
+             Debug( "Test failed, '$output'\n" );
+ 
+-            $prefix = "su ".$Config{ZM_WEB_USER}." -c '";
++            $prefix = "su -m ".$Config{ZM_WEB_USER}." -c '";
+             $suffix = "'";
+             $command = $prefix.$null_command.$suffix;
+             Debug( "Testing \"$command\"\n" );
++            $command .= " 2>&1";
+             $output = qx($command);
+             $status = $? >> 8;
+             if ( !$status )
diff --git a/zoneminder/patches/patch-scripts_zm_in b/zoneminder/patches/patch-scripts_zm_in
new file mode 100644
index 0000000000..23d1ad41c9
--- /dev/null
+++ b/zoneminder/patches/patch-scripts_zm_in
@@ -0,0 +1,51 @@
+$NetBSD: patch-scripts_zm_in,v 1.3 2015/04/05 08:51:08 dsainty Exp $
+
+/etc/rc.d/init.d/functions doesn't commonly exist.
+
+The LOCKFILE feature appears unused, and requires a /var/lock/subsys directory
+we don't have.
+
+--- scripts/zm.in.orig	2016-02-03 18:40:30.000000000 +0000
++++ scripts/zm.in
+@@ -7,12 +7,12 @@
+ # For systemd environments, use the ZoneMinder systemd unit file instead
+ 
+ # Source function library.
+-. /etc/rc.d/init.d/functions
++#. /etc/rc.d/init.d/functions
+ 
+ prog=ZoneMinder
+ ZM_CONFIG="@ZM_CONFIG@"
+ pidfile="@ZM_RUNDIR@"
+-LOCKFILE=/var/lock/subsys/zm
++#LOCKFILE=/var/lock/subsys/zm
+ 
+ loadconf()
+ {
+@@ -54,7 +54,7 @@ start()
+     RETVAL=$?
+     [ $RETVAL = 0 ] && success || failure
+     echo
+-    [ $RETVAL = 0 ] && touch $LOCKFILE
++    #[ $RETVAL = 0 ] && touch $LOCKFILE
+     return $RETVAL
+ }
+ 
+@@ -66,7 +66,7 @@ stop()
+     RETVAL=$?
+     [ $RETVAL = 0 ] && success || failure
+     echo
+-    [ $RETVAL = 0 ] && rm -f $LOCKFILE
++    #[ $RETVAL = 0 ] && rm -f $LOCKFILE
+ }
+ 
+ zmstatus()
+@@ -107,7 +107,7 @@ case "$1" in
+         result=`$ZM_PATH_BIN/zmdc.pl check`
+         if [ "$result" = "running" ]; then
+             $ZM_PATH_BIN/zmdc.pl shutdown > /dev/null
+-            rm -f $LOCKFILE
++            #rm -f $LOCKFILE
+             start
+         fi
+         ;;
diff --git a/zoneminder/patches/patch-src_Makefile_am b/zoneminder/patches/patch-src_Makefile_am
new file mode 100644
index 0000000000..5c9d928bc5
--- /dev/null
+++ b/zoneminder/patches/patch-src_Makefile_am
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_Makefile_am,v 1.3 2015/04/05 08:51:08 dsainty Exp $
+
+Don't pointlessly chown zms.
+
+--- src/Makefile.am.orig	2015-02-05 15:52:37.000000000 +1300
++++ src/Makefile.am	2015-04-01 19:33:05.628602430 +1300
+@@ -128,7 +128,7 @@
+ # Yes, you are correct. This is a HACK!
+ install-exec-hook:
+ 	( cd $(DESTDIR)@bindir@; mkdir -p $(DESTDIR)$(cgidir); mv zms $(DESTDIR)$(cgidir) )
+-	( cd $(DESTDIR)$(cgidir); chown $(webuser):$(webgroup) zms; ln -f zms nph-zms )
++	( cd $(DESTDIR)$(cgidir); ln -f zms nph-zms )
+ 
+ uninstall-hook:
+ 	( cd $(DESTDIR)$(cgidir); rm -f zms nph-zms )
diff --git a/zoneminder/patches/patch-src_zm__event.cpp b/zoneminder/patches/patch-src_zm__event.cpp
new file mode 100644
index 0000000000..2b6ac2a333
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm__event.cpp
@@ -0,0 +1,66 @@
+$NetBSD: patch-src_zm__event.cpp,v 1.2 2018/07/14 15:03:57 gdt Exp $
+
+zoneminder uses %ld for time_t, which is troublesome on NetBSD mrm and
+presumably i386.  (Note that there are multiple patch files for the
+same issue.)
+
+Not yet sent upstream -- needs update to latest release first, where
+it might be fixed, or the patch might simply need to be rebased.
+Also, this fix is expedient and probably a better fix is appropriate.
+
+--- src/zm_event.cpp.orig	2016-02-03 18:40:30.000000000 +0000
++++ src/zm_event.cpp
+@@ -80,7 +80,7 @@ Event::Event( Monitor *p_monitor, struct
+     static char sql[ZM_SQL_MED_BUFSIZ];
+ 
+     struct tm *stime = localtime( &start_time.tv_sec );
+-    snprintf( sql, sizeof(sql), "insert into Events ( MonitorId, Name, StartTime, Width, Height, Cause, Notes ) values ( %d, 'New Event', from_unixtime( %ld ), %d, %d, '%s', '%s' )", monitor->Id(), start_time.tv_sec, monitor->Width(), monitor->Height(), cause.c_str(), notes.c_str() );
++    snprintf( sql, sizeof(sql), "insert into Events ( MonitorId, Name, StartTime, Width, Height, Cause, Notes ) values ( %d, 'New Event', from_unixtime( %jd ), %d, %d, '%s', '%s' )", monitor->Id(), (intmax_t) start_time.tv_sec, monitor->Width(), monitor->Height(), cause.c_str(), notes.c_str() );
+     if ( mysql_query( &dbconn, sql ) )
+     {
+         Error( "Can't insert event: %s", mysql_error( &dbconn ) );
+@@ -178,7 +178,7 @@ Event::~Event()
+ 
+         Debug( 1, "Adding closing frame %d to DB", frames );
+         static char sql[ZM_SQL_SML_BUFSIZ];
+-        snprintf( sql, sizeof(sql), "insert into Frames ( EventId, FrameId, TimeStamp, Delta ) values ( %d, %d, from_unixtime( %ld ), %s%ld.%02ld )", id, frames, end_time.tv_sec, delta_time.positive?"":"-", delta_time.sec, delta_time.fsec );
++        snprintf( sql, sizeof(sql), "insert into Frames ( EventId, FrameId, TimeStamp, Delta ) values ( %d, %d, from_unixtime( %jd ), %s%ld.%02ld )", id, frames, (intmax_t) end_time.tv_sec, delta_time.positive?"":"-", delta_time.sec, delta_time.fsec );
+         if ( mysql_query( &dbconn, sql ) )
+         {
+             Error( "Can't insert frame: %s", mysql_error( &dbconn ) );
+@@ -191,7 +191,7 @@ Event::~Event()
+     struct DeltaTimeval delta_time;
+     DELTA_TIMEVAL( delta_time, end_time, start_time, DT_PREC_2 );
+ 
+-    snprintf( sql, sizeof(sql), "update Events set Name='%s%d', EndTime = from_unixtime( %ld ), Length = %s%ld.%02ld, Frames = %d, AlarmFrames = %d, TotScore = %d, AvgScore = %d, MaxScore = %d where Id = %d", monitor->EventPrefix(), id, end_time.tv_sec, delta_time.positive?"":"-", delta_time.sec, delta_time.fsec, frames, alarm_frames, tot_score, (int)(alarm_frames?(tot_score/alarm_frames):0), max_score, id );
++    snprintf( sql, sizeof(sql), "update Events set Name='%s%d', EndTime = from_unixtime( %jd ), Length = %s%ld.%02ld, Frames = %d, AlarmFrames = %d, TotScore = %d, AvgScore = %d, MaxScore = %d where Id = %d", monitor->EventPrefix(), id, (intmax_t) end_time.tv_sec, delta_time.positive?"":"-", delta_time.sec, delta_time.fsec, frames, alarm_frames, tot_score, (int)(alarm_frames?(tot_score/alarm_frames):0), max_score, id );
+     if ( mysql_query( &dbconn, sql ) )
+     {
+         Error( "Can't update event: %s", mysql_error( &dbconn ) );
+@@ -522,7 +522,7 @@ void Event::AddFramesInternal( int n_fra
+         DELTA_TIMEVAL( delta_time, *(timestamps[i]), start_time, DT_PREC_2 );
+ 
+         int sql_len = strlen(sql);
+-        snprintf( sql+sql_len, sizeof(sql)-sql_len, "( %d, %d, from_unixtime(%ld), %s%ld.%02ld ), ", id, frames, timestamps[i]->tv_sec, delta_time.positive?"":"-", delta_time.sec, delta_time.fsec );
++        snprintf( sql+sql_len, sizeof(sql)-sql_len, "( %d, %d, from_unixtime( %jd ), %s%ld.%02ld ), ", id, frames, (intmax_t) timestamps[i]->tv_sec, delta_time.positive?"":"-", delta_time.sec, delta_time.fsec );
+ 
+         frameCount++;
+     }
+@@ -573,7 +573,7 @@ void Event::AddFrame( Image *image, stru
+ 
+         Debug( 1, "Adding frame %d of type \"%s\" to DB", frames, frame_type );
+         static char sql[ZM_SQL_MED_BUFSIZ];
+-        snprintf( sql, sizeof(sql), "insert into Frames ( EventId, FrameId, Type, TimeStamp, Delta, Score ) values ( %d, %d, '%s', from_unixtime( %ld ), %s%ld.%02ld, %d )", id, frames, frame_type, timestamp.tv_sec, delta_time.positive?"":"-", delta_time.sec, delta_time.fsec, score );
++        snprintf( sql, sizeof(sql), "insert into Frames ( EventId, FrameId, Type, TimeStamp, Delta, Score ) values ( %d, %d, '%s', from_unixtime( %jd ), %s%ld.%02ld, %d )", id, frames, frame_type, (intmax_t) timestamp.tv_sec, delta_time.positive?"":"-", delta_time.sec, delta_time.fsec, score );
+         if ( mysql_query( &dbconn, sql ) )
+         {
+             Error( "Can't insert frame: %s", mysql_error( &dbconn ) );
+@@ -661,7 +661,7 @@ bool EventStream::loadInitialEventData( 
+ {
+     static char sql[ZM_SQL_SML_BUFSIZ];
+ 
+-    snprintf( sql, sizeof(sql), "select Id from Events where MonitorId = %d and unix_timestamp( EndTime ) > %ld order by Id asc limit 1", monitor_id, event_time );
++    snprintf( sql, sizeof(sql), "select Id from Events where MonitorId = %d and unix_timestamp( EndTime ) > %jd order by Id asc limit 1", monitor_id, (intmax_t) event_time );
+ 
+     if ( mysql_query( &dbconn, sql ) )
+     {
diff --git a/zoneminder/patches/patch-src_zm__monitor.cpp b/zoneminder/patches/patch-src_zm__monitor.cpp
new file mode 100644
index 0000000000..5c77a884e6
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm__monitor.cpp
@@ -0,0 +1,22 @@
+$NetBSD: patch-src_zm__monitor.cpp,v 1.1 2017/02/15 00:54:25 joerg Exp $
+
+--- src/zm_monitor.cpp.orig	2017-02-15 00:50:20.875646245 +0000
++++ src/zm_monitor.cpp
+@@ -149,7 +149,7 @@ bool Monitor::MonitorLink::connect()
+             return( false );
+         }
+         mem_ptr = (unsigned char *)shmat( shm_id, 0, 0 );
+-        if ( mem_ptr < 0 )
++        if ( mem_ptr == (void *)-1 )
+         {
+             Debug( 3, "Can't shmat link memory: %s", strerror(errno) );
+             connected = false;
+@@ -534,7 +534,7 @@ bool Monitor::connect() {
+         exit( -1 );
+     }
+     mem_ptr = (unsigned char *)shmat( shm_id, 0, 0 );
+-    if ( mem_ptr < 0 )
++    if ( mem_ptr == (void *)-1 )
+     {
+         Error( "Can't shmat: %s", strerror(errno));
+         exit( -1 );
diff --git a/zoneminder/patches/patch-src_zm__rtp__source.cpp b/zoneminder/patches/patch-src_zm__rtp__source.cpp
new file mode 100644
index 0000000000..d3075dcc32
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm__rtp__source.cpp
@@ -0,0 +1,24 @@
+$NetBSD: patch-src_zm__rtp__source.cpp,v 1.2 2018/07/14 15:03:57 gdt Exp $
+
+--- src/zm_rtp_source.cpp.orig	2015-02-05 02:52:37.000000000 +0000
++++ src/zm_rtp_source.cpp
+@@ -197,7 +197,7 @@ void RtpSource::updateRtcpData( uint32_t
+ {
+     struct timeval ntpTime = tvMake( ntpTimeSecs, suseconds_t((USEC_PER_SEC*(ntpTimeFrac>>16))/(1<<16)) );
+ 
+-    Debug( 5, "ntpTime: %ld.%06ld, rtpTime: %x", ntpTime.tv_sec, ntpTime.tv_usec, rtpTime );
++    Debug( 5, "ntpTime: %jd.%06ld, rtpTime: %x", (intmax_t) ntpTime.tv_sec, ntpTime.tv_usec, rtpTime );
+                                                      
+     if ( mBaseTimeNtp.tv_sec == 0 )
+     {
+@@ -207,8 +207,8 @@ void RtpSource::updateRtcpData( uint32_t
+     }
+     else if ( !mRtpClock )
+     {
+-        Debug( 5, "lastSrNtpTime: %ld.%06ld, rtpTime: %x", mLastSrTimeNtp.tv_sec, mLastSrTimeNtp.tv_usec, rtpTime );
+-        Debug( 5, "ntpTime: %ld.%06ld, rtpTime: %x", ntpTime.tv_sec, ntpTime.tv_usec, rtpTime );
++      Debug( 5, "lastSrNtpTime: %jd.%06ld, rtpTime: %x", (intmax_t) mLastSrTimeNtp.tv_sec, mLastSrTimeNtp.tv_usec, rtpTime );
++        Debug( 5, "ntpTime: %jd.%06ld, rtpTime: %x", (intmax_t) ntpTime.tv_sec, ntpTime.tv_usec, rtpTime );
+ 
+         double diffNtpTime = tvDiffSec( mBaseTimeNtp, ntpTime );
+         uint32_t diffRtpTime = rtpTime - mBaseTimeRtp;
diff --git a/zoneminder/patches/patch-src_zm__sdp.cpp b/zoneminder/patches/patch-src_zm__sdp.cpp
new file mode 100644
index 0000000000..ce66bfcd8d
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm__sdp.cpp
@@ -0,0 +1,15 @@
+$NetBSD: patch-src_zm__sdp.cpp,v 1.1 2017/09/09 07:55:31 alnsn Exp $
+
+Commit f5ef721: Add IP6 address type to valid types for ConnInfo.
+
+--- src/zm_sdp.cpp.orig	2015-02-05 02:52:37.000000000 +0000
++++ src/zm_sdp.cpp
+@@ -112,7 +112,7 @@ SessionDescriptor::ConnInfo::ConnInfo( c
+     if ( mNetworkType != "IN" )
+         throw Exception( "Invalid SDP network type '"+mNetworkType+"' in connection info '"+connInfo+"'" );
+     mAddressType = tokens[1];
+-    if ( mAddressType != "IP4" )
++    if ( mAddressType != "IP4" && mAddressType != "IP6" )
+         throw Exception( "Invalid SDP address type '"+mAddressType+"' in connection info '"+connInfo+"'" );
+     StringVector addressTokens = split( tokens[2], "/" );
+     if ( addressTokens.size() < 1 ) 
diff --git a/zoneminder/patches/patch-src_zm__thread.h b/zoneminder/patches/patch-src_zm__thread.h
new file mode 100644
index 0000000000..1d0d36d9d7
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm__thread.h
@@ -0,0 +1,41 @@
+$NetBSD: patch-src_zm__thread.h,v 1.4 2015/04/10 02:58:49 dsainty Exp $
+
+Fix build with Clang.
+
+pthread_t is opaque, and under NetBSD is a pointer.  It's being abused here,
+but the value is only used for logging, and casting pthread_self() is more
+portable than syscall(SYS_gettid).
+
+--- src/zm_thread.h.orig	2016-02-03 18:40:30.000000000 +0000
++++ src/zm_thread.h
+@@ -22,10 +22,8 @@
+ 
+ #include <unistd.h>
+ #include <pthread.h>
++#include <stdint.h>
+ #include <unistd.h>
+-#ifdef HAVE_SYS_SYSCALL_H
+-#include <sys/syscall.h>
+-#endif // HAVE_SYS_SYSCALL_H
+ #include "zm_exception.h"
+ #include "zm_utils.h"
+ #ifdef __FreeBSD__
+@@ -35,7 +33,7 @@
+ class ThreadException : public Exception
+ {
+ private:
+-#ifndef SOLARIS
++#if !defined(SOLARIS) && !defined(__NetBSD__)
+ pid_t pid() {
+     pid_t tid; 
+ #ifdef __FreeBSD__ 
+@@ -55,7 +53,8 @@ pid_t pid() {
+ pthread_t pid() { return( pthread_self() ); }
+ #endif
+ public:
+-    ThreadException( const std::string &message ) : Exception( stringtf( "(%d) "+message, (long int)pid() ) ) {
++ /* The type of pid() varies by OS */
++ ThreadException( const std::string &message ) : Exception( stringtf( ("(%jd) "+message).c_str, (intmax_t)pid() ) ) {
+     }
+ };
+ 
diff --git a/zoneminder/patches/patch-src_zm__timer.h b/zoneminder/patches/patch-src_zm__timer.h
new file mode 100644
index 0000000000..b6f9c575e8
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm__timer.h
@@ -0,0 +1,28 @@
+$NetBSD: patch-src_zm__timer.h,v 1.3 2015/04/10 02:58:49 dsainty Exp $
+
+Fix build with Clang.
+
+pthread_t is opaque, and under NetBSD is a pointer.  It's being abused here,
+but the value is only used for logging, and casting pthread_self() is more
+portable than syscall(SYS_gettid).
+
+--- src/zm_timer.h.orig	2016-02-03 18:40:30.000000000 +0000
++++ src/zm_timer.h
+@@ -33,7 +33,7 @@ private:
+     class TimerException : public Exception
+     {
+     private:
+-#ifndef SOLARIS
++#if !defined(SOLARIS) && !defined(__NetBSD__)
+         pid_t pid() {
+ 		pid_t tid;
+ #ifdef __FreeBSD__
+@@ -53,7 +53,7 @@ private:
+ 	pthread_t pid() { return( pthread_self() ); }
+ #endif
+     public:
+-        TimerException( const std::string &message ) : Exception( stringtf( "(%d) "+message, (long int)pid() ) )
++    TimerException( const std::string &message ) : Exception( stringtf( ("(%d) "+message).c_str, (intmax_t)pid() ) )
+         {
+         }
+     };
diff --git a/zoneminder/patches/patch-src_zm__utils.cpp b/zoneminder/patches/patch-src_zm__utils.cpp
new file mode 100644
index 0000000000..488fef6a4b
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm__utils.cpp
@@ -0,0 +1,26 @@
+$NetBSD: patch-src_zm__utils.cpp,v 1.1 2013/03/24 16:47:47 joerg Exp $
+
+--- src/zm_utils.cpp.orig	2011-06-21 09:19:11.000000000 +0000
++++ src/zm_utils.cpp
+@@ -38,21 +38,6 @@ const std::string stringtf( const char *
+     return( tempString );
+ }
+ 
+-const std::string stringtf( const std::string &format, ... )
+-{
+-    va_list ap;
+-    char tempBuffer[8192];
+-    std::string tempString;
+-
+-    va_start(ap, format );
+-    vsnprintf( tempBuffer, sizeof(tempBuffer), format.c_str() , ap );
+-    va_end(ap);
+-
+-    tempString = tempBuffer;
+-
+-    return( tempString );
+-}
+-
+ bool startsWith( const std::string &haystack, const std::string &needle )
+ {
+     return( haystack.substr( 0, needle.length() ) == needle );
diff --git a/zoneminder/patches/patch-src_zm__utils.h b/zoneminder/patches/patch-src_zm__utils.h
new file mode 100644
index 0000000000..ccc11dc139
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm__utils.h
@@ -0,0 +1,12 @@
+$NetBSD: patch-src_zm__utils.h,v 1.2 2015/04/05 08:51:08 dsainty Exp $
+
+--- src/zm_utils.h.orig	2015-04-01 17:20:39.840273017 +1300
++++ src/zm_utils.h	2015-04-01 17:28:57.376293647 +1300
+@@ -33,7 +33,6 @@
+ std::string replaceAll(std::string str, std::string from, std::string to);
+ 
+ const std::string stringtf( const char *format, ... );
+-const std::string stringtf( const std::string &format, ... );
+ 
+ bool startsWith( const std::string &haystack, const std::string &needle );
+ StringVector split( const std::string &string, const std::string chars, int limit=0 );
diff --git a/zoneminder/patches/patch-src_zm_comms_cpp b/zoneminder/patches/patch-src_zm_comms_cpp
new file mode 100644
index 0000000000..20a76bc9cb
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm_comms_cpp
@@ -0,0 +1,17 @@
+$NetBSD: patch-src_zm_comms_cpp,v 1.2 2013/03/24 16:47:47 joerg Exp $
+
+Don't attempt to include headers that don't exist.
+
+--- src/zm_comms.cpp.orig	2016-02-03 18:40:30.000000000 +0000
++++ src/zm_comms.cpp
+@@ -28,8 +28,10 @@
+ #if defined(BSD)
+ #include <stdlib.h>
+ #else
++#ifdef HAVE_ALLOCA_H
+ #include <alloca.h>
+ #endif
++#endif
+ 
+ //#include <unistd.h>
+ #include <sys/ioctl.h>
diff --git a/zoneminder/patches/patch-src_zm_comms_h b/zoneminder/patches/patch-src_zm_comms_h
new file mode 100644
index 0000000000..69e2d8821a
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm_comms_h
@@ -0,0 +1,36 @@
+$NetBSD: patch-src_zm_comms_h,v 1.3 2013/04/29 21:31:13 joerg Exp $
+
+extern "C" system headers.
+
+Include missing system headers for NetBSD.
+
+--- src/zm_comms.h.orig	2016-02-03 18:40:30.000000000 +0000
++++ src/zm_comms.h
+@@ -22,20 +22,24 @@
+ 
+ #include "zm_exception.h"
+ 
++extern "C" {
+ #include <string.h>
+ #include <unistd.h>
+ #include <netdb.h>
+ #include <errno.h>
+ #include <sys/un.h>
+-
+-#include <set>
+-#include <vector>
++#include <stdlib.h>
++#include <time.h>
+ 
+ #if defined(BSD)
+ #include <sys/uio.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+ #endif
++}
++
++#include <set>
++#include <vector>
+ 
+ class CommsException : public Exception
+ {
diff --git a/zoneminder/patches/patch-src_zm_logger_cpp b/zoneminder/patches/patch-src_zm_logger_cpp
new file mode 100644
index 0000000000..09d5c665c0
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm_logger_cpp
@@ -0,0 +1,16 @@
+$NetBSD: patch-src_zm_logger_cpp,v 1.5 2018/07/14 15:03:57 gdt Exp $
+
+If the system has syscall() but not SYS_gettid [E.g. NetBSD], don't attempt
+to use SYS_gettid.
+
+--- src/zm_logger.cpp.orig	2016-02-03 18:40:30.000000000 +0000
++++ src/zm_logger.cpp
+@@ -604,7 +604,7 @@ void Logger::logPrint( bool hex, const c
+ 
+             mysql_real_escape_string( &mDbConnection, escapedString, syslogStart, strlen(syslogStart) );
+ 			
+-            snprintf( sql, sizeof(sql), "insert into Logs ( TimeKey, Component, ServerId, Pid, Level, Code, Message, File, Line ) values ( %ld.%06ld, '%s', %d, %d, %d, '%s', '%s', '%s', %d )", timeVal.tv_sec, timeVal.tv_usec, mId.c_str(), staticConfig.SERVER_ID, tid, level, classString, escapedString, file, line );
++            snprintf( sql, sizeof(sql), "insert into Logs ( TimeKey, Component, ServerId, Pid, Level, Code, Message, File, Line ) values ( %jd.%06ld, '%s', %d, %d, %d, '%s', '%s', '%s', %d )", (intmax_t) timeVal.tv_sec, timeVal.tv_usec, mId.c_str(), staticConfig.SERVER_ID, tid, level, classString, escapedString, file, line );
+             if ( mysql_query( &mDbConnection, sql ) )
+             {
+                 databaseLevel( NOLOG );
diff --git a/zoneminder/patches/patch-src_zm_remote_camera_h b/zoneminder/patches/patch-src_zm_remote_camera_h
new file mode 100644
index 0000000000..1bdc9b675b
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm_remote_camera_h
@@ -0,0 +1,20 @@
+$NetBSD: patch-src_zm_remote_camera_h,v 1.4 2015/04/05 08:51:08 dsainty Exp $
+
+Declare sockaddr_in.
+
+--- src/zm_remote_camera.h.orig	2015-02-05 15:52:37.000000000 +1300
++++ src/zm_remote_camera.h	2015-04-01 17:56:10.736361360 +1300
+@@ -23,10 +23,13 @@
+ #include "zm_camera.h"
+ #include "zm_rtsp_auth.h"
+ 
++#include <netinet/in.h>
++
+ #include <string>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netdb.h>
++#include <time.h>
+ 
+ //
+ // Class representing 'remote' cameras, i.e. those which are
diff --git a/zoneminder/patches/patch-src_zm_signal_cpp b/zoneminder/patches/patch-src_zm_signal_cpp
new file mode 100644
index 0000000000..6b37dc6ede
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm_signal_cpp
@@ -0,0 +1,28 @@
+$NetBSD: patch-src_zm_signal_cpp,v 1.1 2015/04/10 02:58:49 dsainty Exp $
+
+Don't assume machine-dependent IP register details are available for any
+platform except Linux.  Only Linux is sure to have this style of mcontext_t.
+
+Resolves build on systems that have ucontext_t but an mcontext_t that
+doesn't look like Linux.
+
+--- src/zm_signal.cpp.orig	2016-02-03 18:40:30.000000000 +0000
++++ src/zm_signal.cpp
+@@ -69,13 +69,17 @@ RETSIGTYPE zm_die_handler(int signal)
+ 	#ifdef __FreeBSD_kernel__
+ 		ip = (void *)(uc->uc_mcontext.mc_rip);
+ 	#else
++		#if defined(__linux__)
+ 		ip = (void *)(uc->uc_mcontext.gregs[REG_RIP]);
++		#endif
+ 	#endif
+ #else
+ 	#ifdef __FreeBSD_kernel__
+ 		ip = (void *)(uc->uc_mcontext.mc_eip);
+ 	#else
++		#if defined(__linux__)
+ 		ip = (void *)(uc->uc_mcontext.gregs[REG_EIP]);
++		#endif
+ 	#endif
+ #endif				// defined(__x86_64__)
+ 
diff --git a/zoneminder/patches/patch-src_zm_thread_cpp b/zoneminder/patches/patch-src_zm_thread_cpp
new file mode 100644
index 0000000000..b02a0a5288
--- /dev/null
+++ b/zoneminder/patches/patch-src_zm_thread_cpp
@@ -0,0 +1,30 @@
+$NetBSD: patch-src_zm_thread_cpp,v 1.2 2013/03/24 16:47:47 joerg Exp $
+
+pthread_mutex_timedlock() is not available on NetBSD 5.0, and not required
+in ZoneMinder.
+
+--- src/zm_thread.cpp.orig	2011-06-21 09:19:11.000000000 +0000
++++ src/zm_thread.cpp
+@@ -72,6 +72,7 @@ void Mutex::lock()
+         throw ThreadException( stringtf( "Unable to lock pthread mutex: %s", strerror(errno) ) );
+ }
+ 
++#if 0
+ void Mutex::lock( int secs )
+ {
+     struct timespec timeout = getTimeout( secs );
+@@ -85,6 +86,7 @@ void Mutex::lock( double secs )
+     if ( pthread_mutex_timedlock( &mMutex, &timeout ) < 0 )
+         throw ThreadException( stringtf( "Unable to timedlock pthread mutex: %s", strerror(errno) ) );
+ }
++#endif
+ 
+ void Mutex::unlock()
+ {
+@@ -336,4 +338,5 @@ void Thread::kill( int signal )
+ }
+ 
+ // Some explicit template instantiations
+-#include "zm_threaddata.cpp"
++template class ThreadData<bool>;
++template class ThreadData<int>;
diff --git a/zoneminder/patches/patch-src_zmc_cpp b/zoneminder/patches/patch-src_zmc_cpp
new file mode 100644
index 0000000000..6d38092f9f
--- /dev/null
+++ b/zoneminder/patches/patch-src_zmc_cpp
@@ -0,0 +1,25 @@
+$NetBSD: patch-src_zmc_cpp,v 1.2 2013/03/24 16:47:47 joerg Exp $
+
+Use a more appropriate initialisation for a long, and use the definition out
+of <limits.h>, for portability.
+
+--- src/zmc.cpp.orig	2016-02-03 18:40:30.000000000 +0000
++++ src/zmc.cpp
+@@ -57,7 +57,7 @@ possible, this should run at more or les
+ 
+ #include <getopt.h>
+ #include <signal.h>
+-#if defined(__FreeBSD__)
++#if defined(__FreeBSD__) || defined(__NetBSD__)
+ #include <limits.h>
+ #else
+ #include <values.h>
+@@ -283,7 +283,7 @@ int main( int argc, char *argv[] )
+ 		sigprocmask( SIG_BLOCK, &block_set, 0 );
+ 		for ( int i = 0; i < n_monitors; i++ )
+ 		{
+-			long min_delay = MAXINT;
++			long min_delay = LONG_MAX;
+ 
+ 			gettimeofday( &now, NULL );
+ 			for ( int j = 0; j < n_monitors; j++ )
diff --git a/zoneminder/patches/patch-src_zmf.cpp b/zoneminder/patches/patch-src_zmf.cpp
new file mode 100644
index 0000000000..752ada9fd3
--- /dev/null
+++ b/zoneminder/patches/patch-src_zmf.cpp
@@ -0,0 +1,13 @@
+$NetBSD: patch-src_zmf.cpp,v 1.1 2017/02/15 00:54:25 joerg Exp $
+
+--- src/zmf.cpp.orig	2017-02-15 00:51:13.260940737 +0000
++++ src/zmf.cpp
+@@ -293,7 +293,7 @@ int main( int argc, char *argv[] )
+ 		Debug( 1, "Got image, writing to %s", path );
+ 
+ 		FILE *fd = 0;
+-		if ( (fd = fopen( path, "w" )) < 0 )
++		if ( (fd = fopen( path, "w" )) == 0 )
+ 		{
+ 			Error( "Can't fopen '%s': %s", path, strerror(errno) );
+ 			exit( -1 );
diff --git a/zoneminder/patches/patch-src_zmu.cpp b/zoneminder/patches/patch-src_zmu.cpp
new file mode 100644
index 0000000000..1f8f6155b6
--- /dev/null
+++ b/zoneminder/patches/patch-src_zmu.cpp
@@ -0,0 +1,43 @@
+$NetBSD: patch-src_zmu.cpp,v 1.2 2018/07/14 15:03:57 gdt Exp $
+
+--- src/zmu.cpp.orig	2015-02-05 02:52:37.000000000 +0000
++++ src/zmu.cpp
+@@ -457,7 +457,7 @@ int main( int argc, char *argv[] )
+ 				else
+ 				{
+ 					if ( have_output ) printf( "%c", separator );
+-					printf( "%ld.%02ld", timestamp.tv_sec, timestamp.tv_usec/10000 );
++					printf( "%jd.%02ld", (intmax_t) timestamp.tv_sec, timestamp.tv_usec/10000 );
+ 					have_output = true;
+ 				}
+ 			}
+@@ -724,12 +724,12 @@ int main( int argc, char *argv[] )
+ 						if ( monitor && monitor->connect() )
+ 						{
+ 							struct timeval tv = monitor->GetTimestamp();
+-							printf( "%4d%5d%6d%9d%11ld.%02ld%6d%6d%8d%8.2f\n",
++							printf( "%4d%5d%6d%9d%11jd.%02ld%6d%6d%8d%8.2f\n",
+ 								monitor->Id(),
+ 								function,
+ 								monitor->GetState(),
+ 								monitor->GetTriggerState(),
+-								tv.tv_sec, tv.tv_usec/10000,
++								(intmax_t) tv.tv_sec, tv.tv_usec/10000,
+ 								monitor->GetLastReadIndex(),
+ 								monitor->GetLastWriteIndex(),
+ 								monitor->GetLastEvent(),
+@@ -741,12 +741,12 @@ int main( int argc, char *argv[] )
+ 					else
+ 					{
+ 						struct timeval tv = { 0, 0 };
+-						printf( "%4d%5d%6d%9d%11ld.%02ld%6d%6d%8d%8.2f\n",
++						printf( "%4d%5d%6d%9d%11jd.%02ld%6d%6d%8d%8.2f\n",
+ 							mon_id,
+ 							function,
+ 							0,
+ 							0,
+-							tv.tv_sec, tv.tv_usec/10000,
++							(intmax_t) tv.tv_sec, tv.tv_usec/10000,
+ 							0,
+ 							0,
+ 							0,
diff --git a/zoneminder/patches/patch-web_Makefile.am b/zoneminder/patches/patch-web_Makefile.am
new file mode 100644
index 0000000000..e856cbb7fc
--- /dev/null
+++ b/zoneminder/patches/patch-web_Makefile.am
@@ -0,0 +1,13 @@
+$NetBSD: patch-web_Makefile.am,v 1.1 2013/03/24 16:47:47 joerg Exp $
+
+--- web/Makefile.am.orig	2013-03-24 15:56:43.000000000 +0000
++++ web/Makefile.am
+@@ -21,7 +21,7 @@ dist_web_DATA = \
+ 	index.php
+ 
+ # Yes, you are correct. This is a HACK!
+-install-data-hook:
++pkgsrc-disabled-install-data-hook:
+ 	( cd $(DESTDIR)$(webdir); chown $(webuser):$(webgroup) $(dist_web_DATA) )
+ 	( cd $(DESTDIR)$(webdir); chown -R $(webuser):$(webgroup) $(SUBDIRS) )
+ 	@-( cd $(DESTDIR)$(webdir); if ! test -e events; then mkdir events; fi; chown $(webuser):$(webgroup) events; chmod u+w events )
diff --git a/zoneminder/patches/patch-web_ajax_stream_php b/zoneminder/patches/patch-web_ajax_stream_php
new file mode 100644
index 0000000000..cb0044d5d5
--- /dev/null
+++ b/zoneminder/patches/patch-web_ajax_stream_php
@@ -0,0 +1,15 @@
+$NetBSD: patch-web_ajax_stream_php,v 1.2 2013/03/24 16:47:47 joerg Exp $
+
+http://www.zoneminder.com/forums/viewtopic.php?t=13322
+
+--- web/ajax/stream.php.orig	2011-06-27 11:14:00.000000000 +0000
++++ web/ajax/stream.php
+@@ -60,7 +60,7 @@ $wSockets = NULL;
+ $eSockets = NULL;
+ $numSockets = @socket_select( $rSockets, $wSockets, $eSockets, intval(MSG_TIMEOUT/1000), (MSG_TIMEOUT%1000)*1000 );
+ 
+-if ( $numSockets === false )
++if ( $numSockets === false || $numSockets < 0)
+ {
+     ajaxError( "socket_select failed: ".socket_strerror(socket_last_error()) );
+ }


Home | Main Index | Thread Index | Old Index