5 years agoUpdate copyright notice to include Integratech S.A. master
Leandro Lucarella [Sun, 26 Jun 2016 11:17:14 +0000 (13:17 +0200)]
Update copyright notice to include Integratech S.A.

This project was actually started at Integratech S.A., so the due
attribution is added to the copyright notice.

7 years agoAdd Boost Software License Version 1.0 as LICENSE
Leandro Lucarella [Sat, 8 Mar 2014 00:51:06 +0000 (21:51 -0300)]
Add Boost Software License Version 1.0 as LICENSE

11 years agoSplit configuration into project-wide and local
Leandro Lucarella [Fri, 29 Oct 2010 18:21:57 +0000 (15:21 -0300)]
Split configuration into project-wide and local

If Toplevel.mak and Makeit.mak should not be edited by the user, and
Config.mak is supposed to be a local configuration file, we are missing a
place to have project-wide configuration, like default compiler flags and
flavors. This patch make Config.mak a project-wide configuration file and
adds Config.local.mak as a local user-wide configuration, to tweak local
parameters as colors, or default compiler to use.

11 years agoMove the example to its own subdirectory
Leandro Lucarella [Fri, 29 Oct 2010 18:17:09 +0000 (15:17 -0300)]
Move the example to its own subdirectory

11 years agoMake call to include_subdirs easier to read
Leandro Lucarella [Fri, 29 Oct 2010 17:41:31 +0000 (14:41 -0300)]
Make call to include_subdirs easier to read

11 years agoMove flavors (variants) to Config.mak
Leandro Lucarella [Fri, 29 Oct 2010 17:41:05 +0000 (14:41 -0300)]
Move flavors (variants) to Config.mak

Also move any other compiler flag that should be user-defined to
Config.mak, as they should not be imposed to the user.

12 years agoAllow compiling from directories named "build"
Leandro Lucarella [Thu, 29 Oct 2009 18:44:37 +0000 (15:44 -0300)]
Allow compiling from directories named "build"

If the absolute directory where the project has a component named "build"
(or whatever $(BUILD_DIR_NAME) is), the build fails because the whole
project directory is excluded from the obj directory tree replication.

This patch fixes this bug by adding the complete absolute path to the
project top-level directory ($T) to the excludes. An obsolete comment is
removed too.

12 years agoAdd coloring to commands output
Leandro Lucarella [Fri, 9 Oct 2009 19:11:32 +0000 (16:11 -0300)]
Add coloring to commands output

12 years agoMake "last" symlink point to the last build flavor
Leandro Lucarella [Wed, 7 Oct 2009 13:23:20 +0000 (10:23 -0300)]
Make "last" symlink point to the last build flavor

12 years agoAdd color to flags change warning
Leandro Lucarella [Tue, 6 Oct 2009 19:14:05 +0000 (16:14 -0300)]
Add color to flags change warning

12 years agoDon't override INCLUDE_PATH Doxygen configuration
Leandro Lucarella [Mon, 5 Oct 2009 18:58:18 +0000 (15:58 -0300)]
Don't override INCLUDE_PATH Doxygen configuration

This is usually not needed and can trigger the processing of a lot of
unwanted files.

12 years agoAllow overriding Doxygen configuration
Leandro Lucarella [Mon, 5 Oct 2009 16:36:55 +0000 (13:36 -0300)]
Allow overriding Doxygen configuration

12 years agoAdd a comment about the current GCH support status
Leandro Lucarella [Fri, 2 Oct 2009 18:11:03 +0000 (15:11 -0300)]
Add a comment about the current GCH support status

12 years agoFix source tree replication in build directory
Leandro Lucarella [Fri, 2 Oct 2009 18:09:40 +0000 (15:09 -0300)]
Fix source tree replication in build directory

Sub-projects build directories were not excluded from the replication. Git
directories were not excluded either, resulting in a long time spent
creating unused directories.

12 years agoAllow compiling to non-conventional output directories
Leandro Lucarella [Tue, 29 Sep 2009 20:22:40 +0000 (17:22 -0300)]
Allow compiling to non-conventional output directories

