]> git.pld-linux.org Git - packages/brltty.git/blame - brltty.spec
- BR: at-spi-devel, pkgconfig
[packages/brltty.git] / brltty.spec
CommitLineData
3704768a 1# TODO:
6913fe15
SS
2# - ocaml bcond is useless now:
3# Cannot find ocamlfind.
4# BrlAPI Caml bindings will be compiled but not installed.
09255552 5# - check java stuff
ac744b8d 6# - create bcond to build with minimal deps (wo ncurses,gpm,at-spi*)
3704768a 7#
608626ec
SS
8# Conditional build:
9%bcond_without apidocs # documentation generated with doxygen
09255552 10%bcond_with java # java bindings
6913fe15 11%bcond_with ocaml # ocaml bindings (NFY)
0bb357f1
SS
12%bcond_without python # python bindings
13%bcond_without tcl # tcl bindings
eb77b64b 14%bcond_without x # build X11-based utilities
608626ec 15#
9b20373a 16Summary: Braille display driver for Linux/Unix
8731bfde 17Summary(pl.UTF-8): Sterownik do wyświetlaczy Braille'a
91162002 18Name: brltty
18f080b9 19Version: 3.9
20Release: 1
9b20373a 21Group: Daemons
91162002 22License: GPL
9b20373a 23URL: http://mielke.cc/brltty/
91162002 24Source0: http://mielke.cc/brltty/releases/%{name}-%{version}.tar.gz
18f080b9 25# Source0-md5: 7ce54ba2d38b7c220870e8c781f36743
ac744b8d 26BuildRequires: at-spi-devel
91162002 27BuildRequires: autoconf >= 2.53
664a738b 28BuildRequires: automake
91162002 29BuildRequires: bison
3704768a 30#BuildRequires: bluez-devel
608626ec 31%{?with_apidocs:BuildRequires: doxygen}
915167f5 32BuildRequires: gpm-devel
09255552 33%{?with_java:BuildRequires: jdk}
eb77b64b 34BuildRequires: ncurses-devel
6913fe15 35%{?with_ocaml:BuildRequires: ocaml}
ac744b8d 36BuildRequires: pkgconfig
0bb357f1
SS
37%{?with_python:BuildRequires: python-Pyrex}
38%{?with_python:BuildRequires: rpm-pythonprov}
39%{?with_tcl:BuildRequires: tcl}
eb77b64b
SS
40%{?with_x:BuildRequires: xorg-lib-libXaw-devel}
41%{?with_x:BuildRequires: xorg-lib-libXtst-devel}
91162002 42BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
43
44%description
45BRLTTY is a background process (daemon) which provides access to the
46Linux/Unix console (when in text mode) for a blind person using a
33e3c5f9 47refreshable Braille display. It drives the Braille display, and
3b0ec988 48provides complete screen review functionality. Some speech capability
91162002 49has also been incorporated.
50
54f59947
JR
51%description -l pl.UTF-8
52BRLTTY jest demonem, który udostępnia dostęp do linuksowej konsoli (w
53trybie tekstowym) dla niewidomych używających wyświetlaczy Braille'a z
54odświeżaniem (refreshable Braille display). BRLTTY steruje
55wyświetlaczem Braille'a i dostarcza funkcjonalność całkowitego
56przeglądu ekranu. Do tego pakietu została włączona możliwość syntezy
9b20373a 57mowy.
91162002 58
59%package -n brlapi
9b20373a 60Summary: Application Programming Interface for BRLTTY
8731bfde 61Summary(pl.UTF-8): API do BRLTTY
3b0ec988 62Group: Applications/System
91162002 63
64%description -n brlapi
65This package provides the run-time support for the Application
66Programming Interface to BRLTTY.
67
9b20373a 68Install this package if you have an application which directly
69accesses a refreshable Braille display.
91162002 70
54f59947
JR
71%description -n brlapi -l pl.UTF-8
72Ten pakiet zawiera środowisko uruchomieniowe dla programów
73korzystających z API BRLTTY.
91162002 74
54f59947
JR
75Zainstaluj ten pakiet jeśli masz aplikację, która bezpośrednio używa
76wyświetlacza Braille'a z odświeżaniem.
91162002 77
78%package -n brlapi-devel
9b20373a 79Summary: Headers and documentation for BrlAPI
8731bfde 80Summary(pl.UTF-8): Pliki nagłówkowe i dokumentacja do BrlAPI
3b0ec988 81Group: Development/Libraries
664a738b 82Requires: brlapi = %{version}-%{release}
91162002 83
84%description -n brlapi-devel
9b20373a 85This package provides the header files, shared object linker
86reference, and reference documentation for BrlAPI (the Application
3b0ec988 87Programming Interface to BRLTTY). It enables the implementation of
9b20373a 88applications which take direct advantage of a refreshable Braille
89display in order to present information in ways which are more
90appropriate for blind users and/or to provide user interfaces which
91are more specifically atuned to their needs.
91162002 92
3b0ec988 93Install this package if you're developing or maintaining an
94application which directly accesses a refreshable Braille display.
91162002 95
54f59947
JR
96%description -n brlapi-devel -l pl.UTF-8
97Ten pakiet zawiera pliki nagłówkowe oraz dokumentację do BrlAPI (API
98do BRLTTY). BrlAPI pozwala implementować aplikacje, które bezpośrednio
99korzystają z wyświetlaczy Braille'a dostarczając interfejs użytkownika
100bardziej przystosowany dla osób niewidomych.
91162002 101
54f59947
JR
102Zainstaluj ten pakiet, jeśli tworzysz lub nadzorujesz aplikację
103korzystającą bezpośrednio z odświeżalnych wyświetlaczy Braille'a.
91162002 104
105%package -n brlapi-static
9b20373a 106Summary: Static BrlAPI library
8731bfde 107Summary(pl.UTF-8): Statyczna biblioteka BrlAPI
3b0ec988 108Group: Development/Libraries
664a738b 109Requires: brlapi-devel = %{version}-%{release}
91162002 110
111%description -n brlapi-static
9b20373a 112This is package with static BrlAPI library.
91162002 113
54f59947
JR
114%description -n brlapi-static -l pl.UTF-8
115Ten pakiet zawiera statyczną wersję biblioteki BrlAPI.
91162002 116
608626ec
SS
117%package -n brlapi-apidocs
118Summary: BrlAPI documentation
119Summary(pl.UTF-8): Documentacja BrlAPI
120Group: Documentation
121
122%description -n brlapi-apidocs
123Documentation for BrlAPI in HTML format generated from brltty
124sources by doxygen.
125
126%description -n brlapi-apidocs -l pl.UTF-8
127Dokumentacja BrlAPI w formacie HTML generowane ze
128źrodeł brltty przez doxygen.
129
09255552
SS
130%package -n brlapi-java
131Summary: BrlAPI library for Java
132Summary(pl.UTF-8): Biblioteka BrlAPI dla Javy
133Group: Libraries
134Requires: brlapi = %{version}-%{release}
135
136%description -n brlapi-java
137BrlAPI library for Java.
138
139%description -n brlapi-java -l pl.UTF-8
140Biblioteka BrlAPI dla Javy.
141
0bb357f1
SS
142%package -n python-brlapi
143Summary: Python interface to BrlAPI
144Summary(pl.UTF-8): Pythonowy interfejs do BrlAPI
145Group: Libraries
146Requires: brlapi = %{version}-%{release}
147
148%description -n python-brlapi
149Python interface to BrlAPI.
150
151%description -n python-brlapi -l pl.UTF-8
152Pythonowy interfejs do BrlAPI.
153
154%package -n brlapi-tcl
155Summary: BrlAPI library for Tcl
156Summary(pl.UTF-8): Biblioteka BrlAPI dla Tcl
157Group: Libraries
158Requires: brlapi = %{version}-%{release}
159
160%description -n brlapi-tcl
161BrlAPI library for Tcl.
162
163%description -n brlapi-tcl -l pl.UTF-8
164Biblioteka BrlAPI dla Tcl.
165
91162002 166%prep
167%setup -q
168
169%build
664a738b
JB
170%{__aclocal}
171%{__autoconf}
172cp -f /usr/share/automake/config.sub acdir
915167f5 173CFLAGS="%{rpmcflags} -I/usr/include/ncurses"
664a738b
JB
174%configure \
175 --with-install-root="$RPM_BUILD_ROOT" \
91162002 176 --disable-tainted-components \
177 --enable-api
178%{__make}
179
180directory="doc"
181mkdir -p "$directory"
182for file in `find . \( -path "./$directory" -o -path ./Documents \) -prune -o \( -name 'README*' -o -name '*.txt' -o -name '*.html' -o -name '*.sgml' -o \( -path "./Bootdisks/*" -type f -perm +ugo=x \) \) -print`
183do
9b20373a 184 mkdir -p "$directory/${file%/*}"
185 cp -rp "$file" "$directory/$file"
91162002 186done
187
188%install
189rm -rf $RPM_BUILD_ROOT
190%{__make} install
3b0ec988 191install Documents/brltty.conf $RPM_BUILD_ROOT%{_sysconfdir}
91162002 192
193%clean
194rm -rf $RPM_BUILD_ROOT
195
196%pre
197# The pre-install scriptlet.
198
199# If a configuration file already exists then rpm installs the new one as
200# <path>.rpmnew. If this is done then the .rpmnew file is overwritten if it
201# already exists.
202
203# There's no explicit way to tell if a configuration file has been installed
204# as itself or as a .rpmnew file. The way we'll figure it out, therefore, is by
3b0ec988 205# erasing the .rpmnew file now so that we can see if it gets created later.
91162002 206rm -f "%{_sysconfdir}/brltty.conf.rpmnew"
207
208%post
209# The post-install scriptlet.
210
211# If BRLTTY's boot parameter has been specified then update the just installed
212# configuration file template to reflect the options supplied thereby.
213
214# First, we need to determine which file to update. If there's a .rpmnew file
215# then update it since a previous configuration file must already have existed.
216file="%{_sysconfdir}/brltty.conf"
217new="${file}.rpmnew"
218[ -f "${new}" ] && file="${new}"
219
220# Update the configuration file template via the Bootdisks/bp2cf script.
221# Include it right within this scriptlet so that it needn't be installed.
222# Imbed it within a subshell to ensure that it won't impact this scriptlet.
223(
c247b245 224 # First, set bp2cf's command line arguments.
225 set -- -u -f "${file}"
91162002 226
227#!/bin/sh
228###############################################################################
229# BRLTTY - A background process providing access to the Linux console (when in
9b20373a 230# text mode) for a blind person using a refreshable Braille display.
91162002 231#
232# Copyright (C) 1995-2003 by The BRLTTY Team. All rights reserved.
233#
234# BRLTTY comes with ABSOLUTELY NO WARRANTY.
235#
236# This is free software, placed under the terms of the
237# GNU General Public License, as published by the Free Software
238# Foundation. Please see the file COPYING for details.
239#
240# Web Page: http://mielke.cc/brltty/
241#
242# This software is maintained by Dave Mielke <dave@mielke.cc>.
243###############################################################################
244
245# Convert the boot parameter to configuration file directives.
246# If /proc is mounted then use the brltty= boot parameter in /proc/cmdline.
247# If /proc is not mounted then use the brltty environment variable.
248# Invoke with -h for usage information.
249
250programName="${0##*/}"
251programMessage()
252{
c247b245 253 echo 2>&1 "${programName}: ${1}"
91162002 254}
255syntaxError()
256{
c247b245 257 programMessage "${1}"
258 exit 2
91162002 259}
260internalError()
261{
c247b245 262 programMessage "${1}"
263 exit 3
91162002 264}
265
266configurationFile=""
267requestedAction=create
268deviceTranslation=none
269requestedParameter=""
270OPTIND=1
271while getopts ":f:cundop:h" option
272do
c247b245 273 case "${option}" in
274 f) configurationFile="${OPTARG}";;
275 c) requestedAction=create;;
276 u) requestedAction=update;;
277 n) deviceTranslation=none;;
278 d) deviceTranslation=devfs;;
279 o) deviceTranslation=old;;
280 p) requestedParameter="${OPTARG}";;
281 h)
282 cat <<EOF
91162002 283Usage: ${programName} [option ...]
284-f file The configuration file to create/update.
285-c Create the configuration file (write to stdout if no -f).
286-u Update the configuration file (copying from stdin to stdout if no -f).
287-n Do not translate device paths.
288-d Do old-style to devfs device path translation.
289-o Do devfs to old-style device path translation.
290-p [driver][,[device][,[table]]]
291 Explicitly specify the boot parameter.
292-h Display this usage summary.
293EOF
c247b245 294 exit 0
295 ;;
296 \?) syntaxError "unknown option: -${OPTARG}";;
297 :) syntaxError "missing value: -${OPTARG}";;
298 *) internalError "unimplemented option: -${option}";;
299 esac
91162002 300done
301shift "`expr $OPTIND - 1`"
302[ "${#}" -eq 0 ] || syntaxError "too many parameters."
303
c247b245 304case "${requestedAction}" in
305 create)
306 putConfigurationLine()
307 {
308 echo "${1}" || exit 4
309 }
310 startConfigurationFile()
311 {
312 [ -n "${configurationFile}" ] && exec >"${configurationFile}"
313 putConfigurationLine "`makeHeaderLine Created`"
314 putConfigurationLine "`makeParameterLine`"
315 putConfigurationLine ""
316 }
317 putConfigurationDirective()
318 {
319 putConfigurationLine "${1} ${2}"
320 }
321 finalizeConfigurationFile()
322 {
323 :
324 }
325 ;;
326 update)
327 putSedCommand()
328 {
329 sedScript="${sedScript}
91162002 330${1}"
c247b245 331 }
332 startConfigurationFile()
333 {
106ddbb5 334 if [ -n "${configurationFile}" ]; then
c247b245 335 [ -e "${configurationFile}" ] || syntaxError "file not found: ${configurationFile}"
336 [ -f "${configurationFile}" ] || syntaxError "not a file: ${configurationFile}"
337 [ -r "${configurationFile}" ] || syntaxError "file not readable: ${configurationFile}"
338 [ -w "${configurationFile}" ] || syntaxError "file not writable: ${configurationFile}"
339 outputFile="${configurationFile}.new"
340 exec <"${configurationFile}" >"${outputFile}"
341 fi
342 sedScript=""
343 putSedCommand "1i\\
91162002 344`makeHeaderLine Updated`\\
345`makeParameterLine`\\
346"
c247b245 347 }
348 putConfigurationDirective()
349 {
350 value="`echo "${2}" | sed -e 's%\\([/\\]\\)%\\\\\\1%g'`"
351 putSedCommand "/^ *#\\(${1} .*\\)/s//\\1/"
352 putSedCommand "/^ *\\(${1}\\) .*/s//\\1 ${value}/"
353 }
354 finalizeConfigurationFile()
355 {
356 sed -e "${sedScript}"
357 [ -n "${outputFile}" ] && mv -f "${outputFile}" "${configurationFile}"
358 }
359 ;;
360 *) internalError "unimplemented action: ${requestedAction}";;
91162002 361esac
362
363translateDevice_none()
364{
c247b245 365 :
91162002 366}
367translateDevice_devfs()
368{
c247b245 369 minor="${device#ttyS}"
106ddbb5 370 if [ "${minor}" != "${device}" ]; then
c247b245 371 device="tts/${minor}"
372 return 0
373 fi
374 minor="${device#lp}"
106ddbb5 375 if [ "${minor}" != "${device}" ]; then
c247b245 376 device="printers/${minor}"
377 return 0
378 fi
379 programMessage "unsupported old-style device: ${device}"
91162002 380}
381translateDevice_old()
382{
c247b245 383 major="${device%%/*}"
106ddbb5 384 if [ "${major}" != "${device}" ]; then
c247b245 385 minor="${device#*/}"
386 case "${major}" in
387 tts) devfs="ttyS${minor}";;
388 printers) devfs="lp${minor}";;
389 esac
390 fi
106ddbb5 391 if [ -n "${devfs}" ]; then
c247b245 392 device="${devfs}"
393 else
394 programMessage "unsupported devfs device: ${device}"
395 fi
91162002 396}
397
398makeHeaderLine()
399{
c247b245 400 echo "# ${1} by brltty-bp2cf`date +' on %Y-%m-%d at %H:%M:%S %Z (UTC%z)'`."
91162002 401}
402makeParameterLine()
403{
c247b245 404 echo "# Boot Parameter:${bootParameter}"
91162002 405}
406putConfigurationFile()
407{
c247b245 408 startConfigurationFile
409 [ -n "${brailleDriver}" ] && putConfigurationDirective "braille-driver" "${brailleDriver}"
410 [ -n "${brailleDevice}" ] && {
411 device="`echo "${brailleDevice}" | sed -e 's%//*%/%g' -e 's%^/dev/%%'`"
106ddbb5 412 if [ "${device#/}" = "${device}" ]; then
c247b245 413 translateDevice_${deviceTranslation}
414 fi
415 putConfigurationDirective "braille-device" "${device}"
416 }
417 [ -n "${textTable}" ] && putConfigurationDirective "text-table" "${textTable}"
418 finalizeConfigurationFile
91162002 419}
420parseBootParameter()
421{
c247b245 422 bootParameter="${bootParameter} ${1}"
423 number=1
106ddbb5 424 while [ "${number}" -le 3 ]; do
c247b245 425 cut="cut -d, -f${number}"
426 [ "${number}" -gt 1 ] && cut="${cut} -s"
427 operand="`echo ${1} | ${cut}`"
106ddbb5 428 if [ -n "${operand}" ]; then
c247b245 429 case "${number}" in
430 1) brailleDriver="${operand}";;
431 2) brailleDevice="${operand}";;
432 3) textTable="${operand}";;
433 esac
434 fi
435 number="`expr ${number} + 1`"
436 done
91162002 437}
438putBootParameter()
439{
c247b245 440 parseBootParameter "${1}"
441 putConfigurationFile
91162002 442}
443parseBootCommand()
444{
c247b245 445 found=false
106ddbb5 446 while [ "${#}" -gt 0 ]; do
c247b245 447 case "${1}" in
448 "brltty="*)
449 found=true
450 parseBootParameter "${1#*=}"
451 ;;
452 esac
453 shift
454 done
455 "${found}" && putConfigurationFile
91162002 456}
457
458brailleDriver=""
459brailleDevice=""
460textTable=""
461bootCommandFile="/proc/cmdline"
106ddbb5 462if [ -n "${requestedParameter}" ]; then
c247b245 463 putBootParameter "${requestedParameter}"
106ddbb5 464elif [ -f "${bootCommandFile}" ]; then
c247b245 465 parseBootCommand `cat "${bootCommandFile}"`
106ddbb5 466elif [ -n "${brltty}" ]; then
c247b245 467 putBootParameter "${brltty}"
91162002 468fi
469exit 0
470)
471
9b20373a 472%post -n brlapi -p /sbin/ldconfig
473%postun -n brlapi -p /sbin/ldconfig
91162002 474
475%files
476%defattr(644,root,root,755)
c0ab824f
SS
477%doc Documents/{Manual-BRLTTY/English/BRLTTY*,ChangeLog,HISTORY,TODO}
478%doc doc/{Bindings,Bootdisks,BrailleDrivers,BrailleTables,ContractionTables,Patches,README,SpeechDrivers}
91162002 479%attr(755,root,root) %{_bindir}/brltty
c0ab824f
SS
480%attr(755,root,root) %{_bindir}/brltty-install
481%attr(755,root,root) %{_bindir}/brltty-config
18f080b9 482%attr(755,root,root) %{_bindir}/vstp
eb77b64b 483%{?with_x:%attr(755,root,root) %{_bindir}/xbrlapi}
91162002 484%dir %{_libdir}/brltty
c0ab824f
SS
485%attr(755,root,root) %{_libdir}/brltty/libbrlttybal.so
486%attr(755,root,root) %{_libdir}/brltty/libbrlttybat.so
487%attr(755,root,root) %{_libdir}/brltty/libbrlttybba.so
488%attr(755,root,root) %{_libdir}/brltty/libbrlttybbd.so
489%attr(755,root,root) %{_libdir}/brltty/libbrlttybbl.so
490%attr(755,root,root) %{_libdir}/brltty/libbrlttybbm.so
491%attr(755,root,root) %{_libdir}/brltty/libbrlttybbn.so
492%attr(755,root,root) %{_libdir}/brltty/libbrlttybcb.so
493%attr(755,root,root) %{_libdir}/brltty/libbrlttybec.so
494%attr(755,root,root) %{_libdir}/brltty/libbrlttybeu.so
495%attr(755,root,root) %{_libdir}/brltty/libbrlttybfs.so
496%attr(755,root,root) %{_libdir}/brltty/libbrlttybht.so
497%attr(755,root,root) %{_libdir}/brltty/libbrlttybil.so
498%attr(755,root,root) %{_libdir}/brltty/libbrlttyblt.so
499%attr(755,root,root) %{_libdir}/brltty/libbrlttybmb.so
500%attr(755,root,root) %{_libdir}/brltty/libbrlttybmd.so
501%attr(755,root,root) %{_libdir}/brltty/libbrlttybmn.so
502%attr(755,root,root) %{_libdir}/brltty/libbrlttybpm.so
503%attr(755,root,root) %{_libdir}/brltty/libbrlttybtn.so
504%attr(755,root,root) %{_libdir}/brltty/libbrlttybts.so
505%attr(755,root,root) %{_libdir}/brltty/libbrlttybtt.so
506%attr(755,root,root) %{_libdir}/brltty/libbrlttybvd.so
507%attr(755,root,root) %{_libdir}/brltty/libbrlttybvo.so
508%attr(755,root,root) %{_libdir}/brltty/libbrlttybvr.so
509%attr(755,root,root) %{_libdir}/brltty/libbrlttybvs.so
eb77b64b 510%{?with_x:%attr(755,root,root) %{_libdir}/brltty/libbrlttybxw.so}
c0ab824f
SS
511%attr(755,root,root) %{_libdir}/brltty/libbrlttysal.so
512%attr(755,root,root) %{_libdir}/brltty/libbrlttysbl.so
513%attr(755,root,root) %{_libdir}/brltty/libbrlttyscb.so
514%attr(755,root,root) %{_libdir}/brltty/libbrlttyses.so
515%attr(755,root,root) %{_libdir}/brltty/libbrlttysfv.so
516%attr(755,root,root) %{_libdir}/brltty/libbrlttysgs.so
ac744b8d 517%attr(755,root,root) %{_libdir}/brltty/libbrlttyxas.so
c0ab824f
SS
518%attr(755,root,root) %{_libdir}/brltty/libbrlttyxlx.so
519%attr(755,root,root) %{_libdir}/brltty/libbrlttyxsc.so
91162002 520%{_sysconfdir}/brltty
1c33f0ca 521%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/brltty.conf
c0ab824f
SS
522%{_mandir}/man1/brltty.1*
523%{_mandir}/man1/vstp.1*
91162002 524
525%files -n brlapi
526%defattr(644,root,root,755)
c0ab824f
SS
527%attr(755,root,root) %{_libdir}/libbrlapi.so.0.5
528%attr(755,root,root) %{_libdir}/libbrlapi.so.0.5.1
0bb357f1 529%dir %{_libdir}/brlapi-0.5.1
91162002 530
531%files -n brlapi-devel
532%defattr(644,root,root,755)
608626ec
SS
533%doc Documents/README.Gnopernicus
534%doc Documents/Manual-BrlAPI/English/BrlAPI*
1c33f0ca 535%attr(755,root,root) %{_libdir}/libbrlapi.so
91162002 536%{_includedir}/brltty
18f080b9 537%{_includedir}/brlapi*.h
664a738b 538%{_mandir}/man3/*
91162002 539
540%files -n brlapi-static
541%defattr(644,root,root,755)
542%{_libdir}/libbrlapi.a
608626ec 543
09255552 544%if %{with apidocs}
608626ec
SS
545%files -n brlapi-apidocs
546%defattr(644,root,root,755)
547%doc Documents/BrlAPIref/html/*
09255552
SS
548%endif
549
550%if %{with java}
551%files -n brlapi-java
552%defattr(644,root,root,755)
553%{_libdir}/java/libbrlapi_java.so
554%{_javadir}/brlapi.jar
555%endif
0bb357f1
SS
556
557%if %{with python}
558%files -n python-brlapi
559%defattr(644,root,root,755)
560%{py_sitedir}/Brlapi-*.egg-info
561%attr(755,root,root) %{py_sitedir}/brlapi.so
562%endif
563
564%if %{with tcl}
565%files -n brlapi-tcl
566%defattr(644,root,root,755)
567%attr(755,root,root) %{_libdir}/brlapi-0.5.1/libbrlapi_tcl.so
568%{_libdir}/brlapi-0.5.1/pkgIndex.tcl
569%endif
This page took 0.117 seconds and 4 git commands to generate.