#===-- Build Script For docs ----------------------------------*- Python -*-===#
#
#                      High Level Virtual Machine (HLVM)
#
# Copyright (C) 2006 Reid Spencer. All Rights Reserved.
#
# This software is free software; you can redistribute it and/or modify it 
# under the terms of the GNU Lesser General Public License as published by 
# the Free Software Foundation; either version 2.1 of the License, or (at 
# your option) any later version.
#
# This software 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 Lesser General Public License for 
# more details.
#
# You should have received a copy of the GNU Lesser General Public License 
# along with this library in the file named LICENSE.txt; if not, write to the 
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
# MA 02110-1301 USA
#
#===----------------------------------------------------------------------===#
from build import hlvm
from os.path import join as pjoin
Import('env')
if 'install' in COMMAND_LINE_TARGETS:
  hlvm.GetDoxygen(env)
  hlvm.GetConfigFile(env)
  hlvm.GetXSLTproc(env)
  hlvm.InstallDocs(env,hlvm.GetFiles(env,'*.html')+['hlvm.css'])
  env.XSLTproc('HLVM.rng.html',['RngToXHTML.xsl','#hlvm/Reader/HLVM.rng'])
  hlvm.InstallDocs(env,'HLVM.rng.html')
  env.ConfigFile('Doxyfile','Doxyfile.in')
  env.Doxygen('doxygen.tar.gz','Doxyfile')
  hlvm.InstallDocs(env,'doxygen.tar.gz')

if 'doxy-install' in COMMAND_LINE_TARGETS:
  hlvm.GetDoxygenInstall(env)
  installtgt = '/var/www/sites/hlvm/apis/doxygen.tar.gz'
  installsrc = 'doxygen.tar.gz'
  env.DoxygenInstall(installtgt,installsrc)
  env.Alias('doxy-install',installtgt)

hlvm.Dirs(env,['tools'])
