Help needed with conditionals in Makefile.am

From: Stephen Sanders (ssanders@ku.edu)
Date: Fri Aug 30 2002 - 14:07:06 EDT

  • Next message: Andrey Makeev: "What is the Bus error?"

    Hi,
    This is mostly directed to Christian, but maybe someone else will also 
    know the
    answer:
    
    On Christian's suggestion, I've finally managed to get a stub class 
    compiled and
    linked as both a dynamic library and as a loadable module on Mac OSX.  I 
    would
    now like to work through the brat Makefile.am files to produce both 
    libraries and loadable modules
    for OSX.  However, I'm having trouble seeing how to do this so that a OSX
    build will coexist with the normal build instructions.
    
    What somewhat works is the following:
    
    ------configure.in-------
    
    AC_INIT(foo.cc)
    AM_INIT_AUTOMAKE(foo, 1.0)
    AM_CONDITIONAL(MACOSX, test `root-config --arch` = macosx )
    AC_PROG_CXX
    AC_DISABLE_STATIC
    AM_PROG_LIBTOOL
    AC_OUTPUT(Makefile)
    
    
    -----Makefile.am-----
    AM_CPPFLAGS := `root-config --cflags`
    ROOTCONFIG = `root-config --glibs`
    if MACOSX
    pkglib_LTLIBRARIES = libfoo.la libfoo2.la
    libfoo2_la_SOURCES = foo.cxx foodict.cc
    libfoo2_la_LDFLAGS = -module -no-version $(ROOTCONFIG)
    else
    pkglib_LTLIBRARIES = libfoo.la
    endif
    pkginclude_HEADERS = foo.hh
    libfoo_la_SOURCES = foo.cxx foodict.cc
    libfoo_la_LDFLAGS = $(ROOTCONFIG)
    %dict.cc %dict.h:%.hh
    	rootcint -f $*dict.cc -c -p $(AM_CPPFLAGS) $< Include.h LinkDef.h
    
    
    However, I have the following problems:
    For MacOSX
         >>The loadable module library ends up with the name libfoo2.so.  I 
    need to get this renamed to libfoo.so
         >>automake complains about libfoo.la already being defined.  It 
    appears that it does this check BEFORE
             evaluating the conditional.
    
    For Linux
        >> Since linux doesn't distinguish between dynamic libraries and 
    loadable shared modules, I don't need the
             libfoo2 stuff.  Unfortunately  since automake evaluates the 
    conditional AFTER looking at
            consistency of the statements, the automake step fails.  The only 
    way I've been able to get this running under linux is to
            comment out all of the libfoo2 stuff.
    
    Is there a cleaner way of handing conditionals?  One that works!?
    
    Thanks for any suggestions,
    Regards
    Steve
    
    p.s.  For completeness, here are the other files used in the test setup:
    
    #######################----foo.hh----
    
    #ifndef FOO
    #define FOO
    
    #ifndef ROOT_TObject
    #include "TObject.h"
    #endif
    
    class Foo : public TObject
    {
    public:
       Foo();
       Foo(const Char_t * Name, const Char_t * Title);
       virtual ~Foo();
       ClassDef(Foo,0)
         };
    
    #endif
    
    #######################----foo.cc----
    
    #include "foo.hh"
    ClassImp(Foo)
    
    Foo::Foo()
    {
       //Default constructor.
    }
    
    Foo::Foo(const Char_t *name, const Char_t *title):TObject()
    {
    }
    Foo::~Foo()
    {
    }
    
    ###########################-----LinkDef.h------
    
    #ifdef __CINT__
    #pragma link off all globals;
    #pragma link off all classes;
    #pragma link off all functions;
    #pragma link C++ class Foo;
    #endif
    
    
    #############################----Include.h-------
    
    #ifndef LinkDefINC
    #define LinkDefINC
    #include "foo.hh"
    #endif
    



    This archive was generated by hypermail 2b30 : Fri Aug 30 2002 - 14:09:44 EDT