Index: head/misc/qtchooser/Makefile =================================================================== --- head/misc/qtchooser/Makefile (revision 542598) +++ head/misc/qtchooser/Makefile (revision 542599) @@ -1,56 +1,63 @@ # $FreeBSD$ PORTNAME= qtchooser PORTVERSION= 66 -PORTREVISION= 2 +PORTREVISION= 3 CATEGORIES= misc MASTER_SITES= QT/official_releases/${PORTNAME} DIST_SUBDIR= KDE/Qt/qtchooser MAINTAINER= kde@FreeBSD.org COMMENT= Qt tool wrapper LICENSE= GPLv3 LGPL21 LICENSE_COMB= dual USES= gmake tar:xz DESTDIRNAME= INSTALL_ROOT MAKE_ARGS= prefix=${PREFIX} SUB_FILES= update-qtchooser-wrapper -# Keep this synchronized with qt.mk +# Keep this synchronized with Uses/qt.mk SUB_LIST= QT_SUPPORTED="5" -# bin/linguist -CONFLICTS_INSTALL= rubygem-github-linguist rubygem-github-linguist47 rubygem-gitlab-linguist +# bin/linguist -- the second bunch no longer exists in the ports tree +CONFLICTS_INSTALL= rubygem-github-linguist +CONFLICTS_INSTALL+= rubygem-github-linguist47 rubygem-gitlab-linguist QT_QTCHOOSERDIR=${PREFIX}/etc/xdg/qtchooser post-patch: @${REINPLACE_CMD} -e 's,/etc/xdg,${LOCALBASE}/etc/xdg,' \ ${WRKSRC}/src/${PORTNAME}/main.cpp post-install: # Install qtchooser config file. Note this is not optimal. -# -> we could install the qtchooser config files via devel/qmake[45]. +# -> we could install the qtchooser config files via devel/qt5-qmake. # Unfortunately they will be missing for ports that only use say "rcc" # without qmake. # So it is easier to install the config files in qtchooser. -# -> As we cannot include bsd.qt.mk at the moment without specifying +# -> As we cannot include Uses/qt.mk at the moment without specifying # a version, we also do not have the variables needed to sub the variables -# properly (this will probably change with qt.mk). -# Always make sure the following is in sync with bsd.qt.mk for now. +# properly (we could use USES=qt:5 just to get _QT_SUPPORTED, but that +# is a lot of overkill). +# +# Always make sure the following is in sync with Uses/qt.mk . +# At the very least all the _QT_SUPPORTED versions should be +# in the .for loop, although we still keep Qt4 around over a year +# after it was removed from the ports tree. +# ${MKDIR} ${STAGEDIR}${QT_QTCHOOSERDIR} .for qt_version in 4 5 ${ECHO} ${PREFIX}/lib/qt${qt_version}/bin > ${STAGEDIR}${QT_QTCHOOSERDIR}/qt${qt_version}.conf ${ECHO} ${PREFIX}/lib/qt${qt_version} >> ${STAGEDIR}${QT_QTCHOOSERDIR}/qt${qt_version}.conf .endfor # Install man page. ${INSTALL_DATA} ${WRKSRC}/doc/qtchooser.1 ${STAGEDIR}${MAN1PREFIX}/man/man1 # Create the default profile. cd ${STAGEDIR}/${QT_QTCHOOSERDIR} && ${LN} -s qt5.conf default.conf ${INSTALL_SCRIPT} ${WRKDIR}/update-qtchooser-wrapper \ ${STAGEDIR}${PREFIX}/bin/update-qtchooser-wrapper .include Index: head/misc/qtchooser/files/update-qtchooser-wrapper.in =================================================================== --- head/misc/qtchooser/files/update-qtchooser-wrapper.in (revision 542598) +++ head/misc/qtchooser/files/update-qtchooser-wrapper.in (revision 542599) @@ -1,64 +1,95 @@ #!/bin/sh # $FreeBSD$ -# If a port installs Qt version-specific binaries (e.g. "designer" which existed as a Qt4 application -# and exists as a Qt5 application and will probably be a Qt6 application) which should have a -# qtchooser-based wrapper, the port should set `QT_BINARIES=yes`. +# If a port installs Qt version-specific binaries (e.g. "designer" which +# existed as a Qt4 application and exists as a Qt5 application and will +# probably be a Qt6 application) which should have a qtchooser-based +# wrapper, the port should set `QT_BINARIES=yes`. # -# When QT_BINARIES is set to yes, compatibility symlinks (designer -> qtchooser, so that -# qtchooser can run designer-qt5 or whatever is the selected Qt version) are installed by the port. +# When QT_BINARIES is set to yes, compatibility symlinks (in bin/, +# designer -> qtchooser, so that qtchooser can run designer-qt5 or +# whatever is the selected Qt version) are installed by the port. +# +# Versioned binaries in ports are conventionally installed in /bin/, +# so qt5/bin/designer is the versioned form of "designer". PREFIX=%%PREFIX%% BINDIR=${PREFIX}/bin QTCHOOSER=${BINDIR}/qtchooser VERSIONS=%%QT_SUPPORTED%% +# Sanity-checking. Distinguish weird failure cases by exit code. if [ ! -d ${BINDIR} ] ; then echo "Binary directory '${BINDIR}' missing." >&2 exit 1 fi if [ ! -x ${QTCHOOSER} ] ; then echo "Qtchooser binary '${QTCHOOSER}' missing." >&2 exit 2 fi +# Remove links-to-qtchooser that are no longer needed. +# +# We check in ${BINDIR} -- only **directly** in bindir, hence the +# `-maxdepth 1` -- for symlinks to qtchooser. Those are unversioned +# names (e.g. designer -> qtchooser) for the case where qtchooser +# should pick the right one. +# +# If there aren't any versioned names for the same, remove the link +# (e.g. when designer is removed from the versioned bin/ directory +# under qt5/bin/, then designer -> qtchooser can go as well). +# remove_links() { for file in $(find -L ${BINDIR} -maxdepth 1 -samefile ${QTCHOOSER}) ; do + # Only symlinks count, since qtchooser lives here too if [ ! -L ${file} ] ; then continue fi - # If at least one versioned executable is found for this name, keep the - # qtchooser compatibility symlink for this name; otherwise, remove it. + # If at least one versioned executable is found for this name, + # keep the qtchooser compatibility symlink for this name; + # otherwise, remove it. local found=0 for version in ${VERSIONS} ; do version_bin_dir=${PREFIX}/lib/qt${version}/bin target=${version_bin_dir}/$(basename ${file}) + # Only need to find **one** to keep the link. if [ -x ${target} ] ; then found=1 break fi done if [ ${found} -eq 0 ] ; then rm ${file} fi done } +# Create links-to-qtchooser when a versioned application is installed. +# +# We check directly under the versioned bin/ directories, not in subdirectories +# of bin/ -- so we need `-maxdepth 1` -- for names which can be hooked up to +# qtchooser. Each of the names in the versioned bin/ dir is connected to +# qtchooser if there isn't already a link of that name. +# create_links() { for version in ${VERSIONS} ; do version_bin_dir=${PREFIX}/lib/qt${version}/bin if [ -d ${version_bin_dir} ] ; then for file in $(find ${version_bin_dir} -type f -maxdepth 1) ; do + # target is the **unversioned** one (e.g. + # designer, living in bin/) which needs to + # be pointed at qtchooser because there is a + # **versioned** designer in e.g. qt5/bin/. target=${BINDIR}/$(basename ${file}) if [ ! -L ${target} -a ! -f ${target} ] ; then ln -s ${QTCHOOSER} ${target} fi done fi done } remove_links create_links Property changes on: head/misc/qtchooser/files/update-qtchooser-wrapper.in ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property