Program Listing for File commandline_processing.h

Program Listing for File commandline_processing.h#

Return to documentation for file (src/util/commandlineProcessing/commandline_processing.h)

#ifndef ROSE_COMMANDLINE_UTILITY_H
#define ROSE_COMMANDLINE_UTILITY_H
//#include "rosedefs.h"
#include "rosedll.h"
#include <list>
#include <vector>
#include <string>
#include <stack>
#include <map>
#define Rose_STL_Container std::vector

//Rama (12/22/2006): changing the class to a namespace and removing the "static"ness of the "member" functions
//  therefore are unable to call other functions in the ROSE library. See also, Rose::CommandLine for higher-level functions.
namespace CommandlineProcessing
   {
          ROSE_UTIL_API Rose_STL_Container<std::string> generateArgListFromString ( std::string commandline );

       // std::string generateStringFromArgList( Rose_STL_Container<std::string> & argList);
          ROSE_UTIL_API std::string generateStringFromArgList( const Rose_STL_Container<std::string> & argList);

          ROSE_UTIL_API Rose_STL_Container<std::string> generateArgListFromArgcArgv ( int argc, const char* argv[] );

          inline Rose_STL_Container<std::string> generateArgListFromArgcArgv ( int argc, char* argv[] )
          {return generateArgListFromArgcArgv(argc, (const char**)argv);}

          ROSE_UTIL_API void generateArgcArgvFromList ( Rose_STL_Container<std::string> argList, int & argc, char** & argv );

          ROSE_UTIL_API Rose_STL_Container<std::string> generateOptionList (const Rose_STL_Container<std::string> & argList, std::string inputPrefix );

          ROSE_UTIL_API Rose_STL_Container<std::string> generateOptionListWithDeclaredParameters (const Rose_STL_Container<std::string> & argList, std::string inputPrefix );

          ROSE_UTIL_API Rose_STL_Container<std::string> generateOptionWithNameParameterList ( Rose_STL_Container<std::string> & argList, std::string inputPrefix, std::string newPrefix = "");

          extern Rose_STL_Container<std::string> extraCppSourceFileSuffixes;


          ROSE_UTIL_API bool isOption ( std::vector<std::string> & argv, std::string optionPrefix, std::string Option, bool removeOption );

          ROSE_UTIL_API bool isOptionWithParameter ( std::vector<std::string> & argv, std::string optionPrefix, std::string Option, int & optionParameter, bool removeOption );

          ROSE_UTIL_API bool isOptionWithParameter ( std::vector<std::string> & argv, std::string optionPrefix, std::string Option, float & optionParameter, bool removeOption );

          ROSE_DLL_API bool isOptionWithParameter ( std::vector<std::string> & argv, std::string optionPrefix, std::string Option, std::string & optionParameter, bool removeOption );

          ROSE_UTIL_API void addListToCommandLine ( std::vector<std::string> & argv , std::string prefix, Rose_STL_Container<std::string> argList );
          ROSE_UTIL_API void removeArgs ( std::vector<std::string> & argv, std::string prefix );
          ROSE_UTIL_API void removeArgsWithParameters ( std::vector<std::string> & argv, std::string prefix );
          ROSE_UTIL_API void removeAllFileNamesExcept ( std::vector<std::string> & argv, Rose_STL_Container<std::string> filenameList, std::string exceptFilename );

          ROSE_UTIL_API std::string generateStringFromArgList ( Rose_STL_Container<std::string> argList, bool skipInitialEntry, bool skipSourceFiles );

          ROSE_DLL_API Rose_STL_Container<std::string> generateSourceFilenames ( Rose_STL_Container<std::string> argList, bool binaryMode );

       // DQ and PC (6/1/2006): Added Peter's suggested fixes to support auto-documentation.
          ROSE_UTIL_API void addSourceFileSuffix ( const std::string &suffix );
          ROSE_UTIL_API void addCppSourceFileSuffix ( const std::string &suffix );

          ROSE_UTIL_API bool isSourceFilename ( std::string name );

          ROSE_UTIL_API bool isObjectFilename ( std::string name );
          ROSE_DLL_API bool isExecutableFilename ( std::string name );

       // DQ (8/20/2008): Added test that will allow bogus exececutable files (marked as .exe but not executable) to pass
          ROSE_DLL_API bool isValidFileWithExecutableFileSuffixes ( std::string name );

          ROSE_UTIL_API bool isCFileNameSuffix ( const std::string & suffix );

       // Liao (6/6/2008): Added support for UPC file suffix name
          ROSE_UTIL_API bool isUPCFileNameSuffix ( const std::string & suffix );

          ROSE_UTIL_API bool isCppFileNameSuffix ( const std::string & suffix );

       // DQ (8/7/2007): Added support for Fortran file suffix names.
          ROSE_UTIL_API bool isFortranFileNameSuffix ( const std::string & suffix );

       // DQ (5/18/2008): Support to marking when C preprocessing is required for
       // Fortran files, default is true for C and C++.
          ROSE_UTIL_API bool isFortranFileNameSuffixRequiringCPP ( const std::string & suffix );

       // DQ (11/17/2007): Added fortran mode specific suffix checking
          ROSE_UTIL_API bool isFortran77FileNameSuffix   ( const std::string & suffix );
          ROSE_UTIL_API bool isFortran90FileNameSuffix   ( const std::string & suffix );
          ROSE_UTIL_API bool isFortran95FileNameSuffix   ( const std::string & suffix );
          ROSE_UTIL_API bool isFortran2003FileNameSuffix ( const std::string & suffix );
          ROSE_UTIL_API bool isFortran2008FileNameSuffix ( const std::string & suffix );

       // DQ (1/23/2009): Added support for Co-Array Fortran file extension.
          ROSE_UTIL_API bool isCoArrayFortranFileNameSuffix ( const std::string & suffix );

       // TV (05/17/2010) Support for CUDA
          ROSE_UTIL_API bool isCudaFileNameSuffix ( const std::string & suffix );
       // TV (05/17/2010) Support for OpenCL
          ROSE_UTIL_API bool isOpenCLFileNameSuffix ( const std::string & suffix );

          ROSE_UTIL_API void initSourceFileSuffixList();
          static Rose_STL_Container<std::string> validSourceFileSuffixes;

          ROSE_UTIL_API void initObjectFileSuffixList();
          static Rose_STL_Container<std::string> validObjectFileSuffixes;

          ROSE_DLL_API void initExecutableFileSuffixList();
          static Rose_STL_Container<std::string> validExecutableFileSuffixes;

       // bool isOptionTakingFileName( std::string argument );
          ROSE_DLL_API bool isOptionTakingSecondParameter( std::string argument );
          ROSE_DLL_API bool isOptionTakingThirdParameter ( std::string argument );
   };

// DQ (4/5/2010): This are defined in sage_support.cpp
ROSE_DLL_API std::string
findRoseSupportPathFromSource(const std::string& sourceTreeLocation,
                              const std::string& installTreeLocation);

// DQ (4/5/2010): This are defined in sage_support.cpp
ROSE_DLL_API std::string
findRoseSupportPathFromBuild(const std::string& buildTreeLocation,
                             const std::string& installTreeLocation);

// DQ (4/5/2010): This are defined in sage_support.cpp
ROSE_DLL_API bool
roseInstallPrefix(std::string& result);

// endif associated with define ROSE_COMMANDLINE_UTILITY_H
#endif