1
0
Fork 0

Now using automake and autoconf

This implements recommendations by Brandon Invergo for the GNU submission
process, some of which is required by the GNU Coding Standards; I thank him for
his help and swift responses during this time.
perfodd
Mike Gerwitz 2013-12-21 01:03:59 -05:00
parent ab49c53f4b
commit e759d1f2b7
No known key found for this signature in database
GPG Key ID: F22BB8158EE30EAB
5 changed files with 263 additions and 115 deletions

22
.gitignore vendored
View File

@ -1,8 +1,26 @@
build
node_modules
# downloaded by minification build
tools/compiler.jar
# generated by dist target
AUTHORS
NEWS
ChangeLog
# autotools- and configure-generated
aclocal.m4
Makefile.in
Makefile
*.cache/
configure
config.*
# should be added using automake --add-missing
INSTALL
tools/install-sh
tools/missing
# downloaded manually by user
tools/closure-compiler.jar
# website branch
webroot/

113
Makefile
View File

@ -1,113 +0,0 @@
##
# ease.js Makefile
#
# Copyright (C) 2010, 2011, 2012 Mike Gerwitz
#
# This file is part of ease.js.
#
# This program 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 3 of the License, or
# (at your option) any later version.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
##
path_build=./build
path_tools=./tools
path_lib=./lib
path_combine_output=${path_build}/ease.js
path_combine_output_full=${path_build}/ease-full.js
path_browser_test=${path_tools}/browser-test.html
path_test=./test
path_perf_test=${path_test}/perf
perf_tests := $(shell find "$(path_perf_test)" -name 'perf-*.js')
src_js := index.js $(wildcard $(path_lib)/*.js)
src_tests := index.js $(shell find "$(path_test)" -name test-* \
-o -name *Test* \
-o -name inc-*.js )
path_doc := ./doc
combine := $(path_tools)/combine
compiler := $(path_tools)/compiler.jar
path_externs_internal := $(path_build)/externs-internal.js
.PHONY: combine min doc test test-combine clean distclean
default: combine min
all: combine min doc
mkbuild: $(path_build)
# create build dir
$(path_build):
mkdir -p "$(path_build)"
# combine all modules into easily redistributable ease.js file (intended for
# browser)
$(path_combine_output): $(src_js) | mkbuild
${combine} > "$(path_combine_output)"
$(path_combine_output_full): $(src_js) $(src_tests) | mkbuild
INC_TEST=1 "$(combine)" > "${path_combine_output_full}"
$(path_build)/browser-test.html: $(path_browser_test) | $(path_combine_output_full)
cp "$(path_browser_test)" $@
$(path_build)/browser-test-min.html: $(path_browser_test) | $(path_combine_output_full)
cat "$(path_browser_test)" | sed 's/ease-full\.js/ease-full\.min\.js/' > $@
combine: $(path_combine_output) $(path_build)/browser-test.html
doc:
$(MAKE) -C $(path_doc)
doc-html:
$(MAKE) -C $(path_doc) html
test: default
$(MAKE) -C $(path_test)
# performance tests
perf: default $(perf_tests)
perf-%.js: default
@node $@
# externs for compilation process
$(path_externs_internal): | mkbuild
$(path_tools)/mkexterns > $@
# minification process uses Google Closure compiler
min: build/ease.min.js build/ease-full.min.js $(path_build)/browser-test-min.html \
| combine
$(compiler):
wget -O- http://closure-compiler.googlecode.com/files/compiler-latest.tar.gz \
| tar -C $(path_tools) -xzv compiler.jar
build/%.min.js: build/%.js $(path_tools)/externs-global.js $(path_externs_internal) \
$(compiler)
cat $(path_tools)/license-min.tpl > $@
java -jar $(compiler) \
--externs $(path_tools)/externs-global.js \
--externs $(path_build)/externs-internal.js \
--js $< >> $@ || rm $@
install: doc-info
[ -d $(path_info_install) ] || mkdir -p $(path_info_install)
cp $(path_doc_output_info) $(path_info_install)
uninstall:
rm $(path_info_install)/easejs.info
# clean up build dir
clean:
$(MAKE) -C $(path_doc) clean
rm -rf "${path_build}"
distclean: clean
rm $(compiler)

107
Makefile.am 100644
View File

@ -0,0 +1,107 @@
## ease.js Makefile.am
# see README
EXTRA_DIST = AUTHORS NEWS ChangeLog
path_build = $(top_builddir)/build
path_tools = $(top_builddir)/tools
path_lib = $(top_builddir)/lib
path_test = $(top_builddir)/test
path_doc = $(top_builddir)/doc
path_perf_test = $(path_test)/perf
path_combine_output = $(path_build)/ease.js
path_combine_output_full = $(path_build)/ease-full.js
path_browser_test = $(path_tools)/browser-test.html
src_js = @SRC_JS@
perf_tests = @PERF_TESTS@
path_externs_internal = $(path_build)/externs-internal.js
combine = $(path_tools)/combine
compiler = $(path_tools)/closure-compiler.jar
.PHONY: mkbuild combine min doc test perf
default: all-local
all-local: combine min
mkbuild: $(path_build)
# create build dir
$(path_build):
mkdir -p "$(path_build)"
combine: $(path_combine_output) $(path_build)/browser-test.html
# combine all modules into easily redistributable ease.js file (intended for
# browser)
$(path_combine_output): $(src_js) | mkbuild
$(combine) > "$(path_combine_output)"
$(path_combine_output_full): $(src_js) $(src_tests) | mkbuild
INC_TEST=1 "$(combine)" > "${path_combine_output_full}"
$(path_build)/browser-test.html: $(path_browser_test) | $(path_combine_output_full)
cp -f "$(path_browser_test)" $@
$(path_build)/browser-test-min.html: $(path_browser_test) | $(path_combine_output_full)
cat "$(path_browser_test)" | sed 's/ease-full\.js/ease-full\.min\.js/' > $@
# minification process uses Google Closure compiler
min: $(path_build)/ease.min.js $(path_build)/ease-full.min.js \
$(path_build)/browser-test-min.html | combine
build/%.min.js: build/%.js $(path_tools)/externs-global.js $(path_externs_internal)
if HAS_JAVA
if HAS_CCJAR
cat $(path_tools)/license-min.tpl > $@
$(JAVA) -jar $(compiler) \
--externs $(path_tools)/externs-global.js \
--externs $(path_build)/externs-internal.js \
--js $< >> $@ || rm $@
else
@echo "cannot create $@:"
@echo " please download closure-compiler.jar and re-run ./configure"
@exit 1
endif
else
@echo "Please install a Java virtual machine (e.g. openjdk)"
@exit 1
endif
# externs for compilation process
$(path_externs_internal): | mkbuild
$(path_tools)/mkexterns > $@
doc:
$(MAKE) -C "$(path_doc)"
test: check
check: default
$(MAKE) -C "$(path_test)"
# performance tests
perf: default $(perf_tests)
perf-%.js: default
if HAS_NODE
@$(NODE) $@
else
@echo "Node.js must be installed in order to run performance tests"
@exit 1
endif
# generate the familiar files that automake normally checks for
dist-hook:
$(path_tools)/gitlog-to-authors > $(distdir)/AUTHORS
$(path_tools)/gitlog-to-news > $(distdir)/NEWS
$(path_tools)/gitlog-to-changelog \
--strip-cherry-pick \
--format=%s \
-- \
--no-merges \
> $(distdir)/ChangeLog
clean-local:
-rm -rf "$(path_build)"
maintainer-clean-local:
-rm -f "$(compiler)"

43
README 100644
View File

@ -0,0 +1,43 @@
Configuring ease.js
*******************
Copyright (C) 2013 Mike Gerwitz
This file is part of ease.js.
Copying and distribution of this file, with or without modification, are
permitted in any medium without royalty provided the copyright notice and
this notice are preserved. This file is offered as-is, without warranty
of any kind.
This file contains information on configuring and building ease.js; for
information on using the library, please see the Markdown-formatted
README.md file or the Texinfo manual.
Installing
==========
For information on installing ease.js on your system, see INSTALL.
Alternatively, you may install the software using npm by issuing the
following command:
$ npm install easejs
Configuring
===========
If your distribution contains a `configure' file in the project root, you
may jump immediately to INSTALL.
Otherwise, you likely have the sources as they exist in the project
repository, which does not contain the generature `configure' script; you
may generate it by issuing the following commands:
$ aclocal && automake --foreign && autoconf
Please note that the --foreign argument is necessary to `automake' to ignore
certain missing files (such as ChangeLog) that are generated at build time.

93
configure.ac 100644
View File

@ -0,0 +1,93 @@
# For use by automake and autoconf
#
# Copyright (C) 2013 Mike Gerwitz
#
# This file is part of ease.js.
#
# This program 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 3 of the License, or
# (at your option) any later version.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
##
AC_INIT([ease.js], [1.0.0-dev], [bugs@easejs.org])
AC_CONFIG_AUX_DIR([tools])
AM_INIT_AUTOMAKE
AC_CONFIG_FILES([Makefile])
# check for node, which is required for nearly every operation
AC_CHECK_PROGS(NODE, [node nodejs])
AM_CONDITIONAL(HAS_NODE, [test "$NODE"])
# certain portions of the build process require that node be installed (in the
# future, we may be able to allow alternatives, such as SpiderMonkey)
test "$NODE" || AC_MSG_WARN([
Node.js is not installed; certain make targets have been disabled.
])
# yes, this isn't necessarily a good practice, however the directory itself can
# be loaded and used without being built, so it's important that our resulting
# file includes exactly what is contained within the dir and is rebuilt if /any/
# of the files change
AC_MSG_CHECKING([for source js files])
SRC_JS_LIB="$(find lib/*.js | tr '\n' ' ' )"
SRC_JS="index.js $SRC_JS_LIB"
AC_SUBST(SRC_JS)
if test -n "$SRC_JS_LIB"; then
AC_MSG_RESULT(ok)
else
AC_MSG_ERROR(failed!)
fi
# unit tests
AC_MSG_CHECKING([for unit tests])
SRC_TESTS="$( find test/ -name test-* \
-o -name *Test* \
-o -name inc-*.js \
| tr '\n' ' ' \
)"
AC_SUBST(SRC_TESTS)
if test "$SRC_TESTS"; then
AC_MSG_RESULT(ok)
else
AC_MSG_WARN(none found)
fi
# check for performance tests
AC_MSG_CHECKING([for performance tests])
PERF_TESTS=$( find test/perf -name 'perf-*.js' | tr '\n' ' ' )
AC_SUBST(PERF_TESTS)
if test "$PERF_TESTS"; then
AC_MSG_RESULT(ok)
else
AC_MSG_WARN(none found)
fi
# Java is used for Closure Compiler
AC_CHECK_PROGS(JAVA, [java])
AM_CONDITIONAL(HAS_JAVA, [test "$JAVA"])
ccjar=
if test "$JAVA"; then
AC_CHECK_FILE([tools/closure-compiler.jar], [ccjar=1], [AC_MSG_NOTICE([
If you wish perform minification of the combined source file, you must
download closure-compiler.jar into the tools directory; it is available
here:
https://developers.google.com/closure/compiler/
])])
fi
AM_CONDITIONAL(HAS_CCJAR, [test "$ccjar"])
AC_OUTPUT