r13867: Wrap the cflags.sh hack in the build system. You can now simply
authorJelmer Vernooij <jelmer@samba.org>
Mon, 6 Mar 2006 15:34:29 +0000 (15:34 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:52:18 +0000 (13:52 -0500)
set subsystem-specific compiler flags in the .mk files.

source/build/smb_build/README.txt
source/build/smb_build/cflags.pm [new file with mode: 0755]
source/build/smb_build/config_mk.pm
source/build/smb_build/main.pl
source/build/smb_build/makefile.pm
source/extra_cflags.txt [deleted file]
source/heimdal_build/config.mk
source/script/cflags.pl [new file with mode: 0755]
source/script/cflags.sh [deleted file]

index 44aeffdad2584d0a2b900563966ccaa067a1c652..a5e4db99e0cc88acd8c9a2a199081954f5616e50 100644 (file)
@@ -50,7 +50,8 @@ input.pm - Input validation
 main.pm - Main\r
 makefile.pm - Makefile generation\r
 output.pm - Dependency calculation\r
-smb_build_h.pm - smb_build.h generation\r
+header.pm - build.h generation\r
+cflags.pm - Generates cflags.txt for file-specific cflags\r
 \r
 Layout\r
 -------\r
diff --git a/source/build/smb_build/cflags.pm b/source/build/smb_build/cflags.pm
new file mode 100755 (executable)
index 0000000..a19c0ef
--- /dev/null
@@ -0,0 +1,27 @@
+# SMB Build System
+#
+#  Copyright (C) Jelmer Vernooij 2006
+#  Released under the GNU GPL
+
+package cflags;
+use strict;
+
+sub create_cflags($$)
+{
+       my ($CTX, $file) = @_;
+
+       open(CFLAGS_TXT,">$file") || die ("Can't open `$file'\n");
+
+       foreach my $key (values %{$CTX}) {
+               next unless defined ($key->{OBJ_LIST});
+               next unless defined ($key->{EXTRA_CFLAGS});
+
+               foreach (@{$key->{OBJ_LIST}}) {
+                       print CFLAGS_TXT "$_: $key->{EXTRA_CFLAGS}\n";
+               }
+       }
+       close(CFLAGS_TXT);
+
+       print __FILE__.": creating $file\n";
+}
+1;
index c7ff8648ebe69ceebc553f528c3f693b7994faf6..56960f044c6646c9977141a87805c4342b3c8039 100644 (file)
@@ -33,6 +33,8 @@ my $section_types = {
                "PRIVATE_PROTO_HEADER"  => "string",
 
                "PUBLIC_HEADERS"        => "list",
+
+               "EXTRA_CFLAGS"          => "string",
                },
        "MODULE" => {
                "SUBSYSTEM"             => "string",
@@ -48,7 +50,9 @@ my $section_types = {
                "OUTPUT_TYPE" => "string",
 
                "MANPAGE"               => "string",
-               "PRIVATE_PROTO_HEADER"  => "string"
+               "PRIVATE_PROTO_HEADER"  => "string",
+
+               "EXTRA_CFLAGS"          => "string"
                },
        "BINARY" => {
                "OBJ_FILES"             => "list",
@@ -61,7 +65,9 @@ my $section_types = {
                "MANPAGE"               => "string",
                "INSTALLDIR"            => "string",
                "PRIVATE_PROTO_HEADER"  => "string",
-               "PUBLIC_HEADERS" => "string"
+               "PUBLIC_HEADERS" => "string", 
+
+               "EXTRA_CFLAGS"          => "string"
                },
        "LIBRARY" => {
                "MAJOR_VERSION"         => "string",
@@ -84,7 +90,9 @@ my $section_types = {
                "PUBLIC_HEADERS"        => "list",
 
                "PUBLIC_PROTO_HEADER"   => "string",
-               "PRIVATE_PROTO_HEADER"  => "string"
+               "PRIVATE_PROTO_HEADER"  => "string",
+
+               "EXTRA_CFLAGS"          => "string"
                }
 };
 
index bec1be791ca6fbc7de4ca2cd622a5eaf9799bfa9..a47899a3a538f242d1c1cd089ce35b45b590b08e 100644 (file)
@@ -11,6 +11,7 @@ use smb_build::input;
 use smb_build::config_mk;
 use smb_build::output;
 use smb_build::env;
+use smb_build::cflags;
 use config;
 use strict;
 
@@ -81,4 +82,6 @@ foreach my $key (values %$OUTPUT) {
 $mkenv->write("Makefile");
 header::create_smb_build_h($OUTPUT, "include/build.h");
 
+cflags::create_cflags($OUTPUT, "extra_cflags.txt");
+
 1;
index 4280efa9495760fa3a348608ef4ca64d7bfa9296..b7c3a273832cb240234d95b0fdb40c4e18353257 100644 (file)
@@ -186,7 +186,7 @@ sub _prepare_std_CC_rule($$$$$$)
 # $comment
 .$src.$dst:
        \@echo $message \$\*.$src
-       \@\$(CC) `script/cflags.sh \$\@` \$(CFLAGS) $flags -c \$\*.$src -o \$\@
+       \@\$(CC) `script/cflags.pl \$\@` \$(CFLAGS) $flags -c \$\*.$src -o \$\@
 __EOD__
 );
        if ($self->{config}->{BROKEN_CC} eq "yes") {
@@ -204,7 +204,7 @@ sub _prepare_hostcc_rule($)
        $self->output(<< "__EOD__"
 .c.ho:
        \@echo Compiling \$\*.c with host compiler
-       \@\$(HOSTCC) `script/cflags.sh \$\@` \$(CFLAGS) -c \$\*.c -o \$\@
+       \@\$(HOSTCC) `script/cflags.pl \$\@` \$(CFLAGS) -c \$\*.c -o \$\@
 __EOD__
 );
        if ($self->{config}->{BROKEN_CC} eq "yes") {
diff --git a/source/extra_cflags.txt b/source/extra_cflags.txt
deleted file mode 100644 (file)
index 16b33b5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-heimdal -Iheimdal_build -Iheimdal/kdc -Iheimdal/lib/des -Iheimdal/lib/roken  -DNO_PRINTF_ATTRIBUTE
-heimdal/lib/com_err -Iheimdal_build -Iheimdal/lib/com_err -Iheimdal/kdc -Iheimdal/lib/des -Iheimdal/lib/roken -DNO_PRINTF_ATTRIBUTE
-heimdal/lib/asn1 -Iheimdal_build -Iheimdal/lib/asn1 -Iheimdal/kdc -Iheimdal/lib/des -Iheimdal/lib/roken -DNO_PRINTF_ATTRIBUTE
-heimdal_build/replace.o -Iheimdal_build -Iheimdal/lib/roken
index a9d49f6082f0d496f4708e5ae75018ce27e4aecb..9c7b593b477aeae4107f83dbf76705568d0e4516 100644 (file)
@@ -186,6 +186,9 @@ NOPROTO = YES
 #######################
 # Start SUBSYSTEM HEIMDAL_ASN1
 [SUBSYSTEM::HEIMDAL_ASN1]
+EXTRA_CFLAGS = -Iheimdal_build -Iheimdal/lib/asn1 \
+                          -Iheimdal/kdc -Iheimdal/lib/des \
+                          -Iheimdal/lib/roken -DNO_PRINTF_ATTRIBUTE
 OBJ_FILES = \
        ../heimdal/lib/asn1/der_get.o \
        ../heimdal/lib/asn1/der_put.o \
@@ -261,6 +264,9 @@ NOPROTO = YES
 #######################
 # Start SUBSYSTEM HEIMDAL_DES
 [SUBSYSTEM::HEIMDAL_DES]
+EXTRA_CFLAGS = -Iheimdal_build -Iheimdal/kdc \
+                          -Iheimdal/lib/des -Iheimdal/lib/roken \
+                          -DNO_PRINTF_ATTRIBUTE
 OBJ_FILES = \
        ../heimdal/lib/des/aes.o \
        ../heimdal/lib/des/des.o \
@@ -304,6 +310,8 @@ NOPROTO = YES
 #######################
 # Start SUBSYSTEM HEIMDAL_ROKEN
 [SUBSYSTEM::HEIMDAL_ROKEN]
+EXTRA_CFLAGS = -Iheimdal_build -Iheimdal/kdc \
+                          -Iheimdal/lib/des -Iheimdal/lib/roken -DNO_PRINTF_ATTRIBUTE
 OBJ_FILES = \
        ../heimdal/lib/roken/base64.o \
        ../heimdal/lib/roken/bswap.o \
@@ -336,6 +344,9 @@ NOPROTO = YES
 #######################
 # Start SUBSYSTEM HEIMDAL_VERS
 [SUBSYSTEM::HEIMDAL_VERS]
+EXTRA_CFLAGS = -Iheimdal_build -Iheimdal/kdc \
+                          -Iheimdal/lib/des -Iheimdal/lib/roken \
+                          -DNO_PRINTF_ATTRIBUTE
 OBJ_FILES = ../heimdal/lib/vers/print_version.o
 NOPROTO = YES
 # End SUBSYSTEM HEIMDAL_VERS
@@ -352,6 +363,9 @@ REQUIRED_SUBSYSTEMS = LIBNETIF
 #######################
 # Start SUBSYSTEM HEIMDAL_COM_ERR
 [SUBSYSTEM::HEIMDAL_COM_ERR]
+EXTRA_CFLAGS = -Iheimdal_build -Iheimdal/lib/com_err \
+                          -Iheimdal/kdc -Iheimdal/lib/des \
+                          -Iheimdal/lib/roken -DNO_PRINTF_ATTRIBUTE
 OBJ_FILES = \
        ../heimdal/lib/com_err/com_err.o \
        ../heimdal/lib/com_err/error.o
@@ -362,6 +376,9 @@ NOPROTO = YES
 #######################
 # Start BINARY asn1_compile
 [BINARY::asn1_compile]
+EXTRA_CFLAGS = -Iheimdal_build -Iheimdal/lib/asn1 \
+                          -Iheimdal/kdc -Iheimdal/lib/des \
+                          -Iheimdal/lib/roken -DNO_PRINTF_ATTRIBUTE
 NOPROTO = YES
 OBJ_FILES = \
        ../heimdal/lib/asn1/main.ho \
diff --git a/source/script/cflags.pl b/source/script/cflags.pl
new file mode 100755 (executable)
index 0000000..6dfaa83
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/perl
+
+# This is a hack to allow per target cflags. It isn't very elegant, but it
+# is the most portable idea we have come up with yet
+# tridge@samba.org, July 2005
+# jelmer@samba.org, March 2006
+use strict;
+use warnings;
+
+my $target = shift;
+
+sub check_flags($)
+{
+    my ($name)=@_;
+       open (IN, "extra_cflags.txt");
+    while (<IN> =~ /^([^:]+): (.*)$/) {
+               next unless ($1 eq $target);
+               print "$2 ";
+       }
+       close(IN);
+       print "\n";
+}
+
+check_flags($target);
+
+exit 0;
diff --git a/source/script/cflags.sh b/source/script/cflags.sh
deleted file mode 100755 (executable)
index dc7bd79..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/sh
-
-# This is a hack to allow per target cflags. It isn't very elegant, but it
-# is the most portable idea we have come up with yet
-# tridge@samba.org, July 2005
-
-TARGET=$1
-
-check_flags()
-{
-    NAME=$1
-    (
-     while read tag flags; do
-        if [ "$tag" = "$NAME" ] || [ "./$tag" = "$NAME" ]; then
-            echo "$flags"
-            exit 0;
-        fi
-     done
-    ) < extra_cflags.txt
-}
-
-
-NAME=$TARGET
-while [ "$NAME" != "." ]; do
-    check_flags "$NAME"
-    NAME=`dirname $NAME`
-done
-exit 0;