CategoryStale
DeleteMe
--
KenEstes - 04 Oct 2001
# the directory where non cgi files will be installed
PREFIX=/home/httpd/twiki
# the directory where cgi files will be installed
CGI_PREFIX=$(PREFIX)
# the directory where html files will be installed
HTML_PREFIX=$(PREFIX)
DATA_PREFIX=$(PREFIX)/data
LIB_PREFIX=$(PREFIX)/lib
TEMPLATES_PREFIX=$(PREFIX)/templates
BIN_PREFIX=$(CGI_PREFIX)/bin
PUB_PREFIX=$(HTML_PREFIX)/pub
# build directory, used as a temporary staging area
BUILD=./build
# where to find build tools on the build machine
PERL=/usr/bin/perl
MKDIR=mkdir
CP=cp
# where perl is located on the target machine
TARGET_PERL=$(PERL)
# The extension which cgi files must have. Typically this is:
# .cgi, .pl, or the empty string
EXT=
# file owners for installed files
# these are used only if the target owners is run.
CGI_USER=nobody
CGI_USER=nobody
FILE_OWNER=root
FILE_GROUP=twiky
#-------------------------------------------------------------
# Users should not need to configure anything below this line
#-------------------------------------------------------------
# The basic targets
# Remember that when people make rpms they set the PREFIX differently
# during 'make all' then 'make install'. The prefix for installation
# is where to put the files for packaging and this is not the same as
# where the files will be installed on the target system. The prefix
# in the compilation step represents where the files will be installed
# on the target system so that this data can be hard coded by
# applications.
all: build
build: all_build_files
install: all_install_files dir_permissions
owners: install
groups: install
# ------------------------------------
# Variables derived from file searches
# ------------------------------------
BIN_FILES = $(shell find ./bin -type f)
LIB_FILES = $(shell find ./lib -type f)
DATA_FILES = $(shell find ./data -type f)
PUB_FILES = $(shell find ./pub -type f)
TEMPLATES_FILES = $(shell find ./templates -type f)
BIN_BUILD_FILES = $(patsubst ./%,$(BUILD)/%$(EXT),$(BIN_FILES))
LIB_BUILD_FILES = $(patsubst ./%,$(BUILD)/%,$(LIB_FILES))
DATA_BUILD_FILES = $(patsubst ./%,$(BUILD)/%,$(DATA_FILES))
PUB_BUILD_FILES = $(patsubst ./%,$(BUILD)/%,$(PUB_FILES))
TEMPLATES_BUILD_FILES = $(patsubst ./%,$(BUILD)/%,$(TEMPLATES_FILES))
ALL_BUILD_FILES = $(BIN_BUILD_FILES) $(LIB_BUILD_FILES) $(DATA_BUILD_FILES) $(PUB_BUILD_FILES) $(TEMPLATES_BUILD_FILES)
all_build_files: $(ALL_BUILD_FILES)
BIN_INSTALL_FILES = $(patsubst ./bin/%,$(BIN_PREFIX)/%$(EXT),$(BIN_FILES))
LIB_INSTALL_FILES = $(patsubst ./lib/%,$(LIB_PREFIX)/%,$(LIB_FILES))
DATA_INSTALL_FILES = $(patsubst ./data/%,$(DATA_PREFIX)/%,$(DATA_FILES))
PUB_INSTALL_FILES = $(patsubst ./pub/%,$(PUB_PREFIX)/%,$(PUB_FILES))
TEMPLATES_INSTALL_FILES = $(patsubst ./templates/%,$(TEMPLATES_PREFIX)/%,$(TEMPLATES_FILES))
ALL_INSTALL_FILES = $(BIN_INSTALL_FILES) $(LIB_INSTALL_FILES) $(DATA_INSTALL_FILES) $(PUB_INSTALL_FILES) $(TEMPLATES_INSTALL_FILES)
all_install_files: $(ALL_INSTALL_FILES)
debug:
@ echo BIN_FILES $(BIN_FILES)
@ echo
@ echo LIB_FILES $(LIB_FILES)
@ echo
@ echo DATA_FILES $(DATA_FILES)
@ echo
@ echo PUB_FILES $(PUB_FILES)
@ echo
@ echo TEMPLATES_FILES $(TEMPLATES_FILES)
@ echo
@ echo ALL_BUILD_FILES $(ALL_BUILD_FILES)
@ echo
@ echo ALL_INSTALL_FILES $(ALL_INSTALL_FILES)
@ echo
# change source files to reflect the resources on the target machine.
BIN_SUBSTITUTE= $(PERL) -pi -e "s!/usr/bin/perl!$(TARGET_PERL)!;" \
-e "s!use lib \( \'\.' \);!use lib \( \'$(LIB_PREFIX)\' \);!;" \
-e "s!use lib \( \'\.\./lib\' \);\n!!;"
# In a target rule ensure that the dirname of the target file exists.
CHECK_DIR= DIR=$(dir $@); [ -d $$DIR ] || $(MKDIR) -p $$DIR;
# If the file is a ,v file change the line which tells who the owner
# of the lock file is to match the user name who will run the
# cgi-bin's.
CHOWN_LOCKS_IN_RCS_FILES= echo $@ | egrep ',v$$'; \
if [ $$? -eq 0 ]; then \
$(PERL) -pi -e 's!^\tnobody:!\t$(CGI_USER):!;' $@ ; \
fi
# ---------------------------------------------
# pattern rules for the 'building' of a release from sources.
# Perform all subsitutions on the text files and create a directory
# hierarchy suitable for installation.
# While copying the bin directory, perform substituions and add file
# name extensions as needed. After copying chmod files to the propper permissions.
$(BUILD)/bin/%$(EXT) : ./bin/%
$(CHECK_DIR)
$(CP) $< $@
$(BIN_SUBSTITUTE) $@
chmod 755 $@
# Other directories are just copied as is, not substitutions and no
# extensions. After copying chmod files to the propper permissions.
$(BUILD)/lib/% : ./lib/%
$(CHECK_DIR)
$(CP) $< $@
chmod 444 $@
$(BUILD)/data/% : ./data/%
$(CHECK_DIR)
$(CP) $< $@
$(CHOWN_LOCKS_IN_RCS_FILES)
chmod 664 $@
$(BUILD)/pub/% : ./pub/%
$(CHECK_DIR)
$(CP) $< $@
chmod 664 $@
$(BUILD)/templates/% : ./templates/%
$(CHECK_DIR)
$(CP) $< $@
chmod 444 $@
# ----------------------------
# pattern rules for installation
$(BIN_PREFIX)/% : $(BUILD)/bin/%
$(CHECK_DIR)
$(CP) -p $< $@
$(LIB_PREFIX)/% : $(BUILD)/lib/%
$(CHECK_DIR)
$(CP) -p $< $@
$(DATA_PREFIX)/% : $(BUILD)/data/%
$(CHECK_DIR)
$(CP) -p $< $@
$(PUB_PREFIX)/% : $(BUILD)/pub/%
$(CHECK_DIR)
$(CP) -p $< $@
$(TEMPLATES_PREFIX)/% : $(BUILD)/templates/%
$(CHECK_DIR)
$(CP) -p $< $@
# ---------------------------------
# Set the permissions on the installation directories
dir_permissions:
find $(BIN_PREFIX) -type d | xargs chmod 755
find $(LIB_PREFIX) -type d | xargs chmod 755
find $(TEMPLATES_PREFIX) -type d | xargs chmod 755
find $(DATA_PREFIX) -type d | xargs chmod 775
find $(PUB_PREFIX) -type d | xargs chmod 775
# Set the owner on the installation directories
# If the installer does not have root access then this step may not be
# run. We do not require it for 'make all' or 'make install' (these
# are traditional commands used to build RPM's and RPM has other
# mechanisms to set the owner of files inside the packages it creates)
# but provide it as a convienence for those who need it.
owners: install
find $(BIN_PREFIX) -type f | xargs chown $(FILE_OWNER)
find $(BIN_PREFIX) -type d | xargs chown $(FILE_OWNER)
find $(LIB_PREFIX) -type f | xargs chown $(FILE_OWNER)
find $(LIB_PREFIX) -type d | xargs chown $(FILE_OWNER)
find $(TEMPLATES_PREFIX) -type f | xargs chown $(FILE_OWNER)
find $(TEMPLATES_PREFIX) -type d | xargs chown $(FILE_OWNER)
#
find $(DATA_PREFIX) -type f | xargs chown $(CGI_USER_OWNER)
find $(DATA_PREFIX) -type d | xargs chown $(CGI_USER_OWNER)
find $(PUB_PREFIX) -type f | xargs chown $(CGI_USER_OWNER)
find $(PUB_PREFIX) -type d | xargs chown $(CGI_USER_OWNER)
groups: install
find $(BIN_PREFIX) -type f | xargs chgrp $(FILE_GROUP)
find $(BIN_PREFIX) -type d | xargs chgrp $(FILE_GROUP)
find $(LIB_PREFIX) -type f | xargs chgrp $(FILE_GROUP)
find $(LIB_PREFIX) -type d | xargs chgrp $(FILE_GROUP)
find $(TEMPLATES_PREFIX) -type f | xargs chgrp $(FILE_GROUP)
find $(TEMPLATES_PREFIX) -type d | xargs chgrp $(FILE_GROUP)
#
find $(DATA_PREFIX) -type f | xargs chgrp $(CGI_USER_GROUP)
find $(DATA_PREFIX) -type d | xargs chgrp $(CGI_USER_GROUP)
find $(PUB_PREFIX) -type f | xargs chgrp $(CGI_USER_GROUP)
find $(PUB_PREFIX) -type d | xargs chgrp $(CGI_USER_GROUP)
How about splitting this up at the "Users should not need to configure anything below this line" line?
The second part could be reused for a
TWikiUnderCygwin installation.
The information from the first part is usually asked via some dialog,
not entered with a text editor. (Mostly a cultural difference, but it
will be a barrier for the typical Windows user.)
--
JoachimDurchholz - 05 Oct 2001