Skip to content

Move master to the new build system (BuildTools master, no CoinMP/ subdirectory, exports), add GitHub Actions CI, relicense under EPL 2.0 - #29

Merged
tkralphs merged 7 commits into
masterfrom
new-build-system
Oct 19, 2026
Merged

tkralphs merged 7 commits into
masterfrom
new-build-system

Conversation

@tkralphs

@tkralphs tkralphs commented Oct 19, 2026 •

Copy link
Copy Markdown
Member

This moves CoinMP master to the build setup of the other converted projects (Clp, Cbc, Dip, ...). configure.ac is based on BuildTools master, the CoinMP/ subdirectory is gone, and the C API is exported through COINMPLIB_EXPORT. It also adapts CoinMP to Cbc master, adds the GitHub Actions CI, .coin-or/config.yml and generate_readme, and relicenses CoinMP from the CPL 1.0 to the EPL 2.0. The stable branch gets the CI and config.yml in a separate PR.

Commits

  1. Moving to new autotools, removing superfluous files, preparing to remove root directory
    • configure.ac uses AC_COIN_CHK_PKG and AC_COIN_FINALIZE_FLAGS([CoinMPLib]). CoinUtils, Osi, Clp, Osi's Clp interface, Cgl and Cbc are all required, because CoinMP uses each of them directly. There is one .pc file per check.
    • Headers are installed to include/coin-or, and coinmp.pc.in uses the standard template.
    • The example's makefile gets its flags from coinmp.pc and links with the C++ compiler.
    • CoinMPConfig.h and its config_* headers follow Clp's ClpConfig.h and define COINMPLIB_EXPORT.
    • The root-level build files and the SVN Externals file are removed, along with the root AUTHORS, INSTALL, LICENSE and README, which pointed to the copies in CoinMP/.
    • The MSVisualStudio projects are kept (moved to the root, but not updated), as in Dip.
  2. Removing root directory: pure renames of CoinMP/* to the root, plus the CoinMP/ prefix removed from .gitignore.
  3. Exporting symbols
    • The functions of the C API in CoinMP.h are declared with SOLVAPI. That is now COINMPLIB_EXPORT unless it is set otherwise; the hand-written MSVC branch at the top of CoinMP.h is unchanged.
    • CoinMP.cpp includes CoinMPConfig.h instead of config_coinmp_default.h, so that the build gets config.h.
  4. Adapt to the CbcParameters of Cbc master: CbcSolverUsefulData is now CbcParameters, whose noPrinting_ isn't public, so CoinMP calls disablePrinting() instead.
  5. Add GitHub Actions CI, config.yml, and generate_readme; relicense under EPL 2.0
    • Workflows from the same templates as the other projects. Linux builds with -fvisibility=hidden.
    • config.yml lists CoinUtils, Osi, Clp, Cgl and Cbc master. Dependencies moves to .coin-or/.
    • README.md is generated. The package section is adjusted to the real packages:
      • Arch coin-or-mp, Debian/Ubuntu coinor-libcoinmp-dev, FreeBSD math/coinmp, and conda-forge coinmp;
      • Fedora's package is retired, and there is no Homebrew formula.
    • Manager: Bjarni Kristjansson, as in projDesc.xml.
    • License: CoinMP is relicensed from the Common Public License 1.0 to the Eclipse Public License 2.0, like the rest of the Suite, and the comments that mentioned the CPL are updated.
    • The Travis and AppVeyor setup is removed.
  6. README: regenerate with the fixed generate_readme of coinbrew#109. The packages are now set in generate_readme instead of filtering the output of make_build_info with awk and sed, and the MSYS2 package is added. The README also picks up the Homebrew, Docker Hub and Doxygen fixes of generate_readme: list only binary packages that exist; Homebrew tap trust coinbrew#109, as README: regenerate with the fixed generate_readme (binary packages, Homebrew trust, links) #31 does on stable/1.8.
  7. README workflow. Adds .github/workflows/readme.yml, which calls the reusable workflow of Add a reusable workflow that regenerates and checks project READMEs coinbrew#110 to regenerate README.md and check pull requests that change it. The CI workflows skip builds when only README files change. This is the same as in README: regenerate with the fixed generate_readme (binary packages, Homebrew trust, links) #31 on stable/1.8.

Testing (Linux, gcc, against the master stack)

  • -fvisibility=hidden build: make test passes; all 8 problems of the unit test solve.
  • Exports: libCoinMP exports all 82 SOLVAPI functions.
  • Installed library: after make install, the C example builds against the installed headers and coinmp.pc and runs.

Merge order

The unit test crashes with current Cbc master: Cbc segfaults at the end of the search when the event handler is a user's (CoinMP's). coin-or/Cbc#813 fixes that by porting Haroldo's fix from next. Until it is merged, this PR's CI fails in the unit test.

🤖 Generated with Claude Code

tkralphs and others added 5 commits October 18, 2026 23:08
…ove root directory

- configure.ac is based on BuildTools master. CoinUtils, Osi, Clp, Osi's
  Clp interface, Cgl, and Cbc are required, as CoinMP uses all of them
  directly (one .pc file per check).
- The Makefile.am files use the new variables, install the headers into
  include/coin-or, and the top-level one includes BuildTools/Makemain.inc.
  coinmp.pc.in uses the standard template, and coinmp-uninstalled.pc.in is
  removed. The example's makefile gets its flags from coinmp.pc and links
  with the C++ compiler (CoinMP is a C++ library).
- CoinMPConfig.h and its config_* headers follow Clp's ClpConfig.h and
  define COINMPLIB_EXPORT.
- The root-level build files are removed, along with the root AUTHORS,
  INSTALL, LICENSE, and README, which pointed to the copies in CoinMP/, and
  the SVN Externals file.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Move the contents of CoinMP/ to the root of the repository (pure
renames), and remove the CoinMP/ prefix from the paths in .gitattributes
and .gitignore.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The functions of CoinMP's C API (CoinMP.h) are declared with SOLVAPI,
which is now COINMPLIB_EXPORT unless it is set otherwise (as for MSVC
without configure). CoinMP.cpp includes CoinMPConfig.h instead of
config_coinmp_default.h, so that the build gets config.h.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In Cbc master, CbcSolverUsefulData is CbcParameters, whose noPrinting_ is
not public; use disablePrinting() instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er EPL 2.0

As for the other projects of the COIN-OR Optimization Suite:

- .github/workflows: Linux/macOS and Windows (MSYS2 and MSVC) builds and
  tests, and release builds. The Linux builds use -fvisibility=hidden to
  check that the needed symbols are exported.
- .coin-or/config.yml describes the project and its dependencies
  (CoinUtils, Osi, Clp, Cgl, and Cbc master); Dependencies is moved to
  .coin-or/ and matches config.yml.
- README.md is generated by .coin-or/generate_readme; the old README is
  removed.
- License: CoinMP is relicensed from the Common Public License 1.0 to the
  Eclipse Public License 2.0, like the other projects of the Suite, and the
  comments that mentioned the Common Public License are updated.
- The Travis and AppVeyor setup (.travis.yml, appveyor.yml, .ci) is
  removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tkralphs and others added 2 commits October 19, 2026 13:15
Set the binary packages of CoinMP in generate_readme instead of patching
the output of make_build_info with awk and sed, and add the MSYS2
package. Also picks up the Homebrew, Docker Hub, and Doxygen fixes of
coin-or/coinbrew#109.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add .github/workflows/readme.yml, which calls the reusable workflow of
coin-or/coinbrew#110: it regenerates README.md when .coin-or/config.yml
or .coin-or/generate_readme change (and weekly, to pick up changes of
coinbrew's scripts/generate_readme), and checks that pull requests
changing README.md do not edit it by hand. The build workflows ignore
changes of only README.md, .coin-or/generate_readme, and readme.yml.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tkralphs
tkralphs merged commit 74752fa into master Oct 19, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant