Properly build shared/static libxbps and utils.

xbps-fetch: added -v flag to see verbose messages in libfetch.

--HG--
extra : convert_revision : xtraeme%40gmail.com-20091030111726-axf9paz2k01ntqzz
This commit is contained in:
Juan RP 2009-10-30 12:17:26 +01:00
parent 79f9f34775
commit 3905c2106c
16 changed files with 145 additions and 66 deletions

View File

@ -4,9 +4,27 @@ SUBDIRS = lib bin
.PHONY: all .PHONY: all
all: all:
for dir in $(SUBDIRS); do \ @echo
$(MAKE) -C $$dir; \ @echo "********************************"
done @echo "*** Building shared libxbps ***"
@echo "********************************"
@echo
$(MAKE) -C lib
@echo
@echo "********************************"
@echo "*** Building shared binaries ***"
@echo "********************************"
@echo
$(MAKE) -C bin
@echo
@echo "********************************"
@echo "*** Building static binaries ***"
@echo "********************************"
@echo
$(MAKE) -C lib clean
$(MAKE) -C bin clean
$(MAKE) STATIC=1 -C lib
$(MAKE) STATIC=1 -C bin
.PHONY: install .PHONY: install
install: install:

View File

@ -3,7 +3,6 @@ include $(TOPDIR)/vars.mk
BIN = xbps-bin BIN = xbps-bin
OBJS = check.o install.o main.o remove.o show-deps.o ../xbps-repo/util.o OBJS = check.o install.o main.o remove.o show-deps.o ../xbps-repo/util.o
STATIC_LIBS += -lz -lacl -lbz2 -llzma
include $(TOPDIR)/prog.mk include $(TOPDIR)/prog.mk

View File

