From d1857e8d77d5fb531f3cc93d683d9681af895ea6 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Sun, 15 May 2011 18:28:19 +0000 Subject: [PATCH] $(TOPDIR), make, scripts: Merged changes from V_1_1_31_6_POST_ACCEPTANCE --- CHANGES | 4 ++ Makefile | 6 +- VERSION | 2 +- make/debugger.mk | 45 +++++++++++-- make/defs-dev.mk | 5 +- make/defs-dist.mk | 7 +- make/defs.mk | 117 +++++++++++++++++++++++++++++++--- make/include.mk | 2 +- make/lib.mk | 6 +- make/lo.mk | 14 ++-- make/rules.mk | 6 +- make/run.mk | 48 ++++++++++---- make/topdir.mk | 36 ++++++++--- scripts/jw-build-functions.sh | 13 ++-- 14 files changed, 251 insertions(+), 60 deletions(-) diff --git a/CHANGES b/CHANGES index 80eccfa8..e658a77e 100644 --- a/CHANGES +++ b/CHANGES @@ -397,3 +397,7 @@ o merged changes from V_1_1_29_40_POST_ACCEPTANCE: Version 1.1.31.0 ---------------- o YAbstractFamilyMember: added support for garbage collector + +1.2.0-0 +------- +o merged changes from V_1_1_31_6_POST_ACCEPTANCE diff --git a/Makefile b/Makefile index 803d7cd9..50e8a1da 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,11 @@ SUBDIRS = inst/pre \ YMem YOptString \ gtopts \ lock sigsync shmem \ - contr cfgfile \ + contr/YRrBuf \ + contr/YRrLogBuf \ + contr/YStringTree \ + cfgfile \ + contr \ YLoadableObject \ msgfmt eloop statecheck \ YThread YEvent YCbContr \ diff --git a/VERSION b/VERSION index 99eda619..c11013ff 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.31-10-dev +1.2.0-0-dev diff --git a/make/debugger.mk b/make/debugger.mk index 4bf3af2f..f7844161 100644 --- a/make/debugger.mk +++ b/make/debugger.mk @@ -1,18 +1,51 @@ CORE_DUMPER = $(shell echo -e "quit" | gdb --core=$(CORE) 2>&1 | \ sed '/Core was generated/ !d; s/Core was generated by `//; s/ .*//' | xargs -r which) ifeq ($(CORE_DUMPER),) -CORE_DUMPER = $(EXE) +CORE_DUMPER = $(EXE_PATH) endif -PID = $(shell ps aux | sed "/$(EXE)/ !d; /sed/ d" | awk '{print $$2}') +PID = $(shell ps aux | sed "/$(notdir $(EXE_PATH))/ !d; /sed/ d" | awk '{print $$2}') all: -kdbg gdb ddd: - $@ $(CORE_DUMPER) $(firstword $(CORE)) +gdb ddd: +ifneq ($(CORE),) + $@ --core=$(firstword $(CORE)) --args $(CORE_DUMPER) $(EXE_ARGS) +else + $@ --args $(CORE_DUMPER) $(EXE_ARGS) +endif + +kdbg: + $@ $(CORE_DUMPER) $(firstword $(CORE)) -a "$(EXE_ARGS)" + +cgdb: +ifneq ($(CORE),) + $@ -- --core=$(firstword $(CORE)) --args $(CORE_DUMPER) $(EXE_ARGS) +else + $@ -- --args $(CORE_DUMPER) $(EXE_ARGS) +endif attach: - gdb ./$(EXE) -p $(PID) + gdb $(EXE_PATH) -p $(PID) attach-strace: - strace -f ./$(EXE) -p $(PID) + strace -f $(EXE_PATH) -p $(PID) + +report: + generate-coredump-report.sh -l + mkdir -p crashes + if ls *core*.txt.bz2* >/dev/null 2>&1; then mv *core*.txt.bz2 crashes/; fi + +view-report: + less `ls -rt crashes/*core*.txt.bz2 | tail -1` +localcore: + echo core.%h.%e.%p | sudo tee /proc/sys/kernel/core_pattern + +centralcore: + echo /var/cores/core.%h.%e.%p | sudo tee /proc/sys/kernel/core_pattern + +coreclean: centralcore-clean + +centralcore-clean: + rm -f /var/cores/core* core* + diff --git a/make/defs-dev.mk b/make/defs-dev.mk index 66e84971..f0f853e9 100644 --- a/make/defs-dev.mk +++ b/make/defs-dev.mk @@ -5,14 +5,15 @@ # -- files #CONTRIBDIR ?= $(TOPDIR)/contrib -PREFIX ?= $(ENV_PREFIX)$(HOME)/dat/test/$(FLAVOUR_PREFIX)$(PROJECT)-$(VERSION) +PROJECT_DIRNAME ?= $(PROJECT) +PREFIX ?= $(ENV_PREFIX)$(HOME)/dat/test/$(FLAVOUR_PREFIX)$(PROJECT_DIRNAME)-$(VERSION) VAR_PREFIX ?= $(PREFIX)/var DOC_PREFIX ?= $(PREFIX)/doc/$(PROJECT) EXE_PREFIX ?= $(PREFIX) INIT_PREFIX ?= $(EXE_PREFIX) HTDOCS_PREFIX ?= $(ENV_PREFIX)$(HOME)/srv/www/htdocs SYSCFG_DIR ?= $(PREFIX)/sysconfig -CONFIG_DIR ?= $(ENV_PREFIX)$(HOME)/etc/$(FLAVOUR_PATH_PREFIX)$(PROJECT) +CONFIG_DIR ?= $(ENV_PREFIX)$(HOME)/etc/$(FLAVOUR_PATH_PREFIX)$(PROJECT_DIRNAME) LD_CONF_DIR ?= $(ENV_PREFIX)$(HOME)/etc/ld.so.conf.d LOGROT_DIR ?= $(ENV_PREFIX)$(HOME)/etc/logrotate.d RSYSLOG_DIR ?= $(ENV_PREFIX)$(HOME)/etc/rsyslog.d diff --git a/make/defs-dist.mk b/make/defs-dist.mk index 37c9f6b5..93fd6f6f 100644 --- a/make/defs-dist.mk +++ b/make/defs-dist.mk @@ -5,14 +5,15 @@ # -- files #CONTRIBDIR ?= $(TOPDIR)/contrib -PREFIX ?= $(ENV_PREFIX)/opt/$(FLAVOUR_PATH_PREFIX)$(PROJECT) +PROJECT_DIRNAME ?= $(PROJECT) +PREFIX ?= $(ENV_PREFIX)/opt/$(FLAVOUR_PATH_PREFIX)$(PROJECT_DIRNAME) VAR_PREFIX ?= $(ENV_PREFIX)/var/$(FLAVOUR_PATH_PREFIX)opt -DOC_PREFIX ?= $(ENV_PREFIX)/usr/share/doc/packages/$(FLAVOUR_PREFIX)$(PROJECT) +DOC_PREFIX ?= $(ENV_PREFIX)/usr/share/doc/packages/$(FLAVOUR_PREFIX)$(PROJECT_DIRNAME) EXE_PREFIX ?= $(PREFIX) INIT_PREFIX ?= $(ENV_PREFIX)/etc$(FLAVOUR_PATH_SUFFIX) HTDOCS_PREFIX ?= $(ENV_PREFIX)/srv/www/htdocs SYSCFG_DIR ?= $(ENV_PREFIX)/etc/$(FLAVOUR_PATH_PREFIX)sysconfig -CONFIG_DIR ?= $(ENV_PREFIX)/etc/opt/$(FLAVOUR_PATH_PREFIX)$(PROJECT) +CONFIG_DIR ?= $(ENV_PREFIX)/etc/opt/$(FLAVOUR_PATH_PREFIX)$(PROJECT_DIRNAME) LD_CONF_DIR ?= $(ENV_PREFIX)/etc/ld.so.conf.d LOGROT_DIR ?= $(ENV_PREFIX)/etc/logrotate.d RSYSLOG_DIR ?= $(ENV_PREFIX)/etc/rsyslog.d diff --git a/make/defs.mk b/make/defs.mk index 6d106c24..0e831fae 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -111,10 +111,15 @@ else endif endif -CFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Wno-unused-value -fexceptions -CPPFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Wno-unused-value -Wno-deprecated +CFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Wno-unused-value -fexceptions -DPROJECT_STR=\"$(PROJECT)\" +CPPFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Wno-unused-value -Wno-deprecated -DPROJECT_STR=\"$(PROJECT)\" LDFLAGS += -Wall +ifneq ($(LOG_QUAL_PREFIX),) +PROJECT_CFLAGS += -DKEEP_FILES_OPEN -DLOG_QUAL_PREFIX=\"$(LOG_QUAL_PREFIX)\" +PROJECT_CPPFLAGS += -DKEEP_FILES_OPEN -DLOG_QUAL_PREFIX=\"$(LOG_QUAL_PREFIX)\" +endif + ifeq ($(CATCH_ONLY_YERROR),true) CFLAGS += -DCATCH_ONLY_YERROR CPPFLAGS += -DCATCH_ONLY_YERROR @@ -185,7 +190,7 @@ ALL_H += $(LOCAL_H) $(PREREQ_H) SRC_ALL_CPP += $(LOCAL_C) $(LOCAL_CPP) $(LOCAL_H) SRC_C += $(filter %.c, $(SRC_ALL_CPP)) SRC_CPP += $(filter %.cc %.cpp %.C, $(SRC_ALL_CPP)) -OBJ += $(patsubst %.cpp,%.o,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.cc, $(SRC_ALL_CPP))))) +OBJ += $(patsubst %.C,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.cc %.C, $(SRC_ALL_CPP)))))) OBJ += $(patsubst %.S,%.o,$(SFILES)) PREREQ_DIR += $(addprefix $(MODDIR)/,$(LOCAL_PREREQ)) @@ -217,7 +222,7 @@ UPLOAD_URL_RPM_SRC = rsync_ssh://ftp.jannet.de:/home/ftp/dat/pub/packages/rp PUBLIC_PATH_DEVEL_DOC = /proj/devel-docs UPLOAD_URL_DEVEL_DOC = rsync_ssh://root@feitnix.jannet.de:/srv/www/htdocs/jannet.de_443/$(PUBLIC_PATH_DEVEL_DOC) -IMAGES += $(wildcard *.png *.jpg *.bmp) +IMAGES += $(wildcard *.png *.jpg *.bmp *.gif) # -- standard dirs and files for build and install @@ -692,15 +697,19 @@ ifeq ($(USE_STACK_CHECK),true) endif ifeq ($(USE_COMPILER_DEBUG_OPTS),true) - CFLAGS += -g3 - CPPFLAGS += -g3 - LDFLAGS += -g3 + CFLAGS += -g3 -ggdb + CPPFLAGS += -g3 -ggdb + LDFLAGS += -g3 -ggdb endif ifeq ($(USE_COMPILER_OPTIMIZATION_OPTS),true) CFLAGS += -funroll-loops -O2 CPPFLAGS += -funroll-loops -O2 else + NO_OPT_FLAGS = \ + -fno-inline-functions-called-once \ + -fno-tree-loop-optimize + _NO_OPT_FLAGS = \ -O0 \ -fno-implicit-inline-templates \ @@ -735,6 +744,75 @@ endif # -- use of supplementary libraries +ifeq ($(USE_JUX2),true) +JUX2_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/jux2 /opt/$(FLAVOUR_PATH_PREFIX)jux2)) +JUX2_VERSION = $(call version,$(JUX2_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)jux2-run = $(JUX2_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)jux2-devel = $(JUX2_VERSION) +USE_YTOOLS = true +USE_FEEDFS = true +USE_FEEDFS_OBJECTS = true +USE_FEEDFS_UTILS = true +USE_BTOOLS = true +USE_JUX = true +INCLUDE += -I$(JUX2_DIR)/include +LIBFLAGS += -L$(JUX2_DIR)/lib -ljux2 +EXE_SEARCH_PATH += $(JUX2_DIR)/bin +endif + +ifeq ($(USE_JUX),true) +JUX_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/jux /opt/$(FLAVOUR_PATH_PREFIX)jux)) +JUX_VERSION = $(call version,$(JUX_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)jux-run = $(JUX_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)jux-devel = $(JUX_VERSION) +USE_YTOOLS = true +USE_FEEDFS = true +USE_FEEDFS_OBJECTS = true +USE_FEEDFS_UTILS = true +USE_FEEDFS_NET = true +USE_FEEDFS_LOCAL = true +USE_BTOOLS = true +USE_JUX_SHARED = true +INCLUDE += -I$(JUX_DIR)/include +LIBFLAGS += -L$(JUX_DIR)/lib -ljux +EXE_SEARCH_PATH += $(JUX_DIR)/bin +endif + +ifeq ($(USE_JUX_CLIENT_JAVA),true) +JUX_CLIENT_JAVA_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/jux-client-java /opt/$(FLAVOUR_PATH_PREFIX)jux-client-java)) +JUX_CLIENT_JAVA_VERSION = $(call version,$(JUX_CLIENT_JAVA_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)jux-client-java-run = $(JUX_CLIENT_JAVA_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)jux-client-java-devel = $(JUX_CLIENT_JAVA_VERSION) +USE_JUX_CLIENT = true +LIBFLAGS += -L$(JUX_CLIENT_JAVA_DIR)/lib -ljux-client-java +endif + +ifeq ($(USE_JUX_CLIENT),true) +JUX_CLIENT_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/jux-client /opt/$(FLAVOUR_PATH_PREFIX)jux-client)) +JUX_CLIENT_VERSION = $(call version,$(JUX_CLIENT_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)jux-client-run = $(JUX_CLIENT_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)jux-client-devel = $(JUX_CLIENT_VERSION) +USE_FEEDFS_NET = true +USE_JUX_SHARED = true +INCLUDE += -I$(JUX_CLIENT_DIR)/include +LIBFLAGS += -L$(JUX_CLIENT_DIR)/lib -ljux-client +EXE_SEARCH_PATH += $(JUX_CLIENT_DIR)/bin +endif + +ifeq ($(USE_JUX_SHARED),true) +JUX_SHARED_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/jux-shared /opt/$(FLAVOUR_PATH_PREFIX)jux-shared)) +JUX_SHARED_VERSION = $(call version,$(JUX_SHARED_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)jux-shared-run = $(JUX_SHARED_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)jux-shared-devel = $(JUX_SHARED_VERSION) +USE_YTOOLS = true +USE_FEEDFS = true +USE_FEEDFS_OBJECTS = true +USE_FEEDFS_UTILS = true +USE_BTOOLS = true +INCLUDE += -I$(JUX_SHARED_DIR)/include +LIBFLAGS += -L$(JUX_SHARED_DIR)/lib -ljux-shared +endif + ifeq ($(USE_CCASFS),true) CCASFS_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/dspc/src/ccasfs /opt/$(FLAVOUR_PATH_PREFIX)dspider/ccasfs)) CCASFS_VERSION = $(call version,$(CCASFS_DIR)) @@ -818,8 +896,23 @@ LIBFLAGS += -L$(FEEDFS_QT_DIR)/lib -lfeedfs-qt EXE_SEARCH_PATH += $(FEEDFS_QT_DIR)/bin endif +ifeq ($(USE_FEEDFS_WT),true) +FEEDFS_WT_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/feedfs-wt /opt/$(FLAVOUR_PATH_PREFIX)feedfs-wt)) +FEEDFS_WT_VERSION = $(call version,$(FEEDFS_WT_DIR)) +RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)feedfs-wt-run = $(FEEDFS_WT_VERSION) +RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)feedfs-wt-devel = $(FEEDFS_WT_VERSION) +USE_FEEDFS_UTILS = true +USE_FEEDFS = true +USE_YTOOLS = true +USE_FEEDFS_GUI = true +USE_WT_JANNET = true +INCLUDE += -I$(FEEDFS_WT_DIR)/include +LIBFLAGS += -L$(FEEDFS_WT_DIR)/lib -lfeedfs-wt +EXE_SEARCH_PATH += $(FEEDFS_WT_DIR)/bin +endif + ifeq ($(USE_FEEDFS_GUI),true) -FEEDFS_GUI_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/feedfs-gui /opt/$(FLAVOUR_PATH_PREFIX)feedfs-gui)) +FEEDFS_GUI_DIR ?= $(firstword $(wildcard $(CVS_PROJ_DIR)/feedfs-gui /opt/$(FLAVOUR_PATH_PREFIX)feedfs-gui)) FEEDFS_GUI_VERSION = $(call version,$(FEEDFS_GUI_DIR)) RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)feedfs-gui-run = $(FEEDFS_GUI_VERSION) RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)feedfs-gui-devel = $(FEEDFS_GUI_VERSION) @@ -877,6 +970,7 @@ RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)feedfs-net-devel = $(FEEDFS_NET_VE USE_FEEDFS_OBJECTS = true USE_FEEDFS_UTILS = true USE_XCHANGE = true +USE_FEEDFS_FMEMFS = true USE_YTOOLS = true INCLUDE += -I$(FEEDFS_NET_DIR)/include LIBFLAGS += -L$(FEEDFS_NET_DIR)/lib -lfeedfs-net @@ -933,7 +1027,7 @@ EXE_SEARCH_PATH += $(FEEDFS_SYSLOG_DIR)/bin endif ifeq ($(USE_FEEDFS_OBJECTS),true) -FEEDFS_OBJECTS_DIR = $(firstword $(wildcard $(CVS_PROJ_DIR)/feedfs-objects /opt/$(FLAVOUR_PATH_PREFIX)feedfs-objects)) +FEEDFS_OBJECTS_DIR ?= $(firstword $(wildcard $(CVS_PROJ_DIR)/feedfs-objects /opt/$(FLAVOUR_PATH_PREFIX)feedfs-objects)) FEEDFS_OBJECTS_VERSION = $(call version,$(FEEDFS_OBJECTS_DIR)) RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)feedfs-objects-run = $(FEEDFS_OBJECTS_VERSION) RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)feedfs-objects-devel = $(FEEDFS_OBJECTS_VERSION) @@ -1079,7 +1173,6 @@ RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)wt-jannet-run = $(WT_JANNET_VERSIO RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)wt-jannet-devel = $(WT_JANNET_VERSION) USE_FEEDFS = true INCLUDE += -I$(WT_JANNET_DIR)/include -LIBFLAGS += -L$(WT_JANNET_DIR)/lib -lwt-jannet LD_LIB_PATH += $(WT_JANNET_DIR)/lib EXE_SEARCH_PATH += $(WT_JANNET_DIR)/bin endif @@ -1159,6 +1252,10 @@ ifeq ($(USE_GLIB),true) endif endif +ifeq ($(USE_WT),true) +LIBFLAGS += -L$(WT_JANNET_DIR)/lib -lwt-jannet -lwt -lwtext -lwthttp -lwtfcgi +endif + CFLAGS += $(LOCAL_CFLAGS) $(PROJECT_CFLAGS) $(INCLUDE) CPPFLAGS += $(LOCAL_CPPFLAGS) $(PROJECT_CPPFLAGS) $(INCLUDE) LDFLAGS += $(LOCAL_LDFLAGS) $(PROJECTLIB_LDFLAGS) $(PROJECT_LDFLAGS) $(LPPFLAGS) $(LIBFLAGS) diff --git a/make/include.mk b/make/include.mk index c14a2d95..909204b1 100644 --- a/make/include.mk +++ b/make/include.mk @@ -22,7 +22,7 @@ project-header: $(PROJ_H) # rules clean.include: - rm -rf *.h *~ .*.swp *.done $(PROJ_H) + rm -rf *.h *~ .*.swp *.done $(PROJ_H) $(HDRDIR_SCOPE_SUFFIX) $(PROJ_H): $(filter-out $(PROJ_H) $(PROJECT)/$(PROJ_H),$(wildcard *.h $(PROJECT)/*.h)) echo "#ifndef _$(PROJECT_CAPNAME)_H" > $@.tmp diff --git a/make/lib.mk b/make/lib.mk index 28b0632a..b6f33f5c 100644 --- a/make/lib.mk +++ b/make/lib.mk @@ -6,7 +6,7 @@ include $(MODDIR)/make/defs.mk include $(MODDIR)/make/rules.mk -all: $(LD_CONF) +all: ifeq ($(USE_PROJECT_LIB),false) ifeq ($(TARGET),mingw) SHOBJS += $(wildcard *.dll) @@ -14,9 +14,9 @@ ifeq ($(USE_PROJECT_LIB),false) SHOBJS += $(wildcard *.so) endif all: -install: $(INSTALLED_SHOBJS) install_LD_CONF +install: else -all: $(LIB_SO) $(LINKS_SO) $(MSVCPP_IMPLIB) $(STRIP_DONE) +all: $(LD_CONF) $(LIB_SO) $(LINKS_SO) $(MSVCPP_IMPLIB) $(STRIP_DONE) install: install_LIB install_LD_CONF endif clean: libclean local_libclean clean.ld-conf diff --git a/make/lo.mk b/make/lo.mk index 3a323a1c..9fc90baf 100644 --- a/make/lo.mk +++ b/make/lo.mk @@ -1,6 +1,7 @@ # === change this > TOOLS_DIR ?= $(TOPDIR)/tools CPP_PREFIX ?= YLo +CPP_SUFFIX ?= SO_PREFIX ?= lo_ LOADABLE_OBJ_HOOK ?= LOADABLE_OBJECT_HOOK # === change this < @@ -8,7 +9,7 @@ LOADABLE_OBJ_HOOK ?= LOADABLE_OBJECT_HOOK include $(MODDIR)/make/defs.mk .PRECIOUS: %.cpp -LOADABLE_OBJS_BASE = $(patsubst $(CPP_PREFIX)%,%,$(basename $(notdir $(wildcard $(TOOLS_DIR)/$(CPP_PREFIX)*.h)))) +LOADABLE_OBJS_BASE = $(patsubst %$(CPP_SUFFIX),%,$(patsubst $(CPP_PREFIX)%,%,$(basename $(notdir $(wildcard $(TOOLS_DIR)/$(CPP_PREFIX)*$(CPP_SUFFIX).h))))) LOADABLE_OBJS = $(filter-out $(LOADABLE_OBJ_IGNORE),$(LOADABLE_OBJS_BASE)) LOADABLE_OBJS_CPP = $(patsubst %,%.cpp,$(LOADABLE_OBJS)) LOADABLE_OBJS_O = $(patsubst %,%.o,$(LOADABLE_OBJS)) @@ -34,16 +35,19 @@ all: $(LOADABLE_OBJ_LIBS) $(BUILD_LOADABLE_OBJ_LIBS) install: $(INSTALLED_LOADABLE_OBJ_LIBS) clean: clean.lo -clean.lo: profclean - rm -f $(filter-out $(CPP_PREFIX)%.cpp,$(wildcard *.o *.cpp *.so *.done *.dll $(OTHER_LIB))) +clean.generated: + rm -f $(patsubst $(CPP_PREFIX)%$(CPP_SUFFIX),%,$(notdir $(wildcard $(TOOLS_DIR)/$(CPP_PREFIX)*$(CPP_SUFFIX).cpp))) + +clean.lo: profclean clean.generated + rm -f $(wildcard *.o *.so *.done *.dll $(OTHER_LIB)) $(SO_PREFIX)%.so $(SO_PREFIX)%.dll: %.o $(OTHER_LIB) $(CPP) $< -L. $(OTHER_LIB_LDFLAGS) -shared $(LDFLAGS) -o $@ -%.cpp: $(TOOLS_DIR)/$(CPP_PREFIX)%.h +%.cpp: $(TOOLS_DIR)/$(CPP_PREFIX)%$(CPP_SUFFIX).h echo "#include \"$<\"" > $@.tmp if [ "$(LO_NAMESPACE)" ]; then echo "using namespace $(LO_NAMESPACE);" >> $@.tmp; fi - echo "$(LOADABLE_OBJ_HOOK)($(CPP_PREFIX)$*);" >> $@.tmp + echo "$(LOADABLE_OBJ_HOOK)($(CPP_PREFIX)$*$(CPP_SUFFIX));" >> $@.tmp mv $@.tmp $@ $(OTHER_LIB)(%.o): %.o diff --git a/make/rules.mk b/make/rules.mk index 59f41531..a5ec4e0c 100644 --- a/make/rules.mk +++ b/make/rules.mk @@ -56,7 +56,7 @@ rccclean: rm -rf $(RCC_CPP) textclean: doneclean - rm -rf *~ .*~ .*.swp *.rep \#*\# .kdbgrc.* .\#* + rm -rf *~ .*~ .*.swp *.rep \#*\# .kdbgrc.* .\#* .exrc allclean: rm -rf $(ALL) $(LOCAL_TARGETS) @@ -166,9 +166,9 @@ ifneq ($(wildcard *.so),) @echo "======= libraries:" @for o in *.so; do echo "------- $$o"; ldd $$o; done endif -ifneq ($(EXE),) +ifneq ($(EXE_PATH),) @echo "======= executables:" - @for o in $(EXE); do echo "------- $$o"; ldd $$o; done + @for o in $(EXE_PATH); do echo "------- $$o"; ldd $$o; done endif endif diff --git a/make/run.mk b/make/run.mk index c0cf1bdf..25bc889d 100644 --- a/make/run.mk +++ b/make/run.mk @@ -19,42 +19,64 @@ include $(MODDIR)/make/rules.mk include $(MODDIR)/make/ldlibpath.mk include $(MODDIR)/make/debugger.mk +EXE_PATH ?= ./$(EXE) + all: install: valgrind: rm -f $(CORE) - valgrind $(VALGRIND_OPTS) ./$(EXE) $(EXE_ARGS) + valgrind $(VALGRIND_OPTS) $(EXE_PATH) $(EXE_ARGS) callgrind: rm -f $(CORE) - valgrind --tool=callgrind $(VALGRIND_OPTS) ./$(EXE) $(EXE_ARGS) + valgrind --tool=callgrind $(VALGRIND_OPTS) $(EXE_PATH) $(EXE_ARGS) ifeq ($(TARGET),mingw) -run test: - @echo "wine $(EXE) $(EXE_ARGS)" +run test: all + @echo "wine $(EXE_PATH) $(EXE_ARGS)" @echo -e "set PATH=%PATH;$(DLL_PATH)\n" \ - "$(EXE) $(EXE_ARGS)" | wine cmd + "$(EXE_PATH) $(EXE_ARGS)" | wine cmd + +start: all + @echo "wine $(EXE_PATH) $(EXE_ARGS)" + @echo -e "set PATH=%PATH;$(DLL_PATH)\n" \ + "$(EXE_PATH) $(EXE_ARGS)" | wine cmd & clean: winrunclean winrunclean: rm -f start.bat else -run test: +run test: all rm -f $(CORE) - ./$(EXE) $(EXE_ARGS) + $(EXE_PATH) $(EXE_ARGS) +start: all + rm -f $(CORE) + $(EXE_PATH) $(EXE_ARGS) & + +# unfortunately iwatch only supports one directory :-( +autorun: + make run & + iwatch -e close_write -c "$(HOME)/bin/run-once.sh make restart" \ + $(BUILD_LIBDIR) + +wait-stop: + while /sbin/checkproc $(notdir $(EXE_PATH)); do sleep 1; done + +restart: stop wait-stop all start + endif stop: - killall ./$(EXE) + if /sbin/checkproc $(notdir $(EXE_PATH)); then killall $(notdir $(EXE_PATH)); fi kill: - killall -9 ./$(EXE) + killall -9 $(notdir $(EXE_PATH)) abort: - killall -6 ./$(EXE) + killall -6 $(notdir $(EXE_PATH)) -strace: $(EXE) $(EXE_BIN) - strace -f ./$(EXE) $(EXE_ARGS) +strace: $(EXE_PATH) $(EXE_BIN) + strace -f $(EXE_PATH) $(EXE_ARGS) kcg: kcachegrind callgrind.* @@ -63,6 +85,6 @@ clean: runclean localclean start.bat: echo "set PATH=%PATH;$(DLL_PATH)" > $@.tmp - echo "$(EXE) $(EXE_ARGS)" >> $@.tmp + echo "$(EXE_PATH) $(EXE_ARGS)" >> $@.tmp mv $@.tmp $@ diff --git a/make/topdir.mk b/make/topdir.mk index 3a00e1ba..543d49b6 100644 --- a/make/topdir.mk +++ b/make/topdir.mk @@ -4,7 +4,7 @@ clean: topdir.clean config: SUBDIRS ?= $(wildcard inst/pre make scripts tools src include lib bin \ - util plugins conf config cfg doc test inst/post) + util plugins conf config cfg images doc test inst/post) ifneq ($(wildcard $(TOPDIR)/make/defs.mk),) include $(TOPDIR)/make/defs.mk @@ -50,15 +50,35 @@ do-install-links: find lib -name '*.so' -o -name '*.so.*' -o -name '*.a' -o -name '*.dll' | \ sed 's%^\./%%' | \ while read f; do \ - cd $(INSTALL_LIBDIR); \ - echo " sudo ln -sf $$cwd/$$f" ; \ - sudo ln -sf $$cwd/$$f; \ + cd $(INSTALL_LIBDIR) && { \ + echo " sudo ln -sf $$cwd/$$f" ; \ + sudo ln -sf $$cwd/$$f; \ + }; \ done; \ echo "o in $(INSTALL_EXEDIR):" ;\ find bin -type f -a -perm -u+x | \ sed 's%^\./%%' | \ while read f; do \ - cd $(INSTALL_EXEDIR); \ - echo " sudo ln -sf $$cwd/$$f" ; \ - sudo ln -sf $$cwd/$$f; \ - done + cd $(INSTALL_EXEDIR) && { \ + echo " sudo ln -sf $$cwd/$$f" ; \ + sudo ln -sf $$cwd/$$f; \ + }; \ + done ;\ + echo "o in $(INSTALL_HDRDIR):" ;\ + find include -name '*.h' | \ + sed 's%^\./%%' | \ + while read f; do \ + cd $(INSTALL_HDRDIR) && { \ + echo " sudo ln -sf $$cwd/$$f" ; \ + sudo ln -sf $$cwd/$$f; \ + }; \ + done; \ + echo "o in $(INSTALL_MAKEDIR):" ;\ + find make -name '*.mk' | \ + sed 's%^\./%%' | \ + while read f; do \ + cd $(INSTALL_MAKEDIR) && { \ + echo " sudo ln -sf $$cwd/$$f" ; \ + sudo ln -sf $$cwd/$$f; \ + }; \ + done; \ diff --git a/scripts/jw-build-functions.sh b/scripts/jw-build-functions.sh index 642a41b8..65937725 100644 --- a/scripts/jw-build-functions.sh +++ b/scripts/jw-build-functions.sh @@ -84,6 +84,11 @@ _ytools_source_section() eval `_ytools_cat_section $* | _ytools_format_config` } +_uniq() +{ + sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P' +} + # -- exported utilities ytools_log_err() { @@ -306,12 +311,12 @@ ytools_config_sections() sed " /^[ ]*\[$o_section\.\(.*\)\]/ !d s/^[ ]*\[$o_section\.\(.*\)\].*/\1/ - " $o_file 2>/dev/null | sort -u + " $o_file 2>/dev/null | _uniq else sed " /^[ ]*\[\(.*\)\]/ !d s/^[ ]*\[\(.*\)\].*/\1/ - " $o_file 2>/dev/null | sort -u + " $o_file 2>/dev/null | _uniq fi else @@ -320,12 +325,12 @@ ytools_config_sections() sed " /^[ ]*\[$o_section\.\([^.]*\)\]/ !d s/^[ ]*\[$o_section\.\([^.]*\)\].*/\1/ - " $o_file 2>/dev/null | sort -u + " $o_file 2>/dev/null | _uniq else sed " /^[ ]*\[\([^.]*\)\]/ !d s/^[ ]*\[\([^.]*\)\].*/\1/ - " $o_file 2>/dev/null | sort -u + " $o_file 2>/dev/null | _uniq fi fi