XMake CHANGES

XMake version: 0.93a
Release Date: 08/17/05
Copyright (c) 2003 Gregory Keranen. All rights reserved.



	8/9/05 - recommended naming convention:
		Inhibit php XMExtension from attempting to parse included files which are
		not intended to ever be parsed outside the context of the parent file from
		which they are included:
		BAD EXAMPLE:
				header.php includes header.inc.php
				header.inc.php -> header.inc.phpo
				this will likely generate fatal error
		GOOD EXAMPLE:
				header.php includes header.inc
				header.inc is not parsed by php XMExtension
				header.php -> header.phpo
				header.phpo is validated
				header.phpo is excluded from XMAKE_OUTFILES
		CAVEAT:
			Block access to included directory (.php or .inc files) with an
			.htaccess file rule.
			web server should be configured not to use default MIME type for .inc
			files!
			Instead:
			    AddHandler do-nothing .inc
				Action do-nothing /access-not-permitted


	8/9/05 - added php XMExtension files:
		config/php.config
		config/php.mkh
		config/php.mkr

	8/8/05 - updated file:
	templates/XMakefile.mks
		includes targets for:
		validation
		build
		rsync to remote hosts: dev stage www
	XM_phonyTargets+=  validate validate-html build test bak public
	public.test download download.test

	XMakefile.mkh
	XME_mkdoPatternRule
		8/8/05 - added export XMAKE_OUTFILE to avoid circular dependencies

	6/29/05
	XMakefile.mkh
		added rule: clean.tmpfiles
	XMakefile.mk
		clean: clean.outfiles clean.makefiles clean.tmpfiles

	6/22/05
	config/XMakefile.mhk
		XME_mkdoPatternRule
			remove mkdo file prior to exit on failure
			this should prevent deadlock in proper updating of target when fatal
			errors prevent recognition of new prerequisites have changed but an
			outdated mkdo file controls the build

	6/21/05
	xmake/config/XMake.defaults
		export XMAKE_FORCE=FORCE

	phpx Extension added
	xmake_org/phpx/phpx.inc.php
		function phpx_add_prerequisites( $prerequisiteFiles=XMAKE_FORCE )
			default value translates to Gnu make target 'FORCE'
			causes forced rebuild of target file

	6/19/05
	XMakefile.mkh: XME_mkdoPatternRule
	ADDED: 6/19/05
	echo '$${XMAKE_PROJECT_DIR}/$$*$$(_XM_outfileSuffix) : '$$@
	"$$$$_XM_dependencies" '$$(XME_$(1)_makefiles) $(2) $$(XM_makefiles)
	$$(XMAKE_PROJECT_CONF_FILE)' >> $$@; \
	echo >> $$@; \
	echo '$$@: ' "$$$$_XM_dependencies" '$$(XME_$(1)_makefiles) $(2)
	$$(XM_makefiles) $$(XMAKE_PROJECT_CONF_FILE)' >> $$@; \

	PROBLEM:
		mkdo files were not regenerated when prerequisite files, other than the
		direct prerequisite of an extension mapping, changes.
	PROBLEM:
		global makefiles and XMake.conf were not previously listed as
		prerequisites
	Example:
		cd /usr/local/apache/htdocs/gembroker/www/dev/junk
		xmake $(curdir)/test
		touch test.phpx
		xmake $(curdir)/test # test, test.phpx.mkdo is rebuilt
		touch /usr/local/apache/htdocs/gembroker/www/dev/lib/phpx/php.inc
		xmake $(curdir)/test # test is rebuilt
		# ERROR: test.phpx.mkdo is NOT rebuilt
		# Changing prerequisite files may add/subtract prerequisites!

	6/11/05
	added phpc executible for debugging with same environment as xmake
		phpc set environment from, etc.
			 . $(XMAKE_PROJECT_DIR)/XMake.conf

	phpc.conf
		changed default error handling
			# XMAKE_XME_PHPC_FATAL_ERROR_MASK controls which error codes are fatal
			# when building output files
			# E_WARNING|E_USER_ERROR|E_USER_WARNING=2|256|512
			# =770
			# E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR |
			# E_WARNING | E_CORE_WARNING | E_COMPILE_WARNING | E_USER_WARNING
			# = 1015
			# E_ALL&~E_NOTICE=2047&~8=2039
			# E_ALL | E_STRICT=4095

			export XMAKE_XME_PHPC_FATAL_ERROR_MASK=4095

			# XMAKE_XME_PHPC_ERROR_REPORTING_MASK controls error_reporting() level
			# XMAKE_XME_PHPC_ERROR_REPORTING_MASK is used for both phpc and php
			# files
			export XMAKE_XME_PHPC_ERROR_REPORTING_MASK=4095

	Xmakefile.mkh : XME_mkdoPatternRule
		added lines for debugging mkdo failures:
			@$(XM_silent) || echo 'XMExtension: $(1)'
			@$(XM_silent) || { if test  $(1) = 'phpc' ; then echo
			'XMAKE_EXT_PHPC_PHP_INI= $(XMAKE_EXT_PHPC_PHP_INI)' ; fi }

	phpc.mkh : XME_phpc_dependCmd
		changed error reporting so FATAL errors aren't lost when mkdo build
		fails:
			error_reporting( $(XMAKE_XME_PHPC_FATAL_ERROR_MASK) ); \
			$$XMAKE_XME_PHPC_FATAL_ERROR_MASK=0; \
			phpc_setenv( "$(1)"); \

    xmake.sh, XMakefile.mkh:
        fixed bug in handling command line variable overrides:
            var='a b'
            $(XMAKE) definition change to no longer reference $(MAKEFLAGS);
            not necessary

    XMakefile.mkh
        fixed problem with introspection rule for phony targets:
        XM.deps.$(phony_target)
        variables are used to prevent make -n from executing commands
        including '$(MAKE)'
                $(XM_reqs), $(XM_deps), $(XM_deprule)

    Changed path to phpc.inc; bundled at xmake_org/phpc/phpc.inc
        allows use of phpc functions WITHOUT XMake installed
        avoids "multiple definitions" if file is included from multiple
        paths

    phpc.inc:
        added function phpc_eval_FALSE() to handle result of eval()
        added function phpc_trigger_error()
        phpc_error_handler()
            changed HTML formatting in server enviornment
            checks state of php_ini_get("display_errors") on every call

    BUG Fixed: xmake -E 't2h phpc' -C ... command line options parsing
    works correctly now

    Multiple instances of a file in XM_outfiles is a Warning; no longer
    fatal:
       required for rule chaining: file.t2h.php -> file.t2h -> file

    Improved formatting of xmake/README.txt to wrap lines

