コード例 #1
0
ファイル: showmap.cpp プロジェクト: MIPS/system-extras
static int parse_header(const char* line, const mapinfo* prev, mapinfo** mi) {
    unsigned long start;
    unsigned long end;
    char name[128];
    int name_pos;
    int is_bss = 0;

    if (sscanf(line, "%lx-%lx %*s %*x %*x:%*x %*d%n", &start, &end, &name_pos) != 2) {
        *mi = NULL;
        return -1;
    }

    while (isspace(line[name_pos])) {
        name_pos += 1;
    }

    if (line[name_pos]) {
        strncpy(name, line + name_pos, sizeof(name));
    } else {
        if (prev && start == prev->end && is_library(prev->name)) {
            // anonymous mappings immediately adjacent to shared libraries
            // usually correspond to the library BSS segment, so we use the
            // library's own name
            strncpy(name, prev->name, sizeof(name));
            is_bss = 1;
        } else {
            strncpy(name, "[anon]", sizeof(name));
        }
    }
    name[sizeof(name) - 1] = '\0';  // Assure we're null-terminated.

    const int name_size = strlen(name) + 1;
    struct mapinfo* info = reinterpret_cast<mapinfo*>(calloc(1, sizeof(mapinfo) + name_size));
    if (info == NULL) {
        fprintf(stderr, "out of memory\n");
        exit(1);
    }

    info->start = start;
    info->end = end;
    info->is_bss = is_bss;
    info->count = 1;
    memcpy(info->name, name, name_size);

    *mi = info;
    return 0;
}
コード例 #2
0
ファイル: arch.c プロジェクト: Exocyst/packagemonkey
/* save the PKGBUILD file */
static void save_PKGBUILD(char * directory)
{
	char email_address[BLOCK_SIZE];
	char project_name[BLOCK_SIZE];
	char project_type[BLOCK_SIZE];
	char version[BLOCK_SIZE];
	char release[BLOCK_SIZE];
	char description[BLOCK_SIZE];
	char homepage[BLOCK_SIZE];
	char license[BLOCK_SIZE];
	char depends[BLOCK_SIZE];
	char build_depends[BLOCK_SIZE];
	char source_package[BLOCK_SIZE];
	char filename[BLOCK_SIZE];
	FILE * fp;
	char * package_list[MAX_FILES];
	char optional_depends[BLOCK_SIZE];
	int i, no_of_packages;

	sprintf(filename, "%s%cPKGBUILD",
			directory, DIRECTORY_SEPARATOR);

	fp = fopen(filename,"w");
	if (!fp) return;

	get_setting("email", email_address);
	get_setting("project name", project_name);
	get_setting("project type", project_type);
	get_setting("version", version);
	get_setting("release", release);
	get_setting("description", description);
	get_setting("homepage",homepage);
	get_setting("license",license);
	get_setting("depends arch",depends);
	get_setting("suggests arch",optional_depends);
	get_setting("build arch",build_depends);
	get_setting("source package",source_package);


    fprintf(fp, "# Maintainer: %s\n", email_address);
    fprintf(fp, "pkgname=%s\n",project_name);
    fprintf(fp, "pkgver=%s\n", version);
	fprintf(fp, "pkgrel=%s\n", release);
	fprintf(fp, "pkgdesc=\"%s\"\n", description);

	if (is_script_language(project_type) == 0) {	
		fprintf(fp, "%s", "arch=('i686' 'x86_64')\n");
	}
	else {
		fprintf(fp, "%s", "arch=('any')\n");
	}
	fprintf(fp, "url=\"%s\"\n",homepage);
	fprintf(fp, "license=('%s')\n",license);
	fprintf(fp, "%s","groups=()\n");

	fprintf(fp, "%s", "depends=(");
	no_of_packages =
		separate_files(depends, package_list,
					   MAX_FILES);
	for (i = 0; i < no_of_packages; i++) {
		if (i > 0) {
			fprintf(fp, "%s", " ");
		}
		fprintf(fp, "'%s'", package_list[i]);
		free(package_list[i]);
	}
	fprintf(fp,"%s",")\n");

	fprintf(fp, "%s", "makedepends=(");
	no_of_packages =
		separate_files(build_depends, package_list,
					   MAX_FILES);
	for (i = 0; i < no_of_packages; i++) {
		if (i > 0) {
			fprintf(fp, "%s", " ");
		}
		fprintf(fp, "'%s'", package_list[i]);
		free(package_list[i]);
	}
	fprintf(fp,"%s",")\n");

	fprintf(fp, "%s", "optdepends=(");
	no_of_packages =
		separate_files(optional_depends, package_list,
					   MAX_FILES);
	for (i = 0; i < no_of_packages; i++) {
		if (i > 0) {
			fprintf(fp, "%s", " ");
		}
		fprintf(fp, "'%s'", package_list[i]);
		free(package_list[i]);
	}
	fprintf(fp,"%s",")\n");

	fprintf(fp, "%s", "provides=()\n");
	fprintf(fp, "%s", "conflicts=()\n");
	fprintf(fp, "%s", "replaces=()\n");
	fprintf(fp, "%s", "backup=()\n");
	fprintf(fp, "%s", "options=()\n");
	fprintf(fp, "%s", "install=\n");
	fprintf(fp, "%s", "changelog=\n");
	if (strlen(source_package) == 0) {
	    fprintf(fp, "%s", "source=($pkgname-$pkgver.tar.gz)\n");
    }
	else {
	    fprintf(fp, "source=(%s)\n",source_package);
    }
	fprintf(fp, "%s", "noextract=()\n");
	fprintf(fp, "%s", "md5sums=()\n");
	fprintf(fp, "%s", "build() {\n");
	fprintf(fp, "%s", "  cd \"$srcdir/$pkgname-$pkgver\"\n");
	fprintf(fp, "%s", "  ./configure --prefix=/usr\n");
	fprintf(fp, "%s", "  make\n");
	fprintf(fp, "%s", "}\n");
	fprintf(fp, "%s", "package() {\n");
	fprintf(fp, "%s", "  cd \"$srcdir/$pkgname-$pkgver\"\n");
	if (is_library(project_name) == 0) {	
		fprintf(fp, "%s", "  make DESTDIR=\"$pkgdir/\" PREFIX=\"/usr\" install\n");
	}
	else {
		fprintf(fp, "%s", "  make DESTDIR=\"$pkgdir/\" PREFIX=\"/usr\" instlib\n");
	}
	fprintf(fp, "%s", "}\n");

	if (is_library(project_name) != 0) {
		fprintf(fp, "%s", "post_install() {\n");
		fprintf(fp, "%s", "  ln -sf /usr/lib/$pkgname-$pkgver.so.0.0.$pkgrel " \
				"/usr/lib/$pkgname.so.0\n");
		fprintf(fp, "%s", "  ln -sf /usr/lib/$pkgname-$pkgver.so.0.0.$pkgrel " \
				"/usr/lib/$pkgname.so\n");
		fprintf(fp, "%s", "  ldconfig\n");
		fprintf(fp, "%s", "}\n");
		fprintf(fp, "%s", "post_remove() {\n");
		fprintf(fp, "%s", "  ldconfig\n");
		fprintf(fp, "%s", "}\n");
	}

    fclose(fp);
}
コード例 #3
0
ファイル: rpm.c プロジェクト: Exocyst/packagemonkey
static int save_spec(char * project_directory,
                     char * directory,
                     int no_of_binaries, char ** binaries)
{
    char filename[BLOCK_SIZE];
    char project_name[BLOCK_SIZE];
    char project_type[BLOCK_SIZE];
    char version[BLOCK_SIZE];
    char description_brief[BLOCK_SIZE];
    char description[BLOCK_SIZE];
    char homepage[BLOCK_SIZE];
    char email_address[BLOCK_SIZE];
    char requires[BLOCK_SIZE];
    char requires_distro[BLOCK_SIZE];
    char build_requires[BLOCK_SIZE];
    char build_requires_distro[BLOCK_SIZE];
    char license[BLOCK_SIZE];
    char svg_filename[BLOCK_SIZE];
    char source_package[BLOCK_SIZE];
    char categories[BLOCK_SIZE];
    char release[BLOCK_SIZE];
    char commandline[BLOCK_SIZE];
    char * directories[MAX_FILES];
    char group_main[BLOCK_SIZE];
    char group_additional[BLOCK_SIZE];
    FILE * fp;
    int i,j=0,no_of_directories;
    const char * dayname[] = {
        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
    };
    const char * monthname[] = {
        "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
    };
    time_t rawtime;
    struct tm * timeinfo;
    int year,month,day,weekday;

    /* get the current year */
    time(&rawtime);
    timeinfo = localtime(&rawtime);
    year = timeinfo->tm_year + 1900;
    month = timeinfo->tm_mon;
    day = timeinfo->tm_mday;
    weekday = timeinfo->tm_wday;

    get_setting("project name", project_name);
    if (strlen(project_name) == 0) return -1;

    sprintf(filename,"%s%c%s.spec",
            directory, DIRECTORY_SEPARATOR,
            project_name);

    /* don't overwrite existing spec file */
    if (file_exists(filename) != 0) return 0;

    fp = fopen(filename,"w");
    if (!fp) return -1;

    get_setting("version", version);
    get_setting("description brief", description_brief);
    get_setting("description", description);
    get_setting("license", license);
    get_setting("homepage", homepage);
    get_setting("email", email_address);
    get_setting("depends rpm", requires);
    get_setting("depends rpm distro", requires_distro);
    get_setting("build rpm", build_requires);
    get_setting("build rpm distro", build_requires_distro);
    get_setting("source package", source_package);
    get_setting("categories", categories);
    get_setting("release", release);
    get_setting("commandline", commandline);
    get_setting("project type", project_type);

    fprintf(fp, "Name: %s\n", project_name);
    fprintf(fp, "Version: %s\n", version);
    fprintf(fp, "Release: %s%%{?dist}\n", release);
    fprintf(fp, "Summary: %s\n", description_brief);
    fprintf(fp, "License: %s\n", license);
    fprintf(fp, "URL: %s\n", homepage);
    fprintf(fp, "Packager: %s\n", email_address);

    if (strlen(source_package) > 0) {
        fprintf(fp, "Source0: %s\n", source_package);
    }
    else {
        fprintf(fp, "%s",
                "Source0: http://yourdomainname.com/src/" \
                "%{name}_%{version}.orig.tar.gz\n");
    }

    if (is_script_language(project_type) != 0) {
        fprintf(fp, "%s", "BuildArch: noarch\n");
    }

    if (strlen(categories) > 0) {
        parse_desktop_category(categories,
                               group_main, group_additional);
        fprintf(fp, "Group: %s/%s\n",
                group_main,group_additional);
    }
    else {
        fprintf(fp,"%s","Group: Application/Utility\n");
    }

    conditional_requires(fp, "Requires",
                         requires, requires_distro);
    conditional_requires(fp, "BuildRequires",
                         build_requires, build_requires_distro);

    fprintf(fp, "%s", "\n%description\n");
    save_description(fp, description, 0);

    sprintf(svg_filename, "%s%cdesktop%cicon.svg",
            project_directory, DIRECTORY_SEPARATOR,
            DIRECTORY_SEPARATOR);

    fprintf(fp, "%s", "\n%prep\n");
    fprintf(fp, "%s", "%setup -q\n\n");

    fprintf(fp, "%s", "%build\n");
    fprintf(fp, "%s", "%configure\n");
    fprintf(fp, "%s", "make %{?_smp_mflags}\n\n");

    fprintf(fp, "%s", "%install\n");
    fprintf(fp, "%s", "rm -rf %{buildroot}\n");
    fprintf(fp, "%s", "mkdir -p %{buildroot}\n");
    fprintf(fp, "%s", "mkdir -p %{buildroot}/etc\n");
    fprintf(fp, "%s", "mkdir -p %{buildroot}/etc/%{name}\n");
    fprintf(fp, "%s", "mkdir -p %{buildroot}/usr\n");
    fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/bin\n");

    /* create directories for binaries */
    if (no_of_binaries > 0) {
        no_of_directories =
            get_directories(binaries, no_of_binaries,
                            directories);
        for (i = 0; i < no_of_directories; i++) {
            if (get_subdirectory_string(directories[i]) != 0) {
                fprintf(fp, "mkdir -p \"%%{buildroot}/%s\"\n",
                        get_subdirectory_string(directories[i]));
            }
            free(directories[i]);
        }
    }

    if (is_library(project_name) != 0) {
        fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/lib\n");
        fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/lib/%{name}\n");
    }
    fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/share\n");
    fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/share/man\n");
    fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/share/man/man1\n");

    if (strlen(commandline) == 0) {
        fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/share/%{name}\n");
        fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/share/applications\n");
        fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/share/icons\n");
        fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/share/icons/hicolor\n");
        fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/share/icons/hicolor/24x24\n");
        fprintf(fp, "%s",
                "mkdir -p %{buildroot}/usr/share/icons/hicolor/24x24/apps\n\n");
        if (strlen(svg_filename) > 0) {
            fprintf(fp, "%s", "mkdir -p %{buildroot}/usr/share/pixmaps\n");
            fprintf(fp, "%s",
                    "mkdir -p %{buildroot}/usr/share/icons/hicolor/scalable\n");
            fprintf(fp, "%s",
                    "mkdir -p %{buildroot}/usr/share/icons/hicolor/scalable/apps\n");
        }
    }

    fprintf(fp, "%s", "# Make install but to the RPM BUILDROOT directory\n");
    if (is_library(project_name) == 0) {
        fprintf(fp, "%s", "make install -B DESTDIR=%{buildroot} PREFIX=/usr\n\n");
    }
    else {
        fprintf(fp, "%s", "make instlib -B DESTDIR=%{buildroot} PREFIX=/usr\n\n");
    }

    fprintf(fp, "%s", "%files\n");
    fprintf(fp, "%s", "%doc README.md LICENSE\n");
    fprintf(fp, "%s", "%defattr(-,root,root,-)\n");

    /* claim ownership of directories */
    no_of_directories =
        get_directories(binaries, no_of_binaries,
                        directories);
    for (i = 0; i < no_of_directories; i++) {
        if (get_subdirectory_string(directories[i]) != 0) {
            if (contains_char(get_subdirectory_string(directories[i]), ' ') == 0) {
                fprintf(fp, "%%dir /%s\n",get_subdirectory_string(directories[i]));
            }
            else {
                fprintf(fp, "%%dir \"/%s\"\n",get_subdirectory_string(directories[i]));
            }
        }
        free(directories[i]);
    }

    if (strlen(commandline) == 0) {
        fprintf(fp, "%s", "%dir /usr/share/%{name}\n");
        fprintf(fp, "%s", "%dir /usr/share/applications\n");
        fprintf(fp, "%s", "%dir /usr/share/icons/hicolor\n");
        fprintf(fp, "%s", "%dir /usr/share/icons/hicolor/24x24\n");
        fprintf(fp, "%s", "%dir /usr/share/icons/hicolor/24x24/apps\n");
        if (strlen(svg_filename) > 0) {
            fprintf(fp, "%s", "%dir /usr/share/pixmaps\n");
            fprintf(fp, "%s", "%dir /usr/share/icons/hicolor/scalable\n");
            fprintf(fp, "%s", "%dir /usr/share/icons/hicolor/scalable/apps\n");
        }
    }

    if (is_script_language(project_type) != 0) {
        fprintf(fp, "%s", "/usr/share/%{name}/*\n");
    }

    fprintf(fp, "%s", "%{_bindir}/*\n");
    fprintf(fp, "%s", "%{_mandir}/man1/*\n");
    if (strlen(commandline) == 0) {
        fprintf(fp, "%s", "%attr(644,root,root) " \
                "/usr/share/applications/%{name}.desktop\n");
        fprintf(fp, "%s", "%attr(644,root,root) " \
                "/usr/share/icons/hicolor/24x24/apps/%{name}.png\n");
        if (file_exists(svg_filename) != 0) {
            fprintf(fp, "%s", "%attr(644,root,root) " \
                    "/usr/share/icons/hicolor/scalable/apps/%{name}.svg\n");
            fprintf(fp, "%s", "%attr(644,root,root) " \
                    "/usr/share/pixmaps/%{name}.svg\n");
        }
    }
    if (is_library(project_name) == 0) {
        /* install some binaries */
        for (i = 0; i < no_of_binaries; i++) {
            if (contains_char(get_subdirectory_string(binaries[i]),' ') == 0) {
                fprintf(fp, "%%attr(755,root,root) /%s\n",
                        get_subdirectory_string(binaries[i]));
            }
            else {
                fprintf(fp, "%%attr(755,root,root) \"/%s\"\n",
                        get_subdirectory_string(binaries[i]));
            }
        }
    }
    else {
        /* install libraries */
        for (i = 0; i < no_of_binaries; i++) {
            fprintf(fp, "%%attr(755,root,root) /usr/lib/%%{name}/%s\n",
                    get_subdirectory_string(binaries[i]));
        }
    }

    fprintf(fp,"%s","\n");

    if (is_library(project_name) != 0) {
        fprintf(fp, "%s", "%post\n");
        fprintf(fp, "%s", "umask 007\n");
        fprintf(fp, "%s", "ldconfig > /dev/null 2>&1\n");

        for (i = 0; i < no_of_binaries; i++) {
            for (j = strlen(binaries[i])-1; j >= 0; j--) {
                if (binaries[i][j] == DIRECTORY_SEPARATOR) {
                    j++;
                    break;
                }
            }
            if (file_is_library(&binaries[i][j]) != 0) {
                fprintf(fp,
                        "ln -sf /usr/lib/%s.0.0.1 /usr/lib/%%{name}/%s\n",
                        &binaries[i][j], &binaries[i][j]);
            }
        }
        fprintf(fp, "%s", "\n");

        fprintf(fp, "%s", "%postun\n");
        fprintf(fp, "%s", "umask 007\n");
        fprintf(fp, "%s", "ldconfig > /dev/null 2>&1\n");
        for (i = 0; i < no_of_binaries; i++) {
            for (j = strlen(binaries[i])-1; j >= 0; j--) {
                if (binaries[i][j] == DIRECTORY_SEPARATOR) {
                    j++;
                    break;
                }
            }
            if (file_is_library(&binaries[i][j]) != 0) {
                fprintf(fp, "rm /usr/lib/%s\n", &binaries[i][j]);
            }
        }
        fprintf(fp, "%s", "\n");
    }

    fprintf(fp, "%s", "%changelog\n");
    fprintf(fp, "* %s %s %d %d  %s\n",
            dayname[weekday], monthname[month],
            day, year, email_address);
    fprintf(fp, "%s", "- Spec file created\n");

    fclose(fp);
    return 0;
}
コード例 #4
0
 static bool is_linkable_library(const char * file_name){return is_library(file_name);}