summaryrefslogtreecommitdiff
path: root/devel/upp/Makefile
blob: fcd5759b68395604951befdd7eb0b0af5aa73632 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# Created by: Matthias Sund <m.sund@arcor.de>
# $FreeBSD$

PORTNAME=	upp
DISTVERSION=	11873
CATEGORIES=	devel x11-toolkits
MASTER_SITES=	SF/${PORTNAME}/${PORTNAME}/2018.1/
DISTNAME=	${PORTNAME}-x11-src-${PORTVERSION}

MAINTAINER=	m.sund@arcor.de
COMMENT=	Ultimate++, a BSD-licensed, cross-platform, C/C++ RAD suite

LICENSE=	BSD2CLAUSE
LICENSE_FILE=	${BUILD_WRKSRC}/Core/Copying

BROKEN_aarch64=		Does not compile on ${ARCH}: error Unknown CPU architecture
BROKEN_powerpc=		Does not compile on ${ARCH}: error Unknown CPU architecture
BROKEN_powerpc64=	Does not compile on ${ARCH}: error Unknown CPU architecture
BROKEN_sparc64=		Does not compile on ${ARCH}

USES=		compiler:c++11-lib

WRKSRC=		${WRKDIR}/${DISTNAME}
BUILD_WRKSRC=	${WRKSRC}/uppsrc

MACRO_FLAGS=	-DflagBSD -Dflag${OPSYS:tu}
CINC_GUI=	-I. -I${LOCALBASE}/include -I${LOCALBASE}/include/freetype2 \
		-I${LOCALBASE}/include/gtk-2.0 -I${LOCALBASE}/include/atk-1.0 \
		-I${LOCALBASE}/include/cairo -I${LOCALBASE}/include/gdk-pixbuf-2.0 \
		-I${LOCALBASE}/include/pango-1.0 -I${LOCALBASE}/include/glib-2.0 \
		-I${LOCALBASE}/lib/glib-2.0/include -I/usr/include
CINC_CONSOLE=	-I. -I${LOCALBASE}/include -I/usr/include

PORTDATA=	bazaar examples reference tutorial uppsrc *.bm

OPTIONS_DEFINE=	MYSQL OPENGL PGSQL SCD SDL USEMALLOC
OPTIONS_DEFAULT=	IDE SCD UMK
OPTIONS_MULTI=	BUILD
OPTIONS_MULTI_BUILD=	IDE UMK
BUILD_DESC=	Build/install
IDE_DESC=	Build/install TheIDE (integrated development environment)
IDE_DESKTOP_ENTRIES=	"TheIDE" "IDE for cross-platform C++ development" \
		"${DATADIR}/uppsrc/ide/theide-48.png" "theide" \
		"Development;IDE;GTK;" false
IDE_LIB_DEPENDS=	libexpat.so:textproc/expat2 \
		libfreetype.so:print/freetype2 \
		libfontconfig.so:x11-fonts/fontconfig \
		libnotify.so:devel/libnotify \
		libpng.so:graphics/png
IDE_PLIST_FILES=	bin/theide ${MANPREFIX}/man/man1/theide.1.gz
IDE_USE=	XORG=x11,xau,xcb,xcursor,xdmcp,xext,xfixes,xft,xi,xinerama,xrandr,xrender \
		GNOME=cairo,gdkpixbuf2,gtk20
UMK_DESC=	Build/install UMK (U++ MaKe command line utility)
UMK_PLIST_FILES=	bin/umk ${MANPREFIX}/man/man1/umk.1.gz
USEMALLOC_DESC=	Compile without U++ heap allocator
USEMALLOC_VARS=	MACRO_FLAGS+=-DflagUSEMALLOC
SCD_DESC=	Install spelling dictionaries (*.scd files)
SCD_VARS=	PORTDATA+=*.scd
# SDL/OPENGL/MYSQL/PGSQL dependencies are only for run-time for use by executables built by the IDE
SDL_USE=	SDL=sdl
OPENGL_USE=	GL=gl,glu
MYSQL_USES=	mysql
PGSQL_USES=	pgsql
LLD_UNSAFE=	yes

.include <bsd.port.pre.mk>

.if ${CHOSEN_COMPILER_TYPE} == clang
# Disable some warnings for Clang
CXXFLAGS+=	-Wno-logical-op-parentheses
.endif

CXXFLAGS_i386+=	-msse2

post-patch: .SILENT
	${CP} ${BUILD_WRKSRC}/Makefile.in ${BUILD_WRKSRC}/Makefile
	${CP} ${BUILD_WRKSRC}/uMakefile.in ${BUILD_WRKSRC}/uMakefile
	${REINPLACE_CMD} -i '' -e '/^CXX[[:blank:]]*=/d; /^CFLAGS[[:blank:]]*=/d; \
		/^LDFLAGS[[:blank:]]*=/d ; \
		/^Macro[[:blank:]]*=/s|-DflagLINUX|${MACRO_FLAGS}| ; \
		s|\(^CXXFLAGS\)[[:blank:]]*=.*\(-std=.*\)|\1 += \2| ; \
		s|\(^LIBPATH\)[[:blank:]]*=.*|\1 = -L${LOCALBASE}/lib -L/usr/lib|' \
		${BUILD_WRKSRC}/Makefile \
		${BUILD_WRKSRC}/uMakefile
	${REINPLACE_CMD} -i '' -e 's|\(^CINC\)[[:blank:]]*=.*|\1 = ${CINC_GUI}| ; \
		/^OutDir_/s|-Gui-Linux|| ; \
		s|-ldl|-lXau -lXdmcp -lxcb -lexecinfo|' \
		${BUILD_WRKSRC}/Makefile
	${REINPLACE_CMD} -i '' -e 's|\(^CINC\)[[:blank:]]*=.*|\1 = ${CINC_CONSOLE}| ; \
		/^OutDir_/s|-Linux|| ; \
		s|-ldl|-lexecinfo|' \
		${BUILD_WRKSRC}/uMakefile

do-build: .SILENT
	${ECHO_CMD} "BUILDER = \"GCC\"" > ${WRKSRC}/GCC.bm
	${ECHO_CMD} "COMMON_CPP_OPTIONS = \"-std=c++11\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "DEBUG_INFO = \"0\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "DEBUG_BLITZ = \"1\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "DEBUG_LINKMODE = \"1\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "DEBUG_OPTIONS = \"-O0\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "DEBUG_FLAGS = \"\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "DEBUG_LINK = \"\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "RELEASE_BLITZ = \"0\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "RELEASE_LINKMODE = \"1\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "RELEASE_OPTIONS = \"-O2 -ffunction-sections -fdata-sections\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "RELEASE_FLAGS = \"\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "RELEASE_LINK = \"-Wl,--gc-sections\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "DEBUGGER = \"gdb\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "PATH = \"\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "INCLUDE = \"${LOCALBASE}/include;${LOCALBASE}/include/freetype2;${LOCALBASE}/include/gtk-2.0;${LOCALBASE}/include/atk-1.0;${LOCALBASE}/include/cairo;${LOCALBASE}/include/gdk-pixbuf-2.0;${LOCALBASE}/include/pango-1.0;${LOCALBASE}/include/glib-2.0;${LOCALBASE}/lib/glib-2.0/include;/usr/include\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "LIB = \"${LOCALBASE}/lib;/usr/lib\";" >> ${WRKSRC}/GCC.bm
	${ECHO_CMD} "LINKMODE_LOCK = \"0\";" >> ${WRKSRC}/GCC.bm
# Also create CLANG build method, based on GCC with some changes
	(cd ${WRKSRC} && ${CP} GCC.bm CLANG.bm && \
		${SED} -i '' -e '/^BUILDER/s|GCC|CLANG| ; s| -fdata-sections||' \
		CLANG.bm)
	${ECHO_CMD} "COMMON_OPTIONS = \"-Wno-logical-op-parentheses\";" >> ${WRKSRC}/CLANG.bm
	${ECHO_CMD} "ALLOW_PRECOMPILED_HEADERS = \"0\";" >> ${WRKSRC}/CLANG.bm

do-build-IDE-on:
	@(cd ${BUILD_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_CMD} \
		${MAKE_FLAGS} Makefile ${_MAKE_JOBS} UPPOUT="../_out/" OutFile="../theide")

do-build-UMK-on:
	@(cd ${BUILD_WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_CMD} \
		${MAKE_FLAGS} uMakefile ${_MAKE_JOBS} UPPOUT="../_out/" OutFile="../umk")

do-install:
	(cd ${WRKSRC} && ${COPYTREE_SHARE} "${PORTDATA}" ${STAGEDIR}${DATADIR} \
		"-not ( -type d -empty ) -o -name '*.orig'")
	(cd ${STAGEDIR}${DATADIR}/uppsrc && ${RM} build_info.h *Makefile*)

do-install-IDE-on:
	${INSTALL_PROGRAM} ${WRKSRC}/theide ${STAGEDIR}${PREFIX}/bin
	${INSTALL_MAN} ${BUILD_WRKSRC}/ide/theide.1 ${STAGEDIR}${MANPREFIX}/man/man1

do-install-UMK-on:
	${INSTALL_PROGRAM} ${WRKSRC}/umk ${STAGEDIR}${PREFIX}/bin
	${INSTALL_MAN} ${BUILD_WRKSRC}/umk/umk.1 ${STAGEDIR}${MANPREFIX}/man/man1

.include <bsd.port.post.mk>