~ubuntu-branches/ubuntu/lucid/curl/lucid-security

« back to all changes in this revision

Viewing changes to docs/INSTALL.devcpp

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2005-12-12 15:04:52 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20051212150452-2ymlra67b2p7kjyy
Tags: 7.15.1-1ubuntu1
Resynchronise with Debian to get URL parser overflow fix from 7.15.1
(CVE-2005-4077).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
DevCpp-Mingw Install & Compilation                                   Sept 2005
 
2
==================================
 
3
 
 
4
Reference Emails available at curl@haxx.se: 
 
5
 
 
6
  Libcurl Install and Use Issues
 
7
  Awaiting an Answer for Win 32 Install 
 
8
  res = curl_easy_perform(curl); Error
 
9
  Makefile Issues
 
10
  
 
11
 
 
12
Having previously done a thorough review of what was available that met my
 
13
requirements under GPL, I settled for Libcurl as the software of choice for
 
14
many reasons not the least of which was the support.
 
15
 
 
16
Background
 
17
----------
 
18
 
 
19
This quest started when I innocently tried to incorporate the libcurl library
 
20
into my simple source code. I figured that a few easy steps would accomplish
 
21
this without major headaches. I had no idea that I would be facing an almost
 
22
insurmountable challenge.
 
23
 
 
24
The main problem lies in two areas. First the bulk of support for libcurl
 
25
exists for a Unix/linux command line environments. This is of little help when
 
26
it comes to Windows O/S.
 
27
 
 
28
Secondly the help that does exist for the Windows O/S focused around mingw
 
29
thru a command line argument environment.
 
30
 
 
31
You may ask "Why is this a problem?"
 
32
 
 
33
I'm using a Windows O/S with DevCpp. For those of you who are unfamiliar with
 
34
DevCpp, it is a window shell GUI that replaces the command line environment
 
35
for gcc. A definite improvement that I am unwilling to give up. However using
 
36
DevCpp presented its own set of issues. Inadvertently I also made some
 
37
careless errors such as compiling the 7.14 version of Makefile with an older
 
38
version of source code. Thanks to Dan Fandrich for picking this up.
 
39
 
 
40
I did eventually with the help of Daniel, Phillipe and others manage to
 
41
implement successfully (the only mingw available version)
 
42
curl-7.13.0-win32-ssl-devel-mingw32 into the DevCpp environment. Only the
 
43
dynamic libcurl.dll libcurldll.a libraries worked. The static library which I
 
44
was interested in did not. Furthermore when I tried to implement one of the
 
45
examples included with the curl package (get info.c) it caused the executable
 
46
to crash. Tracing the bug I found it in the code and function res =
 
47
curl_easy_perform(curl);.
 
48
 
 
49
At this point I had to make a choice as to whether invest my limited
 
50
time-energy resource to fixing the bug or to compile the new version
 
51
available. After searching the archives I found a very similar or the same bug
 
52
reported from version 7.12x on. Daniel did inform me that he thought that this
 
53
bug had been fixed with the latest version. So I proceeded to compile the
 
54
latest SSL version where I faced other challenges.
 
55
 
 
56
In order to make this process unremarkable for others using the same
 
57
environment I decided to document the process so that others will find it
 
58
routine. It would be a shame if newbies could not implement this excellent
 
59
package for their use.
 
60
 
 
61
I would like to thank the many others in this forum and in the DevCpp forum
 
62
for their help. Without your help I may either have given up or it would have
 
63
taken me many times longer to achieve success.
 
64
 
 
65
The Cookbook Approach
 
66
---------------------
 
67
 
 
68
This discussion will be confined to a SSL static library compilation and
 
69
installation. Limited mention and comments will be inserted where appropriate
 
70
to help with non-SSL, dynamic libraries and executables.
 
71
 
 
72
 
 
73
   Using Makefile from DevCpp to compile Libcurl libraries
 
74
 
 
75
Preamble
 
76
--------
 
77
 
 
78
Using the latest version release - curl-7.14.0.tar.gz. Curl source code is
 
79
platform independent. This simply means that the source code can be compiled
 
80
for any Operating System (Linux/Unix Windows etc. and variations of thereof).
 
81
 
 
82
The first thing to note is that inside curl-7.14.0 you will find two folders
 
83
lib and src. Both contain Makefile.m32 (required for win mingw library or exe
 
84
compilation) files which are different. The main difference between these two
 
85
folders and the makefiles is that the src folder contents are used to compile
 
86
an executable file(curl.exe) while the lib folder contents are used to compile
 
87
a static (libcurl.a) and dynamic (libcurl.dll & libcurldll.a) file that can be
 
88
used to compile libcurl with your own source code so that one can use and
 
89
access all libcurl functions.
 
90
 
 
91
Before we start please make sure that DevCpp is installed properly. In
 
92
particular make sure you have no spaces in the name of any of the directories
 
93
and subdirectories where DevCpp is installed. Failure to comply with the
 
