View | Details | Raw Unified | Return to bug 177369 | Differences between
and this patch

Collapse All | Expand All

(-)ftp/curl/Makefile (-53 / +111 lines)
Lines 2-9 Link Here
2
# $FreeBSD$
2
# $FreeBSD$
3
3
4
PORTNAME=	curl
4
PORTNAME=	curl
5
PORTVERSION=	7.24.0
5
PORTVERSION=	7.30.0
6
PORTREVISION=	2
7
CATEGORIES=	ftp ipv6 www
6
CATEGORIES=	ftp ipv6 www
8
MASTER_SITES=	http://curl.haxx.se/download/ \
7
MASTER_SITES=	http://curl.haxx.se/download/ \
9
		LOCAL/sunpoet
8
		LOCAL/sunpoet
Lines 14-39 Link Here
14
13
15
LICENSE=	MIT
14
LICENSE=	MIT
16
15
17
OPTIONS_DEFINE=	CARES CURL_DEBUG IPV6 KERBEROS4 LDAP LDAPS LIBIDN LIBSSH2 \
16
TEST_DEPENDS=	python2:${PORTSDIR}/lang/python27 \
18
		NTLM CA_BUNDLE PROXY RTMP TRACKMEMORY DOCS EXAMPLES
17
		stunnel:${PORTSDIR}/security/stunnel
19
OPTIONS_RADIO=	SSL
18
20
OPTIONS_RADIO_SSL=	OPENSSL GNUTLS
19
OPTIONS_DEFINE=	CURL_DEBUG GSSAPI IPV6 KERBEROS4 LDAP LDAPS IDN LIBSSH2 \
21
OPTIONS_DEFAULT=	CA_BUNDLE PROXY OPENSSL
20
		METALINK NTLM CA_BUNDLE PROXY RTMP TLS_SRP TRACKMEMORY \
22
CURL_DEBUG_DESC=	curl diagnostic output
21
		DOCS EXAMPLES
23
LIBIDN_DESC=		Internationalized Domain Names via libidn
22
OPTIONS_RADIO=		RESOLV SSL
23
OPTIONS_RADIO_RESOLV=	CARES THREADED_RESOLVER
24
OPTIONS_RADIO_SSL=	OPENSSL GNUTLS CYASSL NSS POLARSSL
25
OPTIONS_DEFAULT=	CA_BUNDLE IPV6 PROXY TLS_SRP OPENSSL
26
CURL_DEBUG_DESC=	cURL diagnostic output
24
LIBSSH2_DESC=		SCP/SFTP support via libssh2
27
LIBSSH2_DESC=		SCP/SFTP support via libssh2
25
NTLM_DESC=		NTLM authentication
28
METALINK_DESC=		Metalink(RFC6249) download support
26
CA_BUNDLE_DESC=		Install CA bundle for OpenSSL
29
CA_BUNDLE_DESC=		Install CA bundle for OpenSSL
27
TRACKMEMORY_DESC=	curl memory diagnostic output
30
TLS_SRP_DESC=		TLS-SRP(Secure Remote Password) support
31
TRACKMEMORY_DESC=	cURL memory diagnostic output
32
RESOLV_DESC=		DNS resolution options
33
THREADED_RESOLVER_DESC=	Threaded DNS resolution
34
CYASSL_DESC=		SSL/TLS support via CyaSSL
35
NSS_DESC=		SSL/TLS support via NSS
36
POLARSSL_DESC=		SSL/TLS support via PolarSSL
28
37
29
CONFIGURE_ARGS+=--disable-threaded-resolver --disable-werror \
38
CONFIGURE_ARGS+=--disable-threaded-resolver --disable-werror --without-axtls \
30
		--enable-imap --enable-pop3 --enable-rtsp --enable-smtp
39
		--enable-imap --enable-pop3 --enable-rtsp --enable-smtp
31
CONFIGURE_ENV=	LOCALBASE="${LOCALBASE}"
40
CONFIGURE_ENV=	LOCALBASE="${LOCALBASE}"
32
GNU_CONFIGURE=	yes
41
GNU_CONFIGURE=	yes
33
MAKE_ENV=	SHLIB_VER="${SHLIB_VER}"
34
MAKE_JOBS_SAFE=	yes
42
MAKE_JOBS_SAFE=	yes
35
USES=	pathfix
43
USES=		pathfix
36
USE_PERL5_BUILD=	yes
44
USE_PERL5_BUILD=yes
37
USE_XZ=		yes
45
USE_XZ=		yes
38
46
39
.if !defined(BUILDING_HIPHOP)
47
.if !defined(BUILDING_HIPHOP)
Lines 44-50 Link Here
44
		MANUAL README.netware README.win32 RESOURCES SSLCERTS THANKS \
52
		MANUAL README.netware README.win32 RESOURCES SSLCERTS THANKS \
45
		TODO TheArtOfHttpScripting VERSIONS curl-config.html \
53
		TODO TheArtOfHttpScripting VERSIONS curl-config.html \
46
		curl-config.pdf curl.html curl.pdf index.html
54
		curl-config.pdf curl.html curl.pdf index.html
47
MAN1=		curl.1 curl-config.1
55
MAN1=		curl.1 curl-config.1 mk-ca-bundle.1
48
MAN3=		curl_easy_cleanup.3 curl_easy_duphandle.3 curl_easy_escape.3 \
56
MAN3=		curl_easy_cleanup.3 curl_easy_duphandle.3 curl_easy_escape.3 \
49
		curl_easy_getinfo.3 curl_easy_init.3 curl_easy_pause.3 \
57
		curl_easy_getinfo.3 curl_easy_init.3 curl_easy_pause.3 \
50
		curl_easy_perform.3 curl_easy_recv.3 curl_easy_reset.3 \
58
		curl_easy_perform.3 curl_easy_recv.3 curl_easy_reset.3 \
Lines 57-115 Link Here
57
		curl_multi_info_read.3 curl_multi_init.3 curl_multi_perform.3 \
65
		curl_multi_info_read.3 curl_multi_init.3 curl_multi_perform.3 \
58
		curl_multi_remove_handle.3 curl_multi_setopt.3 \
66
		curl_multi_remove_handle.3 curl_multi_setopt.3 \
59
		curl_multi_socket.3 curl_multi_socket_action.3 \
67
		curl_multi_socket.3 curl_multi_socket_action.3 \
60
	       	curl_multi_strerror.3 curl_multi_timeout.3 \
68
		curl_multi_strerror.3 curl_multi_timeout.3 curl_multi_wait.3 \
61
		curl_share_cleanup.3 curl_share_init.3 curl_share_setopt.3 \
69
		curl_share_cleanup.3 curl_share_init.3 curl_share_setopt.3 \
62
		curl_share_strerror.3 curl_slist_append.3 \
70
		curl_share_strerror.3 curl_slist_append.3 \
63
		curl_slist_free_all.3 curl_strequal.3 curl_unescape.3 \
71
		curl_slist_free_all.3 curl_strequal.3 curl_unescape.3 \
64
		curl_version.3 curl_version_info.3 libcurl.3 libcurl-easy.3 \
72
		curl_version.3 curl_version_info.3 libcurl.3 libcurl-easy.3 \
65
		libcurl-errors.3 libcurl-multi.3 libcurl-share.3 \
