#!/bin/sh

# compile_xorriso.sh
# Copyright 2005 - 2015 Thomas Schmitt, scdbackup@gmx.net
# GPL version 2 or later
#
# Not intended for general use in production installations !
# Rather use:  ./bootstrap ; ./configure ; make
#
# This is a development tool which expects a special setup of directories
# on a Linux system (e.g. SuSE 10.2).
# It is to be executed in a common parent of the directories given with
#   $isofs $isoburn $burn $xorr

isofs=./nglibisofs-develop/libisofs/libisofs_libisofs_la-
isofs_filter=./nglibisofs-develop/libisofs/filters/libisofs_libisofs_la-
burn=./libburn-develop/libburn
isoburn=./libisoburn-develop/libisoburn
xorr=./libisoburn-develop/xorriso

debug_opts="-O2"
def_opts="-DXorriso_allow_external_filterS -DXorriso_allow_launch_frontenD"
largefile_opts="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1"
do_strip=0
static_opts=
warn_opts="-Wall -Wextra -Wno-unused-parameter -Wno-char-subscripts"
# warn_opts="-Wall -Wsign-compare"
nglibisofs=1
def_have="-DHAVE_STDINT_H"
def_libreadline="-DXorriso_with_readlinE"
def_libjte="-DXorriso_with_libjtE  -DLibisofs_with_libjtE"
link_libreadline="-lreadline"
link_libcdio=
link_libjte="-ljte"

for i in "$@"
do
  if test "$i" = "-do_diet"
  then
    def_opts="$def_opts -DXorriso_no_helP"
    warn_opts=
  elif test "$i" = "-do_strip"
  then
    do_strip=1
  elif test "$i" = "-g"
  then
    debug_opts="-g -O0"
  elif test "$i" = "-no_libreadline"
  then
    def_libreadline=""
    link_libreadline=""
  elif test "$i" = "-dvd_obs_64k"
  then
    def_opts="$def_opts -DXorriso_dvd_obs_default_64K"
  elif test "$i" = "-use_libcdio"
  then
    link_libcdio="-lcdio"
  elif test "$i" = "-no_libjte"
  then
    def_libjte=""
    link_libjte=""
  elif test "$i" = "-help" -o "$i" = "--help" -o "$i" = "-h"
  then
    echo \
        "$xorr/compile_xorriso.sh : to be executed above top level directories"
    echo "Options:"
    echo "  -dvd_obs_64k      64 KB default size for DVD/BD writing."
    echo "  -no_libreadline   do not compile for and link with libreadline."
    echo "  -use_libcdio      link with -lcdio because libburn uses it."
    echo "  -no_libjte        do not compile for and link with libjte."
    echo "  -do_diet          produce capability reduced lean version."
    echo "  -do_strip         apply program strip to compiled programs."
    echo "  -g                produce debuggable programm."
    echo "  -static           compile with cc option -static."
    exit 0
  elif test "$i" = "-static"
  then
    static_opts="-static"
  fi
done

libisofs=
libisofs="$libisofs $isofs"buffer.o
libisofs="$libisofs $isofs"builder.o
libisofs="$libisofs $isofs"data_source.o
libisofs="$libisofs $isofs"ecma119.o
libisofs="$libisofs $isofs"ecma119_tree.o
libisofs="$libisofs $isofs"eltorito.o
libisofs="$libisofs $isofs"filesrc.o
libisofs="$libisofs $isofs"fs_image.o
libisofs="$libisofs $isofs"fs_local.o
libisofs="$libisofs $isofs"fsource.o
libisofs="$libisofs $isofs"image.o
libisofs="$libisofs $isofs"iso1999.o
libisofs="$libisofs $isofs"joliet.o
libisofs="$libisofs $isofs"hfsplus.o
libisofs="$libisofs $isofs"hfsplus_decompose.o
libisofs="$libisofs $isofs"hfsplus_classes.o
libisofs="$libisofs $isofs"hfsplus_case.o
libisofs="$libisofs $isofs"libiso_msgs.o
libisofs="$libisofs $isofs"messages.o
libisofs="$libisofs $isofs"node.o
libisofs="$libisofs $isofs"rockridge.o
libisofs="$libisofs $isofs"rockridge_read.o
libisofs="$libisofs $isofs"stream.o
libisofs="$libisofs $isofs"tree.o
libisofs="$libisofs $isofs"util.o
libisofs="$libisofs $isofs"util_htable.o
libisofs="$libisofs $isofs"util_rbtree.o
libisofs="$libisofs $isofs"system_area.o
libisofs="$libisofs $isofs"make_isohybrid_mbr.o
libisofs="$libisofs $isofs"aaip_0_2.o
libisofs="$libisofs $isofs"filter.o
libisofs="$libisofs $isofs_filter"external.o
libisofs="$libisofs $isofs_filter"zisofs.o
libisofs="$libisofs $isofs_filter"gzip.o
libisofs="$libisofs $isofs"md5.o

