Update lang/p5-signatures to version 0.11
[dports.git] / lang / clang36 / Makefile
1 # $FreeBSD$
2
3 PORTNAME=       clang
4 DISTVERSION=    3.6.0
5 CATEGORIES=     lang devel
6 MASTER_SITES=   http://llvm.org/releases/3.6.0/
7 PKGNAMESUFFIX=  ${LLVM_SUFFIX}
8 DISTNAME=       ${CLANG_NAME}
9 DISTFILES=      ${CLANG_SOURCE} \
10                 ${LLVM_SOURCE}
11
12 MAINTAINER=     brooks@FreeBSD.org
13 COMMENT=        C, Objective-C, and C++ compiler
14
15 CLANG_NAME=     cfe-${DISTVERSION}.src
16 CLANG_SOURCE=   ${CLANG_NAME}${EXTRACT_SUFX}
17 CLANG_EXTRACT=  cfe-${DISTVERSION}.src
18 LLVM_NAME=      llvm-${DISTVERSION}.src
19 LLVM_SOURCE=    ${LLVM_NAME}${EXTRACT_SUFX}
20 LLVM_EXTRACT=   llvm-${DISTVERSION}.src
21 LIBNAME=        libLLVM-${LLVM_RELEASE:C/([0-9]\.[0-9]).*/\1/}.so
22
23 WRKSRC=         ${WRKDIR}/${LLVM_EXTRACT}
24 BUILD_WRKSRC=   ${WRKSRC}/tools/clang
25 INSTALL_WRKSRC= ${WRKSRC}/tools/clang
26
27 BUILD_DEPENDS+= llc${LLVM_SUFFIX}:${PORTSDIR}/devel/llvm${LLVM_SUFFIX}
28 RUN_DEPENDS+=   llc${LLVM_SUFFIX}:${PORTSDIR}/devel/llvm${LLVM_SUFFIX}
29
30 LLVM_SUFFIX=    ${PORTVERSION:C/([0-9]\.[0-9]).*/\1/:S/.//g:C/r.//}
31 LLVM_RELEASE=   ${PORTVERSION:C/([0-9]\.[0-9].[0-9]).*/\1/}
32 LLVM_PREFIX=    ${PREFIX}/llvm${LLVM_SUFFIX}
33 DATADIR=        ${PREFIX}/share/${PORTNAME}${LLVM_SUFFIX}
34 DOCSDIR=        ${PREFIX}/share/doc/${PORTNAME}${LLVM_SUFFIX}
35 PYTHONLIBDIR=   ${LLVM_PREFIX}/lib/python
36
37 GNU_CONFIGURE=  yes
38 GNU_CONFIGURE_PREFIX=   ${LLVM_PREFIX}
39 USES=           compiler:c++11-lib gmake perl5 python:build tar:xz
40 USE_LDCONFIG=   yes
41
42 MAKE_ARGS=      CLANG_TBLGEN=${WRKSRC}/${RELTYPE}/bin/clang-tblgen \
43                 LLVMIncDir=${LLVM_PREFIX}/include \
44                 LLVMToolDir=${LLVM_PREFIX}/bin \
45                 LLVMLibDir=${LLVM_PREFIX}/lib
46
47 SUB_FILES=      llvm-wrapper.sh
48 SUB_LIST=       LLVM_PREFIX="${LLVM_PREFIX}" LLVM_SUFFIX="${LLVM_SUFFIX}"
49
50 OPTIONS_DEFINE= ASSERTS DOCS
51
52 ASSERTS_DESC=   Enable assertions (thread unsafe)
53
54 CONFIGURE_ARGS+=        --enable-optimized --enable-shared
55 # Build some docs manually later
56 CONFIGURE_ARGS+=        --disable-docs
57 # Don't build bindings, the ocaml ones break
58 CONFIGURE_ARGS+=        --enable-bindings=none
59
60 PLIST_SUB+=             LLVM_SUFFIX=${LLVM_SUFFIX} \
61                         LLVM_RELEASE=${LLVM_RELEASE}
62 COMMANDS=       c++-analyzer \
63                 c-index-test \
64                 ccc-analyzer \
65                 clang \
66                 clang++ \
67                 clang-check \
68                 clang-cpp \
69                 clang-format \
70                 clang-tblgen \
71                 scan-build \
72                 scan-view
73 FIRST_COMMAND=  ${COMMANDS:C/^/XXXX/1:MXXXX*:C/^XXXX//}
74
75 PORTDATA=       scanview.css \
76                 sorttable.js
77
78 .include <bsd.port.options.mk>
79
80 .if ${PORT_OPTIONS:MASSERTS}
81 CONFIGURE_ARGS+=        --enable-assertions
82 RELTYPE=                Release+Asserts
83 .else
84 CONFIGURE_ARGS+=        --disable-assertions
85 RELTYPE=                Release
86 .endif
87
88 .include <bsd.port.pre.mk>
89
90 # keep in sync with /usr/src/lib/clang/clang.build.mk
91 CONFIGURE_TARGET:=${ARCH:C/amd64/x86_64/:C/armv6hf/armv6/}-portbld-${OPSYS:tl}${OSREL}
92
93 .if ${PORT_OPTIONS:MASSERTS}
94 pre-fetch:
95         @if [ "`llvm-config${LLVM_SUFFIX} --build-mode`" != ${RELTYPE} ]; then \
96                 ${ECHO_MSG}     ;\
97                 ${ECHO_MSG} ASSERTS option enabled, but devel/llvm${LLVM_SUFFIX} was compiled without ASSERTS. ;\
98                 ${ECHO_MSG} Correct options mismatch to proceed. ;\
99                 ${ECHO_MSG}     ;\
100                 false   ;\
101         fi
102 .endif
103
104 post-extract:
105         ${RM} -f ${BUILD_WRKSRC}
106         ${MV} ${WRKDIR}/${CLANG_EXTRACT} ${BUILD_WRKSRC}
107
108 post-patch:
109         ${REINPLACE_CMD} -e 's|${LLVM_RELEASE}svn|${LLVM_RELEASE}|g' \
110             ${WRKSRC}/configure
111         ${REINPLACE_CMD} -e 's|\(PROJ_docsdir.*:=\).*$$|\1${DOCSDIR}|g' \
112             ${WRKSRC}/Makefile.config.in
113         ${REINPLACE_CMD} -e 's|\(PROJ_mandir.*:=\).*$$|\1${MANPREFIX}/man|g' \
114             ${WRKSRC}/Makefile.config.in
115         ${REINPLACE_CMD} -e 's|/usr/local/|${LOCALBASE}/|g' \
116             ${WRKSRC}/tools/clang/lib/Frontend/InitHeaderSearch.cpp
117         ${REINPLACE_CMD} -e 's|%%DATADIR%%|${DATADIR}/|g' \
118             -e 's|%%LLVM_SUFFIX%%|${LLVM_SUFFIX}|g' \
119             ${WRKSRC}/tools/clang/tools/scan-build/scan-build
120
121 pre-build:
122         ${LN} -sf ${LLVM_PREFIX}/include/llvm/IR/Intrinsics.gen \
123             ${WRKSRC}/include/llvm/IR/
124         ${MKDIR} ${WRKSRC}/${RELTYPE}/lib
125         ${LN} -sf ${LLVM_PREFIX}/lib/${LIBNAME} ${WRKSRC}/${RELTYPE}/lib/
126         ${LN} -sf ${LLVM_PREFIX}/lib/libLLVMTableGen.a ${WRKSRC}/${RELTYPE}/lib/
127         ${LN} -sf ${LLVM_PREFIX}/lib/libLLVMSupport.a ${WRKSRC}/${RELTYPE}/lib/
128         cd ${WRKSRC}/utils/unittest && ${MAKE_CMD}
129
130 post-build:
131         @cd ${WRKSRC}/tools/clang/docs/tools && ${MAKE_CMD} man
132         @cd ${WRKSRC}/tools/clang/docs/tools && ${MAKE_CMD} html ps
133
134 post-install:
135         ${STRIP_CMD} ${STAGEDIR}${LLVM_PREFIX}/lib/libclang.so
136         ${LN} -f ${STAGEDIR}${LLVM_PREFIX}/bin/clang \
137             ${STAGEDIR}${LLVM_PREFIX}/bin/clang-cpp
138         ${INSTALL_SCRIPT} ${WRKDIR}/llvm-wrapper.sh \
139             ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX}
140         ${INSTALL_SCRIPT} ${WRKSRC}/tools/clang/tools/scan-build/ccc-analyzer \
141             ${WRKSRC}/tools/clang/tools/scan-build/c++-analyzer \
142             ${WRKSRC}/tools/clang/tools/scan-build/scan-build \
143             ${WRKSRC}/tools/clang/tools/scan-view/scan-view \
144             ${STAGEDIR}${LLVM_PREFIX}/bin/
145         ${MKDIR} ${STAGEDIR}${DATADIR}
146         ${INSTALL_DATA} ${WRKSRC}/tools/clang/tools/scan-build/scanview.css \
147             ${WRKSRC}/tools/clang/tools/scan-build/sorttable.js \
148             ${STAGEDIR}${DATADIR}
149 .for command in ${COMMANDS:C/^/XXXX/1:NXXXX*}
150         test -e ${STAGEDIR}${LLVM_PREFIX}/bin/${command}
151         ${LN} -f ${STAGEDIR}${PREFIX}/bin/${FIRST_COMMAND}${LLVM_SUFFIX} \
152             ${STAGEDIR}${PREFIX}/bin/${command}${LLVM_SUFFIX}
153 .endfor
154         ${MKDIR} ${STAGEDIR}${PYTHONLIBDIR}
155         ${MKDIR} ${STAGEDIR}${PYTHONLIBDIR}/Resources
156         ${INSTALL_SCRIPT} ${WRKSRC}/tools/clang/tools/scan-view/*.py \
157             ${STAGEDIR}${PYTHONLIBDIR}
158         ${INSTALL_SCRIPT} ${WRKSRC}/tools/clang/tools/scan-view/Resources/* \
159             ${STAGEDIR}${PYTHONLIBDIR}/Resources
160         ${MKDIR} ${STAGEDIR}${DATADIR}
161         ${INSTALL_DATA} ${WRKSRC}/tools/clang/tools/scan-build/scanview.css \
162             ${WRKSRC}/tools/clang/tools/scan-build/sorttable.js \
163             ${STAGEDIR}${DATADIR}
164         cd ${WRKSRC}/tools/clang/docs/tools && \
165             ${MAKE_CMD} DESTDIR=${STAGEDIR}/ install-html install-ps
166         ${INSTALL_MAN} ${WRKSRC}/tools/clang/docs/tools/clang.1 \
167             ${STAGEDIR}${MANPREFIX}/man/man1/clang${LLVM_SUFFIX}.1
168         ${INSTALL_MAN} ${WRKSRC}/tools/clang/tools/scan-build/scan-build.1 \
169             ${STAGEDIR}${MANPREFIX}/man/man1/scan-build${LLVM_SUFFIX}.1
170
171 PLIST_FILE_LIST=        ${COMMANDS:S|^|bin/|} \
172                         lib/libclang*
173 PLIST_DIR_LIST=         include/clang \
174                         include/clang-c \
175                         lib/clang \
176                         lib/python
177
178 build-plist:
179         ${RM} -f ${PLIST}
180 .for command in ${COMMANDS}
181         ${ECHO_CMD} bin/${command}%%LLVM_SUFFIX%% >> ${PLIST}
182 .endfor
183         (ls ${PLIST_FILE_LIST:S|^|${STAGEDIR}${LLVM_PREFIX}/|}; \
184             ${FIND} ${PLIST_DIR_LIST:S|^|${STAGEDIR}${LLVM_PREFIX}/|} -type f) \
185             | ${SED} -e 's|${STAGEDIR}${PREFIX}/||' \
186             -e 's|${LLVM_SUFFIX}|%%LLVM_SUFFIX%%|' \
187             -e 's|${LLVM_RELEASE}|%%LLVM_RELEASE%%|' | ${SORT} >> ${PLIST}
188         echo man/man1/clang%%LLVM_SUFFIX%%.1.gz >> ${PLIST}
189         echo man/man1/scan-build%%LLVM_SUFFIX%%.1.gz >> ${PLIST}
190         ${FIND} ${STAGEDIR}${DOCSDIR} -type f | \
191             ${SED} -e 's|${STAGEDIR}${DOCSDIR}|%%PORTDOCS%%%%DOCSDIR%%|' | \
192             ${SORT} >> ${PLIST}
193
194 .if make(svn-patch)
195 .if !defined(PATCH_REV)
196 .error svn-patch requires that PATCH_REV be set
197 .endif
198 _PATCH_FILE=${FILESDIR}/patch-svn-${PATCH_REV}
199 _LLVM_BASE=http://llvm.org/svn/llvm-project/cfe/trunk
200 svn-patch:
201         ${PRINTF} "$$%s$$\n" FreeBSD > ${_PATCH_FILE}
202         svn log -c ${PATCH_REV} ${_LLVM_BASE} >> ${_PATCH_FILE}
203         svn diff -c ${PATCH_REV} ${_LLVM_BASE} | \
204            ${SED} -e 's;^--- ;--- tools/clang/;' | \
205            ${SED} -e 's;^+++ ;+++ tools/clang/;' >> \
206            ${_PATCH_FILE}
207 .endif
208
209 .include <bsd.port.post.mk>