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