Warning: there may be occasional oddness due to css and blog edits. **KNOWN ISSUE: possible hidden text**

Wednesday, March 31, 2021

Minetest better

minetest game example screenshot
Minetest gallery pic

This post has been revisited a couple times but I feel it is in its final form as I chose to continue with the development version instead of worrying about something I cannot control.

October 2020

There is a game in our ports collection which I spent far too many hours playing due to being temporarily out of work (but not jobless) beyond my control beginning mid March 2020.  It gave me something to do, to fill the empty, and I played it from a vanilla ports install.  When I say "vanilla ports install" what I mean is that I did not modify anything about it except for the configuration exposed by the person who ported it to FreeBSD.  This 'vanilla install' became customized when I saw that a newer version was available to the wider gamer community but had not yet been updated for FreeBSD.

I did my best to get it to work but discovered that some of the patches automatically applied did not need to be used, they failed to be applied to the newer version.  This was just the beginning of my tinkering to get minetest to function as well as possible.  I am sure that using a bundled, abbreviated, adequately functional component would be less efficient than to use the full version which may be available from ports.  I discovered this by investigating the various exposed options I could tick to know what they were about, and seeing others described by the Linux devs which were not.

The overview of the change, the left is how it appeared on October 3, 2020 at svnweb.freebsd.org and the right is how the Makefile was on my box then, the changes emphasized with highlighting.

# Created by: Dmitry Marakasov <amdmi3@FreeBSD.org>						# Created by: Dmitry Marakasov <amdmi3@FreeBSD.org>
# $FreeBSD$											# $FreeBSD$

PORTNAME=	minetest									PORTNAME=	minetest
PORTVERSION=    5.3.0										PORTVERSION=    5.3.0
CATEGORIES=     games										CATEGORIES=     games

MAINTAINER=	amdmi3@FreeB									MAINTAINER=	amdmi3@FreeBSD.org
COMMENT=	Near-infinite-world block sandbox game						COMMENT=	Near-infinite-world block sandbox game

LICENSE=	LGPL21+										LICENSE=	LGPL21+
LICENSE_FILE=	${WRKSRC}/doc/lgpl-2.1.txt							LICENSE_FILE=	${WRKSRC}/doc/lgpl-2.1.txt

LIB_DEPENDS=	libsqlite3.so:databases/sqlite3 \						LIB_DEPENDS=	libsqlite3.so:databases/sqlite3 \
		libgmp.so:math/gmp				|       					libgmp.so:math/gmp \
								>       					libjsoncpp.so:devel/jsoncpp

USE_GITHUB=	yes										USE_GITHUB=	yes
GH_ACCOUNT=	minetest									GH_ACCOUNT=	minetest

USES=		cmake compiler:c11 iconv:wchar_t						USES=		cmake compiler:c11 iconv:wchar_t
CMAKE_ARGS=	-DCUSTOM_MANDIR="${PREFIX}/man" \						CMAKE_ARGS=	-DCUSTOM_MANDIR="${PREFIX}/man" \
		-DCUSTOM_EXAMPLE_CONF_DIR="${PREFIX}/etc"	|       					-DCUSTOM_EXAMPLE_CONF_DIR="${PREFIX}/etc" \
								>       					-DENABLE_SYSTEM_JSONCPP=ON \
								>       					-DJSON_INCLUDE_DIR=/usr/local/include/json \
								>       					-DCMAKE_BUILD_TYPE=MinSizeRel \
								>       					-DOPENGL_GL_PREFERENCE=LEGACY \
								>       					-DENABLE_SYSTEM_GMP=ON

LDFLAGS_i386=	-Wl,-znotext									LDFLAGS_i386=	-Wl,-znotext

PORTDATA=	*										PORTDATA=	*
PORTDOCS=	*										PORTDOCS=	*

OPTIONS_DEFINE=	CURL SOUND FREETYPE NCURSES LUAJIT \						OPTIONS_DEFINE=	CURL SOUND FREETYPE NCURSES LUAJIT \
		DOCS EXAMPLES NLS										DOCS EXAMPLES NLS
OPTIONS_MULTI=	COMP										OPTIONS_MULTI=	COMP
OPTIONS_GROUP=	DATABASE									OPTIONS_GROUP=	DATABASE

COMP_DESC=		Software components							COMP_DESC=		Software components
OPTIONS_MULTI_COMP=	CLIENT SERVER								OPTIONS_MULTI_COMP=	CLIENT SERVER

DATABASE_DESC=		Database support							DATABASE_DESC=		Database support
OPTIONS_GROUP_DATABASE=	PGSQL LEVELDB REDIS SPATIAL						OPTIONS_GROUP_DATABASE=	PGSQL LEVELDB REDIS SPATIAL

OPTIONS_DEFAULT=	CLIENT SERVER \								OPTIONS_DEFAULT=	CLIENT SERVER \
			CURL SOUND FREETYPE NCURSES LUAJIT								CURL SOUND FREETYPE NCURSES LUAJIT
OPTIONS_EXCLUDE_powerpc64=	LUAJIT								OPTIONS_EXCLUDE_powerpc64=	LUAJIT
OPTIONS_SUB=		yes									OPTIONS_SUB=		yes

CLIENT_DESC=		Build client								CLIENT_DESC=		Build client
CLIENT_CMAKE_BOOL=	BUILD_CLIENT								CLIENT_CMAKE_BOOL=	BUILD_CLIENT
CLIENT_LIB_DEPENDS=	libpng.so:graphics/png \						CLIENT_LIB_DEPENDS=	libpng.so:graphics/png \
			libIrrlicht.so:x11-toolkits/irrlicht					libIrrlicht.so:x11-toolkits/irrlicht
CLIENT_USES=		gl jpeg xorg								CLIENT_USES=		gl jpeg xorg
CLIENT_USE=		GL=gl XORG=x11,xext,xxf86vm						CLIENT_USE=		GL=gl XORG=x11,xext,xxf86vm
SERVER_DESC=		Build server								SERVER_DESC=		Build server
SERVER_CMAKE_BOOL=	BUILD_SERVER								SERVER_CMAKE_BOOL=	BUILD_SERVER

CURL_DESC=		Enable cURL support for fetching media					CURL_DESC=		Enable cURL support for fetching media
CURL_CMAKE_BOOL=	ENABLE_CURL								CURL_CMAKE_BOOL=	ENABLE_CURL
CURL_LIB_DEPENDS=	libcurl.so:ftp/curl							CURL_LIB_DEPENDS=	libcurl.so:ftp/curl
SOUND_DESC=		Enable sound								SOUND_DESC=		Enable sound
SOUND_CMAKE_BOOL=	ENABLE_SOUND								SOUND_CMAKE_BOOL=	ENABLE_SOUND
FREETYPE_DESC=		Support for TrueType fonts with unicode					FREETYPE_DESC=		Support for TrueType fonts with unicode
FREETYPE_CMAKE_BOOL=	ENABLE_FREETYPE								FREETYPE_CMAKE_BOOL=	ENABLE_FREETYPE
FREETYPE_LIB_DEPENDS=	libfreetype.so:print/freetype2						FREETYPE_LIB_DEPENDS=	libfreetype.so:print/freetype2
NCURSES_DESC=		Enable ncurses console							NCURSES_DESC=		Enable ncurses console
NCURSES_CMAKE_BOOL=	ENABLE_CURSES								NCURSES_CMAKE_BOOL=	ENABLE_CURSES
NCURSES_USES=		ncurses									NCURSES_USES=		ncurses

LUAJIT_DESC=		LuaJIT support								LUAJIT_DESC=		LuaJIT support
LUAJIT_CMAKE_BOOL=	ENABLE_LUAJIT REQUIRE_LUAJIT						LUAJIT_CMAKE_BOOL=	ENABLE_LUAJIT REQUIRE_LUAJIT
LUAJIT_LIB_DEPENDS=	libluajit-5.1.so:lang/luajit						LUAJIT_LIB_DEPENDS=	libluajit-5.1.so:lang/luajit

PGSQL_USES=		pgsql									PGSQL_USES=		pgsql
PGSQL_CMAKE_BOOL=	ENABLE_POSTGRESQL							PGSQL_CMAKE_BOOL=	ENABLE_POSTGRESQL
LEVELDB_DESC=		Enable LevelDB backend							LEVELDB_DESC=		Enable LevelDB backend
LEVELDB_CMAKE_BOOL=	ENABLE_LEVELDB								LEVELDB_CMAKE_BOOL=	ENABLE_LEVELDB
LEVELDB_LIB_DEPENDS=	libleveldb.so:databases/leveldb						LEVELDB_CMAKE_BOOL=	ENABLE_LEVELDB
REDIS_DESC=		Enable Redis backend							REDIS_DESC=		Enable Redis backend
REDIS_CMAKE_BOOL=	ENABLE_REDIS								REDIS_CMAKE_BOOL=	ENABLE_REDIS
REDIS_LIB_DEPENDS=	libhiredis.so:databases/hiredis						REDIS_LIB_DEPENDS=	libhiredis.so:databases/hiredis
SPATIAL_DESC=		Enable SpatialIndex AreaStore backend					SPATIAL_DESC=		Enable SpatialIndex AreaStore backend
SPATIAL_LIB_DEPENDS=	libspatialindex.so:devel/spatialindex					SPATIAL_LIB_DEPENDS=	libspatialindex.so:devel/spatialindex
SPATIAL_CMAKE_BOOL=	ENABLE_SPATIAL								SPATIAL_CMAKE_BOOL=	ENABLE_SPATIAL

NLS_CMAKE_BOOL=		ENABLE_GETTEXT								NLS_CMAKE_BOOL=		ENABLE_GETTEXT
NLS_USES=		gettext									NLS_USES=		gettext
NLS_LDFLAGS=		-L${LOCALBASE}/lib							NLS_LDFLAGS=		-L${LOCALBASE}/lib

.include <bsd.port.options.mk>									.include <bsd.port.options.mk>

.if ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSOUND}						.if ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSOUND}
USES+=		openal										USES+=		openal
LIB_DEPENDS+=	libvorbis.so:audio/libvorbis \							LIB_DEPENDS+=	libvorbis.so:audio/libvorbis \
		libogg.so:audio/libogg										libogg.so:audio/libogg
.endif												.endif

.if ${PORT_OPTIONS:MSERVER}									.if ${PORT_OPTIONS:MSERVER}
USE_RC_SUBR=	${PORTNAME}									USE_RC_SUBR=	${PORTNAME}
USERS=		${PORTNAME}									USERS=		${PORTNAME}
GROUPS=		${PORTNAME}									GROUPS=		${PORTNAME}
.endif												.endif

# hacky way to not bring irrlicht and X11 depends for server only				# hacky way to not bring irrlicht and X11 depends for server only
.if ! ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSERVER}					.if ! ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSERVER}
BUILD_DEPENDS+=	${NONEXISTENT}:x11-toolkits/irrlicht:patch					BUILD_DEPENDS+=	${NONEXISTENT}:x11-toolkits/irrlicht:patch
IRRLICHT_INCLUDE_DIR=	`${MAKE} -C ${PORTSDIR}/x11-toolkits/irrlicht -V WRKSRC`/include	IRRLICHT_INCLUDE_DIR=	`${MAKE} -C ${PORTSDIR}/x11-toolkits/irrlicht -V WRKSRC`/include
CMAKE_ARGS+=	-DIRRLICHT_INCLUDE_DIR:STRING="${IRRLICHT_INCLUDE_DIR}"				CMAKE_ARGS+=	-DIRRLICHT_INCLUDE_DIR:STRING="${IRRLICHT_INCLUDE_DIR}"
EXTRA_PATCHES+=	${FILESDIR}/extra-patch-irrlichtdepend						EXTRA_PATCHES+=	${FILESDIR}/extra-patch-irrlichtdepend
.endif												.endif

post-extract:											post-extract:
# make sure no bundled gmp is used								# make sure no bundled gmp is used
	@${RM} -rf ${WRKSRC}/lib/gmp									@${RM} -rf ${WRKSRC}/lib/gmp
# bundled jsoncpp is OK, see comment in cmake/Modules/FindJson.cmake				# bundled jsoncpp is OK, see comment in cmake/Modules/FindJson.cmake
#	(not sure if it affects FreeBSD, but too lazy to investigate)				#	(not sure if it affects FreeBSD, but too lazy to investigate)
# bundled lua is OK, there's no option to use system one					# bundled lua is OK, there's no option to use system one

