-#include "internal.h"
-#define BB_DECLARE_EXTERN
-#define bb_need_name_too_long
-#define bb_need_not_a_directory
-#include "messages.c"
-
-#include <stdio.h>
-#include <dirent.h>
-#include <errno.h>
-#include <sys/param.h> /* for PATH_MAX */
-
-static const char ln_usage[] =
- "ln [OPTION] TARGET... LINK_NAME|DIRECTORY\n\n"
- "Create a link named LINK_NAME or DIRECTORY to the specified TARGET\n\n"
- "Options:\n"
- "\t-s\tmake symbolic links instead of hard links\n"
-
- "\t-f\tremove existing destination files\n"
- "\t-n\tno dereference symlinks - treat like normal file\n";
-
-static int symlinkFlag = FALSE;
-static int removeoldFlag = FALSE;
-static int followLinks = TRUE;
-
-extern int ln_main(int argc, char **argv)
+/* BB_AUDIT SUSv3 compliant */
+/* BB_AUDIT GNU options missing: -d, -F, -i, and -v. */
+/* http://www.opengroup.org/onlinepubs/007904975/utilities/ln.html */
+
+//usage:#define ln_trivial_usage
+//usage: "[OPTIONS] TARGET... LINK|DIR"
+//usage:#define ln_full_usage "\n\n"
+//usage: "Create a link LINK or DIR/TARGET to the specified TARGET(s)\n"
+//usage: "\n -s Make symlinks instead of hardlinks"
+//usage: "\n -f Remove existing destinations"
+//usage: "\n -n Don't dereference symlinks - treat like normal file"
+//usage: "\n -b Make a backup of the target (if exists) before link operation"
+//usage: "\n -S suf Use suffix instead of ~ when making backup files"
+//usage: "\n -T 2nd arg must be a DIR"
+//usage: "\n -v Verbose"
+//usage:
+//usage:#define ln_example_usage
+//usage: "$ ln -s BusyBox /tmp/ls\n"
+//usage: "$ ls -l /tmp/ls\n"
+//usage: "lrwxrwxrwx 1 root root 7 Apr 12 18:39 ls -> BusyBox*\n"
+
+#include "libbb.h"
+
+/* This is a NOEXEC applet. Be very careful! */
+
+
+#define LN_SYMLINK (1 << 0)
+#define LN_FORCE (1 << 1)
+#define LN_NODEREFERENCE (1 << 2)
+#define LN_BACKUP (1 << 3)
+#define LN_SUFFIX (1 << 4)
+#define LN_VERBOSE (1 << 5)
+#define LN_LINKFILE (1 << 6)
+
+int ln_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
+int ln_main(int argc, char **argv)