blob: 0bd0ae5590440f5ed3c8dbe9f82782192dc90c2c [file] [log] [blame]
# Copyright 2008 Eduardo Gurgel
#
# Distributed under the Boost Software License, Version 1.0. (See
# accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
#
# Support for creating components for the Tntnet web application
# server (http://tntnet.org)
#
# Example:
#
# using tntnet : /usr ;
# lib index : index.png index.js index.css index.ecpp otherclass.cpp
# /tntnnet//tntnet /tntnet//cxxtools ;
#
#
import modules ;
import feature ;
import errors ;
import "class" : new ;
import generators ;
import project ;
import toolset : flags ;
import os ;
import virtual-target ;
import scanner ;
import type ;
type.register ECPP : ecpp ;
type.register JPEG : jpeg ;
type.register JPG : jpg ;
type.register PNG : png ;
type.register JS : js ;
type.register CSS : css ;
type.register GIF : gif ;
project.initialize $(__name__) ;
project tntnet ;
# Save the project so that we tolerate 'import + using' combo.
.project = [ project.current ] ;
# Initialized the Tntnet support module. The 'prefix' parameter
# tells where Tntnet is installed.
rule init ( prefix : full_bin ? : full_inc ? : full_lib ? )
{
project.push-current $(.project) ;
# pre-build paths to detect reinitializations changes
local inc_prefix lib_prefix bin_prefix ;
if $(full_inc)
{
inc_prefix = $(full_inc) ;
}
else
{
inc_prefix = $(prefix)/include ;
}
if $(full_lib)
{
lib_prefix = $(full_lib) ;
}
else
{
lib_prefix = $(prefix)/lib ;
}
if $(full_bin)
{
bin_prefix = $(full_bin) ;
}
else
{
bin_prefix = $(prefix)/bin ;
}
if $(.initialized)
{
if $(prefix) != $(.prefix)
{
errors.error
"Attempt the reinitialize Tntnet with different installation prefix" ;
}
if $(inc_prefix) != $(.incprefix)
{
errors.error
"Attempt the reinitialize Tntnet with different include path" ;
}
if $(lib_prefix) != $(.libprefix)
{
errors.error
"Attempt the reinitialize Tntnet with different library path" ;
}
if $(bin_prefix) != $(.binprefix)
{
errors.error
"Attempt the reinitialize Tntnet with different bin path" ;
}
}
else
{
.initialized = true ;
.prefix = $(prefix) ;
# Setup prefixes for include, binaries and libs.
.incprefix = $(.prefix)/include ;
.libprefix = $(.prefix)/lib ;
.binprefix = $(.prefix)/bin ;
# Generates cpp files from ecpp files using "ecppc" tool
generators.register-standard tntnet.ecpp : ECPP : CPP ;
# Generates cpp files from jpeg files using "ecppc" tool
generators.register-standard tntnet.jpeg : JPEG : CPP ;
# Generates cpp files from jpg files using "ecppc" tool
generators.register-standard tntnet.jpg : JPG : CPP ;
# Generates cpp files from png files using "ecppc" tool
generators.register-standard tntnet.png : PNG : CPP ;
# Generates cpp files from js files using "ecppc" tool
generators.register-standard tntnet.js : JS : CPP ;
# Generates cpp files from gif files using "ecppc" tool
generators.register-standard tntnet.gif : GIF : CPP ;
# Generates cpp files from css files using "ecppc" tool
generators.register-standard tntnet.css : CSS : CPP ;
# Scanner for ecpp includes
type.set-scanner ECPP : ecpp-scanner ;
local usage-requirements =
<include>$(.incprefix)
<library-path>$(.libprefix)
<dll-path>$(.libprefix)
<threading>multi
<allow>tntnet ;
lib cxxtools : $(main)
:
:
:
<include>$(.incprefix)/cxxtools
$(usage-requiriments)
;
lib tntnet : $(main)
:
:
:
<include>$(.incprefix)/tntnet
$(usage-requiriments)
;
}
project.pop-current ;
}
rule directory
{
return $(.prefix) ;
}
rule initialized ( )
{
return $(.initialized) ;
}
# Get <include> from current toolset.
flags tntnet.ecpp INCLUDES <include> ;
actions ecpp
{
$(.binprefix)/ecppc -I " $(INCLUDES) " -o $(<) $(>)
}
actions jpeg
{
$(.binprefix)/ecppc -b -m image/jpeg -o $(<) $(>)
}
actions jpg
{
$(.binprefix)/ecppc -b -m image/jpeg -o $(<) $(>)
}
actions js
{
$(.binprefix)/ecppc -b -m application/x-javascript -o $(<) $(>)
}
actions png
{
$(.binprefix)/ecppc -b -m image/png -o $(<) $(>)
}
actions gif
{
$(.binprefix)/ecppc -b -m image/gif -o $(<) $(>)
}
actions css
{
$(.binprefix)/ecppc -b -m text/css -o $(<) $(>)
}
class ecpp-scanner : common-scanner
{
rule pattern ( )
{
return "<%include.*>(.*)</%include>" ;
}
}
scanner.register ecpp-scanner : include ;