73
		libcurl-errors.3 libcurl-multi.3 libcurl-share.3 \
66
		libcurl-tutorial.3
74
		libcurl-tutorial.3
67
PLIST_SUB=	SHLIB_VER="${SHLIB_VER}"
75
PLIST_SUB+=	SHLIB_VER="${SHLIB_VER}"
76
PORTDOCS=	*
77
PORTEXAMPLES=	*
68
78
69
SHLIB_VER=	6
79
SHLIB_VER=	7
70
.endif
80
.endif
71
81
82
SLAVEDIRS=	ftp/curl-hiphop
83
72
.include <bsd.port.options.mk>
84
.include <bsd.port.options.mk>
73
85
74
.if ${PORT_OPTIONS:MLIBSSH2} && ! ${PORT_OPTIONS:MOPENSSL}
86
.for S in ${OPTIONS_RADIO_SSL}
75
IGNORE=		only supports LIBSSH2 with OpenSSL
87
.if ${PORT_OPTIONS:M${S}}
88
PORT_OPTIONS+=	SSL
76
.endif
89
.endif
90
.endfor
77
91
78
.if ${PORT_OPTIONS:MNTLM} && ! ${PORT_OPTIONS:MOPENSSL}
92
.if ${PORT_OPTIONS:MNTLM} && empty(PORT_OPTIONS:MSSL)
79
IGNORE=		only supports NTLM with OpenSSL
93
IGNORE=		only supports NTLM with SSL
80
.endif
94
.endif
81
95
82
.if ${PORT_OPTIONS:MLDAPS}
96
.if ${PORT_OPTIONS:MLDAPS}
83
.if ! ${PORT_OPTIONS:MLDAP}
97
.if empty(PORT_OPTIONS:MLDAP)
84
IGNORE=		only supports LDAPS with LDAP
98
IGNORE=		only supports LDAPS with LDAP
85
.else
99
.elif empty(PORT_OPTIONS:MSSL)
86
.if ! ${PORT_OPTIONS:MOPENSSL} && ! ${PORT_OPTIONS:MGNUTLS}
100
IGNORE=		only supports LDAPS with SSL
87
IGNORE=		only supports LDAPS with SSL (OpenSSL or GNUTLS)
88
.endif
101
.endif
89
.endif
102
.endif
103
104
.if ${PORT_OPTIONS:MTLS_SRP} && \
105
	empty(PORT_OPTIONS:MOPENSSL) && empty(PORT_OPTIONS:MGNUTLS)
106
IGNORE=		only supports TLS-SRP with either OpenSSL or GnuTLS
90
.endif
107
.endif
91
108
92
.if ${PORT_OPTIONS:MOPENSSL}
109
.if ${PORT_OPTIONS:MOPENSSL}
93
USE_OPENSSL=	yes
110
USE_OPENSSL=	yes
94
CONFIGURE_ARGS+=	--with-ssl=${OPENSSLBASE}
111
CONFIGURE_ARGS+=	--with-ssl=${OPENSSLBASE}
112
.else
113
CONFIGURE_ARGS+=	--without-ssl
114
.endif
115
95
.if ${PORT_OPTIONS:MCA_BUNDLE}
116
.if ${PORT_OPTIONS:MCA_BUNDLE}
96
RUN_DEPENDS+=	${LOCALBASE}/share/certs/ca-root-nss.crt:${PORTSDIR}/security/ca_root_nss
117
RUN_DEPENDS+=	${LOCALBASE}/share/certs/ca-root-nss.crt:${PORTSDIR}/security/ca_root_nss
97
CONFIGURE_ARGS+=	--with-ca-bundle=${LOCALBASE}/share/certs/ca-root-nss.crt
118
CONFIGURE_ARGS+=	--with-ca-bundle=${LOCALBASE}/share/certs/ca-root-nss.crt
98
.else
119
.else
99
CONFIGURE_ARGS+=	--without-ca-bundle
120
CONFIGURE_ARGS+=	--without-ca-bundle
100
.endif
121
.endif
101
.else
102
CONFIGURE_ARGS+=	--without-ssl
103
.if ${PORT_OPTIONS:MCA_BUNDLE}
104
IGNORE=			only supports CA bundle with OpenSSL
105
.endif
106
.endif
107
122
108
.if ${PORT_OPTIONS:MCARES}
123
.if ${PORT_OPTIONS:MCARES}
109
LIB_DEPENDS+=	cares.2:${PORTSDIR}/dns/c-ares
124
LIB_DEPENDS+=	cares:${PORTSDIR}/dns/c-ares
110
CONFIGURE_ARGS+=	--enable-ares=${LOCALBASE}
125
CONFIGURE_ARGS+=	--enable-ares=${LOCALBASE} --disable-threaded-resolver
126
.elif ${PORT_OPTIONS:MTHREADED_RESOLVER}
127
CONFIGURE_ARGS+=	--enable-threaded-resolver --disable-ares
111
.else
128
.else
112
CONFIGURE_ARGS+=	--disable-ares
129
CONFIGURE_ARGS+=	--disable-threaded-resolver --disable-ares
113
.endif
130
.endif
114
131
115
.if ${PORT_OPTIONS:MGNUTLS}
132
.if ${PORT_OPTIONS:MGNUTLS}
Lines 119-130 Link Here
119
CONFIGURE_ARGS+=--without-gnutls
136
CONFIGURE_ARGS+=--without-gnutls
120
.endif
137
.endif
121
138
122
.if ${PORT_OPTIONS:MOPENSSL} || ${PORT_OPTIONS:MGNUTLS}
123
PLIST_SUB+=	SSL=""
124
.else
125
PLIST_SUB+=	SSL="@comment "
126
.endif
127
128
.if ${PORT_OPTIONS:MIPV6}
139
.if ${PORT_OPTIONS:MIPV6}
129
CONFIGURE_ARGS+=	--enable-ipv6
140
CONFIGURE_ARGS+=	--enable-ipv6
130
.else
141
.else
Lines 140-146 Link Here
140
.if ${PORT_OPTIONS:MLDAP}
151
.if ${PORT_OPTIONS:MLDAP}
141
CONFIGURE_ARGS+=	--enable-ldap
152
CONFIGURE_ARGS+=	--enable-ldap
142
USE_OPENLDAP=	yes
153
USE_OPENLDAP=	yes
143
CFLAGS+=	-I${LOCALBASE}/include
154
CPPFLAGS+=	-I${LOCALBASE}/include
144
LDFLAGS+=	-L${LOCALBASE}/lib
155
LDFLAGS+=	-L${LOCALBASE}/lib
145
.if ${PORT_OPTIONS:MLDAPS}
156
.if ${PORT_OPTIONS:MLDAPS}
146
CONFIGURE_ARGS+=	--enable-ldaps
157
CONFIGURE_ARGS+=	--enable-ldaps
Lines 151-165 Link Here
151
CONFIGURE_ARGS+=	--disable-ldap --disable-ldaps
162
CONFIGURE_ARGS+=	--disable-ldap --disable-ldaps
152
.endif
163
.endif
153
164
154
.if ${PORT_OPTIONS:MLIBIDN}
165
.if ${PORT_OPTIONS:MIDN}
155
LIB_DEPENDS+=	idn.17:${PORTSDIR}/dns/libidn
166
LIB_DEPENDS+=	idn:${PORTSDIR}/dns/libidn
156
CONFIGURE_ARGS+=	--with-libidn=${LOCALBASE}
167
CONFIGURE_ARGS+=	--with-libidn=${LOCALBASE}
157
.else
168
.else
158
CONFIGURE_ARGS+=	--without-libidn
169
CONFIGURE_ARGS+=	--without-libidn
159
.endif
170
.endif
160
171
161
.if ${PORT_OPTIONS:MLIBSSH2}
172
.if ${PORT_OPTIONS:MLIBSSH2}
162
LIB_DEPENDS+=	ssh2.1:${PORTSDIR}/security/libssh2
173
LIB_DEPENDS+=	ssh2:${PORTSDIR}/security/libssh2
163
CONFIGURE_ARGS+=	--with-libssh2=${LOCALBASE}
174
CONFIGURE_ARGS+=	--with-libssh2=${LOCALBASE}
164
.else
175
.else
165
CONFIGURE_ARGS+=	--without-libssh2
176
CONFIGURE_ARGS+=	--without-libssh2
Lines 170-181 Link Here
170
.endif
181
.endif
171
182
172
.if ${PORT_OPTIONS:MRTMP}
183
.if ${PORT_OPTIONS:MRTMP}
173
LIB_DEPENDS+=	rtmp.0:${PORTSDIR}/multimedia/rtmpdump
184
LIB_DEPENDS+=	rtmp:${PORTSDIR}/multimedia/rtmpdump
174
CONFIGURE_ARGS+=	--with-librtmp=${LOCALBASE}
185
CONFIGURE_ARGS+=	--with-librtmp=${LOCALBASE}
175
.else
186
.else
176
CONFIGURE_ARGS+=	--without-librtmp
187
CONFIGURE_ARGS+=	--without-librtmp
177
.endif
188
.endif
178
189
190
.if ${PORT_OPTIONS:MCYASSL}
191
LIB_DEPENDS+=	cyassl:${PORTSDIR}/security/yassl
192
CONFIGURE_ARGS+=--with-cyassl=${LOCALBASE}
193
.else
194
CONFIGURE_ARGS+=--without-cyassl
195
.endif
196
197
.if ${PORT_OPTIONS:MGSSAPI}
198
CONFIGURE_ARGS+=	--with-gssapi-includes=/usr/include \
199
			--with-gssapi-libs=/usr/lib
