Modernize tix temporary files and directory creation.

This commit is contained in:
Jonas 'Sortie' Termansen 2015-09-30 14:22:59 +02:00
parent beaa824076
commit 9ccfdb9990
6 changed files with 40 additions and 46 deletions

View File

@ -42,11 +42,6 @@ SYSROOT=$(make_dir_path_absolute "$SYSROOT")
SORTIX_PORTS_DIR=$(make_dir_path_absolute "$SORTIX_PORTS_DIR")
SORTIX_REPOSITORY_DIR=$(make_dir_path_absolute "$SORTIX_REPOSITORY_DIR")
# Create a temporary directory in which out-of-directory builds will happen.
if [ -z "$BUILDTMP" ]; then
export BUILDTMP=$(mktemp -d)
fi
# Decide the optimization options with which the ports will be built.
if [ -z "${OPTLEVEL+x}" ]; then OPTLEVEL="-Os"; fi
if [ -z "${PORTS_OPTLEVEL+x}" ]; then PORTS_OPTLEVEL="$OPTLEVEL"; fi

View File

@ -23,11 +23,6 @@ fi
# Make paths absolute for later use.
SORTIX_PORTS_DIR=$(make_dir_path_absolute "$SORTIX_PORTS_DIR")
# Create a temporary directory in which out-of-directory builds will happen.
if [ -z "$BUILDTMP" ]; then
export BUILDTMP=$(mktemp -d)
fi
# Detect all packages.
get_all_packages() {
for PACKAGE in $(ls "$SORTIX_PORTS_DIR"); do

View File

@ -74,7 +74,7 @@ int main(int argc, char* argv[])
char* input_tarball_path = NULL;
char* output_directory = strdup(".");
char* output = NULL;
char* tmp = strdup(getenv_def("TMP", "/tmp"));
char* tmp = strdup(getenv_def("TMPDIR", "/tmp"));
const char* argv0 = argv[0];
for ( int i = 0; i < argc; i++ )
@ -155,9 +155,9 @@ int main(int argc, char* argv[])
if ( !output )
output = print_string("%s/%s.porttix.tar.xz", output_directory, package_name);
char* tmp_root = print_string("%s/tmppid.%ju", tmp, (uintmax_t) getpid());
if ( mkdir_p(tmp_root, 0755) != 0 )
error(1, errno, "mkdir: `%s'", tmp_root);
char* tmp_root = print_string("%s/porttix.XXXXXX", tmp);
if ( !mkdtemp(tmp_root) )
error(1, errno, "mkdtemp: `%s'", tmp_root);
on_exit(cleanup_file_or_directory, tmp_root);

View File

@ -68,7 +68,7 @@ int main(int argc, char* argv[])
{
char* output_directory = strdup(".");
char* output = NULL;
char* tmp = strdup(getenv_def("TMP", "/tmp"));
char* tmp = strdup(getenv_def("TMPDIR", "/tmp"));
const char* argv0 = argv[0];
for ( int i = 0; i < argc; i++ )
@ -120,9 +120,9 @@ int main(int argc, char* argv[])
const char* porttix_path = argv[1];
char* tmp_in_root = print_string("%s/tmppid.%ju.in", tmp, (uintmax_t) getpid());
if ( mkdir_p(tmp_in_root, 0755) != 0 )
error(1, errno, "mkdir: `%s'", tmp_in_root);
char* tmp_in_root = print_string("%s/srctixin.XXXXXX", tmp);
if ( !mkdtemp(tmp_in_root) )
error(1, errno, "mkdtemp: `%s'", tmp_in_root);
on_exit(cleanup_file_or_directory, tmp_in_root);
if ( fork_and_wait_or_death() )
@ -150,9 +150,9 @@ int main(int argc, char* argv[])
error(1, errno, "`%s'", porttixinfo_path);
}
char* tmp_out_root = print_string("%s/tmppid.%ju.out", tmp, (uintmax_t) getpid());
if ( mkdir_p(tmp_out_root, 0755) != 0 )
error(1, errno, "mkdir: `%s'", tmp_out_root);
char* tmp_out_root = print_string("%s/srctixout.XXXXXX", tmp);
if ( !mkdtemp(tmp_out_root) )
error(1, errno, "mkdtemp: `%s'", tmp_out_root);
on_exit(cleanup_file_or_directory, tmp_out_root);
char* package_name = NULL;

View File

@ -239,9 +239,9 @@ void emit_compiler_sysroot_cross_wrapper(metainfo_t* minfo,
void emit_pkg_config_wrapper(metainfo_t* minfo)
{
char* bindir = print_string("%s/tmppid.%ju.bin", minfo->tmp, (uintmax_t) getpid());
if ( mkdir_p(bindir, 0755) != 0 )
error(1, errno, "mkdir: `%s'", bindir);
char* bindir = print_string("%s/bin.XXXXXX", minfo->tmp);
if ( !mkdtemp(bindir) )
error(1, errno, "mkdtemp: `%s'", bindir);
on_exit(cleanup_file_or_directory, strdup(bindir));
@ -582,10 +582,10 @@ void BuildPackage(metainfo_t* minfo)
bool use_build_dir = parse_boolean(use_build_dir_var);
if ( use_build_dir )
{
minfo->build_dir = print_string("%s/tmppid.%ju", minfo->tmp,
(uintmax_t) getpid());
if ( mkdir_p(minfo->build_dir, 0755) != 0 )
error(1, errno, "mkdir: `%s'", minfo->build_dir);
minfo->build_dir = print_string("%s/build.XXXXXX", minfo->tmp);
if ( !mkdtemp(minfo->build_dir) )
error(1, errno, "mkdtemp: `%s'", minfo->build_dir);
on_exit(cleanup_file_or_directory, strdup(minfo->build_dir));
}
else
minfo->build_dir = strdup(minfo->package_dir);
@ -623,18 +623,14 @@ void BuildPackage(metainfo_t* minfo)
if ( SHOULD_DO_BUILD_STEP(BUILD_STEP_BUILD, minfo) )
Make(minfo, build_target, NULL, true, subdir);
char* tardir_rel = print_string("%s/%s", minfo->tmp, "tmp-tixbuild");
char* destdir_rel = print_string("%s/%s", minfo->tmp, "tmp-tixbuild/data");
char* tixdir_rel = print_string("%s/%s", minfo->tmp, "tmp-tixbuild/tix");
char* tixinfo_rel = print_string("%s/%s", minfo->tmp, "tmp-tixbuild/tix/tixinfo");
char* tardir_rel = print_string("%s/%s", minfo->tmp, "tix.XXXXXX");
if ( !mkdtemp(tardir_rel) )
error(1, errno, "mkdtemp: `%s'", tardir_rel);
on_exit(cleanup_file_or_directory, strdup(tardir_rel));
while ( mkdir(tardir_rel, 0755) != 0 )
{
if ( errno != EEXIST )
error(1, errno, "mkdir: `%s'", tardir_rel);
if ( rmdir(tardir_rel) != 0 )
error(1, errno, "rmdir: `%s'", tardir_rel);
}
char* destdir_rel = print_string("%s/%s", tardir_rel, "data");
char* tixdir_rel = print_string("%s/%s", tardir_rel, "tix");
char* tixinfo_rel = print_string("%s/%s", tardir_rel, "tix/tixinfo");
if ( mkdir(destdir_rel, 0755) != 0 )
error(1, errno, "mkdir: `%s'", destdir_rel);
@ -734,7 +730,7 @@ void BuildPackage(metainfo_t* minfo)
unlink(tixinfo_rel);
rmdir(destdir_rel);
rmdir(tixdir_rel);
rmdir(tardir_rel);
//rmdir(tardir_rel); // Keep around to avoid on_exit handler race.
free(tardir_rel);
free(destdir_rel);
@ -822,7 +818,7 @@ int main(int argc, char* argv[])
metainfo_t minfo;
memset(&minfo, 0, sizeof(minfo));
minfo.build = NULL;
minfo.destination = NULL;
minfo.destination = strdup(".");
minfo.host = NULL;
char* generation_string = strdup(DEFAULT_GENERATION);
minfo.makeflags = strdup_null(getenv_def("MAKEFLAGS", NULL));
@ -832,7 +828,7 @@ int main(int argc, char* argv[])
minfo.sysroot = NULL;
minfo.target = NULL;
minfo.tar = strdup("tar");
minfo.tmp = strdup(getenv_def("BUILDTMP", "."));
minfo.tmp = strdup(getenv_def("TMPDIR", "/tmp"));
char* start_step_string = strdup("start");
char* end_step_string = strdup("end");

View File

@ -776,20 +776,28 @@ void cleanup_file_or_directory(int, void* path_ptr)
{
if ( original_pid != getpid() )
return;
const char* path = (const char*) path_ptr;
if ( fork_and_wait_or_death(false) )
pid_t pid = fork();
if ( pid < 0 )
{
error(0, errno, "fork");
return;
}
if ( pid == 0 )
{
const char* cmd_argv[] =
{
"rm",
"-rf",
"--",
path,
(const char*) path_ptr,
NULL,
};
execvp(cmd_argv[0], (char* const*) cmd_argv);
error(127, errno, "%s", cmd_argv[0]);
error(0, errno, "%s", cmd_argv[0]);
_exit(127);
}
int code;
waitpid(pid, &code, 0);
}
mode_t get_umask_value()