how to add my source file?

Started by dakotali kasapabout 19 years ago8 messages
#1dakotali kasap
dakotalidavid@yahoo.com

Hi,

I want to add my .c and .h source files into the postgresql project. What kind of changes should I make with the Makefiles. It seems that, it is not enough just to add the object file of the C files into the Makefile.

Can anyone help to me please?

kind regards,

dakotali

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

#2Alvaro Herrera
alvherre@commandprompt.com
In reply to: dakotali kasap (#1)
Re: how to add my source file?

dakotali kasap wrote:

Hi,

I want to add my .c and .h source files into the postgresql project.
What kind of changes should I make with the Makefiles. It seems that,
it is not enough just to add the object file of the C files into the
Makefile.

Huh, why not? Typically you just add the files to OBJS. What problem
are you having?

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

#3dakotali kasap
dakotalidavid@yahoo.com
In reply to: Alvaro Herrera (#2)
Re: how to add my source file?

<!-- DIV {margin:0px;}-->Hi,

I have one source and one header file which are called my_writer.h and my_writer.c. I included my_writer.h inside postgres.c and do the implementation of declared functions inside my_writer.c. When I include, some other header files of postgresql (like nodes/pg_list.h or nodes/nodes.h) in my_writer.c, it gives me compile errors that are related with these header files of postgresql, although there is no problem.

Do you know why?

regards,

dakotali

dakotali kasap wrote:

Hi,

I want to add my .c and .h source files into the postgresql project.
What kind of changes should I make with the Makefiles. It seems that,
it is not enough just to add the object file of the C files into the
Makefile.

Huh, why not? Typically you just add the files to OBJS. What problem
are you having?

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support

---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at

http://www.postgresql.org/about/donate

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

#4Andrew Dunstan
andrew@dunslane.net
In reply to: dakotali kasap (#3)
Re: how to add my source file?

dakotali kasap wrote:

Hi,

I have one source and one header file which are called my_writer.h and
my_writer.c. I included my_writer.h inside postgres.c and do the
implementation of declared functions inside my_writer.c. When I
include, some other header files of postgresql (like nodes/pg_list.h
or nodes/nodes.h) in my_writer.c, it gives me compile errors that are
related with these header files of postgresql, although there is no
problem.

Do you know why?

We're not magicians, nor mindreaders. Unless you give us enough
information we can't possibly guess. At the very least you need to show
us what the offending code is and what the compiler error is.

cheers

andrew

#5dakotali kasap
dakotalidavid@yahoo.com
In reply to: Andrew Dunstan (#4)
Re: how to add my source file?

Sorry I did not want to bother you with the details, I just thought that there is smth that I have to do apart from adding the object file name into the Makefile.

So, here is the whole picture:

I want to write a function that takes the raw parsetree and rewrites it according to my rules, then produce new raw parsetrees.

I will call this function inside backend/tcop/postgres.c . I wrote an header file called my_rewriter.h and include this inside postgres.c.

my_writer.h looks like:
-------------------------------------------------
#ifndef UWSDREWRITE_H
#define UWSDREWRITE_H

#include "nodes/pg_list.h"
#include "nodes/nodes.h"

typedef struct my_Projection
{
char *relname;
List attnames;
char *result_relname;

} my_Projection;

.
.
.

extern void my_analyze(Node *parsetree);
extern void my_rewrite(List *parsetree_list);

#endif UWSDREWRITE_H
---------------------------------------------

my_writer.c looks like:
-------------------------------------------------
#include "nodes/nodes.h"
#include <stdio.h>
#include "nodes/pg_list.h"

static void my_string_print(char *s);
static void my_int_print(int i);

static void my_string_print(char *s)
{
FILE *outfile = fopen("/home/?/the_log.txt", "a");
fprintf(outfile,"\n%s\n", s);
fflush(stdout);
fclose(outfile);
}

static void my_int_print(int i)
{
FILE *outfile = fopen("/home/?/the_log.txt", "a");
fprintf(outfile,"\n the int is: %d\n", i);
fflush(stdout);
fclose(outfile);
}

void UWSD_rewrite(List *parsetree_list)
{
ListCell *parsetree_item;

foreach(parsetree_item, parsetree_list)
{
Node *parsetree = (Node *) lfirst(parsetree_item);
UWSD_analyze(parsetree);
}
}

void UWSD_analyze(Node *parsetree)
{
if(nodeTag(parsetree)==T_SelectStmt)
{
my_string_print("THIS IS A SELECT STMT");
}
else my_int_print(nodeTag(parsetree));
}

-----------------------------------------------------------

Then I wrote a C file called my_writer.c, and do the implementation of my_analyze(Node *parsetree) and my_rewrite(List *parsetree_list) functions. I need Node and List structures here, but when I include the necessary header files (#include "nodes/pg_list.h", #include "nodes/nodes.h"), I got errors at compile time like:

---------------------------------------
../../../src/include/nodes/nodes.h:359: error: syntax error before �Node�
../../../src/include/nodes/nodes.h:398: error: syntax error before �equal�
../../../src/include/nodes/nodes.h:398: warning: type defaults to �int� in declaration of �equal�
../../../src/include/nodes/nodes.h:398: warning: data definition has no type or storage class
----------------------------------------

I added the object file my_writer.o to the Makefile inside backend/parser/Makefile and configured again, but it did not work, what else should I do?

regards,

dakotali

Andrew Dunstan <andrew@dunslane.net> wrote: dakotali kasap wrote:

Hi,

I have one source and one header file which are called my_writer.h and
my_writer.c. I included my_writer.h inside postgres.c and do the
implementation of declared functions inside my_writer.c. When I
include, some other header files of postgresql (like nodes/pg_list.h
or nodes/nodes.h) in my_writer.c, it gives me compile errors that are
related with these header files of postgresql, although there is no
problem.

Do you know why?

We're not magicians, nor mindreaders. Unless you give us enough
information we can't possibly guess. At the very least you need to show
us what the offending code is and what the compiler error is.

cheers

andrew

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

#6Bruce Momjian
bruce@momjian.us
In reply to: dakotali kasap (#5)
Re: how to add my source file?

Ah, all *.c files must have this at the top before they include _any_
other files, including system include files:

#include "postgres.h"

You will see that all our backend files follow this rule.

---------------------------------------------------------------------------

dakotali kasap wrote:

Sorry I did not want to bother you with the details, I just thought that there is smth that I have to do apart from adding the object file name into the Makefile.

So, here is the whole picture:

I want to write a function that takes the raw parsetree and rewrites it according to my rules, then produce new raw parsetrees.

I will call this function inside backend/tcop/postgres.c . I wrote an header file called my_rewriter.h and include this inside postgres.c.

my_writer.h looks like:
-------------------------------------------------
#ifndef UWSDREWRITE_H
#define UWSDREWRITE_H

#include "nodes/pg_list.h"
#include "nodes/nodes.h"

typedef struct my_Projection
{
char *relname;
List attnames;
char *result_relname;

} my_Projection;

.
.
.

extern void my_analyze(Node *parsetree);
extern void my_rewrite(List *parsetree_list);

#endif UWSDREWRITE_H
---------------------------------------------

my_writer.c looks like:
-------------------------------------------------
#include "nodes/nodes.h"
#include <stdio.h>
#include "nodes/pg_list.h"

static void my_string_print(char *s);
static void my_int_print(int i);

static void my_string_print(char *s)
{
FILE *outfile = fopen("/home/?/the_log.txt", "a");
fprintf(outfile,"\n%s\n", s);
fflush(stdout);
fclose(outfile);
}

static void my_int_print(int i)
{
FILE *outfile = fopen("/home/?/the_log.txt", "a");
fprintf(outfile,"\n the int is: %d\n", i);
fflush(stdout);
fclose(outfile);
}

void UWSD_rewrite(List *parsetree_list)
{
ListCell *parsetree_item;

foreach(parsetree_item, parsetree_list)
{
Node *parsetree = (Node *) lfirst(parsetree_item);
UWSD_analyze(parsetree);
}
}

void UWSD_analyze(Node *parsetree)
{
if(nodeTag(parsetree)==T_SelectStmt)
{
my_string_print("THIS IS A SELECT STMT");
}
else my_int_print(nodeTag(parsetree));
}

-----------------------------------------------------------

Then I wrote a C file called my_writer.c, and do the implementation of my_analyze(Node *parsetree) and my_rewrite(List *parsetree_list) functions. I need Node and List structures here, but when I include the necessary header files (#include "nodes/pg_list.h", #include "nodes/nodes.h"), I got errors at compile time like:

---------------------------------------
../../../src/include/nodes/nodes.h:359: error: syntax error before ?Node?
../../../src/include/nodes/nodes.h:398: error: syntax error before ?equal?
../../../src/include/nodes/nodes.h:398: warning: type defaults to ?int? in declaration of ?equal?
../../../src/include/nodes/nodes.h:398: warning: data definition has no type or storage class
----------------------------------------

I added the object file my_writer.o to the Makefile inside backend/parser/Makefile and configured again, but it did not work, what else should I do?

regards,

dakotali

Andrew Dunstan <andrew@dunslane.net> wrote: dakotali kasap wrote:

Hi,

I have one source and one header file which are called my_writer.h and
my_writer.c. I included my_writer.h inside postgres.c and do the
implementation of declared functions inside my_writer.c. When I
include, some other header files of postgresql (like nodes/pg_list.h
or nodes/nodes.h) in my_writer.c, it gives me compile errors that are
related with these header files of postgresql, although there is no
problem.

Do you know why?

We're not magicians, nor mindreaders. Unless you give us enough
information we can't possibly guess. At the very least you need to show
us what the offending code is and what the compiler error is.

cheers

andrew

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

--
Bruce Momjian bruce@momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

#7Andrew Dunstan
andrew@dunslane.net
In reply to: dakotali kasap (#5)
Re: how to add my source file?

dakotali kasap wrote:

my_writer.c looks like:
-------------------------------------------------
#include "nodes/nodes.h"
#include <stdio.h>
#include "nodes/pg_list.h"

well, you normally have to include "postgres.h" before any other
postgres header.

cheers

andrew

#8dakotali kasap
dakotalidavid@yahoo.com
In reply to: Bruce Momjian (#6)
Re: how to add my source file?

Thanks a lot, it worked:) Actually, I have tried to include "postgres.h" before, but not at the top of the other includes.

regards,

dakotali

Bruce Momjian <bruce@momjian.us> wrote:
Ah, all *.c files must have this at the top before they include _any_
other files, including system include files:

#include "postgres.h"

You will see that all our backend files follow this rule.

---------------------------------------------------------------------------

dakotali kasap wrote:

Sorry I did not want to bother you with the details, I just thought that there is smth that I have to do apart from adding the object file name into the Makefile.

So, here is the whole picture:

I want to write a function that takes the raw parsetree and rewrites it according to my rules, then produce new raw parsetrees.

I will call this function inside backend/tcop/postgres.c . I wrote an header file called my_rewriter.h and include this inside postgres.c.

my_writer.h looks like:
-------------------------------------------------
#ifndef UWSDREWRITE_H
#define UWSDREWRITE_H

#include "nodes/pg_list.h"
#include "nodes/nodes.h"

typedef struct my_Projection
{
char *relname;
List attnames;
char *result_relname;

} my_Projection;

.
.
.

extern void my_analyze(Node *parsetree);
extern void my_rewrite(List *parsetree_list);

#endif UWSDREWRITE_H
---------------------------------------------

my_writer.c looks like:
-------------------------------------------------
#include "nodes/nodes.h"
#include
#include "nodes/pg_list.h"

static void my_string_print(char *s);
static void my_int_print(int i);

static void my_string_print(char *s)
{
FILE *outfile = fopen("/home/?/the_log.txt", "a");
fprintf(outfile,"\n%s\n", s);
fflush(stdout);
fclose(outfile);
}

static void my_int_print(int i)
{
FILE *outfile = fopen("/home/?/the_log.txt", "a");
fprintf(outfile,"\n the int is: %d\n", i);
fflush(stdout);
fclose(outfile);
}

void UWSD_rewrite(List *parsetree_list)
{
ListCell *parsetree_item;

foreach(parsetree_item, parsetree_list)
{
Node *parsetree = (Node *) lfirst(parsetree_item);
UWSD_analyze(parsetree);
}
}

void UWSD_analyze(Node *parsetree)
{
if(nodeTag(parsetree)==T_SelectStmt)
{
my_string_print("THIS IS A SELECT STMT");
}
else my_int_print(nodeTag(parsetree));
}

-----------------------------------------------------------

Then I wrote a C file called my_writer.c, and do the implementation of my_analyze(Node *parsetree) and my_rewrite(List *parsetree_list) functions. I need Node and List structures here, but when I include the necessary header files (#include "nodes/pg_list.h", #include "nodes/nodes.h"), I got errors at compile time like:

---------------------------------------
../../../src/include/nodes/nodes.h:359: error: syntax error before ?Node?
../../../src/include/nodes/nodes.h:398: error: syntax error before ?equal?
../../../src/include/nodes/nodes.h:398: warning: type defaults to ?int? in declaration of ?equal?
../../../src/include/nodes/nodes.h:398: warning: data definition has no type or storage class
----------------------------------------

I added the object file my_writer.o to the Makefile inside backend/parser/Makefile and configured again, but it did not work, what else should I do?

regards,

dakotali

Andrew Dunstan wrote: dakotali kasap wrote:

Hi,

I have one source and one header file which are called my_writer.h and
my_writer.c. I included my_writer.h inside postgres.c and do the
implementation of declared functions inside my_writer.c. When I
include, some other header files of postgresql (like nodes/pg_list.h
or nodes/nodes.h) in my_writer.c, it gives me compile errors that are
related with these header files of postgresql, although there is no
problem.

Do you know why?

We're not magicians, nor mindreaders. Unless you give us enough
information we can't possibly guess. At the very least you need to show
us what the offending code is and what the compiler error is.

cheers

andrew

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com

--
Bruce Momjian bruce@momjian.us
EnterpriseDB http://www.enterprisedb.com

+ If your life is a hard drive, Christ can be your backup. +

---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings

__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com