1 # Created by: Hye-Shik Chang
5 PORTVERSION= ${LLVM_MAJOR}.0.d${SNAPDATE}
10 MAINTAINER= brooks@FreeBSD.org
11 COMMENT= LLVM and Clang
13 .include "Makefile.LICENSE"
16 LLVM_PREFIX= ${PREFIX}/llvm${LLVM_SUFFIX}
17 DOCSDIR= ${PREFIX}/share/doc/${PORTNAME}${LLVM_SUFFIX}
18 DATADIR= ${PREFIX}/share/${PORTNAME}${LLVM_SUFFIX}
20 IGNORE= Does not build but llvm40, llvm60 need some files
23 USES= cmake compiler:c++11-lib libedit perl5 \
25 USE_LDCONFIG= ${LLVM_PREFIX}/lib
26 _USES_PYTHON?= python:build:2.7
27 USES+= ${_USES_PYTHON}
28 SHEBANG_FILES= utils/lit/lit.py utils/llvm-lit/llvm-lit.in \
29 tools/clang/utils/hmaptool/hmaptool \
30 tools/clang/tools/scan-view/bin/scan-view \
31 tools/clang/tools/clang-format/git-clang-format \
32 tools/clang/tools/clang-format/clang-format-diff.py \
33 tools/clang/tools/extra/clang-tidy/tool/clang-tidy-diff.py \
34 tools/clang/tools/extra/clang-tidy/tool/run-clang-tidy.py \
35 tools/clang/tools/extra/include-fixer/find-all-symbols/tool/run-find-all-symbols.py \
36 tools/opt-viewer/optrecord.py \
37 tools/opt-viewer/opt-diff.py \
38 tools/opt-viewer/opt-stats.py \
39 tools/opt-viewer/opt-viewer.py
41 SUB_FILES= llvm-wrapper.sh
42 SUB_LIST= LLVM_PREFIX="${LLVM_PREFIX}" LLVM_SUFFIX="${LLVM_SUFFIX}"
44 CMAKE_INSTALL_PREFIX= ${LLVM_PREFIX}
45 CMAKE_ARGS= -DLLVM_BUILD_LLVM_DYLIB=ON
46 CMAKE_ARGS+= -DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
47 CMAKE_ARGS+= -DLLVM_ENABLE_RTTI=ON
48 CMAKE_ARGS+= -DLLVM_DEFAULT_TARGET_TRIPLE=${CONFIGURE_TARGET}
49 CMAKE_ARGS+= -DLLVM_HOST_TRIPLE=${CONFIGURE_TARGET}
50 # Following commit https://github.com/kitware/cmake/commit/956054
51 # we need to either change the whole man-shuffle below, or simply
52 # redefine CMAKE_INSTALL_MANDIR
53 CMAKE_ARGS+= -DCMAKE_INSTALL_MANDIR:PATH="share/man"
54 CMAKE_ARGS+= -DLLVM_PARALLEL_LINK_JOBS=1
56 # Disable assertions. They should be disabled by cmake, but USES=cmake
57 # overrides -DCMAKE_*_FLAGS_RELEASE.
62 GH_ACCOUNT= llvm-mirror
63 GH_TAGNAME= ${LLVM_COMMIT}
65 .include "Makefile.snapshot"
67 OPTIONS_DEFINE= CLANG DOCS EXTRAS LIT LLD LLDB
68 OPTIONS_DEFINE_amd64= COMPILER_RT GOLD OPENMP
69 OPTIONS_DEFINE_i386= COMPILER_RT OPENMP
70 OPTIONS_DEFAULT= CLANG EXTRAS LIT LLD LLDB
71 OPTIONS_DEFAULT_amd64= COMPILER_RT GOLD OPENMP
72 OPTIONS_DEFAULT_i386= COMPILER_RT OPENMP
77 CLANG_DESC= Build clang
78 CLANG_EXTRA_PATCHES= ${PATCHDIR}/clang
79 CLANG_CONFLICTS_INSTALL= clang-devel-3.[1234567]*
80 CLANG_GH_PROJECT= clang:clang
81 CLANG_GH_SUBDIR= tools/clang:clang
82 CLANG_GH_TAGNAME= ${CLANG_COMMIT}:clang
83 CLANG_CMAKE_ON= -DCLANG_DEFAULT_OPENMP_RUNTIME=libomp
85 CLANG_USE= GNOME=libxml2
86 COMPILER_RT_DESC= Sanitizer libraries
87 COMPILER_RT_IMPLIES= CLANG
88 COMPILER_RT_GH_PROJECT= compiler-rt:compiler_rt
89 COMPILER_RT_GH_TAGNAME= ${COMPILER_RT_COMMIT}:compiler_rt
90 COMPILER_RT_PLIST_FILES=${_COMPILER_RT_LIBS:S|^|${_CRTLIBDIR}/|} \
91 ${_COMPILER_RT_BLACKLISTS:S|^|${_CRTBLDIR}/|}
93 DOCS_BUILD_DEPENDS= sphinx-build-${PYTHON_VER}:textproc/py-sphinx@${PY_FLAVOR} \
94 ${PYTHON_PKGNAMEPREFIX}recommonmark>=0.0.20180530:textproc/py-recommonmark@${PY_FLAVOR}
95 DOCS_CMAKE_ON= -DLLVM_ENABLE_SPHINX=ON \
96 -DSPHINX_EXECUTABLE=${LOCALBASE}/bin/sphinx-build-${PYTHON_VER} \
97 -DSPHINX_WARNINGS_AS_ERRORS=OFF \
99 DOCS_PLIST_FILES= ${MAN1SRCS:S|^|man/man1/|:S|.1$|${LLVM_SUFFIX}.1.gz|}
100 EXTRAS_DESC= Extra clang tools
101 EXTRAS_IMPLIES= CLANG
102 EXTRAS_GH_PROJECT= clang-tools-extra:extras
103 EXTRAS_GH_SUBDIR= tools/clang/tools/extra:extras
104 EXTRAS_GH_TAGNAME= ${EXTRAS_COMMIT}:extras
105 LIT_DESC= Install lit and FileCheck test tools
106 LLD_DESC= Install lld, the LLVM linker
107 LLD_GH_PROJECT= lld:lld
108 LLD_GH_SUBDIR= tools/lld:lld
109 LLD_GH_TAGNAME= ${LLD_COMMIT}:lld
110 LLDB_BUILD_DEPENDS= swig3.0:devel/swig30
111 LLDB_DESC= Install lldb, the LLVM debugger
112 LLDB_GH_PROJECT= lldb:lldb
113 LLDB_GH_SUBDIR= tools/lldb:lldb
114 LLDB_GH_TAGNAME= ${LLDB_COMMIT}:lldb
116 LLDB_VARS= _USES_PYTHON=python:2.7
117 OPENMP_DESC= Install libomp, the LLVM OpenMP runtime library
118 OPENMP_CONFLICTS_INSTALL= libiomp5-devel-*
119 OPENMP_GH_PROJECT= openmp:openmp
120 OPENMP_GH_SUBDIR= projects/openmp:openmp
121 OPENMP_GH_TAGNAME= ${OPENMP_COMMIT}:openmp
122 OPENMP_EXTRA_PATCHES= ${PATCHDIR}/openmp
123 GOLD_DESC= Build the LLVM Gold plugin for LTO
124 GOLD_CMAKE_ON= -DLLVM_BINUTILS_INCDIR=${LOCALBASE}/include
125 GOLD_BUILD_DEPENDS= ${LOCALBASE}/bin/ld.gold:devel/binutils
127 PLIST_SUB+= LLVM_MAJOR=${LLVM_MAJOR} \
128 LLVM_RELEASE=${LLVM_RELEASE}
178 FIRST_COMMAND= ${COMMANDS:C/^/XXXX/1:MXXXX*:C/^XXXX//}
180 MAN1SRCS+= bugpoint.1 \
209 STRIP_LIBS= BugpointPasses.so \
215 clang-apply-replacements \
216 clang-change-namespace \
217 clang-include-fixer \
221 clang-reorder-fields \
226 libclangApplyReplacements \
227 libclangIncludeFixer \
231 libclangTidyGoogleModule \
232 libclangTidyLLVMModule \
233 libclangTidyMiscModule \
234 libclangTidyReadabilityModule \
238 EXTRAS_PATTERN= ${EXTRAS_COMMANDS:tW:C/ */|/g}|${EXTRAS_LIBS:tW:C/ */|/g}
240 .include <bsd.port.options.mk>
242 # keep in sync with /usr/src/lib/clang/clang.build.mk
243 # ----------- start of sync block ------------------
244 # Armv6 and armv7 uses hard float abi, unless the CPUTYPE has soft in it.
245 # arm (for armv4 and armv5 CPUs) always uses the soft float ABI.
246 # For all other targets, we stick with 'unknown'.
247 .if ${ARCH:Marmv[67]*} && (!defined(CPUTYPE) || ${CPUTYPE:M*soft*} == "")
248 TARGET_ABI= -gnueabihf
255 CONFIGURE_TARGET:=${ARCH:C/amd64/x86_64/:C/arm64/aarch64/}-portbld-${OPSYS:tl}${OSREL}${TARGET_ABI}
256 # ----------- end of sync block --------------------
258 .if ${PORT_OPTIONS:MCLANG}
259 COMMANDS+= c-index-test \
264 clang-extdef-mapping \
267 clang-offload-bundler \
276 CLANG_PATTERN= (c-index-test|clang|scan-|Reporter.py|ScanView.py|scanview.css|sorttable.js|startfile.py|-analyzer)
280 .if ${PORT_OPTIONS:MCOMPILER_RT}
281 COMPILER_RT_PATTERN= (sanitizer|include.xray)
284 .if ${PORT_OPTIONS:MLIT}
285 MAN1SRCS+= lit.1 FileCheck.1
286 LIT_COMMANDS= lit llvm-lit FileCheck
289 .if ${PORT_OPTIONS:MLLD}
295 .if ${PORT_OPTIONS:MLLDB}
304 .if ! ${OPTIONS_DEFINE:MCOMPILER_RT}
305 # Hack to disable COMPILER_RT in plist of unsupported architectures
306 PLIST_SUB+= COMPILER_RT="@comment "
310 .if ! ${OPTIONS_DEFINE:MGOLD}
311 # Hack to disable GOLD in plist of unsupported architectures
312 PLIST_SUB+= GOLD="@comment "
316 .if ! ${OPTIONS_DEFINE:MOPENMP}
317 # Hack to disable OPENMP in plist of unsupported architectures
318 PLIST_SUB+= OPENMP="@comment "
322 .include <bsd.port.pre.mk>
324 .if defined(WITH_DEBUG)
325 CMAKE_BUILD_TYPE= RelWithDebInfo
329 _CRTLIBDIR= ${LLVM_PREFIX:S|${PREFIX}/||}/lib/clang/${LLVM_RELEASE}/lib/freebsd
330 _CRTBLDIR= ${LLVM_PREFIX:S|${PREFIX}/||}/share
331 _COMPILER_RT_BLACKLISTS= cfi_blacklist.txt
332 .if ${ARCH} == "amd64"
333 _COMPILER_RT_BLACKLISTS+= asan_blacklist.txt
334 _COMPILER_RT_BLACKLISTS+= msan_blacklist.txt
336 libclang_rt.asan-preinit-x86_64.a \
337 libclang_rt.asan-x86_64.a \
338 libclang_rt.asan-x86_64.a.syms \
339 libclang_rt.asan-x86_64.so \
340 libclang_rt.asan_cxx-x86_64.a \
341 libclang_rt.asan_cxx-x86_64.a.syms \
342 libclang_rt.builtins-x86_64.a \
343 libclang_rt.cfi-x86_64.a \
344 libclang_rt.cfi_diag-x86_64.a \
345 libclang_rt.dd-x86_64.a \
346 libclang_rt.dyndd-x86_64.so \
347 libclang_rt.esan-x86_64.a \
348 libclang_rt.esan-x86_64.a.syms \
349 libclang_rt.fuzzer-x86_64.a \
350 libclang_rt.fuzzer_no_main-x86_64.a \
351 libclang_rt.lsan-x86_64.a \
352 libclang_rt.msan-x86_64.a \
353 libclang_rt.msan-x86_64.a.syms \
354 libclang_rt.msan_cxx-x86_64.a \
355 libclang_rt.msan_cxx-x86_64.a.syms \
356 libclang_rt.xray-basic-x86_64.a \
357 libclang_rt.xray-fdr-x86_64.a \
358 libclang_rt.xray-profiling-x86_64.a \
359 libclang_rt.xray-x86_64.a \
360 libclang_rt.profile-x86_64.a \
361 libclang_rt.safestack-x86_64.a \
362 libclang_rt.stats-x86_64.a \
363 libclang_rt.stats_client-x86_64.a \
364 libclang_rt.tsan-x86_64.a \
365 libclang_rt.tsan-x86_64.a.syms \
366 libclang_rt.tsan_cxx-x86_64.a \
367 libclang_rt.tsan_cxx-x86_64.a.syms \
368 libclang_rt.ubsan_minimal-x86_64.a \
369 libclang_rt.ubsan_minimal-x86_64.a.syms \
370 libclang_rt.ubsan_minimal-x86_64.so \
371 libclang_rt.ubsan_standalone-x86_64.a \
372 libclang_rt.ubsan_standalone-x86_64.a.syms \
373 libclang_rt.ubsan_standalone-x86_64.so \
374 libclang_rt.ubsan_standalone_cxx-x86_64.a \
375 libclang_rt.ubsan_standalone_cxx-x86_64.a.syms
377 .if ${ARCH} == "i386"
378 _COMPILER_RT_BLACKLISTS+= asan_blacklist.txt
379 _COMPILER_RT_LIBS+= \
380 libclang_rt.asan-i386.a \
381 libclang_rt.asan-i386.so \
382 libclang_rt.asan-preinit-i386.a \
383 libclang_rt.asan_cxx-i386.a \
384 libclang_rt.builtins-i386.a \
385 libclang_rt.cfi-i386.a \
386 libclang_rt.cfi_diag-i386.a \
387 libclang_rt.lsan-i386.a \
388 libclang_rt.profile-i386.a \
389 libclang_rt.safestack-i386.a \
390 libclang_rt.stats-i386.a \
391 libclang_rt.stats_client-i386.a \
392 libclang_rt.ubsan_minimal-i386.a \
393 libclang_rt.ubsan_minimal-i386.so \
394 libclang_rt.ubsan_standalone-i386.a \
395 libclang_rt.ubsan_standalone-i386.so \
396 libclang_rt.ubsan_standalone_cxx-i386.a
399 .if ${PORT_OPTIONS:MEXTRAS}
400 COMMANDS+= ${EXTRAS_COMMANDS}
401 MAN1SRCS+= extraclangtools.1
402 PORTDOCS+= clang-tools
405 .if ${PORT_OPTIONS:MLLD}
412 ${REINPLACE_CMD} -e 's|import lit|import lit${LLVM_SUFFIX}|' \
413 -e 's|from lit|from lit${LLVM_SUFFIX}|' \
414 -e 's|lit\.|lit${LLVM_SUFFIX}.|' \
415 ${WRKSRC}/utils/lit/lit.py ${WRKSRC}/utils/lit/lit/*.py
416 ${REINPLACE_CMD} -e 's,/usr/local/,${LOCALBASE}/,' \
417 ${WRKSRC}/CMakeLists.txt
420 ${REINPLACE_CMD} -e 's|%%LLVM_SUFFIX%%|${LLVM_SUFFIX}|' \
421 ${PATCH_WRKSRC}/tools/clang/tools/clang-format/clang-format.py \
422 ${PATCH_WRKSRC}/tools/clang/tools/clang-format/clang-format-sublime.py \
423 ${PATCH_WRKSRC}/tools/clang/tools/clang-format/git-clang-format
425 post-patch-COMPILER_RT-on:
426 cd ${WRKSRC_compiler_rt} && \
427 ${PATCH} -p0 < ${PATCHDIR}/compiler-rt-safestack_platform.h
429 post-build-COMPILER_RT-on:
430 ${MKDIR} ${WRKDIR}/compiler-rt-build
431 cd ${WRKDIR}/compiler-rt-build && \
432 ${SETENV} ${CONFIGURE_ENV} ${CMAKE_BIN} ${CMAKE_ARGS} \
433 -DLLVM_CONFIG_PATH=${CONFIGURE_WRKSRC}/bin/llvm-config \
434 ${WRKSRC_compiler_rt} && \
435 ${MAKE_ENV} ${MAKE_CMD}
438 ${INSTALL_SCRIPT} ${WRKDIR}/llvm-wrapper.sh \
439 ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX}
440 .for command in ${COMMANDS:C/^/XXXX/1:NXXXX*}
441 ${LN} -f ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX} \
442 ${STAGEDIR}${PREFIX}/bin/${command}${LLVM_SUFFIX}
445 post-install-DOCS-on:
446 ${MKDIR} ${STAGEDIR}${DOCSDIR}
447 ${MV} ${STAGEDIR}${LLVM_PREFIX}/share/doc/* ${STAGEDIR}${DOCSDIR}
448 ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/doc
449 .for _man in ${MAN1SRCS}
450 ${MV} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/${_man} \
451 ${STAGEDIR}${MANPREFIX}/man/man1/${_man:R}${LLVM_SUFFIX}.1
453 .if ! ${PORT_OPTIONS:MLIT}
454 ${RM} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/lit.1
455 ${RM} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/FileCheck.1
457 ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/
458 ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/
460 .if ${PORT_OPTIONS:MCLANG}
461 post-install-DOCS-off:
462 ${RM} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/scan-build.1
463 ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/man1/
464 ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/share/man/
467 post-install-CLANG-on:
468 ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/clang \
469 ${STAGEDIR}${LLVM_PREFIX}/bin/clang-cpp
471 post-install-COMPILER_RT-on:
472 cd ${WRKDIR}/compiler-rt-build && \
473 ${MAKE_ENV} ${MAKE_CMD} ${INSTALL_TARGET}
474 .if ${ARCH} == "amd64"
475 ${RM} ${STAGEDIR}${LLVM_PREFIX}/lib/freebsd/libclang_rt*i386*
477 ${MKDIR} ${STAGEDIR}${PREFIX}/${_CRTLIBDIR}
478 ${MV} ${STAGEDIR}${LLVM_PREFIX}/lib/freebsd/* \
479 ${STAGEDIR}${PREFIX}/${_CRTLIBDIR}
480 ${RMDIR} ${STAGEDIR}${LLVM_PREFIX}/lib/freebsd
483 ${INSTALL_SCRIPT} ${PATCH_WRKSRC}/utils/lit/lit.py \
484 ${STAGEDIR}${LLVM_PREFIX}/bin/lit
485 ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \
486 ${STAGEDIR}${LLVM_PREFIX}/bin/llvm-lit
487 ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \
488 ${STAGEDIR}${PREFIX}/bin/lit${LLVM_SUFFIX}
489 ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/lit \
490 ${STAGEDIR}${PREFIX}/bin/llvm-lit${LLVM_SUFFIX}
491 ${MKDIR} ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX}
492 ${INSTALL_DATA} ${WRKSRC}/utils/lit/lit/*.py \
493 ${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}/lit${LLVM_SUFFIX}
494 ${INSTALL_PROGRAM} ${WRKDIR}/.build/bin/FileCheck \
495 ${STAGEDIR}${LLVM_PREFIX}/bin/
496 ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/FileCheck \
497 ${STAGEDIR}${PREFIX}/bin/FileCheck${LLVM_SUFFIX}
499 TEST_CMD= '(cd ${WRKSRC}/test; ${SETENV} ${MAKE_ENV} LD_LIBRARY_PATH=${WRKSRC}/Release/lib ${MAKE_CMD} check-local-lit)'
501 if [ `${ID} -u` = 0 ]; then \
502 ${CHOWN} -R nobody ${WRKSRC}/test; \
503 su -m nobody -c ${TEST_CMD}; \
505 ${SH} -c ${TEST_CMD}; \
509 ${RM} ${PLIST} ${PLIST}.tmp
510 ${ECHO_CMD} "@comment >>>>> GENERATED FILE, DO NOT EDIT <<<<<" >> ${PLIST}.tmp
511 ${ECHO_CMD} "@comment Alter build-plist target and regenerate as required" >> ${PLIST}.tmp
512 .for command in ${COMMANDS}
513 ${ECHO_CMD} bin/${command}${LLVM_SUFFIX} >> ${PLIST}.tmp
515 .for command in ${LIT_COMMANDS}
516 ${ECHO_CMD} %%LIT%%bin/${command}${LLVM_SUFFIX} >> ${PLIST}.tmp
517 ${ECHO_CMD} %%LIT%%${LLVM_PREFIX:S|${PREFIX}/||}/bin/${command} >> ${PLIST}.tmp
519 ${FIND} ${STAGEDIR}${LLVM_PREFIX} -type f -o -type l | \
520 ${GREP} -v '_blacklist.txt$$' | \
521 ${GREP} -v '[/-]lit$$' | ${GREP} -v 'FileCheck$$' | \
522 ${GREP} -v man/man1 | ${SED} -e 's|${STAGEDIR}${PREFIX}/||' \
523 -e 's|${PYTHON_SITELIBDIR:C|${PREFIX}/||}|%%PYTHON_SITELIBDIR%%|' \
524 -e 's|${PORTVERSION}|%%PORTVERSION%%|' \
525 -e 's|release.cmake|%%CMAKE_BUILD_TYPE%%.cmake|' \
526 -e 's|${LLVM_RELEASE:C/\./\\./g}|%%LLVM_RELEASE%%|' \
527 -e 's|${LLVM_MAJOR:C/\./\\./}|%%LLVM_MAJOR%%|' \
528 | ${SORT} >> ${PLIST}.tmp
529 ${FIND} ${STAGEDIR}${PYTHON_SITELIBDIR}/lit${LLVM_SUFFIX} -type f | \
530 ${SED} -e 's|${STAGEDIR}${PYTHON_SITELIBDIR}|%%LIT%%%%PYTHON_SITELIBDIR%%|' \
531 -e 's|${LLVM_RELEASE:C/\./\\./g}|%%LLVM_RELEASE%%|' \
532 -e 's|${LLVM_MAJOR:C/\./\\./}|%%LLVM_MAJOR%%|' | \
533 ${SORT} >> ${PLIST}.tmp
535 if ($$0 ~ /${CLANG_PATTERN}/ && $$0 !~ /omp.h|${EXTRAS_PATTERN}|libclang_rt/) {printf "%%%%CLANG%%%%"} \
536 if ($$0 ~ /${COMPILER_RT_PATTERN}/) \
537 {printf "%%%%COMPILER_RT%%%%"} \
538 if ($$0 ~ /lld|wasm-ld/ && $$0 !~ /lldb/) {printf "%%%%LLD%%%%"} \
539 if ($$0 ~ /(${EXTRAS_PATTERN})/) {printf "%%%%EXTRAS%%%%"} \
540 if ($$0 ~ /(argdumper|lldb|six.py)/) {printf "%%%%LLDB%%%%"} \
541 if ($$0 ~ /(lib[ig]*omp|omp.h|ompt.h)/) {printf "%%%%OPENMP%%%%"} \
542 if ($$0 ~ /LLVMgold/) {printf "%%%%GOLD%%%%"} \
543 if ($$0 !~ /libclang_rt/) {print} \
544 }' ${PLIST}.tmp >> ${PLIST}
545 ${ECHO_CMD} '@postexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi' >> ${PLIST}
546 ${ECHO_CMD} '@postunexec if type ccache-update-links >/dev/null 2>&1; then ccache-update-links -v; fi' >> ${PLIST}
550 .for command in ${COMMANDS}
551 test -e ${STAGEDIR}${LLVM_PREFIX}/bin/${command}
554 .include <bsd.port.post.mk>