200
.else
201
CONFIGURE_ARGS+=	--without-gssapi
202
.endif
203
204
.if ${PORT_OPTIONS:MMETALINK}
205
BROKEN=			libmetalink in ports tree is way too old
206
CONFIGURE_ARGS+=	--with-libmetalink
207
LIB_DEPENDS+=		metalink.3:${PORTSDIR}/misc/libmetalink
208
.else
209
CONFIGURE_ARGS+=	--without-libmetalink
210
.endif
211
212
.if ${PORT_OPTIONS:MNSS}
213
LIB_DEPENDS+=	nss3:${PORTSDIR}/security/nss
214
CONFIGURE_ARGS+=--with-nss
215
.else
216
CONFIGURE_ARGS+=--without-nss
217
.endif
218
219
.if ${PORT_OPTIONS:MPOLARSSL}
220
LIB_DEPENDS+=	polarssl:${PORTSDIR}/security/polarssl
221
CONFIGURE_ARGS+=--with-polarssl=${LOCALBASE}
222
.else
223
CONFIGURE_ARGS+=--without-polarssl
224
.endif
225
226
.if ${PORT_OPTIONS:MTLS_SRP}
227
CONFIGURE_ARGS+=	 --enable-tls-srp
228
.else
229
CONFIGURE_ARGS+=	 --disable-tls-srp
230
.endif
231
179
.if ${PORT_OPTIONS:MTRACKMEMORY}
232
.if ${PORT_OPTIONS:MTRACKMEMORY}
180
CONFIGURE_ARGS+=	--enable-curldebug
233
CONFIGURE_ARGS+=	--enable-curldebug
181
.else
234
.else
Lines 195-206 Link Here
195
.endif
248
.endif
196
249
197
post-patch:
250
post-patch:
251
	@${CP} ${FILESDIR}/http_pipe.py ${WRKSRC}/tests/
198
	@${REINPLACE_CMD} -e '/^SUBDIRS = / s|$$| docs|; /^DIST_SUBDIRS = / s| docs||; /cd docs &&/d' ${WRKSRC}/Makefile.in
252
	@${REINPLACE_CMD} -e '/^SUBDIRS = / s|$$| docs|; /^DIST_SUBDIRS = / s| docs||; /cd docs &&/d' ${WRKSRC}/Makefile.in
199
	@${REINPLACE_CMD} -e '/require "valgrind.pm";/d' ${WRKSRC}/tests/runtests.pl
253
	@${MKDIR} ${WRKSRC}/tests/log/
254
	@${REINPLACE_CMD} \
255
		-e '/^TEST = / s|$$| -d -k -l -n -p -v|' \
256
		-e 's|python|${LOCALBASE}/bin/&2|' \
257
			${WRKSRC}/tests/runtests.pl
200
258
201
post-install:
259
post-install:
202
.if !defined(BUILDING_HIPHOP)
260
.if !defined(BUILDING_HIPHOP)
203
	${INSTALL_DATA} ${WRKSRC}/docs/libcurl/libcurl.m4 ${PREFIX}/share/aclocal
261
	${INSTALL_DATA} ${WRKSRC}/docs/libcurl/libcurl.m4 ${PREFIX}/share/aclocal/
204
.if ${PORT_OPTIONS:MDOCS}
262
.if ${PORT_OPTIONS:MDOCS}
205
	${MKDIR} ${DOCSDIR}/ ${DOCSDIR}/libcurl/
263
	${MKDIR} ${DOCSDIR}/ ${DOCSDIR}/libcurl/
206
	cd ${WRKSRC}/docs/ && ${INSTALL_DATA} ${DOCS} ${DOCSDIR}/
264
	cd ${WRKSRC}/docs/ && ${INSTALL_DATA} ${DOCS} ${DOCSDIR}/
Lines 208-227 Link Here
208
.endif
266
.endif
209
.if ${PORT_OPTIONS:MEXAMPLES}
267
.if ${PORT_OPTIONS:MEXAMPLES}
210
	${MKDIR} ${EXAMPLESDIR}/
268
	${MKDIR} ${EXAMPLESDIR}/
211
	cd ${WRKSRC}/docs/examples/ && ${INSTALL_DATA} README Makefile.example makefile* *.c *.cc ${EXAMPLESDIR}/
269
	cd ${WRKSRC}/docs/examples/ && ${INSTALL_DATA} README Makefile.example makefile* *.c *.cpp ${EXAMPLESDIR}/
212
.endif
270
.endif
213
.endif
271
.endif
214
272
215
# Setting LC_ALL=C is a kludge; maybe curl/libcurl shouldn't actually use
273
# Setting LC_ALL=C is a kludge; maybe curl/libcurl shouldn't actually use
216
# the user's locale when dates are sent to the server.
274
# the user's locale when dates are sent to the server.
217
test:	build
275
regression-test test: build
218
.if ! ${PORT_OPTIONS:MPROXY}
276
.if empty(PORT_OPTIONS:MPROXY)
219
	@${ECHO_MSG} "******************************************"
