Re: [CMake] how to set ar/ranlib flags per target - Solved

2010-07-23 Thread Michael Wild

On 22. Jul, 2010, at 22:03 , Hickel, Kelly wrote:

 Thanks Michael,
 I'll give that a try tomorrow, at least setting it from the top level file, 
 but this seems like exactly the thing that you'd want to do in a toolchain 
 file, doesn't it?  E.g. one of the build tools has a particular restriction, 
 and you need to change the template when using that, so having to jump 
 through hoops to do it seems backwards.

IMHO using a toolchain file is jumping through the hoops. AFAIK they are only 
intended for cross-compiling, which you are clearly not.

 
 As far as the replace, I suppose it might be safer, although it might not, 
 given that I don't know what future versions might add between TARGET and 
 LINK_FLAGS, but it's certainly not as clear what it's doing. From a 
 simplistic point of view, it takes more lines to do it, and uses more 
 advanced commands to do so.
 

Indeed, that _could_ be a problem, but then your solution is even more 
dangerous in case the definitions of CMAKE_XXX_ARCHIVE_YYY variables change.

Michael

 
 Kelly Hickel
 
 
 -Original Message-
 From: Michael Wild [mailto:them...@gmail.com]
 Sent: Thursday, July 22, 2010 2:51 PM
 To: Hickel, Kelly
 Cc: Verweij, Arjen; cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target - Solved
 
 I just wanted to post this solution. But why don't you set this in the
 top-level CMakeLists.txt file? Also, you can use a loop over the
 languages and string(REGEX REPLACE ...) to make things a bit safer:
 
 foreach(lang C CXX)
  foreach(type CREATE APPEND)
string(REGEX REPLACE (TARGET)(.*)(LINK_FLAGS) \\3 \\1 \\2
  CMAKE_${lang}_ARCHIVE_${type} ${CMAKE_${lang}_ARCHIVE_${type}})
  endforeach()
 endforeach()
 
 
 
 Michael
 
 
 On 22. Jul, 2010, at 20:35 , Hickel, Kelly wrote:
 
 It turns out that you can do this (yay!), it's just tricky to
 discover how (well, it was for ME!).
 
 I got to wondering when CMake was injecting the STATIC_LIBRARY_FLAGS
 into the ar command line. The answer to this is also the reason why my
 setting LINK_FLAGS didn't have any effect on the ar command line.
 Apparently, cmMakefileLibraryTargetGenerator.cxx uses the target
 property STATIC_LIBRARY_FLAGS value and inserts it where LINK_FLAGS
 appears in the template.
 
 Since STATIC_LIBRARY_FLAGS is per target, this does what I want, as
 long as I accompany it with :
 SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR LINK_FLAGS cr TARGET
 OBJECTS)
 SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR LINK_FLAGS r TARGET
 OBJECTS)
 SET(CMAKE_CXX_ARCHIVE_CREATE CMAKE_AR LINK_FLAGS cr TARGET
 OBJECTS)
 SET(CMAKE_CXX_ARCHIVE_APPEND CMAKE_AR LINK_FLAGS r TARGET
 OBJECTS)
 
 The next problem was that adding those lines into my customized
 toolchain file didn't seem to work, something must be coming along and
 overriding those settings after my file is executed.  For me the
 simplest answer was to add those SET lines (with PARENT_SCOPE added to
 the line) into a function that I end up calling fairly frequently, to
 make sure I get the global setting that I want.  This is overkill, but
 it works just fine
 
 
 Anyway, just wanted to make sure the solution (well, workaround)
 made it into the mailing list archives.
 
 
 
 Kelly Hickel
 
 
 
 
 
 
 
 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Hickel, Kelly
 Sent: Thursday, July 22, 2010 10:35 AM
 To: Verweij, Arjen; cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 
 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Verweij, Arjen
 Sent: Thursday, July 22, 2010 6:59 AM
 To: cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 Hi Kelly,
 
 I'm using cmake to migrate from a legacy build system. The source
 consists of C C++ Fortran and Fortran90. I think -in all- there are
 15
 binaries.
 
 One of the problems for us is linking. Cmake somehow decides to
 take
 compiler X to link executable Y. But in some cases it didn't use
 the
 one we expected.
 
 So we wrapped add_executable() inside a function that takes an
 extra
 argument to control the linker language:
 
 function (FEXECUTABLE EXE_NAME LINK_LANG )
 
 [...]
 
   add_executable (${EXE_NAME_EXE} ${FILE_LIST_M})
 
   if ( ${LINK_LANG} STREQUAL CXX )
   set_target_properties (${EXE_NAME_EXE} PROPERTIES
 LINKER_LANGUAGE CXX)
   elseif ( ${LINK_LANG} STREQUAL C )
   set_target_properties (${EXE_NAME_EXE} PROPERTIES
 LINKER_LANGUAGE C)
   elseif ( ${LINK_LANG} STREQUAL Fortran )
   set_target_properties (${EXE_NAME_EXE} PROPERTIES
 LINKER_LANGUAGE Fortran)
   else ()
   message( FATAL Unknown linker language specified for
 function
 FEXECUTABLE: ${LINK_LANG )
   endif ()
 
 [...]
 
 endfunction (FEXECUTABLE)
 
 I'm not saying that this is proper usage of cmake, but it works
 for
 me
 (tm).
 
 Perhaps you can try a similar approach with add_library() -
 myadd_static_library() ? - to indicate

Re: [CMake] how to set ar/ranlib flags per target - Solved

2010-07-23 Thread Hickel, Kelly
Michael,
I tried your way of setting it, and that worked.
I already had a toolchain file, so wasn't worried about setting it there, but 
your comment about using a toolchain file prompted me to look at why I was 
using it.  Turns out that it was something I set up early on, and have since 
found better ways to do the things I was using it for.   So, my setup is 
cleaner now, thanks.


Kelly Hickel


 -Original Message-
 From: Michael Wild [mailto:them...@gmail.com]
 Sent: Friday, July 23, 2010 1:29 AM
 To: Hickel, Kelly
 Cc: CMake List
 Subject: Re: [CMake] how to set ar/ranlib flags per target - Solved


 On 22. Jul, 2010, at 22:03 , Hickel, Kelly wrote:

  Thanks Michael,
  I'll give that a try tomorrow, at least setting it from the top level
 file, but this seems like exactly the thing that you'd want to do in a
 toolchain file, doesn't it?  E.g. one of the build tools has a
 particular restriction, and you need to change the template when using
 that, so having to jump through hoops to do it seems backwards.

 IMHO using a toolchain file is jumping through the hoops. AFAIK they
 are only intended for cross-compiling, which you are clearly not.

 
  As far as the replace, I suppose it might be safer, although it might
 not, given that I don't know what future versions might add between
 TARGET and LINK_FLAGS, but it's certainly not as clear what it's doing.
 From a simplistic point of view, it takes more lines to do it, and uses
 more advanced commands to do so.
 

 Indeed, that _could_ be a problem, but then your solution is even more
 dangerous in case the definitions of CMAKE_XXX_ARCHIVE_YYY variables
 change.

 Michael

 
  Kelly Hickel
 
 
  -Original Message-
  From: Michael Wild [mailto:them...@gmail.com]
  Sent: Thursday, July 22, 2010 2:51 PM
  To: Hickel, Kelly
  Cc: Verweij, Arjen; cmake@cmake.org
  Subject: Re: [CMake] how to set ar/ranlib flags per target - Solved
 
  I just wanted to post this solution. But why don't you set this in
 the
  top-level CMakeLists.txt file? Also, you can use a loop over the
  languages and string(REGEX REPLACE ...) to make things a bit safer:
 
  foreach(lang C CXX)
   foreach(type CREATE APPEND)
 string(REGEX REPLACE (TARGET)(.*)(LINK_FLAGS) \\3 \\1 \\2
   CMAKE_${lang}_ARCHIVE_${type}
 ${CMAKE_${lang}_ARCHIVE_${type}})
   endforeach()
  endforeach()
 
 
 
  Michael
 
 
  On 22. Jul, 2010, at 20:35 , Hickel, Kelly wrote:
 
  It turns out that you can do this (yay!), it's just tricky to
  discover how (well, it was for ME!).
 
  I got to wondering when CMake was injecting the
 STATIC_LIBRARY_FLAGS
  into the ar command line. The answer to this is also the reason why
 my
  setting LINK_FLAGS didn't have any effect on the ar command line.
  Apparently, cmMakefileLibraryTargetGenerator.cxx uses the target
  property STATIC_LIBRARY_FLAGS value and inserts it where
 LINK_FLAGS
  appears in the template.
 
  Since STATIC_LIBRARY_FLAGS is per target, this does what I want, as
  long as I accompany it with :
  SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR LINK_FLAGS cr TARGET
  OBJECTS)
  SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR LINK_FLAGS r TARGET
  OBJECTS)
  SET(CMAKE_CXX_ARCHIVE_CREATE CMAKE_AR LINK_FLAGS cr TARGET
  OBJECTS)
  SET(CMAKE_CXX_ARCHIVE_APPEND CMAKE_AR LINK_FLAGS r TARGET
  OBJECTS)
 
  The next problem was that adding those lines into my customized
  toolchain file didn't seem to work, something must be coming along
 and
  overriding those settings after my file is executed.  For me the
  simplest answer was to add those SET lines (with PARENT_SCOPE added
 to
  the line) into a function that I end up calling fairly frequently,
 to
  make sure I get the global setting that I want.  This is overkill,
 but
  it works just fine
 
 
  Anyway, just wanted to make sure the solution (well, workaround)
  made it into the mailing list archives.
 
 
 
  Kelly Hickel
 
 
 
 
 
 
 
  -Original Message-
  From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
  Behalf Of Hickel, Kelly
  Sent: Thursday, July 22, 2010 10:35 AM
  To: Verweij, Arjen; cmake@cmake.org
  Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 
  -Original Message-
  From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
  Behalf Of Verweij, Arjen
  Sent: Thursday, July 22, 2010 6:59 AM
  To: cmake@cmake.org
  Subject: Re: [CMake] how to set ar/ranlib flags per target
 
  Hi Kelly,
 
  I'm using cmake to migrate from a legacy build system. The source
  consists of C C++ Fortran and Fortran90. I think -in all- there
 are
  15
  binaries.
 
  One of the problems for us is linking. Cmake somehow decides to
  take
  compiler X to link executable Y. But in some cases it didn't use
  the
  one we expected.
 
  So we wrapped add_executable() inside a function that takes an
  extra
  argument to control the linker language:
 
  function (FEXECUTABLE EXE_NAME LINK_LANG )
 
  [...]
 
add_executable (${EXE_NAME_EXE

Re: [CMake] how to set ar/ranlib flags per target

2010-07-22 Thread Hickel, Kelly
Arjen, I saw your response about wrapping add_library on the list, but for 
some reason it didn't get to my inbox.

I'm not sure what you mean by wrapping, are you talking about a code change, 
or some sort of macro?  So far, I haven't been able to come up with any way of 
jamming -X64 into the right place in the ar command.

Thanks,


Kelly Hickel



 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Hickel, Kelly
 Sent: Wednesday, July 21, 2010 3:46 PM
 To: Verweij, Arjen; cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 
  -Original Message-
  From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
  Behalf Of Verweij, Arjen
  Sent: Wednesday, July 21, 2010 3:43 PM
  To: cmake@cmake.org
  Subject: Re: [CMake] how to set ar/ranlib flags per target
 
  Kelly,
 
  I suffer from the same problem and solved it like this:
 
  SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR -X64 cr TARGET LINK_FLAGS
  OBJECTS)
  SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR -X64 r  TARGET LINK_FLAGS
  OBJECTS)
  SET(CMAKE_C_ARCHIVE_FINISH CMAKE_RANLIB -X64 TARGET)
  SET(CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
  SET(CMAKE_CXX_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
  SET(CMAKE_CXX_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
  SET(CMAKE_Fortran_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
  SET(CMAKE_Fortran_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
  SET(CMAKE_Fortran_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
 
  Does that help you?
 
  Regards,
  Arjen
 
 Thanks Arjen, but I don't believe it does.
 As far as I know that sets the flag globally, I have some targets that
 are 32 bit and some that are 64 bit, so I need to set it per target.
 
 Reading the source, I found STATIC_LIBRARY_FLAGS, which *almost* works,
 but it puts the flags AFTER the name of the output library, and ar on
 AIX doesn't like that, complains it can't find the object file -X64.
 Apparently the flag must come before the cr or r commands, e.g. ar
 -X64 cr foo.a bar.o baz.o.
 
 Thanks,
 -Kelly
 
 
  -Original Message-
  From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
  Behalf
  Of Hickel, Kelly
  Sent: woensdag 21 juli 2010 21:00
  To: cmake@cmake.org
  Subject: [CMake] how to set ar/ranlib flags per target
  
  
  Hello,
  
  I'm using CMake 2.8.1, and have a problem on AIX similar to this
 one:
  http://web.archiveorange.com/archive/v/5y7PkUbT6iizO31eshQa .
  
  I have the additional complication of needing to build both 32 and
 64
  bit libraries from the same set of CMake files.
  
  I've tried a number of things (list below), does anyone have any
  ideas?
  
  (Wherever I write CMAKE_C_xyz below, I've also changed CMAKE_CXX_xyz
  at the same time, where I write xyz_ARCHIVE_CREATE, I've also
 changed
  xyz_ARCHIVE_APPEND)
  
  1) Adding the flag to LINK_FLAGS because the definition for
 CMAKE_C_ARCHIVE_CREATE appears to include that on the command
 line,
 but the generated link.txt input files don't include any options.
  2) Changed the definition for CMAKE_C_ARCHIVE_CREATE in a private
 toolchain file that I specify on the command line.  By writing
 messages that show the value of that variable, I can see my
 change
 take, but it appears to get reset to the default before
 processing
  of
 my CMakeLists.txt file begins.
  3) Frequently set CMAKE_C_ARCHIVE_CREATE to CMAKE_AR AR_FLAGS r
 TARGET LINK_FLAGS OBJECTS, when I did this, I ended up
 with
  the
 literal string AR_FLAGS in the link.txt file, not that useful!
  
  I'm sure I'm missing something, any hints will be appreciated!
  
  Thanks,
  Kelly
  
  ___
  Powered by www.kitware.com
  
  Visit other Kitware open-source projects at
  http://www.kitware.com/opensource/opensource.html
  
  Please keep messages on-topic and check the CMake FAQ at:
  http://www.cmake.org/Wiki/CMake_FAQ
  
  Follow this link to subscribe/unsubscribe:
  http://www.cmake.org/mailman/listinfo/cmake
  ___
  Powered by www.kitware.com
 
  Visit other Kitware open-source projects at
  http://www.kitware.com/opensource/opensource.html
 
  Please keep messages on-topic and check the CMake FAQ at:
  http://www.cmake.org/Wiki/CMake_FAQ
 
  Follow this link to subscribe/unsubscribe:
  http://www.cmake.org/mailman/listinfo/cmake
 
 ___
 Powered by www.kitware.com
 
 Visit other Kitware open-source projects at
 http://www.kitware.com/opensource/opensource.html
 
 Please keep messages on-topic and check the CMake FAQ at:
 http://www.cmake.org/Wiki/CMake_FAQ
 
 Follow this link to subscribe/unsubscribe:
 http://www.cmake.org/mailman/listinfo/cmake

___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check

Re: [CMake] how to set ar/ranlib flags per target

2010-07-22 Thread Verweij, Arjen
Hi Kelly,

I'm using cmake to migrate from a legacy build system. The source consists of C 
C++ Fortran and Fortran90. I think -in all- there are 15 binaries.

One of the problems for us is linking. Cmake somehow decides to take compiler X 
to link executable Y. But in some cases it didn't use the one we expected.

So we wrapped add_executable() inside a function that takes an extra argument 
to control the linker language:

function (FEXECUTABLE EXE_NAME LINK_LANG )

[...]

add_executable (${EXE_NAME_EXE} ${FILE_LIST_M})

if ( ${LINK_LANG} STREQUAL CXX )
set_target_properties (${EXE_NAME_EXE} PROPERTIES LINKER_LANGUAGE CXX)
elseif ( ${LINK_LANG} STREQUAL C )
set_target_properties (${EXE_NAME_EXE} PROPERTIES LINKER_LANGUAGE C)
elseif ( ${LINK_LANG} STREQUAL Fortran )
set_target_properties (${EXE_NAME_EXE} PROPERTIES LINKER_LANGUAGE 
Fortran)
else ()
message( FATAL Unknown linker language specified for function 
FEXECUTABLE: ${LINK_LANG )
endif ()

[...]

endfunction (FEXECUTABLE)

I'm not saying that this is proper usage of cmake, but it works for me (tm).

Perhaps you can try a similar approach with add_library() - 
myadd_static_library() ? - to indicate if you want to use a 32-bit or 64-bit 
archiver.

Regards,
Arjen

-Original Message-
From: Hickel, Kelly [mailto:kelly_hic...@bmc.com]
Sent: donderdag 22 juli 2010 13:46
To: Hickel, Kelly; Verweij, Arjen; cmake@cmake.org
Subject: RE: how to set ar/ranlib flags per target

Arjen, I saw your response about wrapping add_library on the list, but
for some reason it didn't get to my inbox.

I'm not sure what you mean by wrapping, are you talking about a code
change, or some sort of macro?  So far, I haven't been able to come up
with any way of jamming -X64 into the right place in the ar command.

Thanks,


Kelly Hickel



 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Hickel, Kelly
 Sent: Wednesday, July 21, 2010 3:46 PM
 To: Verweij, Arjen; cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target


  -Original Message-
  From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
  Behalf Of Verweij, Arjen
  Sent: Wednesday, July 21, 2010 3:43 PM
  To: cmake@cmake.org
  Subject: Re: [CMake] how to set ar/ranlib flags per target
 
  Kelly,
 
  I suffer from the same problem and solved it like this:
 
  SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR -X64 cr TARGET LINK_FLAGS
  OBJECTS)
  SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR -X64 r  TARGET LINK_FLAGS
  OBJECTS)
  SET(CMAKE_C_ARCHIVE_FINISH CMAKE_RANLIB -X64 TARGET)
  SET(CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
  SET(CMAKE_CXX_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
  SET(CMAKE_CXX_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
  SET(CMAKE_Fortran_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
  SET(CMAKE_Fortran_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
  SET(CMAKE_Fortran_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
 
  Does that help you?
 
  Regards,
  Arjen

 Thanks Arjen, but I don't believe it does.
 As far as I know that sets the flag globally, I have some targets that
 are 32 bit and some that are 64 bit, so I need to set it per target.

 Reading the source, I found STATIC_LIBRARY_FLAGS, which *almost*
works,
 but it puts the flags AFTER the name of the output library, and ar on
 AIX doesn't like that, complains it can't find the object file -X64.
 Apparently the flag must come before the cr or r commands, e.g.
ar
 -X64 cr foo.a bar.o baz.o.

 Thanks,
 -Kelly

 
  -Original Message-
  From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
  Behalf
  Of Hickel, Kelly
  Sent: woensdag 21 juli 2010 21:00
  To: cmake@cmake.org
  Subject: [CMake] how to set ar/ranlib flags per target
  
  
  Hello,
  
  I'm using CMake 2.8.1, and have a problem on AIX similar to this
 one:
  http://web.archiveorange.com/archive/v/5y7PkUbT6iizO31eshQa .
  
  I have the additional complication of needing to build both 32 and
 64
  bit libraries from the same set of CMake files.
  
  I've tried a number of things (list below), does anyone have any
  ideas?
  
  (Wherever I write CMAKE_C_xyz below, I've also changed
CMAKE_CXX_xyz
  at the same time, where I write xyz_ARCHIVE_CREATE, I've also
 changed
  xyz_ARCHIVE_APPEND)
  
  1) Adding the flag to LINK_FLAGS because the definition for
 CMAKE_C_ARCHIVE_CREATE appears to include that on the command
 line,
 but the generated link.txt input files don't include any
options.
  2) Changed the definition for CMAKE_C_ARCHIVE_CREATE in a private
 toolchain file that I specify on the command line.  By writing
 messages that show the value of that variable, I can see my
 change
 take, but it appears to get reset to the default before
 processing
  of
 my CMakeLists.txt file begins.
  3) Frequently set CMAKE_C_ARCHIVE_CREATE to CMAKE_AR AR_FLAGS
r
 TARGET LINK_FLAGS OBJECTS, when I did this, I ended up

Re: [CMake] how to set ar/ranlib flags per target

2010-07-22 Thread Hickel, Kelly

 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Verweij, Arjen
 Sent: Thursday, July 22, 2010 6:59 AM
 To: cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 Hi Kelly,
 
 I'm using cmake to migrate from a legacy build system. The source
 consists of C C++ Fortran and Fortran90. I think -in all- there are 15
 binaries.
 
 One of the problems for us is linking. Cmake somehow decides to take
 compiler X to link executable Y. But in some cases it didn't use the
 one we expected.
 
 So we wrapped add_executable() inside a function that takes an extra
 argument to control the linker language:
 
 function (FEXECUTABLE EXE_NAME LINK_LANG )
 
 [...]
 
 add_executable (${EXE_NAME_EXE} ${FILE_LIST_M})
 
 if ( ${LINK_LANG} STREQUAL CXX )
 set_target_properties (${EXE_NAME_EXE} PROPERTIES
 LINKER_LANGUAGE CXX)
 elseif ( ${LINK_LANG} STREQUAL C )
 set_target_properties (${EXE_NAME_EXE} PROPERTIES
 LINKER_LANGUAGE C)
 elseif ( ${LINK_LANG} STREQUAL Fortran )
 set_target_properties (${EXE_NAME_EXE} PROPERTIES
 LINKER_LANGUAGE Fortran)
 else ()
 message( FATAL Unknown linker language specified for function
 FEXECUTABLE: ${LINK_LANG )
 endif ()
 
 [...]
 
 endfunction (FEXECUTABLE)
 
 I'm not saying that this is proper usage of cmake, but it works for me
 (tm).
 
 Perhaps you can try a similar approach with add_library() -
 myadd_static_library() ? - to indicate if you want to use a 32-bit or
 64-bit archiver.
 
 Regards,
 Arjen

Thanks Arjen,  I just don't see how this can help.  This snippet is ensure that 
the desired LINKER_LANGUAGE is set for each target, but my immediate issue is 
that it doesn't seem possible to inject -X64 onto the ar command line, in the 
correct place at all, much less on a per target basis, at least not without 
code changes (which I may undertake, but I'd REALLY like to avoid that).

To sum up, I have these issues:
1) The definition of CMAKE_C_ARCHIVE_CREATE indicates that it should 
use the LINK_FLAGS, but it doesn't do so and I don't know why.
2) STATIC_LIBRARY_FLAGS *ALMOST* works, but it's putting the flag after 
the /usr/bin/ar cr libfoo.a and for AIX, it must come before the cr.
3) trying to manipulate things by setting CMAKE_AR for instance has a 
global effect.

I suppose my best course is to figure out a way to change the source to be able 
to be more selective on where STATIC_LIBRARY_FLAGS gets injected, but that 
seems kind of a large hurdle for me at the moment (I haven't looked at the 
source that much).

Thanks,
-Kelly


 
 -Original Message-
 From: Hickel, Kelly [mailto:kelly_hic...@bmc.com]
 Sent: donderdag 22 juli 2010 13:46
 To: Hickel, Kelly; Verweij, Arjen; cmake@cmake.org
 Subject: RE: how to set ar/ranlib flags per target
 
 Arjen, I saw your response about wrapping add_library on the list,
 but
 for some reason it didn't get to my inbox.
 
 I'm not sure what you mean by wrapping, are you talking about a code
 change, or some sort of macro?  So far, I haven't been able to come up
 with any way of jamming -X64 into the right place in the ar command.
 
 Thanks,
 
 
 Kelly Hickel
 
 
 
  -Original Message-
  From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
  Behalf Of Hickel, Kelly
  Sent: Wednesday, July 21, 2010 3:46 PM
  To: Verweij, Arjen; cmake@cmake.org
  Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 
   -Original Message-
   From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
   Behalf Of Verweij, Arjen
   Sent: Wednesday, July 21, 2010 3:43 PM
   To: cmake@cmake.org
   Subject: Re: [CMake] how to set ar/ranlib flags per target
  
   Kelly,
  
   I suffer from the same problem and solved it like this:
  
   SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR -X64 cr TARGET
 LINK_FLAGS
   OBJECTS)
   SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR -X64 r  TARGET
 LINK_FLAGS
   OBJECTS)
   SET(CMAKE_C_ARCHIVE_FINISH CMAKE_RANLIB -X64 TARGET)
   SET(CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
   SET(CMAKE_CXX_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
   SET(CMAKE_CXX_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
   SET(CMAKE_Fortran_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
   SET(CMAKE_Fortran_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
   SET(CMAKE_Fortran_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
  
   Does that help you?
  
   Regards,
   Arjen
 
  Thanks Arjen, but I don't believe it does.
  As far as I know that sets the flag globally, I have some targets
 that
  are 32 bit and some that are 64 bit, so I need to set it per target.
 
  Reading the source, I found STATIC_LIBRARY_FLAGS, which *almost*
 works,
  but it puts the flags AFTER the name of the output library, and ar
 on
  AIX doesn't like that, complains it can't find the object file -X64.
  Apparently the flag must come before the cr or r commands, e.g.
 ar
  -X64 cr foo.a bar.o baz.o.
 
  Thanks

Re: [CMake] how to set ar/ranlib flags per target - Solved

2010-07-22 Thread Hickel, Kelly
It turns out that you can do this (yay!), it's just tricky to discover how 
(well, it was for ME!).

I got to wondering when CMake was injecting the STATIC_LIBRARY_FLAGS into the 
ar command line. The answer to this is also the reason why my setting 
LINK_FLAGS didn't have any effect on the ar command line.  Apparently, 
cmMakefileLibraryTargetGenerator.cxx uses the target property 
STATIC_LIBRARY_FLAGS value and inserts it where LINK_FLAGS appears in the 
template.

Since STATIC_LIBRARY_FLAGS is per target, this does what I want, as long as I 
accompany it with :
  SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR LINK_FLAGS cr TARGET OBJECTS)
  SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR LINK_FLAGS r TARGET OBJECTS)
  SET(CMAKE_CXX_ARCHIVE_CREATE CMAKE_AR LINK_FLAGS cr TARGET OBJECTS)
  SET(CMAKE_CXX_ARCHIVE_APPEND CMAKE_AR LINK_FLAGS r TARGET OBJECTS)

The next problem was that adding those lines into my customized toolchain file 
didn't seem to work, something must be coming along and overriding those 
settings after my file is executed.  For me the simplest answer was to add 
those SET lines (with PARENT_SCOPE added to the line) into a function that I 
end up calling fairly frequently, to make sure I get the global setting that I 
want.  This is overkill, but it works just fine


Anyway, just wanted to make sure the solution (well, workaround) made it into 
the mailing list archives.



Kelly Hickel







 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Hickel, Kelly
 Sent: Thursday, July 22, 2010 10:35 AM
 To: Verweij, Arjen; cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 
  -Original Message-
  From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
  Behalf Of Verweij, Arjen
  Sent: Thursday, July 22, 2010 6:59 AM
  To: cmake@cmake.org
  Subject: Re: [CMake] how to set ar/ranlib flags per target
 
  Hi Kelly,
 
  I'm using cmake to migrate from a legacy build system. The source
  consists of C C++ Fortran and Fortran90. I think -in all- there are
 15
  binaries.
 
  One of the problems for us is linking. Cmake somehow decides to take
  compiler X to link executable Y. But in some cases it didn't use the
  one we expected.
 
  So we wrapped add_executable() inside a function that takes an extra
  argument to control the linker language:
 
  function (FEXECUTABLE EXE_NAME LINK_LANG )
 
  [...]
 
  add_executable (${EXE_NAME_EXE} ${FILE_LIST_M})
 
  if ( ${LINK_LANG} STREQUAL CXX )
  set_target_properties (${EXE_NAME_EXE} PROPERTIES
  LINKER_LANGUAGE CXX)
  elseif ( ${LINK_LANG} STREQUAL C )
  set_target_properties (${EXE_NAME_EXE} PROPERTIES
  LINKER_LANGUAGE C)
  elseif ( ${LINK_LANG} STREQUAL Fortran )
  set_target_properties (${EXE_NAME_EXE} PROPERTIES
  LINKER_LANGUAGE Fortran)
  else ()
  message( FATAL Unknown linker language specified for
 function
  FEXECUTABLE: ${LINK_LANG )
  endif ()
 
  [...]
 
  endfunction (FEXECUTABLE)
 
  I'm not saying that this is proper usage of cmake, but it works for
 me
  (tm).
 
  Perhaps you can try a similar approach with add_library() -
  myadd_static_library() ? - to indicate if you want to use a 32-bit or
  64-bit archiver.
 
  Regards,
  Arjen
 
 Thanks Arjen,  I just don't see how this can help.  This snippet is
 ensure that the desired LINKER_LANGUAGE is set for each target, but my
 immediate issue is that it doesn't seem possible to inject -X64 onto
 the ar command line, in the correct place at all, much less on a per
 target basis, at least not without code changes (which I may undertake,
 but I'd REALLY like to avoid that).
 
 To sum up, I have these issues:
   1) The definition of CMAKE_C_ARCHIVE_CREATE indicates that it
 should use the LINK_FLAGS, but it doesn't do so and I don't know why.
   2) STATIC_LIBRARY_FLAGS *ALMOST* works, but it's putting the flag
 after the /usr/bin/ar cr libfoo.a and for AIX, it must come before
 the cr.
   3) trying to manipulate things by setting CMAKE_AR for instance
 has a global effect.
 
 I suppose my best course is to figure out a way to change the source to
 be able to be more selective on where STATIC_LIBRARY_FLAGS gets
 injected, but that seems kind of a large hurdle for me at the moment (I
 haven't looked at the source that much).
 
 Thanks,
 -Kelly
 
 
 
  -Original Message-
  From: Hickel, Kelly [mailto:kelly_hic...@bmc.com]
  Sent: donderdag 22 juli 2010 13:46
  To: Hickel, Kelly; Verweij, Arjen; cmake@cmake.org
  Subject: RE: how to set ar/ranlib flags per target
  
  Arjen, I saw your response about wrapping add_library on the list,
  but
  for some reason it didn't get to my inbox.
  
  I'm not sure what you mean by wrapping, are you talking about a
 code
  change, or some sort of macro?  So far, I haven't been able to come
 up
  with any way of jamming -X64 into the right place in the ar command.
  
  Thanks,
  
  
  Kelly Hickel

Re: [CMake] how to set ar/ranlib flags per target - Solved

2010-07-22 Thread Michael Wild
I just wanted to post this solution. But why don't you set this in the 
top-level CMakeLists.txt file? Also, you can use a loop over the languages and 
string(REGEX REPLACE ...) to make things a bit safer:

foreach(lang C CXX)
  foreach(type CREATE APPEND)
string(REGEX REPLACE (TARGET)(.*)(LINK_FLAGS) \\3 \\1 \\2
  CMAKE_${lang}_ARCHIVE_${type} ${CMAKE_${lang}_ARCHIVE_${type}})
  endforeach()
endforeach()



Michael


On 22. Jul, 2010, at 20:35 , Hickel, Kelly wrote:

 It turns out that you can do this (yay!), it's just tricky to discover how 
 (well, it was for ME!).
 
 I got to wondering when CMake was injecting the STATIC_LIBRARY_FLAGS into the 
 ar command line. The answer to this is also the reason why my setting 
 LINK_FLAGS didn't have any effect on the ar command line.  Apparently, 
 cmMakefileLibraryTargetGenerator.cxx uses the target property 
 STATIC_LIBRARY_FLAGS value and inserts it where LINK_FLAGS appears in the 
 template.
 
 Since STATIC_LIBRARY_FLAGS is per target, this does what I want, as long as I 
 accompany it with :
  SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR LINK_FLAGS cr TARGET OBJECTS)
  SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR LINK_FLAGS r TARGET OBJECTS)
  SET(CMAKE_CXX_ARCHIVE_CREATE CMAKE_AR LINK_FLAGS cr TARGET OBJECTS)
  SET(CMAKE_CXX_ARCHIVE_APPEND CMAKE_AR LINK_FLAGS r TARGET OBJECTS)
 
 The next problem was that adding those lines into my customized toolchain 
 file didn't seem to work, something must be coming along and overriding those 
 settings after my file is executed.  For me the simplest answer was to add 
 those SET lines (with PARENT_SCOPE added to the line) into a function that I 
 end up calling fairly frequently, to make sure I get the global setting that 
 I want.  This is overkill, but it works just fine
 
 
 Anyway, just wanted to make sure the solution (well, workaround) made it 
 into the mailing list archives.
 
 
 
 Kelly Hickel
 
 
 
 
 
 
 
 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Hickel, Kelly
 Sent: Thursday, July 22, 2010 10:35 AM
 To: Verweij, Arjen; cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 
 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Verweij, Arjen
 Sent: Thursday, July 22, 2010 6:59 AM
 To: cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 Hi Kelly,
 
 I'm using cmake to migrate from a legacy build system. The source
 consists of C C++ Fortran and Fortran90. I think -in all- there are
 15
 binaries.
 
 One of the problems for us is linking. Cmake somehow decides to take
 compiler X to link executable Y. But in some cases it didn't use the
 one we expected.
 
 So we wrapped add_executable() inside a function that takes an extra
 argument to control the linker language:
 
 function (FEXECUTABLE EXE_NAME LINK_LANG )
 
 [...]
 
add_executable (${EXE_NAME_EXE} ${FILE_LIST_M})
 
if ( ${LINK_LANG} STREQUAL CXX )
set_target_properties (${EXE_NAME_EXE} PROPERTIES
 LINKER_LANGUAGE CXX)
elseif ( ${LINK_LANG} STREQUAL C )
set_target_properties (${EXE_NAME_EXE} PROPERTIES
 LINKER_LANGUAGE C)
elseif ( ${LINK_LANG} STREQUAL Fortran )
set_target_properties (${EXE_NAME_EXE} PROPERTIES
 LINKER_LANGUAGE Fortran)
else ()
message( FATAL Unknown linker language specified for
 function
 FEXECUTABLE: ${LINK_LANG )
endif ()
 
 [...]
 
 endfunction (FEXECUTABLE)
 
 I'm not saying that this is proper usage of cmake, but it works for
 me
 (tm).
 
 Perhaps you can try a similar approach with add_library() -
 myadd_static_library() ? - to indicate if you want to use a 32-bit or
 64-bit archiver.
 
 Regards,
 Arjen
 
 Thanks Arjen,  I just don't see how this can help.  This snippet is
 ensure that the desired LINKER_LANGUAGE is set for each target, but my
 immediate issue is that it doesn't seem possible to inject -X64 onto
 the ar command line, in the correct place at all, much less on a per
 target basis, at least not without code changes (which I may undertake,
 but I'd REALLY like to avoid that).
 
 To sum up, I have these issues:
  1) The definition of CMAKE_C_ARCHIVE_CREATE indicates that it
 should use the LINK_FLAGS, but it doesn't do so and I don't know why.
  2) STATIC_LIBRARY_FLAGS *ALMOST* works, but it's putting the flag
 after the /usr/bin/ar cr libfoo.a and for AIX, it must come before
 the cr.
  3) trying to manipulate things by setting CMAKE_AR for instance
 has a global effect.
 
 I suppose my best course is to figure out a way to change the source to
 be able to be more selective on where STATIC_LIBRARY_FLAGS gets
 injected, but that seems kind of a large hurdle for me at the moment (I
 haven't looked at the source that much).
 
 Thanks,
 -Kelly
 
 
 
 -Original Message-
 From: Hickel, Kelly [mailto:kelly_hic...@bmc.com]
 Sent: donderdag 22 juli 2010 13:46
 To: Hickel, Kelly; Verweij

[CMake] how to set ar/ranlib flags per target

2010-07-21 Thread Hickel, Kelly

Hello,

I'm using CMake 2.8.1, and have a problem on AIX similar to this one:
http://web.archiveorange.com/archive/v/5y7PkUbT6iizO31eshQa .

I have the additional complication of needing to build both 32 and 64
bit libraries from the same set of CMake files.

I've tried a number of things (list below), does anyone have any ideas?

(Wherever I write CMAKE_C_xyz below, I've also changed CMAKE_CXX_xyz
at the same time, where I write xyz_ARCHIVE_CREATE, I've also changed
xyz_ARCHIVE_APPEND)

1) Adding the flag to LINK_FLAGS because the definition for
   CMAKE_C_ARCHIVE_CREATE appears to include that on the command line,
   but the generated link.txt input files don't include any options.
2) Changed the definition for CMAKE_C_ARCHIVE_CREATE in a private
   toolchain file that I specify on the command line.  By writing
   messages that show the value of that variable, I can see my change
   take, but it appears to get reset to the default before processing of
   my CMakeLists.txt file begins.
3) Frequently set CMAKE_C_ARCHIVE_CREATE to CMAKE_AR AR_FLAGS r
   TARGET LINK_FLAGS OBJECTS, when I did this, I ended up with the
   literal string AR_FLAGS in the link.txt file, not that useful!

I'm sure I'm missing something, any hints will be appreciated!

Thanks, 
Kelly

___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] how to set ar/ranlib flags per target

