#! /bin/sh

prefix=/usr/pkg
exec_prefix=${prefix}
exec_prefix_set=no
datarootdir=${prefix}/share
#plug_in_dir=$(pkg-config --variable programplugindir cinepaint-gtk)
plug_in_dir=${exec_prefix}/lib/cinepaint/1.0-4
programdotdir=.cinepaint
programdatadir=${datarootdir}/cinepaint/1.0-4
datadir=${datarootdir}
include_dir=${prefix}/include/cinepaint

usage()
{
  cat <<EOF
This is CinePaint 1.0-4 external compilation helper.

Usage: cinepainttool [OPTION]...

General options:
  --help                  print this message
  --quiet, --silent       don't echo build commands
  --version               print the version of CinePaint associated with this script
  -n, --just-print, --dry-run, --recon
                          don't actually run any commands; just print them
Developer options:
  --cflags                print the compiler flags that are necessary to
                          compile a plug-in
  --libs                  print the linker flags that are necessary to link a
                          plug-in
  --prefix=PREFIX         use PREFIX instead of the installation prefix that
                          CinePaint was built when computing the output for --cflags
                          and --libs
  --exec-prefix=PREFIX    use PREFIX instead of the installation exec prefix
                          that CinePaint was built when computing the output for
                          --cflags and --libs

The --cflags and --libs options can be appended with -noui to get appropriate
settings for plug-ins which do not use GTK+.

User options:
  --build plug-in.c               build a plug-in from a source file
  --install plug-in.c             same as --build, but installs the built
                                  plug-in as well
  --install-bin plug-in           install a compiled plug-in
  --install-script script.scm     install a script-fu script

The --install options can be prefixed with --install-admin instead to install
a plug-in or script in the site directory instead of a user directory.

For plug-ins which do not use GTK+, the --build and --install options can be
appended with -noui for appropriate settings. For plug-ins that use GTK+ but
not libcinepaintui, append -nocinepaintui.

All binary build and install options can be appended with -strip to discard
debugging information.
EOF

  exit $1
}

noarg="\
Error: Need a plug-in source file to build"

notfound="\
Error: Couldn't find source file to build"

quiet=no
donothing=no

if test $# -eq 0; then
  usage 1
fi

if test x${GTK_CONFIG+set} != xset ; then
  gtk_cflags="-I/usr/pkg/include/gtk-2.0 -I/usr/pkg/lib/gtk-2.0/include -I/usr/pkg/include/pango-1.0 -I/usr/pkg/include/gio-unix-2.0 -I/usr/X11R7/include -I/usr/pkg/include -I/usr/pkg/include/atk-1.0 -I/usr/pkg/include/gdk-pixbuf-2.0 -pthread -I/usr/pkg/include/fribidi -I/usr/pkg/include/cairo -D_REENTRANT -I/usr/pkg/include/pixman-1 -I/usr/pkg/include/harfbuzz -I/usr/pkg/include/freetype2 -I/usr/pkg/include/libpng16 -I/usr/pkg/include/glib-2.0 -I/usr/pkg/lib/glib-2.0/include -I$include_dir"
  gtk_libs='-L/usr/pkg/lib -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -L/usr/X11R7/lib -lXrender -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lXfixes -lX11 -Wl,-rpath,/usr/X11R7/lib -lXext -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lintl -lharfbuzz -Wl,-R/usr/pkg/lib -lfontconfig -lfreetype'
#  gtk_cflags="$(pkg-config --cflags gtk+-2.0) -I$include_dir"
#  gtk_libs='$(pkg-config --libs gtk+-2.0)'
else
  gtk_cflags=`$GTK_CONFIG --cflags`
  gtk_libs=`$GTK_CONFIG --libs`
fi

if test x${INSTALL+set} != xset ; then
  INSTALL='/usr/bin/install -c -o pbulk -g users'
fi

if test x${CC+set} != xset ; then
  cc='gcc'
else
  cc="$CC"
fi

if test x${CFLAGS+set} != xset ; then
  cflags='-I/usr/pkg/include -O2 -I/usr/pkg/include -I/usr/include -I/usr/X11R7/include -I/usr/X11R7/include/libdrm -I/usr/pkg/include/freetype2 -I/usr/pkg/include/glib-2.0 -I/usr/pkg/include/gio-unix-2.0 -I/usr/pkg/lib/glib-2.0/include -I/usr/pkg/include/harfbuzz -Wall'
else
  cflags="$CFLAGS"
fi

if test x${LDFLAGS+set} != xset ; then
  ldflags='-Wl,-zrelro -L/usr/pkg/lib -Wl,-R/usr/pkg/lib -L/usr/lib -Wl,-R/usr/lib -L/usr/X11R7/lib -Wl,-R/usr/X11R7/lib'
else
  ldflags="$LDFLAGS"
fi

if test x${LIBS+set} != xset ; then
  libs=""
else
  libs="$LIBS"
fi

while test $# -gt 0; do
  case "$1" in
  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  *) optarg= ;;
  esac

  case $1 in
    --version)
      echo 1.0-4
      exit 0
      ;;
    --help)
      usage 0
      ;;
    --quiet | --silent)
      quiet=yes
      ;;
    -n | --just-print | --dry-run | --recon)
      donothing=yes
      ;;
    --prefix=*)
      prefix=$optarg
      if test $exec_prefix_set = no ; then
        exec_prefix=$optarg
      fi
      ;;
    --prefix)
      echo $prefix
      ;;
    --exec-prefix=*)
      exec_prefix=$optarg
      exec_prefix_set=yes
      ;;
    --exec-prefix)
      echo $exec_prefix
      ;;
    --cflags | --cflags-noui | --cflags-nocinepaintui)
      case $1 in
        --cflags | --cflags-nocinepaintui)
          my_gtk_cflags=$gtk_cflags ;;
        --cflags-noui)
          my_gtk_cflags="`echo $gtk_cflags | sed 's/^.*\(-I[^ ]*glib[^ ]*  *-I[^ ]*\).*$/\1/'`  -I$include_dir";;
      esac
      if test ${prefix}/include != /usr/include ; then
        includes=-I${prefix}/include
        for i in $my_gtk_cflags ; do
          if test $i = -I${prefix}/include ; then
             includes=""
          fi
        done
      fi
      echo $includes -I${prefix}/include/cinepaint $my_gtk_cflags
      ;;
    --cflags-local)
      my_gtk_cflags=$gtk_cflags
      echo $my_gtk_cflags
      ;;
    --libs | --libs-nocinepaintui)
      my_gtk_libs=
      libdirs=-L${exec_prefix}/lib
#      libdirs="-L$(pkg-config --variable libdir cinepaint-gtk)"
      for i in $gtk_libs ; do
        if test $i != -L${exec_prefix}/lib ; then
#        if test $i != -L$(pkg-config --variable libdir cinepaint-gtk) ; then
          if test -z "$my_gtk_libs" ; then
            my_gtk_libs="$i"
          else
            my_gtk_libs="$my_gtk_libs $i"
          fi
        fi
      done
      case $1 in
        --libs)
#          echo $libdirs -lcinepaintui -lcinepaint $my_gtk_libs ;;
#        --libs-nocinepaintui)
          echo $libdirs -lcinepaint -lcinepaintHalf $my_gtk_libs ;;
      esac
      ;;
    --libs-local)
      my_gtk_libs=
      for i in $gtk_libs ; do
        if test -z "$my_gtk_libs" ; then
          my_gtk_libs="$i"
        else
          my_gtk_libs="$my_gtk_libs $i"
        fi
      done
      export `cat ${exec_prefix}/lib/libcinepaint.la | grep dlname | sed -e s/\'//g -e s/dlname/dlname1/`
      export `cat ${exec_prefix}/lib/libcinepainthalf.la | grep dlname | sed -e s/\'//g -e s/dlname/dlname2/`
      echo ${exec_prefix}/lib/$dlname1 ${exec_prefix}/lib/$dlname2 $my_gtk_libs
      ;;
    --libs-noui)
      glib_ldflags=`echo $gtk_libs | sed -e 's/^.*-lgdk[^ ]* *\(-L[^ ]*\).*$/\1/' -e 's/^.* -lgdk[^ ]* .*$//'`
      if test -z "$glib_ldflags" ; then
        glib_ldflags=`echo $gtk_libs | sed 's/^ *\(-L[^ ]*\) .*$/\1/'`
      fi 
      glib_libs="$glib_ldflags `echo $gtk_libs | sed 's/^.*\(-lglib[^ ]*\).*$/\1/'`"
      my_glib_libs=
      libdirs=-L${exec_prefix}/lib
      for i in $glib_libs ; do
        if test $i != -L${exec_prefix}/lib ; then
          if test -z "$my_glib_libs" ; then
            my_glib_libs="$i"
          else
            my_glib_libs="$my_glib_libs $i"
          fi
        fi
      done
      echo -L${exec_prefix}/lib -lcinepaint -lcinepaintHalf $my_glib_libs
      ;;
    --install-dir)
      echo "$plug_in_dir/plug-ins"
      ;;
    --install-bin | --install-admin-bin \
    | --install-bin-strip | --install-admin-bin-strip \
    | --install-script | --install-admin-script)
      case $1 in
        --install-bin)
          install_cmd="/usr/bin/install -c -s -o pbulk -g users -m 755"
          install_dir="$HOME/$programdotdir/plug-ins"
          ;;
        --install-bin-strip)
          install_cmd="/usr/bin/install -c -s -o pbulk -g users -m 755 -s"
          install_dir="$HOME/$programdotdir/plug-ins"
          ;;
        --install-admin-bin)
          install_cmd="/usr/bin/install -c -s -o pbulk -g users -m 755"
          install_dir="$plug_in_dir/plug-ins"
          ;;
        --install-admin-bin-strip)
          install_cmd="/usr/bin/install -c -s -o pbulk -g users -m 755 -s"
          install_dir="$plug_in_dir/plug-ins"
          ;;
        --install-script)
          install_cmd="/usr/bin/install -c -o pbulk -g users -m 644"
          install_dir="$HOME/$programdotdir/scripts"
          ;;
        --install-admin-script)
          install_cmd="/usr/bin/install -c -o pbulk -g users -m 644"
          install_dir="$programdatadir/scripts"
          ;;
      esac
      shift
      if test "x$1" != "x"; then
        if test -r "$1"; then
          cmd="$install_cmd $1 $install_dir/$1"
          test $quiet = "yes" || echo $cmd
          test $donothing = "yes" || exec $cmd
        else
          echo "${notfound}" 1>&2
          exit 1
        fi  
      else
        echo "${noarg}" 1>&2
        exit 1
      fi
      ;;
    --build | --install | --install-admin | --build-strip | --install-strip \
    | --install-admin-strip | --build-nocinepaintui | --install-nocinepaintui \
    | --install-admin-nocinepaintui | --build-nocinepaintui-strip \
    | --install-nocinepaintui-strip | --install-admin-nocinepaintui-strip \
    | --build-noui | --install-noui | --install-admin-noui \
    | --build-noui-strip | --install-noui-strip | --install-admin-noui-strip)
      opt=`echo $1 | sed 's/-strip$//'`
      if test "x$opt" != "x$1" ; then
        cflags=`echo $cflags | sed -e 's/-g //g' -e 's/ -g//g'`
      fi
      case $opt in
        --build | --build-noui | --build-nocinepaintui)
          install_dir=. ;;
        --install | --install-noui | --install-nocinepaintui)
          install_dir="$HOME/$programdotdir/plug-ins" ;;
        --install-admin | --install-admin-noui | --install-admin-nocinepaintui)
          install_dir="$plug_in_dir/plug-ins" ;;
      esac
      noui=`echo $opt | sed 's/^.*\(noui\)$/\1/'`
      nocinepaintui=`echo $opt | sed 's/^.*\(nocinepaintui\)$/\1/'`
      if test "$noui" = "noui" ; then
        cinepaint_cflags=`$0 --cflags-noui`
        cinepaint_libs=`$0 --libs-noui`
      elif test "$nocinepaintui" = "nocinepaintui" ; then
        cinepaint_cflags=`$0 --cflags-nocinepaintui`
        cinepaint_libs=`$0 --libs-nocinepaintui`
      else
        cinepaint_cflags=`$0 --cflags`
        cinepaint_libs=`$0 --libs`
      fi
      shift
      if test "x$1" != "x"; then
        if test -r "$1"; then
          dest=`echo $1 | sed -e 's#.*/\([^/].*\)$#\1#' -e 's/\.[^.]*$//'`
          cmd="$cc $cflags $cinepaint_cflags -o $install_dir/$dest $1 $ldflags $cinepaint_libs $libs"
          test $quiet = "yes" || echo $cmd
          test $donothing = "yes" || exec $cmd
        else
          echo "${notfound}" 1>&2
          exit 1
        fi  
      else
        echo "${noarg}" 1>&2
        exit 1
      fi
      ;;
    *)
      usage 1
      ;;
  esac
  shift
done