277
	@${ECHO_MSG} "******************************************"
220
	@${ECHO_MSG} "* You have disabled curl proxy support.  *"
278
	@${ECHO_MSG} "* You have disabled curl proxy support.  *"
221
	@${ECHO_MSG} "* Some tests SHALL FAIL!                 *"
279
	@${ECHO_MSG} "* Some tests SHALL FAIL!                 *"
222
	@${ECHO_MSG} "* This is being addressed.               *"
280
	@${ECHO_MSG} "* This is being addressed.               *"
223
	@${ECHO_MSG} "******************************************"
281
	@${ECHO_MSG} "******************************************"
224
.endif
282
.endif
225
	@cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} LC_ALL=C ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} test
283
	cd ${WRKSRC}/ && ${SETENV} ${MAKE_ENV} LC_ALL=C ${MAKE} ${MAKE_FLAGS} ${MAKEFILE} ${MAKE_ARGS} test
226
284
227
.include <bsd.port.mk>
285
.include <bsd.port.mk>
(-)ftp/curl/distinfo (-2 / +2 lines)
Lines 1-2 Link Here
1
SHA256 (curl-7.24.0.tar.lzma) = cd683ee8be137ed8a8e97d42fd3cc94f88f63d478b83d4abe38e31b6281e2268
1
SHA256 (curl-7.30.0.tar.lzma) = 2cc427333447208c34d5afab29e4b1617a4f219e5787b74ec7ef6e89f6edac2a
2
SIZE (curl-7.24.0.tar.lzma) = 1973811
2
SIZE (curl-7.30.0.tar.lzma) = 2145655
(-)ftp/curl/files/http_pipe.py (+447 lines)
Line 0 Link Here
1
#!/usr/bin/python
2
3
# Copyright 2012 Google Inc. All Rights Reserved.
4
#
5
# Licensed under the Apache License, Version 2.0 (the "License");
6
# you may not use this file except in compliance with the License.
7
# You may obtain a copy of the License at
8
#
9
#    http://www.apache.org/licenses/LICENSE-2.0
10
#
11
# Unless required by applicable law or agreed to in writing, software
12
# distributed under the License is distributed on an "AS IS" BASIS,
13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
# See the License for the specific language governing permissions and
15
# limitations under the License.
16
#
17
# Modified by Linus Nielsen Feltzing for inclusion in the libcurl test
18
# framework
19
#
20
import SocketServer
21
import argparse
22
import re
23
import select
24
import socket
25
import time
26
import pprint
27
import os
28
29
INFO_MESSAGE = '''
30
This is a test server to test the libcurl pipelining functionality.
31
It is a modified version if Google's HTTP pipelining test server. More
32
information can be found here:
33
34
http://dev.chromium.org/developers/design-documents/network-stack/http-pipelining
35
36
Source code can be found here:
37
38
http://code.google.com/p/http-pipelining-test/
39
'''
40
MAX_REQUEST_SIZE = 1024  # bytes
41
MIN_POLL_TIME = 0.01  # seconds. Minimum time to poll, in order to prevent
42
                      # excessive looping because Python refuses to poll for
43
                      # small timeouts.
44
SEND_BUFFER_TIME = 0.5  # seconds
45
TIMEOUT = 30  # seconds
46
47
48
class Error(Exception):
49
  pass
50
51
52
class RequestTooLargeError(Error):
53
  pass
54
55
56
class ServeIndexError(Error):
57
  pass
58
59
60
class UnexpectedMethodError(Error):
61
  pass
62
63
64
class RequestParser(object):
65
  """Parses an input buffer looking for HTTP GET requests."""
66
67
  global logfile
68
69
  LOOKING_FOR_GET = 1
70
  READING_HEADERS = 2
71
72
  HEADER_RE = re.compile('([^:]+):(.*)\n')
73
  REQUEST_RE = re.compile('([^ ]+) ([^ ]+) HTTP/(\d+)\.(\d+)\n')
74
75
  def __init__(self):
76
    """Initializer."""
77
    self._buffer = ""
78
    self._pending_headers = {}
79
    self._pending_request = ""
80
    self._state = self.LOOKING_FOR_GET
81
    self._were_all_requests_http_1_1 = True
82
    self._valid_requests = []
83
84
  def ParseAdditionalData(self, data):
85
    """Finds HTTP requests in |data|.
86
87
    Args:
88
      data: (String) Newly received input data from the socket.
89
90
    Returns:
91
      (List of Tuples)
92
        (String) The request path.
93
        (Map of String to String) The header name and value.
94
95
    Raises:
96
      RequestTooLargeError: If the request exceeds MAX_REQUEST_SIZE.
97
      UnexpectedMethodError: On a non-GET method.
98
      Error: On a programming error.
99
    """
100
    logfile = open('log/server.input', 'a')
101
    logfile.write(data)
102
    logfile.close()
103
    self._buffer += data.replace('\r', '')
104
    should_continue_parsing = True
105
    while should_continue_parsing:
106
      if self._state == self.LOOKING_FOR_GET:
107
        should_continue_parsing = self._DoLookForGet()
108
      elif self._state == self.READING_HEADERS:
109
        should_continue_parsing = self._DoReadHeader()
110
      else:
111
        raise Error('Unexpected state: ' + self._state)
112
    if len(self._buffer) > MAX_REQUEST_SIZE:
113
      raise RequestTooLargeError(
114
          'Request is at least %d bytes' % len(self._buffer))
115
    valid_requests = self._valid_requests
116
    self._valid_requests = []
117
    return valid_requests
118
119
  @property
120
  def were_all_requests_http_1_1(self):
121
    return self._were_all_requests_http_1_1
122
123
  def _DoLookForGet(self):
124
    """Tries to parse an HTTTP request line.
125
126
    Returns:
127
      (Boolean) True if a request was found.
128
129
    Raises:
130
      UnexpectedMethodError: On a non-GET method.
131
    """
132
    m = self.REQUEST_RE.match(self._buffer)
133
    if not m:
134
      return False
135
    method, path, http_major, http_minor = m.groups()
136
137
    if method != 'GET':
138
      raise UnexpectedMethodError('Unexpected method: ' + method)
139
    if path in ['/', '/index.htm', '/index.html']:
140
      raise ServeIndexError()
141
142
    if http_major != '1' or http_minor != '1':
143
      self._were_all_requests_http_1_1 = False
144
145
#    print method, path
146
147
    self._pending_request = path
148
    self._buffer = self._buffer[m.end():]
149
    self._state = self.READING_HEADERS
150
    return True
151
152
  def _DoReadHeader(self):
153
    """Tries to parse a HTTP header.
154
155
    Returns:
156
      (Boolean) True if it found the end of the request or a HTTP header.
157
    """
158
    if self._buffer.startswith('\n'):
159
      self._buffer = self._buffer[1:]
160
      self._state = self.LOOKING_FOR_GET
161
      self._valid_requests.append((self._pending_request,
162
                                   self._pending_headers))
163
      self._pending_headers = {}
164
      self._pending_request = ""
165
      return True
