2001-01-11 22:55:47 +03:00
/*=========================================================================
2002-10-24 02:03:27 +04:00
Program : CMake - Cross - Platform Makefile Generator
2001-01-11 22:55:47 +03:00
Module : $ RCSfile $
Language : C + +
Date : $ Date $
Version : $ Revision $
2002-10-24 02:03:27 +04:00
Copyright ( c ) 2002 Kitware , Inc . , Insight Consortium . All rights reserved .
See Copyright . txt or http : //www.cmake.org/HTML/Copyright.html for details.
2001-01-11 22:55:47 +03:00
2002-01-21 23:30:43 +03:00
This software is distributed WITHOUT ANY WARRANTY ; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE . See the above copyright notices for more information .
2001-01-11 22:55:47 +03:00
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */
2001-01-18 19:20:24 +03:00
# include "cmSourceFilesCommand.h"
2004-02-22 21:14:59 +03:00
# include "cmSourceFile.h"
2003-05-24 18:07:58 +04:00
# include <stdlib.h> // required for atof
2001-01-05 19:41:20 +03:00
2003-07-21 22:44:25 +04:00
bool cmSourceFilesCommand : : IsDeprecated ( int major , int minor )
{
if ( major > = 1 & & minor > = 4 )
{
this - > SetError ( " The SOURCE_FILES command was deprecated in CMake version 1.4 and will be removed in later versions of CMake. You should modify your CMakeLists.txt files to use the SET command instead, or set the cache value of CMAKE_BACKWARDS_COMPATIBILITY to 1.2 or less. \n " ) ;
return true ;
}
return false ;
}
2001-01-18 19:20:24 +03:00
// cmSourceFilesCommand
2002-12-12 02:13:33 +03:00
bool cmSourceFilesCommand : : InitialPass ( std : : vector < std : : string > const & args )
2001-01-05 19:41:20 +03:00
{
2002-04-19 22:03:47 +04:00
const char * versionValue
2002-12-20 18:23:51 +03:00
= m_Makefile - > GetDefinition ( " CMAKE_BACKWARDS_COMPATIBILITY " ) ;
if ( atof ( versionValue ) > 1.2 )
{
cmSystemTools : : Message ( " The SOURCE_FILES command was deprecated in CMake version 1.4 and will be removed in later versions. You should modify your CMakeLists.txt files to use the SET command instead, or set the cache value of CMAKE_BACKWARDS_COMPATIBILITY to 1.2 or less. \n " , " Warning " ) ;
}
2002-04-19 22:03:47 +04:00
2002-12-12 02:13:33 +03:00
if ( args . size ( ) < 1 )
2001-01-05 19:41:20 +03:00
{
this - > SetError ( " called with incorrect number of arguments " ) ;
return false ;
}
2002-06-27 23:57:09 +04:00
std : : string sourceListValue ;
// was the list already populated
2001-11-08 18:40:05 +03:00
std : : string name = args [ 0 ] ;
2002-06-27 23:57:09 +04:00
const char * def = m_Makefile - > GetDefinition ( name . c_str ( ) ) ;
if ( def )
{
sourceListValue = def ;
}
2002-01-17 22:11:26 +03:00
int generated = 0 ;
2001-11-08 18:40:05 +03:00
2001-09-20 23:08:30 +04:00
for ( std : : vector < std : : string > : : const_iterator i = ( args . begin ( ) + 1 ) ;
2001-01-05 19:41:20 +03:00
i ! = args . end ( ) ; + + i )
{
2001-06-28 01:19:11 +04:00
std : : string copy = * i ;
2002-01-17 22:11:26 +03:00
// Keyword GENERATED in the source file list means that
// from here on files will be generated
if ( copy = = " GENERATED " )
{
generated = 1 ;
continue ;
}
2002-06-28 00:42:57 +04:00
cmSourceFile * sf = m_Makefile - > GetSource ( copy . c_str ( ) ) ;
2002-03-29 18:06:30 +03:00
if ( sf )
{
// if the source file is already in the makefile,
2002-06-27 23:57:09 +04:00
// then add the pointer to the source list without creating cmSourceFile
if ( sourceListValue . size ( ) > 0 )
{
sourceListValue + = " ; " ;
}
sourceListValue + = copy ;
2002-03-29 18:06:30 +03:00
continue ;
}
2001-04-25 00:49:12 +04:00
cmSourceFile file ;
2002-08-16 19:20:18 +04:00
file . SetProperty ( " ABSTRACT " , " 0 " ) ;
2001-06-28 01:19:11 +04:00
std : : string path = cmSystemTools : : GetFilenamePath ( copy ) ;
2002-01-17 22:11:26 +03:00
if ( generated )
2001-06-28 01:19:11 +04:00
{
2002-01-17 22:11:26 +03:00
// This file will be generated, so we should not check
// if it exist.
std : : string ext = cmSystemTools : : GetFilenameExtension ( copy ) ;
std : : string name_no_ext = cmSystemTools : : GetFilenameName ( copy . c_str ( ) ) ;
name_no_ext = name_no_ext . substr ( 0 , name_no_ext . length ( ) - ext . length ( ) ) ;
2002-01-21 18:11:47 +03:00
if ( ext . length ( ) & & ext [ 0 ] = = ' . ' )
2002-10-24 02:03:27 +04:00
{
ext = ext . substr ( 1 ) ;
}
2002-01-17 22:11:26 +03:00
if ( ( path . size ( ) & & path [ 0 ] = = ' / ' ) | |
2002-10-24 02:03:27 +04:00
( path . size ( ) > 1 & & path [ 1 ] = = ' : ' ) )
{
file . SetName ( name_no_ext . c_str ( ) , path . c_str ( ) , ext . c_str ( ) , false ) ;
}
2002-01-17 22:11:26 +03:00
else
2002-10-24 02:03:27 +04:00
{
file . SetName ( name_no_ext . c_str ( ) ,
2002-06-27 23:57:09 +04:00
m_Makefile - > GetCurrentOutputDirectory ( ) ,
2002-10-24 02:03:27 +04:00
ext . c_str ( ) , false ) ;
}
2001-06-28 01:19:11 +04:00
}
else
2002-06-27 23:57:09 +04:00
{
2002-01-17 22:11:26 +03:00
// if this is a full path then
if ( ( path . size ( ) & & path [ 0 ] = = ' / ' ) | |
2002-10-24 02:03:27 +04:00
( path . size ( ) > 1 & & path [ 1 ] = = ' : ' ) )
{
file . SetName ( cmSystemTools : : GetFilenameName ( copy . c_str ( ) ) . c_str ( ) ,
path . c_str ( ) ,
m_Makefile - > GetSourceExtensions ( ) ,
m_Makefile - > GetHeaderExtensions ( ) ) ;
}
2002-01-17 22:11:26 +03:00
else
2002-10-24 02:03:27 +04:00
{
file . SetName ( copy . c_str ( ) , m_Makefile - > GetCurrentDirectory ( ) ,
m_Makefile - > GetSourceExtensions ( ) ,
m_Makefile - > GetHeaderExtensions ( ) ) ;
}
2002-06-27 23:57:09 +04:00
}
m_Makefile - > AddSource ( file ) ;
if ( sourceListValue . size ( ) > 0 )
{
sourceListValue + = " ; " ;
}
sourceListValue + = copy ;
2001-01-05 19:41:20 +03:00
}
2002-01-17 22:11:26 +03:00
2002-06-27 23:57:09 +04:00
m_Makefile - > AddDefinition ( name . c_str ( ) , sourceListValue . c_str ( ) ) ;
2001-01-05 19:41:20 +03:00
return true ;
}