2025-06-25 13:51:12 +02:00
# Copyright (c) 2015-2025 Franco Fichtner <franco@opnsense.org>
2015-07-09 12:35:20 +02:00
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
all : check
2020-02-12 13:00:15 +01:00
.include "defaults.mk"
2018-03-17 10:31:14 +01:00
2021-02-05 10:01:14 +01:00
PLUGINSDIR ?= ${ .CURDIR } /../..
2021-02-04 22:58:17 +01:00
SCRIPTSDIR = ${ PLUGINSDIR } /Scripts
2021-02-05 10:01:14 +01:00
TEMPLATESDIR = ${ PLUGINSDIR } /Templates
2021-02-04 22:58:17 +01:00
.if exists(${GIT}) && exists(${GITVERSION})
PLUGIN_COMMIT != ${ GITVERSION }
.else
PLUGIN_COMMIT = unknown 0 undefined
.endif
PLUGIN_HASH ?= ${ PLUGIN_COMMIT :[3] }
2017-03-15 01:56:44 +01:00
PLUGIN_DESC = pkg-descr
2015-07-16 16:24:28 +02:00
PLUGIN_SCRIPTS = +PRE_INSTALL +POST_INSTALL \
+PRE_DEINSTALL +POST_DEINSTALL
2016-04-18 01:33:29 +02:00
2016-04-18 02:18:10 +02:00
PLUGIN_WWW ?= https://opnsense.org/
2023-10-10 14:09:42 +02:00
PLUGIN_LICENSE ?= BSD2CLAUSE
2023-01-18 14:57:05 +01:00
PLUGIN_TIER ?= 3
2016-04-20 07:45:08 +02:00
PLUGIN_REVISION ?= 0
2015-07-16 16:24:28 +02:00
2015-11-20 00:35:36 +01:00
PLUGIN_REQUIRES = PLUGIN_NAME PLUGIN_VERSION PLUGIN_COMMENT \
PLUGIN_MAINTAINER
2015-07-09 12:35:20 +02:00
check :
2015-11-20 00:35:36 +01:00
.for PLUGIN_REQUIRE in ${PLUGIN_REQUIRES}
. if "${${PLUGIN_REQUIRE}}" == ""
. error "${PLUGIN_REQUIRE} not set"
. endif
.endfor
2015-07-16 18:15:45 +02:00
2024-08-27 21:57:22 +02:00
_PLUGIN_COMMENT := ${ PLUGIN_COMMENT }
2020-04-07 02:29:38 +02:00
.if defined(_PLUGIN_DEVEL)
2020-04-06 14:50:01 +02:00
PLUGIN_DEVEL? : = ${_PLUGIN_DEVEL }
2020-04-07 02:29:38 +02:00
.else
PLUGIN_DEVEL ?= yes
.endif
2017-04-03 06:27:27 +02:00
2017-02-16 09:15:03 +01:00
PLUGIN_PREFIX ?= os-
2017-02-07 10:33:28 +01:00
PLUGIN_SUFFIX ?= -devel
2024-08-27 11:36:02 +02:00
.for CONFLICT in ${PLUGIN_CONFLICTS}
PLUGIN_CONFLICTS += ${ CONFLICT }${ PLUGIN_SUFFIX }
.endfor
2021-05-31 17:53:02 +02:00
.if !empty(PLUGIN_VARIANTS)
PLUGIN_VARIANT ?= ${ PLUGIN_VARIANTS :[1] }
2024-08-27 09:19:39 +02:00
.if "${PLUGIN_VARIANT}" == ""
.error Plugin variant cannot be empty
.else
2021-05-31 17:53:02 +02:00
PLUGIN_NAME := ${${ PLUGIN_VARIANT } _NAME }
.if empty(PLUGIN_NAME)
.error Plugin variant '${PLUGIN_VARIANT}' does not exist
.endif
2024-08-27 09:19:39 +02:00
.for _PLUGIN_VARIANT in ${PLUGIN_VARIANTS : N ${PLUGIN_VARIANT }}
2024-08-27 11:57:30 +02:00
PLUGIN_CONFLICTS += ${${ _PLUGIN_VARIANT } _NAME }${ PLUGIN_SUFFIX } \
${${ _PLUGIN_VARIANT } _NAME }
2021-05-31 17:53:02 +02:00
.endfor
PLUGIN_DEPENDS += ${${ PLUGIN_VARIANT } _DEPENDS }
2024-08-27 21:57:22 +02:00
.if !empty(${PLUGIN_VARIANT}_COMMENT)
_PLUGIN_COMMENT := ${${ PLUGIN_VARIANT } _COMMENT }
.endif
2021-05-31 17:53:02 +02:00
.endif
2024-08-27 09:23:52 +02:00
.endif
2021-05-31 17:53:02 +02:00
2022-11-02 09:50:13 +01:00
.if !empty(PLUGIN_NAME)
PLUGIN_DIR ?= ${ .CURDIR: S / \/ / /g:[-2] } /${ .CURDIR: S / \/ / /g:[-1] }
.endif
2018-01-08 22:56:38 +01:00
.if "${PLUGIN_DEVEL}" != ""
2024-08-27 11:57:30 +02:00
PLUGIN_CONFLICTS += ${ PLUGIN_NAME }
2021-05-31 16:30:29 +02:00
PLUGIN_PKGSUFFIX = ${ PLUGIN_SUFFIX }
2018-01-08 22:56:38 +01:00
.else
2024-08-27 11:57:30 +02:00
PLUGIN_CONFLICTS += ${ PLUGIN_NAME }${ PLUGIN_SUFFIX }
2021-05-31 16:30:29 +02:00
PLUGIN_PKGSUFFIX = # empty
2018-01-08 22:56:38 +01:00
.endif
2017-02-07 10:33:28 +01:00
2024-08-27 11:57:30 +02:00
PLUGIN_CONFLICTS := ${ PLUGIN_CONFLICTS : S /^/ ${ PLUGIN_PREFIX } /g: O }
2021-05-31 16:30:29 +02:00
PLUGIN_PKGNAME = ${ PLUGIN_PREFIX }${ PLUGIN_NAME }${ PLUGIN_PKGSUFFIX }
2024-08-27 11:36:02 +02:00
PLUGIN_PKGNAMES = ${ PLUGIN_CONFLICTS } ${ PLUGIN_PKGNAME }
2021-05-31 16:30:29 +02:00
2016-04-20 07:45:08 +02:00
.if "${PLUGIN_REVISION}" != "" && "${PLUGIN_REVISION}" != "0"
PLUGIN_PKGVERSION = ${ PLUGIN_VERSION } _${ PLUGIN_REVISION }
.else
PLUGIN_PKGVERSION = ${ PLUGIN_VERSION }
.endif
2015-07-09 12:35:20 +02:00
manifest : check
2017-02-07 10:33:28 +01:00
@echo "name: ${ PLUGIN_PKGNAME } "
2016-04-20 07:45:08 +02:00
@echo "version: \" ${ PLUGIN_PKGVERSION } \""
2017-02-07 10:33:28 +01:00
@echo "origin: opnsense/ ${ PLUGIN_PKGNAME } "
2024-08-27 21:57:22 +02:00
@echo "comment: \" ${ _PLUGIN_COMMENT } \""
2016-04-18 02:18:10 +02:00
@echo "maintainer: \" ${ PLUGIN_MAINTAINER } \""
@echo "categories: [ \" ${ .CURDIR: S / \/ / /g:[-2] } \" ]"
@echo "www: \" ${ PLUGIN_WWW } \""
@echo "prefix: \" ${ LOCALBASE } \""
@echo "licenselogic: \"single\""
2023-10-10 14:09:42 +02:00
@echo "licenses: [ \" ${ PLUGIN_LICENSE } \" ]"
2017-02-06 12:45:32 +01:00
.if defined(PLUGIN_NO_ABI)
2021-05-31 16:48:06 +02:00
@echo "arch : \"${OSABIPREFIX :tl }:*:*\""
@echo "abi: \" ${ OSABIPREFIX } :*:*\""
2017-02-06 12:45:32 +01:00
.endif
2016-04-20 07:45:08 +02:00
.if defined(PLUGIN_DEPENDS)
2015-07-09 12:35:20 +02:00
@echo "deps : {"
2015-07-17 08:31:03 +02:00
@for PLUGIN_DEPEND in ${ PLUGIN_DEPENDS } ; do \
2016-04-18 02:18:10 +02:00
if ! ${ PKG } query ' %n: { version: "%v", origin: "%o" }' \
$$ { PLUGIN_DEPEND} ; then \
echo ">>> Missing dependency: $$ {PLUGIN_DEPEND}" >& 2; \
exit 1; \
fi ; \
2015-07-09 12:35:20 +02:00
done
@echo "}"
2016-04-20 07:45:08 +02:00
.endif
2024-01-17 08:46:53 +01:00
@if [ -f ${WRKSRC}${LOCALBASE}/opnsense/version/${PLUGIN_NAME} ]; then \
echo "annotations $$(cat ${WRKSRC}${LOCALBASE}/opnsense/version/${PLUGIN_NAME})" ; \
2023-04-26 08:57:29 +02:00
fi
2015-07-09 12:35:20 +02:00
2025-06-25 13:51:12 +02:00
# Package scripts generation handling 101:
#
# "auto" generates automatic hooks that a plugin may need in order to
# reload on the fly. ".pre" and ".post" suffixed files can be used to
# extend the auto-generated content.
#
# "manual" overwrites the automatic script and also ignores ".pre" and
# ".post" files since they do not make sense in manual mode.
#
2025-06-30 13:31:31 +02:00
# Furthermore, variable replacement via %%PLUGIN_VAR%% takes place in
2025-06-25 13:51:12 +02:00
# "manual" as well as ".pre" and ".post" scripts provided.
scripts : check scripts -pre scripts -auto scripts -post scripts -manual
2016-09-22 23:35:24 +02:00
2016-11-28 13:07:04 +01:00
scripts-pre :
2015-07-16 16:24:28 +02:00
@for SCRIPT in ${ PLUGIN_SCRIPTS } ; do \
2016-11-28 13:07:04 +01:00
rm -f ${ DESTDIR } /$$ { SCRIPT} ; \
if [ -f ${ .CURDIR } /$$ { SCRIPT} .pre ] ; then \
2025-06-25 13:51:12 +02:00
sed ${ SED_REPLACE } -- ${ .CURDIR } /$$ { SCRIPT} .pre > \
${ DESTDIR } /$$ { SCRIPT} ; \
2015-07-16 16:24:28 +02:00
fi ; \
done
2016-09-22 23:35:24 +02:00
scripts-auto :
2016-09-23 07:46:26 +02:00
@if [ -d ${ .CURDIR } /src/etc/rc.syshook.d ] ; then \
for SYSHOOK in early start; do \
for FILE in $$ ( cd ${ .CURDIR } /src/etc/rc.syshook.d && \
find -s . -type f -name "*. $$ {SYSHOOK}" ) ; do \
echo ${ LOCALBASE } /etc/rc.syshook.d/$$ { FILE#./} >> \
${ DESTDIR } /+POST_INSTALL; \
done ; \
done ; \
fi
2016-09-22 23:48:46 +02:00
@if [ -d ${ .CURDIR } /src/opnsense/service/conf/actions.d ] ; then \
2017-08-21 10:02:08 +02:00
cat ${ TEMPLATESDIR } /actions.d >> ${ DESTDIR } /+POST_INSTALL; \
2016-09-22 23:48:46 +02:00
fi
2016-09-22 23:55:29 +02:00
@if [ -d ${ .CURDIR } /src/etc/rc.loader.d ] ; then \
for SCRIPT in +POST_INSTALL +POST_DEINSTALL; do \
2016-09-23 07:28:09 +02:00
cat ${ TEMPLATESDIR } /rc.loader.d >> \
${ DESTDIR } /$$ { SCRIPT} ; \
2016-09-22 23:55:29 +02:00
done ; \
fi
2017-08-09 15:25:41 +02:00
@if [ -d ${ .CURDIR } /src/opnsense/mvc/app/models ] ; then \
2017-08-15 18:52:11 +02:00
for FILE in $$ ( cd ${ .CURDIR } /src/opnsense/mvc/app/models && \
find -s . -depth 2 -type d) ; do \
2017-08-10 08:25:07 +02:00
cat ${ TEMPLATESDIR } /models | \
sed "s:%%ARG%%: $$ {FILE#./}:g" >> \
${ DESTDIR } /+POST_INSTALL; \
done ; \
2017-12-17 15:36:55 +01:00
for SCRIPT in +POST_INSTALL +POST_DEINSTALL; do \
2018-01-08 22:07:21 +01:00
cat ${ TEMPLATESDIR } /configure | \
sed "s:%%ARG%%: $$ {SCRIPT#+}:g" >> \
2017-12-17 15:36:55 +01:00
${ DESTDIR } /$$ { SCRIPT} ; \
done ; \
2017-08-09 15:25:41 +02:00
fi
2016-10-26 15:34:46 +02:00
@if [ -d ${ .CURDIR } /src/opnsense/service/templates ] ; then \
for FILE in $$ ( cd ${ .CURDIR } /src/opnsense/service/templates && \
2017-08-15 18:52:11 +02:00
find -s . -depth 2 -type d) ; do \
2017-08-10 08:25:07 +02:00
cat ${ TEMPLATESDIR } /templates | \
sed "s:%%ARG%%: $$ {FILE#./}:g" >> \
2016-10-26 15:34:46 +02:00
${ DESTDIR } /+POST_INSTALL; \
done ; \
fi
2024-01-17 08:46:53 +01:00
@if [ -d ${ .CURDIR } /src/opnsense/scripts/firmware/repos ] ; then \
2024-01-18 13:22:37 +01:00
for FILE in $$ ( cd ${ .CURDIR } /src && find -s \
opnsense/scripts/firmware/repos -type f) ; do \
2024-01-17 08:46:53 +01:00
echo " ${ LOCALBASE } / $$ {FILE#.}" >> ${ DESTDIR } /+POST_INSTALL; \
done \
fi
2016-09-22 23:35:24 +02:00
2016-11-28 13:07:04 +01:00
scripts-post :
@for SCRIPT in ${ PLUGIN_SCRIPTS } ; do \
if [ -f ${ .CURDIR } /$$ { SCRIPT} .post ] ; then \
2025-06-25 13:51:12 +02:00
sed ${ SED_REPLACE } -- ${ .CURDIR } /$$ { SCRIPT} .post >> \
${ DESTDIR } /$$ { SCRIPT} ; \
fi ; \
done
scripts-manual :
@for SCRIPT in ${ PLUGIN_SCRIPTS } ; do \
if [ -f ${ .CURDIR } /$$ { SCRIPT} ] ; then \
sed ${ SED_REPLACE } -- ${ .CURDIR } /$$ { SCRIPT} > \
${ DESTDIR } /$$ { SCRIPT} ; \
2016-11-28 13:07:04 +01:00
fi ; \
done
2015-07-09 17:48:28 +02:00
install : check
2017-02-16 09:15:03 +01:00
@mkdir -p ${ DESTDIR }${ LOCALBASE } /opnsense/version
2023-11-21 16:47:50 +01:00
@( cd ${ .CURDIR } /src 2> /dev/null && find * -type f) | while read FILE; do \
2024-08-20 07:26:52 +01:00
tar -C ${ .CURDIR } /src -cpf - " $$ {FILE}" | \
2015-07-16 16:24:28 +02:00
tar -C ${ DESTDIR }${ LOCALBASE } -xpf -; \
2020-02-12 13:00:15 +01:00
if [ " $$ {FILE%%.in}" != " $$ {FILE}" ] ; then \
sed -i '' ${ SED_REPLACE } " ${ DESTDIR }${ LOCALBASE } / $$ {FILE}" ; \
mv " ${ DESTDIR }${ LOCALBASE } / $$ {FILE}" " ${ DESTDIR }${ LOCALBASE } / $$ {FILE%%.in}" ; \
2023-12-07 10:59:32 +01:00
FILE = " $$ {FILE%%.in}" ; \
fi ; \
if [ " $$ {FILE%%.shadow}" != " $$ {FILE}" ] ; then \
mv " ${ DESTDIR }${ LOCALBASE } / $$ {FILE}" \
" ${ DESTDIR }${ LOCALBASE } / $$ {FILE%%.shadow}.sample" ; \
2020-02-12 13:00:15 +01:00
fi ; \
2024-11-22 10:33:49 +01:00
if [ " $$ {FILE%%/*}" == "man" ] ; then \
gzip -cn " ${ DESTDIR }${ LOCALBASE } / $$ {FILE}" > \
" ${ DESTDIR }${ LOCALBASE } / $$ {FILE}.gz" ; \
rm " ${ DESTDIR }${ LOCALBASE } / $$ {FILE}" ; \
fi ; \
2015-07-16 16:24:28 +02:00
done
2021-02-04 23:04:03 +01:00
@cat ${ TEMPLATESDIR } /version | sed ${ SED_REPLACE } > " ${ DESTDIR }${ LOCALBASE } /opnsense/version/ ${ PLUGIN_NAME } "
2015-07-16 16:24:28 +02:00
plist : check
2023-11-21 16:47:50 +01:00
@( cd ${ .CURDIR } /src 2> /dev/null && find * -type f) | while read FILE; do \
2020-02-12 13:00:15 +01:00
if [ -f " $$ {FILE}.in" ] ; then continue ; fi ; \
2023-12-07 10:59:32 +01:00
FILE = " $$ {FILE%%.in}" ; PREFIX = "" ; \
if [ " $$ {FILE%%.sample}" != " $$ {FILE}" ] ; then \
PREFIX = "@sample " ; \
elif [ " $$ {FILE%%.shadow}" != " $$ {FILE}" ] ; then \
FILE = " $$ {FILE%%.shadow}.sample" ; \
PREFIX = "@shadow " ; \
fi ; \
2024-11-22 10:33:49 +01:00
if [ " $$ {FILE%%/*}" == "man" ] ; then \
FILE = " $$ {FILE}.gz" ; \
fi ; \
2023-12-07 10:59:32 +01:00
echo " $$ {PREFIX} ${ LOCALBASE } / $$ {FILE}" ; \
2015-07-09 17:48:28 +02:00
done
2017-02-16 09:15:03 +01:00
@echo " ${ LOCALBASE } /opnsense/version/ ${ PLUGIN_NAME } "
2015-07-09 17:48:28 +02:00
2017-03-15 01:56:44 +01:00
description : check
@if [ -f ${ .CURDIR } /${ PLUGIN_DESC } ] ; then \
cat ${ .CURDIR } /${ PLUGIN_DESC } ; \
fi
2016-05-26 08:19:43 +02:00
metadata : check
@mkdir -p ${ DESTDIR }
@${ MAKE } DESTDIR = ${ DESTDIR } scripts
@${ MAKE } DESTDIR = ${ DESTDIR } manifest > ${ DESTDIR } /+MANIFEST
2017-03-15 01:56:44 +01:00
@${ MAKE } DESTDIR = ${ DESTDIR } description > ${ DESTDIR } /+DESC
2016-05-26 08:19:43 +02:00
@${ MAKE } DESTDIR = ${ DESTDIR } plist > ${ DESTDIR } /plist
2015-07-09 12:35:20 +02:00
collect : check
2023-11-21 16:47:50 +01:00
@( cd ${ .CURDIR } /src 2> /dev/null && find * -type f) | while read FILE; do \
2024-08-20 07:26:52 +01:00
tar -C ${ DESTDIR }${ LOCALBASE } -cpf - " $$ {FILE}" | \
2015-07-09 17:48:28 +02:00
tar -C ${ .CURDIR } /src -xpf -; \
done
2015-07-09 12:35:20 +02:00
remove : check
2023-11-21 16:47:50 +01:00
@( cd ${ .CURDIR } /src 2> /dev/null && find * -type f) | while read FILE; do \
2024-08-20 07:26:52 +01:00
rm -f " ${ DESTDIR }${ LOCALBASE } / $$ {FILE}" ; \
2015-07-09 17:48:28 +02:00
done
2023-11-21 16:47:50 +01:00
@( cd ${ .CURDIR } /src 2> /dev/null && find * -type d -depth) | while read DIR; do \
2024-08-20 07:26:52 +01:00
if [ -d " ${ DESTDIR }${ LOCALBASE } / $$ {DIR}" ] ; then \
rmdir " ${ DESTDIR }${ LOCALBASE } / $$ {DIR}" 2> /dev/null || true; \
2015-07-09 17:48:28 +02:00
fi ; \
done
2016-04-18 02:18:10 +02:00
WRKDIR ?= ${ .CURDIR } /work
2016-08-29 20:06:36 +02:00
WRKSRC ?= ${ WRKDIR } /src
PKGDIR ?= ${ WRKDIR } /pkg
2016-04-18 02:18:10 +02:00
2024-10-16 08:48:51 +02:00
ensure-workdirs :
@mkdir -p ${ WRKSRC } ${ PKGDIR }
2016-04-18 02:18:10 +02:00
package : check
2016-08-29 17:11:55 +02:00
@rm -rf ${ WRKSRC }
2016-04-18 02:18:10 +02:00
@mkdir -p ${ WRKSRC } ${ PKGDIR }
2017-08-03 14:38:33 +02:00
.for DEP in ${PLUGIN_DEPENDS}
@if ! ${PKG} info ${DEP} > /dev/null; then ${PKG} install -yA ${DEP}; fi
.endfor
2018-12-05 07:38:58 +01:00
@echo -n ">>> Staging files for ${PLUGIN_PKGNAME}-${PLUGIN_PKGVERSION}..."
2020-04-15 20:02:43 +02:00
@${MAKE} DESTDIR = ${ WRKSRC } install
2018-11-05 15:18:07 +01:00
@echo " done"
2021-02-04 23:04:03 +01:00
@echo ">>> Generated version info for ${ PLUGIN_PKGNAME } - ${ PLUGIN_PKGVERSION } :"
2024-01-17 08:46:53 +01:00
@cat ${ WRKSRC }${ LOCALBASE } /opnsense/version/${ PLUGIN_NAME }
2023-04-26 08:57:29 +02:00
@echo -n ">>> Generating metadata for ${ PLUGIN_PKGNAME } - ${ PLUGIN_PKGVERSION } ..."
@${ MAKE } DESTDIR = ${ WRKSRC } metadata
@echo " done"
2018-11-05 15:18:07 +01:00
@echo ">>> Packaging files for ${ PLUGIN_PKGNAME } - ${ PLUGIN_PKGVERSION } :"
2023-12-07 10:59:32 +01:00
@PORTSDIR= ${ PLUGINSDIR } ${ PKG } create -v -m ${ WRKSRC } -r ${ WRKSRC } \
2016-04-18 02:18:10 +02:00
-p ${ WRKSRC } /plist -o ${ PKGDIR }
2017-09-16 18:15:04 +02:00
upgrade-check : check
2017-08-15 18:52:11 +02:00
@rm -rf ${ PKGDIR }
upgrade : upgrade -check package
2018-01-08 22:56:38 +01:00
.for NAME in ${PLUGIN_PKGNAMES}
2018-01-08 22:04:13 +00:00
@if ${PKG} info ${NAME} 2> /dev/null > /dev/null; then \
2018-01-08 22:56:38 +01:00
${PKG} delete -fy ${NAME}; \
2017-09-16 18:12:27 +02:00
fi
2018-01-08 22:56:38 +01:00
.endfor
2022-05-11 12:08:31 +02:00
@${PKG} add ${PKGDIR}/*.pkg
2017-08-15 18:52:11 +02:00
2015-07-09 17:48:28 +02:00
mount : check
2015-07-16 16:24:28 +02:00
mount_unionfs ${ .CURDIR } /src ${ DESTDIR }${ LOCALBASE }
2015-07-09 17:48:28 +02:00
umount : check
umount -f "<above>: ${ .CURDIR } /src"
2015-07-09 12:35:20 +02:00
clean : check
2017-11-24 07:43:38 +00:00
@if [ -d ${ .CURDIR } /src ] ; then \
git reset -q ${ .CURDIR } /src && \
2017-09-23 15:11:17 +02:00
git checkout -f ${ .CURDIR } /src && \
2017-11-24 07:43:38 +00:00
git clean -xdqf ${ .CURDIR } /src; \
fi
2019-01-13 16:55:05 +01:00
@rm -rf ${ .CURDIR } /work
2015-07-09 12:35:20 +02:00
2017-09-18 20:43:12 +02:00
lint-desc : check
@if [ ! -f ${ .CURDIR } /${ PLUGIN_DESC } ] ; then \
echo ">>> Missing ${ PLUGIN_DESC } " ; exit 1; \
fi
2019-01-02 11:24:40 +01:00
lint-shell :
2020-02-12 15:56:53 +01:00
@for FILE in $$ ( find ${ .CURDIR } /src -name "*.sh" -type f) ; do \
2023-10-12 16:23:59 +02:00
if [ " $$ (head $$ {FILE} | grep -c '^#!\/')" == "0" ] ; then \
2020-02-12 15:56:53 +01:00
echo "Missing shebang in $$ {FILE}" ; exit 1; \
fi ; \
2024-08-20 07:26:52 +01:00
sh -n " $$ {FILE}" || exit 1; \
2020-02-12 15:56:53 +01:00
done
2019-01-02 11:24:40 +01:00
lint-xml :
@find ${ .CURDIR } /src \
2016-06-03 11:17:02 +02:00
-name "*.xml" -type f -print0 | xargs -0 -n1 xmllint --noout
2019-01-02 11:24:40 +01:00
2023-08-31 12:14:38 +02:00
lint-model :
@if [ -d ${ .CURDIR } /src/opnsense/mvc/app/models ] ; then for MODEL in $$ ( find ${ .CURDIR } /src/opnsense/mvc/app/models -depth 3 \
-name "*.xml" ) ; do \
2023-08-31 12:59:05 +02:00
( xmllint $$ { MODEL} --xpath '//*[@type and not(@type="ArrayField") and (not(Required) or Required="N") and Default]' 2> /dev/null | grep '^<' || true ) | while read LINE; do \
2023-08-31 12:14:38 +02:00
echo " $$ {MODEL}: $$ {LINE} has a spurious default value set" ; \
done ; \
2023-08-31 12:59:05 +02:00
( xmllint $$ { MODEL} --xpath '//*[@type and not(@type="ArrayField") and Default=""]' 2> /dev/null | grep '^<' || true ) | while read LINE; do \
2023-08-31 12:14:38 +02:00
echo " $$ {MODEL}: $$ {LINE} has an empty default value set" ; \
done ; \
( xmllint $$ { MODEL} --xpath '//*[@type and not(@type="ArrayField") and BlankDesc="None"]' 2> /dev/null | grep '^<' || true ) | while read LINE; do \
echo " $$ {MODEL}: $$ {LINE} blank description is the default" ; \
done ; \
( xmllint $$ { MODEL} --xpath '//*[@type and not(@type="ArrayField") and BlankDesc and Required="Y"]' 2> /dev/null | grep '^<' || true ) | while read LINE; do \
echo " $$ {MODEL}: $$ {LINE} blank description not applicable on required field" ; \
done ; \
( xmllint $$ { MODEL} --xpath '//*[@type and not(@type="ArrayField") and BlankDesc and Multiple="Y"]' 2> /dev/null | grep '^<' || true ) | while read LINE; do \
echo " $$ {MODEL}: $$ {LINE} blank description not applicable on multiple field" ; \
done ; \
2023-09-01 09:00:19 +02:00
( xmllint $$ { MODEL} --xpath '//*[@type and not(@type="ArrayField") and Multiple="N"]' 2> /dev/null | grep '^<' || true ) | while read LINE; do \
echo " $$ {MODEL}: $$ {LINE} Multiple=N is the default" ; \
done ; \
2023-08-31 12:59:05 +02:00
( xmllint $$ { MODEL} --xpath '//*[@type and not(@type="ArrayField") and OptionValues[default[not(@value)] or multiple[not(@value)] or required[not(@value)]]]' 2> /dev/null | grep '^<' || true ) | while read LINE; do \
echo " $$ {MODEL}: $$ {LINE} option element default/multiple/required without value attribute" ; \
done ; \
2023-08-31 12:14:38 +02:00
done ; fi
2024-09-13 11:30:23 +02:00
ACLBIN ?= ${ .CURDIR } /../../../core/Scripts/dashboard-acl.sh
lint-acl : check
.if exists(${ACLBIN})
2024-09-13 12:14:44 +02:00
@${ACLBIN} ${.CURDIR}/../../../core
2024-09-13 11:30:23 +02:00
.else
@echo "Did not find ACLBIN, please provide a core repository" ; exit 1
.endif
2019-01-02 11:24:40 +01:00
lint-exec : check
2019-06-24 07:51:57 +02:00
.for DIR in ${.CURDIR}/src/opnsense/scripts ${.CURDIR}/src/etc/rc.d ${.CURDIR}/src/etc/rc.syshook.d
2019-01-02 11:38:47 +01:00
.if exists(${DIR})
@find ${DIR} -type f ! -name "*.xml" -print0 | \
xargs -0 -t -n1 test -x || \
(echo "Missing executable permission in ${DIR}" ; exit 1)
.endif
.endfor
2019-01-02 11:24:40 +01:00
2021-10-11 12:24:55 +02:00
LINTBIN ?= ${ .CURDIR } /../../../core/contrib/parallel-lint/parallel-lint
2019-01-02 11:24:40 +01:00
lint-php : check
2021-10-11 12:24:55 +02:00
.if exists(${LINTBIN})
@if [ -d ${.CURDIR}/src ]; then ${LINTBIN} src; fi
.else
2024-08-21 11:32:11 +02:00
@echo "Did not find LINTBIN, please provide a core repository" ; exit 1
2021-10-11 12:24:55 +02:00
.endif
2016-06-03 11:17:02 +02:00
2024-09-13 11:30:23 +02:00
lint : lint -desc lint -shell lint -xml lint -model lint -acl lint -exec lint -php
2019-01-02 11:24:40 +01:00
2024-01-04 08:20:23 +01:00
plist-fix :
2016-09-27 09:25:24 +02:00
sweep : check
find ${ .CURDIR } /src -type f -name "*.map" -print0 | \
xargs -0 -n1 rm
find ${ .CURDIR } /src ! -name "*.min.*" ! -name "*.svg" \
! -name "*.ser" -type f -print0 | \
2021-02-04 22:58:17 +01:00
xargs -0 -n1 ${ SCRIPTSDIR } /cleanfile
2017-07-17 06:25:12 +02:00
find ${ .CURDIR } -type f -depth 1 -print0 | \
2021-02-15 09:52:10 +01:00
xargs -0 -n1 ${ SCRIPTSDIR } /cleanfile
2024-12-19 17:36:11 +01:00
glint : sweep style -fix plist -fix lint
2021-02-15 09:52:10 +01:00
revision :
2022-11-02 09:32:28 +01:00
@MAKE= ${ MAKE } ${ SCRIPTSDIR } /revbump.sh ${ .CURDIR }
2016-06-03 11:17:02 +02:00
2019-05-06 07:49:20 +02:00
STYLEDIRS ?= src/etc/inc src/opnsense
2018-01-03 06:16:39 +00:00
2016-10-21 19:59:26 +02:00
style : check
2016-11-12 08:23:13 +01:00
@: > ${ .CURDIR } /.style.out
2018-01-03 06:16:39 +00:00
.for STYLEDIR in ${STYLEDIRS}
@if [ -d ${.CURDIR}/${STYLEDIR} ]; then \
2021-02-05 10:01:14 +01:00
(phpcs --standard = ${ PLUGINSDIR } /ruleset.xml \
2018-01-03 06:16:39 +00:00
${ .CURDIR } /${ STYLEDIR } || true ) > \
${ .CURDIR } /.style.out; \
2016-11-12 08:23:13 +01:00
fi
2018-01-03 06:16:39 +00:00
.endfor
2016-10-21 19:59:26 +02:00
@echo -n "Total number of style warnings : "
@grep '| WARNING' ${ .CURDIR } /.style.out | wc -l
@echo -n "Total number of style errors: "
@grep '| ERROR' ${ .CURDIR } /.style.out | wc -l
@cat ${ .CURDIR } /.style.out
@rm ${ .CURDIR } /.style.out
style-fix : check
2018-01-03 06:16:39 +00:00
.for STYLEDIR in ${STYLEDIRS}
@if [ -d ${.CURDIR}/${STYLEDIR} ]; then \
2021-02-05 10:01:14 +01:00
phpcbf --standard = ${ PLUGINSDIR } /ruleset.xml \
2018-01-03 06:16:39 +00:00
${ .CURDIR } /${ STYLEDIR } || true; \
2016-11-12 08:23:13 +01:00
fi
2018-01-03 06:16:39 +00:00
.endfor
2016-10-21 19:59:26 +02:00
2018-04-06 05:27:29 +00:00
style-python : check
@if [ -d ${ .CURDIR } /src ] ; then \
pycodestyle --ignore= E501 ${ .CURDIR } /src || true; \
fi
2023-08-31 12:59:05 +02:00
style-model :
2025-07-02 10:45:40 +02:00
@if [ -d ${ .CURDIR } /src/opnsense/mvc/app/models ] ; then \
for MODEL in $$ ( find ${ .CURDIR } /src/opnsense/mvc/app/models -depth 3 \
-name "*.xml" ) ; do \
perl -i -pe 's/<default>(.*?)<\/default>/<Default>$$1<\/Default>/g' $$ { MODEL} ; \
perl -i -pe 's/<multiple>(.*?)<\/multiple>/<Multiple>$$1<\/Multiple>/g' $$ { MODEL} ; \
perl -i -pe 's/<required>(.*?)<\/required>/<Required>$$1<\/Required>/g' $$ { MODEL} ; \
perl -i -pe 's/<mask>(.*?)<\/mask>/<Mask>$$1<\/Mask>/g' $$ { MODEL} ; \
perl -i -pe 's/<asList>(.*?)<\/asList>/<AsList>$$1<\/AsList>/g' $$ { MODEL} ; \
done ; \
fi
2023-08-31 12:59:05 +02:00
2018-04-06 05:27:29 +00:00
test : check
@if [ -d ${ .CURDIR } /src/opnsense/mvc/tests ] ; then \
2024-01-17 08:46:53 +01:00
cd ${ LOCALBASE } /opnsense/mvc/tests && \
2018-04-06 05:27:29 +00:00
phpunit --configuration PHPunit.xml \
${ .CURDIR } /src/opnsense/mvc/tests; \
fi
2024-10-16 08:48:51 +02:00
commit : ensure -workdirs
2024-12-17 07:27:52 +01:00
@/bin/echo -n " ${ .CURDIR: C / \/ / /g:[-2] } / ${ .CURDIR: C / \/ / /g:[-1] } : " > \
2024-10-16 08:48:51 +02:00
${ WRKDIR } /.commitmsg && git commit -eF ${ WRKDIR } /.commitmsg .
2024-01-04 08:20:23 +01:00
.PHONY : check plist -fix