BinaryDistribution - coin-or-foundation/tlc GitHub Wiki
Committee on Distributing Binaries
Committee Members:
- Kipp Martin
- Ted Ralphs
- JP Fasano
This page has now been superceded by the Trac page for the newly constituted Coin Binary Distribution Project. Please go there for up to date information.
For results of unit testing, please see UnitTestResults.
Strawman Proposal for a COIN-OR Binary Distribution Project
Below is a strawman proposal for moving ahead with the binary distribution project. For an archive of notes and comments that relevant before we arrived at this final proposal, see BinaryDistributionNotes.
General Principles
-
The "COIN-OR Binary Distribution Project" will be an independent project run by a main project manager and sub-project managers for each platform. The project will initially be considered a development project.
-
A platform consists of a combination of an operating system, a compiler, and an architecture.
-
Supported platforms will initially consist of
- Win32, cl (version 6)
- Win32, cl (version 7)
- Win32, cygwin-gcc (version ?)
- Linux, gcc (version 3)
- Linux, gcc (version 4)
In all cases, the architecture is ix86.
- All binaries will be distributed from the project Web page in a single compressed file named according to platform:
- coin-win32-msvc6.zip
- coin-win32-msvc7.zip
- coin-win32-cygwin-gcc?.zip
- coin-linux-i386-gcc3.zip
- coin-linux-i386-gcc4.zip
- The binaries (both libraries and executables) to be distributed will include all projects that comply with the requirements below, some of which may eventually be absorbed into the general project requirements. At a minimum, libCoin and any other libraries depended upon by an included library or executable must be part of any distribution.
Project Requirements
-
All project Makefiles should compile with proper default settings when checked out from CVS. This means that optimization levels must be set properly to defaults in the project Makefiles on CVS at all times.
-
Each project should have a single library associated with it whose name is derived from that of the project (this can be changed if needed). The project's library should compile "out of the box" on the required platforms. We have yet to settle on a build system (details on this later) by typing "make" in the project directory. The project must not link to any external libraries whose licenses are incompatible with the CPL by default.
-
If a complete executable is appropriate and available to build, it must also build when by typing "make" in the project's main directory and the executable should be named with the same name as the project itself. Preferably, this should then install in a directory named COIN/bin, but this is not part of the current build system.
-
The project must have a Test subdirectory containing code for a unit test. This code must compile by typing "make unitTest" in the main project directory. All files needed for executing the unit test must be checked out with the project module automatically. The unit test must execute by typing "Test/unitTest" in the main project directory (or COIN/bin/uniTest if we choose to create a COIN/bin directory).
-
Each library must have a substantive unit test that prints out "All unit tests were completed successfully" as the last line of execution if all tests were successful. In order to be included in the distribution, all unit tests ust indeed be completed successfully.
-
The project must conform to all current project publication requirements (i.e., have an AUTHORS, LICENSE, README file, etc.)
-
The project must be released under the CPL.
Publication Procedure (still in flux)
-
The date of publication will be announced in advance, so that project managers have a chance to make sure their code compiles and unit test runs in advance of the deadline.
-
Code will be checked out from CVS on the announced date.
-
Code will be compiled as specified above on the following platforms:
Linux w/ gcc 4 Linux w/ gcc 3 Windows w/ CYGWIN gcc ? Windows w/ cl 6 Windows w/ cl 7
-
Project managers will be notified of any compilation or unit test failures and given a deadline to fix.
-
Final distribution will include
- A bin directory containing executables that compile from libraries that pass unit tests.
- A lib directory containing libraries that pass unit test.
- An include directory that contains the associated header files.
- A README file containing information on how the distribution was built, what tests it passed, how to get the source code, etc.
- A LICENSE file containing the license.
- An AUTHORS file that is a concatenation of all individual project AUTHORS files.
Files will be zipped and/or tarred and posted to the project page once deadline has passed.
As part of this whole effort, I think we need to suggest a subcommittee to look into creating a simplified, uniform build system that will work on all platforms.
Attachments: