#!/bin/bash

INPUT_FILE_CPP=$1

if [[ "$INPUT_FILE_CPP" != *".cpp" ]]
then
    echo "ERROR: File $INPUT_FILE_CPP does not end with .cpp, dying"
    exit
fi

OUTPUT_FILE_LENGTH=`expr ${#INPUT_FILE_CPP} - 4`
OUTPUT_FILE=${INPUT_FILE_CPP:0:$OUTPUT_FILE_LENGTH}

#rm -Rf _Inline
rm -f /tmp/gcc.out
rm -f $OUTPUT_FILE


# [[[ ASSEMBLE, OUTPUT OBJECT FILE ]]]
# 2.1M $OUTPUT_FILE.o: ELF 64-bit LSB  relocatable, x86-64, version 1 (SYSV), not stripped
#g++ -c          -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xc++ -I"/home/wbraswell/austin_perl_mongers/rperl/rperl-latest" -I"/home/wbraswell/austin_perl_mongers/rperl/rperl-latest/lib" -Ilib -Wno-unused-variable -DNO_XSLOCKS -Wno-deprecated -std=c++11 -Wno-reserved-user-defined-literal -Wno-literal-suffix -D__CPP__TYPES -O3 -fomit-frame-pointer -march=native -g -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" -fPIC "-I/usr/lib/perl/5.18/CORE" $INPUT_FILE_CPP -o $OUTPUT_FILE.o                         #> /tmp/gcc.out 2>&1

# [[[ ARCHIVE, OUTPUT ARCHIVE FILE ]]]
# 2.1M $OUTPUT_FILE.a: current ar archive
#ar -cvq $OUTPUT_FILE.a $OUTPUT_FILE.o

# [[[ SHARED, OUTPUT SHARED OBJECT FILE ]]]
# 996K $OUTPUT_FILE.so: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=FOO, not stripped
#g++             -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xc++ -I"/home/wbraswell/austin_perl_mongers/rperl/rperl-latest" -I"/home/wbraswell/austin_perl_mongers/rperl/rperl-latest/lib" -Ilib -Wno-unused-variable -DNO_XSLOCKS -Wno-deprecated -std=c++11 -Wno-reserved-user-defined-literal -Wno-literal-suffix -D__CPP__TYPES -O3 -fomit-frame-pointer -march=native -g -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" -fPIC "-I/usr/lib/perl/5.18/CORE" $INPUT_FILE_CPP -o $OUTPUT_FILE.so -shared                #> /tmp/gcc.out 2>&1
#chmod a-x $OUTPUT_FILE.so

# [[[ STATIC,  OUTPUT EXECUTABLE FILE, LINK TO libperl.a,  REQUIRES libperl-dev & libcrypt ]]]
# 9.6M $OUTPUT_FILE: ELF 64-bit LSB  executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.24, BuildID[sha1]=FOO, not stripped
#  13M    libperl.a: current ar archive
# DEV NOTE: NSS gethostbyname() etc cannot be statically linked, will emit warnings
# http://stackoverflow.com/questions/15165306/compile-a-static-binary-which-code-there-a-function-gethostbyname
#g++    -pthread -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xc++ -I"/home/wbraswell/austin_perl_mongers/rperl/rperl-latest" -I"/home/wbraswell/austin_perl_mongers/rperl/rperl-latest/lib" -Ilib -Wno-unused-variable -DNO_XSLOCKS -Wno-deprecated -std=c++11 -Wno-reserved-user-defined-literal -Wno-literal-suffix -D__CPP__TYPES -O3 -fomit-frame-pointer -march=native -g -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" -fPIC "-I/usr/lib/perl/5.18/CORE" $INPUT_FILE_CPP -o $OUTPUT_FILE    -static -lperl -lcrypt #> /tmp/gcc.out 2>&1

# [[[ DYNAMIC, OUTPUT EXECUTABLE FILE, LINK TO libperl.so, REQUIRES libperl-dev ]]]
# 984K $OUTPUT_FILE: ELF 64-bit LSB  executable,    x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=FOO, not stripped
# 1.6M   libperl.so: ELF 64-bit LSB  shared object, x86-64, version 1 (SYSV), dynamically linked,                                          BuildID[sha1]=FOO, stripped
 g++    -pthread -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -xc++ -I"/home/wbraswell/austin_perl_mongers/rperl/rperl-latest" -I"/home/wbraswell/austin_perl_mongers/rperl/rperl-latest/lib" -Ilib -Wno-unused-variable -DNO_XSLOCKS -Wno-deprecated -std=c++11 -Wno-reserved-user-defined-literal -Wno-literal-suffix -D__CPP__TYPES -O3 -fomit-frame-pointer -march=native -g -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" -fPIC "-I/usr/lib/perl/5.18/CORE" $INPUT_FILE_CPP -o $OUTPUT_FILE            -lperl         #> /tmp/gcc.out 2>&1