make, scripts: Merged changes from V_1_2_0_6_JAN

This commit is contained in:
Jan Lindemann 2011-06-14 20:14:59 +00:00 committed by Jan Lindemann
commit 7a50ef5bd3
4 changed files with 791 additions and 13 deletions

View file

@ -185,7 +185,7 @@ LOCAL_C += $(wildcard *.c)
LOCAL_CPP += $(wildcard *.cc *.cpp *.C) LOCAL_CPP += $(wildcard *.cc *.cpp *.C)
LOCAL_H += $(wildcard *.h *.H) LOCAL_H += $(wildcard *.h *.H)
SFILES += $(wildcard *.S) SFILES += $(wildcard *.S)
PREREQ_H += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.h)) #PREREQ_H += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.h))
ALL_H += $(LOCAL_H) $(PREREQ_H) ALL_H += $(LOCAL_H) $(PREREQ_H)
SRC_ALL_CPP += $(LOCAL_C) $(LOCAL_CPP) $(LOCAL_H) SRC_ALL_CPP += $(LOCAL_C) $(LOCAL_CPP) $(LOCAL_H)
SRC_C += $(filter %.c, $(SRC_ALL_CPP)) SRC_C += $(filter %.c, $(SRC_ALL_CPP))
@ -193,12 +193,12 @@ SRC_CPP += $(filter %.cc %.cpp %.C, $(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 %.C,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.cc %.C, $(SRC_ALL_CPP))))))
OBJ += $(patsubst %.S,%.o,$(SFILES)) OBJ += $(patsubst %.S,%.o,$(SFILES))
PREREQ_DIR += $(addprefix $(MODDIR)/,$(LOCAL_PREREQ)) #PREREQ_DIR += $(addprefix $(MODDIR)/,$(LOCAL_PREREQ))
PREREQ_DONE += $(addsuffix /all.done,$(PREREQ_DIR)) #PREREQ_DONE += $(addsuffix /all.done,$(PREREQ_DIR))
PREREQ_C += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) #PREREQ_C += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c))
PREREQ_CPP += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) \ #PREREQ_CPP += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) \
$(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.cpp)) # $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.cpp))
PREREQ_CSRC += $(PREREQ_H) $(PREREQ_C) $(PREREQ_CPP) #PREREQ_CSRC += $(PREREQ_H) $(PREREQ_C) $(PREREQ_CPP)
CONTRIB_MOD += $(addprefix contrib/,$(CONTRIB_LIBS)) CONTRIB_MOD += $(addprefix contrib/,$(CONTRIB_LIBS))
REQUIRED := $(CONTRIB_MOD) $(REQUIRED) REQUIRED := $(CONTRIB_MOD) $(REQUIRED)
@ -626,8 +626,8 @@ ifeq ($(USE_MPATROL),true)
endif endif
ifeq ($(USE_VALGRIND),true) ifeq ($(USE_VALGRIND),true)
CFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_ #CFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_
CPPFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_ #CPPFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_
# LDFLAGS += # LDFLAGS +=
endif endif
@ -708,7 +708,10 @@ ifeq ($(USE_COMPILER_OPTIMIZATION_OPTS),true)
else else
NO_OPT_FLAGS = \ NO_OPT_FLAGS = \
-fno-inline-functions-called-once \ -fno-inline-functions-called-once \
-fno-tree-loop-optimize -fno-tree-loop-optimize \
-fno-early-inlining
# -fconserve-stack
_NO_OPT_FLAGS = \ _NO_OPT_FLAGS = \
-O0 \ -O0 \
@ -758,6 +761,7 @@ USE_JUX = true
INCLUDE += -I$(JUX2_DIR)/include INCLUDE += -I$(JUX2_DIR)/include
LIBFLAGS += -L$(JUX2_DIR)/lib -ljux2 LIBFLAGS += -L$(JUX2_DIR)/lib -ljux2
EXE_SEARCH_PATH += $(JUX2_DIR)/bin EXE_SEARCH_PATH += $(JUX2_DIR)/bin
PREREQ += JUX2
endif endif
ifeq ($(USE_JUX),true) ifeq ($(USE_JUX),true)
@ -776,6 +780,7 @@ USE_JUX_SHARED = true
INCLUDE += -I$(JUX_DIR)/include INCLUDE += -I$(JUX_DIR)/include
LIBFLAGS += -L$(JUX_DIR)/lib -ljux LIBFLAGS += -L$(JUX_DIR)/lib -ljux
EXE_SEARCH_PATH += $(JUX_DIR)/bin EXE_SEARCH_PATH += $(JUX_DIR)/bin
PREREQ += JUX
endif endif
ifeq ($(USE_JUX_CLIENT_JAVA),true) ifeq ($(USE_JUX_CLIENT_JAVA),true)
@ -785,6 +790,7 @@ RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)jux-client-java-run = $(JUX_CLIENT
RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)jux-client-java-devel = $(JUX_CLIENT_JAVA_VERSION) RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)jux-client-java-devel = $(JUX_CLIENT_JAVA_VERSION)
USE_JUX_CLIENT = true USE_JUX_CLIENT = true
LIBFLAGS += -L$(JUX_CLIENT_JAVA_DIR)/lib -ljux-client-java LIBFLAGS += -L$(JUX_CLIENT_JAVA_DIR)/lib -ljux-client-java
PREREQ += JUX_CLIENT_JAVA
endif endif
ifeq ($(USE_JUX_CLIENT),true) ifeq ($(USE_JUX_CLIENT),true)
@ -797,6 +803,7 @@ USE_JUX_SHARED = true
INCLUDE += -I$(JUX_CLIENT_DIR)/include INCLUDE += -I$(JUX_CLIENT_DIR)/include
LIBFLAGS += -L$(JUX_CLIENT_DIR)/lib -ljux-client LIBFLAGS += -L$(JUX_CLIENT_DIR)/lib -ljux-client
EXE_SEARCH_PATH += $(JUX_CLIENT_DIR)/bin EXE_SEARCH_PATH += $(JUX_CLIENT_DIR)/bin
PREREQ += JUX_CLIENT
endif endif
ifeq ($(USE_JUX_SHARED),true) ifeq ($(USE_JUX_SHARED),true)
@ -811,6 +818,7 @@ USE_FEEDFS_UTILS = true
USE_BTOOLS = true USE_BTOOLS = true
INCLUDE += -I$(JUX_SHARED_DIR)/include INCLUDE += -I$(JUX_SHARED_DIR)/include
LIBFLAGS += -L$(JUX_SHARED_DIR)/lib -ljux-shared LIBFLAGS += -L$(JUX_SHARED_DIR)/lib -ljux-shared
PREREQ += JUX_SHARED
endif endif
ifeq ($(USE_CCASFS),true) ifeq ($(USE_CCASFS),true)
@ -823,6 +831,7 @@ USE_CCONSOLE = true
INCLUDE += -I$(CCASFS_DIR)/include INCLUDE += -I$(CCASFS_DIR)/include
#LIBFLAGS += -L$(CCONSOLE_DIR)/lib -lcconsole #LIBFLAGS += -L$(CCONSOLE_DIR)/lib -lcconsole
EXE_SEARCH_PATH += $(CCASFS_DIR)/bin EXE_SEARCH_PATH += $(CCASFS_DIR)/bin
PREREQ += CCASFS
endif endif
ifeq ($(USE_CCONSOLE),true) ifeq ($(USE_CCONSOLE),true)
@ -839,6 +848,7 @@ LIBFLAGS += -L$(ENV_PREFIX)/opt/$(FLAVOUR_PATH_PREFIX)dspider/f
endif endif
LIBFLAGS += -ldspider-cconsole LIBFLAGS += -ldspider-cconsole
EXE_SEARCH_PATH += $(CCONSOLE_DIR)/bin EXE_SEARCH_PATH += $(CCONSOLE_DIR)/bin
PREREQ += CCONSOLE
endif endif
ifeq ($(USE_DSPCD),true) ifeq ($(USE_DSPCD),true)
@ -854,6 +864,7 @@ USE_USERVER = true
INCLUDE += -I$(DSPCD_DIR)/include INCLUDE += -I$(DSPCD_DIR)/include
LIBFLAGS += -L$(DSPCD_EXE_PREFIX)/lib -ldspcd LIBFLAGS += -L$(DSPCD_EXE_PREFIX)/lib -ldspcd
EXE_SEARCH_PATH += $(DSCD_DIR)/bin EXE_SEARCH_PATH += $(DSCD_DIR)/bin
PREREQ += DSPCD
endif endif
ifeq ($(USE_DSPROUT),true) ifeq ($(USE_DSPROUT),true)
@ -868,6 +879,7 @@ USE_USERVER = true
INCLUDE += -I$(DSPROUT_DIR)/include INCLUDE += -I$(DSPROUT_DIR)/include
LIBFLAGS += -L$(DSPROUT_EXE_PREFIX)/lib -ldsprout LIBFLAGS += -L$(DSPROUT_EXE_PREFIX)/lib -ldsprout
EXE_SEARCH_PATH += $(DSPROUT_DIR)/bin EXE_SEARCH_PATH += $(DSPROUT_DIR)/bin
PREREQ += DSPROUT
endif endif
ifeq ($(USE_DSPIDER_SHARED),true) ifeq ($(USE_DSPIDER_SHARED),true)
@ -881,6 +893,7 @@ USE_YTOOLS = true
INCLUDE += -I$(DSPIDER_SHARED_DIR)/include INCLUDE += -I$(DSPIDER_SHARED_DIR)/include
LIBFLAGS += -L$(DSPIDER_SHARED_EXE_PREFIX)/lib -ldspider-shared LIBFLAGS += -L$(DSPIDER_SHARED_EXE_PREFIX)/lib -ldspider-shared
EXE_SEARCH_PATH += $(DSPIDER_SHARED_DIR)/bin EXE_SEARCH_PATH += $(DSPIDER_SHARED_DIR)/bin
PREREQ += DSPIDER_SHARED
endif endif
ifeq ($(USE_FEEDFS_QT),true) ifeq ($(USE_FEEDFS_QT),true)
@ -894,6 +907,7 @@ USE_YTOOLS = true
INCLUDE += -I$(FEEDFS_QT_DIR)/include INCLUDE += -I$(FEEDFS_QT_DIR)/include
LIBFLAGS += -L$(FEEDFS_QT_DIR)/lib -lfeedfs-qt LIBFLAGS += -L$(FEEDFS_QT_DIR)/lib -lfeedfs-qt
EXE_SEARCH_PATH += $(FEEDFS_QT_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_QT_DIR)/bin
PREREQ += FEEDFS_QT
endif endif
ifeq ($(USE_FEEDFS_WT),true) ifeq ($(USE_FEEDFS_WT),true)
@ -909,6 +923,7 @@ USE_WT_JANNET = true
INCLUDE += -I$(FEEDFS_WT_DIR)/include INCLUDE += -I$(FEEDFS_WT_DIR)/include
LIBFLAGS += -L$(FEEDFS_WT_DIR)/lib -lfeedfs-wt LIBFLAGS += -L$(FEEDFS_WT_DIR)/lib -lfeedfs-wt
EXE_SEARCH_PATH += $(FEEDFS_WT_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_WT_DIR)/bin
PREREQ += FEEDFS_WT
endif endif
ifeq ($(USE_FEEDFS_GUI),true) ifeq ($(USE_FEEDFS_GUI),true)
@ -923,6 +938,7 @@ USE_FEEDFS_QT = true
INCLUDE += -I$(FEEDFS_GUI_DIR)/include INCLUDE += -I$(FEEDFS_GUI_DIR)/include
LIBFLAGS += -L$(FEEDFS_GUI_DIR)/lib -lfeedfs-gui LIBFLAGS += -L$(FEEDFS_GUI_DIR)/lib -lfeedfs-gui
EXE_SEARCH_PATH += $(FEEDFS_GUI_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_GUI_DIR)/bin
PREREQ += FEEDFS_GUI
endif endif
ifeq ($(USE_FEEDFSD),true) ifeq ($(USE_FEEDFSD),true)
@ -935,6 +951,7 @@ USE_YTOOLS = true
INCLUDE += -I$(FEEDFSD_DIR)/include INCLUDE += -I$(FEEDFSD_DIR)/include
LIBFLAGS += -L$(FEEDFSD_DIR)/lib -lfeedfsd LIBFLAGS += -L$(FEEDFSD_DIR)/lib -lfeedfsd
EXE_SEARCH_PATH += $(FEEDFSD_DIR)/bin EXE_SEARCH_PATH += $(FEEDFSD_DIR)/bin
PREREQ += FEEDFSD
endif endif
ifeq ($(USE_FEEDFS_LDAP),true) ifeq ($(USE_FEEDFS_LDAP),true)
@ -947,6 +964,7 @@ USE_YTOOLS = true
INCLUDE += -I$(FEEDFS_LDAP_DIR)/include INCLUDE += -I$(FEEDFS_LDAP_DIR)/include
LIBFLAGS += -L$(FEEDFS_LDAP_DIR)/lib -lfeedfs-ldap -lldap LIBFLAGS += -L$(FEEDFS_LDAP_DIR)/lib -lfeedfs-ldap -lldap
EXE_SEARCH_PATH += $(FEEDFS_LDAP_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_LDAP_DIR)/bin
PREREQ += FEEDFS_LDAP
endif endif
ifeq ($(USE_FEEDFS_UTILS),true) ifeq ($(USE_FEEDFS_UTILS),true)
@ -960,6 +978,7 @@ USE_YTOOLS = true
INCLUDE += -I$(FEEDFS_UTILS_DIR)/include INCLUDE += -I$(FEEDFS_UTILS_DIR)/include
LIBFLAGS += -L$(FEEDFS_UTILS_DIR)/lib -lfeedfs-utils LIBFLAGS += -L$(FEEDFS_UTILS_DIR)/lib -lfeedfs-utils
EXE_SEARCH_PATH += $(FEEDFS_UTILS_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_UTILS_DIR)/bin
PREREQ += FEEDFS_UTILS
endif endif
ifeq ($(USE_FEEDFS_NET),true) ifeq ($(USE_FEEDFS_NET),true)
@ -975,6 +994,7 @@ USE_YTOOLS = true
INCLUDE += -I$(FEEDFS_NET_DIR)/include INCLUDE += -I$(FEEDFS_NET_DIR)/include
LIBFLAGS += -L$(FEEDFS_NET_DIR)/lib -lfeedfs-net LIBFLAGS += -L$(FEEDFS_NET_DIR)/lib -lfeedfs-net
EXE_SEARCH_PATH += $(FEEDFS_NET_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_NET_DIR)/bin
PREREQ += FEEDFS_NET
endif endif
ifeq ($(USE_FEEDFS_LOCAL),true) ifeq ($(USE_FEEDFS_LOCAL),true)
@ -986,6 +1006,7 @@ USE_FEEDFS = true
# no build-time linkage necessary, no headers exported # no build-time linkage necessary, no headers exported
LD_LIB_PATH += $(FEEDFS_LOCAL_DIR)/lib LD_LIB_PATH += $(FEEDFS_LOCAL_DIR)/lib
EXE_SEARCH_PATH += $(FEEDFS_LOCAL_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_LOCAL_DIR)/bin
PREREQ += FEEDFS_LOCAL
endif endif
ifeq ($(USE_FEEDFS_REWRITE),true) ifeq ($(USE_FEEDFS_REWRITE),true)
@ -998,6 +1019,7 @@ USE_FEEDFS = true
LD_LIB_PATH += $(FEEDFS_REWRITE_DIR)/lib LD_LIB_PATH += $(FEEDFS_REWRITE_DIR)/lib
EXE_SEARCH_PATH += $(FEEDFS_REWRITE_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_REWRITE_DIR)/bin
LIBFLAGS += -lboost_regex LIBFLAGS += -lboost_regex
PREREQ += FEEDFS_REWRITE
endif endif
ifeq ($(USE_FEEDFS_FMEMFS),true) ifeq ($(USE_FEEDFS_FMEMFS),true)
@ -1011,6 +1033,7 @@ LD_LIB_PATH += $(FEEDFS_FMEMFS_DIR)/lib
INCLUDE += -I$(FEEDFS_FMEMFS_DIR)/include INCLUDE += -I$(FEEDFS_FMEMFS_DIR)/include
LIBFLAGS += -L$(FEEDFS_FMEMFS_DIR)/lib -lfeedfs-fmemfs LIBFLAGS += -L$(FEEDFS_FMEMFS_DIR)/lib -lfeedfs-fmemfs
EXE_SEARCH_PATH += $(FEEDFS_FMEMFS_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_FMEMFS_DIR)/bin
PREREQ += FEEDFS_FMEMFS
endif endif
ifeq ($(USE_FEEDFS_SYSLOG),true) ifeq ($(USE_FEEDFS_SYSLOG),true)
@ -1024,6 +1047,7 @@ LD_LIB_PATH += $(FEEDFS_SYSLOG_DIR)/lib
INCLUDE += -I$(FEEDFS_SYSLOG_DIR)/include INCLUDE += -I$(FEEDFS_SYSLOG_DIR)/include
LIBFLAGS += -L$(FEEDFS_SYSLOG_DIR)/lib -lfeedfs-syslog LIBFLAGS += -L$(FEEDFS_SYSLOG_DIR)/lib -lfeedfs-syslog
EXE_SEARCH_PATH += $(FEEDFS_SYSLOG_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_SYSLOG_DIR)/bin
PREREQ += FEEDFS_SYSLOG
endif endif
ifeq ($(USE_FEEDFS_OBJECTS),true) ifeq ($(USE_FEEDFS_OBJECTS),true)
@ -1036,6 +1060,7 @@ USE_YTOOLS = true
INCLUDE += -I$(FEEDFS_OBJECTS_DIR)/include INCLUDE += -I$(FEEDFS_OBJECTS_DIR)/include
LIBFLAGS += -L$(FEEDFS_OBJECTS_DIR)/lib -lfeedfs-objects LIBFLAGS += -L$(FEEDFS_OBJECTS_DIR)/lib -lfeedfs-objects
EXE_SEARCH_PATH += $(FEEDFS_OBJECTS_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_OBJECTS_DIR)/bin
PREREQ += FEEDFS_OBJECTS
endif endif
ifeq ($(USE_FEEDFS),true) ifeq ($(USE_FEEDFS),true)
@ -1049,6 +1074,7 @@ USE_AUTH = true
INCLUDE += -I$(FEEDFS_DIR)/include INCLUDE += -I$(FEEDFS_DIR)/include
LIBFLAGS += -L$(FEEDFS_DIR)/lib -lfeedfs LIBFLAGS += -L$(FEEDFS_DIR)/lib -lfeedfs
EXE_SEARCH_PATH += $(FEEDFS_DIR)/bin EXE_SEARCH_PATH += $(FEEDFS_DIR)/bin
PREREQ += FEEDFS
endif endif
ifeq ($(USE_USERVER),true) ifeq ($(USE_USERVER),true)
@ -1061,6 +1087,7 @@ USE_YTOOLS = true
INCLUDE += -I$(USERVER_DIR)/include INCLUDE += -I$(USERVER_DIR)/include
LIBFLAGS += -L$(USERVER_DIR)/lib -luserver LIBFLAGS += -L$(USERVER_DIR)/lib -luserver
EXE_SEARCH_PATH += $(USERVER_DIR)/bin EXE_SEARCH_PATH += $(USERVER_DIR)/bin
PREREQ += USERVER
endif endif
ifeq ($(USE_XCHANGE),true) ifeq ($(USE_XCHANGE),true)
@ -1073,6 +1100,7 @@ USE_VALDI = true
INCLUDE += -I$(XCHANGE_DIR)/include INCLUDE += -I$(XCHANGE_DIR)/include
LIBFLAGS += -L$(XCHANGE_DIR)/lib -lxchange LIBFLAGS += -L$(XCHANGE_DIR)/lib -lxchange
EXE_SEARCH_PATH += $(XCHANGE_DIR)/bin EXE_SEARCH_PATH += $(XCHANGE_DIR)/bin
PREREQ += XCHANGE
endif endif
ifeq ($(USE_BTOOLS),true) ifeq ($(USE_BTOOLS),true)
@ -1084,6 +1112,7 @@ USE_YTOOLS = true
INCLUDE += -I$(BTOOLS_DIR)/include INCLUDE += -I$(BTOOLS_DIR)/include
LIBFLAGS += -L$(BTOOLS_DIR)/lib -ldspider-btools LIBFLAGS += -L$(BTOOLS_DIR)/lib -ldspider-btools
EXE_SEARCH_PATH += $(BTOOLS_DIR)/bin EXE_SEARCH_PATH += $(BTOOLS_DIR)/bin
PREREQ += BTOOLS
endif endif
ifeq ($(USE_JACKJART),true) ifeq ($(USE_JACKJART),true)
@ -1095,6 +1124,7 @@ USE_YTOOLS = true
INCLUDE += -I$(JACKJART_DIR)/include INCLUDE += -I$(JACKJART_DIR)/include
LIBFLAGS += -L$(JACKJART_DIR)/lib -ldspider-jackjart LIBFLAGS += -L$(JACKJART_DIR)/lib -ldspider-jackjart
EXE_SEARCH_PATH += $(JACKJART_DIR)/bin EXE_SEARCH_PATH += $(JACKJART_DIR)/bin
PREREQ += JACKJART
endif endif
ifeq ($(USE_JACKRTAI),true) ifeq ($(USE_JACKRTAI),true)
@ -1106,6 +1136,7 @@ USE_YTOOLS = true
INCLUDE += -I$(JACKRTAI_DIR)/include INCLUDE += -I$(JACKRTAI_DIR)/include
LIBFLAGS += -L$(JACKRTAI_DIR)/lib -ldspider-jackrtai LIBFLAGS += -L$(JACKRTAI_DIR)/lib -ldspider-jackrtai
EXE_SEARCH_PATH += $(JACKRTAI_DIR)/bin EXE_SEARCH_PATH += $(JACKRTAI_DIR)/bin
PREREQ += JACKRTAI
endif endif
ifeq ($(USE_JACKDUMMY),true) ifeq ($(USE_JACKDUMMY),true)
@ -1117,6 +1148,7 @@ USE_YTOOLS = true
INCLUDE += -I$(JACKDUMMY_DIR)/include INCLUDE += -I$(JACKDUMMY_DIR)/include
LIBFLAGS += -L$(JACKDUMMY_DIR)/lib -ldspider-jackdummy LIBFLAGS += -L$(JACKDUMMY_DIR)/lib -ldspider-jackdummy
EXE_SEARCH_PATH += $(JACKDUMMY_DIR)/bin EXE_SEARCH_PATH += $(JACKDUMMY_DIR)/bin
PREREQ += JACKDUMMY
endif endif
ifeq ($(USE_ALSART),true) ifeq ($(USE_ALSART),true)
@ -1128,6 +1160,7 @@ USE_YTOOLS = true
INCLUDE += -I$(ALSART_DIR)/include INCLUDE += -I$(ALSART_DIR)/include
LIBFLAGS += -L$(ALSART_DIR)/lib -lalsart LIBFLAGS += -L$(ALSART_DIR)/lib -lalsart
EXE_SEARCH_PATH += $(ALSART_DIR)/bin EXE_SEARCH_PATH += $(ALSART_DIR)/bin
PREREQ += ALSART
endif endif
ifeq ($(USE_DSPFS),true) ifeq ($(USE_DSPFS),true)
@ -1139,6 +1172,7 @@ USE_YTOOLS = true
INCLUDE += -I$(DSPFS_DIR)/include INCLUDE += -I$(DSPFS_DIR)/include
LIBFLAGS += -L$(DSPFS_DIR)/lib -ldspfs LIBFLAGS += -L$(DSPFS_DIR)/lib -ldspfs
EXE_SEARCH_PATH += $(DSPFS_DIR)/bin EXE_SEARCH_PATH += $(DSPFS_DIR)/bin
PREREQ += DSPFS
endif endif
ifeq ($(USE_AUTH),true) ifeq ($(USE_AUTH),true)
@ -1151,6 +1185,7 @@ USE_VALDI = true
INCLUDE += -I$(AUTH_DIR)/include INCLUDE += -I$(AUTH_DIR)/include
LIBFLAGS += -L$(AUTH_DIR)/lib -lauth LIBFLAGS += -L$(AUTH_DIR)/lib -lauth
EXE_SEARCH_PATH += $(AUTH_DIR)/bin EXE_SEARCH_PATH += $(AUTH_DIR)/bin
PREREQ += AUTH
endif endif
ifeq ($(USE_VALDI),true) ifeq ($(USE_VALDI),true)
@ -1160,8 +1195,10 @@ RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)valdi-run = $(VALDI_VERSION)
RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)valdi-devel = $(VALDI_VERSION) RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)valdi-devel = $(VALDI_VERSION)
USE_YTOOLS = true USE_YTOOLS = true
#INCLUDE += -I$(VALDI_DIR)/include #INCLUDE += -I$(VALDI_DIR)/include
LIBFLAGS += -L$(VALDI_DIR)/lib
#LIBFLAGS += -L$(VALDI_DIR)/lib -lvaldi #LIBFLAGS += -L$(VALDI_DIR)/lib -lvaldi
EXE_SEARCH_PATH += $(VALDI_DIR)/bin EXE_SEARCH_PATH += $(VALDI_DIR)/bin
PREREQ += VALDI
endif endif
ifeq ($(USE_WT_JANNET),true) ifeq ($(USE_WT_JANNET),true)
@ -1175,6 +1212,8 @@ USE_FEEDFS = true
INCLUDE += -I$(WT_JANNET_DIR)/include INCLUDE += -I$(WT_JANNET_DIR)/include
LD_LIB_PATH += $(WT_JANNET_DIR)/lib LD_LIB_PATH += $(WT_JANNET_DIR)/lib
EXE_SEARCH_PATH += $(WT_JANNET_DIR)/bin EXE_SEARCH_PATH += $(WT_JANNET_DIR)/bin
PREREQ += WT_JANNET
CATCH_ONLY_YERROR = false
endif endif
ifeq ($(USE_APACHE2_JANNET),true) ifeq ($(USE_APACHE2_JANNET),true)
@ -1186,6 +1225,7 @@ USE_FEEDFS = true
# no build-time linkage necessary, no headers exported # no build-time linkage necessary, no headers exported
LD_LIB_PATH += $(APACHE2_JANNET_DIR)/lib LD_LIB_PATH += $(APACHE2_JANNET_DIR)/lib
EXE_SEARCH_PATH += $(APACHE2_JANNET_DIR)/bin EXE_SEARCH_PATH += $(APACHE2_JANNET_DIR)/bin
PREREQ += APACHE2_JANNET
endif endif
ifeq ($(USE_FPTEST),true) ifeq ($(USE_FPTEST),true)
@ -1197,6 +1237,7 @@ USE_YTOOLS = true
INCLUDE += -I$(FPTEST_DIR)/include INCLUDE += -I$(FPTEST_DIR)/include
LIBFLAGS += -L$(FPTEST_DIR)/lib -lfptest -L$(HOME)/opt/iowkit/lib -liowkit LIBFLAGS += -L$(FPTEST_DIR)/lib -lfptest -L$(HOME)/opt/iowkit/lib -liowkit
EXE_SEARCH_PATH += $(FPTEST_DIR)/bin EXE_SEARCH_PATH += $(FPTEST_DIR)/bin
PREREQ += FPTEST
endif endif
ifeq ($(USE_YTOOLS),true) ifeq ($(USE_YTOOLS),true)
@ -1213,6 +1254,7 @@ endif
INCLUDE += -I$(YTOOLS_DIR)/include INCLUDE += -I$(YTOOLS_DIR)/include
LIBFLAGS += -L$(YTOOLS_DIR)/lib -lytools LIBFLAGS += -L$(YTOOLS_DIR)/lib -lytools
EXE_SEARCH_PATH += $(YTOOLS_DIR)/bin EXE_SEARCH_PATH += $(YTOOLS_DIR)/bin
PREREQ += YTOOLS
endif endif
ifeq ($(USE_SCOPE_CASMIX),true) ifeq ($(USE_SCOPE_CASMIX),true)

