#include <tools/ccanlint/ccanlint.h>
#include <tools/tools.h>
-#include <ccan/talloc/talloc.h>
#include <ccan/str/str.h>
+#include <ccan/take/take.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
static char *obj_list(const struct manifest *m, enum compile_type ctype)
{
- char *list = talloc_strdup(m, "");
+ char *list = tal_strdup(m, "");
struct ccan_file *i;
/* Objects from all the C files. */
- list_for_each(&m->c_files, i, list)
- list = talloc_asprintf_append(list, "%s ",
- i->compiled[ctype]);
-
+ list_for_each(&m->c_files, i, list) {
+ list = tal_strcat(m, take(list), i->compiled[ctype]);
+ list = tal_strcat(m, take(list), " ");
+ }
return list;
}
-char *build_module(struct manifest *m, bool keep,
+char *build_module(struct manifest *m,
enum compile_type ctype, char **errstr)
{
- char *name = link_objects(m, m->basename, false, obj_list(m, ctype),
- errstr);
- if (name) {
- if (keep) {
- char *realname = talloc_asprintf(m, "%s.o", m->dir);
- assert(ctype == COMPILE_NORMAL);
- /* We leave this object file around, all built. */
- if (!move_file(name, realname))
- err(1, "Renaming %s to %s", name, realname);
- name = realname;
- }
- }
- return name;
+ return link_objects(m, m->basename, obj_list(m, ctype), errstr);
}
static void do_build(struct manifest *m,
- bool keep,
unsigned int *timeleft,
struct score *score)
{
}
m->compiled[COMPILE_NORMAL]
- = build_module(m, keep, COMPILE_NORMAL, &errstr);
+ = build_module(m, COMPILE_NORMAL, &errstr);
if (!m->compiled[COMPILE_NORMAL]) {
- score_file_error(score, NULL, 0, "%s", errstr);
+ score_error(score, m->modname,"%s", errstr);
return;
}