166
167
    m = self.HEADER_RE.match(self._buffer)
168
    if not m:
169
      return False
170
171
    header = m.group(1).lower()
172
    value = m.group(2).strip().lower()
173
    if header not in self._pending_headers:
174
      self._pending_headers[header] = value
175
    self._buffer = self._buffer[m.end():]
176
    return True
177
178
179
class ResponseBuilder(object):
180
  """Builds HTTP responses for a list of accumulated requests."""
181
182
  def __init__(self):
183
    """Initializer."""
184
    self._max_pipeline_depth = 0
185
    self._requested_paths = []
186
    self._processed_end = False
187
    self._were_all_requests_http_1_1 = True
188
189
  def QueueRequests(self, requested_paths, were_all_requests_http_1_1):
190
    """Adds requests to the queue of requests.
191
192
    Args:
193
      requested_paths: (List of Strings) Requested paths.
194
    """
195
    self._requested_paths.extend(requested_paths)
196
    self._were_all_requests_http_1_1 = were_all_requests_http_1_1
197
198
  def Chunkify(self, data, chunksize):
199
    """ Divides a string into chunks
200
    """
201
    return [hex(chunksize)[2:] + "\r\n" + data[i:i+chunksize] + "\r\n" for i in range(0, len(data), chunksize)]
202
203
  def BuildResponses(self):
204
    """Converts the queue of requests into responses.
205
206
    Returns:
207
      (String) Buffer containing all of the responses.
208
    """
209
    result = ""
210
    self._max_pipeline_depth = max(self._max_pipeline_depth,
211
                                   len(self._requested_paths))
212
    for path, headers in self._requested_paths:
213
      if path == '/verifiedserver':
214
        body = "WE ROOLZ: {}\r\n".format(os.getpid());
215
        result += self._BuildResponse(
216
            '200 OK', ['Server: Apache',
217
                       'Content-Length: {}'.format(len(body)),
218
                       'Cache-Control: no-store'], body)
219
220
      elif path == '/alphabet.txt':
221
        body = 'abcdefghijklmnopqrstuvwxyz'
222
        result += self._BuildResponse(
223
            '200 OK', ['Server: Apache',
224
                       'Content-Length: 26',
225
                       'Cache-Control: no-store'], body)
226
227
      elif path == '/reverse.txt':
228
        body = 'zyxwvutsrqponmlkjihgfedcba'
229
        result += self._BuildResponse(
230
            '200 OK', ['Content-Length: 26', 'Cache-Control: no-store'], body)
231
232
      elif path == '/chunked.txt':
233
        body = ('7\r\nchunked\r\n'
234
                '8\r\nencoding\r\n'
235
                '2\r\nis\r\n'
236
                '3\r\nfun\r\n'
237
                '0\r\n\r\n')
238
        result += self._BuildResponse(
239
            '200 OK', ['Transfer-Encoding: chunked', 'Cache-Control: no-store'],
240
            body)
241
242
      elif path == '/cached.txt':
243
        body = 'azbycxdwevfugthsirjqkplomn'
244
        result += self._BuildResponse(
245
            '200 OK', ['Content-Length: 26', 'Cache-Control: max-age=60'], body)
246
247
      elif path == '/connection_close.txt':
248
        body = 'azbycxdwevfugthsirjqkplomn'
249
        result += self._BuildResponse(
250
            '200 OK', ['Content-Length: 26', 'Cache-Control: max-age=60', 'Connection: close'], body)
251
        self._processed_end = True
252
253
      elif path == '/1k.txt':
254
        str = '0123456789abcdef'
255
        body = ''.join([str for num in xrange(64)])
256
        result += self._BuildResponse(
257
            '200 OK', ['Server: Apache',
258
                       'Content-Length: 1024',
259
                       'Cache-Control: max-age=60'], body)
260
261
      elif path == '/10k.txt':
262
        str = '0123456789abcdef'
263
        body = ''.join([str for num in xrange(640)])
264
        result += self._BuildResponse(
265
            '200 OK', ['Server: Apache',
266
                       'Content-Length: 10240',
267
                       'Cache-Control: max-age=60'], body)
268
269
      elif path == '/100k.txt':
270
        str = '0123456789abcdef'
271
        body = ''.join([str for num in xrange(6400)])
272
        result += self._BuildResponse(
273
            '200 OK',
274
            ['Server: Apache',
275
             'Content-Length: 102400',
276
             'Cache-Control: max-age=60'],
277
            body)
278
279
      elif path == '/100k_chunked.txt':
280
        str = '0123456789abcdef'
281
        moo = ''.join([str for num in xrange(6400)])
282
        body = self.Chunkify(moo, 20480)
283
        body.append('0\r\n\r\n')
284
        body = ''.join(body)
285
286
        result += self._BuildResponse(
287
            '200 OK', ['Transfer-Encoding: chunked', 'Cache-Control: no-store'], body)
288
289
      elif path == '/stats.txt':
290
        results = {
291
            'max_pipeline_depth': self._max_pipeline_depth,
292
            'were_all_requests_http_1_1': int(self._were_all_requests_http_1_1),
293
        }
294
        body = ','.join(['%s:%s' % (k, v) for k, v in results.items()])
295
        result += self._BuildResponse(
296
            '200 OK',
297
            ['Content-Length: %s' % len(body), 'Cache-Control: no-store'], body)
298
        self._processed_end = True
299
300
      else:
301
        result += self._BuildResponse('404 Not Found', ['Content-Length: 7'], 'Go away')
302
      if self._processed_end:
303
          break
304
    self._requested_paths = []
305
    return result
306
307
  def WriteError(self, status, error):
308
    """Returns an HTTP response for the specified error.
309
310
    Args:
311
      status: (String) Response code and descrtion (e.g. "404 Not Found")
312
313
    Returns:
314
      (String) Text of HTTP response.
315
    """
316
    return self._BuildResponse(
317
        status, ['Connection: close', 'Content-Type: text/plain'], error)
318
319
  @property
320
  def processed_end(self):
321
    return self._processed_end
322
323
  def _BuildResponse(self, status, headers, body):
324
    """Builds an HTTP response.
325
326
    Args:
327
      status: (String) Response code and descrtion (e.g. "200 OK")
328
      headers: (List of Strings) Headers (e.g. "Connection: close")
329
      body: (String) Response body.
330
331
    Returns:
332
      (String) Text of HTTP response.
333
    """
334
    return ('HTTP/1.1 %s\r\n'
335
            '%s\r\n'
336
            '\r\n'
337
            '%s' % (status, '\r\n'.join(headers), body))
338
339
340
class PipelineRequestHandler(SocketServer.BaseRequestHandler):
341
  """Called on an incoming TCP connection."""
342
343
  def _GetTimeUntilTimeout(self):
344
    return self._start_time + TIMEOUT - time.time()
345
346
  def _GetTimeUntilNextSend(self):
347
    if not self._last_queued_time:
348
      return TIMEOUT
349
    return self._last_queued_time + SEND_BUFFER_TIME - time.time()
350
351
  def handle(self):
352
    self._request_parser = RequestParser()
353
    self._response_builder = ResponseBuilder()
354
    self._last_queued_time = 0
355
    self._num_queued = 0
356
    self._num_written = 0