post-patch:											post-patch:
	@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \						@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \
		${WRKSRC}/cmake/Modules/*.cmake									${WRKSRC}/cmake/Modules/*.cmake

.include <bsd.port.mk>										.include <bsd.port.mk>


In addition to the above adjustments to the Makefile, there may be a patch file which must be removed or hidden in order for my modified build to succeed.  The file is /usr/ports/games/files/patch-src_CMakeLists.txt

As you can see, my preference is for those things installed within the system as opposed to those which may be bundled as part of the tarball.  As yet I have not absolutely verified or conclusively tested whether the changes I made actually result in a speedier or more efficient minetest executable.  Take the above as you wish, choose to use it as described but I suggest caution if you further adjust the modifications.  Specifically, the LIB_DEPENDS should in most cases have a matching CMAKE_ARGS equivalent.

I believe the iconv:wchar_t which I removed relates to languages which would need wide characters, and this allows for conversions which may be necessary for that situation.  I will not be needing wide characters for my singleplayer or client gameplay, so that is safe for me to excise.  I do not know exactly how the cmake compiler:c++11-lang definition changes the way it is built but it is the one that works for me and my other adjustments.  The other CMAKE_ARGS item, -DCMAKE_BUILD_TYPE=MinSizeRel is there because I believe it is an improvement, it builds with it but I do not know exactly what its function or change is.

I would like to make a proper comparison between the vanilla install and my modification but this needs a bit more research and possibly additional software tools for testing.

Had I used portlint in the minetest directory at any time during my modification, I would have discovered a mistake in the original Makefile.  A report from portlint indicates that the USES= line should appear before any USE_ lines which in this specific example is USE_GITHUB=yes so if poudriere is used with portlint=yes, it may deny building.  Change this in the Makefile unless it gets fixed by the port maintainer first, but then make note that my Makefile had the flaw and so do not restore that flaw by copying it from above.

Update - March 2021

The port maintainer has since adopted some changes with recent updates to minetest by upstream causing this port to be reexamined.  I have also decided to look over my changes and how they relate to the current Makefile and try to make any possible improvements for myself which would enhance performance.  I am also going to submit a few bug reports for this port so that my changes can be affected officially.  The primary one being that the patch I remove is not necessary because it canbe accomplished properly by cmake arguements.  I may have missed some things or made slightly incorrect adjustments my first time through, even though the changes may have been appropriate and correct aside from syntax. So lets see how the current modified Makefile looks as the comparison below illustrates today, March 30, 2021.

First the hard-coded default method which is similar to my previous modification from back in October.

# Created by: Dmitry Marakasov <amdmi3@FreeBSD.org>						# Created by: Dmitry Marakasov <amdmi3@FreeBSD.org>
# $FreeBSD$												# $FreeBSD$

PORTNAME=	minetest										PORTNAME=	minetest
PORTVERSION=	5.4.0											PORTVERSION=	5.4.0
PORTREVISION=	1											PORTREVISION=	1
CATEGORIES=	games											CATEGORIES=	games

MAINTAINER=	amdmi3@FreeBSD.org									MAINTAINER=	amdmi3@FreeBSD.org
COMMENT=	Near-infinite-world block sandbox game							COMMENT=	Near-infinite-world block sandbox game

LICENSE=	LGPL21+											LICENSE=	LGPL21+
LICENSE_FILE=	${WRKSRC}/doc/lgpl-2.1.txt								LICENSE_FILE=	${WRKSRC}/doc/lgpl-2.1.txt

LIB_DEPENDS=	libsqlite3.so:databases/sqlite3 \						|       LIB_DEPENDS=	libgmp.so:math/gmp \
		libgmp.so:math/gmp \								|       		libjsoncpp.so:devel/jsoncpp \
		libjsoncpp.so:devel/jsoncpp							|       		libsqlite3.so:databases/sqlite3

USE_GITHUB=	yes										<
GH_ACCOUNT=	minetest									<
												<
USES=		cmake compiler:c11 iconv:wchar_t							USES=		cmake compiler:c11 iconv:wchar_t
CMAKE_ARGS=	-DCUSTOM_MANDIR="${PREFIX}/man" \						|       CMAKE_ARGS=	-DBUILD_UNITTESTS="FALSE" \
												>       		-DCMAKE_BUILD_TYPE="MinSizeRel" \
		-DCUSTOM_EXAMPLE_CONF_DIR="${PREFIX}/etc" \								-DCUSTOM_EXAMPLE_CONF_DIR="${PREFIX}/etc" \
		-DENABLE_SYSTEM_JSONCPP=ON							|       		-DCUSTOM_MANDIR="${PREFIX}/man" \
												>       		-DENABLE_SYSTEM_GMP="ON" \
												>       		-DENABLE_SYSTEM_JSONCPP="ON" \
												>       		-DJSON_INCLUDE_DIR="${PREFIX}/include/jsoncpp" \
												>       		-DOPENGL_GL_PREFERENCE="GLVND" \
												>       		-DREQUIRE_LUAJIT="ON"
												>       #		-DVERSION_EXTRA="_${PORTREVISION}"
												>       # OpenGL_GL_PREFERENCE Allowed values are 'GLVND' and 'LEGACY'
												>       # See CMake Policy CMP0072 for reference. GLVND is broken on some nvidia setups, so use LEGACY instead.

												>       USE_GITHUB=	yes
												>       GH_ACCOUNT=	minetest
												>
LDFLAGS_i386=	-Wl,-znotext										LDFLAGS_i386=	-Wl,-znotext

PORTDATA=	*											PORTDATA=	*
PORTDOCS=	*											PORTDOCS=	*

OPTIONS_DEFINE=	CURL SOUND FREETYPE NCURSES LUAJIT \						|       OPTIONS_DEFINE=	CURL DOCS EXAMPLES FREETYPE LUAJIT NCURSES NLS SOUND
		DOCS EXAMPLES NLS								<
OPTIONS_MULTI=	COMP											OPTIONS_MULTI=	COMP
OPTIONS_GROUP=	DATABASE										OPTIONS_GROUP=	DATABASE

COMP_DESC=		Software components								COMP_DESC=		Software components
OPTIONS_MULTI_COMP=	CLIENT SERVER									OPTIONS_MULTI_COMP=	CLIENT SERVER

DATABASE_DESC=		Database support								DATABASE_DESC=		Database support
OPTIONS_GROUP_DATABASE=	PGSQL LEVELDB REDIS SPATIAL						|       OPTIONS_GROUP_DATABASE=	LEVELDB PGSQL REDIS SPATIAL

OPTIONS_DEFAULT=	CLIENT SERVER \								|       OPTIONS_DEFAULT=	CLIENT CURL FREETYPE LUAJIT NCURSES SERVER SOUND
			CURL SOUND FREETYPE NCURSES LUAJIT					<
OPTIONS_SUB=		yes										OPTIONS_SUB=		yes

CLIENT_DESC=		Build client									CLIENT_DESC=		Build client
CLIENT_CMAKE_BOOL=	BUILD_CLIENT									CLIENT_CMAKE_BOOL=	BUILD_CLIENT
CLIENT_LIB_DEPENDS=	libpng.so:graphics/png \						|       CLIENT_LIB_DEPENDS=	libIrrlicht.so:x11-toolkits/irrlicht \
			libIrrlicht.so:x11-toolkits/irrlicht					|       			libpng.so:graphics/png
CLIENT_USES=		gl jpeg xorg									CLIENT_USES=		gl jpeg xorg
CLIENT_USE=		GL=gl XORG=x11,xext,xxf86vm						|       CLIENT_USE=		GL=gl \
												>       			XORG=x11,xext,xxf86vm
SERVER_DESC=		Build server									SERVER_DESC=		Build server
SERVER_CMAKE_BOOL=	BUILD_SERVER									SERVER_CMAKE_BOOL=	BUILD_SERVER

CURL_DESC=		Enable cURL support for fetching media						CURL_DESC=		Enable cURL support for fetching media
CURL_CMAKE_BOOL=	ENABLE_CURL									CURL_CMAKE_BOOL=	ENABLE_CURL
CURL_LIB_DEPENDS=	libcurl.so:ftp/curl								CURL_LIB_DEPENDS=	libcurl.so:ftp/curl
SOUND_DESC=		Enable sound									SOUND_DESC=		Enable sound
SOUND_CMAKE_BOOL=	ENABLE_SOUND									SOUND_CMAKE_BOOL=	ENABLE_SOUND
FREETYPE_DESC=		Support for TrueType fonts with unicode						FREETYPE_DESC=		Support for TrueType fonts with unicode
FREETYPE_CMAKE_BOOL=	ENABLE_FREETYPE									FREETYPE_CMAKE_BOOL=	ENABLE_FREETYPE
FREETYPE_LIB_DEPENDS=	libfreetype.so:print/freetype2							FREETYPE_LIB_DEPENDS=	libfreetype.so:print/freetype2
NCURSES_DESC=		Enable ncurses console								NCURSES_DESC=		Enable ncurses console
NCURSES_CMAKE_BOOL=	ENABLE_CURSES									NCURSES_CMAKE_BOOL=	ENABLE_CURSES
NCURSES_USES=		ncurses										NCURSES_USES=		ncurses

LUAJIT_DESC=		LuaJIT support									LUAJIT_DESC=		LuaJIT support
LUAJIT_CMAKE_BOOL=	ENABLE_LUAJIT REQUIRE_LUAJIT							LUAJIT_CMAKE_BOOL=	ENABLE_LUAJIT REQUIRE_LUAJIT
LUAJIT_LIB_DEPENDS=	libluajit-5.1.so:lang/luajit-openresty						LUAJIT_LIB_DEPENDS=	libluajit-5.1.so:lang/luajit-openresty

PGSQL_USES=		pgsql										PGSQL_USES=		pgsql
PGSQL_CMAKE_BOOL=	ENABLE_POSTGRESQL								PGSQL_CMAKE_BOOL=	ENABLE_POSTGRESQL
LEVELDB_DESC=		Enable LevelDB backend								LEVELDB_DESC=		Enable LevelDB backend
LEVELDB_CMAKE_BOOL=	ENABLE_LEVELDB									LEVELDB_CMAKE_BOOL=	ENABLE_LEVELDB
LEVELDB_LIB_DEPENDS=	libleveldb.so:databases/leveldb							LEVELDB_LIB_DEPENDS=	libleveldb.so:databases/leveldb
REDIS_DESC=		Enable Redis backend								REDIS_DESC=		Enable Redis backend
REDIS_CMAKE_BOOL=	ENABLE_REDIS									REDIS_CMAKE_BOOL=	ENABLE_REDIS
REDIS_LIB_DEPENDS=	libhiredis.so:databases/hiredis							REDIS_LIB_DEPENDS=	libhiredis.so:databases/hiredis
SPATIAL_DESC=		Enable SpatialIndex AreaStore backend						SPATIAL_DESC=		Enable SpatialIndex AreaStore backend
SPATIAL_LIB_DEPENDS=	libspatialindex.so:devel/spatialindex						SPATIAL_LIB_DEPENDS=	libspatialindex.so:devel/spatialindex
SPATIAL_CMAKE_BOOL=	ENABLE_SPATIAL									SPATIAL_CMAKE_BOOL=	ENABLE_SPATIAL

NLS_CMAKE_BOOL=		ENABLE_GETTEXT								|       NLS_CMAKE_BOOL=	ENABLE_GETTEXT
NLS_USES=		gettext									|       NLS_USES=	gettext
NLS_LDFLAGS=		-L${LOCALBASE}/lib							|       NLS_LDFLAGS=	-L${LOCALBASE}/lib

.include <bsd.port.options.mk>										.include <bsd.port.options.mk>

.if ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSOUND}							.if ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSOUND}
USES+=		openal											USES+=		openal
LIB_DEPENDS+=	libvorbis.so:audio/libvorbis \							|       LIB_DEPENDS+=	libogg.so:audio/libogg \
		libogg.so:audio/libogg								|       		libvorbis.so:audio/libvorbis
.endif													.endif

.if ${PORT_OPTIONS:MSERVER}										.if ${PORT_OPTIONS:MSERVER}
USE_RC_SUBR=	${PORTNAME}										USE_RC_SUBR=	${PORTNAME}
USERS=		${PORTNAME}										USERS=		${PORTNAME}
GROUPS=		${PORTNAME}										GROUPS=		${PORTNAME}
.endif													.endif

# hacky way to not bring irrlicht and X11 depends for server only					# hacky way to not bring irrlicht and X11 depends for server only
.if ! ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSERVER}						.if ! ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSERVER}
BUILD_DEPENDS+=	${NONEXISTENT}:x11-toolkits/irrlicht:patch					|       BUILD_DEPENDS+=		${NONEXISTENT}:x11-toolkits/irrlicht:patch
IRRLICHT_INCLUDE_DIR=	`${MAKE} -C ${PORTSDIR}/x11-toolkits/irrlicht -V WRKSRC`/include		IRRLICHT_INCLUDE_DIR=	`${MAKE} -C ${PORTSDIR}/x11-toolkits/irrlicht -V WRKSRC`/include
CMAKE_ARGS+=	-DIRRLICHT_INCLUDE_DIR:STRING="${IRRLICHT_INCLUDE_DIR}"				|       CMAKE_ARGS+=		-DIRRLICHT_INCLUDE_DIR:STRING="${IRRLICHT_INCLUDE_DIR}"
EXTRA_PATCHES+=	${FILESDIR}/extra-patch-irrlichtdepend						|       EXTRA_PATCHES+=		${FILESDIR}/extra-patch-irrlichtdepend
.endif													.endif

post-extract:												post-extract:
# make sure no bundled gmp is used									# make sure no bundled gmp is used
	@${RM} -rf ${WRKSRC}/lib/gmp ${WRKSRC}/lib/jsoncpp							@${RM} -rf ${WRKSRC}/lib/gmp ${WRKSRC}/lib/jsoncpp
# bundled lua is OK, there's no option to use system one						# bundled lua is OK, there's no option to use system one

post-patch:												post-patch:
	@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \							@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \
		${WRKSRC}/cmake/Modules/*.cmake										${WRKSRC}/cmake/Modules/*.cmake

.include <bsd.port.mk>											.include <bsd.port.mk>

Sometime after deciding that the above was perfected, I realized that if I am to eventually submit a bug report to the maintainer for improvement, that I might attempt a more rococo version which will have all the option configs that interest me exposed to the light of day rather than hiding in the shadows of a developer's documentation.  This much more complex version will take a bit of effort to perfect and I still may flub something.  My makefile (below) permits the user to choose bundled gmp or jsoncpp rather than deciding that either is not desirable.

# Created by: Dmitry Marakasov <amdmi3@FreeBSD.org>							# Created by: Dmitry Marakasov <amdmi3@FreeBSD.org>
# $FreeBSD$												# $FreeBSD$

PORTNAME=	minetest										PORTNAME=	minetest
PORTVERSION=	5.4.0											PORTVERSION=	5.4.0
PORTREVISION=	1											PORTREVISION=	1
CATEGORIES=	games											CATEGORIES=	games

MAINTAINER=	amdmi3@FreeBSD.org									MAINTAINER=	amdmi3@FreeBSD.org
COMMENT=	Near-infinite-world block sandbox game							COMMENT=	Near-infinite-world block sandbox game

LICENSE=	LGPL21+											LICENSE=	LGPL21+
LICENSE_FILE=	${WRKSRC}/doc/lgpl-2.1.txt								LICENSE_FILE=	${WRKSRC}/doc/lgpl-2.1.txt

LIB_DEPENDS=	libsqlite3.so:databases/sqlite3 \						|       LIB_DEPENDS=	libsqlite3.so:databases/sqlite3
		libgmp.so:math/gmp \								<
		libjsoncpp.so:devel/jsoncpp							<

USE_GITHUB=	yes										<
GH_ACCOUNT=	minetest									<
												<
USES=		cmake compiler:c11 iconv:wchar_t							USES=		cmake compiler:c11 iconv:wchar_t
CMAKE_ARGS=	-DCUSTOM_MANDIR="${PREFIX}/man" \						|       CMAKE_ARGS=	-DBUILD_UNITTESTS="FALSE" \
												>       		-DCMAKE_BUILD_TYPE="MinSizeRel" \
		-DCUSTOM_EXAMPLE_CONF_DIR="${PREFIX}/etc" \								-DCUSTOM_EXAMPLE_CONF_DIR="${PREFIX}/etc" \
		-DENABLE_SYSTEM_JSONCPP=ON							|       		-DCUSTOM_MANDIR="${PREFIX}/man"
												>       #               -DVERSION_EXTRA="_${PORTREVISION}"  # Except that there is an automatic added dash seperator.
												>       # OpenGL_GL_PREFERENCE Allowed values are 'GLVND' and 'LEGACY'
												>       # See CMake Policy CMP0072 for reference: cmake --help-policy CMP0072. GLVND is broken on some nvidia setups, so use LEGACY instead.

												>       USE_GITHUB=	yes
												>       GH_ACCOUNT=	minetest
												>
LDFLAGS_i386=	-Wl,-znotext										LDFLAGS_i386=	-Wl,-znotext

PORTDATA=	*											PORTDATA=	*
PORTDOCS=	*											PORTDOCS=	*

OPTIONS_DEFINE=	CURL SOUND FREETYPE NCURSES LUAJIT \						|       OPTIONS_DEFINE=	CURL DOCS EXAMPLES FREETYPE LUAJIT NCURSES NLS SOUND SYSTEM_GMP \
		DOCS EXAMPLES NLS								|       		SYSTEM_JSONCPP
OPTIONS_MULTI=	COMP											OPTIONS_MULTI=	COMP
												>       OPTIONS_RADIO=	GRAPHICS
OPTIONS_GROUP=	DATABASE										OPTIONS_GROUP=	DATABASE

COMP_DESC=		Software components								COMP_DESC=		Software components
OPTIONS_MULTI_COMP=	CLIENT SERVER									OPTIONS_MULTI_COMP=	CLIENT SERVER

												>       OPTIONS_RADIO_GRAPHICS=	GLVND LEGACY
												>
												>       SYSTEM_GMP_DESC=		Use gmp from ports (ENABLE_SYSTEM_GMP)
												>       SYSTEM_GMP_CMAKE_BOOL=		ENABLE_SYSTEM_GMP
												>       SYSTEM_GMP_CMAKE_ON=		-DGMP_INCLUDE_DIR="${PREFIX}/include"
												>       SYSTEM_GMP_LIB_DEPENDS=		libgmp.so:math/gmp
												>
												>       SYSTEM_JSONCPP_DESC=		Use jsoncpp from ports (ENABLE_SYSTEM_JSONCPP)
												>       SYSTEM_JSONCPP_CMAKE_BOOL=	ENABLE_SYSTEM_JSONCPP
												>       SYSTEM_JSONCPP_CMAKE_ON=	-DJSON_INCLUDE_DIR="${PREFIX}/include/jsoncpp"
												>       SYSTEM_JSONCPP_LIB_DEPENDS=	libjsoncpp.so:devel/jsoncpp
												>
												>       GRAPHICS_DESC=		Graphics support
												>       GLVND_DESC=		Use libOpenGL or libGLX
												>       LEGACY_DESC=		Use libGL - where GLVND may be broken on nvidia
												>
												>       GLVND_CMAKE_ON=		-DOPENGL_GL_PREFERENCE="GLVND"
												>       LEGACY_CMAKE_ON=	-DOPENGL_GL_PREFERENCE="LEGACY"
												>
DATABASE_DESC=		Database support								DATABASE_DESC=		Database support
OPTIONS_GROUP_DATABASE=	PGSQL LEVELDB REDIS SPATIAL						|       OPTIONS_GROUP_DATABASE=	LEVELDB PGSQL REDIS SPATIAL

OPTIONS_DEFAULT=	CLIENT SERVER \								|       OPTIONS_DEFAULT=	CLIENT CURL FREETYPE GLVND LUAJIT NCURSES SERVER SOUND \
			CURL SOUND FREETYPE NCURSES LUAJIT					|       			SYSTEM_GMP SYSTEM_JSONCPP
OPTIONS_SUB=		yes										OPTIONS_SUB=		yes

CLIENT_DESC=		Build client									CLIENT_DESC=		Build client
CLIENT_CMAKE_BOOL=	BUILD_CLIENT									CLIENT_CMAKE_BOOL=	BUILD_CLIENT
CLIENT_LIB_DEPENDS=	libpng.so:graphics/png \						|       CLIENT_LIB_DEPENDS=	libIrrlicht.so:x11-toolkits/irrlicht \
			libIrrlicht.so:x11-toolkits/irrlicht					|       			libpng.so:graphics/png
CLIENT_USES=		gl jpeg xorg									CLIENT_USES=		gl jpeg xorg
CLIENT_USE=		GL=gl XORG=x11,xext,xxf86vm						|       CLIENT_USE=		GL=gl \
												>       			XORG=x11,xext,xxf86vm
SERVER_DESC=		Build server									SERVER_DESC=		Build server
SERVER_CMAKE_BOOL=	BUILD_SERVER									SERVER_CMAKE_BOOL=	BUILD_SERVER

CURL_DESC=		Enable cURL support for fetching media						CURL_DESC=		Enable cURL support for fetching media
CURL_CMAKE_BOOL=	ENABLE_CURL									CURL_CMAKE_BOOL=	ENABLE_CURL
CURL_LIB_DEPENDS=	libcurl.so:ftp/curl								CURL_LIB_DEPENDS=	libcurl.so:ftp/curl
SOUND_DESC=		Enable sound									SOUND_DESC=		Enable sound
SOUND_CMAKE_BOOL=	ENABLE_SOUND									SOUND_CMAKE_BOOL=	ENABLE_SOUND
FREETYPE_DESC=		Support for TrueType fonts with unicode						FREETYPE_DESC=		Support for TrueType fonts with unicode
FREETYPE_CMAKE_BOOL=	ENABLE_FREETYPE									FREETYPE_CMAKE_BOOL=	ENABLE_FREETYPE
FREETYPE_LIB_DEPENDS=	libfreetype.so:print/freetype2							FREETYPE_LIB_DEPENDS=	libfreetype.so:print/freetype2
NCURSES_DESC=		Enable ncurses console								NCURSES_DESC=		Enable ncurses console
NCURSES_CMAKE_BOOL=	ENABLE_CURSES									NCURSES_CMAKE_BOOL=	ENABLE_CURSES
NCURSES_USES=		ncurses										NCURSES_USES=		ncurses

LUAJIT_DESC=		LuaJIT support									LUAJIT_DESC=		LuaJIT support
LUAJIT_CMAKE_BOOL=	ENABLE_LUAJIT REQUIRE_LUAJIT							LUAJIT_CMAKE_BOOL=	ENABLE_LUAJIT REQUIRE_LUAJIT
LUAJIT_LIB_DEPENDS=	libluajit-5.1.so:lang/luajit-openresty						LUAJIT_LIB_DEPENDS=	libluajit-5.1.so:lang/luajit-openresty

PGSQL_USES=		pgsql										PGSQL_USES=		pgsql
PGSQL_CMAKE_BOOL=	ENABLE_POSTGRESQL								PGSQL_CMAKE_BOOL=	ENABLE_POSTGRESQL
LEVELDB_DESC=		Enable LevelDB backend								LEVELDB_DESC=		Enable LevelDB backend
LEVELDB_CMAKE_BOOL=	ENABLE_LEVELDB									LEVELDB_CMAKE_BOOL=	ENABLE_LEVELDB
LEVELDB_LIB_DEPENDS=	libleveldb.so:databases/leveldb							LEVELDB_LIB_DEPENDS=	libleveldb.so:databases/leveldb
REDIS_DESC=		Enable Redis backend								REDIS_DESC=		Enable Redis backend
REDIS_CMAKE_BOOL=	ENABLE_REDIS									REDIS_CMAKE_BOOL=	ENABLE_REDIS
REDIS_LIB_DEPENDS=	libhiredis.so:databases/hiredis							REDIS_LIB_DEPENDS=	libhiredis.so:databases/hiredis
SPATIAL_DESC=		Enable SpatialIndex AreaStore backend						SPATIAL_DESC=		Enable SpatialIndex AreaStore backend
SPATIAL_LIB_DEPENDS=	libspatialindex.so:devel/spatialindex						SPATIAL_LIB_DEPENDS=	libspatialindex.so:devel/spatialindex
SPATIAL_CMAKE_BOOL=	ENABLE_SPATIAL									SPATIAL_CMAKE_BOOL=	ENABLE_SPATIAL

NLS_CMAKE_BOOL=		ENABLE_GETTEXT								|       NLS_CMAKE_BOOL=	ENABLE_GETTEXT
NLS_USES=		gettext									|       NLS_USES=	gettext
NLS_LDFLAGS=		-L${LOCALBASE}/lib							|       NLS_LDFLAGS=	-L${LOCALBASE}/lib

.include <bsd.port.options.mk>										.include <bsd.port.options.mk>

.if ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSOUND}							.if ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSOUND}
USES+=		openal											USES+=		openal
LIB_DEPENDS+=	libvorbis.so:audio/libvorbis \							|       LIB_DEPENDS+=	libogg.so:audio/libogg \
		libogg.so:audio/libogg								|       		libvorbis.so:audio/libvorbis
.endif													.endif

.if ${PORT_OPTIONS:MSERVER}										.if ${PORT_OPTIONS:MSERVER}
USE_RC_SUBR=	${PORTNAME}										USE_RC_SUBR=	${PORTNAME}
USERS=		${PORTNAME}										USERS=		${PORTNAME}
GROUPS=		${PORTNAME}										GROUPS=		${PORTNAME}
.endif													.endif

# hacky way to not bring irrlicht and X11 depends for server only					# hacky way to not bring irrlicht and X11 depends for server only
.if ! ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSERVER}						.if ! ${PORT_OPTIONS:MCLIENT} && ${PORT_OPTIONS:MSERVER}
BUILD_DEPENDS+=	${NONEXISTENT}:x11-toolkits/irrlicht:patch					|       BUILD_DEPENDS+=		${NONEXISTENT}:x11-toolkits/irrlicht:patch
IRRLICHT_INCLUDE_DIR=	`${MAKE} -C ${PORTSDIR}/x11-toolkits/irrlicht -V WRKSRC`/include		IRRLICHT_INCLUDE_DIR=	`${MAKE} -C ${PORTSDIR}/x11-toolkits/irrlicht -V WRKSRC`/include
CMAKE_ARGS+=	-DIRRLICHT_INCLUDE_DIR:STRING="${IRRLICHT_INCLUDE_DIR}"				|       CMAKE_ARGS+=		-DIRRLICHT_INCLUDE_DIR:STRING="${IRRLICHT_INCLUDE_DIR}"
EXTRA_PATCHES+=	${FILESDIR}/extra-patch-irrlichtdepend						|       EXTRA_PATCHES+=		${FILESDIR}/extra-patch-irrlichtdepend
.endif													.endif
												>       # From wiki:
												>       #  Building without Irrlicht / X dependency
												>       # You can build the Minetest server without library dependencies to Irrlicht or any graphical stuff.
												>       # You still need the Irrlicht headers for this, so first, download the irrlicht source to somewhere.
												>       #
												>       # When invoking CMake, use -DBUILD_CLIENT=0 -DIRRLICHT_SOURCE_DIR=/wherever/you/unzipped/the/source.

post-extract:											|       #post-extract:
# make sure no bundled gmp is used									# make sure no bundled gmp is used
	@${RM} -rf ${WRKSRC}/lib/gmp ${WRKSRC}/lib/jsoncpp					|       #	@${RM} -rf ${WRKSRC}/lib/gmp ${WRKSRC}/lib/jsoncpp
# bundled lua is OK, there's no option to use system one						# bundled lua is OK, there's no option to use system one

post-patch:												post-patch:
	@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \							@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|' \
		${WRKSRC}/cmake/Modules/*.cmake										${WRKSRC}/cmake/Modules/*.cmake

.include <bsd.port.mk>											.include <bsd.port.mk>

As before and with any of my modifications above, in addition to the above adjustments to the Makefile, there may be a patch file which must be removed or hidden in order for my modified build to succeed.  The file is /usr/ports/games/files/patch-src_CMakeLists.txt

The final result comparison of the ncurses configuration menu for default (as it is in ports now) on the left and my new rococo version on the right.

 

It should be noted that while these modifications are not yet made official (and I cannot say for certain if they will be since my philosophy/understanding may be different than the maintainer) this port is also not set to be built locally by poudriere.  Poudriere handles updates to the ports tree in a manner which any local changes would become an extra hassle as it wishes to maintain an exact duplicate, and so instead I will be adding games/minetest to the blacklist, keeping it out of the poudriere repo.  I will build it "manually" from ports and use gitup to keep a seperate /usr/ports tree updated without repairing (wiping out) my changes or at least not complaining when it does so.  This seems to be the most reasonable method to have local modified Makefiles for any relatively small subset of ports.  I thought I might periodically revisit this port for any improvements I can make to its Makefile which meant this blog post could become rather long over time and be re-published but have since decided against this.  Bug report for games/minetest to propose my revised Makefile.

My git repo for minetest which was later renamed to luanti.

Sunday, March 28, 2021

umix for TV volume control

I use a separate miccus bluetooth transmitter connected by a headphone cable and RCA adapter so that I can listen to my television or pc.  Presently I have adapted a bit of magic that modified my original setup which had two outputs reaching the transmitter but that had a side-effect (60-cycle?) hum and was a mild hassle in general.

Instead of connecting the output of the headphone jack of my 4k PiP-capable monitor to the transmitter, I attach it to the mic port on my PC.  The line out port of my motherboard remains attached to the transmitter by way of an RCA adapter as it had originally. The final piece of the puzzle is a very cool utility called umix which is a simple non-graphical audio mixer.

The manual page gives the necessary information on how to use this application, including what I used as the mute toggle key (x).
UMIX(1)                         Sound Utilities                        UMIX(1)

NAME
       umix - adjust soundcard mixers

SYNOPSIS
       umix [channel volume|left:right][R|P][+|-] device] [-r driver] [-f
       configpath] [-ghilqsv]

DESCRIPTION
       umix is a program for adjusting soundcard mixers.  With it you can
       adjust your soundcard volumes, balances and recording sources.  It can
       be used flexibly from the command-line, or from an interactive user
       interface.

       You can save your soundcard volumes to a file, and load them
       afterwards, for example when when booting the machine.

       Channel names are used to specify the volume you want to adjust. You
       can check what channels are supported with the -q option. Channel names
       can also be shortened if they have enough distinctive letters to
       identify the channel, eg. 'volume' can be shortened to 'vol'. If
       channel name is specified as all , all available channels are set to
       the specified value.

       For each channel specified, volume is the volume you want to set, with
       both left and right specified as the same, or in left:right format.

       You can also specify optional + or - after the volume for increasing or
       decreasing the volume for channel, with amount volume.  The optional
       R or P at the end of the channel argument sets the channel as a current
       recording source or normal play, respectively.  You can use both upper-
       and lowercase letters.

       You can slide volumes smoothly in steps from one point to another.  The
       format is following: startvol,endvol,steps,delay.  Here startvol is the
       volume you want to slide the volume from, and endvol is the volume you
       want to increase or decrease in steps to.  Optional parameter steps
       specifies the number of steps between the two volumes, and delay the
       delay between two steps. Default values for steps is 20, and 20ms for
       delay.  The optional + or - have no effect when sliding volumes.

       The delay can be between 0 and 5 seconds, specified in milliseconds.
       Maximum value for steps is the difference between the starting and
       destination volume, so that the minimum raise or decrease in one step
       is always 1.

       All volume settings are parsed the same, so you can use sliding in your
       config file too, you just have to edit the config manually.  For
       example the line

       pcm 0,100,25,50

       in your config file would slide the volume of 'pcm' from 0 to 100 in 25
       steps and with a 50 ms delay when loading settings.

       Umix needs read and write permissions to the mixer device. I suggest
       that you create a group for this and change permissions so that group
       has write and read access to the devices, then add necessary users to
       that group.

OPTIONS
       -q, --query
              Query and print all active channel volumes and stats from all
              available devices. Interactive UI is not started.

       -l, --load
              Load previously saved settings from configpath.  If configpath
              is specified as '-', settings are loaded from standard input.
              Clears the -i option.

       -s, --save
              Save current mixer settings to configpath.  If configpath is
              specified as '-', settings are printed to standard output.
              Clears the -i option.

       -f configpath, --file=configpath
              Specify the file used to read and save settings.  Defaults to
              /etc/umixrc.  Sets the -i option.

       -d device, --device=device
              Specify the device used. Defaults to /dev/mixer.  Sets the -i
              option.

       -r driver, --driver=driver
              Specify the driver used. Defaults to OSS.  Sets the -i option.

       -i, --interactive
              Start interactive user interface after processing non-
              interactive command-line options.

       -g, --globals
              Print current global options. This is useful for finding out
              what is the default device etc.

       -h, --help
              Display help and exit.

       -v, --version
              Display version information and exit.

EXAMPLES
       umix -q
              Prints all volumes of active channels and their stats.  The
              output should be self-explanatory.

       umix volume 100 bass 88 treble 80 pcm 94
              Sets the volume to 100, bass to 88, treble to 80 and PCM to 94.

       umix vol 100:80 syn 90:30
              Here channel names are shortened and stereo settings are used.
              Sets volume`s left to 100, right to 80 and synth`s left to 90
              and right to 30.

       umix bass 20- pcm 20:10+ ogain 40:45-
              Here volumes are incremented or decremented from their original
              values. Decreases bass by 20, increases PCM`s left by 20 and
              right by 10 and the last one decreases output gain`s left by 40
              and right by 45.

       umix mic R synth 20P line 10p-
              This sets the mic as a recording source, synth as normal play
              with volume 20 and line as normal play with volume decreased by
              10.

       umix pcm 0,60,30,25 vol 100,70 synth 50:50,25:50
              Here sliding is demonstrated. The first slides pcm from 0 to 60
              with 30 steps and a 25 ms delay, then slides vol from 100 to 70
              with default steps and delay and the last one slides synth from
              50:50 to 25:50.

       umix -f /some/path/umixrc -l
              Here the config path is specified as /some/path/umixrc and
              settings are loaded from that file.

       umix -d /dev/mixer2 -f /somepath/umsettings
              The device that is used for mixing is specified as /dev/mixer2,
              config path is set as /somepath/umsettings and the interactive
              user interface is automatically started, because.  -f and -d set
              the -i option.

NCURSES USER INTERFACE
       The (n)curses based user interface. Designed to be used from a console
       or x-terminal.

   USAGE
       On the left side is the channel menu, which consists of channel names,
       stats and volumes.  On the right side is the balance menu.  The
       currently chosen channel is indicated with highlighting its name and
       drawing arrows around the chosen menu.  You can move around with
       default vi/emacs/arrow keys.

       Moving up and down selects the current channel, moving left and right
       adjusts the volume or balance, depending on which menu you are in.  Tab
       toggles between volume and balance menus.

       If the channel does not support stereo mixing (it`s left and right
       values cannot differ), then a '|' at center of the balance is drawn.

   KEY BINDINGS
       j / ^n / arrow down
              Move down.

       k / ^p / arrow up
              Move up.

       h / ^b / arrow left
              Decrease volume / balance left.

       l / ^f / arrow right
              Increase volume / balance right.

       ] / .  Increase volume by fifth of maximum amount.

       [ / ,  Decrease volume by fifth of maximum amount.

       Tab    Toggle between volume and balance menus.

       Space  Toggle play / record source.

       L      Load settings.

       S      Save settings.

       f      Specify the config path. This presents a dialog in the lower
              border. If no string is given, the path remains unchanged.

       e      Enter channel volume manually for the current channel.  Same
              rules apply as with command-line channel settings, so you can
              set balances and recording sources too.

       n      Cycles through available mixer devices. You can see the
              currently active mixer and the total number of initialized
              mixers in the top border.

       m      Mutes all those channels that are not already mute. If pressed
              again, returns volumes back to the state before muting.

       x      Excludes the current channel. Same as m but only with the
              current channel.

       H      Displays the help.

       q      Exit the program.

       ^l     Refresh the screen.

CONFIG FILE
       The config consists of global options and mixer settings.  Global
       options come after the keyword [global].  Global options are read
       before loading any mixer settings or parsing command-line options.
       Global options are the defaults to use if no command-line options are
       given.

       Mixer settings come after the keyword [mixers].  The mixer device that
       settings are loaded for is specified with the keyword mixer.  The
       string after mixer= is the path of the mixer device. Then comes the
       settings for that mixer. These are parsed like command-line options.

       Comments and all other characters are ignored.

FILES
       /etc/umixrc
              The default configuration file.

       $HOME/.umixrc
              Used as the config file if exists.

BUGS
       When used with terminals that have columns below 35, the output is not
       optimal with the ncurses UI.

       If the number of channels is greater than number of lines on screen,
       you cannot adjust channels that exceed the number of lines in the
       ncurses UI (rare, but to be fixed soon)

AUTHOR
       Sakari Lehtonen <sakari@ionstream.fi>

                                  08 Jun 2002                          UMIX(1)

Now if I switch sources entirely on my monitor, or use the picture-in-picture function to watch a TV show (or hockey game) in the smaller window, I can hear both the TV and my PC if I so choose, as long as I set the audio source of my monitor properly such as to tell it to use the source port for the small picture as audio source.  This also allows me a much easier method to silence (or adjust the volume) of the television program while in a commercial break by use of the mixer application instead of needing to toggle it on the monitor itself which I might move slightly out of reach.  Additionally, I can easily mute all of my application sound when I choose to only view a TV program.

Tool without fanfare

Due to our fairly recent VCS change and impending portsnap retirement, it is somewhat surprising that gitup was released to seemingly very little or no fanfare.  It might be used to solve the issue of svn being replaced by git for obtaining source, and both portsnap and svn for maintaining one's local ports tree.  It also is apparently even smaller or less dependency encumbered than git@tiny which should be a rather large positive for the average consumer as well as being quite simple to configure and use.

Firstly, the configuration file provided with the port when installed might need to be updated or modified to suit your needs.

# $FreeBSD$
#
# Default configuration options for gitup.conf.
# github.com/freebsd/freebsd-ports
#
# ${repo} can be replaced by doc, ports and src. (*)
#
# https://git.freebsd.org/${repo}.git
# ssh://anongit@git.freebsd.org/${repo}.git
# (*) In subversion, base is used for FreeBSD src repository (src).
{
        "defaults" : {
                "host"                  : "github.com",
                "port"                  : "443",
                "verbosity"             : "1",
                "work_directory"        : "/var/db/gitup",
        },

        "ports" : {
                "repository"            : "/freebsd/freebsd-ports.git",
                "branch"                : "main",
                "target"                : "/usr/ports",
                "ignores"               : [
                        "distfiles",
                        "packages",
                ],
        },

        "quarterly" : {
                "host"                  : "git.freebsd.org",
                "repository"            : "/freebsd/freebsd-ports.git",
                "branch"                : "quarterly",
                "target"                : "/usr/ports",
                "ignores"               : [
                        "distfiles",
                        "packages",
                ],
        },

        "release" : {
                "repository"            : "/src.git",
                "branch"                : "releng/12.2",
                "target"                : "/usr/src",
                "ignores"               : [
                        "sys/arm64/conf",
                        "sys/i386/conf",
                        "sys/pc98/conf",
                        "sys/powerpc/conf",
                        "sys/riscv/conf",
                        "sys/sparc64/conf",
                ],
        },

        "stable" : {
                "repository"            : "/src.git",
                "branch"                : "stable/13",
                "target"                : "/usr/src",
                "ignores"               : [
                        "sys/arm64/conf",
                        "sys/i386/conf",
                        "sys/pc98/conf",
                        "sys/powerpc/conf",
                        "sys/riscv/conf",
                        "sys/sparc64/conf",
                ],
        },
}

This is because, as we can see above, the defined aliases are no longer appropriate.  The present pending release is 13.0, and current is now 14, while stable is also 13.x, so this should be an easy adjustment.

There does not seem to be an option to simply show what the configured sections are but if one tries to initiate gitup with a bit of nonsense, the message will tell you and so now we can see how the above configuration works.

gitup blargh
gitup:
Cannot find a matching section in the command line arguments.  These are the configured sections:
         * ports
         * quarterly
         * release
         * stable
         * current
: Invalid argument

The short manpage gives further insight and tells of how it can be used to repair a repo and other things.

NAME
     gitup – A minimalist, dependency-free program to clone/pull Git
     repositories.

SYNOPSIS
     gitup section [-ckrV] [-C configuration file] [-h commit checksum]
           [-t tag] [-u pack file] [-v verbosity] [-w commit checksum]

DESCRIPTION
     gitup is a minimalist, dependency-free program used to clone or
     synchronize a local copy of a Git repository.  It is not intended to be a
     full-featured replacement for the devel/git port, but rather, is intended
     to provide a convenient way for users to update FreeBSD source files
     without having to install devel/git (and all of its related dependencies)
     and without the substantial disk overhead that normally accompany local
     Git repositories.

     gitup currently only supports anonymous, encrypted transfers via the
     "Smart HTTP" protocol.

OPTIONS
     Configuration options are stored in /usr/local/etc/gitup.conf and are
     grouped into commonly used sections (additional custom sections can be
     added to this file).  The following command line options can be used to
     override the default and/or section values:

     -C          The location of the configuration file to use.

     -c          Force gitup to clone the repository.

     -h          The "have" commit checksum of the repository to use.  Only
                 needed when importing a pack file generated by the official
                 Git client.

     -k          Save a copy of the pack data.

     -r          Repair the local repository, replacing any files that are
                 missing or have been modified.

     -t          Fetch the commit referenced by the specified tag.

     -u          Skip the download of the pack data and use the specified file
                 instead.

     -v          How verbose the output should be (0 = no output, 1 = show
                 only names of the updated files, 2 = also show commands sent
                 to the server and additional debugging information).

     -V          Display the version number and exit.

     -w          The "want" commit checksum of the repository to retrieve.

FILES
     /usr/local/etc/gitup.conf  Default location of the gitup configuration
                                file.

     /var/db/gitup              Default location where gitup stores its lists
                                of known files.  The files stored here are
                                used during subsequent runs to reconstruct the
                                local repository state and confirm that the
                                local tree is intact.

CAVEATS
     Because gitup neither uses nor updates the .git directory, it is not a
     drop-in replacement for the official Git client.  gitup should only be
     used on repositories originally cloned with the official Git client if
     there is no intention to ever use the official Git client on that local
     repository again.

     To keep its footprint as small as possible, gitup does not retain pack
     files downloaded from the repository (unless explicitly instructed to do
     so) and does not use a saved pack file (unless explicitly instructed to
     do so).  gitup relies on the known remote files lists stored in
     /var/db/gitup and the current state of the local repository to
     reconstruct data that would normally be stored in the pack file.
     Discrepancies in the local repository will be flagged as errors and gitup
     will attempt to any restore any missing or modified files from the
     server, returning the local repository to a clean state.

     Extra care should be given when specifying a commit to pull as gitup only
     performs shallow clones and does not have access to a repository's full
     commit history.  If a commit is passed in via the -w command line
     argument and that commit exists on a different branch, the Git server
     will neither object nor inform gitup of the branch change and will send a
     pack file that will convert the local repository.  If the change of
     branches is intentional, the relevant section in
     /usr/local/etc/gitup.conf will need to be manually updated.

EXAMPLES
     Using the configuration options for commonly used repositories/branches
     stored in /usr/local/etc/gitup.conf, to clone/pull a copy of the most
     recent revision of stable/12:

           gitup stable

     To retrieve a copy of freebsd-ports at commit
     0123456789abcdef0123456789abcdef01234567:

           gitup ports -w 0123456789abcdef0123456789abcdef01234567

SEE ALSO
     gitup.conf(5)

AUTHORS
     John Mehr  is the author of gitup and this man page.


What I like most about this tool is that by default it avoids repairs to the ports tree where I may have made modifications to Makefiles or hidden patch files or any other similar adjustments.  This way I can keep a slightly modified local ports tree which I can use to build individual ports (such as minetest) which I then explicitly blacklist for the poudriere repo pkg builds.  This requires that any pkg built and part of the poudriere repo is removed or a pkg upgrade will still see it.

The initial run, regardless of whether the repair option is used or a clean fresh ports tree is constructed by it, offers no feedback from this tool that it is doing anything and the processes or file transfers involved take quite a bit of time. I did enable maximum verbosity but that did not help, I would strongly recommend to the author that a spinning cursor or some other indication that the tool is doing something be added so that we know that our configuration is correct and we know everything is okay.  I am fine with things taking time to function (in this case about 14 minutes), to produce results, but silence is a killer as it makes me wonder and may cause me to end a process which is less than a second away from finally doing something visible.  The level of verbosity does not affect the 14 minutes of silence, only the output that follows it.  If this is used as part of an unattended script, I would recommend watching for results once outside of the script to be certain it acts as it should before hiding everything, or you may never know if anything is wrong such as an error in the configuration file.

FYI:

When the branch gets changed, which it has twice recently, first it shifted to main, and now its back to master once more, you may end up with an error should you have verbosity enabled for that repo. If you use poudriere, the message may appear similar to below, simply change it to what you might find is used at github/freebsd.

# Host: github.com
# Port: 443
# Repository: /freebsd/freebsd-ports.git
# Target: /usr/ports
# Have: 4010f7bbc03638d71781ce091bf40a0907fa12fe
# Want: 4010f7bbc03638d71781ce091bf40a0907fa12fe
# Branch: main
[00:00:00] Updating portstree "default" with git...fatal: couldn't find remote ref refs/heads/master

The solution for poudriere seems to be a bit overkill, but it is as follows below.

Delete the "default" ports tree:

poudriere ports -d

Re-create the "default" ports tree using branch=main by method=git. poudriere ports -c -B main -m git

Friday, March 12, 2021

Poudriere blacklist filter

Remember when I mentioned in a previous blog post how it seemed strange that the blacklist was not applied to the input file at the outset?  I have finally perfected a script which will do this with only minor adjustment to the poudriere commandline invocation.  Of course, file names, script names, may need adjustment to suit your environment or tastes.  Below is the relatively simple sh script named p-keg-deblack which does the work.

#!/bin/sh
rm /var/tmp/cleaned_blacklist 2>/dev/null
grep -v \# ~/Symbolic_Links/13amd64-blacklist | sort -d -u >> /var/tmp/cleaned_blacklist

diff $1 /var/tmp/cleaned_blacklist | grep \< |sed  -e 's/^<\ //g' -e 's/---//g' -e '1d' > ~/$1-deblack

echo $1-deblack

First, it removes any temporary files it had created, if none exist the error is silenced.  Your blacklist file for poudriere may include comment lines which would begin with # and so those are excluded by an inverted grep.  Since my build lists are all sorted in dictionary order with only unique lines, we treat the blacklist the same way, regardless of how it is actually organized, the output is placed in a temporary file.  Now we compare the build list with the cleaned blacklist.  Diff will place all the lines unique to each file preceded with a < or > depending upon which file, the first is on the left "<" and the second is on the right ">".  We want those lines which are only in the build list, so we grep all lines beginning with "<" then we remove "< " to prepare the list for poudriere.  The first line of the diff indicates where in the file that section begins, and there is another line "---" which we do not want.  We create a file with your input file name adding a suffix of -deblack.  When this script is used, all that poudriere will see is this filename with suffix we just created.

How do we use this script when we invoke poudriere?  This makes the process as unobtrusive as possible, we add one more word and two characters.  Normally we would do something like the following:

poudriere bulk -f installed-pkgs-Gross -j 13amd64 -J 2:16
However, to include the script we use the line below:
poudriere bulk -f `p-keg-deblack installed-pkgs-Gross` -j 13amd64 -J 2:16

Essential caveat: Use this script at your own risk, I make no promises.

Sunday, February 21, 2021

Kerberos ain't average

The average home user is unlikely to have need of the special security capabilities of kerberos, heimdal, or the various GSSAPI options.  We who will have no need of it, can exclude it from our kernel and world configurations, and also deny any options from ports which require or use it.  This is a rather easy adjustment in general, but the complete process includes rebuilding your kernel. For those who would rather avoid customizing their kernel away from default, a customized make.conf which avoids all things kerberos will be at least as useful as the whole enchilada.

The make.conf adjustments I will provide first, as it is the minimum effective action to eliminate the unneeded security tool and any complications it causes.  The adjustments for a custom kernel will be after, with a reminder section on rebuilding the kernel.  Add the following lines to your /etc/make.conf as general configuration option overrides.

OPTIONS_UNSET+=KERBEROS HEIMDAL MIT HEIMDAL_BASE KERB_GSSAPI GSSAPI_BASE GSSAPI_MIT GSSAPI_HEIMDAL
OPTIONS_SET+=GSSAPI_NONE

In my opinion the port option MIT should instead be MIT_KERB to make it a bit more specific and obvious, as presently away from specific ports it has no context to clarify it which could be problematic.

A list of ports which are in some way tied to kerberos as a dependency.  I have this in my poudriere blacklist but you can remove or avoid building them.

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
# kerberos or heimdal or gssapi stuff not needed        #
#_______________________________________________________#
net-mgmt/nagstamon
net/rubygem-omniauth-kerberos
security/cyrus-sasl2-gssapi
security/heimdal
security/krb5-appl
security/krb5-devel
security/p5-Authen-Krb5
security/p5-Authen-Krb5-Simple
security/p5-Authen-Simple-Kerberos
security/p5-GSSAPI
security/p5-Heimdal-Kadm5
security/pam_krb5
security/py-flask-kerberos
security/py-gssapi
security/py-kerberos
security/py-pywinrm
security/py-requests-kerberos
security/rubygem-gssapi
www/gitlab-ce
www/mod_auth_gssapi
www/mod_auth_kerb2

A list of ports that you may need to rebuild because they have options which by default tie them to GSSAPI which is related to kerberos and by our adjustments will no longer be needed, will not function.

benchmarks/polygraph
comms/conserver-com
devel/cvs-devel
devel/rudiments
dns/bind9-devel
dns/bind911
dns/samba-nsupdate
editors/libreoffice
ftp/curl
mail/cyrus-imapd23
mail/cyrus-imapd24
mail/cyrus-imapd25
mail/cyrus-imapd30
mail/dovecot
mail/dovecot-pigeonhole
mail/fetchmail
mail/mailutils
mail/mutt
net/nss_ldap
net/ocserv
net/openldap24-server
net/wireshark
net-mgmt/adcli
news/inn
print/cups
security/cyrus-sasl2
security/cyrus-sasl2-saslauthd
security/ipsec-tools
security/libssh
security/openssh-portable
security/p5-Authen-SASL
security/putty
security/racoon2
security/sssd
sysutils/msktutil
sysutils/rsyslog8
sysutils/rubygem-winrm
www/lighttpd
www/neon
www/nginx
www/nginx-devel
www/serf
www/squid
www/squid-devel

Making adjustments to /etc/src.conf is another way to customize your kernel or world.  These type of adjustments are listed in man 5 src.conf and the build process is described in man 7 build if you would like to learn more.  The specific lines we will add are below, you could place values after the equal sign but those are not necessary.

WITHOUT_KERBEROS=
WITHOUT_KERBEROS_SUPPORT=
WITHOUT_GSSAPI=

The next steps are the same as for any kernel and world build, and reinstall.  It would be a good idea to update your /usr/src so that you can take care of two things with one rebuild and reinstall but that is up to you.  However, you will certainly need to obtain the source code for your present version of the operating system before attempting only this kerberos excisement operation.  Look at the distilled page for updating kernel and world for the steps needed to rebuild.

Saturday, February 20, 2021

make doesn't config

Clearly something is broken but I do not know precisely how or exactly what.  All that I do know is that when I try to configure a port, by going to that port directory, such as for minetest, or use the command as below,

make -C /usr/ports/games/minetest config

all I get is this.

===> Options unchanged

I am not aware of any of the myriad of changes I have ever made to my system which would result in such a bizarre error.  My extensive make.conf permits me the ability to adjust options but it is a far more tedious method, especially since I must first look at the Makefile or freshports.org to parse out the possible options.

Prior to this recent very strange issue, I had another, which I may have partially resolved more by avoiding certain ports than by curing the weird dependency issue.  Yes, for surely the second time my system claims a vast number of dependencies which are inaccurate.  Previously it was rust which somehow gained the excess dependents and now it is openjdk7 which has remained wrong even with kernel and world update, and various attempts to solve the issue.  My seeming quasi-solution was to discover by close monitoring, which port was the first of the series which suddenly required openjdk7.  I also gathered the list of ports which failed when openjdk7 itself failed to build and by failing made it very easy to see all the dependents.  I then tweaked the option config for each of the ports in turn, and in the process also discovered that for ages I have had kerberos installed but never used.  The initial lynchpin was apr.  The additional peculiarity is that the dependency issue seems to somehow very strangely be limited to poudriere bulk port builds as individual semi-automated make builds seem to be immune in some way while even after succeeding outside of poudriere, within its jail the dependency issue remained.

So it is very likely that this whole dependency issue (attempts to repair it) is what provoked some other modification to my system which has finally broken my ability to configure ports the normal way within the ports tree.

I could say "the fun part about.." but I'm not sure this is really fun as it is rather frustrating and there doesn't seem to be any documentation about how to extricate my system from this pickle.  What is needed to be able to configure a port?  There is no such list, no steps to enable, nothing.  The same goes for my prior dependency issue, there is no tool or method to solve it or to reset the mess to get things working properly again.  Lucky for you, if I ever solve it for myself there will be this blog post to reference if you somehow manage to accidentally follow in my footsteps.

I cannot be certain yet if anything regarding the dependency issue has changed, but I discovered that I can obtain an index file by make -C /usr/ports fetchindex though when I attempted this it failed due I suspect to ssl or cert issues.  I simply used the url with fetch and adjusted for no ssl.  The file was obtained in bzip2 format so I unpacked it.  I used my recert alias which is set to make -C /usr/ports/security/ca_root_nss reinstall clean to update my local certs after.

Since I can survive tediously without the ability to adjust port configs the usual way, I am rebuilding all my ports with poudriere.  It seems that I may have squashed the openjdk7 dependency issue afterall, as there have not yet been 1200 skipped ports due to openjdk7 failing to build, thus proving it.  I could be wrong, but the series of skipped ports usually appeared near the beginning of the over 2000 port bulk build.  Once that finishes and the installed packages are updated/installed, I can resume beating my head against the 'make config' wall.

How about I list the things I know that I did to possibly resolve the dependency issue?  Maybe some or all of it caused the present issue.  In approximate order mostly:

  • removed the /var/db/ports directory
  • reinstalled as many ports as would successfully build (though my script iterated a list):
    make -C /usr/ports/port/origin install clean
  • erased the /var/db/pkg files: FreeBSD.meta, local.sqlite, poudriere.meta, repo-FreeBSD.sqlite, repo-poudriere.sqlite
  • removed the /usr/ports/INDEX-12 file
  1. reinstalled pkg
    make -C /usr/ports/ports-mgmt/pkg deinstall reinstall clean
  2. (rebootstrapped pkg)
    pkg bootstrap -f
  3. attempted to find missing dependencies
    pkg check -Ba
  4. re-created the poudriere repo:
    pkg repo /usr/local/poudriere/data/packages/13amd64-default
  5. updated /usr/src, rebuilt and reinstalled kernel and world
  6. updated the poudriere 13amd64 jail
  7. re-created the poudriere repo:
    pkg repo /usr/local/poudriere/data/packages/13amd64-default
  8. copied a fresh /etc/pkg.conf from /etc/pkg.conf.sample and revised it to match my former revised pkg.conf

I keep thinking (now) that the one thing I have not yet touched is also directly related to make, the /etc/make.conf but if it had some sort of syntax error surely it would be noticed, caught automatically by shell or make itself.  Once my latest round of poudriere bulk port builds are finished, I can stash the extensive make.conf and see if that solves the configuration issue.  The make.conf is copied to an appropriately named poudriere make.conf file name, so it could affect both methods of build somehow.  However, as well as I can remember, outside of the poudriere jail ports did not have inordinate dependence upon openjdk7.  Stashing the make.conf did not solve the issue.

Finally, I managed to type the right search terms which found an old FreeBSD forum post that helped solve my issue.

make -C /usr/ports/ports-mgmt/dialog4ports install clean

Exactly why ports-mgmt/dialog4ports is not a dependency somewhere, or automatically installed by make config in any port directory, or at least mentioned in man ports is a complete mystery to me.  Instead, it appears that I am blind, below is a subsection of man 7 ports.

     The following targets will be run automatically by each proceeding target
     in order.  That is, build will be run (if necessary) by install, and so
     on all the way to fetch.  Usually, you will only use the install target.

     config         Configure OPTIONS for this port using dialog4ports(1).

     fetch          Fetch all of the files needed to build this port from the
                    sites listed in MASTER_SITES and PATCH_SITES.  See
                    FETCH_CMD, MASTER_SITE_OVERRIDE and MASTER_SITE_BACKUP.

     checksum       Verify that the fetched distfile's checksum matches the
                    one the port was tested against.  If the distfile's
                    checksum does not match, it also fetches the distfiles
                    which are missing or failed the checksum calculation.
                    Defining NO_CHECKSUM will skip this step.

     depends        Install (or compile if only compilation is necessary) any
                    dependencies of the current port.  When called by the
                    extract or fetch targets, this is run in piecemeal as
                    fetch-depends, build-depends, etc.  Defining NO_DEPENDS
                    will skip this step.

     extract        Expand the distfile into a work directory.

     patch          Apply any patches that are necessary for the port.

     configure      Configure the port.  Some ports will ask you questions
                    during this stage.  See INTERACTIVE and BATCH.

     build          Build the port.  This is the same as calling the all
                    target.

     install        Install the port and register it with the package system.
                    This is all you really need to do.

     The following targets are not run during the normal install process.

     showconfig           Display OPTIONS config for this port.

     showconfig-recursive
                          Display OPTIONS config for this port and all its
                          dependencies.

     rmconfig             Remove OPTIONS config for this port.

     rmconfig-recursive   Remove OPTIONS config for this port and all its
                          dependencies.

     config-conditional   Skip the ports which have already had their OPTIONS
                          configured.

     config-recursive     Configure OPTIONS for this port and all its
                          dependencies using dialog4ports(1).

I would strongly recommend looking at the rest of the manpage, as you may discover other interesting capabilities as yet unknown.  In particular from the manpage for ports: did you know about showconfig or config-conditional?

Monday, February 8, 2021

Time to retire, HAL

  Remove hal

Hal has been introduced as part of the Gnome2 desktop and used in many
desktop application as an abstraction on the hardware layer, it has been quickly
deprecated, but alternatives took time to land in freebsd.
In most cases alternatives are now in place or upstreams dropped entirely
support for HAL.

As a result it is time to retire HAL

We might not all have used sysutils/hal or even known that it was mostly silently working in the background as any good daemon process should.  Today marks the final nail in its coffin, as it has been deprecated for quite some time and alternatives rolled out and have now been in place for ages.  If for nostalgia or familiarity or uncertainty any of us may still have or chose to have installed it after it was already set on its journey to eventual FreeBSD expiration, there will be a little cleanup to do on our own systems.  Surely we can all safely remove sysutils/hal if it remains, and that is a very simple operation.

pkg remove hal

The next two adjustments are likely less familiar to most users.  We need to remove haldaemon as both a user and a group.  Since I knew how to edit the password file with vipw (which incorporates use of vi), I used that to remove the haldaemon line.  It turns out that there is another way that possibly ought to have been more obvious, but how often does an admin who uses a pc alone with no other human users on their system ever add or remove them?  The command is rmuser but since my passwd no longer includes haldaemon, I am not sure what it will do but I suspect it will give an error.

rmuser: user (haldaemon) does not exist in the password database.

I have two choices, remove the group as a seperate operation as I planned before discovering rmuser or I could re-create the haldaemon user, then use rmuser which should then work.  I can show how both methods look, but we can remove the group now and then re-create both user and group before using rmuser to see how that looks.

It turns out that editing the group file to revise or remove a group is a fairly simple operation, we can use vigr (which also incorporates use of vi), but lets create a haldaemon account and group to show how rmuser works.

When sysutils/hal was installed, it automatically created the user and group haldaemon but did not also create a home directory.  We can simulate this by using adduser in a similar fashion, answering its prompts the same as below or by using

pw useradd haldaemon -u 560 -g 560 -d /nonexistent -s /sbin/nologin -c "HAL Daemon User"

since I did not remove the haldaemon group.

rmuser haldaemon
Matching password entry:

haldaemon:*:560:560::0:0:HAL Daemon User:/nonexistent:/sbin/nologin

Is this the entry you wish to remove?  y
Remove user's home directory (/nonexistent)?  y
Removing user (haldaemon):
 mailspool home passwd.

Checking the content of /etc/group using vigr proves that haldaemon group is no longer present there.  The above output also mentions the other locations where haldaemon if present would be removed: mailspool, home, and passwd. The next time a similar daemon, which is presently devd, or any other daemon or user might need to be removed, the same steps would be used.  Further information about account modification is available in the FreeBSD handbook.

Since we have modified /etc/passwd there is another thing we must do in order to keep our system reliable. We need to synchronize those changes with /etc/master.passwd by using the command below (entire path provided for precision but /usr/sbin/ can be omitted), more detail can be found by man 8 pwd_mkdb which includes one option (-C) to simply verify no errors were made with any edit.

/usr/sbin/pwd_mkdb -p /etc/master.passwd

One more detail that will be discovered with a reboot once all of the above is accomplished, that is, if your /boot/loader.conf (or possibly /etc/rc.conf) still has a line to start the hal daemon process.  Edit the appropriate file to remove such a line as below and the forgotten step will not haunt you in the future, but if you received an error at boot, that it couldn't load hal or a similar error, you'd know how to fix it I hope but here I describe how.

hald_enable="YES"

Sunday, February 7, 2021

Proving an update to a port maintainer

Sometimes a port can be updated but it becomes overlooked by the maintainer.  You can update it yourself, even use the port framework to facilitate the process, but its better to also let the maintainer know of your success.  Remember that I mentioned exploring bluefish editor for work on this blog, and later more firmly deciding it would be the tool for further updates.  It turns out that bluefish was last updated on November first last year, which means it has been about three months but that the most recent version was released on November fifth!  Since I am using it, and the most recent version fixes a bug that causes a crash (which I may have encountered a number of times already), I decided to see if I could update it.

The first step, is as root, to change to that port directory to look at the Makefile, to see if it will be a simple adjustment to the version number, then change it to match that new version.

# Created by: Koop Mast <einekoai@chello.nl>
# $FreeBSD$

PORTNAME=       bluefish
PORTVERSION=    2.2.11
CATEGORIES=     www editors
MASTER_SITES=   http://www.bennewitz.com/bluefish/stable/source/ \
                http://bluefish.mrball.net/stable/source/

MAINTAINER=     woodsb02@FreeBSD.org
COMMENT=        HTML editor designed for the experienced web designer

There is no port epoch and no oddness with either the master site or anything else that might need to be adjusted, so we can change that portversion to 2.2.12 and on to the next step.  In the directory for the port there are a number of files, common to most other ports in the tree.  The two that we will need to re-create are distinfo and pkg-plist.

.                ..               distinfo         Makefile         pkg-descr        pkg-message      pkg-plist

The distinfo file keeps track of the hash of the tarball and some other things which will not be the same for the new tarball.

TIMESTAMP = 1604208681
SHA256 (bluefish-2.2.11.tar.bz2) = 454c877fc1dbddfcc65cc7ddaa3c5ceb17bc46e216baf7878f09dbf1dabdc2ff
SIZE (bluefish-2.2.11.tar.bz2) = 4181242

In the past I believe there was an easy way too, but back then when I created the distinfo file myself, I did it manually which is a bit of effort compared to the alternative.  First we need to hide (or remove but I prefer hide) so simply rename it to something like distinfo-hid or distinfo-2.2.11.  The next two steps are automated and simple:

make fetch make makesum

The fetch operation will use the information in the Makefile to obtain the tarball without questions, the makesum command uses the Makefile and the tarball it obtained to calculate the checksum, grab the timestamp, and check the filesize, which is all saved in a fresh distinfo in the current directory (that contains the Makefile).  As you can see below, it is entirely different than the old distinfo.

TIMESTAMP = 1612677197
SHA256 (bluefish-2.2.12.tar.bz2) = 0df9905ba2c601cd767fa53e147969e9c90bc0cc4c005c4011c150b248979e6a
SIZE (bluefish-2.2.12.tar.bz2) = 4180228

Now we have two choices.  If you use poudriere we can use the testport function after copying the distinfo to the appropriate poudriere port directory configured for builds.  I will skip ahead here to show you the output when I ran

poudriere testport -o www/bluefish -j 12amd64

because although it is an easy fix, I presently accomplish it outside the poudriere port directory as a regular build but with a new command which is your second choice.   If you build as usual using the updated Makefile and distinfo, assuming you already have an older bluefish installed you'll not see the error message as from poudriere:

gmake[1]: Leaving directory '/wrkdirs/usr/ports/www/bluefish/work/bluefish-2.2.12'
====> Compressing man pages (compress-man)
===========================================================================
====> Running Q/A tests (stage-qa)
====> Checking for pkg-plist issues (check-plist)
===> Parsing plist
===> Checking for items in STAGEDIR missing from pkg-plist
===> Checking for items in pkg-plist which are not in STAGEDIR
Error: Missing: %%DATADIR%%/lipsum/__init__.py
Error: Missing: %%DATADIR%%/lipsum/data/dictionary.txt
Error: Missing: %%DATADIR%%/lipsum/data/lipsum.xml
Error: Missing: %%DATADIR%%/lipsum/data/sample.txt
===> Error: Plist issues found.
*** Error code 1

Stop.
make: stopped in /usr/ports/www/bluefish
=>> Error: check-plist failures detected
build of www/bluefish | bluefish-2.2.12 ended at Sun Feb  7 01:08:48 CST 2021
build time: 00:03:08
!!! build failure encountered !!!
[00:03:27] Error: Build failed in phase: check-plist
[00:03:27] Cleaning up
12amd64-default: removed
12amd64-default-n: removed
[00:03:27] Unmounting file systems

So then, we know that the step we missed was to create the new pkg-plist but how is that done?  Maybe you went direct to poudriere but if not, and you didn't stop when it warned you that bluefish was already installed and explained what to do about it, you will need to create the stage directory inside the work directory again.   We do a simple make then once that completes with no attempt to install or do anything else because it was just that one word, make, we follow it with another simple command.

make makeplist >> pkg-plist

The file is quite large, and the first line is a reminder that we need to verify what the automation gave us.  We can do two other things, we can compare this new pkg-plist file to the old one, and note the message we have from the poudriere testport build.

/you/have/to/check/what/makeplist/gives/you
bin/bluefish
lib/bluefish/about.so
lib/bluefish/charmap.so
lib/bluefish/entities.so
lib/bluefish/htmlbar.so
lib/bluefish/infbrowser.so
lib/bluefish/snippets.so
lib/bluefish/zencoding.so
man/man1/bluefish.1.gz
share/appdata/bluefish.appdata.xml
share/applications/bluefish.desktop
%%DATADIR%%/bflang/JQuery.bfinc
%%DATADIR%%/bflang/ada.bflang2
%%DATADIR%%/bflang/all-html.bfinc
%%DATADIR%%/bflang/all-html5.bfinc
%%DATADIR%%/bflang/all-javascript.bfinc
%%DATADIR%%/bflang/all-php.bfinc
%%DATADIR%%/bflang/all-vbscript.bfinc
%%DATADIR%%/bflang/asp-vbscript.bflang2
%%DATADIR%%/bflang/asp.bflang2
%%DATADIR%%/bflang/bflang2.bflang2
%%DATADIR%%/bflang/c.bflang2
%%DATADIR%%/bflang/cfml.bflang2
%%DATADIR%%/bflang/chuck.bflang2
%%DATADIR%%/bflang/clojure.bflang2
%%DATADIR%%/bflang/cpp.bflang2
%%DATADIR%%/bflang/css-rules.bfinc
%%DATADIR%%/bflang/css-selectors.bfinc
%%DATADIR%%/bflang/css.bflang2
%%DATADIR%%/bflang/d.bflang2
%%DATADIR%%/bflang/diff.bflang2
%%DATADIR%%/bflang/go.bflang2
%%DATADIR%%/bflang/highlighter.bflang2
%%DATADIR%%/bflang/html.bflang2
%%DATADIR%%/bflang/html5.bflang2
%%DATADIR%%/bflang/java.bflang2
%%DATADIR%%/bflang/javascript.bflang2
%%DATADIR%%/bflang/json.bflang2
%%DATADIR%%/bflang/jsp.bflang2
%%DATADIR%%/bflang/latex.bflang2
%%DATADIR%%/bflang/lua.bflang2
%%DATADIR%%/bflang/mediawiki.bflang2
%%DATADIR%%/bflang/nsis.bflang2
%%DATADIR%%/bflang/octave.bflang2
%%DATADIR%%/bflang/pascal.bflang2
%%DATADIR%%/bflang/perl.bflang2
%%DATADIR%%/bflang/php.bflang2
%%DATADIR%%/bflang/po.bflang2
%%DATADIR%%/bflang/processing.bflang2
%%DATADIR%%/bflang/python.bflang2
%%DATADIR%%/bflang/r.bflang2
%%DATADIR%%/bflang/ruby.bflang2
%%DATADIR%%/bflang/sass.bflang2
%%DATADIR%%/bflang/scheme.bflang2
%%DATADIR%%/bflang/shell.bflang2
%%DATADIR%%/bflang/smarty.bflang2
%%DATADIR%%/bflang/sql.bflang2
%%DATADIR%%/bflang/svg.bflang2
%%DATADIR%%/bflang/text.bflang2
%%DATADIR%%/bflang/vala.bflang2
%%DATADIR%%/bflang/vbscript.bflang2
%%DATADIR%%/bflang/wordpress.bfinc
%%DATADIR%%/bflang/wordpress.bflang2
%%DATADIR%%/bflang/xhtml.bflang2
%%DATADIR%%/bflang/xml.bflang2
%%DATADIR%%/bflang/xslt.bflang2
%%DATADIR%%/bflib/bflib_DocBook_4_5.xml.gz
%%DATADIR%%/bflib/bflib_DocBook_5_0.xml.gz
%%DATADIR%%/bflib/bflib_SVG_1_0.xml.gz
%%DATADIR%%/bflib/bflib_SVG_1_1_Basic.xml.gz
%%DATADIR%%/bflib/bflib_SVG_1_1_Full.xml.gz
%%DATADIR%%/bflib/bflib_SVG_1_1_Tiny.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_0_Frameset.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_0_Strict.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_0_Transitional.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_0_W3C.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_1.xml.gz
%%DATADIR%%/bflib/bflib_css2.xml.gz
%%DATADIR%%/bflib/bflib_dom.xml.gz
%%DATADIR%%/bflib/bflib_php4.xml.gz
%%DATADIR%%/bflib/bflib_php5.xml.gz
%%DATADIR%%/bflib/bflib_php5_with_examples.xml.gz
%%DATADIR%%/bflib/bflib_python_2.3.xml.gz
%%DATADIR%%/bflib/bflib_xhtml.xml.gz
%%DATADIR%%/bluefish_splash.png
%%DATADIR%%/colorprofiles/Dark_theme
%%DATADIR%%/colorprofiles/Light_theme
%%DATADIR%%/css_decompressor
%%DATADIR%%/cssmin.py
%%DATADIR%%/default_accelmap
%%DATADIR%%/encodings
%%DATADIR%%/jsbeautifier/__init__.py
%%DATADIR%%/jsbeautifier/__version__.py
%%DATADIR%%/jsbeautifier/unpackers/__init__.py
%%DATADIR%%/jsbeautifier/unpackers/evalbased.py
%%DATADIR%%/jsbeautifier/unpackers/javascriptobfuscator.py
%%DATADIR%%/jsbeautifier/unpackers/myobfuscate.py
%%DATADIR%%/jsbeautifier/unpackers/packer.py
%%DATADIR%%/jsbeautifier/unpackers/urlencode.py
%%DATADIR%%/jsbeautify
%%DATADIR%%/jsmin.py
%%DATADIR%%/lorem-ipsum-generator
%%DATADIR%%/plugins/htmlbar/ui/htmlbar_menu_ui.xml
%%DATADIR%%/plugins/zencoding/__init__.py
%%DATADIR%%/plugins/zencoding/actions/__init__.py
%%DATADIR%%/plugins/zencoding/actions/basic.py
%%DATADIR%%/plugins/zencoding/actions/token.py
%%DATADIR%%/plugins/zencoding/actions/traverse.py
%%DATADIR%%/plugins/zencoding/filters/__init__.py
%%DATADIR%%/plugins/zencoding/filters/comment.py
%%DATADIR%%/plugins/zencoding/filters/css.py
%%DATADIR%%/plugins/zencoding/filters/escape.py
%%DATADIR%%/plugins/zencoding/filters/format-css.py
%%DATADIR%%/plugins/zencoding/filters/format.py
%%DATADIR%%/plugins/zencoding/filters/haml.py
%%DATADIR%%/plugins/zencoding/filters/html.py
%%DATADIR%%/plugins/zencoding/filters/single-line.py
%%DATADIR%%/plugins/zencoding/filters/trim.py
%%DATADIR%%/plugins/zencoding/filters/xsl.py
%%DATADIR%%/plugins/zencoding/html_matcher.py
%%DATADIR%%/plugins/zencoding/interface/__init__.py
%%DATADIR%%/plugins/zencoding/interface/editor.py
%%DATADIR%%/plugins/zencoding/interface/file.py
%%DATADIR%%/plugins/zencoding/parser/__init__.py
%%DATADIR%%/plugins/zencoding/parser/abbreviation.py
%%DATADIR%%/plugins/zencoding/parser/css.py
%%DATADIR%%/plugins/zencoding/parser/utils.py
%%DATADIR%%/plugins/zencoding/parser/xml.py
%%DATADIR%%/plugins/zencoding/resources.py
%%DATADIR%%/plugins/zencoding/utils.py
%%DATADIR%%/plugins/zencoding/zen_settings.py
%%DATADIR%%/snippets
%%DATADIR%%/templates/C_header
%%DATADIR%%/templates/C_header_GPL
%%DATADIR%%/templates/HTML_5
%%DATADIR%%/templates/PHP
%%DATADIR%%/templates/XHTML_1.0
%%DATADIR%%/ui/bluefish_menu_ui.xml
%%PORTDOCS%%%%DOCSDIR%%/bflang/sample.bflang2
share/icons/hicolor/128x128/apps/bluefish.png
share/icons/hicolor/128x128/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/16x16/apps/bluefish.png
share/icons/hicolor/16x16/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/192x192/apps/bluefish.png
share/icons/hicolor/192x192/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/22x22/apps/bluefish.png
share/icons/hicolor/22x22/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/256x256/apps/bluefish.png
share/icons/hicolor/256x256/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/32x32/apps/bluefish.png
share/icons/hicolor/32x32/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/36x36/apps/bluefish.png
share/icons/hicolor/36x36/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/48x48/apps/bluefish.png
share/icons/hicolor/48x48/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/512x512/apps/bluefish.png
share/icons/hicolor/512x512/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/64x64/apps/bluefish.png
share/icons/hicolor/64x64/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/72x72/apps/bluefish.png
share/icons/hicolor/72x72/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/96x96/apps/bluefish.png
share/icons/hicolor/96x96/mimetypes/application-x-bluefish-project.png
share/icons/hicolor/scalable/apps/bluefish-icon.svg
share/icons/hicolor/scalable/mimetypes/bluefish-project.svg
share/locale/ar/LC_MESSAGES/bluefish.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/bg/LC_MESSAGES/bluefish.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ca/LC_MESSAGES/bluefish.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/cs/LC_MESSAGES/bluefish.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/da/LC_MESSAGES/bluefish.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/de/LC_MESSAGES/bluefish.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/el/LC_MESSAGES/bluefish.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/en/LC_MESSAGES/bluefish.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/es/LC_MESSAGES/bluefish.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/eu/LC_MESSAGES/bluefish.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/fa/LC_MESSAGES/bluefish.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/fi/LC_MESSAGES/bluefish.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/fr/LC_MESSAGES/bluefish.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/gl/LC_MESSAGES/bluefish.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/hu/LC_MESSAGES/bluefish.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/it/LC_MESSAGES/bluefish.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ja/LC_MESSAGES/bluefish.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ko/LC_MESSAGES/bluefish.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/nb/LC_MESSAGES/bluefish.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/nl/LC_MESSAGES/bluefish.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/nn/LC_MESSAGES/bluefish.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/pl/LC_MESSAGES/bluefish.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/pt/LC_MESSAGES/bluefish.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/pt_BR/LC_MESSAGES/bluefish.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ro/LC_MESSAGES/bluefish.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ru/LC_MESSAGES/bluefish.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/sk/LC_MESSAGES/bluefish.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/sr/LC_MESSAGES/bluefish.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/sv/LC_MESSAGES/bluefish.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ta/LC_MESSAGES/bluefish.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/tr/LC_MESSAGES/bluefish.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/uk/LC_MESSAGES/bluefish.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/zh_CN/LC_MESSAGES/bluefish.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/zh_TW/LC_MESSAGES/bluefish.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/mime/packages/bluefish.xml
share/pixmaps/application-x-bluefish-project.png
share/pixmaps/bluefish.png
share/xml/bluefish/2.0/bflang2.rng
share/xml/bluefish/catalog.xml

If we run a diff -y old-pkg-plist new-pkg-plist we can see what is different, and it appears that we really need to make just one small adjustment.

bin/bluefish								bin/bluefish
lib/bluefish/about.so							lib/bluefish/about.so
%%GTK3%%lib/bluefish/charmap.so					|       lib/bluefish/charmap.so
lib/bluefish/entities.so						lib/bluefish/entities.so
lib/bluefish/htmlbar.so							lib/bluefish/htmlbar.so
lib/bluefish/infbrowser.so						lib/bluefish/infbrowser.so
lib/bluefish/snippets.so						lib/bluefish/snippets.so
lib/bluefish/zencoding.so						lib/bluefish/zencoding.so
man/man1/bluefish.1.gz							man/man1/bluefish.1.gz
share/appdata/bluefish.appdata.xml					share/appdata/bluefish.appdata.xml
share/applications/bluefish.desktop					share/applications/bluefish.desktop
%%DATADIR%%/bflang/JQuery.bfinc						%%DATADIR%%/bflang/JQuery.bfinc
%%DATADIR%%/bflang/ada.bflang2						%%DATADIR%%/bflang/ada.bflang2
%%DATADIR%%/bflang/all-html.bfinc					%%DATADIR%%/bflang/all-html.bfinc
%%DATADIR%%/bflang/all-html5.bfinc					%%DATADIR%%/bflang/all-html5.bfinc
%%DATADIR%%/bflang/all-javascript.bfinc					%%DATADIR%%/bflang/all-javascript.bfinc
%%DATADIR%%/bflang/all-php.bfinc					%%DATADIR%%/bflang/all-php.bfinc
%%DATADIR%%/bflang/all-vbscript.bfinc					%%DATADIR%%/bflang/all-vbscript.bfinc
%%DATADIR%%/bflang/asp-vbscript.bflang2					%%DATADIR%%/bflang/asp-vbscript.bflang2
%%DATADIR%%/bflang/asp.bflang2						%%DATADIR%%/bflang/asp.bflang2
%%DATADIR%%/bflang/bflang2.bflang2					%%DATADIR%%/bflang/bflang2.bflang2
%%DATADIR%%/bflang/c.bflang2						%%DATADIR%%/bflang/c.bflang2
%%DATADIR%%/bflang/cfml.bflang2						%%DATADIR%%/bflang/cfml.bflang2
%%DATADIR%%/bflang/chuck.bflang2					%%DATADIR%%/bflang/chuck.bflang2
%%DATADIR%%/bflang/clojure.bflang2					%%DATADIR%%/bflang/clojure.bflang2
%%DATADIR%%/bflang/cpp.bflang2						%%DATADIR%%/bflang/cpp.bflang2
%%DATADIR%%/bflang/css-rules.bfinc					%%DATADIR%%/bflang/css-rules.bfinc
%%DATADIR%%/bflang/css-selectors.bfinc					%%DATADIR%%/bflang/css-selectors.bfinc
%%DATADIR%%/bflang/css.bflang2						%%DATADIR%%/bflang/css.bflang2
%%DATADIR%%/bflang/d.bflang2						%%DATADIR%%/bflang/d.bflang2
%%DATADIR%%/bflang/diff.bflang2						%%DATADIR%%/bflang/diff.bflang2
%%DATADIR%%/bflang/go.bflang2						%%DATADIR%%/bflang/go.bflang2
%%DATADIR%%/bflang/highlighter.bflang2					%%DATADIR%%/bflang/highlighter.bflang2
%%DATADIR%%/bflang/html.bflang2						%%DATADIR%%/bflang/html.bflang2
%%DATADIR%%/bflang/html5.bflang2					%%DATADIR%%/bflang/html5.bflang2
%%DATADIR%%/bflang/java.bflang2						%%DATADIR%%/bflang/java.bflang2
%%DATADIR%%/bflang/javascript.bflang2					%%DATADIR%%/bflang/javascript.bflang2
%%DATADIR%%/bflang/json.bflang2						%%DATADIR%%/bflang/json.bflang2
%%DATADIR%%/bflang/jsp.bflang2						%%DATADIR%%/bflang/jsp.bflang2
%%DATADIR%%/bflang/latex.bflang2					%%DATADIR%%/bflang/latex.bflang2
%%DATADIR%%/bflang/lua.bflang2						%%DATADIR%%/bflang/lua.bflang2
%%DATADIR%%/bflang/mediawiki.bflang2					%%DATADIR%%/bflang/mediawiki.bflang2
%%DATADIR%%/bflang/nsis.bflang2						%%DATADIR%%/bflang/nsis.bflang2
%%DATADIR%%/bflang/octave.bflang2					%%DATADIR%%/bflang/octave.bflang2
%%DATADIR%%/bflang/pascal.bflang2					%%DATADIR%%/bflang/pascal.bflang2
%%DATADIR%%/bflang/perl.bflang2						%%DATADIR%%/bflang/perl.bflang2
%%DATADIR%%/bflang/php.bflang2						%%DATADIR%%/bflang/php.bflang2
%%DATADIR%%/bflang/po.bflang2						%%DATADIR%%/bflang/po.bflang2
%%DATADIR%%/bflang/processing.bflang2					%%DATADIR%%/bflang/processing.bflang2
%%DATADIR%%/bflang/python.bflang2					%%DATADIR%%/bflang/python.bflang2
%%DATADIR%%/bflang/r.bflang2						%%DATADIR%%/bflang/r.bflang2
%%DATADIR%%/bflang/ruby.bflang2						%%DATADIR%%/bflang/ruby.bflang2
%%DATADIR%%/bflang/sass.bflang2						%%DATADIR%%/bflang/sass.bflang2
%%DATADIR%%/bflang/scheme.bflang2					%%DATADIR%%/bflang/scheme.bflang2
%%DATADIR%%/bflang/shell.bflang2					%%DATADIR%%/bflang/shell.bflang2
%%DATADIR%%/bflang/smarty.bflang2					%%DATADIR%%/bflang/smarty.bflang2
%%DATADIR%%/bflang/sql.bflang2						%%DATADIR%%/bflang/sql.bflang2
%%DATADIR%%/bflang/svg.bflang2						%%DATADIR%%/bflang/svg.bflang2
%%DATADIR%%/bflang/text.bflang2						%%DATADIR%%/bflang/text.bflang2
%%DATADIR%%/bflang/vala.bflang2						%%DATADIR%%/bflang/vala.bflang2
%%DATADIR%%/bflang/vbscript.bflang2					%%DATADIR%%/bflang/vbscript.bflang2
%%DATADIR%%/bflang/wordpress.bfinc					%%DATADIR%%/bflang/wordpress.bfinc
%%DATADIR%%/bflang/wordpress.bflang2					%%DATADIR%%/bflang/wordpress.bflang2
%%DATADIR%%/bflang/xhtml.bflang2					%%DATADIR%%/bflang/xhtml.bflang2
%%DATADIR%%/bflang/xml.bflang2						%%DATADIR%%/bflang/xml.bflang2
%%DATADIR%%/bflang/xslt.bflang2						%%DATADIR%%/bflang/xslt.bflang2
%%DATADIR%%/bflib/bflib_DocBook_4_5.xml.gz				%%DATADIR%%/bflib/bflib_DocBook_4_5.xml.gz
%%DATADIR%%/bflib/bflib_DocBook_5_0.xml.gz				%%DATADIR%%/bflib/bflib_DocBook_5_0.xml.gz
%%DATADIR%%/bflib/bflib_SVG_1_0.xml.gz					%%DATADIR%%/bflib/bflib_SVG_1_0.xml.gz
%%DATADIR%%/bflib/bflib_SVG_1_1_Basic.xml.gz				%%DATADIR%%/bflib/bflib_SVG_1_1_Basic.xml.gz
%%DATADIR%%/bflib/bflib_SVG_1_1_Full.xml.gz				%%DATADIR%%/bflib/bflib_SVG_1_1_Full.xml.gz
%%DATADIR%%/bflib/bflib_SVG_1_1_Tiny.xml.gz				%%DATADIR%%/bflib/bflib_SVG_1_1_Tiny.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_0_Frameset.xml.gz			%%DATADIR%%/bflib/bflib_XHTML_1_0_Frameset.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_0_Strict.xml.gz				%%DATADIR%%/bflib/bflib_XHTML_1_0_Strict.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_0_Transitional.xml.gz			%%DATADIR%%/bflib/bflib_XHTML_1_0_Transitional.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_0_W3C.xml.gz				%%DATADIR%%/bflib/bflib_XHTML_1_0_W3C.xml.gz
%%DATADIR%%/bflib/bflib_XHTML_1_1.xml.gz				%%DATADIR%%/bflib/bflib_XHTML_1_1.xml.gz
%%DATADIR%%/bflib/bflib_css2.xml.gz					%%DATADIR%%/bflib/bflib_css2.xml.gz
%%DATADIR%%/bflib/bflib_dom.xml.gz					%%DATADIR%%/bflib/bflib_dom.xml.gz
%%DATADIR%%/bflib/bflib_php4.xml.gz					%%DATADIR%%/bflib/bflib_php4.xml.gz
%%DATADIR%%/bflib/bflib_php5.xml.gz					%%DATADIR%%/bflib/bflib_php5.xml.gz
%%DATADIR%%/bflib/bflib_php5_with_examples.xml.gz			%%DATADIR%%/bflib/bflib_php5_with_examples.xml.gz
%%DATADIR%%/bflib/bflib_python_2.3.xml.gz				%%DATADIR%%/bflib/bflib_python_2.3.xml.gz
%%DATADIR%%/bflib/bflib_xhtml.xml.gz					%%DATADIR%%/bflib/bflib_xhtml.xml.gz
%%DATADIR%%/bluefish_splash.png						%%DATADIR%%/bluefish_splash.png
%%DATADIR%%/colorprofiles/Dark_theme					%%DATADIR%%/colorprofiles/Dark_theme
%%DATADIR%%/colorprofiles/Light_theme					%%DATADIR%%/colorprofiles/Light_theme
%%DATADIR%%/css_decompressor						%%DATADIR%%/css_decompressor
%%DATADIR%%/cssmin.py							%%DATADIR%%/cssmin.py
%%DATADIR%%/default_accelmap						%%DATADIR%%/default_accelmap
%%DATADIR%%/encodings							%%DATADIR%%/encodings
%%DATADIR%%/jsbeautifier/__init__.py					%%DATADIR%%/jsbeautifier/__init__.py
%%DATADIR%%/jsbeautifier/__version__.py					%%DATADIR%%/jsbeautifier/__version__.py
%%DATADIR%%/jsbeautifier/unpackers/__init__.py				%%DATADIR%%/jsbeautifier/unpackers/__init__.py
%%DATADIR%%/jsbeautifier/unpackers/evalbased.py				%%DATADIR%%/jsbeautifier/unpackers/evalbased.py
%%DATADIR%%/jsbeautifier/unpackers/javascriptobfuscator.p		%%DATADIR%%/jsbeautifier/unpackers/javascriptobfuscator.p
%%DATADIR%%/jsbeautifier/unpackers/myobfuscate.py			%%DATADIR%%/jsbeautifier/unpackers/myobfuscate.py
%%DATADIR%%/jsbeautifier/unpackers/packer.py				%%DATADIR%%/jsbeautifier/unpackers/packer.py
%%DATADIR%%/jsbeautifier/unpackers/urlencode.py				%%DATADIR%%/jsbeautifier/unpackers/urlencode.py
%%DATADIR%%/jsbeautify							%%DATADIR%%/jsbeautify
%%DATADIR%%/jsmin.py							%%DATADIR%%/jsmin.py
%%DATADIR%%/lipsum/__init__.py					<
%%DATADIR%%/lipsum/data/dictionary.txt				<
%%DATADIR%%/lipsum/data/lipsum.xml				<
%%DATADIR%%/lipsum/data/sample.txt				<
%%DATADIR%%/lorem-ipsum-generator					%%DATADIR%%/lorem-ipsum-generator
%%DATADIR%%/plugins/htmlbar/ui/htmlbar_menu_ui.xml			%%DATADIR%%/plugins/htmlbar/ui/htmlbar_menu_ui.xml
%%DATADIR%%/plugins/zencoding/__init__.py				%%DATADIR%%/plugins/zencoding/__init__.py
%%DATADIR%%/plugins/zencoding/actions/__init__.py			%%DATADIR%%/plugins/zencoding/actions/__init__.py
%%DATADIR%%/plugins/zencoding/actions/basic.py				%%DATADIR%%/plugins/zencoding/actions/basic.py
%%DATADIR%%/plugins/zencoding/actions/token.py				%%DATADIR%%/plugins/zencoding/actions/token.py
%%DATADIR%%/plugins/zencoding/actions/traverse.py			%%DATADIR%%/plugins/zencoding/actions/traverse.py
%%DATADIR%%/plugins/zencoding/filters/__init__.py			%%DATADIR%%/plugins/zencoding/filters/__init__.py
%%DATADIR%%/plugins/zencoding/filters/comment.py			%%DATADIR%%/plugins/zencoding/filters/comment.py
%%DATADIR%%/plugins/zencoding/filters/css.py				%%DATADIR%%/plugins/zencoding/filters/css.py
%%DATADIR%%/plugins/zencoding/filters/escape.py				%%DATADIR%%/plugins/zencoding/filters/escape.py
%%DATADIR%%/plugins/zencoding/filters/format-css.py			%%DATADIR%%/plugins/zencoding/filters/format-css.py
%%DATADIR%%/plugins/zencoding/filters/format.py				%%DATADIR%%/plugins/zencoding/filters/format.py
%%DATADIR%%/plugins/zencoding/filters/haml.py				%%DATADIR%%/plugins/zencoding/filters/haml.py
%%DATADIR%%/plugins/zencoding/filters/html.py				%%DATADIR%%/plugins/zencoding/filters/html.py
%%DATADIR%%/plugins/zencoding/filters/single-line.py			%%DATADIR%%/plugins/zencoding/filters/single-line.py
%%DATADIR%%/plugins/zencoding/filters/trim.py				%%DATADIR%%/plugins/zencoding/filters/trim.py
%%DATADIR%%/plugins/zencoding/filters/xsl.py				%%DATADIR%%/plugins/zencoding/filters/xsl.py
%%DATADIR%%/plugins/zencoding/html_matcher.py				%%DATADIR%%/plugins/zencoding/html_matcher.py
%%DATADIR%%/plugins/zencoding/interface/__init__.py			%%DATADIR%%/plugins/zencoding/interface/__init__.py
%%DATADIR%%/plugins/zencoding/interface/editor.py			%%DATADIR%%/plugins/zencoding/interface/editor.py
%%DATADIR%%/plugins/zencoding/interface/file.py				%%DATADIR%%/plugins/zencoding/interface/file.py
%%DATADIR%%/plugins/zencoding/parser/__init__.py			%%DATADIR%%/plugins/zencoding/parser/__init__.py
%%DATADIR%%/plugins/zencoding/parser/abbreviation.py			%%DATADIR%%/plugins/zencoding/parser/abbreviation.py
%%DATADIR%%/plugins/zencoding/parser/css.py				%%DATADIR%%/plugins/zencoding/parser/css.py
%%DATADIR%%/plugins/zencoding/parser/utils.py				%%DATADIR%%/plugins/zencoding/parser/utils.py
%%DATADIR%%/plugins/zencoding/parser/xml.py				%%DATADIR%%/plugins/zencoding/parser/xml.py
%%DATADIR%%/plugins/zencoding/resources.py				%%DATADIR%%/plugins/zencoding/resources.py
%%DATADIR%%/plugins/zencoding/utils.py					%%DATADIR%%/plugins/zencoding/utils.py
%%DATADIR%%/plugins/zencoding/zen_settings.py				%%DATADIR%%/plugins/zencoding/zen_settings.py
%%DATADIR%%/snippets							%%DATADIR%%/snippets
%%DATADIR%%/templates/C_header						%%DATADIR%%/templates/C_header
%%DATADIR%%/templates/C_header_GPL					%%DATADIR%%/templates/C_header_GPL
%%DATADIR%%/templates/HTML_5						%%DATADIR%%/templates/HTML_5
%%DATADIR%%/templates/PHP						%%DATADIR%%/templates/PHP
%%DATADIR%%/templates/XHTML_1.0						%%DATADIR%%/templates/XHTML_1.0
%%DATADIR%%/ui/bluefish_menu_ui.xml					%%DATADIR%%/ui/bluefish_menu_ui.xml
%%PORTDOCS%%%%DOCSDIR%%/bflang/sample.bflang2				%%PORTDOCS%%%%DOCSDIR%%/bflang/sample.bflang2
share/icons/hicolor/128x128/apps/bluefish.png				share/icons/hicolor/128x128/apps/bluefish.png
share/icons/hicolor/128x128/mimetypes/application-x-bluef		share/icons/hicolor/128x128/mimetypes/application-x-bluef
share/icons/hicolor/16x16/apps/bluefish.png				share/icons/hicolor/16x16/apps/bluefish.png
share/icons/hicolor/16x16/mimetypes/application-x-bluefis		share/icons/hicolor/16x16/mimetypes/application-x-bluefis
share/icons/hicolor/192x192/apps/bluefish.png				share/icons/hicolor/192x192/apps/bluefish.png
share/icons/hicolor/192x192/mimetypes/application-x-bluef		share/icons/hicolor/192x192/mimetypes/application-x-bluef
share/icons/hicolor/22x22/apps/bluefish.png				share/icons/hicolor/22x22/apps/bluefish.png
share/icons/hicolor/22x22/mimetypes/application-x-bluefis		share/icons/hicolor/22x22/mimetypes/application-x-bluefis
share/icons/hicolor/256x256/apps/bluefish.png				share/icons/hicolor/256x256/apps/bluefish.png
share/icons/hicolor/256x256/mimetypes/application-x-bluef		share/icons/hicolor/256x256/mimetypes/application-x-bluef
share/icons/hicolor/32x32/apps/bluefish.png				share/icons/hicolor/32x32/apps/bluefish.png
share/icons/hicolor/32x32/mimetypes/application-x-bluefis		share/icons/hicolor/32x32/mimetypes/application-x-bluefis
share/icons/hicolor/36x36/apps/bluefish.png				share/icons/hicolor/36x36/apps/bluefish.png
share/icons/hicolor/36x36/mimetypes/application-x-bluefis		share/icons/hicolor/36x36/mimetypes/application-x-bluefis
share/icons/hicolor/48x48/apps/bluefish.png				share/icons/hicolor/48x48/apps/bluefish.png
share/icons/hicolor/48x48/mimetypes/application-x-bluefis		share/icons/hicolor/48x48/mimetypes/application-x-bluefis
share/icons/hicolor/512x512/apps/bluefish.png				share/icons/hicolor/512x512/apps/bluefish.png
share/icons/hicolor/512x512/mimetypes/application-x-bluef		share/icons/hicolor/512x512/mimetypes/application-x-bluef
share/icons/hicolor/64x64/apps/bluefish.png				share/icons/hicolor/64x64/apps/bluefish.png
share/icons/hicolor/64x64/mimetypes/application-x-bluefis		share/icons/hicolor/64x64/mimetypes/application-x-bluefis
share/icons/hicolor/72x72/apps/bluefish.png				share/icons/hicolor/72x72/apps/bluefish.png
share/icons/hicolor/72x72/mimetypes/application-x-bluefis		share/icons/hicolor/72x72/mimetypes/application-x-bluefis
share/icons/hicolor/96x96/apps/bluefish.png				share/icons/hicolor/96x96/apps/bluefish.png
share/icons/hicolor/96x96/mimetypes/application-x-bluefis		share/icons/hicolor/96x96/mimetypes/application-x-bluefis
share/icons/hicolor/scalable/apps/bluefish-icon.svg			share/icons/hicolor/scalable/apps/bluefish-icon.svg
share/icons/hicolor/scalable/mimetypes/bluefish-project.s		share/icons/hicolor/scalable/mimetypes/bluefish-project.s
share/locale/ar/LC_MESSAGES/bluefish.mo					share/locale/ar/LC_MESSAGES/bluefish.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/ar/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/ar/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/ar/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/ar/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/ar/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/ar/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ar/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/ar/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/bg/LC_MESSAGES/bluefish.mo					share/locale/bg/LC_MESSAGES/bluefish.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/bg/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/bg/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/bg/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/bg/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/bg/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/bg/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/bg/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/bg/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ca/LC_MESSAGES/bluefish.mo					share/locale/ca/LC_MESSAGES/bluefish.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/ca/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/ca/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/ca/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/ca/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/ca/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/ca/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ca/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/ca/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/cs/LC_MESSAGES/bluefish.mo					share/locale/cs/LC_MESSAGES/bluefish.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/cs/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/cs/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/cs/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/cs/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/cs/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/cs/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/cs/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/cs/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/da/LC_MESSAGES/bluefish.mo					share/locale/da/LC_MESSAGES/bluefish.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/da/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/da/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/da/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/da/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/da/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/da/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/da/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/da/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/de/LC_MESSAGES/bluefish.mo					share/locale/de/LC_MESSAGES/bluefish.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/de/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/de/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/de/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/de/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/de/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/de/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/de/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/de/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/el/LC_MESSAGES/bluefish.mo					share/locale/el/LC_MESSAGES/bluefish.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/el/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/el/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/el/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/el/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/el/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/el/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/el/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/el/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/en/LC_MESSAGES/bluefish.mo					share/locale/en/LC_MESSAGES/bluefish.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/en/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/en/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/en/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/en/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/en/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/en/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/en/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/en/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/es/LC_MESSAGES/bluefish.mo					share/locale/es/LC_MESSAGES/bluefish.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/es/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/es/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/es/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/es/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/es/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/es/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/es/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/es/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/eu/LC_MESSAGES/bluefish.mo					share/locale/eu/LC_MESSAGES/bluefish.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/eu/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/eu/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/eu/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/eu/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/eu/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/eu/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/eu/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/eu/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/fa/LC_MESSAGES/bluefish.mo					share/locale/fa/LC_MESSAGES/bluefish.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/fa/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/fa/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/fa/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/fa/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/fa/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/fa/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/fa/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/fa/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/fi/LC_MESSAGES/bluefish.mo					share/locale/fi/LC_MESSAGES/bluefish.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/fi/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/fi/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/fi/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/fi/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/fi/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/fi/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/fi/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/fi/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/fr/LC_MESSAGES/bluefish.mo					share/locale/fr/LC_MESSAGES/bluefish.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/fr/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/fr/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/fr/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/fr/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/fr/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/fr/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/fr/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/fr/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/gl/LC_MESSAGES/bluefish.mo					share/locale/gl/LC_MESSAGES/bluefish.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/gl/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/gl/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/gl/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/gl/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/gl/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/gl/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/gl/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/gl/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/hu/LC_MESSAGES/bluefish.mo					share/locale/hu/LC_MESSAGES/bluefish.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/hu/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/hu/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/hu/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/hu/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/hu/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/hu/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/hu/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/hu/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/it/LC_MESSAGES/bluefish.mo					share/locale/it/LC_MESSAGES/bluefish.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/it/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/it/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/it/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/it/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/it/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/it/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/it/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/it/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ja/LC_MESSAGES/bluefish.mo					share/locale/ja/LC_MESSAGES/bluefish.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/ja/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/ja/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/ja/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/ja/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/ja/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/ja/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ja/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/ja/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ko/LC_MESSAGES/bluefish.mo					share/locale/ko/LC_MESSAGES/bluefish.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/ko/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/ko/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/ko/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/ko/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/ko/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/ko/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ko/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/ko/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/nb/LC_MESSAGES/bluefish.mo					share/locale/nb/LC_MESSAGES/bluefish.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/nb/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/nb/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/nb/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/nb/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/nb/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/nb/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/nb/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/nb/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/nl/LC_MESSAGES/bluefish.mo					share/locale/nl/LC_MESSAGES/bluefish.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/nl/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/nl/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/nl/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/nl/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/nl/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/nl/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/nl/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/nl/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/nn/LC_MESSAGES/bluefish.mo					share/locale/nn/LC_MESSAGES/bluefish.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/nn/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/nn/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/nn/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/nn/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/nn/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/nn/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/nn/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/nn/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/pl/LC_MESSAGES/bluefish.mo					share/locale/pl/LC_MESSAGES/bluefish.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/pl/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/pl/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/pl/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/pl/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/pl/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/pl/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/pl/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/pl/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/pt/LC_MESSAGES/bluefish.mo					share/locale/pt/LC_MESSAGES/bluefish.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/pt/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/pt/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/pt/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/pt/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/pt/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/pt/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/pt/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/pt/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/pt_BR/LC_MESSAGES/bluefish.mo				share/locale/pt_BR/LC_MESSAGES/bluefish.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_charmap.mo		share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_entities.m		share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_entities.m
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_htmlbar.mo		share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_infbrowser		share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_infbrowser
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_snippets.m		share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_snippets.m
share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_zencoding.		share/locale/pt_BR/LC_MESSAGES/bluefish_plugin_zencoding.
share/locale/ro/LC_MESSAGES/bluefish.mo					share/locale/ro/LC_MESSAGES/bluefish.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/ro/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/ro/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/ro/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/ro/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/ro/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/ro/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ro/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/ro/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ru/LC_MESSAGES/bluefish.mo					share/locale/ru/LC_MESSAGES/bluefish.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/ru/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/ru/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/ru/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/ru/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/ru/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/ru/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ru/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/ru/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/sk/LC_MESSAGES/bluefish.mo					share/locale/sk/LC_MESSAGES/bluefish.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/sk/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/sk/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/sk/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/sk/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/sk/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/sk/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/sk/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/sk/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/sr/LC_MESSAGES/bluefish.mo					share/locale/sr/LC_MESSAGES/bluefish.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/sr/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/sr/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/sr/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/sr/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/sr/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/sr/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/sr/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/sr/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/sv/LC_MESSAGES/bluefish.mo					share/locale/sv/LC_MESSAGES/bluefish.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/sv/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/sv/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/sv/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/sv/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/sv/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/sv/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/sv/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/sv/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/ta/LC_MESSAGES/bluefish.mo					share/locale/ta/LC_MESSAGES/bluefish.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/ta/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/ta/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/ta/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/ta/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/ta/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/ta/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/ta/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/ta/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/tr/LC_MESSAGES/bluefish.mo					share/locale/tr/LC_MESSAGES/bluefish.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/tr/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/tr/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/tr/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/tr/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/tr/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/tr/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/tr/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/tr/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/uk/LC_MESSAGES/bluefish.mo					share/locale/uk/LC_MESSAGES/bluefish.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/uk/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_charmap.mo			share/locale/uk/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_entities.mo			share/locale/uk/LC_MESSAGES/bluefish_plugin_entities.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_htmlbar.mo			share/locale/uk/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_infbrowser.mo		share/locale/uk/LC_MESSAGES/bluefish_plugin_infbrowser.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_snippets.mo			share/locale/uk/LC_MESSAGES/bluefish_plugin_snippets.mo
share/locale/uk/LC_MESSAGES/bluefish_plugin_zencoding.mo		share/locale/uk/LC_MESSAGES/bluefish_plugin_zencoding.mo
share/locale/zh_CN/LC_MESSAGES/bluefish.mo				share/locale/zh_CN/LC_MESSAGES/bluefish.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_charmap.mo		share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_entities.m		share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_entities.m
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_htmlbar.mo		share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_infbrowser		share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_infbrowser
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_snippets.m		share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_snippets.m
share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_zencoding.		share/locale/zh_CN/LC_MESSAGES/bluefish_plugin_zencoding.
share/locale/zh_TW/LC_MESSAGES/bluefish.mo				share/locale/zh_TW/LC_MESSAGES/bluefish.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_about.mo			share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_about.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_charmap.mo		share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_charmap.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_entities.m		share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_entities.m
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_htmlbar.mo		share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_htmlbar.mo
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_infbrowser		share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_infbrowser
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_snippets.m		share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_snippets.m
share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_zencoding.		share/locale/zh_TW/LC_MESSAGES/bluefish_plugin_zencoding.
share/mime/packages/bluefish.xml					share/mime/packages/bluefish.xml
share/pixmaps/application-x-bluefish-project.png			share/pixmaps/application-x-bluefish-project.png
share/pixmaps/bluefish.png						share/pixmaps/bluefish.png
share/xml/bluefish/2.0/bflang2.rng					share/xml/bluefish/2.0/bflang2.rng
share/xml/bluefish/catalog.xml						share/xml/bluefish/catalog.xml

We can assume that the new build may not include some files, so for us, we can ignore that some files are missing in the list on the right, but what is more important is the third line.  This is a special variable relating to the gtk install directory, similar variables are mentioned in the porter's handbook under 8.5.  Automated Package List Creation.  Now that the pkg-plist is updated, along with the distinfo, we can build with poudriere testport or the normal build, as either make install clean or make reinstall clean depending on whether you still have the old bluefish installed.  How do we tell the port maintainer about our success and what should we include? We file an appropriate bug report and we attach or paste the contents of the output for

pkg info bluefish
bluefish-2.2.12
Name           : bluefish
Version        : 2.2.12
Installed on   : Sun Feb  7 07:26:34 2021 CST
Origin         : www/bluefish
Architecture   : FreeBSD:12:amd64
Prefix         : /usr/local
Categories     : editors www
Licenses       : GPLv3+
Maintainer     : woodsb02@FreeBSD.org
WWW            : http://bluefish.openoffice.nl/
Comment        : HTML editor designed for the experienced web designer
Options        :
        DEBUG          : off
        DOCS           : on
        GTK2           : off
        GTK3           : on
        TIDY           : on
Shared Libs required:
        libgdk-3.so.0
        libglib-2.0.so.0
        libgucharmap_2_90.so.7
        libgobject-2.0.so.0
        libpango-1.0.so.0
        libcairo.so.2
        libgtk-3.so.0
        libxml2.so.2
        libintl.so.8
        libcairo-gobject.so.2
        libatk-1.0.so.0
        libgmodule-2.0.so.0
        libgthread-2.0.so.0
        libenchant.so.1
        libgdk_pixbuf-2.0.so.0
        libpython3.7m.so.1.0
        libgio-2.0.so.0
        libpangocairo-1.0.so.0
Annotations    :
        FreeBSD_version: 1202504
        repo_type      : binary
        repository     : poudriere
Flat size      : 9.21MiB
Description    :
Bluefish is a powerful editor targeted towards programmers and web
developers, with many options to write websites, scripts and programming
code. Bluefish supports many programming and markup languages and has
many features, but is still a very fast and lightweight application.

WWW: http://bluefish.openoffice.nl/
The bug report all filled out.

I challenge you all to do the same process with any of your more favorite ports which you ever discover might be in need of an update.  If it is not such a simple effort, like my other attempt for enlightenment, you can beat on it a bit more to succeed, your mileage will vary, I cannot guess what you will run into.  However, if you eventually succeed, just as when it is simple, gather the information and submit a bug report.  You will need to make an account on the FreeBSD bugzilla site but you can certainly use freshports report bug icon freshports bug report icon for that port entry to get there.

The response can be quick.  I'm sure that the more work we do the more likely the maintainer will respond with an update in a fairly short timeframe.   As you can see, I've also gained some constructive criticism.   I was unaware of the svn diff function, but now that I know about it I can use it next time.   We know there will be a next time and you know about svn diff now too.  My word choice also lead to a minor misunderstanding, as we know that I generated both the pkg-plist and distinfo.  And nearly as quick as producing this blog post, we all have an updated bluefish to use from ports!

Frequently viewed this week