94
install instructions may produce erratic behaviour in DevCpp. For further info
 
95
check the following sites
 
96
 
 
97
http://aditsu.freeunixhost.com/dev-cpp-faq.html
 
98
http://sourceforge.net/forum/message.php?msg_id=3252213
 
99
 
 
100
As I have mentioned before I will confine this to the SSL Library compilations
 
101
but the process is very similar for compilation of the executable - curl.exe;
 
102
just substitute the src folder makefile in its stead.
 
103
 
 
104
First use a text processor Notepad, or your own favourite text processor. To
 
105
engage your favourite text processor, select Makefile.m32 click once with your
 
106
mouse on file icon; icon turns blue, press the shift key and right-click on
 
107
mouse, menu appears select "Open with", select your favourite text processor.
 
108
 
 
109
Next read the contents of Makefile.m32. It includes instructions on its use.
 
110
 
 
111
Method I - DOS Command Line
 
112
---------------------------
 
113
 
 
114
Note - The only reason I have included this method is that Method II which is
 
115
the preferred method for compiling does not allow for the setting of option
 
116
switches (e.g. SSL = 1 or SSL =0). At least that's what they tell me at the
 
117
Dev-Cpp forum.
 
118
 
 
119
1 - Make a copy of (D:\Dev-Cpp\bin) bin folder and name it "bin Original"
 
120
place it in the Dev-Cpp installed directory (D:\Dev-Cpp\ for this example)
 
121
 
 
122
2 - Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
 
123
version into the bin folder above (D:\Dev-Cpp\bin). The reason being is that
 
124
the make.exe file resides in this folder. Make.exe will use - Makefile.m32,
 
125
Makefile.inc, and the source code included in the lib folder to compile the
 
126
source code. There is a PATH issue with make.exe that remains unresolved at
 
127
least for me. Unless the entire source code to be compiled is placed entirely
 
128
within the directory of make.exe an error message will be generated - "file
 
129
xxxx.yyy not available".
 
130
 
 
131
3- Go to Dev-Cpp\bin and double click on make .exe. You will see a DOS window
 
132
quickly pop up and close very quickly. Not to worry! Please do not skip this
 
133
step.
 
134
 
 
135
4- Click on the start button\Programs\MS-DOS Prompt.Once the DOS Window is up
 
136
Type the disk drive letter (e.g. E: ) engage the enter button. The path should
 
137
automatically take you to the directory of the make.exe file.
 
138
 
 
139
5- To compile the source code simply type at the DOS prompt make -f
 
140
Makefile.m32 as per instructions contained in the Makefile.m32 file (use any
 
141
text processor to read instructions). I don't believe that this makefile
 
142
allows for the option of non SSL. Ignore any warnings.
 
143
 
 
144
6- Collect and make copies of libcurl.a, libcurl.dll, libcurldll.a and any *.o
 
145
compilations you might need in another directory outside of the bin directory
 
146
as you will need this files shortly to set up libcurl for use with
 
147
Dev-cpp. For most apps *.o is not required. Later on we will show what to do
 
148
with these files.
 
149
 
 
150
7- You are finished but before closing we need to do cleanup - erase the bin
 
151
folder and rename the "bin Original" folder created in step 1 to bin.
 
152
 
 
153
Note to compile a curl executable the process is probably similar but instead
 
154
of using the LIB folder contents use the SRC folder contents and Makefiles in
 
155
curl-7.14.0.tar.gz. File directories relative placements must be respected for
 
156
compiling to take place successfully. This may not be possible with the PATH
 
157
problem that make.exe experiences. If anyone has solved this PATH issue and
 
158
please make sure it actually works on Win 9x/2000/XP before letting me
 
159
know. Then please let me or Daniel in on the solution so that it can be
 
160
included with these instructions. Thanks.
 
161
 
 
162
or
 
163
 
 
164
Method II - Dev-Cpp GUI
 
165
-----------------------
 
166
 
 
167
1- Copy the entire contents of the LIB folder of curl-7.14.0.tar.gz or zip
 
168
version into any folder outside of (Dev-Cpp\bin).
 
169
 
 
170
2- Drop the File/New/click on Project.
 
171
 
 
172
3- New Project Dialogue box appears. Double click on the Static Library.
 
173
 
 
174
4- Create Project Dialogue box appears. Select the LIB folder location to
 
175
place and locate your Project File Name. Placing the Project File Name
 
176
elsewhere may cause problems (PATH issue problem again).
 
177
 
 
178
5- Drop down the Project/Project Options. Project Options Dialogue box
 
179
appears.
 
180
 
 
181
6- Select the Makefile tab in the Project Options Dialogue Box. Check Box -
 
182
Use Custom Makefile. Click on the Folder icon at the extreme right of the
 
183
Check Box. Select Makefile.m32 in the folder wherever you have placed the
 
184
contents of the LIB Folder. Press OK and close the Dialogue Box.
 
