From: Andre Noll Date: Thu, 5 Jun 2008 08:27:14 +0000 (+0200) Subject: Merge commit 'meins/master' X-Git-Tag: v0.1.0~82 X-Git-Url: http://git.tuebingen.mpg.de/?a=commitdiff_plain;h=f065a93d3307f2065fcf8c95509166d15af4194c;hp=d9a8f1b91a800ec65aebdf0c89f324e77c08302c;p=osl.git Merge commit 'meins/master' --- diff --git a/Makefile b/Makefile index b5d4b16..7d4b045 100644 --- a/Makefile +++ b/Makefile @@ -1,71 +1,103 @@ +# where to install +prefix := /usr/local +libdir := $(prefix)/lib +includedir := $(prefix)/include + +objects := osl.o fd.o rbtree.o sha1.o +headers := osl.h + +INSTALL := install +CC := gcc +MKDIR := mkdir -p +RM := rm -f +LN := ln + +# libosl's versioning consists of three numbers. Let's call them x, y and z. +# The way x, y and z are interpreted depends on the OS. +x := 0 +y := 1 +z := 0 + +# common flags +CFLAGS += -Wno-sign-compare -g -Wunused -Wundef -W +CFLAGS += -Wredundant-decls +CFLAGS += -Os +CFLAGS += -Wall +CFLAGS += -Wuninitialized +CFLAGS += -Wchar-subscripts +CFLAGS += -Wformat-security +CFLAGS += -Werror-implicit-function-declaration +CFLAGS += -Wmissing-format-attribute +CFLAGS += -Wunused-macros +CFLAGS += -Wbad-function-cast +CFLAGS += -fPIC +CFLAGS += -fvisibility=hidden + uname_s := $(shell uname -s 2>/dev/null || echo "UNKNOWN_OS") uname_rs := $(shell uname -rs) -objects := osl.o fd.o rbtree.o sha1.o -major_version := 0 -minor_version := 1 -patchlevel_version := 0 libname := osl +ifeq ($(uname_s),Linux) + # On Linux, the following conventions apply (see dhweeler's Program + # Library HOWTO): + # + # The soname has the prefix ``lib'', the name of the library, the + # phrase ``.so'', followed by a period and a version number that is + # incremented whenever the interface changes. + soname := lib$(libname).so.$(x) + # The real name adds to the soname a period, a minor number, another + # period, and the release number. + realname := $(soname).$(y).$(z) -ifeq ($(uname_s),Linux) - dso_opts := --shared -Wl,-soname,libosl.so.$(major_version) - dso_filename :=lib$(libname).so.$(major_version).$(minor_version).$(patchlevel_version) + # In addition, there's the name that the compiler uses when requesting + # a library, (I'll call it the ``linker name''), which is simply the + # soname without any version number. + linkername := lib$(libname).so + + LDFLAGS += --shared + LDFLAGS += -Wl,-soname,$(soname) # disallow undefined symbols LDFLAGS += -Wl,-z,defs endif ifeq ($(uname_s),Darwin) # Darwin has its own idea on version numbers: # + realname := lib$(libname).$(x).dylib + soname := $(realname) + linkername := lib$(libname).so # The minor version number is an incremental number using the format # X[.Y[.Z]]. To set the minor version number of a dynamic library, use # the gcc -current_version option. + LDFLAGS += -current_version $(y).$(z) # # The compatibility version number of a library release specifies the # earliest minor version of the clients linked against that release can # use. - dso_opts := -dynamiclib -current_version $(minor_version).$(patchlevel_version) \ - -compatibility_version $(minor_version).0 -fvisibility=hidden - dso_filename := lib$(libname).$(major_version).dylib + LDFLAGS += -compatibility_version $(y).0 + LDFLAGS += -dynamiclib endif ifeq ($(uname_s),SunOS) - dso_opts := --shared -z text -z defs - dso_filename :=lib$(libname).so.$(major_version).$(minor_version).$(patchlevel_version) + # Solaris needs another set of flags + LDFLAGS += --shared + LDFLAGS += -z text + LDFLAGS += -z defs + realname := lib$(libname).so.$(major_version).$(minor_version).$(patchlevel_version) CPPFLAGS += -I/opt/csw/include endif -ifeq ($(uname_s),FreeBSD) - dso_opts := --shared -Wl,-soname,libosl.so.$(major_version) - dso_filename :=lib$(libname).so.$(major_version).$(minor_version).$(patchlevel_version) -endif -ifeq ($(uname_s),NetBSD) - dso_opts := --shared -Wl,-soname,libosl.so.$(major_version) - dso_filename :=lib$(libname).so.$(major_version).$(minor_version).$(patchlevel_version) -endif -all: $(dso_filename) - -DEBUG_CPPFLAGS += -Wno-sign-compare -g -Wunused -Wundef -W -DEBUG_CPPFLAGS += -Wredundant-decls -CPPFLAGS += -Os -CPPFLAGS += -Wall -CPPFLAGS += -Wuninitialized -CPPFLAGS += -Wchar-subscripts -CPPFLAGS += -Wformat-security -CPPFLAGS += -Werror-implicit-function-declaration -CPPFLAGS += -Wmissing-format-attribute -CPPFLAGS += -Wunused-macros -CPPFLAGS += -Wbad-function-cast -CPPFLAGS += -fPIC -CPPFLAGS += -fvisibility=hidden + +all: $(realname) Makefile.deps: $(wildcard *.c *.h) - gcc -MM -MG *.c > $@ + $(CC) -MM -MG *.c > $@ -include Makefile.deps %.o: %.c Makefile - $(CC) -c $(CPPFLAGS) $(DEBUG_CPPFLAGS) $< -$(dso_filename): $(objects) - $(CC) $(dso_opts) -o $@ $(objects) $(LDFLAGS) -lcrypto + $(CC) -c $(CPPFLAGS) $(CFLAGS) $< + +$(realname): $(objects) + $(CC) $(LDFLAGS) -o $@ $(objects) $(LDFLAGS) -lcrypto osl_errors.h: errlist sed -e 's/\([A-Z_]*\) .*/ E_OSL_\1/' \ @@ -75,7 +107,17 @@ osl_errors.h: errlist errtab.h: errlist sed -e 's/^\([A-Z_]*\)\s*\(.*\)/_S(E_OSL_\1, \2)/g' $< > $@ + osl.h: osl.h.in osl_errors.h cat $^ > $@ clean: - rm -f *.o $(dso_filename) osl.h osl_errors.h errtab.h + rm -f *.o $(realname) osl.h osl_errors.h errtab.h + +install: all + $(MKDIR) $(libdir) $(includedir) + $(RM) $(libdir)/$(linkername) + $(LN) -s $(libdir)/$(soname) $(libdir)/$(linkername) + $(INSTALL) -s -m 755 $(realname) $(libdir) + $(INSTALL) -m 644 $(headers) $(includedir) + +.PHONY: all clean install diff --git a/fd.c b/fd.c index 13708ac..8487760 100644 --- a/fd.c +++ b/fd.c @@ -144,21 +144,6 @@ int para_fchdir(int fd) return 1; } -/** - * A wrapper for mkdir(2). - * - * \param path Name of the directory to create. - * \param mode The permissions to use. - * - * \return Standard. - */ -int para_mkdir(const char *path, mode_t mode) -{ - if (!mkdir(path, mode)) - return 1; - return -ERRNO_TO_ERROR(errno); -} - /** * Open a file and map it into memory. * @@ -227,7 +212,7 @@ out: * * \sa munmap(2), mmap_full_file(). */ -int para_munmap(void *start, size_t length) +int osl_munmap(void *start, size_t length) { int err; if (munmap(start, length) >= 0) diff --git a/fd.h b/fd.h index a01f920..0ca272d 100644 --- a/fd.h +++ b/fd.h @@ -8,8 +8,39 @@ int osl_open(const char *path, int flags, mode_t mode); int para_opendir(const char *dirname, DIR **dir, int *cwd); -int para_mkdir(const char *path, mode_t mode); int para_fchdir(int fd); int mmap_full_file(const char *filename, int open_mode, void **map, size_t *size, int *fd_ptr); -int para_munmap(void *start, size_t length); +int osl_munmap(void *start, size_t length); + +/** + * A wrapper for mkdir(2). + * + * \param path Name of the directory to create. + * \param mode The permissions to use. + * + * \return Standard. + */ +static inline int osl_mkdir(const char *path, mode_t mode) +{ + if (!mkdir(path, mode)) + return 1; + return -ERRNO_TO_ERROR(errno); +} + +/** + * A wrapper for rename(2). + * + * \param old_path The source path. + * \param new_path The destination path. + * + * \return Standard. + * + * \sa rename(2). + */ +_static_inline_ int osl_rename(const char *old_path, const char *new_path) +{ + if (rename(old_path, new_path) < 0) + return -ERRNO_TO_ERROR(errno); + return 1; +} diff --git a/osl.c b/osl.c index d41923f..0b3e88c 100644 --- a/osl.c +++ b/osl.c @@ -674,7 +674,7 @@ __export int osl_create_table(const struct osl_table_description *desc) if (cd->storage_type == OSL_NO_STORAGE) continue; if (!table_dir) { - ret = para_mkdir(desc->dir, 0777); + ret = osl_mkdir(desc->dir, 0777); if (ret < 0 && !is_errno(-ret, EEXIST)) goto out; table_dir = make_message("%s/%s", desc->dir, @@ -682,7 +682,7 @@ __export int osl_create_table(const struct osl_table_description *desc) ret = -ERRNO_TO_ERROR(ENOMEM); if (!table_dir) goto out; - ret = para_mkdir(table_dir, 0777); + ret = osl_mkdir(table_dir, 0777); if (ret < 0) goto out; } @@ -701,7 +701,7 @@ __export int osl_create_table(const struct osl_table_description *desc) continue; } /* DISK STORAGE */ - ret = para_mkdir(filename, 0777); + ret = osl_mkdir(filename, 0777); free(filename); if (ret < 0) goto out; @@ -744,7 +744,7 @@ static void unmap_column(struct osl_table *t, unsigned col_num) int ret; if (!map.data) return; - ret = para_munmap(map.data, map.size); + ret = osl_munmap(map.data, map.size); assert(ret > 0); map.data = NULL; } @@ -757,7 +757,7 @@ static void unmap_column(struct osl_table *t, unsigned col_num) * * \return Positive on success, negative on errors. * - * \sa map_table(), enum osl_close_flags, para_munmap(). + * \sa map_table(), enum osl_close_flags, osl_munmap(). */ int unmap_table(struct osl_table *t, enum osl_close_flags flags) { @@ -772,7 +772,7 @@ int unmap_table(struct osl_table *t, enum osl_close_flags flags) return -E_OSL_NOT_MAPPED; if (flags & OSL_MARK_CLEAN) mark_table_clean(t); - ret = para_munmap(t->index_map.data, t->index_map.size); + ret = osl_munmap(t->index_map.data, t->index_map.size); if (ret < 0) return ret; t->index_map.data = NULL; @@ -863,10 +863,10 @@ int map_table(struct osl_table *t, enum map_table_flags flags) err: /* unmap what is already mapped */ for (i--; i >= 0; i--) { struct osl_object map = t->columns[i].data_map; - para_munmap(map.data, map.size); + osl_munmap(map.data, map.size); map.data = NULL; } - para_munmap(t->index_map.data, t->index_map.size); + osl_munmap(t->index_map.data, t->index_map.size); t->index_map.data = NULL; return ret; } @@ -1252,7 +1252,7 @@ static int create_disk_storage_object_dir(const struct osl_table *t, dirname = disk_storage_dirname(t, col_num, ds_name); if (!dirname) return -ERRNO_TO_ERROR(ENOMEM); - ret = para_mkdir(dirname, 0777); + ret = osl_mkdir(dirname, 0777); free(dirname); if (ret < 0 && !is_errno(-ret, EEXIST)) return ret; @@ -1713,7 +1713,7 @@ static int rename_disk_storage_objects(struct osl_table *t, if (!old_filename || !new_filename) ret = -ERRNO_TO_ERROR(ENOMEM); else - ret = para_rename(old_filename, new_filename); + ret = osl_rename(old_filename, new_filename); free(old_filename); free(new_filename); if (ret < 0) @@ -1839,7 +1839,7 @@ __export int osl_open_disk_object(const struct osl_table *t, const struct osl_ro __export int osl_close_disk_object(struct osl_object *obj) { - return para_munmap(obj->data, obj->size); + return osl_munmap(obj->data, obj->size); } __export int osl_get_num_rows(const struct osl_table *t, unsigned *num_rows) diff --git a/osl_core.h b/osl_core.h index a6342f8..858743a 100644 --- a/osl_core.h +++ b/osl_core.h @@ -473,23 +473,6 @@ _static_inline_ char *disk_storage_name_of_hash(const struct osl_table *t, HASH_ return strdup(asc); } -/** - * A wrapper for rename(2). - * - * \param old_path The source path. - * \param new_path The destination path. - * - * \return Standard. - * - * \sa rename(2). - */ -_static_inline_ int para_rename(const char *old_path, const char *new_path) -{ - if (rename(old_path, new_path) < 0) - return -ERRNO_TO_ERROR(errno); - return 1; -} - /** * Iterate over each column of an initialized table. *