View file

@ -185,8 +185,8 @@ strip.done: $(EXE_ALL)
$(STRIP) $^ $(STRIP) $^
touch $@ touch $@
%.done: #%.done:
make -$(MAKEFLAGS) -C $(shell dirname $@) `basename $@` # make -$(MAKEFLAGS) -C $(shell dirname $@) `basename $@`
.%.o.dep.mk: %.cpp $(BUILD_HDR) .%.o.dep.mk: %.cpp $(BUILD_HDR)
$(CC) -M $(CPPFLAGS) $(DEPEND_CPPFLAGS) $< -o $@ $(CC) -M $(CPPFLAGS) $(DEPEND_CPPFLAGS) $< -o $@
@ -321,6 +321,7 @@ $$(BUILD_$(1)DIR)/%: % $$(TOPDIR)/dir_build_$(1).done
@if [ ! $$< -ef $$@ -a "`echo $$< | sed 's/\..*//'`" != local ]; then \ @if [ ! $$< -ef $$@ -a "`echo $$< | sed 's/\..*//'`" != local ]; then \
echo install -m $($(1)MODE) $$< $$@ ;\ echo install -m $($(1)MODE) $$< $$@ ;\
install -m $($(1)MODE) $$< $$@ ;\ install -m $($(1)MODE) $$< $$@ ;\
rm -f $$(TOPDIR)/dirs.done ;\
fi fi
$$(TOPDIR)/dir_install_$(1).done: $$(TOPDIR)/dir_install_$(1).done:

