コード例 #1
0
ファイル: butch.c プロジェクト: yasar11732/butch
stringptr* make_config(pkgconfig* cfg) {
	stringptr* result = stringptr_concat(
		SPL("export A="),
		&cfg->arch,
		SPL("\n"),
		SPL("export R="),
		&cfg->installroot,
		SPL("\n"),
		SPL("export S="),
		&cfg->pkgroot,
		SPL("\n"),
		SPL("export C="),
		&cfg->filecache,
		SPL("\n"),
		SPL("export K="),
		&cfg->keep,
		SPL("\n"),
		NULL);
	return result;
}
コード例 #2
0
// initialise with members list, containing all ids
variant_info_list* get_variants(size_t_ptrlist* members, stringptr* last_prefix, stringptrlist* block_strings, size_t block_len) {
	size_t i;
	variant_info vr, *vp;
	stringptr* next_prefix, *act;
	size_t* id;
	if(last_prefix->size == block_len) return NULL;
	variant_info_list* res = NULL;
	stringptr temp;
	char c;
	
	for(i = 0; i < sblist_getsize(members); i++)  {
		id = sblist_get(members, i);
		act = stringptrlist_get(block_strings, *id);
		if(last_prefix->size == 0 || stringptr_here(act, 0, last_prefix)) {
			if(!res) res = sblist_new(sizeof(variant_info), 16);
			if(!(vp = find_variant(res, act->ptr[last_prefix->size]))) {
				vr.c = act->ptr[last_prefix->size];
				vr.members = sblist_new(sizeof(size_t), stringptrlist_getsize(members));
				vr.variants = NULL;
				sblist_add(res, &vr);
				vp = find_variant(res, vr.c);
			}
			sblist_add(vp->members, id);
		}
	}
	if(res) {
		for (i = 0; i < sblist_getsize(res); i++) {
			vp = sblist_get(res, i);
			c = vp->c;
			temp.size = 1;
			temp.ptr = &c;
			next_prefix = stringptr_concat(last_prefix, &temp, NULL);
			vp->variants = get_variants(vp->members, next_prefix, block_strings, block_len);
		}
	}
	return res;
}
コード例 #3
0
ファイル: butch.c プロジェクト: yasar11732/butch
int create_script(jobtype ptype, pkgstate* state, pkg_exec* item, pkgdata* data) {
	stringptr* temp, *config, tb;
	stringptr* set_cc = SPL("if [ -z \"$CC\" ] ; then\n\tCC=cc\nfi\n");
	
	char* prefix;
	char buf[256];
	int hastarball;
	if(ptype == JT_DOWNLOAD) {
		prefix = "dl";
	} else if (ptype == JT_BUILD) {
		prefix = "build";
	} else
		abort();
	
	item->scripts.filename = stringptr_format("%s/%s_%s.sh", state->cfg.builddir.ptr, prefix, item->name->ptr);
	item->scripts.stdoutfn = stringptr_format("%s/%s_%s.log", state->cfg.logdir.ptr, prefix, item->name->ptr); 
	
	config = make_config(&state->cfg);
	hastarball = get_tarball_filename(data, buf, sizeof(buf));
	
	if(ptype == JT_DOWNLOAD) {
		if(!hastarball) abort(); //bug
		temp = stringptr_concat(SPL("#!/bin/sh\n"),
			config,
			SPL("wget -O $C/"),
			stringptr_fromchar(buf, &tb),
			SPL(" "),
			stringptrlist_get(data->mirrors, rand() % stringptrlist_getsize(data->mirrors)),
			//SPL(" --no-check-certificate"),
			NULL);
		
	} else if (ptype == JT_BUILD) {
		stringptr* buildscr = stringptrlist_tostring(data->buildscript);
		
		if(!hastarball) {
			temp = stringptr_concat(SPL("#!/bin/sh\n"), 
				config,
				set_cc,
				buildscr,
				NULL);
		} else {
			if(data->tardir->size && data->tardir->ptr[0] == '/') 
				// prevent erroneus scripts from trash our fs
				abort();
			
			temp = stringptr_concat(SPL("#!/bin/sh\n"), 
				config,
				set_cc,
				SPL("cd $S/build\n"), 
				SPL("[ -e "),
				data->tardir,
				SPL(" ] && rm -rf "),
				data->tardir,
				SPL("\ntar xf $C/"), 
				stringptr_fromchar(buf, &tb),
				SPL(" || (echo tarball error; exit 1)\ncd $S/build/"),
				data->tardir,
				SPL("\n"),
				buildscr,
				NULL);
		}
		
		stringptr_free(buildscr);
		
	} else abort();

	stringptr_tofile(item->scripts.filename->ptr, temp);
	if(chmod(item->scripts.filename->ptr, 0777) == -1) die(SPL("error setting permission"));
	stringptr_free(config);
	stringptr_free(temp);
	return 1;
}