ZPKGBIN=zpm-addfile zpm-extract zpm-init zpm-vercmp zpm-stat zpm-hash \
zpm-findpkg zpm-shell zpm-soneed
-SCRIPTS=zpm zpm-install
+SCRIPTS=zpm zpm-install zpm-merge zpm-list
COMPILED=$(ZPKGBIN)
PROGRAMS=$(SCRIPTS) $(COMPILED)
zpm-0.1-1.zpm: programs
rm -f $@
- ./zpm -P scripts:bin:. newpackage -f $@ -v 0.1 zpm
- ./zpm -P scripts:bin:. addtopackage -f $@ -P /usr/libexec/zpm -v 0.1 zpm $(PROGRAMS)
+ $(ZPM) newpackage -f $@ -v 0.1 zpm
+ $(ZPM) addtopackage -u root -g root -f $@ -P /bin -v 0.1 zpm $(PROGRAMS)
tarball: zpm-0.1-1.tar.xz
zpm-0.1-1.tar.xz: programs
rm -f $@
- tar -cJf $@ --transform='s|^|usr/libexec/zpm/|' \
- --transform='s|^usr/libexec/zpm/zpm$$|usr/bin/zpm|' \
+ tar -cJf $@ --transform='s|^|bin/|' \
$(PROGRAMS)
lzma.c: mklzma
PATH=$(curdir)/t:$(curdir):$(PATH) prove -e '' t/*.t
programs: elftype zpm-soname zpm-soneed zpm-addfile zpm-extract zpm-init \
- zpm-vercmp zpm-findpkg
+ zpm-vercmp zpm-findpkg zpm-merge
uncompress: uncompress.o
$(CC) $(CFLAGS) -o $@ $+ -llzma
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $+
libzpm.a: lib/sha256.o lib/db.o lib/compress.o lib/uncompress.o lib/zpm.o \
- sqlite/sqlite3.o \
+ sqlite/sqlite3.o lib/zpm_hash.o \
lib/vercmp.o \
lib/sha256.o \
$(LZMAOBJ)
return 1;
}
-/* flags 0, close mmap, flags 1, return mmap fd */
-int zpm_hash(char *path, char *hash, uint32_t flags) {
- int fd;
- void *content;
- struct stat sbuf;
- struct sha256_state md;
- int j;
- unsigned char tmp[32];
-
- /* mmap the file */
- fd = open(path, O_RDONLY);
- if (fd == -1) {
- fprintf(stderr, "%s can't open %s: %s\n", __FUNCTION__, path,strerror(errno));
- return 0;
- }
- if (fstat(fd, &sbuf) == -1) {
- fprintf(stderr, "%s can't fstat %s: %s\n", __FUNCTION__, path,strerror(errno));
- return 0;
- }
- /* not a regular file? */
- if (!S_ISREG(sbuf.st_mode)) {
- /* TODO this is ok, just stored differently */
- fprintf(stderr, "%s non-regular files unsupported %s\n", __FUNCTION__, path);
- return 0;
- }
-
- content = mmap(0, sbuf.st_size, PROT_READ,MAP_PRIVATE, fd, 0);
- close(fd);
- if (!content) {
- fprintf(stderr, "%s can't mmap %s: %s\n", __FUNCTION__, path,strerror(errno));
- return 0;
- }
-
- /* get hash */
- sha256_init(&md);
- sha256_process(&md, content, sbuf.st_size);
- sha256_done(&md, tmp);
- for (j=0;j<32;j++) {
- sprintf(hash+j*2, "%02x", (unsigned)tmp[j]);
- }
- hash[64] = 0;
- munmap(content, sbuf.st_size);
- return flags ? fd : 1;
-}
-
static sqlite3_stmt *run_for_hash(sqlite3 *db, char *sql, char *hash) {
int rc;
sqlite3_stmt *ifile;
--- /dev/null
+#define _POSIX_C_SOURCE 200809L
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "zpm.h"
+#include "elf.h"
+
+#include "sha256.h"
+
+/* flags 0, close mmap, flags 1, return mmap fd */
+int zpm_hash(char *path, char *hash, uint32_t flags) {
+ int fd;
+ void *content;
+ struct stat sbuf;
+ struct sha256_state md;
+ int j;
+ unsigned char tmp[32];
+
+ /* mmap the file */
+ fd = open(path, O_RDONLY);
+ if (fd == -1) {
+ fprintf(stderr, "%s can't open %s: %s\n", __FUNCTION__, path,strerror(errno));
+ return 0;
+ }
+ if (fstat(fd, &sbuf) == -1) {
+ fprintf(stderr, "%s can't fstat %s: %s\n", __FUNCTION__, path,strerror(errno));
+ return 0;
+ }
+ /* not a regular file? */
+ if (!S_ISREG(sbuf.st_mode)) {
+ /* TODO this is ok, just stored differently */
+ fprintf(stderr, "%s non-regular files unsupported %s\n", __FUNCTION__, path);
+ return 0;
+ }
+
+ content = mmap(0, sbuf.st_size, PROT_READ,MAP_PRIVATE, fd, 0);
+ close(fd);
+ if (!content) {
+ fprintf(stderr, "%s can't mmap %s: %s\n", __FUNCTION__, path,strerror(errno));
+ return 0;
+ }
+
+ /* get hash */
+ sha256_init(&md);
+ sha256_process(&md, content, sbuf.st_size);
+ sha256_done(&md, tmp);
+ for (j=0;j<32;j++) {
+ sprintf(hash+j*2, "%02x", (unsigned)tmp[j]);
+ }
+ hash[64] = 0;
+ munmap(content, sbuf.st_size);
+ return flags ? fd : 1;
+}