2 # ===========================================================================
5 # build.sh - extract, configure, build and install the X Window System
8 # build.sh [options] [prefix]
12 # The script ultimate goal is to build all of the X Window and some of its
13 # dependencies from source.
15 # X.Org Modular Tree Developer's Guide
17 # Please consult the guide at http://www.x.org/wiki/ModularDevelopersGuide
18 # It provides detailed instructions on the build tools to install, where to
19 # find the script and how to invoke it.
21 # The X Window System Source Code
23 # The source code is hosted by freedesktop.org and is composed of over 200
24 # modules under the git source code management system. X.Org releases are
25 # available at http://www.x.org/releases/ in the form of software packages.
29 # The script goes through its list of modules to build. If the source code is
30 # not on disk, it attempts to obtain it from git if the --clone option is
31 # specified. If not, it looks for a package archive file on disk. If it is
32 # still not found, the module is skipped.
34 # The script then runs the appropriate configure script, either autogen.sh
35 # for git modules or the autoconf generated configure script for package
39 # Over time, functionality have been added to help building a large
40 # number modules. Progress report, handling build breaks, supporting the
41 # GNU Build System features, final build report, and so on.
43 # Building from a Custom Modules List
45 # Starting from the list generated using the -L option, remove unwanted
46 # modules. You may also add your own module or add specific configure
47 # options for some modules to meet your configuration needs. Using the
48 # --modfile option, your list replaces the built-in list of the script.
50 # Resuming Build After a Break
52 # The script can resume building at the last point of failure. This saves a
53 # lot of build time as the modules already built are skipped. The --autoresume
54 # option can be used with --modfile such that only the modules you care about
55 # are built and revisited until successful completion.
57 # Specifying Custom Build Commands
59 # By default, the script invokes the make program with the target "all" and
60 # "install". Some options like -c, -D, or -d alter the targets the make
61 # program builds, but you can specify your own command instead. Using the
62 # --cmd option, provide a different make or git command.
64 # Specifying Configuration Options to Specific Modules
66 # In the modulesfile used by the --modfile option, add any configuration
67 # options you want to pass to the modules as it gets configures by autoconf.
68 # Write the configure options next to the module name in the file.
69 # It could be something like --enable-strict-compilation for example.
72 # -a Do NOT run auto config tools (autogen.sh, configure)
73 # -b Use .build.unknown build directory
74 # -c Run make clean in addition to "all install"
75 # -D Run make dist in addition to "all install"
76 # -d Run make distcheck in addition "all install"
77 # -g Compile and link with debug information
78 # -L Just list modules to build
79 # -h, --help Display this help and exit successfully
80 # -n Do not quit after error; just print error message
82 # Build just this module/component
83 # -p Update source code before building (git pull --rebase)
84 # -s sudo The command name providing superuser privilege
85 # --autoresume resumefile
86 # Append module being built to, and autoresume from, resumefile
87 # --check Run make check in addition "all install"
88 # --clone Clone non-existing repositories (uses \$GITROOT if set)
90 # Execute arbitrary git, gmake, or make command
92 # Pass options to autgen.sh/configure of all modules
93 # --modfile modulesfile
94 # Only process the module/components specified in modulesfile
95 # Any text after, and on the same line as, the module/component
96 # is assumed to be configuration options for the configuration
97 # of each module/component specifically
98 # --retry-v1 Remake 'all' on failure with Automake silent rules disabled
101 # An absolute filename where GNU "make" will install binaries, libraries and
102 # other installable files. The value is passed to Autoconf through the
107 # When using --autoresume, the script reads and skips modules tagged with
108 # "PASS" and resume building at the module tagged with "FAIL". The resumefile
109 # file is not intended to be user edited.
112 # When using --modfile, the script replaces its internal modules list with
113 # the list contained in the file. This allows you to build only the modules
114 # you care about and to add third party modules or modules you create.
115 # It is helpful to initialized the file using the -L option.#
118 # Environment variables specific to build.sh:
120 # PREFIX Install architecture-independent files in PREFIX [/usr/local]
121 # Each module/components is invoked with --prefix
122 # EPREFIX Install architecture-dependent files in EPREFIX [PREFIX]
123 # Each module/components is invoked with --exec-prefix
124 # BINDIR Install user executables [EPREFIX/bin]
125 # Each module/components is invoked with --bindir
126 # DATAROOTDIR Install read-only arch-independent data root [PREFIX/share]
127 # Each module/components is invoked with --datarootdir
128 # DATADIR Install read-only architecture-independent data [DATAROOTDIR]
129 # Each module/components is invoked with --datadir
130 # LIBDIR Install object code libraries [EPREFIX/lib]
131 # Each module/components is invoked with --libdir
133 # Modifiable single-machine data [PREFIX/var]
134 # Each module/components is invoked with --localstatedir
135 # QUIET Do not print messages saying which checks are being made
136 # Each module/components is invoked with --quite
137 # GITROOT Source code repository path [git://anongit.freedesktop.org/git]
138 # Optional when using --clone to update source code before building
139 # CONFFLAGS Configure options to pass to all Autoconf configure scripts
140 # Refer to 'configure --help' from any module/components
142 # Environment variables defined by the GNU Build System:
144 # ACLOCAL The aclocal cmd name [aclocal -I ${DESTDIR}/${DATADIR}/aclocal]
145 # DESTDIR Path to the staging area where installed objects are relocated
146 # MAKE The name of the make command [make]
147 # MAKEFLAGS Options to pass to all $(MAKE) invocations
148 # CC C compiler command
149 # CFLAGS C compiler flags
150 # LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
151 # nonstandard directory <lib dir>
152 # CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
153 # you have headers in a nonstandard directory <include dir>
156 # Environment variables defined by the shell:
157 # PATH List of directories that the shell searches for commands
158 # $DESTDIR/$BINDIR is prepended
160 # Environment variables defined by the dynamic linker:
162 # List directories that the linker searches for shared objects
163 # $DESTDIR/$LIBDIR is prepended
165 # Environment variables defined by the pkg-config system:
168 # List directories that pkg-config searches for libraries
169 # $DESTDIR/$DATADIR/pkgconfig and
170 # $DESTDIR/$LIBDIR/pkgconfig are prepended
173 # This script is intended to run on any platform supported by X.Org.
174 # The script must be able to run in a Bourne shell.
176 # ===========================================================================
180 Environment variables specific to build.sh:
181 PREFIX Install architecture-independent files in PREFIX [/usr/local]
182 Each module/components is invoked with --prefix
183 EPREFIX Install architecture-dependent files in EPREFIX [PREFIX]
184 Each module/components is invoked with --exec-prefix
185 BINDIR Install user executables [EPREFIX/bin]
186 Each module/components is invoked with --bindir
187 DATAROOTDIR Install read-only arch-independent data root [PREFIX/share]
188 Each module/components is invoked with --datarootdir
189 DATADIR Install read-only architecture-independent data [DATAROOTDIR]
190 Each module/components is invoked with --datadir
191 LIBDIR Install object code libraries [EPREFIX/lib]
192 Each module/components is invoked with --libdir
194 Modifiable single-machine data [PREFIX/var]
195 Each module/components is invoked with --localstatedir
196 QUIET Do not print messages saying which checks are being made
197 Each module/components is invoked with --quite
198 GITROOT Source code repository path [git://anongit.freedesktop.org/git]
199 Optional when using --clone to update source code before building
200 CONFFLAGS Configure options to pass to all Autoconf configure scripts
201 Refer to 'configure --help' from any module/components
203 Environment variables defined by the GNU Build System:
204 ACLOCAL The aclocal cmd name [aclocal -I \${DESTDIR}/\${DATADIR}/aclocal]
205 DESTDIR Path to the staging area where installed objects are relocated
206 MAKE The name of the make command [make]
207 MAKEFLAGS Options to pass to all \$(MAKE) invocations
208 CC C compiler command
209 CFLAGS C compiler flags
210 LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
211 nonstandard directory <lib dir>
212 CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
213 you have headers in a nonstandard directory <include dir>
216 Environment variables defined by the shell:
217 PATH List of directories that the shell searches for commands
218 \$DESTDIR/\$BINDIR is prepended
220 Environment variables defined by the dynamic linker:
222 List directories that the linker searches for shared objects
223 \$DESTDIR/\$LIBDIR is prepended
225 Environment variables defined by the pkg-config system:
227 List directories that pkg-config searches for libraries
228 \$DESTDIR/\$DATADIR/pkgconfig and
229 \$DESTDIR/\$LIBDIR/pkgconfig are prepended
235 # Remember if the user had supplied a value through env var or cmd line
236 # A value from cmd line takes precedence of the shell environment
237 PREFIX_USER
=${PREFIX:+yes}
238 EPREFIX_USER
=${EPREFIX:+yes}
239 BINDIR_USER
=${BINDIR:+yes}
240 DATAROOTDIR_USER
=${DATAROOTDIR:+yes}
241 DATADIR_USER
=${DATADIR:+yes}
242 LIBDIR_USER
=${LIBDIR:+yes}
243 LOCALSTATEDIR_USER
=${LOCALSTATEDIR:+yes}
245 # Assign a default value if no value was supplied by the user
246 PREFIX
=${PREFIX:-/usr/local}
247 EPREFIX
=${EPREFIX:-$PREFIX}
248 BINDIR
=${BINDIR:-$EPREFIX/bin}
249 DATAROOTDIR
=${DATAROOTDIR:-$PREFIX/share}
250 DATADIR
=${DATADIR:-$DATAROOTDIR}
251 LIBDIR
=${LIBDIR:-$EPREFIX/lib}
252 LOCALSTATEDIR
=${LOCALSTATEDIR:-$PREFIX/var}
254 # Support previous usage of LIBDIR which was a subdir relative to PREFIX
255 # We use EPREFIX as this is what PREFIX really meant at the time
256 if [ X
"$LIBDIR" != X
]; then
257 if [ X
"`expr $LIBDIR : "\
(.\
)"`" != X
/ ]; then
259 echo "Warning: this usage of \$LIBDIR is deprecated. Use a full path name."
260 echo "The supplied value \"$LIBDIR\" has been replaced with $EPREFIX/$LIBDIR."
262 LIBDIR
=$EPREFIX/$LIBDIR
266 # All directories variables must be full path names
267 check_full_path
$PREFIX PREFIX
268 check_full_path
$EPREFIX EPREFIX
269 check_full_path
$BINDIR BINDIR
270 check_full_path
$DATAROOTDIR DATAROOTDIR
271 check_full_path
$DATADIR DATADIR
272 check_full_path
$LIBDIR LIBDIR
273 check_full_path
$LOCALSTATEDIR LOCALSTATEDIR
275 # This will catch the case where user forgets to set PREFIX
276 # and does not have write permission in the /usr/local default location
277 check_writable_dir
${DESTDIR}${PREFIX} PREFIX
279 # Must create local aclocal dir or aclocal fails
280 ACLOCAL_LOCALDIR
="${DESTDIR}${DATADIR}/aclocal"
281 $SUDO mkdir
-p ${ACLOCAL_LOCALDIR}
283 # The following is required to make aclocal find our .m4 macros
284 ACLOCAL
=${ACLOCAL:="aclocal"}
285 ACLOCAL
="${ACLOCAL} -I ${ACLOCAL_LOCALDIR}"
288 # The following is required to make pkg-config find our .pc metadata files
289 PKG_CONFIG_PATH
=${DESTDIR}${DATADIR}/pkgconfig:${DESTDIR}${LIBDIR}/pkgconfig${PKG_CONFIG_PATH+:$PKG_CONFIG_PATH}
290 export PKG_CONFIG_PATH
292 # Set the library path so that locally built libs will be found by apps
293 LD_LIBRARY_PATH
=${DESTDIR}${LIBDIR}${LD_LIBRARY_PATH+:$LD_LIBRARY_PATH}
294 export LD_LIBRARY_PATH
296 # Set the path so that locally built apps will be found and used
297 PATH
=${DESTDIR}${BINDIR}${PATH+:$PATH}
300 # Choose which make program to use
303 # Create the log file directory
304 $SUDO mkdir
-p ${DESTDIR}${LOCALSTATEDIR}/log
307 # explain where a failure occurred
308 # if you find this message in the build output it can help tell you where the failure occurred
310 # $1 - which command failed
319 echo "build.sh: \"$cmd\" failed on $module${component:+/}$component"
320 failed_components
="$failed_components $module${component:+/}$component"
323 # print a pretty title to separate the processing of each module
327 # $3 - configuration options
335 if [ X
"$module" = X
]; then
340 echo "======================================================================"
341 echo "== Processing: \"$module${component:+/}$component\""
342 echo "== configuration options: $CONFFLAGS $confopts"
345 # Search for tarballs in either cwd or under a module directory
346 # The tarball is always extracted in either one of these locations:
347 # - modules with components: under the module subdir (e.g lib/libX11-1.4.0)
348 # - modules without components: under cwd (e.g xserver-1.14.0)
349 # The tarballs are expected to be under one of the locations described above
350 # The location of the tarball does not dictate where it is extracted
355 # 0 - good (either no tarballs or successful extract)
361 # The package stem is the part of the tar file name that identifies
362 # the git module archived source. Ex: xclock, pixman, libX11
363 # For modules without components, the module name is used by default.
364 pkg_stem
=${component:-$module}
366 # Handle special cases where the module or component directory
367 # does not match the package name and/or the package root dir
371 "cursors") pkg_stem
="xcursor-themes" ;;
372 "bitmaps") pkg_stem
="xbitmaps" ;;
376 if [ X
"$component" != X
"encodings" ]; then
377 pkg_stem
="font-$component"
382 "libXRes") pkg_stem
="libXres" ;;
383 "libxtrans") pkg_stem
="xtrans" ;;
388 "x11proto") pkg_stem
="xproto" ;;
393 "cf") pkg_stem
="xorg-cf-files" ;;
394 "macros") pkg_stem
="util-macros" ;;
403 pkg_stem
="libpthread-stubs"
409 pkg_stem
="xcb-$component"
424 pkg_stem
="xorg-server"
428 # Search for tarballs in both the module and the src top directory
429 for ii
in $module .
; do
430 for jj
in bz2 gz xz
; do
432 # Select from the list the last tarball with a specific pkg_stem
433 pkg_tarfile
=`ls -1rt $ii/$pkg_stem-[0-9]*.tar.$jj 2> /dev/null | tail -n 1`
435 # Extract the tarball under the module directory
436 # For modules without components, extract in top level dir
437 if [ X
"$pkg_tarfile" != X
]; then
439 # Get the package version and archived toplevel directory
440 pkg_version
=`echo $pkg_tarfile | sed 's,.*'$pkg_stem'-\(.*\)\.tar\.'$jj',\1,'`
441 pkg_root_dir
="$pkg_stem-$pkg_version"
442 pkg_root_dir
=`echo $pkg_root_dir | sed 's,MesaLib,Mesa,'`
444 # Find where to extract the tar file
446 if [ X
"$component" = X
]; then
447 # For modules with no components (i.e xserver)
451 # For modules with components (i.e xcb/proto or lib/libXi)
452 pkg_extract_dir
=$module
453 SRCDIR
=$module/$pkg_root_dir
456 if [ ! -d $SRCDIR ]; then
469 tar $pkg_tar_opts $pkg_tarfile -C $pkg_extract_dir
470 if [ $?
-ne 0 ]; then
472 echo "Unable to extract $pkg_tarfile for $module module"
473 failed
tar $module $component
485 # perform a clone of a git repository
486 # this function provides the mapping between module/component names
487 # and their location in the fd.o repository
490 # $2 - component (optional)
498 if [ X
"$module" = X
]; then
499 echo "clone() required first argument is missing"
524 DIR
="$module${component:+/}$component"
525 GITROOT
=${GITROOT:="git://anongit.freedesktop.org/git"}
527 if [ ! -d "$DIR" ]; then
528 git clone
"$GITROOT/$BASEDIR$DIR" "$DIR"
529 if [ $?
-ne 0 ]; then
530 echo "Failed to clone $module${component:+/}$component. Ignoring."
531 clonefailed_components
="$clonefailed_components $module${component:+/}$component"
536 if [ $?
-ne 0 ]; then
537 echo "Failed to cd to $module${component:+/}$component. Ignoring."
538 clonefailed_components
="$clonefailed_components $module${component:+/}$component"
543 if [ $?
-ne 0 ]; then
544 echo "Failed to initialize $module${component:+/}$component submodule. Ignoring."
545 clonefailed_components
="$clonefailed_components $module${component:+/}$component"
549 if [ $?
-ne 0 ]; then
550 echo "Failed to update $module${component:+/}$component submodule. Ignoring."
551 clonefailed_components
="$clonefailed_components $module${component:+/}$component"
556 echo "git cannot clone into an existing directory $module${component:+/}$component"
563 # perform processing of each module/component
567 # $3 - configure options
578 if [ X
"$module" = X
]; then
579 echo "process() required first argument is missing"
583 module_title
$module "$component" "$confopts"
587 if [ -f $module${component:+/}$component/autogen.sh
]; then
588 SRCDIR
="$module${component:+/}$component"
590 elif [ X
"$CLONE" != X
]; then
591 clone
$module $component
592 if [ $?
-eq 0 ]; then
593 SRCDIR
="$module${component:+/}$component"
598 checkfortars
$module $component
599 if [ $?
-eq 0 ]; then
600 if [ X
"$SRCDIR" = X
]; then
601 echo "$module${component:+/}$component does not exist, skipping."
602 nonexistent_components
="$nonexistent_components $module${component:+/}$component"
613 if [ $?
-ne 0 ]; then
614 failed cd1
$module $component
618 if [ X
"$GITCMD" != X
]; then
623 if [ $rtn -ne 0 ]; then
624 failed
"$GITCMD" $module $component
630 if [ X
"$PULL" != X
]; then
632 if [ $?
-ne 0 ]; then
633 failed
"git pull" $module $component
637 # The parent module knows which commit the submodule should be at
639 if [ $?
-ne 0 ]; then
640 failed
"git submodule update" $module $component
645 # Build outside source directory
646 if [ X
"$DIR_ARCH" != X
] ; then
648 if [ $?
-ne 0 ]; then
649 failed mkdir
$module $component
654 if [ $?
-ne 0 ]; then
655 failed cd2
$module $component
661 # Use "sh autogen.sh" since some scripts are not executable in CVS
662 if [ $needs_config -eq 1 ] ||
[ X
"$NOAUTOGEN" = X
]; then
663 sh
${DIR_CONFIG}/${CONFCMD} \
664 ${PREFIX_USER:+--prefix="$PREFIX"} \
665 ${EPREFIX_USER:+--exec-prefix="$EPREFIX"} \
666 ${BINDIR_USER:+--bindir="$BINDIR"} \
667 ${DATAROOTDIR_USER:+--datarootdir="$DATAROOTDIR"} \
668 ${DATADIR_USER:+--datadir="$DATADIR"} \
669 ${LIBDIR_USER:+--libdir="$LIBDIR"} \
670 ${LOCALSTATEDIR_USER:+--localstatedir="$LOCALSTATEDIR"} \
672 ${CONFFLAGS} $confopts \
675 ${CPPFLAGS:+CPPFLAGS="$CPPFLAGS"} \
676 ${CFLAGS:+CFLAGS="$CFLAGS"} \
677 ${LDFLAGS:+LDFLAGS="$LDFLAGS"}
678 if [ $?
-ne 0 ]; then
679 failed
${CONFCMD} $module $component
685 # A custom 'make' target list was supplied through --cmd option
686 if [ X
"$MAKECMD" != X
]; then
687 ${MAKE} $MAKEFLAGS $MAKECMD
691 if [ $rtn -ne 0 ]; then
692 failed
"$MAKE $MAKEFLAGS $MAKECMD" $module $component
699 if [ $?
-ne 0 ]; then
700 # Rerun with Automake silent rules disabled to see failing gcc statement
701 if [ X
"$RETRY_VERBOSE" != X
]; then
703 echo "build.sh: Rebuilding $component with Automake silent rules disabled"
704 ${MAKE} $MAKEFLAGS V
=1
706 failed
"$MAKE $MAKEFLAGS" $module $component
711 if [ X
"$CHECK" != X
]; then
712 ${MAKE} $MAKEFLAGS check
713 if [ $?
-ne 0 ]; then
714 failed
"$MAKE $MAKEFLAGS check" $module $component
720 if [ X
"$CLEAN" != X
]; then
721 ${MAKE} $MAKEFLAGS clean
722 if [ $?
-ne 0 ]; then
723 failed
"$MAKE $MAKEFLAGS clean" $module $component
729 if [ X
"$DIST" != X
]; then
730 ${MAKE} $MAKEFLAGS dist
731 if [ $?
-ne 0 ]; then
732 failed
"$MAKE $MAKEFLAGS dist" $module $component
738 if [ X
"$DISTCHECK" != X
]; then
739 ${MAKE} $MAKEFLAGS distcheck
740 if [ $?
-ne 0 ]; then
741 failed
"$MAKE $MAKEFLAGS distcheck" $module $component
747 $SUDO env LD_LIBRARY_PATH
=$LD_LIBRARY_PATH ${MAKE} $MAKEFLAGS install
748 if [ $?
-ne 0 ]; then
749 failed
"$SUDO env LD_LIBRARY_PATH=$LD_LIBRARY_PATH $MAKE $MAKEFLAGS install" $module $component
759 # process each module/component and handle:
760 # LISTONLY, RESUME, NOQUIT, and BUILD_ONE
764 # $3 - configure options
772 if [ X
"$LISTONLY" != X
]; then
773 echo "$module${component:+/}$component"
777 if [ X
"$RESUME" != X
]; then
778 if [ X
"$RESUME" = X
"$module${component:+/}$component" ]; then
780 # Resume build at this module
782 echo "Skipping $module${component:+/}$component..."
787 process
$module "$component" "$confopts"
789 if [ X
"$BUILT_MODULES_FILE" != X
]; then
790 if [ $process_rtn -ne 0 ]; then
791 echo "FAIL: $module${component:+/}$component" >> $BUILT_MODULES_FILE
793 echo "PASS: $module${component:+/}$component" >> $BUILT_MODULES_FILE
797 if [ $process_rtn -ne 0 ]; then
798 echo "build.sh: error processing: \"$module${component:+/}$component\""
799 if [ X
"$NOQUIT" = X
]; then
805 if [ X
"$BUILD_ONE" != X
]; then
806 echo "Single-component build complete"
812 # just process the sub-projects supplied in the given file ($MODFILE)
813 # in the order in which they are found in the list
814 # (prerequisites and ordering are the responsibility of the user)
816 # $MODFILE - readable file containing list of modules to process
817 # and their optional configuration options
823 process_module_file
() {
825 if [ X
"$MODFILE" = X
]; then
826 echo "internal process_module_file() error, \$MODFILE is empty"
829 if [ ! -r "$MODFILE" ]; then
830 echo "module file '$MODFILE' is not readable or does not exist"
834 # read from input file, skipping blank and comment lines
837 if [ X
"$line" = X
]; then
842 echo "$line" |
grep "^#" > /dev
/null
843 if [ $?
-eq 0 ]; then
847 # parse each line to extract module, component and options name
848 field1
=`echo $line | cut -d' ' -f1`
849 module
=`echo $field1 | cut -d'/' -f1`
850 component
=`echo $field1 | cut -d'/' -s -f2`
851 confopts
=`echo $line | cut -d' ' -s -f2-`
853 build
$module "$component" "$confopts"
861 basename="`expr "//$0" : '.*/\([^/]*\)'`"
862 echo "Usage: $basename [options] [prefix]"
864 echo " -a Do NOT run auto config tools (autogen.sh, configure)"
865 echo " -b Use .build.unknown build directory"
866 echo " -c Run make clean in addition to \"all install\""
867 echo " -D Run make dist in addition to \"all install\""
868 echo " -d Run make distcheck in addition \"all install\""
869 echo " -g Compile and link with debug information"
870 echo " -h, --help Display this help and exit successfully"
871 echo " -n Do not quit after error; just print error message"
872 echo " -o module/component"
873 echo " Build just this module/component"
874 echo " -p Update source code before building (git pull --rebase)"
875 echo " -s sudo The command name providing superuser privilege"
876 echo " --autoresume resumefile"
877 echo " Append module being built to, and autoresume from, <file>"
878 echo " --check Run make check in addition \"all install\""
879 echo " --clone Clone non-existing repositories (uses \$GITROOT if set)"
880 echo " --cmd command"
881 echo " Execute arbitrary git, gmake, or make command"
882 echo " --confflags options"
883 echo " Pass options to autgen.sh/configure of all modules"
884 echo " --modfile modulefile"
885 echo " Only process the module/components specified in modulefile"
886 echo " Any text after, and on the same line as, the module/component"
887 echo " is assumed to be configuration options for the configuration"
888 echo " of each module/component specifically"
889 echo " --retry-v1 Remake 'all' on failure with Automake silent rules disabled"
891 echo "Usage: $basename -L"
892 echo " -L Just list modules to build"
897 # Ensure the named variable value contains a full path name
899 # $1 - the variable value (the path to examine)
900 # $2 - the name of the variable
902 # returns nothing or exit on error with message
906 if [ X
"`expr $path : "\
(.\
)"`" != X
/ ]; then
907 echo "The path \"$path\" supplied by \"$varname\" must be a full path name"
914 # Ensure the named variable value contains a writable directory
916 # $1 - the variable value (the path to examine)
917 # $2 - the name of the variable
919 # returns nothing or exit on error with message
920 check_writable_dir
() {
923 if [ X
"$SUDO" = X
]; then
924 if [ ! -d "$path" ] ||
[ ! -w "$path" ]; then
925 echo "The path \"$path\" supplied by \"$varname\" must be a writable directory"
933 # perform sanity checks on cmdline args which require arguments
935 # $1 - the option being examined
936 # $2 - the argument to the option
938 # if it returns, everything is good
939 # otherwise it exit's
944 if [ X
"$option" = X
]; then
945 echo "internal required_arg() error, missing first argument"
949 # check for an argument
950 if [ X
"$arg" = X
]; then
951 echo "the '$option' option is missing its required argument"
957 # does the argument look like an option?
958 echo $arg |
grep "^-" > /dev
/null
959 if [ $?
-eq 0 ]; then
960 echo "the argument '$arg' of option '$option' looks like an option itself"
967 #==============================================================================
975 #==============================================================================
976 build_all_modules
() {
980 build doc xorg-sgml-doctools
983 Darwin
) build proto applewmproto
;;
984 CYGWIN
*) build proto windowswmproto
;;
986 build proto bigreqsproto
987 build proto compositeproto
988 build proto damageproto
990 build proto dri2proto
991 build proto dri3proto
992 build proto fixesproto
993 build proto fontsproto
995 build proto inputproto
997 build proto presentproto
998 build proto randrproto
999 build proto recordproto
1000 build proto renderproto
1001 build proto resourceproto
1002 build proto scrnsaverproto
1003 build proto videoproto
1004 build proto x11proto
1005 build proto xcmiscproto
1006 build proto xextproto
1007 build proto xf86bigfontproto
1008 build proto xf86dgaproto
1009 build proto xf86driproto
1010 build proto xf86vidmodeproto
1011 build proto xineramaproto
1013 # Required by mesa and depends on xproto
1014 build util makedepend
1018 build xcb pthread-stubs
1021 build xcb util-image
1022 build xcb util-keysyms
1023 build xcb util-renderutil
1028 Darwin
) build lib libAppleWM
;;
1029 CYGWIN
*) build lib libWindowsWM
;;
1032 build lib libfontenc
1042 build lib libXcomposite
1043 build lib libXrender
1044 build lib libXdamage
1045 build lib libXcursor
1049 build lib libXinerama
1050 build lib libxkbfile
1053 build lib libXScrnSaver
1056 build lib libxshmfence
1062 build lib libXxf86dga
1063 build lib libXxf86vm
1064 build lib libpciaccess
1071 build app beforelight
1074 build app fonttosfnt
1081 build app mkcomposecache
1083 build app mkfontscale
1086 build app rendercheck
1097 build app xbacklight
1100 build app xclipboard
1104 build app xcursorgen
1131 build app xlsclients
1157 Linux
) build libevdev
"";;
1161 build driver xf86-input-evdev
1162 build driver xf86-input-joystick
1164 FreeBSD | NetBSD | OpenBSD | Dragonfly | GNU
/kFreeBSD
)
1165 build driver xf86-input-joystick
1169 i
*86 | amd64 | x86_64 | i86pc
)
1170 build driver xf86-input-vmmouse
1178 build driver xf86-input-keyboard
1179 build driver xf86-input-mouse
1180 build driver xf86-input-synaptics
1181 build driver xf86-input-void
1186 build driver xf86-video-sunffb
1191 build driver xf86-video-wsfb
1192 build driver xf86-video-sunffb
1195 build driver xf86-video-sisusb
1196 build driver xf86-video-sunffb
1197 build driver xf86-video-v4l
1198 build driver xf86-video-xgixp
1201 # AMD Geode CPU. Driver contains 32 bit assembler code
1202 build driver xf86-video-geode
1209 build driver xf86-video-suncg14
1210 build driver xf86-video-suncg3
1211 build driver xf86-video-suncg6
1212 build driver xf86-video-sunleo
1213 build driver xf86-video-suntcx
1215 i
*86 | amd64 | x86_64 | i86pc
)
1216 build driver xf86-video-i740
1217 build driver xf86-video-intel
1220 build driver xf86-video-apm
1221 build driver xf86-video-ark
1222 build driver xf86-video-ast
1223 build driver xf86-video-ati
1224 build driver xf86-video-chips
1225 build driver xf86-video-cirrus
1226 build driver xf86-video-dummy
1227 build driver xf86-video-fbdev
1228 build driver xf86-video-glint
1229 build driver xf86-video-i128
1230 build driver xf86-video-mach64
1231 build driver xf86-video-mga
1232 build driver xf86-video-modesetting
1233 build driver xf86-video-neomagic
1234 build driver xf86-video-nested
1235 build driver xf86-video-nv
1236 build driver xf86-video-rendition
1237 build driver xf86-video-r128
1238 build driver xf86-video-s3
1239 build driver xf86-video-s3virge
1240 build driver xf86-video-savage
1241 build driver xf86-video-siliconmotion
1242 build driver xf86-video-sis
1243 build driver xf86-video-tdfx
1244 build driver xf86-video-tga
1245 build driver xf86-video-trident
1246 build driver xf86-video-tseng
1247 build driver xf86-video-vesa
1248 build driver xf86-video-vmware
1249 build driver xf86-video-voodoo
1253 build font encodings
1254 build font adobe-100dpi
1255 build font adobe-75dpi
1256 build font adobe-utopia-100dpi
1257 build font adobe-utopia-75dpi
1258 build font adobe-utopia-type1
1259 build font arabic-misc
1260 build font bh-100dpi
1262 build font bh-lucidatypewriter-100dpi
1263 build font bh-lucidatypewriter-75dpi
1266 build font bitstream-100dpi
1267 build font bitstream-75dpi
1268 build font bitstream-type1
1269 build font cronyx-cyrillic
1270 build font cursor-misc
1271 build font daewoo-misc
1273 build font ibm-type1
1274 build font isas-misc
1276 build font micro-misc
1277 build font misc-cyrillic
1278 build font misc-ethiopic
1279 build font misc-meltho
1280 build font misc-misc
1281 build font mutt-misc
1282 build font schumacher-misc
1283 build font screen-cyrillic
1284 build font sony-misc
1286 build font winitzki-cyrillic
1287 build font xfree86-type1
1291 build util gccmakedep
1293 build xkeyboard-config
""
1298 #------------------------------------------------------------------------------
1300 #------------------------------------------------------------------------------
1302 # Initialize variables controlling end of run reports
1303 failed_components
=""
1304 nonexistent_components
=""
1305 clonefailed_components
=""
1307 # Set variables supporting multiple binaries for a single source tree
1308 HAVE_ARCH
="`uname -i`"
1312 # Set variables for conditionally building some components
1318 # Process command line args
1326 DIR_ARCH
=".build.$HAVE_ARCH"
1339 CFLAGS
="${CFLAGS} -g3 -O0"
1352 if [ -n "$BUILT_MODULES_FILE" ]; then
1353 echo "The '-o' and '--autoresume' options are mutually exclusive."
1359 RESUME
=`echo $1 | sed "s,/$,,"`
1371 if [ -n "$BUILD_ONE" ]; then
1372 echo "The '-o' and '--autoresume' options are mutually exclusive."
1378 BUILT_MODULES_FILE
=$1
1389 cmd1
=`echo $1 | cut -d' ' -f1`
1390 cmd2
=`echo $1 | cut -d' ' -f2`
1392 # verify the command exists
1393 which $cmd1 > /dev
/null
2>&1
1394 if [ $?
-ne 0 ]; then
1395 echo "The specified command '$cmd1' does not appear to exist"
1409 echo "The script can only process 'make', 'gmake', or 'git' commands"
1410 echo "It can't process '$cmd1' commands"
1424 if [ ! -r "$1" ]; then
1425 echo "can't find/read file '$1'"
1434 if [ X
"$too_many" = Xyes
]; then
1435 echo "unrecognized and/or too many command-line arguments"
1436 echo " PREFIX: $PREFIX"
1437 echo " Extra arguments: $1"
1443 # check that 'prefix' doesn't look like an option
1444 echo $1 |
grep "^-" > /dev
/null
1445 if [ $?
-eq 0 ]; then
1446 echo "'prefix' appears to be an option"
1460 # All user input has been obtained, set-up the user shell variables
1461 if [ X
"$LISTONLY" = X
]; then
1463 echo "Building to run $HOST_OS / $HOST_CPU ($HOST)"
1467 # if there is a BUILT_MODULES_FILE
1468 # then start off by checking for and trying to build any modules which failed
1469 # and aren't the last line
1470 if [ X
"$BUILT_MODULES_FILE" != X
-a -r "$BUILT_MODULES_FILE" ]; then
1471 built_lines
=`cat $BUILT_MODULES_FILE | wc -l | sed 's:^ *::'`
1472 built_lines_m1
=`expr $built_lines - 1`
1473 orig_BUILT_MODULES_FILE
=$BUILT_MODULES_FILE
1474 unset BUILT_MODULES_FILE
1477 built_status
=`echo $line | cut -c-6`
1478 if [ X
"$built_status" = X
"FAIL: " ]; then
1479 line
=`echo $line | cut -c7-`
1480 field1
=`echo $line | cut -d' ' -f1`
1481 module
=`echo $field1 | cut -d'/' -f1`
1482 component
=`echo $field1 | cut -d'/' -s -f2`
1483 confopts
=`echo $line | cut -d' ' -s -f2-`
1487 # quick check for the module in $MODFILE (if present)
1488 if [ X
"$MODFILE" = X
]; then
1489 build
$module "$component" "$confopts"
1490 if [ $?
-eq 0 ]; then
1494 cat $MODFILE |
grep "$module${component:+/}$component" > /dev
/null
1495 if [ $?
-eq 0 ]; then
1496 build
$module "$component" "$confopts"
1497 if [ $?
-eq 0 ]; then
1503 if [ X
"$build_ret" = X
"PASS" ]; then
1505 if [ $?
-ne 0 ]; then
1506 echo "can't create tmp file, $orig_BUILT_MODULES_FILE not modified"
1508 head -n `expr $curline - 1` $orig_BUILT_MODULES_FILE > $built_temp
1509 echo "PASS: $module${component:+/}$component" >> $built_temp
1510 tail -n `expr $built_lines - $curline` $orig_BUILT_MODULES_FILE >> $built_temp
1511 mv $built_temp $orig_BUILT_MODULES_FILE
1515 if [ $curline -eq $built_lines_m1 ]; then
1518 curline
=`expr $curline + 1`
1519 done <"$orig_BUILT_MODULES_FILE"
1521 BUILT_MODULES_FILE
=$orig_BUILT_MODULES_FILE
1522 RESUME
=`tail -n 1 $BUILT_MODULES_FILE | cut -c7-`
1524 # remove last line of $BUILT_MODULES_FILE
1525 # to avoid a duplicate entry
1527 if [ $?
-ne 0 ]; then
1528 echo "can't create tmp file, last built item will be duplicated"
1530 head -n $built_lines_m1 $BUILT_MODULES_FILE > $built_temp
1531 mv $built_temp $BUILT_MODULES_FILE
1535 if [ X
"$MODFILE" = X
]; then
1541 if [ X
"$LISTONLY" != X
]; then
1545 # Print the end date/time to compare with the start date/time
1548 # Report about components that failed for one reason or another
1549 if [ X
"$nonexistent_components" != X
]; then
1551 echo "***** Skipped components (not available) *****"
1552 echo "Could neither find a git repository (at the <module/component> paths)"
1553 echo "or a tarball (at the <module/> paths or ./) for:"
1554 echo " <module/component>"
1555 for mod
in $nonexistent_components; do
1558 echo "You may want to provide the --clone option to build.sh"
1559 echo "to automatically git-clone the missing components"
1563 if [ X
"$failed_components" != X
]; then
1565 echo "***** Failed components *****"
1566 for mod
in $failed_components; do
1572 if [ X
"$CLONE" != X
] && [ X
"$clonefailed_components" != X
]; then
1574 echo "***** Components failed to clone *****"
1575 for mod
in $clonefailed_components; do