recursively run the function

    Dependency *curr_dep = rule_eval->dependencies;
    while (curr_dep != NULL) {
        // evaluate dependencies
        if (curr_dep->rule->actions != NULL) {
            if (stat(rule_eval->target, &target_time) == -1){
                run_make(curr_dep->rule->target, rules, pflag);
            }
            else {
                // check times
                printf("FOUND FILE\n");
                if (stat(curr_dep->rule->target, &dep_time) == -1) {
                    perror("stat");
                    exit(1);
                }
                if (dep_time.st_mtim.tv_sec >= target_time.st_mtim.tv_sec) {
                    if (dep_time.st_mtim.tv_nsec > target_time.st_mtim.tv_nsec) {
                        run_make(curr_dep->rule->target, rules, pflag);
                    }

                }
            }
        }
        curr_dep = curr_dep->next_dep;
    }
    // execute actions
    pid_t ret = fork();
    if (ret < 0) {
        perror("fork");
        exit(1);
    }
    else if (ret == 0) {
        char *cmd = (rule_eval->actions->args)[0];
        int error = execvp(cmd, rule_eval->actions->args);
        if (error == -1) {
            exit(1);
        }
    }
    else {
        int status;
        wait(&status);
        if (WIFEXITED(status)) {
            exit(1);
        }
        return;
    }
