Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Alex D
GHC
Commits
6ddc8fd8
Commit
6ddc8fd8
authored
Apr 15, 2010
by
Ian Lynagh
Browse files
Convert boot and boot-pkgs to perl
This stops us having to worry about sh/sed/... portability.
parent
113f9daf
Changes
3
Hide whitespace changes
Inline
Side-by-side
boot
View file @
6ddc8fd8
#! /bin/sh
set
-e
#!/usr/bin/perl -w
use
strict
;
use
Cwd
;
# Create libraries/*/{ghc.mk,GNUmakefile}
bash boot-pkgs
system
("
/usr/bin/perl
",
"
-w
",
"
boot-pkgs
")
==
0
or
die
"
Running boot-pkgs failed: $?
";
my
$dir
;
my
$curdir
;
$curdir
=
&cwd
();
# Check that we have all boot packages.
for
dir
in
`
grep
"^[^# ][^ ]* *[^ ][^ ]* *[^ ][^ ]*$"
packages |
sed
"s/ .*//"
`
do
# We would like to just check for an _darcs directory here, but in
# an lndir tree we avoid making _darcs directories, so it doesn't
# exist. We therefore require that every repo has a LICENSE file
# instead.
if
test
!
-f
$dir
/LICENSE
then
echo
"Error:
$dir
/LICENSE doesn't exist."
>
&2
echo
"Maybe you haven't done './darcs-all get'?"
>
&2
exit
1
fi
done
open
PACKAGES
,
"
< packages
";
while
(
<
PACKAGES
>
)
{
if
(
/^#/
)
{
# Comment; do nothing
}
elsif
(
/^([a-zA-Z0-9\/.-]+) *[^ ]+ *[^ ]+$/
)
{
$dir
=
$
1
;
# We would like to just check for an _darcs directory here, but in
# an lndir tree we avoid making _darcs directories, so it doesn't
# exist. We therefore require that every repo has a LICENSE file
# instead.
if
(
!
-
f
"
$dir
/LICENSE
")
{
print
STDERR
"
Error:
$dir
/LICENSE doesn't exist.
\n
";
die
"
Maybe you haven't done './darcs-all get'?
";
}
}
elsif
(
/^([a-zA-Z0-9\/.-]+) *[^ ]+ *[^ ]+ *[^ ]+$/
)
{
# These are lines which refer to optional repositories, so their
# absence isn't an error.
}
else
{
die
"
Bad line in packages file:
$_
";
}
}
close
PACKAGES
;
# autoreconf everything that needs it.
for
dir
in
.
libraries/
*
do
if
test
-f
$dir
/configure.ac
then
echo
"Booting
$dir
"
(
cd
$dir
&&
autoreconf
)
fi
done
for
each
$dir
("
.
",
glob
("
libraries/*
/
"))
{
if
(
-
f
"
$dir
/configure.ac
")
{
print
"
Booting
$dir
\n
";
chdir
$dir
;
system
"
autoreconf
";
chdir
$curdir
;
}
}
# Alas, darcs doesn't handle file permissions, so fix a few of them.
for
f
in
boot darcs-all push-all validate
do
if
test
-f
$f
then
chmod
+x
$f
fi
done
for
my
$file
("
boot
",
"
darcs-all
",
"
push-all
",
"
validate
")
{
chmod
0755
,
$file
if
-
f
$file
;
}
boot-pkgs
View file @
6ddc8fd8
#! /bin/sh
set
-e
#!/usr/bin/perl -w
libraries
=
use
strict
;
# We do the sed in 3 steps, as the -snapshot may or may not be there,
# and I can't see a way to optionally match it with POSIX BREs
tarred
=
`
ls
-1
libraries/tarballs |
sed
-e
's/\.tar\.gz$//'
-e
's/-snapshot$//'
-e
's/-[0-9.]*$//'
`
use
File::
Path
'
rmtree
';
use
File::
Basename
;
for
p
in
$tarred
do
libraries
=
"
$libraries
libraries/
$p
"
if
[
-d
"libraries/
$p
/_darcs"
]
then
echo
Ignoring libraries/
$p
as it looks like a darcs checkout
else
tarball
=
libraries/tarballs/
$p
-
*
.tar.gz
stamp
=
"libraries/stamp/
$p
"
if
[
!
-d
"libraries/
$p
"
]
||
[
!
-f
"
$stamp
"
]
||
[
"libraries/stamp/
$p
"
-ot
$tarball
]
then
rm
-rf
"libraries/
$p
"
mkdir
"libraries/
$p
"
(
cd
"libraries/
$p
"
cat
../../
$tarball
|
gzip
-d
|
tar
xf -
mv
*
/
*
.
)
touch
"
$stamp
"
fi
fi
done
my
@library_dirs
=
();
my
@tarballs
=
glob
("
libraries/tarballs/*
");
for
f
in
libraries/
*
;
do
pkgs
=
$f
/ghc-packages
if
test
-f
$pkgs
;
then
for
p
in
`
cat
$pkgs
`
;
do
libraries
=
"
$libraries
$f
/
$p
"
done
else
libraries
=
"
$libraries
$f
"
fi
done
my
$tarball
;
my
$package
;
my
$stamp
;
for
$tarball
(
@tarballs
)
{
$package
=
$tarball
;
$package
=~
s#^libraries/tarballs/##
;
$package
=~
s/-[0-9.]*(-snapshot)?\.tar\.gz$//
;
# Sanity check, so we don't rmtree the wrong thing below
if
((
$package
eq
"")
||
(
$package
=~
m#[/.\\]#
))
{
die
"
Bad package name:
$package
";
}
if
(
-
d
"
libraries/
$package
/_darcs
")
{
print
"
Ignoring libraries/
$package
as it looks like a darcs checkout
\n
"
}
else
{
$stamp
=
"
libraries/stamp/
$package
";
if
((
!
-
d
"
libraries/
$package
")
||
(
!
-
f
"
$stamp
")
||
((
-
M
"
libraries/stamp/
$package
")
>
(
-
M
$tarball
)))
{
print
"
Unpacking
$package
\n
";
if
(
-
d
"
libraries/
$package
")
{
&rmtree
("
libraries/
$package
")
or
die
"
Can't remove libraries/
$package
: $!
";
}
mkdir
"
libraries/
$package
";
system
("
sh
",
"
-c
",
"
cd 'libraries/
$package
' && { cat ../../
$tarball
| gzip -d | tar xf - ; } && mv */* .
")
==
0
or
die
"
Failed to unpack
$package
";
open
STAMP
,
"
>
$stamp
";
close
STAMP
;
}
}
}
for
$package
(
glob
"
libraries/*/
")
{
$package
=~
s/\/$//
;
my
$pkgs
=
"
$package
/ghc-packages
";
if
(
-
f
$pkgs
)
{
open
PKGS
,
"
<
$pkgs
";
while
(
<
PKGS
>
)
{
chomp
;
if
(
/.+/
)
{
push
@library_dirs
,
"
$package
/
$_
";
}
}
}
else
{
push
@library_dirs
,
$package
;
}
}
for
$package
(
@library_dirs
)
{
my
$dir
=
&basename
(
$package
);
my
@cabals
=
glob
("
$package
/*.cabal
");
if
(
$#cabals
>
0
)
{
die
"
Too many .cabal file in
$package
\n
";
}
if
(
$#cabals
eq
0
)
{
my
$cabal
=
$cabals
[
0
];
my
$pkg
;
my
$stage
;
my
$top
;
if
(
-
f
$cabal
)
{
$pkg
=
$cabal
;
$pkg
=~
s#.*/##
;
$pkg
=~
s/\.cabal$//
;
if
(
-
f
"
$package
/ghc-stage
")
{
open
STAGE
,
"
<
$package
/ghc-stage
";
$stage
=
int
(
<
STAGE
>
);
close
STAGE
;
}
else
{
$stage
=
1
;
}
$top
=
$package
;
$top
=~
s#[^/]+#..#g
;
print
"
Creating
$package
/ghc.mk
\n
";
open
GHCMK
,
"
>
$package
/ghc.mk
";
print
GHCMK
"
${package}
_PACKAGE =
${pkg}
\n
";
print
GHCMK
"
${package}
_dist-install_GROUP = libraries
\n
";
print
GHCMK
"
\$
(eval
\$
(call build-package,
${package}
,dist-install,
${stage}
))
\n
";
close
GHCMK
;
print
"
Creating
$package
/GNUmakefile
\n
";
open
GNUMAKEFILE
,
"
>
$package
/GNUmakefile
";
print
GNUMAKEFILE
"
dir =
${package}
\n
";
print
GNUMAKEFILE
"
TOP =
${top}
\n
";
print
GNUMAKEFILE
"
include
\$
(TOP)/mk/sub-makefile.mk
\n
";
close
GNUMAKEFILE
;
}
}
}
for
f
in
$libraries
;
do
dir
=
`
basename
$f
`
cabals
=
`
echo
$f
/
*
.cabal
`
if
test
-f
$cabals
;
then
echo
"Creating
$f
/ghc.mk"
rm
-f
$f
/ghc.mk
pkg
=
`
echo
"
$cabals
"
|
sed
-e
's#.*/##'
-e
's#\.cabal$##'
`
if
test
-f
$f
/ghc-stage
;
then
stage
=
`
cat
$f
/ghc-stage
`
else
stage
=
1
fi
top
=
`
echo
$f
|
sed
's#[^/][^/]*#..#g'
`
echo
"
${
f
}
_PACKAGE =
${
pkg
}
"
>>
$f
/ghc.mk
echo
"
${
f
}
_dist-install_GROUP = libraries"
>>
$f
/ghc.mk
echo
"
\$
(eval
\$
(call build-package,
${
f
}
,dist-install,
${
stage
}
))"
>>
$f
/ghc.mk
rm
-f
$f
/GNUmakefile
echo
"Creating
$f
/GNUmakefile"
echo
"dir =
${
f
}
"
>>
$f
/GNUmakefile
echo
"TOP =
${
top
}
"
>>
$f
/GNUmakefile
echo
"include
\$
(TOP)/mk/sub-makefile.mk"
>>
$f
/GNUmakefile
fi
done
validate
View file @
6ddc8fd8
...
...
@@ -66,7 +66,7 @@ if [ $no_clean -eq 0 ]; then
INSTDIR
=
`
cygpath
-m
"
$INSTDIR
"
`
fi
sh
boot
/usr/bin/perl
-w
boot
./configure
--prefix
=
"
$INSTDIR
"
$config_args
fi
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment