ede/build/Program.jam
Sanel Zukan 8b405a9165 Don't know how I missed SciCalc.h compilation errors.
Sanitizing Library and Program rules. No needs to pass compiler/linker
options throught the build rules since ObjectXXFlags are designed for that.
Also reduces parameter numbers for rules iteself.

Added LinkAgainst rule; jam's LinkLibraries will build library that we
want to link against which is no too good for system libraries. 
LinkAgainst will directly pass libraries to the linker.

Also fixed few bugs like GLOBALFLAGS inclusion since it was skipped 
throught the compilation (that brought a lot of warnings due appended 
-Wall -pedantic options :P).
2007-07-20 15:48:49 +00:00

139 lines
3.9 KiB
Plaintext

#
# $Id$
#
# Part of Equinox Desktop Environment (EDE).
# Copyright (c) 2000-2007 EDE Authors.
#
# This program is licensed under terms of the
# GNU General Public License version 2 or newer.
# See COPYING for details.
# MakeProgramPrivate [target] : [sources] : [libraries] : [flags] ;
rule MakeProgramPrivate
{
local target objects ;
# If this is gristed, targets of LinkAgainst, SharedLibrary and SharedLibraryVersioned
# _must_ be too. As I could see, in Jambase target is not gristed.
# I'm not sure what for cases foo/foo, but for now, things looking very good.
# target = $(1:G=$(SOURCE_GRIST)) ;
target = $(1) ;
# so 'jam foo' works when 'foo' is final executable
if $(target) != $(<) {
Depends $(<) : $(target) ;
NotFile $(<) ;
}
objects = [ FGristFiles $(2:S=$(SUFOBJ)) ] ;
# Pick up values if someone set flags outside (via ObjectCcFlags and etc.)
CFLAGS on $(objects) += $(4) ;
C++FLAGS on $(objects) += $(4) ;
LINKLIBS on $(target) = $(3) [ on $(target) return $(LINKLIBS) ] ;
MainFromObjects $(target) : $(objects) ;
Objects $(>) ;
}
# LinkAgainst [taraget] : [libraries] ;
# Add [libraries] to list of libraries for linking with [taraget]. This
# rule is similar to jam's LinkLibraries, but it will not built those libraries
# nor marked them for building. Also requires [libraries] are in the form '-lfoo'.
rule LinkAgainst
{
# Here is not used grist on target (LinkLibraries does not use it too).
# If gristing is added, make shure is added to SharedLibrary and SharedLibraryVersioned
# or it will not pick libraries and symlink will not be created.
LINKLIBS on $(1) = [ on $(1) return $(LINKLIBS) ] $(2) ;
}
# Program [target] : [sources] ;
# Compiles and links [target] from [sources]. No external flags or
# libraries are used since this should be generic rule for compiling
# any program.
rule Program
{
Main $(1) : $(2) ;
}
# EdeProgram [target] : [sources] : [noinstall] ;
# Creates EDE specific programs. They will be linked with EDELIBLIB
# and FLTKLIB. If [noinstall] is given, [target] will not be installed wit 'jam install'.
rule EdeProgram
{
if ! $(EDELIBINCLUDE) || ! $(EDELIBLIB) {
Echo "EDELIBINCLUDE or EDELIBLIB not defined; $(1) will not be built" ;
return ;
}
MakeProgramPrivate $(1) : $(2)
: $(EDELIBLIB) $(FLTKLIB) $(STDLIB)
: $(GLOBALFLAGS) $(EDELIBINCLUDE) $(FLTKINCLUDE) ;
if $(3) != "noinstall" {
InstallEdeProgram $(1) ;
}
}
# EfltkProgram [target] : [sources] : [noinstall] ;
# Creates programs that will be linked with efltk. If [noinstall] is given,
# [target] will not be installed wit 'jam install'.
rule EfltkProgram
{
if ! $(EFLTKINCLUDE) || ! $(EFLTKLIB) {
Echo "EFLTKINCLUDE or EFLTKLIB not defined; $(1) will not be built" ;
return ;
}
MakeProgramPrivate $(1) : $(2)
: $(EFLTKLIB) $(STDLIB)
: $(GLOBALFLAGS) $(EFLTKINCLUDE) ;
# install it where ede binaries resides
if $(3) != "noinstall" {
InstallEdeProgram $(1) ;
}
}
# FltkProgram [target] : [sources] : [noinstall] ;
# Creates programs that will be linked with fltk only. It will use full fltk
# dependencies (images).
rule FltkProgram
{
if ! $(FLTKINCLUDE) || ! $(FLTKLIB) {
Echo "FLTKINCLUDE or FLTKLIB not defined; $(1) will not be built" ;
return ;
}
MakeProgramPrivate $(1) : $(2)
: $(FLTKLIB) $(STDLIB)
: $(GLOBALFLAGS) $(FLTKINCLUDE) ;
# install it where ede binaries resides
if $(3) != "noinstall" {
InstallEdeProgram $(1) ;
}
}
# FltkProgramBare [target] : [sources] : [noinstall] ;
# Creates programs that will be linked with fltk only. No images will be linked in it.
rule FltkProgramBare
{
if ! $(FLTKINCLUDE) || ! $(FLTKLIB_NOIMAGES) {
Echo "FLTKINCLUDE or FLTKLIB_NOIMAGES not defined; $(1) will not be built" ;
return ;
}
MakeProgramPrivate $(1) : $(2)
: $(FLTKLIB_NOIMAGES) $(STDLIB)
: $(GLOBALFLAGS) $(FLTKINCLUDE) ;
# install it where ede binaries resides
if $(3) != "noinstall" {
InstallEdeProgram $(1) ;
}
}