#!/bin/sh

## Licensed to the Apache Software Foundation (ASF) under one
## or more contributor license agreements.  See the NOTICE file
## distributed with this work for additional information
## regarding copyright ownership.  The ASF licenses this file
## to you under the Apache License, Version 2.0 (the
## "License"); you may not use this file except in compliance
## with the License.  You may obtain a copy of the License at
##
##     http://www.apache.org/licenses/LICENSE-2.0
##
## Unless required by applicable law or agreed to in writing, software
## distributed under the License is distributed on an "AS IS" BASIS,
## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
## See the License for the specific language governing permissions and
## limitations under the License.

# Not tdbloader2.
## tdbloader2 is slightly different.
##   The main program is not a java program
##   It is split into several scripts that leverage a mixture of 
##   POSIX and java tools and should be maintained separately

CMDS=$(cat <<EOF
jena.rdfcat
jena.rdfcompare
jena.rdfcopy
jena.rdfparse
jena.schemagen
arq.rdfdiff
arq.sparql
arq.arq
arq.iri
arq.juuid
arq.rsparql
arq.rset
arq.qparse
arq.uparse
arq.update
arq.rupdate
arq.wwwdec
arq.wwwenc
riotcmd.riot
riotcmd.ntriples
riotcmd.nquads
riotcmd.turtle
riotcmd.trig
riotcmd.infer
riotcmd.utf8
riotcmd.rdfxml
tdb.tdbbackup
tdb.tdbdump
tdb.tdbloader
tdb.tdbquery
tdb.tdbstats
tdb.tdbupdate
EOF
)

make_bin()
{
    local C=$1
    # Filename.
    CMD=bin/${C#*.}
    sed -e "s!JENA_CMD!$C!" < template.bin > $CMD
}

make_bat()
{
    local C=$1
    # Filename.
    CMD=bat/${C#*.}.bat
    sed -e "s!JENA_CMD!$C!" < template.bat > $CMD
}

for cmd in $CMDS
do
    ## echo $cmd
    make_bin $cmd
    make_bat $cmd
done

