On Wed, Sep 11, 2013 at 5:50 PM, Jared Still <jkstill@xxxxxxxxx> wrote: > If not, it isn't too difficult to build a simple one to start. > No replies, had to do it myself. :) Maybe useful for someone else. Jared Still Certifiable Oracle DBA and Part Time Perl Evangelist Oracle Blog: http://jkstill.blogspot.com Home Page: http://jaredstill.com Note: do not use spaces for indentation in makefiles - single tab only =================================================================== include.mk CQDEBUG?=FALSE CQPHASE?=DEV CQUSERNAME?=summit CQPASSWORD?=summit # required for batch forms compile TERM=vt220 ORACLE_TERM=vt220 # the later included default.env will set ORACLE_HOME FRMS_ORACLE_HOME=/u01/app/oracle/oraas CURRPATH=${FRMS_ORACLE_HOME}/bin:${FRMS_ORACLE_HOME}/jdk/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:. include ${FRMS_ORACLE_HOME}/forms/server/default.env # the default.env file resets PATH(incorrectly) and ORACLE_HOME PATH := ${CURRPATH} # currently... # compiling: # DEV and OQ: compiled in the same directory # PRD: a local copy is made of newer source files in a separate directory for compiling # # distribution: # PRD only: newer compiled files copied to PRD via RSYNC # connect string set to NOOP unless proper value for CQPHASE - DEV, OQ or PRD ifeq (${CQPHASE},DEV) CQDB:=oravm else ifeq (${CQPHASE},OQ) CQDB:=192.168.1.4/js01 # OQ only # copy newer source files to PRD dir for compilation CQCP_DEST:=/home/oracle/pythian/celora/prdtest else ifeq (${CQPHASE},PRD) CQDB:=192.168.1.4/js01 # following are used to distribute binary files # rsync being used for PRD compiled distribution only # IP is lestrade test server CQRSH_SERVER:=192.168.1.116 CQRSH_USERNAME:=oracle CQRSH_PATH:=~/celora/summit CQPRD_DIR:=/home/oracle/pythian/celora/prdtest else CQDB:=NOOP endif CONNECT:=${CQUSERNAME}/${CQPASSWORD}@${CQDB} info: ifeq (${CQDEBUG},TRUE) @echo CQPHASE: ${CQPHASE} @echo CQUSERNAME: ${CQUSERNAME} @echo CQPASSWORD: ${CQPASSWORD} @echo CONNECT: ${CONNECT} @echo LD PATH: ${LD_LIBRARY_PATH} @echo FORMS : ${FMX} @echo SQLSRCMST: ${SQLSRCMST} @echo SQLLOGMST: ${SQLLOGMST} @echo SQLSRCOPT: $(SQLSRCOPT) @echo SQLLOGOPT: $(SQLLOGOPT) endif =================================================================== makefile include include.mk FRMCMP=${ORACLE_HOME}/bin/frmcmp_batch.sh batch=yes userid=${CONNECT} SQLPLUS=${ORACLE_HOME}/bin/sqlplus ${CONNECT} FRMSRCS = $(wildcard *.fmb) FMX = $(patsubst %.fmb,%.fmx,$(FRMSRCS)) MMSRCS = $(wildcard *.mmb) MMX = $(patsubst %.mmb,%.mmx,$(MMSRCS)) LIBSRCS = $(wildcard *.pll) PLX = $(patsubst %.pll,%.plx,$(LIBSRCS)) SQLSRCMST=$(wildcard sqlmaster.sql) SQLLOGMST = $(patsubst %.sql,%.log,$(SQLSRCMST)) SQLSRCOPT=$(wildcard sql-option-1.sql sql-option-2.sql) SQLLOGOPT= $(patsubst %.sql,%.log,$(SQLSRCOPT)) compile: info SQLMST LIBS MENUS FORMS SQLOPT FORMS: info ${FMX} MENUS: info ${MMX} LIBS: info ${PLX} SQLMST: ${SQLLOGMST} SQLOPT: ${SQLLOGOPT} # '@' suppresses showing the command %.fmx: %.fmb @echo Module: $@ ${FRMCMP} module_type=FORM module=$^ %.mmx: %.mmb @echo Module: $@ ${FRMCMP} module_type=MENU module=$^ %.plx: %.pll @echo Module: $@ ${FRMCMP} module_type=LIBRARY module=$^ %.log: %.sql @echo SQL-Master ${SQLPLUS} @$^ .PHONY: clean tar sqltouch cpOQ2PRD # '-' causes make to ignore errors for action clean: - rm *.fmx *.plx *.mmx sql*.log tar: tar cvfz makedist.tgz cqmake.sh makefile include.mk sqlmaster.sql sql-option*.sql RCS sqltouch: touch sqlmaster.sql sql-option*.sql # rsync the entire directory to the PRD directory for compilation # we have no means at this time to build a dependency list of # what may be in the SQL files. cpOQ2PRD: ifdef CQCP_DEST $(info CQCP_DEST: ${CQCP_DEST}) rsync --times --progress *.pll *.?mb *.olb cqmake.sh makefile include.mk *.sql ${CQCP_DEST} else $(info CQCP_DEST: ${CQCP_DEST}) $(error CQCP_DEST is not set - please see include.mk) endif # copy the newly compiled files to production # will fail if not in the correct directory CQPRD_DIR - see include.mk install: compile @echo CURDIR: ${CURDIR} @echo CQPRD_DIR: ${CQPRD_DIR} ifndef CQPRD_DIR $(error CQPRD_DIR is not set - please see include.mk) endif ifneq (${CURDIR},${CQPRD_DIR}) $(error this is not the production compile directory - please see include.mk) endif rsync --times --progress *.plx *.?mx ${CQRSH_USERNAME}@ ${CQRSH_SERVER}:${CQRSH_PATH} =================================================================== make.sh #!/bin/bash function usage () { script=$(basename $0) printf " $script: make for oracle Forms -p Phase - valid values: DEV OQ or PRD -c Copy new source files to PRD dir for compiling valid only with '-p PRD' -n Dryrun - just show what will happen -d make debug show some variable values in output - default is false -u username for database - default is summit -w password for database - default is summit -t touch SQL files, sqlmaster.sql and sql-option-*.sql include this when you want to ensure SQL scripts are re-run " } # explicitly set or unset variables # as these may have been set at the command line to use make directly # we do not want environment variables to interfere with getopts unset CQDB unset CQRSH_SERVER unset CQRSH_USERNAME unset CQRSH_PATH unset CQPRD_DIR unset CONNECT unset CQPHASE unset CQDEBUG unset CQUSERNAME unset CQPASSWORD unset CQCP_DEST cqDryRunFlag='' CQDEBUG='FALSE' SQLTOUCH='FALSE' CQCOPYPRD='FALSE' PRDINSTALL='FALSE' MAKEACTION='compile' # default target where needed while getopts p:u:w:ndtci arg do case $arg in n) cqDryRunFlag=' -n ';; p) CQPHASE=$OPTARG;; c) CQCOPYPRD='TRUE';; d) CQDEBUG='TRUE';; i) PRDINSTALL='TRUE'; MAKEACTION='install';; t) SQLTOUCH='TRUE';; u) CQUSERNAME=$OPTARG;; w) CQPASSWORD=$OPTARG;; *) echo "invalid argument specified"; usage;exit 1; esac done export CQPHASE CQDEBUG CQUSERNAME CQPASSWORD PRDINSTALL CQCOPYPRD case $CQPHASE in DEV|OQ|PRD);; *) echo "Invalid argument for -p - $CQPHASE"; exit 2;; esac # just copy files to PRD dir [ "$CQCOPYPRD" == 'TRUE' ] && { if [ "$CQPHASE" != 'PRD' ]; then make -f makefile cpOQ2PRD $cqDryRunFlag ERRCODE=$? exit $ERRCODE else echo "Cannot copy files from PRD to PRD" exit 3 fi } [ "$PRDINSTALL" == 'TRUE' ] && { if [ "$CQPHASE" == 'PRD' ]; then make -f makefile install $cqDryRunFlag ERRCODE=$? exit $ERRCODE else echo "use -p PRD to install binaries" exit 4 fi } [ -z "$CQUSERNAME" ] && { printf " Please enter the username: " read CQUSERNAME } [ -z "$CQPASSWORD" ] && { printf " Please enter the password: " read CQPASSWORD } if [ "$CQDEBUG" == 'TRUE' ]; then printf " cqDryRunFlag: $cqDryRunFlag CQPHASE: $CQPHASE CQDEBUG: $CQDEBUG CQUSERNAME: $CQUSERNAME CQPASSWORD: $CQPASSWORD SQLTOUCH: $SQLTOUCH " fi [ "$SQLTOUCH" == 'TRUE' ] && { make -f makefile sqltouch $cqDryRunFlag } make -f makefile ${MAKEACTION} $cqDryRunFlag -- //www.freelists.org/webpage/oracle-l