New Ticket     Tickets     Wiki     Browse Source     Timeline     Roadmap     Ticket Reports     Search

Ticket #24296 (closed defect: fixed)

Opened 3 years ago

Last modified 3 years ago

lp_solve parallel build issue

Reported by: ryandesign@… Owned by: ryandesign@…
Priority: Normal Milestone:
Component: ports Version:
Keywords: Cc: deeparnab@…, 20.celso@…
Port: lp_solve

Description

lp_solve sometimes fails to build in parallel, failing like this:

--->  Staging lp_solve into destroot
Error: Target org.macports.destroot returned: xinstall: Unable to chdir to
/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_ports_math_lp_solve/work/lp_solve_5.5/lpsolve55/bin/osx64,
No such file or directory
Error: Status 1 encountered during processing.

This was reported on the mailing list by Deeparnab Chakrabarty and Celso Coutinho

Change History

comment:1 Changed 3 years ago by ryandesign@…

  • Status changed from new to closed
  • Resolution set to fixed

The lp_solve build system doesn't come with a Makefile, so I made one, to allow the "lp_solve" and "lpsolve55" components of lp_solve to be built in parallel. The problem is that the "ccc.osx" script in both of these components runs some tests, and does so by creating the files /tmp/platform.c and /tmp/isnan.c, compiling them to /tmp/platform and /tmp/isnan, running those programs to determine their result, and then deleting them. When built in parallel, both components try to do these tests at about the same time. By the time the second component gets around to deleting these temporary files, the first component has already deleted them, causing the second component to experience a file-not-found error and not continue with the rest of the script and build the software, thus resulting in the second component's platform directory and its contents not existing at destroot time.

The solution is for lp_solve not to write files directly into /tmp, but instead into a temporary directory with a random name, such as would be created by "mktemp -d". I've implemented this fix in r65749 and will send the patch upstream for consideration.

Note: See TracTickets for help on using tickets.