---
Function {
    argument: None,
    arguments: FunctionArguments {
        arguments: [
            FunctionArgument {
                identifier: "openbsm",
                default: None,
            },
            FunctionArgument {
                identifier: "CF",
                default: None,
            },
            FunctionArgument {
                identifier: "pam",
                default: None,
            },
            FunctionArgument {
                identifier: "apple_sdk",
                default: None,
            },
            FunctionArgument {
                identifier: "Librpcsvc",
                default: None,
            },
            FunctionArgument {
                identifier: "libutil",
                default: None,
            },
            FunctionArgument {
                identifier: "lib",
                default: None,
            },
            FunctionArgument {
                identifier: "appleDerivation",
                default: None,
            },
            FunctionArgument {
                identifier: "stdenv",
                default: None,
            },
        ],
        ellipsis: false,
    },
    definition: FunctionApplication {
        function: Variable {
            identifier: "appleDerivation",
            position: (4, 1),
        },
        arguments: [
            Map {
                bindings: [
                    KeyValue(
                        AttributePath {
                            attributes: [
                                Raw {
                                    content: "buildInputs",
                                    position: (10, 3),
                                },
                            ],
                        },
                        List {
                            elements: [
                                Variable {
                                    identifier: "libutil",
                                    position: (10, 19),
                                },
                                Variable {
                                    identifier: "Librpcsvc",
                                    position: (10, 27),
                                },
                                PropertyAccess {
                                    expression: Variable {
                                        identifier: "apple_sdk",
                                        position: (10, 37),
                                    },
                                    attribute_path: AttributePath {
                                        attributes: [
                                            Raw {
                                                content: "frameworks",
                                                position: (10, 47),
                                            },
                                            Raw {
                                                content: "OpenDirectory",
                                                position: (10, 58),
                                            },
                                        ],
                                    },
                                    default: None,
                                },
                                Variable {
                                    identifier: "pam",
                                    position: (10, 72),
                                },
                                Variable {
                                    identifier: "CF",
                                    position: (10, 76),
                                },
                                PropertyAccess {
                                    expression: Variable {
                                        identifier: "apple_sdk",
                                        position: (11, 19),
                                    },
                                    attribute_path: AttributePath {
                                        attributes: [
                                            Raw {
                                                content: "frameworks",
                                                position: (11, 29),
                                            },
                                            Raw {
                                                content: "IOKit",
                                                position: (11, 40),
                                            },
                                        ],
                                    },
                                    default: None,
                                },
                                Variable {
                                    identifier: "openbsm",
                                    position: (11, 46),
                                },
                            ],
                        },
                    ),
                    KeyValue(
                        AttributePath {
                            attributes: [
                                Raw {
                                    content: "NIX_CFLAGS_COMPILE",
                                    position: (15, 3),
                                },
                            ],
                        },
                        BinaryOperation {
                            operator: Concatenation,
                            operands: [
                                List {
                                    elements: [
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DDAEMON_UID=1",
                                                    position: (15, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DDAEMON_GID=1",
                                                    position: (16, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DDEFAULT_AT_QUEUE='a'",
                                                    position: (17, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DDEFAULT_BATCH_QUEUE='b'",
                                                    position: (18, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DPERM_PATH=\"/usr/lib/cron/\"",
                                                    position: (19, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DOPEN_DIRECTORY",
                                                    position: (20, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DNO_DIRECT_RPC",
                                                    position: (21, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DAPPLE_GETCONF_UNDERSCORE",
                                                    position: (22, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DAPPLE_GETCONF_SPEC",
                                                    position: (23, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DUSE_PAM",
                                                    position: (24, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DUSE_BSM_AUDIT",
                                                    position: (25, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-D_PW_NAME_LEN=MAXLOGNAME",
                                                    position: (26, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-D_PW_YPTOKEN=\"__YP!\"",
                                                    position: (27, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DAHZV1=64 ",
                                                    position: (28, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DAU_SESSION_FLAG_HAS_TTY=0x4000",
                                                    position: (29, 27),
                                                },
                                            ],
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "-DAU_SESSION_FLAG_HAS_AUTHENTICATED=0x4000",
                                                    position: (30, 27),
                                                },
                                            ],
                                        },
                                    ],
                                },
                                FunctionApplication {
                                    function: PropertyAccess {
                                        expression: Variable {
                                            identifier: "lib",
                                            position: (31, 29),
                                        },
                                        attribute_path: AttributePath {
                                            attributes: [
                                                Raw {
                                                    content: "optional",
                                                    position: (31, 33),
                                                },
                                            ],
                                        },
                                        default: None,
                                    },
                                    arguments: [
                                        UnaryOperation {
                                            operator: Not,
                                            operand: PropertyAccess {
                                                expression: Variable {
                                                    identifier: "stdenv",
                                                    position: (31, 44),
                                                },
                                                attribute_path: AttributePath {
                                                    attributes: [
                                                        Raw {
                                                            content: "isLinux",
                                                            position: (31, 51),
                                                        },
                                                    ],
                                                },
                                                default: None,
                                            },
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: " -D__FreeBSD__ ",
                                                    position: (31, 61),
                                                },
                                            ],
                                        },
                                    ],
                                },
                            ],
                        },
                    ),
                    KeyValue(
                        AttributePath {
                            attributes: [
                                Raw {
                                    content: "patchPhase",
                                    position: (33, 3),
                                },
                            ],
                        },
                        BinaryOperation {
                            operator: Addition,
                            operands: [
                                String {
                                    parts: [
                                        Raw {
                                            content: "substituteInPlace login.tproj/login.c \\\n  --replace bsm/audit_session.h bsm/audit.h\nsubstituteInPlace login.tproj/login_audit.c \\\n  --replace bsm/audit_session.h bsm/audit.h\n",
                                            position: (34, 1),
                                        },
                                    ],
                                },
                                FunctionApplication {
                                    function: PropertyAccess {
                                        expression: Variable {
                                            identifier: "lib",
                                            position: (38, 8),
                                        },
                                        attribute_path: AttributePath {
                                            attributes: [
                                                Raw {
                                                    content: "optionalString",
                                                    position: (38, 12),
                                                },
                                            ],
                                        },
                                        default: None,
                                    },
                                    arguments: [
                                        PropertyAccess {
                                            expression: Variable {
                                                identifier: "stdenv",
                                                position: (38, 27),
                                            },
                                            attribute_path: AttributePath {
                                                attributes: [
                                                    Raw {
                                                        content: "isAarch64",
                                                        position: (38, 34),
                                                    },
                                                ],
                                            },
                                            default: None,
                                        },
                                        String {
                                            parts: [
                                                Raw {
                                                    content: "substituteInPlace sysctl.tproj/sysctl.c \\\n  --replace \"GPROF_STATE\" \"0\"\nsubstituteInPlace login.tproj/login.c \\\n  --replace \"defined(__arm__)\" \"defined(__arm__) || defined(__arm64__)\"\n",
                                                    position: (39, 1),
                                                },
                                            ],
                                        },
                                    ],
                                },
                            ],
                        },
                    ),
                    KeyValue(
                        AttributePath {
                            attributes: [
                                Raw {
                                    content: "buildPhase",
                                    position: (45, 3),
                                },
                            ],
                        },
                        String {
                            parts: [
                                Raw {
                                    content: "for dir in *.tproj; do\n  name=$(basename $dir)\n  name=",
                                    position: (46, 1),
                                },
                                Raw {
                                    content: "$",
                                    position: (48, 12),
                                },
                                Raw {
                                    content: "{name%.tproj}\n\n  CFLAGS=\"\"\n  case $name in\n       arch) CFLAGS=\"-framework CoreFoundation\";;\n       atrun) CFLAGS=\"-Iat.tproj\";;\n       chkpasswd)\n         CFLAGS=\"-framework OpenDirectory -framework CoreFoundation -lpam\";;\n       getconf)\n           for f in getconf.tproj/*.gperf; do\n               cfile=",
                                    position: (48, 15),
                                },
                                Raw {
                                    content: "$",
                                    position: (58, 26),
                                },
                                Raw {
                                    content: "{f%.gperf}.c\n               LC_ALL=C awk -f getconf.tproj/fake-gperf.awk $f > $cfile\n           done\n       ;;\n       iostat) CFLAGS=\"-framework IOKit -framework CoreFoundation\";;\n       login) CFLAGS=\"-lbsm -lpam\";;\n       nvram) CFLAGS=\"-framework CoreFoundation -framework IOKit\";;\n       sadc) CFLAGS=\"-framework IOKit -framework CoreFoundation\";;\n       sar) CFLAGS=\"-Isadc.tproj\";;\n  esac\n\n  echo \"Building $name\"\n\n  case $name in\n\n       # These are all broken currently.\n       arch) continue;;\n       chpass) continue;;\n       dirhelper) continue;;\n       dynamic_pager) continue;;\n       fs_usage) continue;;\n       latency) continue;;\n       pagesize) continue;;\n       passwd) continue;;\n       reboot) continue;;\n       sc_usage) continue;;\n       shutdown) continue;;\n       trace) continue;;\n\n       *) cc $dir/*.c -I",
                                    position: (58, 29),
                                },
                                Raw {
                                    content: "$",
                                    position: (87, 29),
                                },
                                Raw {
                                    content: "{dir} $CFLAGS -o $name ;;\n  esac\ndone\n",
                                    position: (87, 32),
                                },
                            ],
                        },
                    ),
                    KeyValue(
                        AttributePath {
                            attributes: [
                                Raw {
                                    content: "installPhase",
                                    position: (92, 3),
                                },
                            ],
                        },
                        String {
                            parts: [
                                Raw {
                                    content: "for dir in *.tproj; do\n  name=$(basename $dir)\n  name=",
                                    position: (93, 1),
                                },
                                Raw {
                                    content: "$",
                                    position: (95, 12),
                                },
                                Raw {
                                    content: "{name%.tproj}\n  [ -x $name ] && install -D $name $out/bin/$name\n  for n in 1 2 3 4 5 6 7 8 9; do\n    for f in $dir/*.$n; do\n      install -D $f $out/share/man/man$n/$(basename $f)\n    done\n  done\ndone\n",
                                    position: (95, 15),
                                },
                            ],
                        },
                    ),
                    KeyValue(
                        AttributePath {
                            attributes: [
                                Raw {
                                    content: "meta",
                                    position: (105, 3),
                                },
                            ],
                        },
                        Map {
                            bindings: [
                                KeyValue(
                                    AttributePath {
                                        attributes: [
                                            Raw {
                                                content: "platforms",
                                                position: (106, 5),
                                            },
                                        ],
                                    },
                                    PropertyAccess {
                                        expression: Variable {
                                            identifier: "lib",
                                            position: (106, 17),
                                        },
                                        attribute_path: AttributePath {
                                            attributes: [
                                                Raw {
                                                    content: "platforms",
                                                    position: (106, 21),
                                                },
                                                Raw {
                                                    content: "darwin",
                                                    position: (106, 31),
                                                },
                                            ],
                                        },
                                        default: None,
                                    },
                                ),
                                KeyValue(
                                    AttributePath {
                                        attributes: [
                                            Raw {
                                                content: "maintainers",
                                                position: (107, 5),
                                            },
                                        ],
                                    },
                                    With {
                                        expression: PropertyAccess {
                                            expression: Variable {
                                                identifier: "lib",
                                                position: (107, 24),
                                            },
                                            attribute_path: AttributePath {
                                                attributes: [
                                                    Raw {
                                                        content: "maintainers",
                                                        position: (107, 28),
                                                    },
                                                ],
                                            },
                                            default: None,
                                        },
                                        target: List {
                                            elements: [
                                                Variable {
                                                    identifier: "shlevy",
                                                    position: (107, 43),
                                                },
                                                Variable {
                                                    identifier: "matthewbauer",
                                                    position: (107, 50),
                                                },
                                            ],
                                        },
                                    },
                                ),
                            ],
                            recursive: false,
                        },
                    ),
                ],
                recursive: false,
            },
        ],
    },
}