Make the compile function takes a mandatory second argument being the base
output directory (it was hardcoded to $O before).  This allow using the
compile function to compile object in non-conventional base output

12 years agoMake output colored if $V is non-empty
Leandro Lucarella [Mon, 28 Sep 2009 15:27:59 +0000 (12:27 -0300)]
Make output colored if $V is non-empty

This patch makes the pretty output colored if $V and $(COLOR) are
non-empty. The colors for the command and argument can be customized using
the variables $(COLOR_CMD) and $(COLOR_ARG) respectively.

12 years agoAdd optional command name to valgrind function
Leandro Lucarella [Fri, 25 Sep 2009 16:21:47 +0000 (13:21 -0300)]
Add optional command name to valgrind function

12 years agoSupport non-propagated target-specific variables
Leandro Lucarella [Fri, 25 Sep 2009 16:21:18 +0000 (13:21 -0300)]
Support non-propagated target-specific variables

Now the compile and link functions support non-propagated target-specific
variables.  If a variable is named like the target with a suffix
".EXTRA_FLAGS", it value is added to the compile/link command.

A non-propagated linker can be used too, defining a variable with the name
of the target with the suffix ".LINKER".

12 years agoAdd sphinx-generated documentation support
Leandro Lucarella [Wed, 23 Sep 2009 14:16:24 +0000 (11:16 -0300)]
Add sphinx-generated documentation support

A very specific but reasonably useful pattern rule (similar to the doxygen
rule) is added to build sphinx based documentation. A few new variables are
added to control how the sphinx documentation is built. Those variables are
"monitored" to trigger a rebuild in a similar way C and C++ sources are
recompiled when compiler or compiler flags changes.

See the rule and variables comments for more details.

12 years agoRename Lib.mak to Makeit.mak
Leandro Lucarella [Tue, 22 Sep 2009 15:23:13 +0000 (12:23 -0300)]
Rename Lib.mak to Makeit.mak

Since the project has been renamed makeit, it seems reasonable to name the
main file Makeit.mak ;)

12 years agoAdd a valgrind function
Leandro Lucarella [Tue, 22 Sep 2009 15:09:59 +0000 (12:09 -0300)]
Add a valgrind function

The new valgrind function runs a command through valgrind if $(VALGRIND) is
non-empty. This is generally useful to use in the "test" goals.

12 years agoAdd a global phony "test" target
Leandro Lucarella [Mon, 21 Sep 2009 22:11:51 +0000 (19:11 -0300)]
Add a global phony "test" target

Following the "all", "install" and "doc", sub-makefiles can append to the
variable $(test) the rules they want to be executed when make has the
"test" target as a goal.

12 years agoApply abbr to commands in (v)exec function
Leandro Lucarella [Mon, 21 Sep 2009 22:10:35 +0000 (19:10 -0300)]
Apply abbr to commands in (v)exec function

The (v)exec function removes the full directory component from the command
to execute. This can be a little confusing when running local scripts. This
patch applies the abbr function to the command instead.

12 years agoDon't add extra spaces in abbr function
Leandro Lucarella [Mon, 21 Sep 2009 22:08:21 +0000 (19:08 -0300)]
Don't add extra spaces in abbr function

In some situations an extra leading space is added when using the abbr
function. This patch fixes that.

12 years agoAdd a function to include sub-directory's Build.mak
Leandro Lucarella [Mon, 21 Sep 2009 16:34:37 +0000 (13:34 -0300)]
Add a function to include sub-directory's Build.mak

Including a Build.mak in a sub-directory can be very error prone, since the
$S variable should be set to the relative path from $T before including the
Build.mak and restored afterwards.

The function include_subdirs is added to simplify this task, freeing the
user from doing all the dirty work and avoiding bugs.

The "otherproj" pkg-config file generation is moved to a subdirectory to
test how the new function works with deeply nested Build.mak.

12 years agoAdd doxygen-generated documentation support
Leandro Lucarella [Mon, 21 Sep 2009 15:46:03 +0000 (12:46 -0300)]
Add doxygen-generated documentation support

Now Lib.mak handle a new $D directory, where generated documentation should
be built. A new "doc" phony rule is created to build all the documentation.
Makefiles can append targets to the $(doc) variable to be build when the
"doc" is used as a goal.

A very specific but reasonably useful pattern rule is added to build
doxygen based documentation. See the rule comment for more details.

The example sub-project "otherproj" now includes doxygen-generated
documentation as an example.

12 years agoGeneralize function find_headers (now find_files)
Leandro Lucarella [Mon, 21 Sep 2009 14:24:01 +0000 (11:24 -0300)]
Generalize function find_headers (now find_files)

Make find_headers function more generic. Rename it to find_files and allow
omitting the second argument, defaulting to the third argument.

12 years agoChange the name of the variable storing the root build path
Leandro Lucarella [Fri, 18 Sep 2009 21:00:49 +0000 (18:00 -0300)]
Change the name of the variable storing the root build path

The variable storing the root build path (where all the variants are built)
is named $D. Reserve this name for the documentation directory using $(VD)

12 years agoUse $S variable when including sub-Build.mak
Leandro Lucarella [Fri, 18 Sep 2009 18:55:38 +0000 (15:55 -0300)]
Use $S variable when including sub-Build.mak

12 years agoUse symbolic names in Makefiles default goals
Leandro Lucarella [Fri, 18 Sep 2009 18:28:22 +0000 (15:28 -0300)]
Use symbolic names in Makefiles default goals

12 years agoFix spelling, improve comments and update README
Leandro Lucarella [Fri, 18 Sep 2009 18:23:16 +0000 (15:23 -0300)]
Fix spelling, improve comments and update README

12 years agoAdd support for easy geneation of pkg-config files
Leandro Lucarella [Fri, 18 Sep 2009 18:13:18 +0000 (15:13 -0300)]
Add support for easy geneation of pkg-config files

A replace function is added to ease the generation of a .pc file based on
a template. Default rules to build and install the .pc files are added too.

otherproj now provides a pkg-config file and lib2 uses some otherproj
CFLAGS as an example.

12 years agoAdd varcat function to variables together
Leandro Lucarella [Fri, 18 Sep 2009 17:58:47 +0000 (14:58 -0300)]
Add varcat function to variables together

This is used when concatenating variables for auto-rebuilding when flags

12 years agoMake gen_rebuild_flags function call the shell
Leandro Lucarella [Fri, 18 Sep 2009 15:39:44 +0000 (12:39 -0300)]
Make gen_rebuild_flags function call the shell

This is mostly to ease the implementation of the upcoming support for
pkg-config specification file generation.

12 years agoComment default rules
Leandro Lucarella [Fri, 18 Sep 2009 15:37:53 +0000 (12:37 -0300)]
Comment default rules

12 years agoAdd a special variable for the full current makefile directory
Leandro Lucarella [Fri, 18 Sep 2009 15:37:40 +0000 (12:37 -0300)]
Add a special variable for the full current makefile directory

The $C variable (which stores the path to the current makefile relative to
the top-level directory) is renamed to $S and $C now stores the full
(absolute) path to the current makefile.

12 years agoRename test project to makeit
Leandro Lucarella [Fri, 18 Sep 2009 13:25:32 +0000 (10:25 -0300)]
Rename test project to makeit

There is a already GNU Make fork called remake.

12 years agoAdd install and uninstall targets
Leandro Lucarella [Fri, 18 Sep 2009 03:09:24 +0000 (00:09 -0300)]
Add install and uninstall targets

The build system now support installing, supporting both $(prefix) and
$(DESTDIR) variables. A few helper functions are added to ease installation
and the $I variable is provided as the base directory where stuff should
be installed (i.e. $(DESTDIR)$(prefix)). The $(prefix) is passed to
compiled programs as a pre-processor define (PREFIX) and targets are
re-built when it changes.

