pkgsrc/security/zoneminder/Makefile
gdt 44e55c296f security/zoneminder: Re-eanable a SUBST
I was confused about which SUBST was not ok, and had removed two, when
only one was troubled.

This is probably still not quite right, but zoneminder needs an update
of multiple major versions anyway.

Thanks to rillig@ for review and hints.
2020-09-01 00:48:01 +00:00

272 lines
9.9 KiB
Makefile

# $NetBSD: Makefile,v 1.54 2020/09/01 00:48:01 gdt Exp $
VERSION= 1.29.0
# Sometimes the distfile unpacks to ZoneMinder and sometimes zoneminder.
NAME_DIST= ZoneMinder
NAME_LOWER= zoneminder
PKGREVISION= 4
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
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}
PRINT_PLIST_AWK+= { gsub(/${ZM_HTTPD_ROOT:S|/|\\/|g}/, "$${ZM_HTTPD_ROOT}") }
OWN_DIRS+= ${ZM_HTTPD_ROOT:Q}
ZM_HTTPD_CGIBIN= libexec/zoneminder/cgi-bin
PLIST_SUBST+= ZM_HTTPD_CGIBIN=${ZM_HTTPD_CGIBIN:Q}
PRINT_PLIST_AWK+= { gsub(/${ZM_HTTPD_CGIBIN:S|/|\\/|g}/, "$${ZM_HTTPD_CGIBIN}") }
BUILD_DEFS+= ZM_HTTPD_CGIBIN
OWN_DIRS+= ${ZM_HTTPD_CGIBIN:Q}
# Omit patchfiles from PLIST.
PRINT_PLIST_AWK+= /.orig$$/ { next; }
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
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
PRINT_PLIST_AWK+= { gsub(/^.+\/examples\/rc.d/, "$${PLIST.rcd}&"); }
.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"