List Info

Thread: Migrating autotools driven project to BB2




Migrating autotools driven project to BB2
user name
2006-12-27 14:47:52
Hi,

I'm a kind of Boost.Build newbie and I'm going to migrate a
few projects
based on GNU Autoconf/Automake/Libtool to Boost.Build v2.
So, I'd like to ask for some guidelines, best practices and
URLs/pointers where I should look first.

So far, I've read and exercised following documents:
- manual, sections 21 - 24
http:/
/www.boost.org/tools/build/v2/index.html
- Getting Started on the Wiki

After this reading, the BB2 looks very promising to me and
I'd like to move on.
Here are some of questions I'd like to ask here:

0. Is bjam 3.1.11 a good version to start with Boost.Build.2
?
This version is currently available in Ubuntu 6.10.
I'm asking, because I'm experiencing some strange problems
when trying
to run bjam --v2 command.

Below I'm trying to summary my configuration and steps I'm
taking to
use bjam on my Ubuntu 6.10 box:


a) echo $BOOST_BUILD_PATH
/usr/share/boost-build


b) Trying to build boost/tools/build/v2/example/hello but
not from
BOOST_ROOT location. I copied 'example' directory to another
directory.

$ ls
hello.cpp  Jamroot
$ bjam --v2
Failed to find the project root for directory '.'.
Did not find a project-root.jam file there or in any of its
parent
directories.
Please consult the documentation at 'http://www.boost.org'.


c) Trying to fix, but I'm not sure about these steps,
it's just my intuition:

$ touch project-root.jam
$ ls
hello.cpp  Jamroot  project-root.jam
$ bjam --v2
/usr/share/boost-build/build/project.jam:213: in
load-jamfile from
module project
error: Unable to load Jamfile.
error: Could not find a Jamfile in directory '.'.
error: Attempted to find it with pattern '[Jj]amfile.v2
[Jj]amfile
[Jj]amfile.jam'.
error: Please consult the documentation at 'http://www.boost.org'.
/usr/share/boost-build/build/project.jam:67: in project.load
from module
project
/usr/share/boost-build/build-system.jam:75: in load from
module build-system
/usr/share/boost-build/kernel/modules.jam:259: in import
from module modules
/usr/share/boost-build/kernel/bootstrap.jam:120: in
boost-build from module
/home/mloskot/workshop/boost/bb2/example/boost-build.jam:2:
in module
scope from module


d) ...following on what my intuition is telling me:

$ ls
hello.cpp  Jamroot  project-root.jam
$ mv Jamroot Jamfile
$ ls
hello.cpp  Jamfile  project-root.jam
$ bjam --v2
...found 9 targets...
...updating 5 targets...
MkDir1 bin
MkDir1 bin/gcc
MkDir1 bin/gcc/debug
gcc.compile.c++ bin/gcc/debug/hello.o
gcc.link bin/gcc/debug/hello
...updated 5 targets...


e) I'm not sure:
- if BOOST_BUILD_PATH is working for me, becasue...
- why I need to create empty project-root.jam?
- why I need to rename Jamroot to Jamfile?
- is Jamroot appropriate for multi-subprojects project and
  Jamfile for flat / one-level project?

I'd be thankful for pointing what I'm doing wrong here.

1. How to migrate ./configure based steps to BB2?
Here, I'd like to learn how to enable users to
enable/disable optional
features in my software. For example, my ./configure
supports
--with-pgsql option that enables/disables PostgreSQL support
in my
software. What is the equivalent of such
configuration/options in BB2?


2. How can I tell bjam to compile using 'gcc' instead of
'g++'?
I'd like to compile C sources with lib rule defined as
follows:

lib mylib : a.c b.c

As I see, bjam calls g++ what causes errors flood about
missing
declarations, etc.
How can I control selection of gcc/g++ command?
or better:
How can I control selection of C or C++ compilation mode?


3. Is there any repository of predefined/custom rules for
Boost.Build?
Here, I mean something like http://autoconf-arch
ive.cryp.to/
where I can find existing or publish my own macros ie.
detecting various
DBMS client libraries, etc.
Is there anything like that for Boost.Build?

Thanks for any help in advance.

Cheers
-- 
Mateusz Loskot
http://mateusz.loskot.net
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
Migrating autotools driven project to BB2
user name
2006-12-27 23:00:55
Hi, to many questions, I'm newbie but I'm also facing you
migration
process. I really like BJAM, it worth moving to it!

I also have ubuntu but do not use its bjam package, instead
I use the
Nightly build: htt
p://boost.org/boost-build2/boost-build.tar.bz2 , now
I'm using the source code corresponding to Tue Dec 12
17:36:45 MSK 2006
which report me:

Boost.Build V2 (Milestone 11)
Boost.Jam 03.1.14

You can learn a lot looking at tools/ utils/ and kernel/
they are the
perfect complement to the documentation for BJAM which (I
think IMHO )
needs to be improved (at least for a newbie).

