diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,101 @@ -project (LEMON) -enable_testing () -add_subdirectory (lemon) -add_subdirectory (demo) -add_subdirectory (test) +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + +#EXECUTE_PROCESS( +# COMMAND hg id -i +# OUTPUT_VARIABLE HG_REVISION +# OUTPUT_STRIP_TRAILING_WHITESPACE) + +SET(PROJECT_NAME "Lemon") +SET(PROJECT_VERSION_MAJOR "0") +SET(PROJECT_VERSION_MINOR "99") +SET(PROJECT_VERSION_PATCH "0") +SET(PROJECT_VERSION + "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") + +PROJECT(${PROJECT_NAME}) + +SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +INCLUDE(FindDoxygen) +INCLUDE(FindGhostscript) + +ENABLE_TESTING() + +ADD_SUBDIRECTORY(lemon) +ADD_SUBDIRECTORY(demo) +ADD_SUBDIRECTORY(doc) +ADD_SUBDIRECTORY(test) + +IF(WIN32) + INSTALL(FILES ${CMAKE_SOURCE_DIR}/cmake/nsis/lemon.ico + DESTINATION bin) +ENDIF(WIN32) + +IF(WIN32) + SET(CPACK_PACKAGE_NAME ${PROJECT_NAME}) + SET(CPACK_PACKAGE_VENDOR + "EGRES - Egervary Research Group on Combinatorial Optimization") + SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY + "Lemon - Library of Efficient Models and Optimization in Networks") + SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE") + + SET(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR}) + SET(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR}) + SET(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH}) + SET(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) + + SET(CPACK_PACKAGE_INSTALL_DIRECTORY + "${PROJECT_NAME} ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}") + SET(CPACK_PACKAGE_INSTALL_REGISTRY_KEY + "${PROJECT_NAME} ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}") + + # Variables to generate a component-based installer. + #SET(CPACK_COMPONENTS_ALL headers library html_documentation) + + #SET(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C++ headers") + #SET(CPACK_COMPONENT_LIBRARY_DISPLAY_NAME "Static library") + #SET(CPACK_COMPONENT_HTML_DOCUMENTATION_DISPLAY_NAME "HTML documentation") + + #SET(CPACK_COMPONENT_HEADERS_DESCRIPTION + # "C++ header files for use with the Lemon library") + #SET(CPACK_COMPONENT_LIBRARY_DESCRIPTION + # "Static library used to build programs with Lemon") + #SET(CPACK_COMPONENT_HTML_DOCUMENTATION_DESCRIPTION + # "Doxygen generated documentation") + + #SET(CPACK_COMPONENT_HEADERS_DEPENDS library) + + #SET(CPACK_COMPONENT_HEADERS_GROUP "Development") + #SET(CPACK_COMPONENT_LIBRARY_GROUP "Development") + #SET(CPACK_COMPONENT_HTML_DOCUMENTATION_GROUP "Documentation") + + #SET(CPACK_COMPONENT_GROUP_DEVELOPMENT_DESCRIPTION + # "Components needed to develop software using Lemon") + #SET(CPACK_COMPONENT_GROUP_DOCUMENTATION_DESCRIPTION + # "Documentation of Lemon") + + #SET(CPACK_ALL_INSTALL_TYPES Full Developer) + + #SET(CPACK_COMPONENT_HEADERS_INSTALL_TYPES Developer Full) + #SET(CPACK_COMPONENT_LIBRARY_INSTALL_TYPES Developer Full) + #SET(CPACK_COMPONENT_HTML_DOCUMENTATION_INSTALL_TYPES Full) + + SET(CPACK_GENERATOR "NSIS") + SET(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/cmake/nsis/lemon.ico") + SET(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/cmake/nsis/uninstall.ico") + #SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/cmake/nsis\\\\installer.bmp") + SET(CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\lemon.ico") + SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} ${PROJECT_NAME}") + SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\lemon.cs.elte.hu") + SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\lemon.cs.elte.hu") + SET(CPACK_NSIS_CONTACT "lemon-user@lemon.cs.elte.hu") + SET(CPACK_NSIS_CREATE_ICONS_EXTRA " + CreateShortCut \\\"$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\Documentation.lnk\\\" \\\"$INSTDIR\\\\doc\\\\index.html\\\" + ") + SET(CPACK_NSIS_DELETE_ICONS_EXTRA " + !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP + Delete \\\"$SMPROGRAMS\\\\$MUI_TEMP\\\\Documentation.lnk\\\" + ") + + INCLUDE(CPack) +ENDIF(WIN32) diff --git a/cmake/FindGhostscript.cmake b/cmake/FindGhostscript.cmake new file mode 100644 --- /dev/null +++ b/cmake/FindGhostscript.cmake @@ -0,0 +1,10 @@ +INCLUDE(FindPackageHandleStandardArgs) + +FIND_PROGRAM(GHOSTSCRIPT_EXECUTABLE + NAMES gs gswin32c + PATHS "$ENV{ProgramFiles}/gs" + PATH_SUFFIXES gs8.61/bin gs8.62/bin + DOC "Ghostscript: PostScript and PDF language interpreter and previewer." +) + +FIND_PACKAGE_HANDLE_STANDARD_ARGS(Ghostscript DEFAULT_MSG GHOSTSCRIPT_EXECUTABLE) diff --git a/cmake/nsis/lemon.ico b/cmake/nsis/lemon.ico new file mode 100644 index 0000000000000000000000000000000000000000..ddecde5e6e280f4dda1eda8aa2014ae4a8c0df7b GIT binary patch literal 15086 zc$~d^2Y6P+*7YfGNhe6Tf+EENA|hT3iXv4&no1EAkRrW?-XZkfAp}C`y+a@&A&o#1 zNJt3j3F+lcLVBZ!y8boiz}3(1dM(%QKM(Vqi)7wKqt=dnxaK-cz1%=$O1E zCRO$-tX6z170R*D2zkjaH@WY~ky5Stb^h&hwvKkj@kh@}uKAEW3*eYhf%l3l@n%{f z-p?t)XXVxCR$7fFX~o|w6BaN0<+Fy`4eA-E`$R~aEs*?5(D;58S_GxTwD20_<-t%6 z#h_L|I?Tu8@lI+HI^>l@`F5Jq)5oo>CwoOo>vADoD8xVRSL5B-JV--5AkXlDyf&22 z$7;{YyY50ha}V_sity&W!iQ4r`u}j~HhH?VAQ{quJlJMeppJJE)Sb5=Pw<2^=`!S{ z*I<1r0j6!YA@7KUd@>PgbRhK@ zG2Rc#qEN^Sg80q|D7)@JKAnh08Kvl!UG}4SpzlLzZZcjeu7+W*52P`dAkX!Myn+4g zj)3*S1T;F64B5$-H{08JxiEvCVMyK5JAME;HeIPl-<3r9(?JewQo*&c|K~NXd z?>p|GerPt@Ur&cT%mdOy`g3zQDORd6$*9OS;&J)uVC2v0B>H~=eL4FofEo-^MNUk1{9W~ z<;`^MS%uFUjz_~3nyJ0>-Rx4ln_2i!?b4&;zl))|Z?}2B;f=W55#?2Q%{u|L{F3lu zR1Usm>a^v;C(Ri%ZtOC%&J-=gJ!DJkyA+z4SBBI6MB{i+=l3ntu4I(r3{u zb?V6z%8J_&$}UTeawxw-cC(brF7b)-a<7Zh@KwvDPlorC8oXZrulMvnyEXQjJj$@{ zc7*I+0LkS(q&;jN#gIZvASaM-5=vl9D}^Dw3~E9#lo+=7VyJ6VhNR(@h%B^DFG7#fN{p+1h>4XCFtD;3J@~!W*^k(c%ta^Zv^oiYF+Awa_yx;1(R-aj;4NH=qNNd>lCgvO$ ze&44AN@_X&S@95`@jXqirog=58q~ShblzM*9$I}9syq41D-|^&a$yu)ye&er$9yXX zHj#PgdA}T8IZsx1@_r&Fy8gQFI$Z|$ROiP3D6P$bw2}R8=GadcLQb#XxU0~Gd7)E$ z9^{ea!r|odvE;BN0gzXa&)2elk;9me%r~+iZ)8r|P8;^e@-uS0S2~pNJoGE6LZ_li z$QR?%*rn-N-wutMH?f^_yHw;GX*Kb-iG81C-^t~uQ%Wq+cOT}LqQ>4xNJB0{8g!n% z_l7)&{JDz#Z=?Tr+=kI388w44IUmdgn>qf2ub;58;@|IsNS0 zub%baaG}Q~X;v(xC27#+eLwMjy9D-y%pJsYgD~2^ont(92h!K)AoV{9X^I!5Y4pJ& zKaQU^?2LfPF9QzD>GH}D;(`6U(! zd?GJouAiR*X(#nUa1pHXs_>7Z3OINt!Z7^`dEO6J2k&s6Z$lbE9}K4*Q<-}f5rfN^ zJJ;XBi??%O*m4^N<|26u+fHKiFzvZ`4|0eF#*A`w=R8h*@Cc@e{3p`u@78Jh)$AGa zxNt~LagdhL{}=P=_cAmh-rh{$e2+N~<0QR*c?Gey`?jV5G#f@Sr#bO&bD5Kv59<-{ z@^X%SJ@vwR#>1{CNC)E}d!|7N%ZEc=C5E%_<&PiZh2$bAlNOJCuJ48u(g==e68m4z z7!NIkF~16pi505_#P@J9*OwtV`@y)0@7{V#vq4$Soc=ZQ_K*wwJM-a0U%Ygjea#Y> z)b#+ z9u7o9_Mk5!^6++16*fHn9(K|BKUobtZjpKhvmfH$HA{>2_sFkS)Eg4@jn===o6oSm zih5%w{p-T<8O$~@5oUz{U9w4B(8|Z!^8&TQ;fep=YBl>Z@ioT;JNR-A4xsP zrJu8Z*9_QE;}5JRS8t(D#_?Ul*#GpaFf3r-^ZcPYb8Pdk>H3}X>Toj$ucs7a0`p<> z3)I_#*zZvGKaO)ZgZ^4aTV2UpN6AC}nNZ@2@J`tSyiOmR!_tx(3^|`6_2B$>XAEv8 zf73TkjFI-&)5s&#yRP)}V)}etFbvy6U|e+*hI!HPy8S9IQUY(W!vR${BD<9kXELlZdN(w z(>EhCi(s0;dGAks+=sfi`w>Xpj=2k6H4*Uc}7{q%(+UTWRFv(l5k>P$|Vmy8;$b*4Og zgckd0PuGKxI=VyZvd)6UiVqkr*6#bZI z8*e54yRrXnds#d1{`r0w#!>J0IRTmYQWo8SaS5?F(H{n4K^1)Tp$ql=DX2$dq4ek6 zw>?bE1VT9-59{cBbSSBY>-SI4ksM@PwtdyJ{A2&=q7!mg<`c%Da>If)jQ_@miHA@3 zv)@CI`W}Tem^o(*d0@sBC|hp9yodQ^80Tjuak+}|zc~z2n_V3DeqzuY%4l*{TUXW? ztar{N!W^B4P4s&&>KAitPQG04#edZaHJi0=V?F57Pf|PbnR^P}B>#0zB=-yK4>}8J zB>SE0rE#Eg;10|IsZhv^CV}rc{u)jd=3l83?d@@#<6!GgUk>+ajTc=HNMM!L1zo zM;yD!X~EcE>yJ0aZrH7KBW{<)qZVVJJ9V4g3XW}(rylpK8F%D8V_+JL8_BW5_cyXj1Sf`@}P52Ml$w9O*o5uu`Wczp3U6?bmy4HGOlc6v$KT6{9pR##g`nL%)XQ% zk7Ha1TktXaZ<|^`|ML9{IL_USH?KsPJQ>HMMNVSwnd77JqT)gvUQQ(c@p}`!wOUnn zVg6xVrce(xWWFCMFrQrlwcpSlzoq|bzufBe8dJ{|EBg{qpS5H+>eqS~$*2CJ#9WYICAoPJ+ojQuozX^4+B*sJF6FllAzN>PL9HxC%DMJWu{s z-_NesTX%f7)uHG@<$NNV=apeFW1&NA4(dc?!saqLbRPSi@1x~JWh42BJZvS#?wtao zSCXC=PRBwG&qn>6a*U@Ie=WBZrn?zQhDMER|6c#%YWBe=&EMP?nq>;hLR;#u<(#*9 z#BHM!9Opvjz{PA!m~Z#e#|JrPj|3QqZ~LTtsJ=-sv+p-7WmwBR-zK*VRw41}a`P4q z{z%`?t_Cl^Qm5I5bN*)56)jj(%zyL<6AQ~=b|I!#lY_S0fZ-~!Kuj2JXTg#Eyia{S zmb^ZL8gn*nZcYxhzZeo^eyv%(KhyUwE=zG zO{mGcah_(7GsSp^v({;nln3jOdxcih7R?mz_=|o2>uTA%Z@U+c_=njhYUKOA)97lC<~-mI03>sYV&|L53u$fo#s~(^*?x z_~X~JXPotSm;?3qiTBpv`x~;KcI*#umVt~K5bG4J*oH~JSf_aP&yL~`UDnpFmQT%x z@@E;{a(Ah&7GKpZFGk&E$yD6)N|i0SWy-FcMAhBmue#^%R1W5hm)E9!B+pH%Dg8+w z{Ee5{dT(woN>HeW29zNQ%Yb=ErsDO>!tupuIy#m zAfL@_^>-U?-j(*6;+h?%Y-BCBC6|0oAG*^)@ZcdmG2kpH|N=W==Tu%J-!rH`4yuZk*s$u^jO8_N7Qq*7>yhveUf7{}jRaf}VAUmbJ!t~C1Nn&o@xV#W&TFRZgY zz2v%k(wq#-QlH36SR<`v9qM8sUg-C;Y{wHI-QalAn9Eq7G^H=wi+u~Wp2g+(I64b^^(|M*cGAa=DN)3Z{?NZRq8&6Gx4zTNyRHM`54PQ zC)W5Da!!U)+cl@gQ2dG6vnlKTsNoHF#oO9%OFF46VSTbHUBkPyoqpfW+W!Qx?!y*U z0$WQJ>Jl%nux{%lbYYx@^&vIiO4>WcN2`P6>Hhj!)CzvKJwjW5QZ6R5#?MA`jzMPK zChy?q`=Y58@4+#?0F6=#(T?%4h-3JMcyr7omTu%cl24|6{d=}|KAG~I&FZ*NWiB-c z>o#dk4(nXnPTXr8bD6fslxk}!V(su7_VE?x|5a*tb)+Y3S*IIjP%BPgoi>eQm_tpo zjyA3ig-NVi9E*qQN3DG`8`fT|?Kj`n)-)8_FV?k;H!@jQvE9tYtEq+BTy!P2p35Mw zd8U`iN0XcU2lGueR!4g(GpKE!t#xjq&)4$4(W0&W3EP$23YZJ3(7NgoCeZ%22^J_5 zSceQ|jXTN<>O?PnFKaEav*?<>&cHDk-R?5(W2l)EU<%2G@d$P6+A#htOxtr)-1)at z)T&;LHE(Kaj-e6t_FTqzPjZwgiu2`_%4*Iv^4^44OOgTE)96PW_D9wx7&JK+Y>Yh{6yx$ zd@@0|eR~x1-(4t2Vu+)7=D%cZZA}i$h8mfVHuozrle)7>z7`8V$|us_{k82)*M{{n z&5Zm(o)%5aWa#UyOF0MI_4QsUlsSiZf4)Rtqv$H|UQmkq_wrzzLESx&_0>1535ReD zVjpX^k6s5k)Bo$KjdySi+invlcVXq94qN)a&R*(vu_nBpW7reTdPUgJIXTR@yTZ5& z%z_eGKt3(UXxje?`?Y4hE?>-W`=#w&+(Yc`Rz_yabBMuN@sO6&{#9%%Ifg^zNq^>) z)NxclC8`FVuKA7Bz_p8{z9kH|T%P%Lc}P zOQg0gD<2?!8RH@bl%Q-VQH3yOm$T-4h|R1cTHdE7iDo_JlR4n2`SNq~La!;)IDTi^ zKKGt(|2AU(GO-^;j?b+`1Lmf>eAY221@br#SkGY{KJO|FwA=m!x$k5Q45Drwd5Lj+ zQm^l)iFNF&+Mc#pyOdXl(EqV$8J7INNG+FpxT+dLSp?KjIF?B^Qok1T{$ zUM1cte+XyVKTFj50z>|}=Y;VS&qX$NoEh>&o)7_PN-U&V9K-5V=2rSX=swh}3e;w- zzDFK=EAu{->6f&%KU=ZBA@*vQ2WtGT>?W@tj)bz;I%uLy*r`X%3tULU&yw54Sqa*-+z-~9h~Z7bhm21b=FwfZVK~V9 zx3qr%%21uD5v5z+l|4rpPEQ^;b-R(po-t`=A#zJFpc=%B;q)) zOvG^Ui_<(-sso9OKB3G%cXi%8MeMUqsweal`LeO4n7*Q|<1c8jD^F&d<*DyItPuNL z)M;Bd26tj-`zDO1tLHulHFjR4-MChU!jFUw{`Z_4FuN)!=oMH~9 zzLTAUbWOp}G81C_PeKWV=^?e8h<56k`DuHT6Yr4OI$cT@Mj zQ!=E(%zKR8hLw--Sy>g#EB*An%AsfVF^s&dpL-GdQgDq}7hM*>I1sT+n|6pX5Jv~- z*E2~lo=k?aG!k~_Qt*b*1WW02p&4cbYB4Q~J)Lp1f1!>i4Oc?53cV!G5{0n#pq5kO z?&IacDr}+sAF@s}Mp&wwEDEfWd-0k6VqbwAG=??RF^-iQvw8I+d`e<+u7HOK#j{a-@7p%94DU7C&T7eEcS6%x~e;=g(94{+YhI&JekHSEQ!3#rZMW zFH_S&rgX7({Ro}tR~zbTQ*?fGgYjPFN_RfjBZOmM3=EEgbcFQ-HQ&3`_LHlbcm0#K zJwHv;&tX4KSM|MRjzOWeRMv(N*VF>Ugn>E0K<+V$GjLbZVCR>PM&$DDN@Cpwx*%gq+-}uD)2Emu_5!3A({Cpv2b*Q5eKI$z3JD_e2IUK z;cMEzD+AW4rT9wh$%{31p_xO|U|Q@0b?7-LV*k58NLiuGwq;{Rp(&T@V*CY#zn2&^li`M%!6#b_Cjj43QC{D)Kq@jzL~s&xLFmd={V&Q z=lqJkFRa8Az^1TT8f9DVD{+L68=#c?9 zGe*HM#SbdAj=GYu(S8qobp*;>;-@Fy*_Q8VyB{)Z2SuDQ5S$}4D07w^l&Nu!kz8Jb zwa0f4A7d2lx6denIleGV($5?z^~PL^R(i7j>q7hc(Eg>#Fea6vJMEuN`#%gx*6r|oB@ALD1r?ng)^046+^A-JWPA_5YQHAdG{k|tpu!i>ABp1Tw zcK*m`^-Hs{C)Xoif9t!i8dMOd+C<|(3m!K_Ue)r?=wY=4VwXhPFmoEKcukWQ%hdwb4I`fm< z(G$|g)Ivj<_ih#74c1$|srz5|rk3i;x$bcYQV-5Uk0X#jKTLler9NXD$T%2G--+`O z%n9n&a9Fv9Yc;VvEdYiUoSQYFP+31J{rKER9Jknm9qU7#N1Zf}xNk=Pzqeh}CgIjd_6*19V7r%LX$zCg|Jtp}8`KAQdVf@@lxtGE&` z;+c@rq<2e`SnFf=OKfXX)na|e6!NA&~BXdCC(h8WIXyX9(J&;6Ly^;jz7T6cTd5hu_uCRfU5U5u^g|c6FU~+2=c%7*SVRu? zNQO$iW|dKjPpEg!68B?ihxuONk2Rz6Km3igE9)1=ol7(iV+^z-mpU&Ot=Cv==x+nML9)x64K>ILcx zt6S6r8#$hl^y_$zVfNECtm&6EjjHaVraMRdd?8WSYyvN$wx8{%)e7=Hk+Tx$`!pCL zENDpFi!*Kgh#R}iVt$sp<#%k?u60*#*}dR&KFB=o3Zw_2TRxJ2eU(+|QyQXXA z4fOjVY6O9s;B=VI5nrR|_X+grVxg(8=<5!1$w$M zBaGK`dYxrp&1=P+HH@`~6S=-|ZV8NcEd`DV1^@UX_KWL{K`ymxO+FRpu=y_JqlqxZ z7T{fKj$Rx?%alBrc8K*7`t#&nm~Usn`WEX8F&`t(={3y)Ppzg=b_i`3teqo~kI}!E z#kzSG^Dwa@)>(vhbqUwBf^sd5c8dQK!8)D#U6G#s5Jm#b@OBspR{H^t&Ockhm}2BmKpF z)jUwy7EK}8s0C%5XSN%YKr-ljO&6@yp@sG&tPNMGH%*cD8OC@%~TNg=$zfOmPL`9In-W zWBV^I;};&$>umN!{vghTG^EX484D}e-wMt}x70l9{2+ZjLd?NZ>d!r_6@17i7m1y# zN#qaaqwG>VUs!>re7-N+=#mO7qaVb&nv+TUV`dTSn}^u&P}B$y(K;;;Hpj#oXc(-{lV@&{OZx=bd0Q`-92gZ2RS9Mx}E|<;JpW? z@XW1_cP)SFEYV-R_NC?5=o*}{#Qs7|g&{ZvwX+If&(@V=m_&YBMjwl_Mhl7Q&uO2o8PR&Ja zVyH%R3Tmb0qDj_$a$pf&PRYef%oz<5b6Ib*p7Mw@8~Lr(1gb}{;^f&fP`urub6!6OED4ZnJ71_ko0c${z-qU&H8~M z-o-&BaWA956Zb&zNB(o>eX;hVB(;;IpTxbPBs~)M8j@5d?&hEG8RAZb82I!q9+%|* zegFS@{knhk=X;>In}5D%hnGuJ&F^M$|9@VQWoiHb diff --git a/cmake/nsis/uninstall.ico b/cmake/nsis/uninstall.ico new file mode 100644 index 0000000000000000000000000000000000000000..7495f7c3c270c2a2ff3bd0fb9d42c1aea67c3c41 GIT binary patch literal 15086 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 h86n3_asON@]), @@ -47,7 +48,7 @@ fi AM_CONDITIONAL([WANT_DEMO], [test x"$enable_demo" != x"no"]) -dnl Disable/enable building the binary tools +dnl Disable/enable building the binary tools. AC_ARG_ENABLE([tools], AS_HELP_STRING([--enable-tools], [build additional tools @<:@default@:>@]) AS_HELP_STRING([--disable-tools], [do not build additional tools]), @@ -60,7 +61,7 @@ fi AM_CONDITIONAL([WANT_TOOLS], [test x"$enable_tools" != x"no"]) -dnl Disable/enable building the benchmarks +dnl Disable/enable building the benchmarks. AC_ARG_ENABLE([benchmark], AS_HELP_STRING([--enable-benchmark], [build the benchmarks]) AS_HELP_STRING([--disable-benchmark], [do not build the benchmarks @<:@default@:>@]), diff --git a/demo/CMakeLists.txt b/demo/CMakeLists.txt --- a/demo/CMakeLists.txt +++ b/demo/CMakeLists.txt @@ -1,13 +1,13 @@ -include_directories (${LEMON_SOURCE_DIR}) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) -link_directories (${LEMON_BINARY_DIR}/lemon) +LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/lemon) -set (DEMOS +SET(DEMOS arg_parser_demo graph_to_eps_demo lgf_demo) -foreach (DEMO_NAME ${DEMOS}) - add_executable (${DEMO_NAME} ${DEMO_NAME}.cc) - target_link_libraries (${DEMO_NAME} lemon) - endforeach (DEMO_NAME) +FOREACH(DEMO_NAME ${DEMOS}) + ADD_EXECUTABLE(${DEMO_NAME} ${DEMO_NAME}.cc) + TARGET_LINK_LIBRARIES(${DEMO_NAME} lemon) +ENDFOREACH(DEMO_NAME) diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/doc/CMakeLists.txt @@ -0,0 +1,42 @@ +SET(PACKAGE_NAME ${PROJECT_NAME}) +SET(PACKAGE_VERSION ${PROJECT_VERSION}) +SET(abs_top_srcdir ${CMAKE_SOURCE_DIR}) +SET(abs_top_builddir ${CMAKE_BINARY_DIR}) + +CONFIGURE_FILE( + ${CMAKE_SOURCE_DIR}/doc/Doxyfile.in + ${CMAKE_BINARY_DIR}/doc/Doxyfile + @ONLY) + +IF(DOXYGEN_EXECUTABLE AND GHOSTSCRIPT_EXECUTABLE) + IF(UNIX) + ADD_CUSTOM_TARGET(html + COMMAND rm -rf gen-images + COMMAND mkdir gen-images + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_0.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_0.eps + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_1.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_1.eps + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_2.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_2.eps + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_3.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_3.eps + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_4.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_4.eps + COMMAND rm -rf html + COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + ELSEIF(WIN32) + ADD_CUSTOM_TARGET(html + COMMAND if exist gen-images rmdir /s /q gen-images + COMMAND mkdir gen-images + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_0.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_0.eps + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_1.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_1.eps + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_2.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_2.eps + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_3.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_3.eps + COMMAND ${GHOSTSCRIPT_EXECUTABLE} -dNOPAUSE -dBATCH -q -dEPSCrop -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=pngalpha -r18 -sOutputFile=gen-images/nodeshape_4.png ${CMAKE_CURRENT_SOURCE_DIR}/images/nodeshape_4.eps + COMMAND if exist html rmdir /s /q html + COMMAND ${DOXYGEN_EXECUTABLE} Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) + ENDIF(UNIX) +ENDIF(DOXYGEN_EXECUTABLE AND GHOSTSCRIPT_EXECUTABLE) + +INSTALL( + DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/ + DESTINATION doc + COMPONENT html_documentation) diff --git a/lemon/CMakeLists.txt b/lemon/CMakeLists.txt --- a/lemon/CMakeLists.txt +++ b/lemon/CMakeLists.txt @@ -1,2 +1,18 @@ -include_directories (${LEMON_SOURCE_DIR}) -add_library (lemon arg_parser.cc base.cc color.cc random.cc) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) + +ADD_LIBRARY(lemon + arg_parser.cc + base.cc + color.cc + random.cc) + +INSTALL( + TARGETS lemon + ARCHIVE DESTINATION lib + COMPONENT library) + +INSTALL( + DIRECTORY . bits concepts + DESTINATION include/lemon + COMPONENT headers + FILES_MATCHING PATTERN "*.h") diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,8 +1,8 @@ -include_directories (${LEMON_SOURCE_DIR}) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}) -link_directories (${LEMON_BINARY_DIR}/lemon) +LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/lemon) -set (TESTS +SET(TESTS bfs_test counter_test dfs_test @@ -16,13 +16,13 @@ heap_test kruskal_test maps_test + random_test path_test - random_test time_measure_test unionfind_test) -foreach (TEST_NAME ${TESTS}) - add_executable (${TEST_NAME} ${TEST_NAME}.cc) - target_link_libraries (${TEST_NAME} lemon) - add_test(${TEST_NAME} ${TEST_NAME}) -endforeach (TEST_NAME) +FOREACH(TEST_NAME ${TESTS}) + ADD_EXECUTABLE(${TEST_NAME} ${TEST_NAME}.cc) + TARGET_LINK_LIBRARIES(${TEST_NAME} lemon) + ADD_TEST(${TEST_NAME} ${TEST_NAME}) +ENDFOREACH(TEST_NAME)