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