xmake-0.92
Release Date: 5/2/2003

    Many enhancements for PHP support (phpc XMExtension)

    More examples of usage

    Improved test harness

    XMake.conf:
        XMAKE_RECURSION=0 is now the default
        changed default paths to make and bash

    xmake.sh:
        vastly improved parameter parsing
        eliminated ugly recursive invocation

    changed name of XM_sources.mkh to XM_sources.mkhs
        used with XMAKE_AUTODETECT_SOURCE_FILES=0

    removed automatic inclusion of custom %.mkr files: %.mks is better

    xmakep.sh:
        each XMExtension now has its own global .conf file
        config options for XMExtensions removed from global XMake.conf
        individual .conf files are now appended to XMake.conf by xmakep

    changed this shell scripts to use /usr/local/bin/bash instead of
    /bin/sh:
        ${XMAKE_HOME}/bin/xmakecmd

    corrected documentation:
        XMakefile.mks was referred to as XMakefile.xms

    removed XMExtensions: xms, xms-dir from public distribution

    src/xmakep/xmakep.sh
        added parameter PROJECT_DIR to support creating projects in other
        than current dir
        added -t option to copy files in config/Project/templates/ folder
        moved config/Project/XMakefile.xms to
        config/Project/templates/XMakefile.xms
        avoids risk of overwriting custom makefile when updating with
        xmakep -f

    XMake.conf:
        added variables to control XMExtension commands
        you should not need to edit any XMExtension files or XMakefile for
        most customizations
        moved from XMakefile:

        added variables:
            XMAKE_XME_PHPC_FATAL_ERROR_MASK=770
            XMAKE_XME_PHPC_LINT_FATAL_ERROR_MASK=0
            XMAKE_AUTODETECT_SOURCE_FILES=1

    XMakefile.mkh:
        added support for XMAKE_AUTODETECT_SOURCE_FILES=1

    config/XMExtensions/xdir
        added this new extension as a generic directory container

    examples/phpc/build-versus-run-time.php.phpc
        show how to use build time versus run-time php code

    config/XMExtensions/phpc.mkh
        change directory to %.phpc prior to executing commands
        added phpc.lint and php.lint rules

xmake-0.91
Release Date: 2/28/2003

    added custom rule macros; standardized API

    bug fixes relating to command line option parsing; config file handling

    added support for recursive XMake: prerequisites can include targets in
    external XMake projects

    added command line options to support recursion: -x -X

    replaced XM_outfiles+=$(newFiles) with:
        $(eval $(call XM_append,XM_outfiles,$(newFiles)))

    removed .mkdo files from pattern rule prerequisites
        these inhibited rule chaining

    Added test suite:
        xmake/test/XMakeTest.mks

    improved how XMAKE_EXTENSIONS are enabled/disabled;

    command-line specification of XMAKE_EXTENSIONS is supported with -E
    option

    doc/CHANGES.html
        added this file

    config/XMExtensions/phpc.inc
        changed global PREREQUISITE_FILES to XMAKE_PHP_PREREQUISITE_FILES

    config/XMExtensions/phpc.mkh
        renamed _XME_phpc_options to XME_phpc_options
            - options are publicly accessible; i.e., from custom makefiles

    config/XMExtensions/t2h.mkh
        renamed _XME_t2h_options to XME_t2h_options
            - options are publicly accessible; i.e., from custom makefiles
        XME_t2h_options:=

    config/XMExtensions/t2h.mkr
        t2h always uses XME_t2h_options file, if it exists

    config/XMakefile.mkr
        XM_outfileRule renamed to XME_explicitRule
        added XME_staticRule

    config/XMakefile.mkh
        define XM_append
        # USAGE: $(eval $(call XM_append,varName,$(newFiles)))

    config/XMakefile
         removed line: XM_phonyTargets+=$(XMAKE_TMP_DIR)
         fixed problem with XM_customAutoMakefile inclusion when 'xmake
         clean'
         removed match-anything rule: % : ${CURDIR}/%
         added match-anything rule: %
            - exit with error message if target is not found


xmake-0.90
Release Date: 1/24/2003

    initial public release