Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
GHC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
alexbiehl-gc
GHC
Commits
6cedb2d0
Commit
6cedb2d0
authored
28 years ago
by
sof
Browse files
Options
Downloads
Patches
Plain Diff
[project @ 1997-01-21 10:45:35 by sof]
SOURCE pragma and extra opts
parent
63a2e793
Loading
Loading
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
ghc/utils/mkdependHS/mkdependHS.prl
+94
-20
94 additions, 20 deletions
ghc/utils/mkdependHS/mkdependHS.prl
with
94 additions
and
20 deletions
ghc/utils/mkdependHS/mkdependHS.prl
+
94
−
20
View file @
6cedb2d0
...
...
@@ -21,7 +21,6 @@ Options recognised wherever they occur (mkdependHS or GHC):
"import"ing a module from that library).
-fhaskell1.[2-9] Deal with the oddities associated with a
particular version of Haskell 1.
-ignore <mod>
mkdependHS-specific options (not between --'s):
...
...
@@ -34,8 +33,19 @@ mkdependHS-specific options (not between --'s):
suffix <suf><osuf>; thus, "-o .hc -s _a" will
make dependencies both for .hc files and for _a.hc
files. (Useful in conjunction with NoFib "ways".)
-x <file> Regard <file> as "stable"; i.e., eXclude it from having
--exclude-module=<file>
Regard <file> as "stable"; i.e., eXclude it from having
dependencies on it.
-x same as --exclude-module
--exclude-directory=<dirs>
Regard : separated list of directories as containing stable,
don't generate any dependencies on modules therein.
-Xdirs same as --exclude-directory
--include-module=<file>
Regard <file> as not "stable"; i.e., generate dependencies
on it (if any). This option is normally used in conjunction
with the --exclude-directory option.
EOUSAGE
$Status = 0; # just used for exit() status
...
...
@@ -103,12 +113,13 @@ $Unlit = ( $(INSTALLING) ) ? "$InstLibDirGhc/unlit"
$Begin_magic_str = "# DO NOT DELETE: Beginning of Haskell dependencies\n";
$End_magic_str = "# DO NOT DELETE: End of Haskell dependencies\n";
$Obj_suffix = '
.
o';
$Obj_suffix = 'o';
$ghc_version_info = int ( $(PROJECTVERSION) * 100 );
$Import_dirs = '.';
%Syslibs = ();
%LibIfaces = (); # known prelude/syslib ifaces; read from a file
%LibIfaces = (); # known prelude/syslib ifaces; read from a file
%Ignore_dirs = (); # directories to considered stable.
%IgnoreMe = ();
$Haskell_1 = 3; # assume Haskell 1.3. Changed by -fhaskell-1.?
...
...
@@ -161,9 +172,10 @@ foreach $sf (@Src_files) {
# builds up @Depend_lines
print STDERR "Here we go for source file: $sf\n" if $Verbose;
($bf = $sf) =~ s/\.l?hs$//;
push(@Depend_lines, "$bf.$Obj_suffix $bf.hi : $sf\n");
#push(@Depend_lines, "$bf.$Obj_suffix $bf.hi : $sf\n");
push(@Depend_lines, "$bf.$Obj_suffix : $sf\n");
foreach $suff (@File_suffix) {
push(@Depend_lines, "$bf.$suff
\
_$Obj_suffix : $sf\n");
push(@Depend_lines, "$bf.$
{
suff
}
_$Obj_suffix : $sf\n");
}
# if it's a literate file, .lhs, then we de-literatize it:
...
...
@@ -232,9 +244,19 @@ sub mangle_command_line_args {
$Makefile = &grab_arg_arg('-f',$1);
} elsif ( /^-o(.*)/ ) {
$Obj_suffix = &grab_arg_arg('-o',$1);
} elsif ( /^-x(.*)/ ) {
local($thing) = &grab_arg_arg($_,$1);
#
# --exclude-module=mod => it's stable, trust me!
} elsif ( /^-(x|-exclude-module=)(.*)/ ) {
local($thing) = &grab_arg_arg($1,$2);
$IgnoreMe{$thing} = 'y';
} elsif ( /^-(X|-exclude-directory=)(.*)/ ) {
foreach $d ( split(/:/,&grab_arg_arg($1, $2)) ) {
$Ignore_dirs{$d} = "$d";
}
} elsif ( /^--include-module=(.*)/ ) {
local($thing) = &grab_arg_arg($1,$2);
$IgnoreMe{$thing} = 'n';
} elsif ( /^-s(.*)/ ) {
local($suff) = &grab_arg_arg('-s',$1);
push(@File_suffix, $suff);
...
...
@@ -299,6 +321,10 @@ sub preprocess_import_dirs {
%ModuleIn = ();
foreach $d ( @Import_dirs ) {
# Check to see if it can be ignored
print STDERR "Ignore imports from $d\n" if $Verbose && $Ignore_dirs{$d};
next if $Ignore_dirs{$d};
opendir(DIR, $d) || die "$Pgm: can't open directory $d\n";
for ($_ = readdir(DIR); $_; $_ = readdir(DIR)) {
...
...
@@ -312,6 +338,23 @@ sub preprocess_import_dirs {
}
closedir(DIR); # No, don't check the error code
}
# Add all the modules found in the ignorable directories
# to the IgnoreMe array before we start scanning for imports.
foreach $d (keys %Ignore_dirs) {
opendir(DIR, $d) || die "$Pgm: can't open directory $d\n";
for ($_ = readdir(DIR); $_; $_ = readdir(DIR)) {
next unless /(.*)\.(hi|l?hs)$/;
#don't tag it twice or overwrite it with a diff. value
next if $IgnoreMe{$1};
print STDERR "Module $d/$1.$2 will be ignored\n" if $Verbose;
$IgnoreMe{$1} = 'y';
}
closedir(DIR); # No, don't check the error code
}
}
sub slurp_file_for_imports {
...
...
@@ -324,25 +367,37 @@ sub slurp_file_for_imports {
# we mangle #include's so they will also leave something
# behind to indicate the dependency on _them_
# Worth our while to relativise the path or
# assume it is there in the first place? -- SOF
#
print STDERR "/usr/bin/sed -e '/^# *include/{p;s/^# *include/!include/;};s/'\\''//g;s/\"//g' $file_to_read | $Cpp $Include_dirs -I$last_seen_dir @Defines |\n" if $Verbose;
open(SRCFILE, "/usr/bin/sed -e '/^# *include/{p;s/^# *include/!include/;};s/'\\''//g;s/\"//g' $file_to_read | $Cpp $Include_dirs -I$last_seen_dir @Defines |")
|| die "$Pgm: Can't open $file_to_read: $!\n";
while (<SRCFILE>) {
next unless (/^>?\s*(import)(\s+qualified)?\s+([A-Z][A-Za-z0-9_']*)/ || /^!(include)(\s+)"(\S+)"/);
#
# inport {-# SOURCE #-} Foo (bar) generates dependencies on the source file only,
# the compiler will deal with the absence of Foo.hi by consulting the
# source for Foo directly.
#
# >? import qualified ModuleName | !include "foo"
#
#
next unless (/^>?\s*(import)(\s+{-#\s*SOURCE\s*#-})?(\s+qualified)?\s+([A-Z][A-Za-z0-9_']*)/ || /^!(include)(\s+)"(\S+)"/);
$todo = $1;
$modname = $3;
$source = ( $2 ne '') ? 1 : 0;
$modname = $4;
if ($todo eq 'import') {
if ( $IgnoreMe{$modname} eq 'y' ) {
$follow_file = '__ignore__';
} elsif ( $ModuleIn{$modname} ) {
$follow_file = "$ModuleIn{$modname}/$modname.hi";
$follow_file = "$ModuleIn{$modname}/$modname.hi";
} else { # hard way
$follow_file
= &find_in_Import_dirs($orig_src_file, $modname, $last_seen_dir);
= &find_in_Import_dirs($orig_src_file, $modname, $last_seen_dir
);
}
} else {
if ( $IgnoreMe{$modname} eq 'y' ) {
...
...
@@ -364,17 +419,36 @@ sub slurp_file_for_imports {
if ( $int_file !~ /\.(l?hs|hi)$/ ) {
push(@Depend_lines, "$bf.$Obj_suffix : $int_file\n");
foreach $suff (@File_suffix) {
push(@Depend_lines, "$bf.$suff
\
_$Obj_suffix : $int_file\n");
push(@Depend_lines, "$bf.$
{
suff
}
_$Obj_suffix : $int_file\n");
}
} else {
$int_file =~ s/\.l?hs$//;
$int_file =~ s/\.hi$//;
push(@Depend_lines, "$bf.$Obj_suffix : $int_file.hi\n");
foreach $suff (@File_suffix) {
push(@Depend_lines, "$bf.$suff\_$Obj_suffix : $int_file.$suff\_hi\n");
}
local($source_dep);
if ( $source && -f "$int_file.hs" ) {
$source_dep = "$int_file.hs";
push(@Depend_lines, "$bf.$Obj_suffix : $source_dep\n");
} elsif ( $source && -f "$int_file.lhs" ) {
$source_dep = "$int_file.lhs";
push(@Depend_lines, "$bf.$Obj_suffix : $source_dep\n");
} else {
if ( $source ) {
print STDERR "Warning: could not find source file dependency $int_file.(hs|lhs)\n";
}
push(@Depend_lines, "$bf.$Obj_suffix : $int_file.hi\n");
}
if ( ! $source ) {
foreach $suff (@File_suffix) {
push(@Depend_lines, "$bf.${suff}_$Obj_suffix : $int_file.${suff}_hi\n");
}
} else {
foreach $suff (@File_suffix) {
push(@Depend_lines, "$bf.${suff}_$Obj_suffix : $source_dep\n");
}
}
}
}
}
...
...
@@ -387,7 +461,7 @@ sub slurp_file_for_imports {
%FileExists = ();
sub find_in_Import_dirs {
local($orig_src_file, $modname, $last_seen_dir) = @_;
local($orig_src_file, $modname, $last_seen_dir
, $source
) = @_;
local($import_dir);
local($do_magical_check) = 0;
local($name_to_check);
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment