]> git.llucax.com Git - software/makeit.git/log
software/makeit.git
15 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.

15 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.

15 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.

15 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.

15 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.

15 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.

15 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)
instead.

15 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

15 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

15 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

15 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.

15 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
change.

15 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.

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

15 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.

15 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.

15 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)
variable).

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.

15 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).

15 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.

15 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.

15 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).

15 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.

15 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.

15 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.

15 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
goodies.

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