Regarding configure migration what I'm doing now is
implementing
(experimenting) a set of rules for doing --with-xxx and
--enable-xxx.

module config 
{
  import path ;

  rule config ( pkg : prefix ? : incls ? : libs ? )
  {
    ECHO configuring package $(pkg) ;
    all-pkgs += $(pkg) ;
    if $(incls) {
      --with-$(pkg)-incls = $(incls) ;
    }
    if $(libs)
    {
      --with-$(pkg)-libs = $(libs) ;
    }
    if $(prefix)
    {
      --with-$(pkg)-incls ?= [ path.join $(prefix) include ]
;
      --with-$(pkg)-libs ?= [ path.join $(prefix) lib ] ;
    }
  }
  local export-rules = config ;

  rule configured ( pkg )
  {
    if $(pkg) in $(all-pkgs) { return yes ; }
  }
  export-rules += configured ;

  rule inc-path ( pkg ? )
  {
    if $(pkg)
    {
      if $(--with-$(pkg)-incls)
      {
        return <include>$(--with-$(pkg)-incls) ;
      }
    }
    else
    {
      local incls ;
      for local p in $(all-pkgs)
      {
        incls += <include>$(--with-$(p)-incls) ;
      }
      return $(incls) ;
    }
  }
  export-rules += inc-path ;

  rule lib-path ( pkg )
  {
    if $(--with-$(pkg)-libs)
    {
      return <search>$(--with-$(pkg)-libs) ;
    }  
  }
  export-rules += lib-path ;

  rule enable ( feature : define ? )
  {
    all-enabled += $(feature) ;
    if $(define)
    {
      enable-$(feature)-define = $(define) ;
    } else
    {
      enable-$(feature)-define = _USE_$(feature)_ ;
    }
  }
  export-rules += enable ;

  rule is-enabled ( feature )
  {
    return $(enable-$(feature)-define) ;
  }
  export-rules += is-enabled ;

  rule define-enabled ( )
  {
    local defines ;
    for local f in $(all-enabled)
    {
      defines += <define>$(enable-$(f)-define) ;
    }
    return $(defines) ;
  }
  export-rules += define-enabled ;

  for local r in $(export-rules)
  {
    EXPORT config : $(r) ;
    IMPORT config : $(r) : : $(r) ;
  }
}

now in my Jamroot I include a configuration file, for
instance

include prj-config.jam ;

the contents of that file could be:

config gsl ;
config cholmod : /usr/local/cholmod ;
enable dbdrivers ;
config unixodbc ;
config pgsql ;
config mysql : : /usr/include/mysql ;
config bz2 ;

then in my Jamroot and Jamfile(s) I can do:

[ inc-path ] to get the list of <include> properties
to be used as
requirements in the project, or

if [ is-enabled dbdrivers ]
{
  local odbc-support ;
  if [ configured unixodbc ]
  {
    local odbc_inc = [ inc-path unixodbc ] ;
    lib odbc : : <name>odbc [ lib-path unixodbc ] ;
    odbc-support = yes ;
  }
  else if [ configured iodbc ]
  {
    local odbc_inc = [ inc-path iodbc ] ;
    lib odbc : : <name>iodbc [ lib-path iodbc ] ;
    odbc-support = yes ;
  }
  if $(odbc-support) = yes 
  {
    lib tolodbc 
        : libtolodbc.c odbc
        : $(odbc_inc)
        ;
  }

  if [ configured mysql ] 
  {
    lib mysql : : <name>mysqlclient [ lib-path mysql ]
;
    lib tolmysql
        : libtolmysql.c mysql
        : [ inc-path mysql ]
        ;
  }

  if [ configured pgsql ]
  {
    lib pgsql : : <name>pq [ lib-path pgsql ] ;
    lib tolpgsql
        : libtolpgsql.c pgsql
        : [ inc-path pgsql ]
        ;
  }
}

now I'm doing that approach but comparing with what is
implemented into
boost-build I'm sure it is far from what can be achieved.

Any way, hope it helps.

regards,

Jorge

On Wed, 2006-12-27 at 15:47 +0100, Mateusz Loskot wrote:
> Hi,
> 
> I'm a kind of Boost.Build newbie and I'm going to
migrate a few projects
> based on GNU Autoconf/Automake/Libtool to Boost.Build
v2.
> So, I'd like to ask for some guidelines, best practices
and
> URLs/pointers where I should look first.
> 
> So far, I've read and exercised following documents:
> - manual, sections 21 - 24
> http:/
/www.boost.org/tools/build/v2/index.html
> - Getting Started on the Wiki
> 
> After this reading, the BB2 looks very promising to me
and
> I'd like to move on.
> Here are some of questions I'd like to ask here:
> 
> 0. Is bjam 3.1.11 a good version to start with
Boost.Build.2 ?
> This version is currently available in Ubuntu 6.10.
> I'm asking, because I'm experiencing some strange
problems when trying
> to run bjam --v2 command.
> 
> Below I'm trying to summary my configuration and steps
I'm taking to
> use bjam on my Ubuntu 6.10 box:
> 
> 
> a) echo $BOOST_BUILD_PATH
> /usr/share/boost-build
> 
> 
> b) Trying to build boost/tools/build/v2/example/hello
but not from
> BOOST_ROOT location. I copied 'example' directory to
another directory.
> 
> $ ls
> hello.cpp  Jamroot
> $ bjam --v2
> Failed to find the project root for directory '.'.
> Did not find a project-root.jam file there or in any of
its parent
> directories.
> Please consult the documentation at 'http://www.boost.org'.
> 
> 
> c) Trying to fix, but I'm not sure about these steps,
> it's just my intuition:
> 
> $ touch project-root.jam
> $ ls
> hello.cpp  Jamroot  project-root.jam
> $ bjam --v2
> /usr/share/boost-build/build/project.jam:213: in
load-jamfile from
> module project
> error: Unable to load Jamfile.
> error: Could not find a Jamfile in directory '.'.
> error: Attempted to find it with pattern '[Jj]amfile.v2
[Jj]amfile
> [Jj]amfile.jam'.
> error: Please consult the documentation at 'http://www.boost.org'.
> /usr/share/boost-build/build/project.jam:67: in
project.load from module
> project
> /usr/share/boost-build/build-system.jam:75: in load
from module build-system
> /usr/share/boost-build/kernel/modules.jam:259: in
import from module modules
> /usr/share/boost-build/kernel/bootstrap.jam:120: in
boost-build from module
>
/home/mloskot/workshop/boost/bb2/example/boost-build.jam:2:
in module
> scope from module
> 
> 
> d) ...following on what my intuition is telling me:
> 
> $ ls
> hello.cpp  Jamroot  project-root.jam
> $ mv Jamroot Jamfile
> $ ls
> hello.cpp  Jamfile  project-root.jam
> $ bjam --v2
> ...found 9 targets...
> ...updating 5 targets...
> MkDir1 bin
> MkDir1 bin/gcc
> MkDir1 bin/gcc/debug
> gcc.compile.c++ bin/gcc/debug/hello.o
> gcc.link bin/gcc/debug/hello
> ...updated 5 targets...
> 
> 
> e) I'm not sure:
> - if BOOST_BUILD_PATH is working for me, becasue...
> - why I need to create empty project-root.jam?
> - why I need to rename Jamroot to Jamfile?
> - is Jamroot appropriate for multi-subprojects project
and
>   Jamfile for flat / one-level project?
> 
> I'd be thankful for pointing what I'm doing wrong here.
> 
> 1. How to migrate ./configure based steps to BB2?
> Here, I'd like to learn how to enable users to
enable/disable optional
> features in my software. For example, my ./configure
supports
> --with-pgsql option that enables/disables PostgreSQL
support in my
> software. What is the equivalent of such
configuration/options in BB2?
> 
> 
> 2. How can I tell bjam to compile using 'gcc' instead
of 'g++'?
> I'd like to compile C sources with lib rule defined as
follows:
> 
> lib mylib : a.c b.c
> 
> As I see, bjam calls g++ what causes errors flood about
missing
> declarations, etc.
> How can I control selection of gcc/g++ command?
> or better:
> How can I control selection of C or C++ compilation
mode?
> 
> 
> 3. Is there any repository of predefined/custom rules
for Boost.Build?
> Here, I mean something like http://autoconf-arch
ive.cryp.to/
> where I can find existing or publish my own macros ie.
detecting various
> DBMS client libraries, etc.
> Is there anything like that for Boost.Build?
> 
> Thanks for any help in advance.
> 
> Cheers

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
Migrating autotools driven project to BB2
user name
2006-12-28 08:18:40
On Thursday 28 December 2006 02:00, Jorge Suit Perez Ronda
wrote:
> Hi, to many questions, I'm newbie but I'm also facing
you migration
> process. I really like BJAM, it worth moving to it!
> 
> I also have ubuntu but do not use its bjam package,
instead I use the
> Nightly build: htt
p://boost.org/boost-build2/boost-build.tar.bz2 , now
> I'm using the source code corresponding to Tue Dec 12
17:36:45 MSK 2006
> which report me:
> 
> Boost.Build V2 (Milestone 11)
> Boost.Jam 03.1.14
> 
> You can learn a lot looking at tools/ utils/ and
kernel/ they are the
> perfect complement to the documentation for BJAM which
(I think IMHO )
> needs to be improved (at least for a newbie).

FWIW, if you run into anything that needs to be documented
better, don't
hesitate to send an email that says so. I can't guarantee
immediate reply
but all such email will be "flagged" and
considered when I next time get
to work on docs.

- Volodya
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost-build
[1-3]

about | contact  Other archives ( Real Estate discussion Medical topics )