357
    self._send_buffer = ""
358
    self._start_time = time.time()
359
    try:
360
      poller = select.epoll(sizehint=1)
361
      poller.register(self.request.fileno(), select.EPOLLIN)
362
      while not self._response_builder.processed_end or self._send_buffer:
363
364
        time_left = self._GetTimeUntilTimeout()
365
        time_until_next_send = self._GetTimeUntilNextSend()
366
        max_poll_time = min(time_left, time_until_next_send) + MIN_POLL_TIME
367
368
        events = None
369
        if max_poll_time > 0:
370
          if self._send_buffer:
371
            poller.modify(self.request.fileno(),
372
                          select.EPOLLIN | select.EPOLLOUT)
373
          else:
374
            poller.modify(self.request.fileno(), select.EPOLLIN)
375
          events = poller.poll(timeout=max_poll_time)
376
377
        if self._GetTimeUntilTimeout() <= 0:
378
          return
379
380
        if self._GetTimeUntilNextSend() <= 0:
381
          self._send_buffer += self._response_builder.BuildResponses()
382
          self._num_written = self._num_queued
383
          self._last_queued_time = 0
384
385
        for fd, mode in events:
386
          if mode & select.EPOLLIN:
387
            new_data = self.request.recv(MAX_REQUEST_SIZE, socket.MSG_DONTWAIT)
388
            if not new_data:
389
              return
390
            new_requests = self._request_parser.ParseAdditionalData(new_data)
391
            self._response_builder.QueueRequests(
392
                new_requests, self._request_parser.were_all_requests_http_1_1)
393
            self._num_queued += len(new_requests)
394
            self._last_queued_time = time.time()
395
          elif mode & select.EPOLLOUT:
396
            num_bytes_sent = self.request.send(self._send_buffer[0:4096])
397
            self._send_buffer = self._send_buffer[num_bytes_sent:]
398
            time.sleep(0.05)
399
          else:
400
            return
401
402
    except RequestTooLargeError as e:
403
      self.request.send(self._response_builder.WriteError(
404
          '413 Request Entity Too Large', e))
405
      raise
406
    except UnexpectedMethodError as e:
407
      self.request.send(self._response_builder.WriteError(
408
          '405 Method Not Allowed', e))
409
      raise
410
    except ServeIndexError:
411
      self.request.send(self._response_builder.WriteError(
412
          '200 OK', INFO_MESSAGE))
413
    except Exception as e:
414
      print e
415
    self.request.close()
416
417
418
class PipelineServer(SocketServer.ForkingMixIn, SocketServer.TCPServer):
419
  pass
420
421
422
parser = argparse.ArgumentParser()
423
parser.add_argument("--port", action="store", default=0,
424
                  type=int, help="port to listen on")
425
parser.add_argument("--verbose", action="store", default=0,
426
                  type=int, help="verbose output")
427
parser.add_argument("--pidfile", action="store", default=0,
428
                  help="file name for the PID")
429
parser.add_argument("--logfile", action="store", default=0,
430
                  help="file name for the log")
431
parser.add_argument("--srcdir", action="store", default=0,
432
                  help="test directory")
433
parser.add_argument("--id", action="store", default=0,
434
                  help="server ID")
435
parser.add_argument("--ipv4", action="store_true", default=0,
436
                  help="IPv4 flag")
437
args = parser.parse_args()
438
439
if args.pidfile:
440
    pid = os.getpid()
441
    f = open(args.pidfile, 'w')
442
    f.write('{}'.format(pid))
443
    f.close()
444
445
server = PipelineServer(('0.0.0.0', args.port), PipelineRequestHandler)
446
server.allow_reuse_address = True
447
server.serve_forever()
(-)ftp/curl/files/patch-configure (-25 / +12 lines)
Lines 8-27 Link Here
8
8
9
--- configure.orig	2012-02-26 17:52:21.904908587 +0800
9
--- configure.orig	2012-02-26 17:52:21.904908587 +0800
10
+++ configure	2012-02-26 17:52:21.929909948 +0800
10
+++ configure	2012-02-26 17:52:21.929909948 +0800
11
@@ -15049,10 +15049,10 @@
11
@@ -16842,6 +16842,9 @@
12
     flags_dbg_all="$flags_dbg_all -gdwarf-2"
13
     flags_dbg_all="$flags_dbg_all -gvms"
14
     flags_dbg_yes="-g"
15
-    flags_dbg_off="-g0"
16
+    flags_dbg_off=""
17
     flags_opt_all="-O -O0 -O1 -O2 -O3 -Os"
18
     flags_opt_yes="-O2"
19
-    flags_opt_off="-O0"
20
+    flags_opt_off=""
21
   else
22
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
23
 $as_echo "no" >&6; }
24
@@ -15892,6 +15892,9 @@
25
     tmp_CFLAGS="$CFLAGS"
12
     tmp_CFLAGS="$CFLAGS"
26
     tmp_CPPFLAGS="$CPPFLAGS"
13
     tmp_CPPFLAGS="$CPPFLAGS"
27
 
14
 
Lines 31-37 Link Here
31
     ac_var_stripped=""
18
     ac_var_stripped=""
32
   for word1 in $tmp_CFLAGS; do
19
   for word1 in $tmp_CFLAGS; do
33
     ac_var_strip_word="no"
20
     ac_var_strip_word="no"
34
@@ -15922,6 +15925,7 @@
21
@@ -16872,6 +16875,7 @@
35
   done
22
   done
36
     tmp_CPPFLAGS="$ac_var_stripped"
23
     tmp_CPPFLAGS="$ac_var_stripped"
37
   squeeze tmp_CPPFLAGS
24
   squeeze tmp_CPPFLAGS
Lines 39-45 Link Here
39
 
26
 
40
     #
27
     #
41
     if test "$want_debug" = "yes"; then
28
     if test "$want_debug" = "yes"; then
42
@@ -16139,6 +16143,9 @@
29
@@ -17089,6 +17093,9 @@
43
     #
30
     #
44
     if test "$honor_optimize_option" = "yes"; then
31
     if test "$honor_optimize_option" = "yes"; then
45
 
32
 
Lines 49-55 Link Here
49
     ac_var_stripped=""
36
     ac_var_stripped=""
50
   for word1 in $tmp_CFLAGS; do
37
   for word1 in $tmp_CFLAGS; do
51
     ac_var_strip_word="no"
38
     ac_var_strip_word="no"
52
@@ -16169,6 +16176,7 @@
39
@@ -17119,6 +117126,7 @@
53
   done
40
   done
54
     tmp_CPPFLAGS="$ac_var_stripped"
41
     tmp_CPPFLAGS="$ac_var_stripped"
55
   squeeze tmp_CPPFLAGS
42
   squeeze tmp_CPPFLAGS
Lines 57-73 Link Here
57
 
44
 
58
       if test "$want_optimize" = "yes"; then
45
       if test "$want_optimize" = "yes"; then
59
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts optimizer enabling options" >&5
46
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler accepts optimizer enabling options" >&5
60
@@ -20137,7 +20145,8 @@
47
@@ -21544,7 +21552,8 @@
61
         PKGTEST="no"
48
         PKGTEST="no"
62
     PREFIX_OPENSSL=$OPT_SSL