View file

@ -11,7 +11,7 @@ ifneq ($(wildcard $(TOPDIR)/make/defs.mk),)
endif endif
include $(MODDIR)/make/defs.mk include $(MODDIR)/make/defs.mk
include $(MODDIR)/make/subdirs.mk include $(MODDIR)/make/dirs.mk
include $(MODDIR)/make/rpmdist.mk include $(MODDIR)/make/rpmdist.mk
include $(MODDIR)/make/rules.mk include $(MODDIR)/make/rules.mk
include $(MODDIR)/make/doc-rules.mk include $(MODDIR)/make/doc-rules.mk

735
scripts/integrate-distro.sh Normal file
View file

@ -0,0 +1,735 @@
#!/bin/sh
# -- defaults
# install_dev=/dev/sdb
arch=`uname -m`
o_name=suse-11.4
cmd=install
initrd_modules="aufs via e1000 e1000e myri10ge forcedeth"
umask 0022
unused_pkgs="
sysvinit-systemd
"
# -- pciutils
# used by jux, should be done by grepping /proc-files
# -- sysvinit
# systemd-sysvinit boots, but doesn't work cleanly as of now
payload_pkgs="
kernel
kernel-default-2.6.37.6~jng135-4
aufs
aufs-kmp
mkinitrd
sysvinit
grub
splashy
kbd
insserv
pam_ldap
pam_apparmor
gnome-keyring-pam
portmap
proftpd
proftpd-ldap
xntp
rsyslog
openldap2
courier-authlib-ldap
bind
xinetd
apache2
unscd
nss_ldap
fuse
mdadm
device-mapper
dhcpcd
nfs-client
sudo
sysconfig
glibc-locale
xorg-x11
xorg-x11-driver-video
xorg-x11-fonts-100dpi
xorg-x11-fonts-75dpi
xorg-x11-fonts-cyrillic
xorg-x11-fonts-scalable
xorg-x11-fonts-syriac
xorg-x11-libs
xorg-x11-libxcb
xorg-x11-man
xorg-x11-sdk
xorg-x11-server
xorg-x11-server-glx
xorg-x11-Xnest
xorg-x11-Xvfb
xorg-x11-Xvnc
man
findutils-locate
vim
grep
iputils strace
lsof
wget lukemftp
openssh
tar zip unzip
gcc-c++ libtool autoconf automake make
cvs
patch
ytools-run
pciutils
jux-run
jux-client-run
feedfsd-run
snmp-manager-run
"
# -- functions
usage()
{
echo "
usage: $myname -h
$myname [-d target-device] [-n target-name] [-p file with root password] [install|mount|unmount]
"
[ "$1" ] && exit $1
}
get_opts()
{
set -- `getopt 'hd:n:a:p:' $*`
while [ "$1" != -- ] ; do
case "$1" in
-h)
usage 0
;;
-d)
install_dev=$2
shift
;;
-n)
o_name=$2
shift
;;
-a)
arch=$2
shift
;;
-p)
root_password_file=$2
shift
;;
*)
usage 1
;;
esac
shift
done
shift
[ "$1" ] && cmd="$1"
}
log()
{
echo $@ >&2
}
run()
{
local exit_on_error=0
while [[ "$1" =~ ^- ]]; do
case $1 in
-e)
exit_on_error=1
esac
shift
done
log =========== running $@
$@
local r=$?
if [ "$exit_on_error" = 1 -a $r != 0 ]; then
die "exiting after error during command \"$@\""
fi
return $r
}
die()
{
log "$@"
exit 1
}
_cat()
{
cat | sed 's/^[ ]*|//'
}
check_var_set()
{
local var val
for var in $@; do
eval val=\$$var
[ "$val" ] || {
log "$var is not set"
return 1
}
done
return 0
}
_run_chroot()
{
local cmd
set +x
while read cmd; do
cmd=`echo $cmd | sed 's/[ ]*#.*//'`
[ "$cmd" ] || continue
echo == running LANG=POSIX chroot $root $cmd
LANG=POSIX chroot $root $cmd || {
die "failed to run >$cmd<"
}
done
set -x
}
run_chroot()
{
echo == running LANG=POSIX chroot $root "$@"
LANG=POSIX chroot $root "$@" || {
die "failed to run >$@<, exiting"
}
}
run_parted()
{
while read cmd; do
run parted --script $install_dev $cmd
done
}
create_partition_table()
{
assert_not_mounted
_cat << EOT | run_parted
|mklabel gpt
|mkpart primary 1M 2M
|name 1 grub
|set 1 bios_grub
|mkpart primary 2M 10G
|name 2 boot
|mkpart primary 10G 40G
|name 3 swap
|mkpart primary 40G 100%
|name 4 root
EOT
grub_boot_partition_num=0
grub_slash_boot_partition_num=1
}
create_file_systems()
{
run mkfs -t ext4 $install_dev_boot
run mkswap $install_dev_swap
run mkfs -t ext4 $install_dev_root
}
canonicalize()
{
readlink -f $1 2>/dev/null
}
check_mount()
{
local canonicalized=`canonicalize $root/$1`
[ ! "$canonicalized" ] && return 1
grep -q $canonicalized /proc/mounts || return 1
return 0
}
assert_not_mounted()
{
if grep $install_dev /proc/mounts; then
echo "$install_dev is mounted, exiting"
exit 1
fi
}
setup_bind_mounts()
{
local fs
for fs in /dev /sys /proc; do
check_mount $fs || {
run -e mkdir -p -m 755 $root$fs
run -e mount -o bind $fs $root$fs
}
done
}
mount_devices()
{
check_mount / || {
run -e install -d -m 755 $root
run -e mount $install_dev_root $root
}
check_mount /boot || {
run -e mkdir -p -m 755 $root/boot
run -e mount $install_dev_boot $root/boot
}
}
unmount_devices()
{
local devices="/proc /sys /dev /boot /"
[ "$1" ] && devices="$@"
local d
for d in $devices; do
check_mount $d && run umount $root$d
done
}
zypper_repos_base()
{
_cat << EOT | grep -v " #"
|distro-oss ftp://ftp/pub/mirror/suse/distribution/11.4/repo/oss
EOT
}
zypper_repos_update()
{
zypper_repos_base
_cat << EOT | grep -v " #"
|distro-non-oss ftp://ftp/pub/mirror/suse/distribution/11.4/repo/non-oss
|update ftp://ftp/pub/mirror/suse/update/11.4
|jengelh ftp://ftp/pub/mirror/gwdg/pub/linux/misc/suser-jengelh/openSUSE_11.4
EOT
}
zypper_repos()
{
zypper_repos_update
_cat << EOT | grep -v "^ *#"
|#ftp.jannet.de ftp://dspadm:dspasswd@ftp.jannet.de/pub/packages/linux/suse/11.4/inst-source
|ftp.jannet.de ftp://dspadm:dspasswd@ftp/pub/mirror/jannet/ftp/pub/packages/linux/suse/11.4/inst-source
|ftp.priv.lcl ftp://dspadm:dspasswd@ftp/pub/local/packages/suse/11.4
EOT
}
setup_zypper_repos()
{
zypper_repos | while read name uri; do
chroot $root zypper $zypper_global_opts ar $uri $name
done
}
host_zypper()
{
local repos=$1
shift
local distros=`zypper_repos_$repos | awk '{print "--plus-repo " $2 }'`
zypper $zypper_global_opts --root $root $distros $@
}
init_root_password_file()
{
[ "$root_password_file" ] ||
root_password_file=$HOME/.$myname/root-pass
[ ! -f $root_password_file ] && {
local dir=`dirname $root_password_file`
mkdir -m 0755 $dir
dd if=/dev/random of=/dev/stdout bs=1 count=4 2>/dev/null |
hexdump | sed '/^0000000/ !d; s/0000000 //; s/ //g' > $root_password_file
chmod 600 $root_password_file
}
}
make_etc_fstab()
{
_cat<<EOT
|proc /proc proc defaults 0 0
|sysfs /sys sysfs noauto 0 0
|debugfs /sys/kernel/debug debugfs noauto 0 0
|usbfs /proc/bus/usb usbfs noauto 0 0
|devpts /dev/pts devpts mode=0620,gid=5 0 0
EOT
}
make_etc_fstab_local_boot()
{
_cat<<EOT
|$run_dev_swap swap swap defaults 0 0
|$run_dev_root / ext4 acl,user_xattr 1 1
|$run_dev_boot /boot ext4 acl,user_xattr 1 2
EOT
}
make_etc_hosts()
{
cat /etc/hosts
# TODO: there must be an easier frontend for gethostbyname()
local ftp_ip=`ping -c 1 ftp | sed '/PING/ !d; s/.*(\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\)).*/\1/'`
# TODO: undo or - better yet - obviate the need for this
_cat<<EOT
|$ftp_ip ftp
EOT
}
make_netboot_etc_hosts()
{
cat /etc/hosts
_cat<<EOT
EOT
}
make_netboot_etc_ldap_conf()
{
cat /etc/ldap.conf | sed '
s/^host .*/host __DHCPSIADDR__/
s%^uri .*%uri ldap://__DHCPSIADDR__%
'
}
make_netboot_etc_openldap_ldap_conf()
{
cat /etc/openldap/ldap.conf | sed '
s/^HOST .*/HOST __DHCPSIADDR__/
s%^URI .*%URI ldap://__DHCPSIADDR__%
'
}
make_sysconfig_bootloader()
{
_cat << EOT
|# automatically created by $myname on $date"
|
|LOADER_TYPE="grub"
|DEFAULT_APPEND="resume=$run_dev_swap splash=silent quiet showopts"
|DEFAULT_VGA=""
|FAILSAFE_APPEND="showopts apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe"
|FAILSAFE_VGA=""
|XEN_KERNEL_APPEND="resume=$run_dev_swap splash=silent quiet showopts"
|XEN_APPEND=""
|XEN_VGA=""
|CYCLE_DETECTION="no"
|CYCLE_NEXT_ENTRY="1"
|LOADER_LOCATION=""
EOT
}
make_boot_menu()
{
check_var_set kernel_version || \
die "failed to detect kernel version for creating boot menu"
local disk=hd$run_grub_dev_num
_cat << EOT
|default 0
|timeout 8
|##YaST - generic_mbr
|gfxmenu ($disk,$grub_slash_boot_partition_num)/message
|
|title Default
| root ($disk,$grub_slash_boot_partition_num)
| kernel /vmlinuz root=$run_dev_root resume=$run_dev_swap splash=silent quiet showopts
| initrd /initrd-local
|
|title Failsafe
| root ($disk,$grub_slash_boot_partition_num)
| kernel /vmlinuz root=$run_dev_root showopts apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe
| initrd /initrd-local
|
|title Default $kernel_version
| root ($disk,$grub_slash_boot_partition_num)
| kernel /vmlinuz-$kernel_version root=$run_dev_root resume=$run_dev_swap splash=silent quiet showopts
| initrd /initrd-local-$kernel_version
|
|title Failsafe $kernel_version
| root ($disk,$grub_slash_boot_partition_num)
| kernel /vmlinuz-$kernel_version root=$run_dev_root showopts apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe
| initrd /initrd-local-$kernel_version
EOT
}
setup_boot_loader_local()
{
check_var_set grub_boot_partition_num grub_slash_boot_partition_num || \
die "not setting up boot loader, exiting"
local drivename=hd$install_grub_dev_num
local boot="($drivename,$grub_boot_partition_num)"
local slash_boot="($drivename,$grub_slash_boot_partition_num)"
local map=/tmp/$myname-grub-device.map
echo "($drivename) $install_dev" > $map
#dd if=$root/boot/grub/stage1 of=$install_dev count=512 count=1
_cat << EOT | sed 's/#.*//' | run grub --batch --device-map=$map
|root $slash_boot
|setup ($drivename)
|#setup --stage2=/boot/grub/stage2 --force-lba $boot $slash_boot
|quit
EOT
make_sysconfig_bootloader > $root/etc/sysconfig/bootloader
make_boot_menu > $root/boot/grub/menu.lst
(cd $root/boot; ln -sf vmlinuz-$kernel_version vmlinuz)
run_chroot /sbin/mkinitrd \
-B \
-k /boot/vmlinuz-$kernel_version \
-i /boot/initrd-local-$kernel_version \
-M /boot/System.map-$kernel_version \
-m "$initrd_modules" \
-d $install_dev_root
(cd $root/boot; ln -sf initrd-local-$kernel_version initrd-local)
}
setup_boot_loader_net()
{
run_chroot /sbin/mkinitrd \
-B \
-k /boot/vmlinuz-$kernel_version \
-i /boot/initrd-netboot-$kernel_version \
-M /boot/System.map-$kernel_version \
-m "$initrd_modules" \
-d jan://blub/dings
(cd $root/boot; ln -sf initrd-netboot-$kernel_version initrd-netboot)
}
undo_rpmnew()
{
set +x
local n o
# reset config files to rpm versions
find $root -name '*.rpmnew' | while read n; do
o=`echo $n | sed 's/\.rpmnew//'`
log renaming $n to $o
mv $n $o
done
set -x
}
setup_root_directory()
{
if [ -w "$install_dev" ]; then
if [ ! "$non_interactive" ]; then
local answer
echo -n "Continuing will delete ALL data on $install_dev. Are you sure [y|n]? "
read answer
if [ "$answer" != y ]; then
exit 1
fi
fi
create_partition_table
create_file_systems
mount_devices
else
if [ ! "$non_interactive" ]; then
if [ -e $root ]; then
local answer
echo -n "Continuing will delete ALL data below $root. Are you sure [y|n]? "
read answer
if [ "$answer" != y ]; then
exit 1
fi
fi
fi
if [ ! "$root" ]; then
echo "cowardly not removing empty root directory"
exit 1
fi
if [[ "$root" =~ home ]]; then
echo "cowardly not removing directory matching \"home\""
exit 1
fi
set +e
unmount_devices /proc /sys /dev
run rm -rf $root
run install -d -m 755 $root
fi
}
insserv_all()
{
local services="
sshd
jux
"
local service
for service in $services; do
run_chroot insserv -e $service
done
}
cmd_install()
{
if true; then
local c
#set -e
#remove_bind_mounts
setup_root_directory
setup_bind_mounts
mkdir -p -m 755 $root/etc
mkdir -p -m 755 $root/etc/openldap
for c in \
/etc/passwd \
/etc/group \
/etc/nsswitch.conf \
/etc/certs \
/etc/openldap/slapd.conf \
/etc/sysconfig/keyboard \
/etc/sysconfig/clock \
; do
install -d -m 755 `dirname $root$c`
cp -rp $c $root$c
done
make_netboot_etc_ldap_conf > $root/etc/ldap.conf.netboot
make_netboot_etc_openldap_ldap_conf > $root/etc/openldap/ldap.conf.netboot
make_netboot_etc_hosts > $root/etc/hosts.netboot
make_etc_hosts > $root/etc/hosts
make_etc_fstab > $root/etc/fstab
host_zypper base install --auto-agree-with-licenses coreutils
host_zypper update install --auto-agree-with-licenses zypper
#undo_rpmnew
setup_zypper_repos
chroot $root zypper $zypper_global_opts refresh
chroot $root zypper $zypper_global_opts install --auto-agree-with-licenses $payload_pkgs
# chroot $root zypper $zypper_global_opts -t srcpackage --download-only $payload_pkgs
fi # test
kernel_version=`readlink -f $root/boot/vmlinuz 2>/dev/null | xargs basename | sed 's/vmlinuz-//'`
[ "$install_dev" ] && setup_boot_loader_local
setup_boot_loader_net
insserv_all
cat $root_password_file | chroot $root /usr/bin/passwd --stdin
chroot $root /sbin/ldconfig
chroot $root /sbin/SuSEconfig
chroot $root /opt/jux/bin/jux-init-namespace.sh
for c in \
/etc/pam.d/* \
; do
cp -rp $c $root$c
done
[ -w $install_dev ] && unmount_devices
}
# -- here we go
myname=`basename $0`
zypper_global_opts="--non-interactive --gpg-auto-import-keys --no-gpg-checks"
date=`date`
get_opts "$@"
init_root_password_file
if [ `whoami` != root ]; then
sudo $0 $@ -p $root_password_file
exit $?
fi
name=$o_name-$arch
root=/srv/nfs/boot/distros/$name/ro
# -- set up variables denoting devices
if [ "$install_dev" ]; then
install_dev_boot=$install_dev""2
install_dev_swap=$install_dev""3
install_dev_root=$install_dev""4
case $install_dev in
/dev/sda) install_grub_dev_num=0;;
/dev/sdb) install_grub_dev_num=1;;
/dev/sdc) install_grub_dev_num=2;;
/dev/sdd) install_grub_dev_num=3;;
/dev/sde) install_grub_dev_num=4;;
*)
log "device \"$install_dev\" doesn't map into a known grub device number, edit $myname to add support"
exit 1;;
esac
run_dev=/dev/sda
run_dev_boot=$run_dev""2
run_dev_swap=$run_dev""3
run_dev_root=$run_dev""4
run_grub_dev_num=0
## test >
#grub_boot_partition_num=0
#grub_slash_boot_partition_num=1
#mount_devices
## test <
fi
case $cmd in
install)
cmd_install
exit $?
;;
mount)
[ "$install_dev" ] && mount_devices
setup_bind_mounts
exit $?
;;
unmount)
unmount_devices
exit $?
;;
*)
log "unknown command \"$cmd\""
usage 1
;;
esac
exit 0