Build and packaging library
Find a file
Jan Lindemann a184822289 README.md: Add more text to README.md
Signed-off-by: Jan Lindemann <jan@janware.com>
2019-06-26 09:21:54 +00:00
bin bin/Makefile: 2018-12-28 13:33:48 +00:00
conf projects.py fix: Read_value() does not return entire section 2019-06-18 07:37:15 +00:00
doc design-goals.txt, add-pkg-conflicts-support.patch: Add design-goals.txt 2019-06-11 10:43:53 +00:00
htdocs Everywhere: Purge spaces in text files 2019-03-06 12:38:20 +00:00
make $(TOPDIR)/make: Beautify makefile indendation 2019-06-26 08:00:30 +00:00
scripts projects.py: Add argument --ignore to pkg_relations() 2019-06-21 12:52:53 +00:00
tmpl Everywhere: Purge spaces in text files 2019-03-06 12:38:20 +00:00
CHANGES $(TOPDIR), make, scripts: Search-and-replace ytools -> jw-build 2017-04-07 12:15:48 +00:00
HASH Release 1.0.0-92@suse-tumbleweed/x86_64 2019-06-04 13:02:59 +00:00
Makefile Everywhere: Purge spaces in text files 2019-03-06 12:38:20 +00:00
README.md README.md: Add more text to README.md 2019-06-26 09:21:54 +00:00
RELEASES Release 1.0.0-92@suse-tumbleweed/x86_64 2019-06-04 13:02:59 +00:00
VERSION Start version: 1.0.0-92 2019-06-04 13:02:23 +00:00

JW-Build Build System

The JW-Build package basically is a bunch of scripts and GNU makefile snippets. You can install it to its standard location /opt/jw-build, or put it anywhere you want in your file system, typically next to your own projects in the same directory. You then include JW-Build's makefiles from within your own project to organize your build.

JW-Build is small. You can install the package with your distribution's package manager, but you can also keep it within your version system, alongside your own code. It's also meant to be the lightest possible touch on any given source code package, in terms of needed prerequisites, and also in terms of code you need to put into those packages. This way, it's easily introduced - but it also allows you to easily opt out of JW-Build at any time.

A package using JW-Build only needs three-liners as makefiles. This buys you convenience, minimal, clean, humanly digestable code, and a structured way to customize builds involving multiple packages - you can override any of JW-Build's default variables centrally for many projects, for an entire project, or inside any subdirectory of any project, at your option. It avoids makefile generation as done by CMake or GNU Autotools, to keep the running code small and readable to facilitate debugging. To achieve this, it has to detect a couple of things in every directory, but there's a caching mechanism in place, which keeps builds reasonably fast.

JW-Build honours some environment variables to control the build. It builds libraries and executables, outputs object code from C/C++, Python and Java, and is easily extendible to support any given programming language. It provides targets to produce Debian, RPM and IPK packages, install them, or feed them into a DevOps pipeline, taking note within GIT, SVN or CVS. It supports a simple configuration file per project, containing the project's metadata, e.g. their dependencies, license, description or the like. It has a SAT-solver built in, for building multiple projects in the right order, including packages that are not organized with jw-build. It automatically generates BitBake recipes and organizes Yocto-builds incorporating your software. It supports cross compilation with MinGW and the GNU toolchain. It's tested on Debian, OpenSUSE, Fedora / CentOS / RHEL, Mint and many Unices.

JW-Build is designed to be friendly to both developers and integrators. You can cd into any given directory, run make, and expect the resulting code to work and be testable. It has built-in support for remote Git repositories and collaboration. Of course, it can build and package itself.