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