r14606: Fix paths in developer mode. This allows 'make quicktest' to work when
[ira/wip.git] / source / build / smb_build / makefile.pm
index e822329a2e2f02f11cfedea916bd7cbbff8741e8..ec306c2bb7215d6456480a610dba2ede4b2a5d85 100644 (file)
@@ -41,6 +41,10 @@ sub new($$$)
        $self->output("################################################\n");
        $self->output("\n");
 
+       if (!$self->{automatic_deps}) {
+               $self->output("ALL_PREDEP = proto\n");
+       }
+
        $self->output("default: all\n\n");
 
        $self->_prepare_path_vars();
@@ -64,7 +68,7 @@ sub _prepare_path_vars($)
 prefix = $self->{config}->{prefix}
 exec_prefix = $self->{config}->{exec_prefix}
 selftest_prefix = $self->{config}->{selftest_prefix}
-VPATH = $self->{config}->{srcdir}
+VPATH = $self->{config}->{srcdir}:heimdal/lib/asn1:heimdal/lib/krb5:heimdal/lib/gssapi:heimdal/lib/hdb:heimdal/lib/roken
 srcdir = $self->{config}->{srcdir}
 builddir = $self->{config}->{builddir}
 
@@ -187,18 +191,6 @@ sub _prepare_list($$$)
        $self->output("$ctx->{TYPE}\_$ctx->{NAME}_$var =$tmplist\n");
 }
 
-sub DependencyInfo($$)
-{
-       my ($self,$ctx) = @_;
-
-       $self->output("bin/deps/$ctx->{TYPE}_$ctx->{NAME}: \$($ctx->{TYPE}_$ctx->{NAME}_OBJ_LIST:.o=.c)");
-       $self->output("\n");
-       $self->output("\t\@echo \"Generating dependency info for $ctx->{NAME}\"\n");
-       $self->output("\t\@./script/cdeps.pl \$^ > \$@\n");
-       $self->output("\n");
-       $self->output("-include bin/deps/$ctx->{TYPE}_$ctx->{NAME}\n\n");
-}
-
 sub SharedLibrary($$)
 {
        my ($self,$ctx) = @_;
@@ -214,20 +206,22 @@ sub SharedLibrary($$)
 
        if ($ctx->{TYPE} eq "LIBRARY") {
                push (@{$self->{shared_libs}}, "$ctx->{DEBUGDIR}/$ctx->{LIBRARY_REALNAME}");
-               push (@{$self->{installable_shared_libs}}, "$installdir/$ctx->{LIBRARY_REALNAME}");
+               push (@{$self->{installable_shared_libs}}, "$installdir/$ctx->{LIBRARY_REALNAME}") if (defined($ctx->{SO_VERSION}));
        } elsif ($ctx->{TYPE} eq "MODULE") {
-               push (@{$self->{shared_modules}}, "$ctx->{DEBUGDIR}/$ctx->{LIBRARY_REALNAME}");
+               push (@{$self->{shared_modules}}, "$ctx->{DEBUGDIR}/$ctx->{FIXED_NAME}.\$(SHLIBEXT)");
                push (@{$self->{plugins}}, "$installdir/$ctx->{LIBRARY_REALNAME}");
 
-               my $fixedname = $ctx->{NAME};
-
-               $fixedname =~ s/^$ctx->{SUBSYSTEM}_//g;
-
-               $self->{install_plugins} .= "\t\@echo Installing $installdir/$ctx->{LIBRARY_REALNAME} as \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$fixedname.\$(SHLIBEXT)\n";
+               $self->{install_plugins} .= "\t\@echo Installing $installdir/$ctx->{LIBRARY_REALNAME} as \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$ctx->{FIXED_NAME}.\$(SHLIBEXT)\n";
                $self->{install_plugins} .= "\t\@mkdir -p \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/\n";
-               $self->{install_plugins} .= "\t\@cp $installdir/$ctx->{LIBRARY_REALNAME} \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$fixedname.\$(SHLIBEXT)\n";
-               $self->{uninstall_plugins} .= "\t\@echo Uninstalling \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$fixedname.\$(SHLIBEXT)\n";
-               $self->{uninstall_plugins} .= "\t\@-rm \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$fixedname.\$(SHLIBEXT)\n";
+               $self->{install_plugins} .= "\t\@cp $installdir/$ctx->{LIBRARY_REALNAME} \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$ctx->{FIXED_NAME}.\$(SHLIBEXT)\n";
+               $self->{uninstall_plugins} .= "\t\@echo Uninstalling \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$ctx->{FIXED_NAME}.\$(SHLIBEXT)\n";
+               $self->{uninstall_plugins} .= "\t\@-rm \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$ctx->{FIXED_NAME}.\$(SHLIBEXT)\n";
+               if (defined($ctx->{ALIASES})) {
+                       foreach (@{$ctx->{ALIASES}}) {
+                               $self->{install_plugins} .= "\t\@ln -s $ctx->{FIXED_NAME}.\$(SHLIBEXT) \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$_.\$(SHLIBEXT)\n";
+                               $self->{uninstall_plugins} .= "\t\@-rm \$(DESTDIR)\$(MODULESDIR)/$ctx->{SUBSYSTEM}/$_.\$(SHLIBEXT)\n";
+                       }
+               }
        }
 
        $self->_prepare_list($ctx, "OBJ_LIST");
@@ -260,10 +254,9 @@ __EOD__
        if ($self->{config}->{SONAMEFLAG} ne "" and 
                defined($ctx->{LIBRARY_SONAME})) {
                $soarg = "$self->{config}->{SONAMEFLAG}$ctx->{LIBRARY_SONAME} ";
-       }
-
-       if ($self->{config}->{SONAMEFLAG} ne "") {
-               $soargdebug = "$self->{config}->{SONAMEFLAG}$ctx->{LIBRARY_REALNAME} ";
+               if ($ctx->{LIBRARY_REALNAME} ne $ctx->{LIBRARY_SONAME}) {
+                       $soargdebug = "\n\t\@ln -fs $ctx->{LIBRARY_REALNAME} $ctx->{DEBUGDIR}/$ctx->{LIBRARY_SONAME}";
+               }
        }
 
        if ($self->{duplicate_build}) {
@@ -274,11 +267,17 @@ $ctx->{TARGET}: \$($ctx->{TYPE}_$ctx->{NAME}_DEPEND_LIST) \$($ctx->{TYPE}_$ctx->
        \@echo Linking \$\@
        \@mkdir -p $ctx->{DEBUGDIR}
        \@\$(SHLD) \$(SHLD_FLAGS) -o \$\@ \$(LOCAL_LINK_FLAGS) \\
-               \$($ctx->{TYPE}_$ctx->{NAME}_LINK_FLAGS) $soargdebug \\
-               $init_obj \$($ctx->{TYPE}_$ctx->{NAME}_LINK_LIST)
-
+               \$($ctx->{TYPE}_$ctx->{NAME}_LINK_FLAGS) $soarg \\
+               $init_obj \$($ctx->{TYPE}_$ctx->{NAME}_LINK_LIST)$soargdebug
 __EOD__
 );
+               if (defined($ctx->{ALIASES})) {
+                       foreach (@{$ctx->{ALIASES}}) {
+                               $self->output("\t\@ln -s $ctx->{FIXED_NAME}.\$(SHLIBEXT) $ctx->{DEBUGDIR}/$_.\$(SHLIBEXT)\n");
+                       }
+               }
+
+               $self->output("\n");
        }
 
        $self->output(<< "__EOD__"
@@ -437,10 +436,7 @@ sub PkgConfig($$)
        $link_name =~ s/^LIB//g;
        $link_name = lc($link_name);
 
-       if (not defined($ctx->{DESCRIPTION})) {
-               warn("$ctx->{NAME} has not DESCRIPTION set, not generating .pc file");
-               return;
-       }
+       return if (not defined($ctx->{DESCRIPTION}));
 
        my $path = "$ctx->{BASEDIR}/$link_name.pc";
 
@@ -452,7 +448,8 @@ sub PkgConfig($$)
                "-l$link_name",
                "",
                "$ctx->{VERSION}",
-               $ctx->{DESCRIPTION}
+               $ctx->{DESCRIPTION},
+               defined($ctx->{INIT_FUNCTIONS})
        ); 
 }
 
@@ -464,11 +461,15 @@ sub ProtoHeader($$)
 
        $dir =~ s/^\.\///g;
 
+       my $target = "";
+
        my $comment = "Creating ";
        if (defined($ctx->{PRIVATE_PROTO_HEADER})) {
+               $target.= "$dir/$ctx->{PRIVATE_PROTO_HEADER}";
                $comment.= "$dir/$ctx->{PRIVATE_PROTO_HEADER}";
                if (defined($ctx->{PUBLIC_PROTO_HEADER})) {
                        $comment .= " and ";
+                       $target.= " ";
                }
                push (@{$self->{proto_headers}}, "$dir/$ctx->{PRIVATE_PROTO_HEADER}");
        } else {
@@ -477,6 +478,7 @@ sub ProtoHeader($$)
        
        if (defined($ctx->{PUBLIC_PROTO_HEADER})) {
                $comment.= "$dir/$ctx->{PUBLIC_PROTO_HEADER}";
+               $target .= "$dir/$ctx->{PUBLIC_PROTO_HEADER}";
                push (@{$self->{proto_headers}}, "$dir/$ctx->{PUBLIC_PROTO_HEADER}");
        } else {
                $ctx->{PUBLIC_PROTO_HEADER} = $ctx->{PRIVATE_PROTO_HEADER};
@@ -511,22 +513,28 @@ sub write($$)
 
        # nasty hack to allow running locally
        if ($self->{duplicate_build}) {
-               $self->output("bin/libdynconfig.\$(SHLIBEXT): LIBRARY_DYNCONFIG_OBJ_LIST=dynconfig-devel.o\n");
+               $self->output("bin/libdynconfig.\$(SHLIBEXT).0.0.1: dynconfig-devel.o\n");
+               $self->output("bin/libdynconfig.\$(SHLIBEXT).0.0.1: LIBRARY_DYNCONFIG_OBJ_LIST=dynconfig-devel.o\n");
        }
 
        $self->_prepare_mk_files();
 
-       if ($self->{developer}) {
-               $self->output(<<__EOD__
-
-#-include \$(ALL_OBJS:.o=.d)
+       $self->output($self->{mkfile});
 
-__EOD__
-);
+       if ($self->{automatic_deps}) {
+               $self->output("
+ifneq (\$(MAKECMDGOALS),clean)
+ifneq (\$(MAKECMDGOALS),distclean)
+ifneq (\$(MAKECMDGOALS),realdistclean)
+-include \$(DEP_FILES)
+endif
+endif
+endif
+");
+       } else {
+               $self->output("include static_deps.mk\n");
        }
 
-       $self->output($self->{mkfile});
-
        open(MAKEFILE,">$file") || die ("Can't open $file\n");
        print MAKEFILE $self->{output};
        close(MAKEFILE);