45e556ab89
Ports like net/vmware-vsphere-cli use SHEBANG_FILES with globs like so: SHEBANG_FILES= bin/* ... As of FreeBSD 11.1-RELEASE sed has changed and errors if attempted on non-file objects. In the case of the cited port there are many other files in the bin/ directory which are symlinks for compatibility with old scripts. This causes the port patching to fail. PR: 221229 Differential Revision: https://reviews.freebsd.org/D11853
102 lines
2.7 KiB
Makefile
102 lines
2.7 KiB
Makefile
# $FreeBSD$
|
|
#
|
|
# Replace #! interpreters in scripts by what we actually have.
|
|
#
|
|
# Standard templates for bash, perl, python,... are included out of
|
|
# the box, others can easily be added per port.
|
|
#
|
|
# Feature: shebangfix
|
|
# Usage: USES=shebangfix
|
|
#
|
|
# SHEBANG_REGEX a regular expression to match files that needs to be converted
|
|
# SHEBANG_FILES list of files or glob pattern relative to ${WRKSRC}
|
|
# SHEBANG_GLOB list of glob pattern find(1) will match with
|
|
#
|
|
# To specify that ${WRKSRC}/path1/file and all .pl files in ${WRKSRC}/path2
|
|
# should be processed:
|
|
#
|
|
# SHEBANG_FILES= path1/file path2/*.pl
|
|
#
|
|
# To define custom shebangs to replace, use the following (note that
|
|
# shebangs with spaces should be quoted):
|
|
#
|
|
# perl_OLD_CMD= /usr/bin/perl5.005 "/usr/bin/setenv perl5.005"
|
|
#
|
|
# To define a new shebang scheme add the following to the port Makefile:
|
|
#
|
|
# SHEBANG_LANG= lua
|
|
# lua_OLD_CMD= /usr/bin/lua
|
|
# lua_CMD= ${LOCALBASE}/bin/lua
|
|
#
|
|
# To override a definition, for example replacing /usr/bin/perl by
|
|
# /usr/bin/env perl, add the following:
|
|
#
|
|
# perl_CMD= ${SETENV} perl
|
|
#
|
|
# MAINTAINER: portmgr@FreeBSD.org
|
|
|
|
.if !defined(_INCLUDE_USES_SHEBANGFIX_MK)
|
|
_INCLUDE_USES_SHEBANGFIX_MK= yes
|
|
|
|
SHEBANG_LANG+= bash java ksh perl php python ruby tcl tk
|
|
|
|
.if ${USES:Mlua*}
|
|
SHEBANG_LANG+= lua
|
|
lua_CMD?= ${LOCALBASE}/bin/${LUA_CMD}
|
|
.endif
|
|
|
|
tcl_OLD_CMD+= /usr/bin/tclsh
|
|
tcl_CMD?= ${TCLSH}
|
|
|
|
tk_OLD_CMD+= /usr/bin/wish
|
|
tk_CMD?= ${WISH}
|
|
|
|
.if ${USES:Mpython*}
|
|
python_CMD?= ${PYTHON_CMD}
|
|
.endif
|
|
|
|
# Replace the same patterns for all langs and setup a default, that may have
|
|
# been set already above with ?=.
|
|
.for lang in ${SHEBANG_LANG}
|
|
${lang}_CMD?= ${LOCALBASE}/bin/${lang}
|
|
${lang}_OLD_CMD+= "/usr/bin/env ${lang}"
|
|
${lang}_OLD_CMD+= /bin/${lang}
|
|
${lang}_OLD_CMD+= /usr/bin/${lang}
|
|
${lang}_OLD_CMD+= /usr/local/bin/${lang}
|
|
.endfor
|
|
|
|
.for lang in ${SHEBANG_LANG}
|
|
. if !defined(${lang}_CMD)
|
|
IGNORE+= missing definition for ${lang}_CMD
|
|
. endif
|
|
. if !defined(${lang}_OLD_CMD)
|
|
IGNORE+= missing definition for ${lang}_OLD_CMD
|
|
. endif
|
|
. for old_cmd in ${${lang}_OLD_CMD}
|
|
_SHEBANG_REINPLACE_ARGS+= -e "1s|^\#![[:space:]]*${old_cmd:C/\"//g}\([[:space:]]\)|\#!${${lang}_CMD}\1|"
|
|
_SHEBANG_REINPLACE_ARGS+= -e "1s|^\#![[:space:]]*${old_cmd:C/\"//g}$$|\#!${${lang}_CMD}|"
|
|
. endfor
|
|
.endfor
|
|
|
|
_USES_patch+= 210:fix-shebang
|
|
fix-shebang:
|
|
.if defined(SHEBANG_REGEX)
|
|
@cd ${WRKSRC}; \
|
|
${FIND} -E . -type f -iregex '${SHEBANG_REGEX}' \
|
|
-exec ${SED} -i '' ${_SHEBANG_REINPLACE_ARGS} {} +
|
|
.endif
|
|
.if defined(SHEBANG_GLOB)
|
|
. for f in ${SHEBANG_GLOB}
|
|
@cd ${WRKSRC}; \
|
|
${FIND} . -type f -name '${f}' \
|
|
-exec ${SED} -i '' ${_SHEBANG_REINPLACE_ARGS} {} +
|
|
. endfor
|
|
.endif
|
|
.if defined(SHEBANG_FILES)
|
|
@cd ${WRKSRC}; \
|
|
${FIND} ${SHEBANG_FILES} -type f \
|
|
-exec ${SED} -i '' ${_SHEBANG_REINPLACE_ARGS} {} +
|
|
.endif
|
|
|
|
.endif
|