## Licensed under the Apache License, Version 2.0 (the "License"); you may not
## use this file except in compliance with the License. You may obtain a copy of
## the License at
##
##   http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
## WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
## License for the specific language governing permissions and limitations under
## the License.

JS_FILE = server/main.js

JS_FILE_COMPONENTS = \
    server/json2.js \
    server/filter.js \
    server/mimeparse.js \
    server/render.js \
    server/state.js \
    server/util.js \
    server/validate.js \
    server/views.js

JS_FILE_COMPONENTS_LAST = server/loop.js

$(JS_FILE): $(JS_FILE_COMPONENTS) $(JS_FILE_COMPONENTS_LAST)
	mkdir -p `dirname $(JS_FILE)`
	echo "// DO NOT EDIT THIS FILE BY HAND" > $@
	echo >> $@
	cat $^ >> $@

CLEANFILES = $(JS_FILE)

EXTRA_DIST = $(JS_FILE_COMPONENTS) $(JS_FILE_COMPONENTS_LAST)

nobase_localdata_SCRIPTS = \
    $(JS_FILE)

nobase_dist_localdata_DATA = \
    www/config.html \
    www/couch_tests.html \
    www/custom_test.html \
    www/database.html \
    www/session.html \
    www/dialog/_admin_party.html \
    www/dialog/_compact_cleanup.html \
    www/dialog/_create_admin.html \
    www/dialog/_login.html \
    www/dialog/_signup.html \
    www/dialog/_create_database.html \
    www/dialog/_delete_database.html \
    www/dialog/_delete_document.html \
    www/dialog/_database_security.html \
    www/dialog/_save_view_as.html \
    www/dialog/_upload_attachment.html \
    www/document.html \
    www/favicon.ico \
    www/image/add.png \
    www/image/apply.gif \
    www/image/bg.png \
    www/image/cancel.gif \
    www/image/compact.png \
    www/image/delete-mini.png \
    www/image/delete.png \
    www/image/grippie.gif \
    www/image/hgrad.gif \
    www/image/key.png \
    www/image/load.png \
    www/image/logo.png \
    www/image/order-asc.gif \
    www/image/order-desc.gif \
    www/image/path.gif \
    www/image/progress.gif \
    www/image/rarrow.png \
    www/image/run-mini.png \
    www/image/run.png \
    www/image/running.png \
    www/image/save.png \
    www/image/sidebar-toggle.png \
    www/image/spinner.gif \
    www/image/test_failure.gif \
    www/image/test_success.gif \
    www/image/thead-key.gif \
    www/image/thead.gif \
    www/image/toggle-collapse.gif \
    www/image/toggle-expand.gif \
    www/image/twisty.gif \
    www/index.html \
    www/replicator.html \
    www/script/couch.js \
    www/script/couch_tests.js \
    www/script/couch_test_runner.js \
    www/script/futon.browse.js \
    www/script/futon.format.js \
    www/script/futon.js \
    www/script/jquery.couch.js \
    www/script/jquery.dialog.js \
    www/script/jquery.editinline.js \
    www/script/jquery.form.js \
    www/script/jquery.js \
    www/script/jquery.resizer.js \
    www/script/jquery.suggest.js \
    www/script/json2.js \
    www/script/oauth.js \
    www/script/sha1.js \
    www/script/base64.js \
    www/script/test/all_docs.js \
    www/script/test/attachments.js \
    www/script/test/attachments_multipart.js \
    www/script/test/attachment_names.js \
    www/script/test/attachment_paths.js \
    www/script/test/attachment_views.js \
    www/script/test/auth_cache.js \
    www/script/test/basics.js \
    www/script/test/batch_save.js \
    www/script/test/bulk_docs.js \
    www/script/test/changes.js \
    www/script/test/compact.js \
    www/script/test/config.js \
    www/script/test/conflicts.js \
    www/script/test/content_negotiation.js \
    www/script/test/cookie_auth.js \
    www/script/test/copy_doc.js \
    www/script/test/delayed_commits.js \
    www/script/test/design_docs.js \
    www/script/test/design_options.js \
    www/script/test/design_paths.js \
    www/script/test/erlang_views.js \
    www/script/test/etags_head.js \
    www/script/test/etags_views.js \
    www/script/test/form_submit.js \
    www/script/test/http.js \
    www/script/test/invalid_docids.js \
    www/script/test/jsonp.js \
    www/script/test/large_docs.js \
    www/script/test/list_views.js \
    www/script/test/lorem.txt \
    www/script/test/lorem_b64.txt \
    www/script/test/lots_of_docs.js \
    www/script/test/method_override.js \
    www/script/test/multiple_rows.js \
    www/script/test/oauth.js \
    www/script/test/proxyauth.js \
    www/script/test/purge.js \
    www/script/test/reader_acl.js \
    www/script/test/recreate_doc.js \
    www/script/test/reduce.js \
    www/script/test/reduce_builtin.js \
    www/script/test/reduce_false.js \
    www/script/test/reduce_false_temp.js \
    www/script/test/replication.js \
    www/script/test/rev_stemming.js \
    www/script/test/rewrite.js \
    www/script/test/security_validation.js \
    www/script/test/show_documents.js \
    www/script/test/stats.js \
    www/script/test/update_documents.js \
    www/script/test/users_db.js \
    www/script/test/utf8.js \
    www/script/test/uuids.js \
    www/script/test/view_collation.js \
    www/script/test/view_collation_raw.js \
    www/script/test/view_conflicts.js \
    www/script/test/view_errors.js \
    www/script/test/view_include_docs.js \
    www/script/test/view_multi_key_all_docs.js \
    www/script/test/view_multi_key_design.js \
    www/script/test/view_multi_key_temp.js \
    www/script/test/view_offsets.js \
    www/script/test/view_update_seq.js \
    www/script/test/view_pagination.js \
    www/script/test/view_sandboxing.js \
    www/script/test/view_xml.js \
    www/status.html \
    www/style/layout.css \
    www/_sidebar.html
