#
# kjam: a build tool
#

INCLUDE_DIRS = src src/exec src/exe ../kx/src ../dl/src ../neta/src ;
LIB_DIRS     = ../kx ../dl ../neta ../neta/lib ;
DLL_DEFINES  = KX_DLL DL_DLL NETA_DLL ;

BETA_VER = 29 ;
CCOPTS = /DBETA_VER=\\"$(BETA_VER)\\" ;

if ( $(PLATFORM) == win32 )
{ 
   WIN_LIBS = icmp.lib ws2_32.lib wsock32.lib user32.lib advapi32.lib ;
   CCDEFINES  = NT ;
} else {
   LINKOPTS on kjam         += -static ;
   LINKOPTS on kjam_preview += -static ;
}

# ----------- packing action for beta and preview builds --------------------------------

rule PackedExecutable TARGET : SOURCES : LIBS : DLLS : TARGET_DIR
{
   PACKFILES = ../scripts/jambase ../scripts/jambase.win32 ../scripts/jambase.linux ;
   
   temporary $(TARGET)_up$(EXE_SUFFIX) ;
   LOCATE on $(TARGET)$(EXE_SUFFIX) = $(BIN_DIR) ;
   depends $(TARGET)$(EXE_SUFFIX) : $(TARGET)_up$(EXE_SUFFIX) $(PACKFILES) ;
   
   StaticExecutable $(TARGET)_up$(EXE_SUFFIX) : $(SOURCES) : $(LIBS) : $(DLLS) : $(TARGET_DIR) ;
   PackExecutable $(TARGET)$(EXE_SUFFIX) : $(TARGET)_up$(EXE_SUFFIX) : $(PACKFILES) ;
   Clean clean : $(TARGET)$(EXE_SUFFIX) $(TARGET).ilk $(TARGET).pdb ;
}

action quietly PackExecutable TARGET : SOURCE : PACK_FILES
{%
   echo Packing Binary       $(TARGET:H) : $(SOURCE:H) : $(PACK_FILES)
   cd $(BIN_DIR)
   ./$(SOURCE:H) @(-P ../../../$(PACK_FILES)) 2>&1 > nul
   mv $(SOURCE:B)_new$(SOURCE:SE="") $(TARGET:H)
   rm $(SOURCE:H) 
%}

# ---------- actual build directives -----------------------------------------

Group             all          : kjam.exe kjam_preview.exe kjam_test.exe kjam.html ;
StaticLibrary     kjamexec     : src/exec           :                                                                   ;
StaticLibrary     kjam         : src                :                                                                   ;
StaticExecutable  kjam         : kjam.cpp           : kjam.lib kjamexec.lib kx.lib kxu.lib dtl.lib neta.lib $(WIN_LIBS) ;
StaticExecutable  kjam_test    : kjam_test.cpp      : kjam.lib kjamexec.lib kx.lib kxu.lib dtl.lib neta.lib $(WIN_LIBS) ;
PackedExecutable  kjam_preview : kjam_preview.cpp   : kjam.lib kjamexec.lib kx.lib kxu.lib dtl.lib neta.lib $(WIN_LIBS) ;

ConcatDocument    kjam.html    : doc_header.html doc_body.html doc_ref.html doc_jamfile.html doc_comp.html doc_quick.html 
                                 doc_tut.html doc_faq.html doc_footer.html : docs ;

notfile archive ;

# ----------- package up the beta and preview builds --------------------------------

# we do all the packaging on windows, even for the linux build. 
# and we only ever package release binaries
if (( $(PLATFORM) == win32 ) && ( $(CURFLAV) == release ))
{
   rule BetaPack ARCHIVE : SOURCE : BINARY
   {
      EXAMPLES = @(docs/examples/*/*:M) @(docs/*:M) ;
      LOCATE on $(ARCHIVE) = $(BIN_DIR) ;
      depends $(ARCHIVE) : $(SOURCE) kjam.html $(EXAMPLES) ;
      depends archive : $(ARCHIVE) ;
     
      CreateBetaPack $(ARCHIVE) : $(SOURCE) : $(BINARY) ;
   }
  
   action quietly CreateBetaPack TARGET : SOURCE : BINARY
   {%
      echo "Making Beta Package  $(TARGET)"
      rm -f $(TARGET:B)
      rm -f $(TARGET)
      mkdir $(TARGET:B)
      mkdir $(TARGET:B)/docs
      mkdir $(TARGET:B)/examples/project1
      mkdir $(TARGET:B)/examples/project2
      mkdir $(TARGET:B)/examples/project3
      cp docs/kjam.html                         $(TARGET:B)/docs/kjam.html
      cp docs/doc_style.css                     $(TARGET:B)/docs
      cp docs/doc_print_style.css               $(TARGET:B)/docs
      cp docs/changelog                         $(TARGET:B)/docs
      cp docs/examples/project1/jambase         $(TARGET:B)/examples/project1
      cp docs/examples/project1/jambase.win32   $(TARGET:B)/examples/project1
      cp docs/examples/project1/jambase.linux   $(TARGET:B)/examples/project1
      cp docs/examples/project1/jamfile         $(TARGET:B)/examples/project1
      cp docs/examples/project2/jamfile         $(TARGET:B)/examples/project2
      cp docs/examples/project3/jambase         $(TARGET:B)/examples/project3
      cp docs/examples/project3/jamfile         $(TARGET:B)/examples/project3
      cp $(SOURCE)                              $(TARGET:B)/$(BINARY)
      cd $(TARGET:B)
      7z u -tzip ../$(TARGET) $(SILENCE) 
      cd ..
      rm -r $(TARGET:B)
   %}
   
   BetaPack kjam_preview_0_$(BETA_VER)_win32.zip : bin/win32/release/kjam_preview.exe : kjam.exe ;
   BetaPack kjam_preview_0_$(BETA_VER)_linux.zip : bin/linux-i686/release/kjam_preview : kjam ;
}