2010-07-21 Thread Verweij, Arjen
Kelly,

I suffer from the same problem and solved it like this:

SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR -X64 cr TARGET LINK_FLAGS OBJECTS)
SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR -X64 r  TARGET LINK_FLAGS OBJECTS)
SET(CMAKE_C_ARCHIVE_FINISH CMAKE_RANLIB -X64 TARGET)
SET(CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
SET(CMAKE_CXX_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
SET(CMAKE_CXX_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
SET(CMAKE_Fortran_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
SET(CMAKE_Fortran_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
SET(CMAKE_Fortran_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})

Does that help you?

Regards,
Arjen

-Original Message-
From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On Behalf
Of Hickel, Kelly
Sent: woensdag 21 juli 2010 21:00
To: cmake@cmake.org
Subject: [CMake] how to set ar/ranlib flags per target


Hello,

I'm using CMake 2.8.1, and have a problem on AIX similar to this one:
http://web.archiveorange.com/archive/v/5y7PkUbT6iizO31eshQa .

I have the additional complication of needing to build both 32 and 64
bit libraries from the same set of CMake files.

I've tried a number of things (list below), does anyone have any ideas?

(Wherever I write CMAKE_C_xyz below, I've also changed CMAKE_CXX_xyz
at the same time, where I write xyz_ARCHIVE_CREATE, I've also changed
xyz_ARCHIVE_APPEND)

1) Adding the flag to LINK_FLAGS because the definition for
   CMAKE_C_ARCHIVE_CREATE appears to include that on the command line,
   but the generated link.txt input files don't include any options.
2) Changed the definition for CMAKE_C_ARCHIVE_CREATE in a private
   toolchain file that I specify on the command line.  By writing
   messages that show the value of that variable, I can see my change
   take, but it appears to get reset to the default before processing of
   my CMakeLists.txt file begins.
3) Frequently set CMAKE_C_ARCHIVE_CREATE to CMAKE_AR AR_FLAGS r
   TARGET LINK_FLAGS OBJECTS, when I did this, I ended up with
the
   literal string AR_FLAGS in the link.txt file, not that useful!

I'm sure I'm missing something, any hints will be appreciated!

Thanks,
Kelly

___
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake
___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] how to set ar/ranlib flags per target

