xref: /aosp_15_r20/external/toybox/scripts/install.c (revision cf5a6c84e2b8763fc1a7db14496fd4742913b199)
1 /* Wrapper to make installation easier with cross-compiling.
2  *
3  * Copyright 2006 Rob Landley <[email protected]>
4  */
5 
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include <unistd.h>
10 #include "generated/config.h"
11 #include "lib/toyflags.h"
12 
13 #define NEWTOY(name, opts, flags) {#name, flags},
14 #define OLDTOY(name, oldname, flags) {#name, flags},
15 
16 // Populate toy_list[].
17 
18 struct {char *name; int flags;} toy_list[] = {
19 #include "generated/newtoys.h"
20 };
21 
22 #undef NEWTOY
23 #undef OLDTOY
24 #define NEWTOY(name,opt,flags) HELP_##name "\0"
25 #if CFG_TOYBOX
26 #define OLDTOY(name,oldname,flags) "\xff" #oldname "\0"
27 #else
28 #define OLDTOY(name, oldname, flags) HELP_##oldname "\0"
29 #endif
30 
31 #include "generated/help.h"
32 static char help_data[] =
33 #include "generated/newtoys.h"
34 ;
35 
main(int argc,char * argv[])36 int main(int argc, char *argv[])
37 {
38   static char *toy_paths[]={"usr/","bin/","sbin/",0};
39   int i, len = 0;
40 
41   if (argc>1 && !strcmp(argv[1], "--help"))
42     exit(sizeof(help_data)!=write(1, help_data, sizeof(help_data)));
43 
44   // Output list of applets.
45   for (i=1; i<sizeof(toy_list)/sizeof(*toy_list); i++) {
46     int fl = toy_list[i].flags;
47     if (fl & TOYMASK_LOCATION) {
48       if (argc>1) {
49         int j;
50         for (j=0; toy_paths[j]; j++)
51           if (fl & (1<<j)) len += printf("%s", toy_paths[j]);
52       }
53       len += printf("%s\n",toy_list[i].name);
54     }
55   }
56   return 0;
57 }
58