#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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.
#

INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@

.PHONY: samples Samples tests Tests

include Makefile.incl

all: 
	$(MAKE) -C src/xalanc $@

samples: Samples

Samples: 
	$(MAKE) -C samples $@

tests: 
	$(MAKE) -C Tests $@

clean:
	$(MAKE) -C src/xalanc $@
	$(MAKE) -C samples $@
	$(MAKE) -C Tests $@

install:
	$(MAKE) -C src/xalanc $@

install-package: install-extras
	$(MAKE) -C src/xalanc $@
	$(MAKE) -C samples $@

install-extras:
	$(MKINSTALLDIRS) $(DESTDIR)/$(prefix)
	$(INSTALL_DATA) $(XALANCROOT)/KEYS        $(DESTDIR)/$(prefix)
	$(INSTALL_DATA) $(XALANCROOT)/LICENSE     $(DESTDIR)/$(prefix)
	$(INSTALL_DATA) $(XALANCROOT)/NOTICE      $(DESTDIR)/$(prefix)

	
	
