| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | # $NetBSD: haskell.mk,v 1.1 2014/02/05 07:02:30 obache Exp $ | | 1 | # $NetBSD: haskell.mk,v 1.2 2014/04/18 13:42:59 obache Exp $ |
2 | # | | 2 | # |
3 | # This Makefile fragment handles Haskell Cabal packages. | | 3 | # This Makefile fragment handles Haskell Cabal packages. |
4 | # See: http://www.haskell.org/cabal/ | | 4 | # See: http://www.haskell.org/cabal/ |
5 | # | | 5 | # |
6 | # Note to users: | | 6 | # Note to users: |
7 | # | | 7 | # |
8 | # * Users choose one favourite Haskell compiler. Though the only | | 8 | # * Users choose one favourite Haskell compiler. Though the only |
9 | # compiler currently supported is GHC. | | 9 | # compiler currently supported is GHC. |
10 | # | | 10 | # |
11 | # * You can't install a cabal package for more than one compilers | | 11 | # * You can't install a cabal package for more than one compilers |
12 | # simultaneously. In the future, this limitation can possibly be | | 12 | # simultaneously. In the future, this limitation can possibly be |
13 | # eliminated using the method used by | | 13 | # eliminated using the method used by |
14 | # "../../lang/python/pyversion.mk". | | 14 | # "../../lang/python/pyversion.mk". |
| @@ -46,148 +46,188 @@ | | | @@ -46,148 +46,188 @@ |
46 | # package B was compiled. So the installed package B is | | 46 | # package B was compiled. So the installed package B is |
47 | # completely broken at this time. | | 47 | # completely broken at this time. |
48 | # | | 48 | # |
49 | # User-settable variables: | | 49 | # User-settable variables: |
50 | # | | 50 | # |
51 | # HASKELL_COMPILER | | 51 | # HASKELL_COMPILER |
52 | # Description: | | 52 | # Description: |
53 | # The user's favourite Haskell compiler. | | 53 | # The user's favourite Haskell compiler. |
54 | # Possible values: | | 54 | # Possible values: |
55 | # ghc | | 55 | # ghc |
56 | # Default value: | | 56 | # Default value: |
57 | # ghc | | 57 | # ghc |
58 | # | | 58 | # |
59 | # Package-settable variables: | | 59 | # HASKELL_ENABLE_SHARED_LIBRARY |
| | | 60 | # Description: |
| | | 61 | # Whether shared library should be built or not. |
| | | 62 | # Possible values: |
| | | 63 | # yes, no |
| | | 64 | # Default value: |
| | | 65 | # yes |
60 | # | | 66 | # |
61 | # HASKELL_ENABLE_LIBRARY_PROFILING | | 67 | # HASKELL_ENABLE_LIBRARY_PROFILING |
62 | # Description: | | 68 | # Description: |
63 | # Whether profiling library should be built or not. | | 69 | # Whether profiling library should be built or not. |
64 | # Possible values: | | 70 | # Possible values: |
65 | # yes, no | | 71 | # yes, no |
66 | # Default value: | | 72 | # Default value: |
67 | # yes | | 73 | # yes |
68 | # | | 74 | # |
69 | # HASKELL_ENABLE_HADDOCK_DOCUMENTATION | | 75 | # HASKELL_ENABLE_HADDOCK_DOCUMENTATION |
70 | # Description: | | 76 | # Description: |
71 | # Whether haddock documentation should be built or not. | | 77 | # Whether haddock documentation should be built or not. |
72 | # Possible values: | | 78 | # Possible values: |
73 | # yes, no | | 79 | # yes, no |
74 | # Default value: | | 80 | # Default value: |
75 | # no | | 81 | # yes |
76 | | | 82 | |
77 | .if !defined(HASKELL_MK) | | 83 | .if !defined(HASKELL_MK) |
78 | HASKELL_MK= # defined | | 84 | HASKELL_MK= # defined |
79 | | | 85 | |
80 | .include "../../mk/bsd.fast.prefs.mk" | | 86 | .include "../../mk/bsd.fast.prefs.mk" |
81 | | | 87 | |
82 | | | 88 | |
83 | # Declare HASKELL_COMPILER as one of BUILD_DEFS variables. See | | 89 | # Declare HASKELL_COMPILER as one of BUILD_DEFS variables. See |
84 | # ../../mk/misc/show.mk | | 90 | # ../../mk/misc/show.mk |
85 | BUILD_DEFS+= HASKELL_COMPILER | | 91 | BUILD_DEFS+= HASKELL_COMPILER |
| | | 92 | BUILD_DEFS+= HASKELL_ENABLE_SHARED_LIBRARY |
| | | 93 | BUILD_DEFS+= HASKELL_ENABLE_LIBRARY_PROFILING |
| | | 94 | BUILD_DEFS+= HASKELL_ENABLE_HADDOCK_DOCUMENTATION |
86 | | | 95 | |
87 | | | 96 | |
88 | # Declarations for ../../mk/misc/show.mk | | 97 | # Declarations for ../../mk/misc/show.mk |
89 | _VARGROUPS+= haskell | | 98 | _VARGROUPS+= haskell |
90 | _DEF_VARS.haskell= \ | | 99 | _DEF_VARS.haskell= \ |
91 | _DISTBASE \ | | 100 | _DISTBASE \ |
92 | _DISTVERSION \ | | 101 | _DISTVERSION \ |
93 | _GHC_BIN \ | | 102 | _GHC_BIN \ |
94 | _GHC_PKG_BIN \ | | 103 | _GHC_PKG_BIN \ |
95 | _GHC_VERSION \ | | 104 | _GHC_VERSION \ |
96 | _GHC_VERSION_CMD \ | | 105 | _GHC_VERSION_CMD \ |
97 | _GHC_VERSION_FULL \ | | 106 | _GHC_VERSION_FULL \ |
| | | 107 | _GHC_VERSION_SUFFIX \ |
98 | _HASKELL_BIN \ | | 108 | _HASKELL_BIN \ |
99 | _HASKELL_PKG_BIN \ | | 109 | _HASKELL_PKG_BIN \ |
100 | _HASKELL_PKG_DESCR_FILE \ | | 110 | _HASKELL_PKG_DESCR_FILE \ |
101 | _HASKELL_VERSION | | 111 | _HASKELL_VERSION \ |
102 | _PKG_VARS.haskell= \ | | 112 | _HASKELL_VERSION_SUFFIX |
| | | 113 | _USER_VARS.haskell= \ |
| | | 114 | HASKELL_ENABLE_SHARED_LIBRARY \ |
103 | HASKELL_ENABLE_LIBRARY_PROFILING \ | | 115 | HASKELL_ENABLE_LIBRARY_PROFILING \ |
104 | HASKELL_ENABLE_HADDOCK_DOCUMENTATION | | 116 | HASKELL_ENABLE_HADDOCK_DOCUMENTATION |
105 | | | 117 | |
106 | # PKGNAME is usually named after DISTNAME. | | 118 | # PKGNAME is usually named after DISTNAME. |
107 | PKGNAME?= hs-${DISTNAME} | | 119 | PKGNAME?= hs-${DISTNAME} |
108 | | | 120 | |
109 | # Default value of MASTER_SITES. | | 121 | # Default value of MASTER_SITES. |
110 | _DISTBASE?= ${DISTNAME:C/-[^-]*$//} | | 122 | _DISTBASE?= ${DISTNAME:C/-[^-]*$//} |
111 | _DISTVERSION?= ${DISTNAME:C/^.*-//} | | 123 | _DISTVERSION?= ${DISTNAME:C/^.*-//} |
112 | MASTER_SITES?= ${MASTER_SITE_HASKELL_HACKAGE:=${DISTNAME}/} | | 124 | MASTER_SITES?= ${MASTER_SITE_HASKELL_HACKAGE:=${DISTNAME}/} |
113 | | | 125 | |
114 | # Default value of HOMEPAGE. | | 126 | # Default value of HOMEPAGE. |
115 | HOMEPAGE?= http://hackage.haskell.org/cgi-bin/hackage-scripts/package/${_DISTBASE} | | 127 | HOMEPAGE?= http://hackage.haskell.org/cgi-bin/hackage-scripts/package/${_DISTBASE} |
116 | | | 128 | |
117 | # Cabal packages may use pkg-config, but url2pkg can't detect | | 129 | # Cabal packages may use pkg-config, but url2pkg can't detect |
118 | # that. (PHO: I think that should be handled by url2pkg (2009-05-20)) | | 130 | # that. (PHO: I think that should be handled by url2pkg (2009-05-20)) |
119 | USE_TOOLS+= pkg-config | | 131 | USE_TOOLS+= pkg-config |
120 | | | 132 | |
| | | 133 | # Default value of HASKELL_ENABLE_SHARED_LIBRARY |
| | | 134 | HASKELL_ENABLE_SHARED_LIBRARY?= yes |
| | | 135 | |
121 | # Default value of HASKELL_ENABLE_LIBRARY_PROFILING | | 136 | # Default value of HASKELL_ENABLE_LIBRARY_PROFILING |
122 | HASKELL_ENABLE_LIBRARY_PROFILING?= yes | | 137 | HASKELL_ENABLE_LIBRARY_PROFILING?= yes |
123 | | | 138 | |
124 | # Default value of HASKELL_ENABLE_HADDOCK_DOCUMENTATION | | 139 | # Default value of HASKELL_ENABLE_HADDOCK_DOCUMENTATION |
125 | HASKELL_ENABLE_HADDOCK_DOCUMENTATION?= no | | 140 | HASKELL_ENABLE_HADDOCK_DOCUMENTATION?= yes |
126 | | | 141 | |
127 | # Compiler specific variables and targets. | | 142 | # Compiler specific variables and targets. |
128 | .if ${HASKELL_COMPILER} == "ghc" | | 143 | .if ${HASKELL_COMPILER} == "ghc" |
129 | | | 144 | |
130 | # Add dependency to the GHC. | | 145 | # Add dependency to the GHC. |
131 | .include "../../lang/ghc7/buildlink3.mk" | | 146 | .include "../../lang/ghc7/buildlink3.mk" |
132 | | | 147 | |
133 | # Tools | | 148 | # Tools |
134 | _GHC_BIN= ${BUILDLINK_PREFIX.ghc}/bin/ghc | | 149 | _GHC_BIN= ${BUILDLINK_PREFIX.ghc}/bin/ghc |
135 | _GHC_PKG_BIN= ${BUILDLINK_PREFIX.ghc}/bin/ghc-pkg | | 150 | _GHC_PKG_BIN= ${BUILDLINK_PREFIX.ghc}/bin/ghc-pkg |
136 | _HASKELL_BIN= ${_GHC_BIN} # Expose to the outer scope. | | 151 | _HASKELL_BIN= ${_GHC_BIN} # Expose to the outer scope. |
137 | _HASKELL_PKG_BIN= ${_GHC_PKG_BIN} # Expose to the outer scope. | | 152 | _HASKELL_PKG_BIN= ${_GHC_PKG_BIN} # Expose to the outer scope. |
138 | | | 153 | |
139 | # Determine GHC version. | | 154 | # Determine GHC version. |
140 | _GHC_VERSION_CMD= ${_GHC_BIN} -V | ${CUT} -d ' ' -f 8 | | 155 | _GHC_VERSION_CMD= ${_GHC_BIN} -V | ${CUT} -d ' ' -f 8 |
141 | _GHC_VERSION= ${_GHC_VERSION_CMD:sh} | | 156 | _GHC_VERSION= ${_GHC_VERSION_CMD:sh} |
| | | 157 | _GHC_VERSION_SUFFIX= ghc${_GHC_VERSION} |
142 | _GHC_VERSION_FULL= ghc-${_GHC_VERSION} | | 158 | _GHC_VERSION_FULL= ghc-${_GHC_VERSION} |
| | | 159 | _HASKELL_VERSION_SUFFIX= ${_GHC_VERSION_SUFFIX} |
143 | _HASKELL_VERSION= ${_GHC_VERSION_FULL} # Expose to the outer scope. | | 160 | _HASKELL_VERSION= ${_GHC_VERSION_FULL} # Expose to the outer scope. |
144 | | | 161 | |
| | | 162 | # Determine GHC shlib suffix |
| | | 163 | _GHC_SHLIB_SUFFIX.dylib= dylib |
| | | 164 | _GHC_SHLIB_SUFFIX= ${_GHC_SHLIB_SUFFIX.${SHLIB_TYPE}:Uso} |
| | | 165 | _HASKELL_SHLIB_SUFFIX= ${_GHC_SHLIB_SUFFIX} |
| | | 166 | |
145 | # GHC requires C compiler. | | 167 | # GHC requires C compiler. |
146 | USE_LANGUAGES+= c | | 168 | USE_LANGUAGES+= c |
147 | | | 169 | |
148 | # Declarations for ../../mk/configure/configure.mk | | 170 | # Declarations for ../../mk/configure/configure.mk |
149 | CONFIGURE_ARGS+= --ghc | | 171 | CONFIGURE_ARGS+= --ghc |
150 | CONFIGURE_ARGS+= --with-compiler=${_GHC_BIN} | | 172 | CONFIGURE_ARGS+= --with-compiler=${_GHC_BIN} |
151 | CONFIGURE_ARGS+= --with-hc-pkg=${_GHC_PKG_BIN} | | 173 | CONFIGURE_ARGS+= --with-hc-pkg=${_GHC_PKG_BIN} |
152 | CONFIGURE_ARGS+= --prefix=${PREFIX} | | 174 | CONFIGURE_ARGS+= --prefix=${PREFIX} |
153 | .endif # ${HASKELL_COMPILER} | | 175 | .endif # ${HASKELL_COMPILER} |
154 | | | 176 | |
| | | 177 | # Shared libraries |
| | | 178 | .if ${HASKELL_ENABLE_SHARED_LIBRARY} == "yes" |
| | | 179 | CONFIGURE_ARGS+= --enable-shared --enable-executable-dynamic |
| | | 180 | CONFIGURE_ARGS+= "--ghc-option=-optl ${COMPILER_RPATH_FLAG}" |
| | | 181 | CONFIGURE_ARGS+= "--ghc-option=-optl ${PREFIX}/lib/${_GHC_VERSION_FULL}/${DISTNAME}" |
| | | 182 | .endif |
| | | 183 | |
155 | # Library profiling | | 184 | # Library profiling |
156 | PLIST_VARS+= prof | | | |
157 | .if ${HASKELL_ENABLE_LIBRARY_PROFILING} == "yes" | | 185 | .if ${HASKELL_ENABLE_LIBRARY_PROFILING} == "yes" |
158 | CONFIGURE_ARGS+= -p | | 186 | CONFIGURE_ARGS+= -p |
159 | PLIST.prof= yes | | | |
160 | .endif | | 187 | .endif |
161 | | | 188 | |
162 | | | 189 | |
163 | # Haddock documentations | | 190 | # Haddock documentations |
164 | PLIST_VARS+= doc | | 191 | PLIST_VARS+= doc |
165 | .if ${HASKELL_ENABLE_HADDOCK_DOCUMENTATION} == "yes" | | 192 | .if ${HASKELL_ENABLE_HADDOCK_DOCUMENTATION} == "yes" |
166 | CONFIGURE_ARGS+= --with-haddock=${BUILDLINK_PREFIX.ghc}/bin/haddock | | 193 | CONFIGURE_ARGS+= --with-haddock=${BUILDLINK_PREFIX.ghc}/bin/haddock |
167 | PLIST.doc= yes | | 194 | PLIST.doc= yes |
168 | .endif | | 195 | .endif |
169 | | | 196 | |
170 | # Optimization | | 197 | # Optimization |
171 | CONFIGURE_ARGS+= -O2 | | 198 | CONFIGURE_ARGS+= -O2 |
172 | | | 199 | |
173 | # package.conf and package.conf.old should be ignored at all. | | 200 | # package.conf and package.conf.old should be ignored at all. |
174 | PRINT_PLIST_AWK+= \ | | 201 | PRINT_PLIST_AWK+= \ |
175 | /\/package\.conf(\.old)?$$/ { next; } | | 202 | /\/package\.conf(\.old)?$$/ { next; } |
176 | | | 203 | |
177 | # _HASKELL_VERSION should be substituted in PLIST. | | 204 | # _HASKELL_VERSION should be substituted in PLIST. |
178 | PLIST_SUBST+= HASKELL_VERSION=${_HASKELL_VERSION} | | 205 | PLIST_SUBST+= HASKELL_VERSION=${_HASKELL_VERSION} |
| | | 206 | PLIST_SUBST+= HASKELL_VERSION_SUFFIX=${_HASKELL_VERSION_SUFFIX} |
179 | PRINT_PLIST_AWK+= \ | | 207 | PRINT_PLIST_AWK+= \ |
| | | 208 | ($$0 ~ /-${_HASKELL_VERSION_SUFFIX}\.${_HASKELL_SHLIB_SUFFIX}$$/) { next; } \ |
| | | 209 | ($$0 ~ /lib\/.*_p\.a$$/) { next; } \ |
| | | 210 | ($$0 ~ /\.dyn_hi$$/) { next; } \ |
| | | 211 | ($$0 ~ /\.p_hi$$/) { next; } \ |
| | | 212 | ($$0 ~ /^share\/doc\/${DISTNAME}\/html\//) \ |
| | | 213 | { $$0 = "$${PLIST.doc}" $$0; } \ |
| | | 214 | { gsub(/${_HASKELL_VERSION_SUFFIX}/, "$${HASKELL_VERSION_SUFFIX}"); } \ |
180 | { gsub(/${_HASKELL_VERSION}/, "$${HASKELL_VERSION}"); } | | 215 | { gsub(/${_HASKELL_VERSION}/, "$${HASKELL_VERSION}"); } |
| | | 216 | PLIST_AWK+= -f ${PKGSRCDIR}/mk/plist/plist-haskell.awk |
| | | 217 | PLIST_AWK_ENV+= HASKELL_VERSION_SUFFIX=${_HASKELL_VERSION_SUFFIX} |
| | | 218 | PLIST_AWK_ENV+= HASKELL_SHLIB_SUFFIX=${_HASKELL_SHLIB_SUFFIX} |
| | | 219 | PLIST_AWK_ENV+= HASKELL_ENABLE_SHARED_LIBRARY=${HASKELL_ENABLE_SHARED_LIBRARY} |
| | | 220 | PLIST_AWK_ENV+= HASKELL_ENABLE_LIBRARY_PROFILING=${HASKELL_ENABLE_LIBRARY_PROFILING} |
181 | | | 221 | |
182 | # We might not have any working Haskell interpreter so compile | | 222 | # We might not have any working Haskell interpreter so compile |
183 | # Setup.?hs to a binary. | | 223 | # Setup.?hs to a binary. |
184 | pre-configure: ${WRKSRC}/Setup | | 224 | pre-configure: ${WRKSRC}/Setup |
185 | | | 225 | |
186 | ${WRKSRC}/Setup: | | 226 | ${WRKSRC}/Setup: |
187 | ${RUN} cd ${WRKSRC} && \ | | 227 | ${RUN} cd ${WRKSRC} && \ |
188 | ${_HASKELL_BIN} --make Setup | | 228 | ${_HASKELL_BIN} --make Setup |
189 | | | 229 | |
190 | # Define configure target. | | 230 | # Define configure target. |
191 | do-configure: | | 231 | do-configure: |
192 | ${RUN} cd ${WRKSRC} && \ | | 232 | ${RUN} cd ${WRKSRC} && \ |
193 | ${SETENV} ${CONFIGURE_ENV} \ | | 233 | ${SETENV} ${CONFIGURE_ENV} \ |