diff options
author | LAN-TW <lantw44@gmail.com> | 2013-11-29 14:06:55 +0800 |
---|---|---|
committer | LAN-TW <lantw44@gmail.com> | 2013-11-29 14:06:55 +0800 |
commit | 218d5b0040f5438b383b3541ba208d9b51d4b9dd (patch) | |
tree | b9514e92fe1abf2646b0e674590f20baa9e82211 | |
parent | 768d6832af5e333c888532e696a6a93145979687 (diff) | |
download | l4basic-218d5b0040f5438b383b3541ba208d9b51d4b9dd.tar.gz l4basic-218d5b0040f5438b383b3541ba208d9b51d4b9dd.tar.zst l4basic-218d5b0040f5438b383b3541ba208d9b51d4b9dd.zip |
Refactor build system and combine some files
-rw-r--r-- | .gitignore | 14 | ||||
-rw-r--r-- | Makefile | 21 | ||||
-rw-r--r-- | l4arg/Makefile | 24 | ||||
-rw-r--r-- | l4arg/qarg.c | 54 | ||||
-rw-r--r-- | l4bds/Makefile | 24 | ||||
-rw-r--r-- | l4darr/Makefile | 24 | ||||
-rw-r--r-- | l4darr/d1arrstr.c | 47 | ||||
-rw-r--r-- | src/Makefile | 67 | ||||
-rw-r--r-- | src/l4arg.c (renamed from l4arg/toargv.c) | 56 | ||||
-rw-r--r-- | src/l4arg.h (renamed from l4arg/l4arg.h) | 0 | ||||
-rw-r--r-- | src/l4array.c (renamed from l4darr/d1array.c) | 48 | ||||
-rw-r--r-- | src/l4array.h (renamed from l4darr/l4darr.h) | 21 | ||||
-rw-r--r-- | src/l4array2.c (renamed from l4darr/d2array.c) | 2 | ||||
-rw-r--r-- | src/l4array2.h | 25 | ||||
-rw-r--r-- | src/l4list.c (renamed from l4bds/list.c) | 3 | ||||
-rw-r--r-- | src/l4list.h (renamed from l4bds/l4bds.h) | 0 |
16 files changed, 218 insertions, 212 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..305b898 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +.deps +.libs +*~ +*.o +*.lo +*.a +*.la +*.so +*.tar +*.tar.* +*.swp +tags +cscope.out +\#*\# @@ -1,18 +1,13 @@ -.PHONY: all clean install uninstall +.PHONY: all clean install uninstall deinstall remove all: - $(MAKE) -C l4darr all - $(MAKE) -C l4bds all - $(MAKE) -C l4arg all + $(MAKE) -C src all clean: - $(MAKE) -C l4darr clean - $(MAKE) -C l4bds clean - $(MAKE) -C l4arg clean + $(MAKE) -C src clean install: - $(MAKE) -C l4darr install - $(MAKE) -C l4bds install - $(MAKE) -C l4arg install + $(MAKE) -C src install uninstall: - $(MAKE) -C l4darr uninstall - $(MAKE) -C l4bds uninstall - $(MAKE) -C l4arg uninstall + $(MAKE) -C src uninstall + +deinstall: uninstall +remove: uninstall diff --git a/l4arg/Makefile b/l4arg/Makefile deleted file mode 100644 index 0f2ffe3..0000000 --- a/l4arg/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -CC=cc -AR=ar -RM=rm -f -INSTALL=install -m 644 -LOCAL_CFLAGS=-g -CFLAGS=-Wall -I. -I../l4darr $(LOCAL_CFLAGS) -OBJ=toargv.o qarg.o -LIBFILE=libl4arg.a -DESTDIR=/ -PREFIX=/usr/local -LIBDIR=$(DESTDIR)/$(PREFIX)/lib - -.PHONY: all clean - -all: $(LIBFILE) -$(LIBFILE): $(OBJ) - $(AR) rcs $(LIBFILE) $(OBJ) -clean: - $(RM) $(LIBFILE) $(OBJ) -install: - mkdir -p $(LIBDIR) - $(INSTALL) $(LIBFILE) $(LIBDIR) -uninstall: - $(RM) $(LIBDIR)/$(LIBFILE) diff --git a/l4arg/qarg.c b/l4arg/qarg.c deleted file mode 100644 index 412967c..0000000 --- a/l4arg/qarg.c +++ /dev/null @@ -1,54 +0,0 @@ -#include <stdlib.h> -#include <string.h> -#include <l4arg.h> - -/* 為什麼叫做 qarg 呢?因為這是用來解析很像 QEMU 命令列參數的參數 */ - -L4QARG* l4qarg_parse(const char* str){ - char** pargv = l4arg_toargv(str, ",", "\"\'", "\\"); - if(pargv == NULL){ - return NULL; - } - int i, allc; - L4QARG* qargarr; - char* pos; - for(i=0; pargv[i]!=NULL; i++); - allc = i + 1; - qargarr = (L4QARG*) malloc(sizeof(L4QARG) * allc); - if(qargarr == NULL){ - l4arg_toargv_free(pargv); - return NULL; - } - for(i=0; pargv[i]!=NULL; i++){ - pos = strchr(pargv[i], '='); - if(pos == NULL){ - qargarr[i].arg_name = pargv[i]; - qargarr[i].arg_value = NULL; - }else{ - *pos = '\0'; - qargarr[i].arg_name = pargv[i]; - pos++; - qargarr[i].arg_value = (char*) malloc(strlen(pos)+1); - if(qargarr[i].arg_value == NULL){ - l4arg_toargv_free(pargv); - return NULL; - } - strcpy(qargarr[i].arg_value, pos); - } - } - free(pargv); - qargarr[i].arg_name = NULL; - qargarr[i].arg_value = NULL; - return qargarr; -} - -void l4qarg_free(L4QARG* qarg){ - int i; - for(i=0; !(qarg[i].arg_name == NULL && qarg[i].arg_value == NULL); i++){ - free(qarg[i].arg_name); - if(qarg[i].arg_value != NULL){ - free(qarg[i].arg_value); - } - } - free(qarg); -} diff --git a/l4bds/Makefile b/l4bds/Makefile deleted file mode 100644 index c4c2caa..0000000 --- a/l4bds/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -CC=cc -AR=ar -RM=rm -f -INSTALL=install -m 644 -LOCAL_CFLAGS=-g -CFLAGS=-Wall -I. $(LOCAL_CFLAGS) -OBJ=list.o -LIBFILE=libl4bds.a -DESTDIR=/ -PREFIX=/usr/local -LIBDIR=$(DESTDIR)/$(PREFIX)/lib - -.PHONY: all clean - -all: $(LIBFILE) -$(LIBFILE): $(OBJ) - $(AR) rcs $(LIBFILE) $(OBJ) -clean: - $(RM) $(LIBFILE) $(OBJ) -install: - mkdir -p $(LIBDIR) - $(INSTALL) -c $(LIBFILE) $(LIBDIR) -uninstall: - $(RM) $(LIBDIR)/$(LIBFILE) diff --git a/l4darr/Makefile b/l4darr/Makefile deleted file mode 100644 index 4593ccf..0000000 --- a/l4darr/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -CC=cc -AR=ar -RM=rm -f -INSTALL=install -m 644 -LOCAL_CFLAGS=-g -CFLAGS=-Wall -I. $(LOCAL_CFLAGS) -OBJ=d1array.o d1arrstr.o d2array.o -LIBFILE=libl4darr.a -DESTDIR=/ -PREFIX=/usr/local -LIBDIR=$(DESTDIR)/$(PREFIX)/lib - -.PHONY: all clean - -all: $(LIBFILE) -$(LIBFILE): $(OBJ) - $(AR) rcs $(LIBFILE) $(OBJ) -clean: - $(RM) $(LIBFILE) $(OBJ) -install: - mkdir -p $(LIBDIR) - $(INSTALL) -c $(LIBFILE) $(LIBDIR) -uninstall: - $(RM) $(LIBDIR)/$(LIBFILE) diff --git a/l4darr/d1arrstr.c b/l4darr/d1arrstr.c deleted file mode 100644 index 2c6e631..0000000 --- a/l4darr/d1arrstr.c +++ /dev/null @@ -1,47 +0,0 @@ -#include <string.h> -#include <l4darr.h> - -L4DA* l4da_dup(const L4DA* arr){ - L4DA* newarr = l4da_create_setmax( - l4da_itemsize(arr), l4da_getlen(arr), l4da_getmax(arr)); - if(newarr == NULL){ - return NULL; - } - memcpy(newarr->arr_data, arr->arr_data, - l4da_getlen(arr) * l4da_itemsize(arr)); - return newarr; -} - -int l4da_combine(L4DA* arr, const L4DA* att){ - if(l4da_itemsize(arr) != l4da_itemsize(att)){ - return -2; - } - if(l4da_setlen(arr, l4da_getlen(arr) + l4da_getlen(att)) < 0){ - return -1; - } - memcpy(l4da_vp(arr, l4da_getlen(arr)), att->arr_data, - l4da_getlen(att) * l4da_itemsize(att)); - return 0; -} - -L4DA* l4da_filereadline_delim(FILE* infile, int chr){ - L4DA* newarr = l4da_create(1, 0); - if(newarr == NULL){ - return NULL; - } - int c; - char towrite; - while((c = getc(infile)) != chr && !feof(infile)){ - towrite = c; - if(l4da_pushback(newarr, (void*)&towrite) < 0){ - l4da_free(newarr); - return NULL; - } - } - towrite = '\0'; - if(l4da_pushback(newarr, (void*)&towrite) < 0){ - l4da_free(newarr); - return NULL; - } - return newarr; -} diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 0000000..35de0e9 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,67 @@ +# Programs +HOST= +CC= $(HOST)c99 +AR= $(HOST)ar +RANLIB= $(HOST)ranlib +RM= rm -f +MKDIR= mkdir +MKDIR_P= $(MKDIR) -p +INSTALL= install -c -m 644 + +# User flags +CFLAGS= -g -O2 -pipe +LDFLAGS= + +# Internal flags +L4B_CFLAGS= -Wall -I. $(CFLAGS) +L4B_LDFLAGS= $(LDFLAGS) + +# Installation +DESTDIR= +PREFIX= /usr/local +LIBDIR= $(DESTDIR)$(PREFIX)/lib +INCLUDEDIR= $(DESTDIR)$(PREFIX)/include + +# Tasks definition +lib_LIBRARIES= libl4basic.a +libl4basic_a_OBJECTS= l4array.o l4array2.o l4list.o l4arg.o +libl4basic_a_HEADERS= $(libl4basic_a_OBJECTS:.o=.h) + +# Build dependencies +l4array_o_DEPENDS= +l4array2_o_DEPENDS= +l4list_o_DEPENDS= +l4arg_o_DEPENDS= l4array.o + +.POSIX: +.PHONY: all clean install install-HEADERS install-LIB \ + uninstall deinstall remove +.SUFFIXES: .c.o +.c.o: + $(CC) $(L4B_CFLAGS) -c $< -o $@ + +all: $(lib_LIBRARIES) +libl4basic.a: $(libl4basic_a_OBJECTS) + $(AR) rcs $@ $(libl4basic_a_OBJECTS) + $(RANLIB) $@ +l4array.o: l4array.c l4array.h $(l4array_o_DEPENDS) +l4array2.o: l4array2.c l4array2.h $(l4array2_o_DEPENDS) +l4list.o: l4list.c l4list.h $(l4list_o_DEPENDS) +l4arg.o: l4arg.c l4arg.h $(l4arg_o_DEPENDS) + +clean: + $(RM) $(lib_LIBRARIES) $(libl4basic_a_OBJECTS) + +install: all install-HEADERS install-LIB +install-LIB: + -$(MKDIR_P) $(LIBDIR) + $(INSTALL) $(lib_LIBRARIES) $(LIBDIR) +install-HEADERS: + -$(MKDIR_P) $(INCLUDEDIR) + $(INSTALL) $(libl4basic_a_HEADERS) $(INCLUDEDIR) + +deinstall: uninstall +remove: uninstall +uninstall: + for i in $(lib_LIBRARIES); do $(RM) $(LIBDIR)/$$i; done + for i in $(libl4basic_a_HEADERS); do $(RM) $(INCLUDEDIR)/$$i; done diff --git a/l4arg/toargv.c b/src/l4arg.c index 433ad1a..9908665 100644 --- a/l4arg/toargv.c +++ b/src/l4arg.c @@ -1,7 +1,8 @@ +#include "l4arg.h" +#include "l4array.h" + #include <string.h> #include <stdlib.h> -#include <l4arg.h> -#include <l4darr.h> /* 基本上優先順序是 escape -> quoting -> delimiter */ @@ -109,3 +110,54 @@ void l4arg_toargv_free(char** pargv){ } free(pargv); } + +/* 為什麼叫做 qarg 呢?因為這是用來解析很像 QEMU 命令列參數的參數 */ + +L4QARG* l4qarg_parse(const char* str){ + char** pargv = l4arg_toargv(str, ",", "\"\'", "\\"); + if(pargv == NULL){ + return NULL; + } + int i, allc; + L4QARG* qargarr; + char* pos; + for(i=0; pargv[i]!=NULL; i++); + allc = i + 1; + qargarr = (L4QARG*) malloc(sizeof(L4QARG) * allc); + if(qargarr == NULL){ + l4arg_toargv_free(pargv); + return NULL; + } + for(i=0; pargv[i]!=NULL; i++){ + pos = strchr(pargv[i], '='); + if(pos == NULL){ + qargarr[i].arg_name = pargv[i]; + qargarr[i].arg_value = NULL; + }else{ + *pos = '\0'; + qargarr[i].arg_name = pargv[i]; + pos++; + qargarr[i].arg_value = (char*) malloc(strlen(pos)+1); + if(qargarr[i].arg_value == NULL){ + l4arg_toargv_free(pargv); + return NULL; + } + strcpy(qargarr[i].arg_value, pos); + } + } + free(pargv); + qargarr[i].arg_name = NULL; + qargarr[i].arg_value = NULL; + return qargarr; +} + +void l4qarg_free(L4QARG* qarg){ + int i; + for(i=0; !(qarg[i].arg_name == NULL && qarg[i].arg_value == NULL); i++){ + free(qarg[i].arg_name); + if(qarg[i].arg_value != NULL){ + free(qarg[i].arg_value); + } + } + free(qarg); +} diff --git a/l4arg/l4arg.h b/src/l4arg.h index 68352c8..68352c8 100644 --- a/l4arg/l4arg.h +++ b/src/l4arg.h diff --git a/l4darr/d1array.c b/src/l4array.c index b14bbea..b57c021 100644 --- a/l4darr/d1array.c +++ b/src/l4array.c @@ -1,6 +1,7 @@ +#include "l4array.h" + #include <stdlib.h> #include <string.h> -#include <l4darr.h> L4DA* l4da_create_setmax(int itemsize, int len, int maxlen){ if(itemsize <= 0 || len < 0 || maxlen < len){ @@ -130,3 +131,48 @@ L4DA* l4da_make_struct(void* data, int itemsize, int len, int maxlen){ arr->arr_data = data; return arr; } + +L4DA* l4da_dup(const L4DA* arr){ + L4DA* newarr = l4da_create_setmax( + l4da_itemsize(arr), l4da_getlen(arr), l4da_getmax(arr)); + if(newarr == NULL){ + return NULL; + } + memcpy(newarr->arr_data, arr->arr_data, + l4da_getlen(arr) * l4da_itemsize(arr)); + return newarr; +} + +int l4da_combine(L4DA* arr, const L4DA* att){ + if(l4da_itemsize(arr) != l4da_itemsize(att)){ + return -2; + } + if(l4da_setlen(arr, l4da_getlen(arr) + l4da_getlen(att)) < 0){ + return -1; + } + memcpy(l4da_vp(arr, l4da_getlen(arr)), att->arr_data, + l4da_getlen(att) * l4da_itemsize(att)); + return 0; +} + +L4DA* l4da_filereadline_delim(FILE* infile, int chr){ + L4DA* newarr = l4da_create(1, 0); + if(newarr == NULL){ + return NULL; + } + int c; + char towrite; + while((c = getc(infile)) != chr && !feof(infile)){ + towrite = c; + if(l4da_pushback(newarr, (void*)&towrite) < 0){ + l4da_free(newarr); + return NULL; + } + } + towrite = '\0'; + if(l4da_pushback(newarr, (void*)&towrite) < 0){ + l4da_free(newarr); + return NULL; + } + return newarr; +} diff --git a/l4darr/l4darr.h b/src/l4array.h index 860f9b9..192f49d 100644 --- a/l4darr/l4darr.h +++ b/src/l4array.h @@ -40,25 +40,4 @@ int l4da_combine(L4DA*, const L4DA*); void* l4da_drop_struct(L4DA*); L4DA* l4da_make_struct(void*, int, int, int); -/*********** 二維陣列 (其實是用一維陣列來模擬,功能有限) ***********/ - -typedef struct l4lib_dyn_2darr{ - int arr_itemsize; /* 每個項目的大小 */ - int arr_lenx; /* 陣列 x 方向長度 */ - int arr_leny; /* 陣列 y 方向長度 */ - void* arr_data; /* 資料區 */ -} L4DA2 ; - -L4DA2* l4da2_create(int, int, int); -void l4da2_free(L4DA2*); -#define l4da2_getlenx(arr) ((arr)->arr_lenx) -#define l4da2_getleny(arr) ((arr)->arr_leny) -#define l4da2_itemsize(arr) ((arr)->arr_itemsize) -#define l4da2_data(arr) ((arr)->arr_data) -#define l4da2_v(arr, type, numx, numy) \ - (*(((type*)((arr)->arr_data))+((numx)*(l4da2_getleny(arr)))+(numy))) -#define l4da2_vp(arr, numx, numy) \ - ((void*)(((char*)((arr)->arr_data))+ \ - ((arr)->arr_itemsize)*((numx)*(l4da2_getleny(arr))+(numy)))) - #endif diff --git a/l4darr/d2array.c b/src/l4array2.c index c2d6e69..24d6db0 100644 --- a/l4darr/d2array.c +++ b/src/l4array2.c @@ -1,5 +1,5 @@ +#include "l4array2.h" #include <stdlib.h> -#include <l4darr.h> L4DA2* l4da2_create(int itemsize, int lenx, int leny){ if(lenx <= 0 || leny <= 0 || itemsize <= 0){ diff --git a/src/l4array2.h b/src/l4array2.h new file mode 100644 index 0000000..e10fc0b --- /dev/null +++ b/src/l4array2.h @@ -0,0 +1,25 @@ +#ifndef L4LIB_DYNAMIC_ARRAY_D2 +#define L4LIB_DYNAMIC_ARRAY_D2 + +/*********** 二維陣列 (其實是用一維陣列來模擬,功能有限) ***********/ + +typedef struct l4lib_dyn_2darr{ + int arr_itemsize; /* 每個項目的大小 */ + int arr_lenx; /* 陣列 x 方向長度 */ + int arr_leny; /* 陣列 y 方向長度 */ + void* arr_data; /* 資料區 */ +} L4DA2 ; + +L4DA2* l4da2_create(int, int, int); +void l4da2_free(L4DA2*); +#define l4da2_getlenx(arr) ((arr)->arr_lenx) +#define l4da2_getleny(arr) ((arr)->arr_leny) +#define l4da2_itemsize(arr) ((arr)->arr_itemsize) +#define l4da2_data(arr) ((arr)->arr_data) +#define l4da2_v(arr, type, numx, numy) \ + (*(((type*)((arr)->arr_data))+((numx)*(l4da2_getleny(arr)))+(numy))) +#define l4da2_vp(arr, numx, numy) \ + ((void*)(((char*)((arr)->arr_data))+ \ + ((arr)->arr_itemsize)*((numx)*(l4da2_getleny(arr))+(numy)))) + +#endif diff --git a/l4bds/list.c b/src/l4list.c index 09ec746..bcde31b 100644 --- a/l4bds/list.c +++ b/src/l4list.c @@ -1,6 +1,7 @@ +#include "l4list.h" + #include <stdlib.h> #include <string.h> -#include <l4bds.h> L4LL* l4ll_create(void){ L4LL* newlist = (L4LL*)malloc(sizeof(L4LL)); diff --git a/l4bds/l4bds.h b/src/l4list.h index 2ad7199..2ad7199 100644 --- a/l4bds/l4bds.h +++ b/src/l4list.h |