slapos.recipe.build:cmmi is a complete replacement of the well-known hexagonit.recipe.cmmi. It is backward compatible with it, i.e one can replace h.r.cmmi by s.r.b:cmmi without breaking anything.
The goal of slapos.recipe.build:cmmi is to have a very modular recipe, allowing to specify things like per-platform patches or options, i.e applying a patch only if architecture is windows 64 bits.
The features of slapos.recipe.build:cmmi are:
- Support of all h.r.cmmi features and options
- Detect platform and add correct configure-options/LDFLAGS/patches (Use case: change LDFLAGS for rpath in case of BSD)
defined by the "environment-XX", "patches-XX" "configure-options-XX", where XX is replaced by the platform and optionally the architecture
- Check presence of defined list of executables, libraries, files or directories. If one doesn't exist, raise an exception.
- Check if built libraries/binaries (defined from previous list) use any system dylib other than libc & friends. If so, raise some exception/warning.
- Automate LDFLAGS/CPPGLAGS/CFLAGS/CXXFLAGS generation via given list of dependencies. Current way to do is verbose and error prone. Support per-platform LDFLAGS (or other flags) syntax (example: linux uses -Wl,rpath=blah while BSD uses -Wl,-rpath,blah). Is it a good idea? Some libraries can be in a subpath (lib/somedir/mylib.so). Of course manually defining environment would be still possible in those cases. It would update this list, not replace it.
- Trigger extension reinstallation in case of part reinstallation.
Example: Apache and PHP. Currently, PHP installs files into Apache directory. With hexagonit.recipe.cmmi, reinstalling Apache part wouldn't trigger reinstallation of PHP part. It means that it will result in a broken PHP installation.
In s.r.build:cmmi, we define PHP as being an extension of Apache. Then, if Apache is reinstalled, it will reinstall as well PHP.
- Do a blacklist (or whitelist? Is it more safe? I prefer whitelist) of environment variable (like CONFIG_SITE)
- Clean some directories after install (doc/man files, tests)
- Override TMPDIR/TMP environment variables to a locally created directory that is created before build and deleted after build.
Future:
- Disable ldconfig unless specified
- Support automatic PKGCONFIG/PATH support (add automatically pkg-config path, ??), like:
::
pkg-config-location = ${pkgconfig:location}
pkg-config-path = ${openssl:location}
environment-path = ${imagemagick:location}/bin
usage example:
~~~~~~~~~~~~~~
::
[sample-application]
recipe = slapos.recipe.build:cmmi
url = http://moulefrite.fr/moulefrite.v1.2.tar.gz
md5 = 123456789
configure-options =
--with-more-fries
--disable-salad
configure-options-linux-amd64 =
-fPIC
make-targets =
install-custom
# Here, will automatically generate LDFLAGS/CPPFLAGS/CFLAGS/CXXFLAGS.
environment-flags =
${zlib:location}
${pkgconfig:location}
${openssl:location}
${libuuid:location}
${libexpat:location}
${pcre:location}
${sqlite3:location}
${gdbm:location}
environment =
PATH=${openssl:location}/bin:%(PATH)s
patches-mac = ${mac-patch:location}
patches-windows = ${windows-patch:location}
cleanup =
doc
test
# Promise already exist. It just should check in libraries and executables that