echo "Version timestamp :  $(sed -e 's/#define Xorriso_timestamP "//' -e 's/"$//' "$xorr"/xorriso_timestamp.h)"

date -u '+#define Xorriso_build_timestamP "%Y.%m.%d.%H%M%S"' >"$xorr"/xorriso_buildstamp.h
echo "Build timestamp   :  $(sed -e 's/#define Xorriso_build_timestamP "//' -e 's/"$//' "$xorr"/xorriso_buildstamp.h)"

echo "compiling program $xorr/xorriso.c $static_opts $debug_opts $def_opts $link_libcdio"
cc -I. -DXorriso_with_maiN $def_have $def_libreadline $def_libjte \
  $warn_opts \
  $static_opts \
  $debug_opts \
  $def_opts \
  $largefile_opts \
  \
  -o "$xorr"/xorriso \
  \
  "$xorr"/xorriso_main.c \
  "$xorr"/sfile.c \
  "$xorr"/aux_objects.c \
  "$xorr"/findjob.c \
  "$xorr"/check_media.c \
  "$xorr"/misc_funct.c \
  "$xorr"/text_io.c \
  "$xorr"/match.c \
  "$xorr"/emulators.c \
  "$xorr"/disk_ops.c \
  "$xorr"/cmp_update.c \
  "$xorr"/parse_exec.c \
  "$xorr"/opts_a_c.c \
  "$xorr"/opts_d_h.c \
  "$xorr"/opts_i_o.c \
  "$xorr"/opts_p_z.c \
  \
  "$xorr"/base_obj.c \
  "$xorr"/lib_mgt.c \
  "$xorr"/sort_cmp.c \
  "$xorr"/drive_mgt.c \
  "$xorr"/iso_img.c \
  "$xorr"/iso_tree.c \
  "$xorr"/iso_manip.c \
  "$xorr"/write_run.c \
  "$xorr"/read_run.c \
  "$xorr"/filters.c \
  \
  "$isoburn"/isoburn.c \
  "$isoburn"/burn_wrap.c \
  "$isoburn"/data_source.c \
  "$isoburn"/isofs_wrap.c \
  \
  "$burn"/async.o \
  "$burn"/debug.o \
  "$burn"/drive.o \
  "$burn"/file.o \
  "$burn"/init.o \
  "$burn"/options.o \
  "$burn"/source.o \
  "$burn"/structure.o \
  \
  "$burn"/sg.o \
  "$burn"/write.o \
  "$burn"/read.o \
  "$burn"/libdax_audioxtr.o \
  "$burn"/libdax_msgs.o \
  "$burn"/cleanup.o \
  "$burn"/cdtext.o \
  \
  "$burn"/mmc.o \
  "$burn"/sbc.o \
  "$burn"/spc.o \
  "$burn"/util.o \
  \
  "$burn"/sector.o \
  "$burn"/toc.o \
  \
  "$burn"/crc.o \
  "$burn"/ecma130ab.o \
  \
  $libisofs \
  \
  $link_libreadline \
  $link_libcdio \
  $link_libjte \
  \
  -lpthread \
  -lacl \
  -lz

  ret=$?
  if test "$ret" = 0
  then
    dummy=dummy
  else
    echo >&2
    echo "+++ FATAL : Compilation of xorriso failed" >&2
    echo >&2
    exit 1
  fi


if test "$do_strip" = 1
then
  echo "stripping result $xorr/xorriso"
  strip "$xorr"/xorriso
fi

if test -x $xorr/unite_html_b_line
then
  dummy=dummy
else
  echo "compiling helper program $xorr/unite_html_b_line"
  ( cd $xorr && cc -g -Wall -o unite_html_b_line unite_html_b_line.c )
fi

echo 'done.'
