18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file common_option.h
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Declaration of entry point of pp tools, implementation file add common
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * options of pp tools and some miscelleaneous functions
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2003 OProfile authors
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef COMMON_OPTION_H
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define COMMON_OPTION_H
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <vector>
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <list>
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "arrange_profiles.h"
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "demangle_symbol.h"
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddnamespace options {
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	extern bool verbose;
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	extern double threshold;
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	extern std::string threshold_opt;
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	extern std::string command_options;
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	extern std::vector<std::string> image_path;
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	extern std::string root_path;
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	struct spec {
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		std::list<std::string> common;
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		std::list<std::string> first;
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		std::list<std::string> second;
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	};
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * prototype of a pp tool entry point. This entry point is called
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * by run_pp_tool
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddtypedef int (*pp_fct_run_t)(options::spec const & spec);
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param argc  command line number of argument
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param argv  command line argument pointer array
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param fct  function to run to start this pp tool
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Provide a common entry to all pp tools, parsing all options, handling
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * common options and providing the necessary try catch clause
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint run_pp_tool(int argc, char const * argv[], pp_fct_run_t fct);
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param option one of [smart,none,normal]
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * return the demangle_type of option or throw an exception if option
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * is not valid.
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodddemangle_type handle_demangle_option(std::string const & option);
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param mergespec  merge option
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param allow_lib  is merge)lib allowed in mergespec
648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param exclude_dependent user specified --exclude-dependent
658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * parse merge option and return a merge_option filled from it.
678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddmerge_option handle_merge_option(std::vector<std::string> const & mergespec,
708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd       bool allow_lib, bool exclude_dependent);
718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* !COMMON_OPTION_H */
73