49
     PREFIX_OPENSSL=$OPT_SSL
63
 
50
 
64
-                OPENSSL_PCDIR="$OPT_SSL/lib/pkgconfig"
51
-                OPENSSL_PCDIR="$OPT_SSL/lib/pkgconfig"
65
+                # Use the FreeBSD location of the pkg-config libdir
52
+                # Use the FreeBSD location of the pkgconf libdir
66
+                OPENSSL_PCDIR="$LOCALBASE/libdata/pkgconfig"
53
+                OPENSSL_PCDIR="$LOCALBASE/libdata/pkgconfig"
67
     { $as_echo "$as_me:${as_lineno-$LINENO}: PKG_CONFIG_LIBDIR will be set to \"$OPENSSL_PCDIR\"" >&5
54
     { $as_echo "$as_me:${as_lineno-$LINENO}: PKG_CONFIG_LIBDIR will be set to \"$OPENSSL_PCDIR\"" >&5
68
 $as_echo "$as_me: PKG_CONFIG_LIBDIR will be set to \"$OPENSSL_PCDIR\"" >&6;}
55
 $as_echo "$as_me: PKG_CONFIG_LIBDIR will be set to \"$OPENSSL_PCDIR\"" >&6;}
69
     if test -f "$OPENSSL_PCDIR/openssl.pc"; then
56
     if test -f "$OPENSSL_PCDIR/openssl.pc"; then
70
@@ -23231,29 +23240,30 @@
57
@@ -24890,29 +24899,30 @@
71
     ;;
58
     ;;
72
   off)
59
   off)
73
         LIB_RTMP="-lrtmp"
60
         LIB_RTMP="-lrtmp"
Lines 78-86 Link Here
78
   *)
65
   *)
79
         PREFIX_RTMP=$OPT_LIBRTMP
66
         PREFIX_RTMP=$OPT_LIBRTMP
80
+        LIB_RTMP="-lrtmp"
67
+        LIB_RTMP="-lrtmp"
81
+        LD_RTMP=-L${PREFIX_RTMP}/lib$libsuff
68
+        LD_RTMP="-L${PREFIX_RTMP}/lib$libsuff"
82
+        CPP_RTMP=-I${PREFIX_RTMP}/include
69
+        CPP_RTMP="-I${PREFIX_RTMP}/include"
83
+        DIR_RTMP=${PREFIX_RTMP}/lib$libsuff
70
+        DIR_RTMP="${PREFIX_RTMP}/lib$libsuff"
84
     ;;
71
     ;;
85
   esac
72
   esac
86
 
73
 
Lines 92-104 Link Here
92
-
79
-
93
   LDFLAGS="$LDFLAGS $LD_RTMP"
80
   LDFLAGS="$LDFLAGS $LD_RTMP"
94
   CPPFLAGS="$CPPFLAGS $CPP_RTMP"
81
   CPPFLAGS="$CPPFLAGS $CPP_RTMP"
95
   LIBS="$LIBS $LIB_RTMP"
82
   LIBS="$LIB_RTMP $LIBS"
96
 
83
 
97
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RTMP_Init in -lrtmp" >&5
84
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RTMP_Init in -lrtmp" >&5
98
-$as_echo_n "checking for RTMP_Init in -lrtmp... " >&6; }
85
-$as_echo_n "checking for RTMP_Init in -lrtmp... " >&6; }
99
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RTMP_Init in $LIB_RTMP" >&5
86
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for RTMP_Init in $LIB_RTMP" >&5
100
+$as_echo_n "checking for RTMP_Init in $LIB_RTMP... " >&6; }
87
+$as_echo_n "checking for RTMP_Init in $LIB_RTMP... " >&6; }
101
 if test "${ac_cv_lib_rtmp_RTMP_Init+set}" = set; then :
88
 if ${ac_cv_lib_rtmp_RTMP_Init+:} false; then :
102
   $as_echo_n "(cached) " >&6
89
   $as_echo_n "(cached) " >&6
103
 else
90
 else
104
   ac_check_lib_save_LIBS=$LIBS
91
   ac_check_lib_save_LIBS=$LIBS
(-)ftp/curl/files/patch-lib::url.c (-1 / +1 lines)
Lines 5-11 Link Here
5
5
6
--- lib/url.c.orig	2012-01-23 23:31:30.000000000 +0800
6
--- lib/url.c.orig	2012-01-23 23:31:30.000000000 +0800
7
+++ lib/url.c	2012-02-26 17:52:21.937920303 +0800
7
+++ lib/url.c	2012-02-26 17:52:21.937920303 +0800
8
@@ -797,6 +797,10 @@
8
@@ -614,6 +614,10 @@
9
     data->progress.flags |= PGRS_HIDE;
9
     data->progress.flags |= PGRS_HIDE;
10
     data->state.current_speed = -1; /* init to negative == impossible */
10
     data->state.current_speed = -1; /* init to negative == impossible */
11
 
11
 
(-)ftp/curl/files/patch-src-tool_operate.c (-2 / +2 lines)
Lines 1-6 Link Here
1
--- src/tool_operate.c.orig	2012-01-23 23:31:30.000000000 +0800
1
--- src/tool_operate.c.orig	2012-01-23 23:31:30.000000000 +0800
2
+++ src/tool_operate.c	2012-02-26 17:40:00.117907281 +0800
2
+++ src/tool_operate.c	2012-02-26 17:40:00.117907281 +0800
3
@@ -580,22 +580,10 @@
3
@@ -649,22 +649,10 @@
4
             DEBUGASSERT(!outs.filename);
4
             DEBUGASSERT(!outs.filename);
5
           }
5
           }
6
 
6
 
Lines 26-32 Link Here
26
             if(!file) {
26
             if(!file) {
27
               helpf(config->errors, "Can't open '%s'!\n", outfile);
27
               helpf(config->errors, "Can't open '%s'!\n", outfile);
28
               res = CURLE_WRITE_ERROR;
28
               res = CURLE_WRITE_ERROR;
29
@@ -603,6 +591,19 @@
29
@@ -672,6 +660,19 @@
30
             }
30
             }
31
             outs.fopened = TRUE;
31
             outs.fopened = TRUE;
32
             outs.stream = file;
32
             outs.stream = file;
