Add encapreppart functions to AP section.
[shishi.git] / acinclude.m4
blob33efc780ae8ab3077a2b363ecb2bd3a18599efee
1 # Try to execute a main program, and if it fails, try adding some
2 # -R flag.
3 # LSH_RPATH_FIX
4 AC_DEFUN([LSH_RPATH_FIX],
5 [if test $cross_compiling = no -a "x$RPATHFLAG" != x ; then
6   ac_success=no
7   AC_TRY_RUN([int main(int argc, char **argv) { return 0; }],
8     ac_success=yes, ac_success=no, :)
9   
10   if test $ac_success = no ; then
11     AC_MSG_CHECKING([Running simple test program failed. Trying -R flags])
12 dnl echo RPATH_CANDIDATE_DIRS = $RPATH_CANDIDATE_DIRS
13     ac_remaining_dirs=''
14     ac_rpath_save_LDFLAGS="$LDFLAGS"
15     for d in $RPATH_CANDIDATE_DIRS ; do
16       if test $ac_success = yes ; then
17         ac_remaining_dirs="$ac_remaining_dirs $d"
18       else
19         LDFLAGS="$RPATHFLAG$d $LDFLAGS"
20 dnl echo LDFLAGS = $LDFLAGS
21         AC_TRY_RUN([int main(int argc, char **argv) { return 0; }],
22           [ac_success=yes
23           ac_rpath_save_LDFLAGS="$LDFLAGS"
24           AC_MSG_RESULT([adding $RPATHFLAG$d])
25           ],
26           [ac_remaining_dirs="$ac_remaining_dirs $d"], :)
27         LDFLAGS="$ac_rpath_save_LDFLAGS"
28       fi
29     done
30     RPATH_CANDIDATE_DIRS=$ac_remaining_dirs
31   fi
32   if test $ac_success = no ; then
33     AC_MSG_RESULT(failed)
34   fi
38 # AC_LIB_ARGP(ACTION-IF-OK, ACTION-IF-BAD)
39 AC_DEFUN([AC_LIB_ARGP],
40 [ ac_argp_save_LIBS="$LIBS"
41   ac_argp_save_LDFLAGS="$LDFLAGS"
42   ac_argp_ok=no
43   # First check if we can link with argp.
44   AC_SEARCH_LIBS(argp_parse, argp,
45   [ LSH_RPATH_FIX
46     AC_CACHE_CHECK([for working argp],
47       lsh_cv_lib_argp_works,
48       [ AC_TRY_RUN(
49 [#include <argp.h>
50 #include <stdlib.h>
52 static const struct argp_option
53 options[] =
55   { NULL, 0, NULL, 0, NULL, 0 }
58 struct child_state
60   int n;
63 static error_t
64 child_parser(int key, char *arg, struct argp_state *state)
66   struct child_state *input = (struct child_state *) state->input;
67   
68   switch(key)
69     {
70     default:
71       return ARGP_ERR_UNKNOWN;
72     case ARGP_KEY_END:
73       if (!input->n)
74         input->n = 1;
75       break;
76     }
77   return 0;
80 const struct argp child_argp =
82   options,
83   child_parser,
84   NULL, NULL, NULL, NULL, NULL
87 struct main_state
89   struct child_state child;
90   int m;
93 static error_t
94 main_parser(int key, char *arg, struct argp_state *state)
96   struct main_state *input = (struct main_state *) state->input;
98   switch(key)
99     {
100     default:
101       return ARGP_ERR_UNKNOWN;
102     case ARGP_KEY_INIT:
103       state->child_inputs[0] = &input->child;
104       break;
105     case ARGP_KEY_END:
106       if (!input->m)
107         input->m = input->child.n;
108       
109       break;
110     }
111   return 0;
114 static const struct argp_child
115 main_children[] =
117   { &child_argp, 0, "", 0 },
118   { NULL, 0, NULL, 0}
121 static const struct argp
122 main_argp =
123 { options, main_parser, 
124   NULL,
125   NULL,
126   main_children,
127   NULL, NULL
130 int main(int argc, char **argv)
132   struct main_state input = { { 0 }, 0 };
133   char *v[2] = { "foo", NULL };
135   argp_parse(&main_argp, 1, v, 0, NULL, &input);
137   if ( (input.m == 1) && (input.child.n == 1) )
138     return 0;
139   else
140     return 1;
142 ], lsh_cv_lib_argp_works=yes,
143    lsh_cv_lib_argp_works=no,
144    lsh_cv_lib_argp_works=no)])
146   if test x$lsh_cv_lib_argp_works = xyes ; then
147     ac_argp_ok=yes
148   else
149     # Reset link flags
150     LIBS="$ac_argp_save_LIBS"
151     LDFLAGS="$ac_argp_save_LDFLAGS"
152   fi])
154   if test x$ac_argp_ok = xyes ; then
155     ifelse([$1],, true, [$1])
156   else
157     ifelse([$2],, true, [$2])
158   fi