Files
secondo/makefile.cm
2026-01-23 17:03:45 +08:00

495 lines
12 KiB
Plaintext

#This file is part of SECONDO.
#
#Copyright (C) 2004, University in Hagen, Department of Computer Science,
#Database Systems for New Applications.
#
#SECONDO is free software; you can redistribute it and/or modify
#it under the terms of the GNU General Public License as published by
#the Free Software Foundation; either version 2 of the License, or
#(at your option) any later version.
#
#SECONDO is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with SECONDO; if not, write to the Free Software
#Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
########################################################################
#
# makefile.cm - rules for CM and deployment related tasks
#
#########################################################################
# some direcories used to build tar.gz files for
# Secondo sources or installation kits
pref := SECONDO_INSTALLATION_KIT
net := $(SECONDO_INST_KIT_ROOT)/$(pref)
# local directory for tar archives
ifndef tempdir
tempdir := /tmp/make-$(USER)
endif
shrc := $(shell if [ ! -d $(tempdir) ]; then if ! mkdir -p $(tempdir); then echo "false"; fi fi)
ifeq ($(shrc),false)
$(error Could not create directory $(tempdir)!)
endif
# files which are used to indicate
# if some special targets need to be maked
tsdk := $(tempdir)/sdk_dist
tnew := $(tempdir)/sdk_changed
tupd := $(tempdir)/show_update_msg
# run some shell commands
shrc := $(shell rm -f $(tupd))
shrc := $(shell if [ ! -e $(tsdk) ]; then touch $(tsdk); fi)
shrc := $(shell if [ ! -e $(tnew) ]; then touch $(tnew); fi)
# Rules for copying configuration scripts
SCRIPT_DIR := ./CM-Scripts
SCRIPT_FILES_CMD := libutil.sh \
profile \
bashrc_example \
secondorc \
secondo.aliases \
secondo.setroot \
secondo.config.linux \
secondo.config.win32 \
secondo.config.mac_osx
SDK_SCRIPTS_CMD := $(addprefix $(SECONDO_SDK)/, $(SCRIPT_FILES_CMD))
INST_KIT_SCRIPTS := $(addprefix $(net)/scripts/, $(SCRIPT_FILES_CMD) )
ALL_INST_KIT_SCRIPTS := $(net)/installsdk $(INST_KIT_SCRIPTS)
# Files located at the web server
websrv := $(SECONDO_WEBSRV_ROOT)/files
lin_guide := Linux-Installation-Guide.pdf
win_guide := Windows-Installation-Guide.pdf
osx_guide := Mac-OSX-Installation-Guide.pdf
sdk_guide := SDK_SETUP.pdf
lin_sdk := mac-osx-sdk.tar.gz
osx_sdk := linux-sdk.tar.gz
win_sdk := win32-sdk.zip
iso_sdk := secondo-cd.iso.zip
INST_GUIDES := $(addprefix $(websrv)/, $(lin_guide) $(win_guide) $(osx_guide) $(sdk_guide))
INST_KITS := $(addprefix $(websrv)/, $(lin_sdk) $(win_sdk) $(osx_sdk))
INST_KITS_TMP := $(addprefix $(tempdir)/, $(lin_sdk) $(win_sdk) $(osx_sdk))
WIN_SRC := secondo-$(tag)-CP1252.zip
LIN_SRC := secondo-$(tag)-LAT1.tar.gz
SRC_FILES := $(WIN_SRC) $(LIN_SRC)
.PHONY: update-environment
update-environment: show-separator remove-old-apps remove-old-config $(SDK_SCRIPTS_CMD) show-update-msg
UPDATE_MSG := "\n\
Configuration Setup has been updated. If you have made changes\n\
in one of the files above please transfer them into the new versions.\n\
A backup copy ending with .backup will be kept.\n\n\
Afterwards please execute the command\n\
source \$SECONDO_SDK/secondorc or close this shell \n\
and start a new one.\n\n\
Make can't do this for you since all commands started within\n\
make are processed in a new subshell, hence the environment\n\
of your current running shell will not be modified.\n"
VPATH := $(SCRIPT_DIR)
$(SECONDO_SDK)/%: %
@touch $(tupd)
@cp $@ $@.backup
@cp $< $@
@echo " updating" $@
$(net)/scripts/%: %
cp $< $@
$(net)/%: %
cp $< $@
$(net)/installsdk: installsdk
cp $< $@
chmod 755 $@
.PHONY: show-update-msg
show-update-msg:
@if [ -e $(tupd) ]; then echo $(UPDATE_MSG); \
else echo " ... are up to date.\n"; fi
.PHONY: show-separator
show-separator:
@echo; echo " *** Bash environment setup files *** "; echo
# update the installation kit
.PHONY: inst-kit
inst-kit: checkrootdir $(tnew) $(tsdk)
# special target which only updates script files
.PHONY: checkrootdir sdk-scripts
sdk-scripts: $(tnew)
$(tnew): $(ALL_INST_KIT_SCRIPTS)
touch $@
# special target which create new secondo source archives
.PHONY: src-dist
src-dist: src-archives
touch $(tnew)
# create new installation kits
.PHONY: sdk-tars
sdk-tars: $(INST_KITS_TMP)
.PHONY: sdk-cd
sdk-cd: $(tempdir)/secondo-cd.iso.zip
vpath %-Installation-Guide.pdf $(net)
vpath %.zip $(tempdir)
vpath %.gz $(tempdir)
# copy to web server
.PHONY: copy2web
copy2web: checkrootdir $(INST_GUIDES) $(INST_KITS)
$(websrv)/%-Installation-Guide.pdf: %-Installation-Guide.pdf
cp $< $@
$(websrv)/%.zip: %.zip
cp $< $@
$(websrv)/%.gz: %.gz
cp $< $@
# check if a root for the secondo SDK tools is present
.PHONY: checkrootdir
checkrootdir:
ifndef SECONDO_INST_KIT_ROOT
@echo; echo "Error: SECONDO_INST_KIT_ROOT not defined!"; echo; exit 1
else
@if [ ! -e $(net) ]; then \
echo; echo "Directory net=\"$(net)\" does not exist!"; echo; exit 2; fi
endif
$(tempdir)/linux-sdk.tar.gz: $(tnew)
rm -f $@
tar -C $(SECONDO_INST_KIT_ROOT) -cvzf $@ \
$(pref)/$(lin_guide) $(pref)/$(sdk_guide) $(pref)/installsdk $(pref)/linux $(pref)/scripts --exclude $(pref)/linux/j2sdk*
$(tempdir)/mac-osx-sdk.tar.gz: $(tnew)
rm -f $@
tar -C $(SECONDO_INST_KIT_ROOT) -cvzf $@ \
$(pref)/$(osx_guide) $(pref)/$(sdk_guide) $(pref)/installsdk $(pref)/linux $(pref)/mac_osx $(pref)/scripts --exclude $(pref)/linux/j2sdk*
$(tempdir)/win32-sdk.zip: $(tnew)
rm -f $@
cd $(SECONDO_INST_KIT_ROOT) && zip -9 -r $@ \
$(pref)/$(win_guide) $(pref)/$(sdk_guide) $(pref)/MSYS-* $(pref)/installsdk \
$(pref)/win32/prolog $(pref)/win32/mingw $(pref)/win32/non-gnu $(pref)/win32/gnu $(pref)/scripts
# create a iso image with Rockridge and Joliet extensions
.PHONY: isoimage
isoimage: $(tempdir)/secondo-cd.iso.zip
$(tempdir)/secondo-cd.iso.zip: $(tempdir)/secondo-cd.iso
rm -rf $@
zip -9 $@ $<
$(tempdir)/secondo-cd.iso: $(tnew)
rm -rf $@
mkisofs -J -r -iso-level 2 -graft-points -o $@ /=$(net)
.PHONY: doc-dist
doc-dist: $(net)/documentation
rm -f $(tempdir)/secondo-$@.zip
cd $(net) && zip -9 -r $(tempdir)/secondo-$@.zip documentation
OLD_APPS := bin/SecondoTTYBDB \
bin/SecondoMonitorBDB \
bin/SecondoServerBDB \
bin/TestRunner \
bin/TestRunnerApp \
Optimizer/SecondoPL \
Optimizer/SecondoPLCS \
.PHONY: remove-old-apps
remove-old-apps:
rm -f $(OLD_APPS)
.PHONY: remove-old-config
remove-old-config:
rm -f bin/SecondoConfig.ini Optimizer/SecondoConfig.ini
## rules for building a demo version
SECONDO_DEMO = ./sec-demo/secondo
DEMO_MAN := Documents/SecondoManual.pdf
ifeq ($(platform),win32)
DEMO_DEPS := $(PL_LIB_DIR)/*dll \
$(PL_LIB_DIR)/pthreadVC*dll \
$(JPL_JAR) \
$(SECONDO_SDK)/auxtools/bin/libgsl*dll \
$(SECONDO_SDK)/auxtools/bin/jpeg*dll
else
DEMO_DLL := $(PL_LIB_DIR)/libpl* \
$(SECONDO_SDK)/auxtools/lib/libgsl*dll \
$(SECONDO_SDK)/bdb/lib/libdb_cxx*
endif
TPC := Tools/Generators/TPC-H
TPC_GEN = $(TPC)/dbgen.exe $(TPC)/dists.dss $(TPC)/secondo/restore_objs
vpath Secondo% bin
.PHONY: demo
demo: mkdemodir cp_deps cp_files
.PHONY: mkdemodir
mkdemodir:
rm -rf $(SECONDO_DEMO)
mkdir -p $(SECONDO_DEMO)/bin
mkdir -p $(SECONDO_DEMO)/Optimizer
.PHONY: cp_deps
cp_deps: $(DEMO_MAN) $(DEMO_DEPS) $(TPC_GEN)
make -C Tools/Generators/TPC-H
cp $^ $(SECONDO_DEMO)/bin
cp $(PL_LIB_DIR)/../boot32.prc $(SECONDO_DEMO)
cp -R $(PL_LIB_DIR)/../boot $(SECONDO_DEMO)
cp -R $(PL_LIB_DIR)/../library $(SECONDO_DEMO)
.PHONY: cp_files
cp_files:
cp -R Optimizer $(SECONDO_DEMO)
cp -R bin $(SECONDO_DEMO)
cp CM-Scripts/initdemo.sh $(SECONDO_DEMO)
.PHONY: demo2
demo2: cp_gui demo
.PHONY: cp_gui
cp_gui:
mkdir -p $(SECONDO_DEMO)/Javagui
cp -R Javagui/Demo/* $(SECONDO_DEMO)/Javagui
.PHONY: tar_demo
tar_demo:
cd ./sec-demo; tar -cvzf ../sec-demo.tgz \
--exclude-from ../opt_demo.exclude \
--exclude-from ../bin_demo.exclude *
srcprefix := secondo
define checkTag
@if [ -z "$(tag)" ]; then echo; echo "Error: Variable \"tag\" not set! "; echo; exit 1; fi
endef
define checkDir
@if [ -d $(srcprefix) ]; then echo ; echo "Error: subdirectory $(srcprefix) already present! "; echo;exit 1; fi
endef
.PHONY: tag-version
tag-version:
$(checkTag)
cvs -Q tag -F $(tag)
fileList := $(tempdir)/_SRC_FILE_LIST
.PHONY: public-linux
public-linux: rmList mkLat1
.PHONY: public-version
public-version: rmList mkLat1 mkcp1252
.PHONY: cp-sources
cp-sources:
cp $(LIN_SRC) $(net)
cp $(WIN_SRC) $(net)
.PHONY: src-archive
src-archive:
cvs -Q export -rHEAD -dsecondo secondo
tar -czf secondo.tgz secondo
.PHONY: mkLat1
mkLat1: $(fileList)
rm -rf $(SRC_FILES)
tar -czf $(LIN_SRC) -T $<
.PHONY: mkcp1252
mkcp1252: $(fileList)
# a list of file endings which need not to be recoded
find $(srcprefix) ! \( \
-type d \
-or -name "*.bmp" \
-or -name "*.book" \
-or -name "*.canvas" \
-or -name "*.dll" \
-or -name "*.eps" \
-or -name "*.fig" \
-or -name "*.fm" \
-or -name "*.gz" \
-or -name "*.gif" \
-or -name "*.tgz" \
-or -name "*.jar" \
-or -name "*.zar" \
-or -name "*.jpg" \
-or -name "*.pdf" \
-or -name "*.png" \
-or -name "*.sxd" \
-or -name "*.sxc" \
-or -name "*.xls" \
-or -name "*.sda" \
-or -name "*.vsd" \
-or -name "*.zip" \
-or -name "*.icns" \
-or -path "*javazoom*" \
-or -path "*TPC-D*" \
\) \
-exec recode lat1..cp1252 {} \;
cat $< | zip -9 -r $(WIN_SRC) -@ > /dev/null
.PHONY: rmList
rmList:
$(checkDir)
rm -f $(fileList)
$(fileList): $(srcprefix)/makefile
CM-Scripts/mkpublic.sh nonpublic.filelist $@ $(srcprefix)
$(srcprefix)/makefile:
$(checkTag)
cvs -Q export -r$(tag) -d$(srcprefix) secondo
# store modified files in a tar archive
.PHONY: showdiff
showdiff:
cvs -nq update | grep "^. "
/tmp/cvs.list:
cvs -nq update | grep "^. " > $@
/tmp/tar.list: /tmp/cvs.list
cat $< | sed 's/. //' > $@
# you may need to setup ~/.cvsignore in order
# to prevent storing generated stuff
.PHONY: backup
backup: removeLists backup.tgz
.PHONY: removeLists
removeLists:
rm -f /tmp/tar.list
rm -f /tmp/cvs.list
backup.tgz: /tmp/tar.list
rm -f $@
tar -cvzf $@ -T $<
.PHONY: cscope
cscope: cscope.files
cscope -bq -i $<
cscope.files:
find . -iname "*.cpp" -or -iname "*.c" \
-or -iname "*.y" \
-or -iname "*.l" \
-or -iname "*.h" \
-or -iname "makefile*" > $@
.PHONY: backup-all
backup-all:
dir=$${PWD##*/}; tar -czf $$dir.tgz --exclude-from exclude.pat -C.. $$dir
.PHONY: sync-test
sync-test:
ifdef syncdir
rsync -nvau --exclude-from exclude.pat * $$syncdir
else
echo "Error: Variable syncdir undefined!"
endif
.PHONY: sync-now
sync-now:
ifdef syncdir
rsync -au --exclude-from exclude.pat * $$syncdir
else
echo "Error: Variable syncdir undefined!"
endif
.PHONY: showtags
showtags:
cvs log -h makefile
.PHONY: showpubtags
showpubtags:
cvs log -h makefile | grep public
.PHONY: changelog
changelog: ChangeLog updateChgLog ../secondo-src/Documents/ChangeLog
ChangeLog:
ifdef to
ifdef from
cvs -Q update -dP
cvs tag public-$(to)
cvs2cl.pl --delta public-$(from):public-$(to)
endif
endif
.PHONY: updateChgLog
updateChgLog: Documents/ChangeLog
Documents/ChangeLog: ChangeLog
mv Documents/ChangeLog ChangeLog.old
cat ChangeLog ChangeLog.old > Documents/ChangeLog
../secondo-src/Documents/ChangeLog: Documents/ChangeLog
cp $< ../secondo-src/Documents
# todo: write a shell script which recurses into sub directories and builds
# a complete list of new directories and new files.
.PHONY: newfiles
newfiles:
cvs -nq update | grep "^? " | sed 's#? ##' > newfiles.txt
.PHONY: addfiles
addfiles:
cvs add $(cat newfiles.txt)
# pattern rule for creating an tar ball
%.tar.gz : %
tar -czf $@ $<