|
60 | 60 | natocaml = natocamlPackages.ocaml;
|
61 | 61 | natfindlib = natocamlPackages.findlib;
|
62 | 62 | natdune = natocamlPackages.dune;
|
| 63 | + findNativePackage = p: |
| 64 | + if p ? pname then |
| 65 | + let |
| 66 | + pname = p.pname or (throw "`p.pname' not found: ${p.name}"); |
| 67 | + in |
| 68 | + natocamlPackages."${pname}" or |
| 69 | + # Some legacy packages are called `ocaml_X`, e.g. extlib and |
| 70 | + # sqlite3 |
| 71 | + natocamlPackages."ocaml_${pname}" or |
| 72 | + ( |
| 73 | + let |
| 74 | + prefix1 = "ocaml${osuper.ocaml.version}-"; |
| 75 | + prefix2 = "ocaml-"; |
| 76 | + in |
| 77 | + if lib.hasPrefix prefix1 p.pname |
| 78 | + then natocamlPackages."${(lib.removePrefix prefix1 pname)}" |
| 79 | + else if lib.hasPrefix prefix2 p.pname |
| 80 | + then natocamlPackages."${(lib.removePrefix prefix2 pname)}" |
| 81 | + else throw "Unsupported cross-pkg parsing for `${p.pname}'" |
| 82 | + ) |
| 83 | + else { }; |
63 | 84 |
|
64 | 85 | makeFindlibConf = b:
|
65 | 86 | let
|
|
71 | 92 | b;
|
72 | 93 | natInputs = mergeInputs [
|
73 | 94 | "propagatedBuildInputs"
|
| 95 | + "buildInputs" |
74 | 96 | "nativeBuildInputs"
|
75 | 97 | ]
|
76 |
| - b; |
| 98 | + (findNativePackage b); |
77 | 99 |
|
78 | 100 | path =
|
79 | 101 | builtins.concatStringsSep ":"
|
|
162 | 184 | fi
|
163 | 185 | }
|
164 | 186 | exportOcamlDestDir () {
|
165 |
| - export OCAMLFIND_DESTDIR="''$out/lib/ocaml/${oself.ocaml.version}/site-lib/" |
| 187 | + export OCAMLFIND_DESTDIR="''$out/lib/ocaml/${oself.ocaml.version}/${crossName}-sysroot/lib/" |
166 | 188 | }
|
167 | 189 | createOcamlDestDir () {
|
168 | 190 | if test -n "''${createFindlibDestdir-}"; then
|
|
206 | 228 | '';
|
207 | 229 |
|
208 | 230 | installPhase =
|
209 |
| - let |
210 |
| - natPackage = |
211 |
| - natocamlPackages."${args.pname}" or |
212 |
| - # Some legacy packages are called `ocaml_X`, e.g. extlib and |
213 |
| - # sqlite3 |
214 |
| - natocamlPackages."ocaml_${args.pname}"; |
215 |
| - in |
216 | 231 | ''
|
217 | 232 | runHook preInstall
|
218 |
| - ${oself.opaline}/bin/opaline -name ${args.pname} -prefix $out -libdir $OCAMLFIND_DESTDIR |
219 |
| -
|
220 |
| - rm -rf $out/lib/ocaml/${osuper.ocaml.version}/site-lib |
221 |
| - ln -sfn ${natPackage}/lib/ocaml/${osuper.ocaml.version}/site-lib $out/lib/ocaml/${osuper.ocaml.version}/site-lib |
| 233 | + dune install ${args.pname} -x ${crossName} \ |
| 234 | + --prefix $out --libdir $(dirname $OCAMLFIND_DESTDIR) \ |
| 235 | + --docdir $out/share/doc --man $out/share/man |
222 | 236 | runHook postInstall
|
223 | 237 | '';
|
224 | 238 | } // args
|
225 | 239 | )).overrideAttrs (o: {
|
226 | 240 | nativeBuildInputs =
|
227 |
| - [ natocaml natdune natfindlib buildPackages.stdenv.cc ] ++ |
228 |
| - # XXX(anmonteiro): apparently important that this comes after |
229 |
| - (o.nativeBuildInputs or [ ]); |
| 241 | + (o.nativeBuildInputs or [ ]) ++ [ buildPackages.stdenv.cc ]; |
230 | 242 | });
|
231 | 243 |
|
232 | 244 | topkg = natocamlPackages.topkg.overrideAttrs (o:
|
233 | 245 | let
|
234 |
| - run = '' |
235 |
| - if [ -z "''${selfBuild:-}" ]; then |
236 |
| - unset OCAMLPATH |
237 |
| - fi |
238 |
| -
|
239 |
| - ${natocaml}/bin/ocaml -I ${natfindlib}/lib/ocaml/${osuper.ocaml.version}/site-lib/ pkg/pkg.ml \ |
240 |
| - ''; |
| 246 | + run = "${natocaml}/bin/ocaml -I ${natfindlib}/lib/ocaml/${osuper.ocaml.version}/site-lib pkg/pkg.ml"; |
241 | 247 | in
|
242 | 248 | {
|
243 | 249 | selfBuild = true;
|
|
248 | 254 |
|
249 | 255 | buildPhase = "${run} build";
|
250 | 256 |
|
251 |
| - installPhase = '' |
252 |
| - if [ -z "''${selfBuild:-}" ]; then |
253 |
| - OCAMLFIND_DESTDIR=$(dirname $OCAMLFIND_DESTDIR)/${crossName}-sysroot/lib/ |
254 |
| - fi |
255 |
| - ${oself.opaline}/bin/opaline -prefix $out -libdir $OCAMLFIND_DESTDIR |
256 |
| - ''; |
257 |
| - |
258 | 257 | setupHook = writeText "setupHook.sh" ''
|
259 | 258 | addToolchainVariable () {
|
260 | 259 | if [ -z "''${selfBuild:-}" ]; then
|
|
271 | 270 | let
|
272 | 271 | crossName = lib.head (lib.splitString "-" stdenv.system);
|
273 | 272 | natocamlPackages = getNativeOCamlPackages osuper;
|
274 |
| - |
275 |
| - fixTopkgInstall = p: natPackage: p.overrideAttrs (o: { |
276 |
| - installPhase = '' |
277 |
| - rm -rf $out/lib/ocaml/${osuper.ocaml.version}/site-lib |
278 |
| - mkdir -p $out/lib/ocaml/${osuper.ocaml.version} |
279 |
| - ln -sfn ${natPackage}/lib/ocaml/${osuper.ocaml.version}/site-lib $out/lib/ocaml/${osuper.ocaml.version}/site-lib |
280 |
| -
|
281 |
| - ${o.installPhase} |
282 |
| - runHook postInstall |
283 |
| - ''; |
284 |
| - }); |
285 | 273 | in
|
286 | 274 | {
|
287 | 275 | camlzip = osuper.camlzip.overrideAttrs (_: {
|
288 | 276 | OCAMLFIND_TOOLCHAIN = "${crossName}";
|
289 | 277 | postInstall = ''
|
290 |
| - OCAMLFIND_DESTDIR=$(dirname $OCAMLFIND_DESTDIR)/${crossName}-sysroot/lib/ |
291 |
| - mkdir -p $OCAMLFIND_DESTDIR |
292 |
| - mv $out/lib/ocaml/${osuper.ocaml.version}/site-lib/* $OCAMLFIND_DESTDIR |
293 |
| - rm -rf $OCAMLFIND_DESTDIR/camlzip |
294 | 278 | ln -sfn $OCAMLFIND_DESTDIR/{,caml}zip
|
295 | 279 | '';
|
296 | 280 | });
|
297 | 281 |
|
298 | 282 | ctypes = osuper.ctypes.overrideAttrs (o: {
|
299 | 283 | postInstall = ''
|
300 |
| - echo -e '\nversion = "${o.version}"'>> $out/lib/ocaml/${osuper.ocaml.version}/aarch64-sysroot/lib/ctypes/META |
| 284 | + echo -e '\nversion = "${o.version}"'>> $out/lib/ocaml/${osuper.ocaml.version}/${crossName}-sysroot/lib/ctypes/META |
301 | 285 | '';
|
302 | 286 | });
|
303 | 287 |
|
304 | 288 | cmdliner = osuper.cmdliner.overrideAttrs (o: {
|
305 |
| - nativeBuildInputs = o.nativeBuildInputs ++ [ osuper.findlib ]; |
| 289 | + nativeBuildInputs = o.nativeBuildInputs ++ [ oself.findlib ]; |
306 | 290 |
|
307 |
| - installPhase = '' |
308 |
| - rm -rf $out/lib/ocaml/${osuper.ocaml.version}/site-lib |
309 |
| - mkdir -p $out/lib/ocaml/${osuper.ocaml.version} |
310 |
| - ln -sfn ${natocamlPackages.cmdliner}/lib/ocaml/${osuper.ocaml.version}/site-lib $out/lib/ocaml/${osuper.ocaml.version}/site-lib |
311 |
| -
|
312 |
| - OCAMLFIND_DESTDIR=$(dirname $OCAMLFIND_DESTDIR)/${crossName}-sysroot/lib/ |
313 |
| - mkdir -p $OCAMLFIND_DESTDIR |
314 |
| - make install LIBDIR=$OCAMLFIND_DESTDIR/cmdliner |
| 291 | + installFlags = [ |
| 292 | + "LIBDIR=$(OCAMLFIND_DESTDIR)/${o.pname}" |
| 293 | + "DOCDIR=$(out)/share/doc/${o.pname}" |
| 294 | + ]; |
| 295 | + postInstall = '' |
| 296 | + mv $OCAMLFIND_DESTDIR/${o.pname}/{opam,${o.pname}.opam} |
315 | 297 | '';
|
316 | 298 | });
|
317 | 299 |
|
|
325 | 307 | chmod a+x ./build.sh
|
326 | 308 | '';
|
327 | 309 | installPhase = ''
|
328 |
| - ${oself.opaline}/bin/opaline -prefix $out -libdir $out/lib/ocaml/${osuper.ocaml.version}/site-lib/ ${o.pname}.install |
329 |
| - OCAMLFIND_DESTDIR=$(dirname $OCAMLFIND_DESTDIR)/${crossName}-sysroot/lib/ |
330 |
| - mkdir -p $OCAMLFIND_DESTDIR |
331 |
| - mv $out/lib/ocaml/${osuper.ocaml.version}/site-lib/* $OCAMLFIND_DESTDIR |
| 310 | + ${oself.opaline}/bin/opaline -prefix $out -libdir $OCAMLFIND_DESTDIR ${o.pname}.install |
332 | 311 | '';
|
333 | 312 | });
|
334 | 313 |
|
|
349 | 328 |
|
350 | 329 | num = osuper.num.overrideAttrs (_: {
|
351 | 330 | OCAMLFIND_TOOLCHAIN = "${crossName}";
|
352 |
| - postInstall = '' |
353 |
| - OCAMLFIND_DESTDIR=$(dirname $OCAMLFIND_DESTDIR)/${crossName}-sysroot/lib/ |
354 |
| - mkdir -p $OCAMLFIND_DESTDIR |
355 |
| - mv $out/lib/ocaml/${osuper.ocaml.version}/site-lib/* $OCAMLFIND_DESTDIR |
356 |
| - ''; |
357 | 331 | });
|
358 | 332 |
|
359 | 333 | ocaml-migrate-parsetree = osuper.ocaml-migrate-parsetree-2;
|
360 | 334 |
|
361 |
| - seq = osuper.seq.overrideAttrs (_: { |
| 335 | + seq = osuper.seq.overrideAttrs (o: { |
| 336 | + nativeBuildInputs = [ oself.findlib ]; |
362 | 337 | installPhase = ''
|
363 |
| - install_dest="$out/lib/ocaml/${osuper.ocaml.version}/${crossName}-sysroot/lib/seq/" |
| 338 | + install_dest="$OCAMLFIND_DESTDIR/seq/" |
364 | 339 | mkdir -p $install_dest
|
365 | 340 | mv META $install_dest
|
366 |
| -
|
367 |
| - mkdir -p $out/lib/ocaml/${osuper.ocaml.version}/site-lib/seq |
368 |
| - ln -sfn $install_dest/META $out/lib/ocaml/${osuper.ocaml.version}/site-lib/seq |
369 | 341 | '';
|
370 | 342 | });
|
371 | 343 |
|
372 | 344 | uchar = osuper.uchar.overrideAttrs (_: {
|
373 |
| - installPhase = osuper.topkg.installPhase; |
| 345 | + installPhase = oself.topkg.installPhase; |
374 | 346 | });
|
375 | 347 |
|
376 | 348 | zarith = osuper.zarith.overrideAttrs (o: {
|
377 | 349 | configurePlatforms = [ ];
|
378 | 350 | OCAMLFIND_TOOLCHAIN = "${crossName}";
|
379 |
| - configureFlags = o.configureFlags ++ [ |
380 |
| - "-prefixnonocaml ${stdenv.cc.targetPrefix}" |
| 351 | + configureFlags = [ |
381 | 352 | ];
|
| 353 | + configurePhase = '' |
| 354 | + ./configure -prefixnonocaml ${stdenv.cc.targetPrefix} -installdir $OCAMLFIND_DESTDIR |
| 355 | + ''; |
382 | 356 | preBuild = ''
|
383 | 357 | buildFlagsArray+=("host=${stdenv.hostPlatform.config}")
|
384 | 358 | '';
|
385 |
| - postInstall = '' |
386 |
| - OCAMLFIND_DESTDIR=$(dirname $OCAMLFIND_DESTDIR)/${crossName}-sysroot/lib/ |
387 |
| - mkdir -p $OCAMLFIND_DESTDIR |
388 |
| - mv $out/lib/ocaml/${osuper.ocaml.version}/site-lib/* $OCAMLFIND_DESTDIR |
389 |
| -
|
390 |
| - rm -rf $out/lib/ocaml/${osuper.ocaml.version}/site-lib |
391 |
| - mkdir -p $out/lib/ocaml/${osuper.ocaml.version} |
392 |
| - ln -sfn ${natocamlPackages.zarith}/lib/ocaml/${osuper.ocaml.version}/site-lib $out/lib/ocaml/${osuper.ocaml.version}/site-lib |
393 |
| - ''; |
| 359 | + preInstall = "mkdir -p $OCAMLFIND_DESTDIR"; |
394 | 360 | });
|
395 |
| - } // (lib.genAttrs [ |
396 |
| - "astring" |
397 |
| - "jsonm" |
398 |
| - "fmt" |
399 |
| - "uutf" |
400 |
| - "uunf" |
401 |
| - "logs" |
402 |
| - "fpath" |
403 |
| - "bos" |
404 |
| - "ptime" |
405 |
| - "rresult" |
406 |
| - "mtime" |
407 |
| - "xmlm" |
408 |
| - ] |
409 |
| - (name: fixTopkgInstall osuper.${name} natocamlPackages.${name}))) |
| 361 | + }) |
410 | 362 | ]
|
0 commit comments