#include <stdlib.h>
#include <sys/mount.h>
#include <unistd.h>
+#include <uuid/uuid.h>
#include <pakfire/build.h>
#include <pakfire/execute.h>
}
static int pakfire_build_package(Pakfire pakfire, struct pakfire_parser* makefile,
- const char* id, const char* buildroot, const char* namespace, const char* target) {
+ uuid_t* build_id, const char* buildroot, const char* namespace, const char* target) {
struct pakfire_repo* repo = NULL;
struct pakfire_package* pkg = NULL;
struct pakfire_packager* packager = NULL;
}
// Set build ID
- if (id)
- pakfire_package_set_build_id(pkg, id);
+ pakfire_package_set_build_id_from_uuid(pkg, build_id);
// Create a packager
r = pakfire_packager_create(&packager, pkg);
}
static int pakfire_build_packages(Pakfire pakfire, struct pakfire_parser* makefile,
- const char* id, const char* buildroot, const char* target) {
+ uuid_t* build_id, const char* buildroot, const char* target) {
DEBUG(pakfire, "Creating packages...");
int r = 1;
// Build packages in reverse order
for (int i = num_packages - 1; i >= 0; i--) {
- r = pakfire_build_package(pakfire, makefile, id, buildroot, packages[i], target);
+ r = pakfire_build_package(pakfire, makefile, build_id, buildroot, packages[i], target);
if (r)
goto ERROR;
}
}
static int pakfire_build_makefile(Pakfire pakfire, const char* path, const char* target,
- const char* id, int flags, pakfire_execute_logging_callback logging_callback, void* data) {
+ uuid_t* build_id, int flags,
+ pakfire_execute_logging_callback logging_callback, void* data) {
struct pakfire_parser* makefile = NULL;
char buildroot[PATH_MAX];
struct pakfire_parser_error* error = NULL;
goto ERROR;
// Create the packages
- r = pakfire_build_packages(pakfire, makefile, id, buildroot_rel, target);
+ r = pakfire_build_packages(pakfire, makefile, build_id, buildroot_rel, target);
if (r) {
ERROR(pakfire, "Could not create packages: %m\n");
goto ERROR;
pakfire_execute_logging_callback logging_callback, void* data) {
char makefiles[PATH_MAX];
char cwd[PATH_MAX];
- char* generated_id = NULL;
+ uuid_t build_id;
glob_t buffer;
int r = 1;
return 1;
}
+ // Try parsing the Build ID
+ if (id) {
+ r = uuid_parse(id, build_id);
+ if (r)
+ return r;
+
+ // Otherwise initialize the Build ID with something random
+ } else {
+ uuid_generate_random(build_id);
+ }
+
// The default target is the local repository path
if (!target) {
struct pakfire_repo* repo = pakfire_get_repo(pakfire, "@local");
}
}
- // If no build ID was passed, we generate a random one
- if (!id) {
- generated_id = pakfire_generate_uuid();
- if (!generated_id)
- goto ERROR;
-
- id = generated_id;
- }
-
const char* packages[] = {
path, NULL
};
// Iterate over all makefiles
for (unsigned int i = 0; i < buffer.gl_pathc; i++) {
- r = pakfire_build_makefile(pakfire, buffer.gl_pathv[i], target, id, flags,
+ r = pakfire_build_makefile(pakfire, buffer.gl_pathv[i], target, &build_id, flags,
logging_callback, data);
if (r) {
ERROR(pakfire, "Could not build %s: %m\n", buffer.gl_pathv[i]);
}
ERROR:
- if (generated_id)
- free(generated_id);
-
return r;
}