2010-07-21 Thread Hickel, Kelly

 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Verweij, Arjen
 Sent: Wednesday, July 21, 2010 3:43 PM
 To: cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target
 
 Kelly,
 
 I suffer from the same problem and solved it like this:
 
 SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR -X64 cr TARGET LINK_FLAGS
 OBJECTS)
 SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR -X64 r  TARGET LINK_FLAGS
 OBJECTS)
 SET(CMAKE_C_ARCHIVE_FINISH CMAKE_RANLIB -X64 TARGET)
 SET(CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
 SET(CMAKE_CXX_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
 SET(CMAKE_CXX_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
 SET(CMAKE_Fortran_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
 SET(CMAKE_Fortran_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
 SET(CMAKE_Fortran_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
 
 Does that help you?
 
 Regards,
 Arjen

Thanks Arjen, but I don't believe it does.
As far as I know that sets the flag globally, I have some targets that are 32 
bit and some that are 64 bit, so I need to set it per target.

Reading the source, I found STATIC_LIBRARY_FLAGS, which *almost* works, but it 
puts the flags AFTER the name of the output library, and ar on AIX doesn't like 
that, complains it can't find the object file -X64.  Apparently the flag must 
come before the cr or r commands, e.g. ar -X64 cr foo.a bar.o baz.o.

Thanks,
-Kelly

 
 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf
 Of Hickel, Kelly
 Sent: woensdag 21 juli 2010 21:00
 To: cmake@cmake.org
 Subject: [CMake] how to set ar/ranlib flags per target
 
 
 Hello,
 
 I'm using CMake 2.8.1, and have a problem on AIX similar to this one:
 http://web.archiveorange.com/archive/v/5y7PkUbT6iizO31eshQa .
 
 I have the additional complication of needing to build both 32 and 64
 bit libraries from the same set of CMake files.
 
 I've tried a number of things (list below), does anyone have any
 ideas?
 
 (Wherever I write CMAKE_C_xyz below, I've also changed CMAKE_CXX_xyz
 at the same time, where I write xyz_ARCHIVE_CREATE, I've also changed
 xyz_ARCHIVE_APPEND)
 
 1) Adding the flag to LINK_FLAGS because the definition for
CMAKE_C_ARCHIVE_CREATE appears to include that on the command line,
but the generated link.txt input files don't include any options.
 2) Changed the definition for CMAKE_C_ARCHIVE_CREATE in a private
toolchain file that I specify on the command line.  By writing
messages that show the value of that variable, I can see my change
take, but it appears to get reset to the default before processing
 of
my CMakeLists.txt file begins.
 3) Frequently set CMAKE_C_ARCHIVE_CREATE to CMAKE_AR AR_FLAGS r
TARGET LINK_FLAGS OBJECTS, when I did this, I ended up with
 the
literal string AR_FLAGS in the link.txt file, not that useful!
 
 I'm sure I'm missing something, any hints will be appreciated!
 
 Thanks,
 Kelly
 
 ___
 Powered by www.kitware.com
 
 Visit other Kitware open-source projects at
 http://www.kitware.com/opensource/opensource.html
 
 Please keep messages on-topic and check the CMake FAQ at:
 http://www.cmake.org/Wiki/CMake_FAQ
 
 Follow this link to subscribe/unsubscribe:
 http://www.cmake.org/mailman/listinfo/cmake
 ___
 Powered by www.kitware.com
 
 Visit other Kitware open-source projects at
 http://www.kitware.com/opensource/opensource.html
 
 Please keep messages on-topic and check the CMake FAQ at:
 http://www.cmake.org/Wiki/CMake_FAQ
 
 Follow this link to subscribe/unsubscribe:
 http://www.cmake.org/mailman/listinfo/cmake

___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] how to set ar/ranlib flags per target

2010-07-21 Thread Verweij, Arjen
Well the thread you reference asks the TS to submit a bug in Mantis. Was such a 
bug ever submitted?

I did a quick check and I can't find one using several queries.

No other ideas for fixing your problem except for wrapping add_library to 
include 32/64 bit argument.

Regards,
Arjen

-Original Message-
From: Hickel, Kelly [mailto:kelly_hic...@bmc.com]
Sent: woensdag 21 juli 2010 22:46
To: Verweij, Arjen; cmake@cmake.org
Subject: RE: how to set ar/ranlib flags per target


 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Verweij, Arjen
 Sent: Wednesday, July 21, 2010 3:43 PM
 To: cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target

 Kelly,

 I suffer from the same problem and solved it like this:

 SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR -X64 cr TARGET LINK_FLAGS
 OBJECTS)
 SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR -X64 r  TARGET LINK_FLAGS
 OBJECTS)
 SET(CMAKE_C_ARCHIVE_FINISH CMAKE_RANLIB -X64 TARGET)
 SET(CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
 SET(CMAKE_CXX_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
 SET(CMAKE_CXX_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
 SET(CMAKE_Fortran_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
 SET(CMAKE_Fortran_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
 SET(CMAKE_Fortran_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})

 Does that help you?

 Regards,
 Arjen

Thanks Arjen, but I don't believe it does.
As far as I know that sets the flag globally, I have some targets that
are 32 bit and some that are 64 bit, so I need to set it per target.

Reading the source, I found STATIC_LIBRARY_FLAGS, which *almost* works,
but it puts the flags AFTER the name of the output library, and ar on
AIX doesn't like that, complains it can't find the object file -X64.
Apparently the flag must come before the cr or r commands, e.g. ar
-X64 cr foo.a bar.o baz.o.

Thanks,
-Kelly


 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf
 Of Hickel, Kelly
 Sent: woensdag 21 juli 2010 21:00
 To: cmake@cmake.org
 Subject: [CMake] how to set ar/ranlib flags per target
 
 
 Hello,
 
 I'm using CMake 2.8.1, and have a problem on AIX similar to this one:
 http://web.archiveorange.com/archive/v/5y7PkUbT6iizO31eshQa .
 
 I have the additional complication of needing to build both 32 and 64
 bit libraries from the same set of CMake files.
 
 I've tried a number of things (list below), does anyone have any
 ideas?
 
 (Wherever I write CMAKE_C_xyz below, I've also changed CMAKE_CXX_xyz
 at the same time, where I write xyz_ARCHIVE_CREATE, I've also changed
 xyz_ARCHIVE_APPEND)
 
 1) Adding the flag to LINK_FLAGS because the definition for
CMAKE_C_ARCHIVE_CREATE appears to include that on the command
line,
but the generated link.txt input files don't include any options.
 2) Changed the definition for CMAKE_C_ARCHIVE_CREATE in a private
toolchain file that I specify on the command line.  By writing
messages that show the value of that variable, I can see my change
take, but it appears to get reset to the default before processing
 of
my CMakeLists.txt file begins.
 3) Frequently set CMAKE_C_ARCHIVE_CREATE to CMAKE_AR AR_FLAGS r
TARGET LINK_FLAGS OBJECTS, when I did this, I ended up with
 the
literal string AR_FLAGS in the link.txt file, not that useful!
 
 I'm sure I'm missing something, any hints will be appreciated!
 
 Thanks,
 Kelly
 
 ___
 Powered by www.kitware.com
 
 Visit other Kitware open-source projects at
 http://www.kitware.com/opensource/opensource.html
 
 Please keep messages on-topic and check the CMake FAQ at:
 http://www.cmake.org/Wiki/CMake_FAQ
 
 Follow this link to subscribe/unsubscribe:
 http://www.cmake.org/mailman/listinfo/cmake
 ___
 Powered by www.kitware.com

 Visit other Kitware open-source projects at
 http://www.kitware.com/opensource/opensource.html

 Please keep messages on-topic and check the CMake FAQ at:
 http://www.cmake.org/Wiki/CMake_FAQ

 Follow this link to subscribe/unsubscribe:
 http://www.cmake.org/mailman/listinfo/cmake

___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake


Re: [CMake] how to set ar/ranlib flags per target

2010-07-21 Thread Michael Hertling
On 07/21/2010 10:46 PM, Hickel, Kelly wrote:
 
 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf Of Verweij, Arjen
 Sent: Wednesday, July 21, 2010 3:43 PM
 To: cmake@cmake.org
 Subject: Re: [CMake] how to set ar/ranlib flags per target

 Kelly,

 I suffer from the same problem and solved it like this:

 SET(CMAKE_C_ARCHIVE_CREATE CMAKE_AR -X64 cr TARGET LINK_FLAGS
 OBJECTS)
 SET(CMAKE_C_ARCHIVE_APPEND CMAKE_AR -X64 r  TARGET LINK_FLAGS
 OBJECTS)
 SET(CMAKE_C_ARCHIVE_FINISH CMAKE_RANLIB -X64 TARGET)
 SET(CMAKE_CXX_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
 SET(CMAKE_CXX_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
 SET(CMAKE_CXX_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})
 SET(CMAKE_Fortran_ARCHIVE_CREATE ${CMAKE_C_ARCHIVE_CREATE})
 SET(CMAKE_Fortran_ARCHIVE_APPEND ${CMAKE_C_ARCHIVE_APPEND})
 SET(CMAKE_Fortran_ARCHIVE_FINISH ${CMAKE_C_ARCHIVE_FINISH})

 Does that help you?

 Regards,
 Arjen
 
 Thanks Arjen, but I don't believe it does.
 As far as I know that sets the flag globally, I have some targets that are 32 
 bit and some that are 64 bit, so I need to set it per target.

AFAIK, these rule variables are effective for the directory they are
defined in, and they are inherited as usual; look at the following:

# CMakeLists.txt:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(RULEVARS C)
SET(CMAKE_C_ARCHIVE_CREATE echo \Top directory\; CMAKE_AR cr
TARGET LINK_FLAGS OBJECTS)
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/f.c void f(void){}\n)
ADD_LIBRARY(f STATIC f.c)
ADD_SUBDIRECTORY(subdir1)
ADD_SUBDIRECTORY(subdir2)

# subdir1/CMakeLists.txt:
SET(CMAKE_C_ARCHIVE_CREATE echo \Sub directory\; CMAKE_AR cr
TARGET LINK_FLAGS OBJECTS)
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/g.c void g(void){}\n)
ADD_LIBRARY(g STATIC g.c)

