<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
I wrote this setup guide in 2006. <br>
regards,<br>
Eduardo Patto Kanegae<br>
----------<br>
<h2>Installing ShapeLib and its tools</h2>
<p> This text will show you some steps for building and installing <a
href="http://shapelib.maptools.org"
mce_href="http://shapelib.maptools.org" target="_blank">ShapeLib</a>
and some usefull commands on a Linux machine.<br>
</p>
<blockquote dir="ltr" style="margin-right: 0px;"> <span class="small"><b>Notes:</b><br>
1. </span><span class="small"></span><span class="small">the
instructions of this guide were taken from installing on</span><span
class="small"> <a href="http://www.suse.com/"
mce_href="http://www.suse.com/" target="_blank">SuSE Linux 10.1</a>.<br>
2. </span><span class="small"></span><span class="small">the
installation instructions must be done with user<span
style="font-weight: bold;"> root</span></span><span class="small"><span
style="font-weight: bold;"></span><br>
3. </span><span class="small">all information here is provided without
warranty of any kind! Use it by your own risk.</span> </blockquote>
<h3>ShapeLib<br>
</h3>
<p>
<a href="http://shapelib.maptools.org"
mce_href="http://shapelib.maptools.org" target="_blank">ShapeLib</a>
is a C library for development of applications to read/write ESRI
ShapeFiles. ShapeLib source tree also brings you very interesting
command line tools for shapefile handling. </p>
<p>
<font size="3"><i>Installing ShapeLib on Linux</i></font> </p>
<ul>
<li>download ShapeLib source code from <a
href="http://dl.maptools.org/dl/shapelib/"
mce_href="http://dl.maptools.org/dl/shapelib/" target="_blank">http://dl.maptools.org/dl/shapelib/</a>
<span style="background-color: rgb(255, 0, 0);"></span><br>
<span class="S3">$ mkdir /usr/src/install/<br>
$ cd /usr/src/install/<br>
$ wget <a class="moz-txt-link-freetext" href="http://dl.maptools.org/dl/shapelib/shapelib-1.2.10.tar.gz">http://dl.maptools.org/dl/shapelib/shapelib-1.2.10.tar.gz</a><span
style="background-color: rgb(255, 0, 0);"></span></span> </li>
<li>extract <i>shapelib-1.2.10.tar.gz</i> file<br>
<span class="S3">$ tar -zxvf shapelib-1.2.10.tar.gz <br>
$ cd shapelib-1.2.10/ </span></li>
<li>for further information about ShapeLib please check <span
style="font-style: italic;">README</span>, <i>README.tree</i>, <span
style="font-style: italic;"></span><i>ChangeLog</i> and <span
style="font-style: italic;">LICENSE.LGPL</span> files or take a look
at ShapeLib website. Example:<br>
<span class="S3">$ less README</span> </li>
<li>ShapeLib 1.2.10 package does not come with a <i>configure</i>
script but it has a ready makefile, so, next step: build it!<span
class="S3"></span></li>
<li><span class="S3">$ make all 2>&1 | tee make_all.log</span>
# start building process using <span style="font-style: italic;">Makefile</span>
definitions. This command will create the following tools<b>: dbfadd</b>,
<b>dbfcreate</b>, <b>dbfdump</b>, <b>shpadd</b>, <b>shpcreate</b>,
<b>shpdump</b> and <b>shprewind</b>. <span
style="font-style: italic;"></span></li>
<li><span class="S3">$ make lib 2>&1 | tee make_lib.log</span>
# builds the library to <i>libshp.so</i> .<span
style="font-style: italic;"></span> </li>
<li>next step is the compilation of shputils tool. If you try <b>make
shputils</b> you will see an error but it's very easy to fix it up:</li>
<li>
<ul>
<li>$ make shputils 2>&1 | tee make_shputils.log #
compiler will tell you have errors at <b>277</b> line of <b>shputils.c</b>
file. <br>
</li>
<li>open <b>shputils.c</b> using a text editor( vi, mcedit,
pico, kate, gedit, ...). Example: <i>mcedit shputils.c</i></li>
<li>at <b>277</b> line, find <font color="#ff0000"><i>exit()</i></font>
command and replace it using <font color="#0000ff"><i>exit(1)</i></font>.
Just the number "1" was missing inside parentesis.</li>
<li>save the file( press F10 on <b>mcedit</b>). And then, repeat
the operation.</li>
<li>$ make shputils clean # cleaning...<span class="S3"></span></li>
<li>$ make shputils 2>&1 | tee make_shputils.log # now, if
everything was OK, you will see a file name 'shputils' ( no extensio )
at the current directory.<br>
</li>
</ul>
</li>
<li>and now, let's build another set of tools which is place under
'contrib/' folder:</li>
<li>
<ul>
<li>$ cd contrib/</li>
<li>if you also have downloaded the <b>shpdiff.c</b> file from
ShapeLib website, here is a little trick for building this tool with
the others under 'contrib/':</li>
<li>a) copy shpdiff.c to this directory( '/contrib/' )</li>
<ul>
<li>b) edit <i>Makefile</i> and at line number <b>18</b> ( it
starts with 'all:' ) add a blank space and put a 'shpdiff' at the end
of this line. So, this line must appear like: <i>shpdxf shpproj
dbfinfo shpcentrd shpdata shpwkb dbfinfo dbfcat shpinfo shpfix shpcat
shpdiff</i></li>
<li>c) at the line 35, just after shpinfo building commands,
press ENTER( to insert a new line) and add the following lines bellow:</li>
<li><font color="#0000ff">shpdiff: shpdiff.c $(SHPOBJ)</font></li>
<li><font color="#0000ff"> $(CC) $(CFLAGS) shpdiff.c
${SHPOBJ} $(LINKOPT) $(GEOOBJ) -o shpdiff</font></li>
<li>d) now, let's come back to normal steps...<br>
</li>
</ul>
<li>$ make all 2>&1 | tee make.log # an error will occur
at the line number <b>546</b> of <b>shpgeo.c </b>file. Edit this
file and find, at 546 line, this text:</li>
<li><font color="#ff0000">(SHPObject*)</font> ppsC[cParts] =
SHPUnCompound ( psCShape, &nextring );</li>
<li>replace this line with:</li>
<li><font color="#3300ff">ppsC[cParts] = SHPUnCompound (
psCShape, &nextring );</font></li>
<li>and then, try again:</li>
<li><span class="S3">$ make clean </span># cleaning...</li>
<li>$ make all 2>&1 | tee make.log # and now, if
everything was OK, you will see the following binaries at the current
folder: <b>dbfcat</b>, <b>dbfinfo</b>, <b>shpcat</b>, <b>shpcentrd</b>,
<b>shpdata</b>, <b>shpdxf</b>, <b>shpfix</b>, <b>shpinfo</b>,
<b>shpproj</b>, <b>shpwkb</b> and <b>shpdiff</b>.</li>
<li>let's go up:</li>
<li>$ cd ../<br>
</li>
</ul>
</li>
<li>next step will install the binaries :<br>
<span class="S3">$ make lib_install 2>&1 | tee
make_lib_install.log</span> # library will be installed under <span
style="font-style: italic;">/usr/local/lib/</span> folder. ShapeLib
Makefile does not have an 'install' rule, so, you will need to copy
them by hands:</li>
<li>$ cp -v dbfadd dbfcreate dbfdump shpadd shpcreate shpdump
shprewind shputils /usr/local/bin</li>
<li>$ cp -v contrib/dbfcat contrib/dbfinfo contrib/shpcat
contrib/shpcentrd contrib/shpdata contrib/shpdxf contrib/shpfix
contrib/shpinfo contrib/shpproj contrib/shpwkb contrib/shpdiff
/usr/local/bin<br>
</li>
</ul>
<p>
After finishing these procedures, your shapelib library is installed
and you will also have the following commands: </p>
<ul>
<li>dbfadd</li>
<li>dbfcreate</li>
<li>dbfdump</li>
<li>shpadd</li>
<li>shpcreate</li>
<li>shpdump</li>
<li>shprewind</li>
<li>shputils</li>
<li>dbfcat</li>
<li>dbfinfo</li>
<li>shpcat</li>
<li>shpcentrd</li>
<li>shpdata</li>
<li>shpdxf</li>
<li>shpfix</li>
<li>shpinfo</li>
<li>shpproj</li>
<li>shpwkb</li>
<li>shpdiff <br>
</li>
</ul>
<span class="S3"></span>
<p>If your setup was ok, you are safe to remove
/usr/src/install/shapelib-1.2.10 folder. </p>
<h3>Additional information</h3>
<ul>
<li><a href="http://shapelib.maptools.org"
mce_href="http://shapelib.maptools.org" target="_blank">ShapeLib</a> -
official website. Take a look at documents available. </li>
</ul>
<br>
==== portuguese version ====<br>
<h2>Instalando a ShapeLib e utilitários</h2>
<p> O texto a seguir descreve um procedimento geral para a
compilação e instalação da biblioteca <a
href="http://shapelib.maptools.org"
mce_href="http://shapelib.maptools.org" target="_blank">ShapeLib</a> e
utilitários anexos em uma máquina Linux.<br>
</p>
<blockquote dir="ltr" style="margin-right: 0px;"> <span class="small"><b>Notas:</b><br>
1. as instruções deste guia foram elaboradas a partir de uma instalação
realizada em um <a href="http://www.suse.com/"
mce_href="http://www.suse.com/" target="_blank">SuSE Linux 10.1</a>.<br>
2. as instruções devem ser executadas usando o usuário <span
style="font-weight: bold;">root</span><br>
3. todas as instruções deste guia são fornecidas sem qualquer garantia
de qualquer tipo! Utilize-as por sua conta e risco.</span> </blockquote>
<h3>ShapeLib<br>
</h3>
<p>
A <a href="http://shapelib.maptools.org"
mce_href="http://shapelib.maptools.org" target="_blank">ShapeLib</a>
é uma biblioteca C para o desenvolvimento de aplicativos de
leitura/escrita de arquivos ESRI ShapeFile. O seu código fonte contém
não somente a biblioteca mas também traz utilitários interessantes para
a manipulação de shapefiles. </p>
<p>
<font size="3"><i>Instalação da ShapeLib no Linux a partir do
código-fonte</i></font> </p>
<p>
</p>
<ul>
<li>faça o download do código-fonte da ShapeLib de <a
href="http://dl.maptools.org/dl/shapelib/"
mce_href="http://dl.maptools.org/dl/shapelib/" target="_blank">http://dl.maptools.org/dl/shapelib/</a>
<span style="background-color: rgb(255, 0, 0);"></span><br>
<span class="S3">$ mkdir /usr/src/install/<br>
$ cd /usr/src/install/<br>
$ wget <a class="moz-txt-link-freetext" href="http://dl.maptools.org/dl/shapelib/shapelib-1.2.10.tar.gz">http://dl.maptools.org/dl/shapelib/shapelib-1.2.10.tar.gz</a><span
style="background-color: rgb(255, 0, 0);"></span></span> </li>
<li>extraia o arquivo <i>shapelib-1.2.10.tar.gz</i> <br>
<span class="S3">$ tar -zxvf shapelib-1.2.10.tar.gz <br>
$ cd shapelib-1.2.10/ </span></li>
<li>para informações detalhadas sobre a ShapeLib verifique os
arquivos <span style="font-style: italic;">README</span>, <i>README.tree</i>,
<span style="font-style: italic;"></span><i>ChangeLog</i> e <span
style="font-style: italic;">LICENSE.LGPL</span> que acompanham o
pacote ou consulte o site do projeto. Exemplo:<br>
<span class="S3">$ less README</span>
# com o comando "less" você pode navegar ( usando as teclass PageDown e
PageUp) pelo conteúdo do arquivo. Tecle "q" para cancelar a execução do
"less" </li>
<li>como o pacote não vem acompanhado de um script <i>configure</i>
e sim já vem com o makefile pronto, o próximo passo é a compilação
propriamente dita.<span class="S3"></span></li>
<li><span class="S3">$ make all 2>&1 | tee make_all.log</span>
# realiza o processo de compilação a partir do arquivo <span
style="font-style: italic;">Makefile</span>. Este comando gerará os
utilitários <b>dbfadd</b>, <b>dbfcreate</b>, <b>dbfdump</b>, <b>shpadd</b>,
<b>shpcreate</b>, <b>shpdump</b> e <b>shprewind</b>. Além disso,
a parte final do comando fará com que toda saída( mensagens) do
processo de compilação sejam gravadas no arquivo <span
style="font-style: italic;">make.log.</span></li>
<li><span class="S3">$ make lib 2>&1 | tee make_lib.log</span>
# compila a biblioteca shapelib para <i>libshp.so</i> .<span
style="font-style: italic;"></span> </li>
<li>o
próximo passo é a compilação do utilitário shputils, cujo código-fonte
desta versão 1.2.10 gerará um pequeno erro na execução do make, mas a
correção é simples:</li>
<li>
<ul>
<li>$ make shputils
2>&1 | tee make_shputils.log # ao executar este comando você
verá uma mensagem de erro do compilador acusando problemas na linha <b>277</b>
do arquivo <b>shputils.c</b>. <br>
</li>
<li>abra o arquivo <b>shputils.c</b> usando um editor qualquer(
vi, mcedit, pico, kate, gedit, ...). Exemplo: <i>mcedit shputils.c</i></li>
<li>na linha <b>277</b> localize o comando <font color="#ff0000"><i>exit()</i></font>
e substitua-o por <font color="#0000ff"><i>exit(1)</i></font>. Ou
seja, apenas faltava o 1 entre os parênteses e portanto, não altere
NADA além disto.</li>
<li>salve o arquivo e feche o editor. ( no <b>mcedit</b> aperte
F10). E execute a compilação novamente.</li>
<li>$ make shputils clean # processo de limpeza necessário antes
de uma recompilação<span class="S3"></span></li>
<li>$
make shputils 2>&1 | tee make_shputils.log # agora, tendo a
compilação funcionado, você verá um arquivo 'shputils' ( sem extensão )
no diretório.<br>
</li>
</ul>
</li>
<li>e agora vamos à compilação de outros utilitários que ficam na
pasta 'contrib/':</li>
<li>
<ul>
<li>$ cd contrib/</li>
<li>se baixou também o <b>shpdiff.c</b>
do site da ShapeLib, segue um pequeno truque para compilar este
utilitário( que detecta diferenças entre shapefiles) junto com os
outros do diretório 'contrib/':</li>
<li>a) copie o shpdiff.c neste diretório atual ( '/contrib/' )</li>
<ul>
<li>b) edite o arquivo <i>Makefile</i> e na linha <b>18</b> (
começa com 'all:' ) dê um espaço e adicione 'shpdiff' no fim da linha.
Essa linha então ficará assim: <i>shpdxf shpproj dbfinfo shpcentrd
shpdata shpwkb dbfinfo dbfcat shpinfo shpfix shpcat shpdiff</i></li>
<li>c) na linha 35, logo após o trecho com comandos de
compilação do shpinfo, dê um ENTER e acrescente as duas linhas abaixo:</li>
<li><font color="#0000ff">shpdiff: shpdiff.c $(SHPOBJ)</font></li>
<li><font color="#0000ff"> $(CC) $(CFLAGS) shpdiff.c
${SHPOBJ} $(LINKOPT) $(GEOOBJ) -o shpdiff</font></li>
<li>d) agora é só continuar seguindo as instruções a seguir...<br>
</li>
</ul>
<li>$ make all 2>&1 | tee make.log # aqui novamente ocorre
um erro na linha <b>546</b> do arquivo <b>shpgeo.c</b>. Abra este
arquivo com um editor qualquer e localize, na linha 546, o trecho
abaixo:</li>
<li><font color="#ff0000">(SHPObject*)</font> ppsC[cParts] =
SHPUnCompound ( psCShape, &nextring );</li>
<li>e então troque esta linha por esta outra:</li>
<li><font color="#3300ff">ppsC[cParts] = SHPUnCompound (
psCShape, &nextring );</font></li>
<li>e depois repita a compilação:</li>
<li><span class="S3">$ make clean </span># processo de limpeza
necessário antes de uma recompilação</li>
<li>$
make all 2>&1 | tee make.log # e agora se tudo funcionou OK,
como resultado você verá novos arquivos binários neste diretório. Sendo
eles os comandos: <b>dbfcat</b>, <b>dbfinfo</b>, <b>shpcat</b>, <b>shpcentrd</b>,
<b>shpdata</b>, <b>shpdxf</b>, <b>shpfix</b>, <b>shpinfo</b>,
<b>shpproj</b>, <b>shpwkb</b> e <b>shpdiff</b>.</li>
<li>tudo certo até aqui, é hora de voltar ao diretório superior:</li>
<li>$ cd ../<br>
</li>
</ul>
</li>
<li>se tudo correu bem até aqui, o próximo passo é a instalação dos
arquivos binários gerados nos diretórios apropriados:<br>
<span class="S3">$ make lib_install 2>&1 | tee
make_lib_install.log</span> # a biblioteca será instalada na pasta <span
style="font-style: italic;">/usr/local/lib/</span>
. E como o Makefile da ShapeLib não possui uma regra 'install' pra
instalar os comandos utilitários, a solução é copiá-los manualmente
para um diretório que seja reconhecido como path do sistema:</li>
<li>$ cp -v dbfadd dbfcreate dbfdump shpadd shpcreate shpdump
shprewind shputils /usr/local/bin</li>
<li>$
cp -v contrib/dbfcat contrib/dbfinfo contrib/shpcat contrib/shpcentrd
contrib/shpdata contrib/shpdxf contrib/shpfix contrib/shpinfo
contrib/shpproj contrib/shpwkb contrib/shpdiff /usr/local/bin<br>
</li>
</ul>
<br>
<p>
Lembre-se que para referência posterior você poderá salvar os arquivos
.log gerados pelos comandos supra citados. </p>
<p>
Concluída a sua instalação, além da biblioteca instalada, você terá a
sua disposição os seguintes utilitários: </p>
<ul>
<li>dbfadd</li>
<li>dbfcreate</li>
<li>dbfdump</li>
<li>shpadd</li>
<li>shpcreate</li>
<li>shpdump</li>
<li>shprewind</li>
<li>shputils</li>
<li>dbfcat</li>
<li>dbfinfo</li>
<li>shpcat</li>
<li>shpcentrd</li>
<li>shpdata</li>
<li>shpdxf</li>
<li>shpfix</li>
<li>shpinfo</li>
<li>shpproj</li>
<li>shpwkb</li>
<li>shpdiff <br>
</li>
</ul>
<span class="S3"></span>
<p>Se a instalação correu sem problemas você poderá excluir o diretório
/usr/src/install/shapelib-1.2.10 . </p>
<h3>Informações adicionais</h3>
<ul>
<li><a href="http://shapelib.maptools.org"
mce_href="http://shapelib.maptools.org" target="_blank">ShapeLib</a> -
site oficial. Verifique a documentação disponível no site. </li>
</ul>
</body>
</html>