@ -164,7 +164,7 @@ download_package_list(prop_object_iterator_t iter)
} }
printf("Downloading %s-%s binary package ...\n", printf("Downloading %s-%s binary package ...\n",
pkgname, version); pkgname, version);
rv = xbps_fetch_file(binfile, savedir); rv = xbps_fetch_file(binfile, savedir, NULL);
free(savedir); free(savedir);
free(binfile); free(binfile);
if (rv != 0) { if (rv != 0) {

View File

@ -1,21 +1,40 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
#include <xbps_api.h> #include <xbps_api.h>
#include "fetch.h"
static void
usage(void)
{
printf("usage: xbps-fetch [-v] URL\n");
exit(EXIT_FAILURE);
}
int int
main(int argc, char **argv) main(int argc, char **argv)
{ {
int rv = 0; char flags[8];
int c, rv = 0;
if (argc != 2) { while ((c = getopt(argc, argv, "v")) != -1) {
printf("Usage: xbps-fetch [options] URL\n"); switch (c) {
exit(EXIT_FAILURE); case 'v':
strcat(flags, "v");
break;
default:
usage();
} }
}
argc -= optind;
argv += optind;
rv = xbps_fetch_file(argv[1], "."); if (argc != 1)
usage();
rv = xbps_fetch_file(argv[0], ".", flags);
if (rv != 0) { if (rv != 0) {
printf("xbps-fetch: couldn't download %s!\n", argv[1]); printf("%s: %s\n", argv[0], xbps_fetch_error_string());
printf("xbps-fetch: %s\n", xbps_fetch_error_string());
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);

View File

@ -3,6 +3,5 @@ include $(TOPDIR)/vars.mk
BIN = xbps-repo BIN = xbps-repo
OBJS = main.o util.o index.o OBJS = main.o util.o index.o
STATIC_LIBS += -lz -lbz2 -lacl -llzma
include $(TOPDIR)/prog.mk include $(TOPDIR)/prog.mk

View File

@ -26,16 +26,26 @@ http://code.google.com/p/portableproplib/
I'm also the human maintaining the portable proplib package. I'd suggest you I'm also the human maintaining the portable proplib package. I'd suggest you
to install it into /usr/local to avoid issues with your distribution packages. to install it into /usr/local to avoid issues with your distribution packages.
To build the xbps utils, you'll need: To build the xbps utils, you'll need for both shared and dynamic:
* asciidoc (to build the manpages) * asciidoc (to build the manpages)
* libarchive (devel pkg)
* proplib (devel pkg)
* openssl (devel pkg)
If you only want to build the static binaries, you can pass STATIC=1
to the make command. You'll need development packages for the ones
mentioned above as well as the following:
* attr (devel pkg with static lib)
* acl (devel pkg with static lib) * acl (devel pkg with static lib)
* zlib (devel pkg with static lib) * zlib (devel pkg with static lib)
* bzip2 (devel pkg with static lib) * bzip2 (devel pkg with static lib)
* xz (devel pkg with static lib) * xz (devel pkg with static lib)
* libarchive (devel pkg with static lib, all features built in)
* proplib (devel pkg with static lib, see above) Please note that when building the static binaries, the static libs
* openssl (devel pkg with static lib) must match the requirements! please make sure that your installed
libarchive has all features built in (acl, zlib, bzip2, xz and openssl).
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
HOW TO USE IT HOW TO USE IT

View File

@ -44,8 +44,8 @@ typedef struct _SHA256_CTX {
uint8_t buffer[SHA256_BLOCK_LENGTH]; uint8_t buffer[SHA256_BLOCK_LENGTH];
} SHA256_CTX; } SHA256_CTX;
int SHA256_Init(SHA256_CTX *); int XBPS_SHA256_Init(SHA256_CTX *);
int SHA256_Update(SHA256_CTX *, const uint8_t *, size_t); int XBPS_SHA256_Update(SHA256_CTX *, const uint8_t *, size_t);
char *SHA256_End(SHA256_CTX *, uint8_t *); char *XBPS_SHA256_End(SHA256_CTX *, uint8_t *);
#endif /* !_SHA2_DIGEST_H_ */ #endif /* !_SHA2_DIGEST_H_ */

View File

@ -82,7 +82,7 @@ int SYMEXPORT xbps_configure_all_pkgs(void);
int SYMEXPORT xbps_cmpver(const char *, const char *); int SYMEXPORT xbps_cmpver(const char *, const char *);
/* From lib/download.c */ /* From lib/download.c */
int SYMEXPORT xbps_fetch_file(const char *, const char *); int SYMEXPORT xbps_fetch_file(const char *, const char *, const char *);
void SYMEXPORT (*xbps_fetch_start_cb)(const char *, off_t *, off_t *); void SYMEXPORT (*xbps_fetch_start_cb)(const char *, off_t *, off_t *);
void SYMEXPORT (*xbps_fetch_update_cb)(off_t *); void SYMEXPORT (*xbps_fetch_update_cb)(off_t *);
void SYMEXPORT (*xbps_fetch_end_cb)(void); void SYMEXPORT (*xbps_fetch_end_cb)(void);

View File

@ -1,27 +1,10 @@
include ../vars.mk include ../vars.mk
INET6 ?= yes
SSL ?= yes
LIBS = -larchive -lprop
ifdef SSL
CPPFLAGS += -DWITH_SSL
LIBS += -lssl -lcrypto
endif
ifdef INET6
CPPFLAGS += -DINET6
endif
ifdef DEBUG
CPPFLAGS += -DDEBUG
endif
LIBMAJOR = 0 LIBMAJOR = 0
LIBMINOR = 0 LIBMINOR = 0
LIBMICRO = 0 LIBMICRO = 0
LIBXBPS_SHLIB = libxbps.so.$(LIBMAJOR).$(LIBMINOR).$(LIBMICRO) LIBXBPS_SHLIB = libxbps.so.$(LIBMAJOR).$(LIBMINOR).$(LIBMICRO)
LIBXBPS_LDFLAGS = $(LIBS) -shared -Wl,-soname,libxbps.so.$(LIBMAJOR) LIBXBPS_LDFLAGS = -shared -Wl,-soname,libxbps.so.$(LIBMAJOR)
# libfetch # libfetch
OBJS = fetch/common.o fetch/fetch.o fetch/file.o fetch/ftp.o fetch/http.o OBJS = fetch/common.o fetch/fetch.o fetch/file.o fetch/ftp.o fetch/http.o
@ -32,14 +15,25 @@ OBJS += humanize_number.o orphans.o plist.o purge.o register.o remove.o
OBJS += repository.o requiredby.o sha256.o sortdeps.o state.o OBJS += repository.o requiredby.o sha256.o sortdeps.o state.o
OBJS += sync_remote_pkgidx.o unpack.o util.o OBJS += sync_remote_pkgidx.o unpack.o util.o
ifdef STATIC
all: libfetch libxbps.a
else
LDFLAGS = -lprop -larchive
ifdef WITH_SSL
LDFLAGS += -lssl -lcrypto
endif
all: libfetch libxbps.so libxbps.a all: libfetch libxbps.so libxbps.a
endif
.PHONY: all .PHONY: all
libfetch: libfetch:
$(MAKE) -C fetch $(MAKE) -C fetch
%.o: %.c
$(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -c $<
libxbps.so: $(OBJS) libxbps.so: $(OBJS)
$(CC) $(LIBXBPS_LDFLAGS) $^ -o $(LIBXBPS_SHLIB) $(CC) $(LDFLAGS) $(LIBXBPS_LDFLAGS) $^ -o $(LIBXBPS_SHLIB)
-ln -sf $(LIBXBPS_SHLIB) libxbps.so.$(LIBMAJOR) -ln -sf $(LIBXBPS_SHLIB) libxbps.so.$(LIBMAJOR)
-ln -sf $(LIBXBPS_SHLIB) libxbps.so -ln -sf $(LIBXBPS_SHLIB) libxbps.so
@ -50,7 +44,9 @@ libxbps.a: $(OBJS)
.PHONY: install .PHONY: install
install: all install: all
install -d $(LIBDIR) install -d $(LIBDIR)
ifdef STATIC
install -m 644 libxbps.a $(LIBDIR) install -m 644 libxbps.a $(LIBDIR)
endif
install -m 644 $(LIBXBPS_SHLIB) $(LIBDIR) install -m 644 $(LIBXBPS_SHLIB) $(LIBDIR)
cp -a libxbps.so $(LIBDIR) cp -a libxbps.so $(LIBDIR)
cp -a libxbps.so.$(LIBMAJOR) $(LIBDIR) cp -a libxbps.so.$(LIBMAJOR) $(LIBDIR)

View File

@ -171,7 +171,7 @@ xbps_fetch_error_string(void)
} }
int SYMEXPORT int SYMEXPORT
xbps_fetch_file(const char *uri, const char *outputdir) xbps_fetch_file(const char *uri, const char *outputdir, const char *flags)
{ {
struct stat st; struct stat st;
struct xferstat xs; struct xferstat xs;
@ -181,7 +181,7 @@ xbps_fetch_file(const char *uri, const char *outputdir)
struct timeval tv[2]; struct timeval tv[2];
ssize_t bytes_read, bytes_written; ssize_t bytes_read, bytes_written;
off_t bytes_dld = -1; off_t bytes_dld = -1;
char buf[32768], *filename, *destfile = NULL; char buf[32768], *filename, *destfile = NULL, fetchflags[8];
int fd = -1, rv = 0; int fd = -1, rv = 0;
bool restart = false; bool restart = false;
@ -221,7 +221,12 @@ xbps_fetch_file(const char *uri, const char *outputdir)
goto out; goto out;
} }
if ((rv = fetchStat(url, &url_st, "i")) == -1) { memset(&fetchflags, 0, sizeof(fetchflags));
if (flags != NULL)
strcat(fetchflags, flags);
strcat(fetchflags, "i");
if ((rv = fetchStat(url, &url_st, fetchflags)) == -1) {
rv = fetchLastErrCode; rv = fetchLastErrCode;
goto out; goto out;
} }
@ -234,7 +239,7 @@ xbps_fetch_file(const char *uri, const char *outputdir)
if (restart) if (restart)
url->offset = st.st_size; url->offset = st.st_size;
fio = fetchXGet(url, &url_st, "i"); fio = fetchXGet(url, &url_st, fetchflags);
if (fio == NULL) { if (fio == NULL) {
rv = fetchLastErrCode; rv = fetchLastErrCode;
goto out; goto out;

View File

@ -4,6 +4,22 @@ include $(TOPDIR)/vars.mk
CFLAGS += -Wno-unused-macros -Wno-conversion CFLAGS += -Wno-unused-macros -Wno-conversion
CPPFLAGS += -DFTP_COMBINE_CWDS -DNETBSD -I$(TOPDIR)/include CPPFLAGS += -DFTP_COMBINE_CWDS -DNETBSD -I$(TOPDIR)/include
ifdef WITH_INET6
CPPFLAGS += -DINET6
endif
ifdef WITH_SSL
CPPFLAGS += -DWITH_SSL
endif
ifdef WITH_DEBUG
CPPFLAGS += -DDEBUG
endif
ifdef STATIC
CFLAGS += -static
endif
OBJS= fetch.o common.o ftp.o http.o file.o OBJS= fetch.o common.o ftp.o http.o file.o
INCS= common.h INCS= common.h
GEN = ftperr.h httperr.h GEN = ftperr.h httperr.h
@ -12,7 +28,7 @@ GEN = ftperr.h httperr.h
all: $(OBJS) all: $(OBJS)
%.o: %.c $(INCS) $(GEN) %.o: %.c $(INCS) $(GEN)
$(CC) $(CPPFLAGS) $(CFLAGS) -c $< $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -c $<
ftperr.h: ftp.errors ftperr.h: ftp.errors
./errlist.sh ftp_errlist FTP ftp.errors > $@ ./errlist.sh ftp_errlist FTP ftp.errors > $@

View File

@ -123,7 +123,7 @@ static const uint32_t sha256_initial_hash_value[8] = {
/*** SHA-256: *********************************************************/ /*** SHA-256: *********************************************************/
int int
SHA256_Init(SHA256_CTX *context) XBPS_SHA256_Init(SHA256_CTX *context)
{ {
if (context == NULL) if (context == NULL)
return 1; return 1;
@ -220,7 +220,7 @@ SHA256_Transform(SHA256_CTX *context, const uint32_t *data)
#else /* SHA2_UNROLL_TRANSFORM */ #else /* SHA2_UNROLL_TRANSFORM */
void static void
SHA256_Transform(SHA256_CTX *context, const uint32_t *data) SHA256_Transform(SHA256_CTX *context, const uint32_t *data)
{ {
uint32_t a, b, c, d, e, f, g, h, s0, s1; uint32_t a, b, c, d, e, f, g, h, s0, s1;
@ -298,7 +298,7 @@ SHA256_Transform(SHA256_CTX *context, const uint32_t *data)
#endif /* SHA2_UNROLL_TRANSFORM */ #endif /* SHA2_UNROLL_TRANSFORM */
int int
SHA256_Update(SHA256_CTX *context, const uint8_t *data, size_t len) XBPS_SHA256_Update(SHA256_CTX *context, const uint8_t *data, size_t len)
{ {
unsigned int freespace, usedspace; unsigned int freespace, usedspace;
@ -441,7 +441,7 @@ SHA256_Final(uint8_t digest[], SHA256_CTX *context)
static const char sha2_hex_digits[] = "0123456789abcdef"; static const char sha2_hex_digits[] = "0123456789abcdef";
char * char *
SHA256_End(SHA256_CTX *ctx, uint8_t *buffer) XBPS_SHA256_End(SHA256_CTX *ctx, uint8_t *buffer)
{ {
uint8_t digest[SHA256_DIGEST_LENGTH], *d = digest; uint8_t digest[SHA256_DIGEST_LENGTH], *d = digest;
uint8_t *ret; uint8_t *ret;

View File

@ -133,7 +133,7 @@ xbps_sync_repository_pkg_index(const char *uri)
free(lrepodir); free(lrepodir);
return errno; return errno;
} }
rv = xbps_fetch_file(rpidx, lrepodir); rv = xbps_fetch_file(rpidx, lrepodir, NULL);
free(rpidx); free(rpidx);
free(lrepodir); free(lrepodir);

View File

@ -53,10 +53,10 @@ xbps_get_file_hash(const char *file)
if ((fd = open(file, O_RDONLY)) == -1) if ((fd = open(file, O_RDONLY)) == -1)
return NULL; return NULL;
SHA256_Init(&ctx); XBPS_SHA256_Init(&ctx);
while ((bytes = read(fd, buf, sizeof(buf))) > 0) while ((bytes = read(fd, buf, sizeof(buf))) > 0)
SHA256_Update(&ctx, buf, (size_t)bytes); XBPS_SHA256_Update(&ctx, buf, (size_t)bytes);
hash = strdup(SHA256_End(&ctx, digest)); hash = strdup(XBPS_SHA256_End(&ctx, digest));
(void)close(fd); (void)close(fd);
return hash; return hash;

23
prog.mk
View File

@ -1,29 +1,35 @@
BIN_STATIC ?= $(BIN).static
OBJS ?= main.o OBJS ?= main.o
MAN ?= $(BIN).8 MAN ?= $(BIN).8
all: $(BIN) $(BIN_STATIC) $(MAN) ifdef STATIC
all: $(BIN).static
else
LDFLAGS = -lxbps
all: $(BIN) $(MAN)
endif
.PHONY: all .PHONY: all
$(MAN): $(MAN):
a2x -f manpage $(MAN).txt a2x -f manpage $(MAN).txt
$(BIN_STATIC): $(OBJS) $(BIN).static: $(OBJS)
$(CC) -static $^ $(LDFLAGS) $(STATIC_LIBS) -o $@ $(CC) $^ -static -lxbps $(LDFLAGS) -o $@
$(BIN): $(OBJS) $(BIN): $(OBJS)
$(CC) $^ $(LDFLAGS) -o $@ $(CC) $^ $(LDFLAGS) -o $@
.PHONY: clean .PHONY: clean
clean: clean:
-rm -f $(BIN) $(BIN_STATIC) $(MAN) -rm -f $(BIN) $(MAN)
-rm -f $(BIN).static
-rm -f $(OBJS) -rm -f $(OBJS)
.PHONY: install .PHONY: install
install: $(BIN) $(BIN_STATIC) $(MAN) install: $(BIN) $(MAN)
install -d $(SBINDIR) install -d $(SBINDIR)
install $(INSTALL_STRIPPED) -m 755 $(BIN) $(SBINDIR) install $(INSTALL_STRIPPED) -m 755 $(BIN) $(SBINDIR)
install $(INSTALL_STRIPPED) -m 755 $(BIN_STATIC) $(SBINDIR) install $(INSTALL_STRIPPED) -m 755 $(BIN).static $(SBINDIR)
ifdef MAN ifdef MAN
install -d $(MANDIR) install -d $(MANDIR)
install -m 644 $(MAN) $(MANDIR) install -m 644 $(MAN) $(MANDIR)
@ -31,4 +37,5 @@ endif
.PHONY: uninstall .PHONY: uninstall
uninstall: uninstall:
-rm -f $(SBINDIR)/$(BIN) $(SBINDIR)/$(BIN_STATIC) -rm -f $(SBINDIR)/$(BIN)
-rm -f $(SBINDIR)/$(BIN).static

20
vars.mk
View File

@ -1,5 +1,8 @@
# Common variables. # Common variables.
WITH_INET6 = yes
WITH_SSL = yes
PREFIX ?= /usr/local PREFIX ?= /usr/local
SBINDIR ?= $(DESTDIR)$(PREFIX)/sbin SBINDIR ?= $(DESTDIR)$(PREFIX)/sbin
LIBDIR ?= $(DESTDIR)$(PREFIX)/lib LIBDIR ?= $(DESTDIR)$(PREFIX)/lib
@ -12,12 +15,19 @@ INSTALL_STRIPPED=
DEBUG_FLAGS = -g DEBUG_FLAGS = -g
endif endif
STATIC_LIBS ?= -lprop -lpthread -larchive LDFLAGS = -L$(TOPDIR)/lib
LDFLAGS += -L$(TOPDIR)/lib -L$(PREFIX)/lib -lxbps
CPPFLAGS += -I$(TOPDIR)/include -D_XOPEN_SOURCE=600 -D_GNU_SOURCE CPPFLAGS += -I$(TOPDIR)/include -D_XOPEN_SOURCE=600 -D_GNU_SOURCE
CPPFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES CPPFLAGS += -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES
WARNFLAGS ?= -pedantic -std=c99 -Wall -Wextra -Werror -Wshadow -Wformat=2 WARNFLAGS ?= -pedantic -std=c99 -Wall -Wextra -Werror -Wshadow -Wformat=2
WARNFLAGS += -Wmissing-declarations -Wcomment -Wunused-macros -Wendif-labels WARNFLAGS += -Wmissing-declarations -Wcomment -Wunused-macros -Wendif-labels
WARNFLAGS += -Wcast-qual -Wcast-align -Wstack-protector WARNFLAGS += -Wcast-qual -Wcast-align
CFLAGS = $(DEBUG_FLAGS) $(WARNFLAGS) -fstack-protector-all -O2 -fPIC -DPIC CFLAGS = $(DEBUG_FLAGS) $(WARNFLAGS)
CFLAGS += -fvisibility=hidden
ifdef STATIC
CFLAGS += -static
LDFLAGS += -lprop -lpthread -larchive -lssl -lcrypto -ldl -lacl \
-lattr -lcrypto -llzma -lbz2 -lz
else
CFLAGS += -fvisibility=hidden -fstack-protector-all -fPIC -DPIC
CPPFLAGS += -Wstack-protector
endif