Em Tue, Dec 15, 2015 at 09:39:38AM -0600, Josh Poimboeuf escreveu:
> For the files that will be moved to the subcmd library, remove all their
> perf-specific includes and duplicate any needed functionality.

Breaks rhel6.7 building:

>  #include "run-command.h"
>  #include "sigchain.h"
>  #include "subcmd-config.h"
> diff --git a/tools/perf/util/parse-options.c b/tools/perf/util/parse-options.c
> index c1da2a5..f424027 100644
> --- a/tools/perf/util/parse-options.c
> +++ b/tools/perf/util/parse-options.c
> @@ -1,33 +1,47 @@
> -#include "util.h"
> +#include <linux/compiler.h>
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <stdint.h>
> +#include <string.h>
> +#include <ctype.h>
>  #include "subcmd-util.h"
>  #include "parse-options.h"
> -#include "cache.h"
> -#include "header.h"
>  #include "subcmd-config.h"
> -#include <linux/string.h>
> +#include "pager.h"
>  
>  #define OPT_SHORT 1
>  #define OPT_UNSET 2
>  
> +typedef uint64_t u64;
> +


[acme@sandy linux]$ cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 6.7 (Santiago)

  CC       /tmp/build/perf/parse-options.o
parse-options.c:15: error: redefinition of typedef ‘u64’
/home/acme/git/linux/tools/include/linux/types.h:28: note: previous
declaration of ‘u64’ was here
mv: cannot stat `/tmp/build/perf/.parse-options.o.tmp': No such file or
directory
make[3]: *** [/tmp/build/perf/parse-options.o] Error 1
make[2]: *** [/tmp/build/perf/libsubcmd-in.o] Error 2
make[1]: *** [/tmp/build/perf/libsubcmd.a] Error 2
make[1]: *** Waiting for unfinished jobs....
  MKDIR    /tmp/build/perf/util/



>  char *error_buf;
>  
>  static int opterror(const struct option *opt, const char *reason, int flags)
>  {
>       if (flags & OPT_SHORT)
> -             return error("switch `%c' %s", opt->short_name, reason);
> -     if (flags & OPT_UNSET)
> -             return error("option `no-%s' %s", opt->long_name, reason);
> -     return error("option `%s' %s", opt->long_name, reason);
> +             fprintf(stderr, " Error: switch `%c' %s", opt->short_name, 
> reason);
> +     else if (flags & OPT_UNSET)
> +             fprintf(stderr, " Error: option `no-%s' %s", opt->long_name, 
> reason);
> +     else
> +             fprintf(stderr, " Error: option `%s' %s", opt->long_name, 
> reason);
> +
> +     return -1;
> +}
> +
> +static const char *skip_prefix(const char *str, const char *prefix)
> +{
> +     size_t len = strlen(prefix);
> +     return strncmp(str, prefix, len) ? NULL : str + len;
>  }
>  
>  static void optwarning(const struct option *opt, const char *reason, int 
> flags)
>  {
>       if (flags & OPT_SHORT)
> -             warning("switch `%c' %s", opt->short_name, reason);
> +             fprintf(stderr, " Warning: switch `%c' %s", opt->short_name, 
> reason);
>       else if (flags & OPT_UNSET)
> -             warning("option `no-%s' %s", opt->long_name, reason);
> +             fprintf(stderr, " Warning: option `no-%s' %s", opt->long_name, 
> reason);
>       else
> -             warning("option `%s' %s", opt->long_name, reason);
> +             fprintf(stderr, " Warning: option `%s' %s", opt->long_name, 
> reason);
>  }
>  
>  static int get_arg(struct parse_opt_ctx_t *p, const struct option *opt,
> @@ -71,11 +85,11 @@ static int get_value(struct parse_opt_ctx_t *p,
>  
>                       if (((flags & OPT_SHORT) && p->excl_opt->short_name) ||
>                           p->excl_opt->long_name == NULL) {
> -                             scnprintf(msg, sizeof(msg), "cannot be used 
> with switch `%c'",
> -                                       p->excl_opt->short_name);
> +                             snprintf(msg, sizeof(msg), "cannot be used with 
> switch `%c'",
> +                                      p->excl_opt->short_name);
>                       } else {
> -                             scnprintf(msg, sizeof(msg), "cannot be used 
> with %s",
> -                                       p->excl_opt->long_name);
> +                             snprintf(msg, sizeof(msg), "cannot be used with 
> %s",
> +                                      p->excl_opt->long_name);
>                       }
>                       opterror(opt, msg, flags);
>                       return -3;
> @@ -401,14 +415,16 @@ match:
>               return get_value(p, options, flags);
>       }
>  
> -     if (ambiguous_option)
> -             return error("Ambiguous option: %s "
> -                     "(could be --%s%s or --%s%s)",
> -                     arg,
> -                     (ambiguous_flags & OPT_UNSET) ?  "no-" : "",
> -                     ambiguous_option->long_name,
> -                     (abbrev_flags & OPT_UNSET) ?  "no-" : "",
> -                     abbrev_option->long_name);
> +     if (ambiguous_option) {
> +              fprintf(stderr,
> +                      " Error: Ambiguous option: %s (could be --%s%s or 
> --%s%s)",
> +                      arg,
> +                      (ambiguous_flags & OPT_UNSET) ?  "no-" : "",
> +                      ambiguous_option->long_name,
> +                      (abbrev_flags & OPT_UNSET) ?  "no-" : "",
> +                      abbrev_option->long_name);
> +              return -1;
> +     }
>       if (abbrev_option)
>               return get_value(p, abbrev_option, abbrev_flags);
>       return -2;
> @@ -420,7 +436,7 @@ static void check_typos(const char *arg, const struct 
> option *options)
>               return;
>  
>       if (!prefixcmp(arg, "no-")) {
> -             error ("did you mean `--%s` (with two dashes ?)", arg);
> +             fprintf(stderr, " Error: did you mean `--%s` (with two dashes 
> ?)", arg);
>               exit(129);
>       }
>  
> @@ -428,7 +444,7 @@ static void check_typos(const char *arg, const struct 
> option *options)
>               if (!options->long_name)
>                       continue;
>               if (!prefixcmp(options->long_name, arg)) {
> -                     error ("did you mean `--%s` (with two dashes ?)", arg);
> +                     fprintf(stderr, " Error: did you mean `--%s` (with two 
> dashes ?)", arg);
>                       exit(129);
>               }
>       }
> @@ -746,16 +762,18 @@ static int option__cmp(const void *va, const void *vb)
>  
>  static struct option *options__order(const struct option *opts)
>  {
> -     int nr_opts = 0;
> +     int nr_opts = 0, len;
>       const struct option *o = opts;
>       struct option *ordered;
>  
>       for (o = opts; o->type != OPTION_END; o++)
>               ++nr_opts;
>  
> -     ordered = memdup(opts, sizeof(*o) * (nr_opts + 1));
> -     if (ordered == NULL)
> +     len = sizeof(*o) * (nr_opts + 1);
> +     ordered = malloc(len);
> +     if (!ordered)
>               goto out;
> +     memcpy(ordered, opts, len);
>  
>       qsort(ordered, nr_opts, sizeof(*o), option__cmp);
>  out:
> diff --git a/tools/perf/util/parse-options.h b/tools/perf/util/parse-options.h
> index d1544069..dec893f 100644
> --- a/tools/perf/util/parse-options.h
> +++ b/tools/perf/util/parse-options.h
> @@ -1,8 +1,8 @@
>  #ifndef __PERF_PARSE_OPTIONS_H
>  #define __PERF_PARSE_OPTIONS_H
>  
> -#include <linux/kernel.h>
>  #include <stdbool.h>
> +#include <stdint.h>
>  
>  enum parse_opt_type {
>       /* special types */
> diff --git a/tools/perf/util/run-command.c b/tools/perf/util/run-command.c
> index 910c0f6..fed37d6 100644
> --- a/tools/perf/util/run-command.c
> +++ b/tools/perf/util/run-command.c
> @@ -1,7 +1,15 @@
> -#include "cache.h"
> +#include <unistd.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +#include <fcntl.h>
> +#include <string.h>
> +#include <errno.h>
> +#include <sys/wait.h>
> +#include "subcmd-util.h"
>  #include "run-command.h"
>  #include "exec_cmd.h"
> -#include "debug.h"
> +
> +#define STRERR_BUFSIZE 128
>  
>  static inline void close_pair(int fd[2])
>  {
> @@ -164,8 +172,8 @@ static int wait_or_whine(pid_t pid)
>               if (waiting < 0) {
>                       if (errno == EINTR)
>                               continue;
> -                     error("waitpid failed (%s)",
> -                           strerror_r(errno, sbuf, sizeof(sbuf)));
> +                     fprintf(stderr, " Error: waitpid failed (%s)",
> +                             strerror_r(errno, sbuf, sizeof(sbuf)));
>                       return -ERR_RUN_COMMAND_WAITPID;
>               }
>               if (waiting != pid)
> diff --git a/tools/perf/util/run-command.h b/tools/perf/util/run-command.h
> index cf7d655..4a55393 100644
> --- a/tools/perf/util/run-command.h
> +++ b/tools/perf/util/run-command.h
> @@ -1,6 +1,8 @@
>  #ifndef __PERF_RUN_COMMAND_H
>  #define __PERF_RUN_COMMAND_H
>  
> +#include <unistd.h>
> +
>  enum {
>       ERR_RUN_COMMAND_FORK = 10000,
>       ERR_RUN_COMMAND_EXEC,
> diff --git a/tools/perf/util/sigchain.c b/tools/perf/util/sigchain.c
> index ba785e9..3537c34 100644
> --- a/tools/perf/util/sigchain.c
> +++ b/tools/perf/util/sigchain.c
> @@ -1,5 +1,6 @@
> +#include <signal.h>
> +#include "subcmd-util.h"
>  #include "sigchain.h"
> -#include "cache.h"
>  
>  #define SIGCHAIN_MAX_SIGNALS 32
>  
> diff --git a/tools/perf/util/subcmd-util.h b/tools/perf/util/subcmd-util.h
> index 98fb9f9..321aeb1 100644
> --- a/tools/perf/util/subcmd-util.h
> +++ b/tools/perf/util/subcmd-util.h
> @@ -1,8 +1,66 @@
>  #ifndef __PERF_SUBCMD_UTIL_H
>  #define __PERF_SUBCMD_UTIL_H
>  
> +#include <stdarg.h>
> +#include <stdlib.h>
>  #include <stdio.h>
>  
> +#define NORETURN __attribute__((__noreturn__))
> +
> +static inline void report(const char *prefix, const char *err, va_list 
> params)
> +{
> +     char msg[1024];
> +     vsnprintf(msg, sizeof(msg), err, params);
> +     fprintf(stderr, " %s%s\n", prefix, msg);
> +}
> +
> +static NORETURN inline void die(const char *err, ...)
> +{
> +     va_list params;
> +
> +     va_start(params, err);
> +     report(" Fatal: ", err, params);
> +     exit(128);
> +     va_end(params);
> +}
> +
> +#define zfree(ptr) ({ free(*ptr); *ptr = NULL; })
> +
> +#define alloc_nr(x) (((x)+16)*3/2)
> +
> +/*
> + * Realloc the buffer pointed at by variable 'x' so that it can hold
> + * at least 'nr' entries; the number of entries currently allocated
> + * is 'alloc', using the standard growing factor alloc_nr() macro.
> + *
> + * DO NOT USE any expression with side-effect for 'x' or 'alloc'.
> + */
> +#define ALLOC_GROW(x, nr, alloc) \
> +     do { \
> +             if ((nr) > alloc) { \
> +                     if (alloc_nr(alloc) < (nr)) \
> +                             alloc = (nr); \
> +                     else \
> +                             alloc = alloc_nr(alloc); \
> +                     x = xrealloc((x), alloc * sizeof(*(x))); \
> +             } \
> +     } while(0)
> +
> +static inline void *xrealloc(void *ptr, size_t size)
> +{
> +     void *ret = realloc(ptr, size);
> +     if (!ret && !size)
> +             ret = realloc(ptr, 1);
> +     if (!ret) {
> +             ret = realloc(ptr, size);
> +             if (!ret && !size)
> +                     ret = realloc(ptr, 1);
> +             if (!ret)
> +                     die("Out of memory, realloc failed");
> +     }
> +     return ret;
> +}
> +
>  #define astrcatf(out, fmt, ...)                                              
> \
>  ({                                                                   \
>       char *tmp = *(out);                                             \
> @@ -21,4 +79,13 @@ static inline void astrcat(char **out, const char *add)
>       free(tmp);
>  }
>  
> +static inline int prefixcmp(const char *str, const char *prefix)
> +{
> +     for (; ; str++, prefix++)
> +             if (!*prefix)
> +                     return 0;
> +             else if (*str != *prefix)
> +                     return (unsigned char)*prefix - (unsigned char)*str;
> +}
> +
>  #endif /* __PERF_SUBCMD_UTIL_H */
> diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h
> index 150858f..4b519c5 100644
> --- a/tools/perf/util/util.h
> +++ b/tools/perf/util/util.h
> @@ -151,12 +151,6 @@ extern void set_warning_routine(void (*routine)(const 
> char *err, va_list params)
>  extern int prefixcmp(const char *str, const char *prefix);
>  extern void set_buildid_dir(const char *dir);
>  
> -static inline const char *skip_prefix(const char *str, const char *prefix)
> -{
> -     size_t len = strlen(prefix);
> -     return strncmp(str, prefix, len) ? NULL : str + len;
> -}
> -
>  #ifdef __GLIBC_PREREQ
>  #if __GLIBC_PREREQ(2, 1)
>  #define HAVE_STRCHRNUL
> @@ -187,14 +181,6 @@ static inline void *zalloc(size_t size)
>  
>  #define zfree(ptr) ({ free(*ptr); *ptr = NULL; })
>  
> -static inline int has_extension(const char *filename, const char *ext)
> -{
> -     size_t len = strlen(filename);
> -     size_t extlen = strlen(ext);
> -
> -     return len > extlen && !memcmp(filename + len - extlen, ext, extlen);
> -}
> -
>  /* Sane ctype - no locale, and works with signed chars */
>  #undef isascii
>  #undef isspace
> -- 
> 2.4.3
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to