Recipes to build ALICE SW
.
)Example:
Fix issue in Geant4
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat.
rsync -a $SOURCEDIR ./
prefer_system_check
rule to have laptop user pick it up from the system.prefer_system_check
unless explicitly discussed withing the Computing Board or the O2 Technical board.SOMETHING_VERSION
or SOMETHING_REVISION
is defined, you can assume SOMETHING_ROOT
is defined and points to an aliBuild built package. However the opposite is not true. I.e. you should not assume that SOMETHING_ROOT
being defined means that a something
was built with aliBuild (it could come from the system) and you cannot assume that SOMETHING_VERSION
and SOMETHING_REVISION
are set. ROOTSYS
is fine because that kind of a standard for ROOT installations, GCC_ROOT
is not because GCC in general does not use GCC_ROOT
.SOMETHING_ROOT
variable when it's not set by using brew --prefix
.case $ARCHITECTURE in
osx)
[ ! $BOOST_ROOT ] || BOOST_ROOT=$(brew --prefix boost)
;;
esac
Then use such a variable to pass the information optionally to, e.g., CMake.
cmake ... \
${BOOST_ROOT:+-DBOOST_ROOT=$BOOST_ROOT}
This will make sure that if a package was selected to be picked up by the system (i.e. BOOST_ROOT
is not set), we will look it up in the package specific folder when using homebrew.
You should never set any SOMETHING_ROOT
variable to /usr/local
because that is a global folder and it will make it have precendence in the lookup, therefore potentially implicitly bringing in incompatible versions of external packages.
- Python:slc.*
- Python-system:(osx.*)
in your requires
section. Alternatively, if you also require Python-modules
simply depend on it, without an explicit dependency on Python, which will be handled internally.
Whenever you need to build a new external, you should consider the following:
If a Git / GitHub repository exists and you need to patch it, fork it, decide a
fork point, possibly based on a tag or eventually a commit hash, and create a branch
in your fork called alice/<fork-point>
. This can be done with:
git checkout -b alice/<fork-point> <fork-point>
patches should be applied on such a branch. You should then tag your development as:
<version>-alice<x>
where <x>
is an incremental number for a given official <version>
.
If no git repository is available, or if mirroring the whole repository is
not desirable, create a repository with a master
branch. On the master
branch import relevant released tarballs, one commit per tarball. Make sure
you tag the commit with the tag of the tarball. E.g.:
git clone https://github.com/alisw/mysoft
curl -O https://mysoftware.com/mysoft-version.tar.gz
tar xzvf mysoft-version.tar.gz
rsync -a --delete --exclude '**/.git' mysoft-version/ mysoft/
cd mysoft
git add -A .
git commit -a -m 'Import https://mysoftware.com/mysoft-<version>.tar.gz'
git tag <version>
In case you need to add a patch on top of a tarball, create a branch with:
git checkout -b alice/<version> <version>
and add your patches on such a branch. You should then tag your development as:
<version>-alice<x>
where <x>
is an incremental number for a given official <version>
.
Moreover try to keep the package name (as specified inside the recipe
in the package
field of the header) and the repository name the same,
including capitalization.
Please open a JIRA issue with your request at:
https://alice.its.cern.ch/jira/secure/CreateIssue!default.jspa
Make sure you select "Dependencies" as component.
Private packages are highly discouraged and must be avoided as much as possible. Private packages MUST still comply to GLPv3 which basically means:
In order to have a private package please open a JIRA ticket and we will create one / mirror in the https://gitlab.cern.ch/AlicePrivateExternals, which is the only place where you are allowed to have a private external.