185
 
 
186
7- Drop the Menu Project/Click on Add to Project. Open File Dialogue Box
 
187
appears.  The Dialogue Box should open in the folder wherever you have placed
 
188
the contents of the LIB Folder. If not go there.
 
189
 
 
190
8- Select Crtl-A to select all files in the LIB folder. Click on open to add
 
191
files and close box. Wait till all files are added. This may take 30 seconds
 
192
or longer.
 
193
 
 
194
9- Drop the Menu Execute/Click on Compile. 
 
195
 
 
196
10- That's it.
 
197
 
 
198
 
 
199
   The following steps must be completed if Curl is to work properly
 
200
   =================================================================
 
201
 
 
202
LIB folder inclusions (*.a placement)
 
203
-------------------------------------
 
204
 
 
205
1- Refer to Method I - DOS Command Line point # 6 Take libcurl.a, libcurldll.a
 
206
and install it in the directory C( or whichever drive Dev is installed)
 
207
:\Dev-Cpp\lib.
 
208
 
 
209
 
 
210
Include Folder
 
211
--------------
 
212
 
 
213
1- Create a new folder by the name of curl (do not change the name curl to
 
214
some other name as it will cause major issues) in the directory
 
215
C:\Dev-Cpp\include.
 
216
 
 
217
2- Copy the entire contents of the curl folder of curl-7.14.0.tar.gz or zip
 
218
 version into the newly created curl directory - C:\Dev-Cpp\include\curl.
 
219
 
 
220
Links To Include And Lib Folder
 
221
-------------------------------
 
222
 
 
223
1- Drop the Menu - Tools\Compiler Options\Directories\Libraries. Make sure
 
224
that C( or whichever drive Dev is installed):\DEV-CPP\lib is included.
 
225
 
 
226
2- Next select the Menu - Tools\Compiler Options\Directories\C Includes. Make
 
227
sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are included.
 
228
 
 
229
3- Next select the Menu - Tools\Compiler Options\Directories\C++
 
230
Includes. Make sure that C:\DEV-CPP\include and C:\Dev-Cpp\include\curl are
 
231
included.
 
232
 
 
233
Linker Links
 
234
------------
 
235
 
 
236
1- Drop the Menu - Tools\Compiler Options\Directories\Compiler.
 
237
 
 
238
2- Make sure that the box "Add these commands to the linker command line" is
 
239
checked.
 
240
 
 
241
3- Include in the white space immediately below the box referred in 2 -lcurl
 
242
-lws2_32 -lwinmm.
 
243
 
 
244
SSL Files
 
245
---------
 
246
 
 
247
1- Get the latest openSSL (as of time of this writing)
 
248
openssl-0.9.7e-win32-bin.zip for the minimalist package of the openssl-0.9.7e
 
249
binaries ported to MS Windows 95/98/NT/XP using the MingW32/GCC-3.1
 
250
development environment. The file may be downloaded at
 
251
http://curl.haxx.se/download/.
 
252
 
 
253
2- Open the above zip file. You will find two files - SDL.dll,
 
254
SDL_mixer.dll. Install them in the directory C:\WINDOWS\SYSTEM32 for Win 9x
 
255
users and c:\winnt\system32 for NT-family users.
 
256
 
 
257
Multithreading Files
 
258
--------------------
 
259
 
 
260
To be completed
 
261
 
 
262
#define
 
263
-------
 
264
 
 
265
1- Make sure that your program includes the following - #define CURL_STATICLIB
 
266
must be declared FIRST before any other define functions may be
 
267
added. Otherwise you may experience link errors.
 
268
 
 
269
2- Don't forget to include   #include "curl/curl.h".
 
270
 
 
271
e.g.
 
272
    #define CURL_STATICLIB 
 
273
#include <windows.h>
 
274
    #include "curl/curl.h"
 
275
#include <fstream>
 
276
#include <iostream>
 
277
#include <vector>
 
278
etc...
 
279
 
 
280
 
 
281
Static or Dynamic Library
 
282
-------------------------
 
283
 
 
284
The above steps apply for the use by a static library. Should you choose to
 
285
use a dynamic library you will be required to perform these additional steps.
 
286
 
 
287
1- Refer to Method I - DOS Command Line point # 6. Install libcurl.dll in the
 
288
directory C:\WINDOWS\SYSTEM32 for Win 9x users and c:\winnt\system32 for
 
289
NT-family users.
 
290
 
 
291
2- Refer to Linker Links point 3 - Replace -lcurl with -lcurldll.
 
292
 
 
293
Voila you're done.
 
294
 
 
295
The non-SSL static Library build may not be possible to use at least as of the
 
296
time of this writing - v7.14. Check reference emails - Phillipe and I found it
 
297
impossible to fully compile as certain files were missing for linking. No big
 
298
loss as SSL is a major plus.
 
299
 
 
300
Hope this Helps
 
301
 
 
302
Tom