Programs should "register" files to install adding them to the $(install)
variable (similar as they register targets to compile in the $(all)

A few common rules are included in Lib.mak to install binaries and
libraries. To install other type of files the rule should be provided by
the makefile writer (but a function is provided to make this easy).

The test project is updated to install binaries, libraries and headers.

12 years agoDon't use abbr except when printing pretty messages
Leandro Lucarella [Fri, 18 Sep 2009 00:39:32 +0000 (21:39 -0300)]
Don't use abbr except when printing pretty messages

This avoids the build system to break if abbr function have a bug (which
should affect only to pretty printed messages).

12 years agoImprove abbr function
Leandro Lucarella [Fri, 18 Sep 2009 00:38:59 +0000 (21:38 -0300)]
Improve abbr function

When used from sub-directories, if the file isn't inside the project's
top-level directory, it yields a bogus pseudo-relative-absolute name.
This patch fixes that.

12 years agoRearrange detection of changes in build flags
Leandro Lucarella [Thu, 17 Sep 2009 17:09:29 +0000 (14:09 -0300)]
Rearrange detection of changes in build flags

Move the code to detect flags changes to trigger a rebuild together,
allowing more accurate messages and adding new variables to the list of
variables to monitor for changes to trigger a rebuild.

12 years agoImprove include directory handling
Leandro Lucarella [Thu, 17 Sep 2009 17:07:25 +0000 (14:07 -0300)]
Improve include directory handling

Remove the $J variable, it was useless for now. Rename $I to the more
verbose $(INCLUDE_DIR) since it won't be used very often by the user
(makefile writer nor makefile user).

The include directory symlink is now handled per-project, allowing the
inclusion of sub-project headers more naturally (without requiring to
prefix the parent project name and allowing the sub-project to keep its
original include directory name). The $P variable is not needed anymore
because of this.

The makefiles functions changed a little to allow per-project include
directory making Lib.mak not include any other files; because of that the
"all" rule now uses the "secondary expansion" to calculate the
prerequisites (the $(all) variable has not been populated yet when the
"all" rule is defined).

The Toplevel.mak files are now guarded to avoid multiple inclusions. This
should be not a problem since now the Toplevel.mak should not be changed,
is like an extension to Lib.mak that the user shouldn't mdify unless
he is hacking the build system.

The subproj is now renamed to otherproj to illustrate how the sub-directory
where it is stored doesn't have to match the name of the sub-project.

The pre-compiled headers feature is a little broken for now because the
system includes detection is too weak to differentiate things real system
includes from things included from $(INCLUDE_DIR).

12 years agoMake internal $V flag to store @ when pretty printing
Leandro Lucarella [Thu, 17 Sep 2009 14:20:03 +0000 (11:20 -0300)]
Make internal $V flag to store @ when pretty printing

Verbosity flag ($V variable) let the user decide if he want to see nice
small messages ($V empty) or the standard make output displaying the raw
commands as they are executed ($V non-empty).

Now the meaning of this flag is reversed (and stores "@" when non-empty)
to let the Makefile writer to easily silence commands dependending on the
verbosity flag. When writing a rule, just prepend $V to each action you
want to conditionally silence depending on the verbosity flag.

12 years agoMake subprojects read the Lib.mak from the parent project
Leandro Lucarella [Thu, 17 Sep 2009 13:47:45 +0000 (10:47 -0300)]
Make subprojects read the Lib.mak from the parent project

By moving the Config.mak inclusion to Toplevel.mak we can read the
configuration before anything else, letting the user to change the
top-level path ($T) for example, which can be useful to make the subproject
read the Lib.mak of the parent project for example.

12 years agoMove "all" taget to Lib.mak
Leandro Lucarella [Thu, 17 Sep 2009 13:43:13 +0000 (10:43 -0300)]
Move "all" taget to Lib.mak

To be able to do this, the top-level Build.mak is included in Lib.mak too,
because the $(all) variable should be populated before defining the "all"
target, so it can have $(all) as a prerequisite.

12 years agoInitial import of the all mighty make based build system
Leandro Lucarella [Thu, 17 Sep 2009 13:30:56 +0000 (10:30 -0300)]
Initial import of the all mighty make based build system

This is a test/example of a nice make based build system that support
automatic dependencies, variants, separated build directory, automatic
generation of pre-compiled header, subproject embedding and some other

The only important file is Lib.mak, all the rest is just an usage example
and/or test.