(-)ftp/curl/pkg-plist (-200 / +1 lines)
Lines 10-217 Link Here
10
include/curl/stdcheaders.h
10
include/curl/stdcheaders.h
11
include/curl/typecheck-gcc.h
11
include/curl/typecheck-gcc.h
12
share/aclocal/libcurl.m4
12
share/aclocal/libcurl.m4
13
@dirrm include/curl
14
lib/libcurl.a
13
lib/libcurl.a
15
lib/libcurl.la
14
lib/libcurl.la
16
lib/libcurl.so
15
lib/libcurl.so
17
lib/libcurl.so.%%SHLIB_VER%%
16
lib/libcurl.so.%%SHLIB_VER%%
18
libdata/pkgconfig/libcurl.pc
17
libdata/pkgconfig/libcurl.pc
19
%%PORTDOCS%%%%DOCSDIR%%/BINDINGS
18
@dirrm include/curl
20
%%PORTDOCS%%%%DOCSDIR%%/BUGS
21
%%PORTDOCS%%%%DOCSDIR%%/CONTRIBUTE
22
%%PORTDOCS%%%%DOCSDIR%%/DISTRO-DILEMMA
23
%%PORTDOCS%%%%DOCSDIR%%/FAQ
24
%%PORTDOCS%%%%DOCSDIR%%/FEATURES
25
%%PORTDOCS%%%%DOCSDIR%%/HISTORY
26
%%PORTDOCS%%%%DOCSDIR%%/INSTALL
27
%%PORTDOCS%%%%DOCSDIR%%/INSTALL.devcpp
28
%%PORTDOCS%%%%DOCSDIR%%/INTERNALS
29
%%PORTDOCS%%%%DOCSDIR%%/KNOWN_BUGS
30
%%PORTDOCS%%%%DOCSDIR%%/LICENSE-MIXING
31
%%PORTDOCS%%%%DOCSDIR%%/MANUAL
32
%%PORTDOCS%%%%DOCSDIR%%/README.netware
33
%%PORTDOCS%%%%DOCSDIR%%/README.win32
34
%%PORTDOCS%%%%DOCSDIR%%/RESOURCES
35
%%PORTDOCS%%%%DOCSDIR%%/SSLCERTS
36
%%PORTDOCS%%%%DOCSDIR%%/THANKS
37
%%PORTDOCS%%%%DOCSDIR%%/TODO
38
%%PORTDOCS%%%%DOCSDIR%%/TheArtOfHttpScripting
39
%%PORTDOCS%%%%DOCSDIR%%/VERSIONS
40
%%PORTDOCS%%%%DOCSDIR%%/curl-config.html
41
%%PORTDOCS%%%%DOCSDIR%%/curl-config.pdf
42
%%PORTDOCS%%%%DOCSDIR%%/curl.html
43
%%PORTDOCS%%%%DOCSDIR%%/curl.pdf
44
%%PORTDOCS%%%%DOCSDIR%%/index.html
45
%%PORTDOCS%%%%DOCSDIR%%/libcurl/ABI
46
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_cleanup.html
47
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_cleanup.pdf
48
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_duphandle.html
49
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_duphandle.pdf
50
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_escape.html
51
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_escape.pdf
52
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_getinfo.html
53
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_getinfo.pdf
54
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_init.html
55
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_init.pdf
56
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_pause.html
57
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_pause.pdf
58
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_perform.html
59
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_perform.pdf
60
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_recv.html
61
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_recv.pdf
62
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_reset.html
63
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_reset.pdf
64
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_send.html
65
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_send.pdf
66
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_setopt.html
67
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_setopt.pdf
68
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_strerror.html
69
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_strerror.pdf
70
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_unescape.html
71
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_easy_unescape.pdf
72
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_escape.html
73
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_escape.pdf
74
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_formadd.html
75
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_formadd.pdf
76
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_formfree.html
77
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_formfree.pdf
78
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_formget.html
79
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_formget.pdf
80
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_free.html
81
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_free.pdf
82
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_getdate.html
83
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_getdate.pdf
84
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_getenv.html
85
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_getenv.pdf
86
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_global_cleanup.html
87
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_global_cleanup.pdf
88
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_global_init.html
89
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_global_init.pdf
90
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_global_init_mem.html
91
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_global_init_mem.pdf
92
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_mprintf.html
93
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_mprintf.pdf
94
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_add_handle.html
95
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_add_handle.pdf
96
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_assign.html
97
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_assign.pdf
98
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_cleanup.html
99
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_cleanup.pdf
100
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_fdset.html
101
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_fdset.pdf
102
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_info_read.html
103
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_info_read.pdf
104
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_init.html
105
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_init.pdf
106
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_perform.html
107
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_perform.pdf
108
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_remove_handle.html
109
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_remove_handle.pdf
110
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_setopt.html
111
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_setopt.pdf
112
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_socket.html
113
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_socket.pdf
114
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_socket_action.html
115
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_socket_action.pdf
116
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_strerror.html
117
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_strerror.pdf
118
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_timeout.html
119
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_multi_timeout.pdf
120
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_share_cleanup.html
121
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_share_cleanup.pdf
122
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_share_init.html
123
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_share_init.pdf
124
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_share_setopt.html
125
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_share_setopt.pdf
126
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_share_strerror.html
127
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_share_strerror.pdf
128
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_slist_append.html
129
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_slist_append.pdf
130
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_slist_free_all.html
131
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_slist_free_all.pdf
132
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_strequal.html
133
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_strequal.pdf
134
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_unescape.html
135
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_unescape.pdf
136
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_version.html
137
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_version.pdf
138
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_version_info.html
139
%%PORTDOCS%%%%DOCSDIR%%/libcurl/curl_version_info.pdf
140
%%PORTDOCS%%%%DOCSDIR%%/libcurl/index.html
141
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-easy.html
142
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-easy.pdf
143
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-errors.html
144
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-errors.pdf
145
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-multi.html
146
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-multi.pdf
147
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-share.html
148
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-share.pdf
149
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-tutorial.html
150
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl-tutorial.pdf
151
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl.html
152
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl.m4
153
%%PORTDOCS%%%%DOCSDIR%%/libcurl/libcurl.pdf
154
%%PORTDOCS%%@dirrm %%DOCSDIR%%/libcurl
155
%%PORTDOCS%%@dirrm %%DOCSDIR%%
156
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/10-at-a-time.c
157
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/Makefile.example
158
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/README
159
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/anyauthput.c
160
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/cacertinmem.c
161
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/certinfo.c
162
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/chkspeed.c
163
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/cookie_interface.c
164
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/curlgtk.c
165
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/curlx.c
166
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/debug.c
167
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/evhiperfifo.c
168
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/externalsocket.c
169
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fileupload.c
170
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/fopen.c
171
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ftp-wildcard.c
172
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ftpget.c
173
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ftpgetinfo.c
174
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ftpgetresp.c
175
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ftpupload.c
176
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ftpuploadresume.c
177
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/getinfo.c
178
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/getinmemory.c
179
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/ghiper.c
180
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/hiperfifo.c
181
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/htmltidy.c
182
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/htmltitle.cc
183
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/http-post.c
184
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/httpcustomheader.c
185
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/httpput.c
186
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/https.c
187
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/imap.c
188
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/makefile.dj
189
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/multi-app.c
190
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/multi-debugcallback.c
191
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/multi-double.c
192
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/multi-post.c
193
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/multi-single.c
194
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/multithread.c
195
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/opensslthreadlock.c
196
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/persistant.c
197
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/pop3s.c
198
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/pop3slist.c
199
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/post-callback.c
200
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/postit2.c
201
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/progressfunc.c
202
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/resolve.c
203
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/rtsp.c
204
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/sampleconv.c
205
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/sepheaders.c
206
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/sendrecv.c
207
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/simple.c
208
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/simplepost.c
209
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/simplesmtp.c
210
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/simplessl.c
211
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/smooth-gtk-thread.c
212
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/smtp-multi.c
213
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/smtp-tls.c
214
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/synctime.c
215
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/threaded-ssl.c
216
%%PORTEXAMPLES%%%%EXAMPLESDIR%%/url2file.c
217
%%PORTEXAMPLES%%@dirrm %%EXAMPLESDIR%%

Return to bug 177369