/[packages]/updates/5/firefox/current/SPECS/firefox.spec
ViewVC logotype

Contents of /updates/5/firefox/current/SPECS/firefox.spec

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1083267 - (show annotations) (download)
Tue Jan 24 01:08:00 2017 UTC (7 years, 2 months ago) by luigiwalser
File size: 18017 byte(s)
45.7.0
1 # WARNING: This package is synced with FC
2
3 #
4 # WARNING, READ FIRST:
5 #
6 # This is a special package that needs special treatment. Due to the amount of
7 # security updates it needs, it's common to ship new upstream versions instead of patching.
8 # That means this package MUST be BUILDABLE for stable official releases.
9 # This also means only STABLE upstream releases, NO betas.
10 # This is a discussed topic. Please, do not flame it again.
11
12 # Stay on ESR for stable releases and for cauldron before mageia 5.
13 # /!\ Do not update more than FF 45 for mga6. /!\
14 # ff 38 -> 45 -> 52
15
16 %define toolkit_gtk3 1
17
18 # (doktor5000) this switch enables to build with clang
19 # warning, do not change this, if you don't test and fix firefox afterwards!
20 # clang can build firefox without issues, but it will be really crashy
21 # during runtime, even for simple things
22 # see https://bugs.mageia.org/show_bug.cgi?id=14062
23 # and https://bugs.mageia.org/show_bug.cgi?id=13575
24 %define use_clang 0
25
26
27 # Use system cairo?
28 %define system_cairo 0
29
30 %define major 45
31 %define ff_epoch 0
32 # (tpg) set version HERE !!!
33 %define extra esr
34 #define extra %nil
35 %define realver %{version}%extra
36 %define firefox_appid \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\}
37
38 # (tpg) MOZILLA_FIVE_HOME
39 %define mozillalibdir %{_libdir}/%{name}
40 %define pluginsdir %{_libdir}/mozilla/plugins
41
42 # libxul.so is provided by libxulrunnner2.0.
43 %global __requires_exclude libxul.so
44
45 # Minimal required versions
46 %global cairo_version 1.13.1
47 %global freetype_version 2.1.9
48 %global libnotify_version 0.7.0
49 %global libvpx_version 1.5.0
50
51 # this seems fragile, so require the exact version or later (#58754)
52 %global nspr_version 4.12
53 %global nspr_build_version %(pkg-config --silence-errors --modversion nspr 2>/dev/null || echo 65536)
54 %global nss_version 3.21.1
55 %global nss_build_version %(pkg-config --silence-errors --modversion nss 2>/dev/null || echo 65536)
56 %global sqlite_version 3.8.8.2
57 # The actual sqlite version (see #480989):
58 %global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
59
60
61 %define update_channel %{extra}%major
62
63 Summary: Mozilla Firefox Web browser
64 Name: firefox
65 Version: %{major}.7.0
66 Epoch: %{ff_epoch}
67 Release: %mkrel 1
68 License: MPLv1.1 or GPLv2+ or LGPLv2+
69 Group: Networking/WWW
70 Url: https://www.mozilla.org/firefox/organizations/
71 Source0: https://ftp.mozilla.org/pub/firefox/releases/%{realver}/source/%{name}-%{realver}.source.tar.xz
72 Source4: %{name}.desktop
73 Source8: %{name}-searchengines-duckduckgo.xml
74 Source9: kde.js
75 # From Fedora:
76 Source10: firefox-mozconfig
77
78 # Fedora patches:
79 Patch3: mozilla-build-arm.patch
80 Patch24: firefox-debug.patch
81 Patch222: firefox-gtk3-20.patch
82 Patch223: rhbz-1291190-appchooser-crash.patch
83
84 # Upstream patches
85 Patch301: mozilla-1205199.patch
86 Patch302: mozilla-1228540.patch
87 Patch303: mozilla-1228540-1.patch
88 Patch304: mozilla-1253216.patch
89
90 # Gtk3 upstream patches
91
92 # Fix Skia Neon stuff on AArch64
93 # Update https://bugzilla.mozilla.org/show_bug.cgi?id=1142056
94 # when removed
95 Patch500: aarch64-fix-skia.patch
96
97 # Mageia patches:
98 Patch1000: firefox-lang.patch
99 # (OpenSuse) add patch to make firefox always use /usr/bin/firefox when "make firefox
100 # the default web browser" is used fix mdv bug#58784
101 Patch1005: firefox-38.0-appname.patch
102 Patch1006: firefox-7.0-fix-str-fmt.patch
103 Patch1008: firefox-disable-check-default-browser.patch
104 Patch1010: firefox-3.5.3-default-mail-handler.patch
105 # Patches for kde integration of FF
106 # (doktor5000) if the patches need updating, grab both from the branch corresponding with the current firefox version at
107 # http://www.rosenauer.org/hg/mozilla
108 Patch1011: http://www.rosenauer.org/hg/mozilla/file/tip/mozilla-kde.patch
109 # (fwang) please modify patch12 with `sed -e 's/MozillaFirefox/firefox/'` to fit our desktop filename
110 Patch1012: http://www.rosenauer.org/hg/mozilla/file/tip/firefox-kde.patch
111
112 Patch1037: firefox-38.0-nss-version.patch
113 Patch1038: firefox-38.1-freetype-2.6-compatibility.patch
114 Patch1039: firefox-43.4.0-optimize-dont-force-O3.patch
115
116 BuildRequires: pkgconfig(nspr) >= %{nspr_version}
117 BuildRequires: pkgconfig(nss) >= %{nss_version}
118 BuildRequires: nss-static-devel >= %{nss_version}
119 %if %{?system_cairo}
120 BuildRequires: pkgconfig(cairo) >= %{cairo_version}
121 %endif
122 BuildRequires: pkgconfig(xinerama)
123 BuildRequires: pkgconfig(xscrnsaver)
124 BuildRequires: pkgconfig(libpng)
125 BuildRequires: libjpeg-devel
126 BuildRequires: zip
127 BuildRequires: bzip2-devel
128 BuildRequires: pkgconfig(zlib)
129 BuildRequires: pkgconfig(libIDL-2.0)
130 %if %{toolkit_gtk3}
131 BuildRequires: pkgconfig(gtk+-3.0)
132 %endif
133 BuildRequires: pkgconfig(gtk+-2.0)
134 BuildRequires: pkgconfig(pango)
135 BuildRequires: pkgconfig(xt)
136 BuildRequires: pkgconfig(hunspell)
137 BuildRequires: pkgconfig(libstartup-notification-1.0)
138 BuildRequires: pkgconfig(alsa)
139 BuildRequires: pkgconfig(libnotify) >= %{libnotify_version}
140 BuildRequires: pkgconfig(dri)
141 # BuildRequires: pkgconfig(libvpx) >= %{libvpx_version}
142 BuildRequires: autoconf2.1
143 BuildRequires: pkgconfig(libpulse)
144 BuildRequires: pkgconfig(icu-i18n)
145 BuildRequires: pkgconfig(gconf-2.0)
146 %ifnarch %arm
147 BuildRequires: valgrind
148 BuildRequires: yasm
149 %endif
150 Requires: %{mklibname nss 3} >= 2:%{nss_build_version}
151 Requires: %{mklibname nspr 4} >= 2:%{nspr_build_version}
152 BuildRequires: pkgconfig(gstreamer-1.0)
153 BuildRequires: pkgconfig(gstreamer-allocators-1.0)
154 BuildRequires: python
155 # BuildRequires: pkgconfig(sqlite3) >= %{sqlite_version}
156 # Requires: %{mklibname sqlite3_ 0} >= %{sqlite_build_version}
157 BuildRequires: pkgconfig(libffi)
158 BuildRequires: rootcerts >= 1:20130411.00
159 BuildRequires: doxygen
160 BuildRequires: libiw-devel
161 BuildRequires: python-virtualenv
162 BuildRequires: pkgconfig(libevent)
163 BuildRequires: pkgconfig(libproxy-1.0)
164
165 Provides: %{name} = %{epoch}:%{version}
166 Provides: mozilla-firefox = %{epoch}:%{version}-%{release}
167 Provides: webclient
168
169 Requires: indexhtml
170 Requires: xdg-utils
171 # fixes bug #42096
172 Requires: mailcap
173 Recommends: hunspell-en
174 Requires: %{_lib}notify4
175 Requires: gstreamer1.0-libav
176 # make sure our default bookmarks are present
177 Requires: desktop-common-data
178 # try to fix mga#1344 (automatic installation of proper -l10n package)
179 # packages requiring locales-XX will be automatically preferred when locales-XX
180 # is already installed
181 Recommends: firefox-l10n
182
183 Recommends: %{_lib}canberra0
184 Recommends: %{_lib}cups2
185 Obsoletes: firefox-ext-weave-sync
186 Obsoletes: firefox-beta < 25
187
188 %description
189 Mozilla Firefox is an open-source web browser, designed for standards
190 compliance, performance and portability.
191
192 %package devel
193 Summary: Development files for %{name}
194 Group: Development/Other
195 Obsoletes: firefox-beta-devel < 25
196
197 %description devel
198 Files and macros mainly for building Firefox extensions.
199
200 %prep
201 %if %{?extra}
202 #setup -q -n mozilla-%{update_channel}
203 %setup -q -n firefox-%{version}esr
204 %else
205 #setup -q -n mozilla-release
206 %setup -q -n %name-%version
207 %endif
208 # Fedora patches:
209 %patch24 -p1 -b .debug
210 %patch3 -p2 -b .arm
211 %patch223 -p1 -b .appchooser-crash
212 %patch301 -p1 -b .1205199
213 %patch302 -p1 -b .1228540
214 %patch303 -p1 -b .1228540-1
215 %patch304 -p2 -b .1253216
216 #patch222 -p1 -b .gtk3-20
217
218 %patch500 -p1
219
220 # Mageia patches:
221 %patch1000 -p1 -b .lang
222 %patch1005 -p1 -b .appname
223 %patch1008 -p1 -b .disable-software-update
224 %patch1010 -p1 -b .default-mail-handler
225 %patch1011 -p1 -b .mozkde
226 %patch1012 -p1 -b .ffkde
227
228 %patch1037 -p0
229 %patch1038 -p1 -b .freetype-compatibility
230 %patch1039 -p1 -b .noo3_noos
231
232 pushd js/src
233 autoconf-2.13
234 popd
235 autoconf-2.13
236
237 # needed to regenerate certdata.c
238 pushd security/nss/lib/ckfw/builtins
239 perl ./certdata.perl < /etc/pki/tls/mozilla/certdata.txt
240 popd
241
242 %{__rm} -f .mozconfig
243 %{__cp} %{SOURCE10} .mozconfig
244 # Mageia specific options:
245 cat << EOF >> .mozconfig
246 ac_add_options --with-system-libevent
247 ac_add_options --enable-libproxy
248 ac_add_options --with-system-png
249 ac_add_options --with-distribution-id=org.mageia
250 ac_add_options --enable-update-channel=%{update_channel}
251 %ifarch %arm
252 ac_add_options --with-valgrind
253 %endif
254 EOF
255
256 # Options shared with FC:
257 echo "ac_add_options --enable-official-branding" >> .mozconfig
258
259 %if %{toolkit_gtk3}
260 echo "ac_add_options --enable-default-toolkit=cairo-gtk3" >> .mozconfig
261 %else
262 echo "ac_add_options --enable-default-toolkit=cairo-gtk2" >> .mozconfig
263 %endif
264
265 echo "ac_add_options --with-system-nspr" >> .mozconfig
266 echo "ac_add_options --with-system-nss" >> .mozconfig
267
268 # SQLite is too old.
269 # echo "ac_add_options --enable-system-sqlite" >> .mozconfig
270
271 %if %{?system_cairo}
272 echo "ac_add_options --enable-system-cairo" >> .mozconfig
273 %else
274 echo "ac_add_options --disable-system-cairo" >> .mozconfig
275 %endif
276
277 echo "ac_add_options --enable-system-ffi" >> .mozconfig
278
279 echo "ac_add_options --enable-gstreamer=1.0" >> .mozconfig
280
281 %ifarch %{arm}
282 echo "ac_add_options --disable-elf-hack" >> .mozconfig
283 %endif
284
285 echo "ac_add_options --disable-debug" >> .mozconfig
286 echo "ac_add_options --enable-optimize" >> .mozconfig
287
288 %ifarch armv7hl
289 echo "ac_add_options --with-arch=armv7-a" >> .mozconfig
290 echo "ac_add_options --with-float-abi=hard" >> .mozconfig
291 echo "ac_add_options --with-fpu=vfpv3-d16" >> .mozconfig
292 echo "ac_add_options --disable-elf-hack" >> .mozconfig
293 %endif
294 %ifarch armv7hnl
295 echo "ac_add_options --with-arch=armv7-a" >> .mozconfig
296 echo "ac_add_options --with-float-abi=hard" >> .mozconfig
297 echo "ac_add_options --with-fpu=neon" >> .mozconfig
298 echo "ac_add_options --disable-elf-hack" >> .mozconfig
299 echo "ac_add_options --disable-ion" >> .mozconfig
300 echo "ac_add_options --disable-yarr-jit" >> .mozconfig
301 %endif
302 %ifarch armv5tel
303 echo "ac_add_options --with-arch=armv5te" >> .mozconfig
304 echo "ac_add_options --with-float-abi=soft" >> .mozconfig
305 echo "ac_add_options --disable-elf-hack" >> .mozconfig
306 echo "ac_add_options --disable-ion" >> .mozconfig
307 echo "ac_add_options --disable-yarr-jit" >> .mozconfig
308 %endif
309
310 %ifnarch %{ix86} x86_64
311 echo "ac_add_options --disable-webrtc" >> .mozconfig
312 %endif
313
314 echo "ac_add_options --disable-crashreporter" >> .mozconfig
315
316 echo "ac_add_options --with-system-jpeg" >> .mozconfig
317
318 # Using the bundled libvpx because the mgav5 one is too old.
319 # echo "ac_add_options --with-system-libvpx" >> .mozconfig
320
321 %build
322 # -fpermissive is needed to build with gcc 4.6+ which has become stricter
323 #
324 # Mozilla builds with -Wall with exception of a few warnings which show up
325 # everywhere in the code; so, don't override that.
326 #
327 # Disable C++ exceptions since Mozilla code is not exception-safe
328 #
329 MOZ_OPT_FLAGS=$(echo "$RPM_OPT_FLAGS" | %{__sed} -e 's/-Wall//')
330 #rhbz#1037063
331 # -Werror=format-security causes build failures when -Wno-format is explicitly given
332 # for some sources
333 # Explicitly force the hardening flags for Firefox so it passes the checksec test;
334 # See also https://fedoraproject.org/wiki/Changes/Harden_All_Packages
335 MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -Wformat-security -Wformat -Werror=format-security"
336 MOZ_OPT_FLAGS="$MOZ_OPT_FLAGS -fPIC -Wl,-z,relro -Wl,-z,now"
337 %ifarch %{arm}
338 MOZ_LINK_FLAGS="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
339 %endif
340
341 export CFLAGS=$MOZ_OPT_FLAGS
342 export CXXFLAGS=$MOZ_OPT_FLAGS
343 export LDFLAGS=$MOZ_LINK_FLAGS
344
345 export PREFIX='%{_prefix}'
346 export LIBDIR='%{_libdir}'
347
348 MOZ_SMP_FLAGS=-j1
349 # On x86 architectures, Mozilla can build up to 4 jobs at once in parallel,
350 # however builds tend to fail on other arches when building in parallel.
351 %ifarch %{ix86} x86_64 ppc ppc64 ppc64le aarch64
352 [ -z "$RPM_BUILD_NCPUS" ] && \
353 RPM_BUILD_NCPUS="`/usr/bin/getconf _NPROCESSORS_ONLN`"
354 MOZ_SMP_FLAGS=-j$RPM_BUILD_NCPUS
355 %endif
356
357 make -f client.mk build STRIP="/bin/true" MOZ_MAKE_FLAGS="$MOZ_SMP_FLAGS" MOZ_SERVICES_SYNC="1"
358
359 %install
360 make -C objdir/browser/installer STRIP=/bin/true MOZ_PKG_FATAL_WARNINGS=0
361
362 # Copy files to buildroot
363 %{__mkdir_p} %{buildroot}%{mozillalibdir}
364 cp -rf objdir/dist/firefox/* %{buildroot}%{mozillalibdir}
365
366 %{__mkdir_p} %{buildroot}%{_bindir}
367 ln -sf %{mozillalibdir}/firefox %{buildroot}%{_bindir}/firefox
368 pushd %{buildroot}%{_bindir}
369 ln -sf firefox mozilla-firefox
370 popd
371 mkdir -p %{buildroot}%{mozillalibdir}/browser/defaults/preferences/
372 install -m 644 %{SOURCE9} %{buildroot}%{mozillalibdir}/browser/defaults/preferences/kde.js
373
374 # Create and own %{_libdir}/mozilla/plugins & firefox extensions directories
375 %{__mkdir_p} %{buildroot}%{pluginsdir}
376 %{__mkdir_p} %{buildroot}%{_libdir}/mozilla/extensions/%{firefox_appid}
377 %{__mkdir_p} %{buildroot}%{_datadir}/mozilla/extensions/%{firefox_appid}
378
379 # (tpg) desktop entry
380 %{__mkdir_p} %{buildroot}%{_datadir}/applications
381 install -m 644 %{SOURCE4} %{buildroot}%{_datadir}/applications/%{name}.desktop
382
383 # (tpg) icons
384 %{__cp} %{buildroot}%{mozillalibdir}/browser/chrome/icons/default/default16.png %{buildroot}/%{mozillalibdir}/browser/icons/
385 for i in 16 22 24 32 48 256; do
386 %{__mkdir_p} %{buildroot}%{_iconsdir}/hicolor/"$i"x"$i"/apps
387 %{__install} -m 644 browser/branding/official/default$i.png %{buildroot}%{_iconsdir}/hicolor/"$i"x"$i"/apps/%{name}.png ;
388 done
389 %{__mkdir_p} %{buildroot}{%{_liconsdir},%{_iconsdir},%{_miconsdir}}
390 ln -sf %{mozillalibdir}/browser/chrome/icons/default/default48.png %{buildroot}%{_liconsdir}/%{name}.png
391 ln -sf %{mozillalibdir}/browser/chrome/icons/default/default32.png %{buildroot}%{_iconsdir}/%{name}.png
392 ln -sf %{mozillalibdir}/browser/chrome/icons/default/default16.png %{buildroot}%{_miconsdir}/%{name}.png
393
394 # exclusions
395 rm -f %{buildroot}%{mozillalibdir}/README.txt
396 rm -f %{buildroot}%{mozillalibdir}/removed-files
397 rm -f %{buildroot}%{mozillalibdir}/precomplete
398
399 # this file is only used when creating a new user profile
400 install -D -m644 browser/app/profile/prefs.js %{buildroot}%{mozillalibdir}/browser/defaults/profile/prefs.js
401 cat << EOF >> %{buildroot}%{mozillalibdir}/browser/defaults/profile/prefs.js
402 user_pref("browser.EULA.override", true);
403 user_pref("browser.shell.checkDefaultBrowser", false);
404 user_pref("browser.startup.homepage", "file:///usr/share/indexhtml/index.html");
405 user_pref("app.update.auto", false);
406 user_pref("app.update.enabled", false);
407 user_pref("app.update.autoInstallEnabled", false);
408 user_pref("browser.showQuitWarning", true);
409 EOF
410
411 # display icon for Firefox button
412 %{__mkdir_p} %{buildroot}%{mozillalibdir}/browser/defaults/profile/chrome
413 cat << EOF > %{buildroot}%{mozillalibdir}/browser/defaults/profile/chrome/userChrome.css
414 #appmenu-toolbar-button {
415 list-style-image: url("chrome://branding/content/icon16.png");
416 }
417 EOF
418
419 # files in this directory are read on every startup, and can change/add
420 # preferences for existing profiles
421 # extensions.autoDisableScopes is a new preference added in firefox 8
422 # it defines "scopes" where newly installed addons are disabled by default
423 # this is an additive bit field, and the value defaults to 15 (1+2+4+8)
424 # we need to remove system scope (8) from it so language packs and other addons
425 # which are installed systemwide won't get marked as 3rd party and disabled
426 # documentation: http://kb.mozillazine.org/About:config_entries#Extensions.
427 # or in toolkit/mozapps/extensions/AddonManager.jsm
428 # we also need to disable the "disable addon selection dialog"
429 # (doktor5000) - path has changed since FF 21
430 # http://mike.kaply.com/2013/04/24/major-changes-coming-in-firefox-21/
431 cat << EOF > %{buildroot}%{mozillalibdir}/browser/defaults/preferences/mga.js
432 pref("general.useragent.locale", "chrome://global/locale/intl.properties");
433 pref("extensions.autoDisableScopes", 0);
434 pref("extensions.shownSelectionUI", true);
435 EOF
436 # FIXME: Add it back in mga.js when this search engine will be used by default.
437 # user_pref("browser.search.selectedEngine","duckduckgo.com");
438
439 # use the system myspell dictionaries
440 rm -fr %{buildroot}%{mozillalibdir}/dictionaries
441 ln -s %{_datadir}/hunspell %{buildroot}%{mozillalibdir}/dictionaries
442
443 # (lm) touch and %ghost bookmarks.html to a proper uninstall
444 touch %{buildroot}%{mozillalibdir}/browser/defaults/profile/bookmarks.html
445
446 # Add stuff to build a plugin to -devel
447 mkdir -p %{buildroot}%{_includedir}
448 cp -a dom/plugins/base/np*.h %{buildroot}%{_includedir}
449 mkdir -p %{buildroot}/%{_datadir}/pkgconfig
450 cat <<EOF >%{buildroot}/%{_datadir}/pkgconfig/mozilla-plugin.pc
451 Name: Mozilla Plug-In API
452 Description: Mozilla Plug-In API
453 Version: %{version}
454 Cflags: -I%{_includedir} -DXP_UNIX
455 EOF
456
457 mkdir -p %{buildroot}%{_sys_macros_dir}
458 cat <<FIN >%{buildroot}%{_sys_macros_dir}/%{name}.macros
459 # Macros from %{name} package
460 %%firefox_major %{version}
461 %%firefox_epoch %{ff_epoch}
462 %%firefox_version %{version}
463 %%firefox_mozillapath %{mozillalibdir}
464 %%firefox_pluginsdir %{pluginsdir}
465 %%firefox_appid \{ec8030f7-c20a-464f-9b0e-13a3a9e97384\}
466 %%firefox_extdir %%(if [ "%%_target_cpu" = "noarch" ]; then echo %%{_datadir}/mozilla/extensions/%%{firefox_appid}; else echo %%{_libdir}/mozilla/extensions/%%{firefox_appid}; fi)
467 FIN
468 # temp build fix:
469 mkdir -p %{buildroot}%{mozillalibdir}/browser/searchplugins
470 cp -f %{SOURCE8} %{buildroot}%{mozillalibdir}/browser/searchplugins/duckduckgo.xml
471
472 %pre
473 if [ -d %{mozillalibdir}/dictionaries ]; then
474 rm -fr %{mozillalibdir}/dictionaries
475 fi
476
477 %post
478 if [ ! -r /etc/sysconfig/oem ]; then
479 case `grep META_CLASS /etc/sysconfig/system` in
480 *powerpack) bookmark="mozilla-powerpack.html" ;;
481 *desktop) bookmark="mozilla-one.html";;
482 *) bookmark="mozilla-download.html";;
483 esac
484 ln -s -f %{_prefix}/share/mga/bookmarks/mozilla/$bookmark %{mozillalibdir}/browser/defaults/profile/bookmarks.html
485 fi
486
487 %files
488 %{_bindir}/%{name}
489 %{_bindir}/mozilla-firefox
490 %{_iconsdir}/hicolor/*/apps/*.png
491 %{_miconsdir}/%{name}.png
492 %{_iconsdir}/%{name}.png
493 %{_liconsdir}/%{name}.png
494 %{_datadir}/applications/*.desktop
495 %{mozillalibdir}
496 %ghost %{mozillalibdir}/browser/defaults/profile/bookmarks.html
497 %dir %{_libdir}/mozilla
498 %dir %{pluginsdir}
499 %dir %{_libdir}/mozilla/extensions/%{firefox_appid}
500 %dir %{_datadir}/mozilla/extensions/%{firefox_appid}
501
502 %files devel
503 %{_sys_macros_dir}/%{name}.macros
504 %{_includedir}/np*.h
505 %{_datadir}/pkgconfig/mozilla-plugin.pc

  ViewVC Help
Powered by ViewVC 1.1.30