# subdir2/CMakeLists.txt:
FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/h.c void h(void){}\n)
ADD_LIBRARY(h STATIC h.c)

After configuration and make VERBOSE=1, you will see that the targets
f and g are built with their individual CMAKE_C_ARCHIVE_CREATE rule
while h inherits this rule from the parent directory. Thus, if it's
feasible to organize your project so that the 32- and 64-bit targets
reside in their own directories you could possibly get by with the
manipulation of the rule variables on a per-directory basis.

Regards,

Michael

P.S.: The latest definition of the rules in a directory takes effect
  for that entire directory, but the subdirectories inherit the
  definition which is valid at the ADD_SUBDIRECTORY(). Prove it
  by moving the SET() in the toplevel CMakeLists.txt to the end:
  f and g won't change, but h is built with the usual rule.

 Reading the source, I found STATIC_LIBRARY_FLAGS, which *almost* works, but 
 it puts the flags AFTER the name of the output library, and ar on AIX doesn't 
 like that, complains it can't find the object file -X64.  Apparently the flag 
 must come before the cr or r commands, e.g. ar -X64 cr foo.a bar.o 
 baz.o.
 
 Thanks,
 -Kelly
 

 -Original Message-
 From: cmake-boun...@cmake.org [mailto:cmake-boun...@cmake.org] On
 Behalf
 Of Hickel, Kelly
 Sent: woensdag 21 juli 2010 21:00
 To: cmake@cmake.org
 Subject: [CMake] how to set ar/ranlib flags per target


 Hello,

 I'm using CMake 2.8.1, and have a problem on AIX similar to this one:
 http://web.archiveorange.com/archive/v/5y7PkUbT6iizO31eshQa .

 I have the additional complication of needing to build both 32 and 64
 bit libraries from the same set of CMake files.

 I've tried a number of things (list below), does anyone have any
 ideas?

 (Wherever I write CMAKE_C_xyz below, I've also changed CMAKE_CXX_xyz
 at the same time, where I write xyz_ARCHIVE_CREATE, I've also changed
 xyz_ARCHIVE_APPEND)

 1) Adding the flag to LINK_FLAGS because the definition for
   CMAKE_C_ARCHIVE_CREATE appears to include that on the command line,
   but the generated link.txt input files don't include any options.
 2) Changed the definition for CMAKE_C_ARCHIVE_CREATE in a private
   toolchain file that I specify on the command line.  By writing
   messages that show the value of that variable, I can see my change
   take, but it appears to get reset to the default before processing
 of
   my CMakeLists.txt file begins.
 3) Frequently set CMAKE_C_ARCHIVE_CREATE to CMAKE_AR AR_FLAGS r
   TARGET LINK_FLAGS OBJECTS, when I did this, I ended up with
 the
   literal string AR_FLAGS in the link.txt file, not that useful!

 I'm sure I'm missing something, any hints will be appreciated!

 Thanks,
 Kelly
___
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake