[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#56256: Ada95 bindings for ncurses (fwd)



On Sun, Feb 14, 2010 at 11:17:02AM -0500, Thomas Dickey wrote:
> On Sun, 14 Feb 2010, Nicolas Boulenguez wrote:
> >I would like to make a separate package from the Ada binding. This
> >seems the only solution since the GNAT compiler will not be available
> >on all debian architectures before long, and this would make it quite
> >difficult to build it from the same tarball than the C API.
> >
> >It should not be difficult to convince the upstream to make its source
> >a separate tarball, since nothing has been modified in it for many
> >years.
> 
> actually, it seems that every time gnat is updated, there are more
> stylistic changes needed (aside from that, it's pretty stable).

Would you please release a separate tarball containing only the Ada95/
subdirectory and the related documentation ? I cannot estimate the
work needed if you still want generated Makefiles, but the following
Makefile and GNAT project file make the job for me and may be a
starting point.

-- Content of file: Makefile
#!/usr/bin/make -f

# These main variables may be inherited from a distribution script.
LIB_NAME ?= ncursesada
DESTDIR ?=
SONAME ?= lib$(LIB_NAME).so.1
# These main variables only depend on these sources.
ADA_DIR := $(realpath .)/Ada95
BUILD_DIR := $(realpath .)/build
GNAT_PROJECT := build.gpr

# gnatmake can do parallel builds; we don't want make to interfere.
.NOTPARALLEL:
CPUS := $(shell getconf _NPROCESSORS_ONLN)

###################### build directory

$(BUILD_DIR) $(BUILD_DIR)/src $(BUILD_DIR)/m4:
	mkdir -p $@

###################### C program exporting representations

$(BUILD_DIR)/gen: $(ADA_DIR)/gen/gen.c \
                  | $(BUILD_DIR)
	gcc $< -o $@ -lncurses

###################### files containing the m4 macros

define generate_macro
$(BUILD_DIR)/m4/$(1): $(BUILD_DIR)/gen \
                      | $(BUILD_DIR)/m4
	$$< "" $(2) > $$@
GENERATED_MACROS += $(BUILD_DIR)/m4/$(1)
endef
$(eval $(call generate_macro,Character_Attribute_Set_Rep,B A))
$(eval $(call generate_macro,Base_Defs,B B))
$(eval $(call generate_macro,Color_Defs,B C))
$(eval $(call generate_macro,Window_Offsets,B D))
$(eval $(call generate_macro,Key_Definitions,B K))
$(eval $(call generate_macro,Linker_Options,B L))
$(eval $(call generate_macro,ACS_Map,B M))
$(eval $(call generate_macro,Old_Keys,B O))
$(eval $(call generate_macro,Public_Variables,B P))
$(eval $(call generate_macro,AC_Rep,B R))
$(eval $(call generate_macro,Version_Info,B V))
$(eval $(call generate_macro,Trace_Defs,B T))
$(eval $(call generate_macro,Menu_Opt_Rep,M R))
$(eval $(call generate_macro,Menu_Base_Defs,M B))
$(eval $(call generate_macro,Menu_Linker_Options,M L))
$(eval $(call generate_macro,Item_Rep,M I))
$(eval $(call generate_macro,Form_Opt_Rep,F R))
$(eval $(call generate_macro,Form_Base_Defs,F B))
$(eval $(call generate_macro,Form_Linker_Options,F L))
$(eval $(call generate_macro,Field_Rep,F I))
$(eval $(call generate_macro,Mouse_Base_Defs,P B))
$(eval $(call generate_macro,Mouse_Event_Rep,P M))
$(eval $(call generate_macro,Mouse_Events,B E))
$(eval $(call generate_macro,Panel_Linker_Options,P L))
$(eval $(call generate_macro,Chtype_Def,E C))
$(eval $(call generate_macro,Eti_Defs,E E))

###################### m4 generated Ada sources
define generate_m4_source
$(BUILD_DIR)/src/$(1): $(ADA_DIR)/gen/$(1).m4 \
                       $(ADA_DIR)/gen/normal.m4 \
                       $(GENERATED_MACROS) \
                       | $(BUILD_DIR)/src
	(cd $(BUILD_DIR)/m4 && m4 -DNCURSES_EXT_FUNCS=TODO \
                         -DM4MACRO=$(ADA_DIR)/gen/normal.m4) \
        < $$< \
        | sed -e '/^\-\-\ \ \-\*\-\ ada\ \-\*\-.*/d' \
        > $$@
GENERATED_SOURCES += $(BUILD_DIR)/src/$(1)
endef
$(foreach template, \
  $(patsubst $(ADA_DIR)/gen/%.m4,%, \
    $(wildcard $(ADA_DIR)/gen/terminal_interface-curses*.m4)), \
  $(eval $(call generate_m4_source,$(template))))

###################### gnatprep generated Ada sources
# pragma Unreferenced has entered standard Ada now.
# Choose whether we add trace() function to all models of ncurses

$(BUILD_DIR)/src/terminal_interface-curses-trace.adb: $(ADA_DIR)/src/terminal_interface-curses-trace.adb_p \
                                                      | $(BUILD_DIR)/src
	gnatprep $< $@ -DADA_TRACE=False -DPRAGMA_UNREF=True
GENERATED_SOURCES += $(BUILD_DIR)/src/terminal_interface-curses-trace.adb

##################### build/install/clean Ada sources

.PHONY: build
build: export BUILD_DIR := $(BUILD_DIR)
build: export ADA_DIR := $(ADA_DIR)
build: export LIB_NAME := $(LIB_NAME)
build: export SONAME := $(SONAME)
build: $(GENERATED_SOURCES)
	gnatmake -j$(CPUS) -p -P$(GNAT_PROJECT) -XLIB_KIND=dynamic
	gnatmake -j$(CPUS) -p -P$(GNAT_PROJECT) -XLIB_KIND=static

.PHONY: install
install:
	install --directory $(DESTDIR)/usr/share/ada/adainclude/$(LIB_NAME)
	install --mode=644 \
          $(ADA_DIR)/src/*.ad[sb] \
          $(GENERATED_SOURCES) \
          $(DESTDIR)/usr/share/ada/adainclude/$(LIB_NAME)
	install --directory $(DESTDIR)/usr/lib/ada/adalib/$(LIB_NAME)
	install --mode=444 \
          $(BUILD_DIR)/dynamic-ali/* \
          $(DESTDIR)/usr/lib/ada/adalib/$(LIB_NAME)
	install --mode=644 \
          $(BUILD_DIR)/lib$(LIB_NAME).a \
          $(BUILD_DIR)/$(SONAME) \
          $(DESTDIR)/usr/lib
	cd $(DESTDIR)/usr/lib && ln -s $(SONAME) lib$(LIB_NAME).so

.PHONY: uninstall
uninstall:
	rm -rf \
          $(DESTDIR)/usr/share/ada/adainclude/$(LIB_NAME) \
          $(DESTDIR)/usr/lib/ada/adalib/$(LIB_NAME) \
          $(DESTDIR)/usr/lib/lib$(LIB_NAME).a \
          $(DESTDIR)/usr/lib/$(SONAME) \
          $(DESTDIR)/usr/lib/lib$(LIB_NAME).so

.PHONY: clean
clean:
	rm -rf $(BUILD_DIR)


-- Content of file: build.gpr
project Build is
  Build_Dir := External ("BUILD_DIR");
  Ada_Dir := External ("ADA_DIR");
  Kind := External ("LIB_KIND");
  for Library_Name use External ("LIB_NAME");
  for Library_Version use External ("SONAME");

  for Library_Kind use Kind;
  for Library_Dir use Build_Dir;
  for Object_Dir use Build_Dir & "/" & Kind & "-obj";
  for Library_ALI_Dir use Build_Dir & "/" & Kind & "-ali";
  for Source_Dirs use (Ada_Dir & "/src",
                       Build_Dir & "/src");
  package Compiler is
     for Default_Switches ("Ada") use
       ("-g", "-O2", "-gnatafno", "-gnatVa", "-gnatwa");
  end Compiler;

end Build;

Attachment: signature.asc
Description: Digital signature


Reply to: