-# define APPLET(a,b,c) extern int a##_main(int argc, char **argv);
-# define APPLET_NOUSAGE(a,b,c,d) extern int b##_main(int argc, char **argv);
-# define APPLET_ODDNAME(a,b,c,d,e) extern int b##_main(int argc, char **argv);
-#elif defined(MAKE_USAGE)
-# ifdef CONFIG_FEATURE_VERBOSE_USAGE
-# define APPLET(a,b,c) a##_trivial_usage "\n\n" a##_full_usage "\0"
-# define APPLET_NOUSAGE(a,b,c,d) "\b\0"
-# define APPLET_ODDNAME(a,b,c,d,e) e##_trivial_usage "\n\n" e##_full_usage "\0"
-# else
-# define APPLET(a,b,c) a##_trivial_usage "\0"
-# define APPLET_NOUSAGE(a,b,c,d) "\b\0"
-# define APPLET_ODDNAME(a,b,c,d,e) e##_trivial_usage "\0"
-# endif
+# define APPLET(name,l,s) int name##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+# define APPLET_NOUSAGE(name,main,l,s) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+# define APPLET_ODDNAME(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+# define APPLET_NOEXEC(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+# define APPLET_NOFORK(name,main,l,s,name2) int main##_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+
+#elif defined(NAME_MAIN_CNAME)
+# define APPLET(name,l,s) name name##_main name
+# define APPLET_NOUSAGE(name,main,l,s) name main##_main name
+# define APPLET_ODDNAME(name,main,l,s,name2) name main##_main name2
+# define APPLET_NOEXEC(name,main,l,s,name2) name main##_main name2
+# define APPLET_NOFORK(name,main,l,s,name2) name main##_main name2
+
+#elif defined(MAKE_USAGE) && ENABLE_FEATURE_VERBOSE_USAGE
+# define APPLET(name,l,s) name##_trivial_usage "\n\n" name##_full_usage "\0"
+# define APPLET_NOUSAGE(name,main,l,s) "\b\0"
+# define APPLET_ODDNAME(name,main,l,s,name2) name2##_trivial_usage "\n\n" name2##_full_usage "\0"
+# define APPLET_NOEXEC(name,main,l,s,name2) name2##_trivial_usage "\n\n" name2##_full_usage "\0"
+# define APPLET_NOFORK(name,main,l,s,name2) name2##_trivial_usage "\n\n" name2##_full_usage "\0"
+
+#elif defined(MAKE_USAGE) && !ENABLE_FEATURE_VERBOSE_USAGE
+# define APPLET(name,l,s) name##_trivial_usage "\0"
+# define APPLET_NOUSAGE(name,main,l,s) "\b\0"
+# define APPLET_ODDNAME(name,main,l,s,name2) name2##_trivial_usage "\0"
+# define APPLET_NOEXEC(name,main,l,s,name2) name2##_trivial_usage "\0"
+# define APPLET_NOFORK(name,main,l,s,name2) name2##_trivial_usage "\0"
+