#!/bin/sh

# make_xorriso_standalone.sh
# Copyright 2008 Thomas Schmitt, scdbackup@gmx.net, GPL
#
# Not intended for general use in production installations !
# 
# This is a development tool which expects a special setup of directories.
# It is to be executed in a common parent of the directories 
#   nglibisofs-develop libburn-develop libisoburn-develop
#
# Creates a standalone tree for building xorriso
# from the contents of a unified libburnia development tree.
#
# The ./bootstrap script gets applied and a source tarball
# is made.
#
# From that tree can be build a binary xorriso/xorriso
# which at runtime depends only on libc and libpthread.
# Execute in $lone_dir :
#
#   ./configure && make
#

current_dir=$(pwd)
lone_dir="$current_dir"/"xorriso-standalone"

xorriso_rev=0.2.3
# For unstable uploads:
xorriso_pl=""
# For stable releases:
# xorriso_pl=".pl00"

with_bootstrap_tarball=1

create_dir() {
  if mkdir "$1"
  then
    dummy=dummy
  else
    echo "Failed to create : $1" >&2
    exit 1
  fi
}

goto_dir() {
  if cd "$1"
  then
    dummy=dummy
  else
    echo "Failed to cd $1" >&2
    exit 1
  fi
}

copy_files() {
  if cp "$@"
  then
    dummy=dummy
  else
    echo "Failed to : cp " "$@" >&2
    exit 1
  fi
}

if test -e "$lone_dir"
then
  echo "Already existing : $lone_dir" >&2
  exit 1
fi


# Top level directory 

goto_dir "$current_dir"/libisoburn-develop

create_dir "$lone_dir"

copy_files \
 AUTHORS \
 CONTRIBUTORS \
 COPYRIGHT \
 COPYING \
 INSTALL \
 acinclude.m4 \
 aclocal.m4 \
 bootstrap \
 compile \
 config.guess \
 config.status \
 config.sub \
 depcomp \
 install-sh \
 libtool \
 ltmain.sh \
 missing \
 mkinstalldirs \
 version.h.in \
 \
 "$lone_dir"

copy_files xorriso/configure_ac.txt         "$lone_dir"/configure.ac

copy_files xorriso/xorriso_makefile_am.txt  "$lone_dir"/Makefile.am

copy_files xorriso/xorriso_pc_in.txt        "$lone_dir"/xorriso.pc.in

copy_files xorriso/README                   "$lone_dir"/README

# echo "See end of xorriso/changelog.txt" >"$lone_dir"/TODO


# libisoburn

create_dir "$lone_dir"/libisoburn
copy_files \
 libisoburn/*.[ch] \
 "$lone_dir"/libisoburn

xorriso/convert_man_to_html.sh

create_dir "$lone_dir"/xorriso
copy_files \
 xorriso/xorrisoburn.[ch] \
 xorriso/xorriso.[ch1] \
 xorriso/xorriso_private.h \
 \
 xorriso/xorriso_timestamp.h \
 \
 xorriso/changelog.txt \
 xorriso/xorriso_eng.html \
 xorriso/man_1_xorriso.html \
 "$lone_dir"/xorriso

copy_files xorriso/xorriso_buildstamp_none.h \
           "$lone_dir"/xorriso/xorriso_buildstamp.h

create_dir "$lone_dir"/test
copy_files \
 test/compare_file.c \
 "$lone_dir"/test/compare_file.c


# nglibisofs

create_dir "$lone_dir"/libisofs
create_dir "$lone_dir"/libisofs/filters
goto_dir   "$current_dir"/nglibisofs-develop
copy_files libisofs/*.[ch] "$lone_dir"/libisofs
copy_files libisofs/filters/*.[ch] "$lone_dir"/libisofs/filters
copy_files COPYRIGHT "$lone_dir"/libisofs

# To get a common version.h 
cat version.h.in >> "$lone_dir"/version.h.in


# <<< obsoleted patchings

if test 1 = 0
then

# Change GNU macro name to POSIX name
sed -e 's/FNM_FILE_NAME/FNM_PATHNAME/g' \
  <libisofs/tree.c >"$lone_dir"/libisofs/tree.c

# Filter out the semi-illegal TODO comments 
( cd "$lone_dir"/libisofs && grep '^[[:space:]]*//' *.[ch] | less )
echo "Is it ok delete all shown //-lines ?"
read yesno
if test "$yesno" = "y" -o "$yesno" = "1"
then
  for i in "$lone_dir"/libisofs/*.[ch]
  do
    # first copy attributes
    cp "$i" "$lone_dir"/libisofs/tmpfile
    # now filter away // lines
    grep -v '^[[:space:]]*//' <"$i" >"$lone_dir"/libisofs/tmpfile && \
      mv "$lone_dir"/libisofs/tmpfile "$i"
  done
fi
echo "Remaining // lines:"
( cd "$lone_dir"/libisofs && grep '//' *.[ch] )

fi



# libburn

create_dir "$lone_dir"/libburn
goto_dir   "$current_dir"/libburn-develop
copy_files libburn/*.[ch] "$lone_dir"/libburn
copy_files COPYRIGHT "$lone_dir"/libburn


# To get a common version.h 
cat version.h.in >> "$lone_dir"/version.h.in


# tarball

if test "$with_bootstrap_tarball" = 1
then

tarball_dir="$current_dir"/xorriso-"$xorriso_rev"
mv "$lone_dir" "$tarball_dir"

goto_dir "$tarball_dir"

./bootstrap

# Remove unneeded temporary data from ./bootstrap
rm -r ./autom4te.cache

# Repair non-portable shell code output of ./bootstrap
(
 cd "$compile_dir" || exit 1
 sed -e 's/^for ac_header in$/test -z 1 \&\& for ac_header in dummy/' \
     < ./configure > ./configure-repaired
 if test "$?" = 0
 then
   echo "$0: Empty 'for ac_header in' found in configure." >&2
 fi
 mv ./configure-repaired ./configure
 chmod a+rx,go-w,u+w ./configure
)

cd "$current_dir"
tar czf ./xorriso-"$xorriso_rev""$xorriso_pl".tar.gz $(basename "$tarball_dir")

ls -l $(pwd)/xorriso-"$xorriso_rev""$xorriso_pl".tar.gz
        
mv "$tarball_dir" "$lone_dir"

fi

echo "Done"
echo "HINT: Now build xorriso/xorriso by:"
echo "        cd '$lone_dir' && ./configure && make"
echo